{"version":3,"file":"echarts.js","sources":["../src/config.js","../../zrender/src/core/guid.js","../../zrender/src/core/env.js","../../zrender/src/core/util.js","../../zrender/src/core/vector.js","../../zrender/src/mixin/Draggable.js","../../zrender/src/mixin/Eventful.js","../../zrender/src/core/fourPointsTransform.js","../../zrender/src/core/event.js","../../zrender/src/core/GestureMgr.js","../../zrender/src/Handler.js","../../zrender/src/core/matrix.js","../../zrender/src/mixin/Transformable.js","../../zrender/src/animation/easing.js","../../zrender/src/animation/Clip.js","../../zrender/src/core/LRU.js","../../zrender/src/tool/color.js","../../zrender/src/animation/Animator.js","../../zrender/src/config.js","../../zrender/src/core/log.js","../../zrender/src/mixin/Animatable.js","../../zrender/src/Element.js","../../zrender/src/core/BoundingRect.js","../../zrender/src/container/Group.js","../../zrender/src/core/timsort.js","../../zrender/src/Storage.js","../../zrender/src/graphic/helper/fixShadow.js","../../zrender/src/graphic/constant.js","../../zrender/src/graphic/Style.js","../../zrender/src/graphic/Pattern.js","../../zrender/src/Layer.js","../../zrender/src/animation/requestAnimationFrame.js","../../zrender/src/graphic/helper/image.js","../../zrender/src/contain/text.js","../../zrender/src/graphic/helper/roundRect.js","../../zrender/src/graphic/helper/text.js","../../zrender/src/graphic/mixin/RectText.js","../../zrender/src/graphic/Displayable.js","../../zrender/src/graphic/Image.js","../../zrender/src/Painter.js","../../zrender/src/animation/Animation.js","../../zrender/src/dom/HandlerProxy.js","../../zrender/src/zrender.js","../src/util/model.js","../src/util/clazz.js","../src/model/mixin/makeStyleMapper.js","../src/model/mixin/lineStyle.js","../src/model/mixin/areaStyle.js","../../zrender/src/core/curve.js","../../zrender/src/core/bbox.js","../../zrender/src/core/PathProxy.js","../../zrender/src/contain/line.js","../../zrender/src/contain/cubic.js","../../zrender/src/contain/quadratic.js","../../zrender/src/contain/util.js","../../zrender/src/contain/arc.js","../../zrender/src/contain/windingLine.js","../../zrender/src/contain/path.js","../../zrender/src/graphic/Path.js","../../zrender/src/tool/transformPath.js","../../zrender/src/tool/path.js","../../zrender/src/graphic/Text.js","../../zrender/src/graphic/shape/Circle.js","../../zrender/src/graphic/helper/fixClipWithShadow.js","../../zrender/src/graphic/shape/Sector.js","../../zrender/src/graphic/shape/Ring.js","../../zrender/src/graphic/helper/smoothSpline.js","../../zrender/src/graphic/helper/smoothBezier.js","../../zrender/src/graphic/helper/poly.js","../../zrender/src/graphic/shape/Polygon.js","../../zrender/src/graphic/shape/Polyline.js","../../zrender/src/graphic/helper/subPixelOptimize.js","../../zrender/src/graphic/shape/Rect.js","../../zrender/src/graphic/shape/Line.js","../../zrender/src/graphic/shape/BezierCurve.js","../../zrender/src/graphic/shape/Arc.js","../../zrender/src/graphic/CompoundPath.js","../../zrender/src/graphic/Gradient.js","../../zrender/src/graphic/LinearGradient.js","../../zrender/src/graphic/RadialGradient.js","../../zrender/src/graphic/IncrementalDisplayable.js","../src/util/graphic.js","../src/model/mixin/textStyle.js","../src/model/mixin/itemStyle.js","../src/model/Model.js","../src/util/component.js","../src/util/number.js","../src/util/format.js","../src/util/layout.js","../src/model/mixin/boxLayout.js","../src/model/Component.js","../src/model/globalDefault.js","../src/model/mixin/colorPalette.js","../src/model/referHelper.js","../src/data/helper/sourceType.js","../src/data/Source.js","../src/data/helper/sourceHelper.js","../src/model/Global.js","../src/ExtensionAPI.js","../src/CoordinateSystem.js","../src/model/OptionManager.js","../src/preprocessor/helper/compatStyle.js","../src/preprocessor/backwardCompat.js","../src/processor/dataStack.js","../src/data/helper/dataProvider.js","../src/model/mixin/dataFormat.js","../src/stream/task.js","../src/model/Series.js","../src/view/Component.js","../src/chart/helper/createRenderPlanner.js","../src/view/Chart.js","../src/util/throttle.js","../src/visual/seriesColor.js","../src/lang.js","../src/visual/aria.js","../src/loading/default.js","../src/stream/Scheduler.js","../src/theme/light.js","../src/theme/dark.js","../src/component/dataset.js","../../zrender/src/graphic/shape/Ellipse.js","../../zrender/src/tool/parseSVG.js","../src/coord/geo/mapDataStorage.js","../src/echarts.js","../src/data/DataDiffer.js","../src/data/helper/dimensionHelper.js","../src/data/List.js","../src/data/helper/completeDimensions.js","../src/data/helper/createDimensions.js","../src/data/helper/dataStackHelper.js","../src/chart/helper/createListFromArray.js","../src/scale/Scale.js","../src/data/OrdinalMeta.js","../src/scale/Ordinal.js","../src/scale/helper.js","../src/scale/Interval.js","../src/layout/barGrid.js","../src/scale/Time.js","../src/scale/Log.js","../src/coord/axisHelper.js","../src/coord/axisModelCommonMixin.js","../src/util/symbol.js","../src/helper.js","../../zrender/src/contain/polygon.js","../src/coord/geo/Region.js","../src/coord/geo/parseGeoJson.js","../src/coord/axisTickLabelBuilder.js","../src/coord/Axis.js","../src/export.js","../src/chart/line/LineSeries.js","../src/chart/helper/labelHelper.js","../src/chart/helper/Symbol.js","../src/chart/helper/SymbolDraw.js","../src/chart/line/helper.js","../src/chart/line/lineAnimationDiff.js","../src/chart/line/poly.js","../src/chart/helper/createClipPathFromCoordSys.js","../src/chart/line/LineView.js","../src/visual/symbol.js","../src/layout/points.js","../src/processor/dataSample.js","../src/coord/cartesian/Cartesian.js","../src/coord/cartesian/Cartesian2D.js","../src/coord/cartesian/Axis2D.js","../src/coord/axisDefault.js","../src/coord/axisModelCreator.js","../src/coord/cartesian/AxisModel.js","../src/coord/cartesian/GridModel.js","../src/coord/cartesian/Grid.js","../src/component/axis/AxisBuilder.js","../src/component/axisPointer/modelHelper.js","../src/component/axis/AxisView.js","../src/coord/cartesian/cartesianAxisHelper.js","../src/component/axis/CartesianAxisView.js","../src/component/axis.js","../src/component/gridSimple.js","../src/chart/line.js","../src/chart/bar/BaseBarSeries.js","../src/chart/bar/BarSeries.js","../src/chart/bar/helper.js","../src/chart/bar/barItemStyle.js","../src/util/shape/sausage.js","../src/chart/bar/BarView.js","../src/chart/bar.js","../src/chart/helper/createListSimply.js","../src/component/helper/selectableMixin.js","../src/chart/pie/PieSeries.js","../src/chart/pie/PieView.js","../src/action/createDataSelectAction.js","../src/visual/dataColor.js","../src/chart/pie/labelLayout.js","../src/chart/pie/pieLayout.js","../src/processor/dataFilter.js","../src/chart/pie.js","../src/chart/scatter/ScatterSeries.js","../src/chart/helper/LargeSymbolDraw.js","../src/chart/scatter/ScatterView.js","../src/chart/scatter.js","../src/coord/radar/IndicatorAxis.js","../src/coord/radar/Radar.js","../src/coord/radar/RadarModel.js","../src/component/radar/RadarView.js","../src/component/radar.js","../src/chart/radar/RadarSeries.js","../src/chart/radar/RadarView.js","../src/chart/radar/radarLayout.js","../src/chart/radar/backwardCompat.js","../src/chart/radar.js","../src/coord/geo/fix/nanhai.js","../src/coord/geo/fix/textCoord.js","../src/coord/geo/fix/geoCoord.js","../src/coord/geo/fix/diaoyuIsland.js","../src/coord/geo/geoJSONLoader.js","../src/coord/geo/geoSVGLoader.js","../src/coord/geo/geoSourceManager.js","../src/chart/map/MapSeries.js","../src/component/helper/interactionMutex.js","../src/component/helper/RoamController.js","../src/component/helper/roamHelper.js","../src/component/helper/cursorHelper.js","../src/component/helper/MapDraw.js","../src/chart/map/MapView.js","../src/action/roamHelper.js","../src/action/geoRoam.js","../src/coord/View.js","../src/coord/geo/Geo.js","../src/coord/geo/geoCreator.js","../src/chart/map/mapSymbolLayout.js","../src/chart/map/mapVisual.js","../src/chart/map/mapDataStatistic.js","../src/chart/map/backwardCompat.js","../src/chart/map.js","../src/data/helper/linkList.js","../src/data/Tree.js","../src/chart/tree/TreeSeries.js","../src/chart/tree/layoutHelper.js","../src/chart/tree/TreeView.js","../src/chart/tree/treeAction.js","../src/chart/tree/traversalHelper.js","../src/chart/tree/treeLayout.js","../src/chart/tree.js","../src/chart/helper/treeHelper.js","../src/chart/treemap/TreemapSeries.js","../src/chart/treemap/Breadcrumb.js","../src/util/animation.js","../src/chart/treemap/TreemapView.js","../src/chart/treemap/treemapAction.js","../src/visual/VisualMapping.js","../src/chart/treemap/treemapVisual.js","../src/chart/treemap/treemapLayout.js","../src/chart/treemap.js","../src/data/Graph.js","../src/chart/helper/createGraphFromNodeEdge.js","../src/chart/graph/GraphSeries.js","../src/chart/helper/LinePath.js","../src/chart/helper/Line.js","../src/chart/helper/LineDraw.js","../src/chart/graph/graphHelper.js","../src/chart/graph/adjustEdge.js","../src/chart/graph/GraphView.js","../src/chart/helper/focusNodeAdjacencyAction.js","../src/chart/graph/graphAction.js","../src/chart/graph/categoryFilter.js","../src/chart/graph/categoryVisual.js","../src/chart/graph/edgeVisual.js","../src/chart/graph/simpleLayoutHelper.js","../src/chart/graph/simpleLayout.js","../src/chart/graph/circularLayoutHelper.js","../src/chart/graph/circularLayout.js","../src/chart/graph/forceHelper.js","../src/chart/graph/forceLayout.js","../src/chart/graph/createView.js","../src/chart/graph.js","../src/chart/gauge/GaugeSeries.js","../src/chart/gauge/PointerPath.js","../src/chart/gauge/GaugeView.js","../src/chart/gauge.js","../src/chart/funnel/FunnelSeries.js","../src/chart/funnel/FunnelView.js","../src/chart/funnel/funnelLayout.js","../src/chart/funnel.js","../src/coord/parallel/parallelPreprocessor.js","../src/coord/parallel/ParallelAxis.js","../src/component/helper/sliderMove.js","../src/coord/parallel/Parallel.js","../src/coord/parallel/parallelCreator.js","../src/coord/parallel/AxisModel.js","../src/coord/parallel/ParallelModel.js","../src/component/axis/parallelAxisAction.js","../src/component/helper/BrushController.js","../src/component/helper/brushHelper.js","../src/component/axis/ParallelAxisView.js","../src/component/parallelAxis.js","../src/component/parallel.js","../src/chart/parallel/ParallelSeries.js","../src/chart/parallel/ParallelView.js","../src/chart/parallel/parallelVisual.js","../src/chart/parallel.js","../src/chart/sankey/SankeySeries.js","../src/chart/sankey/SankeyView.js","../src/chart/sankey/sankeyAction.js","../src/chart/sankey/sankeyLayout.js","../src/chart/sankey/sankeyVisual.js","../src/chart/sankey.js","../src/chart/helper/whiskerBoxCommon.js","../src/chart/boxplot/BoxplotSeries.js","../src/chart/boxplot/BoxplotView.js","../src/chart/boxplot/boxplotVisual.js","../src/chart/boxplot/boxplotLayout.js","../src/chart/boxplot.js","../src/chart/candlestick/CandlestickSeries.js","../src/chart/candlestick/CandlestickView.js","../src/chart/candlestick/preprocessor.js","../src/chart/candlestick/candlestickVisual.js","../src/chart/candlestick/candlestickLayout.js","../src/chart/candlestick.js","../src/chart/effectScatter/EffectScatterSeries.js","../src/chart/helper/EffectSymbol.js","../src/chart/effectScatter/EffectScatterView.js","../src/chart/effectScatter.js","../src/chart/lines/LinesSeries.js","../src/chart/helper/EffectLine.js","../src/chart/helper/Polyline.js","../src/chart/helper/EffectPolyline.js","../src/chart/helper/LargeLineDraw.js","../src/chart/lines/linesLayout.js","../src/chart/lines/LinesView.js","../src/chart/lines/linesVisual.js","../src/chart/lines.js","../src/chart/heatmap/HeatmapSeries.js","../src/chart/heatmap/HeatmapLayer.js","../src/chart/heatmap/HeatmapView.js","../src/chart/heatmap.js","../src/chart/bar/PictorialBarSeries.js","../src/chart/bar/PictorialBarView.js","../src/chart/pictorialBar.js","../src/coord/single/SingleAxis.js","../src/coord/single/Single.js","../src/coord/single/singleCreator.js","../src/coord/single/singleAxisHelper.js","../src/component/axis/SingleAxisView.js","../src/coord/single/AxisModel.js","../src/component/axisPointer/findPointFromSeries.js","../src/component/axisPointer/axisTrigger.js","../src/component/axisPointer/AxisPointerModel.js","../src/component/axisPointer/globalListener.js","../src/component/axisPointer/AxisPointerView.js","../src/component/axisPointer/BaseAxisPointer.js","../src/component/axisPointer/viewHelper.js","../src/component/axisPointer/CartesianAxisPointer.js","../src/component/axisPointer.js","../src/component/axisPointer/SingleAxisPointer.js","../src/component/singleAxis.js","../src/chart/themeRiver/ThemeRiverSeries.js","../src/chart/themeRiver/ThemeRiverView.js","../src/chart/themeRiver/themeRiverLayout.js","../src/chart/themeRiver/themeRiverVisual.js","../src/chart/themeRiver.js","../src/chart/sunburst/SunburstSeries.js","../src/chart/sunburst/SunburstPiece.js","../src/chart/sunburst/SunburstView.js","../src/chart/sunburst/sunburstAction.js","../src/chart/sunburst/sunburstLayout.js","../src/chart/sunburst.js","../src/coord/cartesian/prepareCustom.js","../src/coord/geo/prepareCustom.js","../src/coord/single/prepareCustom.js","../src/coord/polar/prepareCustom.js","../src/coord/calendar/prepareCustom.js","../src/chart/custom.js","../src/component/grid.js","../src/layout/barPolar.js","../src/coord/polar/RadiusAxis.js","../src/coord/polar/AngleAxis.js","../src/coord/polar/Polar.js","../src/coord/polar/AxisModel.js","../src/coord/polar/PolarModel.js","../src/coord/polar/polarCreator.js","../src/component/axis/AngleAxisView.js","../src/component/angleAxis.js","../src/component/axis/RadiusAxisView.js","../src/component/radiusAxis.js","../src/component/axisPointer/PolarAxisPointer.js","../src/component/polar.js","../src/coord/geo/GeoModel.js","../src/component/geo/GeoView.js","../src/component/geo.js","../src/coord/calendar/Calendar.js","../src/coord/calendar/CalendarModel.js","../src/component/calendar/CalendarView.js","../src/component/calendar.js","../src/component/graphic.js","../src/component/toolbox/featureManager.js","../src/component/toolbox/ToolboxModel.js","../src/component/helper/listComponent.js","../src/component/toolbox/ToolboxView.js","../src/component/toolbox/feature/SaveAsImage.js","../src/component/toolbox/feature/MagicType.js","../src/component/toolbox/feature/DataView.js","../src/component/helper/BrushTargetManager.js","../src/component/dataZoom/history.js","../src/component/dataZoom/typeDefaulter.js","../src/component/dataZoom/helper.js","../src/component/dataZoom/AxisProxy.js","../src/component/dataZoom/DataZoomModel.js","../src/component/dataZoom/DataZoomView.js","../src/component/dataZoom/SelectZoomModel.js","../src/component/dataZoom/SelectZoomView.js","../src/component/dataZoom/dataZoomProcessor.js","../src/component/dataZoom/dataZoomAction.js","../src/component/dataZoomSelect.js","../src/component/toolbox/feature/DataZoom.js","../src/component/toolbox/feature/Restore.js","../src/component/toolbox.js","../src/component/tooltip/TooltipModel.js","../src/component/tooltip/TooltipContent.js","../src/component/tooltip/TooltipRichContent.js","../src/component/tooltip/TooltipView.js","../src/component/tooltip.js","../src/component/brush/preprocessor.js","../src/visual/visualSolution.js","../src/component/brush/selector.js","../src/component/brush/visualEncoding.js","../src/component/brush/BrushModel.js","../src/component/brush/BrushView.js","../src/component/brush/brushAction.js","../src/component/toolbox/feature/Brush.js","../src/component/brush.js","../src/component/title.js","../src/component/timeline/preprocessor.js","../src/component/timeline/typeDefaulter.js","../src/component/timeline/timelineAction.js","../src/component/timeline/TimelineModel.js","../src/component/timeline/SliderTimelineModel.js","../src/component/timeline/TimelineView.js","../src/component/timeline/TimelineAxis.js","../src/component/timeline/SliderTimelineView.js","../src/component/timeline.js","../src/component/marker/MarkerModel.js","../src/component/marker/MarkPointModel.js","../src/component/marker/markerHelper.js","../src/component/marker/MarkerView.js","../src/component/marker/MarkPointView.js","../src/component/markPoint.js","../src/component/marker/MarkLineModel.js","../src/component/marker/MarkLineView.js","../src/component/markLine.js","../src/component/marker/MarkAreaModel.js","../src/component/marker/MarkAreaView.js","../src/component/markArea.js","../src/component/legend/LegendModel.js","../src/component/legend/legendAction.js","../src/component/legend/LegendView.js","../src/component/legend/legendFilter.js","../src/component/legend.js","../src/component/legend/ScrollableLegendModel.js","../src/component/legend/ScrollableLegendView.js","../src/component/legend/scrollableLegendAction.js","../src/component/legendScroll.js","../src/component/dataZoom/SliderZoomModel.js","../src/component/dataZoom/SliderZoomView.js","../src/component/dataZoomSlider.js","../src/component/dataZoom/InsideZoomModel.js","../src/component/dataZoom/roams.js","../src/component/dataZoom/InsideZoomView.js","../src/component/dataZoomInside.js","../src/component/dataZoom.js","../src/component/visualMap/preprocessor.js","../src/component/visualMap/typeDefaulter.js","../src/component/visualMap/visualEncoding.js","../src/visual/visualDefault.js","../src/component/visualMap/VisualMapModel.js","../src/component/visualMap/ContinuousModel.js","../src/component/visualMap/VisualMapView.js","../src/component/visualMap/helper.js","../src/component/visualMap/ContinuousView.js","../src/component/visualMap/visualMapAction.js","../src/component/visualMapContinuous.js","../src/component/visualMap/PiecewiseModel.js","../src/component/visualMap/PiecewiseView.js","../src/component/visualMapPiecewise.js","../src/component/visualMap.js","../../zrender/src/vml/core.js","../../zrender/src/vml/graphic.js","../../zrender/src/vml/Painter.js","../../zrender/src/vml/vml.js","../../zrender/src/svg/core.js","../../zrender/src/svg/graphic.js","../../zrender/src/core/arrayDiff2.js","../../zrender/src/svg/helper/Definable.js","../../zrender/src/svg/helper/GradientManager.js","../../zrender/src/svg/helper/ClippathManager.js","../../zrender/src/svg/helper/ShadowManager.js","../../zrender/src/svg/Painter.js","../../zrender/src/svg/svg.js","../echarts.all.js"],"sourcesContent":["/*\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// (1) The code `if (__DEV__) ...` can be removed by build tool.\n// (2) If intend to use `__DEV__`, this module should be imported. Use a global\n// variable `__DEV__` may cause that miss the declaration (see #6535), or the\n// declaration is behind of the using position (for example in `Model.extent`,\n// And tools like rollup can not analysis the dependency if not import).\n\nvar dev;\n\n// In browser\nif (typeof window !== 'undefined') {\n    dev = window.__DEV__;\n}\n// In node\nelse if (typeof global !== 'undefined') {\n    dev = global.__DEV__;\n}\n\nif (typeof dev === 'undefined') {\n    dev = true;\n}\n\nexport var __DEV__ = dev;\n","/**\n * zrender: 生成唯一id\n *\n * @author errorrik (errorrik@gmail.com)\n */\n\nvar idStart = 0x0907;\n\nexport default function () {\n    return idStart++;\n}","/**\n * echarts设备环境识别\n *\n * @desc echarts基于Canvas，纯Javascript图表库，提供直观，生动，可交互，可个性化定制的数据统计图表。\n * @author firede[firede@firede.us]\n * @desc thanks zepto.\n */\n\n/* global wx */\n\nvar env = {};\n\nif (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') {\n    // In Weixin Application\n    env = {\n        browser: {},\n        os: {},\n        node: false,\n        wxa: true, // Weixin Application\n        canvasSupported: true,\n        svgSupported: false,\n        touchEventsSupported: true,\n        domSupported: false\n    };\n}\nelse if (typeof document === 'undefined' && typeof self !== 'undefined') {\n    // In worker\n    env = {\n        browser: {},\n        os: {},\n        node: false,\n        worker: true,\n        canvasSupported: true,\n        domSupported: false\n    };\n}\nelse if (typeof navigator === 'undefined') {\n    // In node\n    env = {\n        browser: {},\n        os: {},\n        node: true,\n        worker: false,\n        // Assume canvas is supported\n        canvasSupported: true,\n        svgSupported: true,\n        domSupported: false\n    };\n}\nelse {\n    env = detect(navigator.userAgent);\n}\n\nexport default env;\n\n// Zepto.js\n// (c) 2010-2013 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\n\nfunction detect(ua) {\n    var os = {};\n    var browser = {};\n    // var webkit = ua.match(/Web[kK]it[\\/]{0,1}([\\d.]+)/);\n    // var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n    // var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n    // var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n    // var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n    // var webos = ua.match(/(webOS|hpwOS)[\\s\\/]([\\d.]+)/);\n    // var touchpad = webos && ua.match(/TouchPad/);\n    // var kindle = ua.match(/Kindle\\/([\\d.]+)/);\n    // var silk = ua.match(/Silk\\/([\\d._]+)/);\n    // var blackberry = ua.match(/(BlackBerry).*Version\\/([\\d.]+)/);\n    // var bb10 = ua.match(/(BB10).*Version\\/([\\d.]+)/);\n    // var rimtabletos = ua.match(/(RIM\\sTablet\\sOS)\\s([\\d.]+)/);\n    // var playbook = ua.match(/PlayBook/);\n    // var chrome = ua.match(/Chrome\\/([\\d.]+)/) || ua.match(/CriOS\\/([\\d.]+)/);\n    var firefox = ua.match(/Firefox\\/([\\d.]+)/);\n    // var safari = webkit && ua.match(/Mobile\\//) && !chrome;\n    // var webview = ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome;\n    var ie = ua.match(/MSIE\\s([\\d.]+)/)\n        // IE 11 Trident/7.0; rv:11.0\n        || ua.match(/Trident\\/.+?rv:(([\\d.]+))/);\n    var edge = ua.match(/Edge\\/([\\d.]+)/); // IE 12 and 12+\n\n    var weChat = (/micromessenger/i).test(ua);\n\n    // Todo: clean this up with a better OS/browser seperation:\n    // - discern (more) between multiple browsers on android\n    // - decide if kindle fire in silk mode is android or not\n    // - Firefox on Android doesn't specify the Android version\n    // - possibly devide in os, device and browser hashes\n\n    // if (browser.webkit = !!webkit) browser.version = webkit[1];\n\n    // if (android) os.android = true, os.version = android[2];\n    // if (iphone && !ipod) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.');\n    // if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.');\n    // if (ipod) os.ios = os.ipod = true, os.version = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n    // if (webos) os.webos = true, os.version = webos[2];\n    // if (touchpad) os.touchpad = true;\n    // if (blackberry) os.blackberry = true, os.version = blackberry[2];\n    // if (bb10) os.bb10 = true, os.version = bb10[2];\n    // if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2];\n    // if (playbook) browser.playbook = true;\n    // if (kindle) os.kindle = true, os.version = kindle[1];\n    // if (silk) browser.silk = true, browser.version = silk[1];\n    // if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true;\n    // if (chrome) browser.chrome = true, browser.version = chrome[1];\n    if (firefox) {\n        browser.firefox = true;\n        browser.version = firefox[1];\n    }\n    // if (safari && (ua.match(/Safari/) || !!os.ios)) browser.safari = true;\n    // if (webview) browser.webview = true;\n\n    if (ie) {\n        browser.ie = true;\n        browser.version = ie[1];\n    }\n\n    if (edge) {\n        browser.edge = true;\n        browser.version = edge[1];\n    }\n\n    // It is difficult to detect WeChat in Win Phone precisely, because ua can\n    // not be set on win phone. So we do not consider Win Phone.\n    if (weChat) {\n        browser.weChat = true;\n    }\n\n    // os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) ||\n    //     (firefox && ua.match(/Tablet/)) || (ie && !ua.match(/Phone/) && ua.match(/Touch/)));\n    // os.phone  = !!(!os.tablet && !os.ipod && (android || iphone || webos ||\n    //     (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\\/([\\d.]+)/)) ||\n    //     (firefox && ua.match(/Mobile/)) || (ie && ua.match(/Touch/))));\n\n    return {\n        browser: browser,\n        os: os,\n        node: false,\n        // 原生canvas支持，改极端点了\n        // canvasSupported : !(browser.ie && parseFloat(browser.version) < 9)\n        canvasSupported: !!document.createElement('canvas').getContext,\n        svgSupported: typeof SVGRect !== 'undefined',\n        // works on most browsers\n        // IE10/11 does not support touch event, and MS Edge supports them but not by\n        // default, so we dont check navigator.maxTouchPoints for them here.\n        touchEventsSupported: 'ontouchstart' in window && !browser.ie && !browser.edge,\n        // <http://caniuse.com/#search=pointer%20event>.\n        pointerEventsSupported: 'onpointerdown' in window\n            // Firefox supports pointer but not by default, only MS browsers are reliable on pointer\n            // events currently. So we dont use that on other browsers unless tested sufficiently.\n            // Although IE 10 supports pointer event, it use old style and is different from the\n            // standard. So we exclude that. (IE 10 is hardly used on touch device)\n            && (browser.edge || (browser.ie && browser.version >= 11)),\n        // passiveSupported: detectPassiveSupport()\n        domSupported: typeof document !== 'undefined'\n    };\n}\n\n// See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n// function detectPassiveSupport() {\n//     // Test via a getter in the options object to see if the passive property is accessed\n//     var supportsPassive = false;\n//     try {\n//         var opts = Object.defineProperty({}, 'passive', {\n//             get: function() {\n//                 supportsPassive = true;\n//             }\n//         });\n//         window.addEventListener('testPassive', function() {}, opts);\n//     } catch (e) {\n//     }\n//     return supportsPassive;\n// }\n","/**\n * @module zrender/core/util\n */\n\n// 用于处理merge时无法遍历Date等对象的问题\nvar BUILTIN_OBJECT = {\n    '[object Function]': 1,\n    '[object RegExp]': 1,\n    '[object Date]': 1,\n    '[object Error]': 1,\n    '[object CanvasGradient]': 1,\n    '[object CanvasPattern]': 1,\n    // For node-canvas\n    '[object Image]': 1,\n    '[object Canvas]': 1\n};\n\nvar TYPED_ARRAY = {\n    '[object Int8Array]': 1,\n    '[object Uint8Array]': 1,\n    '[object Uint8ClampedArray]': 1,\n    '[object Int16Array]': 1,\n    '[object Uint16Array]': 1,\n    '[object Int32Array]': 1,\n    '[object Uint32Array]': 1,\n    '[object Float32Array]': 1,\n    '[object Float64Array]': 1\n};\n\nvar objToString = Object.prototype.toString;\n\nvar arrayProto = Array.prototype;\nvar nativeForEach = arrayProto.forEach;\nvar nativeFilter = arrayProto.filter;\nvar nativeSlice = arrayProto.slice;\nvar nativeMap = arrayProto.map;\nvar nativeReduce = arrayProto.reduce;\n\n// Avoid assign to an exported variable, for transforming to cjs.\nvar methods = {};\n\nexport function $override(name, fn) {\n    // Clear ctx instance for different environment\n    if (name === 'createCanvas') {\n        _ctx = null;\n    }\n\n    methods[name] = fn;\n}\n\n/**\n * Those data types can be cloned:\n *     Plain object, Array, TypedArray, number, string, null, undefined.\n * Those data types will be assgined using the orginal data:\n *     BUILTIN_OBJECT\n * Instance of user defined class will be cloned to a plain object, without\n * properties in prototype.\n * Other data types is not supported (not sure what will happen).\n *\n * Caution: do not support clone Date, for performance consideration.\n * (There might be a large number of date in `series.data`).\n * So date should not be modified in and out of echarts.\n *\n * @param {*} source\n * @return {*} new\n */\nexport function clone(source) {\n    if (source == null || typeof source !== 'object') {\n        return source;\n    }\n\n    var result = source;\n    var typeStr = objToString.call(source);\n\n    if (typeStr === '[object Array]') {\n        if (!isPrimitive(source)) {\n            result = [];\n            for (var i = 0, len = source.length; i < len; i++) {\n                result[i] = clone(source[i]);\n            }\n        }\n    }\n    else if (TYPED_ARRAY[typeStr]) {\n        if (!isPrimitive(source)) {\n            var Ctor = source.constructor;\n            if (source.constructor.from) {\n                result = Ctor.from(source);\n            }\n            else {\n                result = new Ctor(source.length);\n                for (var i = 0, len = source.length; i < len; i++) {\n                    result[i] = clone(source[i]);\n                }\n            }\n        }\n    }\n    else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) {\n        result = {};\n        for (var key in source) {\n            if (source.hasOwnProperty(key)) {\n                result[key] = clone(source[key]);\n            }\n        }\n    }\n\n    return result;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} target\n * @param {*} source\n * @param {boolean} [overwrite=false]\n */\nexport function merge(target, source, overwrite) {\n    // We should escapse that source is string\n    // and enter for ... in ...\n    if (!isObject(source) || !isObject(target)) {\n        return overwrite ? clone(source) : target;\n    }\n\n    for (var key in source) {\n        if (source.hasOwnProperty(key)) {\n            var targetProp = target[key];\n            var sourceProp = source[key];\n\n            if (isObject(sourceProp)\n                && isObject(targetProp)\n                && !isArray(sourceProp)\n                && !isArray(targetProp)\n                && !isDom(sourceProp)\n                && !isDom(targetProp)\n                && !isBuiltInObject(sourceProp)\n                && !isBuiltInObject(targetProp)\n                && !isPrimitive(sourceProp)\n                && !isPrimitive(targetProp)\n            ) {\n                // 如果需要递归覆盖，就递归调用merge\n                merge(targetProp, sourceProp, overwrite);\n            }\n            else if (overwrite || !(key in target)) {\n                // 否则只处理overwrite为true，或者在目标对象中没有此属性的情况\n                // NOTE，在 target[key] 不存在的时候也是直接覆盖\n                target[key] = clone(source[key], true);\n            }\n        }\n    }\n\n    return target;\n}\n\n/**\n * @param {Array} targetAndSources The first item is target, and the rests are source.\n * @param {boolean} [overwrite=false]\n * @return {*} target\n */\nexport function mergeAll(targetAndSources, overwrite) {\n    var result = targetAndSources[0];\n    for (var i = 1, len = targetAndSources.length; i < len; i++) {\n        result = merge(result, targetAndSources[i], overwrite);\n    }\n    return result;\n}\n\n/**\n * @param {*} target\n * @param {*} source\n * @memberOf module:zrender/core/util\n */\nexport function extend(target, source) {\n    for (var key in source) {\n        if (source.hasOwnProperty(key)) {\n            target[key] = source[key];\n        }\n    }\n    return target;\n}\n\n/**\n * @param {*} target\n * @param {*} source\n * @param {boolean} [overlay=false]\n * @memberOf module:zrender/core/util\n */\nexport function defaults(target, source, overlay) {\n    for (var key in source) {\n        if (source.hasOwnProperty(key)\n            && (overlay ? source[key] != null : target[key] == null)\n        ) {\n            target[key] = source[key];\n        }\n    }\n    return target;\n}\n\nexport var createCanvas = function () {\n    return methods.createCanvas();\n};\n\nmethods.createCanvas = function () {\n    return document.createElement('canvas');\n};\n\n// FIXME\nvar _ctx;\n\nexport function getContext() {\n    if (!_ctx) {\n        // Use util.createCanvas instead of createCanvas\n        // because createCanvas may be overwritten in different environment\n        _ctx = createCanvas().getContext('2d');\n    }\n    return _ctx;\n}\n\n/**\n * 查询数组中元素的index\n * @memberOf module:zrender/core/util\n */\nexport function indexOf(array, value) {\n    if (array) {\n        if (array.indexOf) {\n            return array.indexOf(value);\n        }\n        for (var i = 0, len = array.length; i < len; i++) {\n            if (array[i] === value) {\n                return i;\n            }\n        }\n    }\n    return -1;\n}\n\n/**\n * 构造类继承关系\n *\n * @memberOf module:zrender/core/util\n * @param {Function} clazz 源类\n * @param {Function} baseClazz 基类\n */\nexport function inherits(clazz, baseClazz) {\n    var clazzPrototype = clazz.prototype;\n    function F() {}\n    F.prototype = baseClazz.prototype;\n    clazz.prototype = new F();\n\n    for (var prop in clazzPrototype) {\n        if (clazzPrototype.hasOwnProperty(prop)) {\n            clazz.prototype[prop] = clazzPrototype[prop];\n        }\n    }\n    clazz.prototype.constructor = clazz;\n    clazz.superClass = baseClazz;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Object|Function} target\n * @param {Object|Function} sorce\n * @param {boolean} overlay\n */\nexport function mixin(target, source, overlay) {\n    target = 'prototype' in target ? target.prototype : target;\n    source = 'prototype' in source ? source.prototype : source;\n\n    defaults(target, source, overlay);\n}\n\n/**\n * Consider typed array.\n * @param {Array|TypedArray} data\n */\nexport function isArrayLike(data) {\n    if (!data) {\n        return;\n    }\n    if (typeof data === 'string') {\n        return false;\n    }\n    return typeof data.length === 'number';\n}\n\n/**\n * 数组或对象遍历\n * @memberOf module:zrender/core/util\n * @param {Object|Array} obj\n * @param {Function} cb\n * @param {*} [context]\n */\nexport function each(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.forEach && obj.forEach === nativeForEach) {\n        obj.forEach(cb, context);\n    }\n    else if (obj.length === +obj.length) {\n        for (var i = 0, len = obj.length; i < len; i++) {\n            cb.call(context, obj[i], i, obj);\n        }\n    }\n    else {\n        for (var key in obj) {\n            if (obj.hasOwnProperty(key)) {\n                cb.call(context, obj[key], key, obj);\n            }\n        }\n    }\n}\n\n/**\n * 数组映射\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {Array}\n */\nexport function map(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.map && obj.map === nativeMap) {\n        return obj.map(cb, context);\n    }\n    else {\n        var result = [];\n        for (var i = 0, len = obj.length; i < len; i++) {\n            result.push(cb.call(context, obj[i], i, obj));\n        }\n        return result;\n    }\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {Object} [memo]\n * @param {*} [context]\n * @return {Array}\n */\nexport function reduce(obj, cb, memo, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.reduce && obj.reduce === nativeReduce) {\n        return obj.reduce(cb, memo, context);\n    }\n    else {\n        for (var i = 0, len = obj.length; i < len; i++) {\n            memo = cb.call(context, memo, obj[i], i, obj);\n        }\n        return memo;\n    }\n}\n\n/**\n * 数组过滤\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {Array}\n */\nexport function filter(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.filter && obj.filter === nativeFilter) {\n        return obj.filter(cb, context);\n    }\n    else {\n        var result = [];\n        for (var i = 0, len = obj.length; i < len; i++) {\n            if (cb.call(context, obj[i], i, obj)) {\n                result.push(obj[i]);\n            }\n        }\n        return result;\n    }\n}\n\n/**\n * 数组项查找\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {*}\n */\nexport function find(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    for (var i = 0, len = obj.length; i < len; i++) {\n        if (cb.call(context, obj[i], i, obj)) {\n            return obj[i];\n        }\n    }\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Function} func\n * @param {*} context\n * @return {Function}\n */\nexport function bind(func, context) {\n    var args = nativeSlice.call(arguments, 2);\n    return function () {\n        return func.apply(context, args.concat(nativeSlice.call(arguments)));\n    };\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Function} func\n * @return {Function}\n */\nexport function curry(func) {\n    var args = nativeSlice.call(arguments, 1);\n    return function () {\n        return func.apply(this, args.concat(nativeSlice.call(arguments)));\n    };\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isArray(value) {\n    return objToString.call(value) === '[object Array]';\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isFunction(value) {\n    return typeof value === 'function';\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isString(value) {\n    return objToString.call(value) === '[object String]';\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isObject(value) {\n    // Avoid a V8 JIT bug in Chrome 19-20.\n    // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n    var type = typeof value;\n    return type === 'function' || (!!value && type === 'object');\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isBuiltInObject(value) {\n    return !!BUILTIN_OBJECT[objToString.call(value)];\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isTypedArray(value) {\n    return !!TYPED_ARRAY[objToString.call(value)];\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isDom(value) {\n    return typeof value === 'object'\n        && typeof value.nodeType === 'number'\n        && typeof value.ownerDocument === 'object';\n}\n\n/**\n * Whether is exactly NaN. Notice isNaN('a') returns true.\n * @param {*} value\n * @return {boolean}\n */\nexport function eqNaN(value) {\n    /* eslint-disable-next-line no-self-compare */\n    return value !== value;\n}\n\n/**\n * If value1 is not null, then return value1, otherwise judget rest of values.\n * Low performance.\n * @memberOf module:zrender/core/util\n * @return {*} Final value\n */\nexport function retrieve(values) {\n    for (var i = 0, len = arguments.length; i < len; i++) {\n        if (arguments[i] != null) {\n            return arguments[i];\n        }\n    }\n}\n\nexport function retrieve2(value0, value1) {\n    return value0 != null\n        ? value0\n        : value1;\n}\n\nexport function retrieve3(value0, value1, value2) {\n    return value0 != null\n        ? value0\n        : value1 != null\n        ? value1\n        : value2;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Array} arr\n * @param {number} startIndex\n * @param {number} endIndex\n * @return {Array}\n */\nexport function slice() {\n    return Function.call.apply(nativeSlice, arguments);\n}\n\n/**\n * Normalize css liked array configuration\n * e.g.\n *  3 => [3, 3, 3, 3]\n *  [4, 2] => [4, 2, 4, 2]\n *  [4, 3, 2] => [4, 3, 2, 3]\n * @param {number|Array.<number>} val\n * @return {Array.<number>}\n */\nexport function normalizeCssArray(val) {\n    if (typeof (val) === 'number') {\n        return [val, val, val, val];\n    }\n    var len = val.length;\n    if (len === 2) {\n        // vertical | horizontal\n        return [val[0], val[1], val[0], val[1]];\n    }\n    else if (len === 3) {\n        // top | horizontal | bottom\n        return [val[0], val[1], val[2], val[1]];\n    }\n    return val;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {boolean} condition\n * @param {string} message\n */\nexport function assert(condition, message) {\n    if (!condition) {\n        throw new Error(message);\n    }\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {string} str string to be trimed\n * @return {string} trimed string\n */\nexport function trim(str) {\n    if (str == null) {\n        return null;\n    }\n    else if (typeof str.trim === 'function') {\n        return str.trim();\n    }\n    else {\n        return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n    }\n}\n\nvar primitiveKey = '__ec_primitive__';\n/**\n * Set an object as primitive to be ignored traversing children in clone or merge\n */\nexport function setAsPrimitive(obj) {\n    obj[primitiveKey] = true;\n}\n\nexport function isPrimitive(obj) {\n    return obj[primitiveKey];\n}\n\n/**\n * @constructor\n * @param {Object} obj Only apply `ownProperty`.\n */\nfunction HashMap(obj) {\n    var isArr = isArray(obj);\n    // Key should not be set on this, otherwise\n    // methods get/set/... may be overrided.\n    this.data = {};\n    var thisMap = this;\n\n    (obj instanceof HashMap)\n        ? obj.each(visit)\n        : (obj && each(obj, visit));\n\n    function visit(value, key) {\n        isArr ? thisMap.set(value, key) : thisMap.set(key, value);\n    }\n}\n\nHashMap.prototype = {\n    constructor: HashMap,\n    // Do not provide `has` method to avoid defining what is `has`.\n    // (We usually treat `null` and `undefined` as the same, different\n    // from ES6 Map).\n    get: function (key) {\n        return this.data.hasOwnProperty(key) ? this.data[key] : null;\n    },\n    set: function (key, value) {\n        // Comparing with invocation chaining, `return value` is more commonly\n        // used in this case: `var someVal = map.set('a', genVal());`\n        return (this.data[key] = value);\n    },\n    // Although util.each can be performed on this hashMap directly, user\n    // should not use the exposed keys, who are prefixed.\n    each: function (cb, context) {\n        context !== void 0 && (cb = bind(cb, context));\n        /* eslint-disable guard-for-in */\n        for (var key in this.data) {\n            this.data.hasOwnProperty(key) && cb(this.data[key], key);\n        }\n        /* eslint-enable guard-for-in */\n    },\n    // Do not use this method if performance sensitive.\n    removeKey: function (key) {\n        delete this.data[key];\n    }\n};\n\nexport function createHashMap(obj) {\n    return new HashMap(obj);\n}\n\nexport function concatArray(a, b) {\n    var newArray = new a.constructor(a.length + b.length);\n    for (var i = 0; i < a.length; i++) {\n        newArray[i] = a[i];\n    }\n    var offset = a.length;\n    for (i = 0; i < b.length; i++) {\n        newArray[i + offset] = b[i];\n    }\n    return newArray;\n}\n\n\nexport function noop() {}\n","/* global Float32Array */\n\nvar ArrayCtor = typeof Float32Array === 'undefined'\n    ? Array\n    : Float32Array;\n\n/**\n * 创建一个向量\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @return {Vector2}\n */\nexport function create(x, y) {\n    var out = new ArrayCtor(2);\n    if (x == null) {\n        x = 0;\n    }\n    if (y == null) {\n        y = 0;\n    }\n    out[0] = x;\n    out[1] = y;\n    return out;\n}\n\n/**\n * 复制向量数据\n * @param {Vector2} out\n * @param {Vector2} v\n * @return {Vector2}\n */\nexport function copy(out, v) {\n    out[0] = v[0];\n    out[1] = v[1];\n    return out;\n}\n\n/**\n * 克隆一个向量\n * @param {Vector2} v\n * @return {Vector2}\n */\nexport function clone(v) {\n    var out = new ArrayCtor(2);\n    out[0] = v[0];\n    out[1] = v[1];\n    return out;\n}\n\n/**\n * 设置向量的两个项\n * @param {Vector2} out\n * @param {number} a\n * @param {number} b\n * @return {Vector2} 结果\n */\nexport function set(out, a, b) {\n    out[0] = a;\n    out[1] = b;\n    return out;\n}\n\n/**\n * 向量相加\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nexport function add(out, v1, v2) {\n    out[0] = v1[0] + v2[0];\n    out[1] = v1[1] + v2[1];\n    return out;\n}\n\n/**\n * 向量缩放后相加\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @param {number} a\n */\nexport function scaleAndAdd(out, v1, v2, a) {\n    out[0] = v1[0] + v2[0] * a;\n    out[1] = v1[1] + v2[1] * a;\n    return out;\n}\n\n/**\n * 向量相减\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nexport function sub(out, v1, v2) {\n    out[0] = v1[0] - v2[0];\n    out[1] = v1[1] - v2[1];\n    return out;\n}\n\n/**\n * 向量长度\n * @param {Vector2} v\n * @return {number}\n */\nexport function len(v) {\n    return Math.sqrt(lenSquare(v));\n}\nexport var length = len; // jshint ignore:line\n\n/**\n * 向量长度平方\n * @param {Vector2} v\n * @return {number}\n */\nexport function lenSquare(v) {\n    return v[0] * v[0] + v[1] * v[1];\n}\nexport var lengthSquare = lenSquare;\n\n/**\n * 向量乘法\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nexport function mul(out, v1, v2) {\n    out[0] = v1[0] * v2[0];\n    out[1] = v1[1] * v2[1];\n    return out;\n}\n\n/**\n * 向量除法\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nexport function div(out, v1, v2) {\n    out[0] = v1[0] / v2[0];\n    out[1] = v1[1] / v2[1];\n    return out;\n}\n\n/**\n * 向量点乘\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\nexport function dot(v1, v2) {\n    return v1[0] * v2[0] + v1[1] * v2[1];\n}\n\n/**\n * 向量缩放\n * @param {Vector2} out\n * @param {Vector2} v\n * @param {number} s\n */\nexport function scale(out, v, s) {\n    out[0] = v[0] * s;\n    out[1] = v[1] * s;\n    return out;\n}\n\n/**\n * 向量归一化\n * @param {Vector2} out\n * @param {Vector2} v\n */\nexport function normalize(out, v) {\n    var d = len(v);\n    if (d === 0) {\n        out[0] = 0;\n        out[1] = 0;\n    }\n    else {\n        out[0] = v[0] / d;\n        out[1] = v[1] / d;\n    }\n    return out;\n}\n\n/**\n * 计算向量间距离\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\nexport function distance(v1, v2) {\n    return Math.sqrt(\n        (v1[0] - v2[0]) * (v1[0] - v2[0])\n        + (v1[1] - v2[1]) * (v1[1] - v2[1])\n    );\n}\nexport var dist = distance;\n\n/**\n * 向量距离平方\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\nexport function distanceSquare(v1, v2) {\n    return (v1[0] - v2[0]) * (v1[0] - v2[0])\n        + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\nexport var distSquare = distanceSquare;\n\n/**\n * 求负向量\n * @param {Vector2} out\n * @param {Vector2} v\n */\nexport function negate(out, v) {\n    out[0] = -v[0];\n    out[1] = -v[1];\n    return out;\n}\n\n/**\n * 插值两个点\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @param {number} t\n */\nexport function lerp(out, v1, v2, t) {\n    out[0] = v1[0] + t * (v2[0] - v1[0]);\n    out[1] = v1[1] + t * (v2[1] - v1[1]);\n    return out;\n}\n\n/**\n * 矩阵左乘向量\n * @param {Vector2} out\n * @param {Vector2} v\n * @param {Vector2} m\n */\nexport function applyTransform(out, v, m) {\n    var x = v[0];\n    var y = v[1];\n    out[0] = m[0] * x + m[2] * y + m[4];\n    out[1] = m[1] * x + m[3] * y + m[5];\n    return out;\n}\n\n/**\n * 求两个向量最小值\n * @param  {Vector2} out\n * @param  {Vector2} v1\n * @param  {Vector2} v2\n */\nexport function min(out, v1, v2) {\n    out[0] = Math.min(v1[0], v2[0]);\n    out[1] = Math.min(v1[1], v2[1]);\n    return out;\n}\n\n/**\n * 求两个向量最大值\n * @param  {Vector2} out\n * @param  {Vector2} v1\n * @param  {Vector2} v2\n */\nexport function max(out, v1, v2) {\n    out[0] = Math.max(v1[0], v2[0]);\n    out[1] = Math.max(v1[1], v2[1]);\n    return out;\n}\n","// TODO Draggable for group\n// FIXME Draggable on element which has parent rotation or scale\nfunction Draggable() {\n\n    this.on('mousedown', this._dragStart, this);\n    this.on('mousemove', this._drag, this);\n    this.on('mouseup', this._dragEnd, this);\n    this.on('globalout', this._dragEnd, this);\n    // this._dropTarget = null;\n    // this._draggingTarget = null;\n\n    // this._x = 0;\n    // this._y = 0;\n}\n\nDraggable.prototype = {\n\n    constructor: Draggable,\n\n    _dragStart: function (e) {\n        var draggingTarget = e.target;\n        if (draggingTarget && draggingTarget.draggable) {\n            this._draggingTarget = draggingTarget;\n            draggingTarget.dragging = true;\n            this._x = e.offsetX;\n            this._y = e.offsetY;\n\n            this.dispatchToElement(param(draggingTarget, e), 'dragstart', e.event);\n        }\n    },\n\n    _drag: function (e) {\n        var draggingTarget = this._draggingTarget;\n        if (draggingTarget) {\n\n            var x = e.offsetX;\n            var y = e.offsetY;\n\n            var dx = x - this._x;\n            var dy = y - this._y;\n            this._x = x;\n            this._y = y;\n\n            draggingTarget.drift(dx, dy, e);\n            this.dispatchToElement(param(draggingTarget, e), 'drag', e.event);\n\n            var dropTarget = this.findHover(x, y, draggingTarget).target;\n            var lastDropTarget = this._dropTarget;\n            this._dropTarget = dropTarget;\n\n            if (draggingTarget !== dropTarget) {\n                if (lastDropTarget && dropTarget !== lastDropTarget) {\n                    this.dispatchToElement(param(lastDropTarget, e), 'dragleave', e.event);\n                }\n                if (dropTarget && dropTarget !== lastDropTarget) {\n                    this.dispatchToElement(param(dropTarget, e), 'dragenter', e.event);\n                }\n            }\n        }\n    },\n\n    _dragEnd: function (e) {\n        var draggingTarget = this._draggingTarget;\n\n        if (draggingTarget) {\n            draggingTarget.dragging = false;\n        }\n\n        this.dispatchToElement(param(draggingTarget, e), 'dragend', e.event);\n\n        if (this._dropTarget) {\n            this.dispatchToElement(param(this._dropTarget, e), 'drop', e.event);\n        }\n\n        this._draggingTarget = null;\n        this._dropTarget = null;\n    }\n\n};\n\nfunction param(target, e) {\n    return {target: target, topTarget: e && e.topTarget};\n}\n\nexport default Draggable;","/**\n * Event Mixin\n * @module zrender/mixin/Eventful\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n *         pissang (https://www.github.com/pissang)\n */\n\nvar arrySlice = Array.prototype.slice;\n\n/**\n * Event dispatcher.\n *\n * @alias module:zrender/mixin/Eventful\n * @constructor\n * @param {Object} [eventProcessor] The object eventProcessor is the scope when\n *        `eventProcessor.xxx` called.\n * @param {Function} [eventProcessor.normalizeQuery]\n *        param: {string|Object} Raw query.\n *        return: {string|Object} Normalized query.\n * @param {Function} [eventProcessor.filter] Event will be dispatched only\n *        if it returns `true`.\n *        param: {string} eventType\n *        param: {string|Object} query\n *        return: {boolean}\n * @param {Function} [eventProcessor.afterTrigger] Call after all handlers called.\n *        param: {string} eventType\n */\nvar Eventful = function (eventProcessor) {\n    this._$handlers = {};\n    this._$eventProcessor = eventProcessor;\n};\n\nEventful.prototype = {\n\n    constructor: Eventful,\n\n    /**\n     * The handler can only be triggered once, then removed.\n     *\n     * @param {string} event The event name.\n     * @param {string|Object} [query] Condition used on event filter.\n     * @param {Function} handler The event handler.\n     * @param {Object} context\n     */\n    one: function (event, query, handler, context) {\n        return on(this, event, query, handler, context, true);\n    },\n\n    /**\n     * Bind a handler.\n     *\n     * @param {string} event The event name.\n     * @param {string|Object} [query] Condition used on event filter.\n     * @param {Function} handler The event handler.\n     * @param {Object} [context]\n     */\n    on: function (event, query, handler, context) {\n        return on(this, event, query, handler, context, false);\n    },\n\n    /**\n     * Whether any handler has bound.\n     *\n     * @param  {string}  event\n     * @return {boolean}\n     */\n    isSilent: function (event) {\n        var _h = this._$handlers;\n        return !_h[event] || !_h[event].length;\n    },\n\n    /**\n     * Unbind a event.\n     *\n     * @param {string} event The event name.\n     * @param {Function} [handler] The event handler.\n     */\n    off: function (event, handler) {\n        var _h = this._$handlers;\n\n        if (!event) {\n            this._$handlers = {};\n            return this;\n        }\n\n        if (handler) {\n            if (_h[event]) {\n                var newList = [];\n                for (var i = 0, l = _h[event].length; i < l; i++) {\n                    if (_h[event][i].h !== handler) {\n                        newList.push(_h[event][i]);\n                    }\n                }\n                _h[event] = newList;\n            }\n\n            if (_h[event] && _h[event].length === 0) {\n                delete _h[event];\n            }\n        }\n        else {\n            delete _h[event];\n        }\n\n        return this;\n    },\n\n    /**\n     * Dispatch a event.\n     *\n     * @param {string} type The event name.\n     */\n    trigger: function (type) {\n        var _h = this._$handlers[type];\n        var eventProcessor = this._$eventProcessor;\n\n        if (_h) {\n            var args = arguments;\n            var argLen = args.length;\n\n            if (argLen > 3) {\n                args = arrySlice.call(args, 1);\n            }\n\n            var len = _h.length;\n            for (var i = 0; i < len;) {\n                var hItem = _h[i];\n                if (eventProcessor\n                    && eventProcessor.filter\n                    && hItem.query != null\n                    && !eventProcessor.filter(type, hItem.query)\n                ) {\n                    i++;\n                    continue;\n                }\n\n                // Optimize advise from backbone\n                switch (argLen) {\n                    case 1:\n                        hItem.h.call(hItem.ctx);\n                        break;\n                    case 2:\n                        hItem.h.call(hItem.ctx, args[1]);\n                        break;\n                    case 3:\n                        hItem.h.call(hItem.ctx, args[1], args[2]);\n                        break;\n                    default:\n                        // have more than 2 given arguments\n                        hItem.h.apply(hItem.ctx, args);\n                        break;\n                }\n\n                if (hItem.one) {\n                    _h.splice(i, 1);\n                    len--;\n                }\n                else {\n                    i++;\n                }\n            }\n        }\n\n        eventProcessor && eventProcessor.afterTrigger\n            && eventProcessor.afterTrigger(type);\n\n        return this;\n    },\n\n    /**\n     * Dispatch a event with context, which is specified at the last parameter.\n     *\n     * @param {string} type The event name.\n     */\n    triggerWithContext: function (type) {\n        var _h = this._$handlers[type];\n        var eventProcessor = this._$eventProcessor;\n\n        if (_h) {\n            var args = arguments;\n            var argLen = args.length;\n\n            if (argLen > 4) {\n                args = arrySlice.call(args, 1, args.length - 1);\n            }\n            var ctx = args[args.length - 1];\n\n            var len = _h.length;\n            for (var i = 0; i < len;) {\n                var hItem = _h[i];\n                if (eventProcessor\n                    && eventProcessor.filter\n                    && hItem.query != null\n                    && !eventProcessor.filter(type, hItem.query)\n                ) {\n                    i++;\n                    continue;\n                }\n\n                // Optimize advise from backbone\n                switch (argLen) {\n                    case 1:\n                        hItem.h.call(ctx);\n                        break;\n                    case 2:\n                        hItem.h.call(ctx, args[1]);\n                        break;\n                    case 3:\n                        hItem.h.call(ctx, args[1], args[2]);\n                        break;\n                    default:\n                        // have more than 2 given arguments\n                        hItem.h.apply(ctx, args);\n                        break;\n                }\n\n                if (hItem.one) {\n                    _h.splice(i, 1);\n                    len--;\n                }\n                else {\n                    i++;\n                }\n            }\n        }\n\n        eventProcessor && eventProcessor.afterTrigger\n            && eventProcessor.afterTrigger(type);\n\n        return this;\n    }\n};\n\nfunction normalizeQuery(host, query) {\n    var eventProcessor = host._$eventProcessor;\n    if (query != null && eventProcessor && eventProcessor.normalizeQuery) {\n        query = eventProcessor.normalizeQuery(query);\n    }\n    return query;\n}\n\nfunction on(eventful, event, query, handler, context, isOnce) {\n    var _h = eventful._$handlers;\n\n    if (typeof query === 'function') {\n        context = handler;\n        handler = query;\n        query = null;\n    }\n\n    if (!handler || !event) {\n        return eventful;\n    }\n\n    query = normalizeQuery(eventful, query);\n\n    if (!_h[event]) {\n        _h[event] = [];\n    }\n\n    for (var i = 0; i < _h[event].length; i++) {\n        if (_h[event][i].h === handler) {\n            return eventful;\n        }\n    }\n\n    var wrap = {\n        h: handler,\n        one: isOnce,\n        query: query,\n        ctx: context || eventful,\n        // FIXME\n        // Do not publish this feature util it is proved that it makes sense.\n        callAtLast: handler.zrEventfulCallAtLast\n    };\n\n    var lastIndex = _h[event].length - 1;\n    var lastWrap = _h[event][lastIndex];\n    (lastWrap && lastWrap.callAtLast)\n        ? _h[event].splice(lastIndex, 0, wrap)\n        : _h[event].push(wrap);\n\n    return eventful;\n}\n\n// ----------------------\n// The events in zrender\n// ----------------------\n\n/**\n * @event module:zrender/mixin/Eventful#onclick\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmouseover\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmouseout\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmousemove\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmousewheel\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmousedown\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmouseup\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondrag\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondragstart\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondragend\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondragenter\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondragleave\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondragover\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondrop\n * @type {Function}\n * @default null\n */\n\nexport default Eventful;","/**\n * The algoritm is learnt from\n * https://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * And we made some optimization for matrix inversion.\n * Other similar approaches:\n * \"cv::getPerspectiveTransform\", \"Direct Linear Transformation\".\n */\n\nvar LN2 = Math.log(2);\n\nfunction determinant(rows, rank, rowStart, rowMask, colMask, detCache) {\n    var cacheKey = rowMask + '-' + colMask;\n    var fullRank = rows.length;\n\n    if (detCache.hasOwnProperty(cacheKey)) {\n        return detCache[cacheKey];\n    }\n\n    if (rank === 1) {\n        // In this case the colMask must be like: `11101111`. We can find the place of `0`.\n        var colStart = Math.round(Math.log(((1 << fullRank) - 1) & ~colMask) / LN2);\n        return rows[rowStart][colStart];\n    }\n\n    var subRowMask = rowMask | (1 << rowStart);\n    var subRowStart = rowStart + 1;\n    while (rowMask & (1 << subRowStart)) {\n        subRowStart++;\n    }\n\n    var sum = 0;\n    for (var j = 0, colLocalIdx = 0; j < fullRank; j++) {\n        var colTag = 1 << j;\n        if (!(colTag & colMask)) {\n            sum += (colLocalIdx % 2 ? -1 : 1) * rows[rowStart][j]\n                // det(subMatrix(0, j))\n                * determinant(rows, rank - 1, subRowStart, subRowMask, colMask | colTag, detCache);\n            colLocalIdx++;\n        }\n    }\n\n    detCache[cacheKey] = sum;\n\n    return sum;\n}\n\n/**\n * Usage:\n * ```js\n * var transformer = buildTransformer(\n *     [10, 44, 100, 44, 100, 300, 10, 300],\n *     [50, 54, 130, 14, 140, 330, 14, 220]\n * );\n * var out = [];\n * transformer && transformer([11, 33], out);\n * ```\n *\n * Notice: `buildTransformer` may take more than 10ms in some Android device.\n *\n * @param {Array.<number>} src source four points, [x0, y0, x1, y1, x2, y2, x3, y3]\n * @param {Array.<number>} dest destination four points, [x0, y0, x1, y1, x2, y2, x3, y3]\n * @return {Function} transformer If fail, return null/undefined.\n */\nexport function buildTransformer(src, dest) {\n    var mA = [\n        [src[0], src[1], 1, 0, 0, 0, -dest[0] * src[0], -dest[0] * src[1]],\n        [0, 0, 0, src[0], src[1], 1, -dest[1] * src[0], -dest[1] * src[1]],\n        [src[2], src[3], 1, 0, 0, 0, -dest[2] * src[2], -dest[2] * src[3]],\n        [0, 0, 0, src[2], src[3], 1, -dest[3] * src[2], -dest[3] * src[3]],\n        [src[4], src[5], 1, 0, 0, 0, -dest[4] * src[4], -dest[4] * src[5]],\n        [0, 0, 0, src[4], src[5], 1, -dest[5] * src[4], -dest[5] * src[5]],\n        [src[6], src[7], 1, 0, 0, 0, -dest[6] * src[6], -dest[6] * src[7]],\n        [0, 0, 0, src[6], src[7], 1, -dest[7] * src[6], -dest[7] * src[7]]\n    ];\n\n    var detCache = {};\n    var det = determinant(mA, 8, 0, 0, 0, detCache);\n    if (det === 0) {\n        return;\n    }\n\n    // `invert(mA) * dest`, that is, `adj(mA) / det * dest`.\n    var vh = [];\n    for (var i = 0; i < 8; i++) {\n        for (var j = 0; j < 8; j++) {\n            vh[j] == null && (vh[j] = 0);\n            vh[j] += ((i + j) % 2 ? -1 : 1)\n                // det(subMatrix(i, j))\n                * determinant(mA, 7, i === 0 ? 1 : 0, 1 << i, 1 << j, detCache)\n                / det * dest[i];\n        }\n    }\n\n    return function (out, srcPointX, srcPointY) {\n        var pk = srcPointX * vh[6] + srcPointY * vh[7] + 1;\n        out[0] = (srcPointX * vh[0] + srcPointY * vh[1] + vh[2]) / pk;\n        out[1] = (srcPointX * vh[3] + srcPointY * vh[4] + vh[5]) / pk;\n    };\n}\n","/**\n * Utilities for mouse or touch events.\n */\n\nimport Eventful from '../mixin/Eventful';\nimport env from './env';\nimport {buildTransformer} from './fourPointsTransform';\n\nvar isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener;\n\nvar MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;\nvar EVENT_SAVED_PROP = '___zrEVENTSAVED';\nvar _calcOut = [];\n\n/**\n * Get the `zrX` and `zrY`, which are relative to the top-left of\n * the input `el`.\n * CSS transform (2D & 3D) is supported.\n *\n * The strategy to fetch the coords:\n * + If `calculate` is not set as `true`, users of this method should\n * ensure that `el` is the same or the same size & location as `e.target`.\n * Otherwise the result coords are probably not expected. Because we\n * firstly try to get coords from e.offsetX/e.offsetY.\n * + If `calculate` is set as `true`, the input `el` can be any element\n * and we force to calculate the coords based on `el`.\n * + The input `el` should be positionable (not position:static).\n *\n * The force `calculate` can be used in case like:\n * When mousemove event triggered on ec tooltip, `e.target` is not `el`(zr painter.dom).\n *\n * @param {HTMLElement} el DOM element.\n * @param {Event} e Mouse event or touch event.\n * @param {Object} out Get `out.zrX` and `out.zrY` as the result.\n * @param {boolean} [calculate=false] Whether to force calculate\n *        the coordinates but not use ones provided by browser.\n */\nexport function clientToLocal(el, e, out, calculate) {\n    out = out || {};\n\n    // According to the W3C Working Draft, offsetX and offsetY should be relative\n    // to the padding edge of the target element. The only browser using this convention\n    // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does\n    // not support the properties.\n    // (see http://www.jacklmoore.com/notes/mouse-position/)\n    // In zr painter.dom, padding edge equals to border edge.\n\n    if (calculate || !env.canvasSupported) {\n        calculateZrXY(el, e, out);\n    }\n    // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned\n    // ancestor element, so we should make sure el is positioned (e.g., not position:static).\n    // BTW1, Webkit don't return the same results as FF in non-simple cases (like add\n    // zoom-factor, overflow / opacity layers, transforms ...)\n    // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d.\n    // <https://bugs.jquery.com/ticket/8523#comment:14>\n    // BTW3, In ff, offsetX/offsetY is always 0.\n    else if (env.browser.firefox && e.layerX != null && e.layerX !== e.offsetX) {\n        out.zrX = e.layerX;\n        out.zrY = e.layerY;\n    }\n    // For IE6+, chrome, safari, opera. (When will ff support offsetX?)\n    else if (e.offsetX != null) {\n        out.zrX = e.offsetX;\n        out.zrY = e.offsetY;\n    }\n    // For some other device, e.g., IOS safari.\n    else {\n        calculateZrXY(el, e, out);\n    }\n\n    return out;\n}\n\nfunction calculateZrXY(el, e, out) {\n    // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect.\n    if (el.getBoundingClientRect && env.domSupported) {\n        var ex = e.clientX;\n        var ey = e.clientY;\n\n        if (el.nodeName.toUpperCase() === 'CANVAS') {\n            // Original approach, which do not support CSS transform.\n            // marker can not be locationed in a canvas container\n            // (getBoundingClientRect is always 0). We do not support\n            // that input a pre-created canvas to zr while using css\n            // transform in iOS.\n            var box = el.getBoundingClientRect();\n            out.zrX = ex - box.left;\n            out.zrY = ey - box.top;\n            return;\n        }\n        else {\n            var saved = el[EVENT_SAVED_PROP] || (el[EVENT_SAVED_PROP] = {});\n            var transformer = preparePointerTransformer(prepareCoordMarkers(el, saved), saved);\n            if (transformer) {\n                transformer(_calcOut, ex, ey);\n                out.zrX = _calcOut[0];\n                out.zrY = _calcOut[1];\n                return;\n            }\n        }\n    }\n    out.zrX = out.zrY = 0;\n}\n\nfunction prepareCoordMarkers(el, saved) {\n    var markers = saved.markers;\n    if (markers) {\n        return markers;\n    }\n\n    markers = saved.markers = [];\n    var propLR = ['left', 'right'];\n    var propTB = ['top', 'bottom'];\n\n    for (var i = 0; i < 4; i++) {\n        var marker = document.createElement('div');\n        var stl = marker.style;\n        var idxLR = i % 2;\n        var idxTB = (i >> 1) % 2;\n        stl.cssText = [\n            'position:absolute',\n            'visibility: hidden',\n            'padding: 0',\n            'margin: 0',\n            'border-width: 0',\n            'width:0',\n            'height:0',\n            // 'width: 5px',\n            // 'height: 5px',\n            propLR[idxLR] + ':0',\n            propTB[idxTB] + ':0',\n            propLR[1 - idxLR] + ':auto',\n            propTB[1 - idxTB] + ':auto',\n            ''\n        ].join('!important;');\n        el.appendChild(marker);\n        markers.push(marker);\n    }\n\n    return markers;\n}\n\nfunction preparePointerTransformer(markers, saved) {\n    var transformer = saved.transformer;\n    var oldSrcCoords = saved.srcCoords;\n    var useOld = true;\n    var srcCoords = [];\n    var destCoords = [];\n\n    for (var i = 0; i < 4; i++) {\n        var rect = markers[i].getBoundingClientRect();\n        var ii = 2 * i;\n        var x = rect.left;\n        var y = rect.top;\n        srcCoords.push(x, y);\n        useOld &= oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1];\n        destCoords.push(markers[i].offsetLeft, markers[i].offsetTop);\n    }\n\n    // Cache to avoid time consuming of `buildTransformer`.\n    return useOld\n        ? transformer\n        : (\n            saved.srcCoords = srcCoords,\n            saved.transformer = buildTransformer(srcCoords, destCoords)\n        );\n}\n\n/**\n * Normalize the coordinates of the input event.\n *\n * Get the `e.zrX` and `e.zrY`, which are relative to the top-left of\n * the input `el`.\n * Get `e.zrDelta` if using mouse wheel.\n * Get `e.which`, see the comment inside this function.\n *\n * Do not calculate repeatly if `zrX` and `zrY` already exist.\n *\n * Notice: see comments in `clientToLocal`. check the relationship\n * between the result coords and the parameters `el` and `calculate`.\n *\n * @param {HTMLElement} el DOM element.\n * @param {Event} [e] Mouse event or touch event. For lagency IE,\n *        do not need to input it and `window.event` is used.\n * @param {boolean} [calculate=false] Whether to force calculate\n *        the coordinates but not use ones provided by browser.\n */\nexport function normalizeEvent(el, e, calculate) {\n\n    e = e || window.event;\n\n    if (e.zrX != null) {\n        return e;\n    }\n\n    var eventType = e.type;\n    var isTouch = eventType && eventType.indexOf('touch') >= 0;\n\n    if (!isTouch) {\n        clientToLocal(el, e, e, calculate);\n        e.zrDelta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3;\n    }\n    else {\n        var touch = eventType !== 'touchend'\n            ? e.targetTouches[0]\n            : e.changedTouches[0];\n        touch && clientToLocal(el, touch, e, calculate);\n    }\n\n    // Add which for click: 1 === left; 2 === middle; 3 === right; otherwise: 0;\n    // See jQuery: https://github.com/jquery/jquery/blob/master/src/event.js\n    // If e.which has been defined, it may be readonly,\n    // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which\n    var button = e.button;\n    if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {\n        e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n    }\n    // [Caution]: `e.which` from browser is not always reliable. For example,\n    // when press left button and `mousemove (pointermove)` in Edge, the `e.which`\n    // is 65536 and the `e.button` is -1. But the `mouseup (pointerup)` and\n    // `mousedown (pointerdown)` is the same as Chrome does.\n\n    return e;\n}\n\n/**\n * @param {HTMLElement} el\n * @param {string} name\n * @param {Function} handler\n */\nexport function addEventListener(el, name, handler) {\n    if (isDomLevel2) {\n        // Reproduct the console warning:\n        // [Violation] Added non-passive event listener to a scroll-blocking <some> event.\n        // Consider marking event handler as 'passive' to make the page more responsive.\n        // Just set console log level: verbose in chrome dev tool.\n        // then the warning log will be printed when addEventListener called.\n        // See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n        // We have not yet found a neat way to using passive. Because in zrender the dom event\n        // listener delegate all of the upper events of element. Some of those events need\n        // to prevent default. For example, the feature `preventDefaultMouseMove` of echarts.\n        // Before passive can be adopted, these issues should be considered:\n        // (1) Whether and how a zrender user specifies an event listener passive. And by default,\n        // passive or not.\n        // (2) How to tread that some zrender event listener is passive, and some is not. If\n        // we use other way but not preventDefault of mousewheel and touchmove, browser\n        // compatibility should be handled.\n\n        // var opts = (env.passiveSupported && name === 'mousewheel')\n        //     ? {passive: true}\n        //     // By default, the third param of el.addEventListener is `capture: false`.\n        //     : void 0;\n        // el.addEventListener(name, handler /* , opts */);\n        el.addEventListener(name, handler);\n    }\n    else {\n        el.attachEvent('on' + name, handler);\n    }\n}\n\nexport function removeEventListener(el, name, handler) {\n    if (isDomLevel2) {\n        el.removeEventListener(name, handler);\n    }\n    else {\n        el.detachEvent('on' + name, handler);\n    }\n}\n\n/**\n * preventDefault and stopPropagation.\n * Notice: do not use this method in zrender. It can only be\n * used by upper applications if necessary.\n *\n * @param {Event} e A mouse or touch event.\n */\nexport var stop = isDomLevel2\n    ? function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n        e.cancelBubble = true;\n    }\n    : function (e) {\n        e.returnValue = false;\n        e.cancelBubble = true;\n    };\n\n/**\n * This method only works for mouseup and mousedown. The functionality is restricted\n * for fault tolerance, See the `e.which` compatibility above.\n *\n * @param {MouseEvent} e\n * @return {boolean}\n */\nexport function isMiddleOrRightButtonOnMouseUpDown(e) {\n    return e.which === 2 || e.which === 3;\n}\n\n/**\n * To be removed.\n * @deprecated\n */\nexport function notLeftMouse(e) {\n    // If e.which is undefined, considered as left mouse event.\n    return e.which > 1;\n}\n\n\n// For backward compatibility\nexport {Eventful as Dispatcher};\n","/**\n * Only implements needed gestures for mobile.\n */\n\nimport * as eventUtil from './event';\n\nvar GestureMgr = function () {\n\n    /**\n     * @private\n     * @type {Array.<Object>}\n     */\n    this._track = [];\n};\n\nGestureMgr.prototype = {\n\n    constructor: GestureMgr,\n\n    recognize: function (event, target, root) {\n        this._doTrack(event, target, root);\n        return this._recognize(event);\n    },\n\n    clear: function () {\n        this._track.length = 0;\n        return this;\n    },\n\n    _doTrack: function (event, target, root) {\n        var touches = event.touches;\n\n        if (!touches) {\n            return;\n        }\n\n        var trackItem = {\n            points: [],\n            touches: [],\n            target: target,\n            event: event\n        };\n\n        for (var i = 0, len = touches.length; i < len; i++) {\n            var touch = touches[i];\n            var pos = eventUtil.clientToLocal(root, touch, {});\n            trackItem.points.push([pos.zrX, pos.zrY]);\n            trackItem.touches.push(touch);\n        }\n\n        this._track.push(trackItem);\n    },\n\n    _recognize: function (event) {\n        for (var eventName in recognizers) {\n            if (recognizers.hasOwnProperty(eventName)) {\n                var gestureInfo = recognizers[eventName](this._track, event);\n                if (gestureInfo) {\n                    return gestureInfo;\n                }\n            }\n        }\n    }\n};\n\nfunction dist(pointPair) {\n    var dx = pointPair[1][0] - pointPair[0][0];\n    var dy = pointPair[1][1] - pointPair[0][1];\n\n    return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction center(pointPair) {\n    return [\n        (pointPair[0][0] + pointPair[1][0]) / 2,\n        (pointPair[0][1] + pointPair[1][1]) / 2\n    ];\n}\n\nvar recognizers = {\n\n    pinch: function (track, event) {\n        var trackLen = track.length;\n\n        if (!trackLen) {\n            return;\n        }\n\n        var pinchEnd = (track[trackLen - 1] || {}).points;\n        var pinchPre = (track[trackLen - 2] || {}).points || pinchEnd;\n\n        if (pinchPre\n            && pinchPre.length > 1\n            && pinchEnd\n            && pinchEnd.length > 1\n        ) {\n            var pinchScale = dist(pinchEnd) / dist(pinchPre);\n            !isFinite(pinchScale) && (pinchScale = 1);\n\n            event.pinchScale = pinchScale;\n\n            var pinchCenter = center(pinchEnd);\n            event.pinchX = pinchCenter[0];\n            event.pinchY = pinchCenter[1];\n\n            return {\n                type: 'pinch',\n                target: track[0].target,\n                event: event\n            };\n        }\n    }\n\n    // Only pinch currently.\n};\n\nexport default GestureMgr;","import * as util from './core/util';\nimport * as vec2 from './core/vector';\nimport Draggable from './mixin/Draggable';\nimport Eventful from './mixin/Eventful';\nimport * as eventTool from './core/event';\nimport GestureMgr from './core/GestureMgr';\n\nvar SILENT = 'silent';\n\nfunction makeEventPacket(eveType, targetInfo, event) {\n    return {\n        type: eveType,\n        event: event,\n        // target can only be an element that is not silent.\n        target: targetInfo.target,\n        // topTarget can be a silent element.\n        topTarget: targetInfo.topTarget,\n        cancelBubble: false,\n        offsetX: event.zrX,\n        offsetY: event.zrY,\n        gestureEvent: event.gestureEvent,\n        pinchX: event.pinchX,\n        pinchY: event.pinchY,\n        pinchScale: event.pinchScale,\n        wheelDelta: event.zrDelta,\n        zrByTouch: event.zrByTouch,\n        which: event.which,\n        stop: stopEvent\n    };\n}\n\nfunction stopEvent(event) {\n    eventTool.stop(this.event);\n}\n\nfunction EmptyProxy() {}\nEmptyProxy.prototype.dispose = function () {};\n\nvar handlerNames = [\n    'click', 'dblclick', 'mousewheel', 'mouseout',\n    'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\n/**\n * @alias module:zrender/Handler\n * @constructor\n * @extends module:zrender/mixin/Eventful\n * @param {module:zrender/Storage} storage Storage instance.\n * @param {module:zrender/Painter} painter Painter instance.\n * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance.\n * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()).\n */\nvar Handler = function (storage, painter, proxy, painterRoot) {\n    Eventful.call(this);\n\n    this.storage = storage;\n\n    this.painter = painter;\n\n    this.painterRoot = painterRoot;\n\n    proxy = proxy || new EmptyProxy();\n\n    /**\n     * Proxy of event. can be Dom, WebGLSurface, etc.\n     */\n    this.proxy = null;\n\n    /**\n     * {target, topTarget, x, y}\n     * @private\n     * @type {Object}\n     */\n    this._hovered = {};\n\n    /**\n     * @private\n     * @type {Date}\n     */\n    this._lastTouchMoment;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this._lastX;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this._lastY;\n\n    /**\n     * @private\n     * @type {module:zrender/core/GestureMgr}\n     */\n    this._gestureMgr;\n\n\n    Draggable.call(this);\n\n    this.setHandlerProxy(proxy);\n};\n\nHandler.prototype = {\n\n    constructor: Handler,\n\n    setHandlerProxy: function (proxy) {\n        if (this.proxy) {\n            this.proxy.dispose();\n        }\n\n        if (proxy) {\n            util.each(handlerNames, function (name) {\n                proxy.on && proxy.on(name, this[name], this);\n            }, this);\n            // Attach handler\n            proxy.handler = this;\n        }\n        this.proxy = proxy;\n    },\n\n    mousemove: function (event) {\n        var x = event.zrX;\n        var y = event.zrY;\n\n        var lastHovered = this._hovered;\n        var lastHoveredTarget = lastHovered.target;\n\n        // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call\n        // (like 'setOption' or 'dispatchAction') in event handlers, we should find\n        // lastHovered again here. Otherwise 'mouseout' can not be triggered normally.\n        // See #6198.\n        if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n            lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n            lastHoveredTarget = lastHovered.target;\n        }\n\n        var hovered = this._hovered = this.findHover(x, y);\n        var hoveredTarget = hovered.target;\n\n        var proxy = this.proxy;\n        proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default');\n\n        // Mouse out on previous hovered element\n        if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n            this.dispatchToElement(lastHovered, 'mouseout', event);\n        }\n\n        // Mouse moving on one element\n        this.dispatchToElement(hovered, 'mousemove', event);\n\n        // Mouse over on a new element\n        if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n            this.dispatchToElement(hovered, 'mouseover', event);\n        }\n    },\n\n    mouseout: function (event) {\n        this.dispatchToElement(this._hovered, 'mouseout', event);\n\n        // There might be some doms created by upper layer application\n        // at the same level of painter.getViewportRoot() (e.g., tooltip\n        // dom created by echarts), where 'globalout' event should not\n        // be triggered when mouse enters these doms. (But 'mouseout'\n        // should be triggered at the original hovered element as usual).\n        var element = event.toElement || event.relatedTarget;\n        var innerDom;\n        do {\n            element = element && element.parentNode;\n        }\n        while (element && element.nodeType !== 9 && !(\n            innerDom = element === this.painterRoot\n        ));\n\n        !innerDom && this.trigger('globalout', {event: event});\n    },\n\n    /**\n     * Resize\n     */\n    resize: function (event) {\n        this._hovered = {};\n    },\n\n    /**\n     * Dispatch event\n     * @param {string} eventName\n     * @param {event=} eventArgs\n     */\n    dispatch: function (eventName, eventArgs) {\n        var handler = this[eventName];\n        handler && handler.call(this, eventArgs);\n    },\n\n    /**\n     * Dispose\n     */\n    dispose: function () {\n\n        this.proxy.dispose();\n\n        this.storage =\n        this.proxy =\n        this.painter = null;\n    },\n\n    /**\n     * 设置默认的cursor style\n     * @param {string} [cursorStyle='default'] 例如 crosshair\n     */\n    setCursorStyle: function (cursorStyle) {\n        var proxy = this.proxy;\n        proxy.setCursor && proxy.setCursor(cursorStyle);\n    },\n\n    /**\n     * 事件分发代理\n     *\n     * @private\n     * @param {Object} targetInfo {target, topTarget} 目标图形元素\n     * @param {string} eventName 事件名称\n     * @param {Object} event 事件对象\n     */\n    dispatchToElement: function (targetInfo, eventName, event) {\n        targetInfo = targetInfo || {};\n        var el = targetInfo.target;\n        if (el && el.silent) {\n            return;\n        }\n        var eventHandler = 'on' + eventName;\n        var eventPacket = makeEventPacket(eventName, targetInfo, event);\n\n        while (el) {\n            el[eventHandler]\n                && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket));\n\n            el.trigger(eventName, eventPacket);\n\n            el = el.parent;\n\n            if (eventPacket.cancelBubble) {\n                break;\n            }\n        }\n\n        if (!eventPacket.cancelBubble) {\n            // 冒泡到顶级 zrender 对象\n            this.trigger(eventName, eventPacket);\n            // 分发事件到用户自定义层\n            // 用户有可能在全局 click 事件中 dispose，所以需要判断下 painter 是否存在\n            this.painter && this.painter.eachOtherLayer(function (layer) {\n                if (typeof (layer[eventHandler]) === 'function') {\n                    layer[eventHandler].call(layer, eventPacket);\n                }\n                if (layer.trigger) {\n                    layer.trigger(eventName, eventPacket);\n                }\n            });\n        }\n    },\n\n    /**\n     * @private\n     * @param {number} x\n     * @param {number} y\n     * @param {module:zrender/graphic/Displayable} exclude\n     * @return {model:zrender/Element}\n     * @method\n     */\n    findHover: function (x, y, exclude) {\n        var list = this.storage.getDisplayList();\n        var out = {x: x, y: y};\n\n        for (var i = list.length - 1; i >= 0; i--) {\n            var hoverCheckResult;\n            if (list[i] !== exclude\n                // getDisplayList may include ignored item in VML mode\n                && !list[i].ignore\n                && (hoverCheckResult = isHover(list[i], x, y))\n            ) {\n                !out.topTarget && (out.topTarget = list[i]);\n                if (hoverCheckResult !== SILENT) {\n                    out.target = list[i];\n                    break;\n                }\n            }\n        }\n\n        return out;\n    },\n\n    processGesture: function (event, stage) {\n        if (!this._gestureMgr) {\n            this._gestureMgr = new GestureMgr();\n        }\n        var gestureMgr = this._gestureMgr;\n\n        stage === 'start' && gestureMgr.clear();\n\n        var gestureInfo = gestureMgr.recognize(\n            event,\n            this.findHover(event.zrX, event.zrY, null).target,\n            this.proxy.dom\n        );\n\n        stage === 'end' && gestureMgr.clear();\n\n        // Do not do any preventDefault here. Upper application do that if necessary.\n        if (gestureInfo) {\n            var type = gestureInfo.type;\n            event.gestureEvent = type;\n\n            this.dispatchToElement({target: gestureInfo.target}, type, gestureInfo.event);\n        }\n    }\n};\n\n// Common handlers\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n    Handler.prototype[name] = function (event) {\n        // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover\n        var hovered = this.findHover(event.zrX, event.zrY);\n        var hoveredTarget = hovered.target;\n\n        if (name === 'mousedown') {\n            this._downEl = hoveredTarget;\n            this._downPoint = [event.zrX, event.zrY];\n            // In case click triggered before mouseup\n            this._upEl = hoveredTarget;\n        }\n        else if (name === 'mouseup') {\n            this._upEl = hoveredTarget;\n        }\n        else if (name === 'click') {\n            if (this._downEl !== this._upEl\n                // Original click event is triggered on the whole canvas element,\n                // including the case that `mousedown` - `mousemove` - `mouseup`,\n                // which should be filtered, otherwise it will bring trouble to\n                // pan and zoom.\n                || !this._downPoint\n                // Arbitrary value\n                || vec2.dist(this._downPoint, [event.zrX, event.zrY]) > 4\n            ) {\n                return;\n            }\n            this._downPoint = null;\n        }\n\n        this.dispatchToElement(hovered, name, event);\n    };\n});\n\nfunction isHover(displayable, x, y) {\n    if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n        var el = displayable;\n        var isSilent;\n        while (el) {\n            // If clipped by ancestor.\n            // FIXME: If clipPath has neither stroke nor fill,\n            // el.clipPath.contain(x, y) will always return false.\n            if (el.clipPath && !el.clipPath.contain(x, y)) {\n                return false;\n            }\n            if (el.silent) {\n                isSilent = true;\n            }\n            el = el.parent;\n        }\n        return isSilent ? SILENT : true;\n    }\n\n    return false;\n}\n\nutil.mixin(Handler, Eventful);\nutil.mixin(Handler, Draggable);\n\nexport default Handler;\n","/**\n * 3x2矩阵操作类\n * @exports zrender/tool/matrix\n */\n\n/* global Float32Array */\n\nvar ArrayCtor = typeof Float32Array === 'undefined'\n    ? Array\n    : Float32Array;\n\n/**\n * Create a identity matrix.\n * @return {Float32Array|Array.<number>}\n */\nexport function create() {\n    var out = new ArrayCtor(6);\n    identity(out);\n\n    return out;\n}\n\n/**\n * 设置矩阵为单位矩阵\n * @param {Float32Array|Array.<number>} out\n */\nexport function identity(out) {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 1;\n    out[4] = 0;\n    out[5] = 0;\n    return out;\n}\n\n/**\n * 复制矩阵\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} m\n */\nexport function copy(out, m) {\n    out[0] = m[0];\n    out[1] = m[1];\n    out[2] = m[2];\n    out[3] = m[3];\n    out[4] = m[4];\n    out[5] = m[5];\n    return out;\n}\n\n/**\n * 矩阵相乘\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} m1\n * @param {Float32Array|Array.<number>} m2\n */\nexport function mul(out, m1, m2) {\n    // Consider matrix.mul(m, m2, m);\n    // where out is the same as m2.\n    // So use temp variable to escape error.\n    var out0 = m1[0] * m2[0] + m1[2] * m2[1];\n    var out1 = m1[1] * m2[0] + m1[3] * m2[1];\n    var out2 = m1[0] * m2[2] + m1[2] * m2[3];\n    var out3 = m1[1] * m2[2] + m1[3] * m2[3];\n    var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];\n    var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];\n    out[0] = out0;\n    out[1] = out1;\n    out[2] = out2;\n    out[3] = out3;\n    out[4] = out4;\n    out[5] = out5;\n    return out;\n}\n\n/**\n * 平移变换\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n * @param {Float32Array|Array.<number>} v\n */\nexport function translate(out, a, v) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    out[4] = a[4] + v[0];\n    out[5] = a[5] + v[1];\n    return out;\n}\n\n/**\n * 旋转变换\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n * @param {number} rad\n */\nexport function rotate(out, a, rad) {\n    var aa = a[0];\n    var ac = a[2];\n    var atx = a[4];\n    var ab = a[1];\n    var ad = a[3];\n    var aty = a[5];\n    var st = Math.sin(rad);\n    var ct = Math.cos(rad);\n\n    out[0] = aa * ct + ab * st;\n    out[1] = -aa * st + ab * ct;\n    out[2] = ac * ct + ad * st;\n    out[3] = -ac * st + ct * ad;\n    out[4] = ct * atx + st * aty;\n    out[5] = ct * aty - st * atx;\n    return out;\n}\n\n/**\n * 缩放变换\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n * @param {Float32Array|Array.<number>} v\n */\nexport function scale(out, a, v) {\n    var vx = v[0];\n    var vy = v[1];\n    out[0] = a[0] * vx;\n    out[1] = a[1] * vy;\n    out[2] = a[2] * vx;\n    out[3] = a[3] * vy;\n    out[4] = a[4] * vx;\n    out[5] = a[5] * vy;\n    return out;\n}\n\n/**\n * 求逆矩阵\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n */\nexport function invert(out, a) {\n\n    var aa = a[0];\n    var ac = a[2];\n    var atx = a[4];\n    var ab = a[1];\n    var ad = a[3];\n    var aty = a[5];\n\n    var det = aa * ad - ab * ac;\n    if (!det) {\n        return null;\n    }\n    det = 1.0 / det;\n\n    out[0] = ad * det;\n    out[1] = -ab * det;\n    out[2] = -ac * det;\n    out[3] = aa * det;\n    out[4] = (ac * aty - ad * atx) * det;\n    out[5] = (ab * atx - aa * aty) * det;\n    return out;\n}\n\n/**\n * Clone a new matrix.\n * @param {Float32Array|Array.<number>} a\n */\nexport function clone(a) {\n    var b = create();\n    copy(b, a);\n    return b;\n}","/**\n * 提供变换扩展\n * @module zrender/mixin/Transformable\n * @author pissang (https://www.github.com/pissang)\n */\n\nimport * as matrix from '../core/matrix';\nimport * as vector from '../core/vector';\n\nvar mIdentity = matrix.identity;\n\nvar EPSILON = 5e-5;\n\nfunction isNotAroundZero(val) {\n    return val > EPSILON || val < -EPSILON;\n}\n\n/**\n * @alias module:zrender/mixin/Transformable\n * @constructor\n */\nvar Transformable = function (opts) {\n    opts = opts || {};\n    // If there are no given position, rotation, scale\n    if (!opts.position) {\n        /**\n         * 平移\n         * @type {Array.<number>}\n         * @default [0, 0]\n         */\n        this.position = [0, 0];\n    }\n    if (opts.rotation == null) {\n        /**\n         * 旋转\n         * @type {Array.<number>}\n         * @default 0\n         */\n        this.rotation = 0;\n    }\n    if (!opts.scale) {\n        /**\n         * 缩放\n         * @type {Array.<number>}\n         * @default [1, 1]\n         */\n        this.scale = [1, 1];\n    }\n    /**\n     * 旋转和缩放的原点\n     * @type {Array.<number>}\n     * @default null\n     */\n    this.origin = this.origin || null;\n};\n\nvar transformableProto = Transformable.prototype;\ntransformableProto.transform = null;\n\n/**\n * 判断是否需要有坐标变换\n * 如果有坐标变换, 则从position, rotation, scale以及父节点的transform计算出自身的transform矩阵\n */\ntransformableProto.needLocalTransform = function () {\n    return isNotAroundZero(this.rotation)\n        || isNotAroundZero(this.position[0])\n        || isNotAroundZero(this.position[1])\n        || isNotAroundZero(this.scale[0] - 1)\n        || isNotAroundZero(this.scale[1] - 1);\n};\n\nvar scaleTmp = [];\ntransformableProto.updateTransform = function () {\n    var parent = this.parent;\n    var parentHasTransform = parent && parent.transform;\n    var needLocalTransform = this.needLocalTransform();\n\n    var m = this.transform;\n    if (!(needLocalTransform || parentHasTransform)) {\n        m && mIdentity(m);\n        return;\n    }\n\n    m = m || matrix.create();\n\n    if (needLocalTransform) {\n        this.getLocalTransform(m);\n    }\n    else {\n        mIdentity(m);\n    }\n\n    // 应用父节点变换\n    if (parentHasTransform) {\n        if (needLocalTransform) {\n            matrix.mul(m, parent.transform, m);\n        }\n        else {\n            matrix.copy(m, parent.transform);\n        }\n    }\n    // 保存这个变换矩阵\n    this.transform = m;\n\n    var globalScaleRatio = this.globalScaleRatio;\n    if (globalScaleRatio != null && globalScaleRatio !== 1) {\n        this.getGlobalScale(scaleTmp);\n        var relX = scaleTmp[0] < 0 ? -1 : 1;\n        var relY = scaleTmp[1] < 0 ? -1 : 1;\n        var sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0;\n        var sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0;\n\n        m[0] *= sx;\n        m[1] *= sx;\n        m[2] *= sy;\n        m[3] *= sy;\n    }\n\n    this.invTransform = this.invTransform || matrix.create();\n    matrix.invert(this.invTransform, m);\n};\n\ntransformableProto.getLocalTransform = function (m) {\n    return Transformable.getLocalTransform(this, m);\n};\n\n/**\n * 将自己的transform应用到context上\n * @param {CanvasRenderingContext2D} ctx\n */\ntransformableProto.setTransform = function (ctx) {\n    var m = this.transform;\n    var dpr = ctx.dpr || 1;\n    if (m) {\n        ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);\n    }\n    else {\n        ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    }\n};\n\ntransformableProto.restoreTransform = function (ctx) {\n    var dpr = ctx.dpr || 1;\n    ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n};\n\nvar tmpTransform = [];\nvar originTransform = matrix.create();\n\ntransformableProto.setLocalTransform = function (m) {\n    if (!m) {\n        // TODO return or set identity?\n        return;\n    }\n    var sx = m[0] * m[0] + m[1] * m[1];\n    var sy = m[2] * m[2] + m[3] * m[3];\n    var position = this.position;\n    var scale = this.scale;\n    if (isNotAroundZero(sx - 1)) {\n        sx = Math.sqrt(sx);\n    }\n    if (isNotAroundZero(sy - 1)) {\n        sy = Math.sqrt(sy);\n    }\n    if (m[0] < 0) {\n        sx = -sx;\n    }\n    if (m[3] < 0) {\n        sy = -sy;\n    }\n\n    position[0] = m[4];\n    position[1] = m[5];\n    scale[0] = sx;\n    scale[1] = sy;\n    this.rotation = Math.atan2(-m[1] / sy, m[0] / sx);\n};\n/**\n * 分解`transform`矩阵到`position`, `rotation`, `scale`\n */\ntransformableProto.decomposeTransform = function () {\n    if (!this.transform) {\n        return;\n    }\n    var parent = this.parent;\n    var m = this.transform;\n    if (parent && parent.transform) {\n        // Get local transform and decompose them to position, scale, rotation\n        matrix.mul(tmpTransform, parent.invTransform, m);\n        m = tmpTransform;\n    }\n    var origin = this.origin;\n    if (origin && (origin[0] || origin[1])) {\n        originTransform[4] = origin[0];\n        originTransform[5] = origin[1];\n        matrix.mul(tmpTransform, m, originTransform);\n        tmpTransform[4] -= origin[0];\n        tmpTransform[5] -= origin[1];\n        m = tmpTransform;\n    }\n\n    this.setLocalTransform(m);\n};\n\n/**\n * Get global scale\n * @return {Array.<number>}\n */\ntransformableProto.getGlobalScale = function (out) {\n    var m = this.transform;\n    out = out || [];\n    if (!m) {\n        out[0] = 1;\n        out[1] = 1;\n        return out;\n    }\n    out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]);\n    out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]);\n    if (m[0] < 0) {\n        out[0] = -out[0];\n    }\n    if (m[3] < 0) {\n        out[1] = -out[1];\n    }\n    return out;\n};\n/**\n * 变换坐标位置到 shape 的局部坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.<number>}\n */\ntransformableProto.transformCoordToLocal = function (x, y) {\n    var v2 = [x, y];\n    var invTransform = this.invTransform;\n    if (invTransform) {\n        vector.applyTransform(v2, v2, invTransform);\n    }\n    return v2;\n};\n\n/**\n * 变换局部坐标位置到全局坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.<number>}\n */\ntransformableProto.transformCoordToGlobal = function (x, y) {\n    var v2 = [x, y];\n    var transform = this.transform;\n    if (transform) {\n        vector.applyTransform(v2, v2, transform);\n    }\n    return v2;\n};\n\n/**\n * @static\n * @param {Object} target\n * @param {Array.<number>} target.origin\n * @param {number} target.rotation\n * @param {Array.<number>} target.position\n * @param {Array.<number>} [m]\n */\nTransformable.getLocalTransform = function (target, m) {\n    m = m || [];\n    mIdentity(m);\n\n    var origin = target.origin;\n    var scale = target.scale || [1, 1];\n    var rotation = target.rotation || 0;\n    var position = target.position || [0, 0];\n\n    if (origin) {\n        // Translate to origin\n        m[4] -= origin[0];\n        m[5] -= origin[1];\n    }\n    matrix.scale(m, m, scale);\n    if (rotation) {\n        matrix.rotate(m, m, rotation);\n    }\n    if (origin) {\n        // Translate back from origin\n        m[4] += origin[0];\n        m[5] += origin[1];\n    }\n\n    m[4] += position[0];\n    m[5] += position[1];\n\n    return m;\n};\n\nexport default Transformable;","/**\n * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js\n * @see http://sole.github.io/tween.js/examples/03_graphs.html\n * @exports zrender/animation/easing\n */\nvar easing = {\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    linear: function (k) {\n        return k;\n    },\n\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quadraticIn: function (k) {\n        return k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quadraticOut: function (k) {\n        return k * (2 - k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quadraticInOut: function (k) {\n        if ((k *= 2) < 1) {\n            return 0.5 * k * k;\n        }\n        return -0.5 * (--k * (k - 2) - 1);\n    },\n\n    // 三次方的缓动（t^3）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    cubicIn: function (k) {\n        return k * k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    cubicOut: function (k) {\n        return --k * k * k + 1;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    cubicInOut: function (k) {\n        if ((k *= 2) < 1) {\n            return 0.5 * k * k * k;\n        }\n        return 0.5 * ((k -= 2) * k * k + 2);\n    },\n\n    // 四次方的缓动（t^4）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quarticIn: function (k) {\n        return k * k * k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quarticOut: function (k) {\n        return 1 - (--k * k * k * k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quarticInOut: function (k) {\n        if ((k *= 2) < 1) {\n            return 0.5 * k * k * k * k;\n        }\n        return -0.5 * ((k -= 2) * k * k * k - 2);\n    },\n\n    // 五次方的缓动（t^5）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quinticIn: function (k) {\n        return k * k * k * k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quinticOut: function (k) {\n        return --k * k * k * k * k + 1;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quinticInOut: function (k) {\n        if ((k *= 2) < 1) {\n            return 0.5 * k * k * k * k * k;\n        }\n        return 0.5 * ((k -= 2) * k * k * k * k + 2);\n    },\n\n    // 正弦曲线的缓动（sin(t)）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    sinusoidalIn: function (k) {\n        return 1 - Math.cos(k * Math.PI / 2);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    sinusoidalOut: function (k) {\n        return Math.sin(k * Math.PI / 2);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    sinusoidalInOut: function (k) {\n        return 0.5 * (1 - Math.cos(Math.PI * k));\n    },\n\n    // 指数曲线的缓动（2^t）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    exponentialIn: function (k) {\n        return k === 0 ? 0 : Math.pow(1024, k - 1);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    exponentialOut: function (k) {\n        return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    exponentialInOut: function (k) {\n        if (k === 0) {\n            return 0;\n        }\n        if (k === 1) {\n            return 1;\n        }\n        if ((k *= 2) < 1) {\n            return 0.5 * Math.pow(1024, k - 1);\n        }\n        return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n    },\n\n    // 圆形曲线的缓动（sqrt(1-t^2)）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    circularIn: function (k) {\n        return 1 - Math.sqrt(1 - k * k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    circularOut: function (k) {\n        return Math.sqrt(1 - (--k * k));\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    circularInOut: function (k) {\n        if ((k *= 2) < 1) {\n            return -0.5 * (Math.sqrt(1 - k * k) - 1);\n        }\n        return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n    },\n\n    // 创建类似于弹簧在停止前来回振荡的动画\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    elasticIn: function (k) {\n        var s;\n        var a = 0.1;\n        var p = 0.4;\n        if (k === 0) {\n            return 0;\n        }\n        if (k === 1) {\n            return 1;\n        }\n        if (!a || a < 1) {\n            a = 1;\n            s = p / 4;\n        }\n        else {\n            s = p * Math.asin(1 / a) / (2 * Math.PI);\n        }\n        return -(a * Math.pow(2, 10 * (k -= 1))\n                    * Math.sin((k - s) * (2 * Math.PI) / p));\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    elasticOut: function (k) {\n        var s;\n        var a = 0.1;\n        var p = 0.4;\n        if (k === 0) {\n            return 0;\n        }\n        if (k === 1) {\n            return 1;\n        }\n        if (!a || a < 1) {\n            a = 1;\n            s = p / 4;\n        }\n        else {\n            s = p * Math.asin(1 / a) / (2 * Math.PI);\n        }\n        return (a * Math.pow(2, -10 * k)\n                    * Math.sin((k - s) * (2 * Math.PI) / p) + 1);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    elasticInOut: function (k) {\n        var s;\n        var a = 0.1;\n        var p = 0.4;\n        if (k === 0) {\n            return 0;\n        }\n        if (k === 1) {\n            return 1;\n        }\n        if (!a || a < 1) {\n            a = 1;\n            s = p / 4;\n        }\n        else {\n            s = p * Math.asin(1 / a) / (2 * Math.PI);\n        }\n        if ((k *= 2) < 1) {\n            return -0.5 * (a * Math.pow(2, 10 * (k -= 1))\n                * Math.sin((k - s) * (2 * Math.PI) / p));\n        }\n        return a * Math.pow(2, -10 * (k -= 1))\n                * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\n    },\n\n    // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    backIn: function (k) {\n        var s = 1.70158;\n        return k * k * ((s + 1) * k - s);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    backOut: function (k) {\n        var s = 1.70158;\n        return --k * k * ((s + 1) * k + s) + 1;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    backInOut: function (k) {\n        var s = 1.70158 * 1.525;\n        if ((k *= 2) < 1) {\n            return 0.5 * (k * k * ((s + 1) * k - s));\n        }\n        return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n    },\n\n    // 创建弹跳效果\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    bounceIn: function (k) {\n        return 1 - easing.bounceOut(1 - k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    bounceOut: function (k) {\n        if (k < (1 / 2.75)) {\n            return 7.5625 * k * k;\n        }\n        else if (k < (2 / 2.75)) {\n            return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n        }\n        else if (k < (2.5 / 2.75)) {\n            return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n        }\n        else {\n            return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n        }\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    bounceInOut: function (k) {\n        if (k < 0.5) {\n            return easing.bounceIn(k * 2) * 0.5;\n        }\n        return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n    }\n};\n\nexport default easing;","/**\n * 动画主控制器\n * @config target 动画对象，可以是数组，如果是数组的话会批量分发onframe等事件\n * @config life(1000) 动画时长\n * @config delay(0) 动画延迟时间\n * @config loop(true)\n * @config gap(0) 循环的间隔时间\n * @config onframe\n * @config easing(optional)\n * @config ondestroy(optional)\n * @config onrestart(optional)\n *\n * TODO pause\n */\n\nimport easingFuncs from './easing';\n\nfunction Clip(options) {\n\n    this._target = options.target;\n\n    // 生命周期\n    this._life = options.life || 1000;\n    // 延时\n    this._delay = options.delay || 0;\n    // 开始时间\n    // this._startTime = new Date().getTime() + this._delay;// 单位毫秒\n    this._initialized = false;\n\n    // 是否循环\n    this.loop = options.loop == null ? false : options.loop;\n\n    this.gap = options.gap || 0;\n\n    this.easing = options.easing || 'Linear';\n\n    this.onframe = options.onframe;\n    this.ondestroy = options.ondestroy;\n    this.onrestart = options.onrestart;\n\n    this._pausedTime = 0;\n    this._paused = false;\n}\n\nClip.prototype = {\n\n    constructor: Clip,\n\n    step: function (globalTime, deltaTime) {\n        // Set startTime on first step, or _startTime may has milleseconds different between clips\n        // PENDING\n        if (!this._initialized) {\n            this._startTime = globalTime + this._delay;\n            this._initialized = true;\n        }\n\n        if (this._paused) {\n            this._pausedTime += deltaTime;\n            return;\n        }\n\n        var percent = (globalTime - this._startTime - this._pausedTime) / this._life;\n\n        // 还没开始\n        if (percent < 0) {\n            return;\n        }\n\n        percent = Math.min(percent, 1);\n\n        var easing = this.easing;\n        var easingFunc = typeof easing === 'string' ? easingFuncs[easing] : easing;\n        var schedule = typeof easingFunc === 'function'\n            ? easingFunc(percent)\n            : percent;\n\n        this.fire('frame', schedule);\n\n        // 结束\n        if (percent === 1) {\n            if (this.loop) {\n                this.restart(globalTime);\n                // 重新开始周期\n                // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件\n                return 'restart';\n            }\n\n            // 动画完成将这个控制器标识为待删除\n            // 在Animation.update中进行批量删除\n            this._needsRemove = true;\n            return 'destroy';\n        }\n\n        return null;\n    },\n\n    restart: function (globalTime) {\n        var remainder = (globalTime - this._startTime - this._pausedTime) % this._life;\n        this._startTime = globalTime - remainder + this.gap;\n        this._pausedTime = 0;\n\n        this._needsRemove = false;\n    },\n\n    fire: function (eventType, arg) {\n        eventType = 'on' + eventType;\n        if (this[eventType]) {\n            this[eventType](this._target, arg);\n        }\n    },\n\n    pause: function () {\n        this._paused = true;\n    },\n\n    resume: function () {\n        this._paused = false;\n    }\n};\n\nexport default Clip;","// Simple LRU cache use doubly linked list\n// @module zrender/core/LRU\n\n/**\n * Simple double linked list. Compared with array, it has O(1) remove operation.\n * @constructor\n */\nvar LinkedList = function () {\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.head = null;\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.tail = null;\n\n    this._len = 0;\n};\n\nvar linkedListProto = LinkedList.prototype;\n/**\n * Insert a new value at the tail\n * @param  {} val\n * @return {module:zrender/core/LRU~Entry}\n */\nlinkedListProto.insert = function (val) {\n    var entry = new Entry(val);\n    this.insertEntry(entry);\n    return entry;\n};\n\n/**\n * Insert an entry at the tail\n * @param  {module:zrender/core/LRU~Entry} entry\n */\nlinkedListProto.insertEntry = function (entry) {\n    if (!this.head) {\n        this.head = this.tail = entry;\n    }\n    else {\n        this.tail.next = entry;\n        entry.prev = this.tail;\n        entry.next = null;\n        this.tail = entry;\n    }\n    this._len++;\n};\n\n/**\n * Remove entry.\n * @param  {module:zrender/core/LRU~Entry} entry\n */\nlinkedListProto.remove = function (entry) {\n    var prev = entry.prev;\n    var next = entry.next;\n    if (prev) {\n        prev.next = next;\n    }\n    else {\n        // Is head\n        this.head = next;\n    }\n    if (next) {\n        next.prev = prev;\n    }\n    else {\n        // Is tail\n        this.tail = prev;\n    }\n    entry.next = entry.prev = null;\n    this._len--;\n};\n\n/**\n * @return {number}\n */\nlinkedListProto.len = function () {\n    return this._len;\n};\n\n/**\n * Clear list\n */\nlinkedListProto.clear = function () {\n    this.head = this.tail = null;\n    this._len = 0;\n};\n\n/**\n * @constructor\n * @param {} val\n */\nvar Entry = function (val) {\n    /**\n     * @type {}\n     */\n    this.value = val;\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.next;\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.prev;\n};\n\n/**\n * LRU Cache\n * @constructor\n * @alias module:zrender/core/LRU\n */\nvar LRU = function (maxSize) {\n\n    this._list = new LinkedList();\n\n    this._map = {};\n\n    this._maxSize = maxSize || 10;\n\n    this._lastRemovedEntry = null;\n};\n\nvar LRUProto = LRU.prototype;\n\n/**\n * @param  {string} key\n * @param  {} value\n * @return {} Removed value\n */\nLRUProto.put = function (key, value) {\n    var list = this._list;\n    var map = this._map;\n    var removed = null;\n    if (map[key] == null) {\n        var len = list.len();\n        // Reuse last removed entry\n        var entry = this._lastRemovedEntry;\n\n        if (len >= this._maxSize && len > 0) {\n            // Remove the least recently used\n            var leastUsedEntry = list.head;\n            list.remove(leastUsedEntry);\n            delete map[leastUsedEntry.key];\n\n            removed = leastUsedEntry.value;\n            this._lastRemovedEntry = leastUsedEntry;\n        }\n\n        if (entry) {\n            entry.value = value;\n        }\n        else {\n            entry = new Entry(value);\n        }\n        entry.key = key;\n        list.insertEntry(entry);\n        map[key] = entry;\n    }\n\n    return removed;\n};\n\n/**\n * @param  {string} key\n * @return {}\n */\nLRUProto.get = function (key) {\n    var entry = this._map[key];\n    var list = this._list;\n    if (entry != null) {\n        // Put the latest used entry in the tail\n        if (entry !== list.tail) {\n            list.remove(entry);\n            list.insertEntry(entry);\n        }\n\n        return entry.value;\n    }\n};\n\n/**\n * Clear the cache\n */\nLRUProto.clear = function () {\n    this._list.clear();\n    this._map = {};\n};\n\nexport default LRU;","import LRU from '../core/LRU';\n\nvar kCSSColorTable = {\n    'transparent': [0, 0, 0, 0], 'aliceblue': [240, 248, 255, 1],\n    'antiquewhite': [250, 235, 215, 1], 'aqua': [0, 255, 255, 1],\n    'aquamarine': [127, 255, 212, 1], 'azure': [240, 255, 255, 1],\n    'beige': [245, 245, 220, 1], 'bisque': [255, 228, 196, 1],\n    'black': [0, 0, 0, 1], 'blanchedalmond': [255, 235, 205, 1],\n    'blue': [0, 0, 255, 1], 'blueviolet': [138, 43, 226, 1],\n    'brown': [165, 42, 42, 1], 'burlywood': [222, 184, 135, 1],\n    'cadetblue': [95, 158, 160, 1], 'chartreuse': [127, 255, 0, 1],\n    'chocolate': [210, 105, 30, 1], 'coral': [255, 127, 80, 1],\n    'cornflowerblue': [100, 149, 237, 1], 'cornsilk': [255, 248, 220, 1],\n    'crimson': [220, 20, 60, 1], 'cyan': [0, 255, 255, 1],\n    'darkblue': [0, 0, 139, 1], 'darkcyan': [0, 139, 139, 1],\n    'darkgoldenrod': [184, 134, 11, 1], 'darkgray': [169, 169, 169, 1],\n    'darkgreen': [0, 100, 0, 1], 'darkgrey': [169, 169, 169, 1],\n    'darkkhaki': [189, 183, 107, 1], 'darkmagenta': [139, 0, 139, 1],\n    'darkolivegreen': [85, 107, 47, 1], 'darkorange': [255, 140, 0, 1],\n    'darkorchid': [153, 50, 204, 1], 'darkred': [139, 0, 0, 1],\n    'darksalmon': [233, 150, 122, 1], 'darkseagreen': [143, 188, 143, 1],\n    'darkslateblue': [72, 61, 139, 1], 'darkslategray': [47, 79, 79, 1],\n    'darkslategrey': [47, 79, 79, 1], 'darkturquoise': [0, 206, 209, 1],\n    'darkviolet': [148, 0, 211, 1], 'deeppink': [255, 20, 147, 1],\n    'deepskyblue': [0, 191, 255, 1], 'dimgray': [105, 105, 105, 1],\n    'dimgrey': [105, 105, 105, 1], 'dodgerblue': [30, 144, 255, 1],\n    'firebrick': [178, 34, 34, 1], 'floralwhite': [255, 250, 240, 1],\n    'forestgreen': [34, 139, 34, 1], 'fuchsia': [255, 0, 255, 1],\n    'gainsboro': [220, 220, 220, 1], 'ghostwhite': [248, 248, 255, 1],\n    'gold': [255, 215, 0, 1], 'goldenrod': [218, 165, 32, 1],\n    'gray': [128, 128, 128, 1], 'green': [0, 128, 0, 1],\n    'greenyellow': [173, 255, 47, 1], 'grey': [128, 128, 128, 1],\n    'honeydew': [240, 255, 240, 1], 'hotpink': [255, 105, 180, 1],\n    'indianred': [205, 92, 92, 1], 'indigo': [75, 0, 130, 1],\n    'ivory': [255, 255, 240, 1], 'khaki': [240, 230, 140, 1],\n    'lavender': [230, 230, 250, 1], 'lavenderblush': [255, 240, 245, 1],\n    'lawngreen': [124, 252, 0, 1], 'lemonchiffon': [255, 250, 205, 1],\n    'lightblue': [173, 216, 230, 1], 'lightcoral': [240, 128, 128, 1],\n    'lightcyan': [224, 255, 255, 1], 'lightgoldenrodyellow': [250, 250, 210, 1],\n    'lightgray': [211, 211, 211, 1], 'lightgreen': [144, 238, 144, 1],\n    'lightgrey': [211, 211, 211, 1], 'lightpink': [255, 182, 193, 1],\n    'lightsalmon': [255, 160, 122, 1], 'lightseagreen': [32, 178, 170, 1],\n    'lightskyblue': [135, 206, 250, 1], 'lightslategray': [119, 136, 153, 1],\n    'lightslategrey': [119, 136, 153, 1], 'lightsteelblue': [176, 196, 222, 1],\n    'lightyellow': [255, 255, 224, 1], 'lime': [0, 255, 0, 1],\n    'limegreen': [50, 205, 50, 1], 'linen': [250, 240, 230, 1],\n    'magenta': [255, 0, 255, 1], 'maroon': [128, 0, 0, 1],\n    'mediumaquamarine': [102, 205, 170, 1], 'mediumblue': [0, 0, 205, 1],\n    'mediumorchid': [186, 85, 211, 1], 'mediumpurple': [147, 112, 219, 1],\n    'mediumseagreen': [60, 179, 113, 1], 'mediumslateblue': [123, 104, 238, 1],\n    'mediumspringgreen': [0, 250, 154, 1], 'mediumturquoise': [72, 209, 204, 1],\n    'mediumvioletred': [199, 21, 133, 1], 'midnightblue': [25, 25, 112, 1],\n    'mintcream': [245, 255, 250, 1], 'mistyrose': [255, 228, 225, 1],\n    'moccasin': [255, 228, 181, 1], 'navajowhite': [255, 222, 173, 1],\n    'navy': [0, 0, 128, 1], 'oldlace': [253, 245, 230, 1],\n    'olive': [128, 128, 0, 1], 'olivedrab': [107, 142, 35, 1],\n    'orange': [255, 165, 0, 1], 'orangered': [255, 69, 0, 1],\n    'orchid': [218, 112, 214, 1], 'palegoldenrod': [238, 232, 170, 1],\n    'palegreen': [152, 251, 152, 1], 'paleturquoise': [175, 238, 238, 1],\n    'palevioletred': [219, 112, 147, 1], 'papayawhip': [255, 239, 213, 1],\n    'peachpuff': [255, 218, 185, 1], 'peru': [205, 133, 63, 1],\n    'pink': [255, 192, 203, 1], 'plum': [221, 160, 221, 1],\n    'powderblue': [176, 224, 230, 1], 'purple': [128, 0, 128, 1],\n    'red': [255, 0, 0, 1], 'rosybrown': [188, 143, 143, 1],\n    'royalblue': [65, 105, 225, 1], 'saddlebrown': [139, 69, 19, 1],\n    'salmon': [250, 128, 114, 1], 'sandybrown': [244, 164, 96, 1],\n    'seagreen': [46, 139, 87, 1], 'seashell': [255, 245, 238, 1],\n    'sienna': [160, 82, 45, 1], 'silver': [192, 192, 192, 1],\n    'skyblue': [135, 206, 235, 1], 'slateblue': [106, 90, 205, 1],\n    'slategray': [112, 128, 144, 1], 'slategrey': [112, 128, 144, 1],\n    'snow': [255, 250, 250, 1], 'springgreen': [0, 255, 127, 1],\n    'steelblue': [70, 130, 180, 1], 'tan': [210, 180, 140, 1],\n    'teal': [0, 128, 128, 1], 'thistle': [216, 191, 216, 1],\n    'tomato': [255, 99, 71, 1], 'turquoise': [64, 224, 208, 1],\n    'violet': [238, 130, 238, 1], 'wheat': [245, 222, 179, 1],\n    'white': [255, 255, 255, 1], 'whitesmoke': [245, 245, 245, 1],\n    'yellow': [255, 255, 0, 1], 'yellowgreen': [154, 205, 50, 1]\n};\n\nfunction clampCssByte(i) {  // Clamp to integer 0 .. 255.\n    i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n    return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clampCssAngle(i) {  // Clamp to integer 0 .. 360.\n    i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n    return i < 0 ? 0 : i > 360 ? 360 : i;\n}\n\nfunction clampCssFloat(f) {  // Clamp to float 0.0 .. 1.0.\n    return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parseCssInt(str) {  // int or percentage.\n    if (str.length && str.charAt(str.length - 1) === '%') {\n        return clampCssByte(parseFloat(str) / 100 * 255);\n    }\n    return clampCssByte(parseInt(str, 10));\n}\n\nfunction parseCssFloat(str) {  // float or percentage.\n    if (str.length && str.charAt(str.length - 1) === '%') {\n        return clampCssFloat(parseFloat(str) / 100);\n    }\n    return clampCssFloat(parseFloat(str));\n}\n\nfunction cssHueToRgb(m1, m2, h) {\n    if (h < 0) {\n        h += 1;\n    }\n    else if (h > 1) {\n        h -= 1;\n    }\n\n    if (h * 6 < 1) {\n        return m1 + (m2 - m1) * h * 6;\n    }\n    if (h * 2 < 1) {\n        return m2;\n    }\n    if (h * 3 < 2) {\n        return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n    }\n    return m1;\n}\n\nfunction lerpNumber(a, b, p) {\n    return a + (b - a) * p;\n}\n\nfunction setRgba(out, r, g, b, a) {\n    out[0] = r;\n    out[1] = g;\n    out[2] = b;\n    out[3] = a;\n    return out;\n}\nfunction copyRgba(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    return out;\n}\n\nvar colorCache = new LRU(20);\nvar lastRemovedArr = null;\n\nfunction putToCache(colorStr, rgbaArr) {\n    // Reuse removed array\n    if (lastRemovedArr) {\n        copyRgba(lastRemovedArr, rgbaArr);\n    }\n    lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice()));\n}\n\n/**\n * @param {string} colorStr\n * @param {Array.<number>} out\n * @return {Array.<number>}\n * @memberOf module:zrender/util/color\n */\nexport function parse(colorStr, rgbaArr) {\n    if (!colorStr) {\n        return;\n    }\n    rgbaArr = rgbaArr || [];\n\n    var cached = colorCache.get(colorStr);\n    if (cached) {\n        return copyRgba(rgbaArr, cached);\n    }\n\n    // colorStr may be not string\n    colorStr = colorStr + '';\n    // Remove all whitespace, not compliant, but should just be more accepting.\n    var str = colorStr.replace(/ /g, '').toLowerCase();\n\n    // Color keywords (and transparent) lookup.\n    if (str in kCSSColorTable) {\n        copyRgba(rgbaArr, kCSSColorTable[str]);\n        putToCache(colorStr, rgbaArr);\n        return rgbaArr;\n    }\n\n    // #abc and #abc123 syntax.\n    if (str.charAt(0) === '#') {\n        if (str.length === 4) {\n            var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n            if (!(iv >= 0 && iv <= 0xfff)) {\n                setRgba(rgbaArr, 0, 0, 0, 1);\n                return;  // Covers NaN.\n            }\n            setRgba(rgbaArr,\n                ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n                (iv & 0xf0) | ((iv & 0xf0) >> 4),\n                (iv & 0xf) | ((iv & 0xf) << 4),\n                1\n            );\n            putToCache(colorStr, rgbaArr);\n            return rgbaArr;\n        }\n        else if (str.length === 7) {\n            var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n            if (!(iv >= 0 && iv <= 0xffffff)) {\n                setRgba(rgbaArr, 0, 0, 0, 1);\n                return;  // Covers NaN.\n            }\n            setRgba(rgbaArr,\n                (iv & 0xff0000) >> 16,\n                (iv & 0xff00) >> 8,\n                iv & 0xff,\n                1\n            );\n            putToCache(colorStr, rgbaArr);\n            return rgbaArr;\n        }\n\n        return;\n    }\n    var op = str.indexOf('(');\n    var ep = str.indexOf(')');\n    if (op !== -1 && ep + 1 === str.length) {\n        var fname = str.substr(0, op);\n        var params = str.substr(op + 1, ep - (op + 1)).split(',');\n        var alpha = 1;  // To allow case fallthrough.\n        switch (fname) {\n            case 'rgba':\n                if (params.length !== 4) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                alpha = parseCssFloat(params.pop()); // jshint ignore:line\n            // Fall through.\n            case 'rgb':\n                if (params.length !== 3) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                setRgba(rgbaArr,\n                    parseCssInt(params[0]),\n                    parseCssInt(params[1]),\n                    parseCssInt(params[2]),\n                    alpha\n                );\n                putToCache(colorStr, rgbaArr);\n                return rgbaArr;\n            case 'hsla':\n                if (params.length !== 4) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                params[3] = parseCssFloat(params[3]);\n                hsla2rgba(params, rgbaArr);\n                putToCache(colorStr, rgbaArr);\n                return rgbaArr;\n            case 'hsl':\n                if (params.length !== 3) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                hsla2rgba(params, rgbaArr);\n                putToCache(colorStr, rgbaArr);\n                return rgbaArr;\n            default:\n                return;\n        }\n    }\n\n    setRgba(rgbaArr, 0, 0, 0, 1);\n    return;\n}\n\n/**\n * @param {Array.<number>} hsla\n * @param {Array.<number>} rgba\n * @return {Array.<number>} rgba\n */\nfunction hsla2rgba(hsla, rgba) {\n    var h = (((parseFloat(hsla[0]) % 360) + 360) % 360) / 360;  // 0 .. 1\n    // NOTE(deanm): According to the CSS spec s/l should only be\n    // percentages, but we don't bother and let float or percentage.\n    var s = parseCssFloat(hsla[1]);\n    var l = parseCssFloat(hsla[2]);\n    var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n    var m1 = l * 2 - m2;\n\n    rgba = rgba || [];\n    setRgba(rgba,\n        clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255),\n        clampCssByte(cssHueToRgb(m1, m2, h) * 255),\n        clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255),\n        1\n    );\n\n    if (hsla.length === 4) {\n        rgba[3] = hsla[3];\n    }\n\n    return rgba;\n}\n\n/**\n * @param {Array.<number>} rgba\n * @return {Array.<number>} hsla\n */\nfunction rgba2hsla(rgba) {\n    if (!rgba) {\n        return;\n    }\n\n    // RGB from 0 to 255\n    var R = rgba[0] / 255;\n    var G = rgba[1] / 255;\n    var B = rgba[2] / 255;\n\n    var vMin = Math.min(R, G, B); // Min. value of RGB\n    var vMax = Math.max(R, G, B); // Max. value of RGB\n    var delta = vMax - vMin; // Delta RGB value\n\n    var L = (vMax + vMin) / 2;\n    var H;\n    var S;\n    // HSL results from 0 to 1\n    if (delta === 0) {\n        H = 0;\n        S = 0;\n    }\n    else {\n        if (L < 0.5) {\n            S = delta / (vMax + vMin);\n        }\n        else {\n            S = delta / (2 - vMax - vMin);\n        }\n\n        var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta;\n        var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta;\n        var deltaB = (((vMax - B) / 6) + (delta / 2)) / delta;\n\n        if (R === vMax) {\n            H = deltaB - deltaG;\n        }\n        else if (G === vMax) {\n            H = (1 / 3) + deltaR - deltaB;\n        }\n        else if (B === vMax) {\n            H = (2 / 3) + deltaG - deltaR;\n        }\n\n        if (H < 0) {\n            H += 1;\n        }\n\n        if (H > 1) {\n            H -= 1;\n        }\n    }\n\n    var hsla = [H * 360, S, L];\n\n    if (rgba[3] != null) {\n        hsla.push(rgba[3]);\n    }\n\n    return hsla;\n}\n\n/**\n * @param {string} color\n * @param {number} level\n * @return {string}\n * @memberOf module:zrender/util/color\n */\nexport function lift(color, level) {\n    var colorArr = parse(color);\n    if (colorArr) {\n        for (var i = 0; i < 3; i++) {\n            if (level < 0) {\n                colorArr[i] = colorArr[i] * (1 - level) | 0;\n            }\n            else {\n                colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0;\n            }\n            if (colorArr[i] > 255) {\n                colorArr[i] = 255;\n            }\n            else if (color[i] < 0) {\n                colorArr[i] = 0;\n            }\n        }\n        return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb');\n    }\n}\n\n/**\n * @param {string} color\n * @return {string}\n * @memberOf module:zrender/util/color\n */\nexport function toHex(color) {\n    var colorArr = parse(color);\n    if (colorArr) {\n        return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1);\n    }\n}\n\n/**\n * Map value to color. Faster than lerp methods because color is represented by rgba array.\n * @param {number} normalizedValue A float between 0 and 1.\n * @param {Array.<Array.<number>>} colors List of rgba color array\n * @param {Array.<number>} [out] Mapped gba color array\n * @return {Array.<number>} will be null/undefined if input illegal.\n */\nexport function fastLerp(normalizedValue, colors, out) {\n    if (!(colors && colors.length)\n        || !(normalizedValue >= 0 && normalizedValue <= 1)\n    ) {\n        return;\n    }\n\n    out = out || [];\n\n    var value = normalizedValue * (colors.length - 1);\n    var leftIndex = Math.floor(value);\n    var rightIndex = Math.ceil(value);\n    var leftColor = colors[leftIndex];\n    var rightColor = colors[rightIndex];\n    var dv = value - leftIndex;\n    out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv));\n    out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv));\n    out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv));\n    out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv));\n\n    return out;\n}\n\n/**\n * @deprecated\n */\nexport var fastMapToColor = fastLerp;\n\n/**\n * @param {number} normalizedValue A float between 0 and 1.\n * @param {Array.<string>} colors Color list.\n * @param {boolean=} fullOutput Default false.\n * @return {(string|Object)} Result color. If fullOutput,\n *                           return {color: ..., leftIndex: ..., rightIndex: ..., value: ...},\n * @memberOf module:zrender/util/color\n */\nexport function lerp(normalizedValue, colors, fullOutput) {\n    if (!(colors && colors.length)\n        || !(normalizedValue >= 0 && normalizedValue <= 1)\n    ) {\n        return;\n    }\n\n    var value = normalizedValue * (colors.length - 1);\n    var leftIndex = Math.floor(value);\n    var rightIndex = Math.ceil(value);\n    var leftColor = parse(colors[leftIndex]);\n    var rightColor = parse(colors[rightIndex]);\n    var dv = value - leftIndex;\n\n    var color = stringify(\n        [\n            clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)),\n            clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)),\n            clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)),\n            clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv))\n        ],\n        'rgba'\n    );\n\n    return fullOutput\n        ? {\n            color: color,\n            leftIndex: leftIndex,\n            rightIndex: rightIndex,\n            value: value\n        }\n        : color;\n}\n\n/**\n * @deprecated\n */\nexport var mapToColor = lerp;\n\n/**\n * @param {string} color\n * @param {number=} h 0 ~ 360, ignore when null.\n * @param {number=} s 0 ~ 1, ignore when null.\n * @param {number=} l 0 ~ 1, ignore when null.\n * @return {string} Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nexport function modifyHSL(color, h, s, l) {\n    color = parse(color);\n\n    if (color) {\n        color = rgba2hsla(color);\n        h != null && (color[0] = clampCssAngle(h));\n        s != null && (color[1] = parseCssFloat(s));\n        l != null && (color[2] = parseCssFloat(l));\n\n        return stringify(hsla2rgba(color), 'rgba');\n    }\n}\n\n/**\n * @param {string} color\n * @param {number=} alpha 0 ~ 1\n * @return {string} Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nexport function modifyAlpha(color, alpha) {\n    color = parse(color);\n\n    if (color && alpha != null) {\n        color[3] = clampCssFloat(alpha);\n        return stringify(color, 'rgba');\n    }\n}\n\n/**\n * @param {Array.<number>} arrColor like [12,33,44,0.4]\n * @param {string} type 'rgba', 'hsva', ...\n * @return {string} Result color. (If input illegal, return undefined).\n */\nexport function stringify(arrColor, type) {\n    if (!arrColor || !arrColor.length) {\n        return;\n    }\n    var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2];\n    if (type === 'rgba' || type === 'hsva' || type === 'hsla') {\n        colorStr += ',' + arrColor[3];\n    }\n    return type + '(' + colorStr + ')';\n}\n","/**\n * @module echarts/animation/Animator\n */\n\nimport Clip from './Clip';\nimport * as color from '../tool/color';\nimport {isArrayLike} from '../core/util';\n\nvar arraySlice = Array.prototype.slice;\n\nfunction defaultGetter(target, key) {\n    return target[key];\n}\n\nfunction defaultSetter(target, key, value) {\n    target[key] = value;\n}\n\n/**\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} percent\n * @return {number}\n */\nfunction interpolateNumber(p0, p1, percent) {\n    return (p1 - p0) * percent + p0;\n}\n\n/**\n * @param  {string} p0\n * @param  {string} p1\n * @param  {number} percent\n * @return {string}\n */\nfunction interpolateString(p0, p1, percent) {\n    return percent > 0.5 ? p1 : p0;\n}\n\n/**\n * @param  {Array} p0\n * @param  {Array} p1\n * @param  {number} percent\n * @param  {Array} out\n * @param  {number} arrDim\n */\nfunction interpolateArray(p0, p1, percent, out, arrDim) {\n    var len = p0.length;\n    if (arrDim === 1) {\n        for (var i = 0; i < len; i++) {\n            out[i] = interpolateNumber(p0[i], p1[i], percent);\n        }\n    }\n    else {\n        var len2 = len && p0[0].length;\n        for (var i = 0; i < len; i++) {\n            for (var j = 0; j < len2; j++) {\n                out[i][j] = interpolateNumber(\n                    p0[i][j], p1[i][j], percent\n                );\n            }\n        }\n    }\n}\n\n// arr0 is source array, arr1 is target array.\n// Do some preprocess to avoid error happened when interpolating from arr0 to arr1\nfunction fillArr(arr0, arr1, arrDim) {\n    var arr0Len = arr0.length;\n    var arr1Len = arr1.length;\n    if (arr0Len !== arr1Len) {\n        // FIXME Not work for TypedArray\n        var isPreviousLarger = arr0Len > arr1Len;\n        if (isPreviousLarger) {\n            // Cut the previous\n            arr0.length = arr1Len;\n        }\n        else {\n            // Fill the previous\n            for (var i = arr0Len; i < arr1Len; i++) {\n                arr0.push(\n                    arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i])\n                );\n            }\n        }\n    }\n    // Handling NaN value\n    var len2 = arr0[0] && arr0[0].length;\n    for (var i = 0; i < arr0.length; i++) {\n        if (arrDim === 1) {\n            if (isNaN(arr0[i])) {\n                arr0[i] = arr1[i];\n            }\n        }\n        else {\n            for (var j = 0; j < len2; j++) {\n                if (isNaN(arr0[i][j])) {\n                    arr0[i][j] = arr1[i][j];\n                }\n            }\n        }\n    }\n}\n\n/**\n * @param  {Array} arr0\n * @param  {Array} arr1\n * @param  {number} arrDim\n * @return {boolean}\n */\nfunction isArraySame(arr0, arr1, arrDim) {\n    if (arr0 === arr1) {\n        return true;\n    }\n    var len = arr0.length;\n    if (len !== arr1.length) {\n        return false;\n    }\n    if (arrDim === 1) {\n        for (var i = 0; i < len; i++) {\n            if (arr0[i] !== arr1[i]) {\n                return false;\n            }\n        }\n    }\n    else {\n        var len2 = arr0[0].length;\n        for (var i = 0; i < len; i++) {\n            for (var j = 0; j < len2; j++) {\n                if (arr0[i][j] !== arr1[i][j]) {\n                    return false;\n                }\n            }\n        }\n    }\n    return true;\n}\n\n/**\n * Catmull Rom interpolate array\n * @param  {Array} p0\n * @param  {Array} p1\n * @param  {Array} p2\n * @param  {Array} p3\n * @param  {number} t\n * @param  {number} t2\n * @param  {number} t3\n * @param  {Array} out\n * @param  {number} arrDim\n */\nfunction catmullRomInterpolateArray(\n    p0, p1, p2, p3, t, t2, t3, out, arrDim\n) {\n    var len = p0.length;\n    if (arrDim === 1) {\n        for (var i = 0; i < len; i++) {\n            out[i] = catmullRomInterpolate(\n                p0[i], p1[i], p2[i], p3[i], t, t2, t3\n            );\n        }\n    }\n    else {\n        var len2 = p0[0].length;\n        for (var i = 0; i < len; i++) {\n            for (var j = 0; j < len2; j++) {\n                out[i][j] = catmullRomInterpolate(\n                    p0[i][j], p1[i][j], p2[i][j], p3[i][j],\n                    t, t2, t3\n                );\n            }\n        }\n    }\n}\n\n/**\n * Catmull Rom interpolate number\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @param  {number} t2\n * @param  {number} t3\n * @return {number}\n */\nfunction catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {\n    var v0 = (p2 - p0) * 0.5;\n    var v1 = (p3 - p1) * 0.5;\n    return (2 * (p1 - p2) + v0 + v1) * t3\n            + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n            + v0 * t + p1;\n}\n\nfunction cloneValue(value) {\n    if (isArrayLike(value)) {\n        var len = value.length;\n        if (isArrayLike(value[0])) {\n            var ret = [];\n            for (var i = 0; i < len; i++) {\n                ret.push(arraySlice.call(value[i]));\n            }\n            return ret;\n        }\n\n        return arraySlice.call(value);\n    }\n\n    return value;\n}\n\nfunction rgba2String(rgba) {\n    rgba[0] = Math.floor(rgba[0]);\n    rgba[1] = Math.floor(rgba[1]);\n    rgba[2] = Math.floor(rgba[2]);\n\n    return 'rgba(' + rgba.join(',') + ')';\n}\n\nfunction getArrayDim(keyframes) {\n    var lastValue = keyframes[keyframes.length - 1].value;\n    return isArrayLike(lastValue && lastValue[0]) ? 2 : 1;\n}\n\nfunction createTrackClip(animator, easing, oneTrackDone, keyframes, propName, forceAnimate) {\n    var getter = animator._getter;\n    var setter = animator._setter;\n    var useSpline = easing === 'spline';\n\n    var trackLen = keyframes.length;\n    if (!trackLen) {\n        return;\n    }\n    // Guess data type\n    var firstVal = keyframes[0].value;\n    var isValueArray = isArrayLike(firstVal);\n    var isValueColor = false;\n    var isValueString = false;\n\n    // For vertices morphing\n    var arrDim = isValueArray ? getArrayDim(keyframes) : 0;\n\n    var trackMaxTime;\n    // Sort keyframe as ascending\n    keyframes.sort(function (a, b) {\n        return a.time - b.time;\n    });\n\n    trackMaxTime = keyframes[trackLen - 1].time;\n    // Percents of each keyframe\n    var kfPercents = [];\n    // Value of each keyframe\n    var kfValues = [];\n    var prevValue = keyframes[0].value;\n    var isAllValueEqual = true;\n    for (var i = 0; i < trackLen; i++) {\n        kfPercents.push(keyframes[i].time / trackMaxTime);\n        // Assume value is a color when it is a string\n        var value = keyframes[i].value;\n\n        // Check if value is equal, deep check if value is array\n        if (!((isValueArray && isArraySame(value, prevValue, arrDim))\n            || (!isValueArray && value === prevValue))) {\n            isAllValueEqual = false;\n        }\n        prevValue = value;\n\n        // Try converting a string to a color array\n        if (typeof value === 'string') {\n            var colorArray = color.parse(value);\n            if (colorArray) {\n                value = colorArray;\n                isValueColor = true;\n            }\n            else {\n                isValueString = true;\n            }\n        }\n        kfValues.push(value);\n    }\n    if (!forceAnimate && isAllValueEqual) {\n        return;\n    }\n\n    var lastValue = kfValues[trackLen - 1];\n    // Polyfill array and NaN value\n    for (var i = 0; i < trackLen - 1; i++) {\n        if (isValueArray) {\n            fillArr(kfValues[i], lastValue, arrDim);\n        }\n        else {\n            if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) {\n                kfValues[i] = lastValue;\n            }\n        }\n    }\n    isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim);\n\n    // Cache the key of last frame to speed up when\n    // animation playback is sequency\n    var lastFrame = 0;\n    var lastFramePercent = 0;\n    var start;\n    var w;\n    var p0;\n    var p1;\n    var p2;\n    var p3;\n\n    if (isValueColor) {\n        var rgba = [0, 0, 0, 0];\n    }\n\n    var onframe = function (target, percent) {\n        // Find the range keyframes\n        // kf1-----kf2---------current--------kf3\n        // find kf2 and kf3 and do interpolation\n        var frame;\n        // In the easing function like elasticOut, percent may less than 0\n        if (percent < 0) {\n            frame = 0;\n        }\n        else if (percent < lastFramePercent) {\n            // Start from next key\n            // PENDING start from lastFrame ?\n            start = Math.min(lastFrame + 1, trackLen - 1);\n            for (frame = start; frame >= 0; frame--) {\n                if (kfPercents[frame] <= percent) {\n                    break;\n                }\n            }\n            // PENDING really need to do this ?\n            frame = Math.min(frame, trackLen - 2);\n        }\n        else {\n            for (frame = lastFrame; frame < trackLen; frame++) {\n                if (kfPercents[frame] > percent) {\n                    break;\n                }\n            }\n            frame = Math.min(frame - 1, trackLen - 2);\n        }\n        lastFrame = frame;\n        lastFramePercent = percent;\n\n        var range = (kfPercents[frame + 1] - kfPercents[frame]);\n        if (range === 0) {\n            return;\n        }\n        else {\n            w = (percent - kfPercents[frame]) / range;\n        }\n        if (useSpline) {\n            p1 = kfValues[frame];\n            p0 = kfValues[frame === 0 ? frame : frame - 1];\n            p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1];\n            p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2];\n            if (isValueArray) {\n                catmullRomInterpolateArray(\n                    p0, p1, p2, p3, w, w * w, w * w * w,\n                    getter(target, propName),\n                    arrDim\n                );\n            }\n            else {\n                var value;\n                if (isValueColor) {\n                    value = catmullRomInterpolateArray(\n                        p0, p1, p2, p3, w, w * w, w * w * w,\n                        rgba, 1\n                    );\n                    value = rgba2String(rgba);\n                }\n                else if (isValueString) {\n                    // String is step(0.5)\n                    return interpolateString(p1, p2, w);\n                }\n                else {\n                    value = catmullRomInterpolate(\n                        p0, p1, p2, p3, w, w * w, w * w * w\n                    );\n                }\n                setter(\n                    target,\n                    propName,\n                    value\n                );\n            }\n        }\n        else {\n            if (isValueArray) {\n                interpolateArray(\n                    kfValues[frame], kfValues[frame + 1], w,\n                    getter(target, propName),\n                    arrDim\n                );\n            }\n            else {\n                var value;\n                if (isValueColor) {\n                    interpolateArray(\n                        kfValues[frame], kfValues[frame + 1], w,\n                        rgba, 1\n                    );\n                    value = rgba2String(rgba);\n                }\n                else if (isValueString) {\n                    // String is step(0.5)\n                    return interpolateString(kfValues[frame], kfValues[frame + 1], w);\n                }\n                else {\n                    value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w);\n                }\n                setter(\n                    target,\n                    propName,\n                    value\n                );\n            }\n        }\n    };\n\n    var clip = new Clip({\n        target: animator._target,\n        life: trackMaxTime,\n        loop: animator._loop,\n        delay: animator._delay,\n        onframe: onframe,\n        ondestroy: oneTrackDone\n    });\n\n    if (easing && easing !== 'spline') {\n        clip.easing = easing;\n    }\n\n    return clip;\n}\n\n/**\n * @alias module:zrender/animation/Animator\n * @constructor\n * @param {Object} target\n * @param {boolean} loop\n * @param {Function} getter\n * @param {Function} setter\n */\nvar Animator = function (target, loop, getter, setter) {\n    this._tracks = {};\n    this._target = target;\n\n    this._loop = loop || false;\n\n    this._getter = getter || defaultGetter;\n    this._setter = setter || defaultSetter;\n\n    this._clipCount = 0;\n\n    this._delay = 0;\n\n    this._doneList = [];\n\n    this._onframeList = [];\n\n    this._clipList = [];\n};\n\nAnimator.prototype = {\n    /**\n     * 设置动画关键帧\n     * @param  {number} time 关键帧时间，单位是ms\n     * @param  {Object} props 关键帧的属性值，key-value表示\n     * @return {module:zrender/animation/Animator}\n     */\n    when: function (time /* ms */, props) {\n        var tracks = this._tracks;\n        for (var propName in props) {\n            if (!props.hasOwnProperty(propName)) {\n                continue;\n            }\n\n            if (!tracks[propName]) {\n                tracks[propName] = [];\n                // Invalid value\n                var value = this._getter(this._target, propName);\n                if (value == null) {\n                    // zrLog('Invalid property ' + propName);\n                    continue;\n                }\n                // If time is 0\n                //  Then props is given initialize value\n                // Else\n                //  Initialize value from current prop value\n                if (time !== 0) {\n                    tracks[propName].push({\n                        time: 0,\n                        value: cloneValue(value)\n                    });\n                }\n            }\n            tracks[propName].push({\n                time: time,\n                value: props[propName]\n            });\n        }\n        return this;\n    },\n    /**\n     * 添加动画每一帧的回调函数\n     * @param  {Function} callback\n     * @return {module:zrender/animation/Animator}\n     */\n    during: function (callback) {\n        this._onframeList.push(callback);\n        return this;\n    },\n\n    pause: function () {\n        for (var i = 0; i < this._clipList.length; i++) {\n            this._clipList[i].pause();\n        }\n        this._paused = true;\n    },\n\n    resume: function () {\n        for (var i = 0; i < this._clipList.length; i++) {\n            this._clipList[i].resume();\n        }\n        this._paused = false;\n    },\n\n    isPaused: function () {\n        return !!this._paused;\n    },\n\n    _doneCallback: function () {\n        // Clear all tracks\n        this._tracks = {};\n        // Clear all clips\n        this._clipList.length = 0;\n\n        var doneList = this._doneList;\n        var len = doneList.length;\n        for (var i = 0; i < len; i++) {\n            doneList[i].call(this);\n        }\n    },\n    /**\n     * 开始执行动画\n     * @param  {string|Function} [easing]\n     *         动画缓动函数，详见{@link module:zrender/animation/easing}\n     * @param  {boolean} forceAnimate\n     * @return {module:zrender/animation/Animator}\n     */\n    start: function (easing, forceAnimate) {\n\n        var self = this;\n        var clipCount = 0;\n\n        var oneTrackDone = function () {\n            clipCount--;\n            if (!clipCount) {\n                self._doneCallback();\n            }\n        };\n\n        var lastClip;\n        for (var propName in this._tracks) {\n            if (!this._tracks.hasOwnProperty(propName)) {\n                continue;\n            }\n            var clip = createTrackClip(\n                this, easing, oneTrackDone,\n                this._tracks[propName], propName, forceAnimate\n            );\n            if (clip) {\n                this._clipList.push(clip);\n                clipCount++;\n\n                // If start after added to animation\n                if (this.animation) {\n                    this.animation.addClip(clip);\n                }\n\n                lastClip = clip;\n            }\n        }\n\n        // Add during callback on the last clip\n        if (lastClip) {\n            var oldOnFrame = lastClip.onframe;\n            lastClip.onframe = function (target, percent) {\n                oldOnFrame(target, percent);\n\n                for (var i = 0; i < self._onframeList.length; i++) {\n                    self._onframeList[i](target, percent);\n                }\n            };\n        }\n\n        // This optimization will help the case that in the upper application\n        // the view may be refreshed frequently, where animation will be\n        // called repeatly but nothing changed.\n        if (!clipCount) {\n            this._doneCallback();\n        }\n        return this;\n    },\n    /**\n     * 停止动画\n     * @param {boolean} forwardToLast If move to last frame before stop\n     */\n    stop: function (forwardToLast) {\n        var clipList = this._clipList;\n        var animation = this.animation;\n        for (var i = 0; i < clipList.length; i++) {\n            var clip = clipList[i];\n            if (forwardToLast) {\n                // Move to last frame before stop\n                clip.onframe(this._target, 1);\n            }\n            animation && animation.removeClip(clip);\n        }\n        clipList.length = 0;\n    },\n    /**\n     * 设置动画延迟开始的时间\n     * @param  {number} time 单位ms\n     * @return {module:zrender/animation/Animator}\n     */\n    delay: function (time) {\n        this._delay = time;\n        return this;\n    },\n    /**\n     * 添加动画结束的回调\n     * @param  {Function} cb\n     * @return {module:zrender/animation/Animator}\n     */\n    done: function (cb) {\n        if (cb) {\n            this._doneList.push(cb);\n        }\n        return this;\n    },\n\n    /**\n     * @return {Array.<module:zrender/animation/Clip>}\n     */\n    getClips: function () {\n        return this._clipList;\n    }\n};\n\nexport default Animator;","var dpr = 1;\n\n// If in browser environment\nif (typeof window !== 'undefined') {\n    dpr = Math.max(window.devicePixelRatio || 1, 1);\n}\n\n/**\n * config默认配置项\n * @exports zrender/config\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n */\n\n/**\n * Debug log mode:\n * 0: Do nothing, for release.\n * 1: console.error, for debug.\n */\nexport var debugMode = 0;\n\n// retina 屏幕优化\nexport var devicePixelRatio = dpr;\n","import {debugMode} from '../config';\n\nvar logError = function () {\n};\n\nif (debugMode === 1) {\n    logError = console.error;\n}\n\nexport default logError;\n","import Animator from '../animation/Animator';\nimport logError from '../core/log';\nimport {\n    isString,\n    isFunction,\n    isObject,\n    isArrayLike,\n    indexOf\n} from '../core/util';\n\n/**\n * @alias modue:zrender/mixin/Animatable\n * @constructor\n */\nvar Animatable = function () {\n\n    /**\n     * @type {Array.<module:zrender/animation/Animator>}\n     * @readOnly\n     */\n    this.animators = [];\n};\n\nAnimatable.prototype = {\n\n    constructor: Animatable,\n\n    /**\n     * 动画\n     *\n     * @param {string} path The path to fetch value from object, like 'a.b.c'.\n     * @param {boolean} [loop] Whether to loop animation.\n     * @return {module:zrender/animation/Animator}\n     * @example:\n     *     el.animate('style', false)\n     *         .when(1000, {x: 10} )\n     *         .done(function(){ // Animation done })\n     *         .start()\n     */\n    animate: function (path, loop) {\n        var target;\n        var animatingShape = false;\n        var el = this;\n        var zr = this.__zr;\n        if (path) {\n            var pathSplitted = path.split('.');\n            var prop = el;\n            // If animating shape\n            animatingShape = pathSplitted[0] === 'shape';\n            for (var i = 0, l = pathSplitted.length; i < l; i++) {\n                if (!prop) {\n                    continue;\n                }\n                prop = prop[pathSplitted[i]];\n            }\n            if (prop) {\n                target = prop;\n            }\n        }\n        else {\n            target = el;\n        }\n\n        if (!target) {\n            logError(\n                'Property \"'\n                + path\n                + '\" is not existed in element '\n                + el.id\n            );\n            return;\n        }\n\n        var animators = el.animators;\n\n        var animator = new Animator(target, loop);\n\n        animator.during(function (target) {\n            el.dirty(animatingShape);\n        })\n        .done(function () {\n            // FIXME Animator will not be removed if use `Animator#stop` to stop animation\n            animators.splice(indexOf(animators, animator), 1);\n        });\n\n        animators.push(animator);\n\n        // If animate after added to the zrender\n        if (zr) {\n            zr.animation.addAnimator(animator);\n        }\n\n        return animator;\n    },\n\n    /**\n     * 停止动画\n     * @param {boolean} forwardToLast If move to last frame before stop\n     */\n    stopAnimation: function (forwardToLast) {\n        var animators = this.animators;\n        var len = animators.length;\n        for (var i = 0; i < len; i++) {\n            animators[i].stop(forwardToLast);\n        }\n        animators.length = 0;\n\n        return this;\n    },\n\n    /**\n     * Caution: this method will stop previous animation.\n     * So do not use this method to one element twice before\n     * animation starts, unless you know what you are doing.\n     * @param {Object} target\n     * @param {number} [time=500] Time in ms\n     * @param {string} [easing='linear']\n     * @param {number} [delay=0]\n     * @param {Function} [callback]\n     * @param {Function} [forceAnimate] Prevent stop animation and callback\n     *        immediently when target values are the same as current values.\n     *\n     * @example\n     *  // Animate position\n     *  el.animateTo({\n     *      position: [10, 10]\n     *  }, function () { // done })\n     *\n     *  // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing\n     *  el.animateTo({\n     *      shape: {\n     *          width: 500\n     *      },\n     *      style: {\n     *          fill: 'red'\n     *      }\n     *      position: [10, 10]\n     *  }, 100, 100, 'cubicOut', function () { // done })\n     */\n    // TODO Return animation key\n    animateTo: function (target, time, delay, easing, callback, forceAnimate) {\n        animateTo(this, target, time, delay, easing, callback, forceAnimate);\n    },\n\n    /**\n     * Animate from the target state to current state.\n     * The params and the return value are the same as `this.animateTo`.\n     */\n    animateFrom: function (target, time, delay, easing, callback, forceAnimate) {\n        animateTo(this, target, time, delay, easing, callback, forceAnimate, true);\n    }\n};\n\nfunction animateTo(animatable, target, time, delay, easing, callback, forceAnimate, reverse) {\n    // animateTo(target, time, easing, callback);\n    if (isString(delay)) {\n        callback = easing;\n        easing = delay;\n        delay = 0;\n    }\n    // animateTo(target, time, delay, callback);\n    else if (isFunction(easing)) {\n        callback = easing;\n        easing = 'linear';\n        delay = 0;\n    }\n    // animateTo(target, time, callback);\n    else if (isFunction(delay)) {\n        callback = delay;\n        delay = 0;\n    }\n    // animateTo(target, callback)\n    else if (isFunction(time)) {\n        callback = time;\n        time = 500;\n    }\n    // animateTo(target)\n    else if (!time) {\n        time = 500;\n    }\n    // Stop all previous animations\n    animatable.stopAnimation();\n    animateToShallow(animatable, '', animatable, target, time, delay, reverse);\n\n    // Animators may be removed immediately after start\n    // if there is nothing to animate\n    var animators = animatable.animators.slice();\n    var count = animators.length;\n    function done() {\n        count--;\n        if (!count) {\n            callback && callback();\n        }\n    }\n\n    // No animators. This should be checked before animators[i].start(),\n    // because 'done' may be executed immediately if no need to animate.\n    if (!count) {\n        callback && callback();\n    }\n    // Start after all animators created\n    // Incase any animator is done immediately when all animation properties are not changed\n    for (var i = 0; i < animators.length; i++) {\n        animators[i]\n            .done(done)\n            .start(easing, forceAnimate);\n    }\n}\n\n/**\n * @param {string} path=''\n * @param {Object} source=animatable\n * @param {Object} target\n * @param {number} [time=500]\n * @param {number} [delay=0]\n * @param {boolean} [reverse] If `true`, animate\n *        from the `target` to current state.\n *\n * @example\n *  // Animate position\n *  el._animateToShallow({\n *      position: [10, 10]\n *  })\n *\n *  // Animate shape, style and position in 100ms, delayed 100ms\n *  el._animateToShallow({\n *      shape: {\n *          width: 500\n *      },\n *      style: {\n *          fill: 'red'\n *      }\n *      position: [10, 10]\n *  }, 100, 100)\n */\nfunction animateToShallow(animatable, path, source, target, time, delay, reverse) {\n    var objShallow = {};\n    var propertyCount = 0;\n    for (var name in target) {\n        if (!target.hasOwnProperty(name)) {\n            continue;\n        }\n\n        if (source[name] != null) {\n            if (isObject(target[name]) && !isArrayLike(target[name])) {\n                animateToShallow(\n                    animatable,\n                    path ? path + '.' + name : name,\n                    source[name],\n                    target[name],\n                    time,\n                    delay,\n                    reverse\n                );\n            }\n            else {\n                if (reverse) {\n                    objShallow[name] = source[name];\n                    setAttrByPath(animatable, path, name, target[name]);\n                }\n                else {\n                    objShallow[name] = target[name];\n                }\n                propertyCount++;\n            }\n        }\n        else if (target[name] != null && !reverse) {\n            setAttrByPath(animatable, path, name, target[name]);\n        }\n    }\n\n    if (propertyCount > 0) {\n        animatable.animate(path, false)\n            .when(time == null ? 500 : time, objShallow)\n            .delay(delay || 0);\n    }\n}\n\nfunction setAttrByPath(el, path, name, value) {\n    // Attr directly if not has property\n    // FIXME, if some property not needed for element ?\n    if (!path) {\n        el.attr(name, value);\n    }\n    else {\n        // Only support set shape or style\n        var props = {};\n        props[path] = {};\n        props[path][name] = value;\n        el.attr(props);\n    }\n}\n\nexport default Animatable;","import guid from './core/guid';\nimport Eventful from './mixin/Eventful';\nimport Transformable from './mixin/Transformable';\nimport Animatable from './mixin/Animatable';\nimport * as zrUtil from './core/util';\n\n/**\n * @alias module:zrender/Element\n * @constructor\n * @extends {module:zrender/mixin/Animatable}\n * @extends {module:zrender/mixin/Transformable}\n * @extends {module:zrender/mixin/Eventful}\n */\nvar Element = function (opts) { // jshint ignore:line\n\n    Transformable.call(this, opts);\n    Eventful.call(this, opts);\n    Animatable.call(this, opts);\n\n    /**\n     * 画布元素ID\n     * @type {string}\n     */\n    this.id = opts.id || guid();\n};\n\nElement.prototype = {\n\n    /**\n     * 元素类型\n     * Element type\n     * @type {string}\n     */\n    type: 'element',\n\n    /**\n     * 元素名字\n     * Element name\n     * @type {string}\n     */\n    name: '',\n\n    /**\n     * ZRender 实例对象，会在 element 添加到 zrender 实例中后自动赋值\n     * ZRender instance will be assigned when element is associated with zrender\n     * @name module:/zrender/Element#__zr\n     * @type {module:zrender/ZRender}\n     */\n    __zr: null,\n\n    /**\n     * 图形是否忽略，为true时忽略图形的绘制以及事件触发\n     * If ignore drawing and events of the element object\n     * @name module:/zrender/Element#ignore\n     * @type {boolean}\n     * @default false\n     */\n    ignore: false,\n\n    /**\n     * 用于裁剪的路径(shape)，所有 Group 内的路径在绘制时都会被这个路径裁剪\n     * 该路径会继承被裁减对象的变换\n     * @type {module:zrender/graphic/Path}\n     * @see http://www.w3.org/TR/2dcontext/#clipping-region\n     * @readOnly\n     */\n    clipPath: null,\n\n    /**\n     * 是否是 Group\n     * @type {boolean}\n     */\n    isGroup: false,\n\n    /**\n     * Drift element\n     * @param  {number} dx dx on the global space\n     * @param  {number} dy dy on the global space\n     */\n    drift: function (dx, dy) {\n        switch (this.draggable) {\n            case 'horizontal':\n                dy = 0;\n                break;\n            case 'vertical':\n                dx = 0;\n                break;\n        }\n\n        var m = this.transform;\n        if (!m) {\n            m = this.transform = [1, 0, 0, 1, 0, 0];\n        }\n        m[4] += dx;\n        m[5] += dy;\n\n        this.decomposeTransform();\n        this.dirty(false);\n    },\n\n    /**\n     * Hook before update\n     */\n    beforeUpdate: function () {},\n    /**\n     * Hook after update\n     */\n    afterUpdate: function () {},\n    /**\n     * Update each frame\n     */\n    update: function () {\n        this.updateTransform();\n    },\n\n    /**\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    traverse: function (cb, context) {},\n\n    /**\n     * @protected\n     */\n    attrKV: function (key, value) {\n        if (key === 'position' || key === 'scale' || key === 'origin') {\n            // Copy the array\n            if (value) {\n                var target = this[key];\n                if (!target) {\n                    target = this[key] = [];\n                }\n                target[0] = value[0];\n                target[1] = value[1];\n            }\n        }\n        else {\n            this[key] = value;\n        }\n    },\n\n    /**\n     * Hide the element\n     */\n    hide: function () {\n        this.ignore = true;\n        this.__zr && this.__zr.refresh();\n    },\n\n    /**\n     * Show the element\n     */\n    show: function () {\n        this.ignore = false;\n        this.__zr && this.__zr.refresh();\n    },\n\n    /**\n     * @param {string|Object} key\n     * @param {*} value\n     */\n    attr: function (key, value) {\n        if (typeof key === 'string') {\n            this.attrKV(key, value);\n        }\n        else if (zrUtil.isObject(key)) {\n            for (var name in key) {\n                if (key.hasOwnProperty(name)) {\n                    this.attrKV(name, key[name]);\n                }\n            }\n        }\n\n        this.dirty(false);\n\n        return this;\n    },\n\n    /**\n     * @param {module:zrender/graphic/Path} clipPath\n     */\n    setClipPath: function (clipPath) {\n        var zr = this.__zr;\n        if (zr) {\n            clipPath.addSelfToZr(zr);\n        }\n\n        // Remove previous clip path\n        if (this.clipPath && this.clipPath !== clipPath) {\n            this.removeClipPath();\n        }\n\n        this.clipPath = clipPath;\n        clipPath.__zr = zr;\n        clipPath.__clipTarget = this;\n\n        this.dirty(false);\n    },\n\n    /**\n     */\n    removeClipPath: function () {\n        var clipPath = this.clipPath;\n        if (clipPath) {\n            if (clipPath.__zr) {\n                clipPath.removeSelfFromZr(clipPath.__zr);\n            }\n\n            clipPath.__zr = null;\n            clipPath.__clipTarget = null;\n            this.clipPath = null;\n\n            this.dirty(false);\n        }\n    },\n\n    /**\n     * Add self from zrender instance.\n     * Not recursively because it will be invoked when element added to storage.\n     * @param {module:zrender/ZRender} zr\n     */\n    addSelfToZr: function (zr) {\n        this.__zr = zr;\n        // 添加动画\n        var animators = this.animators;\n        if (animators) {\n            for (var i = 0; i < animators.length; i++) {\n                zr.animation.addAnimator(animators[i]);\n            }\n        }\n\n        if (this.clipPath) {\n            this.clipPath.addSelfToZr(zr);\n        }\n    },\n\n    /**\n     * Remove self from zrender instance.\n     * Not recursively because it will be invoked when element added to storage.\n     * @param {module:zrender/ZRender} zr\n     */\n    removeSelfFromZr: function (zr) {\n        this.__zr = null;\n        // 移除动画\n        var animators = this.animators;\n        if (animators) {\n            for (var i = 0; i < animators.length; i++) {\n                zr.animation.removeAnimator(animators[i]);\n            }\n        }\n\n        if (this.clipPath) {\n            this.clipPath.removeSelfFromZr(zr);\n        }\n    }\n};\n\nzrUtil.mixin(Element, Animatable);\nzrUtil.mixin(Element, Transformable);\nzrUtil.mixin(Element, Eventful);\n\nexport default Element;","/**\n * @module echarts/core/BoundingRect\n */\n\nimport * as vec2 from './vector';\nimport * as matrix from './matrix';\n\nvar v2ApplyTransform = vec2.applyTransform;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\n\n/**\n * @alias module:echarts/core/BoundingRect\n */\nfunction BoundingRect(x, y, width, height) {\n\n    if (width < 0) {\n        x = x + width;\n        width = -width;\n    }\n    if (height < 0) {\n        y = y + height;\n        height = -height;\n    }\n\n    /**\n     * @type {number}\n     */\n    this.x = x;\n    /**\n     * @type {number}\n     */\n    this.y = y;\n    /**\n     * @type {number}\n     */\n    this.width = width;\n    /**\n     * @type {number}\n     */\n    this.height = height;\n}\n\nBoundingRect.prototype = {\n\n    constructor: BoundingRect,\n\n    /**\n     * @param {module:echarts/core/BoundingRect} other\n     */\n    union: function (other) {\n        var x = mathMin(other.x, this.x);\n        var y = mathMin(other.y, this.y);\n\n        this.width = mathMax(\n                other.x + other.width,\n                this.x + this.width\n            ) - x;\n        this.height = mathMax(\n                other.y + other.height,\n                this.y + this.height\n            ) - y;\n        this.x = x;\n        this.y = y;\n    },\n\n    /**\n     * @param {Array.<number>} m\n     * @methods\n     */\n    applyTransform: (function () {\n        var lt = [];\n        var rb = [];\n        var lb = [];\n        var rt = [];\n        return function (m) {\n            // In case usage like this\n            // el.getBoundingRect().applyTransform(el.transform)\n            // And element has no transform\n            if (!m) {\n                return;\n            }\n            lt[0] = lb[0] = this.x;\n            lt[1] = rt[1] = this.y;\n            rb[0] = rt[0] = this.x + this.width;\n            rb[1] = lb[1] = this.y + this.height;\n\n            v2ApplyTransform(lt, lt, m);\n            v2ApplyTransform(rb, rb, m);\n            v2ApplyTransform(lb, lb, m);\n            v2ApplyTransform(rt, rt, m);\n\n            this.x = mathMin(lt[0], rb[0], lb[0], rt[0]);\n            this.y = mathMin(lt[1], rb[1], lb[1], rt[1]);\n            var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]);\n            var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]);\n            this.width = maxX - this.x;\n            this.height = maxY - this.y;\n        };\n    })(),\n\n    /**\n     * Calculate matrix of transforming from self to target rect\n     * @param  {module:zrender/core/BoundingRect} b\n     * @return {Array.<number>}\n     */\n    calculateTransform: function (b) {\n        var a = this;\n        var sx = b.width / a.width;\n        var sy = b.height / a.height;\n\n        var m = matrix.create();\n\n        // 矩阵右乘\n        matrix.translate(m, m, [-a.x, -a.y]);\n        matrix.scale(m, m, [sx, sy]);\n        matrix.translate(m, m, [b.x, b.y]);\n\n        return m;\n    },\n\n    /**\n     * @param {(module:echarts/core/BoundingRect|Object)} b\n     * @return {boolean}\n     */\n    intersect: function (b) {\n        if (!b) {\n            return false;\n        }\n\n        if (!(b instanceof BoundingRect)) {\n            // Normalize negative width/height.\n            b = BoundingRect.create(b);\n        }\n\n        var a = this;\n        var ax0 = a.x;\n        var ax1 = a.x + a.width;\n        var ay0 = a.y;\n        var ay1 = a.y + a.height;\n\n        var bx0 = b.x;\n        var bx1 = b.x + b.width;\n        var by0 = b.y;\n        var by1 = b.y + b.height;\n\n        return !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n    },\n\n    contain: function (x, y) {\n        var rect = this;\n        return x >= rect.x\n            && x <= (rect.x + rect.width)\n            && y >= rect.y\n            && y <= (rect.y + rect.height);\n    },\n\n    /**\n     * @return {module:echarts/core/BoundingRect}\n     */\n    clone: function () {\n        return new BoundingRect(this.x, this.y, this.width, this.height);\n    },\n\n    /**\n     * Copy from another rect\n     */\n    copy: function (other) {\n        this.x = other.x;\n        this.y = other.y;\n        this.width = other.width;\n        this.height = other.height;\n    },\n\n    plain: function () {\n        return {\n            x: this.x,\n            y: this.y,\n            width: this.width,\n            height: this.height\n        };\n    }\n};\n\n/**\n * @param {Object|module:zrender/core/BoundingRect} rect\n * @param {number} rect.x\n * @param {number} rect.y\n * @param {number} rect.width\n * @param {number} rect.height\n * @return {module:zrender/core/BoundingRect}\n */\nBoundingRect.create = function (rect) {\n    return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n};\n\nexport default BoundingRect;","/**\n * Group是一个容器，可以插入子节点，Group的变换也会被应用到子节点上\n * @module zrender/graphic/Group\n * @example\n *     var Group = require('zrender/container/Group');\n *     var Circle = require('zrender/graphic/shape/Circle');\n *     var g = new Group();\n *     g.position[0] = 100;\n *     g.position[1] = 100;\n *     g.add(new Circle({\n *         style: {\n *             x: 100,\n *             y: 100,\n *             r: 20,\n *         }\n *     }));\n *     zr.add(g);\n */\n\nimport * as zrUtil from '../core/util';\nimport Element from '../Element';\nimport BoundingRect from '../core/BoundingRect';\n\n/**\n * @alias module:zrender/graphic/Group\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @extends module:zrender/mixin/Eventful\n */\nvar Group = function (opts) {\n\n    opts = opts || {};\n\n    Element.call(this, opts);\n\n    for (var key in opts) {\n        if (opts.hasOwnProperty(key)) {\n            this[key] = opts[key];\n        }\n    }\n\n    this._children = [];\n\n    this.__storage = null;\n\n    this.__dirty = true;\n};\n\nGroup.prototype = {\n\n    constructor: Group,\n\n    isGroup: true,\n\n    /**\n     * @type {string}\n     */\n    type: 'group',\n\n    /**\n     * 所有子孙元素是否响应鼠标事件\n     * @name module:/zrender/container/Group#silent\n     * @type {boolean}\n     * @default false\n     */\n    silent: false,\n\n    /**\n     * @return {Array.<module:zrender/Element>}\n     */\n    children: function () {\n        return this._children.slice();\n    },\n\n    /**\n     * 获取指定 index 的儿子节点\n     * @param  {number} idx\n     * @return {module:zrender/Element}\n     */\n    childAt: function (idx) {\n        return this._children[idx];\n    },\n\n    /**\n     * 获取指定名字的儿子节点\n     * @param  {string} name\n     * @return {module:zrender/Element}\n     */\n    childOfName: function (name) {\n        var children = this._children;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i].name === name) {\n                return children[i];\n            }\n            }\n    },\n\n    /**\n     * @return {number}\n     */\n    childCount: function () {\n        return this._children.length;\n    },\n\n    /**\n     * 添加子节点到最后\n     * @param {module:zrender/Element} child\n     */\n    add: function (child) {\n        if (child && child !== this && child.parent !== this) {\n\n            this._children.push(child);\n\n            this._doAdd(child);\n        }\n\n        return this;\n    },\n\n    /**\n     * 添加子节点在 nextSibling 之前\n     * @param {module:zrender/Element} child\n     * @param {module:zrender/Element} nextSibling\n     */\n    addBefore: function (child, nextSibling) {\n        if (child && child !== this && child.parent !== this\n            && nextSibling && nextSibling.parent === this) {\n\n            var children = this._children;\n            var idx = children.indexOf(nextSibling);\n\n            if (idx >= 0) {\n                children.splice(idx, 0, child);\n                this._doAdd(child);\n            }\n        }\n\n        return this;\n    },\n\n    _doAdd: function (child) {\n        if (child.parent) {\n            child.parent.remove(child);\n        }\n\n        child.parent = this;\n\n        var storage = this.__storage;\n        var zr = this.__zr;\n        if (storage && storage !== child.__storage) {\n\n            storage.addToStorage(child);\n\n            if (child instanceof Group) {\n                child.addChildrenToStorage(storage);\n            }\n        }\n\n        zr && zr.refresh();\n    },\n\n    /**\n     * 移除子节点\n     * @param {module:zrender/Element} child\n     */\n    remove: function (child) {\n        var zr = this.__zr;\n        var storage = this.__storage;\n        var children = this._children;\n\n        var idx = zrUtil.indexOf(children, child);\n        if (idx < 0) {\n            return this;\n        }\n        children.splice(idx, 1);\n\n        child.parent = null;\n\n        if (storage) {\n\n            storage.delFromStorage(child);\n\n            if (child instanceof Group) {\n                child.delChildrenFromStorage(storage);\n            }\n        }\n\n        zr && zr.refresh();\n\n        return this;\n    },\n\n    /**\n     * 移除所有子节点\n     */\n    removeAll: function () {\n        var children = this._children;\n        var storage = this.__storage;\n        var child;\n        var i;\n        for (i = 0; i < children.length; i++) {\n            child = children[i];\n            if (storage) {\n                storage.delFromStorage(child);\n                if (child instanceof Group) {\n                    child.delChildrenFromStorage(storage);\n                }\n            }\n            child.parent = null;\n        }\n        children.length = 0;\n\n        return this;\n    },\n\n    /**\n     * 遍历所有子节点\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    eachChild: function (cb, context) {\n        var children = this._children;\n        for (var i = 0; i < children.length; i++) {\n            var child = children[i];\n            cb.call(context, child, i);\n        }\n        return this;\n    },\n\n    /**\n     * 深度优先遍历所有子孙节点\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    traverse: function (cb, context) {\n        for (var i = 0; i < this._children.length; i++) {\n            var child = this._children[i];\n            cb.call(context, child);\n\n            if (child.type === 'group') {\n                child.traverse(cb, context);\n            }\n        }\n        return this;\n    },\n\n    addChildrenToStorage: function (storage) {\n        for (var i = 0; i < this._children.length; i++) {\n            var child = this._children[i];\n            storage.addToStorage(child);\n            if (child instanceof Group) {\n                child.addChildrenToStorage(storage);\n            }\n        }\n    },\n\n    delChildrenFromStorage: function (storage) {\n        for (var i = 0; i < this._children.length; i++) {\n            var child = this._children[i];\n            storage.delFromStorage(child);\n            if (child instanceof Group) {\n                child.delChildrenFromStorage(storage);\n            }\n        }\n    },\n\n    dirty: function () {\n        this.__dirty = true;\n        this.__zr && this.__zr.refresh();\n        return this;\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getBoundingRect: function (includeChildren) {\n        // TODO Caching\n        var rect = null;\n        var tmpRect = new BoundingRect(0, 0, 0, 0);\n        var children = includeChildren || this._children;\n        var tmpMat = [];\n\n        for (var i = 0; i < children.length; i++) {\n            var child = children[i];\n            if (child.ignore || child.invisible) {\n                continue;\n            }\n\n            var childRect = child.getBoundingRect();\n            var transform = child.getLocalTransform(tmpMat);\n            // TODO\n            // The boundingRect cacluated by transforming original\n            // rect may be bigger than the actual bundingRect when rotation\n            // is used. (Consider a circle rotated aginst its center, where\n            // the actual boundingRect should be the same as that not be\n            // rotated.) But we can not find better approach to calculate\n            // actual boundingRect yet, considering performance.\n            if (transform) {\n                tmpRect.copy(childRect);\n                tmpRect.applyTransform(transform);\n                rect = rect || tmpRect.clone();\n                rect.union(tmpRect);\n            }\n            else {\n                rect = rect || childRect.clone();\n                rect.union(childRect);\n            }\n        }\n        return rect || tmpRect;\n    }\n};\n\nzrUtil.inherits(Group, Element);\n\nexport default Group;","// https://github.com/mziccard/node-timsort\nvar DEFAULT_MIN_MERGE = 32;\n\nvar DEFAULT_MIN_GALLOPING = 7;\n\nvar DEFAULT_TMP_STORAGE_LENGTH = 256;\n\nfunction minRunLength(n) {\n    var r = 0;\n\n    while (n >= DEFAULT_MIN_MERGE) {\n        r |= n & 1;\n        n >>= 1;\n    }\n\n    return n + r;\n}\n\nfunction makeAscendingRun(array, lo, hi, compare) {\n    var runHi = lo + 1;\n\n    if (runHi === hi) {\n        return 1;\n    }\n\n    if (compare(array[runHi++], array[lo]) < 0) {\n        while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n            runHi++;\n        }\n\n        reverseRun(array, lo, runHi);\n    }\n    else {\n        while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n            runHi++;\n        }\n    }\n\n    return runHi - lo;\n}\n\nfunction reverseRun(array, lo, hi) {\n    hi--;\n\n    while (lo < hi) {\n        var t = array[lo];\n        array[lo++] = array[hi];\n        array[hi--] = t;\n    }\n}\n\nfunction binaryInsertionSort(array, lo, hi, start, compare) {\n    if (start === lo) {\n        start++;\n    }\n\n    for (; start < hi; start++) {\n        var pivot = array[start];\n\n        var left = lo;\n        var right = start;\n        var mid;\n\n        while (left < right) {\n            mid = left + right >>> 1;\n\n            if (compare(pivot, array[mid]) < 0) {\n                right = mid;\n            }\n            else {\n                left = mid + 1;\n            }\n        }\n\n        var n = start - left;\n\n        switch (n) {\n            case 3:\n                array[left + 3] = array[left + 2];\n\n            case 2:\n                array[left + 2] = array[left + 1];\n\n            case 1:\n                array[left + 1] = array[left];\n                break;\n            default:\n                while (n > 0) {\n                    array[left + n] = array[left + n - 1];\n                    n--;\n                }\n        }\n\n        array[left] = pivot;\n    }\n}\n\nfunction gallopLeft(value, array, start, length, hint, compare) {\n    var lastOffset = 0;\n    var maxOffset = 0;\n    var offset = 1;\n\n    if (compare(value, array[start + hint]) > 0) {\n        maxOffset = length - hint;\n\n        while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        lastOffset += hint;\n        offset += hint;\n    }\n    else {\n        maxOffset = hint + 1;\n        while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        var tmp = lastOffset;\n        lastOffset = hint - offset;\n        offset = hint - tmp;\n    }\n\n    lastOffset++;\n    while (lastOffset < offset) {\n        var m = lastOffset + (offset - lastOffset >>> 1);\n\n        if (compare(value, array[start + m]) > 0) {\n            lastOffset = m + 1;\n        }\n        else {\n            offset = m;\n        }\n    }\n    return offset;\n}\n\nfunction gallopRight(value, array, start, length, hint, compare) {\n    var lastOffset = 0;\n    var maxOffset = 0;\n    var offset = 1;\n\n    if (compare(value, array[start + hint]) < 0) {\n        maxOffset = hint + 1;\n\n        while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        var tmp = lastOffset;\n        lastOffset = hint - offset;\n        offset = hint - tmp;\n    }\n    else {\n        maxOffset = length - hint;\n\n        while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        lastOffset += hint;\n        offset += hint;\n    }\n\n    lastOffset++;\n\n    while (lastOffset < offset) {\n        var m = lastOffset + (offset - lastOffset >>> 1);\n\n        if (compare(value, array[start + m]) < 0) {\n            offset = m;\n        }\n        else {\n            lastOffset = m + 1;\n        }\n    }\n\n    return offset;\n}\n\nfunction TimSort(array, compare) {\n    var minGallop = DEFAULT_MIN_GALLOPING;\n    var length = 0;\n    var tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n    var stackLength = 0;\n    var runStart;\n    var runLength;\n    var stackSize = 0;\n\n    length = array.length;\n\n    if (length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n        tmpStorageLength = length >>> 1;\n    }\n\n    var tmp = [];\n\n    stackLength = length < 120 ? 5 : length < 1542 ? 10 : length < 119151 ? 19 : 40;\n\n    runStart = [];\n    runLength = [];\n\n    function pushRun(_runStart, _runLength) {\n        runStart[stackSize] = _runStart;\n        runLength[stackSize] = _runLength;\n        stackSize += 1;\n    }\n\n    function mergeRuns() {\n        while (stackSize > 1) {\n            var n = stackSize - 2;\n\n            if (\n                (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1])\n                || (n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1])\n            ) {\n                if (runLength[n - 1] < runLength[n + 1]) {\n                    n--;\n                }\n            }\n            else if (runLength[n] > runLength[n + 1]) {\n                break;\n            }\n            mergeAt(n);\n        }\n    }\n\n    function forceMergeRuns() {\n        while (stackSize > 1) {\n            var n = stackSize - 2;\n\n            if (n > 0 && runLength[n - 1] < runLength[n + 1]) {\n                n--;\n            }\n\n            mergeAt(n);\n        }\n    }\n\n    function mergeAt(i) {\n        var start1 = runStart[i];\n        var length1 = runLength[i];\n        var start2 = runStart[i + 1];\n        var length2 = runLength[i + 1];\n\n        runLength[i] = length1 + length2;\n\n        if (i === stackSize - 3) {\n            runStart[i + 1] = runStart[i + 2];\n            runLength[i + 1] = runLength[i + 2];\n        }\n\n        stackSize--;\n\n        var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n        start1 += k;\n        length1 -= k;\n\n        if (length1 === 0) {\n            return;\n        }\n\n        length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n\n        if (length2 === 0) {\n            return;\n        }\n\n        if (length1 <= length2) {\n            mergeLow(start1, length1, start2, length2);\n        }\n        else {\n            mergeHigh(start1, length1, start2, length2);\n        }\n    }\n\n    function mergeLow(start1, length1, start2, length2) {\n        var i = 0;\n\n        for (i = 0; i < length1; i++) {\n            tmp[i] = array[start1 + i];\n        }\n\n        var cursor1 = 0;\n        var cursor2 = start2;\n        var dest = start1;\n\n        array[dest++] = array[cursor2++];\n\n        if (--length2 === 0) {\n            for (i = 0; i < length1; i++) {\n                array[dest + i] = tmp[cursor1 + i];\n            }\n            return;\n        }\n\n        if (length1 === 1) {\n            for (i = 0; i < length2; i++) {\n                array[dest + i] = array[cursor2 + i];\n            }\n            array[dest + length2] = tmp[cursor1];\n            return;\n        }\n\n        var _minGallop = minGallop;\n        var count1;\n        var count2;\n        var exit;\n\n        while (1) {\n            count1 = 0;\n            count2 = 0;\n            exit = false;\n\n            do {\n                if (compare(array[cursor2], tmp[cursor1]) < 0) {\n                    array[dest++] = array[cursor2++];\n                    count2++;\n                    count1 = 0;\n\n                    if (--length2 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n                else {\n                    array[dest++] = tmp[cursor1++];\n                    count1++;\n                    count2 = 0;\n                    if (--length1 === 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n            } while ((count1 | count2) < _minGallop);\n\n            if (exit) {\n                break;\n            }\n\n            do {\n                count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n\n                if (count1 !== 0) {\n                    for (i = 0; i < count1; i++) {\n                        array[dest + i] = tmp[cursor1 + i];\n                    }\n\n                    dest += count1;\n                    cursor1 += count1;\n                    length1 -= count1;\n                    if (length1 <= 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n\n                array[dest++] = array[cursor2++];\n\n                if (--length2 === 0) {\n                    exit = true;\n                    break;\n                }\n\n                count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n\n                if (count2 !== 0) {\n                    for (i = 0; i < count2; i++) {\n                        array[dest + i] = array[cursor2 + i];\n                    }\n\n                    dest += count2;\n                    cursor2 += count2;\n                    length2 -= count2;\n\n                    if (length2 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n                array[dest++] = tmp[cursor1++];\n\n                if (--length1 === 1) {\n                    exit = true;\n                    break;\n                }\n\n                _minGallop--;\n            } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n            if (exit) {\n                break;\n            }\n\n            if (_minGallop < 0) {\n                _minGallop = 0;\n            }\n\n            _minGallop += 2;\n        }\n\n        minGallop = _minGallop;\n\n        minGallop < 1 && (minGallop = 1);\n\n        if (length1 === 1) {\n            for (i = 0; i < length2; i++) {\n                array[dest + i] = array[cursor2 + i];\n            }\n            array[dest + length2] = tmp[cursor1];\n        }\n        else if (length1 === 0) {\n            throw new Error();\n            // throw new Error('mergeLow preconditions were not respected');\n        }\n        else {\n            for (i = 0; i < length1; i++) {\n                array[dest + i] = tmp[cursor1 + i];\n            }\n        }\n    }\n\n    function mergeHigh(start1, length1, start2, length2) {\n        var i = 0;\n\n        for (i = 0; i < length2; i++) {\n            tmp[i] = array[start2 + i];\n        }\n\n        var cursor1 = start1 + length1 - 1;\n        var cursor2 = length2 - 1;\n        var dest = start2 + length2 - 1;\n        var customCursor = 0;\n        var customDest = 0;\n\n        array[dest--] = array[cursor1--];\n\n        if (--length1 === 0) {\n            customCursor = dest - (length2 - 1);\n\n            for (i = 0; i < length2; i++) {\n                array[customCursor + i] = tmp[i];\n            }\n\n            return;\n        }\n\n        if (length2 === 1) {\n            dest -= length1;\n            cursor1 -= length1;\n            customDest = dest + 1;\n            customCursor = cursor1 + 1;\n\n            for (i = length1 - 1; i >= 0; i--) {\n                array[customDest + i] = array[customCursor + i];\n            }\n\n            array[dest] = tmp[cursor2];\n            return;\n        }\n\n        var _minGallop = minGallop;\n\n        while (true) {\n            var count1 = 0;\n            var count2 = 0;\n            var exit = false;\n\n            do {\n                if (compare(tmp[cursor2], array[cursor1]) < 0) {\n                    array[dest--] = array[cursor1--];\n                    count1++;\n                    count2 = 0;\n                    if (--length1 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n                else {\n                    array[dest--] = tmp[cursor2--];\n                    count2++;\n                    count1 = 0;\n                    if (--length2 === 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n            } while ((count1 | count2) < _minGallop);\n\n            if (exit) {\n                break;\n            }\n\n            do {\n                count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n\n                if (count1 !== 0) {\n                    dest -= count1;\n                    cursor1 -= count1;\n                    length1 -= count1;\n                    customDest = dest + 1;\n                    customCursor = cursor1 + 1;\n\n                    for (i = count1 - 1; i >= 0; i--) {\n                        array[customDest + i] = array[customCursor + i];\n                    }\n\n                    if (length1 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n\n                array[dest--] = tmp[cursor2--];\n\n                if (--length2 === 1) {\n                    exit = true;\n                    break;\n                }\n\n                count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n\n                if (count2 !== 0) {\n                    dest -= count2;\n                    cursor2 -= count2;\n                    length2 -= count2;\n                    customDest = dest + 1;\n                    customCursor = cursor2 + 1;\n\n                    for (i = 0; i < count2; i++) {\n                        array[customDest + i] = tmp[customCursor + i];\n                    }\n\n                    if (length2 <= 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n\n                array[dest--] = array[cursor1--];\n\n                if (--length1 === 0) {\n                    exit = true;\n                    break;\n                }\n\n                _minGallop--;\n            } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n            if (exit) {\n                break;\n            }\n\n            if (_minGallop < 0) {\n                _minGallop = 0;\n            }\n\n            _minGallop += 2;\n        }\n\n        minGallop = _minGallop;\n\n        if (minGallop < 1) {\n            minGallop = 1;\n        }\n\n        if (length2 === 1) {\n            dest -= length1;\n            cursor1 -= length1;\n            customDest = dest + 1;\n            customCursor = cursor1 + 1;\n\n            for (i = length1 - 1; i >= 0; i--) {\n                array[customDest + i] = array[customCursor + i];\n            }\n\n            array[dest] = tmp[cursor2];\n        }\n        else if (length2 === 0) {\n            throw new Error();\n            // throw new Error('mergeHigh preconditions were not respected');\n        }\n        else {\n            customCursor = dest - (length2 - 1);\n            for (i = 0; i < length2; i++) {\n                array[customCursor + i] = tmp[i];\n            }\n        }\n    }\n\n    this.mergeRuns = mergeRuns;\n    this.forceMergeRuns = forceMergeRuns;\n    this.pushRun = pushRun;\n}\n\nexport default function sort(array, compare, lo, hi) {\n    if (!lo) {\n        lo = 0;\n    }\n    if (!hi) {\n        hi = array.length;\n    }\n\n    var remaining = hi - lo;\n\n    if (remaining < 2) {\n        return;\n    }\n\n    var runLength = 0;\n\n    if (remaining < DEFAULT_MIN_MERGE) {\n        runLength = makeAscendingRun(array, lo, hi, compare);\n        binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n        return;\n    }\n\n    var ts = new TimSort(array, compare);\n\n    var minRun = minRunLength(remaining);\n\n    do {\n        runLength = makeAscendingRun(array, lo, hi, compare);\n        if (runLength < minRun) {\n            var force = remaining;\n            if (force > minRun) {\n                force = minRun;\n            }\n\n            binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n            runLength = force;\n        }\n\n        ts.pushRun(lo, runLength);\n        ts.mergeRuns();\n\n        remaining -= runLength;\n        lo += runLength;\n    } while (remaining !== 0);\n\n    ts.forceMergeRuns();\n}\n","import * as util from './core/util';\nimport env from './core/env';\nimport Group from './container/Group';\n\n// Use timsort because in most case elements are partially sorted\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\nimport timsort from './core/timsort';\n\nfunction shapeCompareFunc(a, b) {\n    if (a.zlevel === b.zlevel) {\n        if (a.z === b.z) {\n            // if (a.z2 === b.z2) {\n            //     // FIXME Slow has renderidx compare\n            //     // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement\n            //     // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012\n            //     return a.__renderidx - b.__renderidx;\n            // }\n            return a.z2 - b.z2;\n        }\n        return a.z - b.z;\n    }\n    return a.zlevel - b.zlevel;\n}\n/**\n * 内容仓库 (M)\n * @alias module:zrender/Storage\n * @constructor\n */\nvar Storage = function () { // jshint ignore:line\n    this._roots = [];\n\n    this._displayList = [];\n\n    this._displayListLen = 0;\n};\n\nStorage.prototype = {\n\n    constructor: Storage,\n\n    /**\n     * @param  {Function} cb\n     *\n     */\n    traverse: function (cb, context) {\n        for (var i = 0; i < this._roots.length; i++) {\n            this._roots[i].traverse(cb, context);\n        }\n    },\n\n    /**\n     * 返回所有图形的绘制队列\n     * @param {boolean} [update=false] 是否在返回前更新该数组\n     * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效\n     *\n     * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList}\n     * @return {Array.<module:zrender/graphic/Displayable>}\n     */\n    getDisplayList: function (update, includeIgnore) {\n        includeIgnore = includeIgnore || false;\n        if (update) {\n            this.updateDisplayList(includeIgnore);\n        }\n        return this._displayList;\n    },\n\n    /**\n     * 更新图形的绘制队列。\n     * 每次绘制前都会调用，该方法会先深度优先遍历整个树，更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中，\n     * 最后根据绘制的优先级（zlevel > z > 插入顺序）排序得到绘制队列\n     * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组\n     */\n    updateDisplayList: function (includeIgnore) {\n        this._displayListLen = 0;\n\n        var roots = this._roots;\n        var displayList = this._displayList;\n        for (var i = 0, len = roots.length; i < len; i++) {\n            this._updateAndAddDisplayable(roots[i], null, includeIgnore);\n        }\n\n        displayList.length = this._displayListLen;\n\n        env.canvasSupported && timsort(displayList, shapeCompareFunc);\n    },\n\n    _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) {\n\n        if (el.ignore && !includeIgnore) {\n            return;\n        }\n\n        el.beforeUpdate();\n\n        if (el.__dirty) {\n\n            el.update();\n\n        }\n\n        el.afterUpdate();\n\n        var userSetClipPath = el.clipPath;\n        if (userSetClipPath) {\n\n            // FIXME 效率影响\n            if (clipPaths) {\n                clipPaths = clipPaths.slice();\n            }\n            else {\n                clipPaths = [];\n            }\n\n            var currentClipPath = userSetClipPath;\n            var parentClipPath = el;\n            // Recursively add clip path\n            while (currentClipPath) {\n                // clipPath 的变换是基于使用这个 clipPath 的元素\n                currentClipPath.parent = parentClipPath;\n                currentClipPath.updateTransform();\n\n                clipPaths.push(currentClipPath);\n\n                parentClipPath = currentClipPath;\n                currentClipPath = currentClipPath.clipPath;\n            }\n        }\n\n        if (el.isGroup) {\n            var children = el._children;\n\n            for (var i = 0; i < children.length; i++) {\n                var child = children[i];\n\n                // Force to mark as dirty if group is dirty\n                // FIXME __dirtyPath ?\n                if (el.__dirty) {\n                    child.__dirty = true;\n                }\n\n                this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n            }\n\n            // Mark group clean here\n            el.__dirty = false;\n\n        }\n        else {\n            el.__clipPaths = clipPaths;\n\n            this._displayList[this._displayListLen++] = el;\n        }\n    },\n\n    /**\n     * 添加图形(Shape)或者组(Group)到根节点\n     * @param {module:zrender/Element} el\n     */\n    addRoot: function (el) {\n        if (el.__storage === this) {\n            return;\n        }\n\n        if (el instanceof Group) {\n            el.addChildrenToStorage(this);\n        }\n\n        this.addToStorage(el);\n        this._roots.push(el);\n    },\n\n    /**\n     * 删除指定的图形(Shape)或者组(Group)\n     * @param {string|Array.<string>} [el] 如果为空清空整个Storage\n     */\n    delRoot: function (el) {\n        if (el == null) {\n            // 不指定el清空\n            for (var i = 0; i < this._roots.length; i++) {\n                var root = this._roots[i];\n                if (root instanceof Group) {\n                    root.delChildrenFromStorage(this);\n                }\n            }\n\n            this._roots = [];\n            this._displayList = [];\n            this._displayListLen = 0;\n\n            return;\n        }\n\n        if (el instanceof Array) {\n            for (var i = 0, l = el.length; i < l; i++) {\n                this.delRoot(el[i]);\n            }\n            return;\n        }\n\n\n        var idx = util.indexOf(this._roots, el);\n        if (idx >= 0) {\n            this.delFromStorage(el);\n            this._roots.splice(idx, 1);\n            if (el instanceof Group) {\n                el.delChildrenFromStorage(this);\n            }\n        }\n    },\n\n    addToStorage: function (el) {\n        if (el) {\n            el.__storage = this;\n            el.dirty(false);\n        }\n        return this;\n    },\n\n    delFromStorage: function (el) {\n        if (el) {\n            el.__storage = null;\n        }\n\n        return this;\n    },\n\n    /**\n     * 清空并且释放Storage\n     */\n    dispose: function () {\n        this._renderList =\n        this._roots = null;\n    },\n\n    displayableSortFunc: shapeCompareFunc\n};\n\nexport default Storage;","\nvar SHADOW_PROPS = {\n    'shadowBlur': 1,\n    'shadowOffsetX': 1,\n    'shadowOffsetY': 1,\n    'textShadowBlur': 1,\n    'textShadowOffsetX': 1,\n    'textShadowOffsetY': 1,\n    'textBoxShadowBlur': 1,\n    'textBoxShadowOffsetX': 1,\n    'textBoxShadowOffsetY': 1\n};\n\nexport default function (ctx, propName, value) {\n    if (SHADOW_PROPS.hasOwnProperty(propName)) {\n        return value *= ctx.dpr;\n    }\n    return value;\n}\n","\nexport var ContextCachedBy = {\n    NONE: 0,\n    STYLE_BIND: 1,\n    PLAIN_TEXT: 2\n};\n\n// Avoid confused with 0/false.\nexport var WILL_BE_RESTORED = 9;\n","\nimport fixShadow from './helper/fixShadow';\nimport {ContextCachedBy} from './constant';\n\nvar STYLE_COMMON_PROPS = [\n    ['shadowBlur', 0], ['shadowOffsetX', 0], ['shadowOffsetY', 0], ['shadowColor', '#000'],\n    ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]\n];\n\n// var SHADOW_PROPS = STYLE_COMMON_PROPS.slice(0, 4);\n// var LINE_PROPS = STYLE_COMMON_PROPS.slice(4);\n\nvar Style = function (opts) {\n    this.extendFrom(opts, false);\n};\n\nfunction createLinearGradient(ctx, obj, rect) {\n    var x = obj.x == null ? 0 : obj.x;\n    var x2 = obj.x2 == null ? 1 : obj.x2;\n    var y = obj.y == null ? 0 : obj.y;\n    var y2 = obj.y2 == null ? 0 : obj.y2;\n\n    if (!obj.global) {\n        x = x * rect.width + rect.x;\n        x2 = x2 * rect.width + rect.x;\n        y = y * rect.height + rect.y;\n        y2 = y2 * rect.height + rect.y;\n    }\n\n    // Fix NaN when rect is Infinity\n    x = isNaN(x) ? 0 : x;\n    x2 = isNaN(x2) ? 1 : x2;\n    y = isNaN(y) ? 0 : y;\n    y2 = isNaN(y2) ? 0 : y2;\n\n    var canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\n\n    return canvasGradient;\n}\n\nfunction createRadialGradient(ctx, obj, rect) {\n    var width = rect.width;\n    var height = rect.height;\n    var min = Math.min(width, height);\n\n    var x = obj.x == null ? 0.5 : obj.x;\n    var y = obj.y == null ? 0.5 : obj.y;\n    var r = obj.r == null ? 0.5 : obj.r;\n    if (!obj.global) {\n        x = x * width + rect.x;\n        y = y * height + rect.y;\n        r = r * min;\n    }\n\n    var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);\n\n    return canvasGradient;\n}\n\n\nStyle.prototype = {\n\n    constructor: Style,\n\n    /**\n     * @type {string}\n     */\n    fill: '#000',\n\n    /**\n     * @type {string}\n     */\n    stroke: null,\n\n    /**\n     * @type {number}\n     */\n    opacity: 1,\n\n    /**\n     * @type {number}\n     */\n    fillOpacity: null,\n\n    /**\n     * @type {number}\n     */\n    strokeOpacity: null,\n\n    /**\n     * `true` is not supported.\n     * `false`/`null`/`undefined` are the same.\n     * `false` is used to remove lineDash in some\n     * case that `null`/`undefined` can not be set.\n     * (e.g., emphasis.lineStyle in echarts)\n     * @type {Array.<number>|boolean}\n     */\n    lineDash: null,\n\n    /**\n     * @type {number}\n     */\n    lineDashOffset: 0,\n\n    /**\n     * @type {number}\n     */\n    shadowBlur: 0,\n\n    /**\n     * @type {number}\n     */\n    shadowOffsetX: 0,\n\n    /**\n     * @type {number}\n     */\n    shadowOffsetY: 0,\n\n    /**\n     * @type {number}\n     */\n    lineWidth: 1,\n\n    /**\n     * If stroke ignore scale\n     * @type {Boolean}\n     */\n    strokeNoScale: false,\n\n    // Bounding rect text configuration\n    // Not affected by element transform\n    /**\n     * @type {string}\n     */\n    text: null,\n\n    /**\n     * If `fontSize` or `fontFamily` exists, `font` will be reset by\n     * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`.\n     * So do not visit it directly in upper application (like echarts),\n     * but use `contain/text#makeFont` instead.\n     * @type {string}\n     */\n    font: null,\n\n    /**\n     * The same as font. Use font please.\n     * @deprecated\n     * @type {string}\n     */\n    textFont: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * @type {string}\n     */\n    fontStyle: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * @type {string}\n     */\n    fontWeight: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * Should be 12 but not '12px'.\n     * @type {number}\n     */\n    fontSize: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * @type {string}\n     */\n    fontFamily: null,\n\n    /**\n     * Reserved for special functinality, like 'hr'.\n     * @type {string}\n     */\n    textTag: null,\n\n    /**\n     * @type {string}\n     */\n    textFill: '#000',\n\n    /**\n     * @type {string}\n     */\n    textStroke: null,\n\n    /**\n     * @type {number}\n     */\n    textWidth: null,\n\n    /**\n     * Only for textBackground.\n     * @type {number}\n     */\n    textHeight: null,\n\n    /**\n     * textStroke may be set as some color as a default\n     * value in upper applicaion, where the default value\n     * of textStrokeWidth should be 0 to make sure that\n     * user can choose to do not use text stroke.\n     * @type {number}\n     */\n    textStrokeWidth: 0,\n\n    /**\n     * @type {number}\n     */\n    textLineHeight: null,\n\n    /**\n     * 'inside', 'left', 'right', 'top', 'bottom'\n     * [x, y]\n     * Based on x, y of rect.\n     * @type {string|Array.<number>}\n     * @default 'inside'\n     */\n    textPosition: 'inside',\n\n    /**\n     * If not specified, use the boundingRect of a `displayable`.\n     * @type {Object}\n     */\n    textRect: null,\n\n    /**\n     * [x, y]\n     * @type {Array.<number>}\n     */\n    textOffset: null,\n\n    /**\n     * @type {string}\n     */\n    textAlign: null,\n\n    /**\n     * @type {string}\n     */\n    textVerticalAlign: null,\n\n    /**\n     * @type {number}\n     */\n    textDistance: 5,\n\n    /**\n     * @type {string}\n     */\n    textShadowColor: 'transparent',\n\n    /**\n     * @type {number}\n     */\n    textShadowBlur: 0,\n\n    /**\n     * @type {number}\n     */\n    textShadowOffsetX: 0,\n\n    /**\n     * @type {number}\n     */\n    textShadowOffsetY: 0,\n\n    /**\n     * @type {string}\n     */\n    textBoxShadowColor: 'transparent',\n\n    /**\n     * @type {number}\n     */\n    textBoxShadowBlur: 0,\n\n    /**\n     * @type {number}\n     */\n    textBoxShadowOffsetX: 0,\n\n    /**\n     * @type {number}\n     */\n    textBoxShadowOffsetY: 0,\n\n    /**\n     * Whether transform text.\n     * Only available in Path and Image element,\n     * where the text is called as `RectText`.\n     * @type {boolean}\n     */\n    transformText: false,\n\n    /**\n     * Text rotate around position of Path or Image.\n     * The origin of the rotation can be specified by `textOrigin`.\n     * Only available in Path and Image element,\n     * where the text is called as `RectText`.\n     */\n    textRotation: 0,\n\n    /**\n     * Text origin of text rotation.\n     * Useful in the case like label rotation of circular symbol.\n     * Only available in Path and Image element, where the text is called\n     * as `RectText` and the element is called as \"host element\".\n     * The value can be:\n     * + If specified as a coordinate like `[10, 40]`, it is the `[x, y]`\n     * base on the left-top corner of the rect of its host element.\n     * + If specified as a string `center`, it is the center of the rect of\n     * its host element.\n     * + By default, this origin is the `textPosition`.\n     * @type {string|Array.<number>}\n     */\n    textOrigin: null,\n\n    /**\n     * @type {string}\n     */\n    textBackgroundColor: null,\n\n    /**\n     * @type {string}\n     */\n    textBorderColor: null,\n\n    /**\n     * @type {number}\n     */\n    textBorderWidth: 0,\n\n    /**\n     * @type {number}\n     */\n    textBorderRadius: 0,\n\n    /**\n     * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]`\n     * @type {number|Array.<number>}\n     */\n    textPadding: null,\n\n    /**\n     * Text styles for rich text.\n     * @type {Object}\n     */\n    rich: null,\n\n    /**\n     * {outerWidth, outerHeight, ellipsis, placeholder}\n     * @type {Object}\n     */\n    truncate: null,\n\n    /**\n     * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n     * @type {string}\n     */\n    blend: null,\n\n    /**\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    bind: function (ctx, el, prevEl) {\n        var style = this;\n        var prevStyle = prevEl && prevEl.style;\n        // If no prevStyle, it means first draw.\n        // Only apply cache if the last time cachced by this function.\n        var notCheckCache = !prevStyle || ctx.__attrCachedBy !== ContextCachedBy.STYLE_BIND;\n\n        ctx.__attrCachedBy = ContextCachedBy.STYLE_BIND;\n\n        for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {\n            var prop = STYLE_COMMON_PROPS[i];\n            var styleName = prop[0];\n\n            if (notCheckCache || style[styleName] !== prevStyle[styleName]) {\n                // FIXME Invalid property value will cause style leak from previous element.\n                ctx[styleName] =\n                    fixShadow(ctx, styleName, style[styleName] || prop[1]);\n            }\n        }\n\n        if ((notCheckCache || style.fill !== prevStyle.fill)) {\n            ctx.fillStyle = style.fill;\n        }\n        if ((notCheckCache || style.stroke !== prevStyle.stroke)) {\n            ctx.strokeStyle = style.stroke;\n        }\n        if ((notCheckCache || style.opacity !== prevStyle.opacity)) {\n            ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;\n        }\n\n        if ((notCheckCache || style.blend !== prevStyle.blend)) {\n            ctx.globalCompositeOperation = style.blend || 'source-over';\n        }\n        if (this.hasStroke()) {\n            var lineWidth = style.lineWidth;\n            ctx.lineWidth = lineWidth / (\n                (this.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1\n            );\n        }\n    },\n\n    hasFill: function () {\n        var fill = this.fill;\n        return fill != null && fill !== 'none';\n    },\n\n    hasStroke: function () {\n        var stroke = this.stroke;\n        return stroke != null && stroke !== 'none' && this.lineWidth > 0;\n    },\n\n    /**\n     * Extend from other style\n     * @param {zrender/graphic/Style} otherStyle\n     * @param {boolean} overwrite true: overwrirte any way.\n     *                            false: overwrite only when !target.hasOwnProperty\n     *                            others: overwrite when property is not null/undefined.\n     */\n    extendFrom: function (otherStyle, overwrite) {\n        if (otherStyle) {\n            for (var name in otherStyle) {\n                if (otherStyle.hasOwnProperty(name)\n                    && (overwrite === true\n                        || (\n                            overwrite === false\n                                ? !this.hasOwnProperty(name)\n                                : otherStyle[name] != null\n                        )\n                    )\n                ) {\n                    this[name] = otherStyle[name];\n                }\n            }\n        }\n    },\n\n    /**\n     * Batch setting style with a given object\n     * @param {Object|string} obj\n     * @param {*} [obj]\n     */\n    set: function (obj, value) {\n        if (typeof obj === 'string') {\n            this[obj] = value;\n        }\n        else {\n            this.extendFrom(obj, true);\n        }\n    },\n\n    /**\n     * Clone\n     * @return {zrender/graphic/Style} [description]\n     */\n    clone: function () {\n        var newStyle = new this.constructor();\n        newStyle.extendFrom(this, true);\n        return newStyle;\n    },\n\n    getGradient: function (ctx, obj, rect) {\n        var method = obj.type === 'radial' ? createRadialGradient : createLinearGradient;\n        var canvasGradient = method(ctx, obj, rect);\n        var colorStops = obj.colorStops;\n        for (var i = 0; i < colorStops.length; i++) {\n            canvasGradient.addColorStop(\n                colorStops[i].offset, colorStops[i].color\n            );\n        }\n        return canvasGradient;\n    }\n\n};\n\nvar styleProto = Style.prototype;\nfor (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {\n    var prop = STYLE_COMMON_PROPS[i];\n    if (!(prop[0] in styleProto)) {\n        styleProto[prop[0]] = prop[1];\n    }\n}\n\n// Provide for others\nStyle.getGradient = styleProto.getGradient;\n\nexport default Style;","\nvar Pattern = function (image, repeat) {\n    // Should do nothing more in this constructor. Because gradient can be\n    // declard by `color: {image: ...}`, where this constructor will not be called.\n\n    this.image = image;\n    this.repeat = repeat;\n\n    // Can be cloned\n    this.type = 'pattern';\n};\n\nPattern.prototype.getCanvasPattern = function (ctx) {\n    return ctx.createPattern(this.image, this.repeat || 'repeat');\n};\n\nexport default Pattern;","/**\n * @module zrender/Layer\n * @author pissang(https://www.github.com/pissang)\n */\n\nimport * as util from './core/util';\nimport {devicePixelRatio} from './config';\nimport Style from './graphic/Style';\nimport Pattern from './graphic/Pattern';\n\nfunction returnFalse() {\n    return false;\n}\n\n/**\n * 创建dom\n *\n * @inner\n * @param {string} id dom id 待用\n * @param {Painter} painter painter instance\n * @param {number} number\n */\nfunction createDom(id, painter, dpr) {\n    var newDom = util.createCanvas();\n    var width = painter.getWidth();\n    var height = painter.getHeight();\n\n    var newDomStyle = newDom.style;\n    if (newDomStyle) {  // In node or some other non-browser environment\n        newDomStyle.position = 'absolute';\n        newDomStyle.left = 0;\n        newDomStyle.top = 0;\n        newDomStyle.width = width + 'px';\n        newDomStyle.height = height + 'px';\n\n        newDom.setAttribute('data-zr-dom-id', id);\n    }\n\n    newDom.width = width * dpr;\n    newDom.height = height * dpr;\n\n    return newDom;\n}\n\n/**\n * @alias module:zrender/Layer\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @param {string} id\n * @param {module:zrender/Painter} painter\n * @param {number} [dpr]\n */\nvar Layer = function (id, painter, dpr) {\n    var dom;\n    dpr = dpr || devicePixelRatio;\n    if (typeof id === 'string') {\n        dom = createDom(id, painter, dpr);\n    }\n    // Not using isDom because in node it will return false\n    else if (util.isObject(id)) {\n        dom = id;\n        id = dom.id;\n    }\n    this.id = id;\n    this.dom = dom;\n\n    var domStyle = dom.style;\n    if (domStyle) { // Not in node\n        dom.onselectstart = returnFalse; // 避免页面选中的尴尬\n        domStyle['-webkit-user-select'] = 'none';\n        domStyle['user-select'] = 'none';\n        domStyle['-webkit-touch-callout'] = 'none';\n        domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';\n        domStyle['padding'] = 0; // eslint-disable-line dot-notation\n        domStyle['margin'] = 0; // eslint-disable-line dot-notation\n        domStyle['border-width'] = 0;\n    }\n\n    this.domBack = null;\n    this.ctxBack = null;\n\n    this.painter = painter;\n\n    this.config = null;\n\n    // Configs\n    /**\n     * 每次清空画布的颜色\n     * @type {string}\n     * @default 0\n     */\n    this.clearColor = 0;\n    /**\n     * 是否开启动态模糊\n     * @type {boolean}\n     * @default false\n     */\n    this.motionBlur = false;\n    /**\n     * 在开启动态模糊的时候使用，与上一帧混合的alpha值，值越大尾迹越明显\n     * @type {number}\n     * @default 0.7\n     */\n    this.lastFrameAlpha = 0.7;\n\n    /**\n     * Layer dpr\n     * @type {number}\n     */\n    this.dpr = dpr;\n};\n\nLayer.prototype = {\n\n    constructor: Layer,\n\n    __dirty: true,\n\n    __used: false,\n\n    __drawIndex: 0,\n    __startIndex: 0,\n    __endIndex: 0,\n\n    incremental: false,\n\n    getElementCount: function () {\n        return this.__endIndex - this.__startIndex;\n    },\n\n    initContext: function () {\n        this.ctx = this.dom.getContext('2d');\n        this.ctx.dpr = this.dpr;\n    },\n\n    createBackBuffer: function () {\n        var dpr = this.dpr;\n\n        this.domBack = createDom('back-' + this.id, this.painter, dpr);\n        this.ctxBack = this.domBack.getContext('2d');\n\n        if (dpr !== 1) {\n            this.ctxBack.scale(dpr, dpr);\n        }\n    },\n\n    /**\n     * @param  {number} width\n     * @param  {number} height\n     */\n    resize: function (width, height) {\n        var dpr = this.dpr;\n\n        var dom = this.dom;\n        var domStyle = dom.style;\n        var domBack = this.domBack;\n\n        if (domStyle) {\n            domStyle.width = width + 'px';\n            domStyle.height = height + 'px';\n        }\n\n        dom.width = width * dpr;\n        dom.height = height * dpr;\n\n        if (domBack) {\n            domBack.width = width * dpr;\n            domBack.height = height * dpr;\n\n            if (dpr !== 1) {\n                this.ctxBack.scale(dpr, dpr);\n            }\n        }\n    },\n\n    /**\n     * 清空该层画布\n     * @param {boolean} [clearAll]=false Clear all with out motion blur\n     * @param {Color} [clearColor]\n     */\n    clear: function (clearAll, clearColor) {\n        var dom = this.dom;\n        var ctx = this.ctx;\n        var width = dom.width;\n        var height = dom.height;\n\n        var clearColor = clearColor || this.clearColor;\n        var haveMotionBLur = this.motionBlur && !clearAll;\n        var lastFrameAlpha = this.lastFrameAlpha;\n\n        var dpr = this.dpr;\n\n        if (haveMotionBLur) {\n            if (!this.domBack) {\n                this.createBackBuffer();\n            }\n\n            this.ctxBack.globalCompositeOperation = 'copy';\n            this.ctxBack.drawImage(\n                dom, 0, 0,\n                width / dpr,\n                height / dpr\n            );\n        }\n\n        ctx.clearRect(0, 0, width, height);\n        if (clearColor && clearColor !== 'transparent') {\n            var clearColorGradientOrPattern;\n            // Gradient\n            if (clearColor.colorStops) {\n                // Cache canvas gradient\n                clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, {\n                    x: 0,\n                    y: 0,\n                    width: width,\n                    height: height\n                });\n\n                clearColor.__canvasGradient = clearColorGradientOrPattern;\n            }\n            // Pattern\n            else if (clearColor.image) {\n                clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx);\n            }\n            ctx.save();\n            ctx.fillStyle = clearColorGradientOrPattern || clearColor;\n            ctx.fillRect(0, 0, width, height);\n            ctx.restore();\n        }\n\n        if (haveMotionBLur) {\n            var domBack = this.domBack;\n            ctx.save();\n            ctx.globalAlpha = lastFrameAlpha;\n            ctx.drawImage(domBack, 0, 0, width, height);\n            ctx.restore();\n        }\n    }\n};\n\nexport default Layer;","\nexport default (\n    typeof window !== 'undefined'\n    && (\n        (window.requestAnimationFrame && window.requestAnimationFrame.bind(window))\n        // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809\n        || (window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window))\n        || window.mozRequestAnimationFrame\n        || window.webkitRequestAnimationFrame\n    )\n) || function (func) {\n    setTimeout(func, 16);\n};","\nimport LRU from '../../core/LRU';\n\nvar globalImageCache = new LRU(50);\n\n/**\n * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc\n * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image\n */\nexport function findExistImage(newImageOrSrc) {\n    if (typeof newImageOrSrc === 'string') {\n        var cachedImgObj = globalImageCache.get(newImageOrSrc);\n        return cachedImgObj && cachedImgObj.image;\n    }\n    else {\n        return newImageOrSrc;\n    }\n}\n\n/**\n * Caution: User should cache loaded images, but not just count on LRU.\n * Consider if required images more than LRU size, will dead loop occur?\n *\n * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc\n * @param {HTMLImageElement|HTMLCanvasElement|Canvas} image Existent image.\n * @param {module:zrender/Element} [hostEl] For calling `dirty`.\n * @param {Function} [cb] params: (image, cbPayload)\n * @param {Object} [cbPayload] Payload on cb calling.\n * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image\n */\nexport function createOrUpdateImage(newImageOrSrc, image, hostEl, cb, cbPayload) {\n    if (!newImageOrSrc) {\n        return image;\n    }\n    else if (typeof newImageOrSrc === 'string') {\n\n        // Image should not be loaded repeatly.\n        if ((image && image.__zrImageSrc === newImageOrSrc) || !hostEl) {\n            return image;\n        }\n\n        // Only when there is no existent image or existent image src\n        // is different, this method is responsible for load.\n        var cachedImgObj = globalImageCache.get(newImageOrSrc);\n\n        var pendingWrap = {hostEl: hostEl, cb: cb, cbPayload: cbPayload};\n\n        if (cachedImgObj) {\n            image = cachedImgObj.image;\n            !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\n        }\n        else {\n            image = new Image();\n            image.onload = image.onerror = imageOnLoad;\n\n            globalImageCache.put(\n                newImageOrSrc,\n                image.__cachedImgObj = {\n                    image: image,\n                    pending: [pendingWrap]\n                }\n            );\n\n            image.src = image.__zrImageSrc = newImageOrSrc;\n        }\n\n        return image;\n    }\n    // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas\n    else {\n        return newImageOrSrc;\n    }\n}\n\nfunction imageOnLoad() {\n    var cachedImgObj = this.__cachedImgObj;\n    this.onload = this.onerror = this.__cachedImgObj = null;\n\n    for (var i = 0; i < cachedImgObj.pending.length; i++) {\n        var pendingWrap = cachedImgObj.pending[i];\n        var cb = pendingWrap.cb;\n        cb && cb(this, pendingWrap.cbPayload);\n        pendingWrap.hostEl.dirty();\n    }\n    cachedImgObj.pending.length = 0;\n}\n\nexport function isImageReady(image) {\n    return image && image.width && image.height;\n}\n\n","import BoundingRect from '../core/BoundingRect';\nimport * as imageHelper from '../graphic/helper/image';\nimport {\n    getContext,\n    extend,\n    retrieve2,\n    retrieve3,\n    trim\n} from '../core/util';\n\nvar textWidthCache = {};\nvar textWidthCacheCounter = 0;\n\nvar TEXT_CACHE_MAX = 5000;\nvar STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\n\nexport var DEFAULT_FONT = '12px sans-serif';\n\n// Avoid assign to an exported variable, for transforming to cjs.\nvar methods = {};\n\nexport function $override(name, fn) {\n    methods[name] = fn;\n}\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {number} width\n */\nexport function getWidth(text, font) {\n    font = font || DEFAULT_FONT;\n    var key = text + ':' + font;\n    if (textWidthCache[key]) {\n        return textWidthCache[key];\n    }\n\n    var textLines = (text + '').split('\\n');\n    var width = 0;\n\n    for (var i = 0, l = textLines.length; i < l; i++) {\n        // textContain.measureText may be overrided in SVG or VML\n        width = Math.max(measureText(textLines[i], font).width, width);\n    }\n\n    if (textWidthCacheCounter > TEXT_CACHE_MAX) {\n        textWidthCacheCounter = 0;\n        textWidthCache = {};\n    }\n    textWidthCacheCounter++;\n    textWidthCache[key] = width;\n\n    return width;\n}\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {string} [textAlign='left']\n * @param {string} [textVerticalAlign='top']\n * @param {Array.<number>} [textPadding]\n * @param {Object} [rich]\n * @param {Object} [truncate]\n * @return {Object} {x, y, width, height, lineHeight}\n */\nexport function getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) {\n    return rich\n        ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate)\n        : getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, truncate);\n}\n\nfunction getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, truncate) {\n    var contentBlock = parsePlainText(text, font, textPadding, textLineHeight, truncate);\n    var outerWidth = getWidth(text, font);\n    if (textPadding) {\n        outerWidth += textPadding[1] + textPadding[3];\n    }\n    var outerHeight = contentBlock.outerHeight;\n\n    var x = adjustTextX(0, outerWidth, textAlign);\n    var y = adjustTextY(0, outerHeight, textVerticalAlign);\n\n    var rect = new BoundingRect(x, y, outerWidth, outerHeight);\n    rect.lineHeight = contentBlock.lineHeight;\n\n    return rect;\n}\n\nfunction getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) {\n    var contentBlock = parseRichText(text, {\n        rich: rich,\n        truncate: truncate,\n        font: font,\n        textAlign: textAlign,\n        textPadding: textPadding,\n        textLineHeight: textLineHeight\n    });\n    var outerWidth = contentBlock.outerWidth;\n    var outerHeight = contentBlock.outerHeight;\n\n    var x = adjustTextX(0, outerWidth, textAlign);\n    var y = adjustTextY(0, outerHeight, textVerticalAlign);\n\n    return new BoundingRect(x, y, outerWidth, outerHeight);\n}\n\n/**\n * @public\n * @param {number} x\n * @param {number} width\n * @param {string} [textAlign='left']\n * @return {number} Adjusted x.\n */\nexport function adjustTextX(x, width, textAlign) {\n    // FIXME Right to left language\n    if (textAlign === 'right') {\n        x -= width;\n    }\n    else if (textAlign === 'center') {\n        x -= width / 2;\n    }\n    return x;\n}\n\n/**\n * @public\n * @param {number} y\n * @param {number} height\n * @param {string} [textVerticalAlign='top']\n * @return {number} Adjusted y.\n */\nexport function adjustTextY(y, height, textVerticalAlign) {\n    if (textVerticalAlign === 'middle') {\n        y -= height / 2;\n    }\n    else if (textVerticalAlign === 'bottom') {\n        y -= height;\n    }\n    return y;\n}\n\n/**\n * Follow same interface to `Displayable.prototype.calculateTextPosition`.\n * @public\n * @param {Obejct} [out] Prepared out object. If not input, auto created in the method.\n * @param {module:zrender/graphic/Style} style where `textPosition` and `textDistance` are visited.\n * @param {Object} rect {x, y, width, height} Rect of the host elment, according to which the text positioned.\n * @return {Object} The input `out`. Set: {x, y, textAlign, textVerticalAlign}\n */\nexport function calculateTextPosition(out, style, rect) {\n    var textPosition = style.textPosition;\n    var distance = style.textDistance;\n\n    var x = rect.x;\n    var y = rect.y;\n    distance = distance || 0;\n\n    var height = rect.height;\n    var width = rect.width;\n    var halfHeight = height / 2;\n\n    var textAlign = 'left';\n    var textVerticalAlign = 'top';\n\n    switch (textPosition) {\n        case 'left':\n            x -= distance;\n            y += halfHeight;\n            textAlign = 'right';\n            textVerticalAlign = 'middle';\n            break;\n        case 'right':\n            x += distance + width;\n            y += halfHeight;\n            textVerticalAlign = 'middle';\n            break;\n        case 'top':\n            x += width / 2;\n            y -= distance;\n            textAlign = 'center';\n            textVerticalAlign = 'bottom';\n            break;\n        case 'bottom':\n            x += width / 2;\n            y += height + distance;\n            textAlign = 'center';\n            break;\n        case 'inside':\n            x += width / 2;\n            y += halfHeight;\n            textAlign = 'center';\n            textVerticalAlign = 'middle';\n            break;\n        case 'insideLeft':\n            x += distance;\n            y += halfHeight;\n            textVerticalAlign = 'middle';\n            break;\n        case 'insideRight':\n            x += width - distance;\n            y += halfHeight;\n            textAlign = 'right';\n            textVerticalAlign = 'middle';\n            break;\n        case 'insideTop':\n            x += width / 2;\n            y += distance;\n            textAlign = 'center';\n            break;\n        case 'insideBottom':\n            x += width / 2;\n            y += height - distance;\n            textAlign = 'center';\n            textVerticalAlign = 'bottom';\n            break;\n        case 'insideTopLeft':\n            x += distance;\n            y += distance;\n            break;\n        case 'insideTopRight':\n            x += width - distance;\n            y += distance;\n            textAlign = 'right';\n            break;\n        case 'insideBottomLeft':\n            x += distance;\n            y += height - distance;\n            textVerticalAlign = 'bottom';\n            break;\n        case 'insideBottomRight':\n            x += width - distance;\n            y += height - distance;\n            textAlign = 'right';\n            textVerticalAlign = 'bottom';\n            break;\n    }\n\n    out = out || {};\n    out.x = x;\n    out.y = y;\n    out.textAlign = textAlign;\n    out.textVerticalAlign = textVerticalAlign;\n\n    return out;\n}\n\n/**\n * To be removed. But still do not remove in case that some one has imported it.\n * @deprecated\n * @public\n * @param {stirng} textPosition\n * @param {Object} rect {x, y, width, height}\n * @param {number} distance\n * @return {Object} {x, y, textAlign, textVerticalAlign}\n */\nexport function adjustTextPositionOnRect(textPosition, rect, distance) {\n    var dummyStyle = {textPosition: textPosition, textDistance: distance};\n    return calculateTextPosition({}, dummyStyle, rect);\n}\n\n/**\n * Show ellipsis if overflow.\n *\n * @public\n * @param  {string} text\n * @param  {string} containerWidth\n * @param  {string} font\n * @param  {number} [ellipsis='...']\n * @param  {Object} [options]\n * @param  {number} [options.maxIterations=3]\n * @param  {number} [options.minChar=0] If truncate result are less\n *                  then minChar, ellipsis will not show, which is\n *                  better for user hint in some cases.\n * @param  {number} [options.placeholder=''] When all truncated, use the placeholder.\n * @return {string}\n */\nexport function truncateText(text, containerWidth, font, ellipsis, options) {\n    if (!containerWidth) {\n        return '';\n    }\n\n    var textLines = (text + '').split('\\n');\n    options = prepareTruncateOptions(containerWidth, font, ellipsis, options);\n\n    // FIXME\n    // It is not appropriate that every line has '...' when truncate multiple lines.\n    for (var i = 0, len = textLines.length; i < len; i++) {\n        textLines[i] = truncateSingleLine(textLines[i], options);\n    }\n\n    return textLines.join('\\n');\n}\n\nfunction prepareTruncateOptions(containerWidth, font, ellipsis, options) {\n    options = extend({}, options);\n\n    options.font = font;\n    var ellipsis = retrieve2(ellipsis, '...');\n    options.maxIterations = retrieve2(options.maxIterations, 2);\n    var minChar = options.minChar = retrieve2(options.minChar, 0);\n    // FIXME\n    // Other languages?\n    options.cnCharWidth = getWidth('国', font);\n    // FIXME\n    // Consider proportional font?\n    var ascCharWidth = options.ascCharWidth = getWidth('a', font);\n    options.placeholder = retrieve2(options.placeholder, '');\n\n    // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.\n    // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.\n    var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n    for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n        contentWidth -= ascCharWidth;\n    }\n\n    var ellipsisWidth = getWidth(ellipsis, font);\n    if (ellipsisWidth > contentWidth) {\n        ellipsis = '';\n        ellipsisWidth = 0;\n    }\n\n    contentWidth = containerWidth - ellipsisWidth;\n\n    options.ellipsis = ellipsis;\n    options.ellipsisWidth = ellipsisWidth;\n    options.contentWidth = contentWidth;\n    options.containerWidth = containerWidth;\n\n    return options;\n}\n\nfunction truncateSingleLine(textLine, options) {\n    var containerWidth = options.containerWidth;\n    var font = options.font;\n    var contentWidth = options.contentWidth;\n\n    if (!containerWidth) {\n        return '';\n    }\n\n    var lineWidth = getWidth(textLine, font);\n\n    if (lineWidth <= containerWidth) {\n        return textLine;\n    }\n\n    for (var j = 0; ; j++) {\n        if (lineWidth <= contentWidth || j >= options.maxIterations) {\n            textLine += options.ellipsis;\n            break;\n        }\n\n        var subLength = j === 0\n            ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth)\n            : lineWidth > 0\n            ? Math.floor(textLine.length * contentWidth / lineWidth)\n            : 0;\n\n        textLine = textLine.substr(0, subLength);\n        lineWidth = getWidth(textLine, font);\n    }\n\n    if (textLine === '') {\n        textLine = options.placeholder;\n    }\n\n    return textLine;\n}\n\nfunction estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) {\n    var width = 0;\n    var i = 0;\n    for (var len = text.length; i < len && width < contentWidth; i++) {\n        var charCode = text.charCodeAt(i);\n        width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth;\n    }\n    return i;\n}\n\n/**\n * @public\n * @param {string} font\n * @return {number} line height\n */\nexport function getLineHeight(font) {\n    // FIXME A rough approach.\n    return getWidth('国', font);\n}\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {Object} width\n */\nexport function measureText(text, font) {\n    return methods.measureText(text, font);\n}\n\n// Avoid assign to an exported variable, for transforming to cjs.\nmethods.measureText = function (text, font) {\n    var ctx = getContext();\n    ctx.font = font || DEFAULT_FONT;\n    return ctx.measureText(text);\n};\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {Object} [truncate]\n * @return {Object} block: {lineHeight, lines, height, outerHeight, canCacheByTextString}\n *  Notice: for performance, do not calculate outerWidth util needed.\n *  `canCacheByTextString` means the result `lines` is only determined by the input `text`.\n *  Thus we can simply comparing the `input` text to determin whether the result changed,\n *  without travel the result `lines`.\n */\nexport function parsePlainText(text, font, padding, textLineHeight, truncate) {\n    text != null && (text += '');\n\n    var lineHeight = retrieve2(textLineHeight, getLineHeight(font));\n    var lines = text ? text.split('\\n') : [];\n    var height = lines.length * lineHeight;\n    var outerHeight = height;\n    var canCacheByTextString = true;\n\n    if (padding) {\n        outerHeight += padding[0] + padding[2];\n    }\n\n    if (text && truncate) {\n        canCacheByTextString = false;\n        var truncOuterHeight = truncate.outerHeight;\n        var truncOuterWidth = truncate.outerWidth;\n        if (truncOuterHeight != null && outerHeight > truncOuterHeight) {\n            text = '';\n            lines = [];\n        }\n        else if (truncOuterWidth != null) {\n            var options = prepareTruncateOptions(\n                truncOuterWidth - (padding ? padding[1] + padding[3] : 0),\n                font,\n                truncate.ellipsis,\n                {minChar: truncate.minChar, placeholder: truncate.placeholder}\n            );\n\n            // FIXME\n            // It is not appropriate that every line has '...' when truncate multiple lines.\n            for (var i = 0, len = lines.length; i < len; i++) {\n                lines[i] = truncateSingleLine(lines[i], options);\n            }\n        }\n    }\n\n    return {\n        lines: lines,\n        height: height,\n        outerHeight: outerHeight,\n        lineHeight: lineHeight,\n        canCacheByTextString: canCacheByTextString\n    };\n}\n\n/**\n * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx'\n * Also consider 'bbbb{a|xxx\\nzzz}xxxx\\naaaa'.\n *\n * @public\n * @param {string} text\n * @param {Object} style\n * @return {Object} block\n * {\n *      width,\n *      height,\n *      lines: [{\n *          lineHeight,\n *          width,\n *          tokens: [[{\n *              styleName,\n *              text,\n *              width,      // include textPadding\n *              height,     // include textPadding\n *              textWidth, // pure text width\n *              textHeight, // pure text height\n *              lineHeihgt,\n *              font,\n *              textAlign,\n *              textVerticalAlign\n *          }], [...], ...]\n *      }, ...]\n * }\n * If styleName is undefined, it is plain text.\n */\nexport function parseRichText(text, style) {\n    var contentBlock = {lines: [], width: 0, height: 0};\n\n    text != null && (text += '');\n    if (!text) {\n        return contentBlock;\n    }\n\n    var lastIndex = STYLE_REG.lastIndex = 0;\n    var result;\n    while ((result = STYLE_REG.exec(text)) != null) {\n        var matchedIndex = result.index;\n        if (matchedIndex > lastIndex) {\n            pushTokens(contentBlock, text.substring(lastIndex, matchedIndex));\n        }\n        pushTokens(contentBlock, result[2], result[1]);\n        lastIndex = STYLE_REG.lastIndex;\n    }\n\n    if (lastIndex < text.length) {\n        pushTokens(contentBlock, text.substring(lastIndex, text.length));\n    }\n\n    var lines = contentBlock.lines;\n    var contentHeight = 0;\n    var contentWidth = 0;\n    // For `textWidth: 100%`\n    var pendingList = [];\n\n    var stlPadding = style.textPadding;\n\n    var truncate = style.truncate;\n    var truncateWidth = truncate && truncate.outerWidth;\n    var truncateHeight = truncate && truncate.outerHeight;\n    if (stlPadding) {\n        truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]);\n        truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]);\n    }\n\n    // Calculate layout info of tokens.\n    for (var i = 0; i < lines.length; i++) {\n        var line = lines[i];\n        var lineHeight = 0;\n        var lineWidth = 0;\n\n        for (var j = 0; j < line.tokens.length; j++) {\n            var token = line.tokens[j];\n            var tokenStyle = token.styleName && style.rich[token.styleName] || {};\n            // textPadding should not inherit from style.\n            var textPadding = token.textPadding = tokenStyle.textPadding;\n\n            // textFont has been asigned to font by `normalizeStyle`.\n            var font = token.font = tokenStyle.font || style.font;\n\n            // textHeight can be used when textVerticalAlign is specified in token.\n            var tokenHeight = token.textHeight = retrieve2(\n                // textHeight should not be inherited, consider it can be specified\n                // as box height of the block.\n                tokenStyle.textHeight, getLineHeight(font)\n            );\n            textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n            token.height = tokenHeight;\n            token.lineHeight = retrieve3(\n                tokenStyle.textLineHeight, style.textLineHeight, tokenHeight\n            );\n\n            token.textAlign = tokenStyle && tokenStyle.textAlign || style.textAlign;\n            token.textVerticalAlign = tokenStyle && tokenStyle.textVerticalAlign || 'middle';\n\n            if (truncateHeight != null && contentHeight + token.lineHeight > truncateHeight) {\n                return {lines: [], width: 0, height: 0};\n            }\n\n            token.textWidth = getWidth(token.text, font);\n            var tokenWidth = tokenStyle.textWidth;\n            var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === 'auto';\n\n            // Percent width, can be `100%`, can be used in drawing separate\n            // line when box width is needed to be auto.\n            if (typeof tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') {\n                token.percentWidth = tokenWidth;\n                pendingList.push(token);\n                tokenWidth = 0;\n                // Do not truncate in this case, because there is no user case\n                // and it is too complicated.\n            }\n            else {\n                if (tokenWidthNotSpecified) {\n                    tokenWidth = token.textWidth;\n\n                    // FIXME: If image is not loaded and textWidth is not specified, calling\n                    // `getBoundingRect()` will not get correct result.\n                    var textBackgroundColor = tokenStyle.textBackgroundColor;\n                    var bgImg = textBackgroundColor && textBackgroundColor.image;\n\n                    // Use cases:\n                    // (1) If image is not loaded, it will be loaded at render phase and call\n                    // `dirty()` and `textBackgroundColor.image` will be replaced with the loaded\n                    // image, and then the right size will be calculated here at the next tick.\n                    // See `graphic/helper/text.js`.\n                    // (2) If image loaded, and `textBackgroundColor.image` is image src string,\n                    // use `imageHelper.findExistImage` to find cached image.\n                    // `imageHelper.findExistImage` will always be called here before\n                    // `imageHelper.createOrUpdateImage` in `graphic/helper/text.js#renderRichText`\n                    // which ensures that image will not be rendered before correct size calcualted.\n                    if (bgImg) {\n                        bgImg = imageHelper.findExistImage(bgImg);\n                        if (imageHelper.isImageReady(bgImg)) {\n                            tokenWidth = Math.max(tokenWidth, bgImg.width * tokenHeight / bgImg.height);\n                        }\n                    }\n                }\n\n                var paddingW = textPadding ? textPadding[1] + textPadding[3] : 0;\n                tokenWidth += paddingW;\n\n                var remianTruncWidth = truncateWidth != null ? truncateWidth - lineWidth : null;\n\n                if (remianTruncWidth != null && remianTruncWidth < tokenWidth) {\n                    if (!tokenWidthNotSpecified || remianTruncWidth < paddingW) {\n                        token.text = '';\n                        token.textWidth = tokenWidth = 0;\n                    }\n                    else {\n                        token.text = truncateText(\n                            token.text, remianTruncWidth - paddingW, font, truncate.ellipsis,\n                            {minChar: truncate.minChar}\n                        );\n                        token.textWidth = getWidth(token.text, font);\n                        tokenWidth = token.textWidth + paddingW;\n                    }\n                }\n            }\n\n            lineWidth += (token.width = tokenWidth);\n            tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n        }\n\n        line.width = lineWidth;\n        line.lineHeight = lineHeight;\n        contentHeight += lineHeight;\n        contentWidth = Math.max(contentWidth, lineWidth);\n    }\n\n    contentBlock.outerWidth = contentBlock.width = retrieve2(style.textWidth, contentWidth);\n    contentBlock.outerHeight = contentBlock.height = retrieve2(style.textHeight, contentHeight);\n\n    if (stlPadding) {\n        contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n        contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n    }\n\n    for (var i = 0; i < pendingList.length; i++) {\n        var token = pendingList[i];\n        var percentWidth = token.percentWidth;\n        // Should not base on outerWidth, because token can not be placed out of padding.\n        token.width = parseInt(percentWidth, 10) / 100 * contentWidth;\n    }\n\n    return contentBlock;\n}\n\nfunction pushTokens(block, str, styleName) {\n    var isEmptyStr = str === '';\n    var strs = str.split('\\n');\n    var lines = block.lines;\n\n    for (var i = 0; i < strs.length; i++) {\n        var text = strs[i];\n        var token = {\n            styleName: styleName,\n            text: text,\n            isLineHolder: !text && !isEmptyStr\n        };\n\n        // The first token should be appended to the last line.\n        if (!i) {\n            var tokens = (lines[lines.length - 1] || (lines[0] = {tokens: []})).tokens;\n\n            // Consider cases:\n            // (1) ''.split('\\n') => ['', '\\n', ''], the '' at the first item\n            // (which is a placeholder) should be replaced by new token.\n            // (2) A image backage, where token likes {a|}.\n            // (3) A redundant '' will affect textAlign in line.\n            // (4) tokens with the same tplName should not be merged, because\n            // they should be displayed in different box (with border and padding).\n            var tokensLen = tokens.length;\n            (tokensLen === 1 && tokens[0].isLineHolder)\n                ? (tokens[0] = token)\n                // Consider text is '', only insert when it is the \"lineHolder\" or\n                // \"emptyStr\". Otherwise a redundant '' will affect textAlign in line.\n                : ((text || !tokensLen || isEmptyStr) && tokens.push(token));\n        }\n        // Other tokens always start a new line.\n        else {\n            // If there is '', insert it as a placeholder.\n            lines.push({tokens: [token]});\n        }\n    }\n}\n\nexport function makeFont(style) {\n    // FIXME in node-canvas fontWeight is before fontStyle\n    // Use `fontSize` `fontFamily` to check whether font properties are defined.\n    var font = (style.fontSize || style.fontFamily) && [\n        style.fontStyle,\n        style.fontWeight,\n        (style.fontSize || 12) + 'px',\n        // If font properties are defined, `fontFamily` should not be ignored.\n        style.fontFamily || 'sans-serif'\n    ].join(' ');\n    return font && trim(font) || style.textFont || style.font;\n}\n","\n/**\n * @param {Object} ctx\n * @param {Object} shape\n * @param {number} shape.x\n * @param {number} shape.y\n * @param {number} shape.width\n * @param {number} shape.height\n * @param {number} shape.r\n */\nexport function buildPath(ctx, shape) {\n    var x = shape.x;\n    var y = shape.y;\n    var width = shape.width;\n    var height = shape.height;\n    var r = shape.r;\n    var r1;\n    var r2;\n    var r3;\n    var r4;\n\n    // Convert width and height to positive for better borderRadius\n    if (width < 0) {\n        x = x + width;\n        width = -width;\n    }\n    if (height < 0) {\n        y = y + height;\n        height = -height;\n    }\n\n    if (typeof r === 'number') {\n        r1 = r2 = r3 = r4 = r;\n    }\n    else if (r instanceof Array) {\n        if (r.length === 1) {\n            r1 = r2 = r3 = r4 = r[0];\n        }\n        else if (r.length === 2) {\n            r1 = r3 = r[0];\n            r2 = r4 = r[1];\n        }\n        else if (r.length === 3) {\n            r1 = r[0];\n            r2 = r4 = r[1];\n            r3 = r[2];\n        }\n        else {\n            r1 = r[0];\n            r2 = r[1];\n            r3 = r[2];\n            r4 = r[3];\n        }\n    }\n    else {\n        r1 = r2 = r3 = r4 = 0;\n    }\n\n    var total;\n    if (r1 + r2 > width) {\n        total = r1 + r2;\n        r1 *= width / total;\n        r2 *= width / total;\n    }\n    if (r3 + r4 > width) {\n        total = r3 + r4;\n        r3 *= width / total;\n        r4 *= width / total;\n    }\n    if (r2 + r3 > height) {\n        total = r2 + r3;\n        r2 *= height / total;\n        r3 *= height / total;\n    }\n    if (r1 + r4 > height) {\n        total = r1 + r4;\n        r1 *= height / total;\n        r4 *= height / total;\n    }\n    ctx.moveTo(x + r1, y);\n    ctx.lineTo(x + width - r2, y);\n    r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n    ctx.lineTo(x + width, y + height - r3);\n    r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n    ctx.lineTo(x + r4, y + height);\n    r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n    ctx.lineTo(x, y + r1);\n    r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n}\n","\nimport {\n    retrieve2,\n    retrieve3,\n    each,\n    normalizeCssArray,\n    isString,\n    isObject\n} from '../../core/util';\nimport * as textContain from '../../contain/text';\nimport * as roundRectHelper from './roundRect';\nimport * as imageHelper from './image';\nimport fixShadow from './fixShadow';\nimport {ContextCachedBy, WILL_BE_RESTORED} from '../constant';\n\nvar DEFAULT_FONT = textContain.DEFAULT_FONT;\n\n// TODO: Have not support 'start', 'end' yet.\nvar VALID_TEXT_ALIGN = {left: 1, right: 1, center: 1};\nvar VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1};\n// Different from `STYLE_COMMON_PROPS` of `graphic/Style`,\n// the default value of shadowColor is `'transparent'`.\nvar SHADOW_STYLE_COMMON_PROPS = [\n    ['textShadowBlur', 'shadowBlur', 0],\n    ['textShadowOffsetX', 'shadowOffsetX', 0],\n    ['textShadowOffsetY', 'shadowOffsetY', 0],\n    ['textShadowColor', 'shadowColor', 'transparent']\n];\nvar _tmpTextPositionResult = {};\nvar _tmpBoxPositionResult = {};\n\n/**\n * @param {module:zrender/graphic/Style} style\n * @return {module:zrender/graphic/Style} The input style.\n */\nexport function normalizeTextStyle(style) {\n    normalizeStyle(style);\n    each(style.rich, normalizeStyle);\n    return style;\n}\n\nfunction normalizeStyle(style) {\n    if (style) {\n\n        style.font = textContain.makeFont(style);\n\n        var textAlign = style.textAlign;\n        textAlign === 'middle' && (textAlign = 'center');\n        style.textAlign = (\n            textAlign == null || VALID_TEXT_ALIGN[textAlign]\n        ) ? textAlign : 'left';\n\n        // Compatible with textBaseline.\n        var textVerticalAlign = style.textVerticalAlign || style.textBaseline;\n        textVerticalAlign === 'center' && (textVerticalAlign = 'middle');\n        style.textVerticalAlign = (\n            textVerticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[textVerticalAlign]\n        ) ? textVerticalAlign : 'top';\n\n        var textPadding = style.textPadding;\n        if (textPadding) {\n            style.textPadding = normalizeCssArray(style.textPadding);\n        }\n    }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} text\n * @param {module:zrender/graphic/Style} style\n * @param {Object|boolean} [rect] {x, y, width, height}\n *                  If set false, rect text is not used.\n * @param {Element|module:zrender/graphic/helper/constant.WILL_BE_RESTORED} [prevEl] For ctx prop cache.\n */\nexport function renderText(hostEl, ctx, text, style, rect, prevEl) {\n    style.rich\n        ? renderRichText(hostEl, ctx, text, style, rect, prevEl)\n        : renderPlainText(hostEl, ctx, text, style, rect, prevEl);\n}\n\n// Avoid setting to ctx according to prevEl if possible for\n// performance in scenarios of large amount text.\nfunction renderPlainText(hostEl, ctx, text, style, rect, prevEl) {\n    'use strict';\n\n    var needDrawBg = needDrawBackground(style);\n\n    var prevStyle;\n    var checkCache = false;\n    var cachedByMe = ctx.__attrCachedBy === ContextCachedBy.PLAIN_TEXT;\n\n    // Only take and check cache for `Text` el, but not RectText.\n    if (prevEl !== WILL_BE_RESTORED) {\n        if (prevEl) {\n            prevStyle = prevEl.style;\n            checkCache = !needDrawBg && cachedByMe && prevStyle;\n        }\n\n        // Prevent from using cache in `Style::bind`, because of the case:\n        // ctx property is modified by other properties than `Style::bind`\n        // used, and Style::bind is called next.\n        ctx.__attrCachedBy = needDrawBg ? ContextCachedBy.NONE : ContextCachedBy.PLAIN_TEXT;\n    }\n    // Since this will be restored, prevent from using these props to check cache in the next\n    // entering of this method. But do not need to clear other cache like `Style::bind`.\n    else if (cachedByMe) {\n        ctx.__attrCachedBy = ContextCachedBy.NONE;\n    }\n\n    var styleFont = style.font || DEFAULT_FONT;\n    // PENDING\n    // Only `Text` el set `font` and keep it (`RectText` will restore). So theoretically\n    // we can make font cache on ctx, which can cache for text el that are discontinuous.\n    // But layer save/restore needed to be considered.\n    // if (styleFont !== ctx.__fontCache) {\n    //     ctx.font = styleFont;\n    //     if (prevEl !== WILL_BE_RESTORED) {\n    //         ctx.__fontCache = styleFont;\n    //     }\n    // }\n    if (!checkCache || styleFont !== (prevStyle.font || DEFAULT_FONT)) {\n        ctx.font = styleFont;\n    }\n\n    // Use the final font from context-2d, because the final\n    // font might not be the style.font when it is illegal.\n    // But get `ctx.font` might be time consuming.\n    var computedFont = hostEl.__computedFont;\n    if (hostEl.__styleFont !== styleFont) {\n        hostEl.__styleFont = styleFont;\n        computedFont = hostEl.__computedFont = ctx.font;\n    }\n\n    var textPadding = style.textPadding;\n    var textLineHeight = style.textLineHeight;\n\n    var contentBlock = hostEl.__textCotentBlock;\n    if (!contentBlock || hostEl.__dirtyText) {\n        contentBlock = hostEl.__textCotentBlock = textContain.parsePlainText(\n            text, computedFont, textPadding, textLineHeight, style.truncate\n        );\n    }\n\n    var outerHeight = contentBlock.outerHeight;\n\n    var textLines = contentBlock.lines;\n    var lineHeight = contentBlock.lineHeight;\n\n    var boxPos = getBoxPosition(_tmpBoxPositionResult, hostEl, style, rect);\n    var baseX = boxPos.baseX;\n    var baseY = boxPos.baseY;\n    var textAlign = boxPos.textAlign || 'left';\n    var textVerticalAlign = boxPos.textVerticalAlign;\n\n    // Origin of textRotation should be the base point of text drawing.\n    applyTextRotation(ctx, style, rect, baseX, baseY);\n\n    var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n    var textX = baseX;\n    var textY = boxY;\n\n    if (needDrawBg || textPadding) {\n        // Consider performance, do not call getTextWidth util necessary.\n        var textWidth = textContain.getWidth(text, computedFont);\n        var outerWidth = textWidth;\n        textPadding && (outerWidth += textPadding[1] + textPadding[3]);\n        var boxX = textContain.adjustTextX(baseX, outerWidth, textAlign);\n\n        needDrawBg && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight);\n\n        if (textPadding) {\n            textX = getTextXForPadding(baseX, textAlign, textPadding);\n            textY += textPadding[0];\n        }\n    }\n\n    // Always set textAlign and textBase line, because it is difficute to calculate\n    // textAlign from prevEl, and we dont sure whether textAlign will be reset if\n    // font set happened.\n    ctx.textAlign = textAlign;\n    // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n    // text will offset downward a little bit in font \"Microsoft YaHei\".\n    ctx.textBaseline = 'middle';\n    // Set text opacity\n    ctx.globalAlpha = style.opacity || 1;\n\n    // Always set shadowBlur and shadowOffset to avoid leak from displayable.\n    for (var i = 0; i < SHADOW_STYLE_COMMON_PROPS.length; i++) {\n        var propItem = SHADOW_STYLE_COMMON_PROPS[i];\n        var styleProp = propItem[0];\n        var ctxProp = propItem[1];\n        var val = style[styleProp];\n        if (!checkCache || val !== prevStyle[styleProp]) {\n            ctx[ctxProp] = fixShadow(ctx, ctxProp, val || propItem[2]);\n        }\n    }\n\n    // `textBaseline` is set as 'middle'.\n    textY += lineHeight / 2;\n\n    var textStrokeWidth = style.textStrokeWidth;\n    var textStrokeWidthPrev = checkCache ? prevStyle.textStrokeWidth : null;\n    var strokeWidthChanged = !checkCache || textStrokeWidth !== textStrokeWidthPrev;\n    var strokeChanged = !checkCache || strokeWidthChanged || style.textStroke !== prevStyle.textStroke;\n    var textStroke = getStroke(style.textStroke, textStrokeWidth);\n    var textFill = getFill(style.textFill);\n\n    if (textStroke) {\n        if (strokeWidthChanged) {\n            ctx.lineWidth = textStrokeWidth;\n        }\n        if (strokeChanged) {\n            ctx.strokeStyle = textStroke;\n        }\n    }\n    if (textFill) {\n        if (!checkCache || style.textFill !== prevStyle.textFill) {\n            ctx.fillStyle = textFill;\n        }\n    }\n\n    // Optimize simply, in most cases only one line exists.\n    if (textLines.length === 1) {\n        // Fill after stroke so the outline will not cover the main part.\n        textStroke && ctx.strokeText(textLines[0], textX, textY);\n        textFill && ctx.fillText(textLines[0], textX, textY);\n    }\n    else {\n        for (var i = 0; i < textLines.length; i++) {\n            // Fill after stroke so the outline will not cover the main part.\n            textStroke && ctx.strokeText(textLines[i], textX, textY);\n            textFill && ctx.fillText(textLines[i], textX, textY);\n            textY += lineHeight;\n        }\n    }\n}\n\nfunction renderRichText(hostEl, ctx, text, style, rect, prevEl) {\n    // Do not do cache for rich text because of the complexity.\n    // But `RectText` this will be restored, do not need to clear other cache like `Style::bind`.\n    if (prevEl !== WILL_BE_RESTORED) {\n        ctx.__attrCachedBy = ContextCachedBy.NONE;\n    }\n\n    var contentBlock = hostEl.__textCotentBlock;\n\n    if (!contentBlock || hostEl.__dirtyText) {\n        contentBlock = hostEl.__textCotentBlock = textContain.parseRichText(text, style);\n    }\n\n    drawRichText(hostEl, ctx, contentBlock, style, rect);\n}\n\nfunction drawRichText(hostEl, ctx, contentBlock, style, rect) {\n    var contentWidth = contentBlock.width;\n    var outerWidth = contentBlock.outerWidth;\n    var outerHeight = contentBlock.outerHeight;\n    var textPadding = style.textPadding;\n\n    var boxPos = getBoxPosition(_tmpBoxPositionResult, hostEl, style, rect);\n    var baseX = boxPos.baseX;\n    var baseY = boxPos.baseY;\n    var textAlign = boxPos.textAlign;\n    var textVerticalAlign = boxPos.textVerticalAlign;\n\n    // Origin of textRotation should be the base point of text drawing.\n    applyTextRotation(ctx, style, rect, baseX, baseY);\n\n    var boxX = textContain.adjustTextX(baseX, outerWidth, textAlign);\n    var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n    var xLeft = boxX;\n    var lineTop = boxY;\n    if (textPadding) {\n        xLeft += textPadding[3];\n        lineTop += textPadding[0];\n    }\n    var xRight = xLeft + contentWidth;\n\n    needDrawBackground(style) && drawBackground(\n        hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight\n    );\n\n    for (var i = 0; i < contentBlock.lines.length; i++) {\n        var line = contentBlock.lines[i];\n        var tokens = line.tokens;\n        var tokenCount = tokens.length;\n        var lineHeight = line.lineHeight;\n        var usedWidth = line.width;\n\n        var leftIndex = 0;\n        var lineXLeft = xLeft;\n        var lineXRight = xRight;\n        var rightIndex = tokenCount - 1;\n        var token;\n\n        while (\n            leftIndex < tokenCount\n            && (token = tokens[leftIndex], !token.textAlign || token.textAlign === 'left')\n        ) {\n            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft, 'left');\n            usedWidth -= token.width;\n            lineXLeft += token.width;\n            leftIndex++;\n        }\n\n        while (\n            rightIndex >= 0\n            && (token = tokens[rightIndex], token.textAlign === 'right')\n        ) {\n            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXRight, 'right');\n            usedWidth -= token.width;\n            lineXRight -= token.width;\n            rightIndex--;\n        }\n\n        // The other tokens are placed as textAlign 'center' if there is enough space.\n        lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - usedWidth) / 2;\n        while (leftIndex <= rightIndex) {\n            token = tokens[leftIndex];\n            // Consider width specified by user, use 'center' rather than 'left'.\n            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center');\n            lineXLeft += token.width;\n            leftIndex++;\n        }\n\n        lineTop += lineHeight;\n    }\n}\n\nfunction applyTextRotation(ctx, style, rect, x, y) {\n    // textRotation only apply in RectText.\n    if (rect && style.textRotation) {\n        var origin = style.textOrigin;\n        if (origin === 'center') {\n            x = rect.width / 2 + rect.x;\n            y = rect.height / 2 + rect.y;\n        }\n        else if (origin) {\n            x = origin[0] + rect.x;\n            y = origin[1] + rect.y;\n        }\n\n        ctx.translate(x, y);\n        // Positive: anticlockwise\n        ctx.rotate(-style.textRotation);\n        ctx.translate(-x, -y);\n    }\n}\n\nfunction placeToken(hostEl, ctx, token, style, lineHeight, lineTop, x, textAlign) {\n    var tokenStyle = style.rich[token.styleName] || {};\n    tokenStyle.text = token.text;\n\n    // 'ctx.textBaseline' is always set as 'middle', for sake of\n    // the bias of \"Microsoft YaHei\".\n    var textVerticalAlign = token.textVerticalAlign;\n    var y = lineTop + lineHeight / 2;\n    if (textVerticalAlign === 'top') {\n        y = lineTop + token.height / 2;\n    }\n    else if (textVerticalAlign === 'bottom') {\n        y = lineTop + lineHeight - token.height / 2;\n    }\n\n    !token.isLineHolder && needDrawBackground(tokenStyle) && drawBackground(\n        hostEl,\n        ctx,\n        tokenStyle,\n        textAlign === 'right'\n            ? x - token.width\n            : textAlign === 'center'\n            ? x - token.width / 2\n            : x,\n        y - token.height / 2,\n        token.width,\n        token.height\n    );\n\n    var textPadding = token.textPadding;\n    if (textPadding) {\n        x = getTextXForPadding(x, textAlign, textPadding);\n        y -= token.height / 2 - textPadding[2] - token.textHeight / 2;\n    }\n\n    setCtx(ctx, 'shadowBlur', retrieve3(tokenStyle.textShadowBlur, style.textShadowBlur, 0));\n    setCtx(ctx, 'shadowColor', tokenStyle.textShadowColor || style.textShadowColor || 'transparent');\n    setCtx(ctx, 'shadowOffsetX', retrieve3(tokenStyle.textShadowOffsetX, style.textShadowOffsetX, 0));\n    setCtx(ctx, 'shadowOffsetY', retrieve3(tokenStyle.textShadowOffsetY, style.textShadowOffsetY, 0));\n\n    setCtx(ctx, 'textAlign', textAlign);\n    // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n    // text will offset downward a little bit in font \"Microsoft YaHei\".\n    setCtx(ctx, 'textBaseline', 'middle');\n\n    setCtx(ctx, 'font', token.font || DEFAULT_FONT);\n\n    var textStroke = getStroke(tokenStyle.textStroke || style.textStroke, textStrokeWidth);\n    var textFill = getFill(tokenStyle.textFill || style.textFill);\n    var textStrokeWidth = retrieve2(tokenStyle.textStrokeWidth, style.textStrokeWidth);\n\n    // Fill after stroke so the outline will not cover the main part.\n    if (textStroke) {\n        setCtx(ctx, 'lineWidth', textStrokeWidth);\n        setCtx(ctx, 'strokeStyle', textStroke);\n        ctx.strokeText(token.text, x, y);\n    }\n    if (textFill) {\n        setCtx(ctx, 'fillStyle', textFill);\n        ctx.fillText(token.text, x, y);\n    }\n}\n\nfunction needDrawBackground(style) {\n    return !!(\n        style.textBackgroundColor\n        || (style.textBorderWidth && style.textBorderColor)\n    );\n}\n\n// style: {textBackgroundColor, textBorderWidth, textBorderColor, textBorderRadius, text}\n// shape: {x, y, width, height}\nfunction drawBackground(hostEl, ctx, style, x, y, width, height) {\n    var textBackgroundColor = style.textBackgroundColor;\n    var textBorderWidth = style.textBorderWidth;\n    var textBorderColor = style.textBorderColor;\n    var isPlainBg = isString(textBackgroundColor);\n\n    setCtx(ctx, 'shadowBlur', style.textBoxShadowBlur || 0);\n    setCtx(ctx, 'shadowColor', style.textBoxShadowColor || 'transparent');\n    setCtx(ctx, 'shadowOffsetX', style.textBoxShadowOffsetX || 0);\n    setCtx(ctx, 'shadowOffsetY', style.textBoxShadowOffsetY || 0);\n\n    if (isPlainBg || (textBorderWidth && textBorderColor)) {\n        ctx.beginPath();\n        var textBorderRadius = style.textBorderRadius;\n        if (!textBorderRadius) {\n            ctx.rect(x, y, width, height);\n        }\n        else {\n            roundRectHelper.buildPath(ctx, {\n                x: x, y: y, width: width, height: height, r: textBorderRadius\n            });\n        }\n        ctx.closePath();\n    }\n\n    if (isPlainBg) {\n        setCtx(ctx, 'fillStyle', textBackgroundColor);\n\n        if (style.fillOpacity != null) {\n            var originalGlobalAlpha = ctx.globalAlpha;\n            ctx.globalAlpha = style.fillOpacity * style.opacity;\n            ctx.fill();\n            ctx.globalAlpha = originalGlobalAlpha;\n        }\n        else {\n            ctx.fill();\n        }\n    }\n    else if (isObject(textBackgroundColor)) {\n        var image = textBackgroundColor.image;\n\n        image = imageHelper.createOrUpdateImage(\n            image, null, hostEl, onBgImageLoaded, textBackgroundColor\n        );\n        if (image && imageHelper.isImageReady(image)) {\n            ctx.drawImage(image, x, y, width, height);\n        }\n    }\n\n    if (textBorderWidth && textBorderColor) {\n        setCtx(ctx, 'lineWidth', textBorderWidth);\n        setCtx(ctx, 'strokeStyle', textBorderColor);\n\n        if (style.strokeOpacity != null) {\n            var originalGlobalAlpha = ctx.globalAlpha;\n            ctx.globalAlpha = style.strokeOpacity * style.opacity;\n            ctx.stroke();\n            ctx.globalAlpha = originalGlobalAlpha;\n        }\n        else {\n            ctx.stroke();\n        }\n    }\n}\n\nfunction onBgImageLoaded(image, textBackgroundColor) {\n    // Replace image, so that `contain/text.js#parseRichText`\n    // will get correct result in next tick.\n    textBackgroundColor.image = image;\n}\n\nexport function getBoxPosition(out, hostEl, style, rect) {\n    var baseX = style.x || 0;\n    var baseY = style.y || 0;\n    var textAlign = style.textAlign;\n    var textVerticalAlign = style.textVerticalAlign;\n\n    // Text position represented by coord\n    if (rect) {\n        var textPosition = style.textPosition;\n        if (textPosition instanceof Array) {\n            // Percent\n            baseX = rect.x + parsePercent(textPosition[0], rect.width);\n            baseY = rect.y + parsePercent(textPosition[1], rect.height);\n        }\n        else {\n            var res = (hostEl && hostEl.calculateTextPosition)\n                ? hostEl.calculateTextPosition(_tmpTextPositionResult, style, rect)\n                : textContain.calculateTextPosition(_tmpTextPositionResult, style, rect);\n            baseX = res.x;\n            baseY = res.y;\n            // Default align and baseline when has textPosition\n            textAlign = textAlign || res.textAlign;\n            textVerticalAlign = textVerticalAlign || res.textVerticalAlign;\n        }\n\n        // textOffset is only support in RectText, otherwise\n        // we have to adjust boundingRect for textOffset.\n        var textOffset = style.textOffset;\n        if (textOffset) {\n            baseX += textOffset[0];\n            baseY += textOffset[1];\n        }\n    }\n\n    out = out || {};\n    out.baseX = baseX;\n    out.baseY = baseY;\n    out.textAlign = textAlign;\n    out.textVerticalAlign = textVerticalAlign;\n\n    return out;\n}\n\n\nfunction setCtx(ctx, prop, value) {\n    ctx[prop] = fixShadow(ctx, prop, value);\n    return ctx[prop];\n}\n\n/**\n * @param {string} [stroke] If specified, do not check style.textStroke.\n * @param {string} [lineWidth] If specified, do not check style.textStroke.\n * @param {number} style\n */\nexport function getStroke(stroke, lineWidth) {\n    return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')\n        ? null\n        // TODO pattern and gradient?\n        : (stroke.image || stroke.colorStops)\n        ? '#000'\n        : stroke;\n}\n\nexport function getFill(fill) {\n    return (fill == null || fill === 'none')\n        ? null\n        // TODO pattern and gradient?\n        : (fill.image || fill.colorStops)\n        ? '#000'\n        : fill;\n}\n\nexport function parsePercent(value, maxValue) {\n    if (typeof value === 'string') {\n        if (value.lastIndexOf('%') >= 0) {\n            return parseFloat(value) / 100 * maxValue;\n        }\n        return parseFloat(value);\n    }\n    return value;\n}\n\nfunction getTextXForPadding(x, textAlign, textPadding) {\n    return textAlign === 'right'\n        ? (x - textPadding[1])\n        : textAlign === 'center'\n        ? (x + textPadding[3] / 2 - textPadding[1] / 2)\n        : (x + textPadding[3]);\n}\n\n/**\n * @param {string} text\n * @param {module:zrender/Style} style\n * @return {boolean}\n */\nexport function needDrawText(text, style) {\n    return text != null\n        && (text\n            || style.textBackgroundColor\n            || (style.textBorderWidth && style.textBorderColor)\n            || style.textPadding\n        );\n}\n","/**\n * Mixin for drawing text in a element bounding rect\n * @module zrender/mixin/RectText\n */\n\nimport * as textHelper from '../helper/text';\nimport BoundingRect from '../../core/BoundingRect';\nimport {WILL_BE_RESTORED} from '../constant';\n\nvar tmpRect = new BoundingRect();\n\nvar RectText = function () {};\n\nRectText.prototype = {\n\n    constructor: RectText,\n\n    /**\n     * Draw text in a rect with specified position.\n     * @param  {CanvasRenderingContext2D} ctx\n     * @param  {Object} rect Displayable rect\n     */\n    drawRectText: function (ctx, rect) {\n        var style = this.style;\n\n        rect = style.textRect || rect;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && textHelper.normalizeTextStyle(style, true);\n\n        var text = style.text;\n\n        // Convert to string\n        text != null && (text += '');\n\n        if (!textHelper.needDrawText(text, style)) {\n            return;\n        }\n\n        // FIXME\n        // Do not provide prevEl to `textHelper.renderText` for ctx prop cache,\n        // but use `ctx.save()` and `ctx.restore()`. Because the cache for rect\n        // text propably break the cache for its host elements.\n        ctx.save();\n\n        // Transform rect to view space\n        var transform = this.transform;\n        if (!style.transformText) {\n            if (transform) {\n                tmpRect.copy(rect);\n                tmpRect.applyTransform(transform);\n                rect = tmpRect;\n            }\n        }\n        else {\n            this.setTransform(ctx);\n        }\n\n        // transformText and textRotation can not be used at the same time.\n        textHelper.renderText(this, ctx, text, style, rect, WILL_BE_RESTORED);\n\n        ctx.restore();\n    }\n};\n\nexport default RectText;","/**\n * Base class of all displayable graphic objects\n * @module zrender/graphic/Displayable\n */\n\n\nimport * as zrUtil from '../core/util';\nimport Style from './Style';\nimport Element from '../Element';\nimport RectText from './mixin/RectText';\n\n/**\n * @alias module:zrender/graphic/Displayable\n * @extends module:zrender/Element\n * @extends module:zrender/graphic/mixin/RectText\n */\nfunction Displayable(opts) {\n\n    opts = opts || {};\n\n    Element.call(this, opts);\n\n    // Extend properties\n    for (var name in opts) {\n        if (\n            opts.hasOwnProperty(name)\n                && name !== 'style'\n        ) {\n            this[name] = opts[name];\n        }\n    }\n\n    /**\n     * @type {module:zrender/graphic/Style}\n     */\n    this.style = new Style(opts.style, this);\n\n    this._rect = null;\n    // Shapes for cascade clipping.\n    // Can only be `null`/`undefined` or an non-empty array, MUST NOT be an empty array.\n    // because it is easy to only using null to check whether clipPaths changed.\n    this.__clipPaths = null;\n\n    // FIXME Stateful must be mixined after style is setted\n    // Stateful.call(this, opts);\n}\n\nDisplayable.prototype = {\n\n    constructor: Displayable,\n\n    type: 'displayable',\n\n    /**\n     * Dirty flag. From which painter will determine if this displayable object needs brush.\n     * @name module:zrender/graphic/Displayable#__dirty\n     * @type {boolean}\n     */\n    __dirty: true,\n\n    /**\n     * Whether the displayable object is visible. when it is true, the displayable object\n     * is not drawn, but the mouse event can still trigger the object.\n     * @name module:/zrender/graphic/Displayable#invisible\n     * @type {boolean}\n     * @default false\n     */\n    invisible: false,\n\n    /**\n     * @name module:/zrender/graphic/Displayable#z\n     * @type {number}\n     * @default 0\n     */\n    z: 0,\n\n    /**\n     * @name module:/zrender/graphic/Displayable#z\n     * @type {number}\n     * @default 0\n     */\n    z2: 0,\n\n    /**\n     * The z level determines the displayable object can be drawn in which layer canvas.\n     * @name module:/zrender/graphic/Displayable#zlevel\n     * @type {number}\n     * @default 0\n     */\n    zlevel: 0,\n\n    /**\n     * Whether it can be dragged.\n     * @name module:/zrender/graphic/Displayable#draggable\n     * @type {boolean}\n     * @default false\n     */\n    draggable: false,\n\n    /**\n     * Whether is it dragging.\n     * @name module:/zrender/graphic/Displayable#draggable\n     * @type {boolean}\n     * @default false\n     */\n    dragging: false,\n\n    /**\n     * Whether to respond to mouse events.\n     * @name module:/zrender/graphic/Displayable#silent\n     * @type {boolean}\n     * @default false\n     */\n    silent: false,\n\n    /**\n     * If enable culling\n     * @type {boolean}\n     * @default false\n     */\n    culling: false,\n\n    /**\n     * Mouse cursor when hovered\n     * @name module:/zrender/graphic/Displayable#cursor\n     * @type {string}\n     */\n    cursor: 'pointer',\n\n    /**\n     * If hover area is bounding rect\n     * @name module:/zrender/graphic/Displayable#rectHover\n     * @type {string}\n     */\n    rectHover: false,\n\n    /**\n     * Render the element progressively when the value >= 0,\n     * usefull for large data.\n     * @type {boolean}\n     */\n    progressive: false,\n\n    /**\n     * @type {boolean}\n     */\n    incremental: false,\n    /**\n     * Scale ratio for global scale.\n     * @type {boolean}\n     */\n    globalScaleRatio: 1,\n\n    beforeBrush: function (ctx) {},\n\n    afterBrush: function (ctx) {},\n\n    /**\n     * Graphic drawing method.\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    // Interface\n    brush: function (ctx, prevEl) {},\n\n    /**\n     * Get the minimum bounding box.\n     * @return {module:zrender/core/BoundingRect}\n     */\n    // Interface\n    getBoundingRect: function () {},\n\n    /**\n     * If displayable element contain coord x, y\n     * @param  {number} x\n     * @param  {number} y\n     * @return {boolean}\n     */\n    contain: function (x, y) {\n        return this.rectContain(x, y);\n    },\n\n    /**\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    traverse: function (cb, context) {\n        cb.call(context, this);\n    },\n\n    /**\n     * If bounding rect of element contain coord x, y\n     * @param  {number} x\n     * @param  {number} y\n     * @return {boolean}\n     */\n    rectContain: function (x, y) {\n        var coord = this.transformCoordToLocal(x, y);\n        var rect = this.getBoundingRect();\n        return rect.contain(coord[0], coord[1]);\n    },\n\n    /**\n     * Mark displayable element dirty and refresh next frame\n     */\n    dirty: function () {\n        this.__dirty = this.__dirtyText = true;\n\n        this._rect = null;\n\n        this.__zr && this.__zr.refresh();\n    },\n\n    /**\n     * If displayable object binded any event\n     * @return {boolean}\n     */\n    // TODO, events bound by bind\n    // isSilent: function () {\n    //     return !(\n    //         this.hoverable || this.draggable\n    //         || this.onmousemove || this.onmouseover || this.onmouseout\n    //         || this.onmousedown || this.onmouseup || this.onclick\n    //         || this.ondragenter || this.ondragover || this.ondragleave\n    //         || this.ondrop\n    //     );\n    // },\n    /**\n     * Alias for animate('style')\n     * @param {boolean} loop\n     */\n    animateStyle: function (loop) {\n        return this.animate('style', loop);\n    },\n\n    attrKV: function (key, value) {\n        if (key !== 'style') {\n            Element.prototype.attrKV.call(this, key, value);\n        }\n        else {\n            this.style.set(value);\n        }\n    },\n\n    /**\n     * @param {Object|string} key\n     * @param {*} value\n     */\n    setStyle: function (key, value) {\n        this.style.set(key, value);\n        this.dirty(false);\n        return this;\n    },\n\n    /**\n     * Use given style object\n     * @param  {Object} obj\n     */\n    useStyle: function (obj) {\n        this.style = new Style(obj, this);\n        this.dirty(false);\n        return this;\n    },\n\n    /**\n     * The string value of `textPosition` needs to be calculated to a real postion.\n     * For example, `'inside'` is calculated to `[rect.width/2, rect.height/2]`\n     * by default. See `contain/text.js#calculateTextPosition` for more details.\n     * But some coutom shapes like \"pin\", \"flag\" have center that is not exactly\n     * `[width/2, height/2]`. So we provide this hook to customize the calculation\n     * for those shapes. It will be called if the `style.textPosition` is a string.\n     * @param {Obejct} [out] Prepared out object. If not provided, this method should\n     *        be responsible for creating one.\n     * @param {module:zrender/graphic/Style} style\n     * @param {Object} rect {x, y, width, height}\n     * @return {Obejct} out The same as the input out.\n     *         {\n     *             x: number. mandatory.\n     *             y: number. mandatory.\n     *             textAlign: string. optional. use style.textAlign by default.\n     *             textVerticalAlign: string. optional. use style.textVerticalAlign by default.\n     *         }\n     */\n    calculateTextPosition: null\n};\n\nzrUtil.inherits(Displayable, Element);\n\nzrUtil.mixin(Displayable, RectText);\n// zrUtil.mixin(Displayable, Stateful);\n\nexport default Displayable;","import Displayable from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport * as zrUtil from '../core/util';\nimport * as imageHelper from './helper/image';\n\n/**\n * @alias zrender/graphic/Image\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nfunction ZImage(opts) {\n    Displayable.call(this, opts);\n}\n\nZImage.prototype = {\n\n    constructor: ZImage,\n\n    type: 'image',\n\n    brush: function (ctx, prevEl) {\n        var style = this.style;\n        var src = style.image;\n\n        // Must bind each time\n        style.bind(ctx, this, prevEl);\n\n        var image = this._image = imageHelper.createOrUpdateImage(\n            src,\n            this._image,\n            this,\n            this.onload\n        );\n\n        if (!image || !imageHelper.isImageReady(image)) {\n            return;\n        }\n\n        // 图片已经加载完成\n        // if (image.nodeName.toUpperCase() == 'IMG') {\n        //     if (!image.complete) {\n        //         return;\n        //     }\n        // }\n        // Else is canvas\n\n        var x = style.x || 0;\n        var y = style.y || 0;\n        var width = style.width;\n        var height = style.height;\n        var aspect = image.width / image.height;\n        if (width == null && height != null) {\n            // Keep image/height ratio\n            width = height * aspect;\n        }\n        else if (height == null && width != null) {\n            height = width / aspect;\n        }\n        else if (width == null && height == null) {\n            width = image.width;\n            height = image.height;\n        }\n\n        // 设置transform\n        this.setTransform(ctx);\n\n        if (style.sWidth && style.sHeight) {\n            var sx = style.sx || 0;\n            var sy = style.sy || 0;\n            ctx.drawImage(\n                image,\n                sx, sy, style.sWidth, style.sHeight,\n                x, y, width, height\n            );\n        }\n        else if (style.sx && style.sy) {\n            var sx = style.sx;\n            var sy = style.sy;\n            var sWidth = width - sx;\n            var sHeight = height - sy;\n            ctx.drawImage(\n                image,\n                sx, sy, sWidth, sHeight,\n                x, y, width, height\n            );\n        }\n        else {\n            ctx.drawImage(image, x, y, width, height);\n        }\n\n        // Draw rect text\n        if (style.text != null) {\n            // Only restore transform when needs draw text.\n            this.restoreTransform(ctx);\n            this.drawRectText(ctx, this.getBoundingRect());\n        }\n    },\n\n    getBoundingRect: function () {\n        var style = this.style;\n        if (!this._rect) {\n            this._rect = new BoundingRect(\n                style.x || 0, style.y || 0, style.width || 0, style.height || 0\n            );\n        }\n        return this._rect;\n    }\n};\n\nzrUtil.inherits(ZImage, Displayable);\n\nexport default ZImage;","import {devicePixelRatio} from './config';\nimport * as util from './core/util';\nimport logError from './core/log';\nimport BoundingRect from './core/BoundingRect';\nimport timsort from './core/timsort';\nimport Layer from './Layer';\nimport requestAnimationFrame from './animation/requestAnimationFrame';\nimport Image from './graphic/Image';\nimport env from './core/env';\n\nvar HOVER_LAYER_ZLEVEL = 1e5;\nvar CANVAS_ZLEVEL = 314159;\n\nvar EL_AFTER_INCREMENTAL_INC = 0.01;\nvar INCREMENTAL_INC = 0.001;\n\nfunction parseInt10(val) {\n    return parseInt(val, 10);\n}\n\nfunction isLayerValid(layer) {\n    if (!layer) {\n        return false;\n    }\n\n    if (layer.__builtin__) {\n        return true;\n    }\n\n    if (typeof (layer.resize) !== 'function'\n        || typeof (layer.refresh) !== 'function'\n    ) {\n        return false;\n    }\n\n    return true;\n}\n\nvar tmpRect = new BoundingRect(0, 0, 0, 0);\nvar viewRect = new BoundingRect(0, 0, 0, 0);\nfunction isDisplayableCulled(el, width, height) {\n    tmpRect.copy(el.getBoundingRect());\n    if (el.transform) {\n        tmpRect.applyTransform(el.transform);\n    }\n    viewRect.width = width;\n    viewRect.height = height;\n    return !tmpRect.intersect(viewRect);\n}\n\nfunction isClipPathChanged(clipPaths, prevClipPaths) {\n    // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n    if (clipPaths === prevClipPaths) {\n        return false;\n    }\n    if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {\n        return true;\n    }\n    for (var i = 0; i < clipPaths.length; i++) {\n        if (clipPaths[i] !== prevClipPaths[i]) {\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction doClip(clipPaths, ctx) {\n    for (var i = 0; i < clipPaths.length; i++) {\n        var clipPath = clipPaths[i];\n\n        clipPath.setTransform(ctx);\n        ctx.beginPath();\n        clipPath.buildPath(ctx, clipPath.shape);\n        ctx.clip();\n        // Transform back\n        clipPath.restoreTransform(ctx);\n    }\n}\n\nfunction createRoot(width, height) {\n    var domRoot = document.createElement('div');\n\n    // domRoot.onselectstart = returnFalse; // Avoid page selected\n    domRoot.style.cssText = [\n        'position:relative',\n        // IOS13 safari probably has a compositing bug (z order of the canvas and the consequent\n        // dom does not act as expected) when some of the parent dom has\n        // `-webkit-overflow-scrolling: touch;` and the webpage is longer than one screen and\n        // the canvas is not at the top part of the page.\n        // Check `https://bugs.webkit.org/show_bug.cgi?id=203681` for more details. We remove\n        // this `overflow:hidden` to avoid the bug.\n        // 'overflow:hidden',\n        'width:' + width + 'px',\n        'height:' + height + 'px',\n        'padding:0',\n        'margin:0',\n        'border-width:0'\n    ].join(';') + ';';\n\n    return domRoot;\n}\n\n\n/**\n * @alias module:zrender/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\nvar Painter = function (root, storage, opts) {\n\n    this.type = 'canvas';\n\n    // In node environment using node-canvas\n    var singleCanvas = !root.nodeName // In node ?\n        || root.nodeName.toUpperCase() === 'CANVAS';\n\n    this._opts = opts = util.extend({}, opts || {});\n\n    /**\n     * @type {number}\n     */\n    this.dpr = opts.devicePixelRatio || devicePixelRatio;\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._singleCanvas = singleCanvas;\n    /**\n     * 绘图容器\n     * @type {HTMLElement}\n     */\n    this.root = root;\n\n    var rootStyle = root.style;\n\n    if (rootStyle) {\n        rootStyle['-webkit-tap-highlight-color'] = 'transparent';\n        rootStyle['-webkit-user-select'] =\n        rootStyle['user-select'] =\n        rootStyle['-webkit-touch-callout'] = 'none';\n\n        root.innerHTML = '';\n    }\n\n    /**\n     * @type {module:zrender/Storage}\n     */\n    this.storage = storage;\n\n    /**\n     * @type {Array.<number>}\n     * @private\n     */\n    var zlevelList = this._zlevelList = [];\n\n    /**\n     * @type {Object.<string, module:zrender/Layer>}\n     * @private\n     */\n    var layers = this._layers = {};\n\n    /**\n     * @type {Object.<string, Object>}\n     * @private\n     */\n    this._layerConfig = {};\n\n    /**\n     * zrender will do compositing when root is a canvas and have multiple zlevels.\n     */\n    this._needsManuallyCompositing = false;\n\n    if (!singleCanvas) {\n        this._width = this._getSize(0);\n        this._height = this._getSize(1);\n\n        var domRoot = this._domRoot = createRoot(\n            this._width, this._height\n        );\n        root.appendChild(domRoot);\n    }\n    else {\n        var width = root.width;\n        var height = root.height;\n\n        if (opts.width != null) {\n            width = opts.width;\n        }\n        if (opts.height != null) {\n            height = opts.height;\n        }\n        this.dpr = opts.devicePixelRatio || 1;\n\n        // Use canvas width and height directly\n        root.width = width * this.dpr;\n        root.height = height * this.dpr;\n\n        this._width = width;\n        this._height = height;\n\n        // Create layer if only one given canvas\n        // Device can be specified to create a high dpi image.\n        var mainLayer = new Layer(root, this, this.dpr);\n        mainLayer.__builtin__ = true;\n        mainLayer.initContext();\n        // FIXME Use canvas width and height\n        // mainLayer.resize(width, height);\n        layers[CANVAS_ZLEVEL] = mainLayer;\n        mainLayer.zlevel = CANVAS_ZLEVEL;\n        // Not use common zlevel.\n        zlevelList.push(CANVAS_ZLEVEL);\n\n        this._domRoot = root;\n    }\n\n    /**\n     * @type {module:zrender/Layer}\n     * @private\n     */\n    this._hoverlayer = null;\n\n    this._hoverElements = [];\n};\n\nPainter.prototype = {\n\n    constructor: Painter,\n\n    getType: function () {\n        return 'canvas';\n    },\n\n    /**\n     * If painter use a single canvas\n     * @return {boolean}\n     */\n    isSingleCanvas: function () {\n        return this._singleCanvas;\n    },\n    /**\n     * @return {HTMLDivElement}\n     */\n    getViewportRoot: function () {\n        return this._domRoot;\n    },\n\n    getViewportRootOffset: function () {\n        var viewportRoot = this.getViewportRoot();\n        if (viewportRoot) {\n            return {\n                offsetLeft: viewportRoot.offsetLeft || 0,\n                offsetTop: viewportRoot.offsetTop || 0\n            };\n        }\n    },\n\n    /**\n     * 刷新\n     * @param {boolean} [paintAll=false] 强制绘制所有displayable\n     */\n    refresh: function (paintAll) {\n\n        var list = this.storage.getDisplayList(true);\n\n        var zlevelList = this._zlevelList;\n\n        this._redrawId = Math.random();\n\n        this._paintList(list, paintAll, this._redrawId);\n\n        // Paint custum layers\n        for (var i = 0; i < zlevelList.length; i++) {\n            var z = zlevelList[i];\n            var layer = this._layers[z];\n            if (!layer.__builtin__ && layer.refresh) {\n                var clearColor = i === 0 ? this._backgroundColor : null;\n                layer.refresh(clearColor);\n            }\n        }\n\n        this.refreshHover();\n\n        return this;\n    },\n\n    addHover: function (el, hoverStyle) {\n        if (el.__hoverMir) {\n            return;\n        }\n        var elMirror = new el.constructor({\n            style: el.style,\n            shape: el.shape,\n            z: el.z,\n            z2: el.z2,\n            silent: el.silent\n        });\n        elMirror.__from = el;\n        el.__hoverMir = elMirror;\n        hoverStyle && elMirror.setStyle(hoverStyle);\n        this._hoverElements.push(elMirror);\n\n        return elMirror;\n    },\n\n    removeHover: function (el) {\n        var elMirror = el.__hoverMir;\n        var hoverElements = this._hoverElements;\n        var idx = util.indexOf(hoverElements, elMirror);\n        if (idx >= 0) {\n            hoverElements.splice(idx, 1);\n        }\n        el.__hoverMir = null;\n    },\n\n    clearHover: function (el) {\n        var hoverElements = this._hoverElements;\n        for (var i = 0; i < hoverElements.length; i++) {\n            var from = hoverElements[i].__from;\n            if (from) {\n                from.__hoverMir = null;\n            }\n        }\n        hoverElements.length = 0;\n    },\n\n    refreshHover: function () {\n        var hoverElements = this._hoverElements;\n        var len = hoverElements.length;\n        var hoverLayer = this._hoverlayer;\n        hoverLayer && hoverLayer.clear();\n\n        if (!len) {\n            return;\n        }\n        timsort(hoverElements, this.storage.displayableSortFunc);\n\n        // Use a extream large zlevel\n        // FIXME?\n        if (!hoverLayer) {\n            hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n        }\n\n        var scope = {};\n        hoverLayer.ctx.save();\n        for (var i = 0; i < len;) {\n            var el = hoverElements[i];\n            var originalEl = el.__from;\n            // Original el is removed\n            // PENDING\n            if (!(originalEl && originalEl.__zr)) {\n                hoverElements.splice(i, 1);\n                originalEl.__hoverMir = null;\n                len--;\n                continue;\n            }\n            i++;\n\n            // Use transform\n            // FIXME style and shape ?\n            if (!originalEl.invisible) {\n                el.transform = originalEl.transform;\n                el.invTransform = originalEl.invTransform;\n                el.__clipPaths = originalEl.__clipPaths;\n                // el.\n                this._doPaintEl(el, hoverLayer, true, scope);\n            }\n        }\n\n        hoverLayer.ctx.restore();\n    },\n\n    getHoverLayer: function () {\n        return this.getLayer(HOVER_LAYER_ZLEVEL);\n    },\n\n    _paintList: function (list, paintAll, redrawId) {\n        if (this._redrawId !== redrawId) {\n            return;\n        }\n\n        paintAll = paintAll || false;\n\n        this._updateLayerStatus(list);\n\n        var finished = this._doPaintList(list, paintAll);\n\n        if (this._needsManuallyCompositing) {\n            this._compositeManually();\n        }\n\n        if (!finished) {\n            var self = this;\n            requestAnimationFrame(function () {\n                self._paintList(list, paintAll, redrawId);\n            });\n        }\n    },\n\n    _compositeManually: function () {\n        var ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n        var width = this._domRoot.width;\n        var height = this._domRoot.height;\n        ctx.clearRect(0, 0, width, height);\n        // PENDING, If only builtin layer?\n        this.eachBuiltinLayer(function (layer) {\n            if (layer.virtual) {\n                ctx.drawImage(layer.dom, 0, 0, width, height);\n            }\n        });\n    },\n\n    _doPaintList: function (list, paintAll) {\n        var layerList = [];\n        for (var zi = 0; zi < this._zlevelList.length; zi++) {\n            var zlevel = this._zlevelList[zi];\n            var layer = this._layers[zlevel];\n            if (layer.__builtin__\n                && layer !== this._hoverlayer\n                && (layer.__dirty || paintAll)\n            ) {\n                layerList.push(layer);\n            }\n        }\n\n        var finished = true;\n\n        for (var k = 0; k < layerList.length; k++) {\n            var layer = layerList[k];\n            var ctx = layer.ctx;\n            var scope = {};\n            ctx.save();\n\n            var start = paintAll ? layer.__startIndex : layer.__drawIndex;\n\n            var useTimer = !paintAll && layer.incremental && Date.now;\n            var startTime = useTimer && Date.now();\n\n            var clearColor = layer.zlevel === this._zlevelList[0]\n                ? this._backgroundColor : null;\n            // All elements in this layer are cleared.\n            if (layer.__startIndex === layer.__endIndex) {\n                layer.clear(false, clearColor);\n            }\n            else if (start === layer.__startIndex) {\n                var firstEl = list[start];\n                if (!firstEl.incremental || !firstEl.notClear || paintAll) {\n                    layer.clear(false, clearColor);\n                }\n            }\n            if (start === -1) {\n                console.error('For some unknown reason. drawIndex is -1');\n                start = layer.__startIndex;\n            }\n            for (var i = start; i < layer.__endIndex; i++) {\n                var el = list[i];\n                this._doPaintEl(el, layer, paintAll, scope);\n                el.__dirty = el.__dirtyText = false;\n\n                if (useTimer) {\n                    // Date.now can be executed in 13,025,305 ops/second.\n                    var dTime = Date.now() - startTime;\n                    // Give 15 millisecond to draw.\n                    // The rest elements will be drawn in the next frame.\n                    if (dTime > 15) {\n                        break;\n                    }\n                }\n            }\n\n            layer.__drawIndex = i;\n\n            if (layer.__drawIndex < layer.__endIndex) {\n                finished = false;\n            }\n\n            if (scope.prevElClipPaths) {\n                // Needs restore the state. If last drawn element is in the clipping area.\n                ctx.restore();\n            }\n\n            ctx.restore();\n        }\n\n        if (env.wxa) {\n            // Flush for weixin application\n            util.each(this._layers, function (layer) {\n                if (layer && layer.ctx && layer.ctx.draw) {\n                    layer.ctx.draw();\n                }\n            });\n        }\n\n        return finished;\n    },\n\n    _doPaintEl: function (el, currentLayer, forcePaint, scope) {\n        var ctx = currentLayer.ctx;\n        var m = el.transform;\n        if (\n            (currentLayer.__dirty || forcePaint)\n            // Ignore invisible element\n            && !el.invisible\n            // Ignore transparent element\n            && el.style.opacity !== 0\n            // Ignore scale 0 element, in some environment like node-canvas\n            // Draw a scale 0 element can cause all following draw wrong\n            // And setTransform with scale 0 will cause set back transform failed.\n            && !(m && !m[0] && !m[3])\n            // Ignore culled element\n            && !(el.culling && isDisplayableCulled(el, this._width, this._height))\n        ) {\n\n            var clipPaths = el.__clipPaths;\n            var prevElClipPaths = scope.prevElClipPaths;\n\n            // Optimize when clipping on group with several elements\n            if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n                // If has previous clipping state, restore from it\n                if (prevElClipPaths) {\n                    ctx.restore();\n                    scope.prevElClipPaths = null;\n                    // Reset prevEl since context has been restored\n                    scope.prevEl = null;\n                }\n                // New clipping state\n                if (clipPaths) {\n                    ctx.save();\n                    doClip(clipPaths, ctx);\n                    scope.prevElClipPaths = clipPaths;\n                }\n            }\n            el.beforeBrush && el.beforeBrush(ctx);\n\n            el.brush(ctx, scope.prevEl || null);\n            scope.prevEl = el;\n\n            el.afterBrush && el.afterBrush(ctx);\n        }\n    },\n\n    /**\n     * 获取 zlevel 所在层，如果不存在则会创建一个新的层\n     * @param {number} zlevel\n     * @param {boolean} virtual Virtual layer will not be inserted into dom.\n     * @return {module:zrender/Layer}\n     */\n    getLayer: function (zlevel, virtual) {\n        if (this._singleCanvas && !this._needsManuallyCompositing) {\n            zlevel = CANVAS_ZLEVEL;\n        }\n        var layer = this._layers[zlevel];\n        if (!layer) {\n            // Create a new layer\n            layer = new Layer('zr_' + zlevel, this, this.dpr);\n            layer.zlevel = zlevel;\n            layer.__builtin__ = true;\n\n            if (this._layerConfig[zlevel]) {\n                util.merge(layer, this._layerConfig[zlevel], true);\n            }\n\n            if (virtual) {\n                layer.virtual = virtual;\n            }\n\n            this.insertLayer(zlevel, layer);\n\n            // Context is created after dom inserted to document\n            // Or excanvas will get 0px clientWidth and clientHeight\n            layer.initContext();\n        }\n\n        return layer;\n    },\n\n    insertLayer: function (zlevel, layer) {\n\n        var layersMap = this._layers;\n        var zlevelList = this._zlevelList;\n        var len = zlevelList.length;\n        var prevLayer = null;\n        var i = -1;\n        var domRoot = this._domRoot;\n\n        if (layersMap[zlevel]) {\n            logError('ZLevel ' + zlevel + ' has been used already');\n            return;\n        }\n        // Check if is a valid layer\n        if (!isLayerValid(layer)) {\n            logError('Layer of zlevel ' + zlevel + ' is not valid');\n            return;\n        }\n\n        if (len > 0 && zlevel > zlevelList[0]) {\n            for (i = 0; i < len - 1; i++) {\n                if (\n                    zlevelList[i] < zlevel\n                    && zlevelList[i + 1] > zlevel\n                ) {\n                    break;\n                }\n            }\n            prevLayer = layersMap[zlevelList[i]];\n        }\n        zlevelList.splice(i + 1, 0, zlevel);\n\n        layersMap[zlevel] = layer;\n\n        // Vitual layer will not directly show on the screen.\n        // (It can be a WebGL layer and assigned to a ZImage element)\n        // But it still under management of zrender.\n        if (!layer.virtual) {\n            if (prevLayer) {\n                var prevDom = prevLayer.dom;\n                if (prevDom.nextSibling) {\n                    domRoot.insertBefore(\n                        layer.dom,\n                        prevDom.nextSibling\n                    );\n                }\n                else {\n                    domRoot.appendChild(layer.dom);\n                }\n            }\n            else {\n                if (domRoot.firstChild) {\n                    domRoot.insertBefore(layer.dom, domRoot.firstChild);\n                }\n                else {\n                    domRoot.appendChild(layer.dom);\n                }\n            }\n        }\n    },\n\n    // Iterate each layer\n    eachLayer: function (cb, context) {\n        var zlevelList = this._zlevelList;\n        var z;\n        var i;\n        for (i = 0; i < zlevelList.length; i++) {\n            z = zlevelList[i];\n            cb.call(context, this._layers[z], z);\n        }\n    },\n\n    // Iterate each buildin layer\n    eachBuiltinLayer: function (cb, context) {\n        var zlevelList = this._zlevelList;\n        var layer;\n        var z;\n        var i;\n        for (i = 0; i < zlevelList.length; i++) {\n            z = zlevelList[i];\n            layer = this._layers[z];\n            if (layer.__builtin__) {\n                cb.call(context, layer, z);\n            }\n        }\n    },\n\n    // Iterate each other layer except buildin layer\n    eachOtherLayer: function (cb, context) {\n        var zlevelList = this._zlevelList;\n        var layer;\n        var z;\n        var i;\n        for (i = 0; i < zlevelList.length; i++) {\n            z = zlevelList[i];\n            layer = this._layers[z];\n            if (!layer.__builtin__) {\n                cb.call(context, layer, z);\n            }\n        }\n    },\n\n    /**\n     * 获取所有已创建的层\n     * @param {Array.<module:zrender/Layer>} [prevLayer]\n     */\n    getLayers: function () {\n        return this._layers;\n    },\n\n    _updateLayerStatus: function (list) {\n\n        this.eachBuiltinLayer(function (layer, z) {\n            layer.__dirty = layer.__used = false;\n        });\n\n        function updatePrevLayer(idx) {\n            if (prevLayer) {\n                if (prevLayer.__endIndex !== idx) {\n                    prevLayer.__dirty = true;\n                }\n                prevLayer.__endIndex = idx;\n            }\n        }\n\n        if (this._singleCanvas) {\n            for (var i = 1; i < list.length; i++) {\n                var el = list[i];\n                if (el.zlevel !== list[i - 1].zlevel || el.incremental) {\n                    this._needsManuallyCompositing = true;\n                    break;\n                }\n            }\n        }\n\n        var prevLayer = null;\n        var incrementalLayerCount = 0;\n        for (var i = 0; i < list.length; i++) {\n            var el = list[i];\n            var zlevel = el.zlevel;\n            var layer;\n            // PENDING If change one incremental element style ?\n            // TODO Where there are non-incremental elements between incremental elements.\n            if (el.incremental) {\n                layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n                layer.incremental = true;\n                incrementalLayerCount = 1;\n            }\n            else {\n                layer = this.getLayer(\n                    zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0),\n                    this._needsManuallyCompositing\n                );\n            }\n\n            if (!layer.__builtin__) {\n                logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n            }\n\n            if (layer !== prevLayer) {\n                layer.__used = true;\n                if (layer.__startIndex !== i) {\n                    layer.__dirty = true;\n                }\n                layer.__startIndex = i;\n                if (!layer.incremental) {\n                    layer.__drawIndex = i;\n                }\n                else {\n                    // Mark layer draw index needs to update.\n                    layer.__drawIndex = -1;\n                }\n                updatePrevLayer(i);\n                prevLayer = layer;\n            }\n            if (el.__dirty) {\n                layer.__dirty = true;\n                if (layer.incremental && layer.__drawIndex < 0) {\n                    // Start draw from the first dirty element.\n                    layer.__drawIndex = i;\n                }\n            }\n        }\n\n        updatePrevLayer(i);\n\n        this.eachBuiltinLayer(function (layer, z) {\n            // Used in last frame but not in this frame. Needs clear\n            if (!layer.__used && layer.getElementCount() > 0) {\n                layer.__dirty = true;\n                layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n            }\n            // For incremental layer. In case start index changed and no elements are dirty.\n            if (layer.__dirty && layer.__drawIndex < 0) {\n                layer.__drawIndex = layer.__startIndex;\n            }\n        });\n    },\n\n    /**\n     * 清除hover层外所有内容\n     */\n    clear: function () {\n        this.eachBuiltinLayer(this._clearLayer);\n        return this;\n    },\n\n    _clearLayer: function (layer) {\n        layer.clear();\n    },\n\n    setBackgroundColor: function (backgroundColor) {\n        this._backgroundColor = backgroundColor;\n    },\n\n    /**\n     * 修改指定zlevel的绘制参数\n     *\n     * @param {string} zlevel\n     * @param {Object} config 配置对象\n     * @param {string} [config.clearColor=0] 每次清空画布的颜色\n     * @param {string} [config.motionBlur=false] 是否开启动态模糊\n     * @param {number} [config.lastFrameAlpha=0.7]\n     *                 在开启动态模糊的时候使用，与上一帧混合的alpha值，值越大尾迹越明显\n     */\n    configLayer: function (zlevel, config) {\n        if (config) {\n            var layerConfig = this._layerConfig;\n            if (!layerConfig[zlevel]) {\n                layerConfig[zlevel] = config;\n            }\n            else {\n                util.merge(layerConfig[zlevel], config, true);\n            }\n\n            for (var i = 0; i < this._zlevelList.length; i++) {\n                var _zlevel = this._zlevelList[i];\n                if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n                    var layer = this._layers[_zlevel];\n                    util.merge(layer, layerConfig[zlevel], true);\n                }\n            }\n        }\n    },\n\n    /**\n     * 删除指定层\n     * @param {number} zlevel 层所在的zlevel\n     */\n    delLayer: function (zlevel) {\n        var layers = this._layers;\n        var zlevelList = this._zlevelList;\n        var layer = layers[zlevel];\n        if (!layer) {\n            return;\n        }\n        layer.dom.parentNode.removeChild(layer.dom);\n        delete layers[zlevel];\n\n        zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n    },\n\n    /**\n     * 区域大小变化后重绘\n     */\n    resize: function (width, height) {\n        if (!this._domRoot.style) { // Maybe in node or worker\n            if (width == null || height == null) {\n                return;\n            }\n            this._width = width;\n            this._height = height;\n\n            this.getLayer(CANVAS_ZLEVEL).resize(width, height);\n        }\n        else {\n            var domRoot = this._domRoot;\n            // FIXME Why ?\n            domRoot.style.display = 'none';\n\n            // Save input w/h\n            var opts = this._opts;\n            width != null && (opts.width = width);\n            height != null && (opts.height = height);\n\n            width = this._getSize(0);\n            height = this._getSize(1);\n\n            domRoot.style.display = '';\n\n            // 优化没有实际改变的resize\n            if (this._width !== width || height !== this._height) {\n                domRoot.style.width = width + 'px';\n                domRoot.style.height = height + 'px';\n\n                for (var id in this._layers) {\n                    if (this._layers.hasOwnProperty(id)) {\n                        this._layers[id].resize(width, height);\n                    }\n                }\n                util.each(this._progressiveLayers, function (layer) {\n                    layer.resize(width, height);\n                });\n\n                this.refresh(true);\n            }\n\n            this._width = width;\n            this._height = height;\n\n        }\n        return this;\n    },\n\n    /**\n     * 清除单独的一个层\n     * @param {number} zlevel\n     */\n    clearLayer: function (zlevel) {\n        var layer = this._layers[zlevel];\n        if (layer) {\n            layer.clear();\n        }\n    },\n\n    /**\n     * 释放\n     */\n    dispose: function () {\n        this.root.innerHTML = '';\n\n        this.root =\n        this.storage =\n\n        this._domRoot =\n        this._layers = null;\n    },\n\n    /**\n     * Get canvas which has all thing rendered\n     * @param {Object} opts\n     * @param {string} [opts.backgroundColor]\n     * @param {number} [opts.pixelRatio]\n     */\n    getRenderedCanvas: function (opts) {\n        opts = opts || {};\n        if (this._singleCanvas && !this._compositeManually) {\n            return this._layers[CANVAS_ZLEVEL].dom;\n        }\n\n        var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n        imageLayer.initContext();\n        imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n\n        if (opts.pixelRatio <= this.dpr) {\n            this.refresh();\n\n            var width = imageLayer.dom.width;\n            var height = imageLayer.dom.height;\n            var ctx = imageLayer.ctx;\n            this.eachLayer(function (layer) {\n                if (layer.__builtin__) {\n                    ctx.drawImage(layer.dom, 0, 0, width, height);\n                }\n                else if (layer.renderToCanvas) {\n                    imageLayer.ctx.save();\n                    layer.renderToCanvas(imageLayer.ctx);\n                    imageLayer.ctx.restore();\n                }\n            });\n        }\n        else {\n            // PENDING, echarts-gl and incremental rendering.\n            var scope = {};\n            var displayList = this.storage.getDisplayList(true);\n            for (var i = 0; i < displayList.length; i++) {\n                var el = displayList[i];\n                this._doPaintEl(el, imageLayer, true, scope);\n            }\n        }\n\n        return imageLayer.dom;\n    },\n    /**\n     * 获取绘图区域宽度\n     */\n    getWidth: function () {\n        return this._width;\n    },\n\n    /**\n     * 获取绘图区域高度\n     */\n    getHeight: function () {\n        return this._height;\n    },\n\n    _getSize: function (whIdx) {\n        var opts = this._opts;\n        var wh = ['width', 'height'][whIdx];\n        var cwh = ['clientWidth', 'clientHeight'][whIdx];\n        var plt = ['paddingLeft', 'paddingTop'][whIdx];\n        var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n        if (opts[wh] != null && opts[wh] !== 'auto') {\n            return parseFloat(opts[wh]);\n        }\n\n        var root = this.root;\n        // IE8 does not support getComputedStyle, but it use VML.\n        var stl = document.defaultView.getComputedStyle(root);\n\n        return (\n            (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n            - (parseInt10(stl[plt]) || 0)\n            - (parseInt10(stl[prb]) || 0)\n        ) | 0;\n    },\n\n    pathToImage: function (path, dpr) {\n        dpr = dpr || this.dpr;\n\n        var canvas = document.createElement('canvas');\n        var ctx = canvas.getContext('2d');\n        var rect = path.getBoundingRect();\n        var style = path.style;\n        var shadowBlurSize = style.shadowBlur * dpr;\n        var shadowOffsetX = style.shadowOffsetX * dpr;\n        var shadowOffsetY = style.shadowOffsetY * dpr;\n        var lineWidth = style.hasStroke() ? style.lineWidth : 0;\n\n        var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n        var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n        var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n        var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n        var width = rect.width + leftMargin + rightMargin;\n        var height = rect.height + topMargin + bottomMargin;\n\n        canvas.width = width * dpr;\n        canvas.height = height * dpr;\n\n        ctx.scale(dpr, dpr);\n        ctx.clearRect(0, 0, width, height);\n        ctx.dpr = dpr;\n\n        var pathTransform = {\n            position: path.position,\n            rotation: path.rotation,\n            scale: path.scale\n        };\n        path.position = [leftMargin - rect.x, topMargin - rect.y];\n        path.rotation = 0;\n        path.scale = [1, 1];\n        path.updateTransform();\n        if (path) {\n            path.brush(ctx);\n        }\n\n        var ImageShape = Image;\n        var imgShape = new ImageShape({\n            style: {\n                x: 0,\n                y: 0,\n                image: canvas\n            }\n        });\n\n        if (pathTransform.position != null) {\n            imgShape.position = path.position = pathTransform.position;\n        }\n\n        if (pathTransform.rotation != null) {\n            imgShape.rotation = path.rotation = pathTransform.rotation;\n        }\n\n        if (pathTransform.scale != null) {\n            imgShape.scale = path.scale = pathTransform.scale;\n        }\n\n        return imgShape;\n    }\n};\n\nexport default Painter;","/**\n * 动画主类, 调度和管理所有动画控制器\n *\n * @module zrender/animation/Animation\n * @author pissang(https://github.com/pissang)\n */\n// TODO Additive animation\n// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/\n// https://developer.apple.com/videos/wwdc2014/#236\n\nimport * as util from '../core/util';\nimport {Dispatcher} from '../core/event';\nimport requestAnimationFrame from './requestAnimationFrame';\nimport Animator from './Animator';\n\n/**\n * @typedef {Object} IZRenderStage\n * @property {Function} update\n */\n\n/**\n * @alias module:zrender/animation/Animation\n * @constructor\n * @param {Object} [options]\n * @param {Function} [options.onframe]\n * @param {IZRenderStage} [options.stage]\n * @example\n *     var animation = new Animation();\n *     var obj = {\n *         x: 100,\n *         y: 100\n *     };\n *     animation.animate(node.position)\n *         .when(1000, {\n *             x: 500,\n *             y: 500\n *         })\n *         .when(2000, {\n *             x: 100,\n *             y: 100\n *         })\n *         .start('spline');\n */\nvar Animation = function (options) {\n\n    options = options || {};\n\n    this.stage = options.stage || {};\n\n    this.onframe = options.onframe || function () {};\n\n    // private properties\n    this._clips = [];\n\n    this._running = false;\n\n    this._time;\n\n    this._pausedTime;\n\n    this._pauseStart;\n\n    this._paused = false;\n\n    Dispatcher.call(this);\n};\n\nAnimation.prototype = {\n\n    constructor: Animation,\n    /**\n     * 添加 clip\n     * @param {module:zrender/animation/Clip} clip\n     */\n    addClip: function (clip) {\n        this._clips.push(clip);\n    },\n    /**\n     * 添加 animator\n     * @param {module:zrender/animation/Animator} animator\n     */\n    addAnimator: function (animator) {\n        animator.animation = this;\n        var clips = animator.getClips();\n        for (var i = 0; i < clips.length; i++) {\n            this.addClip(clips[i]);\n        }\n    },\n    /**\n     * 删除动画片段\n     * @param {module:zrender/animation/Clip} clip\n     */\n    removeClip: function (clip) {\n        var idx = util.indexOf(this._clips, clip);\n        if (idx >= 0) {\n            this._clips.splice(idx, 1);\n        }\n    },\n\n    /**\n     * 删除动画片段\n     * @param {module:zrender/animation/Animator} animator\n     */\n    removeAnimator: function (animator) {\n        var clips = animator.getClips();\n        for (var i = 0; i < clips.length; i++) {\n            this.removeClip(clips[i]);\n        }\n        animator.animation = null;\n    },\n\n    _update: function () {\n        var time = new Date().getTime() - this._pausedTime;\n        var delta = time - this._time;\n        var clips = this._clips;\n        var len = clips.length;\n\n        var deferredEvents = [];\n        var deferredClips = [];\n        for (var i = 0; i < len; i++) {\n            var clip = clips[i];\n            var e = clip.step(time, delta);\n            // Throw out the events need to be called after\n            // stage.update, like destroy\n            if (e) {\n                deferredEvents.push(e);\n                deferredClips.push(clip);\n            }\n        }\n\n        // Remove the finished clip\n        for (var i = 0; i < len;) {\n            if (clips[i]._needsRemove) {\n                clips[i] = clips[len - 1];\n                clips.pop();\n                len--;\n            }\n            else {\n                i++;\n            }\n        }\n\n        len = deferredEvents.length;\n        for (var i = 0; i < len; i++) {\n            deferredClips[i].fire(deferredEvents[i]);\n        }\n\n        this._time = time;\n\n        this.onframe(delta);\n\n        // 'frame' should be triggered before stage, because upper application\n        // depends on the sequence (e.g., echarts-stream and finish\n        // event judge)\n        this.trigger('frame', delta);\n\n        if (this.stage.update) {\n            this.stage.update();\n        }\n    },\n\n    _startLoop: function () {\n        var self = this;\n\n        this._running = true;\n\n        function step() {\n            if (self._running) {\n\n                requestAnimationFrame(step);\n\n                !self._paused && self._update();\n            }\n        }\n\n        requestAnimationFrame(step);\n    },\n\n    /**\n     * Start animation.\n     */\n    start: function () {\n\n        this._time = new Date().getTime();\n        this._pausedTime = 0;\n\n        this._startLoop();\n    },\n\n    /**\n     * Stop animation.\n     */\n    stop: function () {\n        this._running = false;\n    },\n\n    /**\n     * Pause animation.\n     */\n    pause: function () {\n        if (!this._paused) {\n            this._pauseStart = new Date().getTime();\n            this._paused = true;\n        }\n    },\n\n    /**\n     * Resume animation.\n     */\n    resume: function () {\n        if (this._paused) {\n            this._pausedTime += (new Date().getTime()) - this._pauseStart;\n            this._paused = false;\n        }\n    },\n\n    /**\n     * Clear animation.\n     */\n    clear: function () {\n        this._clips = [];\n    },\n\n    /**\n     * Whether animation finished.\n     */\n    isFinished: function () {\n        return !this._clips.length;\n    },\n\n    /**\n     * Creat animator for a target, whose props can be animated.\n     *\n     * @param  {Object} target\n     * @param  {Object} options\n     * @param  {boolean} [options.loop=false] Whether loop animation.\n     * @param  {Function} [options.getter=null] Get value from target.\n     * @param  {Function} [options.setter=null] Set value to target.\n     * @return {module:zrender/animation/Animation~Animator}\n     */\n    // TODO Gap\n    animate: function (target, options) {\n        options = options || {};\n\n        var animator = new Animator(\n            target,\n            options.loop,\n            options.getter,\n            options.setter\n        );\n\n        this.addAnimator(animator);\n\n        return animator;\n    }\n};\n\nutil.mixin(Animation, Dispatcher);\n\nexport default Animation;","\nimport {\n    addEventListener,\n    removeEventListener,\n    normalizeEvent\n} from '../core/event';\nimport * as zrUtil from '../core/util';\nimport Eventful from '../mixin/Eventful';\nimport env from '../core/env';\n\nvar TOUCH_CLICK_DELAY = 300;\n\nvar mouseHandlerNames = [\n    'click', 'dblclick', 'mousewheel', 'mouseout',\n    'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\n\nvar touchHandlerNames = [\n    'touchstart', 'touchend', 'touchmove'\n];\n\nvar pointerEventNames = {\n    pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1\n};\n\nvar pointerHandlerNames = zrUtil.map(mouseHandlerNames, function (name) {\n    var nm = name.replace('mouse', 'pointer');\n    return pointerEventNames[nm] ? nm : name;\n});\n\nfunction eventNameFix(name) {\n    return (name === 'mousewheel' && env.browser.firefox) ? 'DOMMouseScroll' : name;\n}\n\n// function onMSGestureChange(proxy, event) {\n//     if (event.translationX || event.translationY) {\n//         // mousemove is carried by MSGesture to reduce the sensitivity.\n//         proxy.handler.dispatchToElement(event.target, 'mousemove', event);\n//     }\n//     if (event.scale !== 1) {\n//         event.pinchX = event.offsetX;\n//         event.pinchY = event.offsetY;\n//         event.pinchScale = event.scale;\n//         proxy.handler.dispatchToElement(event.target, 'pinch', event);\n//     }\n// }\n\n/**\n * Prevent mouse event from being dispatched after Touch Events action\n * @see <https://github.com/deltakosh/handjs/blob/master/src/hand.base.js>\n * 1. Mobile browsers dispatch mouse events 300ms after touchend.\n * 2. Chrome for Android dispatch mousedown for long-touch about 650ms\n * Result: Blocking Mouse Events for 700ms.\n */\nfunction setTouchTimer(instance) {\n    instance._touching = true;\n    clearTimeout(instance._touchTimer);\n    instance._touchTimer = setTimeout(function () {\n        instance._touching = false;\n    }, 700);\n}\n\n\nvar domHandlers = {\n    /**\n     * Mouse move handler\n     * @inner\n     * @param {Event} event\n     */\n    mousemove: function (event) {\n        event = normalizeEvent(this.dom, event);\n\n        this.trigger('mousemove', event);\n    },\n\n    /**\n     * Mouse out handler\n     * @inner\n     * @param {Event} event\n     */\n    mouseout: function (event) {\n        event = normalizeEvent(this.dom, event);\n\n        var element = event.toElement || event.relatedTarget;\n        if (element !== this.dom) {\n            while (element && element.nodeType !== 9) {\n                // 忽略包含在root中的dom引起的mouseOut\n                if (element === this.dom) {\n                    return;\n                }\n\n                element = element.parentNode;\n            }\n        }\n\n        this.trigger('mouseout', event);\n    },\n\n    /**\n     * Touch开始响应函数\n     * @inner\n     * @param {Event} event\n     */\n    touchstart: function (event) {\n        // Default mouse behaviour should not be disabled here.\n        // For example, page may needs to be slided.\n        event = normalizeEvent(this.dom, event);\n\n        // Mark touch, which is useful in distinguish touch and\n        // mouse event in upper applicatoin.\n        event.zrByTouch = true;\n\n        this._lastTouchMoment = new Date();\n\n        this.handler.processGesture(event, 'start');\n\n        // In touch device, trigger `mousemove`(`mouseover`) should\n        // be triggered, and must before `mousedown` triggered.\n        domHandlers.mousemove.call(this, event);\n\n        domHandlers.mousedown.call(this, event);\n\n        setTouchTimer(this);\n    },\n\n    /**\n     * Touch移动响应函数\n     * @inner\n     * @param {Event} event\n     */\n    touchmove: function (event) {\n\n        event = normalizeEvent(this.dom, event);\n\n        // Mark touch, which is useful in distinguish touch and\n        // mouse event in upper applicatoin.\n        event.zrByTouch = true;\n\n        this.handler.processGesture(event, 'change');\n\n        // Mouse move should always be triggered no matter whether\n        // there is gestrue event, because mouse move and pinch may\n        // be used at the same time.\n        domHandlers.mousemove.call(this, event);\n\n        setTouchTimer(this);\n    },\n\n    /**\n     * Touch结束响应函数\n     * @inner\n     * @param {Event} event\n     */\n    touchend: function (event) {\n\n        event = normalizeEvent(this.dom, event);\n\n        // Mark touch, which is useful in distinguish touch and\n        // mouse event in upper applicatoin.\n        event.zrByTouch = true;\n\n        this.handler.processGesture(event, 'end');\n\n        domHandlers.mouseup.call(this, event);\n\n        // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is\n        // triggered in `touchstart`. This seems to be illogical, but by this mechanism,\n        // we can conveniently implement \"hover style\" in both PC and touch device just\n        // by listening to `mouseover` to add \"hover style\" and listening to `mouseout`\n        // to remove \"hover style\" on an element, without any additional code for\n        // compatibility. (`mouseout` will not be triggered in `touchend`, so \"hover\n        // style\" will remain for user view)\n\n        // click event should always be triggered no matter whether\n        // there is gestrue event. System click can not be prevented.\n        if (+new Date() - this._lastTouchMoment < TOUCH_CLICK_DELAY) {\n            domHandlers.click.call(this, event);\n        }\n\n        setTouchTimer(this);\n    },\n\n    pointerdown: function (event) {\n        domHandlers.mousedown.call(this, event);\n\n        // if (useMSGuesture(this, event)) {\n        //     this._msGesture.addPointer(event.pointerId);\n        // }\n    },\n\n    pointermove: function (event) {\n        // FIXME\n        // pointermove is so sensitive that it always triggered when\n        // tap(click) on touch screen, which affect some judgement in\n        // upper application. So, we dont support mousemove on MS touch\n        // device yet.\n        if (!isPointerFromTouch(event)) {\n            domHandlers.mousemove.call(this, event);\n        }\n    },\n\n    pointerup: function (event) {\n        domHandlers.mouseup.call(this, event);\n    },\n\n    pointerout: function (event) {\n        // pointerout will be triggered when tap on touch screen\n        // (IE11+/Edge on MS Surface) after click event triggered,\n        // which is inconsistent with the mousout behavior we defined\n        // in touchend. So we unify them.\n        // (check domHandlers.touchend for detailed explanation)\n        if (!isPointerFromTouch(event)) {\n            domHandlers.mouseout.call(this, event);\n        }\n    }\n};\n\nfunction isPointerFromTouch(event) {\n    var pointerType = event.pointerType;\n    return pointerType === 'pen' || pointerType === 'touch';\n}\n\n// function useMSGuesture(handlerProxy, event) {\n//     return isPointerFromTouch(event) && !!handlerProxy._msGesture;\n// }\n\n// Common handlers\nzrUtil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n    domHandlers[name] = function (event) {\n        event = normalizeEvent(this.dom, event);\n        this.trigger(name, event);\n    };\n});\n\n/**\n * 为控制类实例初始化dom 事件处理函数\n *\n * @inner\n * @param {module:zrender/Handler} instance 控制类实例\n */\nfunction initDomHandler(instance) {\n    zrUtil.each(touchHandlerNames, function (name) {\n        instance._handlers[name] = zrUtil.bind(domHandlers[name], instance);\n    });\n\n    zrUtil.each(pointerHandlerNames, function (name) {\n        instance._handlers[name] = zrUtil.bind(domHandlers[name], instance);\n    });\n\n    zrUtil.each(mouseHandlerNames, function (name) {\n        instance._handlers[name] = makeMouseHandler(domHandlers[name], instance);\n    });\n\n    function makeMouseHandler(fn, instance) {\n        return function () {\n            if (instance._touching) {\n                return;\n            }\n            return fn.apply(instance, arguments);\n        };\n    }\n}\n\n\nfunction HandlerDomProxy(dom) {\n    Eventful.call(this);\n\n    this.dom = dom;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._touching = false;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this._touchTimer;\n\n    this._handlers = {};\n\n    initDomHandler(this);\n\n    if (env.pointerEventsSupported) { // Only IE11+/Edge\n        // 1. On devices that both enable touch and mouse (e.g., MS Surface and lenovo X240),\n        // IE11+/Edge do not trigger touch event, but trigger pointer event and mouse event\n        // at the same time.\n        // 2. On MS Surface, it probablely only trigger mousedown but no mouseup when tap on\n        // screen, which do not occurs in pointer event.\n        // So we use pointer event to both detect touch gesture and mouse behavior.\n        mountHandlers(pointerHandlerNames, this);\n\n        // FIXME\n        // Note: MS Gesture require CSS touch-action set. But touch-action is not reliable,\n        // which does not prevent defuault behavior occasionally (which may cause view port\n        // zoomed in but use can not zoom it back). And event.preventDefault() does not work.\n        // So we have to not to use MSGesture and not to support touchmove and pinch on MS\n        // touch screen. And we only support click behavior on MS touch screen now.\n\n        // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+.\n        // We dont support touch on IE on win7.\n        // See <https://msdn.microsoft.com/en-us/library/dn433243(v=vs.85).aspx>\n        // if (typeof MSGesture === 'function') {\n        //     (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line\n        //     dom.addEventListener('MSGestureChange', onMSGestureChange);\n        // }\n    }\n    else {\n        if (env.touchEventsSupported) {\n            mountHandlers(touchHandlerNames, this);\n            // Handler of 'mouseout' event is needed in touch mode, which will be mounted below.\n            // addEventListener(root, 'mouseout', this._mouseoutHandler);\n        }\n\n        // 1. Considering some devices that both enable touch and mouse event (like on MS Surface\n        // and lenovo X240, @see #2350), we make mouse event be always listened, otherwise\n        // mouse event can not be handle in those devices.\n        // 2. On MS Surface, Chrome will trigger both touch event and mouse event. How to prevent\n        // mouseevent after touch event triggered, see `setTouchTimer`.\n        mountHandlers(mouseHandlerNames, this);\n    }\n\n    function mountHandlers(handlerNames, instance) {\n        zrUtil.each(handlerNames, function (name) {\n            addEventListener(dom, eventNameFix(name), instance._handlers[name]);\n        }, instance);\n    }\n}\n\nvar handlerDomProxyProto = HandlerDomProxy.prototype;\nhandlerDomProxyProto.dispose = function () {\n    var handlerNames = mouseHandlerNames.concat(touchHandlerNames);\n\n    for (var i = 0; i < handlerNames.length; i++) {\n        var name = handlerNames[i];\n        removeEventListener(this.dom, eventNameFix(name), this._handlers[name]);\n    }\n};\n\nhandlerDomProxyProto.setCursor = function (cursorStyle) {\n    this.dom.style && (this.dom.style.cursor = cursorStyle || 'default');\n};\n\nzrUtil.mixin(HandlerDomProxy, Eventful);\n\nexport default HandlerDomProxy;","/*!\n* ZRender, a high performance 2d drawing library.\n*\n* Copyright (c) 2013, Baidu Inc.\n* All rights reserved.\n*\n* LICENSE\n* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt\n*/\n\nimport guid from './core/guid';\nimport env from './core/env';\nimport * as zrUtil from './core/util';\nimport Handler from './Handler';\nimport Storage from './Storage';\nimport Painter from './Painter';\nimport Animation from './animation/Animation';\nimport HandlerProxy from './dom/HandlerProxy';\n\nvar useVML = !env.canvasSupported;\n\nvar painterCtors = {\n    canvas: Painter\n};\n\nvar instances = {};    // ZRender实例map索引\n\n/**\n * @type {string}\n */\nexport var version = '4.1.2';\n\n/**\n * Initializing a zrender instance\n * @param {HTMLElement} dom\n * @param {Object} [opts]\n * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'\n * @param {number} [opts.devicePixelRatio]\n * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)\n * @return {module:zrender/ZRender}\n */\nexport function init(dom, opts) {\n    var zr = new ZRender(guid(), dom, opts);\n    instances[zr.id] = zr;\n    return zr;\n}\n\n/**\n * Dispose zrender instance\n * @param {module:zrender/ZRender} zr\n */\nexport function dispose(zr) {\n    if (zr) {\n        zr.dispose();\n    }\n    else {\n        for (var key in instances) {\n            if (instances.hasOwnProperty(key)) {\n                instances[key].dispose();\n            }\n        }\n        instances = {};\n    }\n\n    return this;\n}\n\n/**\n * Get zrender instance by id\n * @param {string} id zrender instance id\n * @return {module:zrender/ZRender}\n */\nexport function getInstance(id) {\n    return instances[id];\n}\n\nexport function registerPainter(name, Ctor) {\n    painterCtors[name] = Ctor;\n}\n\nfunction delInstance(id) {\n    delete instances[id];\n}\n\n/**\n * @module zrender/ZRender\n */\n/**\n * @constructor\n * @alias module:zrender/ZRender\n * @param {string} id\n * @param {HTMLElement} dom\n * @param {Object} opts\n * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'\n * @param {number} [opts.devicePixelRatio]\n * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)\n */\nvar ZRender = function (id, dom, opts) {\n\n    opts = opts || {};\n\n    /**\n     * @type {HTMLDomElement}\n     */\n    this.dom = dom;\n\n    /**\n     * @type {string}\n     */\n    this.id = id;\n\n    var self = this;\n    var storage = new Storage();\n\n    var rendererType = opts.renderer;\n    // TODO WebGL\n    if (useVML) {\n        if (!painterCtors.vml) {\n            throw new Error('You need to require \\'zrender/vml/vml\\' to support IE8');\n        }\n        rendererType = 'vml';\n    }\n    else if (!rendererType || !painterCtors[rendererType]) {\n        rendererType = 'canvas';\n    }\n    var painter = new painterCtors[rendererType](dom, storage, opts, id);\n\n    this.storage = storage;\n    this.painter = painter;\n\n    var handerProxy = (!env.node && !env.worker) ? new HandlerProxy(painter.getViewportRoot()) : null;\n    this.handler = new Handler(storage, painter, handerProxy, painter.root);\n\n    /**\n     * @type {module:zrender/animation/Animation}\n     */\n    this.animation = new Animation({\n        stage: {\n            update: zrUtil.bind(this.flush, this)\n        }\n    });\n    this.animation.start();\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._needsRefresh;\n\n    // 修改 storage.delFromStorage, 每次删除元素之前删除动画\n    // FIXME 有点ugly\n    var oldDelFromStorage = storage.delFromStorage;\n    var oldAddToStorage = storage.addToStorage;\n\n    storage.delFromStorage = function (el) {\n        oldDelFromStorage.call(storage, el);\n\n        el && el.removeSelfFromZr(self);\n    };\n\n    storage.addToStorage = function (el) {\n        oldAddToStorage.call(storage, el);\n\n        el.addSelfToZr(self);\n    };\n};\n\nZRender.prototype = {\n\n    constructor: ZRender,\n    /**\n     * 获取实例唯一标识\n     * @return {string}\n     */\n    getId: function () {\n        return this.id;\n    },\n\n    /**\n     * 添加元素\n     * @param  {module:zrender/Element} el\n     */\n    add: function (el) {\n        this.storage.addRoot(el);\n        this._needsRefresh = true;\n    },\n\n    /**\n     * 删除元素\n     * @param  {module:zrender/Element} el\n     */\n    remove: function (el) {\n        this.storage.delRoot(el);\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Change configuration of layer\n     * @param {string} zLevel\n     * @param {Object} config\n     * @param {string} [config.clearColor=0] Clear color\n     * @param {string} [config.motionBlur=false] If enable motion blur\n     * @param {number} [config.lastFrameAlpha=0.7] Motion blur factor. Larger value cause longer trailer\n    */\n    configLayer: function (zLevel, config) {\n        if (this.painter.configLayer) {\n            this.painter.configLayer(zLevel, config);\n        }\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Set background color\n     * @param {string} backgroundColor\n     */\n    setBackgroundColor: function (backgroundColor) {\n        if (this.painter.setBackgroundColor) {\n            this.painter.setBackgroundColor(backgroundColor);\n        }\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Repaint the canvas immediately\n     */\n    refreshImmediately: function () {\n        // var start = new Date();\n\n        // Clear needsRefresh ahead to avoid something wrong happens in refresh\n        // Or it will cause zrender refreshes again and again.\n        this._needsRefresh = this._needsRefreshHover = false;\n        this.painter.refresh();\n        // Avoid trigger zr.refresh in Element#beforeUpdate hook\n        this._needsRefresh = this._needsRefreshHover = false;\n\n        // var end = new Date();\n        // var log = document.getElementById('log');\n        // if (log) {\n        //     log.innerHTML = log.innerHTML + '<br>' + (end - start);\n        // }\n    },\n\n    /**\n     * Mark and repaint the canvas in the next frame of browser\n     */\n    refresh: function () {\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Perform all refresh\n     */\n    flush: function () {\n        var triggerRendered;\n\n        if (this._needsRefresh) {\n            triggerRendered = true;\n            this.refreshImmediately();\n        }\n        if (this._needsRefreshHover) {\n            triggerRendered = true;\n            this.refreshHoverImmediately();\n        }\n\n        triggerRendered && this.trigger('rendered');\n    },\n\n    /**\n     * Add element to hover layer\n     * @param  {module:zrender/Element} el\n     * @param {Object} style\n     */\n    addHover: function (el, style) {\n        if (this.painter.addHover) {\n            var elMirror = this.painter.addHover(el, style);\n            this.refreshHover();\n            return elMirror;\n        }\n    },\n\n    /**\n     * Add element from hover layer\n     * @param  {module:zrender/Element} el\n     */\n    removeHover: function (el) {\n        if (this.painter.removeHover) {\n            this.painter.removeHover(el);\n            this.refreshHover();\n        }\n    },\n\n    /**\n     * Clear all hover elements in hover layer\n     * @param  {module:zrender/Element} el\n     */\n    clearHover: function () {\n        if (this.painter.clearHover) {\n            this.painter.clearHover();\n            this.refreshHover();\n        }\n    },\n\n    /**\n     * Refresh hover in next frame\n     */\n    refreshHover: function () {\n        this._needsRefreshHover = true;\n    },\n\n    /**\n     * Refresh hover immediately\n     */\n    refreshHoverImmediately: function () {\n        this._needsRefreshHover = false;\n        this.painter.refreshHover && this.painter.refreshHover();\n    },\n\n    /**\n     * Resize the canvas.\n     * Should be invoked when container size is changed\n     * @param {Object} [opts]\n     * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)\n     * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)\n     */\n    resize: function (opts) {\n        opts = opts || {};\n        this.painter.resize(opts.width, opts.height);\n        this.handler.resize();\n    },\n\n    /**\n     * Stop and clear all animation immediately\n     */\n    clearAnimation: function () {\n        this.animation.clear();\n    },\n\n    /**\n     * Get container width\n     */\n    getWidth: function () {\n        return this.painter.getWidth();\n    },\n\n    /**\n     * Get container height\n     */\n    getHeight: function () {\n        return this.painter.getHeight();\n    },\n\n    /**\n     * Export the canvas as Base64 URL\n     * @param {string} type\n     * @param {string} [backgroundColor='#fff']\n     * @return {string} Base64 URL\n     */\n    // toDataURL: function(type, backgroundColor) {\n    //     return this.painter.getRenderedCanvas({\n    //         backgroundColor: backgroundColor\n    //     }).toDataURL(type);\n    // },\n\n    /**\n     * Converting a path to image.\n     * It has much better performance of drawing image rather than drawing a vector path.\n     * @param {module:zrender/graphic/Path} e\n     * @param {number} width\n     * @param {number} height\n     */\n    pathToImage: function (e, dpr) {\n        return this.painter.pathToImage(e, dpr);\n    },\n\n    /**\n     * Set default cursor\n     * @param {string} [cursorStyle='default'] 例如 crosshair\n     */\n    setCursorStyle: function (cursorStyle) {\n        this.handler.setCursorStyle(cursorStyle);\n    },\n\n    /**\n     * Find hovered element\n     * @param {number} x\n     * @param {number} y\n     * @return {Object} {target, topTarget}\n     */\n    findHover: function (x, y) {\n        return this.handler.findHover(x, y);\n    },\n\n    /**\n     * Bind event\n     *\n     * @param {string} eventName Event name\n     * @param {Function} eventHandler Handler function\n     * @param {Object} [context] Context object\n     */\n    on: function (eventName, eventHandler, context) {\n        this.handler.on(eventName, eventHandler, context);\n    },\n\n    /**\n     * Unbind event\n     * @param {string} eventName Event name\n     * @param {Function} [eventHandler] Handler function\n     */\n    off: function (eventName, eventHandler) {\n        this.handler.off(eventName, eventHandler);\n    },\n\n    /**\n     * Trigger event manually\n     *\n     * @param {string} eventName Event name\n     * @param {event=} event Event object\n     */\n    trigger: function (eventName, event) {\n        this.handler.trigger(eventName, event);\n    },\n\n\n    /**\n     * Clear all objects and the canvas.\n     */\n    clear: function () {\n        this.storage.delRoot();\n        this.painter.clear();\n    },\n\n    /**\n     * Dispose self.\n     */\n    dispose: function () {\n        this.animation.stop();\n\n        this.clear();\n        this.storage.dispose();\n        this.painter.dispose();\n        this.handler.dispose();\n\n        this.animation =\n        this.storage =\n        this.painter =\n        this.handler = null;\n\n        delInstance(this.id);\n    }\n};\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport env from 'zrender/src/core/env';\n\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\nvar isArray = zrUtil.isArray;\n\n/**\n * Make the name displayable. But we should\n * make sure it is not duplicated with user\n * specified name, so use '\\0';\n */\nvar DUMMY_COMPONENT_NAME_PREFIX = 'series\\0';\n\n/**\n * If value is not array, then translate it to array.\n * @param  {*} value\n * @return {Array} [value] or value\n */\nexport function normalizeToArray(value) {\n    return value instanceof Array\n        ? value\n        : value == null\n        ? []\n        : [value];\n}\n\n/**\n * Sync default option between normal and emphasis like `position` and `show`\n * In case some one will write code like\n *     label: {\n *          show: false,\n *          position: 'outside',\n *          fontSize: 18\n *     },\n *     emphasis: {\n *          label: { show: true }\n *     }\n * @param {Object} opt\n * @param {string} key\n * @param {Array.<string>} subOpts\n */\nexport function defaultEmphasis(opt, key, subOpts) {\n    // Caution: performance sensitive.\n    if (opt) {\n        opt[key] = opt[key] || {};\n        opt.emphasis = opt.emphasis || {};\n        opt.emphasis[key] = opt.emphasis[key] || {};\n\n        // Default emphasis option from normal\n        for (var i = 0, len = subOpts.length; i < len; i++) {\n            var subOptName = subOpts[i];\n            if (!opt.emphasis[key].hasOwnProperty(subOptName)\n                && opt[key].hasOwnProperty(subOptName)\n            ) {\n                opt.emphasis[key][subOptName] = opt[key][subOptName];\n            }\n        }\n    }\n}\n\nexport var TEXT_STYLE_OPTIONS = [\n    'fontStyle', 'fontWeight', 'fontSize', 'fontFamily',\n    'rich', 'tag', 'color', 'textBorderColor', 'textBorderWidth',\n    'width', 'height', 'lineHeight', 'align', 'verticalAlign', 'baseline',\n    'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY',\n    'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY',\n    'backgroundColor', 'borderColor', 'borderWidth', 'borderRadius', 'padding'\n];\n\n// modelUtil.LABEL_OPTIONS = modelUtil.TEXT_STYLE_OPTIONS.concat([\n//     'position', 'offset', 'rotate', 'origin', 'show', 'distance', 'formatter',\n//     'fontStyle', 'fontWeight', 'fontSize', 'fontFamily',\n//     // FIXME: deprecated, check and remove it.\n//     'textStyle'\n// ]);\n\n/**\n * The method do not ensure performance.\n * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]\n * This helper method retieves value from data.\n * @param {string|number|Date|Array|Object} dataItem\n * @return {number|string|Date|Array.<number|string|Date>}\n */\nexport function getDataItemValue(dataItem) {\n    return (isObject(dataItem) && !isArray(dataItem) && !(dataItem instanceof Date))\n        ? dataItem.value : dataItem;\n}\n\n/**\n * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]\n * This helper method determine if dataItem has extra option besides value\n * @param {string|number|Date|Array|Object} dataItem\n */\nexport function isDataItemOption(dataItem) {\n    return isObject(dataItem)\n        && !(dataItem instanceof Array);\n        // // markLine data can be array\n        // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array));\n}\n\n/**\n * Mapping to exists for merge.\n *\n * @public\n * @param {Array.<Object>|Array.<module:echarts/model/Component>} exists\n * @param {Object|Array.<Object>} newCptOptions\n * @return {Array.<Object>} Result, like [{exist: ..., option: ...}, {}],\n *                          index of which is the same as exists.\n */\nexport function mappingToExists(exists, newCptOptions) {\n    // Mapping by the order by original option (but not order of\n    // new option) in merge mode. Because we should ensure\n    // some specified index (like xAxisIndex) is consistent with\n    // original option, which is easy to understand, espatially in\n    // media query. And in most case, merge option is used to\n    // update partial option but not be expected to change order.\n    newCptOptions = (newCptOptions || []).slice();\n\n    var result = zrUtil.map(exists || [], function (obj, index) {\n        return {exist: obj};\n    });\n\n    // Mapping by id or name if specified.\n    each(newCptOptions, function (cptOption, index) {\n        if (!isObject(cptOption)) {\n            return;\n        }\n\n        // id has highest priority.\n        for (var i = 0; i < result.length; i++) {\n            if (!result[i].option // Consider name: two map to one.\n                && cptOption.id != null\n                && result[i].exist.id === cptOption.id + ''\n            ) {\n                result[i].option = cptOption;\n                newCptOptions[index] = null;\n                return;\n            }\n        }\n\n        for (var i = 0; i < result.length; i++) {\n            var exist = result[i].exist;\n            if (!result[i].option // Consider name: two map to one.\n                // Can not match when both ids exist but different.\n                && (exist.id == null || cptOption.id == null)\n                && cptOption.name != null\n                && !isIdInner(cptOption)\n                && !isIdInner(exist)\n                && exist.name === cptOption.name + ''\n            ) {\n                result[i].option = cptOption;\n                newCptOptions[index] = null;\n                return;\n            }\n        }\n    });\n\n    // Otherwise mapping by index.\n    each(newCptOptions, function (cptOption, index) {\n        if (!isObject(cptOption)) {\n            return;\n        }\n\n        var i = 0;\n        for (; i < result.length; i++) {\n            var exist = result[i].exist;\n            if (!result[i].option\n                // Existing model that already has id should be able to\n                // mapped to (because after mapping performed model may\n                // be assigned with a id, whish should not affect next\n                // mapping), except those has inner id.\n                && !isIdInner(exist)\n                // Caution:\n                // Do not overwrite id. But name can be overwritten,\n                // because axis use name as 'show label text'.\n                // 'exist' always has id and name and we dont\n                // need to check it.\n                && cptOption.id == null\n            ) {\n                result[i].option = cptOption;\n                break;\n            }\n        }\n\n        if (i >= result.length) {\n            result.push({option: cptOption});\n        }\n    });\n\n    return result;\n}\n\n/**\n * Make id and name for mapping result (result of mappingToExists)\n * into `keyInfo` field.\n *\n * @public\n * @param {Array.<Object>} Result, like [{exist: ..., option: ...}, {}],\n *                          which order is the same as exists.\n * @return {Array.<Object>} The input.\n */\nexport function makeIdAndName(mapResult) {\n    // We use this id to hash component models and view instances\n    // in echarts. id can be specified by user, or auto generated.\n\n    // The id generation rule ensures new view instance are able\n    // to mapped to old instance when setOption are called in\n    // no-merge mode. So we generate model id by name and plus\n    // type in view id.\n\n    // name can be duplicated among components, which is convenient\n    // to specify multi components (like series) by one name.\n\n    // Ensure that each id is distinct.\n    var idMap = zrUtil.createHashMap();\n\n    each(mapResult, function (item, index) {\n        var existCpt = item.exist;\n        existCpt && idMap.set(existCpt.id, item);\n    });\n\n    each(mapResult, function (item, index) {\n        var opt = item.option;\n\n        zrUtil.assert(\n            !opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item,\n            'id duplicates: ' + (opt && opt.id)\n        );\n\n        opt && opt.id != null && idMap.set(opt.id, item);\n        !item.keyInfo && (item.keyInfo = {});\n    });\n\n    // Make name and id.\n    each(mapResult, function (item, index) {\n        var existCpt = item.exist;\n        var opt = item.option;\n        var keyInfo = item.keyInfo;\n\n        if (!isObject(opt)) {\n            return;\n        }\n\n        // name can be overwitten. Consider case: axis.name = '20km'.\n        // But id generated by name will not be changed, which affect\n        // only in that case: setOption with 'not merge mode' and view\n        // instance will be recreated, which can be accepted.\n        keyInfo.name = opt.name != null\n            ? opt.name + ''\n            : existCpt\n            ? existCpt.name\n            // Avoid diffferent series has the same name,\n            // because name may be used like in color pallet.\n            : DUMMY_COMPONENT_NAME_PREFIX + index;\n\n        if (existCpt) {\n            keyInfo.id = existCpt.id;\n        }\n        else if (opt.id != null) {\n            keyInfo.id = opt.id + '';\n        }\n        else {\n            // Consider this situatoin:\n            //  optionA: [{name: 'a'}, {name: 'a'}, {..}]\n            //  optionB [{..}, {name: 'a'}, {name: 'a'}]\n            // Series with the same name between optionA and optionB\n            // should be mapped.\n            var idNum = 0;\n            do {\n                keyInfo.id = '\\0' + keyInfo.name + '\\0' + idNum++;\n            }\n            while (idMap.get(keyInfo.id));\n        }\n\n        idMap.set(keyInfo.id, item);\n    });\n}\n\nexport function isNameSpecified(componentModel) {\n    var name = componentModel.name;\n    // Is specified when `indexOf` get -1 or > 0.\n    return !!(name && name.indexOf(DUMMY_COMPONENT_NAME_PREFIX));\n}\n\n/**\n * @public\n * @param {Object} cptOption\n * @return {boolean}\n */\nexport function isIdInner(cptOption) {\n    return isObject(cptOption)\n        && cptOption.id\n        && (cptOption.id + '').indexOf('\\0_ec_\\0') === 0;\n}\n\n/**\n * A helper for removing duplicate items between batchA and batchB,\n * and in themselves, and categorize by series.\n *\n * @param {Array.<Object>} batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @param {Array.<Object>} batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @return {Array.<Array.<Object>, Array.<Object>>} result: [resultBatchA, resultBatchB]\n */\nexport function compressBatches(batchA, batchB) {\n    var mapA = {};\n    var mapB = {};\n\n    makeMap(batchA || [], mapA);\n    makeMap(batchB || [], mapB, mapA);\n\n    return [mapToArray(mapA), mapToArray(mapB)];\n\n    function makeMap(sourceBatch, map, otherMap) {\n        for (var i = 0, len = sourceBatch.length; i < len; i++) {\n            var seriesId = sourceBatch[i].seriesId;\n            var dataIndices = normalizeToArray(sourceBatch[i].dataIndex);\n            var otherDataIndices = otherMap && otherMap[seriesId];\n\n            for (var j = 0, lenj = dataIndices.length; j < lenj; j++) {\n                var dataIndex = dataIndices[j];\n\n                if (otherDataIndices && otherDataIndices[dataIndex]) {\n                    otherDataIndices[dataIndex] = null;\n                }\n                else {\n                    (map[seriesId] || (map[seriesId] = {}))[dataIndex] = 1;\n                }\n            }\n        }\n    }\n\n    function mapToArray(map, isData) {\n        var result = [];\n        for (var i in map) {\n            if (map.hasOwnProperty(i) && map[i] != null) {\n                if (isData) {\n                    result.push(+i);\n                }\n                else {\n                    var dataIndices = mapToArray(map[i], true);\n                    dataIndices.length && result.push({seriesId: i, dataIndex: dataIndices});\n                }\n            }\n        }\n        return result;\n    }\n}\n\n/**\n * @param {module:echarts/data/List} data\n * @param {Object} payload Contains dataIndex (means rawIndex) / dataIndexInside / name\n *                         each of which can be Array or primary type.\n * @return {number|Array.<number>} dataIndex If not found, return undefined/null.\n */\nexport function queryDataIndex(data, payload) {\n    if (payload.dataIndexInside != null) {\n        return payload.dataIndexInside;\n    }\n    else if (payload.dataIndex != null) {\n        return zrUtil.isArray(payload.dataIndex)\n            ? zrUtil.map(payload.dataIndex, function (value) {\n                return data.indexOfRawIndex(value);\n            })\n            : data.indexOfRawIndex(payload.dataIndex);\n    }\n    else if (payload.name != null) {\n        return zrUtil.isArray(payload.name)\n            ? zrUtil.map(payload.name, function (value) {\n                return data.indexOfName(value);\n            })\n            : data.indexOfName(payload.name);\n    }\n}\n\n/**\n * Enable property storage to any host object.\n * Notice: Serialization is not supported.\n *\n * For example:\n * var inner = zrUitl.makeInner();\n *\n * function some1(hostObj) {\n *      inner(hostObj).someProperty = 1212;\n *      ...\n * }\n * function some2() {\n *      var fields = inner(this);\n *      fields.someProperty1 = 1212;\n *      fields.someProperty2 = 'xx';\n *      ...\n * }\n *\n * @return {Function}\n */\nexport function makeInner() {\n    // Consider different scope by es module import.\n    var key = '__\\0ec_inner_' + innerUniqueIndex++ + '_' + Math.random().toFixed(5);\n    return function (hostObj) {\n        return hostObj[key] || (hostObj[key] = {});\n    };\n}\nvar innerUniqueIndex = 0;\n\n/**\n * @param {module:echarts/model/Global} ecModel\n * @param {string|Object} finder\n *        If string, e.g., 'geo', means {geoIndex: 0}.\n *        If Object, could contain some of these properties below:\n *        {\n *            seriesIndex, seriesId, seriesName,\n *            geoIndex, geoId, geoName,\n *            bmapIndex, bmapId, bmapName,\n *            xAxisIndex, xAxisId, xAxisName,\n *            yAxisIndex, yAxisId, yAxisName,\n *            gridIndex, gridId, gridName,\n *            ... (can be extended)\n *        }\n *        Each properties can be number|string|Array.<number>|Array.<string>\n *        For example, a finder could be\n *        {\n *            seriesIndex: 3,\n *            geoId: ['aa', 'cc'],\n *            gridName: ['xx', 'rr']\n *        }\n *        xxxIndex can be set as 'all' (means all xxx) or 'none' (means not specify)\n *        If nothing or null/undefined specified, return nothing.\n * @param {Object} [opt]\n * @param {string} [opt.defaultMainType]\n * @param {Array.<string>} [opt.includeMainTypes]\n * @return {Object} result like:\n *        {\n *            seriesModels: [seriesModel1, seriesModel2],\n *            seriesModel: seriesModel1, // The first model\n *            geoModels: [geoModel1, geoModel2],\n *            geoModel: geoModel1, // The first model\n *            ...\n *        }\n */\nexport function parseFinder(ecModel, finder, opt) {\n    if (zrUtil.isString(finder)) {\n        var obj = {};\n        obj[finder + 'Index'] = 0;\n        finder = obj;\n    }\n\n    var defaultMainType = opt && opt.defaultMainType;\n    if (defaultMainType\n        && !has(finder, defaultMainType + 'Index')\n        && !has(finder, defaultMainType + 'Id')\n        && !has(finder, defaultMainType + 'Name')\n    ) {\n        finder[defaultMainType + 'Index'] = 0;\n    }\n\n    var result = {};\n\n    each(finder, function (value, key) {\n        var value = finder[key];\n\n        // Exclude 'dataIndex' and other illgal keys.\n        if (key === 'dataIndex' || key === 'dataIndexInside') {\n            result[key] = value;\n            return;\n        }\n\n        var parsedKey = key.match(/^(\\w+)(Index|Id|Name)$/) || [];\n        var mainType = parsedKey[1];\n        var queryType = (parsedKey[2] || '').toLowerCase();\n\n        if (!mainType\n            || !queryType\n            || value == null\n            || (queryType === 'index' && value === 'none')\n            || (opt && opt.includeMainTypes && zrUtil.indexOf(opt.includeMainTypes, mainType) < 0)\n        ) {\n            return;\n        }\n\n        var queryParam = {mainType: mainType};\n        if (queryType !== 'index' || value !== 'all') {\n            queryParam[queryType] = value;\n        }\n\n        var models = ecModel.queryComponents(queryParam);\n        result[mainType + 'Models'] = models;\n        result[mainType + 'Model'] = models[0];\n    });\n\n    return result;\n}\n\nfunction has(obj, prop) {\n    return obj && obj.hasOwnProperty(prop);\n}\n\nexport function setAttribute(dom, key, value) {\n    dom.setAttribute\n        ? dom.setAttribute(key, value)\n        : (dom[key] = value);\n}\n\nexport function getAttribute(dom, key) {\n    return dom.getAttribute\n        ? dom.getAttribute(key)\n        : dom[key];\n}\n\nexport function getTooltipRenderMode(renderModeOption) {\n    if (renderModeOption === 'auto') {\n        // Using html when `document` exists, use richText otherwise\n        return env.domSupported ? 'html' : 'richText';\n    }\n    else {\n        return renderModeOption || 'html';\n    }\n}\n\n/**\n * Group a list by key.\n *\n * @param {Array} array\n * @param {Function} getKey\n *        param {*} Array item\n *        return {string} key\n * @return {Object} Result\n *        {Array}: keys,\n *        {module:zrender/core/util/HashMap} buckets: {key -> Array}\n */\nexport function groupData(array, getKey) {\n    var buckets = zrUtil.createHashMap();\n    var keys = [];\n\n    zrUtil.each(array, function (item) {\n        var key = getKey(item);\n        (buckets.get(key)\n            || (keys.push(key), buckets.set(key, []))\n        ).push(item);\n    });\n\n    return {keys: keys, buckets: buckets};\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\nimport {__DEV__} from '../config';\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar TYPE_DELIMITER = '.';\nvar IS_CONTAINER = '___EC__COMPONENT__CONTAINER___';\n\n/**\n * Notice, parseClassType('') should returns {main: '', sub: ''}\n * @public\n */\nexport function parseClassType(componentType) {\n    var ret = {main: '', sub: ''};\n    if (componentType) {\n        componentType = componentType.split(TYPE_DELIMITER);\n        ret.main = componentType[0] || '';\n        ret.sub = componentType[1] || '';\n    }\n    return ret;\n}\n\n/**\n * @public\n */\nfunction checkClassType(componentType) {\n    zrUtil.assert(\n        /^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType),\n        'componentType \"' + componentType + '\" illegal'\n    );\n}\n\n/**\n * @public\n */\nexport function enableClassExtend(RootClass, mandatoryMethods) {\n\n    RootClass.$constructor = RootClass;\n    RootClass.extend = function (proto) {\n\n        if (__DEV__) {\n            zrUtil.each(mandatoryMethods, function (method) {\n                if (!proto[method]) {\n                    console.warn(\n                        'Method `' + method + '` should be implemented'\n                        + (proto.type ? ' in ' + proto.type : '') + '.'\n                    );\n                }\n            });\n        }\n\n        var superClass = this;\n        var ExtendedClass = function () {\n            if (!proto.$constructor) {\n                superClass.apply(this, arguments);\n            }\n            else {\n                proto.$constructor.apply(this, arguments);\n            }\n        };\n\n        zrUtil.extend(ExtendedClass.prototype, proto);\n\n        ExtendedClass.extend = this.extend;\n        ExtendedClass.superCall = superCall;\n        ExtendedClass.superApply = superApply;\n        zrUtil.inherits(ExtendedClass, this);\n        ExtendedClass.superClass = superClass;\n\n        return ExtendedClass;\n    };\n}\n\nvar classBase = 0;\n\n/**\n * Can not use instanceof, consider different scope by\n * cross domain or es module import in ec extensions.\n * Mount a method \"isInstance()\" to Clz.\n */\nexport function enableClassCheck(Clz) {\n    var classAttr = ['__\\0is_clz', classBase++, Math.random().toFixed(3)].join('_');\n    Clz.prototype[classAttr] = true;\n\n    if (__DEV__) {\n        zrUtil.assert(!Clz.isInstance, 'The method \"is\" can not be defined.');\n    }\n\n    Clz.isInstance = function (obj) {\n        return !!(obj && obj[classAttr]);\n    };\n}\n\n// superCall should have class info, which can not be fetch from 'this'.\n// Consider this case:\n// class A has method f,\n// class B inherits class A, overrides method f, f call superApply('f'),\n// class C inherits class B, do not overrides method f,\n// then when method of class C is called, dead loop occured.\nfunction superCall(context, methodName) {\n    var args = zrUtil.slice(arguments, 2);\n    return this.superClass.prototype[methodName].apply(context, args);\n}\n\nfunction superApply(context, methodName, args) {\n    return this.superClass.prototype[methodName].apply(context, args);\n}\n\n/**\n * @param {Object} entity\n * @param {Object} options\n * @param {boolean} [options.registerWhenExtend]\n * @public\n */\nexport function enableClassManagement(entity, options) {\n    options = options || {};\n\n    /**\n     * Component model classes\n     * key: componentType,\n     * value:\n     *     componentClass, when componentType is 'xxx'\n     *     or Object.<subKey, componentClass>, when componentType is 'xxx.yy'\n     * @type {Object}\n     */\n    var storage = {};\n\n    entity.registerClass = function (Clazz, componentType) {\n        if (componentType) {\n            checkClassType(componentType);\n            componentType = parseClassType(componentType);\n\n            if (!componentType.sub) {\n                if (__DEV__) {\n                    if (storage[componentType.main]) {\n                        console.warn(componentType.main + ' exists.');\n                    }\n                }\n                storage[componentType.main] = Clazz;\n            }\n            else if (componentType.sub !== IS_CONTAINER) {\n                var container = makeContainer(componentType);\n                container[componentType.sub] = Clazz;\n            }\n        }\n        return Clazz;\n    };\n\n    entity.getClass = function (componentMainType, subType, throwWhenNotFound) {\n        var Clazz = storage[componentMainType];\n\n        if (Clazz && Clazz[IS_CONTAINER]) {\n            Clazz = subType ? Clazz[subType] : null;\n        }\n\n        if (throwWhenNotFound && !Clazz) {\n            throw new Error(\n                !subType\n                    ? componentMainType + '.' + 'type should be specified.'\n                    : 'Component ' + componentMainType + '.' + (subType || '') + ' not exists. Load it first.'\n            );\n        }\n\n        return Clazz;\n    };\n\n    entity.getClassesByMainType = function (componentType) {\n        componentType = parseClassType(componentType);\n\n        var result = [];\n        var obj = storage[componentType.main];\n\n        if (obj && obj[IS_CONTAINER]) {\n            zrUtil.each(obj, function (o, type) {\n                type !== IS_CONTAINER && result.push(o);\n            });\n        }\n        else {\n            result.push(obj);\n        }\n\n        return result;\n    };\n\n    entity.hasClass = function (componentType) {\n        // Just consider componentType.main.\n        componentType = parseClassType(componentType);\n        return !!storage[componentType.main];\n    };\n\n    /**\n     * @return {Array.<string>} Like ['aa', 'bb'], but can not be ['aa.xx']\n     */\n    entity.getAllClassMainTypes = function () {\n        var types = [];\n        zrUtil.each(storage, function (obj, type) {\n            types.push(type);\n        });\n        return types;\n    };\n\n    /**\n     * If a main type is container and has sub types\n     * @param  {string}  mainType\n     * @return {boolean}\n     */\n    entity.hasSubTypes = function (componentType) {\n        componentType = parseClassType(componentType);\n        var obj = storage[componentType.main];\n        return obj && obj[IS_CONTAINER];\n    };\n\n    entity.parseClassType = parseClassType;\n\n    function makeContainer(componentType) {\n        var container = storage[componentType.main];\n        if (!container || !container[IS_CONTAINER]) {\n            container = storage[componentType.main] = {};\n            container[IS_CONTAINER] = true;\n        }\n        return container;\n    }\n\n    if (options.registerWhenExtend) {\n        var originalExtend = entity.extend;\n        if (originalExtend) {\n            entity.extend = function (proto) {\n                var ExtendedClass = originalExtend.call(this, proto);\n                return entity.registerClass(ExtendedClass, proto.type);\n            };\n        }\n    }\n\n    return entity;\n}\n\n/**\n * @param {string|Array.<string>} properties\n */\nexport function setReadOnly(obj, properties) {\n    // FIXME It seems broken in IE8 simulation of IE11\n    // if (!zrUtil.isArray(properties)) {\n    //     properties = properties != null ? [properties] : [];\n    // }\n    // zrUtil.each(properties, function (prop) {\n    //     var value = obj[prop];\n\n    //     Object.defineProperty\n    //         && Object.defineProperty(obj, prop, {\n    //             value: value, writable: false\n    //         });\n    //     zrUtil.isArray(obj[prop])\n    //         && Object.freeze\n    //         && Object.freeze(obj[prop]);\n    // });\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// TODO Parse shadow style\n// TODO Only shallow path support\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default function (properties) {\n    // Normalize\n    for (var i = 0; i < properties.length; i++) {\n        if (!properties[i][1]) {\n            properties[i][1] = properties[i][0];\n        }\n    }\n    return function (model, excludes, includes) {\n        var style = {};\n        for (var i = 0; i < properties.length; i++) {\n            var propName = properties[i][1];\n            if ((excludes && zrUtil.indexOf(excludes, propName) >= 0)\n                || (includes && zrUtil.indexOf(includes, propName) < 0)\n            ) {\n                continue;\n            }\n            var val = model.getShallow(propName);\n            if (val != null) {\n                style[properties[i][0]] = val;\n            }\n        }\n        return style;\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\nimport makeStyleMapper from './makeStyleMapper';\n\nvar getLineStyle = makeStyleMapper(\n    [\n        ['lineWidth', 'width'],\n        ['stroke', 'color'],\n        ['opacity'],\n        ['shadowBlur'],\n        ['shadowOffsetX'],\n        ['shadowOffsetY'],\n        ['shadowColor']\n    ]\n);\n\nexport default {\n    getLineStyle: function (excludes) {\n        var style = getLineStyle(this, excludes);\n        // Always set lineDash whether dashed, otherwise we can not\n        // erase the previous style when assigning to el.style.\n        style.lineDash = this.getLineDash(style.lineWidth);\n        return style;\n    },\n\n    getLineDash: function (lineWidth) {\n        if (lineWidth == null) {\n            lineWidth = 1;\n        }\n        var lineType = this.get('type');\n        var dotSize = Math.max(lineWidth, 2);\n        var dashSize = lineWidth * 4;\n        return (lineType === 'solid' || lineType == null)\n            // Use `false` but not `null` for the solid line here, because `null` might be\n            // ignored when assigning to `el.style`. e.g., when setting `lineStyle.type` as\n            // `'dashed'` and `emphasis.lineStyle.type` as `'solid'` in graph series, the\n            // `lineDash` gotten form the latter one is not able to erase that from the former\n            // one if using `null` here according to the emhpsis strategy in `util/graphic.js`.\n            ? false\n            : lineType === 'dashed'\n            ? [dashSize, dashSize]\n            : [dotSize, dotSize];\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\nimport makeStyleMapper from './makeStyleMapper';\n\nvar getAreaStyle = makeStyleMapper(\n    [\n        ['fill', 'color'],\n        ['shadowBlur'],\n        ['shadowOffsetX'],\n        ['shadowOffsetY'],\n        ['opacity'],\n        ['shadowColor']\n    ]\n);\n\nexport default {\n    getAreaStyle: function (excludes, includes) {\n        return getAreaStyle(this, excludes, includes);\n    }\n};","/**\n * 曲线辅助模块\n * @module zrender/core/curve\n * @author pissang(https://www.github.com/pissang)\n */\n\nimport {\n    create as v2Create,\n    distSquare as v2DistSquare\n} from './vector';\n\nvar mathPow = Math.pow;\nvar mathSqrt = Math.sqrt;\n\nvar EPSILON = 1e-8;\nvar EPSILON_NUMERIC = 1e-4;\n\nvar THREE_SQRT = mathSqrt(3);\nvar ONE_THIRD = 1 / 3;\n\n// 临时变量\nvar _v0 = v2Create();\nvar _v1 = v2Create();\nvar _v2 = v2Create();\n\nfunction isAroundZero(val) {\n    return val > -EPSILON && val < EPSILON;\n}\nfunction isNotAroundZero(val) {\n    return val > EPSILON || val < -EPSILON;\n}\n/**\n * 计算三次贝塞尔值\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @return {number}\n */\nexport function cubicAt(p0, p1, p2, p3, t) {\n    var onet = 1 - t;\n    return onet * onet * (onet * p0 + 3 * t * p1)\n            + t * t * (t * p3 + 3 * onet * p2);\n}\n\n/**\n * 计算三次贝塞尔导数值\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @return {number}\n */\nexport function cubicDerivativeAt(p0, p1, p2, p3, t) {\n    var onet = 1 - t;\n    return 3 * (\n        ((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet\n        + (p3 - p2) * t * t\n    );\n}\n\n/**\n * 计算三次贝塞尔方程根，使用盛金公式\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} val\n * @param  {Array.<number>} roots\n * @return {number} 有效根数目\n */\nexport function cubicRootAt(p0, p1, p2, p3, val, roots) {\n    // Evaluate roots of cubic functions\n    var a = p3 + 3 * (p1 - p2) - p0;\n    var b = 3 * (p2 - p1 * 2 + p0);\n    var c = 3 * (p1 - p0);\n    var d = p0 - val;\n\n    var A = b * b - 3 * a * c;\n    var B = b * c - 9 * a * d;\n    var C = c * c - 3 * b * d;\n\n    var n = 0;\n\n    if (isAroundZero(A) && isAroundZero(B)) {\n        if (isAroundZero(b)) {\n            roots[0] = 0;\n        }\n        else {\n            var t1 = -c / b;  //t1, t2, t3, b is not zero\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n    }\n    else {\n        var disc = B * B - 4 * A * C;\n\n        if (isAroundZero(disc)) {\n            var K = B / A;\n            var t1 = -b / a + K;  // t1, a is not zero\n            var t2 = -K / 2;  // t2, t3\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n            if (t2 >= 0 && t2 <= 1) {\n                roots[n++] = t2;\n            }\n        }\n        else if (disc > 0) {\n            var discSqrt = mathSqrt(disc);\n            var Y1 = A * b + 1.5 * a * (-B + discSqrt);\n            var Y2 = A * b + 1.5 * a * (-B - discSqrt);\n            if (Y1 < 0) {\n                Y1 = -mathPow(-Y1, ONE_THIRD);\n            }\n            else {\n                Y1 = mathPow(Y1, ONE_THIRD);\n            }\n            if (Y2 < 0) {\n                Y2 = -mathPow(-Y2, ONE_THIRD);\n            }\n            else {\n                Y2 = mathPow(Y2, ONE_THIRD);\n            }\n            var t1 = (-b - (Y1 + Y2)) / (3 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n        else {\n            var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt(A * A * A));\n            var theta = Math.acos(T) / 3;\n            var ASqrt = mathSqrt(A);\n            var tmp = Math.cos(theta);\n\n            var t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n            var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n            var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n            if (t2 >= 0 && t2 <= 1) {\n                roots[n++] = t2;\n            }\n            if (t3 >= 0 && t3 <= 1) {\n                roots[n++] = t3;\n            }\n        }\n    }\n    return n;\n}\n\n/**\n * 计算三次贝塞尔方程极限值的位置\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {Array.<number>} extrema\n * @return {number} 有效数目\n */\nexport function cubicExtrema(p0, p1, p2, p3, extrema) {\n    var b = 6 * p2 - 12 * p1 + 6 * p0;\n    var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n    var c = 3 * p1 - 3 * p0;\n\n    var n = 0;\n    if (isAroundZero(a)) {\n        if (isNotAroundZero(b)) {\n            var t1 = -c / b;\n            if (t1 >= 0 && t1 <= 1) {\n                extrema[n++] = t1;\n            }\n        }\n    }\n    else {\n        var disc = b * b - 4 * a * c;\n        if (isAroundZero(disc)) {\n            extrema[0] = -b / (2 * a);\n        }\n        else if (disc > 0) {\n            var discSqrt = mathSqrt(disc);\n            var t1 = (-b + discSqrt) / (2 * a);\n            var t2 = (-b - discSqrt) / (2 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                extrema[n++] = t1;\n            }\n            if (t2 >= 0 && t2 <= 1) {\n                extrema[n++] = t2;\n            }\n        }\n    }\n    return n;\n}\n\n/**\n * 细分三次贝塞尔曲线\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @param  {Array.<number>} out\n */\nexport function cubicSubdivide(p0, p1, p2, p3, t, out) {\n    var p01 = (p1 - p0) * t + p0;\n    var p12 = (p2 - p1) * t + p1;\n    var p23 = (p3 - p2) * t + p2;\n\n    var p012 = (p12 - p01) * t + p01;\n    var p123 = (p23 - p12) * t + p12;\n\n    var p0123 = (p123 - p012) * t + p012;\n    // Seg0\n    out[0] = p0;\n    out[1] = p01;\n    out[2] = p012;\n    out[3] = p0123;\n    // Seg1\n    out[4] = p0123;\n    out[5] = p123;\n    out[6] = p23;\n    out[7] = p3;\n}\n\n/**\n * 投射点到三次贝塞尔曲线上，返回投射距离。\n * 投射点有可能会有一个或者多个，这里只返回其中距离最短的一个。\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {number} x\n * @param {number} y\n * @param {Array.<number>} [out] 投射点\n * @return {number}\n */\nexport function cubicProjectPoint(\n    x0, y0, x1, y1, x2, y2, x3, y3,\n    x, y, out\n) {\n    // http://pomax.github.io/bezierinfo/#projections\n    var t;\n    var interval = 0.005;\n    var d = Infinity;\n    var prev;\n    var next;\n    var d1;\n    var d2;\n\n    _v0[0] = x;\n    _v0[1] = y;\n\n    // 先粗略估计一下可能的最小距离的 t 值\n    // PENDING\n    for (var _t = 0; _t < 1; _t += 0.05) {\n        _v1[0] = cubicAt(x0, x1, x2, x3, _t);\n        _v1[1] = cubicAt(y0, y1, y2, y3, _t);\n        d1 = v2DistSquare(_v0, _v1);\n        if (d1 < d) {\n            t = _t;\n            d = d1;\n        }\n    }\n    d = Infinity;\n\n    // At most 32 iteration\n    for (var i = 0; i < 32; i++) {\n        if (interval < EPSILON_NUMERIC) {\n            break;\n        }\n        prev = t - interval;\n        next = t + interval;\n        // t - interval\n        _v1[0] = cubicAt(x0, x1, x2, x3, prev);\n        _v1[1] = cubicAt(y0, y1, y2, y3, prev);\n\n        d1 = v2DistSquare(_v1, _v0);\n\n        if (prev >= 0 && d1 < d) {\n            t = prev;\n            d = d1;\n        }\n        else {\n            // t + interval\n            _v2[0] = cubicAt(x0, x1, x2, x3, next);\n            _v2[1] = cubicAt(y0, y1, y2, y3, next);\n            d2 = v2DistSquare(_v2, _v0);\n\n            if (next <= 1 && d2 < d) {\n                t = next;\n                d = d2;\n            }\n            else {\n                interval *= 0.5;\n            }\n        }\n    }\n    // t\n    if (out) {\n        out[0] = cubicAt(x0, x1, x2, x3, t);\n        out[1] = cubicAt(y0, y1, y2, y3, t);\n    }\n    // console.log(interval, i);\n    return mathSqrt(d);\n}\n\n/**\n * 计算二次方贝塞尔值\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @return {number}\n */\nexport function quadraticAt(p0, p1, p2, t) {\n    var onet = 1 - t;\n    return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\n\n/**\n * 计算二次方贝塞尔导数值\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @return {number}\n */\nexport function quadraticDerivativeAt(p0, p1, p2, t) {\n    return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));\n}\n\n/**\n * 计算二次方贝塞尔方程根\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @param  {Array.<number>} roots\n * @return {number} 有效根数目\n */\nexport function quadraticRootAt(p0, p1, p2, val, roots) {\n    var a = p0 - 2 * p1 + p2;\n    var b = 2 * (p1 - p0);\n    var c = p0 - val;\n\n    var n = 0;\n    if (isAroundZero(a)) {\n        if (isNotAroundZero(b)) {\n            var t1 = -c / b;\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n    }\n    else {\n        var disc = b * b - 4 * a * c;\n        if (isAroundZero(disc)) {\n            var t1 = -b / (2 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n        else if (disc > 0) {\n            var discSqrt = mathSqrt(disc);\n            var t1 = (-b + discSqrt) / (2 * a);\n            var t2 = (-b - discSqrt) / (2 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n            if (t2 >= 0 && t2 <= 1) {\n                roots[n++] = t2;\n            }\n        }\n    }\n    return n;\n}\n\n/**\n * 计算二次贝塞尔方程极限值\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @return {number}\n */\nexport function quadraticExtremum(p0, p1, p2) {\n    var divider = p0 + p2 - 2 * p1;\n    if (divider === 0) {\n        // p1 is center of p0 and p2\n        return 0.5;\n    }\n    else {\n        return (p0 - p1) / divider;\n    }\n}\n\n/**\n * 细分二次贝塞尔曲线\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @param  {Array.<number>} out\n */\nexport function quadraticSubdivide(p0, p1, p2, t, out) {\n    var p01 = (p1 - p0) * t + p0;\n    var p12 = (p2 - p1) * t + p1;\n    var p012 = (p12 - p01) * t + p01;\n\n    // Seg0\n    out[0] = p0;\n    out[1] = p01;\n    out[2] = p012;\n\n    // Seg1\n    out[3] = p012;\n    out[4] = p12;\n    out[5] = p2;\n}\n\n/**\n * 投射点到二次贝塞尔曲线上，返回投射距离。\n * 投射点有可能会有一个或者多个，这里只返回其中距离最短的一个。\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n * @param {Array.<number>} out 投射点\n * @return {number}\n */\nexport function quadraticProjectPoint(\n    x0, y0, x1, y1, x2, y2,\n    x, y, out\n) {\n    // http://pomax.github.io/bezierinfo/#projections\n    var t;\n    var interval = 0.005;\n    var d = Infinity;\n\n    _v0[0] = x;\n    _v0[1] = y;\n\n    // 先粗略估计一下可能的最小距离的 t 值\n    // PENDING\n    for (var _t = 0; _t < 1; _t += 0.05) {\n        _v1[0] = quadraticAt(x0, x1, x2, _t);\n        _v1[1] = quadraticAt(y0, y1, y2, _t);\n        var d1 = v2DistSquare(_v0, _v1);\n        if (d1 < d) {\n            t = _t;\n            d = d1;\n        }\n    }\n    d = Infinity;\n\n    // At most 32 iteration\n    for (var i = 0; i < 32; i++) {\n        if (interval < EPSILON_NUMERIC) {\n            break;\n        }\n        var prev = t - interval;\n        var next = t + interval;\n        // t - interval\n        _v1[0] = quadraticAt(x0, x1, x2, prev);\n        _v1[1] = quadraticAt(y0, y1, y2, prev);\n\n        var d1 = v2DistSquare(_v1, _v0);\n\n        if (prev >= 0 && d1 < d) {\n            t = prev;\n            d = d1;\n        }\n        else {\n            // t + interval\n            _v2[0] = quadraticAt(x0, x1, x2, next);\n            _v2[1] = quadraticAt(y0, y1, y2, next);\n            var d2 = v2DistSquare(_v2, _v0);\n            if (next <= 1 && d2 < d) {\n                t = next;\n                d = d2;\n            }\n            else {\n                interval *= 0.5;\n            }\n        }\n    }\n    // t\n    if (out) {\n        out[0] = quadraticAt(x0, x1, x2, t);\n        out[1] = quadraticAt(y0, y1, y2, t);\n    }\n    // console.log(interval, i);\n    return mathSqrt(d);\n}\n","/**\n * @author Yi Shen(https://github.com/pissang)\n */\n\nimport * as vec2 from './vector';\nimport * as curve from './curve';\n\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI2 = Math.PI * 2;\n\nvar start = vec2.create();\nvar end = vec2.create();\nvar extremity = vec2.create();\n\n/**\n * 从顶点数组中计算出最小包围盒，写入`min`和`max`中\n * @module zrender/core/bbox\n * @param {Array<Object>} points 顶点数组\n * @param {number} min\n * @param {number} max\n */\nexport function fromPoints(points, min, max) {\n    if (points.length === 0) {\n        return;\n    }\n    var p = points[0];\n    var left = p[0];\n    var right = p[0];\n    var top = p[1];\n    var bottom = p[1];\n    var i;\n\n    for (i = 1; i < points.length; i++) {\n        p = points[i];\n        left = mathMin(left, p[0]);\n        right = mathMax(right, p[0]);\n        top = mathMin(top, p[1]);\n        bottom = mathMax(bottom, p[1]);\n    }\n\n    min[0] = left;\n    min[1] = top;\n    max[0] = right;\n    max[1] = bottom;\n}\n\n/**\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nexport function fromLine(x0, y0, x1, y1, min, max) {\n    min[0] = mathMin(x0, x1);\n    min[1] = mathMin(y0, y1);\n    max[0] = mathMax(x0, x1);\n    max[1] = mathMax(y0, y1);\n}\n\nvar xDim = [];\nvar yDim = [];\n/**\n * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒，写入`min`和`max`中\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nexport function fromCubic(\n    x0, y0, x1, y1, x2, y2, x3, y3, min, max\n) {\n    var cubicExtrema = curve.cubicExtrema;\n    var cubicAt = curve.cubicAt;\n    var i;\n    var n = cubicExtrema(x0, x1, x2, x3, xDim);\n    min[0] = Infinity;\n    min[1] = Infinity;\n    max[0] = -Infinity;\n    max[1] = -Infinity;\n\n    for (i = 0; i < n; i++) {\n        var x = cubicAt(x0, x1, x2, x3, xDim[i]);\n        min[0] = mathMin(x, min[0]);\n        max[0] = mathMax(x, max[0]);\n    }\n    n = cubicExtrema(y0, y1, y2, y3, yDim);\n    for (i = 0; i < n; i++) {\n        var y = cubicAt(y0, y1, y2, y3, yDim[i]);\n        min[1] = mathMin(y, min[1]);\n        max[1] = mathMax(y, max[1]);\n    }\n\n    min[0] = mathMin(x0, min[0]);\n    max[0] = mathMax(x0, max[0]);\n    min[0] = mathMin(x3, min[0]);\n    max[0] = mathMax(x3, max[0]);\n\n    min[1] = mathMin(y0, min[1]);\n    max[1] = mathMax(y0, max[1]);\n    min[1] = mathMin(y3, min[1]);\n    max[1] = mathMax(y3, max[1]);\n}\n\n/**\n * 从二阶贝塞尔曲线(p0, p1, p2)中计算出最小包围盒，写入`min`和`max`中\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nexport function fromQuadratic(x0, y0, x1, y1, x2, y2, min, max) {\n    var quadraticExtremum = curve.quadraticExtremum;\n    var quadraticAt = curve.quadraticAt;\n    // Find extremities, where derivative in x dim or y dim is zero\n    var tx =\n        mathMax(\n            mathMin(quadraticExtremum(x0, x1, x2), 1), 0\n        );\n    var ty =\n        mathMax(\n            mathMin(quadraticExtremum(y0, y1, y2), 1), 0\n        );\n\n    var x = quadraticAt(x0, x1, x2, tx);\n    var y = quadraticAt(y0, y1, y2, ty);\n\n    min[0] = mathMin(x0, x2, x);\n    min[1] = mathMin(y0, y2, y);\n    max[0] = mathMax(x0, x2, x);\n    max[1] = mathMax(y0, y2, y);\n}\n\n/**\n * 从圆弧中计算出最小包围盒，写入`min`和`max`中\n * @method\n * @memberOf module:zrender/core/bbox\n * @param {number} x\n * @param {number} y\n * @param {number} rx\n * @param {number} ry\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {number} anticlockwise\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nexport function fromArc(\n    x, y, rx, ry, startAngle, endAngle, anticlockwise, min, max\n) {\n    var vec2Min = vec2.min;\n    var vec2Max = vec2.max;\n\n    var diff = Math.abs(startAngle - endAngle);\n\n\n    if (diff % PI2 < 1e-4 && diff > 1e-4) {\n        // Is a circle\n        min[0] = x - rx;\n        min[1] = y - ry;\n        max[0] = x + rx;\n        max[1] = y + ry;\n        return;\n    }\n\n    start[0] = mathCos(startAngle) * rx + x;\n    start[1] = mathSin(startAngle) * ry + y;\n\n    end[0] = mathCos(endAngle) * rx + x;\n    end[1] = mathSin(endAngle) * ry + y;\n\n    vec2Min(min, start, end);\n    vec2Max(max, start, end);\n\n    // Thresh to [0, Math.PI * 2]\n    startAngle = startAngle % (PI2);\n    if (startAngle < 0) {\n        startAngle = startAngle + PI2;\n    }\n    endAngle = endAngle % (PI2);\n    if (endAngle < 0) {\n        endAngle = endAngle + PI2;\n    }\n\n    if (startAngle > endAngle && !anticlockwise) {\n        endAngle += PI2;\n    }\n    else if (startAngle < endAngle && anticlockwise) {\n        startAngle += PI2;\n    }\n    if (anticlockwise) {\n        var tmp = endAngle;\n        endAngle = startAngle;\n        startAngle = tmp;\n    }\n\n    // var number = 0;\n    // var step = (anticlockwise ? -Math.PI : Math.PI) / 2;\n    for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {\n        if (angle > startAngle) {\n            extremity[0] = mathCos(angle) * rx + x;\n            extremity[1] = mathSin(angle) * ry + y;\n\n            vec2Min(min, extremity, min);\n            vec2Max(max, extremity, max);\n        }\n    }\n}\n","/**\n * Path 代理，可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中\n * 可以用于 isInsidePath 判断以及获取boundingRect\n *\n * @module zrender/core/PathProxy\n * @author Yi Shen (http://www.github.com/pissang)\n */\n\n// TODO getTotalLength, getPointAtLength\n\n/* global Float32Array */\n\nimport * as curve from './curve';\nimport * as vec2 from './vector';\nimport * as bbox from './bbox';\nimport BoundingRect from './BoundingRect';\nimport {devicePixelRatio as dpr} from '../config';\n\nvar CMD = {\n    M: 1,\n    L: 2,\n    C: 3,\n    Q: 4,\n    A: 5,\n    Z: 6,\n    // Rect\n    R: 7\n};\n\n// var CMD_MEM_SIZE = {\n//     M: 3,\n//     L: 3,\n//     C: 7,\n//     Q: 5,\n//     A: 9,\n//     R: 5,\n//     Z: 1\n// };\n\nvar min = [];\nvar max = [];\nvar min2 = [];\nvar max2 = [];\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathCos = Math.cos;\nvar mathSin = Math.sin;\nvar mathSqrt = Math.sqrt;\nvar mathAbs = Math.abs;\n\nvar hasTypedArray = typeof Float32Array !== 'undefined';\n\n/**\n * @alias module:zrender/core/PathProxy\n * @constructor\n */\nvar PathProxy = function (notSaveData) {\n\n    this._saveData = !(notSaveData || false);\n\n    if (this._saveData) {\n        /**\n         * Path data. Stored as flat array\n         * @type {Array.<Object>}\n         */\n        this.data = [];\n    }\n\n    this._ctx = null;\n};\n\n/**\n * 快速计算Path包围盒（并不是最小包围盒）\n * @return {Object}\n */\nPathProxy.prototype = {\n\n    constructor: PathProxy,\n\n    _xi: 0,\n    _yi: 0,\n\n    _x0: 0,\n    _y0: 0,\n    // Unit x, Unit y. Provide for avoiding drawing that too short line segment\n    _ux: 0,\n    _uy: 0,\n\n    _len: 0,\n\n    _lineDash: null,\n\n    _dashOffset: 0,\n\n    _dashIdx: 0,\n\n    _dashSum: 0,\n\n    /**\n     * @readOnly\n     */\n    setScale: function (sx, sy, segmentIgnoreThreshold) {\n        // Compat. Previously there is no segmentIgnoreThreshold.\n        segmentIgnoreThreshold = segmentIgnoreThreshold || 0;\n        this._ux = mathAbs(segmentIgnoreThreshold / dpr / sx) || 0;\n        this._uy = mathAbs(segmentIgnoreThreshold / dpr / sy) || 0;\n    },\n\n    getContext: function () {\n        return this._ctx;\n    },\n\n    /**\n     * @param  {CanvasRenderingContext2D} ctx\n     * @return {module:zrender/core/PathProxy}\n     */\n    beginPath: function (ctx) {\n\n        this._ctx = ctx;\n\n        ctx && ctx.beginPath();\n\n        ctx && (this.dpr = ctx.dpr);\n\n        // Reset\n        if (this._saveData) {\n            this._len = 0;\n        }\n\n        if (this._lineDash) {\n            this._lineDash = null;\n\n            this._dashOffset = 0;\n        }\n\n        return this;\n    },\n\n    /**\n     * @param  {number} x\n     * @param  {number} y\n     * @return {module:zrender/core/PathProxy}\n     */\n    moveTo: function (x, y) {\n        this.addData(CMD.M, x, y);\n        this._ctx && this._ctx.moveTo(x, y);\n\n        // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用\n        // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。\n        // 有可能在 beginPath 之后直接调用 lineTo，这时候 x0, y0 需要\n        // 在 lineTo 方法中记录，这里先不考虑这种情况，dashed line 也只在 IE10- 中不支持\n        this._x0 = x;\n        this._y0 = y;\n\n        this._xi = x;\n        this._yi = y;\n\n        return this;\n    },\n\n    /**\n     * @param  {number} x\n     * @param  {number} y\n     * @return {module:zrender/core/PathProxy}\n     */\n    lineTo: function (x, y) {\n        var exceedUnit = mathAbs(x - this._xi) > this._ux\n            || mathAbs(y - this._yi) > this._uy\n            // Force draw the first segment\n            || this._len < 5;\n\n        this.addData(CMD.L, x, y);\n\n        if (this._ctx && exceedUnit) {\n            this._needsDash() ? this._dashedLineTo(x, y)\n                : this._ctx.lineTo(x, y);\n        }\n        if (exceedUnit) {\n            this._xi = x;\n            this._yi = y;\n        }\n\n        return this;\n    },\n\n    /**\n     * @param  {number} x1\n     * @param  {number} y1\n     * @param  {number} x2\n     * @param  {number} y2\n     * @param  {number} x3\n     * @param  {number} y3\n     * @return {module:zrender/core/PathProxy}\n     */\n    bezierCurveTo: function (x1, y1, x2, y2, x3, y3) {\n        this.addData(CMD.C, x1, y1, x2, y2, x3, y3);\n        if (this._ctx) {\n            this._needsDash() ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3)\n                : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n        }\n        this._xi = x3;\n        this._yi = y3;\n        return this;\n    },\n\n    /**\n     * @param  {number} x1\n     * @param  {number} y1\n     * @param  {number} x2\n     * @param  {number} y2\n     * @return {module:zrender/core/PathProxy}\n     */\n    quadraticCurveTo: function (x1, y1, x2, y2) {\n        this.addData(CMD.Q, x1, y1, x2, y2);\n        if (this._ctx) {\n            this._needsDash() ? this._dashedQuadraticTo(x1, y1, x2, y2)\n                : this._ctx.quadraticCurveTo(x1, y1, x2, y2);\n        }\n        this._xi = x2;\n        this._yi = y2;\n        return this;\n    },\n\n    /**\n     * @param  {number} cx\n     * @param  {number} cy\n     * @param  {number} r\n     * @param  {number} startAngle\n     * @param  {number} endAngle\n     * @param  {boolean} anticlockwise\n     * @return {module:zrender/core/PathProxy}\n     */\n    arc: function (cx, cy, r, startAngle, endAngle, anticlockwise) {\n        this.addData(\n            CMD.A, cx, cy, r, r, startAngle, endAngle - startAngle, 0, anticlockwise ? 0 : 1\n        );\n        this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n\n        this._xi = mathCos(endAngle) * r + cx;\n        this._yi = mathSin(endAngle) * r + cy;\n        return this;\n    },\n\n    // TODO\n    arcTo: function (x1, y1, x2, y2, radius) {\n        if (this._ctx) {\n            this._ctx.arcTo(x1, y1, x2, y2, radius);\n        }\n        return this;\n    },\n\n    // TODO\n    rect: function (x, y, w, h) {\n        this._ctx && this._ctx.rect(x, y, w, h);\n        this.addData(CMD.R, x, y, w, h);\n        return this;\n    },\n\n    /**\n     * @return {module:zrender/core/PathProxy}\n     */\n    closePath: function () {\n        this.addData(CMD.Z);\n\n        var ctx = this._ctx;\n        var x0 = this._x0;\n        var y0 = this._y0;\n        if (ctx) {\n            this._needsDash() && this._dashedLineTo(x0, y0);\n            ctx.closePath();\n        }\n\n        this._xi = x0;\n        this._yi = y0;\n        return this;\n    },\n\n    /**\n     * Context 从外部传入，因为有可能是 rebuildPath 完之后再 fill。\n     * stroke 同样\n     * @param {CanvasRenderingContext2D} ctx\n     * @return {module:zrender/core/PathProxy}\n     */\n    fill: function (ctx) {\n        ctx && ctx.fill();\n        this.toStatic();\n    },\n\n    /**\n     * @param {CanvasRenderingContext2D} ctx\n     * @return {module:zrender/core/PathProxy}\n     */\n    stroke: function (ctx) {\n        ctx && ctx.stroke();\n        this.toStatic();\n    },\n\n    /**\n     * 必须在其它绘制命令前调用\n     * Must be invoked before all other path drawing methods\n     * @return {module:zrender/core/PathProxy}\n     */\n    setLineDash: function (lineDash) {\n        if (lineDash instanceof Array) {\n            this._lineDash = lineDash;\n\n            this._dashIdx = 0;\n\n            var lineDashSum = 0;\n            for (var i = 0; i < lineDash.length; i++) {\n                lineDashSum += lineDash[i];\n            }\n            this._dashSum = lineDashSum;\n        }\n        return this;\n    },\n\n    /**\n     * 必须在其它绘制命令前调用\n     * Must be invoked before all other path drawing methods\n     * @return {module:zrender/core/PathProxy}\n     */\n    setLineDashOffset: function (offset) {\n        this._dashOffset = offset;\n        return this;\n    },\n\n    /**\n     *\n     * @return {boolean}\n     */\n    len: function () {\n        return this._len;\n    },\n\n    /**\n     * 直接设置 Path 数据\n     */\n    setData: function (data) {\n\n        var len = data.length;\n\n        if (!(this.data && this.data.length === len) && hasTypedArray) {\n            this.data = new Float32Array(len);\n        }\n\n        for (var i = 0; i < len; i++) {\n            this.data[i] = data[i];\n        }\n\n        this._len = len;\n    },\n\n    /**\n     * 添加子路径\n     * @param {module:zrender/core/PathProxy|Array.<module:zrender/core/PathProxy>} path\n     */\n    appendPath: function (path) {\n        if (!(path instanceof Array)) {\n            path = [path];\n        }\n        var len = path.length;\n        var appendSize = 0;\n        var offset = this._len;\n        for (var i = 0; i < len; i++) {\n            appendSize += path[i].len();\n        }\n        if (hasTypedArray && (this.data instanceof Float32Array)) {\n            this.data = new Float32Array(offset + appendSize);\n        }\n        for (var i = 0; i < len; i++) {\n            var appendPathData = path[i].data;\n            for (var k = 0; k < appendPathData.length; k++) {\n                this.data[offset++] = appendPathData[k];\n            }\n        }\n        this._len = offset;\n    },\n\n    /**\n     * 填充 Path 数据。\n     * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。\n     */\n    addData: function (cmd) {\n        if (!this._saveData) {\n            return;\n        }\n\n        var data = this.data;\n        if (this._len + arguments.length > data.length) {\n            // 因为之前的数组已经转换成静态的 Float32Array\n            // 所以不够用时需要扩展一个新的动态数组\n            this._expandData();\n            data = this.data;\n        }\n        for (var i = 0; i < arguments.length; i++) {\n            data[this._len++] = arguments[i];\n        }\n\n        this._prevCmd = cmd;\n    },\n\n    _expandData: function () {\n        // Only if data is Float32Array\n        if (!(this.data instanceof Array)) {\n            var newData = [];\n            for (var i = 0; i < this._len; i++) {\n                newData[i] = this.data[i];\n            }\n            this.data = newData;\n        }\n    },\n\n    /**\n     * If needs js implemented dashed line\n     * @return {boolean}\n     * @private\n     */\n    _needsDash: function () {\n        return this._lineDash;\n    },\n\n    _dashedLineTo: function (x1, y1) {\n        var dashSum = this._dashSum;\n        var offset = this._dashOffset;\n        var lineDash = this._lineDash;\n        var ctx = this._ctx;\n\n        var x0 = this._xi;\n        var y0 = this._yi;\n        var dx = x1 - x0;\n        var dy = y1 - y0;\n        var dist = mathSqrt(dx * dx + dy * dy);\n        var x = x0;\n        var y = y0;\n        var dash;\n        var nDash = lineDash.length;\n        var idx;\n        dx /= dist;\n        dy /= dist;\n\n        if (offset < 0) {\n            // Convert to positive offset\n            offset = dashSum + offset;\n        }\n        offset %= dashSum;\n        x -= offset * dx;\n        y -= offset * dy;\n\n        while ((dx > 0 && x <= x1) || (dx < 0 && x >= x1)\n        || (dx === 0 && ((dy > 0 && y <= y1) || (dy < 0 && y >= y1)))) {\n            idx = this._dashIdx;\n            dash = lineDash[idx];\n            x += dx * dash;\n            y += dy * dash;\n            this._dashIdx = (idx + 1) % nDash;\n            // Skip positive offset\n            if ((dx > 0 && x < x0) || (dx < 0 && x > x0) || (dy > 0 && y < y0) || (dy < 0 && y > y0)) {\n                continue;\n            }\n            ctx[idx % 2 ? 'moveTo' : 'lineTo'](\n                dx >= 0 ? mathMin(x, x1) : mathMax(x, x1),\n                dy >= 0 ? mathMin(y, y1) : mathMax(y, y1)\n            );\n        }\n        // Offset for next lineTo\n        dx = x - x1;\n        dy = y - y1;\n        this._dashOffset = -mathSqrt(dx * dx + dy * dy);\n    },\n\n    // Not accurate dashed line to\n    _dashedBezierTo: function (x1, y1, x2, y2, x3, y3) {\n        var dashSum = this._dashSum;\n        var offset = this._dashOffset;\n        var lineDash = this._lineDash;\n        var ctx = this._ctx;\n\n        var x0 = this._xi;\n        var y0 = this._yi;\n        var t;\n        var dx;\n        var dy;\n        var cubicAt = curve.cubicAt;\n        var bezierLen = 0;\n        var idx = this._dashIdx;\n        var nDash = lineDash.length;\n\n        var x;\n        var y;\n\n        var tmpLen = 0;\n\n        if (offset < 0) {\n            // Convert to positive offset\n            offset = dashSum + offset;\n        }\n        offset %= dashSum;\n        // Bezier approx length\n        for (t = 0; t < 1; t += 0.1) {\n            dx = cubicAt(x0, x1, x2, x3, t + 0.1)\n                - cubicAt(x0, x1, x2, x3, t);\n            dy = cubicAt(y0, y1, y2, y3, t + 0.1)\n                - cubicAt(y0, y1, y2, y3, t);\n            bezierLen += mathSqrt(dx * dx + dy * dy);\n        }\n\n        // Find idx after add offset\n        for (; idx < nDash; idx++) {\n            tmpLen += lineDash[idx];\n            if (tmpLen > offset) {\n                break;\n            }\n        }\n        t = (tmpLen - offset) / bezierLen;\n\n        while (t <= 1) {\n\n            x = cubicAt(x0, x1, x2, x3, t);\n            y = cubicAt(y0, y1, y2, y3, t);\n\n            // Use line to approximate dashed bezier\n            // Bad result if dash is long\n            idx % 2 ? ctx.moveTo(x, y)\n                : ctx.lineTo(x, y);\n\n            t += lineDash[idx] / bezierLen;\n\n            idx = (idx + 1) % nDash;\n        }\n\n        // Finish the last segment and calculate the new offset\n        (idx % 2 !== 0) && ctx.lineTo(x3, y3);\n        dx = x3 - x;\n        dy = y3 - y;\n        this._dashOffset = -mathSqrt(dx * dx + dy * dy);\n    },\n\n    _dashedQuadraticTo: function (x1, y1, x2, y2) {\n        // Convert quadratic to cubic using degree elevation\n        var x3 = x2;\n        var y3 = y2;\n        x2 = (x2 + 2 * x1) / 3;\n        y2 = (y2 + 2 * y1) / 3;\n        x1 = (this._xi + 2 * x1) / 3;\n        y1 = (this._yi + 2 * y1) / 3;\n\n        this._dashedBezierTo(x1, y1, x2, y2, x3, y3);\n    },\n\n    /**\n     * 转成静态的 Float32Array 减少堆内存占用\n     * Convert dynamic array to static Float32Array\n     */\n    toStatic: function () {\n        var data = this.data;\n        if (data instanceof Array) {\n            data.length = this._len;\n            if (hasTypedArray) {\n                this.data = new Float32Array(data);\n            }\n        }\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getBoundingRect: function () {\n        min[0] = min[1] = min2[0] = min2[1] = Number.MAX_VALUE;\n        max[0] = max[1] = max2[0] = max2[1] = -Number.MAX_VALUE;\n\n        var data = this.data;\n        var xi = 0;\n        var yi = 0;\n        var x0 = 0;\n        var y0 = 0;\n\n        for (var i = 0; i < data.length;) {\n            var cmd = data[i++];\n\n            if (i === 1) {\n                // 如果第一个命令是 L, C, Q\n                // 则 previous point 同绘制命令的第一个 point\n                //\n                // 第一个命令为 Arc 的情况下会在后面特殊处理\n                xi = data[i];\n                yi = data[i + 1];\n\n                x0 = xi;\n                y0 = yi;\n            }\n\n            switch (cmd) {\n                case CMD.M:\n                    // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n                    // 在 closePath 的时候使用\n                    x0 = data[i++];\n                    y0 = data[i++];\n                    xi = x0;\n                    yi = y0;\n                    min2[0] = x0;\n                    min2[1] = y0;\n                    max2[0] = x0;\n                    max2[1] = y0;\n                    break;\n                case CMD.L:\n                    bbox.fromLine(xi, yi, data[i], data[i + 1], min2, max2);\n                    xi = data[i++];\n                    yi = data[i++];\n                    break;\n                case CMD.C:\n                    bbox.fromCubic(\n                        xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n                        min2, max2\n                    );\n                    xi = data[i++];\n                    yi = data[i++];\n                    break;\n                case CMD.Q:\n                    bbox.fromQuadratic(\n                        xi, yi, data[i++], data[i++], data[i], data[i + 1],\n                        min2, max2\n                    );\n                    xi = data[i++];\n                    yi = data[i++];\n                    break;\n                case CMD.A:\n                    // TODO Arc 判断的开销比较大\n                    var cx = data[i++];\n                    var cy = data[i++];\n                    var rx = data[i++];\n                    var ry = data[i++];\n                    var startAngle = data[i++];\n                    var endAngle = data[i++] + startAngle;\n                    // TODO Arc 旋转\n                    i += 1;\n                    var anticlockwise = 1 - data[i++];\n\n                    if (i === 1) {\n                        // 直接使用 arc 命令\n                        // 第一个命令起点还未定义\n                        x0 = mathCos(startAngle) * rx + cx;\n                        y0 = mathSin(startAngle) * ry + cy;\n                    }\n\n                    bbox.fromArc(\n                        cx, cy, rx, ry, startAngle, endAngle,\n                        anticlockwise, min2, max2\n                    );\n\n                    xi = mathCos(endAngle) * rx + cx;\n                    yi = mathSin(endAngle) * ry + cy;\n                    break;\n                case CMD.R:\n                    x0 = xi = data[i++];\n                    y0 = yi = data[i++];\n                    var width = data[i++];\n                    var height = data[i++];\n                    // Use fromLine\n                    bbox.fromLine(x0, y0, x0 + width, y0 + height, min2, max2);\n                    break;\n                case CMD.Z:\n                    xi = x0;\n                    yi = y0;\n                    break;\n            }\n\n            // Union\n            vec2.min(min, min, min2);\n            vec2.max(max, max, max2);\n        }\n\n        // No data\n        if (i === 0) {\n            min[0] = min[1] = max[0] = max[1] = 0;\n        }\n\n        return new BoundingRect(\n            min[0], min[1], max[0] - min[0], max[1] - min[1]\n        );\n    },\n\n    /**\n     * Rebuild path from current data\n     * Rebuild path will not consider javascript implemented line dash.\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    rebuildPath: function (ctx) {\n        var d = this.data;\n        var x0;\n        var y0;\n        var xi;\n        var yi;\n        var x;\n        var y;\n        var ux = this._ux;\n        var uy = this._uy;\n        var len = this._len;\n        for (var i = 0; i < len;) {\n            var cmd = d[i++];\n\n            if (i === 1) {\n                // 如果第一个命令是 L, C, Q\n                // 则 previous point 同绘制命令的第一个 point\n                //\n                // 第一个命令为 Arc 的情况下会在后面特殊处理\n                xi = d[i];\n                yi = d[i + 1];\n\n                x0 = xi;\n                y0 = yi;\n            }\n            switch (cmd) {\n                case CMD.M:\n                    x0 = xi = d[i++];\n                    y0 = yi = d[i++];\n                    ctx.moveTo(xi, yi);\n                    break;\n                case CMD.L:\n                    x = d[i++];\n                    y = d[i++];\n                    // Not draw too small seg between\n                    if (mathAbs(x - xi) > ux || mathAbs(y - yi) > uy || i === len - 1) {\n                        ctx.lineTo(x, y);\n                        xi = x;\n                        yi = y;\n                    }\n                    break;\n                case CMD.C:\n                    ctx.bezierCurveTo(\n                        d[i++], d[i++], d[i++], d[i++], d[i++], d[i++]\n                    );\n                    xi = d[i - 2];\n                    yi = d[i - 1];\n                    break;\n                case CMD.Q:\n                    ctx.quadraticCurveTo(d[i++], d[i++], d[i++], d[i++]);\n                    xi = d[i - 2];\n                    yi = d[i - 1];\n                    break;\n                case CMD.A:\n                    var cx = d[i++];\n                    var cy = d[i++];\n                    var rx = d[i++];\n                    var ry = d[i++];\n                    var theta = d[i++];\n                    var dTheta = d[i++];\n                    var psi = d[i++];\n                    var fs = d[i++];\n                    var r = (rx > ry) ? rx : ry;\n                    var scaleX = (rx > ry) ? 1 : rx / ry;\n                    var scaleY = (rx > ry) ? ry / rx : 1;\n                    var isEllipse = Math.abs(rx - ry) > 1e-3;\n                    var endAngle = theta + dTheta;\n                    if (isEllipse) {\n                        ctx.translate(cx, cy);\n                        ctx.rotate(psi);\n                        ctx.scale(scaleX, scaleY);\n                        ctx.arc(0, 0, r, theta, endAngle, 1 - fs);\n                        ctx.scale(1 / scaleX, 1 / scaleY);\n                        ctx.rotate(-psi);\n                        ctx.translate(-cx, -cy);\n                    }\n                    else {\n                        ctx.arc(cx, cy, r, theta, endAngle, 1 - fs);\n                    }\n\n                    if (i === 1) {\n                        // 直接使用 arc 命令\n                        // 第一个命令起点还未定义\n                        x0 = mathCos(theta) * rx + cx;\n                        y0 = mathSin(theta) * ry + cy;\n                    }\n                    xi = mathCos(endAngle) * rx + cx;\n                    yi = mathSin(endAngle) * ry + cy;\n                    break;\n                case CMD.R:\n                    x0 = xi = d[i];\n                    y0 = yi = d[i + 1];\n                    ctx.rect(d[i++], d[i++], d[i++], d[i++]);\n                    break;\n                case CMD.Z:\n                    ctx.closePath();\n                    xi = x0;\n                    yi = y0;\n            }\n        }\n    }\n};\n\nPathProxy.CMD = CMD;\n\nexport default PathProxy;","\n/**\n * 线段包含判断\n * @param  {number}  x0\n * @param  {number}  y0\n * @param  {number}  x1\n * @param  {number}  y1\n * @param  {number}  lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {boolean}\n */\nexport function containStroke(x0, y0, x1, y1, lineWidth, x, y) {\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _l = lineWidth;\n    var _a = 0;\n    var _b = x0;\n    // Quick reject\n    if (\n        (y > y0 + _l && y > y1 + _l)\n        || (y < y0 - _l && y < y1 - _l)\n        || (x > x0 + _l && x > x1 + _l)\n        || (x < x0 - _l && x < x1 - _l)\n    ) {\n        return false;\n    }\n\n    if (x0 !== x1) {\n        _a = (y0 - y1) / (x0 - x1);\n        _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n    }\n    else {\n        return Math.abs(x - x0) <= _l / 2;\n    }\n    var tmp = _a * x - y + _b;\n    var _s = tmp * tmp / (_a * _a + 1);\n    return _s <= _l / 2 * _l / 2;\n}","\nimport * as curve from '../core/curve';\n\n/**\n * 三次贝塞尔曲线描边包含判断\n * @param  {number}  x0\n * @param  {number}  y0\n * @param  {number}  x1\n * @param  {number}  y1\n * @param  {number}  x2\n * @param  {number}  y2\n * @param  {number}  x3\n * @param  {number}  y3\n * @param  {number}  lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {boolean}\n */\nexport function containStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _l = lineWidth;\n    // Quick reject\n    if (\n        (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l)\n        || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l)\n        || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l)\n        || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)\n    ) {\n        return false;\n    }\n    var d = curve.cubicProjectPoint(\n        x0, y0, x1, y1, x2, y2, x3, y3,\n        x, y, null\n    );\n    return d <= _l / 2;\n}","import {quadraticProjectPoint} from '../core/curve';\n\n/**\n * 二次贝塞尔曲线描边包含判断\n * @param  {number}  x0\n * @param  {number}  y0\n * @param  {number}  x1\n * @param  {number}  y1\n * @param  {number}  x2\n * @param  {number}  y2\n * @param  {number}  lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {boolean}\n */\nexport function containStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _l = lineWidth;\n    // Quick reject\n    if (\n        (y > y0 + _l && y > y1 + _l && y > y2 + _l)\n        || (y < y0 - _l && y < y1 - _l && y < y2 - _l)\n        || (x > x0 + _l && x > x1 + _l && x > x2 + _l)\n        || (x < x0 - _l && x < x1 - _l && x < x2 - _l)\n    ) {\n        return false;\n    }\n    var d = quadraticProjectPoint(\n        x0, y0, x1, y1, x2, y2,\n        x, y, null\n    );\n    return d <= _l / 2;\n}\n","\nvar PI2 = Math.PI * 2;\n\nexport function normalizeRadian(angle) {\n    angle %= PI2;\n    if (angle < 0) {\n        angle += PI2;\n    }\n    return angle;\n}","\nimport {normalizeRadian} from './util';\n\nvar PI2 = Math.PI * 2;\n\n/**\n * 圆弧描边包含判断\n * @param  {number}  cx\n * @param  {number}  cy\n * @param  {number}  r\n * @param  {number}  startAngle\n * @param  {number}  endAngle\n * @param  {boolean}  anticlockwise\n * @param  {number} lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {Boolean}\n */\nexport function containStroke(\n    cx, cy, r, startAngle, endAngle, anticlockwise,\n    lineWidth, x, y\n) {\n\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _l = lineWidth;\n\n    x -= cx;\n    y -= cy;\n    var d = Math.sqrt(x * x + y * y);\n\n    if ((d - _l > r) || (d + _l < r)) {\n        return false;\n    }\n    if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n        // Is a circle\n        return true;\n    }\n    if (anticlockwise) {\n        var tmp = startAngle;\n        startAngle = normalizeRadian(endAngle);\n        endAngle = normalizeRadian(tmp);\n    }\n    else {\n        startAngle = normalizeRadian(startAngle);\n        endAngle = normalizeRadian(endAngle);\n    }\n    if (startAngle > endAngle) {\n        endAngle += PI2;\n    }\n\n    var angle = Math.atan2(y, x);\n    if (angle < 0) {\n        angle += PI2;\n    }\n    return (angle >= startAngle && angle <= endAngle)\n        || (angle + PI2 >= startAngle && angle + PI2 <= endAngle);\n}","\nexport default function windingLine(x0, y0, x1, y1, x, y) {\n    if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n        return 0;\n    }\n    // Ignore horizontal line\n    if (y1 === y0) {\n        return 0;\n    }\n    var dir = y1 < y0 ? 1 : -1;\n    var t = (y - y0) / (y1 - y0);\n\n    // Avoid winding error when intersection point is the connect point of two line of polygon\n    if (t === 1 || t === 0) {\n        dir = y1 < y0 ? 0.5 : -0.5;\n    }\n\n    var x_ = t * (x1 - x0) + x0;\n\n    // If (x, y) on the line, considered as \"contain\".\n    return x_ === x ? Infinity : x_ > x ? dir : 0;\n}","import PathProxy from '../core/PathProxy';\nimport * as line from './line';\nimport * as cubic from './cubic';\nimport * as quadratic from './quadratic';\nimport * as arc from './arc';\nimport {normalizeRadian} from './util';\nimport * as curve from '../core/curve';\nimport windingLine from './windingLine';\n\nvar CMD = PathProxy.CMD;\nvar PI2 = Math.PI * 2;\n\nvar EPSILON = 1e-4;\n\nfunction isAroundEqual(a, b) {\n    return Math.abs(a - b) < EPSILON;\n}\n\n// 临时数组\nvar roots = [-1, -1, -1];\nvar extrema = [-1, -1];\n\nfunction swapExtrema() {\n    var tmp = extrema[0];\n    extrema[0] = extrema[1];\n    extrema[1] = tmp;\n}\n\nfunction windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {\n    // Quick reject\n    if (\n        (y > y0 && y > y1 && y > y2 && y > y3)\n        || (y < y0 && y < y1 && y < y2 && y < y3)\n    ) {\n        return 0;\n    }\n    var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\n    if (nRoots === 0) {\n        return 0;\n    }\n    else {\n        var w = 0;\n        var nExtrema = -1;\n        var y0_;\n        var y1_;\n        for (var i = 0; i < nRoots; i++) {\n            var t = roots[i];\n\n            // Avoid winding error when intersection point is the connect point of two line of polygon\n            var unit = (t === 0 || t === 1) ? 0.5 : 1;\n\n            var x_ = curve.cubicAt(x0, x1, x2, x3, t);\n            if (x_ < x) { // Quick reject\n                continue;\n            }\n            if (nExtrema < 0) {\n                nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);\n                if (extrema[1] < extrema[0] && nExtrema > 1) {\n                    swapExtrema();\n                }\n                y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);\n                if (nExtrema > 1) {\n                    y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);\n                }\n            }\n            if (nExtrema === 2) {\n                // 分成三段单调函数\n                if (t < extrema[0]) {\n                    w += y0_ < y0 ? unit : -unit;\n                }\n                else if (t < extrema[1]) {\n                    w += y1_ < y0_ ? unit : -unit;\n                }\n                else {\n                    w += y3 < y1_ ? unit : -unit;\n                }\n            }\n            else {\n                // 分成两段单调函数\n                if (t < extrema[0]) {\n                    w += y0_ < y0 ? unit : -unit;\n                }\n                else {\n                    w += y3 < y0_ ? unit : -unit;\n                }\n            }\n        }\n        return w;\n    }\n}\n\nfunction windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {\n    // Quick reject\n    if (\n        (y > y0 && y > y1 && y > y2)\n        || (y < y0 && y < y1 && y < y2)\n    ) {\n        return 0;\n    }\n    var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\n    if (nRoots === 0) {\n        return 0;\n    }\n    else {\n        var t = curve.quadraticExtremum(y0, y1, y2);\n        if (t >= 0 && t <= 1) {\n            var w = 0;\n            var y_ = curve.quadraticAt(y0, y1, y2, t);\n            for (var i = 0; i < nRoots; i++) {\n                // Remove one endpoint.\n                var unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1;\n\n                var x_ = curve.quadraticAt(x0, x1, x2, roots[i]);\n                if (x_ < x) {   // Quick reject\n                    continue;\n                }\n                if (roots[i] < t) {\n                    w += y_ < y0 ? unit : -unit;\n                }\n                else {\n                    w += y2 < y_ ? unit : -unit;\n                }\n            }\n            return w;\n        }\n        else {\n            // Remove one endpoint.\n            var unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1;\n\n            var x_ = curve.quadraticAt(x0, x1, x2, roots[0]);\n            if (x_ < x) {   // Quick reject\n                return 0;\n            }\n            return y2 < y0 ? unit : -unit;\n        }\n    }\n}\n\n// TODO\n// Arc 旋转\nfunction windingArc(\n    cx, cy, r, startAngle, endAngle, anticlockwise, x, y\n) {\n    y -= cy;\n    if (y > r || y < -r) {\n        return 0;\n    }\n    var tmp = Math.sqrt(r * r - y * y);\n    roots[0] = -tmp;\n    roots[1] = tmp;\n\n    var diff = Math.abs(startAngle - endAngle);\n    if (diff < 1e-4) {\n        return 0;\n    }\n    if (diff % PI2 < 1e-4) {\n        // Is a circle\n        startAngle = 0;\n        endAngle = PI2;\n        var dir = anticlockwise ? 1 : -1;\n        if (x >= roots[0] + cx && x <= roots[1] + cx) {\n            return dir;\n        }\n        else {\n            return 0;\n        }\n    }\n\n    if (anticlockwise) {\n        var tmp = startAngle;\n        startAngle = normalizeRadian(endAngle);\n        endAngle = normalizeRadian(tmp);\n    }\n    else {\n        startAngle = normalizeRadian(startAngle);\n        endAngle = normalizeRadian(endAngle);\n    }\n    if (startAngle > endAngle) {\n        endAngle += PI2;\n    }\n\n    var w = 0;\n    for (var i = 0; i < 2; i++) {\n        var x_ = roots[i];\n        if (x_ + cx > x) {\n            var angle = Math.atan2(y, x_);\n            var dir = anticlockwise ? 1 : -1;\n            if (angle < 0) {\n                angle = PI2 + angle;\n            }\n            if (\n                (angle >= startAngle && angle <= endAngle)\n                || (angle + PI2 >= startAngle && angle + PI2 <= endAngle)\n            ) {\n                if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\n                    dir = -dir;\n                }\n                w += dir;\n            }\n        }\n    }\n    return w;\n}\n\nfunction containPath(data, lineWidth, isStroke, x, y) {\n    var w = 0;\n    var xi = 0;\n    var yi = 0;\n    var x0 = 0;\n    var y0 = 0;\n\n    for (var i = 0; i < data.length;) {\n        var cmd = data[i++];\n        // Begin a new subpath\n        if (cmd === CMD.M && i > 1) {\n            // Close previous subpath\n            if (!isStroke) {\n                w += windingLine(xi, yi, x0, y0, x, y);\n            }\n            // 如果被任何一个 subpath 包含\n            // if (w !== 0) {\n            //     return true;\n            // }\n        }\n\n        if (i === 1) {\n            // 如果第一个命令是 L, C, Q\n            // 则 previous point 同绘制命令的第一个 point\n            //\n            // 第一个命令为 Arc 的情况下会在后面特殊处理\n            xi = data[i];\n            yi = data[i + 1];\n\n            x0 = xi;\n            y0 = yi;\n        }\n\n        switch (cmd) {\n            case CMD.M:\n                // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n                // 在 closePath 的时候使用\n                x0 = data[i++];\n                y0 = data[i++];\n                xi = x0;\n                yi = y0;\n                break;\n            case CMD.L:\n                if (isStroke) {\n                    if (line.containStroke(xi, yi, data[i], data[i + 1], lineWidth, x, y)) {\n                        return true;\n                    }\n                }\n                else {\n                    // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n                    w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\n                }\n                xi = data[i++];\n                yi = data[i++];\n                break;\n            case CMD.C:\n                if (isStroke) {\n                    if (cubic.containStroke(xi, yi,\n                        data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n                        lineWidth, x, y\n                    )) {\n                        return true;\n                    }\n                }\n                else {\n                    w += windingCubic(\n                        xi, yi,\n                        data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n                        x, y\n                    ) || 0;\n                }\n                xi = data[i++];\n                yi = data[i++];\n                break;\n            case CMD.Q:\n                if (isStroke) {\n                    if (quadratic.containStroke(xi, yi,\n                        data[i++], data[i++], data[i], data[i + 1],\n                        lineWidth, x, y\n                    )) {\n                        return true;\n                    }\n                }\n                else {\n                    w += windingQuadratic(\n                        xi, yi,\n                        data[i++], data[i++], data[i], data[i + 1],\n                        x, y\n                    ) || 0;\n                }\n                xi = data[i++];\n                yi = data[i++];\n                break;\n            case CMD.A:\n                // TODO Arc 判断的开销比较大\n                var cx = data[i++];\n                var cy = data[i++];\n                var rx = data[i++];\n                var ry = data[i++];\n                var theta = data[i++];\n                var dTheta = data[i++];\n                // TODO Arc 旋转\n                i += 1;\n                var anticlockwise = 1 - data[i++];\n                var x1 = Math.cos(theta) * rx + cx;\n                var y1 = Math.sin(theta) * ry + cy;\n                // 不是直接使用 arc 命令\n                if (i > 1) {\n                    w += windingLine(xi, yi, x1, y1, x, y);\n                }\n                else {\n                    // 第一个命令起点还未定义\n                    x0 = x1;\n                    y0 = y1;\n                }\n                // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n                var _x = (x - cx) * ry / rx + cx;\n                if (isStroke) {\n                    if (arc.containStroke(\n                        cx, cy, ry, theta, theta + dTheta, anticlockwise,\n                        lineWidth, _x, y\n                    )) {\n                        return true;\n                    }\n                }\n                else {\n                    w += windingArc(\n                        cx, cy, ry, theta, theta + dTheta, anticlockwise,\n                        _x, y\n                    );\n                }\n                xi = Math.cos(theta + dTheta) * rx + cx;\n                yi = Math.sin(theta + dTheta) * ry + cy;\n                break;\n            case CMD.R:\n                x0 = xi = data[i++];\n                y0 = yi = data[i++];\n                var width = data[i++];\n                var height = data[i++];\n                var x1 = x0 + width;\n                var y1 = y0 + height;\n                if (isStroke) {\n                    if (line.containStroke(x0, y0, x1, y0, lineWidth, x, y)\n                        || line.containStroke(x1, y0, x1, y1, lineWidth, x, y)\n                        || line.containStroke(x1, y1, x0, y1, lineWidth, x, y)\n                        || line.containStroke(x0, y1, x0, y0, lineWidth, x, y)\n                    ) {\n                        return true;\n                    }\n                }\n                else {\n                    // FIXME Clockwise ?\n                    w += windingLine(x1, y0, x1, y1, x, y);\n                    w += windingLine(x0, y1, x0, y0, x, y);\n                }\n                break;\n            case CMD.Z:\n                if (isStroke) {\n                    if (line.containStroke(\n                        xi, yi, x0, y0, lineWidth, x, y\n                    )) {\n                        return true;\n                    }\n                }\n                else {\n                    // Close a subpath\n                    w += windingLine(xi, yi, x0, y0, x, y);\n                    // 如果被任何一个 subpath 包含\n                    // FIXME subpaths may overlap\n                    // if (w !== 0) {\n                    //     return true;\n                    // }\n                }\n                xi = x0;\n                yi = y0;\n                break;\n        }\n    }\n    if (!isStroke && !isAroundEqual(yi, y0)) {\n        w += windingLine(xi, yi, x0, y0, x, y) || 0;\n    }\n    return w !== 0;\n}\n\nexport function contain(pathData, x, y) {\n    return containPath(pathData, 0, false, x, y);\n}\n\nexport function containStroke(pathData, lineWidth, x, y) {\n    return containPath(pathData, lineWidth, true, x, y);\n}","import Displayable from './Displayable';\nimport * as zrUtil from '../core/util';\nimport PathProxy from '../core/PathProxy';\nimport * as pathContain from '../contain/path';\nimport Pattern from './Pattern';\n\nvar getCanvasPattern = Pattern.prototype.getCanvasPattern;\n\nvar abs = Math.abs;\n\nvar pathProxyForDraw = new PathProxy(true);\n/**\n * @alias module:zrender/graphic/Path\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nfunction Path(opts) {\n    Displayable.call(this, opts);\n\n    /**\n     * @type {module:zrender/core/PathProxy}\n     * @readOnly\n     */\n    this.path = null;\n}\n\nPath.prototype = {\n\n    constructor: Path,\n\n    type: 'path',\n\n    __dirtyPath: true,\n\n    strokeContainThreshold: 5,\n\n    // This item default to be false. But in map series in echarts,\n    // in order to improve performance, it should be set to true,\n    // so the shorty segment won't draw.\n    segmentIgnoreThreshold: 0,\n\n    /**\n     * See `module:zrender/src/graphic/helper/subPixelOptimize`.\n     * @type {boolean}\n     */\n    subPixelOptimize: false,\n\n    brush: function (ctx, prevEl) {\n        var style = this.style;\n        var path = this.path || pathProxyForDraw;\n        var hasStroke = style.hasStroke();\n        var hasFill = style.hasFill();\n        var fill = style.fill;\n        var stroke = style.stroke;\n        var hasFillGradient = hasFill && !!(fill.colorStops);\n        var hasStrokeGradient = hasStroke && !!(stroke.colorStops);\n        var hasFillPattern = hasFill && !!(fill.image);\n        var hasStrokePattern = hasStroke && !!(stroke.image);\n\n        style.bind(ctx, this, prevEl);\n        this.setTransform(ctx);\n\n        if (this.__dirty) {\n            var rect;\n            // Update gradient because bounding rect may changed\n            if (hasFillGradient) {\n                rect = rect || this.getBoundingRect();\n                this._fillGradient = style.getGradient(ctx, fill, rect);\n            }\n            if (hasStrokeGradient) {\n                rect = rect || this.getBoundingRect();\n                this._strokeGradient = style.getGradient(ctx, stroke, rect);\n            }\n        }\n        // Use the gradient or pattern\n        if (hasFillGradient) {\n            // PENDING If may have affect the state\n            ctx.fillStyle = this._fillGradient;\n        }\n        else if (hasFillPattern) {\n            ctx.fillStyle = getCanvasPattern.call(fill, ctx);\n        }\n        if (hasStrokeGradient) {\n            ctx.strokeStyle = this._strokeGradient;\n        }\n        else if (hasStrokePattern) {\n            ctx.strokeStyle = getCanvasPattern.call(stroke, ctx);\n        }\n\n        var lineDash = style.lineDash;\n        var lineDashOffset = style.lineDashOffset;\n\n        var ctxLineDash = !!ctx.setLineDash;\n\n        // Update path sx, sy\n        var scale = this.getGlobalScale();\n        path.setScale(scale[0], scale[1], this.segmentIgnoreThreshold);\n\n        // Proxy context\n        // Rebuild path in following 2 cases\n        // 1. Path is dirty\n        // 2. Path needs javascript implemented lineDash stroking.\n        //    In this case, lineDash information will not be saved in PathProxy\n        if (this.__dirtyPath\n            || (lineDash && !ctxLineDash && hasStroke)\n        ) {\n            path.beginPath(ctx);\n\n            // Setting line dash before build path\n            if (lineDash && !ctxLineDash) {\n                path.setLineDash(lineDash);\n                path.setLineDashOffset(lineDashOffset);\n            }\n\n            this.buildPath(path, this.shape, false);\n\n            // Clear path dirty flag\n            if (this.path) {\n                this.__dirtyPath = false;\n            }\n        }\n        else {\n            // Replay path building\n            ctx.beginPath();\n            this.path.rebuildPath(ctx);\n        }\n\n        if (hasFill) {\n            if (style.fillOpacity != null) {\n                var originalGlobalAlpha = ctx.globalAlpha;\n                ctx.globalAlpha = style.fillOpacity * style.opacity;\n                path.fill(ctx);\n                ctx.globalAlpha = originalGlobalAlpha;\n            }\n            else {\n                path.fill(ctx);\n            }\n        }\n\n        if (lineDash && ctxLineDash) {\n            ctx.setLineDash(lineDash);\n            ctx.lineDashOffset = lineDashOffset;\n        }\n\n        if (hasStroke) {\n            if (style.strokeOpacity != null) {\n                var originalGlobalAlpha = ctx.globalAlpha;\n                ctx.globalAlpha = style.strokeOpacity * style.opacity;\n                path.stroke(ctx);\n                ctx.globalAlpha = originalGlobalAlpha;\n            }\n            else {\n                path.stroke(ctx);\n            }\n        }\n\n        if (lineDash && ctxLineDash) {\n            // PENDING\n            // Remove lineDash\n            ctx.setLineDash([]);\n        }\n\n        // Draw rect text\n        if (style.text != null) {\n            // Only restore transform when needs draw text.\n            this.restoreTransform(ctx);\n            this.drawRectText(ctx, this.getBoundingRect());\n        }\n    },\n\n    // When bundling path, some shape may decide if use moveTo to begin a new subpath or closePath\n    // Like in circle\n    buildPath: function (ctx, shapeCfg, inBundle) {},\n\n    createPathProxy: function () {\n        this.path = new PathProxy();\n    },\n\n    getBoundingRect: function () {\n        var rect = this._rect;\n        var style = this.style;\n        var needsUpdateRect = !rect;\n        if (needsUpdateRect) {\n            var path = this.path;\n            if (!path) {\n                // Create path on demand.\n                path = this.path = new PathProxy();\n            }\n            if (this.__dirtyPath) {\n                path.beginPath();\n                this.buildPath(path, this.shape, false);\n            }\n            rect = path.getBoundingRect();\n        }\n        this._rect = rect;\n\n        if (style.hasStroke()) {\n            // Needs update rect with stroke lineWidth when\n            // 1. Element changes scale or lineWidth\n            // 2. Shape is changed\n            var rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone());\n            if (this.__dirty || needsUpdateRect) {\n                rectWithStroke.copy(rect);\n                // FIXME Must after updateTransform\n                var w = style.lineWidth;\n                // PENDING, Min line width is needed when line is horizontal or vertical\n                var lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n\n                // Only add extra hover lineWidth when there are no fill\n                if (!style.hasFill()) {\n                    w = Math.max(w, this.strokeContainThreshold || 4);\n                }\n                // Consider line width\n                // Line scale can't be 0;\n                if (lineScale > 1e-10) {\n                    rectWithStroke.width += w / lineScale;\n                    rectWithStroke.height += w / lineScale;\n                    rectWithStroke.x -= w / lineScale / 2;\n                    rectWithStroke.y -= w / lineScale / 2;\n                }\n            }\n\n            // Return rect with stroke\n            return rectWithStroke;\n        }\n\n        return rect;\n    },\n\n    contain: function (x, y) {\n        var localPos = this.transformCoordToLocal(x, y);\n        var rect = this.getBoundingRect();\n        var style = this.style;\n        x = localPos[0];\n        y = localPos[1];\n\n        if (rect.contain(x, y)) {\n            var pathData = this.path.data;\n            if (style.hasStroke()) {\n                var lineWidth = style.lineWidth;\n                var lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n                // Line scale can't be 0;\n                if (lineScale > 1e-10) {\n                    // Only add extra hover lineWidth when there are no fill\n                    if (!style.hasFill()) {\n                        lineWidth = Math.max(lineWidth, this.strokeContainThreshold);\n                    }\n                    if (pathContain.containStroke(\n                        pathData, lineWidth / lineScale, x, y\n                    )) {\n                        return true;\n                    }\n                }\n            }\n            if (style.hasFill()) {\n                return pathContain.contain(pathData, x, y);\n            }\n        }\n        return false;\n    },\n\n    /**\n     * @param  {boolean} dirtyPath\n     */\n    dirty: function (dirtyPath) {\n        if (dirtyPath == null) {\n            dirtyPath = true;\n        }\n        // Only mark dirty, not mark clean\n        if (dirtyPath) {\n            this.__dirtyPath = dirtyPath;\n            this._rect = null;\n        }\n\n        this.__dirty = this.__dirtyText = true;\n\n        this.__zr && this.__zr.refresh();\n\n        // Used as a clipping path\n        if (this.__clipTarget) {\n            this.__clipTarget.dirty();\n        }\n    },\n\n    /**\n     * Alias for animate('shape')\n     * @param {boolean} loop\n     */\n    animateShape: function (loop) {\n        return this.animate('shape', loop);\n    },\n\n    // Overwrite attrKV\n    attrKV: function (key, value) {\n        // FIXME\n        if (key === 'shape') {\n            this.setShape(value);\n            this.__dirtyPath = true;\n            this._rect = null;\n        }\n        else {\n            Displayable.prototype.attrKV.call(this, key, value);\n        }\n    },\n\n    /**\n     * @param {Object|string} key\n     * @param {*} value\n     */\n    setShape: function (key, value) {\n        var shape = this.shape;\n        // Path from string may not have shape\n        if (shape) {\n            if (zrUtil.isObject(key)) {\n                for (var name in key) {\n                    if (key.hasOwnProperty(name)) {\n                        shape[name] = key[name];\n                    }\n                }\n            }\n            else {\n                shape[key] = value;\n            }\n            this.dirty(true);\n        }\n        return this;\n    },\n\n    getLineScale: function () {\n        var m = this.transform;\n        // Get the line scale.\n        // Determinant of `m` means how much the area is enlarged by the\n        // transformation. So its square root can be used as a scale factor\n        // for width.\n        return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10\n            ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1]))\n            : 1;\n    }\n};\n\n/**\n * 扩展一个 Path element, 比如星形，圆等。\n * Extend a path element\n * @param {Object} props\n * @param {string} props.type Path type\n * @param {Function} props.init Initialize\n * @param {Function} props.buildPath Overwrite buildPath method\n * @param {Object} [props.style] Extended default style config\n * @param {Object} [props.shape] Extended default shape config\n */\nPath.extend = function (defaults) {\n    var Sub = function (opts) {\n        Path.call(this, opts);\n\n        if (defaults.style) {\n            // Extend default style\n            this.style.extendFrom(defaults.style, false);\n        }\n\n        // Extend default shape\n        var defaultShape = defaults.shape;\n        if (defaultShape) {\n            this.shape = this.shape || {};\n            var thisShape = this.shape;\n            for (var name in defaultShape) {\n                if (\n                    !thisShape.hasOwnProperty(name)\n                    && defaultShape.hasOwnProperty(name)\n                ) {\n                    thisShape[name] = defaultShape[name];\n                }\n            }\n        }\n\n        defaults.init && defaults.init.call(this, opts);\n    };\n\n    zrUtil.inherits(Sub, Path);\n\n    // FIXME 不能 extend position, rotation 等引用对象\n    for (var name in defaults) {\n        // Extending prototype values and methods\n        if (name !== 'style' && name !== 'shape') {\n            Sub.prototype[name] = defaults[name];\n        }\n    }\n\n    return Sub;\n};\n\nzrUtil.inherits(Path, Displayable);\n\nexport default Path;","import PathProxy from '../core/PathProxy';\nimport {applyTransform as v2ApplyTransform} from '../core/vector';\n\nvar CMD = PathProxy.CMD;\n\nvar points = [[], [], []];\nvar mathSqrt = Math.sqrt;\nvar mathAtan2 = Math.atan2;\n\nexport default function (path, m) {\n    var data = path.data;\n    var cmd;\n    var nPoint;\n    var i;\n    var j;\n    var k;\n    var p;\n\n    var M = CMD.M;\n    var C = CMD.C;\n    var L = CMD.L;\n    var R = CMD.R;\n    var A = CMD.A;\n    var Q = CMD.Q;\n\n    for (i = 0, j = 0; i < data.length;) {\n        cmd = data[i++];\n        j = i;\n        nPoint = 0;\n\n        switch (cmd) {\n            case M:\n                nPoint = 1;\n                break;\n            case L:\n                nPoint = 1;\n                break;\n            case C:\n                nPoint = 3;\n                break;\n            case Q:\n                nPoint = 2;\n                break;\n            case A:\n                var x = m[4];\n                var y = m[5];\n                var sx = mathSqrt(m[0] * m[0] + m[1] * m[1]);\n                var sy = mathSqrt(m[2] * m[2] + m[3] * m[3]);\n                var angle = mathAtan2(-m[1] / sy, m[0] / sx);\n                // cx\n                data[i] *= sx;\n                data[i++] += x;\n                // cy\n                data[i] *= sy;\n                data[i++] += y;\n                // Scale rx and ry\n                // FIXME Assume psi is 0 here\n                data[i++] *= sx;\n                data[i++] *= sy;\n\n                // Start angle\n                data[i++] += angle;\n                // end angle\n                data[i++] += angle;\n                // FIXME psi\n                i += 2;\n                j = i;\n                break;\n            case R:\n                // x0, y0\n                p[0] = data[i++];\n                p[1] = data[i++];\n                v2ApplyTransform(p, p, m);\n                data[j++] = p[0];\n                data[j++] = p[1];\n                // x1, y1\n                p[0] += data[i++];\n                p[1] += data[i++];\n                v2ApplyTransform(p, p, m);\n                data[j++] = p[0];\n                data[j++] = p[1];\n        }\n\n        for (k = 0; k < nPoint; k++) {\n            var p = points[k];\n            p[0] = data[i++];\n            p[1] = data[i++];\n\n            v2ApplyTransform(p, p, m);\n            // Write back\n            data[j++] = p[0];\n            data[j++] = p[1];\n        }\n    }\n}\n","import Path from '../graphic/Path';\nimport PathProxy from '../core/PathProxy';\nimport transformPath from './transformPath';\n\n// command chars\n// var cc = [\n//     'm', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z',\n//     'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'\n// ];\n\nvar mathSqrt = Math.sqrt;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\n\nvar vMag = function (v) {\n    return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n};\nvar vRatio = function (u, v) {\n    return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n};\nvar vAngle = function (u, v) {\n    return (u[0] * v[1] < u[1] * v[0] ? -1 : 1)\n            * Math.acos(vRatio(u, v));\n};\n\nfunction processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) {\n    var psi = psiDeg * (PI / 180.0);\n    var xp = mathCos(psi) * (x1 - x2) / 2.0\n                + mathSin(psi) * (y1 - y2) / 2.0;\n    var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0\n                + mathCos(psi) * (y1 - y2) / 2.0;\n\n    var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n\n    if (lambda > 1) {\n        rx *= mathSqrt(lambda);\n        ry *= mathSqrt(lambda);\n    }\n\n    var f = (fa === fs ? -1 : 1)\n        * mathSqrt((((rx * rx) * (ry * ry))\n                - ((rx * rx) * (yp * yp))\n                - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp)\n                + (ry * ry) * (xp * xp))\n            ) || 0;\n\n    var cxp = f * rx * yp / ry;\n    var cyp = f * -ry * xp / rx;\n\n    var cx = (x1 + x2) / 2.0\n                + mathCos(psi) * cxp\n                - mathSin(psi) * cyp;\n    var cy = (y1 + y2) / 2.0\n            + mathSin(psi) * cxp\n            + mathCos(psi) * cyp;\n\n    var theta = vAngle([ 1, 0 ], [ (xp - cxp) / rx, (yp - cyp) / ry ]);\n    var u = [ (xp - cxp) / rx, (yp - cyp) / ry ];\n    var v = [ (-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry ];\n    var dTheta = vAngle(u, v);\n\n    if (vRatio(u, v) <= -1) {\n        dTheta = PI;\n    }\n    if (vRatio(u, v) >= 1) {\n        dTheta = 0;\n    }\n    if (fs === 0 && dTheta > 0) {\n        dTheta = dTheta - 2 * PI;\n    }\n    if (fs === 1 && dTheta < 0) {\n        dTheta = dTheta + 2 * PI;\n    }\n\n    path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);\n}\n\n\nvar commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig;\n// Consider case:\n// (1) delimiter can be comma or space, where continuous commas\n// or spaces should be seen as one comma.\n// (2) value can be like:\n// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983',\n// 'l-.5E1,54', '121-23-44-11' (no delimiter)\nvar numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\n// var valueSplitReg = /[\\s,]+/;\n\nfunction createPathProxyFromString(data) {\n    if (!data) {\n        return new PathProxy();\n    }\n\n    // var data = data.replace(/-/g, ' -')\n    //     .replace(/  /g, ' ')\n    //     .replace(/ /g, ',')\n    //     .replace(/,,/g, ',');\n\n    // var n;\n    // create pipes so that we can split the data\n    // for (n = 0; n < cc.length; n++) {\n    //     cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);\n    // }\n\n    // data = data.replace(/-/g, ',-');\n\n    // create array\n    // var arr = cs.split('|');\n    // init context point\n    var cpx = 0;\n    var cpy = 0;\n    var subpathX = cpx;\n    var subpathY = cpy;\n    var prevCmd;\n\n    var path = new PathProxy();\n    var CMD = PathProxy.CMD;\n\n    // commandReg.lastIndex = 0;\n    // var cmdResult;\n    // while ((cmdResult = commandReg.exec(data)) != null) {\n    //     var cmdStr = cmdResult[1];\n    //     var cmdContent = cmdResult[2];\n\n    var cmdList = data.match(commandReg);\n    for (var l = 0; l < cmdList.length; l++) {\n        var cmdText = cmdList[l];\n        var cmdStr = cmdText.charAt(0);\n\n        var cmd;\n\n        // String#split is faster a little bit than String#replace or RegExp#exec.\n        // var p = cmdContent.split(valueSplitReg);\n        // var pLen = 0;\n        // for (var i = 0; i < p.length; i++) {\n        //     // '' and other invalid str => NaN\n        //     var val = parseFloat(p[i]);\n        //     !isNaN(val) && (p[pLen++] = val);\n        // }\n\n        var p = cmdText.match(numberReg) || [];\n        var pLen = p.length;\n        for (var i = 0; i < pLen; i++) {\n            p[i] = parseFloat(p[i]);\n        }\n\n        var off = 0;\n        while (off < pLen) {\n            var ctlPtx;\n            var ctlPty;\n\n            var rx;\n            var ry;\n            var psi;\n            var fa;\n            var fs;\n\n            var x1 = cpx;\n            var y1 = cpy;\n\n            // convert l, H, h, V, and v to L\n            switch (cmdStr) {\n                case 'l':\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'L':\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'm':\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.M;\n                    path.addData(cmd, cpx, cpy);\n                    subpathX = cpx;\n                    subpathY = cpy;\n                    cmdStr = 'l';\n                    break;\n                case 'M':\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.M;\n                    path.addData(cmd, cpx, cpy);\n                    subpathX = cpx;\n                    subpathY = cpy;\n                    cmdStr = 'L';\n                    break;\n                case 'h':\n                    cpx += p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'H':\n                    cpx = p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'v':\n                    cpy += p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'V':\n                    cpy = p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'C':\n                    cmd = CMD.C;\n                    path.addData(\n                        cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]\n                    );\n                    cpx = p[off - 2];\n                    cpy = p[off - 1];\n                    break;\n                case 'c':\n                    cmd = CMD.C;\n                    path.addData(\n                        cmd,\n                        p[off++] + cpx, p[off++] + cpy,\n                        p[off++] + cpx, p[off++] + cpy,\n                        p[off++] + cpx, p[off++] + cpy\n                    );\n                    cpx += p[off - 2];\n                    cpy += p[off - 1];\n                    break;\n                case 'S':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    var len = path.len();\n                    var pathData = path.data;\n                    if (prevCmd === CMD.C) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cmd = CMD.C;\n                    x1 = p[off++];\n                    y1 = p[off++];\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n                    break;\n                case 's':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    var len = path.len();\n                    var pathData = path.data;\n                    if (prevCmd === CMD.C) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cmd = CMD.C;\n                    x1 = cpx + p[off++];\n                    y1 = cpy + p[off++];\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n                    break;\n                case 'Q':\n                    x1 = p[off++];\n                    y1 = p[off++];\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, x1, y1, cpx, cpy);\n                    break;\n                case 'q':\n                    x1 = p[off++] + cpx;\n                    y1 = p[off++] + cpy;\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, x1, y1, cpx, cpy);\n                    break;\n                case 'T':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    var len = path.len();\n                    var pathData = path.data;\n                    if (prevCmd === CMD.Q) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n                    break;\n                case 't':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    var len = path.len();\n                    var pathData = path.data;\n                    if (prevCmd === CMD.Q) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n                    break;\n                case 'A':\n                    rx = p[off++];\n                    ry = p[off++];\n                    psi = p[off++];\n                    fa = p[off++];\n                    fs = p[off++];\n\n                    x1 = cpx, y1 = cpy;\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.A;\n                    processArc(\n                        x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path\n                    );\n                    break;\n                case 'a':\n                    rx = p[off++];\n                    ry = p[off++];\n                    psi = p[off++];\n                    fa = p[off++];\n                    fs = p[off++];\n\n                    x1 = cpx, y1 = cpy;\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.A;\n                    processArc(\n                        x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path\n                    );\n                    break;\n            }\n        }\n\n        if (cmdStr === 'z' || cmdStr === 'Z') {\n            cmd = CMD.Z;\n            path.addData(cmd);\n            // z may be in the middle of the path.\n            cpx = subpathX;\n            cpy = subpathY;\n        }\n\n        prevCmd = cmd;\n    }\n\n    path.toStatic();\n\n    return path;\n}\n\n// TODO Optimize double memory cost problem\nfunction createPathOptions(str, opts) {\n    var pathProxy = createPathProxyFromString(str);\n    opts = opts || {};\n    opts.buildPath = function (path) {\n        if (path.setData) {\n            path.setData(pathProxy.data);\n            // Svg and vml renderer don't have context\n            var ctx = path.getContext();\n            if (ctx) {\n                path.rebuildPath(ctx);\n            }\n        }\n        else {\n            var ctx = path;\n            pathProxy.rebuildPath(ctx);\n        }\n    };\n\n    opts.applyTransform = function (m) {\n        transformPath(pathProxy, m);\n        this.dirty(true);\n    };\n\n    return opts;\n}\n\n/**\n * Create a Path object from path string data\n * http://www.w3.org/TR/SVG/paths.html#PathData\n * @param  {Object} opts Other options\n */\nexport function createFromString(str, opts) {\n    return new Path(createPathOptions(str, opts));\n}\n\n/**\n * Create a Path class from path string data\n * @param  {string} str\n * @param  {Object} opts Other options\n */\nexport function extendFromString(str, opts) {\n    return Path.extend(createPathOptions(str, opts));\n}\n\n/**\n * Merge multiple paths\n */\n// TODO Apply transform\n// TODO stroke dash\n// TODO Optimize double memory cost problem\nexport function mergePath(pathEls, opts) {\n    var pathList = [];\n    var len = pathEls.length;\n    for (var i = 0; i < len; i++) {\n        var pathEl = pathEls[i];\n        if (!pathEl.path) {\n            pathEl.createPathProxy();\n        }\n        if (pathEl.__dirtyPath) {\n            pathEl.buildPath(pathEl.path, pathEl.shape, true);\n        }\n        pathList.push(pathEl.path);\n    }\n\n    var pathBundle = new Path(opts);\n    // Need path proxy.\n    pathBundle.createPathProxy();\n    pathBundle.buildPath = function (path) {\n        path.appendPath(pathList);\n        // Svg and vml renderer don't have context\n        var ctx = path.getContext();\n        if (ctx) {\n            path.rebuildPath(ctx);\n        }\n    };\n\n    return pathBundle;\n}","import Displayable from './Displayable';\nimport * as zrUtil from '../core/util';\nimport * as textContain from '../contain/text';\nimport * as textHelper from './helper/text';\nimport {ContextCachedBy} from './constant';\n\n/**\n * @alias zrender/graphic/Text\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nvar Text = function (opts) { // jshint ignore:line\n    Displayable.call(this, opts);\n};\n\nText.prototype = {\n\n    constructor: Text,\n\n    type: 'text',\n\n    brush: function (ctx, prevEl) {\n        var style = this.style;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && textHelper.normalizeTextStyle(style, true);\n\n        // Use props with prefix 'text'.\n        style.fill = style.stroke = style.shadowBlur = style.shadowColor =\n            style.shadowOffsetX = style.shadowOffsetY = null;\n\n        var text = style.text;\n        // Convert to string\n        text != null && (text += '');\n\n        // Do not apply style.bind in Text node. Because the real bind job\n        // is in textHelper.renderText, and performance of text render should\n        // be considered.\n        // style.bind(ctx, this, prevEl);\n\n        if (!textHelper.needDrawText(text, style)) {\n            // The current el.style is not applied\n            // and should not be used as cache.\n            ctx.__attrCachedBy = ContextCachedBy.NONE;\n            return;\n        }\n\n        this.setTransform(ctx);\n\n        textHelper.renderText(this, ctx, text, style, null, prevEl);\n\n        this.restoreTransform(ctx);\n    },\n\n    getBoundingRect: function () {\n        var style = this.style;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && textHelper.normalizeTextStyle(style, true);\n\n        if (!this._rect) {\n            var text = style.text;\n            text != null ? (text += '') : (text = '');\n\n            var rect = textContain.getBoundingRect(\n                style.text + '',\n                style.font,\n                style.textAlign,\n                style.textVerticalAlign,\n                style.textPadding,\n                style.textLineHeight,\n                style.rich\n            );\n\n            rect.x += style.x || 0;\n            rect.y += style.y || 0;\n\n            if (textHelper.getStroke(style.textStroke, style.textStrokeWidth)) {\n                var w = style.textStrokeWidth;\n                rect.x -= w / 2;\n                rect.y -= w / 2;\n                rect.width += w;\n                rect.height += w;\n            }\n\n            this._rect = rect;\n        }\n\n        return this._rect;\n    }\n};\n\nzrUtil.inherits(Text, Displayable);\n\nexport default Text;","/**\n * 圆形\n * @module zrender/shape/Circle\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'circle',\n\n    shape: {\n        cx: 0,\n        cy: 0,\n        r: 0\n    },\n\n\n    buildPath: function (ctx, shape, inBundle) {\n        // Better stroking in ShapeBundle\n        // Always do it may have performence issue ( fill may be 2x more cost)\n        if (inBundle) {\n            ctx.moveTo(shape.cx + shape.r, shape.cy);\n        }\n        // else {\n        //     if (ctx.allocate && !ctx.data.length) {\n        //         ctx.allocate(ctx.CMD_MEM_SIZE.A);\n        //     }\n        // }\n        // Better stroking in ShapeBundle\n        // ctx.moveTo(shape.cx + shape.r, shape.cy);\n        ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2, true);\n    }\n});","import env from '../../core/env';\n\n// Fix weird bug in some version of IE11 (like 11.0.9600.178**),\n// where exception \"unexpected call to method or property access\"\n// might be thrown when calling ctx.fill or ctx.stroke after a path\n// whose area size is zero is drawn and ctx.clip() is called and\n// shadowBlur is set. See #4572, #3112, #5777.\n// (e.g.,\n//  ctx.moveTo(10, 10);\n//  ctx.lineTo(20, 10);\n//  ctx.closePath();\n//  ctx.clip();\n//  ctx.shadowBlur = 10;\n//  ...\n//  ctx.fill();\n// )\n\nvar shadowTemp = [\n    ['shadowBlur', 0],\n    ['shadowColor', '#000'],\n    ['shadowOffsetX', 0],\n    ['shadowOffsetY', 0]\n];\n\nexport default function (orignalBrush) {\n\n    // version string can be: '11.0'\n    return (env.browser.ie && env.browser.version >= 11)\n\n        ? function () {\n            var clipPaths = this.__clipPaths;\n            var style = this.style;\n            var modified;\n\n            if (clipPaths) {\n                for (var i = 0; i < clipPaths.length; i++) {\n                    var clipPath = clipPaths[i];\n                    var shape = clipPath && clipPath.shape;\n                    var type = clipPath && clipPath.type;\n\n                    if (shape && (\n                        (type === 'sector' && shape.startAngle === shape.endAngle)\n                        || (type === 'rect' && (!shape.width || !shape.height))\n                    )) {\n                        for (var j = 0; j < shadowTemp.length; j++) {\n                            // It is save to put shadowTemp static, because shadowTemp\n                            // will be all modified each item brush called.\n                            shadowTemp[j][2] = style[shadowTemp[j][0]];\n                            style[shadowTemp[j][0]] = shadowTemp[j][1];\n                        }\n                        modified = true;\n                        break;\n                    }\n                }\n            }\n\n            orignalBrush.apply(this, arguments);\n\n            if (modified) {\n                for (var j = 0; j < shadowTemp.length; j++) {\n                    style[shadowTemp[j][0]] = shadowTemp[j][2];\n                }\n            }\n        }\n\n        : orignalBrush;\n}\n","/**\n * 扇形\n * @module zrender/graphic/shape/Sector\n */\n\nimport Path from '../Path';\nimport fixClipWithShadow from '../helper/fixClipWithShadow';\n\nexport default Path.extend({\n\n    type: 'sector',\n\n    shape: {\n\n        cx: 0,\n\n        cy: 0,\n\n        r0: 0,\n\n        r: 0,\n\n        startAngle: 0,\n\n        endAngle: Math.PI * 2,\n\n        clockwise: true\n    },\n\n    brush: fixClipWithShadow(Path.prototype.brush),\n\n    buildPath: function (ctx, shape) {\n\n        var x = shape.cx;\n        var y = shape.cy;\n        var r0 = Math.max(shape.r0 || 0, 0);\n        var r = Math.max(shape.r, 0);\n        var startAngle = shape.startAngle;\n        var endAngle = shape.endAngle;\n        var clockwise = shape.clockwise;\n\n        var unitX = Math.cos(startAngle);\n        var unitY = Math.sin(startAngle);\n\n        ctx.moveTo(unitX * r0 + x, unitY * r0 + y);\n\n        ctx.lineTo(unitX * r + x, unitY * r + y);\n\n        ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n\n        ctx.lineTo(\n            Math.cos(endAngle) * r0 + x,\n            Math.sin(endAngle) * r0 + y\n        );\n\n        if (r0 !== 0) {\n            ctx.arc(x, y, r0, endAngle, startAngle, clockwise);\n        }\n\n        ctx.closePath();\n    }\n});","/**\n * 圆环\n * @module zrender/graphic/shape/Ring\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'ring',\n\n    shape: {\n        cx: 0,\n        cy: 0,\n        r: 0,\n        r0: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var x = shape.cx;\n        var y = shape.cy;\n        var PI2 = Math.PI * 2;\n        ctx.moveTo(x + shape.r, y);\n        ctx.arc(x, y, shape.r, 0, PI2, false);\n        ctx.moveTo(x + shape.r0, y);\n        ctx.arc(x, y, shape.r0, 0, PI2, true);\n    }\n});","/**\n * Catmull-Rom spline 插值折线\n * @module zrender/shape/util/smoothSpline\n * @author pissang (https://www.github.com/pissang)\n *         Kener (@Kener-林峰, kener.linfeng@gmail.com)\n *         errorrik (errorrik@gmail.com)\n */\n\nimport {distance as v2Distance} from '../../core/vector';\n\n/**\n * @inner\n */\nfunction interpolate(p0, p1, p2, p3, t, t2, t3) {\n    var v0 = (p2 - p0) * 0.5;\n    var v1 = (p3 - p1) * 0.5;\n    return (2 * (p1 - p2) + v0 + v1) * t3\n            + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n            + v0 * t + p1;\n}\n\n/**\n * @alias module:zrender/shape/util/smoothSpline\n * @param {Array} points 线段顶点数组\n * @param {boolean} isLoop\n * @return {Array}\n */\nexport default function (points, isLoop) {\n    var len = points.length;\n    var ret = [];\n\n    var distance = 0;\n    for (var i = 1; i < len; i++) {\n        distance += v2Distance(points[i - 1], points[i]);\n    }\n\n    var segs = distance / 2;\n    segs = segs < len ? len : segs;\n    for (var i = 0; i < segs; i++) {\n        var pos = i / (segs - 1) * (isLoop ? len : len - 1);\n        var idx = Math.floor(pos);\n\n        var w = pos - idx;\n\n        var p0;\n        var p1 = points[idx % len];\n        var p2;\n        var p3;\n        if (!isLoop) {\n            p0 = points[idx === 0 ? idx : idx - 1];\n            p2 = points[idx > len - 2 ? len - 1 : idx + 1];\n            p3 = points[idx > len - 3 ? len - 1 : idx + 2];\n        }\n        else {\n            p0 = points[(idx - 1 + len) % len];\n            p2 = points[(idx + 1) % len];\n            p3 = points[(idx + 2) % len];\n        }\n\n        var w2 = w * w;\n        var w3 = w * w2;\n\n        ret.push([\n            interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3),\n            interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)\n        ]);\n    }\n    return ret;\n}","/**\n * 贝塞尔平滑曲线\n * @module zrender/shape/util/smoothBezier\n * @author pissang (https://www.github.com/pissang)\n *         Kener (@Kener-林峰, kener.linfeng@gmail.com)\n *         errorrik (errorrik@gmail.com)\n */\n\nimport {\n    min as v2Min,\n    max as v2Max,\n    scale as v2Scale,\n    distance as v2Distance,\n    add as v2Add,\n    clone as v2Clone,\n    sub as v2Sub\n} from '../../core/vector';\n\n/**\n * 贝塞尔平滑曲线\n * @alias module:zrender/shape/util/smoothBezier\n * @param {Array} points 线段顶点数组\n * @param {number} smooth 平滑等级, 0-1\n * @param {boolean} isLoop\n * @param {Array} constraint 将计算出来的控制点约束在一个包围盒内\n *                           比如 [[0, 0], [100, 100]], 这个包围盒会与\n *                           整个折线的包围盒做一个并集用来约束控制点。\n * @param {Array} 计算出来的控制点数组\n */\nexport default function (points, smooth, isLoop, constraint) {\n    var cps = [];\n\n    var v = [];\n    var v1 = [];\n    var v2 = [];\n    var prevPoint;\n    var nextPoint;\n\n    var min;\n    var max;\n    if (constraint) {\n        min = [Infinity, Infinity];\n        max = [-Infinity, -Infinity];\n        for (var i = 0, len = points.length; i < len; i++) {\n            v2Min(min, min, points[i]);\n            v2Max(max, max, points[i]);\n        }\n        // 与指定的包围盒做并集\n        v2Min(min, min, constraint[0]);\n        v2Max(max, max, constraint[1]);\n    }\n\n    for (var i = 0, len = points.length; i < len; i++) {\n        var point = points[i];\n\n        if (isLoop) {\n            prevPoint = points[i ? i - 1 : len - 1];\n            nextPoint = points[(i + 1) % len];\n        }\n        else {\n            if (i === 0 || i === len - 1) {\n                cps.push(v2Clone(points[i]));\n                continue;\n            }\n            else {\n                prevPoint = points[i - 1];\n                nextPoint = points[i + 1];\n            }\n        }\n\n        v2Sub(v, nextPoint, prevPoint);\n\n        // use degree to scale the handle length\n        v2Scale(v, v, smooth);\n\n        var d0 = v2Distance(point, prevPoint);\n        var d1 = v2Distance(point, nextPoint);\n        var sum = d0 + d1;\n        if (sum !== 0) {\n            d0 /= sum;\n            d1 /= sum;\n        }\n\n        v2Scale(v1, v, -d0);\n        v2Scale(v2, v, d1);\n        var cp0 = v2Add([], point, v1);\n        var cp1 = v2Add([], point, v2);\n        if (constraint) {\n            v2Max(cp0, cp0, min);\n            v2Min(cp0, cp0, max);\n            v2Max(cp1, cp1, min);\n            v2Min(cp1, cp1, max);\n        }\n        cps.push(cp0);\n        cps.push(cp1);\n    }\n\n    if (isLoop) {\n        cps.push(cps.shift());\n    }\n\n    return cps;\n}","\nimport smoothSpline from './smoothSpline';\nimport smoothBezier from './smoothBezier';\n\nexport function buildPath(ctx, shape, closePath) {\n    var points = shape.points;\n    var smooth = shape.smooth;\n    if (points && points.length >= 2) {\n        if (smooth && smooth !== 'spline') {\n            var controlPoints = smoothBezier(\n                points, smooth, closePath, shape.smoothConstraint\n            );\n\n            ctx.moveTo(points[0][0], points[0][1]);\n            var len = points.length;\n            for (var i = 0; i < (closePath ? len : len - 1); i++) {\n                var cp1 = controlPoints[i * 2];\n                var cp2 = controlPoints[i * 2 + 1];\n                var p = points[(i + 1) % len];\n                ctx.bezierCurveTo(\n                    cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]\n                );\n            }\n        }\n        else {\n            if (smooth === 'spline') {\n                points = smoothSpline(points, closePath);\n            }\n\n            ctx.moveTo(points[0][0], points[0][1]);\n            for (var i = 1, l = points.length; i < l; i++) {\n                ctx.lineTo(points[i][0], points[i][1]);\n            }\n        }\n\n        closePath && ctx.closePath();\n    }\n}\n","/**\n * 多边形\n * @module zrender/shape/Polygon\n */\n\nimport Path from '../Path';\nimport * as polyHelper from '../helper/poly';\n\nexport default Path.extend({\n\n    type: 'polygon',\n\n    shape: {\n        points: null,\n\n        smooth: false,\n\n        smoothConstraint: null\n    },\n\n    buildPath: function (ctx, shape) {\n        polyHelper.buildPath(ctx, shape, true);\n    }\n});","/**\n * @module zrender/graphic/shape/Polyline\n */\n\nimport Path from '../Path';\nimport * as polyHelper from '../helper/poly';\n\nexport default Path.extend({\n\n    type: 'polyline',\n\n    shape: {\n        points: null,\n\n        smooth: false,\n\n        smoothConstraint: null\n    },\n\n    style: {\n        stroke: '#000',\n\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        polyHelper.buildPath(ctx, shape, false);\n    }\n});","/**\n * Sub-pixel optimize for canvas rendering, prevent from blur\n * when rendering a thin vertical/horizontal line.\n */\n\nvar round = Math.round;\n\n/**\n * Sub pixel optimize line for canvas\n *\n * @param {Object} outputShape The modification will be performed on `outputShape`.\n *                 `outputShape` and `inputShape` can be the same object.\n *                 `outputShape` object can be used repeatly, because all of\n *                 the `x1`, `x2`, `y1`, `y2` will be assigned in this method.\n * @param {Object} [inputShape]\n * @param {number} [inputShape.x1]\n * @param {number} [inputShape.y1]\n * @param {number} [inputShape.x2]\n * @param {number} [inputShape.y2]\n * @param {Object} [style]\n * @param {number} [style.lineWidth]\n */\nexport function subPixelOptimizeLine(outputShape, inputShape, style) {\n    var lineWidth = style && style.lineWidth;\n\n    if (!inputShape || !lineWidth) {\n        return;\n    }\n\n    var x1 = inputShape.x1;\n    var x2 = inputShape.x2;\n    var y1 = inputShape.y1;\n    var y2 = inputShape.y2;\n\n    if (round(x1 * 2) === round(x2 * 2)) {\n        outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true);\n    }\n    else {\n        outputShape.x1 = x1;\n        outputShape.x2 = x2;\n    }\n    if (round(y1 * 2) === round(y2 * 2)) {\n        outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true);\n    }\n    else {\n        outputShape.y1 = y1;\n        outputShape.y2 = y2;\n    }\n}\n\n/**\n * Sub pixel optimize rect for canvas\n *\n * @param {Object} outputShape The modification will be performed on `outputShape`.\n *                 `outputShape` and `inputShape` can be the same object.\n *                 `outputShape` object can be used repeatly, because all of\n *                 the `x`, `y`, `width`, `height` will be assigned in this method.\n * @param {Object} [inputShape]\n * @param {number} [inputShape.x]\n * @param {number} [inputShape.y]\n * @param {number} [inputShape.width]\n * @param {number} [inputShape.height]\n * @param {Object} [style]\n * @param {number} [style.lineWidth]\n */\nexport function subPixelOptimizeRect(outputShape, inputShape, style) {\n    var lineWidth = style && style.lineWidth;\n\n    if (!inputShape || !lineWidth) {\n        return;\n    }\n\n    var originX = inputShape.x;\n    var originY = inputShape.y;\n    var originWidth = inputShape.width;\n    var originHeight = inputShape.height;\n\n    outputShape.x = subPixelOptimize(originX, lineWidth, true);\n    outputShape.y = subPixelOptimize(originY, lineWidth, true);\n    outputShape.width = Math.max(\n        subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x,\n        originWidth === 0 ? 0 : 1\n    );\n    outputShape.height = Math.max(\n        subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y,\n        originHeight === 0 ? 0 : 1\n    );\n}\n\n/**\n * Sub pixel optimize for canvas\n *\n * @param {number} position Coordinate, such as x, y\n * @param {number} lineWidth Should be nonnegative integer.\n * @param {boolean=} positiveOrNegative Default false (negative).\n * @return {number} Optimized position.\n */\nexport function subPixelOptimize(position, lineWidth, positiveOrNegative) {\n    // Assure that (position + lineWidth / 2) is near integer edge,\n    // otherwise line will be fuzzy in canvas.\n    var doubledPosition = round(position * 2);\n    return (doubledPosition + round(lineWidth)) % 2 === 0\n        ? doubledPosition / 2\n        : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;\n}\n","/**\n * 矩形\n * @module zrender/graphic/shape/Rect\n */\n\nimport Path from '../Path';\nimport * as roundRectHelper from '../helper/roundRect';\nimport {subPixelOptimizeRect} from '../helper/subPixelOptimize';\n\n// Avoid create repeatly.\nvar subPixelOptimizeOutputShape = {};\n\nexport default Path.extend({\n\n    type: 'rect',\n\n    shape: {\n        // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4\n        // r缩写为1         相当于 [1, 1, 1, 1]\n        // r缩写为[1]       相当于 [1, 1, 1, 1]\n        // r缩写为[1, 2]    相当于 [1, 2, 1, 2]\n        // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2]\n        r: 0,\n\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var x;\n        var y;\n        var width;\n        var height;\n\n        if (this.subPixelOptimize) {\n            subPixelOptimizeRect(subPixelOptimizeOutputShape, shape, this.style);\n            x = subPixelOptimizeOutputShape.x;\n            y = subPixelOptimizeOutputShape.y;\n            width = subPixelOptimizeOutputShape.width;\n            height = subPixelOptimizeOutputShape.height;\n            subPixelOptimizeOutputShape.r = shape.r;\n            shape = subPixelOptimizeOutputShape;\n        }\n        else {\n            x = shape.x;\n            y = shape.y;\n            width = shape.width;\n            height = shape.height;\n        }\n\n        if (!shape.r) {\n            ctx.rect(x, y, width, height);\n        }\n        else {\n            roundRectHelper.buildPath(ctx, shape);\n        }\n        ctx.closePath();\n        return;\n    }\n});","/**\n * 直线\n * @module zrender/graphic/shape/Line\n */\n\nimport Path from '../Path';\nimport {subPixelOptimizeLine} from '../helper/subPixelOptimize';\n\n// Avoid create repeatly.\nvar subPixelOptimizeOutputShape = {};\n\nexport default Path.extend({\n\n    type: 'line',\n\n    shape: {\n        // Start point\n        x1: 0,\n        y1: 0,\n        // End point\n        x2: 0,\n        y2: 0,\n\n        percent: 1\n    },\n\n    style: {\n        stroke: '#000',\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        var x1;\n        var y1;\n        var x2;\n        var y2;\n\n        if (this.subPixelOptimize) {\n            subPixelOptimizeLine(subPixelOptimizeOutputShape, shape, this.style);\n            x1 = subPixelOptimizeOutputShape.x1;\n            y1 = subPixelOptimizeOutputShape.y1;\n            x2 = subPixelOptimizeOutputShape.x2;\n            y2 = subPixelOptimizeOutputShape.y2;\n        }\n        else {\n            x1 = shape.x1;\n            y1 = shape.y1;\n            x2 = shape.x2;\n            y2 = shape.y2;\n        }\n\n        var percent = shape.percent;\n\n        if (percent === 0) {\n            return;\n        }\n\n        ctx.moveTo(x1, y1);\n\n        if (percent < 1) {\n            x2 = x1 * (1 - percent) + x2 * percent;\n            y2 = y1 * (1 - percent) + y2 * percent;\n        }\n        ctx.lineTo(x2, y2);\n    },\n\n    /**\n     * Get point at percent\n     * @param  {number} percent\n     * @return {Array.<number>}\n     */\n    pointAt: function (p) {\n        var shape = this.shape;\n        return [\n            shape.x1 * (1 - p) + shape.x2 * p,\n            shape.y1 * (1 - p) + shape.y2 * p\n        ];\n    }\n});","/**\n * 贝塞尔曲线\n * @module zrender/shape/BezierCurve\n */\n\nimport Path from '../Path';\nimport * as vec2 from '../../core/vector';\nimport {\n    quadraticSubdivide,\n    cubicSubdivide,\n    quadraticAt,\n    cubicAt,\n    quadraticDerivativeAt,\n    cubicDerivativeAt\n} from '../../core/curve';\n\nvar out = [];\n\nfunction someVectorAt(shape, t, isTangent) {\n    var cpx2 = shape.cpx2;\n    var cpy2 = shape.cpy2;\n    if (cpx2 === null || cpy2 === null) {\n        return [\n            (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t),\n            (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)\n        ];\n    }\n    else {\n        return [\n            (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t),\n            (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)\n        ];\n    }\n}\n\nexport default Path.extend({\n\n    type: 'bezier-curve',\n\n    shape: {\n        x1: 0,\n        y1: 0,\n        x2: 0,\n        y2: 0,\n        cpx1: 0,\n        cpy1: 0,\n        // cpx2: 0,\n        // cpy2: 0\n\n        // Curve show percent, for animating\n        percent: 1\n    },\n\n    style: {\n        stroke: '#000',\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        var x1 = shape.x1;\n        var y1 = shape.y1;\n        var x2 = shape.x2;\n        var y2 = shape.y2;\n        var cpx1 = shape.cpx1;\n        var cpy1 = shape.cpy1;\n        var cpx2 = shape.cpx2;\n        var cpy2 = shape.cpy2;\n        var percent = shape.percent;\n        if (percent === 0) {\n            return;\n        }\n\n        ctx.moveTo(x1, y1);\n\n        if (cpx2 == null || cpy2 == null) {\n            if (percent < 1) {\n                quadraticSubdivide(\n                    x1, cpx1, x2, percent, out\n                );\n                cpx1 = out[1];\n                x2 = out[2];\n                quadraticSubdivide(\n                    y1, cpy1, y2, percent, out\n                );\n                cpy1 = out[1];\n                y2 = out[2];\n            }\n\n            ctx.quadraticCurveTo(\n                cpx1, cpy1,\n                x2, y2\n            );\n        }\n        else {\n            if (percent < 1) {\n                cubicSubdivide(\n                    x1, cpx1, cpx2, x2, percent, out\n                );\n                cpx1 = out[1];\n                cpx2 = out[2];\n                x2 = out[3];\n                cubicSubdivide(\n                    y1, cpy1, cpy2, y2, percent, out\n                );\n                cpy1 = out[1];\n                cpy2 = out[2];\n                y2 = out[3];\n            }\n            ctx.bezierCurveTo(\n                cpx1, cpy1,\n                cpx2, cpy2,\n                x2, y2\n            );\n        }\n    },\n\n    /**\n     * Get point at percent\n     * @param  {number} t\n     * @return {Array.<number>}\n     */\n    pointAt: function (t) {\n        return someVectorAt(this.shape, t, false);\n    },\n\n    /**\n     * Get tangent at percent\n     * @param  {number} t\n     * @return {Array.<number>}\n     */\n    tangentAt: function (t) {\n        var p = someVectorAt(this.shape, t, true);\n        return vec2.normalize(p, p);\n    }\n});","/**\n * 圆弧\n * @module zrender/graphic/shape/Arc\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'arc',\n\n    shape: {\n\n        cx: 0,\n\n        cy: 0,\n\n        r: 0,\n\n        startAngle: 0,\n\n        endAngle: Math.PI * 2,\n\n        clockwise: true\n    },\n\n    style: {\n\n        stroke: '#000',\n\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n\n        var x = shape.cx;\n        var y = shape.cy;\n        var r = Math.max(shape.r, 0);\n        var startAngle = shape.startAngle;\n        var endAngle = shape.endAngle;\n        var clockwise = shape.clockwise;\n\n        var unitX = Math.cos(startAngle);\n        var unitY = Math.sin(startAngle);\n\n        ctx.moveTo(unitX * r + x, unitY * r + y);\n        ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n    }\n});","// CompoundPath to improve performance\n\nimport Path from './Path';\n\nexport default Path.extend({\n\n    type: 'compound',\n\n    shape: {\n\n        paths: null\n    },\n\n    _updatePathDirty: function () {\n        var dirtyPath = this.__dirtyPath;\n        var paths = this.shape.paths;\n        for (var i = 0; i < paths.length; i++) {\n            // Mark as dirty if any subpath is dirty\n            dirtyPath = dirtyPath || paths[i].__dirtyPath;\n        }\n        this.__dirtyPath = dirtyPath;\n        this.__dirty = this.__dirty || dirtyPath;\n    },\n\n    beforeBrush: function () {\n        this._updatePathDirty();\n        var paths = this.shape.paths || [];\n        var scale = this.getGlobalScale();\n        // Update path scale\n        for (var i = 0; i < paths.length; i++) {\n            if (!paths[i].path) {\n                paths[i].createPathProxy();\n            }\n            paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);\n        }\n    },\n\n    buildPath: function (ctx, shape) {\n        var paths = shape.paths || [];\n        for (var i = 0; i < paths.length; i++) {\n            paths[i].buildPath(ctx, paths[i].shape, true);\n        }\n    },\n\n    afterBrush: function () {\n        var paths = this.shape.paths || [];\n        for (var i = 0; i < paths.length; i++) {\n            paths[i].__dirtyPath = false;\n        }\n    },\n\n    getBoundingRect: function () {\n        this._updatePathDirty();\n        return Path.prototype.getBoundingRect.call(this);\n    }\n});","\n/**\n * @param {Array.<Object>} colorStops\n */\nvar Gradient = function (colorStops) {\n\n    this.colorStops = colorStops || [];\n\n};\n\nGradient.prototype = {\n\n    constructor: Gradient,\n\n    addColorStop: function (offset, color) {\n        this.colorStops.push({\n\n            offset: offset,\n\n            color: color\n        });\n    }\n\n};\n\nexport default Gradient;","import * as zrUtil from '../core/util';\nimport Gradient from './Gradient';\n\n/**\n * x, y, x2, y2 are all percent from 0 to 1\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @param {number} [x2=1]\n * @param {number} [y2=0]\n * @param {Array.<Object>} colorStops\n * @param {boolean} [globalCoord=false]\n */\nvar LinearGradient = function (x, y, x2, y2, colorStops, globalCoord) {\n    // Should do nothing more in this constructor. Because gradient can be\n    // declard by `color: {type: 'linear', colorStops: ...}`, where\n    // this constructor will not be called.\n\n    this.x = x == null ? 0 : x;\n\n    this.y = y == null ? 0 : y;\n\n    this.x2 = x2 == null ? 1 : x2;\n\n    this.y2 = y2 == null ? 0 : y2;\n\n    // Can be cloned\n    this.type = 'linear';\n\n    // If use global coord\n    this.global = globalCoord || false;\n\n    Gradient.call(this, colorStops);\n};\n\nLinearGradient.prototype = {\n\n    constructor: LinearGradient\n};\n\nzrUtil.inherits(LinearGradient, Gradient);\n\nexport default LinearGradient;","import * as zrUtil from '../core/util';\nimport Gradient from './Gradient';\n\n/**\n * x, y, r are all percent from 0 to 1\n * @param {number} [x=0.5]\n * @param {number} [y=0.5]\n * @param {number} [r=0.5]\n * @param {Array.<Object>} [colorStops]\n * @param {boolean} [globalCoord=false]\n */\nvar RadialGradient = function (x, y, r, colorStops, globalCoord) {\n    // Should do nothing more in this constructor. Because gradient can be\n    // declard by `color: {type: 'radial', colorStops: ...}`, where\n    // this constructor will not be called.\n\n    this.x = x == null ? 0.5 : x;\n\n    this.y = y == null ? 0.5 : y;\n\n    this.r = r == null ? 0.5 : r;\n\n    // Can be cloned\n    this.type = 'radial';\n\n    // If use global coord\n    this.global = globalCoord || false;\n\n    Gradient.call(this, colorStops);\n};\n\nRadialGradient.prototype = {\n\n    constructor: RadialGradient\n};\n\nzrUtil.inherits(RadialGradient, Gradient);\n\nexport default RadialGradient;","/**\n * Displayable for incremental rendering. It will be rendered in a separate layer\n * IncrementalDisplay have two main methods. `clearDisplayables` and `addDisplayables`\n * addDisplayables will render the added displayables incremetally.\n *\n * It use a not clearFlag to tell the painter don't clear the layer if it's the first element.\n */\nimport { inherits } from '../core/util';\nimport Displayble from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\n\n// TODO Style override ?\nfunction IncrementalDisplayble(opts) {\n\n    Displayble.call(this, opts);\n\n    this._displayables = [];\n\n    this._temporaryDisplayables = [];\n\n    this._cursor = 0;\n\n    this.notClear = true;\n}\n\nIncrementalDisplayble.prototype.incremental = true;\n\nIncrementalDisplayble.prototype.clearDisplaybles = function () {\n    this._displayables = [];\n    this._temporaryDisplayables = [];\n    this._cursor = 0;\n    this.dirty();\n\n    this.notClear = false;\n};\n\nIncrementalDisplayble.prototype.addDisplayable = function (displayable, notPersistent) {\n    if (notPersistent) {\n        this._temporaryDisplayables.push(displayable);\n    }\n    else {\n        this._displayables.push(displayable);\n    }\n    this.dirty();\n};\n\nIncrementalDisplayble.prototype.addDisplayables = function (displayables, notPersistent) {\n    notPersistent = notPersistent || false;\n    for (var i = 0; i < displayables.length; i++) {\n        this.addDisplayable(displayables[i], notPersistent);\n    }\n};\n\nIncrementalDisplayble.prototype.eachPendingDisplayable = function (cb) {\n    for (var i = this._cursor; i < this._displayables.length; i++) {\n        cb && cb(this._displayables[i]);\n    }\n    for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n        cb && cb(this._temporaryDisplayables[i]);\n    }\n};\n\nIncrementalDisplayble.prototype.update = function () {\n    this.updateTransform();\n    for (var i = this._cursor; i < this._displayables.length; i++) {\n        var displayable = this._displayables[i];\n        // PENDING\n        displayable.parent = this;\n        displayable.update();\n        displayable.parent = null;\n    }\n    for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n        var displayable = this._temporaryDisplayables[i];\n        // PENDING\n        displayable.parent = this;\n        displayable.update();\n        displayable.parent = null;\n    }\n};\n\nIncrementalDisplayble.prototype.brush = function (ctx, prevEl) {\n    // Render persistant displayables.\n    for (var i = this._cursor; i < this._displayables.length; i++) {\n        var displayable = this._displayables[i];\n        displayable.beforeBrush && displayable.beforeBrush(ctx);\n        displayable.brush(ctx, i === this._cursor ? null : this._displayables[i - 1]);\n        displayable.afterBrush && displayable.afterBrush(ctx);\n    }\n    this._cursor = i;\n    // Render temporary displayables.\n    for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n        var displayable = this._temporaryDisplayables[i];\n        displayable.beforeBrush && displayable.beforeBrush(ctx);\n        displayable.brush(ctx, i === 0 ? null : this._temporaryDisplayables[i - 1]);\n        displayable.afterBrush && displayable.afterBrush(ctx);\n    }\n\n    this._temporaryDisplayables = [];\n\n    this.notClear = true;\n};\n\nvar m = [];\nIncrementalDisplayble.prototype.getBoundingRect = function () {\n    if (!this._rect) {\n        var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\n        for (var i = 0; i < this._displayables.length; i++) {\n            var displayable = this._displayables[i];\n            var childRect = displayable.getBoundingRect().clone();\n            if (displayable.needLocalTransform()) {\n                childRect.applyTransform(displayable.getLocalTransform(m));\n            }\n            rect.union(childRect);\n        }\n        this._rect = rect;\n    }\n    return this._rect;\n};\n\nIncrementalDisplayble.prototype.contain = function (x, y) {\n    var localPos = this.transformCoordToLocal(x, y);\n    var rect = this.getBoundingRect();\n\n    if (rect.contain(localPos[0], localPos[1])) {\n        for (var i = 0; i < this._displayables.length; i++) {\n            var displayable = this._displayables[i];\n            if (displayable.contain(x, y)) {\n                return true;\n            }\n        }\n    }\n    return false;\n};\n\ninherits(IncrementalDisplayble, Displayble);\n\nexport default IncrementalDisplayble;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as pathTool from 'zrender/src/tool/path';\nimport * as colorTool from 'zrender/src/tool/color';\nimport * as matrix from 'zrender/src/core/matrix';\nimport * as vector from 'zrender/src/core/vector';\nimport Path from 'zrender/src/graphic/Path';\nimport Transformable from 'zrender/src/mixin/Transformable';\nimport ZImage from 'zrender/src/graphic/Image';\nimport Group from 'zrender/src/container/Group';\nimport Text from 'zrender/src/graphic/Text';\nimport Circle from 'zrender/src/graphic/shape/Circle';\nimport Sector from 'zrender/src/graphic/shape/Sector';\nimport Ring from 'zrender/src/graphic/shape/Ring';\nimport Polygon from 'zrender/src/graphic/shape/Polygon';\nimport Polyline from 'zrender/src/graphic/shape/Polyline';\nimport Rect from 'zrender/src/graphic/shape/Rect';\nimport Line from 'zrender/src/graphic/shape/Line';\nimport BezierCurve from 'zrender/src/graphic/shape/BezierCurve';\nimport Arc from 'zrender/src/graphic/shape/Arc';\nimport CompoundPath from 'zrender/src/graphic/CompoundPath';\nimport LinearGradient from 'zrender/src/graphic/LinearGradient';\nimport RadialGradient from 'zrender/src/graphic/RadialGradient';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport IncrementalDisplayable from 'zrender/src/graphic/IncrementalDisplayable';\nimport * as subPixelOptimizeUtil from 'zrender/src/graphic/helper/subPixelOptimize';\n\n\nvar mathMax = Math.max;\nvar mathMin = Math.min;\n\nvar EMPTY_OBJ = {};\n\nexport var Z2_EMPHASIS_LIFT = 1;\n\n// key: label model property nane, value: style property name.\nexport var CACHED_LABEL_STYLE_PROPERTIES = {\n    color: 'textFill',\n    textBorderColor: 'textStroke',\n    textBorderWidth: 'textStrokeWidth'\n};\n\nvar EMPHASIS = 'emphasis';\nvar NORMAL = 'normal';\n\n// Reserve 0 as default.\nvar _highlightNextDigit = 1;\nvar _highlightKeyMap = {};\n\nvar _customShapeMap = {};\n\n\n/**\n * Extend shape with parameters\n */\nexport function extendShape(opts) {\n    return Path.extend(opts);\n}\n\n/**\n * Extend path\n */\nexport function extendPath(pathData, opts) {\n    return pathTool.extendFromString(pathData, opts);\n}\n\n/**\n * Register a user defined shape.\n * The shape class can be fetched by `getShapeClass`\n * This method will overwrite the registered shapes, including\n * the registered built-in shapes, if using the same `name`.\n * The shape can be used in `custom series` and\n * `graphic component` by declaring `{type: name}`.\n *\n * @param {string} name\n * @param {Object} ShapeClass Can be generated by `extendShape`.\n */\nexport function registerShape(name, ShapeClass) {\n    _customShapeMap[name] = ShapeClass;\n}\n\n/**\n * Find shape class registered by `registerShape`. Usually used in\n * fetching user defined shape.\n *\n * [Caution]:\n * (1) This method **MUST NOT be used inside echarts !!!**, unless it is prepared\n * to use user registered shapes.\n * Because the built-in shape (see `getBuiltInShape`) will be registered by\n * `registerShape` by default. That enables users to get both built-in\n * shapes as well as the shapes belonging to themsleves. But users can overwrite\n * the built-in shapes by using names like 'circle', 'rect' via calling\n * `registerShape`. So the echarts inner featrues should not fetch shapes from here\n * in case that it is overwritten by users, except that some features, like\n * `custom series`, `graphic component`, do it deliberately.\n *\n * (2) In the features like `custom series`, `graphic component`, the user input\n * `{tpye: 'xxx'}` does not only specify shapes but also specify other graphic\n * elements like `'group'`, `'text'`, `'image'` or event `'path'`. Those names\n * are reserved names, that is, if some user register a shape named `'image'`,\n * the shape will not be used. If we intending to add some more reserved names\n * in feature, that might bring break changes (disable some existing user shape\n * names). But that case probably rearly happen. So we dont make more mechanism\n * to resolve this issue here.\n *\n * @param {string} name\n * @return {Object} The shape class. If not found, return nothing.\n */\nexport function getShapeClass(name) {\n    if (_customShapeMap.hasOwnProperty(name)) {\n        return _customShapeMap[name];\n    }\n}\n\n/**\n * Create a path element from path data string\n * @param {string} pathData\n * @param {Object} opts\n * @param {module:zrender/core/BoundingRect} rect\n * @param {string} [layout=cover] 'center' or 'cover'\n */\nexport function makePath(pathData, opts, rect, layout) {\n    var path = pathTool.createFromString(pathData, opts);\n    if (rect) {\n        if (layout === 'center') {\n            rect = centerGraphic(rect, path.getBoundingRect());\n        }\n        resizePath(path, rect);\n    }\n    return path;\n}\n\n/**\n * Create a image element from image url\n * @param {string} imageUrl image url\n * @param {Object} opts options\n * @param {module:zrender/core/BoundingRect} rect constrain rect\n * @param {string} [layout=cover] 'center' or 'cover'\n */\nexport function makeImage(imageUrl, rect, layout) {\n    var path = new ZImage({\n        style: {\n            image: imageUrl,\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height\n        },\n        onload: function (img) {\n            if (layout === 'center') {\n                var boundingRect = {\n                    width: img.width,\n                    height: img.height\n                };\n                path.setStyle(centerGraphic(rect, boundingRect));\n            }\n        }\n    });\n    return path;\n}\n\n/**\n * Get position of centered element in bounding box.\n *\n * @param  {Object} rect         element local bounding box\n * @param  {Object} boundingRect constraint bounding box\n * @return {Object} element position containing x, y, width, and height\n */\nfunction centerGraphic(rect, boundingRect) {\n    // Set rect to center, keep width / height ratio.\n    var aspect = boundingRect.width / boundingRect.height;\n    var width = rect.height * aspect;\n    var height;\n    if (width <= rect.width) {\n        height = rect.height;\n    }\n    else {\n        width = rect.width;\n        height = width / aspect;\n    }\n    var cx = rect.x + rect.width / 2;\n    var cy = rect.y + rect.height / 2;\n\n    return {\n        x: cx - width / 2,\n        y: cy - height / 2,\n        width: width,\n        height: height\n    };\n}\n\nexport var mergePath = pathTool.mergePath;\n\n/**\n * Resize a path to fit the rect\n * @param {module:zrender/graphic/Path} path\n * @param {Object} rect\n */\nexport function resizePath(path, rect) {\n    if (!path.applyTransform) {\n        return;\n    }\n\n    var pathRect = path.getBoundingRect();\n\n    var m = pathRect.calculateTransform(rect);\n\n    path.applyTransform(m);\n}\n\n/**\n * Sub pixel optimize line for canvas\n *\n * @param {Object} param\n * @param {Object} [param.shape]\n * @param {number} [param.shape.x1]\n * @param {number} [param.shape.y1]\n * @param {number} [param.shape.x2]\n * @param {number} [param.shape.y2]\n * @param {Object} [param.style]\n * @param {number} [param.style.lineWidth]\n * @return {Object} Modified param\n */\nexport function subPixelOptimizeLine(param) {\n    subPixelOptimizeUtil.subPixelOptimizeLine(param.shape, param.shape, param.style);\n    return param;\n}\n\n/**\n * Sub pixel optimize rect for canvas\n *\n * @param {Object} param\n * @param {Object} [param.shape]\n * @param {number} [param.shape.x]\n * @param {number} [param.shape.y]\n * @param {number} [param.shape.width]\n * @param {number} [param.shape.height]\n * @param {Object} [param.style]\n * @param {number} [param.style.lineWidth]\n * @return {Object} Modified param\n */\nexport function subPixelOptimizeRect(param) {\n    subPixelOptimizeUtil.subPixelOptimizeRect(param.shape, param.shape, param.style);\n    return param;\n}\n\n/**\n * Sub pixel optimize for canvas\n *\n * @param {number} position Coordinate, such as x, y\n * @param {number} lineWidth Should be nonnegative integer.\n * @param {boolean=} positiveOrNegative Default false (negative).\n * @return {number} Optimized position.\n */\nexport var subPixelOptimize = subPixelOptimizeUtil.subPixelOptimize;\n\n\nfunction hasFillOrStroke(fillOrStroke) {\n    return fillOrStroke != null && fillOrStroke !== 'none';\n}\n\n// Most lifted color are duplicated.\nvar liftedColorMap = zrUtil.createHashMap();\nvar liftedColorCount = 0;\n\nfunction liftColor(color) {\n    if (typeof color !== 'string') {\n        return color;\n    }\n    var liftedColor = liftedColorMap.get(color);\n    if (!liftedColor) {\n        liftedColor = colorTool.lift(color, -0.1);\n        if (liftedColorCount < 10000) {\n            liftedColorMap.set(color, liftedColor);\n            liftedColorCount++;\n        }\n    }\n    return liftedColor;\n}\n\nfunction cacheElementStl(el) {\n    if (!el.__hoverStlDirty) {\n        return;\n    }\n    el.__hoverStlDirty = false;\n\n    var hoverStyle = el.__hoverStl;\n    if (!hoverStyle) {\n        el.__cachedNormalStl = el.__cachedNormalZ2 = null;\n        return;\n    }\n\n    var normalStyle = el.__cachedNormalStl = {};\n    el.__cachedNormalZ2 = el.z2;\n    var elStyle = el.style;\n\n    for (var name in hoverStyle) {\n        // See comment in `singleEnterEmphasis`.\n        if (hoverStyle[name] != null) {\n            normalStyle[name] = elStyle[name];\n        }\n    }\n\n    // Always cache fill and stroke to normalStyle for lifting color.\n    normalStyle.fill = elStyle.fill;\n    normalStyle.stroke = elStyle.stroke;\n}\n\nfunction singleEnterEmphasis(el) {\n    var hoverStl = el.__hoverStl;\n\n    if (!hoverStl || el.__highlighted) {\n        return;\n    }\n\n    var zr = el.__zr;\n\n    var useHoverLayer = el.useHoverLayer && zr && zr.painter.type === 'canvas';\n    el.__highlighted = useHoverLayer ? 'layer' : 'plain';\n\n    if (el.isGroup || (!zr && el.useHoverLayer)) {\n        return;\n    }\n\n    var elTarget = el;\n    var targetStyle = el.style;\n\n    if (useHoverLayer) {\n        elTarget = zr.addHover(el);\n        targetStyle = elTarget.style;\n    }\n\n    rollbackDefaultTextStyle(targetStyle);\n\n    if (!useHoverLayer) {\n        cacheElementStl(elTarget);\n    }\n\n    // styles can be:\n    // {\n    //    label: {\n    //        show: false,\n    //        position: 'outside',\n    //        fontSize: 18\n    //    },\n    //    emphasis: {\n    //        label: {\n    //            show: true\n    //        }\n    //    }\n    // },\n    // where properties of `emphasis` may not appear in `normal`. We previously use\n    // module:echarts/util/model#defaultEmphasis to merge `normal` to `emphasis`.\n    // But consider rich text and setOption in merge mode, it is impossible to cover\n    // all properties in merge. So we use merge mode when setting style here.\n    // But we choose the merge strategy that only properties that is not `null/undefined`.\n    // Because when making a textStyle (espacially rich text), it is not easy to distinguish\n    // `hasOwnProperty` and `null/undefined` in code, so we trade them as the same for simplicity.\n    // But this strategy brings a trouble that `null/undefined` can not be used to remove\n    // style any more in `emphasis`. Users can both set properties directly on normal and\n    // emphasis to avoid this issue, or we might support `'none'` for this case if required.\n    targetStyle.extendFrom(hoverStl);\n\n    setDefaultHoverFillStroke(targetStyle, hoverStl, 'fill');\n    setDefaultHoverFillStroke(targetStyle, hoverStl, 'stroke');\n\n    applyDefaultTextStyle(targetStyle);\n\n    if (!useHoverLayer) {\n        el.dirty(false);\n        el.z2 += Z2_EMPHASIS_LIFT;\n    }\n}\n\nfunction setDefaultHoverFillStroke(targetStyle, hoverStyle, prop) {\n    if (!hasFillOrStroke(hoverStyle[prop]) && hasFillOrStroke(targetStyle[prop])) {\n        targetStyle[prop] = liftColor(targetStyle[prop]);\n    }\n}\n\nfunction singleEnterNormal(el) {\n    var highlighted = el.__highlighted;\n\n    if (!highlighted) {\n        return;\n    }\n\n    el.__highlighted = false;\n\n    if (el.isGroup) {\n        return;\n    }\n\n    if (highlighted === 'layer') {\n        el.__zr && el.__zr.removeHover(el);\n    }\n    else {\n        var style = el.style;\n\n        var normalStl = el.__cachedNormalStl;\n        if (normalStl) {\n            rollbackDefaultTextStyle(style);\n            el.setStyle(normalStl);\n            applyDefaultTextStyle(style);\n        }\n        // `__cachedNormalZ2` will not be reset if calling `setElementHoverStyle`\n        // when `el` is on emphasis state. So here by comparing with 1, we try\n        // hard to make the bug case rare.\n        var normalZ2 = el.__cachedNormalZ2;\n        if (normalZ2 != null && el.z2 - normalZ2 === Z2_EMPHASIS_LIFT) {\n            el.z2 = normalZ2;\n        }\n    }\n}\n\nfunction traverseUpdate(el, updater, commonParam) {\n    // If root is group, also enter updater for `highDownOnUpdate`.\n    var fromState = NORMAL;\n    var toState = NORMAL;\n    var trigger;\n    // See the rule of `highDownOnUpdate` on `graphic.setAsHighDownDispatcher`.\n    el.__highlighted && (fromState = EMPHASIS, trigger = true);\n    updater(el, commonParam);\n    el.__highlighted && (toState = EMPHASIS, trigger = true);\n\n    el.isGroup && el.traverse(function (child) {\n        !child.isGroup && updater(child, commonParam);\n    });\n\n    trigger && el.__highDownOnUpdate && el.__highDownOnUpdate(fromState, toState);\n}\n\n/**\n * Set hover style (namely \"emphasis style\") of element, based on the current\n * style of the given `el`.\n * This method should be called after all of the normal styles have been adopted\n * to the `el`. See the reason on `setHoverStyle`.\n *\n * @param {module:zrender/Element} el Should not be `zrender/container/Group`.\n * @param {Object} [el.hoverStyle] Can be set on el or its descendants,\n *        e.g., `el.hoverStyle = ...; graphic.setHoverStyle(el); `.\n *        Often used when item group has a label element and it's hoverStyle is different.\n * @param {Object|boolean} [hoverStl] The specified hover style.\n *        If set as `false`, disable the hover style.\n *        Similarly, The `el.hoverStyle` can alse be set\n *        as `false` to disable the hover style.\n *        Otherwise, use the default hover style if not provided.\n */\nexport function setElementHoverStyle(el, hoverStl) {\n    // For performance consideration, it might be better to make the \"hover style\" only the\n    // difference properties from the \"normal style\", but not a entire copy of all styles.\n    hoverStl = el.__hoverStl = hoverStl !== false && (el.hoverStyle || hoverStl || {});\n    el.__hoverStlDirty = true;\n\n    // FIXME\n    // It is not completely right to save \"normal\"/\"emphasis\" flag on elements.\n    // It probably should be saved on `data` of series. Consider the cases:\n    // (1) A highlighted elements are moved out of the view port and re-enter\n    // again by dataZoom.\n    // (2) call `setOption` and replace elements totally when they are highlighted.\n    if (el.__highlighted) {\n        // Consider the case:\n        // The styles of a highlighted `el` is being updated. The new \"emphasis style\"\n        // should be adapted to the `el`. Notice here new \"normal styles\" should have\n        // been set outside and the cached \"normal style\" is out of date.\n        el.__cachedNormalStl = null;\n        // Do not clear `__cachedNormalZ2` here, because setting `z2` is not a constraint\n        // of this method. In most cases, `z2` is not set and hover style should be able\n        // to rollback. Of course, that would bring bug, but only in a rare case, see\n        // `doSingleLeaveHover` for details.\n        singleEnterNormal(el);\n\n        singleEnterEmphasis(el);\n    }\n}\n\nfunction onElementMouseOver(e) {\n    !shouldSilent(this, e)\n        // \"emphasis\" event highlight has higher priority than mouse highlight.\n        && !this.__highByOuter\n        && traverseUpdate(this, singleEnterEmphasis);\n}\n\nfunction onElementMouseOut(e) {\n    !shouldSilent(this, e)\n        // \"emphasis\" event highlight has higher priority than mouse highlight.\n        && !this.__highByOuter\n        && traverseUpdate(this, singleEnterNormal);\n}\n\nfunction onElementEmphasisEvent(highlightDigit) {\n    this.__highByOuter |= 1 << (highlightDigit || 0);\n    traverseUpdate(this, singleEnterEmphasis);\n}\n\nfunction onElementNormalEvent(highlightDigit) {\n    !(this.__highByOuter &= ~(1 << (highlightDigit || 0)))\n        && traverseUpdate(this, singleEnterNormal);\n}\n\nfunction shouldSilent(el, e) {\n    return el.__highDownSilentOnTouch && e.zrByTouch;\n}\n\n/**\n * Set hover style (namely \"emphasis style\") of element,\n * based on the current style of the given `el`.\n *\n * (1)\n * **CONSTRAINTS** for this method:\n * <A> This method MUST be called after all of the normal styles having been adopted\n * to the `el`.\n * <B> The input `hoverStyle` (that is, \"emphasis style\") MUST be the subset of the\n * \"normal style\" having been set to the el.\n * <C> `color` MUST be one of the \"normal styles\" (because color might be lifted as\n * a default hover style).\n *\n * The reason: this method treat the current style of the `el` as the \"normal style\"\n * and cache them when enter/update the \"emphasis style\". Consider the case: the `el`\n * is in \"emphasis\" state and `setOption`/`dispatchAction` trigger the style updating\n * logic, where the el should shift from the original emphasis style to the new\n * \"emphasis style\" and should be able to \"downplay\" back to the new \"normal style\".\n *\n * Indeed, it is error-prone to make a interface has so many constraints, but I have\n * not found a better solution yet to fit the backward compatibility, performance and\n * the current programming style.\n *\n * (2)\n * Call the method for a \"root\" element once. Do not call it for each descendants.\n * If the descendants elemenets of a group has itself hover style different from the\n * root group, we can simply mount the style on `el.hoverStyle` for them, but should\n * not call this method for them.\n *\n * (3) These input parameters can be set directly on `el`:\n *\n * @param {module:zrender/Element} el\n * @param {Object} [el.hoverStyle] See `graphic.setElementHoverStyle`.\n * @param {boolean} [el.highDownSilentOnTouch=false] See `graphic.setAsHighDownDispatcher`.\n * @param {Function} [el.highDownOnUpdate] See `graphic.setAsHighDownDispatcher`.\n * @param {Object|boolean} [hoverStyle] See `graphic.setElementHoverStyle`.\n */\nexport function setHoverStyle(el, hoverStyle) {\n    setAsHighDownDispatcher(el, true);\n    traverseUpdate(el, setElementHoverStyle, hoverStyle);\n}\n\n/**\n * @param {module:zrender/Element} el\n * @param {Function} [el.highDownOnUpdate] Called when state updated.\n *        Since `setHoverStyle` has the constraint that it must be called after\n *        all of the normal style updated, `highDownOnUpdate` is not needed to\n *        trigger if both `fromState` and `toState` is 'normal', and needed to\n *        trigger if both `fromState` and `toState` is 'emphasis', which enables\n *        to sync outside style settings to \"emphasis\" state.\n *        @this {string} This dispatcher `el`.\n *        @param {string} fromState Can be \"normal\" or \"emphasis\".\n *               `fromState` might equal to `toState`,\n *               for example, when this method is called when `el` is\n *               on \"emphasis\" state.\n *        @param {string} toState Can be \"normal\" or \"emphasis\".\n *\n *        FIXME\n *        CAUTION: Do not expose `highDownOnUpdate` outside echarts.\n *        Because it is not a complete solution. The update\n *        listener should not have been mount in element,\n *        and the normal/emphasis state should not have\n *        mantained on elements.\n *\n * @param {boolean} [el.highDownSilentOnTouch=false]\n *        In touch device, mouseover event will be trigger on touchstart event\n *        (see module:zrender/dom/HandlerProxy). By this mechanism, we can\n *        conveniently use hoverStyle when tap on touch screen without additional\n *        code for compatibility.\n *        But if the chart/component has select feature, which usually also use\n *        hoverStyle, there might be conflict between 'select-highlight' and\n *        'hover-highlight' especially when roam is enabled (see geo for example).\n *        In this case, `highDownSilentOnTouch` should be used to disable\n *        hover-highlight on touch device.\n * @param {boolean} [asDispatcher=true] If `false`, do not set as \"highDownDispatcher\".\n */\nexport function setAsHighDownDispatcher(el, asDispatcher) {\n    var disable = asDispatcher === false;\n    // Make `highDownSilentOnTouch` and `highDownOnUpdate` only work after\n    // `setAsHighDownDispatcher` called. Avoid it is modified by user unexpectedly.\n    el.__highDownSilentOnTouch = el.highDownSilentOnTouch;\n    el.__highDownOnUpdate = el.highDownOnUpdate;\n\n    // Simple optimize, since this method might be\n    // called for each elements of a group in some cases.\n    if (!disable || el.__highDownDispatcher) {\n        var method = disable ? 'off' : 'on';\n\n        // Duplicated function will be auto-ignored, see Eventful.js.\n        el[method]('mouseover', onElementMouseOver)[method]('mouseout', onElementMouseOut);\n        // Emphasis, normal can be triggered manually by API or other components like hover link.\n        el[method]('emphasis', onElementEmphasisEvent)[method]('normal', onElementNormalEvent);\n        // Also keep previous record.\n        el.__highByOuter = el.__highByOuter || 0;\n\n        el.__highDownDispatcher = !disable;\n    }\n}\n\n/**\n * @param {module:zrender/src/Element} el\n * @return {boolean}\n */\nexport function isHighDownDispatcher(el) {\n    return !!(el && el.__highDownDispatcher);\n}\n\n/**\n * Support hightlight/downplay record on each elements.\n * For the case: hover highlight/downplay (legend, visualMap, ...) and\n * user triggerred hightlight/downplay should not conflict.\n * Only all of the highlightDigit cleared, return to normal.\n * @param {string} highlightKey\n * @return {number} highlightDigit\n */\nexport function getHighlightDigit(highlightKey) {\n    var highlightDigit = _highlightKeyMap[highlightKey];\n    if (highlightDigit == null && _highlightNextDigit <= 32) {\n        highlightDigit = _highlightKeyMap[highlightKey] = _highlightNextDigit++;\n    }\n    return highlightDigit;\n}\n\n/**\n * See more info in `setTextStyleCommon`.\n * @param {Object|module:zrender/graphic/Style} normalStyle\n * @param {Object} emphasisStyle\n * @param {module:echarts/model/Model} normalModel\n * @param {module:echarts/model/Model} emphasisModel\n * @param {Object} opt Check `opt` of `setTextStyleCommon` to find other props.\n * @param {string|Function} [opt.defaultText]\n * @param {module:echarts/model/Model} [opt.labelFetcher] Fetch text by\n *      `opt.labelFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`\n * @param {module:echarts/model/Model} [opt.labelDataIndex] Fetch text by\n *      `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`\n * @param {module:echarts/model/Model} [opt.labelDimIndex] Fetch text by\n *      `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`\n * @param {Object} [normalSpecified]\n * @param {Object} [emphasisSpecified]\n */\nexport function setLabelStyle(\n    normalStyle, emphasisStyle,\n    normalModel, emphasisModel,\n    opt,\n    normalSpecified, emphasisSpecified\n) {\n    opt = opt || EMPTY_OBJ;\n    var labelFetcher = opt.labelFetcher;\n    var labelDataIndex = opt.labelDataIndex;\n    var labelDimIndex = opt.labelDimIndex;\n\n    // This scenario, `label.normal.show = true; label.emphasis.show = false`,\n    // is not supported util someone requests.\n\n    var showNormal = normalModel.getShallow('show');\n    var showEmphasis = emphasisModel.getShallow('show');\n\n    // Consider performance, only fetch label when necessary.\n    // If `normal.show` is `false` and `emphasis.show` is `true` and `emphasis.formatter` is not set,\n    // label should be displayed, where text is fetched by `normal.formatter` or `opt.defaultText`.\n    var baseText;\n    if (showNormal || showEmphasis) {\n        if (labelFetcher) {\n            baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex);\n        }\n        if (baseText == null) {\n            baseText = zrUtil.isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt) : opt.defaultText;\n        }\n    }\n    var normalStyleText = showNormal ? baseText : null;\n    var emphasisStyleText = showEmphasis\n        ? zrUtil.retrieve2(\n            labelFetcher\n                ? labelFetcher.getFormattedLabel(labelDataIndex, 'emphasis', null, labelDimIndex)\n                : null,\n            baseText\n        )\n        : null;\n\n    // Optimize: If style.text is null, text will not be drawn.\n    if (normalStyleText != null || emphasisStyleText != null) {\n        // Always set `textStyle` even if `normalStyle.text` is null, because default\n        // values have to be set on `normalStyle`.\n        // If we set default values on `emphasisStyle`, consider case:\n        // Firstly, `setOption(... label: {normal: {text: null}, emphasis: {show: true}} ...);`\n        // Secondly, `setOption(... label: {noraml: {show: true, text: 'abc', color: 'red'} ...);`\n        // Then the 'red' will not work on emphasis.\n        setTextStyle(normalStyle, normalModel, normalSpecified, opt);\n        setTextStyle(emphasisStyle, emphasisModel, emphasisSpecified, opt, true);\n    }\n\n    normalStyle.text = normalStyleText;\n    emphasisStyle.text = emphasisStyleText;\n}\n\n/**\n * Modify label style manually.\n * Only works after `setLabelStyle` and `setElementHoverStyle` called.\n *\n * @param {module:zrender/src/Element} el\n * @param {Object} [normalStyleProps] optional\n * @param {Object} [emphasisStyleProps] optional\n */\nexport function modifyLabelStyle(el, normalStyleProps, emphasisStyleProps) {\n    var elStyle = el.style;\n    if (normalStyleProps) {\n        rollbackDefaultTextStyle(elStyle);\n        el.setStyle(normalStyleProps);\n        applyDefaultTextStyle(elStyle);\n    }\n    elStyle = el.__hoverStl;\n    if (emphasisStyleProps && elStyle) {\n        rollbackDefaultTextStyle(elStyle);\n        zrUtil.extend(elStyle, emphasisStyleProps);\n        applyDefaultTextStyle(elStyle);\n    }\n}\n\n/**\n * Set basic textStyle properties.\n * See more info in `setTextStyleCommon`.\n * @param {Object|module:zrender/graphic/Style} textStyle\n * @param {module:echarts/model/Model} model\n * @param {Object} [specifiedTextStyle] Can be overrided by settings in model.\n * @param {Object} [opt] See `opt` of `setTextStyleCommon`.\n * @param {boolean} [isEmphasis]\n */\nexport function setTextStyle(\n    textStyle, textStyleModel, specifiedTextStyle, opt, isEmphasis\n) {\n    setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis);\n    specifiedTextStyle && zrUtil.extend(textStyle, specifiedTextStyle);\n    // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n\n    return textStyle;\n}\n\n/**\n * Set text option in the style.\n * See more info in `setTextStyleCommon`.\n * @deprecated\n * @param {Object} textStyle\n * @param {module:echarts/model/Model} labelModel\n * @param {string|boolean} defaultColor Default text color.\n *        If set as false, it will be processed as a emphasis style.\n */\nexport function setText(textStyle, labelModel, defaultColor) {\n    var opt = {isRectText: true};\n    var isEmphasis;\n\n    if (defaultColor === false) {\n        isEmphasis = true;\n    }\n    else {\n        // Support setting color as 'auto' to get visual color.\n        opt.autoColor = defaultColor;\n    }\n    setTextStyleCommon(textStyle, labelModel, opt, isEmphasis);\n    // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n}\n\n/**\n * The uniform entry of set text style, that is, retrieve style definitions\n * from `model` and set to `textStyle` object.\n *\n * Never in merge mode, but in overwrite mode, that is, all of the text style\n * properties will be set. (Consider the states of normal and emphasis and\n * default value can be adopted, merge would make the logic too complicated\n * to manage.)\n *\n * The `textStyle` object can either be a plain object or an instance of\n * `zrender/src/graphic/Style`, and either be the style of normal or emphasis.\n * After this mothod called, the `textStyle` object can then be used in\n * `el.setStyle(textStyle)` or `el.hoverStyle = textStyle`.\n *\n * Default value will be adopted and `insideRollbackOpt` will be created.\n * See `applyDefaultTextStyle` `rollbackDefaultTextStyle` for more details.\n *\n * opt: {\n *      disableBox: boolean, Whether diable drawing box of block (outer most).\n *      isRectText: boolean,\n *      autoColor: string, specify a color when color is 'auto',\n *              for textFill, textStroke, textBackgroundColor, and textBorderColor.\n *              If autoColor specified, it is used as default textFill.\n *      useInsideStyle:\n *              `true`: Use inside style (textFill, textStroke, textStrokeWidth)\n *                  if `textFill` is not specified.\n *              `false`: Do not use inside style.\n *              `null/undefined`: use inside style if `isRectText` is true and\n *                  `textFill` is not specified and textPosition contains `'inside'`.\n *      forceRich: boolean\n * }\n */\nfunction setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis) {\n    // Consider there will be abnormal when merge hover style to normal style if given default value.\n    opt = opt || EMPTY_OBJ;\n\n    if (opt.isRectText) {\n        var textPosition;\n        if (opt.getTextPosition) {\n            textPosition = opt.getTextPosition(textStyleModel, isEmphasis);\n        }\n        else {\n            textPosition = textStyleModel.getShallow('position')\n                || (isEmphasis ? null : 'inside');\n            // 'outside' is not a valid zr textPostion value, but used\n            // in bar series, and magric type should be considered.\n            textPosition === 'outside' && (textPosition = 'top');\n        }\n\n        textStyle.textPosition = textPosition;\n        textStyle.textOffset = textStyleModel.getShallow('offset');\n        var labelRotate = textStyleModel.getShallow('rotate');\n        labelRotate != null && (labelRotate *= Math.PI / 180);\n        textStyle.textRotation = labelRotate;\n        textStyle.textDistance = zrUtil.retrieve2(\n            textStyleModel.getShallow('distance'), isEmphasis ? null : 5\n        );\n    }\n\n    var ecModel = textStyleModel.ecModel;\n    var globalTextStyle = ecModel && ecModel.option.textStyle;\n\n    // Consider case:\n    // {\n    //     data: [{\n    //         value: 12,\n    //         label: {\n    //             rich: {\n    //                 // no 'a' here but using parent 'a'.\n    //             }\n    //         }\n    //     }],\n    //     rich: {\n    //         a: { ... }\n    //     }\n    // }\n    var richItemNames = getRichItemNames(textStyleModel);\n    var richResult;\n    if (richItemNames) {\n        richResult = {};\n        for (var name in richItemNames) {\n            if (richItemNames.hasOwnProperty(name)) {\n                // Cascade is supported in rich.\n                var richTextStyle = textStyleModel.getModel(['rich', name]);\n                // In rich, never `disableBox`.\n                // FIXME: consider `label: {formatter: '{a|xx}', color: 'blue', rich: {a: {}}}`,\n                // the default color `'blue'` will not be adopted if no color declared in `rich`.\n                // That might confuses users. So probably we should put `textStyleModel` as the\n                // root ancestor of the `richTextStyle`. But that would be a break change.\n                setTokenTextStyle(richResult[name] = {}, richTextStyle, globalTextStyle, opt, isEmphasis);\n            }\n        }\n    }\n    textStyle.rich = richResult;\n\n    setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, true);\n\n    if (opt.forceRich && !opt.textStyle) {\n        opt.textStyle = {};\n    }\n\n    return textStyle;\n}\n\n// Consider case:\n// {\n//     data: [{\n//         value: 12,\n//         label: {\n//             rich: {\n//                 // no 'a' here but using parent 'a'.\n//             }\n//         }\n//     }],\n//     rich: {\n//         a: { ... }\n//     }\n// }\nfunction getRichItemNames(textStyleModel) {\n    // Use object to remove duplicated names.\n    var richItemNameMap;\n    while (textStyleModel && textStyleModel !== textStyleModel.ecModel) {\n        var rich = (textStyleModel.option || EMPTY_OBJ).rich;\n        if (rich) {\n            richItemNameMap = richItemNameMap || {};\n            for (var name in rich) {\n                if (rich.hasOwnProperty(name)) {\n                    richItemNameMap[name] = 1;\n                }\n            }\n        }\n        textStyleModel = textStyleModel.parentModel;\n    }\n    return richItemNameMap;\n}\n\nfunction setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, isBlock) {\n    // In merge mode, default value should not be given.\n    globalTextStyle = !isEmphasis && globalTextStyle || EMPTY_OBJ;\n\n    textStyle.textFill = getAutoColor(textStyleModel.getShallow('color'), opt)\n        || globalTextStyle.color;\n    textStyle.textStroke = getAutoColor(textStyleModel.getShallow('textBorderColor'), opt)\n        || globalTextStyle.textBorderColor;\n    textStyle.textStrokeWidth = zrUtil.retrieve2(\n        textStyleModel.getShallow('textBorderWidth'),\n        globalTextStyle.textBorderWidth\n    );\n\n    if (!isEmphasis) {\n        if (isBlock) {\n            textStyle.insideRollbackOpt = opt;\n            applyDefaultTextStyle(textStyle);\n        }\n\n        // Set default finally.\n        if (textStyle.textFill == null) {\n            textStyle.textFill = opt.autoColor;\n        }\n    }\n\n    // Do not use `getFont` here, because merge should be supported, where\n    // part of these properties may be changed in emphasis style, and the\n    // others should remain their original value got from normal style.\n    textStyle.fontStyle = textStyleModel.getShallow('fontStyle') || globalTextStyle.fontStyle;\n    textStyle.fontWeight = textStyleModel.getShallow('fontWeight') || globalTextStyle.fontWeight;\n    textStyle.fontSize = textStyleModel.getShallow('fontSize') || globalTextStyle.fontSize;\n    textStyle.fontFamily = textStyleModel.getShallow('fontFamily') || globalTextStyle.fontFamily;\n\n    textStyle.textAlign = textStyleModel.getShallow('align');\n    textStyle.textVerticalAlign = textStyleModel.getShallow('verticalAlign')\n        || textStyleModel.getShallow('baseline');\n\n    textStyle.textLineHeight = textStyleModel.getShallow('lineHeight');\n    textStyle.textWidth = textStyleModel.getShallow('width');\n    textStyle.textHeight = textStyleModel.getShallow('height');\n    textStyle.textTag = textStyleModel.getShallow('tag');\n\n    if (!isBlock || !opt.disableBox) {\n        textStyle.textBackgroundColor = getAutoColor(textStyleModel.getShallow('backgroundColor'), opt);\n        textStyle.textPadding = textStyleModel.getShallow('padding');\n        textStyle.textBorderColor = getAutoColor(textStyleModel.getShallow('borderColor'), opt);\n        textStyle.textBorderWidth = textStyleModel.getShallow('borderWidth');\n        textStyle.textBorderRadius = textStyleModel.getShallow('borderRadius');\n\n        textStyle.textBoxShadowColor = textStyleModel.getShallow('shadowColor');\n        textStyle.textBoxShadowBlur = textStyleModel.getShallow('shadowBlur');\n        textStyle.textBoxShadowOffsetX = textStyleModel.getShallow('shadowOffsetX');\n        textStyle.textBoxShadowOffsetY = textStyleModel.getShallow('shadowOffsetY');\n    }\n\n    textStyle.textShadowColor = textStyleModel.getShallow('textShadowColor')\n        || globalTextStyle.textShadowColor;\n    textStyle.textShadowBlur = textStyleModel.getShallow('textShadowBlur')\n        || globalTextStyle.textShadowBlur;\n    textStyle.textShadowOffsetX = textStyleModel.getShallow('textShadowOffsetX')\n        || globalTextStyle.textShadowOffsetX;\n    textStyle.textShadowOffsetY = textStyleModel.getShallow('textShadowOffsetY')\n        || globalTextStyle.textShadowOffsetY;\n}\n\nfunction getAutoColor(color, opt) {\n    return color !== 'auto' ? color : (opt && opt.autoColor) ? opt.autoColor : null;\n}\n\n/**\n * Give some default value to the input `textStyle` object, based on the current settings\n * in this `textStyle` object.\n *\n * The Scenario:\n * when text position is `inside` and `textFill` is not specified, we show\n * text border by default for better view. But it should be considered that text position\n * might be changed when hovering or being emphasis, where the `insideRollback` is used to\n * restore the style.\n *\n * Usage (& NOTICE):\n * When a style object (eithor plain object or instance of `zrender/src/graphic/Style`) is\n * about to be modified on its text related properties, `rollbackDefaultTextStyle` should\n * be called before the modification and `applyDefaultTextStyle` should be called after that.\n * (For the case that all of the text related properties is reset, like `setTextStyleCommon`\n * does, `rollbackDefaultTextStyle` is not needed to be called).\n */\nfunction applyDefaultTextStyle(textStyle) {\n    var textPosition = textStyle.textPosition;\n    var opt = textStyle.insideRollbackOpt;\n    var insideRollback;\n\n    if (opt && textStyle.textFill == null) {\n        var autoColor = opt.autoColor;\n        var isRectText = opt.isRectText;\n        var useInsideStyle = opt.useInsideStyle;\n\n        var useInsideStyleCache = useInsideStyle !== false\n            && (useInsideStyle === true\n                || (isRectText\n                    && textPosition\n                    // textPosition can be [10, 30]\n                    && typeof textPosition === 'string'\n                    && textPosition.indexOf('inside') >= 0\n                )\n            );\n        var useAutoColorCache = !useInsideStyleCache && autoColor != null;\n\n        // All of the props declared in `CACHED_LABEL_STYLE_PROPERTIES` are to be cached.\n        if (useInsideStyleCache || useAutoColorCache) {\n            insideRollback = {\n                textFill: textStyle.textFill,\n                textStroke: textStyle.textStroke,\n                textStrokeWidth: textStyle.textStrokeWidth\n            };\n        }\n        if (useInsideStyleCache) {\n            textStyle.textFill = '#fff';\n            // Consider text with #fff overflow its container.\n            if (textStyle.textStroke == null) {\n                textStyle.textStroke = autoColor;\n                textStyle.textStrokeWidth == null && (textStyle.textStrokeWidth = 2);\n            }\n        }\n        if (useAutoColorCache) {\n            textStyle.textFill = autoColor;\n        }\n    }\n\n    // Always set `insideRollback`, so that the previous one can be cleared.\n    textStyle.insideRollback = insideRollback;\n}\n\n/**\n * Consider the case: in a scatter,\n * label: {\n *     normal: {position: 'inside'},\n *     emphasis: {position: 'top'}\n * }\n * In the normal state, the `textFill` will be set as '#fff' for pretty view (see\n * `applyDefaultTextStyle`), but when switching to emphasis state, the `textFill`\n * should be retured to 'autoColor', but not keep '#fff'.\n */\nfunction rollbackDefaultTextStyle(style) {\n    var insideRollback = style.insideRollback;\n    if (insideRollback) {\n        // Reset all of the props in `CACHED_LABEL_STYLE_PROPERTIES`.\n        style.textFill = insideRollback.textFill;\n        style.textStroke = insideRollback.textStroke;\n        style.textStrokeWidth = insideRollback.textStrokeWidth;\n        style.insideRollback = null;\n    }\n}\n\nexport function getFont(opt, ecModel) {\n    // ecModel or default text style model.\n    var gTextStyleModel = ecModel || ecModel.getModel('textStyle');\n    return zrUtil.trim([\n        // FIXME in node-canvas fontWeight is before fontStyle\n        opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '',\n        opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '',\n        (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px',\n        opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'\n    ].join(' '));\n}\n\nfunction animateOrSetProps(isUpdate, el, props, animatableModel, dataIndex, cb) {\n    if (typeof dataIndex === 'function') {\n        cb = dataIndex;\n        dataIndex = null;\n    }\n    // Do not check 'animation' property directly here. Consider this case:\n    // animation model is an `itemModel`, whose does not have `isAnimationEnabled`\n    // but its parent model (`seriesModel`) does.\n    var animationEnabled = animatableModel && animatableModel.isAnimationEnabled();\n\n    if (animationEnabled) {\n        var postfix = isUpdate ? 'Update' : '';\n        var duration = animatableModel.getShallow('animationDuration' + postfix);\n        var animationEasing = animatableModel.getShallow('animationEasing' + postfix);\n        var animationDelay = animatableModel.getShallow('animationDelay' + postfix);\n        if (typeof animationDelay === 'function') {\n            animationDelay = animationDelay(\n                dataIndex,\n                animatableModel.getAnimationDelayParams\n                    ? animatableModel.getAnimationDelayParams(el, dataIndex)\n                    : null\n            );\n        }\n        if (typeof duration === 'function') {\n            duration = duration(dataIndex);\n        }\n\n        duration > 0\n            ? el.animateTo(props, duration, animationDelay || 0, animationEasing, cb, !!cb)\n            : (el.stopAnimation(), el.attr(props), cb && cb());\n    }\n    else {\n        el.stopAnimation();\n        el.attr(props);\n        cb && cb();\n    }\n}\n\n/**\n * Update graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So if do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n *\n * @param {module:zrender/Element} el\n * @param {Object} props\n * @param {module:echarts/model/Model} [animatableModel]\n * @param {number} [dataIndex]\n * @param {Function} [cb]\n * @example\n *     graphic.updateProps(el, {\n *         position: [100, 100]\n *     }, seriesModel, dataIndex, function () { console.log('Animation done!'); });\n *     // Or\n *     graphic.updateProps(el, {\n *         position: [100, 100]\n *     }, seriesModel, function () { console.log('Animation done!'); });\n */\nexport function updateProps(el, props, animatableModel, dataIndex, cb) {\n    animateOrSetProps(true, el, props, animatableModel, dataIndex, cb);\n}\n\n/**\n * Init graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So if do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n *\n * @param {module:zrender/Element} el\n * @param {Object} props\n * @param {module:echarts/model/Model} [animatableModel]\n * @param {number} [dataIndex]\n * @param {Function} cb\n */\nexport function initProps(el, props, animatableModel, dataIndex, cb) {\n    animateOrSetProps(false, el, props, animatableModel, dataIndex, cb);\n}\n\n/**\n * Get transform matrix of target (param target),\n * in coordinate of its ancestor (param ancestor)\n *\n * @param {module:zrender/mixin/Transformable} target\n * @param {module:zrender/mixin/Transformable} [ancestor]\n */\nexport function getTransform(target, ancestor) {\n    var mat = matrix.identity([]);\n\n    while (target && target !== ancestor) {\n        matrix.mul(mat, target.getLocalTransform(), mat);\n        target = target.parent;\n    }\n\n    return mat;\n}\n\n/**\n * Apply transform to an vertex.\n * @param {Array.<number>} target [x, y]\n * @param {Array.<number>|TypedArray.<number>|Object} transform Can be:\n *      + Transform matrix: like [1, 0, 0, 1, 0, 0]\n *      + {position, rotation, scale}, the same as `zrender/Transformable`.\n * @param {boolean=} invert Whether use invert matrix.\n * @return {Array.<number>} [x, y]\n */\nexport function applyTransform(target, transform, invert) {\n    if (transform && !zrUtil.isArrayLike(transform)) {\n        transform = Transformable.getLocalTransform(transform);\n    }\n\n    if (invert) {\n        transform = matrix.invert([], transform);\n    }\n    return vector.applyTransform([], target, transform);\n}\n\n/**\n * @param {string} direction 'left' 'right' 'top' 'bottom'\n * @param {Array.<number>} transform Transform matrix: like [1, 0, 0, 1, 0, 0]\n * @param {boolean=} invert Whether use invert matrix.\n * @return {string} Transformed direction. 'left' 'right' 'top' 'bottom'\n */\nexport function transformDirection(direction, transform, invert) {\n\n    // Pick a base, ensure that transform result will not be (0, 0).\n    var hBase = (transform[4] === 0 || transform[5] === 0 || transform[0] === 0)\n        ? 1 : Math.abs(2 * transform[4] / transform[0]);\n    var vBase = (transform[4] === 0 || transform[5] === 0 || transform[2] === 0)\n        ? 1 : Math.abs(2 * transform[4] / transform[2]);\n\n    var vertex = [\n        direction === 'left' ? -hBase : direction === 'right' ? hBase : 0,\n        direction === 'top' ? -vBase : direction === 'bottom' ? vBase : 0\n    ];\n\n    vertex = applyTransform(vertex, transform, invert);\n\n    return Math.abs(vertex[0]) > Math.abs(vertex[1])\n        ? (vertex[0] > 0 ? 'right' : 'left')\n        : (vertex[1] > 0 ? 'bottom' : 'top');\n}\n\n/**\n * Apply group transition animation from g1 to g2.\n * If no animatableModel, no animation.\n */\nexport function groupTransition(g1, g2, animatableModel, cb) {\n    if (!g1 || !g2) {\n        return;\n    }\n\n    function getElMap(g) {\n        var elMap = {};\n        g.traverse(function (el) {\n            if (!el.isGroup && el.anid) {\n                elMap[el.anid] = el;\n            }\n        });\n        return elMap;\n    }\n    function getAnimatableProps(el) {\n        var obj = {\n            position: vector.clone(el.position),\n            rotation: el.rotation\n        };\n        if (el.shape) {\n            obj.shape = zrUtil.extend({}, el.shape);\n        }\n        return obj;\n    }\n    var elMap1 = getElMap(g1);\n\n    g2.traverse(function (el) {\n        if (!el.isGroup && el.anid) {\n            var oldEl = elMap1[el.anid];\n            if (oldEl) {\n                var newProp = getAnimatableProps(el);\n                el.attr(getAnimatableProps(oldEl));\n                updateProps(el, newProp, animatableModel, el.dataIndex);\n            }\n            // else {\n            //     if (el.previousProps) {\n            //         graphic.updateProps\n            //     }\n            // }\n        }\n    });\n}\n\n/**\n * @param {Array.<Array.<number>>} points Like: [[23, 44], [53, 66], ...]\n * @param {Object} rect {x, y, width, height}\n * @return {Array.<Array.<number>>} A new clipped points.\n */\nexport function clipPointsByRect(points, rect) {\n    // FIXME: this way migth be incorrect when grpahic clipped by a corner.\n    // and when element have border.\n    return zrUtil.map(points, function (point) {\n        var x = point[0];\n        x = mathMax(x, rect.x);\n        x = mathMin(x, rect.x + rect.width);\n        var y = point[1];\n        y = mathMax(y, rect.y);\n        y = mathMin(y, rect.y + rect.height);\n        return [x, y];\n    });\n}\n\n/**\n * @param {Object} targetRect {x, y, width, height}\n * @param {Object} rect {x, y, width, height}\n * @return {Object} A new clipped rect. If rect size are negative, return undefined.\n */\nexport function clipRectByRect(targetRect, rect) {\n    var x = mathMax(targetRect.x, rect.x);\n    var x2 = mathMin(targetRect.x + targetRect.width, rect.x + rect.width);\n    var y = mathMax(targetRect.y, rect.y);\n    var y2 = mathMin(targetRect.y + targetRect.height, rect.y + rect.height);\n\n    // If the total rect is cliped, nothing, including the border,\n    // should be painted. So return undefined.\n    if (x2 >= x && y2 >= y) {\n        return {\n            x: x,\n            y: y,\n            width: x2 - x,\n            height: y2 - y\n        };\n    }\n}\n\n/**\n * @param {string} iconStr Support 'image://' or 'path://' or direct svg path.\n * @param {Object} [opt] Properties of `module:zrender/Element`, except `style`.\n * @param {Object} [rect] {x, y, width, height}\n * @return {module:zrender/Element} Icon path or image element.\n */\nexport function createIcon(iconStr, opt, rect) {\n    opt = zrUtil.extend({rectHover: true}, opt);\n    var style = opt.style = {strokeNoScale: true};\n    rect = rect || {x: -1, y: -1, width: 2, height: 2};\n\n    if (iconStr) {\n        return iconStr.indexOf('image://') === 0\n            ? (\n                style.image = iconStr.slice(8),\n                zrUtil.defaults(style, rect),\n                new ZImage(opt)\n            )\n            : (\n                makePath(\n                    iconStr.replace('path://', ''),\n                    opt,\n                    rect,\n                    'center'\n                )\n            );\n    }\n}\n\n/**\n * Return `true` if the given line (line `a`) and the given polygon\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n *\n * @param {number} a1x\n * @param {number} a1y\n * @param {number} a2x\n * @param {number} a2y\n * @param {Array.<Array.<number>>} points Points of the polygon.\n * @return {boolean}\n */\nexport function linePolygonIntersect(a1x, a1y, a2x, a2y, points) {\n    for (var i = 0, p2 = points[points.length - 1]; i < points.length; i++) {\n        var p = points[i];\n        if (lineLineIntersect(a1x, a1y, a2x, a2y, p[0], p[1], p2[0], p2[1])) {\n            return true;\n        }\n        p2 = p;\n    }\n}\n\n/**\n * Return `true` if the given two lines (line `a` and line `b`)\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n *\n * @param {number} a1x\n * @param {number} a1y\n * @param {number} a2x\n * @param {number} a2y\n * @param {number} b1x\n * @param {number} b1y\n * @param {number} b2x\n * @param {number} b2y\n * @return {boolean}\n */\nexport function lineLineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) {\n    // let `vec_m` to be `vec_a2 - vec_a1` and `vec_n` to be `vec_b2 - vec_b1`.\n    var mx = a2x - a1x;\n    var my = a2y - a1y;\n    var nx = b2x - b1x;\n    var ny = b2y - b1y;\n\n    // `vec_m` and `vec_n` are parallel iff\n    //     exising `k` such that `vec_m = k · vec_n`, equivalent to `vec_m X vec_n = 0`.\n    var nmCrossProduct = crossProduct2d(nx, ny, mx, my);\n    if (nearZero(nmCrossProduct)) {\n        return false;\n    }\n\n    // `vec_m` and `vec_n` are intersect iff\n    //     existing `p` and `q` in [0, 1] such that `vec_a1 + p * vec_m = vec_b1 + q * vec_n`,\n    //     such that `q = ((vec_a1 - vec_b1) X vec_m) / (vec_n X vec_m)`\n    //           and `p = ((vec_a1 - vec_b1) X vec_n) / (vec_n X vec_m)`.\n    var b1a1x = a1x - b1x;\n    var b1a1y = a1y - b1y;\n    var q = crossProduct2d(b1a1x, b1a1y, mx, my) / nmCrossProduct;\n    if (q < 0 || q > 1) {\n        return false;\n    }\n    var p = crossProduct2d(b1a1x, b1a1y, nx, ny) / nmCrossProduct;\n    if (p < 0 || p > 1) {\n        return false;\n    }\n\n    return true;\n}\n\n/**\n * Cross product of 2-dimension vector.\n */\nfunction crossProduct2d(x1, y1, x2, y2) {\n    return x1 * y2 - x2 * y1;\n}\n\nfunction nearZero(val) {\n    return val <= (1e-6) && val >= -(1e-6);\n}\n\n// Register built-in shapes. These shapes might be overwirtten\n// by users, although we do not recommend that.\nregisterShape('circle', Circle);\nregisterShape('sector', Sector);\nregisterShape('ring', Ring);\nregisterShape('polygon', Polygon);\nregisterShape('polyline', Polyline);\nregisterShape('rect', Rect);\nregisterShape('line', Line);\nregisterShape('bezierCurve', BezierCurve);\nregisterShape('arc', Arc);\n\nexport {\n    Group,\n    ZImage as Image,\n    Text,\n    Circle,\n    Sector,\n    Ring,\n    Polygon,\n    Polyline,\n    Rect,\n    Line,\n    BezierCurve,\n    Arc,\n    IncrementalDisplayable,\n    CompoundPath,\n    LinearGradient,\n    RadialGradient,\n    BoundingRect\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\nimport * as textContain from 'zrender/src/contain/text';\nimport * as graphicUtil from '../../util/graphic';\n\nvar PATH_COLOR = ['textStyle', 'color'];\n\nexport default {\n    /**\n     * Get color property or get color from option.textStyle.color\n     * @param {boolean} [isEmphasis]\n     * @return {string}\n     */\n    getTextColor: function (isEmphasis) {\n        var ecModel = this.ecModel;\n        return this.getShallow('color')\n            || (\n                (!isEmphasis && ecModel) ? ecModel.get(PATH_COLOR) : null\n            );\n    },\n\n    /**\n     * Create font string from fontStyle, fontWeight, fontSize, fontFamily\n     * @return {string}\n     */\n    getFont: function () {\n        return graphicUtil.getFont({\n            fontStyle: this.getShallow('fontStyle'),\n            fontWeight: this.getShallow('fontWeight'),\n            fontSize: this.getShallow('fontSize'),\n            fontFamily: this.getShallow('fontFamily')\n        }, this.ecModel);\n    },\n\n    getTextRect: function (text) {\n        return textContain.getBoundingRect(\n            text,\n            this.getFont(),\n            this.getShallow('align'),\n            this.getShallow('verticalAlign') || this.getShallow('baseline'),\n            this.getShallow('padding'),\n            this.getShallow('lineHeight'),\n            this.getShallow('rich'),\n            this.getShallow('truncateText')\n        );\n    }\n};","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport makeStyleMapper from './makeStyleMapper';\n\nvar getItemStyle = makeStyleMapper(\n    [\n        ['fill', 'color'],\n        ['stroke', 'borderColor'],\n        ['lineWidth', 'borderWidth'],\n        ['opacity'],\n        ['shadowBlur'],\n        ['shadowOffsetX'],\n        ['shadowOffsetY'],\n        ['shadowColor'],\n        ['textPosition'],\n        ['textAlign']\n    ]\n);\n\nexport default {\n    getItemStyle: function (excludes, includes) {\n        var style = getItemStyle(this, excludes, includes);\n        var lineDash = this.getBorderLineDash();\n        lineDash && (style.lineDash = lineDash);\n        return style;\n    },\n\n    getBorderLineDash: function () {\n        var lineType = this.get('borderType');\n        return (lineType === 'solid' || lineType == null) ? null\n            : (lineType === 'dashed' ? [5, 5] : [1, 1]);\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 * @module echarts/model/Model\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport env from 'zrender/src/core/env';\nimport {makeInner} from '../util/model';\nimport {enableClassExtend, enableClassCheck} from '../util/clazz';\n\nimport lineStyleMixin from './mixin/lineStyle';\nimport areaStyleMixin from './mixin/areaStyle';\nimport textStyleMixin from './mixin/textStyle';\nimport itemStyleMixin from './mixin/itemStyle';\n\nvar mixin = zrUtil.mixin;\nvar inner = makeInner();\n\n/**\n * @alias module:echarts/model/Model\n * @constructor\n * @param {Object} [option]\n * @param {module:echarts/model/Model} [parentModel]\n * @param {module:echarts/model/Global} [ecModel]\n */\nfunction Model(option, parentModel, ecModel) {\n    /**\n     * @type {module:echarts/model/Model}\n     * @readOnly\n     */\n    this.parentModel = parentModel;\n\n    /**\n     * @type {module:echarts/model/Global}\n     * @readOnly\n     */\n    this.ecModel = ecModel;\n\n    /**\n     * @type {Object}\n     * @protected\n     */\n    this.option = option;\n\n    // Simple optimization\n    // if (this.init) {\n    //     if (arguments.length <= 4) {\n    //         this.init(option, parentModel, ecModel, extraOpt);\n    //     }\n    //     else {\n    //         this.init.apply(this, arguments);\n    //     }\n    // }\n}\n\nModel.prototype = {\n\n    constructor: Model,\n\n    /**\n     * Model 的初始化函数\n     * @param {Object} option\n     */\n    init: null,\n\n    /**\n     * 从新的 Option merge\n     */\n    mergeOption: function (option) {\n        zrUtil.merge(this.option, option, true);\n    },\n\n    /**\n     * @param {string|Array.<string>} path\n     * @param {boolean} [ignoreParent=false]\n     * @return {*}\n     */\n    get: function (path, ignoreParent) {\n        if (path == null) {\n            return this.option;\n        }\n\n        return doGet(\n            this.option,\n            this.parsePath(path),\n            !ignoreParent && getParent(this, path)\n        );\n    },\n\n    /**\n     * @param {string} key\n     * @param {boolean} [ignoreParent=false]\n     * @return {*}\n     */\n    getShallow: function (key, ignoreParent) {\n        var option = this.option;\n\n        var val = option == null ? option : option[key];\n        var parentModel = !ignoreParent && getParent(this, key);\n        if (val == null && parentModel) {\n            val = parentModel.getShallow(key);\n        }\n        return val;\n    },\n\n    /**\n     * @param {string|Array.<string>} [path]\n     * @param {module:echarts/model/Model} [parentModel]\n     * @return {module:echarts/model/Model}\n     */\n    getModel: function (path, parentModel) {\n        var obj = path == null\n            ? this.option\n            : doGet(this.option, path = this.parsePath(path));\n\n        var thisParentModel;\n        parentModel = parentModel || (\n            (thisParentModel = getParent(this, path))\n                && thisParentModel.getModel(path)\n        );\n\n        return new Model(obj, parentModel, this.ecModel);\n    },\n\n    /**\n     * If model has option\n     */\n    isEmpty: function () {\n        return this.option == null;\n    },\n\n    restoreData: function () {},\n\n    // Pending\n    clone: function () {\n        var Ctor = this.constructor;\n        return new Ctor(zrUtil.clone(this.option));\n    },\n\n    setReadOnly: function (properties) {\n        // clazzUtil.setReadOnly(this, properties);\n    },\n\n    // If path is null/undefined, return null/undefined.\n    parsePath: function (path) {\n        if (typeof path === 'string') {\n            path = path.split('.');\n        }\n        return path;\n    },\n\n    /**\n     * @param {Function} getParentMethod\n     *        param {Array.<string>|string} path\n     *        return {module:echarts/model/Model}\n     */\n    customizeGetParent: function (getParentMethod) {\n        inner(this).getParent = getParentMethod;\n    },\n\n    isAnimationEnabled: function () {\n        if (!env.node) {\n            if (this.option.animation != null) {\n                return !!this.option.animation;\n            }\n            else if (this.parentModel) {\n                return this.parentModel.isAnimationEnabled();\n            }\n        }\n    }\n\n};\n\nfunction doGet(obj, pathArr, parentModel) {\n    for (var i = 0; i < pathArr.length; i++) {\n        // Ignore empty\n        if (!pathArr[i]) {\n            continue;\n        }\n        // obj could be number/string/... (like 0)\n        obj = (obj && typeof obj === 'object') ? obj[pathArr[i]] : null;\n        if (obj == null) {\n            break;\n        }\n    }\n    if (obj == null && parentModel) {\n        obj = parentModel.get(pathArr);\n    }\n    return obj;\n}\n\n// `path` can be null/undefined\nfunction getParent(model, path) {\n    var getParentMethod = inner(model).getParent;\n    return getParentMethod ? getParentMethod.call(model, path) : model.parentModel;\n}\n\n// Enable Model.extend.\nenableClassExtend(Model);\nenableClassCheck(Model);\n\nmixin(Model, lineStyleMixin);\nmixin(Model, areaStyleMixin);\nmixin(Model, textStyleMixin);\nmixin(Model, itemStyleMixin);\n\nexport default Model;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport {parseClassType} from './clazz';\n\nvar base = 0;\n\n/**\n * @public\n * @param {string} type\n * @return {string}\n */\nexport function getUID(type) {\n    // Considering the case of crossing js context,\n    // use Math.random to make id as unique as possible.\n    return [(type || ''), base++, Math.random().toFixed(5)].join('_');\n}\n\n/**\n * @inner\n */\nexport function enableSubTypeDefaulter(entity) {\n\n    var subTypeDefaulters = {};\n\n    entity.registerSubTypeDefaulter = function (componentType, defaulter) {\n        componentType = parseClassType(componentType);\n        subTypeDefaulters[componentType.main] = defaulter;\n    };\n\n    entity.determineSubType = function (componentType, option) {\n        var type = option.type;\n        if (!type) {\n            var componentTypeMain = parseClassType(componentType).main;\n            if (entity.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) {\n                type = subTypeDefaulters[componentTypeMain](option);\n            }\n        }\n        return type;\n    };\n\n    return entity;\n}\n\n/**\n * Topological travel on Activity Network (Activity On Vertices).\n * Dependencies is defined in Model.prototype.dependencies, like ['xAxis', 'yAxis'].\n *\n * If 'xAxis' or 'yAxis' is absent in componentTypeList, just ignore it in topology.\n *\n * If there is circle dependencey, Error will be thrown.\n *\n */\nexport function enableTopologicalTravel(entity, dependencyGetter) {\n\n    /**\n     * @public\n     * @param {Array.<string>} targetNameList Target Component type list.\n     *                                           Can be ['aa', 'bb', 'aa.xx']\n     * @param {Array.<string>} fullNameList By which we can build dependency graph.\n     * @param {Function} callback Params: componentType, dependencies.\n     * @param {Object} context Scope of callback.\n     */\n    entity.topologicalTravel = function (targetNameList, fullNameList, callback, context) {\n        if (!targetNameList.length) {\n            return;\n        }\n\n        var result = makeDepndencyGraph(fullNameList);\n        var graph = result.graph;\n        var stack = result.noEntryList;\n\n        var targetNameSet = {};\n        zrUtil.each(targetNameList, function (name) {\n            targetNameSet[name] = true;\n        });\n\n        while (stack.length) {\n            var currComponentType = stack.pop();\n            var currVertex = graph[currComponentType];\n            var isInTargetNameSet = !!targetNameSet[currComponentType];\n            if (isInTargetNameSet) {\n                callback.call(context, currComponentType, currVertex.originalDeps.slice());\n                delete targetNameSet[currComponentType];\n            }\n            zrUtil.each(\n                currVertex.successor,\n                isInTargetNameSet ? removeEdgeAndAdd : removeEdge\n            );\n        }\n\n        zrUtil.each(targetNameSet, function () {\n            throw new Error('Circle dependency may exists');\n        });\n\n        function removeEdge(succComponentType) {\n            graph[succComponentType].entryCount--;\n            if (graph[succComponentType].entryCount === 0) {\n                stack.push(succComponentType);\n            }\n        }\n\n        // Consider this case: legend depends on series, and we call\n        // chart.setOption({series: [...]}), where only series is in option.\n        // If we do not have 'removeEdgeAndAdd', legendModel.mergeOption will\n        // not be called, but only sereis.mergeOption is called. Thus legend\n        // have no chance to update its local record about series (like which\n        // name of series is available in legend).\n        function removeEdgeAndAdd(succComponentType) {\n            targetNameSet[succComponentType] = true;\n            removeEdge(succComponentType);\n        }\n    };\n\n    /**\n     * DepndencyGraph: {Object}\n     * key: conponentType,\n     * value: {\n     *     successor: [conponentTypes...],\n     *     originalDeps: [conponentTypes...],\n     *     entryCount: {number}\n     * }\n     */\n    function makeDepndencyGraph(fullNameList) {\n        var graph = {};\n        var noEntryList = [];\n\n        zrUtil.each(fullNameList, function (name) {\n\n            var thisItem = createDependencyGraphItem(graph, name);\n            var originalDeps = thisItem.originalDeps = dependencyGetter(name);\n\n            var availableDeps = getAvailableDependencies(originalDeps, fullNameList);\n            thisItem.entryCount = availableDeps.length;\n            if (thisItem.entryCount === 0) {\n                noEntryList.push(name);\n            }\n\n            zrUtil.each(availableDeps, function (dependentName) {\n                if (zrUtil.indexOf(thisItem.predecessor, dependentName) < 0) {\n                    thisItem.predecessor.push(dependentName);\n                }\n                var thatItem = createDependencyGraphItem(graph, dependentName);\n                if (zrUtil.indexOf(thatItem.successor, dependentName) < 0) {\n                    thatItem.successor.push(name);\n                }\n            });\n        });\n\n        return {graph: graph, noEntryList: noEntryList};\n    }\n\n    function createDependencyGraphItem(graph, name) {\n        if (!graph[name]) {\n            graph[name] = {predecessor: [], successor: []};\n        }\n        return graph[name];\n    }\n\n    function getAvailableDependencies(originalDeps, fullNameList) {\n        var availableDeps = [];\n        zrUtil.each(originalDeps, function (dep) {\n            zrUtil.indexOf(fullNameList, dep) >= 0 && availableDeps.push(dep);\n        });\n        return availableDeps;\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embeded for some of the code in this file:\n* The method \"quantile\" was copied from \"d3.js\".\n* (See more details in the comment of the method below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar RADIAN_EPSILON = 1e-4;\n\nfunction _trim(str) {\n    return str.replace(/^\\s+|\\s+$/g, '');\n}\n\n/**\n * Linear mapping a value from domain to range\n * @memberOf module:echarts/util/number\n * @param  {(number|Array.<number>)} val\n * @param  {Array.<number>} domain Domain extent domain[0] can be bigger than domain[1]\n * @param  {Array.<number>} range  Range extent range[0] can be bigger than range[1]\n * @param  {boolean} clamp\n * @return {(number|Array.<number>}\n */\nexport function linearMap(val, domain, range, clamp) {\n    var subDomain = domain[1] - domain[0];\n    var subRange = range[1] - range[0];\n\n    if (subDomain === 0) {\n        return subRange === 0\n            ? range[0]\n            : (range[0] + range[1]) / 2;\n    }\n\n    // Avoid accuracy problem in edge, such as\n    // 146.39 - 62.83 === 83.55999999999999.\n    // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError\n    // It is a little verbose for efficiency considering this method\n    // is a hotspot.\n    if (clamp) {\n        if (subDomain > 0) {\n            if (val <= domain[0]) {\n                return range[0];\n            }\n            else if (val >= domain[1]) {\n                return range[1];\n            }\n        }\n        else {\n            if (val >= domain[0]) {\n                return range[0];\n            }\n            else if (val <= domain[1]) {\n                return range[1];\n            }\n        }\n    }\n    else {\n        if (val === domain[0]) {\n            return range[0];\n        }\n        if (val === domain[1]) {\n            return range[1];\n        }\n    }\n\n    return (val - domain[0]) / subDomain * subRange + range[0];\n}\n\n/**\n * Convert a percent string to absolute number.\n * Returns NaN if percent is not a valid string or number\n * @memberOf module:echarts/util/number\n * @param {string|number} percent\n * @param {number} all\n * @return {number}\n */\nexport function parsePercent(percent, all) {\n    switch (percent) {\n        case 'center':\n        case 'middle':\n            percent = '50%';\n            break;\n        case 'left':\n        case 'top':\n            percent = '0%';\n            break;\n        case 'right':\n        case 'bottom':\n            percent = '100%';\n            break;\n    }\n    if (typeof percent === 'string') {\n        if (_trim(percent).match(/%$/)) {\n            return parseFloat(percent) / 100 * all;\n        }\n\n        return parseFloat(percent);\n    }\n\n    return percent == null ? NaN : +percent;\n}\n\n/**\n * (1) Fix rounding error of float numbers.\n * (2) Support return string to avoid scientific notation like '3.5e-7'.\n *\n * @param {number} x\n * @param {number} [precision]\n * @param {boolean} [returnStr]\n * @return {number|string}\n */\nexport function round(x, precision, returnStr) {\n    if (precision == null) {\n        precision = 10;\n    }\n    // Avoid range error\n    precision = Math.min(Math.max(0, precision), 20);\n    x = (+x).toFixed(precision);\n    return returnStr ? x : +x;\n}\n\n/**\n * asc sort arr.\n * The input arr will be modified.\n *\n * @param {Array} arr\n * @return {Array} The input arr.\n */\nexport function asc(arr) {\n    arr.sort(function (a, b) {\n        return a - b;\n    });\n    return arr;\n}\n\n/**\n * Get precision\n * @param {number} val\n */\nexport function getPrecision(val) {\n    val = +val;\n    if (isNaN(val)) {\n        return 0;\n    }\n    // It is much faster than methods converting number to string as follows\n    //      var tmp = val.toString();\n    //      return tmp.length - 1 - tmp.indexOf('.');\n    // especially when precision is low\n    var e = 1;\n    var count = 0;\n    while (Math.round(val * e) / e !== val) {\n        e *= 10;\n        count++;\n    }\n    return count;\n}\n\n/**\n * @param {string|number} val\n * @return {number}\n */\nexport function getPrecisionSafe(val) {\n    var str = val.toString();\n\n    // Consider scientific notation: '3.4e-12' '3.4e+12'\n    var eIndex = str.indexOf('e');\n    if (eIndex > 0) {\n        var precision = +str.slice(eIndex + 1);\n        return precision < 0 ? -precision : 0;\n    }\n    else {\n        var dotIndex = str.indexOf('.');\n        return dotIndex < 0 ? 0 : str.length - 1 - dotIndex;\n    }\n}\n\n/**\n * Minimal dicernible data precisioin according to a single pixel.\n *\n * @param {Array.<number>} dataExtent\n * @param {Array.<number>} pixelExtent\n * @return {number} precision\n */\nexport function getPixelPrecision(dataExtent, pixelExtent) {\n    var log = Math.log;\n    var LN10 = Math.LN10;\n    var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10);\n    var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10);\n    // toFixed() digits argument must be between 0 and 20.\n    var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20);\n    return !isFinite(precision) ? 20 : precision;\n}\n\n/**\n * Get a data of given precision, assuring the sum of percentages\n * in valueList is 1.\n * The largest remainer method is used.\n * https://en.wikipedia.org/wiki/Largest_remainder_method\n *\n * @param {Array.<number>} valueList a list of all data\n * @param {number} idx index of the data to be processed in valueList\n * @param {number} precision integer number showing digits of precision\n * @return {number} percent ranging from 0 to 100\n */\nexport function getPercentWithPrecision(valueList, idx, precision) {\n    if (!valueList[idx]) {\n        return 0;\n    }\n\n    var sum = zrUtil.reduce(valueList, function (acc, val) {\n        return acc + (isNaN(val) ? 0 : val);\n    }, 0);\n    if (sum === 0) {\n        return 0;\n    }\n\n    var digits = Math.pow(10, precision);\n    var votesPerQuota = zrUtil.map(valueList, function (val) {\n        return (isNaN(val) ? 0 : val) / sum * digits * 100;\n    });\n    var targetSeats = digits * 100;\n\n    var seats = zrUtil.map(votesPerQuota, function (votes) {\n        // Assign automatic seats.\n        return Math.floor(votes);\n    });\n    var currentSum = zrUtil.reduce(seats, function (acc, val) {\n        return acc + val;\n    }, 0);\n\n    var remainder = zrUtil.map(votesPerQuota, function (votes, idx) {\n        return votes - seats[idx];\n    });\n\n    // Has remainding votes.\n    while (currentSum < targetSeats) {\n        // Find next largest remainder.\n        var max = Number.NEGATIVE_INFINITY;\n        var maxId = null;\n        for (var i = 0, len = remainder.length; i < len; ++i) {\n            if (remainder[i] > max) {\n                max = remainder[i];\n                maxId = i;\n            }\n        }\n\n        // Add a vote to max remainder.\n        ++seats[maxId];\n        remainder[maxId] = 0;\n        ++currentSum;\n    }\n\n    return seats[idx] / digits;\n}\n\n// Number.MAX_SAFE_INTEGER, ie do not support.\nexport var MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * To 0 - 2 * PI, considering negative radian.\n * @param {number} radian\n * @return {number}\n */\nexport function remRadian(radian) {\n    var pi2 = Math.PI * 2;\n    return (radian % pi2 + pi2) % pi2;\n}\n\n/**\n * @param {type} radian\n * @return {boolean}\n */\nexport function isRadianAroundZero(val) {\n    return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;\n}\n\n/* eslint-disable */\nvar TIME_REG = /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d\\d)(?::(\\d\\d)(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // jshint ignore:line\n/* eslint-enable */\n\n/**\n * @param {string|Date|number} value These values can be accepted:\n *   + An instance of Date, represent a time in its own time zone.\n *   + Or string in a subset of ISO 8601, only including:\n *     + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06',\n *     + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123',\n *     + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00',\n *     all of which will be treated as local time if time zone is not specified\n *     (see <https://momentjs.com/>).\n *   + Or other string format, including (all of which will be treated as loacal time):\n *     '2012', '2012-3-1', '2012/3/1', '2012/03/01',\n *     '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123'\n *   + a timestamp, which represent a time in UTC.\n * @return {Date} date\n */\nexport function parseDate(value) {\n    if (value instanceof Date) {\n        return value;\n    }\n    else if (typeof value === 'string') {\n        // Different browsers parse date in different way, so we parse it manually.\n        // Some other issues:\n        // new Date('1970-01-01') is UTC,\n        // new Date('1970/01/01') and new Date('1970-1-01') is local.\n        // See issue #3623\n        var match = TIME_REG.exec(value);\n\n        if (!match) {\n            // return Invalid Date.\n            return new Date(NaN);\n        }\n\n        // Use local time when no timezone offset specifed.\n        if (!match[8]) {\n            // match[n] can only be string or undefined.\n            // But take care of '12' + 1 => '121'.\n            return new Date(\n                +match[1],\n                +(match[2] || 1) - 1,\n                +match[3] || 1,\n                +match[4] || 0,\n                +(match[5] || 0),\n                +match[6] || 0,\n                +match[7] || 0\n            );\n        }\n        // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n        // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n        // For example, system timezone is set as \"Time Zone: America/Toronto\",\n        // then these code will get different result:\n        // `new Date(1478411999999).getTimezoneOffset();  // get 240`\n        // `new Date(1478412000000).getTimezoneOffset();  // get 300`\n        // So we should not use `new Date`, but use `Date.UTC`.\n        else {\n            var hour = +match[4] || 0;\n            if (match[8].toUpperCase() !== 'Z') {\n                hour -= match[8].slice(0, 3);\n            }\n            return new Date(Date.UTC(\n                +match[1],\n                +(match[2] || 1) - 1,\n                +match[3] || 1,\n                hour,\n                +(match[5] || 0),\n                +match[6] || 0,\n                +match[7] || 0\n            ));\n        }\n    }\n    else if (value == null) {\n        return new Date(NaN);\n    }\n\n    return new Date(Math.round(value));\n}\n\n/**\n * Quantity of a number. e.g. 0.1, 1, 10, 100\n *\n * @param  {number} val\n * @return {number}\n */\nexport function quantity(val) {\n    return Math.pow(10, quantityExponent(val));\n}\n\n/**\n * Exponent of the quantity of a number\n * e.g., 1234 equals to 1.234*10^3, so quantityExponent(1234) is 3\n *\n * @param  {number} val non-negative value\n * @return {number}\n */\nexport function quantityExponent(val) {\n    if (val === 0) {\n        return 0;\n    }\n\n    var exp = Math.floor(Math.log(val) / Math.LN10);\n    /**\n     * exp is expected to be the rounded-down result of the base-10 log of val.\n     * But due to the precision loss with Math.log(val), we need to restore it\n     * using 10^exp to make sure we can get val back from exp. #11249\n     */\n    if (val / Math.pow(10, exp) >= 10) {\n        exp++;\n    }\n    return exp;\n}\n\n/**\n * find a “nice” number approximately equal to x. Round the number if round = true,\n * take ceiling if round = false. The primary observation is that the “nicest”\n * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers.\n *\n * See \"Nice Numbers for Graph Labels\" of Graphic Gems.\n *\n * @param  {number} val Non-negative value.\n * @param  {boolean} round\n * @return {number}\n */\nexport function nice(val, round) {\n    var exponent = quantityExponent(val);\n    var exp10 = Math.pow(10, exponent);\n    var f = val / exp10; // 1 <= f < 10\n    var nf;\n    if (round) {\n        if (f < 1.5) {\n            nf = 1;\n        }\n        else if (f < 2.5) {\n            nf = 2;\n        }\n        else if (f < 4) {\n            nf = 3;\n        }\n        else if (f < 7) {\n            nf = 5;\n        }\n        else {\n            nf = 10;\n        }\n    }\n    else {\n        if (f < 1) {\n            nf = 1;\n        }\n        else if (f < 2) {\n            nf = 2;\n        }\n        else if (f < 3) {\n            nf = 3;\n        }\n        else if (f < 5) {\n            nf = 5;\n        }\n        else {\n            nf = 10;\n        }\n    }\n    val = nf * exp10;\n\n    // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754).\n    // 20 is the uppper bound of toFixed.\n    return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;\n}\n\n/**\n * This code was copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/arrays/quantile.js>.\n * See the license statement at the head of this file.\n * @param {Array.<number>} ascArr\n */\nexport function quantile(ascArr, p) {\n    var H = (ascArr.length - 1) * p + 1;\n    var h = Math.floor(H);\n    var v = +ascArr[h - 1];\n    var e = H - h;\n    return e ? v + e * (ascArr[h] - v) : v;\n}\n\n/**\n * Order intervals asc, and split them when overlap.\n * expect(numberUtil.reformIntervals([\n *     {interval: [18, 62], close: [1, 1]},\n *     {interval: [-Infinity, -70], close: [0, 0]},\n *     {interval: [-70, -26], close: [1, 1]},\n *     {interval: [-26, 18], close: [1, 1]},\n *     {interval: [62, 150], close: [1, 1]},\n *     {interval: [106, 150], close: [1, 1]},\n *     {interval: [150, Infinity], close: [0, 0]}\n * ])).toEqual([\n *     {interval: [-Infinity, -70], close: [0, 0]},\n *     {interval: [-70, -26], close: [1, 1]},\n *     {interval: [-26, 18], close: [0, 1]},\n *     {interval: [18, 62], close: [0, 1]},\n *     {interval: [62, 150], close: [0, 1]},\n *     {interval: [150, Infinity], close: [0, 0]}\n * ]);\n * @param {Array.<Object>} list, where `close` mean open or close\n *        of the interval, and Infinity can be used.\n * @return {Array.<Object>} The origin list, which has been reformed.\n */\nexport function reformIntervals(list) {\n    list.sort(function (a, b) {\n        return littleThan(a, b, 0) ? -1 : 1;\n    });\n\n    var curr = -Infinity;\n    var currClose = 1;\n    for (var i = 0; i < list.length;) {\n        var interval = list[i].interval;\n        var close = list[i].close;\n\n        for (var lg = 0; lg < 2; lg++) {\n            if (interval[lg] <= curr) {\n                interval[lg] = curr;\n                close[lg] = !lg ? 1 - currClose : 1;\n            }\n            curr = interval[lg];\n            currClose = close[lg];\n        }\n\n        if (interval[0] === interval[1] && close[0] * close[1] !== 1) {\n            list.splice(i, 1);\n        }\n        else {\n            i++;\n        }\n    }\n\n    return list;\n\n    function littleThan(a, b, lg) {\n        return a.interval[lg] < b.interval[lg]\n            || (\n                a.interval[lg] === b.interval[lg]\n                && (\n                    (a.close[lg] - b.close[lg] === (!lg ? 1 : -1))\n                    || (!lg && littleThan(a, b, 1))\n                )\n            );\n    }\n}\n\n/**\n * parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n * ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n * subtraction forces infinities to NaN\n *\n * @param {*} v\n * @return {boolean}\n */\nexport function isNumeric(v) {\n    return v - parseFloat(v) >= 0;\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as textContain from 'zrender/src/contain/text';\nimport * as numberUtil from './number';\n// import Text from 'zrender/src/graphic/Text';\n\n/**\n * 每三位默认加,格式化\n * @param {string|number} x\n * @return {string}\n */\nexport function addCommas(x) {\n    if (isNaN(x)) {\n        return '-';\n    }\n    x = (x + '').split('.');\n    return x[0].replace(/(\\d{1,3})(?=(?:\\d{3})+(?!\\d))/g, '$1,')\n            + (x.length > 1 ? ('.' + x[1]) : '');\n}\n\n/**\n * @param {string} str\n * @param {boolean} [upperCaseFirst=false]\n * @return {string} str\n */\nexport function toCamelCase(str, upperCaseFirst) {\n    str = (str || '').toLowerCase().replace(/-(.)/g, function (match, group1) {\n        return group1.toUpperCase();\n    });\n\n    if (upperCaseFirst && str) {\n        str = str.charAt(0).toUpperCase() + str.slice(1);\n    }\n\n    return str;\n}\n\nexport var normalizeCssArray = zrUtil.normalizeCssArray;\n\n\nvar replaceReg = /([&<>\"'])/g;\nvar replaceMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    '\\'': '&#39;'\n};\n\nexport function encodeHTML(source) {\n    return source == null\n        ? ''\n        : (source + '').replace(replaceReg, function (str, c) {\n            return replaceMap[c];\n        });\n}\n\nvar TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];\n\nvar wrapVar = function (varName, seriesIdx) {\n    return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}';\n};\n\n/**\n * Template formatter\n * @param {string} tpl\n * @param {Array.<Object>|Object} paramsList\n * @param {boolean} [encode=false]\n * @return {string}\n */\nexport function formatTpl(tpl, paramsList, encode) {\n    if (!zrUtil.isArray(paramsList)) {\n        paramsList = [paramsList];\n    }\n    var seriesLen = paramsList.length;\n    if (!seriesLen) {\n        return '';\n    }\n\n    var $vars = paramsList[0].$vars || [];\n    for (var i = 0; i < $vars.length; i++) {\n        var alias = TPL_VAR_ALIAS[i];\n        tpl = tpl.replace(wrapVar(alias), wrapVar(alias, 0));\n    }\n    for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) {\n        for (var k = 0; k < $vars.length; k++) {\n            var val = paramsList[seriesIdx][$vars[k]];\n            tpl = tpl.replace(\n                wrapVar(TPL_VAR_ALIAS[k], seriesIdx),\n                encode ? encodeHTML(val) : val\n            );\n        }\n    }\n\n    return tpl;\n}\n\n/**\n * simple Template formatter\n *\n * @param {string} tpl\n * @param {Object} param\n * @param {boolean} [encode=false]\n * @return {string}\n */\nexport function formatTplSimple(tpl, param, encode) {\n    zrUtil.each(param, function (value, key) {\n        tpl = tpl.replace(\n            '{' + key + '}',\n            encode ? encodeHTML(value) : value\n        );\n    });\n    return tpl;\n}\n\n/**\n * @param {Object|string} [opt] If string, means color.\n * @param {string} [opt.color]\n * @param {string} [opt.extraCssText]\n * @param {string} [opt.type='item'] 'item' or 'subItem'\n * @param {string} [opt.renderMode='html'] render mode of tooltip, 'html' or 'richText'\n * @param {string} [opt.markerId='X'] id name for marker. If only one marker is in a rich text, this can be omitted.\n * @return {string}\n */\nexport function getTooltipMarker(opt, extraCssText) {\n    opt = zrUtil.isString(opt) ? {color: opt, extraCssText: extraCssText} : (opt || {});\n    var color = opt.color;\n    var type = opt.type;\n    var extraCssText = opt.extraCssText;\n    var renderMode = opt.renderMode || 'html';\n    var markerId = opt.markerId || 'X';\n\n    if (!color) {\n        return '';\n    }\n\n    if (renderMode === 'html') {\n        return type === 'subItem'\n        ? '<span style=\"display:inline-block;vertical-align:middle;margin-right:8px;margin-left:3px;'\n            + 'border-radius:4px;width:4px;height:4px;background-color:'\n            + encodeHTML(color) + ';' + (extraCssText || '') + '\"></span>'\n        : '<span style=\"display:inline-block;margin-right:5px;'\n            + 'border-radius:10px;width:10px;height:10px;background-color:'\n            + encodeHTML(color) + ';' + (extraCssText || '') + '\"></span>';\n    }\n    else {\n        // Space for rich element marker\n        return {\n            renderMode: renderMode,\n            content: '{marker' + markerId + '|}  ',\n            style: {\n                color: color\n            }\n        };\n    }\n}\n\nfunction pad(str, len) {\n    str += '';\n    return '0000'.substr(0, len - str.length) + str;\n}\n\n\n/**\n * ISO Date format\n * @param {string} tpl\n * @param {number} value\n * @param {boolean} [isUTC=false] Default in local time.\n *           see `module:echarts/scale/Time`\n *           and `module:echarts/util/number#parseDate`.\n * @inner\n */\nexport function formatTime(tpl, value, isUTC) {\n    if (tpl === 'week'\n        || tpl === 'month'\n        || tpl === 'quarter'\n        || tpl === 'half-year'\n        || tpl === 'year'\n    ) {\n        tpl = 'MM-dd\\nyyyy';\n    }\n\n    var date = numberUtil.parseDate(value);\n    var utc = isUTC ? 'UTC' : '';\n    var y = date['get' + utc + 'FullYear']();\n    var M = date['get' + utc + 'Month']() + 1;\n    var d = date['get' + utc + 'Date']();\n    var h = date['get' + utc + 'Hours']();\n    var m = date['get' + utc + 'Minutes']();\n    var s = date['get' + utc + 'Seconds']();\n    var S = date['get' + utc + 'Milliseconds']();\n\n    tpl = tpl.replace('MM', pad(M, 2))\n        .replace('M', M)\n        .replace('yyyy', y)\n        .replace('yy', y % 100)\n        .replace('dd', pad(d, 2))\n        .replace('d', d)\n        .replace('hh', pad(h, 2))\n        .replace('h', h)\n        .replace('mm', pad(m, 2))\n        .replace('m', m)\n        .replace('ss', pad(s, 2))\n        .replace('s', s)\n        .replace('SSS', pad(S, 3));\n\n    return tpl;\n}\n\n/**\n * Capital first\n * @param {string} str\n * @return {string}\n */\nexport function capitalFirst(str) {\n    return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;\n}\n\nexport var truncateText = textContain.truncateText;\n\n/**\n * @public\n * @param {Object} opt\n * @param {string} opt.text\n * @param {string} opt.font\n * @param {string} [opt.textAlign='left']\n * @param {string} [opt.textVerticalAlign='top']\n * @param {Array.<number>} [opt.textPadding]\n * @param {number} [opt.textLineHeight]\n * @param {Object} [opt.rich]\n * @param {Object} [opt.truncate]\n * @return {Object} {x, y, width, height, lineHeight}\n */\nexport function getTextBoundingRect(opt) {\n    return textContain.getBoundingRect(\n        opt.text,\n        opt.font,\n        opt.textAlign,\n        opt.textVerticalAlign,\n        opt.textPadding,\n        opt.textLineHeight,\n        opt.rich,\n        opt.truncate\n    );\n}\n\n/**\n * @deprecated\n * the `textLineHeight` was added later.\n * For backward compatiblility, put it as the last parameter.\n * But deprecated this interface. Please use `getTextBoundingRect` instead.\n */\nexport function getTextRect(\n    text, font, textAlign, textVerticalAlign, textPadding, rich, truncate, textLineHeight\n) {\n    return textContain.getBoundingRect(\n        text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate\n    );\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Layout helpers for each component positioning\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport {parsePercent} from './number';\nimport * as formatUtil from './format';\n\nvar each = zrUtil.each;\n\n/**\n * @public\n */\nexport var LOCATION_PARAMS = [\n    'left', 'right', 'top', 'bottom', 'width', 'height'\n];\n\n/**\n * @public\n */\nexport var HV_NAMES = [\n    ['width', 'left', 'right'],\n    ['height', 'top', 'bottom']\n];\n\nfunction boxLayout(orient, group, gap, maxWidth, maxHeight) {\n    var x = 0;\n    var y = 0;\n\n    if (maxWidth == null) {\n        maxWidth = Infinity;\n    }\n    if (maxHeight == null) {\n        maxHeight = Infinity;\n    }\n    var currentLineMaxSize = 0;\n\n    group.eachChild(function (child, idx) {\n        var position = child.position;\n        var rect = child.getBoundingRect();\n        var nextChild = group.childAt(idx + 1);\n        var nextChildRect = nextChild && nextChild.getBoundingRect();\n        var nextX;\n        var nextY;\n\n        if (orient === 'horizontal') {\n            var moveX = rect.width + (nextChildRect ? (-nextChildRect.x + rect.x) : 0);\n            nextX = x + moveX;\n            // Wrap when width exceeds maxWidth or meet a `newline` group\n            // FIXME compare before adding gap?\n            if (nextX > maxWidth || child.newline) {\n                x = 0;\n                nextX = moveX;\n                y += currentLineMaxSize + gap;\n                currentLineMaxSize = rect.height;\n            }\n            else {\n                // FIXME: consider rect.y is not `0`?\n                currentLineMaxSize = Math.max(currentLineMaxSize, rect.height);\n            }\n        }\n        else {\n            var moveY = rect.height + (nextChildRect ? (-nextChildRect.y + rect.y) : 0);\n            nextY = y + moveY;\n            // Wrap when width exceeds maxHeight or meet a `newline` group\n            if (nextY > maxHeight || child.newline) {\n                x += currentLineMaxSize + gap;\n                y = 0;\n                nextY = moveY;\n                currentLineMaxSize = rect.width;\n            }\n            else {\n                currentLineMaxSize = Math.max(currentLineMaxSize, rect.width);\n            }\n        }\n\n        if (child.newline) {\n            return;\n        }\n\n        position[0] = x;\n        position[1] = y;\n\n        orient === 'horizontal'\n            ? (x = nextX + gap)\n            : (y = nextY + gap);\n    });\n}\n\n/**\n * VBox or HBox layouting\n * @param {string} orient\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\nexport var box = boxLayout;\n\n/**\n * VBox layouting\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\nexport var vbox = zrUtil.curry(boxLayout, 'vertical');\n\n/**\n * HBox layouting\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\nexport var hbox = zrUtil.curry(boxLayout, 'horizontal');\n\n/**\n * If x or x2 is not specified or 'center' 'left' 'right',\n * the width would be as long as possible.\n * If y or y2 is not specified or 'middle' 'top' 'bottom',\n * the height would be as long as possible.\n *\n * @param {Object} positionInfo\n * @param {number|string} [positionInfo.x]\n * @param {number|string} [positionInfo.y]\n * @param {number|string} [positionInfo.x2]\n * @param {number|string} [positionInfo.y2]\n * @param {Object} containerRect {width, height}\n * @param {string|number} margin\n * @return {Object} {width, height}\n */\nexport function getAvailableSize(positionInfo, containerRect, margin) {\n    var containerWidth = containerRect.width;\n    var containerHeight = containerRect.height;\n\n    var x = parsePercent(positionInfo.x, containerWidth);\n    var y = parsePercent(positionInfo.y, containerHeight);\n    var x2 = parsePercent(positionInfo.x2, containerWidth);\n    var y2 = parsePercent(positionInfo.y2, containerHeight);\n\n    (isNaN(x) || isNaN(parseFloat(positionInfo.x))) && (x = 0);\n    (isNaN(x2) || isNaN(parseFloat(positionInfo.x2))) && (x2 = containerWidth);\n    (isNaN(y) || isNaN(parseFloat(positionInfo.y))) && (y = 0);\n    (isNaN(y2) || isNaN(parseFloat(positionInfo.y2))) && (y2 = containerHeight);\n\n    margin = formatUtil.normalizeCssArray(margin || 0);\n\n    return {\n        width: Math.max(x2 - x - margin[1] - margin[3], 0),\n        height: Math.max(y2 - y - margin[0] - margin[2], 0)\n    };\n}\n\n/**\n * Parse position info.\n *\n * @param {Object} positionInfo\n * @param {number|string} [positionInfo.left]\n * @param {number|string} [positionInfo.top]\n * @param {number|string} [positionInfo.right]\n * @param {number|string} [positionInfo.bottom]\n * @param {number|string} [positionInfo.width]\n * @param {number|string} [positionInfo.height]\n * @param {number|string} [positionInfo.aspect] Aspect is width / height\n * @param {Object} containerRect\n * @param {string|number} [margin]\n *\n * @return {module:zrender/core/BoundingRect}\n */\nexport function getLayoutRect(\n    positionInfo, containerRect, margin\n) {\n    margin = formatUtil.normalizeCssArray(margin || 0);\n\n    var containerWidth = containerRect.width;\n    var containerHeight = containerRect.height;\n\n    var left = parsePercent(positionInfo.left, containerWidth);\n    var top = parsePercent(positionInfo.top, containerHeight);\n    var right = parsePercent(positionInfo.right, containerWidth);\n    var bottom = parsePercent(positionInfo.bottom, containerHeight);\n    var width = parsePercent(positionInfo.width, containerWidth);\n    var height = parsePercent(positionInfo.height, containerHeight);\n\n    var verticalMargin = margin[2] + margin[0];\n    var horizontalMargin = margin[1] + margin[3];\n    var aspect = positionInfo.aspect;\n\n    // If width is not specified, calculate width from left and right\n    if (isNaN(width)) {\n        width = containerWidth - right - horizontalMargin - left;\n    }\n    if (isNaN(height)) {\n        height = containerHeight - bottom - verticalMargin - top;\n    }\n\n    if (aspect != null) {\n        // If width and height are not given\n        // 1. Graph should not exceeds the container\n        // 2. Aspect must be keeped\n        // 3. Graph should take the space as more as possible\n        // FIXME\n        // Margin is not considered, because there is no case that both\n        // using margin and aspect so far.\n        if (isNaN(width) && isNaN(height)) {\n            if (aspect > containerWidth / containerHeight) {\n                width = containerWidth * 0.8;\n            }\n            else {\n                height = containerHeight * 0.8;\n            }\n        }\n\n        // Calculate width or height with given aspect\n        if (isNaN(width)) {\n            width = aspect * height;\n        }\n        if (isNaN(height)) {\n            height = width / aspect;\n        }\n    }\n\n    // If left is not specified, calculate left from right and width\n    if (isNaN(left)) {\n        left = containerWidth - right - width - horizontalMargin;\n    }\n    if (isNaN(top)) {\n        top = containerHeight - bottom - height - verticalMargin;\n    }\n\n    // Align left and top\n    switch (positionInfo.left || positionInfo.right) {\n        case 'center':\n            left = containerWidth / 2 - width / 2 - margin[3];\n            break;\n        case 'right':\n            left = containerWidth - width - horizontalMargin;\n            break;\n    }\n    switch (positionInfo.top || positionInfo.bottom) {\n        case 'middle':\n        case 'center':\n            top = containerHeight / 2 - height / 2 - margin[0];\n            break;\n        case 'bottom':\n            top = containerHeight - height - verticalMargin;\n            break;\n    }\n    // If something is wrong and left, top, width, height are calculated as NaN\n    left = left || 0;\n    top = top || 0;\n    if (isNaN(width)) {\n        // Width may be NaN if only one value is given except width\n        width = containerWidth - horizontalMargin - left - (right || 0);\n    }\n    if (isNaN(height)) {\n        // Height may be NaN if only one value is given except height\n        height = containerHeight - verticalMargin - top - (bottom || 0);\n    }\n\n    var rect = new BoundingRect(left + margin[3], top + margin[0], width, height);\n    rect.margin = margin;\n    return rect;\n}\n\n\n/**\n * Position a zr element in viewport\n *  Group position is specified by either\n *  {left, top}, {right, bottom}\n *  If all properties exists, right and bottom will be igonred.\n *\n * Logic:\n *     1. Scale (against origin point in parent coord)\n *     2. Rotate (against origin point in parent coord)\n *     3. Traslate (with el.position by this method)\n * So this method only fixes the last step 'Traslate', which does not affect\n * scaling and rotating.\n *\n * If be called repeatly with the same input el, the same result will be gotten.\n *\n * @param {module:zrender/Element} el Should have `getBoundingRect` method.\n * @param {Object} positionInfo\n * @param {number|string} [positionInfo.left]\n * @param {number|string} [positionInfo.top]\n * @param {number|string} [positionInfo.right]\n * @param {number|string} [positionInfo.bottom]\n * @param {number|string} [positionInfo.width] Only for opt.boundingModel: 'raw'\n * @param {number|string} [positionInfo.height] Only for opt.boundingModel: 'raw'\n * @param {Object} containerRect\n * @param {string|number} margin\n * @param {Object} [opt]\n * @param {Array.<number>} [opt.hv=[1,1]] Only horizontal or only vertical.\n * @param {Array.<number>} [opt.boundingMode='all']\n *        Specify how to calculate boundingRect when locating.\n *        'all': Position the boundingRect that is transformed and uioned\n *               both itself and its descendants.\n *               This mode simplies confine the elements in the bounding\n *               of their container (e.g., using 'right: 0').\n *        'raw': Position the boundingRect that is not transformed and only itself.\n *               This mode is useful when you want a element can overflow its\n *               container. (Consider a rotated circle needs to be located in a corner.)\n *               In this mode positionInfo.width/height can only be number.\n */\nexport function positionElement(el, positionInfo, containerRect, margin, opt) {\n    var h = !opt || !opt.hv || opt.hv[0];\n    var v = !opt || !opt.hv || opt.hv[1];\n    var boundingMode = opt && opt.boundingMode || 'all';\n\n    if (!h && !v) {\n        return;\n    }\n\n    var rect;\n    if (boundingMode === 'raw') {\n        rect = el.type === 'group'\n            ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0)\n            : el.getBoundingRect();\n    }\n    else {\n        rect = el.getBoundingRect();\n        if (el.needLocalTransform()) {\n            var transform = el.getLocalTransform();\n            // Notice: raw rect may be inner object of el,\n            // which should not be modified.\n            rect = rect.clone();\n            rect.applyTransform(transform);\n        }\n    }\n\n    // The real width and height can not be specified but calculated by the given el.\n    positionInfo = getLayoutRect(\n        zrUtil.defaults(\n            {width: rect.width, height: rect.height},\n            positionInfo\n        ),\n        containerRect,\n        margin\n    );\n\n    // Because 'tranlate' is the last step in transform\n    // (see zrender/core/Transformable#getLocalTransform),\n    // we can just only modify el.position to get final result.\n    var elPos = el.position;\n    var dx = h ? positionInfo.x - rect.x : 0;\n    var dy = v ? positionInfo.y - rect.y : 0;\n\n    el.attr('position', boundingMode === 'raw' ? [dx, dy] : [elPos[0] + dx, elPos[1] + dy]);\n}\n\n/**\n * @param {Object} option Contains some of the properties in HV_NAMES.\n * @param {number} hvIdx 0: horizontal; 1: vertical.\n */\nexport function sizeCalculable(option, hvIdx) {\n    return option[HV_NAMES[hvIdx][0]] != null\n        || (option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null);\n}\n\n/**\n * Consider Case:\n * When defulat option has {left: 0, width: 100}, and we set {right: 0}\n * through setOption or media query, using normal zrUtil.merge will cause\n * {right: 0} does not take effect.\n *\n * @example\n * ComponentModel.extend({\n *     init: function () {\n *         ...\n *         var inputPositionParams = layout.getLayoutParams(option);\n *         this.mergeOption(inputPositionParams);\n *     },\n *     mergeOption: function (newOption) {\n *         newOption && zrUtil.merge(thisOption, newOption, true);\n *         layout.mergeLayoutParam(thisOption, newOption);\n *     }\n * });\n *\n * @param {Object} targetOption\n * @param {Object} newOption\n * @param {Object|string} [opt]\n * @param {boolean|Array.<boolean>} [opt.ignoreSize=false] Used for the components\n *  that width (or height) should not be calculated by left and right (or top and bottom).\n */\nexport function mergeLayoutParam(targetOption, newOption, opt) {\n    !zrUtil.isObject(opt) && (opt = {});\n\n    var ignoreSize = opt.ignoreSize;\n    !zrUtil.isArray(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]);\n\n    var hResult = merge(HV_NAMES[0], 0);\n    var vResult = merge(HV_NAMES[1], 1);\n\n    copy(HV_NAMES[0], targetOption, hResult);\n    copy(HV_NAMES[1], targetOption, vResult);\n\n    function merge(names, hvIdx) {\n        var newParams = {};\n        var newValueCount = 0;\n        var merged = {};\n        var mergedValueCount = 0;\n        var enoughParamNumber = 2;\n\n        each(names, function (name) {\n            merged[name] = targetOption[name];\n        });\n        each(names, function (name) {\n            // Consider case: newOption.width is null, which is\n            // set by user for removing width setting.\n            hasProp(newOption, name) && (newParams[name] = merged[name] = newOption[name]);\n            hasValue(newParams, name) && newValueCount++;\n            hasValue(merged, name) && mergedValueCount++;\n        });\n\n        if (ignoreSize[hvIdx]) {\n            // Only one of left/right is premitted to exist.\n            if (hasValue(newOption, names[1])) {\n                merged[names[2]] = null;\n            }\n            else if (hasValue(newOption, names[2])) {\n                merged[names[1]] = null;\n            }\n            return merged;\n        }\n\n        // Case: newOption: {width: ..., right: ...},\n        // or targetOption: {right: ...} and newOption: {width: ...},\n        // There is no conflict when merged only has params count\n        // little than enoughParamNumber.\n        if (mergedValueCount === enoughParamNumber || !newValueCount) {\n            return merged;\n        }\n        // Case: newOption: {width: ..., right: ...},\n        // Than we can make sure user only want those two, and ignore\n        // all origin params in targetOption.\n        else if (newValueCount >= enoughParamNumber) {\n            return newParams;\n        }\n        else {\n            // Chose another param from targetOption by priority.\n            for (var i = 0; i < names.length; i++) {\n                var name = names[i];\n                if (!hasProp(newParams, name) && hasProp(targetOption, name)) {\n                    newParams[name] = targetOption[name];\n                    break;\n                }\n            }\n            return newParams;\n        }\n    }\n\n    function hasProp(obj, name) {\n        return obj.hasOwnProperty(name);\n    }\n\n    function hasValue(obj, name) {\n        return obj[name] != null && obj[name] !== 'auto';\n    }\n\n    function copy(names, target, source) {\n        each(names, function (name) {\n            target[name] = source[name];\n        });\n    }\n}\n\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n * @param {Object} source\n * @return {Object} Result contains those props.\n */\nexport function getLayoutParams(source) {\n    return copyLayoutParams({}, source);\n}\n\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n * @param {Object} source\n * @return {Object} Result contains those props.\n */\nexport function copyLayoutParams(target, source) {\n    source && target && each(LOCATION_PARAMS, function (name) {\n        source.hasOwnProperty(name) && (target[name] = source[name]);\n    });\n    return target;\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\nexport default {\n    getBoxLayoutParams: function () {\n        return {\n            left: this.get('left'),\n            top: this.get('top'),\n            right: this.get('right'),\n            bottom: this.get('bottom'),\n            width: this.get('width'),\n            height: this.get('height')\n        };\n    }\n};","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Component model\n *\n * @module echarts/model/Component\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport Model from './Model';\nimport * as componentUtil from '../util/component';\nimport {enableClassManagement, parseClassType} from '../util/clazz';\nimport {makeInner} from '../util/model';\nimport * as layout from '../util/layout';\nimport boxLayoutMixin from './mixin/boxLayout';\n\nvar inner = makeInner();\n\n/**\n * @alias module:echarts/model/Component\n * @constructor\n * @param {Object} option\n * @param {module:echarts/model/Model} parentModel\n * @param {module:echarts/model/Model} ecModel\n */\nvar ComponentModel = Model.extend({\n\n    type: 'component',\n\n    /**\n     * @readOnly\n     * @type {string}\n     */\n    id: '',\n\n    /**\n     * Because simplified concept is probably better, series.name (or component.name)\n     * has been having too many resposibilities:\n     * (1) Generating id (which requires name in option should not be modified).\n     * (2) As an index to mapping series when merging option or calling API (a name\n     * can refer to more then one components, which is convinient is some case).\n     * (3) Display.\n     * @readOnly\n     */\n    name: '',\n\n    /**\n     * @readOnly\n     * @type {string}\n     */\n    mainType: '',\n\n    /**\n     * @readOnly\n     * @type {string}\n     */\n    subType: '',\n\n    /**\n     * @readOnly\n     * @type {number}\n     */\n    componentIndex: 0,\n\n    /**\n     * @type {Object}\n     * @protected\n     */\n    defaultOption: null,\n\n    /**\n     * @type {module:echarts/model/Global}\n     * @readOnly\n     */\n    ecModel: null,\n\n    /**\n     * key: componentType\n     * value:  Component model list, can not be null.\n     * @type {Object.<string, Array.<module:echarts/model/Model>>}\n     * @readOnly\n     */\n    dependentModels: [],\n\n    /**\n     * @type {string}\n     * @readOnly\n     */\n    uid: null,\n\n    /**\n     * Support merge layout params.\n     * Only support 'box' now (left/right/top/bottom/width/height).\n     * @type {string|Object} Object can be {ignoreSize: true}\n     * @readOnly\n     */\n    layoutMode: null,\n\n    $constructor: function (option, parentModel, ecModel, extraOpt) {\n        Model.call(this, option, parentModel, ecModel, extraOpt);\n\n        this.uid = componentUtil.getUID('ec_cpt_model');\n    },\n\n    init: function (option, parentModel, ecModel, extraOpt) {\n        this.mergeDefaultAndTheme(option, ecModel);\n    },\n\n    mergeDefaultAndTheme: function (option, ecModel) {\n        var layoutMode = this.layoutMode;\n        var inputPositionParams = layoutMode\n            ? layout.getLayoutParams(option) : {};\n\n        var themeModel = ecModel.getTheme();\n        zrUtil.merge(option, themeModel.get(this.mainType));\n        zrUtil.merge(option, this.getDefaultOption());\n\n        if (layoutMode) {\n            layout.mergeLayoutParam(option, inputPositionParams, layoutMode);\n        }\n    },\n\n    mergeOption: function (option, extraOpt) {\n        zrUtil.merge(this.option, option, true);\n\n        var layoutMode = this.layoutMode;\n        if (layoutMode) {\n            layout.mergeLayoutParam(this.option, option, layoutMode);\n        }\n    },\n\n    // Hooker after init or mergeOption\n    optionUpdated: function (newCptOption, isInit) {},\n\n    getDefaultOption: function () {\n        var fields = inner(this);\n        if (!fields.defaultOption) {\n            var optList = [];\n            var Class = this.constructor;\n            while (Class) {\n                var opt = Class.prototype.defaultOption;\n                opt && optList.push(opt);\n                Class = Class.superClass;\n            }\n\n            var defaultOption = {};\n            for (var i = optList.length - 1; i >= 0; i--) {\n                defaultOption = zrUtil.merge(defaultOption, optList[i], true);\n            }\n            fields.defaultOption = defaultOption;\n        }\n        return fields.defaultOption;\n    },\n\n    getReferringComponents: function (mainType) {\n        return this.ecModel.queryComponents({\n            mainType: mainType,\n            index: this.get(mainType + 'Index', true),\n            id: this.get(mainType + 'Id', true)\n        });\n    }\n\n});\n\n// Reset ComponentModel.extend, add preConstruct.\n// clazzUtil.enableClassExtend(\n//     ComponentModel,\n//     function (option, parentModel, ecModel, extraOpt) {\n//         // Set dependentModels, componentIndex, name, id, mainType, subType.\n//         zrUtil.extend(this, extraOpt);\n\n//         this.uid = componentUtil.getUID('componentModel');\n\n//         // this.setReadOnly([\n//         //     'type', 'id', 'uid', 'name', 'mainType', 'subType',\n//         //     'dependentModels', 'componentIndex'\n//         // ]);\n//     }\n// );\n\n// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\nenableClassManagement(\n    ComponentModel, {registerWhenExtend: true}\n);\ncomponentUtil.enableSubTypeDefaulter(ComponentModel);\n\n// Add capability of ComponentModel.topologicalTravel.\ncomponentUtil.enableTopologicalTravel(ComponentModel, getDependencies);\n\nfunction getDependencies(componentType) {\n    var deps = [];\n    zrUtil.each(ComponentModel.getClassesByMainType(componentType), function (Clazz) {\n        deps = deps.concat(Clazz.prototype.dependencies || []);\n    });\n\n    // Ensure main type.\n    deps = zrUtil.map(deps, function (type) {\n        return parseClassType(type).main;\n    });\n\n    // Hack dataset for convenience.\n    if (componentType !== 'dataset' && zrUtil.indexOf(deps, 'dataset') <= 0) {\n        deps.unshift('dataset');\n    }\n\n    return deps;\n}\n\nzrUtil.mixin(ComponentModel, boxLayoutMixin);\n\nexport default ComponentModel;","/*\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\nvar platform = '';\n// Navigator not exists in node\nif (typeof navigator !== 'undefined') {\n    platform = navigator.platform || '';\n}\n\nexport default {\n    // backgroundColor: 'rgba(0,0,0,0)',\n\n    // https://dribbble.com/shots/1065960-Infographic-Pie-chart-visualization\n    // color: ['#5793f3', '#d14a61', '#fd9c35', '#675bba', '#fec42c', '#dd4444', '#d4df5a', '#cd4870'],\n    // Light colors:\n    // color: ['#bcd3bb', '#e88f70', '#edc1a5', '#9dc5c8', '#e1e8c8', '#7b7c68', '#e5b5b5', '#f0b489', '#928ea8', '#bda29a'],\n    // color: ['#cc5664', '#9bd6ec', '#ea946e', '#8acaaa', '#f1ec64', '#ee8686', '#a48dc1', '#5da6bc', '#b9dcae'],\n    // Dark colors:\n    color: [\n        '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83',\n        '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'\n    ],\n\n    gradientColor: ['#f6efa6', '#d88273', '#bf444c'],\n\n    // If xAxis and yAxis declared, grid is created by default.\n    // grid: {},\n\n    textStyle: {\n        // color: '#000',\n        // decoration: 'none',\n        // PENDING\n        fontFamily: platform.match(/^Win/) ? 'Microsoft YaHei' : 'sans-serif',\n        // fontFamily: 'Arial, Verdana, sans-serif',\n        fontSize: 12,\n        fontStyle: 'normal',\n        fontWeight: 'normal'\n    },\n\n    // http://blogs.adobe.com/webplatform/2014/02/24/using-blend-modes-in-html-canvas/\n    // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n    // Default is source-over\n    blendMode: null,\n\n    animation: 'auto',\n    animationDuration: 1000,\n    animationDurationUpdate: 300,\n    animationEasing: 'exponentialOut',\n    animationEasingUpdate: 'cubicOut',\n\n    animationThreshold: 2000,\n    // Configuration for progressive/incremental rendering\n    progressiveThreshold: 3000,\n    progressive: 400,\n\n    // Threshold of if use single hover layer to optimize.\n    // It is recommended that `hoverLayerThreshold` is equivalent to or less than\n    // `progressiveThreshold`, otherwise hover will cause restart of progressive,\n    // which is unexpected.\n    // see example <echarts/test/heatmap-large.html>.\n    hoverLayerThreshold: 3000,\n\n    // See: module:echarts/scale/Time\n    useUTC: false\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\nimport {makeInner, normalizeToArray} from '../../util/model';\n\nvar inner = makeInner();\n\nfunction getNearestColorPalette(colors, requestColorNum) {\n    var paletteNum = colors.length;\n    // TODO colors must be in order\n    for (var i = 0; i < paletteNum; i++) {\n        if (colors[i].length > requestColorNum) {\n            return colors[i];\n        }\n    }\n    return colors[paletteNum - 1];\n}\n\nexport default {\n    clearColorPalette: function () {\n        inner(this).colorIdx = 0;\n        inner(this).colorNameMap = {};\n    },\n\n    /**\n     * @param {string} name MUST NOT be null/undefined. Otherwise call this function\n     *                 twise with the same parameters will get different result.\n     * @param {Object} [scope=this]\n     * @param {Object} [requestColorNum]\n     * @return {string} color string.\n     */\n    getColorFromPalette: function (name, scope, requestColorNum) {\n        scope = scope || this;\n        var scopeFields = inner(scope);\n        var colorIdx = scopeFields.colorIdx || 0;\n        var colorNameMap = scopeFields.colorNameMap = scopeFields.colorNameMap || {};\n        // Use `hasOwnProperty` to avoid conflict with Object.prototype.\n        if (colorNameMap.hasOwnProperty(name)) {\n            return colorNameMap[name];\n        }\n        var defaultColorPalette = normalizeToArray(this.get('color', true));\n        var layeredColorPalette = this.get('colorLayer', true);\n        var colorPalette = ((requestColorNum == null || !layeredColorPalette)\n            ? defaultColorPalette : getNearestColorPalette(layeredColorPalette, requestColorNum));\n\n        // In case can't find in layered color palette.\n        colorPalette = colorPalette || defaultColorPalette;\n\n        if (!colorPalette || !colorPalette.length) {\n            return;\n        }\n\n        var color = colorPalette[colorIdx];\n        if (name) {\n            colorNameMap[name] = color;\n        }\n        scopeFields.colorIdx = (colorIdx + 1) % colorPalette.length;\n\n        return color;\n    }\n};\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Helper for model references.\n * There are many manners to refer axis/coordSys.\n */\n\n// TODO\n// merge relevant logic to this file?\n// check: \"modelHelper\" of tooltip and \"BrushTargetManager\".\n\nimport {__DEV__} from '../config';\nimport {createHashMap, retrieve, each} from 'zrender/src/core/util';\n\n/**\n * @return {Object} For example:\n * {\n *     coordSysName: 'cartesian2d',\n *     coordSysDims: ['x', 'y', ...],\n *     axisMap: HashMap({\n *         x: xAxisModel,\n *         y: yAxisModel\n *     }),\n *     categoryAxisMap: HashMap({\n *         x: xAxisModel,\n *         y: undefined\n *     }),\n *     // It also indicate that whether there is category axis.\n *     firstCategoryDimIndex: 1,\n *     // To replace user specified encode.\n * }\n */\nexport function getCoordSysDefineBySeries(seriesModel) {\n    var coordSysName = seriesModel.get('coordinateSystem');\n    var result = {\n        coordSysName: coordSysName,\n        coordSysDims: [],\n        axisMap: createHashMap(),\n        categoryAxisMap: createHashMap()\n    };\n    var fetch = fetchers[coordSysName];\n    if (fetch) {\n        fetch(seriesModel, result, result.axisMap, result.categoryAxisMap);\n        return result;\n    }\n}\n\nvar fetchers = {\n\n    cartesian2d: function (seriesModel, result, axisMap, categoryAxisMap) {\n        var xAxisModel = seriesModel.getReferringComponents('xAxis')[0];\n        var yAxisModel = seriesModel.getReferringComponents('yAxis')[0];\n\n        if (__DEV__) {\n            if (!xAxisModel) {\n                throw new Error('xAxis \"' + retrieve(\n                    seriesModel.get('xAxisIndex'),\n                    seriesModel.get('xAxisId'),\n                    0\n                ) + '\" not found');\n            }\n            if (!yAxisModel) {\n                throw new Error('yAxis \"' + retrieve(\n                    seriesModel.get('xAxisIndex'),\n                    seriesModel.get('yAxisId'),\n                    0\n                ) + '\" not found');\n            }\n        }\n\n        result.coordSysDims = ['x', 'y'];\n        axisMap.set('x', xAxisModel);\n        axisMap.set('y', yAxisModel);\n\n        if (isCategory(xAxisModel)) {\n            categoryAxisMap.set('x', xAxisModel);\n            result.firstCategoryDimIndex = 0;\n        }\n        if (isCategory(yAxisModel)) {\n            categoryAxisMap.set('y', yAxisModel);\n            result.firstCategoryDimIndex = 1;\n        }\n    },\n\n    singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) {\n        var singleAxisModel = seriesModel.getReferringComponents('singleAxis')[0];\n\n        if (__DEV__) {\n            if (!singleAxisModel) {\n                throw new Error('singleAxis should be specified.');\n            }\n        }\n\n        result.coordSysDims = ['single'];\n        axisMap.set('single', singleAxisModel);\n\n        if (isCategory(singleAxisModel)) {\n            categoryAxisMap.set('single', singleAxisModel);\n            result.firstCategoryDimIndex = 0;\n        }\n    },\n\n    polar: function (seriesModel, result, axisMap, categoryAxisMap) {\n        var polarModel = seriesModel.getReferringComponents('polar')[0];\n        var radiusAxisModel = polarModel.findAxisModel('radiusAxis');\n        var angleAxisModel = polarModel.findAxisModel('angleAxis');\n\n        if (__DEV__) {\n            if (!angleAxisModel) {\n                throw new Error('angleAxis option not found');\n            }\n            if (!radiusAxisModel) {\n                throw new Error('radiusAxis option not found');\n            }\n        }\n\n        result.coordSysDims = ['radius', 'angle'];\n        axisMap.set('radius', radiusAxisModel);\n        axisMap.set('angle', angleAxisModel);\n\n        if (isCategory(radiusAxisModel)) {\n            categoryAxisMap.set('radius', radiusAxisModel);\n            result.firstCategoryDimIndex = 0;\n        }\n        if (isCategory(angleAxisModel)) {\n            categoryAxisMap.set('angle', angleAxisModel);\n            result.firstCategoryDimIndex = 1;\n        }\n    },\n\n    geo: function (seriesModel, result, axisMap, categoryAxisMap) {\n        result.coordSysDims = ['lng', 'lat'];\n    },\n\n    parallel: function (seriesModel, result, axisMap, categoryAxisMap) {\n        var ecModel = seriesModel.ecModel;\n        var parallelModel = ecModel.getComponent(\n            'parallel', seriesModel.get('parallelIndex')\n        );\n        var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice();\n\n        each(parallelModel.parallelAxisIndex, function (axisIndex, index) {\n            var axisModel = ecModel.getComponent('parallelAxis', axisIndex);\n            var axisDim = coordSysDims[index];\n            axisMap.set(axisDim, axisModel);\n\n            if (isCategory(axisModel) && result.firstCategoryDimIndex == null) {\n                categoryAxisMap.set(axisDim, axisModel);\n                result.firstCategoryDimIndex = index;\n            }\n        });\n    }\n};\n\nfunction isCategory(axisModel) {\n    return axisModel.get('type') === 'category';\n}\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Avoid typo.\nexport var SOURCE_FORMAT_ORIGINAL = 'original';\nexport var SOURCE_FORMAT_ARRAY_ROWS = 'arrayRows';\nexport var SOURCE_FORMAT_OBJECT_ROWS = 'objectRows';\nexport var SOURCE_FORMAT_KEYED_COLUMNS = 'keyedColumns';\nexport var SOURCE_FORMAT_UNKNOWN = 'unknown';\n// ??? CHANGE A NAME\nexport var SOURCE_FORMAT_TYPED_ARRAY = 'typedArray';\n\nexport var SERIES_LAYOUT_BY_COLUMN = 'column';\nexport var SERIES_LAYOUT_BY_ROW = 'row';\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\nimport {createHashMap, isTypedArray} from 'zrender/src/core/util';\nimport {enableClassCheck} from '../util/clazz';\nimport {\n    SOURCE_FORMAT_ORIGINAL,\n    SERIES_LAYOUT_BY_COLUMN,\n    SOURCE_FORMAT_UNKNOWN,\n    SOURCE_FORMAT_TYPED_ARRAY,\n    SOURCE_FORMAT_KEYED_COLUMNS\n} from './helper/sourceType';\n\n/**\n * [sourceFormat]\n *\n * + \"original\":\n * This format is only used in series.data, where\n * itemStyle can be specified in data item.\n *\n * + \"arrayRows\":\n * [\n *     ['product', 'score', 'amount'],\n *     ['Matcha Latte', 89.3, 95.8],\n *     ['Milk Tea', 92.1, 89.4],\n *     ['Cheese Cocoa', 94.4, 91.2],\n *     ['Walnut Brownie', 85.4, 76.9]\n * ]\n *\n * + \"objectRows\":\n * [\n *     {product: 'Matcha Latte', score: 89.3, amount: 95.8},\n *     {product: 'Milk Tea', score: 92.1, amount: 89.4},\n *     {product: 'Cheese Cocoa', score: 94.4, amount: 91.2},\n *     {product: 'Walnut Brownie', score: 85.4, amount: 76.9}\n * ]\n *\n * + \"keyedColumns\":\n * {\n *     'product': ['Matcha Latte', 'Milk Tea', 'Cheese Cocoa', 'Walnut Brownie'],\n *     'count': [823, 235, 1042, 988],\n *     'score': [95.8, 81.4, 91.2, 76.9]\n * }\n *\n * + \"typedArray\"\n *\n * + \"unknown\"\n */\n\n/**\n * @constructor\n * @param {Object} fields\n * @param {string} fields.sourceFormat\n * @param {Array|Object} fields.fromDataset\n * @param {Array|Object} [fields.data]\n * @param {string} [seriesLayoutBy='column']\n * @param {Array.<Object|string>} [dimensionsDefine]\n * @param {Objet|HashMap} [encodeDefine]\n * @param {number} [startIndex=0]\n * @param {number} [dimensionsDetectCount]\n */\nfunction Source(fields) {\n\n    /**\n     * @type {boolean}\n     */\n    this.fromDataset = fields.fromDataset;\n\n    /**\n     * Not null/undefined.\n     * @type {Array|Object}\n     */\n    this.data = fields.data || (\n        fields.sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS ? {} : []\n    );\n\n    /**\n     * See also \"detectSourceFormat\".\n     * Not null/undefined.\n     * @type {string}\n     */\n    this.sourceFormat = fields.sourceFormat || SOURCE_FORMAT_UNKNOWN;\n\n    /**\n     * 'row' or 'column'\n     * Not null/undefined.\n     * @type {string} seriesLayoutBy\n     */\n    this.seriesLayoutBy = fields.seriesLayoutBy || SERIES_LAYOUT_BY_COLUMN;\n\n    /**\n     * dimensions definition in option.\n     * can be null/undefined.\n     * @type {Array.<Object|string>}\n     */\n    this.dimensionsDefine = fields.dimensionsDefine;\n\n    /**\n     * encode definition in option.\n     * can be null/undefined.\n     * @type {Objet|HashMap}\n     */\n    this.encodeDefine = fields.encodeDefine && createHashMap(fields.encodeDefine);\n\n    /**\n     * Not null/undefined, uint.\n     * @type {number}\n     */\n    this.startIndex = fields.startIndex || 0;\n\n    /**\n     * Can be null/undefined (when unknown), uint.\n     * @type {number}\n     */\n    this.dimensionsDetectCount = fields.dimensionsDetectCount;\n}\n\n/**\n * Wrap original series data for some compatibility cases.\n */\nSource.seriesDataToSource = function (data) {\n    return new Source({\n        data: data,\n        sourceFormat: isTypedArray(data)\n            ? SOURCE_FORMAT_TYPED_ARRAY\n            : SOURCE_FORMAT_ORIGINAL,\n        fromDataset: false\n    });\n};\n\nenableClassCheck(Source);\n\nexport default Source;","/*\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\nimport {__DEV__} from '../../config';\nimport {makeInner, getDataItemValue} from '../../util/model';\nimport {getCoordSysDefineBySeries} from '../../model/referHelper';\nimport {\n    createHashMap,\n    each,\n    map,\n    isArray,\n    isString,\n    isObject,\n    isTypedArray,\n    isArrayLike,\n    extend,\n    assert\n} from 'zrender/src/core/util';\nimport Source from '../Source';\n\nimport {\n    SOURCE_FORMAT_ORIGINAL,\n    SOURCE_FORMAT_ARRAY_ROWS,\n    SOURCE_FORMAT_OBJECT_ROWS,\n    SOURCE_FORMAT_KEYED_COLUMNS,\n    SOURCE_FORMAT_UNKNOWN,\n    SOURCE_FORMAT_TYPED_ARRAY,\n    SERIES_LAYOUT_BY_ROW\n} from './sourceType';\n\n\nvar inner = makeInner();\n\n/**\n * @see {module:echarts/data/Source}\n * @param {module:echarts/component/dataset/DatasetModel} datasetModel\n * @return {string} sourceFormat\n */\nexport function detectSourceFormat(datasetModel) {\n    var data = datasetModel.option.source;\n    var sourceFormat = SOURCE_FORMAT_UNKNOWN;\n\n    if (isTypedArray(data)) {\n        sourceFormat = SOURCE_FORMAT_TYPED_ARRAY;\n    }\n    else if (isArray(data)) {\n        // FIXME Whether tolerate null in top level array?\n        if (data.length === 0) {\n            sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;\n        }\n\n        for (var i = 0, len = data.length; i < len; i++) {\n            var item = data[i];\n\n            if (item == null) {\n                continue;\n            }\n            else if (isArray(item)) {\n                sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;\n                break;\n            }\n            else if (isObject(item)) {\n                sourceFormat = SOURCE_FORMAT_OBJECT_ROWS;\n                break;\n            }\n        }\n    }\n    else if (isObject(data)) {\n        for (var key in data) {\n            if (data.hasOwnProperty(key) && isArrayLike(data[key])) {\n                sourceFormat = SOURCE_FORMAT_KEYED_COLUMNS;\n                break;\n            }\n        }\n    }\n    else if (data != null) {\n        throw new Error('Invalid data');\n    }\n\n    inner(datasetModel).sourceFormat = sourceFormat;\n}\n\n/**\n * [Scenarios]:\n * (1) Provide source data directly:\n *     series: {\n *         encode: {...},\n *         dimensions: [...]\n *         seriesLayoutBy: 'row',\n *         data: [[...]]\n *     }\n * (2) Refer to datasetModel.\n *     series: [{\n *         encode: {...}\n *         // Ignore datasetIndex means `datasetIndex: 0`\n *         // and the dimensions defination in dataset is used\n *     }, {\n *         encode: {...},\n *         seriesLayoutBy: 'column',\n *         datasetIndex: 1\n *     }]\n *\n * Get data from series itself or datset.\n * @return {module:echarts/data/Source} source\n */\nexport function getSource(seriesModel) {\n    return inner(seriesModel).source;\n}\n\n/**\n * MUST be called before mergeOption of all series.\n * @param {module:echarts/model/Global} ecModel\n */\nexport function resetSourceDefaulter(ecModel) {\n    // `datasetMap` is used to make default encode.\n    inner(ecModel).datasetMap = createHashMap();\n}\n\n/**\n * [Caution]:\n * MUST be called after series option merged and\n * before \"series.getInitailData()\" called.\n *\n * [The rule of making default encode]:\n * Category axis (if exists) alway map to the first dimension.\n * Each other axis occupies a subsequent dimension.\n *\n * [Why make default encode]:\n * Simplify the typing of encode in option, avoiding the case like that:\n * series: [{encode: {x: 0, y: 1}}, {encode: {x: 0, y: 2}}, {encode: {x: 0, y: 3}}],\n * where the \"y\" have to be manually typed as \"1, 2, 3, ...\".\n *\n * @param {module:echarts/model/Series} seriesModel\n */\nexport function prepareSource(seriesModel) {\n    var seriesOption = seriesModel.option;\n\n    var data = seriesOption.data;\n    var sourceFormat = isTypedArray(data)\n        ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL;\n    var fromDataset = false;\n\n    var seriesLayoutBy = seriesOption.seriesLayoutBy;\n    var sourceHeader = seriesOption.sourceHeader;\n    var dimensionsDefine = seriesOption.dimensions;\n\n    var datasetModel = getDatasetModel(seriesModel);\n    if (datasetModel) {\n        var datasetOption = datasetModel.option;\n\n        data = datasetOption.source;\n        sourceFormat = inner(datasetModel).sourceFormat;\n        fromDataset = true;\n\n        // These settings from series has higher priority.\n        seriesLayoutBy = seriesLayoutBy || datasetOption.seriesLayoutBy;\n        sourceHeader == null && (sourceHeader = datasetOption.sourceHeader);\n        dimensionsDefine = dimensionsDefine || datasetOption.dimensions;\n    }\n\n    var completeResult = completeBySourceData(\n        data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine\n    );\n\n    // Note: dataset option does not have `encode`.\n    var encodeDefine = seriesOption.encode;\n    if (!encodeDefine && datasetModel) {\n        encodeDefine = makeDefaultEncode(\n            seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult\n        );\n    }\n\n    inner(seriesModel).source = new Source({\n        data: data,\n        fromDataset: fromDataset,\n        seriesLayoutBy: seriesLayoutBy,\n        sourceFormat: sourceFormat,\n        dimensionsDefine: completeResult.dimensionsDefine,\n        startIndex: completeResult.startIndex,\n        dimensionsDetectCount: completeResult.dimensionsDetectCount,\n        encodeDefine: encodeDefine\n    });\n}\n\n// return {startIndex, dimensionsDefine, dimensionsCount}\nfunction completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine) {\n    if (!data) {\n        return {dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine)};\n    }\n\n    var dimensionsDetectCount;\n    var startIndex;\n    var findPotentialName;\n\n    if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {\n        // Rule: Most of the first line are string: it is header.\n        // Caution: consider a line with 5 string and 1 number,\n        // it still can not be sure it is a head, because the\n        // 5 string may be 5 values of category columns.\n        if (sourceHeader === 'auto' || sourceHeader == null) {\n            arrayRowsTravelFirst(function (val) {\n                // '-' is regarded as null/undefined.\n                if (val != null && val !== '-') {\n                    if (isString(val)) {\n                        startIndex == null && (startIndex = 1);\n                    }\n                    else {\n                        startIndex = 0;\n                    }\n                }\n            // 10 is an experience number, avoid long loop.\n            }, seriesLayoutBy, data, 10);\n        }\n        else {\n            startIndex = sourceHeader ? 1 : 0;\n        }\n\n        if (!dimensionsDefine && startIndex === 1) {\n            dimensionsDefine = [];\n            arrayRowsTravelFirst(function (val, index) {\n                dimensionsDefine[index] = val != null ? val : '';\n            }, seriesLayoutBy, data);\n        }\n\n        dimensionsDetectCount = dimensionsDefine\n            ? dimensionsDefine.length\n            : seriesLayoutBy === SERIES_LAYOUT_BY_ROW\n            ? data.length\n            : data[0]\n            ? data[0].length\n            : null;\n    }\n    else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {\n        if (!dimensionsDefine) {\n            dimensionsDefine = objectRowsCollectDimensions(data);\n            findPotentialName = true;\n        }\n    }\n    else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {\n        if (!dimensionsDefine) {\n            dimensionsDefine = [];\n            findPotentialName = true;\n            each(data, function (colArr, key) {\n                dimensionsDefine.push(key);\n            });\n        }\n    }\n    else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n        var value0 = getDataItemValue(data[0]);\n        dimensionsDetectCount = isArray(value0) && value0.length || 1;\n    }\n    else if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {\n        if (__DEV__) {\n            assert(!!dimensionsDefine, 'dimensions must be given if data is TypedArray.');\n        }\n    }\n\n    var potentialNameDimIndex;\n    if (findPotentialName) {\n        each(dimensionsDefine, function (dim, idx) {\n            if ((isObject(dim) ? dim.name : dim) === 'name') {\n                potentialNameDimIndex = idx;\n            }\n        });\n    }\n\n    return {\n        startIndex: startIndex,\n        dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine),\n        dimensionsDetectCount: dimensionsDetectCount,\n        potentialNameDimIndex: potentialNameDimIndex\n        // TODO: potentialIdDimIdx\n    };\n}\n\n// Consider dimensions defined like ['A', 'price', 'B', 'price', 'C', 'price'],\n// which is reasonable. But dimension name is duplicated.\n// Returns undefined or an array contains only object without null/undefiend or string.\nfunction normalizeDimensionsDefine(dimensionsDefine) {\n    if (!dimensionsDefine) {\n        // The meaning of null/undefined is different from empty array.\n        return;\n    }\n    var nameMap = createHashMap();\n    return map(dimensionsDefine, function (item, index) {\n        item = extend({}, isObject(item) ? item : {name: item});\n\n        // User can set null in dimensions.\n        // We dont auto specify name, othewise a given name may\n        // cause it be refered unexpectedly.\n        if (item.name == null) {\n            return item;\n        }\n\n        // Also consider number form like 2012.\n        item.name += '';\n        // User may also specify displayName.\n        // displayName will always exists except user not\n        // specified or dim name is not specified or detected.\n        // (A auto generated dim name will not be used as\n        // displayName).\n        if (item.displayName == null) {\n            item.displayName = item.name;\n        }\n\n        var exist = nameMap.get(item.name);\n        if (!exist) {\n            nameMap.set(item.name, {count: 1});\n        }\n        else {\n            item.name += '-' + exist.count++;\n        }\n\n        return item;\n    });\n}\n\nfunction arrayRowsTravelFirst(cb, seriesLayoutBy, data, maxLoop) {\n    maxLoop == null && (maxLoop = Infinity);\n    if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {\n        for (var i = 0; i < data.length && i < maxLoop; i++) {\n            cb(data[i] ? data[i][0] : null, i);\n        }\n    }\n    else {\n        var value0 = data[0] || [];\n        for (var i = 0; i < value0.length && i < maxLoop; i++) {\n            cb(value0[i], i);\n        }\n    }\n}\n\nfunction objectRowsCollectDimensions(data) {\n    var firstIndex = 0;\n    var obj;\n    while (firstIndex < data.length && !(obj = data[firstIndex++])) {} // jshint ignore: line\n    if (obj) {\n        var dimensions = [];\n        each(obj, function (value, key) {\n            dimensions.push(key);\n        });\n        return dimensions;\n    }\n}\n\n// ??? TODO merge to completedimensions, where also has\n// default encode making logic. And the default rule\n// should depends on series? consider 'map'.\nfunction makeDefaultEncode(\n    seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult\n) {\n    var coordSysDefine = getCoordSysDefineBySeries(seriesModel);\n    var encode = {};\n    // var encodeTooltip = [];\n    // var encodeLabel = [];\n    var encodeItemName = [];\n    var encodeSeriesName = [];\n    var seriesType = seriesModel.subType;\n\n    // ??? TODO refactor: provide by series itself.\n    // Consider the case: 'map' series is based on geo coordSys,\n    // 'graph', 'heatmap' can be based on cartesian. But can not\n    // give default rule simply here.\n    var nSeriesMap = createHashMap(['pie', 'map', 'funnel']);\n    var cSeriesMap = createHashMap([\n        'line', 'bar', 'pictorialBar', 'scatter', 'effectScatter', 'candlestick', 'boxplot'\n    ]);\n\n    // Usually in this case series will use the first data\n    // dimension as the \"value\" dimension, or other default\n    // processes respectively.\n    if (coordSysDefine && cSeriesMap.get(seriesType) != null) {\n        var ecModel = seriesModel.ecModel;\n        var datasetMap = inner(ecModel).datasetMap;\n        var key = datasetModel.uid + '_' + seriesLayoutBy;\n        var datasetRecord = datasetMap.get(key)\n            || datasetMap.set(key, {categoryWayDim: 1, valueWayDim: 0});\n\n        // TODO\n        // Auto detect first time axis and do arrangement.\n        each(coordSysDefine.coordSysDims, function (coordDim) {\n            // In value way.\n            if (coordSysDefine.firstCategoryDimIndex == null) {\n                var dataDim = datasetRecord.valueWayDim++;\n                encode[coordDim] = dataDim;\n\n                // ??? TODO give a better default series name rule?\n                // especially when encode x y specified.\n                // consider: when mutiple series share one dimension\n                // category axis, series name should better use\n                // the other dimsion name. On the other hand, use\n                // both dimensions name.\n\n                encodeSeriesName.push(dataDim);\n                // encodeTooltip.push(dataDim);\n                // encodeLabel.push(dataDim);\n            }\n            // In category way, category axis.\n            else if (coordSysDefine.categoryAxisMap.get(coordDim)) {\n                encode[coordDim] = 0;\n                encodeItemName.push(0);\n            }\n            // In category way, non-category axis.\n            else {\n                var dataDim = datasetRecord.categoryWayDim++;\n                encode[coordDim] = dataDim;\n                // encodeTooltip.push(dataDim);\n                // encodeLabel.push(dataDim);\n                encodeSeriesName.push(dataDim);\n            }\n        });\n    }\n    // Do not make a complex rule! Hard to code maintain and not necessary.\n    // ??? TODO refactor: provide by series itself.\n    // [{name: ..., value: ...}, ...] like:\n    else if (nSeriesMap.get(seriesType) != null) {\n        // Find the first not ordinal. (5 is an experience value)\n        var firstNotOrdinal;\n        for (var i = 0; i < 5 && firstNotOrdinal == null; i++) {\n            if (!doGuessOrdinal(\n                data, sourceFormat, seriesLayoutBy,\n                completeResult.dimensionsDefine, completeResult.startIndex, i\n            )) {\n                firstNotOrdinal = i;\n            }\n        }\n        if (firstNotOrdinal != null) {\n            encode.value = firstNotOrdinal;\n            var nameDimIndex = completeResult.potentialNameDimIndex\n                || Math.max(firstNotOrdinal - 1, 0);\n            // By default, label use itemName in charts.\n            // So we dont set encodeLabel here.\n            encodeSeriesName.push(nameDimIndex);\n            encodeItemName.push(nameDimIndex);\n            // encodeTooltip.push(firstNotOrdinal);\n        }\n    }\n\n    // encodeTooltip.length && (encode.tooltip = encodeTooltip);\n    // encodeLabel.length && (encode.label = encodeLabel);\n    encodeItemName.length && (encode.itemName = encodeItemName);\n    encodeSeriesName.length && (encode.seriesName = encodeSeriesName);\n\n    return encode;\n}\n\n/**\n * If return null/undefined, indicate that should not use datasetModel.\n */\nfunction getDatasetModel(seriesModel) {\n    var option = seriesModel.option;\n    // Caution: consider the scenario:\n    // A dataset is declared and a series is not expected to use the dataset,\n    // and at the beginning `setOption({series: { noData })` (just prepare other\n    // option but no data), then `setOption({series: {data: [...]}); In this case,\n    // the user should set an empty array to avoid that dataset is used by default.\n    var thisData = option.data;\n    if (!thisData) {\n        return seriesModel.ecModel.getComponent('dataset', option.datasetIndex || 0);\n    }\n}\n\n/**\n * The rule should not be complex, otherwise user might not\n * be able to known where the data is wrong.\n * The code is ugly, but how to make it neat?\n *\n * @param {module:echars/data/Source} source\n * @param {number} dimIndex\n * @return {boolean} Whether ordinal.\n */\nexport function guessOrdinal(source, dimIndex) {\n    return doGuessOrdinal(\n        source.data,\n        source.sourceFormat,\n        source.seriesLayoutBy,\n        source.dimensionsDefine,\n        source.startIndex,\n        dimIndex\n    );\n}\n\n// dimIndex may be overflow source data.\nfunction doGuessOrdinal(\n    data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex\n) {\n    var result;\n    // Experience value.\n    var maxLoop = 5;\n\n    if (isTypedArray(data)) {\n        return false;\n    }\n\n    // When sourceType is 'objectRows' or 'keyedColumns', dimensionsDefine\n    // always exists in source.\n    var dimName;\n    if (dimensionsDefine) {\n        dimName = dimensionsDefine[dimIndex];\n        dimName = isObject(dimName) ? dimName.name : dimName;\n    }\n\n    if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {\n        if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {\n            var sample = data[dimIndex];\n            for (var i = 0; i < (sample || []).length && i < maxLoop; i++) {\n                if ((result = detectValue(sample[startIndex + i])) != null) {\n                    return result;\n                }\n            }\n        }\n        else {\n            for (var i = 0; i < data.length && i < maxLoop; i++) {\n                var row = data[startIndex + i];\n                if (row && (result = detectValue(row[dimIndex])) != null) {\n                    return result;\n                }\n            }\n        }\n    }\n    else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {\n        if (!dimName) {\n            return;\n        }\n        for (var i = 0; i < data.length && i < maxLoop; i++) {\n            var item = data[i];\n            if (item && (result = detectValue(item[dimName])) != null) {\n                return result;\n            }\n        }\n    }\n    else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {\n        if (!dimName) {\n            return;\n        }\n        var sample = data[dimName];\n        if (!sample || isTypedArray(sample)) {\n            return false;\n        }\n        for (var i = 0; i < sample.length && i < maxLoop; i++) {\n            if ((result = detectValue(sample[i])) != null) {\n                return result;\n            }\n        }\n    }\n    else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n        for (var i = 0; i < data.length && i < maxLoop; i++) {\n            var item = data[i];\n            var val = getDataItemValue(item);\n            if (!isArray(val)) {\n                return false;\n            }\n            if ((result = detectValue(val[dimIndex])) != null) {\n                return result;\n            }\n        }\n    }\n\n    function detectValue(val) {\n        // Consider usage convenience, '1', '2' will be treated as \"number\".\n        // `isFinit('')` get `true`.\n        if (val != null && isFinite(val) && val !== '') {\n            return false;\n        }\n        else if (isString(val) && val !== '-') {\n            return true;\n        }\n    }\n\n    return false;\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 * ECharts global model\n *\n * @module {echarts/model/Global}\n */\n\n\n/**\n * Caution: If the mechanism should be changed some day, these cases\n * should be considered:\n *\n * (1) In `merge option` mode, if using the same option to call `setOption`\n * many times, the result should be the same (try our best to ensure that).\n * (2) In `merge option` mode, if a component has no id/name specified, it\n * will be merged by index, and the result sequence of the components is\n * consistent to the original sequence.\n * (3) `reset` feature (in toolbox). Find detailed info in comments about\n * `mergeOption` in module:echarts/model/OptionManager.\n */\n\nimport {__DEV__} from '../config';\nimport {\n    each, filter, map, isArray, indexOf, isObject, isString,\n    createHashMap, assert, clone, merge, extend, mixin\n} from 'zrender/src/core/util';\nimport * as modelUtil from '../util/model';\nimport Model from './Model';\nimport ComponentModel from './Component';\nimport globalDefault from './globalDefault';\nimport colorPaletteMixin from './mixin/colorPalette';\nimport {resetSourceDefaulter} from '../data/helper/sourceHelper';\n\nvar OPTION_INNER_KEY = '\\0_ec_inner';\n\n/**\n * @alias module:echarts/model/Global\n *\n * @param {Object} option\n * @param {module:echarts/model/Model} parentModel\n * @param {Object} theme\n */\nvar GlobalModel = Model.extend({\n\n    init: function (option, parentModel, theme, optionManager) {\n        theme = theme || {};\n\n        this.option = null; // Mark as not initialized.\n\n        /**\n         * @type {module:echarts/model/Model}\n         * @private\n         */\n        this._theme = new Model(theme);\n\n        /**\n         * @type {module:echarts/model/OptionManager}\n         */\n        this._optionManager = optionManager;\n    },\n\n    setOption: function (option, optionPreprocessorFuncs) {\n        assert(\n            !(OPTION_INNER_KEY in option),\n            'please use chart.getOption()'\n        );\n\n        this._optionManager.setOption(option, optionPreprocessorFuncs);\n\n        this.resetOption(null);\n    },\n\n    /**\n     * @param {string} type null/undefined: reset all.\n     *                      'recreate': force recreate all.\n     *                      'timeline': only reset timeline option\n     *                      'media': only reset media query option\n     * @return {boolean} Whether option changed.\n     */\n    resetOption: function (type) {\n        var optionChanged = false;\n        var optionManager = this._optionManager;\n\n        if (!type || type === 'recreate') {\n            var baseOption = optionManager.mountOption(type === 'recreate');\n\n            if (!this.option || type === 'recreate') {\n                initBase.call(this, baseOption);\n            }\n            else {\n                this.restoreData();\n                this.mergeOption(baseOption);\n            }\n            optionChanged = true;\n        }\n\n        if (type === 'timeline' || type === 'media') {\n            this.restoreData();\n        }\n\n        if (!type || type === 'recreate' || type === 'timeline') {\n            var timelineOption = optionManager.getTimelineOption(this);\n            timelineOption && (this.mergeOption(timelineOption), optionChanged = true);\n        }\n\n        if (!type || type === 'recreate' || type === 'media') {\n            var mediaOptions = optionManager.getMediaOption(this, this._api);\n            if (mediaOptions.length) {\n                each(mediaOptions, function (mediaOption) {\n                    this.mergeOption(mediaOption, optionChanged = true);\n                }, this);\n            }\n        }\n\n        return optionChanged;\n    },\n\n    /**\n     * @protected\n     */\n    mergeOption: function (newOption) {\n        var option = this.option;\n        var componentsMap = this._componentsMap;\n        var newCptTypes = [];\n\n        resetSourceDefaulter(this);\n\n        // If no component class, merge directly.\n        // For example: color, animaiton options, etc.\n        each(newOption, function (componentOption, mainType) {\n            if (componentOption == null) {\n                return;\n            }\n\n            if (!ComponentModel.hasClass(mainType)) {\n                // globalSettingTask.dirty();\n                option[mainType] = option[mainType] == null\n                    ? clone(componentOption)\n                    : merge(option[mainType], componentOption, true);\n            }\n            else if (mainType) {\n                newCptTypes.push(mainType);\n            }\n        });\n\n        ComponentModel.topologicalTravel(\n            newCptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this\n        );\n\n        function visitComponent(mainType, dependencies) {\n\n            var newCptOptionList = modelUtil.normalizeToArray(newOption[mainType]);\n\n            var mapResult = modelUtil.mappingToExists(\n                componentsMap.get(mainType), newCptOptionList\n            );\n\n            modelUtil.makeIdAndName(mapResult);\n\n            // Set mainType and complete subType.\n            each(mapResult, function (item, index) {\n                var opt = item.option;\n                if (isObject(opt)) {\n                    item.keyInfo.mainType = mainType;\n                    item.keyInfo.subType = determineSubType(mainType, opt, item.exist);\n                }\n            });\n\n            var dependentModels = getComponentsByTypes(\n                componentsMap, dependencies\n            );\n\n            option[mainType] = [];\n            componentsMap.set(mainType, []);\n\n            each(mapResult, function (resultItem, index) {\n                var componentModel = resultItem.exist;\n                var newCptOption = resultItem.option;\n\n                assert(\n                    isObject(newCptOption) || componentModel,\n                    'Empty component definition'\n                );\n\n                // Consider where is no new option and should be merged using {},\n                // see removeEdgeAndAdd in topologicalTravel and\n                // ComponentModel.getAllClassMainTypes.\n                if (!newCptOption) {\n                    componentModel.mergeOption({}, this);\n                    componentModel.optionUpdated({}, false);\n                }\n                else {\n                    var ComponentModelClass = ComponentModel.getClass(\n                        mainType, resultItem.keyInfo.subType, true\n                    );\n\n                    if (componentModel && componentModel.constructor === ComponentModelClass) {\n                        componentModel.name = resultItem.keyInfo.name;\n                        // componentModel.settingTask && componentModel.settingTask.dirty();\n                        componentModel.mergeOption(newCptOption, this);\n                        componentModel.optionUpdated(newCptOption, false);\n                    }\n                    else {\n                        // PENDING Global as parent ?\n                        var extraOpt = extend(\n                            {\n                                dependentModels: dependentModels,\n                                componentIndex: index\n                            },\n                            resultItem.keyInfo\n                        );\n                        componentModel = new ComponentModelClass(\n                            newCptOption, this, this, extraOpt\n                        );\n                        extend(componentModel, extraOpt);\n                        componentModel.init(newCptOption, this, this, extraOpt);\n\n                        // Call optionUpdated after init.\n                        // newCptOption has been used as componentModel.option\n                        // and may be merged with theme and default, so pass null\n                        // to avoid confusion.\n                        componentModel.optionUpdated(null, true);\n                    }\n                }\n\n                componentsMap.get(mainType)[index] = componentModel;\n                option[mainType][index] = componentModel.option;\n            }, this);\n\n            // Backup series for filtering.\n            if (mainType === 'series') {\n                createSeriesIndices(this, componentsMap.get('series'));\n            }\n        }\n\n        this._seriesIndicesMap = createHashMap(\n            this._seriesIndices = this._seriesIndices || []\n        );\n    },\n\n    /**\n     * Get option for output (cloned option and inner info removed)\n     * @public\n     * @return {Object}\n     */\n    getOption: function () {\n        var option = clone(this.option);\n\n        each(option, function (opts, mainType) {\n            if (ComponentModel.hasClass(mainType)) {\n                var opts = modelUtil.normalizeToArray(opts);\n                for (var i = opts.length - 1; i >= 0; i--) {\n                    // Remove options with inner id.\n                    if (modelUtil.isIdInner(opts[i])) {\n                        opts.splice(i, 1);\n                    }\n                }\n                option[mainType] = opts;\n            }\n        });\n\n        delete option[OPTION_INNER_KEY];\n\n        return option;\n    },\n\n    /**\n     * @return {module:echarts/model/Model}\n     */\n    getTheme: function () {\n        return this._theme;\n    },\n\n    /**\n     * @param {string} mainType\n     * @param {number} [idx=0]\n     * @return {module:echarts/model/Component}\n     */\n    getComponent: function (mainType, idx) {\n        var list = this._componentsMap.get(mainType);\n        if (list) {\n            return list[idx || 0];\n        }\n    },\n\n    /**\n     * If none of index and id and name used, return all components with mainType.\n     * @param {Object} condition\n     * @param {string} condition.mainType\n     * @param {string} [condition.subType] If ignore, only query by mainType\n     * @param {number|Array.<number>} [condition.index] Either input index or id or name.\n     * @param {string|Array.<string>} [condition.id] Either input index or id or name.\n     * @param {string|Array.<string>} [condition.name] Either input index or id or name.\n     * @return {Array.<module:echarts/model/Component>}\n     */\n    queryComponents: function (condition) {\n        var mainType = condition.mainType;\n        if (!mainType) {\n            return [];\n        }\n\n        var index = condition.index;\n        var id = condition.id;\n        var name = condition.name;\n\n        var cpts = this._componentsMap.get(mainType);\n\n        if (!cpts || !cpts.length) {\n            return [];\n        }\n\n        var result;\n\n        if (index != null) {\n            if (!isArray(index)) {\n                index = [index];\n            }\n            result = filter(map(index, function (idx) {\n                return cpts[idx];\n            }), function (val) {\n                return !!val;\n            });\n        }\n        else if (id != null) {\n            var isIdArray = isArray(id);\n            result = filter(cpts, function (cpt) {\n                return (isIdArray && indexOf(id, cpt.id) >= 0)\n                    || (!isIdArray && cpt.id === id);\n            });\n        }\n        else if (name != null) {\n            var isNameArray = isArray(name);\n            result = filter(cpts, function (cpt) {\n                return (isNameArray && indexOf(name, cpt.name) >= 0)\n                    || (!isNameArray && cpt.name === name);\n            });\n        }\n        else {\n            // Return all components with mainType\n            result = cpts.slice();\n        }\n\n        return filterBySubType(result, condition);\n    },\n\n    /**\n     * The interface is different from queryComponents,\n     * which is convenient for inner usage.\n     *\n     * @usage\n     * var result = findComponents(\n     *     {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}\n     * );\n     * var result = findComponents(\n     *     {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}}\n     * );\n     * var result = findComponents(\n     *     {mainType: 'series',\n     *     filter: function (model, index) {...}}\n     * );\n     * // result like [component0, componnet1, ...]\n     *\n     * @param {Object} condition\n     * @param {string} condition.mainType Mandatory.\n     * @param {string} [condition.subType] Optional.\n     * @param {Object} [condition.query] like {xxxIndex, xxxId, xxxName},\n     *        where xxx is mainType.\n     *        If query attribute is null/undefined or has no index/id/name,\n     *        do not filtering by query conditions, which is convenient for\n     *        no-payload situations or when target of action is global.\n     * @param {Function} [condition.filter] parameter: component, return boolean.\n     * @return {Array.<module:echarts/model/Component>}\n     */\n    findComponents: function (condition) {\n        var query = condition.query;\n        var mainType = condition.mainType;\n\n        var queryCond = getQueryCond(query);\n        var result = queryCond\n            ? this.queryComponents(queryCond)\n            : this._componentsMap.get(mainType);\n\n        return doFilter(filterBySubType(result, condition));\n\n        function getQueryCond(q) {\n            var indexAttr = mainType + 'Index';\n            var idAttr = mainType + 'Id';\n            var nameAttr = mainType + 'Name';\n            return q && (\n                    q[indexAttr] != null\n                    || q[idAttr] != null\n                    || q[nameAttr] != null\n                )\n                ? {\n                    mainType: mainType,\n                    // subType will be filtered finally.\n                    index: q[indexAttr],\n                    id: q[idAttr],\n                    name: q[nameAttr]\n                }\n                : null;\n        }\n\n        function doFilter(res) {\n            return condition.filter\n                    ? filter(res, condition.filter)\n                    : res;\n        }\n    },\n\n    /**\n     * @usage\n     * eachComponent('legend', function (legendModel, index) {\n     *     ...\n     * });\n     * eachComponent(function (componentType, model, index) {\n     *     // componentType does not include subType\n     *     // (componentType is 'xxx' but not 'xxx.aa')\n     * });\n     * eachComponent(\n     *     {mainType: 'dataZoom', query: {dataZoomId: 'abc'}},\n     *     function (model, index) {...}\n     * );\n     * eachComponent(\n     *     {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}},\n     *     function (model, index) {...}\n     * );\n     *\n     * @param {string|Object=} mainType When mainType is object, the definition\n     *                                  is the same as the method 'findComponents'.\n     * @param {Function} cb\n     * @param {*} context\n     */\n    eachComponent: function (mainType, cb, context) {\n        var componentsMap = this._componentsMap;\n\n        if (typeof mainType === 'function') {\n            context = cb;\n            cb = mainType;\n            componentsMap.each(function (components, componentType) {\n                each(components, function (component, index) {\n                    cb.call(context, componentType, component, index);\n                });\n            });\n        }\n        else if (isString(mainType)) {\n            each(componentsMap.get(mainType), cb, context);\n        }\n        else if (isObject(mainType)) {\n            var queryResult = this.findComponents(mainType);\n            each(queryResult, cb, context);\n        }\n    },\n\n    /**\n     * @param {string} name\n     * @return {Array.<module:echarts/model/Series>}\n     */\n    getSeriesByName: function (name) {\n        var series = this._componentsMap.get('series');\n        return filter(series, function (oneSeries) {\n            return oneSeries.name === name;\n        });\n    },\n\n    /**\n     * @param {number} seriesIndex\n     * @return {module:echarts/model/Series}\n     */\n    getSeriesByIndex: function (seriesIndex) {\n        return this._componentsMap.get('series')[seriesIndex];\n    },\n\n    /**\n     * Get series list before filtered by type.\n     * FIXME: rename to getRawSeriesByType?\n     *\n     * @param {string} subType\n     * @return {Array.<module:echarts/model/Series>}\n     */\n    getSeriesByType: function (subType) {\n        var series = this._componentsMap.get('series');\n        return filter(series, function (oneSeries) {\n            return oneSeries.subType === subType;\n        });\n    },\n\n    /**\n     * @return {Array.<module:echarts/model/Series>}\n     */\n    getSeries: function () {\n        return this._componentsMap.get('series').slice();\n    },\n\n    /**\n     * @return {number}\n     */\n    getSeriesCount: function () {\n        return this._componentsMap.get('series').length;\n    },\n\n    /**\n     * After filtering, series may be different\n     * frome raw series.\n     *\n     * @param {Function} cb\n     * @param {*} context\n     */\n    eachSeries: function (cb, context) {\n        assertSeriesInitialized(this);\n        each(this._seriesIndices, function (rawSeriesIndex) {\n            var series = this._componentsMap.get('series')[rawSeriesIndex];\n            cb.call(context, series, rawSeriesIndex);\n        }, this);\n    },\n\n    /**\n     * Iterate raw series before filtered.\n     *\n     * @param {Function} cb\n     * @param {*} context\n     */\n    eachRawSeries: function (cb, context) {\n        each(this._componentsMap.get('series'), cb, context);\n    },\n\n    /**\n     * After filtering, series may be different.\n     * frome raw series.\n     *\n     * @param {string} subType.\n     * @param {Function} cb\n     * @param {*} context\n     */\n    eachSeriesByType: function (subType, cb, context) {\n        assertSeriesInitialized(this);\n        each(this._seriesIndices, function (rawSeriesIndex) {\n            var series = this._componentsMap.get('series')[rawSeriesIndex];\n            if (series.subType === subType) {\n                cb.call(context, series, rawSeriesIndex);\n            }\n        }, this);\n    },\n\n    /**\n     * Iterate raw series before filtered of given type.\n     *\n     * @parma {string} subType\n     * @param {Function} cb\n     * @param {*} context\n     */\n    eachRawSeriesByType: function (subType, cb, context) {\n        return each(this.getSeriesByType(subType), cb, context);\n    },\n\n    /**\n     * @param {module:echarts/model/Series} seriesModel\n     */\n    isSeriesFiltered: function (seriesModel) {\n        assertSeriesInitialized(this);\n        return this._seriesIndicesMap.get(seriesModel.componentIndex) == null;\n    },\n\n    /**\n     * @return {Array.<number>}\n     */\n    getCurrentSeriesIndices: function () {\n        return (this._seriesIndices || []).slice();\n    },\n\n    /**\n     * @param {Function} cb\n     * @param {*} context\n     */\n    filterSeries: function (cb, context) {\n        assertSeriesInitialized(this);\n        var filteredSeries = filter(\n            this._componentsMap.get('series'), cb, context\n        );\n        createSeriesIndices(this, filteredSeries);\n    },\n\n    restoreData: function (payload) {\n        var componentsMap = this._componentsMap;\n\n        createSeriesIndices(this, componentsMap.get('series'));\n\n        var componentTypes = [];\n        componentsMap.each(function (components, componentType) {\n            componentTypes.push(componentType);\n        });\n\n        ComponentModel.topologicalTravel(\n            componentTypes,\n            ComponentModel.getAllClassMainTypes(),\n            function (componentType, dependencies) {\n                each(componentsMap.get(componentType), function (component) {\n                    (componentType !== 'series' || !isNotTargetSeries(component, payload))\n                        && component.restoreData();\n                });\n            }\n        );\n    }\n\n});\n\nfunction isNotTargetSeries(seriesModel, payload) {\n    if (payload) {\n        var index = payload.seiresIndex;\n        var id = payload.seriesId;\n        var name = payload.seriesName;\n        return (index != null && seriesModel.componentIndex !== index)\n            || (id != null && seriesModel.id !== id)\n            || (name != null && seriesModel.name !== name);\n    }\n}\n\n/**\n * @inner\n */\nfunction mergeTheme(option, theme) {\n    // PENDING\n    // NOT use `colorLayer` in theme if option has `color`\n    var notMergeColorLayer = option.color && !option.colorLayer;\n\n    each(theme, function (themeItem, name) {\n        if (name === 'colorLayer' && notMergeColorLayer) {\n            return;\n        }\n        // 如果有 component model 则把具体的 merge 逻辑交给该 model 处理\n        if (!ComponentModel.hasClass(name)) {\n            if (typeof themeItem === 'object') {\n                option[name] = !option[name]\n                    ? clone(themeItem)\n                    : merge(option[name], themeItem, false);\n            }\n            else {\n                if (option[name] == null) {\n                    option[name] = themeItem;\n                }\n            }\n        }\n    });\n}\n\nfunction initBase(baseOption) {\n    baseOption = baseOption;\n\n    // Using OPTION_INNER_KEY to mark that this option can not be used outside,\n    // i.e. `chart.setOption(chart.getModel().option);` is forbiden.\n    this.option = {};\n    this.option[OPTION_INNER_KEY] = 1;\n\n    /**\n     * Init with series: [], in case of calling findSeries method\n     * before series initialized.\n     * @type {Object.<string, Array.<module:echarts/model/Model>>}\n     * @private\n     */\n    this._componentsMap = createHashMap({series: []});\n\n    /**\n     * Mapping between filtered series list and raw series list.\n     * key: filtered series indices, value: raw series indices.\n     * @type {Array.<nubmer>}\n     * @private\n     */\n    this._seriesIndices;\n\n    this._seriesIndicesMap;\n\n    mergeTheme(baseOption, this._theme.option);\n\n    // TODO Needs clone when merging to the unexisted property\n    merge(baseOption, globalDefault, false);\n\n    this.mergeOption(baseOption);\n}\n\n/**\n * @inner\n * @param {Array.<string>|string} types model types\n * @return {Object} key: {string} type, value: {Array.<Object>} models\n */\nfunction getComponentsByTypes(componentsMap, types) {\n    if (!isArray(types)) {\n        types = types ? [types] : [];\n    }\n\n    var ret = {};\n    each(types, function (type) {\n        ret[type] = (componentsMap.get(type) || []).slice();\n    });\n\n    return ret;\n}\n\n/**\n * @inner\n */\nfunction determineSubType(mainType, newCptOption, existComponent) {\n    var subType = newCptOption.type\n        ? newCptOption.type\n        : existComponent\n        ? existComponent.subType\n        // Use determineSubType only when there is no existComponent.\n        : ComponentModel.determineSubType(mainType, newCptOption);\n\n    // tooltip, markline, markpoint may always has no subType\n    return subType;\n}\n\n/**\n * @inner\n */\nfunction createSeriesIndices(ecModel, seriesModels) {\n    ecModel._seriesIndicesMap = createHashMap(\n        ecModel._seriesIndices = map(seriesModels, function (series) {\n            return series.componentIndex;\n        }) || []\n    );\n}\n\n/**\n * @inner\n */\nfunction filterBySubType(components, condition) {\n    // Using hasOwnProperty for restrict. Consider\n    // subType is undefined in user payload.\n    return condition.hasOwnProperty('subType')\n        ? filter(components, function (cpt) {\n            return cpt.subType === condition.subType;\n        })\n        : components;\n}\n\n/**\n * @inner\n */\nfunction assertSeriesInitialized(ecModel) {\n    // Components that use _seriesIndices should depends on series component,\n    // which make sure that their initialization is after series.\n    if (__DEV__) {\n        if (!ecModel._seriesIndices) {\n            throw new Error('Option should contains series.');\n        }\n    }\n}\n\nmixin(GlobalModel, colorPaletteMixin);\n\nexport default GlobalModel;\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar echartsAPIList = [\n    'getDom', 'getZr', 'getWidth', 'getHeight', 'getDevicePixelRatio', 'dispatchAction', 'isDisposed',\n    'on', 'off', 'getDataURL', 'getConnectedDataURL', 'getModel', 'getOption',\n    'getViewOfComponentModel', 'getViewOfSeriesModel'\n];\n// And `getCoordinateSystems` and `getComponentByElement` will be injected in echarts.js\n\nfunction ExtensionAPI(chartInstance) {\n    zrUtil.each(echartsAPIList, function (name) {\n        this[name] = zrUtil.bind(chartInstance[name], chartInstance);\n    }, this);\n}\n\nexport default ExtensionAPI;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar coordinateSystemCreators = {};\n\nfunction CoordinateSystemManager() {\n\n    this._coordinateSystems = [];\n}\n\nCoordinateSystemManager.prototype = {\n\n    constructor: CoordinateSystemManager,\n\n    create: function (ecModel, api) {\n        var coordinateSystems = [];\n        zrUtil.each(coordinateSystemCreators, function (creater, type) {\n            var list = creater.create(ecModel, api);\n            coordinateSystems = coordinateSystems.concat(list || []);\n        });\n\n        this._coordinateSystems = coordinateSystems;\n    },\n\n    update: function (ecModel, api) {\n        zrUtil.each(this._coordinateSystems, function (coordSys) {\n            coordSys.update && coordSys.update(ecModel, api);\n        });\n    },\n\n    getCoordinateSystems: function () {\n        return this._coordinateSystems.slice();\n    }\n};\n\nCoordinateSystemManager.register = function (type, coordinateSystemCreator) {\n    coordinateSystemCreators[type] = coordinateSystemCreator;\n};\n\nCoordinateSystemManager.get = function (type) {\n    return coordinateSystemCreators[type];\n};\n\nexport default CoordinateSystemManager;","/*\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 * ECharts option manager\n *\n * @module {echarts/model/OptionManager}\n */\n\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as modelUtil from '../util/model';\nimport ComponentModel from './Component';\n\nvar each = zrUtil.each;\nvar clone = zrUtil.clone;\nvar map = zrUtil.map;\nvar merge = zrUtil.merge;\n\nvar QUERY_REG = /^(min|max)?(.+)$/;\n\n/**\n * TERM EXPLANATIONS:\n *\n * [option]:\n *\n *     An object that contains definitions of components. For example:\n *     var option = {\n *         title: {...},\n *         legend: {...},\n *         visualMap: {...},\n *         series: [\n *             {data: [...]},\n *             {data: [...]},\n *             ...\n *         ]\n *     };\n *\n * [rawOption]:\n *\n *     An object input to echarts.setOption. 'rawOption' may be an\n *     'option', or may be an object contains multi-options. For example:\n *     var option = {\n *         baseOption: {\n *             title: {...},\n *             legend: {...},\n *             series: [\n *                 {data: [...]},\n *                 {data: [...]},\n *                 ...\n *             ]\n *         },\n *         timeline: {...},\n *         options: [\n *             {title: {...}, series: {data: [...]}},\n *             {title: {...}, series: {data: [...]}},\n *             ...\n *         ],\n *         media: [\n *             {\n *                 query: {maxWidth: 320},\n *                 option: {series: {x: 20}, visualMap: {show: false}}\n *             },\n *             {\n *                 query: {minWidth: 320, maxWidth: 720},\n *                 option: {series: {x: 500}, visualMap: {show: true}}\n *             },\n *             {\n *                 option: {series: {x: 1200}, visualMap: {show: true}}\n *             }\n *         ]\n *     };\n *\n * @alias module:echarts/model/OptionManager\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction OptionManager(api) {\n\n    /**\n     * @private\n     * @type {module:echarts/ExtensionAPI}\n     */\n    this._api = api;\n\n    /**\n     * @private\n     * @type {Array.<number>}\n     */\n    this._timelineOptions = [];\n\n    /**\n     * @private\n     * @type {Array.<Object>}\n     */\n    this._mediaList = [];\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._mediaDefault;\n\n    /**\n     * -1, means default.\n     * empty means no media.\n     * @private\n     * @type {Array.<number>}\n     */\n    this._currentMediaIndices = [];\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._optionBackup;\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._newBaseOption;\n}\n\n// timeline.notMerge is not supported in ec3. Firstly there is rearly\n// case that notMerge is needed. Secondly supporting 'notMerge' requires\n// rawOption cloned and backuped when timeline changed, which does no\n// good to performance. What's more, that both timeline and setOption\n// method supply 'notMerge' brings complex and some problems.\n// Consider this case:\n// (step1) chart.setOption({timeline: {notMerge: false}, ...}, false);\n// (step2) chart.setOption({timeline: {notMerge: true}, ...}, false);\n\nOptionManager.prototype = {\n\n    constructor: OptionManager,\n\n    /**\n     * @public\n     * @param {Object} rawOption Raw option.\n     * @param {module:echarts/model/Global} ecModel\n     * @param {Array.<Function>} optionPreprocessorFuncs\n     * @return {Object} Init option\n     */\n    setOption: function (rawOption, optionPreprocessorFuncs) {\n        if (rawOption) {\n            // That set dat primitive is dangerous if user reuse the data when setOption again.\n            zrUtil.each(modelUtil.normalizeToArray(rawOption.series), function (series) {\n                series && series.data && zrUtil.isTypedArray(series.data) && zrUtil.setAsPrimitive(series.data);\n            });\n        }\n\n        // Caution: some series modify option data, if do not clone,\n        // it should ensure that the repeat modify correctly\n        // (create a new object when modify itself).\n        rawOption = clone(rawOption);\n\n        // FIXME\n        // 如果 timeline options 或者 media 中设置了某个属性，而baseOption中没有设置，则进行警告。\n\n        var oldOptionBackup = this._optionBackup;\n        var newParsedOption = parseRawOption.call(\n            this, rawOption, optionPreprocessorFuncs, !oldOptionBackup\n        );\n        this._newBaseOption = newParsedOption.baseOption;\n\n        // For setOption at second time (using merge mode);\n        if (oldOptionBackup) {\n            // Only baseOption can be merged.\n            mergeOption(oldOptionBackup.baseOption, newParsedOption.baseOption);\n\n            // For simplicity, timeline options and media options do not support merge,\n            // that is, if you `setOption` twice and both has timeline options, the latter\n            // timeline opitons will not be merged to the formers, but just substitude them.\n            if (newParsedOption.timelineOptions.length) {\n                oldOptionBackup.timelineOptions = newParsedOption.timelineOptions;\n            }\n            if (newParsedOption.mediaList.length) {\n                oldOptionBackup.mediaList = newParsedOption.mediaList;\n            }\n            if (newParsedOption.mediaDefault) {\n                oldOptionBackup.mediaDefault = newParsedOption.mediaDefault;\n            }\n        }\n        else {\n            this._optionBackup = newParsedOption;\n        }\n    },\n\n    /**\n     * @param {boolean} isRecreate\n     * @return {Object}\n     */\n    mountOption: function (isRecreate) {\n        var optionBackup = this._optionBackup;\n\n        // TODO\n        // 如果没有reset功能则不clone。\n\n        this._timelineOptions = map(optionBackup.timelineOptions, clone);\n        this._mediaList = map(optionBackup.mediaList, clone);\n        this._mediaDefault = clone(optionBackup.mediaDefault);\n        this._currentMediaIndices = [];\n\n        return clone(isRecreate\n            // this._optionBackup.baseOption, which is created at the first `setOption`\n            // called, and is merged into every new option by inner method `mergeOption`\n            // each time `setOption` called, can be only used in `isRecreate`, because\n            // its reliability is under suspicion. In other cases option merge is\n            // performed by `model.mergeOption`.\n            ? optionBackup.baseOption : this._newBaseOption\n        );\n    },\n\n    /**\n     * @param {module:echarts/model/Global} ecModel\n     * @return {Object}\n     */\n    getTimelineOption: function (ecModel) {\n        var option;\n        var timelineOptions = this._timelineOptions;\n\n        if (timelineOptions.length) {\n            // getTimelineOption can only be called after ecModel inited,\n            // so we can get currentIndex from timelineModel.\n            var timelineModel = ecModel.getComponent('timeline');\n            if (timelineModel) {\n                option = clone(\n                    timelineOptions[timelineModel.getCurrentIndex()],\n                    true\n                );\n            }\n        }\n\n        return option;\n    },\n\n    /**\n     * @param {module:echarts/model/Global} ecModel\n     * @return {Array.<Object>}\n     */\n    getMediaOption: function (ecModel) {\n        var ecWidth = this._api.getWidth();\n        var ecHeight = this._api.getHeight();\n        var mediaList = this._mediaList;\n        var mediaDefault = this._mediaDefault;\n        var indices = [];\n        var result = [];\n\n        // No media defined.\n        if (!mediaList.length && !mediaDefault) {\n            return result;\n        }\n\n        // Multi media may be applied, the latter defined media has higher priority.\n        for (var i = 0, len = mediaList.length; i < len; i++) {\n            if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) {\n                indices.push(i);\n            }\n        }\n\n        // FIXME\n        // 是否mediaDefault应该强制用户设置，否则可能修改不能回归。\n        if (!indices.length && mediaDefault) {\n            indices = [-1];\n        }\n\n        if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) {\n            result = map(indices, function (index) {\n                return clone(\n                    index === -1 ? mediaDefault.option : mediaList[index].option\n                );\n            });\n        }\n        // Otherwise return nothing.\n\n        this._currentMediaIndices = indices;\n\n        return result;\n    }\n};\n\nfunction parseRawOption(rawOption, optionPreprocessorFuncs, isNew) {\n    var timelineOptions = [];\n    var mediaList = [];\n    var mediaDefault;\n    var baseOption;\n\n    // Compatible with ec2.\n    var timelineOpt = rawOption.timeline;\n\n    if (rawOption.baseOption) {\n        baseOption = rawOption.baseOption;\n    }\n\n    // For timeline\n    if (timelineOpt || rawOption.options) {\n        baseOption = baseOption || {};\n        timelineOptions = (rawOption.options || []).slice();\n    }\n\n    // For media query\n    if (rawOption.media) {\n        baseOption = baseOption || {};\n        var media = rawOption.media;\n        each(media, function (singleMedia) {\n            if (singleMedia && singleMedia.option) {\n                if (singleMedia.query) {\n                    mediaList.push(singleMedia);\n                }\n                else if (!mediaDefault) {\n                    // Use the first media default.\n                    mediaDefault = singleMedia;\n                }\n            }\n        });\n    }\n\n    // For normal option\n    if (!baseOption) {\n        baseOption = rawOption;\n    }\n\n    // Set timelineOpt to baseOption in ec3,\n    // which is convenient for merge option.\n    if (!baseOption.timeline) {\n        baseOption.timeline = timelineOpt;\n    }\n\n    // Preprocess.\n    each([baseOption].concat(timelineOptions)\n        .concat(zrUtil.map(mediaList, function (media) {\n            return media.option;\n        })),\n        function (option) {\n            each(optionPreprocessorFuncs, function (preProcess) {\n                preProcess(option, isNew);\n            });\n        }\n    );\n\n    return {\n        baseOption: baseOption,\n        timelineOptions: timelineOptions,\n        mediaDefault: mediaDefault,\n        mediaList: mediaList\n    };\n}\n\n/**\n * @see <http://www.w3.org/TR/css3-mediaqueries/#media1>\n * Support: width, height, aspectRatio\n * Can use max or min as prefix.\n */\nfunction applyMediaQuery(query, ecWidth, ecHeight) {\n    var realMap = {\n        width: ecWidth,\n        height: ecHeight,\n        aspectratio: ecWidth / ecHeight // lowser case for convenientce.\n    };\n\n    var applicatable = true;\n\n    zrUtil.each(query, function (value, attr) {\n        var matched = attr.match(QUERY_REG);\n\n        if (!matched || !matched[1] || !matched[2]) {\n            return;\n        }\n\n        var operator = matched[1];\n        var realAttr = matched[2].toLowerCase();\n\n        if (!compare(realMap[realAttr], value, operator)) {\n            applicatable = false;\n        }\n    });\n\n    return applicatable;\n}\n\nfunction compare(real, expect, operator) {\n    if (operator === 'min') {\n        return real >= expect;\n    }\n    else if (operator === 'max') {\n        return real <= expect;\n    }\n    else { // Equals\n        return real === expect;\n    }\n}\n\nfunction indicesEquals(indices1, indices2) {\n    // indices is always order by asc and has only finite number.\n    return indices1.join(',') === indices2.join(',');\n}\n\n/**\n * Consider case:\n * `chart.setOption(opt1);`\n * Then user do some interaction like dataZoom, dataView changing.\n * `chart.setOption(opt2);`\n * Then user press 'reset button' in toolbox.\n *\n * After doing that all of the interaction effects should be reset, the\n * chart should be the same as the result of invoke\n * `chart.setOption(opt1); chart.setOption(opt2);`.\n *\n * Although it is not able ensure that\n * `chart.setOption(opt1); chart.setOption(opt2);` is equivalents to\n * `chart.setOption(merge(opt1, opt2));` exactly,\n * this might be the only simple way to implement that feature.\n *\n * MEMO: We've considered some other approaches:\n * 1. Each model handle its self restoration but not uniform treatment.\n *     (Too complex in logic and error-prone)\n * 2. Use a shadow ecModel. (Performace expensive)\n */\nfunction mergeOption(oldOption, newOption) {\n    newOption = newOption || {};\n\n    each(newOption, function (newCptOpt, mainType) {\n        if (newCptOpt == null) {\n            return;\n        }\n\n        var oldCptOpt = oldOption[mainType];\n\n        if (!ComponentModel.hasClass(mainType)) {\n            oldOption[mainType] = merge(oldCptOpt, newCptOpt, true);\n        }\n        else {\n            newCptOpt = modelUtil.normalizeToArray(newCptOpt);\n            oldCptOpt = modelUtil.normalizeToArray(oldCptOpt);\n\n            var mapResult = modelUtil.mappingToExists(oldCptOpt, newCptOpt);\n\n            oldOption[mainType] = map(mapResult, function (item) {\n                return (item.option && item.exist)\n                    ? merge(item.exist, item.option, true)\n                    : (item.exist || item.option);\n            });\n        }\n    });\n}\n\nexport default OptionManager;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as modelUtil from '../../util/model';\n\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\n\nvar POSSIBLE_STYLES = [\n    'areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle',\n    'chordStyle', 'label', 'labelLine'\n];\n\nfunction compatEC2ItemStyle(opt) {\n    var itemStyleOpt = opt && opt.itemStyle;\n    if (!itemStyleOpt) {\n        return;\n    }\n    for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) {\n        var styleName = POSSIBLE_STYLES[i];\n        var normalItemStyleOpt = itemStyleOpt.normal;\n        var emphasisItemStyleOpt = itemStyleOpt.emphasis;\n        if (normalItemStyleOpt && normalItemStyleOpt[styleName]) {\n            opt[styleName] = opt[styleName] || {};\n            if (!opt[styleName].normal) {\n                opt[styleName].normal = normalItemStyleOpt[styleName];\n            }\n            else {\n                zrUtil.merge(opt[styleName].normal, normalItemStyleOpt[styleName]);\n            }\n            normalItemStyleOpt[styleName] = null;\n        }\n        if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) {\n            opt[styleName] = opt[styleName] || {};\n            if (!opt[styleName].emphasis) {\n                opt[styleName].emphasis = emphasisItemStyleOpt[styleName];\n            }\n            else {\n                zrUtil.merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]);\n            }\n            emphasisItemStyleOpt[styleName] = null;\n        }\n    }\n}\n\nfunction convertNormalEmphasis(opt, optType, useExtend) {\n    if (opt && opt[optType] && (opt[optType].normal || opt[optType].emphasis)) {\n        var normalOpt = opt[optType].normal;\n        var emphasisOpt = opt[optType].emphasis;\n\n        if (normalOpt) {\n            // Timeline controlStyle has other properties besides normal and emphasis\n            if (useExtend) {\n                opt[optType].normal = opt[optType].emphasis = null;\n                zrUtil.defaults(opt[optType], normalOpt);\n            }\n            else {\n                opt[optType] = normalOpt;\n            }\n        }\n        if (emphasisOpt) {\n            opt.emphasis = opt.emphasis || {};\n            opt.emphasis[optType] = emphasisOpt;\n        }\n    }\n}\n\nfunction removeEC3NormalStatus(opt) {\n    convertNormalEmphasis(opt, 'itemStyle');\n    convertNormalEmphasis(opt, 'lineStyle');\n    convertNormalEmphasis(opt, 'areaStyle');\n    convertNormalEmphasis(opt, 'label');\n    convertNormalEmphasis(opt, 'labelLine');\n    // treemap\n    convertNormalEmphasis(opt, 'upperLabel');\n    // graph\n    convertNormalEmphasis(opt, 'edgeLabel');\n}\n\nfunction compatTextStyle(opt, propName) {\n    // Check whether is not object (string\\null\\undefined ...)\n    var labelOptSingle = isObject(opt) && opt[propName];\n    var textStyle = isObject(labelOptSingle) && labelOptSingle.textStyle;\n    if (textStyle) {\n        for (var i = 0, len = modelUtil.TEXT_STYLE_OPTIONS.length; i < len; i++) {\n            var propName = modelUtil.TEXT_STYLE_OPTIONS[i];\n            if (textStyle.hasOwnProperty(propName)) {\n                labelOptSingle[propName] = textStyle[propName];\n            }\n        }\n    }\n}\n\nfunction compatEC3CommonStyles(opt) {\n    if (opt) {\n        removeEC3NormalStatus(opt);\n        compatTextStyle(opt, 'label');\n        opt.emphasis && compatTextStyle(opt.emphasis, 'label');\n    }\n}\n\nfunction processSeries(seriesOpt) {\n    if (!isObject(seriesOpt)) {\n        return;\n    }\n\n    compatEC2ItemStyle(seriesOpt);\n    removeEC3NormalStatus(seriesOpt);\n\n    compatTextStyle(seriesOpt, 'label');\n    // treemap\n    compatTextStyle(seriesOpt, 'upperLabel');\n    // graph\n    compatTextStyle(seriesOpt, 'edgeLabel');\n    if (seriesOpt.emphasis) {\n        compatTextStyle(seriesOpt.emphasis, 'label');\n        // treemap\n        compatTextStyle(seriesOpt.emphasis, 'upperLabel');\n        // graph\n        compatTextStyle(seriesOpt.emphasis, 'edgeLabel');\n    }\n\n    var markPoint = seriesOpt.markPoint;\n    if (markPoint) {\n        compatEC2ItemStyle(markPoint);\n        compatEC3CommonStyles(markPoint);\n    }\n\n    var markLine = seriesOpt.markLine;\n    if (markLine) {\n        compatEC2ItemStyle(markLine);\n        compatEC3CommonStyles(markLine);\n    }\n\n    var markArea = seriesOpt.markArea;\n    if (markArea) {\n        compatEC3CommonStyles(markArea);\n    }\n\n    var data = seriesOpt.data;\n\n    // Break with ec3: if `setOption` again, there may be no `type` in option,\n    // then the backward compat based on option type will not be performed.\n\n    if (seriesOpt.type === 'graph') {\n        data = data || seriesOpt.nodes;\n        var edgeData = seriesOpt.links || seriesOpt.edges;\n        if (edgeData && !zrUtil.isTypedArray(edgeData)) {\n            for (var i = 0; i < edgeData.length; i++) {\n                compatEC3CommonStyles(edgeData[i]);\n            }\n        }\n        zrUtil.each(seriesOpt.categories, function (opt) {\n            removeEC3NormalStatus(opt);\n        });\n    }\n\n    if (data && !zrUtil.isTypedArray(data)) {\n        for (var i = 0; i < data.length; i++) {\n            compatEC3CommonStyles(data[i]);\n        }\n    }\n\n    // mark point data\n    var markPoint = seriesOpt.markPoint;\n    if (markPoint && markPoint.data) {\n        var mpData = markPoint.data;\n        for (var i = 0; i < mpData.length; i++) {\n            compatEC3CommonStyles(mpData[i]);\n        }\n    }\n    // mark line data\n    var markLine = seriesOpt.markLine;\n    if (markLine && markLine.data) {\n        var mlData = markLine.data;\n        for (var i = 0; i < mlData.length; i++) {\n            if (zrUtil.isArray(mlData[i])) {\n                compatEC3CommonStyles(mlData[i][0]);\n                compatEC3CommonStyles(mlData[i][1]);\n            }\n            else {\n                compatEC3CommonStyles(mlData[i]);\n            }\n        }\n    }\n\n    // Series\n    if (seriesOpt.type === 'gauge') {\n        compatTextStyle(seriesOpt, 'axisLabel');\n        compatTextStyle(seriesOpt, 'title');\n        compatTextStyle(seriesOpt, 'detail');\n    }\n    else if (seriesOpt.type === 'treemap') {\n        convertNormalEmphasis(seriesOpt.breadcrumb, 'itemStyle');\n        zrUtil.each(seriesOpt.levels, function (opt) {\n            removeEC3NormalStatus(opt);\n        });\n    }\n    else if (seriesOpt.type === 'tree') {\n        removeEC3NormalStatus(seriesOpt.leaves);\n    }\n    // sunburst starts from ec4, so it does not need to compat levels.\n}\n\nfunction toArr(o) {\n    return zrUtil.isArray(o) ? o : o ? [o] : [];\n}\n\nfunction toObj(o) {\n    return (zrUtil.isArray(o) ? o[0] : o) || {};\n}\n\nexport default function (option, isTheme) {\n    each(toArr(option.series), function (seriesOpt) {\n        isObject(seriesOpt) && processSeries(seriesOpt);\n    });\n\n    var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar'];\n    isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis');\n\n    each(\n        axes,\n        function (axisName) {\n            each(toArr(option[axisName]), function (axisOpt) {\n                if (axisOpt) {\n                    compatTextStyle(axisOpt, 'axisLabel');\n                    compatTextStyle(axisOpt.axisPointer, 'label');\n                }\n            });\n        }\n    );\n\n    each(toArr(option.parallel), function (parallelOpt) {\n        var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault;\n        compatTextStyle(parallelAxisDefault, 'axisLabel');\n        compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label');\n    });\n\n    each(toArr(option.calendar), function (calendarOpt) {\n        convertNormalEmphasis(calendarOpt, 'itemStyle');\n        compatTextStyle(calendarOpt, 'dayLabel');\n        compatTextStyle(calendarOpt, 'monthLabel');\n        compatTextStyle(calendarOpt, 'yearLabel');\n    });\n\n    // radar.name.textStyle\n    each(toArr(option.radar), function (radarOpt) {\n        compatTextStyle(radarOpt, 'name');\n    });\n\n    each(toArr(option.geo), function (geoOpt) {\n        if (isObject(geoOpt)) {\n            compatEC3CommonStyles(geoOpt);\n            each(toArr(geoOpt.regions), function (regionObj) {\n                compatEC3CommonStyles(regionObj);\n            });\n        }\n    });\n\n    each(toArr(option.timeline), function (timelineOpt) {\n        compatEC3CommonStyles(timelineOpt);\n        convertNormalEmphasis(timelineOpt, 'label');\n        convertNormalEmphasis(timelineOpt, 'itemStyle');\n        convertNormalEmphasis(timelineOpt, 'controlStyle', true);\n\n        var data = timelineOpt.data;\n        zrUtil.isArray(data) && zrUtil.each(data, function (item) {\n            if (zrUtil.isObject(item)) {\n                convertNormalEmphasis(item, 'label');\n                convertNormalEmphasis(item, 'itemStyle');\n            }\n        });\n    });\n\n    each(toArr(option.toolbox), function (toolboxOpt) {\n        convertNormalEmphasis(toolboxOpt, 'iconStyle');\n        each(toolboxOpt.feature, function (featureOpt) {\n            convertNormalEmphasis(featureOpt, 'iconStyle');\n        });\n    });\n\n    compatTextStyle(toObj(option.axisPointer), 'label');\n    compatTextStyle(toObj(option.tooltip).axisPointer, 'label');\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// Compatitable with 2.0\n\nimport {each, isArray, isObject} from 'zrender/src/core/util';\nimport compatStyle from './helper/compatStyle';\nimport {normalizeToArray} from '../util/model';\n\nfunction get(opt, path) {\n    path = path.split(',');\n    var obj = opt;\n    for (var i = 0; i < path.length; i++) {\n        obj = obj && obj[path[i]];\n        if (obj == null) {\n            break;\n        }\n    }\n    return obj;\n}\n\nfunction set(opt, path, val, overwrite) {\n    path = path.split(',');\n    var obj = opt;\n    var key;\n    for (var i = 0; i < path.length - 1; i++) {\n        key = path[i];\n        if (obj[key] == null) {\n            obj[key] = {};\n        }\n        obj = obj[key];\n    }\n    if (overwrite || obj[path[i]] == null) {\n        obj[path[i]] = val;\n    }\n}\n\nfunction compatLayoutProperties(option) {\n    each(LAYOUT_PROPERTIES, function (prop) {\n        if (prop[0] in option && !(prop[1] in option)) {\n            option[prop[1]] = option[prop[0]];\n        }\n    });\n}\n\nvar LAYOUT_PROPERTIES = [\n    ['x', 'left'], ['y', 'top'], ['x2', 'right'], ['y2', 'bottom']\n];\n\nvar COMPATITABLE_COMPONENTS = [\n    'grid', 'geo', 'parallel', 'legend', 'toolbox', 'title', 'visualMap', 'dataZoom', 'timeline'\n];\n\nexport default function (option, isTheme) {\n    compatStyle(option, isTheme);\n\n    // Make sure series array for model initialization.\n    option.series = normalizeToArray(option.series);\n\n    each(option.series, function (seriesOpt) {\n        if (!isObject(seriesOpt)) {\n            return;\n        }\n\n        var seriesType = seriesOpt.type;\n\n        if (seriesType === 'line') {\n            if (seriesOpt.clipOverflow != null) {\n                seriesOpt.clip = seriesOpt.clipOverflow;\n            }\n        }\n        else if (seriesType === 'pie' || seriesType === 'gauge') {\n            if (seriesOpt.clockWise != null) {\n                seriesOpt.clockwise = seriesOpt.clockWise;\n            }\n        }\n        else if (seriesType === 'gauge') {\n            var pointerColor = get(seriesOpt, 'pointer.color');\n            pointerColor != null\n                && set(seriesOpt, 'itemStyle.color', pointerColor);\n        }\n\n        compatLayoutProperties(seriesOpt);\n    });\n\n    // dataRange has changed to visualMap\n    if (option.dataRange) {\n        option.visualMap = option.dataRange;\n    }\n\n    each(COMPATITABLE_COMPONENTS, function (componentName) {\n        var options = option[componentName];\n        if (options) {\n            if (!isArray(options)) {\n                options = [options];\n            }\n            each(options, function (option) {\n                compatLayoutProperties(option);\n            });\n        }\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {createHashMap, each} from 'zrender/src/core/util';\n\n// (1) [Caution]: the logic is correct based on the premises:\n//     data processing stage is blocked in stream.\n//     See <module:echarts/stream/Scheduler#performDataProcessorTasks>\n// (2) Only register once when import repeatly.\n//     Should be executed after series filtered and before stack calculation.\nexport default function (ecModel) {\n    var stackInfoMap = createHashMap();\n    ecModel.eachSeries(function (seriesModel) {\n        var stack = seriesModel.get('stack');\n        // Compatibal: when `stack` is set as '', do not stack.\n        if (stack) {\n            var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []);\n            var data = seriesModel.getData();\n\n            var stackInfo = {\n                // Used for calculate axis extent automatically.\n                stackResultDimension: data.getCalculationInfo('stackResultDimension'),\n                stackedOverDimension: data.getCalculationInfo('stackedOverDimension'),\n                stackedDimension: data.getCalculationInfo('stackedDimension'),\n                stackedByDimension: data.getCalculationInfo('stackedByDimension'),\n                isStackedByIndex: data.getCalculationInfo('isStackedByIndex'),\n                data: data,\n                seriesModel: seriesModel\n            };\n\n            // If stacked on axis that do not support data stack.\n            if (!stackInfo.stackedDimension\n                || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension)\n            ) {\n                return;\n            }\n\n            stackInfoList.length && data.setCalculationInfo(\n                'stackedOnSeries', stackInfoList[stackInfoList.length - 1].seriesModel\n            );\n\n            stackInfoList.push(stackInfo);\n        }\n    });\n\n    stackInfoMap.each(calculateStack);\n}\n\nfunction calculateStack(stackInfoList) {\n    each(stackInfoList, function (targetStackInfo, idxInStack) {\n        var resultVal = [];\n        var resultNaN = [NaN, NaN];\n        var dims = [targetStackInfo.stackResultDimension, targetStackInfo.stackedOverDimension];\n        var targetData = targetStackInfo.data;\n        var isStackedByIndex = targetStackInfo.isStackedByIndex;\n\n        // Should not write on raw data, because stack series model list changes\n        // depending on legend selection.\n        var newData = targetData.map(dims, function (v0, v1, dataIndex) {\n            var sum = targetData.get(targetStackInfo.stackedDimension, dataIndex);\n\n            // Consider `connectNulls` of line area, if value is NaN, stackedOver\n            // should also be NaN, to draw a appropriate belt area.\n            if (isNaN(sum)) {\n                return resultNaN;\n            }\n\n            var byValue;\n            var stackedDataRawIndex;\n\n            if (isStackedByIndex) {\n                stackedDataRawIndex = targetData.getRawIndex(dataIndex);\n            }\n            else {\n                byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex);\n            }\n\n            // If stackOver is NaN, chart view will render point on value start.\n            var stackedOver = NaN;\n\n            for (var j = idxInStack - 1; j >= 0; j--) {\n                var stackInfo = stackInfoList[j];\n\n                // Has been optimized by inverted indices on `stackedByDimension`.\n                if (!isStackedByIndex) {\n                    stackedDataRawIndex = stackInfo.data.rawIndexOf(stackInfo.stackedByDimension, byValue);\n                }\n\n                if (stackedDataRawIndex >= 0) {\n                    var val = stackInfo.data.getByRawIndex(stackInfo.stackResultDimension, stackedDataRawIndex);\n\n                    // Considering positive stack, negative stack and empty data\n                    if ((sum >= 0 && val > 0) // Positive stack\n                        || (sum <= 0 && val < 0) // Negative stack\n                    ) {\n                        sum += val;\n                        stackedOver = val;\n                        break;\n                    }\n                }\n            }\n\n            resultVal[0] = sum;\n            resultVal[1] = stackedOver;\n\n            return resultVal;\n        });\n\n        targetData.hostModel.setData(newData);\n        // Update for consequent calculation\n        targetStackInfo.data = newData;\n    });\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// TODO\n// ??? refactor? check the outer usage of data provider.\n// merge with defaultDimValueGetter?\n\nimport {__DEV__} from '../../config';\nimport {isTypedArray, extend, assert, each, isObject} from 'zrender/src/core/util';\nimport {getDataItemValue, isDataItemOption} from '../../util/model';\nimport {parseDate} from '../../util/number';\nimport Source from '../Source';\nimport {\n    SOURCE_FORMAT_TYPED_ARRAY,\n    SOURCE_FORMAT_ARRAY_ROWS,\n    SOURCE_FORMAT_ORIGINAL,\n    SOURCE_FORMAT_OBJECT_ROWS\n} from './sourceType';\n\n/**\n * If normal array used, mutable chunk size is supported.\n * If typed array used, chunk size must be fixed.\n */\nexport function DefaultDataProvider(source, dimSize) {\n    if (!Source.isInstance(source)) {\n        source = Source.seriesDataToSource(source);\n    }\n    this._source = source;\n\n    var data = this._data = source.data;\n    var sourceFormat = source.sourceFormat;\n\n    // Typed array. TODO IE10+?\n    if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {\n        if (__DEV__) {\n            if (dimSize == null) {\n                throw new Error('Typed array data must specify dimension size');\n            }\n        }\n        this._offset = 0;\n        this._dimSize = dimSize;\n        this._data = data;\n    }\n\n    var methods = providerMethods[\n        sourceFormat === SOURCE_FORMAT_ARRAY_ROWS\n        ? sourceFormat + '_' + source.seriesLayoutBy\n        : sourceFormat\n    ];\n\n    if (__DEV__) {\n        assert(methods, 'Invalide sourceFormat: ' + sourceFormat);\n    }\n\n    extend(this, methods);\n}\n\nvar providerProto = DefaultDataProvider.prototype;\n// If data is pure without style configuration\nproviderProto.pure = false;\n// If data is persistent and will not be released after use.\nproviderProto.persistent = true;\n\n// ???! FIXME legacy data provider do not has method getSource\nproviderProto.getSource = function () {\n    return this._source;\n};\n\nvar providerMethods = {\n\n    'arrayRows_column': {\n        pure: true,\n        count: function () {\n            return Math.max(0, this._data.length - this._source.startIndex);\n        },\n        getItem: function (idx) {\n            return this._data[idx + this._source.startIndex];\n        },\n        appendData: appendDataSimply\n    },\n\n    'arrayRows_row': {\n        pure: true,\n        count: function () {\n            var row = this._data[0];\n            return row ? Math.max(0, row.length - this._source.startIndex) : 0;\n        },\n        getItem: function (idx) {\n            idx += this._source.startIndex;\n            var item = [];\n            var data = this._data;\n            for (var i = 0; i < data.length; i++) {\n                var row = data[i];\n                item.push(row ? row[idx] : null);\n            }\n            return item;\n        },\n        appendData: function () {\n            throw new Error('Do not support appendData when set seriesLayoutBy: \"row\".');\n        }\n    },\n\n    'objectRows': {\n        pure: true,\n        count: countSimply,\n        getItem: getItemSimply,\n        appendData: appendDataSimply\n    },\n\n    'keyedColumns': {\n        pure: true,\n        count: function () {\n            var dimName = this._source.dimensionsDefine[0].name;\n            var col = this._data[dimName];\n            return col ? col.length : 0;\n        },\n        getItem: function (idx) {\n            var item = [];\n            var dims = this._source.dimensionsDefine;\n            for (var i = 0; i < dims.length; i++) {\n                var col = this._data[dims[i].name];\n                item.push(col ? col[idx] : null);\n            }\n            return item;\n        },\n        appendData: function (newData) {\n            var data = this._data;\n            each(newData, function (newCol, key) {\n                var oldCol = data[key] || (data[key] = []);\n                for (var i = 0; i < (newCol || []).length; i++) {\n                    oldCol.push(newCol[i]);\n                }\n            });\n        }\n    },\n\n    'original': {\n        count: countSimply,\n        getItem: getItemSimply,\n        appendData: appendDataSimply\n    },\n\n    'typedArray': {\n        persistent: false,\n        pure: true,\n        count: function () {\n            return this._data ? (this._data.length / this._dimSize) : 0;\n        },\n        getItem: function (idx, out) {\n            idx = idx - this._offset;\n            out = out || [];\n            var offset = this._dimSize * idx;\n            for (var i = 0; i < this._dimSize; i++) {\n                out[i] = this._data[offset + i];\n            }\n            return out;\n        },\n        appendData: function (newData) {\n            if (__DEV__) {\n                assert(\n                    isTypedArray(newData),\n                    'Added data must be TypedArray if data in initialization is TypedArray'\n                );\n            }\n\n            this._data = newData;\n        },\n\n        // Clean self if data is already used.\n        clean: function () {\n            // PENDING\n            this._offset += this.count();\n            this._data = null;\n        }\n    }\n};\n\nfunction countSimply() {\n    return this._data.length;\n}\nfunction getItemSimply(idx) {\n    return this._data[idx];\n}\nfunction appendDataSimply(newData) {\n    for (var i = 0; i < newData.length; i++) {\n        this._data.push(newData[i]);\n    }\n}\n\n\n\nvar rawValueGetters = {\n\n    arrayRows: getRawValueSimply,\n\n    objectRows: function (dataItem, dataIndex, dimIndex, dimName) {\n        return dimIndex != null ? dataItem[dimName] : dataItem;\n    },\n\n    keyedColumns: getRawValueSimply,\n\n    original: function (dataItem, dataIndex, dimIndex, dimName) {\n        // FIXME\n        // In some case (markpoint in geo (geo-map.html)), dataItem\n        // is {coord: [...]}\n        var value = getDataItemValue(dataItem);\n        return (dimIndex == null || !(value instanceof Array))\n            ? value\n            : value[dimIndex];\n    },\n\n    typedArray: getRawValueSimply\n};\n\nfunction getRawValueSimply(dataItem, dataIndex, dimIndex, dimName) {\n    return dimIndex != null ? dataItem[dimIndex] : dataItem;\n}\n\n\nexport var defaultDimValueGetters = {\n\n    arrayRows: getDimValueSimply,\n\n    objectRows: function (dataItem, dimName, dataIndex, dimIndex) {\n        return converDataValue(dataItem[dimName], this._dimensionInfos[dimName]);\n    },\n\n    keyedColumns: getDimValueSimply,\n\n    original: function (dataItem, dimName, dataIndex, dimIndex) {\n        // Performance sensitive, do not use modelUtil.getDataItemValue.\n        // If dataItem is an plain object with no value field, the var `value`\n        // will be assigned with the object, but it will be tread correctly\n        // in the `convertDataValue`.\n        var value = dataItem && (dataItem.value == null ? dataItem : dataItem.value);\n\n        // If any dataItem is like { value: 10 }\n        if (!this._rawData.pure && isDataItemOption(dataItem)) {\n            this.hasItemOption = true;\n        }\n        return converDataValue(\n            (value instanceof Array)\n                ? value[dimIndex]\n                // If value is a single number or something else not array.\n                : value,\n            this._dimensionInfos[dimName]\n        );\n    },\n\n    typedArray: function (dataItem, dimName, dataIndex, dimIndex) {\n        return dataItem[dimIndex];\n    }\n\n};\n\nfunction getDimValueSimply(dataItem, dimName, dataIndex, dimIndex) {\n    return converDataValue(dataItem[dimIndex], this._dimensionInfos[dimName]);\n}\n\n/**\n * This helper method convert value in data.\n * @param {string|number|Date} value\n * @param {Object|string} [dimInfo] If string (like 'x'), dimType defaults 'number'.\n *        If \"dimInfo.ordinalParseAndSave\", ordinal value can be parsed.\n */\nfunction converDataValue(value, dimInfo) {\n    // Performance sensitive.\n    var dimType = dimInfo && dimInfo.type;\n    if (dimType === 'ordinal') {\n        // If given value is a category string\n        var ordinalMeta = dimInfo && dimInfo.ordinalMeta;\n        return ordinalMeta\n            ? ordinalMeta.parseAndCollect(value)\n            : value;\n    }\n\n    if (dimType === 'time'\n        // spead up when using timestamp\n        && typeof value !== 'number'\n        && value != null\n        && value !== '-'\n    ) {\n        value = +parseDate(value);\n    }\n\n    // dimType defaults 'number'.\n    // If dimType is not ordinal and value is null or undefined or NaN or '-',\n    // parse to NaN.\n    return (value == null || value === '')\n        ? NaN\n        // If string (like '-'), using '+' parse to NaN\n        // If object, also parse to NaN\n        : +value;\n}\n\n// ??? FIXME can these logic be more neat: getRawValue, getRawDataItem,\n// Consider persistent.\n// Caution: why use raw value to display on label or tooltip?\n// A reason is to avoid format. For example time value we do not know\n// how to format is expected. More over, if stack is used, calculated\n// value may be 0.91000000001, which have brings trouble to display.\n// TODO: consider how to treat null/undefined/NaN when display?\n/**\n * @param {module:echarts/data/List} data\n * @param {number} dataIndex\n * @param {string|number} [dim] dimName or dimIndex\n * @return {Array.<number>|string|number} can be null/undefined.\n */\nexport function retrieveRawValue(data, dataIndex, dim) {\n    if (!data) {\n        return;\n    }\n\n    // Consider data may be not persistent.\n    var dataItem = data.getRawDataItem(dataIndex);\n\n    if (dataItem == null) {\n        return;\n    }\n\n    var sourceFormat = data.getProvider().getSource().sourceFormat;\n    var dimName;\n    var dimIndex;\n\n    var dimInfo = data.getDimensionInfo(dim);\n    if (dimInfo) {\n        dimName = dimInfo.name;\n        dimIndex = dimInfo.index;\n    }\n\n    return rawValueGetters[sourceFormat](dataItem, dataIndex, dimIndex, dimName);\n}\n\n/**\n * Compatible with some cases (in pie, map) like:\n * data: [{name: 'xx', value: 5, selected: true}, ...]\n * where only sourceFormat is 'original' and 'objectRows' supported.\n *\n * ??? TODO\n * Supported detail options in data item when using 'arrayRows'.\n *\n * @param {module:echarts/data/List} data\n * @param {number} dataIndex\n * @param {string} attr like 'selected'\n */\nexport function retrieveRawAttr(data, dataIndex, attr) {\n    if (!data) {\n        return;\n    }\n\n    var sourceFormat = data.getProvider().getSource().sourceFormat;\n\n    if (sourceFormat !== SOURCE_FORMAT_ORIGINAL\n        && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS\n    ) {\n        return;\n    }\n\n    var dataItem = data.getRawDataItem(dataIndex);\n    if (sourceFormat === SOURCE_FORMAT_ORIGINAL && !isObject(dataItem)) {\n        dataItem = null;\n    }\n    if (dataItem) {\n        return dataItem[attr];\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {retrieveRawValue} from '../../data/helper/dataProvider';\nimport {getTooltipMarker, formatTpl} from '../../util/format';\nimport { getTooltipRenderMode } from '../../util/model';\n\nvar DIMENSION_LABEL_REG = /\\{@(.+?)\\}/g;\n\n// PENDING A little ugly\nexport default {\n    /**\n     * Get params for formatter\n     * @param {number} dataIndex\n     * @param {string} [dataType]\n     * @return {Object}\n     */\n    getDataParams: function (dataIndex, dataType) {\n        var data = this.getData(dataType);\n        var rawValue = this.getRawValue(dataIndex, dataType);\n        var rawDataIndex = data.getRawIndex(dataIndex);\n        var name = data.getName(dataIndex);\n        var itemOpt = data.getRawDataItem(dataIndex);\n        var color = data.getItemVisual(dataIndex, 'color');\n        var borderColor = data.getItemVisual(dataIndex, 'borderColor');\n        var tooltipModel = this.ecModel.getComponent('tooltip');\n        var renderModeOption = tooltipModel && tooltipModel.get('renderMode');\n        var renderMode = getTooltipRenderMode(renderModeOption);\n        var mainType = this.mainType;\n        var isSeries = mainType === 'series';\n        var userOutput = data.userOutput;\n\n        return {\n            componentType: mainType,\n            componentSubType: this.subType,\n            componentIndex: this.componentIndex,\n            seriesType: isSeries ? this.subType : null,\n            seriesIndex: this.seriesIndex,\n            seriesId: isSeries ? this.id : null,\n            seriesName: isSeries ? this.name : null,\n            name: name,\n            dataIndex: rawDataIndex,\n            data: itemOpt,\n            dataType: dataType,\n            value: rawValue,\n            color: color,\n            borderColor: borderColor,\n            dimensionNames: userOutput ? userOutput.dimensionNames : null,\n            encode: userOutput ? userOutput.encode : null,\n            marker: getTooltipMarker({\n                color: color,\n                renderMode: renderMode\n            }),\n\n            // Param name list for mapping `a`, `b`, `c`, `d`, `e`\n            $vars: ['seriesName', 'name', 'value']\n        };\n    },\n\n    /**\n     * Format label\n     * @param {number} dataIndex\n     * @param {string} [status='normal'] 'normal' or 'emphasis'\n     * @param {string} [dataType]\n     * @param {number} [dimIndex] Only used in some chart that\n     *        use formatter in different dimensions, like radar.\n     * @param {string} [labelProp='label']\n     * @return {string} If not formatter, return null/undefined\n     */\n    getFormattedLabel: function (dataIndex, status, dataType, dimIndex, labelProp) {\n        status = status || 'normal';\n        var data = this.getData(dataType);\n        var itemModel = data.getItemModel(dataIndex);\n\n        var params = this.getDataParams(dataIndex, dataType);\n        if (dimIndex != null && (params.value instanceof Array)) {\n            params.value = params.value[dimIndex];\n        }\n\n        var formatter = itemModel.get(\n            status === 'normal'\n            ? [labelProp || 'label', 'formatter']\n            : [status, labelProp || 'label', 'formatter']\n        );\n\n        if (typeof formatter === 'function') {\n            params.status = status;\n            params.dimensionIndex = dimIndex;\n            return formatter(params);\n        }\n        else if (typeof formatter === 'string') {\n            var str = formatTpl(formatter, params);\n\n            // Support 'aaa{@[3]}bbb{@product}ccc'.\n            // Do not support '}' in dim name util have to.\n            return str.replace(DIMENSION_LABEL_REG, function (origin, dim) {\n                var len = dim.length;\n                if (dim.charAt(0) === '[' && dim.charAt(len - 1) === ']') {\n                    dim = +dim.slice(1, len - 1); // Also: '[]' => 0\n                }\n                return retrieveRawValue(data, dataIndex, dim);\n            });\n        }\n    },\n\n    /**\n     * Get raw value in option\n     * @param {number} idx\n     * @param {string} [dataType]\n     * @return {Array|number|string}\n     */\n    getRawValue: function (idx, dataType) {\n        return retrieveRawValue(this.getData(dataType), idx);\n    },\n\n    /**\n     * Should be implemented.\n     * @param {number} dataIndex\n     * @param {boolean} [multipleSeries=false]\n     * @param {number} [dataType]\n     * @return {string} tooltip string\n     */\n    formatTooltip: function () {\n        // Empty function\n    }\n};\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {assert, isArray} from 'zrender/src/core/util';\nimport { __DEV__ } from '../config';\n\n/**\n * @param {Object} define\n * @return See the return of `createTask`.\n */\nexport function createTask(define) {\n    return new Task(define);\n}\n\n/**\n * @constructor\n * @param {Object} define\n * @param {Function} define.reset Custom reset\n * @param {Function} [define.plan] Returns 'reset' indicate reset immediately.\n * @param {Function} [define.count] count is used to determin data task.\n * @param {Function} [define.onDirty] count is used to determin data task.\n */\nfunction Task(define) {\n    define = define || {};\n\n    this._reset = define.reset;\n    this._plan = define.plan;\n    this._count = define.count;\n    this._onDirty = define.onDirty;\n\n    this._dirty = true;\n\n    // Context must be specified implicitly, to\n    // avoid miss update context when model changed.\n    this.context;\n}\n\nvar taskProto = Task.prototype;\n\n/**\n * @param {Object} performArgs\n * @param {number} [performArgs.step] Specified step.\n * @param {number} [performArgs.skip] Skip customer perform call.\n * @param {number} [performArgs.modBy] Sampling window size.\n * @param {number} [performArgs.modDataCount] Sampling count.\n */\ntaskProto.perform = function (performArgs) {\n    var upTask = this._upstream;\n    var skip = performArgs && performArgs.skip;\n\n    // TODO some refactor.\n    // Pull data. Must pull data each time, because context.data\n    // may be updated by Series.setData.\n    if (this._dirty && upTask) {\n        var context = this.context;\n        context.data = context.outputData = upTask.context.outputData;\n    }\n\n    if (this.__pipeline) {\n        this.__pipeline.currentTask = this;\n    }\n\n    var planResult;\n    if (this._plan && !skip) {\n        planResult = this._plan(this.context);\n    }\n\n    // Support sharding by mod, which changes the render sequence and makes the rendered graphic\n    // elements uniformed distributed when progress, especially when moving or zooming.\n    var lastModBy = normalizeModBy(this._modBy);\n    var lastModDataCount = this._modDataCount || 0;\n    var modBy = normalizeModBy(performArgs && performArgs.modBy);\n    var modDataCount = performArgs && performArgs.modDataCount || 0;\n    if (lastModBy !== modBy || lastModDataCount !== modDataCount) {\n        planResult = 'reset';\n    }\n\n    function normalizeModBy(val) {\n        !(val >= 1) && (val = 1); // jshint ignore:line\n        return val;\n    }\n\n    var forceFirstProgress;\n    if (this._dirty || planResult === 'reset') {\n        this._dirty = false;\n        forceFirstProgress = reset(this, skip);\n    }\n\n    this._modBy = modBy;\n    this._modDataCount = modDataCount;\n\n    var step = performArgs && performArgs.step;\n\n    if (upTask) {\n\n        if (__DEV__) {\n            assert(upTask._outputDueEnd != null);\n        }\n        this._dueEnd = upTask._outputDueEnd;\n    }\n    // DataTask or overallTask\n    else {\n        if (__DEV__) {\n            assert(!this._progress || this._count);\n        }\n        this._dueEnd = this._count ? this._count(this.context) : Infinity;\n    }\n\n    // Note: Stubs, that its host overall task let it has progress, has progress.\n    // If no progress, pass index from upstream to downstream each time plan called.\n    if (this._progress) {\n        var start = this._dueIndex;\n        var end = Math.min(\n            step != null ? this._dueIndex + step : Infinity,\n            this._dueEnd\n        );\n\n        if (!skip && (forceFirstProgress || start < end)) {\n            var progress = this._progress;\n            if (isArray(progress)) {\n                for (var i = 0; i < progress.length; i++) {\n                    doProgress(this, progress[i], start, end, modBy, modDataCount);\n                }\n            }\n            else {\n                doProgress(this, progress, start, end, modBy, modDataCount);\n            }\n        }\n\n        this._dueIndex = end;\n        // If no `outputDueEnd`, assume that output data and\n        // input data is the same, so use `dueIndex` as `outputDueEnd`.\n        var outputDueEnd = this._settedOutputEnd != null\n            ? this._settedOutputEnd : end;\n\n        if (__DEV__) {\n            // ??? Can not rollback.\n            assert(outputDueEnd >= this._outputDueEnd);\n        }\n\n        this._outputDueEnd = outputDueEnd;\n    }\n    else {\n        // (1) Some overall task has no progress.\n        // (2) Stubs, that its host overall task do not let it has progress, has no progress.\n        // This should always be performed so it can be passed to downstream.\n        this._dueIndex = this._outputDueEnd = this._settedOutputEnd != null\n            ? this._settedOutputEnd : this._dueEnd;\n    }\n\n    return this.unfinished();\n};\n\nvar iterator = (function () {\n\n    var end;\n    var current;\n    var modBy;\n    var modDataCount;\n    var winCount;\n\n    var it = {\n        reset: function (s, e, sStep, sCount) {\n            current = s;\n            end = e;\n\n            modBy = sStep;\n            modDataCount = sCount;\n            winCount = Math.ceil(modDataCount / modBy);\n\n            it.next = (modBy > 1 && modDataCount > 0) ? modNext : sequentialNext;\n        }\n    };\n\n    return it;\n\n    function sequentialNext() {\n        return current < end ? current++ : null;\n    }\n\n    function modNext() {\n        var dataIndex = (current % winCount) * modBy + Math.ceil(current / winCount);\n        var result = current >= end\n            ? null\n            : dataIndex < modDataCount\n            ? dataIndex\n            // If modDataCount is smaller than data.count() (consider `appendData` case),\n            // Use normal linear rendering mode.\n            : current;\n        current++;\n        return result;\n    }\n})();\n\ntaskProto.dirty = function () {\n    this._dirty = true;\n    this._onDirty && this._onDirty(this.context);\n};\n\nfunction doProgress(taskIns, progress, start, end, modBy, modDataCount) {\n    iterator.reset(start, end, modBy, modDataCount);\n    taskIns._callingProgress = progress;\n    taskIns._callingProgress({\n        start: start, end: end, count: end - start, next: iterator.next\n    }, taskIns.context);\n}\n\nfunction reset(taskIns, skip) {\n    taskIns._dueIndex = taskIns._outputDueEnd = taskIns._dueEnd = 0;\n    taskIns._settedOutputEnd = null;\n\n    var progress;\n    var forceFirstProgress;\n\n    if (!skip && taskIns._reset) {\n        progress = taskIns._reset(taskIns.context);\n        if (progress && progress.progress) {\n            forceFirstProgress = progress.forceFirstProgress;\n            progress = progress.progress;\n        }\n        // To simplify no progress checking, array must has item.\n        if (isArray(progress) && !progress.length) {\n            progress = null;\n        }\n    }\n\n    taskIns._progress = progress;\n    taskIns._modBy = taskIns._modDataCount = null;\n\n    var downstream = taskIns._downstream;\n    downstream && downstream.dirty();\n\n    return forceFirstProgress;\n}\n\n/**\n * @return {boolean}\n */\ntaskProto.unfinished = function () {\n    return this._progress && this._dueIndex < this._dueEnd;\n};\n\n/**\n * @param {Object} downTask The downstream task.\n * @return {Object} The downstream task.\n */\ntaskProto.pipe = function (downTask) {\n    if (__DEV__) {\n        assert(downTask && !downTask._disposed && downTask !== this);\n    }\n\n    // If already downstream, do not dirty downTask.\n    if (this._downstream !== downTask || this._dirty) {\n        this._downstream = downTask;\n        downTask._upstream = this;\n        downTask.dirty();\n    }\n};\n\ntaskProto.dispose = function () {\n    if (this._disposed) {\n        return;\n    }\n\n    this._upstream && (this._upstream._downstream = null);\n    this._downstream && (this._downstream._upstream = null);\n\n    this._dirty = false;\n    this._disposed = true;\n};\n\ntaskProto.getUpstream = function () {\n    return this._upstream;\n};\n\ntaskProto.getDownstream = function () {\n    return this._downstream;\n};\n\ntaskProto.setOutputEnd = function (end) {\n    // This only happend in dataTask, dataZoom, map, currently.\n    // where dataZoom do not set end each time, but only set\n    // when reset. So we should record the setted end, in case\n    // that the stub of dataZoom perform again and earse the\n    // setted end by upstream.\n    this._outputDueEnd = this._settedOutputEnd = end;\n};\n\n\n///////////////////////////////////////////////////////////\n// For stream debug (Should be commented out after used!)\n// Usage: printTask(this, 'begin');\n// Usage: printTask(this, null, {someExtraProp});\n// function printTask(task, prefix, extra) {\n//     window.ecTaskUID == null && (window.ecTaskUID = 0);\n//     task.uidDebug == null && (task.uidDebug = `task_${window.ecTaskUID++}`);\n//     task.agent && task.agent.uidDebug == null && (task.agent.uidDebug = `task_${window.ecTaskUID++}`);\n//     var props = [];\n//     if (task.__pipeline) {\n//         var val = `${task.__idxInPipeline}/${task.__pipeline.tail.__idxInPipeline} ${task.agent ? '(stub)' : ''}`;\n//         props.push({text: 'idx', value: val});\n//     } else {\n//         var stubCount = 0;\n//         task.agentStubMap.each(() => stubCount++);\n//         props.push({text: 'idx', value: `overall (stubs: ${stubCount})`});\n//     }\n//     props.push({text: 'uid', value: task.uidDebug});\n//     if (task.__pipeline) {\n//         props.push({text: 'pid', value: task.__pipeline.id});\n//         task.agent && props.push(\n//             {text: 'stubFor', value: task.agent.uidDebug}\n//         );\n//     }\n//     props.push(\n//         {text: 'dirty', value: task._dirty},\n//         {text: 'dueIndex', value: task._dueIndex},\n//         {text: 'dueEnd', value: task._dueEnd},\n//         {text: 'outputDueEnd', value: task._outputDueEnd}\n//     );\n//     if (extra) {\n//         Object.keys(extra).forEach(key => {\n//             props.push({text: key, value: extra[key]});\n//         });\n//     }\n//     var args = ['color: blue'];\n//     var msg = `%c[${prefix || 'T'}] %c` + props.map(item => (\n//         args.push('color: black', 'color: red'),\n//         `${item.text}: %c${item.value}`\n//     )).join('%c, ');\n//     console.log.apply(console, [msg].concat(args));\n//     // console.log(this);\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\nimport {__DEV__} from '../config';\nimport * as zrUtil from 'zrender/src/core/util';\nimport env from 'zrender/src/core/env';\nimport {\n    formatTime,\n    encodeHTML,\n    addCommas,\n    getTooltipMarker\n} from '../util/format';\nimport * as modelUtil from '../util/model';\nimport ComponentModel from './Component';\nimport colorPaletteMixin from './mixin/colorPalette';\nimport dataFormatMixin from '../model/mixin/dataFormat';\nimport {\n    getLayoutParams,\n    mergeLayoutParam\n} from '../util/layout';\nimport {createTask} from '../stream/task';\nimport {\n    prepareSource,\n    getSource\n} from '../data/helper/sourceHelper';\nimport {retrieveRawValue} from '../data/helper/dataProvider';\n\nvar inner = modelUtil.makeInner();\n\nvar SeriesModel = ComponentModel.extend({\n\n    type: 'series.__base__',\n\n    /**\n     * @readOnly\n     */\n    seriesIndex: 0,\n\n    // coodinateSystem will be injected in the echarts/CoordinateSystem\n    coordinateSystem: null,\n\n    /**\n     * @type {Object}\n     * @protected\n     */\n    defaultOption: null,\n\n    /**\n     * Data provided for legend\n     * @type {Function}\n     */\n    // PENDING\n    legendDataProvider: null,\n\n    /**\n     * Access path of color for visual\n     */\n    visualColorAccessPath: 'itemStyle.color',\n\n    /**\n     * Access path of borderColor for visual\n     */\n    visualBorderColorAccessPath: 'itemStyle.borderColor',\n\n    /**\n     * Support merge layout params.\n     * Only support 'box' now (left/right/top/bottom/width/height).\n     * @type {string|Object} Object can be {ignoreSize: true}\n     * @readOnly\n     */\n    layoutMode: null,\n\n    init: function (option, parentModel, ecModel, extraOpt) {\n\n        /**\n         * @type {number}\n         * @readOnly\n         */\n        this.seriesIndex = this.componentIndex;\n\n        this.dataTask = createTask({\n            count: dataTaskCount,\n            reset: dataTaskReset\n        });\n        this.dataTask.context = {model: this};\n\n        this.mergeDefaultAndTheme(option, ecModel);\n\n        prepareSource(this);\n\n\n        var data = this.getInitialData(option, ecModel);\n        wrapData(data, this);\n        this.dataTask.context.data = data;\n\n        if (__DEV__) {\n            zrUtil.assert(data, 'getInitialData returned invalid data.');\n        }\n\n        /**\n         * @type {module:echarts/data/List|module:echarts/data/Tree|module:echarts/data/Graph}\n         * @private\n         */\n        inner(this).dataBeforeProcessed = data;\n\n        // If we reverse the order (make data firstly, and then make\n        // dataBeforeProcessed by cloneShallow), cloneShallow will\n        // cause data.graph.data !== data when using\n        // module:echarts/data/Graph or module:echarts/data/Tree.\n        // See module:echarts/data/helper/linkList\n\n        // Theoretically, it is unreasonable to call `seriesModel.getData()` in the model\n        // init or merge stage, because the data can be restored. So we do not `restoreData`\n        // and `setData` here, which forbids calling `seriesModel.getData()` in this stage.\n        // Call `seriesModel.getRawData()` instead.\n        // this.restoreData();\n\n        autoSeriesName(this);\n    },\n\n    /**\n     * Util for merge default and theme to option\n     * @param  {Object} option\n     * @param  {module:echarts/model/Global} ecModel\n     */\n    mergeDefaultAndTheme: function (option, ecModel) {\n        var layoutMode = this.layoutMode;\n        var inputPositionParams = layoutMode\n            ? getLayoutParams(option) : {};\n\n        // Backward compat: using subType on theme.\n        // But if name duplicate between series subType\n        // (for example: parallel) add component mainType,\n        // add suffix 'Series'.\n        var themeSubType = this.subType;\n        if (ComponentModel.hasClass(themeSubType)) {\n            themeSubType += 'Series';\n        }\n        zrUtil.merge(\n            option,\n            ecModel.getTheme().get(this.subType)\n        );\n        zrUtil.merge(option, this.getDefaultOption());\n\n        // Default label emphasis `show`\n        modelUtil.defaultEmphasis(option, 'label', ['show']);\n\n        this.fillDataTextStyle(option.data);\n\n        if (layoutMode) {\n            mergeLayoutParam(option, inputPositionParams, layoutMode);\n        }\n    },\n\n    mergeOption: function (newSeriesOption, ecModel) {\n        // this.settingTask.dirty();\n\n        newSeriesOption = zrUtil.merge(this.option, newSeriesOption, true);\n        this.fillDataTextStyle(newSeriesOption.data);\n\n        var layoutMode = this.layoutMode;\n        if (layoutMode) {\n            mergeLayoutParam(this.option, newSeriesOption, layoutMode);\n        }\n\n        prepareSource(this);\n\n        var data = this.getInitialData(newSeriesOption, ecModel);\n        wrapData(data, this);\n        this.dataTask.dirty();\n        this.dataTask.context.data = data;\n\n        inner(this).dataBeforeProcessed = data;\n\n        autoSeriesName(this);\n    },\n\n    fillDataTextStyle: function (data) {\n        // Default data label emphasis `show`\n        // FIXME Tree structure data ?\n        // FIXME Performance ?\n        if (data && !zrUtil.isTypedArray(data)) {\n            var props = ['show'];\n            for (var i = 0; i < data.length; i++) {\n                if (data[i] && data[i].label) {\n                    modelUtil.defaultEmphasis(data[i], 'label', props);\n                }\n            }\n        }\n    },\n\n    /**\n     * Init a data structure from data related option in series\n     * Must be overwritten\n     */\n    getInitialData: function () {},\n\n    /**\n     * Append data to list\n     * @param {Object} params\n     * @param {Array|TypedArray} params.data\n     */\n    appendData: function (params) {\n        // FIXME ???\n        // (1) If data from dataset, forbidden append.\n        // (2) support append data of dataset.\n        var data = this.getRawData();\n        data.appendData(params.data);\n    },\n\n    /**\n     * Consider some method like `filter`, `map` need make new data,\n     * We should make sure that `seriesModel.getData()` get correct\n     * data in the stream procedure. So we fetch data from upstream\n     * each time `task.perform` called.\n     * @param {string} [dataType]\n     * @return {module:echarts/data/List}\n     */\n    getData: function (dataType) {\n        var task = getCurrentTask(this);\n        if (task) {\n            var data = task.context.data;\n            return dataType == null ? data : data.getLinkedData(dataType);\n        }\n        else {\n            // When series is not alive (that may happen when click toolbox\n            // restore or setOption with not merge mode), series data may\n            // be still need to judge animation or something when graphic\n            // elements want to know whether fade out.\n            return inner(this).data;\n        }\n    },\n\n    /**\n     * @param {module:echarts/data/List} data\n     */\n    setData: function (data) {\n        var task = getCurrentTask(this);\n        if (task) {\n            var context = task.context;\n            // Consider case: filter, data sample.\n            if (context.data !== data && task.modifyOutputEnd) {\n                task.setOutputEnd(data.count());\n            }\n            context.outputData = data;\n            // Caution: setData should update context.data,\n            // Because getData may be called multiply in a\n            // single stage and expect to get the data just\n            // set. (For example, AxisProxy, x y both call\n            // getData and setDate sequentially).\n            // So the context.data should be fetched from\n            // upstream each time when a stage starts to be\n            // performed.\n            if (task !== this.dataTask) {\n                context.data = data;\n            }\n        }\n        inner(this).data = data;\n    },\n\n    /**\n     * @see {module:echarts/data/helper/sourceHelper#getSource}\n     * @return {module:echarts/data/Source} source\n     */\n    getSource: function () {\n        return getSource(this);\n    },\n\n    /**\n     * Get data before processed\n     * @return {module:echarts/data/List}\n     */\n    getRawData: function () {\n        return inner(this).dataBeforeProcessed;\n    },\n\n    /**\n     * Get base axis if has coordinate system and has axis.\n     * By default use coordSys.getBaseAxis();\n     * Can be overrided for some chart.\n     * @return {type} description\n     */\n    getBaseAxis: function () {\n        var coordSys = this.coordinateSystem;\n        return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis();\n    },\n\n    // FIXME\n    /**\n     * Default tooltip formatter\n     *\n     * @param {number} dataIndex\n     * @param {boolean} [multipleSeries=false]\n     * @param {number} [dataType]\n     * @param {string} [renderMode='html'] valid values: 'html' and 'richText'.\n     *                                     'html' is used for rendering tooltip in extra DOM form, and the result\n     *                                     string is used as DOM HTML content.\n     *                                     'richText' is used for rendering tooltip in rich text form, for those where\n     *                                     DOM operation is not supported.\n     * @return {Object} formatted tooltip with `html` and `markers`\n     */\n    formatTooltip: function (dataIndex, multipleSeries, dataType, renderMode) {\n\n        var series = this;\n        renderMode = renderMode || 'html';\n        var newLine = renderMode === 'html' ? '<br/>' : '\\n';\n        var isRichText = renderMode === 'richText';\n        var markers = {};\n        var markerId = 0;\n\n        function formatArrayValue(value) {\n            // ??? TODO refactor these logic.\n            // check: category-no-encode-has-axis-data in dataset.html\n            var vertially = zrUtil.reduce(value, function (vertially, val, idx) {\n                var dimItem = data.getDimensionInfo(idx);\n                return vertially |= dimItem && dimItem.tooltip !== false && dimItem.displayName != null;\n            }, 0);\n\n            var result = [];\n\n            tooltipDims.length\n                ? zrUtil.each(tooltipDims, function (dim) {\n                    setEachItem(retrieveRawValue(data, dataIndex, dim), dim);\n                })\n                // By default, all dims is used on tooltip.\n                : zrUtil.each(value, setEachItem);\n\n            function setEachItem(val, dim) {\n                var dimInfo = data.getDimensionInfo(dim);\n                // If `dimInfo.tooltip` is not set, show tooltip.\n                if (!dimInfo || dimInfo.otherDims.tooltip === false) {\n                    return;\n                }\n                var dimType = dimInfo.type;\n                var markName = 'sub' + series.seriesIndex + 'at' + markerId;\n                var dimHead = getTooltipMarker({\n                    color: color,\n                    type: 'subItem',\n                    renderMode: renderMode,\n                    markerId: markName\n                });\n\n                var dimHeadStr = typeof dimHead === 'string' ? dimHead : dimHead.content;\n                var valStr = (vertially\n                        ? dimHeadStr + encodeHTML(dimInfo.displayName || '-') + ': '\n                        : ''\n                    )\n                    // FIXME should not format time for raw data?\n                    + encodeHTML(dimType === 'ordinal'\n                        ? val + ''\n                        : dimType === 'time'\n                        ? (multipleSeries ? '' : formatTime('yyyy/MM/dd hh:mm:ss', val))\n                        : addCommas(val)\n                    );\n                valStr && result.push(valStr);\n\n                if (isRichText) {\n                    markers[markName] = color;\n                    ++markerId;\n                }\n            }\n\n            var newLine = vertially ? (isRichText ? '\\n' : '<br/>') : '';\n            var content = newLine + result.join(newLine || ', ');\n            return {\n                renderMode: renderMode,\n                content: content,\n                style: markers\n            };\n        }\n\n        function formatSingleValue(val) {\n            // return encodeHTML(addCommas(val));\n            return {\n                renderMode: renderMode,\n                content: encodeHTML(addCommas(val)),\n                style: markers\n            };\n        }\n\n        var data = this.getData();\n        var tooltipDims = data.mapDimension('defaultedTooltip', true);\n        var tooltipDimLen = tooltipDims.length;\n        var value = this.getRawValue(dataIndex);\n        var isValueArr = zrUtil.isArray(value);\n\n        var color = data.getItemVisual(dataIndex, 'color');\n        if (zrUtil.isObject(color) && color.colorStops) {\n            color = (color.colorStops[0] || {}).color;\n        }\n        color = color || 'transparent';\n\n        // Complicated rule for pretty tooltip.\n        var formattedValue = (tooltipDimLen > 1 || (isValueArr && !tooltipDimLen))\n            ? formatArrayValue(value)\n            : tooltipDimLen\n            ? formatSingleValue(retrieveRawValue(data, dataIndex, tooltipDims[0]))\n            : formatSingleValue(isValueArr ? value[0] : value);\n        var content = formattedValue.content;\n\n        var markName = series.seriesIndex + 'at' + markerId;\n        var colorEl = getTooltipMarker({\n            color: color,\n            type: 'item',\n            renderMode: renderMode,\n            markerId: markName\n        });\n        markers[markName] = color;\n        ++markerId;\n\n        var name = data.getName(dataIndex);\n\n        var seriesName = this.name;\n        if (!modelUtil.isNameSpecified(this)) {\n            seriesName = '';\n        }\n        seriesName = seriesName\n            ? encodeHTML(seriesName) + (!multipleSeries ? newLine : ': ')\n            : '';\n\n        var colorStr = typeof colorEl === 'string' ? colorEl : colorEl.content;\n        var html = !multipleSeries\n            ? seriesName + colorStr\n                + (name\n                    ? encodeHTML(name) + ': ' + content\n                    : content\n                )\n            : colorStr + seriesName + content;\n\n        return {\n            html: html,\n            markers: markers\n        };\n    },\n\n    /**\n     * @return {boolean}\n     */\n    isAnimationEnabled: function () {\n        if (env.node) {\n            return false;\n        }\n\n        var animationEnabled = this.getShallow('animation');\n        if (animationEnabled) {\n            if (this.getData().count() > this.getShallow('animationThreshold')) {\n                animationEnabled = false;\n            }\n        }\n        return animationEnabled;\n    },\n\n    restoreData: function () {\n        this.dataTask.dirty();\n    },\n\n    getColorFromPalette: function (name, scope, requestColorNum) {\n        var ecModel = this.ecModel;\n        // PENDING\n        var color = colorPaletteMixin.getColorFromPalette.call(this, name, scope, requestColorNum);\n        if (!color) {\n            color = ecModel.getColorFromPalette(name, scope, requestColorNum);\n        }\n        return color;\n    },\n\n    /**\n     * Use `data.mapDimension(coordDim, true)` instead.\n     * @deprecated\n     */\n    coordDimToDataDim: function (coordDim) {\n        return this.getRawData().mapDimension(coordDim, true);\n    },\n\n    /**\n     * Get progressive rendering count each step\n     * @return {number}\n     */\n    getProgressive: function () {\n        return this.get('progressive');\n    },\n\n    /**\n     * Get progressive rendering count each step\n     * @return {number}\n     */\n    getProgressiveThreshold: function () {\n        return this.get('progressiveThreshold');\n    },\n\n    /**\n     * Get data indices for show tooltip content. See tooltip.\n     * @abstract\n     * @param {Array.<string>|string} dim\n     * @param {Array.<number>} value\n     * @param {module:echarts/coord/single/SingleAxis} baseAxis\n     * @return {Object} {dataIndices, nestestValue}.\n     */\n    getAxisTooltipData: null,\n\n    /**\n     * See tooltip.\n     * @abstract\n     * @param {number} dataIndex\n     * @return {Array.<number>} Point of tooltip. null/undefined can be returned.\n     */\n    getTooltipPosition: null,\n\n    /**\n     * @see {module:echarts/stream/Scheduler}\n     */\n    pipeTask: null,\n\n    /**\n     * Convinient for override in extended class.\n     * @protected\n     * @type {Function}\n     */\n    preventIncremental: null,\n\n    /**\n     * @public\n     * @readOnly\n     * @type {Object}\n     */\n    pipelineContext: null\n\n});\n\n\nzrUtil.mixin(SeriesModel, dataFormatMixin);\nzrUtil.mixin(SeriesModel, colorPaletteMixin);\n\n/**\n * MUST be called after `prepareSource` called\n * Here we need to make auto series, especially for auto legend. But we\n * do not modify series.name in option to avoid side effects.\n */\nfunction autoSeriesName(seriesModel) {\n    // User specified name has higher priority, otherwise it may cause\n    // series can not be queried unexpectedly.\n    var name = seriesModel.name;\n    if (!modelUtil.isNameSpecified(seriesModel)) {\n        seriesModel.name = getSeriesAutoName(seriesModel) || name;\n    }\n}\n\nfunction getSeriesAutoName(seriesModel) {\n    var data = seriesModel.getRawData();\n    var dataDims = data.mapDimension('seriesName', true);\n    var nameArr = [];\n    zrUtil.each(dataDims, function (dataDim) {\n        var dimInfo = data.getDimensionInfo(dataDim);\n        dimInfo.displayName && nameArr.push(dimInfo.displayName);\n    });\n    return nameArr.join(' ');\n}\n\nfunction dataTaskCount(context) {\n    return context.model.getRawData().count();\n}\n\nfunction dataTaskReset(context) {\n    var seriesModel = context.model;\n    seriesModel.setData(seriesModel.getRawData().cloneShallow());\n    return dataTaskProgress;\n}\n\nfunction dataTaskProgress(param, context) {\n    // Avoid repead cloneShallow when data just created in reset.\n    if (param.end > context.outputData.count()) {\n        context.model.getRawData().cloneShallow(context.outputData);\n    }\n}\n\n// TODO refactor\nfunction wrapData(data, seriesModel) {\n    zrUtil.each(data.CHANGABLE_METHODS, function (methodName) {\n        data.wrapMethod(methodName, zrUtil.curry(onDataSelfChange, seriesModel));\n    });\n}\n\nfunction onDataSelfChange(seriesModel) {\n    var task = getCurrentTask(seriesModel);\n    if (task) {\n        // Consider case: filter, selectRange\n        task.setOutputEnd(this.count());\n    }\n}\n\nfunction getCurrentTask(seriesModel) {\n    var scheduler = (seriesModel.ecModel || {}).scheduler;\n    var pipeline = scheduler && scheduler.getPipeline(seriesModel.uid);\n\n    if (pipeline) {\n        // When pipline finished, the currrentTask keep the last\n        // task (renderTask).\n        var task = pipeline.currentTask;\n        if (task) {\n            var agentStubMap = task.agentStubMap;\n            if (agentStubMap) {\n                task = agentStubMap.get(seriesModel.uid);\n            }\n        }\n        return task;\n    }\n}\n\nexport default SeriesModel;\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\nimport Group from 'zrender/src/container/Group';\nimport * as componentUtil from '../util/component';\nimport * as clazzUtil from '../util/clazz';\n\nvar Component = function () {\n    /**\n     * @type {module:zrender/container/Group}\n     * @readOnly\n     */\n    this.group = new Group();\n\n    /**\n     * @type {string}\n     * @readOnly\n     */\n    this.uid = componentUtil.getUID('viewComponent');\n};\n\nComponent.prototype = {\n\n    constructor: Component,\n\n    init: function (ecModel, api) {},\n\n    render: function (componentModel, ecModel, api, payload) {},\n\n    dispose: function () {},\n\n    /**\n     * @param {string} eventType\n     * @param {Object} query\n     * @param {module:zrender/Element} targetEl\n     * @param {Object} packedEvent\n     * @return {boolen} Pass only when return `true`.\n     */\n    filterForExposedEvent: null\n\n};\n\nvar componentProto = Component.prototype;\ncomponentProto.updateView =\n    componentProto.updateLayout =\n    componentProto.updateVisual =\n    function (seriesModel, ecModel, api, payload) {\n        // Do nothing;\n    };\n// Enable Component.extend.\nclazzUtil.enableClassExtend(Component);\n\n// Enable capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\nclazzUtil.enableClassManagement(Component, {registerWhenExtend: true});\n\nexport default Component;","/*\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\nimport {makeInner} from '../../util/model';\n\n/**\n * @return {string} If large mode changed, return string 'reset';\n */\nexport default function () {\n    var inner = makeInner();\n\n    return function (seriesModel) {\n        var fields = inner(seriesModel);\n        var pipelineContext = seriesModel.pipelineContext;\n\n        var originalLarge = fields.large;\n        var originalProgressive = fields.progressiveRender;\n\n        var large = fields.large = pipelineContext.large;\n        var progressive = fields.progressiveRender = pipelineContext.progressiveRender;\n\n        return !!((originalLarge ^ large) || (originalProgressive ^ progressive)) && 'reset';\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {each} from 'zrender/src/core/util';\nimport Group from 'zrender/src/container/Group';\nimport * as componentUtil from '../util/component';\nimport * as clazzUtil from '../util/clazz';\nimport * as modelUtil from '../util/model';\nimport * as graphicUtil from '../util/graphic';\nimport {createTask} from '../stream/task';\nimport createRenderPlanner from '../chart/helper/createRenderPlanner';\n\nvar inner = modelUtil.makeInner();\nvar renderPlanner = createRenderPlanner();\n\nfunction Chart() {\n\n    /**\n     * @type {module:zrender/container/Group}\n     * @readOnly\n     */\n    this.group = new Group();\n\n    /**\n     * @type {string}\n     * @readOnly\n     */\n    this.uid = componentUtil.getUID('viewChart');\n\n    this.renderTask = createTask({\n        plan: renderTaskPlan,\n        reset: renderTaskReset\n    });\n    this.renderTask.context = {view: this};\n}\n\nChart.prototype = {\n\n    type: 'chart',\n\n    /**\n     * Init the chart.\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    init: function (ecModel, api) {},\n\n    /**\n     * Render the chart.\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     */\n    render: function (seriesModel, ecModel, api, payload) {},\n\n    /**\n     * Highlight series or specified data item.\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     */\n    highlight: function (seriesModel, ecModel, api, payload) {\n        toggleHighlight(seriesModel.getData(), payload, 'emphasis');\n    },\n\n    /**\n     * Downplay series or specified data item.\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     */\n    downplay: function (seriesModel, ecModel, api, payload) {\n        toggleHighlight(seriesModel.getData(), payload, 'normal');\n    },\n\n    /**\n     * Remove self.\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    remove: function (ecModel, api) {\n        this.group.removeAll();\n    },\n\n    /**\n     * Dispose self.\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    dispose: function () {},\n\n    /**\n     * Rendering preparation in progressive mode.\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     */\n    incrementalPrepareRender: null,\n\n    /**\n     * Render in progressive mode.\n     * @param  {Object} params See taskParams in `stream/task.js`\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     */\n    incrementalRender: null,\n\n    /**\n     * Update transform directly.\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     * @return {Object} {update: true}\n     */\n    updateTransform: null,\n\n    /**\n     * The view contains the given point.\n     * @interface\n     * @param {Array.<number>} point\n     * @return {boolean}\n     */\n    // containPoint: function () {}\n\n    /**\n     * @param {string} eventType\n     * @param {Object} query\n     * @param {module:zrender/Element} targetEl\n     * @param {Object} packedEvent\n     * @return {boolen} Pass only when return `true`.\n     */\n    filterForExposedEvent: null\n\n};\n\nvar chartProto = Chart.prototype;\nchartProto.updateView =\nchartProto.updateLayout =\nchartProto.updateVisual =\n    function (seriesModel, ecModel, api, payload) {\n        this.render(seriesModel, ecModel, api, payload);\n    };\n\n/**\n * Set state of single element\n * @param {module:zrender/Element} el\n * @param {string} state 'normal'|'emphasis'\n * @param {number} highlightDigit\n */\nfunction elSetState(el, state, highlightDigit) {\n    if (el) {\n        el.trigger(state, highlightDigit);\n        if (el.isGroup\n            // Simple optimize.\n            && !graphicUtil.isHighDownDispatcher(el)\n        ) {\n            for (var i = 0, len = el.childCount(); i < len; i++) {\n                elSetState(el.childAt(i), state, highlightDigit);\n            }\n        }\n    }\n}\n\n/**\n * @param {module:echarts/data/List} data\n * @param {Object} payload\n * @param {string} state 'normal'|'emphasis'\n */\nfunction toggleHighlight(data, payload, state) {\n    var dataIndex = modelUtil.queryDataIndex(data, payload);\n\n    var highlightDigit = (payload && payload.highlightKey != null)\n        ? graphicUtil.getHighlightDigit(payload.highlightKey)\n        : null;\n\n    if (dataIndex != null) {\n        each(modelUtil.normalizeToArray(dataIndex), function (dataIdx) {\n            elSetState(data.getItemGraphicEl(dataIdx), state, highlightDigit);\n        });\n    }\n    else {\n        data.eachItemGraphicEl(function (el) {\n            elSetState(el, state, highlightDigit);\n        });\n    }\n}\n\n// Enable Chart.extend.\nclazzUtil.enableClassExtend(Chart, ['dispose']);\n\n// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\nclazzUtil.enableClassManagement(Chart, {registerWhenExtend: true});\n\nChart.markUpdateMethod = function (payload, methodName) {\n    inner(payload).updateMethod = methodName;\n};\n\nfunction renderTaskPlan(context) {\n    return renderPlanner(context.model);\n}\n\nfunction renderTaskReset(context) {\n    var seriesModel = context.model;\n    var ecModel = context.ecModel;\n    var api = context.api;\n    var payload = context.payload;\n    // ???! remove updateView updateVisual\n    var progressiveRender = seriesModel.pipelineContext.progressiveRender;\n    var view = context.view;\n\n    var updateMethod = payload && inner(payload).updateMethod;\n    var methodName = progressiveRender\n        ? 'incrementalPrepareRender'\n        : (updateMethod && view[updateMethod])\n        ? updateMethod\n        // `appendData` is also supported when data amount\n        // is less than progressive threshold.\n        : 'render';\n\n    if (methodName !== 'render') {\n        view[methodName](seriesModel, ecModel, api, payload);\n    }\n\n    return progressMethodMap[methodName];\n}\n\nvar progressMethodMap = {\n    incrementalPrepareRender: {\n        progress: function (params, context) {\n            context.view.incrementalRender(\n                params, context.model, context.ecModel, context.api, context.payload\n            );\n        }\n    },\n    render: {\n        // Put view.render in `progress` to support appendData. But in this case\n        // view.render should not be called in reset, otherwise it will be called\n        // twise. Use `forceFirstProgress` to make sure that view.render is called\n        // in any cases.\n        forceFirstProgress: true,\n        progress: function (params, context) {\n            context.view.render(\n                context.model, context.ecModel, context.api, context.payload\n            );\n        }\n    }\n};\n\nexport default Chart;","/*\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\nvar ORIGIN_METHOD = '\\0__throttleOriginMethod';\nvar RATE = '\\0__throttleRate';\nvar THROTTLE_TYPE = '\\0__throttleType';\n\n/**\n * @public\n * @param {(Function)} fn\n * @param {number} [delay=0] Unit: ms.\n * @param {boolean} [debounce=false]\n *        true: If call interval less than `delay`, only the last call works.\n *        false: If call interval less than `delay, call works on fixed rate.\n * @return {(Function)} throttled fn.\n */\nexport function throttle(fn, delay, debounce) {\n\n    var currCall;\n    var lastCall = 0;\n    var lastExec = 0;\n    var timer = null;\n    var diff;\n    var scope;\n    var args;\n    var debounceNextCall;\n\n    delay = delay || 0;\n\n    function exec() {\n        lastExec = (new Date()).getTime();\n        timer = null;\n        fn.apply(scope, args || []);\n    }\n\n    var cb = function () {\n        currCall = (new Date()).getTime();\n        scope = this;\n        args = arguments;\n        var thisDelay = debounceNextCall || delay;\n        var thisDebounce = debounceNextCall || debounce;\n        debounceNextCall = null;\n        diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay;\n\n        clearTimeout(timer);\n\n        // Here we should make sure that: the `exec` SHOULD NOT be called later\n        // than a new call of `cb`, that is, preserving the command order. Consider\n        // calculating \"scale rate\" when roaming as an example. When a call of `cb`\n        // happens, either the `exec` is called dierectly, or the call is delayed.\n        // But the delayed call should never be later than next call of `cb`. Under\n        // this assurance, we can simply update view state each time `dispatchAction`\n        // triggered by user roaming, but not need to add extra code to avoid the\n        // state being \"rolled-back\".\n        if (thisDebounce) {\n            timer = setTimeout(exec, thisDelay);\n        }\n        else {\n            if (diff >= 0) {\n                exec();\n            }\n            else {\n                timer = setTimeout(exec, -diff);\n            }\n        }\n\n        lastCall = currCall;\n    };\n\n    /**\n     * Clear throttle.\n     * @public\n     */\n    cb.clear = function () {\n        if (timer) {\n            clearTimeout(timer);\n            timer = null;\n        }\n    };\n\n    /**\n     * Enable debounce once.\n     */\n    cb.debounceNextCall = function (debounceDelay) {\n        debounceNextCall = debounceDelay;\n    };\n\n    return cb;\n}\n\n/**\n * Create throttle method or update throttle rate.\n *\n * @example\n * ComponentView.prototype.render = function () {\n *     ...\n *     throttle.createOrUpdate(\n *         this,\n *         '_dispatchAction',\n *         this.model.get('throttle'),\n *         'fixRate'\n *     );\n * };\n * ComponentView.prototype.remove = function () {\n *     throttle.clear(this, '_dispatchAction');\n * };\n * ComponentView.prototype.dispose = function () {\n *     throttle.clear(this, '_dispatchAction');\n * };\n *\n * @public\n * @param {Object} obj\n * @param {string} fnAttr\n * @param {number} [rate]\n * @param {string} [throttleType='fixRate'] 'fixRate' or 'debounce'\n * @return {Function} throttled function.\n */\nexport function createOrUpdate(obj, fnAttr, rate, throttleType) {\n    var fn = obj[fnAttr];\n\n    if (!fn) {\n        return;\n    }\n\n    var originFn = fn[ORIGIN_METHOD] || fn;\n    var lastThrottleType = fn[THROTTLE_TYPE];\n    var lastRate = fn[RATE];\n\n    if (lastRate !== rate || lastThrottleType !== throttleType) {\n        if (rate == null || !throttleType) {\n            return (obj[fnAttr] = originFn);\n        }\n\n        fn = obj[fnAttr] = throttle(\n            originFn, rate, throttleType === 'debounce'\n        );\n        fn[ORIGIN_METHOD] = originFn;\n        fn[THROTTLE_TYPE] = throttleType;\n        fn[RATE] = rate;\n    }\n\n    return fn;\n}\n\n/**\n * Clear throttle. Example see throttle.createOrUpdate.\n *\n * @public\n * @param {Object} obj\n * @param {string} fnAttr\n */\nexport function clear(obj, fnAttr) {\n    var fn = obj[fnAttr];\n    if (fn && fn[ORIGIN_METHOD]) {\n        obj[fnAttr] = fn[ORIGIN_METHOD];\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport Gradient from 'zrender/src/graphic/Gradient';\n\nexport default {\n    createOnAllSeries: true,\n    performRawSeries: true,\n    reset: function (seriesModel, ecModel) {\n        var data = seriesModel.getData();\n        var colorAccessPath = (seriesModel.visualColorAccessPath || 'itemStyle.color').split('.');\n        var color = seriesModel.get(colorAccessPath) // Set in itemStyle\n            || seriesModel.getColorFromPalette(\n                // TODO series count changed.\n                seriesModel.name, null, ecModel.getSeriesCount()\n            );  // Default color\n\n        // FIXME Set color function or use the platte color\n        data.setVisual('color', color);\n        \n        var borderColorAccessPath = (seriesModel.visualBorderColorAccessPath || 'itemStyle.borderColor').split('.');\n        var borderColor = seriesModel.get(borderColorAccessPath);\n        data.setVisual('borderColor', borderColor);\n\n        // Only visible series has each data be visual encoded\n        if (!ecModel.isSeriesFiltered(seriesModel)) {\n            if (typeof color === 'function' && !(color instanceof Gradient)) {\n                data.each(function (idx) {\n                    data.setItemVisual(\n                        idx, 'color', color(seriesModel.getDataParams(idx))\n                    );\n                });\n            }\n\n            // itemStyle in each data item\n            var dataEach = function (data, idx) {\n                var itemModel = data.getItemModel(idx);\n                var color = itemModel.get(colorAccessPath, true);\n                var borderColor = itemModel.get(borderColorAccessPath, true);\n                if (color != null) {\n                    data.setItemVisual(idx, 'color', color);\n                }\n                if (borderColor != null) {\n                    data.setItemVisual(idx, 'borderColor', borderColor);\n                }\n            };\n\n            return { dataEach: data.hasItemOption ? dataEach : null };\n        }\n    }\n};\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Language: (Simplified) Chinese.\n */\n\nexport default {\n    legend: {\n        selector: {\n            all: '全选',\n            inverse: '反选'\n        }\n    },\n    toolbox: {\n        brush: {\n            title: {\n                rect: '矩形选择',\n                polygon: '圈选',\n                lineX: '横向选择',\n                lineY: '纵向选择',\n                keep: '保持选择',\n                clear: '清除选择'\n            }\n        },\n        dataView: {\n            title: '数据视图',\n            lang: ['数据视图', '关闭', '刷新']\n        },\n        dataZoom: {\n            title: {\n                zoom: '区域缩放',\n                back: '区域缩放还原'\n            }\n        },\n        magicType: {\n            title: {\n                line: '切换为折线图',\n                bar: '切换为柱状图',\n                stack: '切换为堆叠',\n                tiled: '切换为平铺'\n            }\n        },\n        restore: {\n            title: '还原'\n        },\n        saveAsImage: {\n            title: '保存为图片',\n            lang: ['右键另存为图片']\n        }\n    },\n    series: {\n        typeNames: {\n            pie: '饼图',\n            bar: '柱状图',\n            line: '折线图',\n            scatter: '散点图',\n            effectScatter: '涟漪散点图',\n            radar: '雷达图',\n            tree: '树图',\n            treemap: '矩形树图',\n            boxplot: '箱型图',\n            candlestick: 'K线图',\n            k: 'K线图',\n            heatmap: '热力图',\n            map: '地图',\n            parallel: '平行坐标图',\n            lines: '线图',\n            graph: '关系图',\n            sankey: '桑基图',\n            funnel: '漏斗图',\n            gauge: '仪表盘图',\n            pictorialBar: '象形柱图',\n            themeRiver: '主题河流图',\n            sunburst: '旭日图'\n        }\n    },\n    aria: {\n        general: {\n            withTitle: '这是一个关于“{title}”的图表。',\n            withoutTitle: '这是一个图表，'\n        },\n        series: {\n            single: {\n                prefix: '',\n                withName: '图表类型是{seriesType}，表示{seriesName}。',\n                withoutName: '图表类型是{seriesType}。'\n            },\n            multiple: {\n                prefix: '它由{seriesCount}个图表系列组成。',\n                withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType}，',\n                withoutName: '第{seriesId}个系列是一个{seriesType}，',\n                separator: {\n                    middle: '；',\n                    end: '。'\n                }\n            }\n        },\n        data: {\n            allData: '其数据是——',\n            partialData: '其中，前{displayCnt}项是——',\n            withName: '{name}的数据是{value}',\n            withoutName: '{value}',\n            separator: {\n                middle: '，',\n                end: ''\n            }\n        }\n    }\n};\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport lang from '../lang';\nimport { retrieveRawValue } from '../data/helper/dataProvider';\n\nexport default function (dom, ecModel) {\n    var ariaModel = ecModel.getModel('aria');\n    if (!ariaModel.get('show')) {\n        return;\n    }\n    else if (ariaModel.get('description')) {\n        dom.setAttribute('aria-label', ariaModel.get('description'));\n        return;\n    }\n\n    var seriesCnt = 0;\n    ecModel.eachSeries(function (seriesModel, idx) {\n        ++seriesCnt;\n    }, this);\n\n    var maxDataCnt = ariaModel.get('data.maxCount') || 10;\n    var maxSeriesCnt = ariaModel.get('series.maxCount') || 10;\n    var displaySeriesCnt = Math.min(seriesCnt, maxSeriesCnt);\n\n    var ariaLabel;\n    if (seriesCnt < 1) {\n        // No series, no aria label\n        return;\n    }\n    else {\n        var title = getTitle();\n        if (title) {\n            ariaLabel = replace(getConfig('general.withTitle'), {\n                title: title\n            });\n        }\n        else {\n            ariaLabel = getConfig('general.withoutTitle');\n        }\n\n        var seriesLabels = [];\n        var prefix = seriesCnt > 1\n            ? 'series.multiple.prefix'\n            : 'series.single.prefix';\n        ariaLabel += replace(getConfig(prefix), { seriesCount: seriesCnt });\n\n        ecModel.eachSeries(function (seriesModel, idx) {\n            if (idx < displaySeriesCnt) {\n                var seriesLabel;\n\n                var seriesName = seriesModel.get('name');\n                var seriesTpl = 'series.'\n                    + (seriesCnt > 1 ? 'multiple' : 'single') + '.';\n                seriesLabel = getConfig(seriesName\n                    ? seriesTpl + 'withName'\n                    : seriesTpl + 'withoutName');\n\n                seriesLabel = replace(seriesLabel, {\n                    seriesId: seriesModel.seriesIndex,\n                    seriesName: seriesModel.get('name'),\n                    seriesType: getSeriesTypeName(seriesModel.subType)\n                });\n\n                var data = seriesModel.getData();\n                window.data = data;\n                if (data.count() > maxDataCnt) {\n                    // Show part of data\n                    seriesLabel += replace(getConfig('data.partialData'), {\n                        displayCnt: maxDataCnt\n                    });\n                }\n                else {\n                    seriesLabel += getConfig('data.allData');\n                }\n\n                var dataLabels = [];\n                for (var i = 0; i < data.count(); i++) {\n                    if (i < maxDataCnt) {\n                        var name = data.getName(i);\n                        var value = retrieveRawValue(data, i);\n                        dataLabels.push(\n                            replace(\n                                name\n                                    ? getConfig('data.withName')\n                                    : getConfig('data.withoutName'),\n                                {\n                                    name: name,\n                                    value: value\n                                }\n                            )\n                        );\n                    }\n                }\n                seriesLabel += dataLabels\n                    .join(getConfig('data.separator.middle'))\n                    + getConfig('data.separator.end');\n\n                seriesLabels.push(seriesLabel);\n            }\n        });\n\n        ariaLabel += seriesLabels\n            .join(getConfig('series.multiple.separator.middle'))\n            + getConfig('series.multiple.separator.end');\n\n        dom.setAttribute('aria-label', ariaLabel);\n    }\n\n    function replace(str, keyValues) {\n        if (typeof str !== 'string') {\n            return str;\n        }\n\n        var result = str;\n        zrUtil.each(keyValues, function (value, key) {\n            result = result.replace(\n                new RegExp('\\\\{\\\\s*' + key + '\\\\s*\\\\}', 'g'),\n                value\n            );\n        });\n        return result;\n    }\n\n    function getConfig(path) {\n        var userConfig = ariaModel.get(path);\n        if (userConfig == null) {\n            var pathArr = path.split('.');\n            var result = lang.aria;\n            for (var i = 0; i < pathArr.length; ++i) {\n                result = result[pathArr[i]];\n            }\n            return result;\n        }\n        else {\n            return userConfig;\n        }\n    }\n\n    function getTitle() {\n        var title = ecModel.getModel('title').option;\n        if (title && title.length) {\n            title = title[0];\n        }\n        return title && title.text;\n    }\n\n    function getSeriesTypeName(type) {\n        return lang.series.typeNames[type] || '自定义图';\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../util/graphic';\n\nvar PI = Math.PI;\n\n/**\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} [opts]\n * @param {string} [opts.text]\n * @param {string} [opts.color]\n * @param {string} [opts.textColor]\n * @return {module:zrender/Element}\n */\nexport default function (api, opts) {\n    opts = opts || {};\n    zrUtil.defaults(opts, {\n        text: 'loading',\n        color: '#c23531',\n        textColor: '#000',\n        maskColor: 'rgba(255, 255, 255, 0.8)',\n        zlevel: 0\n    });\n    var mask = new graphic.Rect({\n        style: {\n            fill: opts.maskColor\n        },\n        zlevel: opts.zlevel,\n        z: 10000\n    });\n    var arc = new graphic.Arc({\n        shape: {\n            startAngle: -PI / 2,\n            endAngle: -PI / 2 + 0.1,\n            r: 10\n        },\n        style: {\n            stroke: opts.color,\n            lineCap: 'round',\n            lineWidth: 5\n        },\n        zlevel: opts.zlevel,\n        z: 10001\n    });\n    var labelRect = new graphic.Rect({\n        style: {\n            fill: 'none',\n            text: opts.text,\n            textPosition: 'right',\n            textDistance: 10,\n            textFill: opts.textColor\n        },\n        zlevel: opts.zlevel,\n        z: 10001\n    });\n\n    arc.animateShape(true)\n        .when(1000, {\n            endAngle: PI * 3 / 2\n        })\n        .start('circularInOut');\n    arc.animateShape(true)\n        .when(1000, {\n            startAngle: PI * 3 / 2\n        })\n        .delay(300)\n        .start('circularInOut');\n\n    var group = new graphic.Group();\n    group.add(arc);\n    group.add(labelRect);\n    group.add(mask);\n    // Inject resize\n    group.resize = function () {\n        var cx = api.getWidth() / 2;\n        var cy = api.getHeight() / 2;\n        arc.setShape({\n            cx: cx,\n            cy: cy\n        });\n        var r = arc.shape.r;\n        labelRect.setShape({\n            x: cx - r,\n            y: cy - r,\n            width: r * 2,\n            height: r * 2\n        });\n\n        mask.setShape({\n            x: 0,\n            y: 0,\n            width: api.getWidth(),\n            height: api.getHeight()\n        });\n    };\n    group.resize();\n    return group;\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 * @module echarts/stream/Scheduler\n */\n\nimport {each, map, isFunction, createHashMap, noop} from 'zrender/src/core/util';\nimport {createTask} from './task';\nimport {getUID} from '../util/component';\nimport GlobalModel from '../model/Global';\nimport ExtensionAPI from '../ExtensionAPI';\nimport {normalizeToArray} from '../util/model';\n\n/**\n * @constructor\n */\nfunction Scheduler(ecInstance, api, dataProcessorHandlers, visualHandlers) {\n    this.ecInstance = ecInstance;\n    this.api = api;\n    this.unfinished;\n\n    // Fix current processors in case that in some rear cases that\n    // processors might be registered after echarts instance created.\n    // Register processors incrementally for a echarts instance is\n    // not supported by this stream architecture.\n    var dataProcessorHandlers = this._dataProcessorHandlers = dataProcessorHandlers.slice();\n    var visualHandlers = this._visualHandlers = visualHandlers.slice();\n    this._allHandlers = dataProcessorHandlers.concat(visualHandlers);\n\n    /**\n     * @private\n     * @type {\n     *     [handlerUID: string]: {\n     *         seriesTaskMap?: {\n     *             [seriesUID: string]: Task\n     *         },\n     *         overallTask?: Task\n     *     }\n     * }\n     */\n    this._stageTaskMap = createHashMap();\n}\n\nvar proto = Scheduler.prototype;\n\n/**\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} payload\n */\nproto.restoreData = function (ecModel, payload) {\n    // TODO: Only restroe needed series and components, but not all components.\n    // Currently `restoreData` of all of the series and component will be called.\n    // But some independent components like `title`, `legend`, `graphic`, `toolbox`,\n    // `tooltip`, `axisPointer`, etc, do not need series refresh when `setOption`,\n    // and some components like coordinate system, axes, dataZoom, visualMap only\n    // need their target series refresh.\n    // (1) If we are implementing this feature some day, we should consider these cases:\n    // if a data processor depends on a component (e.g., dataZoomProcessor depends\n    // on the settings of `dataZoom`), it should be re-performed if the component\n    // is modified by `setOption`.\n    // (2) If a processor depends on sevral series, speicified by its `getTargetSeries`,\n    // it should be re-performed when the result array of `getTargetSeries` changed.\n    // We use `dependencies` to cover these issues.\n    // (3) How to update target series when coordinate system related components modified.\n\n    // TODO: simply the dirty mechanism? Check whether only the case here can set tasks dirty,\n    // and this case all of the tasks will be set as dirty.\n\n    ecModel.restoreData(payload);\n\n    // Theoretically an overall task not only depends on each of its target series, but also\n    // depends on all of the series.\n    // The overall task is not in pipeline, and `ecModel.restoreData` only set pipeline tasks\n    // dirty. If `getTargetSeries` of an overall task returns nothing, we should also ensure\n    // that the overall task is set as dirty and to be performed, otherwise it probably cause\n    // state chaos. So we have to set dirty of all of the overall tasks manually, otherwise it\n    // probably cause state chaos (consider `dataZoomProcessor`).\n    this._stageTaskMap.each(function (taskRecord) {\n        var overallTask = taskRecord.overallTask;\n        overallTask && overallTask.dirty();\n    });\n};\n\n// If seriesModel provided, incremental threshold is check by series data.\nproto.getPerformArgs = function (task, isBlock) {\n    // For overall task\n    if (!task.__pipeline) {\n        return;\n    }\n\n    var pipeline = this._pipelineMap.get(task.__pipeline.id);\n    var pCtx = pipeline.context;\n    var incremental = !isBlock\n        && pipeline.progressiveEnabled\n        && (!pCtx || pCtx.progressiveRender)\n        && task.__idxInPipeline > pipeline.blockIndex;\n\n    var step = incremental ? pipeline.step : null;\n    var modDataCount = pCtx && pCtx.modDataCount;\n    var modBy = modDataCount != null ? Math.ceil(modDataCount / step) : null;\n\n    return {step: step, modBy: modBy, modDataCount: modDataCount};\n};\n\nproto.getPipeline = function (pipelineId) {\n    return this._pipelineMap.get(pipelineId);\n};\n\n/**\n * Current, progressive rendering starts from visual and layout.\n * Always detect render mode in the same stage, avoiding that incorrect\n * detection caused by data filtering.\n * Caution:\n * `updateStreamModes` use `seriesModel.getData()`.\n */\nproto.updateStreamModes = function (seriesModel, view) {\n    var pipeline = this._pipelineMap.get(seriesModel.uid);\n    var data = seriesModel.getData();\n    var dataLen = data.count();\n\n    // `progressiveRender` means that can render progressively in each\n    // animation frame. Note that some types of series do not provide\n    // `view.incrementalPrepareRender` but support `chart.appendData`. We\n    // use the term `incremental` but not `progressive` to describe the\n    // case that `chart.appendData`.\n    var progressiveRender = pipeline.progressiveEnabled\n        && view.incrementalPrepareRender\n        && dataLen >= pipeline.threshold;\n\n    var large = seriesModel.get('large') && dataLen >= seriesModel.get('largeThreshold');\n\n    // TODO: modDataCount should not updated if `appendData`, otherwise cause whole repaint.\n    // see `test/candlestick-large3.html`\n    var modDataCount = seriesModel.get('progressiveChunkMode') === 'mod' ? dataLen : null;\n\n    seriesModel.pipelineContext = pipeline.context = {\n        progressiveRender: progressiveRender,\n        modDataCount: modDataCount,\n        large: large\n    };\n};\n\nproto.restorePipelines = function (ecModel) {\n    var scheduler = this;\n    var pipelineMap = scheduler._pipelineMap = createHashMap();\n\n    ecModel.eachSeries(function (seriesModel) {\n        var progressive = seriesModel.getProgressive();\n        var pipelineId = seriesModel.uid;\n\n        pipelineMap.set(pipelineId, {\n            id: pipelineId,\n            head: null,\n            tail: null,\n            threshold: seriesModel.getProgressiveThreshold(),\n            progressiveEnabled: progressive\n                && !(seriesModel.preventIncremental && seriesModel.preventIncremental()),\n            blockIndex: -1,\n            step: Math.round(progressive || 700),\n            count: 0\n        });\n\n        pipe(scheduler, seriesModel, seriesModel.dataTask);\n    });\n};\n\nproto.prepareStageTasks = function () {\n    var stageTaskMap = this._stageTaskMap;\n    var ecModel = this.ecInstance.getModel();\n    var api = this.api;\n\n    each(this._allHandlers, function (handler) {\n        var record = stageTaskMap.get(handler.uid) || stageTaskMap.set(handler.uid, []);\n\n        handler.reset && createSeriesStageTask(this, handler, record, ecModel, api);\n        handler.overallReset && createOverallStageTask(this, handler, record, ecModel, api);\n    }, this);\n};\n\nproto.prepareView = function (view, model, ecModel, api) {\n    var renderTask = view.renderTask;\n    var context = renderTask.context;\n\n    context.model = model;\n    context.ecModel = ecModel;\n    context.api = api;\n\n    renderTask.__block = !view.incrementalPrepareRender;\n\n    pipe(this, model, renderTask);\n};\n\n\nproto.performDataProcessorTasks = function (ecModel, payload) {\n    // If we do not use `block` here, it should be considered when to update modes.\n    performStageTasks(this, this._dataProcessorHandlers, ecModel, payload, {block: true});\n};\n\n// opt\n// opt.visualType: 'visual' or 'layout'\n// opt.setDirty\nproto.performVisualTasks = function (ecModel, payload, opt) {\n    performStageTasks(this, this._visualHandlers, ecModel, payload, opt);\n};\n\nfunction performStageTasks(scheduler, stageHandlers, ecModel, payload, opt) {\n    opt = opt || {};\n    var unfinished;\n\n    each(stageHandlers, function (stageHandler, idx) {\n        if (opt.visualType && opt.visualType !== stageHandler.visualType) {\n            return;\n        }\n\n        var stageHandlerRecord = scheduler._stageTaskMap.get(stageHandler.uid);\n        var seriesTaskMap = stageHandlerRecord.seriesTaskMap;\n        var overallTask = stageHandlerRecord.overallTask;\n\n        if (overallTask) {\n            var overallNeedDirty;\n            var agentStubMap = overallTask.agentStubMap;\n            agentStubMap.each(function (stub) {\n                if (needSetDirty(opt, stub)) {\n                    stub.dirty();\n                    overallNeedDirty = true;\n                }\n            });\n            overallNeedDirty && overallTask.dirty();\n            updatePayload(overallTask, payload);\n            var performArgs = scheduler.getPerformArgs(overallTask, opt.block);\n            // Execute stubs firstly, which may set the overall task dirty,\n            // then execute the overall task. And stub will call seriesModel.setData,\n            // which ensures that in the overallTask seriesModel.getData() will not\n            // return incorrect data.\n            agentStubMap.each(function (stub) {\n                stub.perform(performArgs);\n            });\n            unfinished |= overallTask.perform(performArgs);\n        }\n        else if (seriesTaskMap) {\n            seriesTaskMap.each(function (task, pipelineId) {\n                if (needSetDirty(opt, task)) {\n                    task.dirty();\n                }\n                var performArgs = scheduler.getPerformArgs(task, opt.block);\n                performArgs.skip = !stageHandler.performRawSeries\n                    && ecModel.isSeriesFiltered(task.context.model);\n                updatePayload(task, payload);\n                unfinished |= task.perform(performArgs);\n            });\n        }\n    });\n\n    function needSetDirty(opt, task) {\n        return opt.setDirty && (!opt.dirtyMap || opt.dirtyMap.get(task.__pipeline.id));\n    }\n\n    scheduler.unfinished |= unfinished;\n}\n\nproto.performSeriesTasks = function (ecModel) {\n    var unfinished;\n\n    ecModel.eachSeries(function (seriesModel) {\n        // Progress to the end for dataInit and dataRestore.\n        unfinished |= seriesModel.dataTask.perform();\n    });\n\n    this.unfinished |= unfinished;\n};\n\nproto.plan = function () {\n    // Travel pipelines, check block.\n    this._pipelineMap.each(function (pipeline) {\n        var task = pipeline.tail;\n        do {\n            if (task.__block) {\n                pipeline.blockIndex = task.__idxInPipeline;\n                break;\n            }\n            task = task.getUpstream();\n        }\n        while (task);\n    });\n};\n\nvar updatePayload = proto.updatePayload = function (task, payload) {\n    payload !== 'remain' && (task.context.payload = payload);\n};\n\nfunction createSeriesStageTask(scheduler, stageHandler, stageHandlerRecord, ecModel, api) {\n    var seriesTaskMap = stageHandlerRecord.seriesTaskMap\n        || (stageHandlerRecord.seriesTaskMap = createHashMap());\n    var seriesType = stageHandler.seriesType;\n    var getTargetSeries = stageHandler.getTargetSeries;\n\n    // If a stageHandler should cover all series, `createOnAllSeries` should be declared mandatorily,\n    // to avoid some typo or abuse. Otherwise if an extension do not specify a `seriesType`,\n    // it works but it may cause other irrelevant charts blocked.\n    if (stageHandler.createOnAllSeries) {\n        ecModel.eachRawSeries(create);\n    }\n    else if (seriesType) {\n        ecModel.eachRawSeriesByType(seriesType, create);\n    }\n    else if (getTargetSeries) {\n        getTargetSeries(ecModel, api).each(create);\n    }\n\n    function create(seriesModel) {\n        var pipelineId = seriesModel.uid;\n\n        // Init tasks for each seriesModel only once.\n        // Reuse original task instance.\n        var task = seriesTaskMap.get(pipelineId)\n            || seriesTaskMap.set(pipelineId, createTask({\n                plan: seriesTaskPlan,\n                reset: seriesTaskReset,\n                count: seriesTaskCount\n            }));\n        task.context = {\n            model: seriesModel,\n            ecModel: ecModel,\n            api: api,\n            useClearVisual: stageHandler.isVisual && !stageHandler.isLayout,\n            plan: stageHandler.plan,\n            reset: stageHandler.reset,\n            scheduler: scheduler\n        };\n        pipe(scheduler, seriesModel, task);\n    }\n\n    // Clear unused series tasks.\n    var pipelineMap = scheduler._pipelineMap;\n    seriesTaskMap.each(function (task, pipelineId) {\n        if (!pipelineMap.get(pipelineId)) {\n            task.dispose();\n            seriesTaskMap.removeKey(pipelineId);\n        }\n    });\n}\n\nfunction createOverallStageTask(scheduler, stageHandler, stageHandlerRecord, ecModel, api) {\n    var overallTask = stageHandlerRecord.overallTask = stageHandlerRecord.overallTask\n        // For overall task, the function only be called on reset stage.\n        || createTask({reset: overallTaskReset});\n\n    overallTask.context = {\n        ecModel: ecModel,\n        api: api,\n        overallReset: stageHandler.overallReset,\n        scheduler: scheduler\n    };\n\n    // Reuse orignal stubs.\n    var agentStubMap = overallTask.agentStubMap = overallTask.agentStubMap || createHashMap();\n\n    var seriesType = stageHandler.seriesType;\n    var getTargetSeries = stageHandler.getTargetSeries;\n    var overallProgress = true;\n    var modifyOutputEnd = stageHandler.modifyOutputEnd;\n\n    // An overall task with seriesType detected or has `getTargetSeries`, we add\n    // stub in each pipelines, it will set the overall task dirty when the pipeline\n    // progress. Moreover, to avoid call the overall task each frame (too frequent),\n    // we set the pipeline block.\n    if (seriesType) {\n        ecModel.eachRawSeriesByType(seriesType, createStub);\n    }\n    else if (getTargetSeries) {\n        getTargetSeries(ecModel, api).each(createStub);\n    }\n    // Otherwise, (usually it is legancy case), the overall task will only be\n    // executed when upstream dirty. Otherwise the progressive rendering of all\n    // pipelines will be disabled unexpectedly. But it still needs stubs to receive\n    // dirty info from upsteam.\n    else {\n        overallProgress = false;\n        each(ecModel.getSeries(), createStub);\n    }\n\n    function createStub(seriesModel) {\n        var pipelineId = seriesModel.uid;\n        var stub = agentStubMap.get(pipelineId);\n        if (!stub) {\n            stub = agentStubMap.set(pipelineId, createTask(\n                {reset: stubReset, onDirty: stubOnDirty}\n            ));\n            // When the result of `getTargetSeries` changed, the overallTask\n            // should be set as dirty and re-performed.\n            overallTask.dirty();\n        }\n        stub.context = {\n            model: seriesModel,\n            overallProgress: overallProgress,\n            modifyOutputEnd: modifyOutputEnd\n        };\n        stub.agent = overallTask;\n        stub.__block = overallProgress;\n\n        pipe(scheduler, seriesModel, stub);\n    }\n\n    // Clear unused stubs.\n    var pipelineMap = scheduler._pipelineMap;\n    agentStubMap.each(function (stub, pipelineId) {\n        if (!pipelineMap.get(pipelineId)) {\n            stub.dispose();\n            // When the result of `getTargetSeries` changed, the overallTask\n            // should be set as dirty and re-performed.\n            overallTask.dirty();\n            agentStubMap.removeKey(pipelineId);\n        }\n    });\n}\n\nfunction overallTaskReset(context) {\n    context.overallReset(\n        context.ecModel, context.api, context.payload\n    );\n}\n\nfunction stubReset(context, upstreamContext) {\n    return context.overallProgress && stubProgress;\n}\n\nfunction stubProgress() {\n    this.agent.dirty();\n    this.getDownstream().dirty();\n}\n\nfunction stubOnDirty() {\n    this.agent && this.agent.dirty();\n}\n\nfunction seriesTaskPlan(context) {\n    return context.plan && context.plan(\n        context.model, context.ecModel, context.api, context.payload\n    );\n}\n\nfunction seriesTaskReset(context) {\n    if (context.useClearVisual) {\n        context.data.clearAllVisual();\n    }\n    var resetDefines = context.resetDefines = normalizeToArray(context.reset(\n        context.model, context.ecModel, context.api, context.payload\n    ));\n    return resetDefines.length > 1\n        ? map(resetDefines, function (v, idx) {\n            return makeSeriesTaskProgress(idx);\n        })\n        : singleSeriesTaskProgress;\n}\n\nvar singleSeriesTaskProgress = makeSeriesTaskProgress(0);\n\nfunction makeSeriesTaskProgress(resetDefineIdx) {\n    return function (params, context) {\n        var data = context.data;\n        var resetDefine = context.resetDefines[resetDefineIdx];\n\n        if (resetDefine && resetDefine.dataEach) {\n            for (var i = params.start; i < params.end; i++) {\n                resetDefine.dataEach(data, i);\n            }\n        }\n        else if (resetDefine && resetDefine.progress) {\n            resetDefine.progress(params, data);\n        }\n    };\n}\n\nfunction seriesTaskCount(context) {\n    return context.data.count();\n}\n\nfunction pipe(scheduler, seriesModel, task) {\n    var pipelineId = seriesModel.uid;\n    var pipeline = scheduler._pipelineMap.get(pipelineId);\n    !pipeline.head && (pipeline.head = task);\n    pipeline.tail && pipeline.tail.pipe(task);\n    pipeline.tail = task;\n    task.__idxInPipeline = pipeline.count++;\n    task.__pipeline = pipeline;\n}\n\nScheduler.wrapStageHandler = function (stageHandler, visualType) {\n    if (isFunction(stageHandler)) {\n        stageHandler = {\n            overallReset: stageHandler,\n            seriesType: detectSeriseType(stageHandler)\n        };\n    }\n\n    stageHandler.uid = getUID('stageHandler');\n    visualType && (stageHandler.visualType = visualType);\n\n    return stageHandler;\n};\n\n\n\n/**\n * Only some legacy stage handlers (usually in echarts extensions) are pure function.\n * To ensure that they can work normally, they should work in block mode, that is,\n * they should not be started util the previous tasks finished. So they cause the\n * progressive rendering disabled. We try to detect the series type, to narrow down\n * the block range to only the series type they concern, but not all series.\n */\nfunction detectSeriseType(legacyFunc) {\n    seriesType = null;\n    try {\n        // Assume there is no async when calling `eachSeriesByType`.\n        legacyFunc(ecModelMock, apiMock);\n    }\n    catch (e) {\n    }\n    return seriesType;\n}\n\nvar ecModelMock = {};\nvar apiMock = {};\nvar seriesType;\n\nmockMethods(ecModelMock, GlobalModel);\nmockMethods(apiMock, ExtensionAPI);\necModelMock.eachSeriesByType = ecModelMock.eachRawSeriesByType = function (type) {\n    seriesType = type;\n};\necModelMock.eachComponent = function (cond) {\n    if (cond.mainType === 'series' && cond.subType) {\n        seriesType = cond.subType;\n    }\n};\n\nfunction mockMethods(target, Clz) {\n    /* eslint-disable */\n    for (var name in Clz.prototype) {\n        // Do not use hasOwnProperty\n        target[name] = noop;\n    }\n    /* eslint-enable */\n}\n\nexport default Scheduler;\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 colorAll = [\n    '#37A2DA', '#32C5E9', '#67E0E3', '#9FE6B8', '#FFDB5C', '#ff9f7f',\n    '#fb7293', '#E062AE', '#E690D1', '#e7bcf3', '#9d96f5', '#8378EA', '#96BFFF'\n];\n\nexport default {\n\n    color: colorAll,\n\n    colorLayer: [\n        ['#37A2DA', '#ffd85c', '#fd7b5f'],\n        ['#37A2DA', '#67E0E3', '#FFDB5C', '#ff9f7f', '#E062AE', '#9d96f5'],\n        ['#37A2DA', '#32C5E9', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#e7bcf3', '#8378EA', '#96BFFF'],\n        colorAll\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 contrastColor = '#eee';\nvar axisCommon = function () {\n    return {\n        axisLine: {\n            lineStyle: {\n                color: contrastColor\n            }\n        },\n        axisTick: {\n            lineStyle: {\n                color: contrastColor\n            }\n        },\n        axisLabel: {\n            textStyle: {\n                color: contrastColor\n            }\n        },\n        splitLine: {\n            lineStyle: {\n                type: 'dashed',\n                color: '#aaa'\n            }\n        },\n        splitArea: {\n            areaStyle: {\n                color: contrastColor\n            }\n        }\n    };\n};\n\nvar colorPalette = [\n    '#dd6b66', '#759aa0', '#e69d87', '#8dc1a9', '#ea7e53',\n    '#eedd78', '#73a373', '#73b9bc', '#7289ab', '#91ca8c', '#f49f42'\n];\nvar theme = {\n    color: colorPalette,\n    backgroundColor: '#333',\n    tooltip: {\n        axisPointer: {\n            lineStyle: {\n                color: contrastColor\n            },\n            crossStyle: {\n                color: contrastColor\n            }\n        }\n    },\n    legend: {\n        textStyle: {\n            color: contrastColor\n        }\n    },\n    textStyle: {\n        color: contrastColor\n    },\n    title: {\n        textStyle: {\n            color: contrastColor\n        }\n    },\n    toolbox: {\n        iconStyle: {\n            normal: {\n                borderColor: contrastColor\n            }\n        }\n    },\n    dataZoom: {\n        textStyle: {\n            color: contrastColor\n        }\n    },\n    visualMap: {\n        textStyle: {\n            color: contrastColor\n        }\n    },\n    timeline: {\n        lineStyle: {\n            color: contrastColor\n        },\n        itemStyle: {\n            normal: {\n                color: colorPalette[1]\n            }\n        },\n        label: {\n            normal: {\n                textStyle: {\n                    color: contrastColor\n                }\n            }\n        },\n        controlStyle: {\n            normal: {\n                color: contrastColor,\n                borderColor: contrastColor\n            }\n        }\n    },\n    timeAxis: axisCommon(),\n    logAxis: axisCommon(),\n    valueAxis: axisCommon(),\n    categoryAxis: axisCommon(),\n\n    line: {\n        symbol: 'circle'\n    },\n    graph: {\n        color: colorPalette\n    },\n    gauge: {\n        title: {\n            textStyle: {\n                color: contrastColor\n            }\n        }\n    },\n    candlestick: {\n        itemStyle: {\n            normal: {\n                color: '#FD1050',\n                color0: '#0CF49B',\n                borderColor: '#FD1050',\n                borderColor0: '#0CF49B'\n            }\n        }\n    }\n};\ntheme.categoryAxis.splitLine.show = false;\n\nexport default theme;","/*\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 * This module is imported by echarts directly.\n *\n * Notice:\n * Always keep this file exists for backward compatibility.\n * Because before 4.1.0, dataset is an optional component,\n * some users may import this module manually.\n */\n\nimport ComponentModel from '../model/Component';\nimport ComponentView from '../view/Component';\nimport {detectSourceFormat} from '../data/helper/sourceHelper';\nimport {SERIES_LAYOUT_BY_COLUMN} from '../data/helper/sourceType';\n\nComponentModel.extend({\n\n    type: 'dataset',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n\n        // 'row', 'column'\n        seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN,\n\n        // null/'auto': auto detect header, see \"module:echarts/data/helper/sourceHelper\"\n        sourceHeader: null,\n\n        dimensions: null,\n\n        source: null\n    },\n\n    optionUpdated: function () {\n        detectSourceFormat(this);\n    }\n\n});\n\nComponentView.extend({\n\n    type: 'dataset'\n\n});\n","/**\n * 椭圆形状\n * @module zrender/graphic/shape/Ellipse\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'ellipse',\n\n    shape: {\n        cx: 0, cy: 0,\n        rx: 0, ry: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var k = 0.5522848;\n        var x = shape.cx;\n        var y = shape.cy;\n        var a = shape.rx;\n        var b = shape.ry;\n        var ox = a * k; // 水平控制点偏移量\n        var oy = b * k; // 垂直控制点偏移量\n        // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线\n        ctx.moveTo(x - a, y);\n        ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);\n        ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);\n        ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);\n        ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);\n        ctx.closePath();\n    }\n});","import Group from '../container/Group';\nimport ZImage from '../graphic/Image';\nimport Text from '../graphic/Text';\nimport Circle from '../graphic/shape/Circle';\nimport Rect from '../graphic/shape/Rect';\nimport Ellipse from '../graphic/shape/Ellipse';\nimport Line from '../graphic/shape/Line';\nimport Path from '../graphic/Path';\nimport Polygon from '../graphic/shape/Polygon';\nimport Polyline from '../graphic/shape/Polyline';\nimport LinearGradient from '../graphic/LinearGradient';\n// import RadialGradient from '../graphic/RadialGradient';\n// import Pattern from '../graphic/Pattern';\nimport Style from '../graphic/Style';\n// import * as vector from '../core/vector';\nimport * as matrix from '../core/matrix';\nimport { createFromString } from './path';\nimport { isString, extend, defaults, trim, each } from '../core/util';\n\n// Most of the values can be separated by comma and/or white space.\nvar DILIMITER_REG = /[\\s,]+/;\n\n/**\n * For big svg string, this method might be time consuming.\n *\n * @param {string} svg xml string\n * @return {Object} xml root.\n */\nexport function parseXML(svg) {\n    if (isString(svg)) {\n        var parser = new DOMParser();\n        svg = parser.parseFromString(svg, 'text/xml');\n    }\n\n    // Document node. If using $.get, doc node may be input.\n    if (svg.nodeType === 9) {\n        svg = svg.firstChild;\n    }\n    // nodeName of <!DOCTYPE svg> is also 'svg'.\n    while (svg.nodeName.toLowerCase() !== 'svg' || svg.nodeType !== 1) {\n        svg = svg.nextSibling;\n    }\n\n    return svg;\n}\n\nfunction SVGParser() {\n    this._defs = {};\n    this._root = null;\n\n    this._isDefine = false;\n    this._isText = false;\n}\n\nSVGParser.prototype.parse = function (xml, opt) {\n    opt = opt || {};\n\n    var svg = parseXML(xml);\n\n    if (!svg) {\n        throw new Error('Illegal svg');\n    }\n\n    var root = new Group();\n    this._root = root;\n    // parse view port\n    var viewBox = svg.getAttribute('viewBox') || '';\n\n    // If width/height not specified, means \"100%\" of `opt.width/height`.\n    // TODO: Other percent value not supported yet.\n    var width = parseFloat(svg.getAttribute('width') || opt.width);\n    var height = parseFloat(svg.getAttribute('height') || opt.height);\n    // If width/height not specified, set as null for output.\n    isNaN(width) && (width = null);\n    isNaN(height) && (height = null);\n\n    // Apply inline style on svg element.\n    parseAttributes(svg, root, null, true);\n\n    var child = svg.firstChild;\n    while (child) {\n        this._parseNode(child, root);\n        child = child.nextSibling;\n    }\n\n    var viewBoxRect;\n    var viewBoxTransform;\n\n    if (viewBox) {\n        var viewBoxArr = trim(viewBox).split(DILIMITER_REG);\n        // Some invalid case like viewBox: 'none'.\n        if (viewBoxArr.length >= 4) {\n            viewBoxRect = {\n                x: parseFloat(viewBoxArr[0] || 0),\n                y: parseFloat(viewBoxArr[1] || 0),\n                width: parseFloat(viewBoxArr[2]),\n                height: parseFloat(viewBoxArr[3])\n            };\n        }\n    }\n\n    if (viewBoxRect && width != null && height != null) {\n        viewBoxTransform = makeViewBoxTransform(viewBoxRect, width, height);\n\n        if (!opt.ignoreViewBox) {\n            // If set transform on the output group, it probably bring trouble when\n            // some users only intend to show the clipped content inside the viewBox,\n            // but not intend to transform the output group. So we keep the output\n            // group no transform. If the user intend to use the viewBox as a\n            // camera, just set `opt.ignoreViewBox` as `true` and set transfrom\n            // manually according to the viewBox info in the output of this method.\n            var elRoot = root;\n            root = new Group();\n            root.add(elRoot);\n            elRoot.scale = viewBoxTransform.scale.slice();\n            elRoot.position = viewBoxTransform.position.slice();\n        }\n    }\n\n    // Some shapes might be overflow the viewport, which should be\n    // clipped despite whether the viewBox is used, as the SVG does.\n    if (!opt.ignoreRootClip && width != null && height != null) {\n        root.setClipPath(new Rect({\n            shape: {x: 0, y: 0, width: width, height: height}\n        }));\n    }\n\n    // Set width/height on group just for output the viewport size.\n    return {\n        root: root,\n        width: width,\n        height: height,\n        viewBoxRect: viewBoxRect,\n        viewBoxTransform: viewBoxTransform\n    };\n};\n\nSVGParser.prototype._parseNode = function (xmlNode, parentGroup) {\n\n    var nodeName = xmlNode.nodeName.toLowerCase();\n\n    // TODO\n    // support <style>...</style> in svg, where nodeName is 'style',\n    // CSS classes is defined globally wherever the style tags are declared.\n\n    if (nodeName === 'defs') {\n        // define flag\n        this._isDefine = true;\n    }\n    else if (nodeName === 'text') {\n        this._isText = true;\n    }\n\n    var el;\n    if (this._isDefine) {\n        var parser = defineParsers[nodeName];\n        if (parser) {\n            var def = parser.call(this, xmlNode);\n            var id = xmlNode.getAttribute('id');\n            if (id) {\n                this._defs[id] = def;\n            }\n        }\n    }\n    else {\n        var parser = nodeParsers[nodeName];\n        if (parser) {\n            el = parser.call(this, xmlNode, parentGroup);\n            parentGroup.add(el);\n        }\n    }\n\n    var child = xmlNode.firstChild;\n    while (child) {\n        if (child.nodeType === 1) {\n            this._parseNode(child, el);\n        }\n        // Is text\n        if (child.nodeType === 3 && this._isText) {\n            this._parseText(child, el);\n        }\n        child = child.nextSibling;\n    }\n\n    // Quit define\n    if (nodeName === 'defs') {\n        this._isDefine = false;\n    }\n    else if (nodeName === 'text') {\n        this._isText = false;\n    }\n};\n\nSVGParser.prototype._parseText = function (xmlNode, parentGroup) {\n    if (xmlNode.nodeType === 1) {\n        var dx = xmlNode.getAttribute('dx') || 0;\n        var dy = xmlNode.getAttribute('dy') || 0;\n        this._textX += parseFloat(dx);\n        this._textY += parseFloat(dy);\n    }\n\n    var text = new Text({\n        style: {\n            text: xmlNode.textContent,\n            transformText: true\n        },\n        position: [this._textX || 0, this._textY || 0]\n    });\n\n    inheritStyle(parentGroup, text);\n    parseAttributes(xmlNode, text, this._defs);\n\n    var fontSize = text.style.fontSize;\n    if (fontSize && fontSize < 9) {\n        // PENDING\n        text.style.fontSize = 9;\n        text.scale = text.scale || [1, 1];\n        text.scale[0] *= fontSize / 9;\n        text.scale[1] *= fontSize / 9;\n    }\n\n    var rect = text.getBoundingRect();\n    this._textX += rect.width;\n\n    parentGroup.add(text);\n\n    return text;\n};\n\nvar nodeParsers = {\n    'g': function (xmlNode, parentGroup) {\n        var g = new Group();\n        inheritStyle(parentGroup, g);\n        parseAttributes(xmlNode, g, this._defs);\n\n        return g;\n    },\n    'rect': function (xmlNode, parentGroup) {\n        var rect = new Rect();\n        inheritStyle(parentGroup, rect);\n        parseAttributes(xmlNode, rect, this._defs);\n\n        rect.setShape({\n            x: parseFloat(xmlNode.getAttribute('x') || 0),\n            y: parseFloat(xmlNode.getAttribute('y') || 0),\n            width: parseFloat(xmlNode.getAttribute('width') || 0),\n            height: parseFloat(xmlNode.getAttribute('height') || 0)\n        });\n\n        // console.log(xmlNode.getAttribute('transform'));\n        // console.log(rect.transform);\n\n        return rect;\n    },\n    'circle': function (xmlNode, parentGroup) {\n        var circle = new Circle();\n        inheritStyle(parentGroup, circle);\n        parseAttributes(xmlNode, circle, this._defs);\n\n        circle.setShape({\n            cx: parseFloat(xmlNode.getAttribute('cx') || 0),\n            cy: parseFloat(xmlNode.getAttribute('cy') || 0),\n            r: parseFloat(xmlNode.getAttribute('r') || 0)\n        });\n\n        return circle;\n    },\n    'line': function (xmlNode, parentGroup) {\n        var line = new Line();\n        inheritStyle(parentGroup, line);\n        parseAttributes(xmlNode, line, this._defs);\n\n        line.setShape({\n            x1: parseFloat(xmlNode.getAttribute('x1') || 0),\n            y1: parseFloat(xmlNode.getAttribute('y1') || 0),\n            x2: parseFloat(xmlNode.getAttribute('x2') || 0),\n            y2: parseFloat(xmlNode.getAttribute('y2') || 0)\n        });\n\n        return line;\n    },\n    'ellipse': function (xmlNode, parentGroup) {\n        var ellipse = new Ellipse();\n        inheritStyle(parentGroup, ellipse);\n        parseAttributes(xmlNode, ellipse, this._defs);\n\n        ellipse.setShape({\n            cx: parseFloat(xmlNode.getAttribute('cx') || 0),\n            cy: parseFloat(xmlNode.getAttribute('cy') || 0),\n            rx: parseFloat(xmlNode.getAttribute('rx') || 0),\n            ry: parseFloat(xmlNode.getAttribute('ry') || 0)\n        });\n        return ellipse;\n    },\n    'polygon': function (xmlNode, parentGroup) {\n        var points = xmlNode.getAttribute('points');\n        if (points) {\n            points = parsePoints(points);\n        }\n        var polygon = new Polygon({\n            shape: {\n                points: points || []\n            }\n        });\n\n        inheritStyle(parentGroup, polygon);\n        parseAttributes(xmlNode, polygon, this._defs);\n\n        return polygon;\n    },\n    'polyline': function (xmlNode, parentGroup) {\n        var path = new Path();\n        inheritStyle(parentGroup, path);\n        parseAttributes(xmlNode, path, this._defs);\n\n        var points = xmlNode.getAttribute('points');\n        if (points) {\n            points = parsePoints(points);\n        }\n        var polyline = new Polyline({\n            shape: {\n                points: points || []\n            }\n        });\n\n        return polyline;\n    },\n    'image': function (xmlNode, parentGroup) {\n        var img = new ZImage();\n        inheritStyle(parentGroup, img);\n        parseAttributes(xmlNode, img, this._defs);\n\n        img.setStyle({\n            image: xmlNode.getAttribute('xlink:href'),\n            x: xmlNode.getAttribute('x'),\n            y: xmlNode.getAttribute('y'),\n            width: xmlNode.getAttribute('width'),\n            height: xmlNode.getAttribute('height')\n        });\n\n        return img;\n    },\n    'text': function (xmlNode, parentGroup) {\n        var x = xmlNode.getAttribute('x') || 0;\n        var y = xmlNode.getAttribute('y') || 0;\n        var dx = xmlNode.getAttribute('dx') || 0;\n        var dy = xmlNode.getAttribute('dy') || 0;\n\n        this._textX = parseFloat(x) + parseFloat(dx);\n        this._textY = parseFloat(y) + parseFloat(dy);\n\n        var g = new Group();\n        inheritStyle(parentGroup, g);\n        parseAttributes(xmlNode, g, this._defs);\n\n        return g;\n    },\n    'tspan': function (xmlNode, parentGroup) {\n        var x = xmlNode.getAttribute('x');\n        var y = xmlNode.getAttribute('y');\n        if (x != null) {\n            // new offset x\n            this._textX = parseFloat(x);\n        }\n        if (y != null) {\n            // new offset y\n            this._textY = parseFloat(y);\n        }\n        var dx = xmlNode.getAttribute('dx') || 0;\n        var dy = xmlNode.getAttribute('dy') || 0;\n\n        var g = new Group();\n\n        inheritStyle(parentGroup, g);\n        parseAttributes(xmlNode, g, this._defs);\n\n\n        this._textX += dx;\n        this._textY += dy;\n\n        return g;\n    },\n    'path': function (xmlNode, parentGroup) {\n        // TODO svg fill rule\n        // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule\n        // path.style.globalCompositeOperation = 'xor';\n        var d = xmlNode.getAttribute('d') || '';\n\n        // Performance sensitive.\n\n        var path = createFromString(d);\n\n        inheritStyle(parentGroup, path);\n        parseAttributes(xmlNode, path, this._defs);\n\n        return path;\n    }\n};\n\nvar defineParsers = {\n\n    'lineargradient': function (xmlNode) {\n        var x1 = parseInt(xmlNode.getAttribute('x1') || 0, 10);\n        var y1 = parseInt(xmlNode.getAttribute('y1') || 0, 10);\n        var x2 = parseInt(xmlNode.getAttribute('x2') || 10, 10);\n        var y2 = parseInt(xmlNode.getAttribute('y2') || 0, 10);\n\n        var gradient = new LinearGradient(x1, y1, x2, y2);\n\n        _parseGradientColorStops(xmlNode, gradient);\n\n        return gradient;\n    },\n\n    'radialgradient': function (xmlNode) {\n\n    }\n};\n\nfunction _parseGradientColorStops(xmlNode, gradient) {\n\n    var stop = xmlNode.firstChild;\n\n    while (stop) {\n        if (stop.nodeType === 1) {\n            var offset = stop.getAttribute('offset');\n            if (offset.indexOf('%') > 0) {  // percentage\n                offset = parseInt(offset, 10) / 100;\n            }\n            else if (offset) {    // number from 0 to 1\n                offset = parseFloat(offset);\n            }\n            else {\n                offset = 0;\n            }\n\n            var stopColor = stop.getAttribute('stop-color') || '#000000';\n\n            gradient.addColorStop(offset, stopColor);\n        }\n        stop = stop.nextSibling;\n    }\n}\n\nfunction inheritStyle(parent, child) {\n    if (parent && parent.__inheritedStyle) {\n        if (!child.__inheritedStyle) {\n            child.__inheritedStyle = {};\n        }\n        defaults(child.__inheritedStyle, parent.__inheritedStyle);\n    }\n}\n\nfunction parsePoints(pointsString) {\n    var list = trim(pointsString).split(DILIMITER_REG);\n    var points = [];\n\n    for (var i = 0; i < list.length; i += 2) {\n        var x = parseFloat(list[i]);\n        var y = parseFloat(list[i + 1]);\n        points.push([x, y]);\n    }\n    return points;\n}\n\nvar attributesMap = {\n    'fill': 'fill',\n    'stroke': 'stroke',\n    'stroke-width': 'lineWidth',\n    'opacity': 'opacity',\n    'fill-opacity': 'fillOpacity',\n    'stroke-opacity': 'strokeOpacity',\n    'stroke-dasharray': 'lineDash',\n    'stroke-dashoffset': 'lineDashOffset',\n    'stroke-linecap': 'lineCap',\n    'stroke-linejoin': 'lineJoin',\n    'stroke-miterlimit': 'miterLimit',\n    'font-family': 'fontFamily',\n    'font-size': 'fontSize',\n    'font-style': 'fontStyle',\n    'font-weight': 'fontWeight',\n\n    'text-align': 'textAlign',\n    'alignment-baseline': 'textBaseline'\n};\n\nfunction parseAttributes(xmlNode, el, defs, onlyInlineStyle) {\n    var zrStyle = el.__inheritedStyle || {};\n    var isTextEl = el.type === 'text';\n\n    // TODO Shadow\n    if (xmlNode.nodeType === 1) {\n        parseTransformAttribute(xmlNode, el);\n\n        extend(zrStyle, parseStyleAttribute(xmlNode));\n\n        if (!onlyInlineStyle) {\n            for (var svgAttrName in attributesMap) {\n                if (attributesMap.hasOwnProperty(svgAttrName)) {\n                    var attrValue = xmlNode.getAttribute(svgAttrName);\n                    if (attrValue != null) {\n                        zrStyle[attributesMap[svgAttrName]] = attrValue;\n                    }\n                }\n            }\n        }\n    }\n\n    var elFillProp = isTextEl ? 'textFill' : 'fill';\n    var elStrokeProp = isTextEl ? 'textStroke' : 'stroke';\n\n    el.style = el.style || new Style();\n    var elStyle = el.style;\n\n    zrStyle.fill != null && elStyle.set(elFillProp, getPaint(zrStyle.fill, defs));\n    zrStyle.stroke != null && elStyle.set(elStrokeProp, getPaint(zrStyle.stroke, defs));\n\n    each([\n        'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'\n    ], function (propName) {\n        var elPropName = (propName === 'lineWidth' && isTextEl) ? 'textStrokeWidth' : propName;\n        zrStyle[propName] != null && elStyle.set(elPropName, parseFloat(zrStyle[propName]));\n    });\n\n    if (!zrStyle.textBaseline || zrStyle.textBaseline === 'auto') {\n        zrStyle.textBaseline = 'alphabetic';\n    }\n    if (zrStyle.textBaseline === 'alphabetic') {\n        zrStyle.textBaseline = 'bottom';\n    }\n    if (zrStyle.textAlign === 'start') {\n        zrStyle.textAlign = 'left';\n    }\n    if (zrStyle.textAlign === 'end') {\n        zrStyle.textAlign = 'right';\n    }\n\n    each(['lineDashOffset', 'lineCap', 'lineJoin',\n        'fontWeight', 'fontFamily', 'fontStyle', 'textAlign', 'textBaseline'\n    ], function (propName) {\n        zrStyle[propName] != null && elStyle.set(propName, zrStyle[propName]);\n    });\n\n    if (zrStyle.lineDash) {\n        el.style.lineDash = trim(zrStyle.lineDash).split(DILIMITER_REG);\n    }\n\n    if (elStyle[elStrokeProp] && elStyle[elStrokeProp] !== 'none') {\n        // enable stroke\n        el[elStrokeProp] = true;\n    }\n\n    el.__inheritedStyle = zrStyle;\n}\n\n\nvar urlRegex = /url\\(\\s*#(.*?)\\)/;\nfunction getPaint(str, defs) {\n    // if (str === 'none') {\n    //     return;\n    // }\n    var urlMatch = defs && str && str.match(urlRegex);\n    if (urlMatch) {\n        var url = trim(urlMatch[1]);\n        var def = defs[url];\n        return def;\n    }\n    return str;\n}\n\nvar transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\\(([\\-\\s0-9\\.e,]*)\\)/g;\n\nfunction parseTransformAttribute(xmlNode, node) {\n    var transform = xmlNode.getAttribute('transform');\n    if (transform) {\n        transform = transform.replace(/,/g, ' ');\n        var m = null;\n        var transformOps = [];\n        transform.replace(transformRegex, function (str, type, value) {\n            transformOps.push(type, value);\n        });\n        for (var i = transformOps.length - 1; i > 0; i -= 2) {\n            var value = transformOps[i];\n            var type = transformOps[i - 1];\n            m = m || matrix.create();\n            switch (type) {\n                case 'translate':\n                    value = trim(value).split(DILIMITER_REG);\n                    matrix.translate(m, m, [parseFloat(value[0]), parseFloat(value[1] || 0)]);\n                    break;\n                case 'scale':\n                    value = trim(value).split(DILIMITER_REG);\n                    matrix.scale(m, m, [parseFloat(value[0]), parseFloat(value[1] || value[0])]);\n                    break;\n                case 'rotate':\n                    value = trim(value).split(DILIMITER_REG);\n                    matrix.rotate(m, m, parseFloat(value[0]));\n                    break;\n                case 'skew':\n                    value = trim(value).split(DILIMITER_REG);\n                    console.warn('Skew transform is not supported yet');\n                    break;\n                case 'matrix':\n                    var value = trim(value).split(DILIMITER_REG);\n                    m[0] = parseFloat(value[0]);\n                    m[1] = parseFloat(value[1]);\n                    m[2] = parseFloat(value[2]);\n                    m[3] = parseFloat(value[3]);\n                    m[4] = parseFloat(value[4]);\n                    m[5] = parseFloat(value[5]);\n                    break;\n            }\n        }\n        node.setLocalTransform(m);\n    }\n}\n\n// Value may contain space.\nvar styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\nfunction parseStyleAttribute(xmlNode) {\n    var style = xmlNode.getAttribute('style');\n    var result = {};\n\n    if (!style) {\n        return result;\n    }\n\n    var styleList = {};\n    styleRegex.lastIndex = 0;\n    var styleRegResult;\n    while ((styleRegResult = styleRegex.exec(style)) != null) {\n        styleList[styleRegResult[1]] = styleRegResult[2];\n    }\n\n    for (var svgAttrName in attributesMap) {\n        if (attributesMap.hasOwnProperty(svgAttrName) && styleList[svgAttrName] != null) {\n            result[attributesMap[svgAttrName]] = styleList[svgAttrName];\n        }\n    }\n\n    return result;\n}\n\n/**\n * @param {Array.<number>} viewBoxRect\n * @param {number} width\n * @param {number} height\n * @return {Object} {scale, position}\n */\nexport function makeViewBoxTransform(viewBoxRect, width, height) {\n    var scaleX = width / viewBoxRect.width;\n    var scaleY = height / viewBoxRect.height;\n    var scale = Math.min(scaleX, scaleY);\n    // preserveAspectRatio 'xMidYMid'\n    var viewBoxScale = [scale, scale];\n    var viewBoxPosition = [\n        -(viewBoxRect.x + viewBoxRect.width / 2) * scale + width / 2,\n        -(viewBoxRect.y + viewBoxRect.height / 2) * scale + height / 2\n    ];\n\n    return {\n        scale: viewBoxScale,\n        position: viewBoxPosition\n    };\n}\n\n/**\n * @param {string|XMLElement} xml\n * @param {Object} [opt]\n * @param {number} [opt.width] Default width if svg width not specified or is a percent value.\n * @param {number} [opt.height] Default height if svg height not specified or is a percent value.\n * @param {boolean} [opt.ignoreViewBox]\n * @param {boolean} [opt.ignoreRootClip]\n * @return {Object} result:\n * {\n *     root: Group, The root of the the result tree of zrender shapes,\n *     width: number, the viewport width of the SVG,\n *     height: number, the viewport height of the SVG,\n *     viewBoxRect: {x, y, width, height}, the declared viewBox rect of the SVG, if exists,\n *     viewBoxTransform: the {scale, position} calculated by viewBox and viewport, is exists.\n * }\n */\nexport function parseSVG(xml, opt) {\n    var parser = new SVGParser();\n    return parser.parse(xml, opt);\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\nimport {__DEV__} from '../../config';\nimport {createHashMap, isString, isArray, each, assert} from 'zrender/src/core/util';\nimport {parseXML} from 'zrender/src/tool/parseSVG';\n\n\nvar storage = createHashMap();\n\n// For minimize the code size of common echarts package,\n// do not put too much logic in this module.\n\nexport default {\n\n    // The format of record: see `echarts.registerMap`.\n    // Compatible with previous `echarts.registerMap`.\n    registerMap: function (mapName, rawGeoJson, rawSpecialAreas) {\n\n        var records;\n\n        if (isArray(rawGeoJson)) {\n            records = rawGeoJson;\n        }\n        else if (rawGeoJson.svg) {\n            records = [{\n                type: 'svg',\n                source: rawGeoJson.svg,\n                specialAreas: rawGeoJson.specialAreas\n            }];\n        }\n        else {\n            // Backward compatibility.\n            if (rawGeoJson.geoJson && !rawGeoJson.features) {\n                rawSpecialAreas = rawGeoJson.specialAreas;\n                rawGeoJson = rawGeoJson.geoJson;\n            }\n            records = [{\n                type: 'geoJSON',\n                source: rawGeoJson,\n                specialAreas: rawSpecialAreas\n            }];\n        }\n\n        each(records, function (record) {\n            var type = record.type;\n            type === 'geoJson' && (type = record.type = 'geoJSON');\n\n            var parse = parsers[type];\n\n            if (__DEV__) {\n                assert(parse, 'Illegal map type: ' + type);\n            }\n\n            parse(record);\n        });\n\n        return storage.set(mapName, records);\n    },\n\n    retrieveMap: function (mapName) {\n        return storage.get(mapName);\n    }\n\n};\n\nvar parsers = {\n\n    geoJSON: function (record) {\n        var source = record.source;\n        record.geoJSON = !isString(source)\n            ? source\n            : (typeof JSON !== 'undefined' && JSON.parse)\n            ? JSON.parse(source)\n            : (new Function('return (' + source + ');'))();\n    },\n\n    // Only perform parse to XML object here, which might be time\n    // consiming for large SVG.\n    // Although convert XML to zrender element is also time consiming,\n    // if we do it here, the clone of zrender elements has to be\n    // required. So we do it once for each geo instance, util real\n    // performance issues call for optimizing it.\n    svg: function (record) {\n        record.svgXML = parseXML(record.source);\n    }\n\n};\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport {__DEV__} from './config';\nimport * as zrender from 'zrender/src/zrender';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as colorTool from 'zrender/src/tool/color';\nimport env from 'zrender/src/core/env';\nimport timsort from 'zrender/src/core/timsort';\nimport Eventful from 'zrender/src/mixin/Eventful';\nimport GlobalModel from './model/Global';\nimport ExtensionAPI from './ExtensionAPI';\nimport CoordinateSystemManager from './CoordinateSystem';\nimport OptionManager from './model/OptionManager';\nimport backwardCompat from './preprocessor/backwardCompat';\nimport dataStack from './processor/dataStack';\nimport ComponentModel from './model/Component';\nimport SeriesModel from './model/Series';\nimport ComponentView from './view/Component';\nimport ChartView from './view/Chart';\nimport * as graphic from './util/graphic';\nimport * as modelUtil from './util/model';\nimport {throttle} from './util/throttle';\nimport seriesColor from './visual/seriesColor';\nimport aria from './visual/aria';\nimport loadingDefault from './loading/default';\nimport Scheduler from './stream/Scheduler';\nimport lightTheme from './theme/light';\nimport darkTheme from './theme/dark';\nimport './component/dataset';\nimport mapDataStorage from './coord/geo/mapDataStorage';\n\nvar assert = zrUtil.assert;\nvar each = zrUtil.each;\nvar isFunction = zrUtil.isFunction;\nvar isObject = zrUtil.isObject;\nvar parseClassType = ComponentModel.parseClassType;\n\nexport var version = '4.5.0';\n\nexport var dependencies = {\n    zrender: '4.1.2'\n};\n\nvar TEST_FRAME_REMAIN_TIME = 1;\n\nvar PRIORITY_PROCESSOR_FILTER = 1000;\nvar PRIORITY_PROCESSOR_SERIES_FILTER = 800;\nvar PRIORITY_PROCESSOR_DATASTACK = 900;\nvar PRIORITY_PROCESSOR_STATISTIC = 5000;\n\nvar PRIORITY_VISUAL_LAYOUT = 1000;\nvar PRIORITY_VISUAL_PROGRESSIVE_LAYOUT = 1100;\nvar PRIORITY_VISUAL_GLOBAL = 2000;\nvar PRIORITY_VISUAL_CHART = 3000;\nvar PRIORITY_VISUAL_POST_CHART_LAYOUT = 3500;\nvar PRIORITY_VISUAL_COMPONENT = 4000;\n// FIXME\n// necessary?\nvar PRIORITY_VISUAL_BRUSH = 5000;\n\nexport var PRIORITY = {\n    PROCESSOR: {\n        FILTER: PRIORITY_PROCESSOR_FILTER,\n        SERIES_FILTER: PRIORITY_PROCESSOR_SERIES_FILTER,\n        STATISTIC: PRIORITY_PROCESSOR_STATISTIC\n    },\n    VISUAL: {\n        LAYOUT: PRIORITY_VISUAL_LAYOUT,\n        PROGRESSIVE_LAYOUT: PRIORITY_VISUAL_PROGRESSIVE_LAYOUT,\n        GLOBAL: PRIORITY_VISUAL_GLOBAL,\n        CHART: PRIORITY_VISUAL_CHART,\n        POST_CHART_LAYOUT: PRIORITY_VISUAL_POST_CHART_LAYOUT,\n        COMPONENT: PRIORITY_VISUAL_COMPONENT,\n        BRUSH: PRIORITY_VISUAL_BRUSH\n    }\n};\n\n// Main process have three entries: `setOption`, `dispatchAction` and `resize`,\n// where they must not be invoked nestedly, except the only case: invoke\n// dispatchAction with updateMethod \"none\" in main process.\n// This flag is used to carry out this rule.\n// All events will be triggered out side main process (i.e. when !this[IN_MAIN_PROCESS]).\nvar IN_MAIN_PROCESS = '__flagInMainProcess';\nvar OPTION_UPDATED = '__optionUpdated';\nvar ACTION_REG = /^[a-zA-Z0-9_]+$/;\n\n\nfunction createRegisterEventWithLowercaseName(method, ignoreDisposed) {\n    return function (eventName, handler, context) {\n        if (!ignoreDisposed && this._disposed) {\n            disposedWarning(this.id);\n            return;\n        }\n\n        // Event name is all lowercase\n        eventName = eventName && eventName.toLowerCase();\n        Eventful.prototype[method].call(this, eventName, handler, context);\n    };\n}\n\n/**\n * @module echarts~MessageCenter\n */\nfunction MessageCenter() {\n    Eventful.call(this);\n}\nMessageCenter.prototype.on = createRegisterEventWithLowercaseName('on', true);\nMessageCenter.prototype.off = createRegisterEventWithLowercaseName('off', true);\nMessageCenter.prototype.one = createRegisterEventWithLowercaseName('one', true);\nzrUtil.mixin(MessageCenter, Eventful);\n\n/**\n * @module echarts~ECharts\n */\nfunction ECharts(dom, theme, opts) {\n    opts = opts || {};\n\n    // Get theme by name\n    if (typeof theme === 'string') {\n        theme = themeStorage[theme];\n    }\n\n    /**\n     * @type {string}\n     */\n    this.id;\n\n    /**\n     * Group id\n     * @type {string}\n     */\n    this.group;\n\n    /**\n     * @type {HTMLElement}\n     * @private\n     */\n    this._dom = dom;\n\n    var defaultRenderer = 'canvas';\n    if (__DEV__) {\n        defaultRenderer = (\n            typeof window === 'undefined' ? global : window\n        ).__ECHARTS__DEFAULT__RENDERER__ || defaultRenderer;\n    }\n\n    /**\n     * @type {module:zrender/ZRender}\n     * @private\n     */\n    var zr = this._zr = zrender.init(dom, {\n        renderer: opts.renderer || defaultRenderer,\n        devicePixelRatio: opts.devicePixelRatio,\n        width: opts.width,\n        height: opts.height\n    });\n\n    /**\n     * Expect 60 fps.\n     * @type {Function}\n     * @private\n     */\n    this._throttledZrFlush = throttle(zrUtil.bind(zr.flush, zr), 17);\n\n    var theme = zrUtil.clone(theme);\n    theme && backwardCompat(theme, true);\n    /**\n     * @type {Object}\n     * @private\n     */\n    this._theme = theme;\n\n    /**\n     * @type {Array.<module:echarts/view/Chart>}\n     * @private\n     */\n    this._chartsViews = [];\n\n    /**\n     * @type {Object.<string, module:echarts/view/Chart>}\n     * @private\n     */\n    this._chartsMap = {};\n\n    /**\n     * @type {Array.<module:echarts/view/Component>}\n     * @private\n     */\n    this._componentsViews = [];\n\n    /**\n     * @type {Object.<string, module:echarts/view/Component>}\n     * @private\n     */\n    this._componentsMap = {};\n\n    /**\n     * @type {module:echarts/CoordinateSystem}\n     * @private\n     */\n    this._coordSysMgr = new CoordinateSystemManager();\n\n    /**\n     * @type {module:echarts/ExtensionAPI}\n     * @private\n     */\n    var api = this._api = createExtensionAPI(this);\n\n    // Sort on demand\n    function prioritySortFunc(a, b) {\n        return a.__prio - b.__prio;\n    }\n    timsort(visualFuncs, prioritySortFunc);\n    timsort(dataProcessorFuncs, prioritySortFunc);\n\n    /**\n     * @type {module:echarts/stream/Scheduler}\n     */\n    this._scheduler = new Scheduler(this, api, dataProcessorFuncs, visualFuncs);\n\n    Eventful.call(this, this._ecEventProcessor = new EventProcessor());\n\n    /**\n     * @type {module:echarts~MessageCenter}\n     * @private\n     */\n    this._messageCenter = new MessageCenter();\n\n    // Init mouse events\n    this._initEvents();\n\n    // In case some people write `window.onresize = chart.resize`\n    this.resize = zrUtil.bind(this.resize, this);\n\n    // Can't dispatch action during rendering procedure\n    this._pendingActions = [];\n\n    zr.animation.on('frame', this._onframe, this);\n\n    bindRenderedEvent(zr, this);\n\n    // ECharts instance can be used as value.\n    zrUtil.setAsPrimitive(this);\n}\n\nvar echartsProto = ECharts.prototype;\n\nechartsProto._onframe = function () {\n    if (this._disposed) {\n        return;\n    }\n\n    var scheduler = this._scheduler;\n\n    // Lazy update\n    if (this[OPTION_UPDATED]) {\n        var silent = this[OPTION_UPDATED].silent;\n\n        this[IN_MAIN_PROCESS] = true;\n\n        prepare(this);\n        updateMethods.update.call(this);\n\n        this[IN_MAIN_PROCESS] = false;\n\n        this[OPTION_UPDATED] = false;\n\n        flushPendingActions.call(this, silent);\n\n        triggerUpdatedEvent.call(this, silent);\n    }\n    // Avoid do both lazy update and progress in one frame.\n    else if (scheduler.unfinished) {\n        // Stream progress.\n        var remainTime = TEST_FRAME_REMAIN_TIME;\n        var ecModel = this._model;\n        var api = this._api;\n        scheduler.unfinished = false;\n        do {\n            var startTime = +new Date();\n\n            scheduler.performSeriesTasks(ecModel);\n\n            // Currently dataProcessorFuncs do not check threshold.\n            scheduler.performDataProcessorTasks(ecModel);\n\n            updateStreamModes(this, ecModel);\n\n            // Do not update coordinate system here. Because that coord system update in\n            // each frame is not a good user experience. So we follow the rule that\n            // the extent of the coordinate system is determin in the first frame (the\n            // frame is executed immedietely after task reset.\n            // this._coordSysMgr.update(ecModel, api);\n\n            // console.log('--- ec frame visual ---', remainTime);\n            scheduler.performVisualTasks(ecModel);\n\n            renderSeries(this, this._model, api, 'remain');\n\n            remainTime -= (+new Date() - startTime);\n        }\n        while (remainTime > 0 && scheduler.unfinished);\n\n        // Call flush explicitly for trigger finished event.\n        if (!scheduler.unfinished) {\n            this._zr.flush();\n        }\n        // Else, zr flushing be ensue within the same frame,\n        // because zr flushing is after onframe event.\n    }\n};\n\n/**\n * @return {HTMLElement}\n */\nechartsProto.getDom = function () {\n    return this._dom;\n};\n\n/**\n * @return {module:zrender~ZRender}\n */\nechartsProto.getZr = function () {\n    return this._zr;\n};\n\n/**\n * Usage:\n * chart.setOption(option, notMerge, lazyUpdate);\n * chart.setOption(option, {\n *     notMerge: ...,\n *     lazyUpdate: ...,\n *     silent: ...\n * });\n *\n * @param {Object} option\n * @param {Object|boolean} [opts] opts or notMerge.\n * @param {boolean} [opts.notMerge=false]\n * @param {boolean} [opts.lazyUpdate=false] Useful when setOption frequently.\n */\nechartsProto.setOption = function (option, notMerge, lazyUpdate) {\n    if (__DEV__) {\n        assert(!this[IN_MAIN_PROCESS], '`setOption` should not be called during main process.');\n    }\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n\n    var silent;\n    if (isObject(notMerge)) {\n        lazyUpdate = notMerge.lazyUpdate;\n        silent = notMerge.silent;\n        notMerge = notMerge.notMerge;\n    }\n\n    this[IN_MAIN_PROCESS] = true;\n\n    if (!this._model || notMerge) {\n        var optionManager = new OptionManager(this._api);\n        var theme = this._theme;\n        var ecModel = this._model = new GlobalModel();\n        ecModel.scheduler = this._scheduler;\n        ecModel.init(null, null, theme, optionManager);\n    }\n\n    this._model.setOption(option, optionPreprocessorFuncs);\n\n    if (lazyUpdate) {\n        this[OPTION_UPDATED] = {silent: silent};\n        this[IN_MAIN_PROCESS] = false;\n    }\n    else {\n        prepare(this);\n\n        updateMethods.update.call(this);\n\n        // Ensure zr refresh sychronously, and then pixel in canvas can be\n        // fetched after `setOption`.\n        this._zr.flush();\n\n        this[OPTION_UPDATED] = false;\n        this[IN_MAIN_PROCESS] = false;\n\n        flushPendingActions.call(this, silent);\n        triggerUpdatedEvent.call(this, silent);\n    }\n};\n\n/**\n * @DEPRECATED\n */\nechartsProto.setTheme = function () {\n    console.error('ECharts#setTheme() is DEPRECATED in ECharts 3.0');\n};\n\n/**\n * @return {module:echarts/model/Global}\n */\nechartsProto.getModel = function () {\n    return this._model;\n};\n\n/**\n * @return {Object}\n */\nechartsProto.getOption = function () {\n    return this._model && this._model.getOption();\n};\n\n/**\n * @return {number}\n */\nechartsProto.getWidth = function () {\n    return this._zr.getWidth();\n};\n\n/**\n * @return {number}\n */\nechartsProto.getHeight = function () {\n    return this._zr.getHeight();\n};\n\n/**\n * @return {number}\n */\nechartsProto.getDevicePixelRatio = function () {\n    return this._zr.painter.dpr || window.devicePixelRatio || 1;\n};\n\n/**\n * Get canvas which has all thing rendered\n * @param {Object} opts\n * @param {string} [opts.backgroundColor]\n * @return {string}\n */\nechartsProto.getRenderedCanvas = function (opts) {\n    if (!env.canvasSupported) {\n        return;\n    }\n    opts = opts || {};\n    opts.pixelRatio = opts.pixelRatio || 1;\n    opts.backgroundColor = opts.backgroundColor\n        || this._model.get('backgroundColor');\n    var zr = this._zr;\n    // var list = zr.storage.getDisplayList();\n    // Stop animations\n    // Never works before in init animation, so remove it.\n    // zrUtil.each(list, function (el) {\n    //     el.stopAnimation(true);\n    // });\n    return zr.painter.getRenderedCanvas(opts);\n};\n\n/**\n * Get svg data url\n * @return {string}\n */\nechartsProto.getSvgDataUrl = function () {\n    if (!env.svgSupported) {\n        return;\n    }\n\n    var zr = this._zr;\n    var list = zr.storage.getDisplayList();\n    // Stop animations\n    zrUtil.each(list, function (el) {\n        el.stopAnimation(true);\n    });\n\n    return zr.painter.pathToDataUrl();\n};\n\n/**\n * @return {string}\n * @param {Object} opts\n * @param {string} [opts.type='png']\n * @param {string} [opts.pixelRatio=1]\n * @param {string} [opts.backgroundColor]\n * @param {string} [opts.excludeComponents]\n */\nechartsProto.getDataURL = function (opts) {\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n\n    opts = opts || {};\n    var excludeComponents = opts.excludeComponents;\n    var ecModel = this._model;\n    var excludesComponentViews = [];\n    var self = this;\n\n    each(excludeComponents, function (componentType) {\n        ecModel.eachComponent({\n            mainType: componentType\n        }, function (component) {\n            var view = self._componentsMap[component.__viewId];\n            if (!view.group.ignore) {\n                excludesComponentViews.push(view);\n                view.group.ignore = true;\n            }\n        });\n    });\n\n    var url = this._zr.painter.getType() === 'svg'\n        ? this.getSvgDataUrl()\n        : this.getRenderedCanvas(opts).toDataURL(\n            'image/' + (opts && opts.type || 'png')\n        );\n\n    each(excludesComponentViews, function (view) {\n        view.group.ignore = false;\n    });\n\n    return url;\n};\n\n\n/**\n * @return {string}\n * @param {Object} opts\n * @param {string} [opts.type='png']\n * @param {string} [opts.pixelRatio=1]\n * @param {string} [opts.backgroundColor]\n */\nechartsProto.getConnectedDataURL = function (opts) {\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n\n    if (!env.canvasSupported) {\n        return;\n    }\n    var groupId = this.group;\n    var mathMin = Math.min;\n    var mathMax = Math.max;\n    var MAX_NUMBER = Infinity;\n    if (connectedGroups[groupId]) {\n        var left = MAX_NUMBER;\n        var top = MAX_NUMBER;\n        var right = -MAX_NUMBER;\n        var bottom = -MAX_NUMBER;\n        var canvasList = [];\n        var dpr = (opts && opts.pixelRatio) || 1;\n\n        zrUtil.each(instances, function (chart, id) {\n            if (chart.group === groupId) {\n                var canvas = chart.getRenderedCanvas(\n                    zrUtil.clone(opts)\n                );\n                var boundingRect = chart.getDom().getBoundingClientRect();\n                left = mathMin(boundingRect.left, left);\n                top = mathMin(boundingRect.top, top);\n                right = mathMax(boundingRect.right, right);\n                bottom = mathMax(boundingRect.bottom, bottom);\n                canvasList.push({\n                    dom: canvas,\n                    left: boundingRect.left,\n                    top: boundingRect.top\n                });\n            }\n        });\n\n        left *= dpr;\n        top *= dpr;\n        right *= dpr;\n        bottom *= dpr;\n        var width = right - left;\n        var height = bottom - top;\n        var targetCanvas = zrUtil.createCanvas();\n        targetCanvas.width = width;\n        targetCanvas.height = height;\n        var zr = zrender.init(targetCanvas);\n\n        // Background between the charts\n        if (opts.connectedBackgroundColor) {\n            zr.add(new graphic.Rect({\n                shape: {\n                    x: 0,\n                    y: 0,\n                    width: width,\n                    height: height\n                },\n                style: {\n                    fill: opts.connectedBackgroundColor\n                }\n            }));\n        }\n\n        each(canvasList, function (item) {\n            var img = new graphic.Image({\n                style: {\n                    x: item.left * dpr - left,\n                    y: item.top * dpr - top,\n                    image: item.dom\n                }\n            });\n            zr.add(img);\n        });\n        zr.refreshImmediately();\n\n        return targetCanvas.toDataURL('image/' + (opts && opts.type || 'png'));\n    }\n    else {\n        return this.getDataURL(opts);\n    }\n};\n\n/**\n * Convert from logical coordinate system to pixel coordinate system.\n * See CoordinateSystem#convertToPixel.\n * @param {string|Object} finder\n *        If string, e.g., 'geo', means {geoIndex: 0}.\n *        If Object, could contain some of these properties below:\n *        {\n *            seriesIndex / seriesId / seriesName,\n *            geoIndex / geoId, geoName,\n *            bmapIndex / bmapId / bmapName,\n *            xAxisIndex / xAxisId / xAxisName,\n *            yAxisIndex / yAxisId / yAxisName,\n *            gridIndex / gridId / gridName,\n *            ... (can be extended)\n *        }\n * @param {Array|number} value\n * @return {Array|number} result\n */\nechartsProto.convertToPixel = zrUtil.curry(doConvertPixel, 'convertToPixel');\n\n/**\n * Convert from pixel coordinate system to logical coordinate system.\n * See CoordinateSystem#convertFromPixel.\n * @param {string|Object} finder\n *        If string, e.g., 'geo', means {geoIndex: 0}.\n *        If Object, could contain some of these properties below:\n *        {\n *            seriesIndex / seriesId / seriesName,\n *            geoIndex / geoId / geoName,\n *            bmapIndex / bmapId / bmapName,\n *            xAxisIndex / xAxisId / xAxisName,\n *            yAxisIndex / yAxisId / yAxisName\n *            gridIndex / gridId / gridName,\n *            ... (can be extended)\n *        }\n * @param {Array|number} value\n * @return {Array|number} result\n */\nechartsProto.convertFromPixel = zrUtil.curry(doConvertPixel, 'convertFromPixel');\n\nfunction doConvertPixel(methodName, finder, value) {\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n\n    var ecModel = this._model;\n    var coordSysList = this._coordSysMgr.getCoordinateSystems();\n    var result;\n\n    finder = modelUtil.parseFinder(ecModel, finder);\n\n    for (var i = 0; i < coordSysList.length; i++) {\n        var coordSys = coordSysList[i];\n        if (coordSys[methodName]\n            && (result = coordSys[methodName](ecModel, finder, value)) != null\n        ) {\n            return result;\n        }\n    }\n\n    if (__DEV__) {\n        console.warn(\n            'No coordinate system that supports ' + methodName + ' found by the given finder.'\n        );\n    }\n}\n\n/**\n * Is the specified coordinate systems or components contain the given pixel point.\n * @param {string|Object} finder\n *        If string, e.g., 'geo', means {geoIndex: 0}.\n *        If Object, could contain some of these properties below:\n *        {\n *            seriesIndex / seriesId / seriesName,\n *            geoIndex / geoId / geoName,\n *            bmapIndex / bmapId / bmapName,\n *            xAxisIndex / xAxisId / xAxisName,\n *            yAxisIndex / yAxisId / yAxisName,\n *            gridIndex / gridId / gridName,\n *            ... (can be extended)\n *        }\n * @param {Array|number} value\n * @return {boolean} result\n */\nechartsProto.containPixel = function (finder, value) {\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n\n    var ecModel = this._model;\n    var result;\n\n    finder = modelUtil.parseFinder(ecModel, finder);\n\n    zrUtil.each(finder, function (models, key) {\n        key.indexOf('Models') >= 0 && zrUtil.each(models, function (model) {\n            var coordSys = model.coordinateSystem;\n            if (coordSys && coordSys.containPoint) {\n                result |= !!coordSys.containPoint(value);\n            }\n            else if (key === 'seriesModels') {\n                var view = this._chartsMap[model.__viewId];\n                if (view && view.containPoint) {\n                    result |= view.containPoint(value, model);\n                }\n                else {\n                    if (__DEV__) {\n                        console.warn(key + ': ' + (view\n                            ? 'The found component do not support containPoint.'\n                            : 'No view mapping to the found component.'\n                        ));\n                    }\n                }\n            }\n            else {\n                if (__DEV__) {\n                    console.warn(key + ': containPoint is not supported');\n                }\n            }\n        }, this);\n    }, this);\n\n    return !!result;\n};\n\n/**\n * Get visual from series or data.\n * @param {string|Object} finder\n *        If string, e.g., 'series', means {seriesIndex: 0}.\n *        If Object, could contain some of these properties below:\n *        {\n *            seriesIndex / seriesId / seriesName,\n *            dataIndex / dataIndexInside\n *        }\n *        If dataIndex is not specified, series visual will be fetched,\n *        but not data item visual.\n *        If all of seriesIndex, seriesId, seriesName are not specified,\n *        visual will be fetched from first series.\n * @param {string} visualType 'color', 'symbol', 'symbolSize'\n */\nechartsProto.getVisual = function (finder, visualType) {\n    var ecModel = this._model;\n\n    finder = modelUtil.parseFinder(ecModel, finder, {defaultMainType: 'series'});\n\n    var seriesModel = finder.seriesModel;\n\n    if (__DEV__) {\n        if (!seriesModel) {\n            console.warn('There is no specified seires model');\n        }\n    }\n\n    var data = seriesModel.getData();\n\n    var dataIndexInside = finder.hasOwnProperty('dataIndexInside')\n        ? finder.dataIndexInside\n        : finder.hasOwnProperty('dataIndex')\n        ? data.indexOfRawIndex(finder.dataIndex)\n        : null;\n\n    return dataIndexInside != null\n        ? data.getItemVisual(dataIndexInside, visualType)\n        : data.getVisual(visualType);\n};\n\n/**\n * Get view of corresponding component model\n * @param  {module:echarts/model/Component} componentModel\n * @return {module:echarts/view/Component}\n */\nechartsProto.getViewOfComponentModel = function (componentModel) {\n    return this._componentsMap[componentModel.__viewId];\n};\n\n/**\n * Get view of corresponding series model\n * @param  {module:echarts/model/Series} seriesModel\n * @return {module:echarts/view/Chart}\n */\nechartsProto.getViewOfSeriesModel = function (seriesModel) {\n    return this._chartsMap[seriesModel.__viewId];\n};\n\nvar updateMethods = {\n\n    prepareAndUpdate: function (payload) {\n        prepare(this);\n        updateMethods.update.call(this, payload);\n    },\n\n    /**\n     * @param {Object} payload\n     * @private\n     */\n    update: function (payload) {\n        // console.profile && console.profile('update');\n\n        var ecModel = this._model;\n        var api = this._api;\n        var zr = this._zr;\n        var coordSysMgr = this._coordSysMgr;\n        var scheduler = this._scheduler;\n\n        // update before setOption\n        if (!ecModel) {\n            return;\n        }\n\n        scheduler.restoreData(ecModel, payload);\n\n        scheduler.performSeriesTasks(ecModel);\n\n        // TODO\n        // Save total ecModel here for undo/redo (after restoring data and before processing data).\n        // Undo (restoration of total ecModel) can be carried out in 'action' or outside API call.\n\n        // Create new coordinate system each update\n        // In LineView may save the old coordinate system and use it to get the orignal point\n        coordSysMgr.create(ecModel, api);\n\n        scheduler.performDataProcessorTasks(ecModel, payload);\n\n        // Current stream render is not supported in data process. So we can update\n        // stream modes after data processing, where the filtered data is used to\n        // deteming whether use progressive rendering.\n        updateStreamModes(this, ecModel);\n\n        // We update stream modes before coordinate system updated, then the modes info\n        // can be fetched when coord sys updating (consider the barGrid extent fix). But\n        // the drawback is the full coord info can not be fetched. Fortunately this full\n        // coord is not requied in stream mode updater currently.\n        coordSysMgr.update(ecModel, api);\n\n        clearColorPalette(ecModel);\n        scheduler.performVisualTasks(ecModel, payload);\n\n        render(this, ecModel, api, payload);\n\n        // Set background\n        var backgroundColor = ecModel.get('backgroundColor') || 'transparent';\n\n        // In IE8\n        if (!env.canvasSupported) {\n            var colorArr = colorTool.parse(backgroundColor);\n            backgroundColor = colorTool.stringify(colorArr, 'rgb');\n            if (colorArr[3] === 0) {\n                backgroundColor = 'transparent';\n            }\n        }\n        else {\n            zr.setBackgroundColor(backgroundColor);\n        }\n\n        performPostUpdateFuncs(ecModel, api);\n\n        // console.profile && console.profileEnd('update');\n    },\n\n    /**\n     * @param {Object} payload\n     * @private\n     */\n    updateTransform: function (payload) {\n        var ecModel = this._model;\n        var ecIns = this;\n        var api = this._api;\n\n        // update before setOption\n        if (!ecModel) {\n            return;\n        }\n\n        // ChartView.markUpdateMethod(payload, 'updateTransform');\n\n        var componentDirtyList = [];\n        ecModel.eachComponent(function (componentType, componentModel) {\n            var componentView = ecIns.getViewOfComponentModel(componentModel);\n            if (componentView && componentView.__alive) {\n                if (componentView.updateTransform) {\n                    var result = componentView.updateTransform(componentModel, ecModel, api, payload);\n                    result && result.update && componentDirtyList.push(componentView);\n                }\n                else {\n                    componentDirtyList.push(componentView);\n                }\n            }\n        });\n\n        var seriesDirtyMap = zrUtil.createHashMap();\n        ecModel.eachSeries(function (seriesModel) {\n            var chartView = ecIns._chartsMap[seriesModel.__viewId];\n            if (chartView.updateTransform) {\n                var result = chartView.updateTransform(seriesModel, ecModel, api, payload);\n                result && result.update && seriesDirtyMap.set(seriesModel.uid, 1);\n            }\n            else {\n                seriesDirtyMap.set(seriesModel.uid, 1);\n            }\n        });\n\n        clearColorPalette(ecModel);\n        // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n        // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true);\n        this._scheduler.performVisualTasks(\n            ecModel, payload, {setDirty: true, dirtyMap: seriesDirtyMap}\n        );\n\n        // Currently, not call render of components. Geo render cost a lot.\n        // renderComponents(ecIns, ecModel, api, payload, componentDirtyList);\n        renderSeries(ecIns, ecModel, api, payload, seriesDirtyMap);\n\n        performPostUpdateFuncs(ecModel, this._api);\n    },\n\n    /**\n     * @param {Object} payload\n     * @private\n     */\n    updateView: function (payload) {\n        var ecModel = this._model;\n\n        // update before setOption\n        if (!ecModel) {\n            return;\n        }\n\n        ChartView.markUpdateMethod(payload, 'updateView');\n\n        clearColorPalette(ecModel);\n\n        // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n        this._scheduler.performVisualTasks(ecModel, payload, {setDirty: true});\n\n        render(this, this._model, this._api, payload);\n\n        performPostUpdateFuncs(ecModel, this._api);\n    },\n\n    /**\n     * @param {Object} payload\n     * @private\n     */\n    updateVisual: function (payload) {\n        updateMethods.update.call(this, payload);\n\n        // var ecModel = this._model;\n\n        // // update before setOption\n        // if (!ecModel) {\n        //     return;\n        // }\n\n        // ChartView.markUpdateMethod(payload, 'updateVisual');\n\n        // clearColorPalette(ecModel);\n\n        // // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n        // this._scheduler.performVisualTasks(ecModel, payload, {visualType: 'visual', setDirty: true});\n\n        // render(this, this._model, this._api, payload);\n\n        // performPostUpdateFuncs(ecModel, this._api);\n    },\n\n    /**\n     * @param {Object} payload\n     * @private\n     */\n    updateLayout: function (payload) {\n        updateMethods.update.call(this, payload);\n\n        // var ecModel = this._model;\n\n        // // update before setOption\n        // if (!ecModel) {\n        //     return;\n        // }\n\n        // ChartView.markUpdateMethod(payload, 'updateLayout');\n\n        // // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n        // // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true);\n        // this._scheduler.performVisualTasks(ecModel, payload, {setDirty: true});\n\n        // render(this, this._model, this._api, payload);\n\n        // performPostUpdateFuncs(ecModel, this._api);\n    }\n};\n\nfunction prepare(ecIns) {\n    var ecModel = ecIns._model;\n    var scheduler = ecIns._scheduler;\n\n    scheduler.restorePipelines(ecModel);\n\n    scheduler.prepareStageTasks();\n\n    prepareView(ecIns, 'component', ecModel, scheduler);\n\n    prepareView(ecIns, 'chart', ecModel, scheduler);\n\n    scheduler.plan();\n}\n\n/**\n * @private\n */\nfunction updateDirectly(ecIns, method, payload, mainType, subType) {\n    var ecModel = ecIns._model;\n\n    // broadcast\n    if (!mainType) {\n        // FIXME\n        // Chart will not be update directly here, except set dirty.\n        // But there is no such scenario now.\n        each(ecIns._componentsViews.concat(ecIns._chartsViews), callView);\n        return;\n    }\n\n    var query = {};\n    query[mainType + 'Id'] = payload[mainType + 'Id'];\n    query[mainType + 'Index'] = payload[mainType + 'Index'];\n    query[mainType + 'Name'] = payload[mainType + 'Name'];\n\n    var condition = {mainType: mainType, query: query};\n    subType && (condition.subType = subType); // subType may be '' by parseClassType;\n\n    var excludeSeriesId = payload.excludeSeriesId;\n    if (excludeSeriesId != null) {\n        excludeSeriesId = zrUtil.createHashMap(modelUtil.normalizeToArray(excludeSeriesId));\n    }\n\n    // If dispatchAction before setOption, do nothing.\n    ecModel && ecModel.eachComponent(condition, function (model) {\n        if (!excludeSeriesId || excludeSeriesId.get(model.id) == null) {\n            callView(ecIns[\n                mainType === 'series' ? '_chartsMap' : '_componentsMap'\n            ][model.__viewId]);\n        }\n    }, ecIns);\n\n    function callView(view) {\n        view && view.__alive && view[method] && view[method](\n            view.__model, ecModel, ecIns._api, payload\n        );\n    }\n}\n\n/**\n * Resize the chart\n * @param {Object} opts\n * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)\n * @param {boolean} [opts.silent=false]\n */\nechartsProto.resize = function (opts) {\n    if (__DEV__) {\n        assert(!this[IN_MAIN_PROCESS], '`resize` should not be called during main process.');\n    }\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n\n    this._zr.resize(opts);\n\n    var ecModel = this._model;\n\n    // Resize loading effect\n    this._loadingFX && this._loadingFX.resize();\n\n    if (!ecModel) {\n        return;\n    }\n\n    var optionChanged = ecModel.resetOption('media');\n\n    var silent = opts && opts.silent;\n\n    this[IN_MAIN_PROCESS] = true;\n\n    optionChanged && prepare(this);\n    updateMethods.update.call(this);\n\n    this[IN_MAIN_PROCESS] = false;\n\n    flushPendingActions.call(this, silent);\n\n    triggerUpdatedEvent.call(this, silent);\n};\n\nfunction updateStreamModes(ecIns, ecModel) {\n    var chartsMap = ecIns._chartsMap;\n    var scheduler = ecIns._scheduler;\n    ecModel.eachSeries(function (seriesModel) {\n        scheduler.updateStreamModes(seriesModel, chartsMap[seriesModel.__viewId]);\n    });\n}\n\n/**\n * Show loading effect\n * @param  {string} [name='default']\n * @param  {Object} [cfg]\n */\nechartsProto.showLoading = function (name, cfg) {\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n\n    if (isObject(name)) {\n        cfg = name;\n        name = '';\n    }\n    name = name || 'default';\n\n    this.hideLoading();\n    if (!loadingEffects[name]) {\n        if (__DEV__) {\n            console.warn('Loading effects ' + name + ' not exists.');\n        }\n        return;\n    }\n    var el = loadingEffects[name](this._api, cfg);\n    var zr = this._zr;\n    this._loadingFX = el;\n\n    zr.add(el);\n};\n\n/**\n * Hide loading effect\n */\nechartsProto.hideLoading = function () {\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n\n    this._loadingFX && this._zr.remove(this._loadingFX);\n    this._loadingFX = null;\n};\n\n/**\n * @param {Object} eventObj\n * @return {Object}\n */\nechartsProto.makeActionFromEvent = function (eventObj) {\n    var payload = zrUtil.extend({}, eventObj);\n    payload.type = eventActionMap[eventObj.type];\n    return payload;\n};\n\n/**\n * @pubilc\n * @param {Object} payload\n * @param {string} [payload.type] Action type\n * @param {Object|boolean} [opt] If pass boolean, means opt.silent\n * @param {boolean} [opt.silent=false] Whether trigger events.\n * @param {boolean} [opt.flush=undefined]\n *                  true: Flush immediately, and then pixel in canvas can be fetched\n *                      immediately. Caution: it might affect performance.\n *                  false: Not flush.\n *                  undefined: Auto decide whether perform flush.\n */\nechartsProto.dispatchAction = function (payload, opt) {\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n\n    if (!isObject(opt)) {\n        opt = {silent: !!opt};\n    }\n\n    if (!actions[payload.type]) {\n        return;\n    }\n\n    // Avoid dispatch action before setOption. Especially in `connect`.\n    if (!this._model) {\n        return;\n    }\n\n    // May dispatchAction in rendering procedure\n    if (this[IN_MAIN_PROCESS]) {\n        this._pendingActions.push(payload);\n        return;\n    }\n\n    doDispatchAction.call(this, payload, opt.silent);\n\n    if (opt.flush) {\n        this._zr.flush(true);\n    }\n    else if (opt.flush !== false && env.browser.weChat) {\n        // In WeChat embeded browser, `requestAnimationFrame` and `setInterval`\n        // hang when sliding page (on touch event), which cause that zr does not\n        // refresh util user interaction finished, which is not expected.\n        // But `dispatchAction` may be called too frequently when pan on touch\n        // screen, which impacts performance if do not throttle them.\n        this._throttledZrFlush();\n    }\n\n    flushPendingActions.call(this, opt.silent);\n\n    triggerUpdatedEvent.call(this, opt.silent);\n};\n\nfunction doDispatchAction(payload, silent) {\n    var payloadType = payload.type;\n    var escapeConnect = payload.escapeConnect;\n    var actionWrap = actions[payloadType];\n    var actionInfo = actionWrap.actionInfo;\n\n    var cptType = (actionInfo.update || 'update').split(':');\n    var updateMethod = cptType.pop();\n    cptType = cptType[0] != null && parseClassType(cptType[0]);\n\n    this[IN_MAIN_PROCESS] = true;\n\n    var payloads = [payload];\n    var batched = false;\n    // Batch action\n    if (payload.batch) {\n        batched = true;\n        payloads = zrUtil.map(payload.batch, function (item) {\n            item = zrUtil.defaults(zrUtil.extend({}, item), payload);\n            item.batch = null;\n            return item;\n        });\n    }\n\n    var eventObjBatch = [];\n    var eventObj;\n    var isHighDown = payloadType === 'highlight' || payloadType === 'downplay';\n\n    each(payloads, function (batchItem) {\n        // Action can specify the event by return it.\n        eventObj = actionWrap.action(batchItem, this._model, this._api);\n        // Emit event outside\n        eventObj = eventObj || zrUtil.extend({}, batchItem);\n        // Convert type to eventType\n        eventObj.type = actionInfo.event || eventObj.type;\n        eventObjBatch.push(eventObj);\n\n        // light update does not perform data process, layout and visual.\n        if (isHighDown) {\n            // method, payload, mainType, subType\n            updateDirectly(this, updateMethod, batchItem, 'series');\n        }\n        else if (cptType) {\n            updateDirectly(this, updateMethod, batchItem, cptType.main, cptType.sub);\n        }\n    }, this);\n\n    if (updateMethod !== 'none' && !isHighDown && !cptType) {\n        // Still dirty\n        if (this[OPTION_UPDATED]) {\n            // FIXME Pass payload ?\n            prepare(this);\n            updateMethods.update.call(this, payload);\n            this[OPTION_UPDATED] = false;\n        }\n        else {\n            updateMethods[updateMethod].call(this, payload);\n        }\n    }\n\n    // Follow the rule of action batch\n    if (batched) {\n        eventObj = {\n            type: actionInfo.event || payloadType,\n            escapeConnect: escapeConnect,\n            batch: eventObjBatch\n        };\n    }\n    else {\n        eventObj = eventObjBatch[0];\n    }\n\n    this[IN_MAIN_PROCESS] = false;\n\n    !silent && this._messageCenter.trigger(eventObj.type, eventObj);\n}\n\nfunction flushPendingActions(silent) {\n    var pendingActions = this._pendingActions;\n    while (pendingActions.length) {\n        var payload = pendingActions.shift();\n        doDispatchAction.call(this, payload, silent);\n    }\n}\n\nfunction triggerUpdatedEvent(silent) {\n    !silent && this.trigger('updated');\n}\n\n/**\n * Event `rendered` is triggered when zr\n * rendered. It is useful for realtime\n * snapshot (reflect animation).\n *\n * Event `finished` is triggered when:\n * (1) zrender rendering finished.\n * (2) initial animation finished.\n * (3) progressive rendering finished.\n * (4) no pending action.\n * (5) no delayed setOption needs to be processed.\n */\nfunction bindRenderedEvent(zr, ecIns) {\n    zr.on('rendered', function () {\n\n        ecIns.trigger('rendered');\n\n        // The `finished` event should not be triggered repeatly,\n        // so it should only be triggered when rendering indeed happend\n        // in zrender. (Consider the case that dipatchAction is keep\n        // triggering when mouse move).\n        if (\n            // Although zr is dirty if initial animation is not finished\n            // and this checking is called on frame, we also check\n            // animation finished for robustness.\n            zr.animation.isFinished()\n            && !ecIns[OPTION_UPDATED]\n            && !ecIns._scheduler.unfinished\n            && !ecIns._pendingActions.length\n        ) {\n            ecIns.trigger('finished');\n        }\n    });\n}\n\n/**\n * @param {Object} params\n * @param {number} params.seriesIndex\n * @param {Array|TypedArray} params.data\n */\nechartsProto.appendData = function (params) {\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n\n    var seriesIndex = params.seriesIndex;\n    var ecModel = this.getModel();\n    var seriesModel = ecModel.getSeriesByIndex(seriesIndex);\n\n    if (__DEV__) {\n        assert(params.data && seriesModel);\n    }\n\n    seriesModel.appendData(params);\n\n    // Note: `appendData` does not support that update extent of coordinate\n    // system, util some scenario require that. In the expected usage of\n    // `appendData`, the initial extent of coordinate system should better\n    // be fixed by axis `min`/`max` setting or initial data, otherwise if\n    // the extent changed while `appendData`, the location of the painted\n    // graphic elements have to be changed, which make the usage of\n    // `appendData` meaningless.\n\n    this._scheduler.unfinished = true;\n};\n\n/**\n * Register event\n * @method\n */\nechartsProto.on = createRegisterEventWithLowercaseName('on', false);\nechartsProto.off = createRegisterEventWithLowercaseName('off', false);\nechartsProto.one = createRegisterEventWithLowercaseName('one', false);\n\n/**\n * Prepare view instances of charts and components\n * @param  {module:echarts/model/Global} ecModel\n * @private\n */\nfunction prepareView(ecIns, type, ecModel, scheduler) {\n    var isComponent = type === 'component';\n    var viewList = isComponent ? ecIns._componentsViews : ecIns._chartsViews;\n    var viewMap = isComponent ? ecIns._componentsMap : ecIns._chartsMap;\n    var zr = ecIns._zr;\n    var api = ecIns._api;\n\n    for (var i = 0; i < viewList.length; i++) {\n        viewList[i].__alive = false;\n    }\n\n    isComponent\n        ? ecModel.eachComponent(function (componentType, model) {\n            componentType !== 'series' && doPrepare(model);\n        })\n        : ecModel.eachSeries(doPrepare);\n\n    function doPrepare(model) {\n        // Consider: id same and type changed.\n        var viewId = '_ec_' + model.id + '_' + model.type;\n        var view = viewMap[viewId];\n        if (!view) {\n            var classType = parseClassType(model.type);\n            var Clazz = isComponent\n                ? ComponentView.getClass(classType.main, classType.sub)\n                : ChartView.getClass(classType.sub);\n\n            if (__DEV__) {\n                assert(Clazz, classType.sub + ' does not exist.');\n            }\n\n            view = new Clazz();\n            view.init(ecModel, api);\n            viewMap[viewId] = view;\n            viewList.push(view);\n            zr.add(view.group);\n        }\n\n        model.__viewId = view.__id = viewId;\n        view.__alive = true;\n        view.__model = model;\n        view.group.__ecComponentInfo = {\n            mainType: model.mainType,\n            index: model.componentIndex\n        };\n        !isComponent && scheduler.prepareView(view, model, ecModel, api);\n    }\n\n    for (var i = 0; i < viewList.length;) {\n        var view = viewList[i];\n        if (!view.__alive) {\n            !isComponent && view.renderTask.dispose();\n            zr.remove(view.group);\n            view.dispose(ecModel, api);\n            viewList.splice(i, 1);\n            delete viewMap[view.__id];\n            view.__id = view.group.__ecComponentInfo = null;\n        }\n        else {\n            i++;\n        }\n    }\n}\n\n// /**\n//  * Encode visual infomation from data after data processing\n//  *\n//  * @param {module:echarts/model/Global} ecModel\n//  * @param {object} layout\n//  * @param {boolean} [layoutFilter] `true`: only layout,\n//  *                                 `false`: only not layout,\n//  *                                 `null`/`undefined`: all.\n//  * @param {string} taskBaseTag\n//  * @private\n//  */\n// function startVisualEncoding(ecIns, ecModel, api, payload, layoutFilter) {\n//     each(visualFuncs, function (visual, index) {\n//         var isLayout = visual.isLayout;\n//         if (layoutFilter == null\n//             || (layoutFilter === false && !isLayout)\n//             || (layoutFilter === true && isLayout)\n//         ) {\n//             visual.func(ecModel, api, payload);\n//         }\n//     });\n// }\n\nfunction clearColorPalette(ecModel) {\n    ecModel.clearColorPalette();\n    ecModel.eachSeries(function (seriesModel) {\n        seriesModel.clearColorPalette();\n    });\n}\n\nfunction render(ecIns, ecModel, api, payload) {\n\n    renderComponents(ecIns, ecModel, api, payload);\n\n    each(ecIns._chartsViews, function (chart) {\n        chart.__alive = false;\n    });\n\n    renderSeries(ecIns, ecModel, api, payload);\n\n    // Remove groups of unrendered charts\n    each(ecIns._chartsViews, function (chart) {\n        if (!chart.__alive) {\n            chart.remove(ecModel, api);\n        }\n    });\n}\n\nfunction renderComponents(ecIns, ecModel, api, payload, dirtyList) {\n    each(dirtyList || ecIns._componentsViews, function (componentView) {\n        var componentModel = componentView.__model;\n        componentView.render(componentModel, ecModel, api, payload);\n\n        updateZ(componentModel, componentView);\n    });\n}\n\n/**\n * Render each chart and component\n * @private\n */\nfunction renderSeries(ecIns, ecModel, api, payload, dirtyMap) {\n    // Render all charts\n    var scheduler = ecIns._scheduler;\n    var unfinished;\n    ecModel.eachSeries(function (seriesModel) {\n        var chartView = ecIns._chartsMap[seriesModel.__viewId];\n        chartView.__alive = true;\n\n        var renderTask = chartView.renderTask;\n        scheduler.updatePayload(renderTask, payload);\n\n        if (dirtyMap && dirtyMap.get(seriesModel.uid)) {\n            renderTask.dirty();\n        }\n\n        unfinished |= renderTask.perform(scheduler.getPerformArgs(renderTask));\n\n        chartView.group.silent = !!seriesModel.get('silent');\n\n        updateZ(seriesModel, chartView);\n\n        updateBlend(seriesModel, chartView);\n    });\n    scheduler.unfinished |= unfinished;\n\n    // If use hover layer\n    updateHoverLayerStatus(ecIns, ecModel);\n\n    // Add aria\n    aria(ecIns._zr.dom, ecModel);\n}\n\nfunction performPostUpdateFuncs(ecModel, api) {\n    each(postUpdateFuncs, function (func) {\n        func(ecModel, api);\n    });\n}\n\n\nvar MOUSE_EVENT_NAMES = [\n    'click', 'dblclick', 'mouseover', 'mouseout', 'mousemove',\n    'mousedown', 'mouseup', 'globalout', 'contextmenu'\n];\n\n/**\n * @private\n */\nechartsProto._initEvents = function () {\n    each(MOUSE_EVENT_NAMES, function (eveName) {\n        var handler = function (e) {\n            var ecModel = this.getModel();\n            var el = e.target;\n            var params;\n            var isGlobalOut = eveName === 'globalout';\n\n            // no e.target when 'globalout'.\n            if (isGlobalOut) {\n                params = {};\n            }\n            else if (el && el.dataIndex != null) {\n                var dataModel = el.dataModel || ecModel.getSeriesByIndex(el.seriesIndex);\n                params = dataModel && dataModel.getDataParams(el.dataIndex, el.dataType, el) || {};\n            }\n            // If element has custom eventData of components\n            else if (el && el.eventData) {\n                params = zrUtil.extend({}, el.eventData);\n            }\n\n            // Contract: if params prepared in mouse event,\n            // these properties must be specified:\n            // {\n            //    componentType: string (component main type)\n            //    componentIndex: number\n            // }\n            // Otherwise event query can not work.\n\n            if (params) {\n                var componentType = params.componentType;\n                var componentIndex = params.componentIndex;\n                // Special handling for historic reason: when trigger by\n                // markLine/markPoint/markArea, the componentType is\n                // 'markLine'/'markPoint'/'markArea', but we should better\n                // enable them to be queried by seriesIndex, since their\n                // option is set in each series.\n                if (componentType === 'markLine'\n                    || componentType === 'markPoint'\n                    || componentType === 'markArea'\n                ) {\n                    componentType = 'series';\n                    componentIndex = params.seriesIndex;\n                }\n                var model = componentType && componentIndex != null\n                    && ecModel.getComponent(componentType, componentIndex);\n                var view = model && this[\n                    model.mainType === 'series' ? '_chartsMap' : '_componentsMap'\n                ][model.__viewId];\n\n                if (__DEV__) {\n                    // `event.componentType` and `event[componentTpype + 'Index']` must not\n                    // be missed, otherwise there is no way to distinguish source component.\n                    // See `dataFormat.getDataParams`.\n                    if (!isGlobalOut && !(model && view)) {\n                        console.warn('model or view can not be found by params');\n                    }\n                }\n\n                params.event = e;\n                params.type = eveName;\n\n                this._ecEventProcessor.eventInfo = {\n                    targetEl: el,\n                    packedEvent: params,\n                    model: model,\n                    view: view\n                };\n\n                this.trigger(eveName, params);\n            }\n        };\n        // Consider that some component (like tooltip, brush, ...)\n        // register zr event handler, but user event handler might\n        // do anything, such as call `setOption` or `dispatchAction`,\n        // which probably update any of the content and probably\n        // cause problem if it is called previous other inner handlers.\n        handler.zrEventfulCallAtLast = true;\n        this._zr.on(eveName, handler, this);\n    }, this);\n\n    each(eventActionMap, function (actionType, eventType) {\n        this._messageCenter.on(eventType, function (event) {\n            this.trigger(eventType, event);\n        }, this);\n    }, this);\n};\n\n/**\n * @return {boolean}\n */\nechartsProto.isDisposed = function () {\n    return this._disposed;\n};\n\n/**\n * Clear\n */\nechartsProto.clear = function () {\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n    this.setOption({ series: [] }, true);\n};\n\n/**\n * Dispose instance\n */\nechartsProto.dispose = function () {\n    if (this._disposed) {\n        disposedWarning(this.id);\n        return;\n    }\n    this._disposed = true;\n\n    modelUtil.setAttribute(this.getDom(), DOM_ATTRIBUTE_KEY, '');\n\n    var api = this._api;\n    var ecModel = this._model;\n\n    each(this._componentsViews, function (component) {\n        component.dispose(ecModel, api);\n    });\n    each(this._chartsViews, function (chart) {\n        chart.dispose(ecModel, api);\n    });\n\n    // Dispose after all views disposed\n    this._zr.dispose();\n\n    delete instances[this.id];\n};\n\nzrUtil.mixin(ECharts, Eventful);\n\nfunction disposedWarning(id) {\n    if (__DEV__) {\n        console.warn('Instance ' + id + ' has been disposed');\n    }\n}\n\nfunction updateHoverLayerStatus(ecIns, ecModel) {\n    var zr = ecIns._zr;\n    var storage = zr.storage;\n    var elCount = 0;\n\n    storage.traverse(function (el) {\n        elCount++;\n    });\n\n    if (elCount > ecModel.get('hoverLayerThreshold') && !env.node) {\n        ecModel.eachSeries(function (seriesModel) {\n            if (seriesModel.preventUsingHoverLayer) {\n                return;\n            }\n            var chartView = ecIns._chartsMap[seriesModel.__viewId];\n            if (chartView.__alive) {\n                chartView.group.traverse(function (el) {\n                    // Don't switch back.\n                    el.useHoverLayer = true;\n                });\n            }\n        });\n    }\n}\n\n/**\n * Update chart progressive and blend.\n * @param {module:echarts/model/Series|module:echarts/model/Component} model\n * @param {module:echarts/view/Component|module:echarts/view/Chart} view\n */\nfunction updateBlend(seriesModel, chartView) {\n    var blendMode = seriesModel.get('blendMode') || null;\n    if (__DEV__) {\n        if (!env.canvasSupported && blendMode && blendMode !== 'source-over') {\n            console.warn('Only canvas support blendMode');\n        }\n    }\n    chartView.group.traverse(function (el) {\n        // FIXME marker and other components\n        if (!el.isGroup) {\n            // Only set if blendMode is changed. In case element is incremental and don't wan't to rerender.\n            if (el.style.blend !== blendMode) {\n                el.setStyle('blend', blendMode);\n            }\n        }\n        if (el.eachPendingDisplayable) {\n            el.eachPendingDisplayable(function (displayable) {\n                displayable.setStyle('blend', blendMode);\n            });\n        }\n    });\n}\n\n/**\n * @param {module:echarts/model/Series|module:echarts/model/Component} model\n * @param {module:echarts/view/Component|module:echarts/view/Chart} view\n */\nfunction updateZ(model, view) {\n    var z = model.get('z');\n    var zlevel = model.get('zlevel');\n    // Set z and zlevel\n    view.group.traverse(function (el) {\n        if (el.type !== 'group') {\n            z != null && (el.z = z);\n            zlevel != null && (el.zlevel = zlevel);\n        }\n    });\n}\n\nfunction createExtensionAPI(ecInstance) {\n    var coordSysMgr = ecInstance._coordSysMgr;\n    return zrUtil.extend(new ExtensionAPI(ecInstance), {\n        // Inject methods\n        getCoordinateSystems: zrUtil.bind(\n            coordSysMgr.getCoordinateSystems, coordSysMgr\n        ),\n        getComponentByElement: function (el) {\n            while (el) {\n                var modelInfo = el.__ecComponentInfo;\n                if (modelInfo != null) {\n                    return ecInstance._model.getComponent(modelInfo.mainType, modelInfo.index);\n                }\n                el = el.parent;\n            }\n        }\n    });\n}\n\n\n/**\n * @class\n * Usage of query:\n * `chart.on('click', query, handler);`\n * The `query` can be:\n * + The component type query string, only `mainType` or `mainType.subType`,\n *   like: 'xAxis', 'series', 'xAxis.category' or 'series.line'.\n * + The component query object, like:\n *   `{seriesIndex: 2}`, `{seriesName: 'xx'}`, `{seriesId: 'some'}`,\n *   `{xAxisIndex: 2}`, `{xAxisName: 'xx'}`, `{xAxisId: 'some'}`.\n * + The data query object, like:\n *   `{dataIndex: 123}`, `{dataType: 'link'}`, `{name: 'some'}`.\n * + The other query object (cmponent customized query), like:\n *   `{element: 'some'}` (only available in custom series).\n *\n * Caveat: If a prop in the `query` object is `null/undefined`, it is the\n * same as there is no such prop in the `query` object.\n */\nfunction EventProcessor() {\n    // These info required: targetEl, packedEvent, model, view\n    this.eventInfo;\n}\nEventProcessor.prototype = {\n    constructor: EventProcessor,\n\n    normalizeQuery: function (query) {\n        var cptQuery = {};\n        var dataQuery = {};\n        var otherQuery = {};\n\n        // `query` is `mainType` or `mainType.subType` of component.\n        if (zrUtil.isString(query)) {\n            var condCptType = parseClassType(query);\n            // `.main` and `.sub` may be ''.\n            cptQuery.mainType = condCptType.main || null;\n            cptQuery.subType = condCptType.sub || null;\n        }\n        // `query` is an object, convert to {mainType, index, name, id}.\n        else {\n            // `xxxIndex`, `xxxName`, `xxxId`, `name`, `dataIndex`, `dataType` is reserved,\n            // can not be used in `compomentModel.filterForExposedEvent`.\n            var suffixes = ['Index', 'Name', 'Id'];\n            var dataKeys = {name: 1, dataIndex: 1, dataType: 1};\n            zrUtil.each(query, function (val, key) {\n                var reserved = false;\n                for (var i = 0; i < suffixes.length; i++) {\n                    var propSuffix = suffixes[i];\n                    var suffixPos = key.lastIndexOf(propSuffix);\n                    if (suffixPos > 0 && suffixPos === key.length - propSuffix.length) {\n                        var mainType = key.slice(0, suffixPos);\n                        // Consider `dataIndex`.\n                        if (mainType !== 'data') {\n                            cptQuery.mainType = mainType;\n                            cptQuery[propSuffix.toLowerCase()] = val;\n                            reserved = true;\n                        }\n                    }\n                }\n                if (dataKeys.hasOwnProperty(key)) {\n                    dataQuery[key] = val;\n                    reserved = true;\n                }\n                if (!reserved) {\n                    otherQuery[key] = val;\n                }\n            });\n        }\n\n        return {\n            cptQuery: cptQuery,\n            dataQuery: dataQuery,\n            otherQuery: otherQuery\n        };\n    },\n\n    filter: function (eventType, query, args) {\n        // They should be assigned before each trigger call.\n        var eventInfo = this.eventInfo;\n\n        if (!eventInfo) {\n            return true;\n        }\n\n        var targetEl = eventInfo.targetEl;\n        var packedEvent = eventInfo.packedEvent;\n        var model = eventInfo.model;\n        var view = eventInfo.view;\n\n        // For event like 'globalout'.\n        if (!model || !view) {\n            return true;\n        }\n\n        var cptQuery = query.cptQuery;\n        var dataQuery = query.dataQuery;\n\n        return check(cptQuery, model, 'mainType')\n            && check(cptQuery, model, 'subType')\n            && check(cptQuery, model, 'index', 'componentIndex')\n            && check(cptQuery, model, 'name')\n            && check(cptQuery, model, 'id')\n            && check(dataQuery, packedEvent, 'name')\n            && check(dataQuery, packedEvent, 'dataIndex')\n            && check(dataQuery, packedEvent, 'dataType')\n            && (!view.filterForExposedEvent || view.filterForExposedEvent(\n                eventType, query.otherQuery, targetEl, packedEvent\n            ));\n\n        function check(query, host, prop, propOnHost) {\n            return query[prop] == null || host[propOnHost || prop] === query[prop];\n        }\n    },\n\n    afterTrigger: function () {\n        // Make sure the eventInfo wont be used in next trigger.\n        this.eventInfo = null;\n    }\n};\n\n\n/**\n * @type {Object} key: actionType.\n * @inner\n */\nvar actions = {};\n\n/**\n * Map eventType to actionType\n * @type {Object}\n */\nvar eventActionMap = {};\n\n/**\n * Data processor functions of each stage\n * @type {Array.<Object.<string, Function>>}\n * @inner\n */\nvar dataProcessorFuncs = [];\n\n/**\n * @type {Array.<Function>}\n * @inner\n */\nvar optionPreprocessorFuncs = [];\n\n/**\n * @type {Array.<Function>}\n * @inner\n */\nvar postUpdateFuncs = [];\n\n/**\n * Visual encoding functions of each stage\n * @type {Array.<Object.<string, Function>>}\n */\nvar visualFuncs = [];\n\n/**\n * Theme storage\n * @type {Object.<key, Object>}\n */\nvar themeStorage = {};\n/**\n * Loading effects\n */\nvar loadingEffects = {};\n\nvar instances = {};\nvar connectedGroups = {};\n\nvar idBase = new Date() - 0;\nvar groupIdBase = new Date() - 0;\nvar DOM_ATTRIBUTE_KEY = '_echarts_instance_';\n\nfunction enableConnect(chart) {\n    var STATUS_PENDING = 0;\n    var STATUS_UPDATING = 1;\n    var STATUS_UPDATED = 2;\n    var STATUS_KEY = '__connectUpdateStatus';\n\n    function updateConnectedChartsStatus(charts, status) {\n        for (var i = 0; i < charts.length; i++) {\n            var otherChart = charts[i];\n            otherChart[STATUS_KEY] = status;\n        }\n    }\n\n    each(eventActionMap, function (actionType, eventType) {\n        chart._messageCenter.on(eventType, function (event) {\n            if (connectedGroups[chart.group] && chart[STATUS_KEY] !== STATUS_PENDING) {\n                if (event && event.escapeConnect) {\n                    return;\n                }\n\n                var action = chart.makeActionFromEvent(event);\n                var otherCharts = [];\n\n                each(instances, function (otherChart) {\n                    if (otherChart !== chart && otherChart.group === chart.group) {\n                        otherCharts.push(otherChart);\n                    }\n                });\n\n                updateConnectedChartsStatus(otherCharts, STATUS_PENDING);\n                each(otherCharts, function (otherChart) {\n                    if (otherChart[STATUS_KEY] !== STATUS_UPDATING) {\n                        otherChart.dispatchAction(action);\n                    }\n                });\n                updateConnectedChartsStatus(otherCharts, STATUS_UPDATED);\n            }\n        });\n    });\n}\n\n/**\n * @param {HTMLElement} dom\n * @param {Object} [theme]\n * @param {Object} opts\n * @param {number} [opts.devicePixelRatio] Use window.devicePixelRatio by default\n * @param {string} [opts.renderer] Can choose 'canvas' or 'svg' to render the chart.\n * @param {number} [opts.width] Use clientWidth of the input `dom` by default.\n *                              Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Use clientHeight of the input `dom` by default.\n *                               Can be 'auto' (the same as null/undefined)\n */\nexport function init(dom, theme, opts) {\n    if (__DEV__) {\n        // Check version\n        if ((zrender.version.replace('.', '') - 0) < (dependencies.zrender.replace('.', '') - 0)) {\n            throw new Error(\n                'zrender/src ' + zrender.version\n                + ' is too old for ECharts ' + version\n                + '. Current version need ZRender '\n                + dependencies.zrender + '+'\n            );\n        }\n\n        if (!dom) {\n            throw new Error('Initialize failed: invalid dom.');\n        }\n    }\n\n    var existInstance = getInstanceByDom(dom);\n    if (existInstance) {\n        if (__DEV__) {\n            console.warn('There is a chart instance already initialized on the dom.');\n        }\n        return existInstance;\n    }\n\n    if (__DEV__) {\n        if (zrUtil.isDom(dom)\n            && dom.nodeName.toUpperCase() !== 'CANVAS'\n            && (\n                (!dom.clientWidth && (!opts || opts.width == null))\n                || (!dom.clientHeight && (!opts || opts.height == null))\n            )\n        ) {\n            console.warn('Can\\'t get DOM width or height. Please check '\n            + 'dom.clientWidth and dom.clientHeight. They should not be 0.'\n            + 'For example, you may need to call this in the callback '\n            + 'of window.onload.');\n        }\n    }\n\n    var chart = new ECharts(dom, theme, opts);\n    chart.id = 'ec_' + idBase++;\n    instances[chart.id] = chart;\n\n    modelUtil.setAttribute(dom, DOM_ATTRIBUTE_KEY, chart.id);\n\n    enableConnect(chart);\n\n    return chart;\n}\n\n/**\n * @return {string|Array.<module:echarts~ECharts>} groupId\n */\nexport function connect(groupId) {\n    // Is array of charts\n    if (zrUtil.isArray(groupId)) {\n        var charts = groupId;\n        groupId = null;\n        // If any chart has group\n        each(charts, function (chart) {\n            if (chart.group != null) {\n                groupId = chart.group;\n            }\n        });\n        groupId = groupId || ('g_' + groupIdBase++);\n        each(charts, function (chart) {\n            chart.group = groupId;\n        });\n    }\n    connectedGroups[groupId] = true;\n    return groupId;\n}\n\n/**\n * @DEPRECATED\n * @return {string} groupId\n */\nexport function disConnect(groupId) {\n    connectedGroups[groupId] = false;\n}\n\n/**\n * @return {string} groupId\n */\nexport var disconnect = disConnect;\n\n/**\n * Dispose a chart instance\n * @param  {module:echarts~ECharts|HTMLDomElement|string} chart\n */\nexport function dispose(chart) {\n    if (typeof chart === 'string') {\n        chart = instances[chart];\n    }\n    else if (!(chart instanceof ECharts)) {\n        // Try to treat as dom\n        chart = getInstanceByDom(chart);\n    }\n    if ((chart instanceof ECharts) && !chart.isDisposed()) {\n        chart.dispose();\n    }\n}\n\n/**\n * @param  {HTMLElement} dom\n * @return {echarts~ECharts}\n */\nexport function getInstanceByDom(dom) {\n    return instances[modelUtil.getAttribute(dom, DOM_ATTRIBUTE_KEY)];\n}\n\n/**\n * @param {string} key\n * @return {echarts~ECharts}\n */\nexport function getInstanceById(key) {\n    return instances[key];\n}\n\n/**\n * Register theme\n */\nexport function registerTheme(name, theme) {\n    themeStorage[name] = theme;\n}\n\n/**\n * Register option preprocessor\n * @param {Function} preprocessorFunc\n */\nexport function registerPreprocessor(preprocessorFunc) {\n    optionPreprocessorFuncs.push(preprocessorFunc);\n}\n\n/**\n * @param {number} [priority=1000]\n * @param {Object|Function} processor\n */\nexport function registerProcessor(priority, processor) {\n    normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_FILTER);\n}\n\n/**\n * Register postUpdater\n * @param {Function} postUpdateFunc\n */\nexport function registerPostUpdate(postUpdateFunc) {\n    postUpdateFuncs.push(postUpdateFunc);\n}\n\n/**\n * Usage:\n * registerAction('someAction', 'someEvent', function () { ... });\n * registerAction('someAction', function () { ... });\n * registerAction(\n *     {type: 'someAction', event: 'someEvent', update: 'updateView'},\n *     function () { ... }\n * );\n *\n * @param {(string|Object)} actionInfo\n * @param {string} actionInfo.type\n * @param {string} [actionInfo.event]\n * @param {string} [actionInfo.update]\n * @param {string} [eventName]\n * @param {Function} action\n */\nexport function registerAction(actionInfo, eventName, action) {\n    if (typeof eventName === 'function') {\n        action = eventName;\n        eventName = '';\n    }\n    var actionType = isObject(actionInfo)\n        ? actionInfo.type\n        : ([actionInfo, actionInfo = {\n            event: eventName\n        }][0]);\n\n    // Event name is all lowercase\n    actionInfo.event = (actionInfo.event || actionType).toLowerCase();\n    eventName = actionInfo.event;\n\n    // Validate action type and event name.\n    assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName));\n\n    if (!actions[actionType]) {\n        actions[actionType] = {action: action, actionInfo: actionInfo};\n    }\n    eventActionMap[eventName] = actionType;\n}\n\n/**\n * @param {string} type\n * @param {*} CoordinateSystem\n */\nexport function registerCoordinateSystem(type, CoordinateSystem) {\n    CoordinateSystemManager.register(type, CoordinateSystem);\n}\n\n/**\n * Get dimensions of specified coordinate system.\n * @param {string} type\n * @return {Array.<string|Object>}\n */\nexport function getCoordinateSystemDimensions(type) {\n    var coordSysCreator = CoordinateSystemManager.get(type);\n    if (coordSysCreator) {\n        return coordSysCreator.getDimensionsInfo\n                ? coordSysCreator.getDimensionsInfo()\n                : coordSysCreator.dimensions.slice();\n    }\n}\n\n/**\n * Layout is a special stage of visual encoding\n * Most visual encoding like color are common for different chart\n * But each chart has it's own layout algorithm\n *\n * @param {number} [priority=1000]\n * @param {Function} layoutTask\n */\nexport function registerLayout(priority, layoutTask) {\n    normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, 'layout');\n}\n\n/**\n * @param {number} [priority=3000]\n * @param {module:echarts/stream/Task} visualTask\n */\nexport function registerVisual(priority, visualTask) {\n    normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, 'visual');\n}\n\n/**\n * @param {Object|Function} fn: {seriesType, createOnAllSeries, performRawSeries, reset}\n */\nfunction normalizeRegister(targetList, priority, fn, defaultPriority, visualType) {\n    if (isFunction(priority) || isObject(priority)) {\n        fn = priority;\n        priority = defaultPriority;\n    }\n\n    if (__DEV__) {\n        if (isNaN(priority) || priority == null) {\n            throw new Error('Illegal priority');\n        }\n        // Check duplicate\n        each(targetList, function (wrap) {\n            assert(wrap.__raw !== fn);\n        });\n    }\n\n    var stageHandler = Scheduler.wrapStageHandler(fn, visualType);\n\n    stageHandler.__prio = priority;\n    stageHandler.__raw = fn;\n    targetList.push(stageHandler);\n\n    return stageHandler;\n}\n\n/**\n * @param {string} name\n */\nexport function registerLoading(name, loadingFx) {\n    loadingEffects[name] = loadingFx;\n}\n\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\nexport function extendComponentModel(opts/*, superClass*/) {\n    // var Clazz = ComponentModel;\n    // if (superClass) {\n    //     var classType = parseClassType(superClass);\n    //     Clazz = ComponentModel.getClass(classType.main, classType.sub, true);\n    // }\n    return ComponentModel.extend(opts);\n}\n\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\nexport function extendComponentView(opts/*, superClass*/) {\n    // var Clazz = ComponentView;\n    // if (superClass) {\n    //     var classType = parseClassType(superClass);\n    //     Clazz = ComponentView.getClass(classType.main, classType.sub, true);\n    // }\n    return ComponentView.extend(opts);\n}\n\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\nexport function extendSeriesModel(opts/*, superClass*/) {\n    // var Clazz = SeriesModel;\n    // if (superClass) {\n    //     superClass = 'series.' + superClass.replace('series.', '');\n    //     var classType = parseClassType(superClass);\n    //     Clazz = ComponentModel.getClass(classType.main, classType.sub, true);\n    // }\n    return SeriesModel.extend(opts);\n}\n\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\nexport function extendChartView(opts/*, superClass*/) {\n    // var Clazz = ChartView;\n    // if (superClass) {\n    //     superClass = superClass.replace('series.', '');\n    //     var classType = parseClassType(superClass);\n    //     Clazz = ChartView.getClass(classType.main, true);\n    // }\n    return ChartView.extend(opts);\n}\n\n/**\n * ZRender need a canvas context to do measureText.\n * But in node environment canvas may be created by node-canvas.\n * So we need to specify how to create a canvas instead of using document.createElement('canvas')\n *\n * Be careful of using it in the browser.\n *\n * @param {Function} creator\n * @example\n *     var Canvas = require('canvas');\n *     var echarts = require('echarts');\n *     echarts.setCanvasCreator(function () {\n *         // Small size is enough.\n *         return new Canvas(32, 32);\n *     });\n */\nexport function setCanvasCreator(creator) {\n    zrUtil.$override('createCanvas', creator);\n}\n\n/**\n * @param {string} mapName\n * @param {Array.<Object>|Object|string} geoJson\n * @param {Object} [specialAreas]\n *\n * @example GeoJSON\n *     $.get('USA.json', function (geoJson) {\n *         echarts.registerMap('USA', geoJson);\n *         // Or\n *         echarts.registerMap('USA', {\n *             geoJson: geoJson,\n *             specialAreas: {}\n *         })\n *     });\n *\n *     $.get('airport.svg', function (svg) {\n *         echarts.registerMap('airport', {\n *             svg: svg\n *         }\n *     });\n *\n *     echarts.registerMap('eu', [\n *         {svg: eu-topographic.svg},\n *         {geoJSON: eu.json}\n *     ])\n */\nexport function registerMap(mapName, geoJson, specialAreas) {\n    mapDataStorage.registerMap(mapName, geoJson, specialAreas);\n}\n\n/**\n * @param {string} mapName\n * @return {Object}\n */\nexport function getMap(mapName) {\n    // For backward compatibility, only return the first one.\n    var records = mapDataStorage.retrieveMap(mapName);\n    return records && records[0] && {\n        geoJson: records[0].geoJSON,\n        specialAreas: records[0].specialAreas\n    };\n}\n\nregisterVisual(PRIORITY_VISUAL_GLOBAL, seriesColor);\nregisterPreprocessor(backwardCompat);\nregisterProcessor(PRIORITY_PROCESSOR_DATASTACK, dataStack);\nregisterLoading('default', loadingDefault);\n\n// Default actions\n\nregisterAction({\n    type: 'highlight',\n    event: 'highlight',\n    update: 'highlight'\n}, zrUtil.noop);\n\nregisterAction({\n    type: 'downplay',\n    event: 'downplay',\n    update: 'downplay'\n}, zrUtil.noop);\n\n// Default theme\nregisterTheme('light', lightTheme);\nregisterTheme('dark', darkTheme);\n\n// For backward compatibility, where the namespace `dataTool` will\n// be mounted on `echarts` is the extension `dataTool` is imported.\nexport var dataTool = {};\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\nfunction defaultKeyGetter(item) {\n    return item;\n}\n\n/**\n * @param {Array} oldArr\n * @param {Array} newArr\n * @param {Function} oldKeyGetter\n * @param {Function} newKeyGetter\n * @param {Object} [context] Can be visited by this.context in callback.\n */\nfunction DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter, context) {\n    this._old = oldArr;\n    this._new = newArr;\n\n    this._oldKeyGetter = oldKeyGetter || defaultKeyGetter;\n    this._newKeyGetter = newKeyGetter || defaultKeyGetter;\n\n    this.context = context;\n}\n\nDataDiffer.prototype = {\n\n    constructor: DataDiffer,\n\n    /**\n     * Callback function when add a data\n     */\n    add: function (func) {\n        this._add = func;\n        return this;\n    },\n\n    /**\n     * Callback function when update a data\n     */\n    update: function (func) {\n        this._update = func;\n        return this;\n    },\n\n    /**\n     * Callback function when remove a data\n     */\n    remove: function (func) {\n        this._remove = func;\n        return this;\n    },\n\n    execute: function () {\n        var oldArr = this._old;\n        var newArr = this._new;\n\n        var oldDataIndexMap = {};\n        var newDataIndexMap = {};\n        var oldDataKeyArr = [];\n        var newDataKeyArr = [];\n        var i;\n\n        initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, '_oldKeyGetter', this);\n        initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter', this);\n\n        for (i = 0; i < oldArr.length; i++) {\n            var key = oldDataKeyArr[i];\n            var idx = newDataIndexMap[key];\n\n            // idx can never be empty array here. see 'set null' logic below.\n            if (idx != null) {\n                // Consider there is duplicate key (for example, use dataItem.name as key).\n                // We should make sure every item in newArr and oldArr can be visited.\n                var len = idx.length;\n                if (len) {\n                    len === 1 && (newDataIndexMap[key] = null);\n                    idx = idx.shift();\n                }\n                else {\n                    newDataIndexMap[key] = null;\n                }\n                this._update && this._update(idx, i);\n            }\n            else {\n                this._remove && this._remove(i);\n            }\n        }\n\n        for (var i = 0; i < newDataKeyArr.length; i++) {\n            var key = newDataKeyArr[i];\n            if (newDataIndexMap.hasOwnProperty(key)) {\n                var idx = newDataIndexMap[key];\n                if (idx == null) {\n                    continue;\n                }\n                // idx can never be empty array here. see 'set null' logic above.\n                if (!idx.length) {\n                    this._add && this._add(idx);\n                }\n                else {\n                    for (var j = 0, len = idx.length; j < len; j++) {\n                        this._add && this._add(idx[j]);\n                    }\n                }\n            }\n        }\n    }\n};\n\nfunction initIndexMap(arr, map, keyArr, keyGetterName, dataDiffer) {\n    for (var i = 0; i < arr.length; i++) {\n        // Add prefix to avoid conflict with Object.prototype.\n        var key = '_ec_' + dataDiffer[keyGetterName](arr[i], i);\n        var existence = map[key];\n        if (existence == null) {\n            keyArr.push(key);\n            map[key] = i;\n        }\n        else {\n            if (!existence.length) {\n                map[key] = existence = [existence];\n            }\n            existence.push(i);\n        }\n    }\n}\n\nexport default DataDiffer;","/*\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\nimport {each, createHashMap, assert} from 'zrender/src/core/util';\nimport { __DEV__ } from '../../config';\n\nexport var OTHER_DIMENSIONS = createHashMap([\n    'tooltip', 'label', 'itemName', 'itemId', 'seriesName'\n]);\n\nexport function summarizeDimensions(data) {\n    var summary = {};\n    var encode = summary.encode = {};\n    var notExtraCoordDimMap = createHashMap();\n    var defaultedLabel = [];\n    var defaultedTooltip = [];\n\n    // See the comment of `List.js#userOutput`.\n    var userOutput = summary.userOutput = {\n        dimensionNames: data.dimensions.slice(),\n        encode: {}\n    };\n\n    each(data.dimensions, function (dimName) {\n        var dimItem = data.getDimensionInfo(dimName);\n\n        var coordDim = dimItem.coordDim;\n        if (coordDim) {\n            if (__DEV__) {\n                assert(OTHER_DIMENSIONS.get(coordDim) == null);\n            }\n\n            var coordDimIndex = dimItem.coordDimIndex;\n            getOrCreateEncodeArr(encode, coordDim)[coordDimIndex] = dimName;\n\n            if (!dimItem.isExtraCoord) {\n                notExtraCoordDimMap.set(coordDim, 1);\n\n                // Use the last coord dim (and label friendly) as default label,\n                // because when dataset is used, it is hard to guess which dimension\n                // can be value dimension. If both show x, y on label is not look good,\n                // and conventionally y axis is focused more.\n                if (mayLabelDimType(dimItem.type)) {\n                    defaultedLabel[0] = dimName;\n                }\n\n                // User output encode do not contain generated coords.\n                // And it only has index. User can use index to retrieve value from the raw item array.\n                getOrCreateEncodeArr(userOutput.encode, coordDim)[coordDimIndex] = dimItem.index;\n            }\n            if (dimItem.defaultTooltip) {\n                defaultedTooltip.push(dimName);\n            }\n        }\n\n        OTHER_DIMENSIONS.each(function (v, otherDim) {\n            var encodeArr = getOrCreateEncodeArr(encode, otherDim);\n\n            var dimIndex = dimItem.otherDims[otherDim];\n            if (dimIndex != null && dimIndex !== false) {\n                encodeArr[dimIndex] = dimItem.name;\n            }\n        });\n    });\n\n    var dataDimsOnCoord = [];\n    var encodeFirstDimNotExtra = {};\n\n    notExtraCoordDimMap.each(function (v, coordDim) {\n        var dimArr = encode[coordDim];\n        // ??? FIXME extra coord should not be set in dataDimsOnCoord.\n        // But should fix the case that radar axes: simplify the logic\n        // of `completeDimension`, remove `extraPrefix`.\n        encodeFirstDimNotExtra[coordDim] = dimArr[0];\n        // Not necessary to remove duplicate, because a data\n        // dim canot on more than one coordDim.\n        dataDimsOnCoord = dataDimsOnCoord.concat(dimArr);\n    });\n\n    summary.dataDimsOnCoord = dataDimsOnCoord;\n    summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra;\n\n    var encodeLabel = encode.label;\n    // FIXME `encode.label` is not recommanded, because formatter can not be set\n    // in this way. Use label.formatter instead. May be remove this approach someday.\n    if (encodeLabel && encodeLabel.length) {\n        defaultedLabel = encodeLabel.slice();\n    }\n\n    var encodeTooltip = encode.tooltip;\n    if (encodeTooltip && encodeTooltip.length) {\n        defaultedTooltip = encodeTooltip.slice();\n    }\n    else if (!defaultedTooltip.length) {\n        defaultedTooltip = defaultedLabel.slice();\n    }\n\n    encode.defaultedLabel = defaultedLabel;\n    encode.defaultedTooltip = defaultedTooltip;\n\n    return summary;\n}\n\nfunction getOrCreateEncodeArr(encode, dim) {\n    if (!encode.hasOwnProperty(dim)) {\n        encode[dim] = [];\n    }\n    return encode[dim];\n}\n\nexport function getDimensionTypeByAxis(axisType) {\n    return axisType === 'category'\n        ? 'ordinal'\n        : axisType === 'time'\n        ? 'time'\n        : 'float';\n}\n\nfunction mayLabelDimType(dimType) {\n    // In most cases, ordinal and time do not suitable for label.\n    // Ordinal info can be displayed on axis. Time is too long.\n    return !(dimType === 'ordinal' || dimType === 'time');\n}\n\n// function findTheLastDimMayLabel(data) {\n//     // Get last value dim\n//     var dimensions = data.dimensions.slice();\n//     var valueType;\n//     var valueDim;\n//     while (dimensions.length && (\n//         valueDim = dimensions.pop(),\n//         valueType = data.getDimensionInfo(valueDim).type,\n//         valueType === 'ordinal' || valueType === 'time'\n//     )) {} // jshint ignore:line\n//     return valueDim;\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 Float64Array, Int32Array, Uint32Array, Uint16Array */\n\n/**\n * List for data storage\n * @module echarts/data/List\n */\n\nimport {__DEV__} from '../config';\nimport * as zrUtil from 'zrender/src/core/util';\nimport Model from '../model/Model';\nimport DataDiffer from './DataDiffer';\nimport Source from './Source';\nimport {defaultDimValueGetters, DefaultDataProvider} from './helper/dataProvider';\nimport {summarizeDimensions} from './helper/dimensionHelper';\n\nvar isObject = zrUtil.isObject;\n\nvar UNDEFINED = 'undefined';\nvar INDEX_NOT_FOUND = -1;\n\n// Use prefix to avoid index to be the same as otherIdList[idx],\n// which will cause weird udpate animation.\nvar ID_PREFIX = 'e\\0\\0';\n\nvar dataCtors = {\n    'float': typeof Float64Array === UNDEFINED\n        ? Array : Float64Array,\n    'int': typeof Int32Array === UNDEFINED\n        ? Array : Int32Array,\n    // Ordinal data type can be string or int\n    'ordinal': Array,\n    'number': Array,\n    'time': Array\n};\n\n// Caution: MUST not use `new CtorUint32Array(arr, 0, len)`, because the Ctor of array is\n// different from the Ctor of typed array.\nvar CtorUint32Array = typeof Uint32Array === UNDEFINED ? Array : Uint32Array;\nvar CtorInt32Array = typeof Int32Array === UNDEFINED ? Array : Int32Array;\nvar CtorUint16Array = typeof Uint16Array === UNDEFINED ? Array : Uint16Array;\n\nfunction getIndicesCtor(list) {\n    // The possible max value in this._indicies is always this._rawCount despite of filtering.\n    return list._rawCount > 65535 ? CtorUint32Array : CtorUint16Array;\n}\n\nfunction cloneChunk(originalChunk) {\n    var Ctor = originalChunk.constructor;\n    // Only shallow clone is enough when Array.\n    return Ctor === Array ? originalChunk.slice() : new Ctor(originalChunk);\n}\n\nvar TRANSFERABLE_PROPERTIES = [\n    'hasItemOption', '_nameList', '_idList', '_invertedIndicesMap',\n    '_rawData', '_chunkSize', '_chunkCount', '_dimValueGetter',\n    '_count', '_rawCount', '_nameDimIdx', '_idDimIdx'\n];\nvar CLONE_PROPERTIES = [\n    '_extent', '_approximateExtent', '_rawExtent'\n];\n\nfunction transferProperties(target, source) {\n    zrUtil.each(TRANSFERABLE_PROPERTIES.concat(source.__wrappedMethods || []), function (propName) {\n        if (source.hasOwnProperty(propName)) {\n            target[propName] = source[propName];\n        }\n    });\n\n    target.__wrappedMethods = source.__wrappedMethods;\n\n    zrUtil.each(CLONE_PROPERTIES, function (propName) {\n        target[propName] = zrUtil.clone(source[propName]);\n    });\n\n    target._calculationInfo = zrUtil.extend(source._calculationInfo);\n}\n\n\n\n\n\n/**\n * @constructor\n * @alias module:echarts/data/List\n *\n * @param {Array.<string|Object>} dimensions\n *      For example, ['someDimName', {name: 'someDimName', type: 'someDimType'}, ...].\n *      Dimensions should be concrete names like x, y, z, lng, lat, angle, radius\n *      Spetial fields: {\n *          ordinalMeta: <module:echarts/data/OrdinalMeta>\n *          createInvertedIndices: <boolean>\n *      }\n * @param {module:echarts/model/Model} hostModel\n */\nvar List = function (dimensions, hostModel) {\n\n    dimensions = dimensions || ['x', 'y'];\n\n    var dimensionInfos = {};\n    var dimensionNames = [];\n    var invertedIndicesMap = {};\n\n    for (var i = 0; i < dimensions.length; i++) {\n        // Use the original dimensions[i], where other flag props may exists.\n        var dimensionInfo = dimensions[i];\n\n        if (zrUtil.isString(dimensionInfo)) {\n            dimensionInfo = {name: dimensionInfo};\n        }\n\n        var dimensionName = dimensionInfo.name;\n        dimensionInfo.type = dimensionInfo.type || 'float';\n        if (!dimensionInfo.coordDim) {\n            dimensionInfo.coordDim = dimensionName;\n            dimensionInfo.coordDimIndex = 0;\n        }\n\n        dimensionInfo.otherDims = dimensionInfo.otherDims || {};\n        dimensionNames.push(dimensionName);\n        dimensionInfos[dimensionName] = dimensionInfo;\n\n        dimensionInfo.index = i;\n\n        if (dimensionInfo.createInvertedIndices) {\n            invertedIndicesMap[dimensionName] = [];\n        }\n    }\n\n    /**\n     * @readOnly\n     * @type {Array.<string>}\n     */\n    this.dimensions = dimensionNames;\n\n    /**\n     * Infomation of each data dimension, like data type.\n     * @type {Object}\n     */\n    this._dimensionInfos = dimensionInfos;\n\n    /**\n     * @type {module:echarts/model/Model}\n     */\n    this.hostModel = hostModel;\n\n    /**\n     * @type {module:echarts/model/Model}\n     */\n    this.dataType;\n\n    /**\n     * Indices stores the indices of data subset after filtered.\n     * This data subset will be used in chart.\n     * @type {Array.<number>}\n     * @readOnly\n     */\n    this._indices = null;\n\n    this._count = 0;\n    this._rawCount = 0;\n\n    /**\n     * Data storage\n     * @type {Object.<key, Array.<TypedArray|Array>>}\n     * @private\n     */\n    this._storage = {};\n\n    /**\n     * @type {Array.<string>}\n     */\n    this._nameList = [];\n    /**\n     * @type {Array.<string>}\n     */\n    this._idList = [];\n\n    /**\n     * Models of data option is stored sparse for optimizing memory cost\n     * @type {Array.<module:echarts/model/Model>}\n     * @private\n     */\n    this._optionModels = [];\n\n    /**\n     * Global visual properties after visual coding\n     * @type {Object}\n     * @private\n     */\n    this._visual = {};\n\n    /**\n     * Globel layout properties.\n     * @type {Object}\n     * @private\n     */\n    this._layout = {};\n\n    /**\n     * Item visual properties after visual coding\n     * @type {Array.<Object>}\n     * @private\n     */\n    this._itemVisuals = [];\n\n    /**\n     * Key: visual type, Value: boolean\n     * @type {Object}\n     * @readOnly\n     */\n    this.hasItemVisual = {};\n\n    /**\n     * Item layout properties after layout\n     * @type {Array.<Object>}\n     * @private\n     */\n    this._itemLayouts = [];\n\n    /**\n     * Graphic elemnents\n     * @type {Array.<module:zrender/Element>}\n     * @private\n     */\n    this._graphicEls = [];\n\n    /**\n     * Max size of each chunk.\n     * @type {number}\n     * @private\n     */\n    this._chunkSize = 1e5;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this._chunkCount = 0;\n\n    /**\n     * @type {Array.<Array|Object>}\n     * @private\n     */\n    this._rawData;\n\n    /**\n     * Raw extent will not be cloned, but only transfered.\n     * It will not be calculated util needed.\n     * key: dim,\n     * value: {end: number, extent: Array.<number>}\n     * @type {Object}\n     * @private\n     */\n    this._rawExtent = {};\n\n    /**\n     * @type {Object}\n     * @private\n     */\n    this._extent = {};\n\n    /**\n     * key: dim\n     * value: extent\n     * @type {Object}\n     * @private\n     */\n    this._approximateExtent = {};\n\n    /**\n     * Cache summary info for fast visit. See \"dimensionHelper\".\n     * @type {Object}\n     * @private\n     */\n    this._dimensionsSummary = summarizeDimensions(this);\n\n    /**\n     * @type {Object.<Array|TypedArray>}\n     * @private\n     */\n    this._invertedIndicesMap = invertedIndicesMap;\n\n    /**\n     * @type {Object}\n     * @private\n     */\n    this._calculationInfo = {};\n\n    /**\n     * User output info of this data.\n     * DO NOT use it in other places!\n     *\n     * When preparing user params for user callbacks, we have\n     * to clone these inner data structures to prevent users\n     * from modifying them to effect built-in logic. And for\n     * performance consideration we make this `userOutput` to\n     * avoid clone them too many times.\n     *\n     * @type {Object}\n     * @readOnly\n     */\n    this.userOutput = this._dimensionsSummary.userOutput;\n};\n\nvar listProto = List.prototype;\n\nlistProto.type = 'list';\n\n/**\n * If each data item has it's own option\n * @type {boolean}\n */\nlistProto.hasItemOption = true;\n\n/**\n * The meanings of the input parameter `dim`:\n *\n * + If dim is a number (e.g., `1`), it means the index of the dimension.\n *   For example, `getDimension(0)` will return 'x' or 'lng' or 'radius'.\n * + If dim is a number-like string (e.g., `\"1\"`):\n *     + If there is the same concrete dim name defined in `this.dimensions`, it means that concrete name.\n *     + If not, it will be converted to a number, which means the index of the dimension.\n *        (why? because of the backward compatbility. We have been tolerating number-like string in\n *        dimension setting, although now it seems that it is not a good idea.)\n *     For example, `visualMap[i].dimension: \"1\"` is the same meaning as `visualMap[i].dimension: 1`,\n *     if no dimension name is defined as `\"1\"`.\n * + If dim is a not-number-like string, it means the concrete dim name.\n *   For example, it can be be default name `\"x\"`, `\"y\"`, `\"z\"`, `\"lng\"`, `\"lat\"`, `\"angle\"`, `\"radius\"`,\n *   or customized in `dimensions` property of option like `\"age\"`.\n *\n * Get dimension name\n * @param {string|number} dim See above.\n * @return {string} Concrete dim name.\n */\nlistProto.getDimension = function (dim) {\n    if (typeof dim === 'number'\n        // If being a number-like string but not being defined a dimension name.\n        || (!isNaN(dim) && !this._dimensionInfos.hasOwnProperty(dim))\n    ) {\n        dim = this.dimensions[dim];\n    }\n    return dim;\n};\n\n/**\n * Get type and calculation info of particular dimension\n * @param {string|number} dim\n *        Dimension can be concrete names like x, y, z, lng, lat, angle, radius\n *        Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius'\n */\nlistProto.getDimensionInfo = function (dim) {\n    // Do not clone, because there may be categories in dimInfo.\n    return this._dimensionInfos[this.getDimension(dim)];\n};\n\n/**\n * @return {Array.<string>} concrete dimension name list on coord.\n */\nlistProto.getDimensionsOnCoord = function () {\n    return this._dimensionsSummary.dataDimsOnCoord.slice();\n};\n\n/**\n * @param {string} coordDim\n * @param {number} [idx] A coordDim may map to more than one data dim.\n *        If idx is `true`, return a array of all mapped dims.\n *        If idx is not specified, return the first dim not extra.\n * @return {string|Array.<string>} concrete data dim.\n *        If idx is number, and not found, return null/undefined.\n *        If idx is `true`, and not found, return empty array (always return array).\n */\nlistProto.mapDimension = function (coordDim, idx) {\n    var dimensionsSummary = this._dimensionsSummary;\n\n    if (idx == null) {\n        return dimensionsSummary.encodeFirstDimNotExtra[coordDim];\n    }\n\n    var dims = dimensionsSummary.encode[coordDim];\n    return idx === true\n        // always return array if idx is `true`\n        ? (dims || []).slice()\n        : (dims && dims[idx]);\n};\n\n/**\n * Initialize from data\n * @param {Array.<Object|number|Array>} data source or data or data provider.\n * @param {Array.<string>} [nameLIst] The name of a datum is used on data diff and\n *        defualt label/tooltip.\n *        A name can be specified in encode.itemName,\n *        or dataItem.name (only for series option data),\n *        or provided in nameList from outside.\n * @param {Function} [dimValueGetter] (dataItem, dimName, dataIndex, dimIndex) => number\n */\nlistProto.initData = function (data, nameList, dimValueGetter) {\n\n    var notProvider = Source.isInstance(data) || zrUtil.isArrayLike(data);\n    if (notProvider) {\n        data = new DefaultDataProvider(data, this.dimensions.length);\n    }\n\n    if (__DEV__) {\n        if (!notProvider && (typeof data.getItem !== 'function' || typeof data.count !== 'function')) {\n            throw new Error('Inavlid data provider.');\n        }\n    }\n\n    this._rawData = data;\n\n    // Clear\n    this._storage = {};\n    this._indices = null;\n\n    this._nameList = nameList || [];\n\n    this._idList = [];\n\n    this._nameRepeatCount = {};\n\n    if (!dimValueGetter) {\n        this.hasItemOption = false;\n    }\n\n    /**\n     * @readOnly\n     */\n    this.defaultDimValueGetter = defaultDimValueGetters[\n        this._rawData.getSource().sourceFormat\n    ];\n    // Default dim value getter\n    this._dimValueGetter = dimValueGetter = dimValueGetter\n        || this.defaultDimValueGetter;\n    this._dimValueGetterArrayRows = defaultDimValueGetters.arrayRows;\n\n    // Reset raw extent.\n    this._rawExtent = {};\n\n    this._initDataFromProvider(0, data.count());\n\n    // If data has no item option.\n    if (data.pure) {\n        this.hasItemOption = false;\n    }\n};\n\nlistProto.getProvider = function () {\n    return this._rawData;\n};\n\n/**\n * Caution: Can be only called on raw data (before `this._indices` created).\n */\nlistProto.appendData = function (data) {\n    if (__DEV__) {\n        zrUtil.assert(!this._indices, 'appendData can only be called on raw data.');\n    }\n\n    var rawData = this._rawData;\n    var start = this.count();\n    rawData.appendData(data);\n    var end = rawData.count();\n    if (!rawData.persistent) {\n        end += start;\n    }\n    this._initDataFromProvider(start, end);\n};\n\n/**\n * Caution: Can be only called on raw data (before `this._indices` created).\n * This method does not modify `rawData` (`dataProvider`), but only\n * add values to storage.\n *\n * The final count will be increased by `Math.max(values.length, names.length)`.\n *\n * @param {Array.<Array.<*>>} values That is the SourceType: 'arrayRows', like\n *        [\n *            [12, 33, 44],\n *            [NaN, 43, 1],\n *            ['-', 'asdf', 0]\n *        ]\n *        Each item is exaclty cooresponding to a dimension.\n * @param {Array.<string>} [names]\n */\nlistProto.appendValues = function (values, names) {\n    var chunkSize = this._chunkSize;\n    var storage = this._storage;\n    var dimensions = this.dimensions;\n    var dimLen = dimensions.length;\n    var rawExtent = this._rawExtent;\n\n    var start = this.count();\n    var end = start + Math.max(values.length, names ? names.length : 0);\n    var originalChunkCount = this._chunkCount;\n\n    for (var i = 0; i < dimLen; i++) {\n        var dim = dimensions[i];\n        if (!rawExtent[dim]) {\n            rawExtent[dim] = getInitialExtent();\n        }\n        if (!storage[dim]) {\n            storage[dim] = [];\n        }\n        prepareChunks(storage, this._dimensionInfos[dim], chunkSize, originalChunkCount, end);\n        this._chunkCount = storage[dim].length;\n    }\n\n    var emptyDataItem = new Array(dimLen);\n    for (var idx = start; idx < end; idx++) {\n        var sourceIdx = idx - start;\n        var chunkIndex = Math.floor(idx / chunkSize);\n        var chunkOffset = idx % chunkSize;\n\n        // Store the data by dimensions\n        for (var k = 0; k < dimLen; k++) {\n            var dim = dimensions[k];\n            var val = this._dimValueGetterArrayRows(\n                values[sourceIdx] || emptyDataItem, dim, sourceIdx, k\n            );\n            storage[dim][chunkIndex][chunkOffset] = val;\n\n            var dimRawExtent = rawExtent[dim];\n            val < dimRawExtent[0] && (dimRawExtent[0] = val);\n            val > dimRawExtent[1] && (dimRawExtent[1] = val);\n        }\n\n        if (names) {\n            this._nameList[idx] = names[sourceIdx];\n        }\n    }\n\n    this._rawCount = this._count = end;\n\n    // Reset data extent\n    this._extent = {};\n\n    prepareInvertedIndex(this);\n};\n\nlistProto._initDataFromProvider = function (start, end) {\n    // Optimize.\n    if (start >= end) {\n        return;\n    }\n\n    var chunkSize = this._chunkSize;\n    var rawData = this._rawData;\n    var storage = this._storage;\n    var dimensions = this.dimensions;\n    var dimLen = dimensions.length;\n    var dimensionInfoMap = this._dimensionInfos;\n    var nameList = this._nameList;\n    var idList = this._idList;\n    var rawExtent = this._rawExtent;\n    var nameRepeatCount = this._nameRepeatCount = {};\n    var nameDimIdx;\n\n    var originalChunkCount = this._chunkCount;\n    for (var i = 0; i < dimLen; i++) {\n        var dim = dimensions[i];\n        if (!rawExtent[dim]) {\n            rawExtent[dim] = getInitialExtent();\n        }\n\n        var dimInfo = dimensionInfoMap[dim];\n        if (dimInfo.otherDims.itemName === 0) {\n            nameDimIdx = this._nameDimIdx = i;\n        }\n        if (dimInfo.otherDims.itemId === 0) {\n            this._idDimIdx = i;\n        }\n\n        if (!storage[dim]) {\n            storage[dim] = [];\n        }\n\n        prepareChunks(storage, dimInfo, chunkSize, originalChunkCount, end);\n\n        this._chunkCount = storage[dim].length;\n    }\n\n    var dataItem = new Array(dimLen);\n    for (var idx = start; idx < end; idx++) {\n        // NOTICE: Try not to write things into dataItem\n        dataItem = rawData.getItem(idx, dataItem);\n        // Each data item is value\n        // [1, 2]\n        // 2\n        // Bar chart, line chart which uses category axis\n        // only gives the 'y' value. 'x' value is the indices of category\n        // Use a tempValue to normalize the value to be a (x, y) value\n        var chunkIndex = Math.floor(idx / chunkSize);\n        var chunkOffset = idx % chunkSize;\n\n        // Store the data by dimensions\n        for (var k = 0; k < dimLen; k++) {\n            var dim = dimensions[k];\n            var dimStorage = storage[dim][chunkIndex];\n            // PENDING NULL is empty or zero\n            var val = this._dimValueGetter(dataItem, dim, idx, k);\n            dimStorage[chunkOffset] = val;\n\n            var dimRawExtent = rawExtent[dim];\n            val < dimRawExtent[0] && (dimRawExtent[0] = val);\n            val > dimRawExtent[1] && (dimRawExtent[1] = val);\n        }\n\n        // ??? FIXME not check by pure but sourceFormat?\n        // TODO refactor these logic.\n        if (!rawData.pure) {\n            var name = nameList[idx];\n\n            if (dataItem && name == null) {\n                // If dataItem is {name: ...}, it has highest priority.\n                // That is appropriate for many common cases.\n                if (dataItem.name != null) {\n                    // There is no other place to persistent dataItem.name,\n                    // so save it to nameList.\n                    nameList[idx] = name = dataItem.name;\n                }\n                else if (nameDimIdx != null) {\n                    var nameDim = dimensions[nameDimIdx];\n                    var nameDimChunk = storage[nameDim][chunkIndex];\n                    if (nameDimChunk) {\n                        name = nameDimChunk[chunkOffset];\n                        var ordinalMeta = dimensionInfoMap[nameDim].ordinalMeta;\n                        if (ordinalMeta && ordinalMeta.categories.length) {\n                            name = ordinalMeta.categories[name];\n                        }\n                    }\n                }\n            }\n\n            // Try using the id in option\n            // id or name is used on dynamical data, mapping old and new items.\n            var id = dataItem == null ? null : dataItem.id;\n\n            if (id == null && name != null) {\n                // Use name as id and add counter to avoid same name\n                nameRepeatCount[name] = nameRepeatCount[name] || 0;\n                id = name;\n                if (nameRepeatCount[name] > 0) {\n                    id += '__ec__' + nameRepeatCount[name];\n                }\n                nameRepeatCount[name]++;\n            }\n            id != null && (idList[idx] = id);\n        }\n    }\n\n    if (!rawData.persistent && rawData.clean) {\n        // Clean unused data if data source is typed array.\n        rawData.clean();\n    }\n\n    this._rawCount = this._count = end;\n\n    // Reset data extent\n    this._extent = {};\n\n    prepareInvertedIndex(this);\n};\n\nfunction prepareChunks(storage, dimInfo, chunkSize, chunkCount, end) {\n    var DataCtor = dataCtors[dimInfo.type];\n    var lastChunkIndex = chunkCount - 1;\n    var dim = dimInfo.name;\n    var resizeChunkArray = storage[dim][lastChunkIndex];\n    if (resizeChunkArray && resizeChunkArray.length < chunkSize) {\n        var newStore = new DataCtor(Math.min(end - lastChunkIndex * chunkSize, chunkSize));\n        // The cost of the copy is probably inconsiderable\n        // within the initial chunkSize.\n        for (var j = 0; j < resizeChunkArray.length; j++) {\n            newStore[j] = resizeChunkArray[j];\n        }\n        storage[dim][lastChunkIndex] = newStore;\n    }\n\n    // Create new chunks.\n    for (var k = chunkCount * chunkSize; k < end; k += chunkSize) {\n        storage[dim].push(new DataCtor(Math.min(end - k, chunkSize)));\n    }\n}\n\nfunction prepareInvertedIndex(list) {\n    var invertedIndicesMap = list._invertedIndicesMap;\n    zrUtil.each(invertedIndicesMap, function (invertedIndices, dim) {\n        var dimInfo = list._dimensionInfos[dim];\n\n        // Currently, only dimensions that has ordinalMeta can create inverted indices.\n        var ordinalMeta = dimInfo.ordinalMeta;\n        if (ordinalMeta) {\n            invertedIndices = invertedIndicesMap[dim] = new CtorInt32Array(\n                ordinalMeta.categories.length\n            );\n            // The default value of TypedArray is 0. To avoid miss\n            // mapping to 0, we should set it as INDEX_NOT_FOUND.\n            for (var i = 0; i < invertedIndices.length; i++) {\n                invertedIndices[i] = INDEX_NOT_FOUND;\n            }\n            for (var i = 0; i < list._count; i++) {\n                // Only support the case that all values are distinct.\n                invertedIndices[list.get(dim, i)] = i;\n            }\n        }\n    });\n}\n\nfunction getRawValueFromStore(list, dimIndex, rawIndex) {\n    var val;\n    if (dimIndex != null) {\n        var chunkSize = list._chunkSize;\n        var chunkIndex = Math.floor(rawIndex / chunkSize);\n        var chunkOffset = rawIndex % chunkSize;\n        var dim = list.dimensions[dimIndex];\n        var chunk = list._storage[dim][chunkIndex];\n        if (chunk) {\n            val = chunk[chunkOffset];\n            var ordinalMeta = list._dimensionInfos[dim].ordinalMeta;\n            if (ordinalMeta && ordinalMeta.categories.length) {\n                val = ordinalMeta.categories[val];\n            }\n        }\n    }\n    return val;\n}\n\n/**\n * @return {number}\n */\nlistProto.count = function () {\n    return this._count;\n};\n\nlistProto.getIndices = function () {\n    var newIndices;\n\n    var indices = this._indices;\n    if (indices) {\n        var Ctor = indices.constructor;\n        var thisCount = this._count;\n        // `new Array(a, b, c)` is different from `new Uint32Array(a, b, c)`.\n        if (Ctor === Array) {\n            newIndices = new Ctor(thisCount);\n            for (var i = 0; i < thisCount; i++) {\n                newIndices[i] = indices[i];\n            }\n        }\n        else {\n            newIndices = new Ctor(indices.buffer, 0, thisCount);\n        }\n    }\n    else {\n        var Ctor = getIndicesCtor(this);\n        var newIndices = new Ctor(this.count());\n        for (var i = 0; i < newIndices.length; i++) {\n            newIndices[i] = i;\n        }\n    }\n\n    return newIndices;\n};\n\n/**\n * Get value. Return NaN if idx is out of range.\n * @param {string} dim Dim must be concrete name.\n * @param {number} idx\n * @param {boolean} stack\n * @return {number}\n */\nlistProto.get = function (dim, idx /*, stack */) {\n    if (!(idx >= 0 && idx < this._count)) {\n        return NaN;\n    }\n    var storage = this._storage;\n    if (!storage[dim]) {\n        // TODO Warn ?\n        return NaN;\n    }\n\n    idx = this.getRawIndex(idx);\n\n    var chunkIndex = Math.floor(idx / this._chunkSize);\n    var chunkOffset = idx % this._chunkSize;\n\n    var chunkStore = storage[dim][chunkIndex];\n    var value = chunkStore[chunkOffset];\n    // FIXME ordinal data type is not stackable\n    // if (stack) {\n    //     var dimensionInfo = this._dimensionInfos[dim];\n    //     if (dimensionInfo && dimensionInfo.stackable) {\n    //         var stackedOn = this.stackedOn;\n    //         while (stackedOn) {\n    //             // Get no stacked data of stacked on\n    //             var stackedValue = stackedOn.get(dim, idx);\n    //             // Considering positive stack, negative stack and empty data\n    //             if ((value >= 0 && stackedValue > 0)  // Positive stack\n    //                 || (value <= 0 && stackedValue < 0) // Negative stack\n    //             ) {\n    //                 value += stackedValue;\n    //             }\n    //             stackedOn = stackedOn.stackedOn;\n    //         }\n    //     }\n    // }\n\n    return value;\n};\n\n/**\n * @param {string} dim concrete dim\n * @param {number} rawIndex\n * @return {number|string}\n */\nlistProto.getByRawIndex = function (dim, rawIdx) {\n    if (!(rawIdx >= 0 && rawIdx < this._rawCount)) {\n        return NaN;\n    }\n    var dimStore = this._storage[dim];\n    if (!dimStore) {\n        // TODO Warn ?\n        return NaN;\n    }\n\n    var chunkIndex = Math.floor(rawIdx / this._chunkSize);\n    var chunkOffset = rawIdx % this._chunkSize;\n    var chunkStore = dimStore[chunkIndex];\n    return chunkStore[chunkOffset];\n};\n\n/**\n * FIXME Use `get` on chrome maybe slow(in filterSelf and selectRange).\n * Hack a much simpler _getFast\n * @private\n */\nlistProto._getFast = function (dim, rawIdx) {\n    var chunkIndex = Math.floor(rawIdx / this._chunkSize);\n    var chunkOffset = rawIdx % this._chunkSize;\n    var chunkStore = this._storage[dim][chunkIndex];\n    return chunkStore[chunkOffset];\n};\n\n/**\n * Get value for multi dimensions.\n * @param {Array.<string>} [dimensions] If ignored, using all dimensions.\n * @param {number} idx\n * @return {number}\n */\nlistProto.getValues = function (dimensions, idx /*, stack */) {\n    var values = [];\n\n    if (!zrUtil.isArray(dimensions)) {\n        // stack = idx;\n        idx = dimensions;\n        dimensions = this.dimensions;\n    }\n\n    for (var i = 0, len = dimensions.length; i < len; i++) {\n        values.push(this.get(dimensions[i], idx /*, stack */));\n    }\n\n    return values;\n};\n\n/**\n * If value is NaN. Inlcuding '-'\n * Only check the coord dimensions.\n * @param {string} dim\n * @param {number} idx\n * @return {number}\n */\nlistProto.hasValue = function (idx) {\n    var dataDimsOnCoord = this._dimensionsSummary.dataDimsOnCoord;\n    for (var i = 0, len = dataDimsOnCoord.length; i < len; i++) {\n        // Ordinal type originally can be string or number.\n        // But when an ordinal type is used on coord, it can\n        // not be string but only number. So we can also use isNaN.\n        if (isNaN(this.get(dataDimsOnCoord[i], idx))) {\n            return false;\n        }\n    }\n    return true;\n};\n\n/**\n * Get extent of data in one dimension\n * @param {string} dim\n * @param {boolean} stack\n */\nlistProto.getDataExtent = function (dim /*, stack */) {\n    // Make sure use concrete dim as cache name.\n    dim = this.getDimension(dim);\n    var dimData = this._storage[dim];\n    var initialExtent = getInitialExtent();\n\n    // stack = !!((stack || false) && this.getCalculationInfo(dim));\n\n    if (!dimData) {\n        return initialExtent;\n    }\n\n    // Make more strict checkings to ensure hitting cache.\n    var currEnd = this.count();\n    // var cacheName = [dim, !!stack].join('_');\n    // var cacheName = dim;\n\n    // Consider the most cases when using data zoom, `getDataExtent`\n    // happened before filtering. We cache raw extent, which is not\n    // necessary to be cleared and recalculated when restore data.\n    var useRaw = !this._indices; // && !stack;\n    var dimExtent;\n\n    if (useRaw) {\n        return this._rawExtent[dim].slice();\n    }\n    dimExtent = this._extent[dim];\n    if (dimExtent) {\n        return dimExtent.slice();\n    }\n    dimExtent = initialExtent;\n\n    var min = dimExtent[0];\n    var max = dimExtent[1];\n\n    for (var i = 0; i < currEnd; i++) {\n        // var value = stack ? this.get(dim, i, true) : this._getFast(dim, this.getRawIndex(i));\n        var value = this._getFast(dim, this.getRawIndex(i));\n        value < min && (min = value);\n        value > max && (max = value);\n    }\n\n    dimExtent = [min, max];\n\n    this._extent[dim] = dimExtent;\n\n    return dimExtent;\n};\n\n/**\n * Optimize for the scenario that data is filtered by a given extent.\n * Consider that if data amount is more than hundreds of thousand,\n * extent calculation will cost more than 10ms and the cache will\n * be erased because of the filtering.\n */\nlistProto.getApproximateExtent = function (dim /*, stack */) {\n    dim = this.getDimension(dim);\n    return this._approximateExtent[dim] || this.getDataExtent(dim /*, stack */);\n};\n\nlistProto.setApproximateExtent = function (extent, dim /*, stack */) {\n    dim = this.getDimension(dim);\n    this._approximateExtent[dim] = extent.slice();\n};\n\n/**\n * @param {string} key\n * @return {*}\n */\nlistProto.getCalculationInfo = function (key) {\n    return this._calculationInfo[key];\n};\n\n/**\n * @param {string|Object} key or k-v object\n * @param {*} [value]\n */\nlistProto.setCalculationInfo = function (key, value) {\n    isObject(key)\n        ? zrUtil.extend(this._calculationInfo, key)\n        : (this._calculationInfo[key] = value);\n};\n\n/**\n * Get sum of data in one dimension\n * @param {string} dim\n */\nlistProto.getSum = function (dim /*, stack */) {\n    var dimData = this._storage[dim];\n    var sum = 0;\n    if (dimData) {\n        for (var i = 0, len = this.count(); i < len; i++) {\n            var value = this.get(dim, i /*, stack */);\n            if (!isNaN(value)) {\n                sum += value;\n            }\n        }\n    }\n    return sum;\n};\n\n/**\n * Get median of data in one dimension\n * @param {string} dim\n */\nlistProto.getMedian = function (dim /*, stack */) {\n    var dimDataArray = [];\n    // map all data of one dimension\n    this.each(dim, function (val, idx) {\n        if (!isNaN(val)) {\n            dimDataArray.push(val);\n        }\n    });\n\n    // TODO\n    // Use quick select?\n\n    // immutability & sort\n    var sortedDimDataArray = [].concat(dimDataArray).sort(function (a, b) {\n        return a - b;\n    });\n    var len = this.count();\n    // calculate median\n    return len === 0\n        ? 0\n        : len % 2 === 1\n        ? sortedDimDataArray[(len - 1) / 2]\n        : (sortedDimDataArray[len / 2] + sortedDimDataArray[len / 2 - 1]) / 2;\n};\n\n// /**\n//  * Retreive the index with given value\n//  * @param {string} dim Concrete dimension.\n//  * @param {number} value\n//  * @return {number}\n//  */\n// Currently incorrect: should return dataIndex but not rawIndex.\n// Do not fix it until this method is to be used somewhere.\n// FIXME Precision of float value\n// listProto.indexOf = function (dim, value) {\n//     var storage = this._storage;\n//     var dimData = storage[dim];\n//     var chunkSize = this._chunkSize;\n//     if (dimData) {\n//         for (var i = 0, len = this.count(); i < len; i++) {\n//             var chunkIndex = Math.floor(i / chunkSize);\n//             var chunkOffset = i % chunkSize;\n//             if (dimData[chunkIndex][chunkOffset] === value) {\n//                 return i;\n//             }\n//         }\n//     }\n//     return -1;\n// };\n\n/**\n * Only support the dimension which inverted index created.\n * Do not support other cases until required.\n * @param {string} concrete dim\n * @param {number|string} value\n * @return {number} rawIndex\n */\nlistProto.rawIndexOf = function (dim, value) {\n    var invertedIndices = dim && this._invertedIndicesMap[dim];\n    if (__DEV__) {\n        if (!invertedIndices) {\n            throw new Error('Do not supported yet');\n        }\n    }\n    var rawIndex = invertedIndices[value];\n    if (rawIndex == null || isNaN(rawIndex)) {\n        return INDEX_NOT_FOUND;\n    }\n    return rawIndex;\n};\n\n/**\n * Retreive the index with given name\n * @param {number} idx\n * @param {number} name\n * @return {number}\n */\nlistProto.indexOfName = function (name) {\n    for (var i = 0, len = this.count(); i < len; i++) {\n        if (this.getName(i) === name) {\n            return i;\n        }\n    }\n\n    return -1;\n};\n\n/**\n * Retreive the index with given raw data index\n * @param {number} idx\n * @param {number} name\n * @return {number}\n */\nlistProto.indexOfRawIndex = function (rawIndex) {\n    if (rawIndex >= this._rawCount || rawIndex < 0) {\n        return -1;\n    }\n\n    if (!this._indices) {\n        return rawIndex;\n    }\n\n    // Indices are ascending\n    var indices = this._indices;\n\n    // If rawIndex === dataIndex\n    var rawDataIndex = indices[rawIndex];\n    if (rawDataIndex != null && rawDataIndex < this._count && rawDataIndex === rawIndex) {\n        return rawIndex;\n    }\n\n    var left = 0;\n    var right = this._count - 1;\n    while (left <= right) {\n        var mid = (left + right) / 2 | 0;\n        if (indices[mid] < rawIndex) {\n            left = mid + 1;\n        }\n        else if (indices[mid] > rawIndex) {\n            right = mid - 1;\n        }\n        else {\n            return mid;\n        }\n    }\n    return -1;\n};\n\n/**\n * Retreive the index of nearest value\n * @param {string} dim\n * @param {number} value\n * @param {number} [maxDistance=Infinity]\n * @return {Array.<number>} Considere multiple points has the same value.\n */\nlistProto.indicesOfNearest = function (dim, value, maxDistance) {\n    var storage = this._storage;\n    var dimData = storage[dim];\n    var nearestIndices = [];\n\n    if (!dimData) {\n        return nearestIndices;\n    }\n\n    if (maxDistance == null) {\n        maxDistance = Infinity;\n    }\n\n    var minDist = Number.MAX_VALUE;\n    var minDiff = -1;\n    for (var i = 0, len = this.count(); i < len; i++) {\n        var diff = value - this.get(dim, i /*, stack */);\n        var dist = Math.abs(diff);\n        if (diff <= maxDistance && dist <= minDist) {\n            // For the case of two data are same on xAxis, which has sequence data.\n            // Show the nearest index\n            // https://github.com/ecomfe/echarts/issues/2869\n            if (dist < minDist || (diff >= 0 && minDiff < 0)) {\n                minDist = dist;\n                minDiff = diff;\n                nearestIndices.length = 0;\n            }\n            nearestIndices.push(i);\n        }\n    }\n    return nearestIndices;\n};\n\n/**\n * Get raw data index\n * @param {number} idx\n * @return {number}\n */\nlistProto.getRawIndex = getRawIndexWithoutIndices;\n\nfunction getRawIndexWithoutIndices(idx) {\n    return idx;\n}\n\nfunction getRawIndexWithIndices(idx) {\n    if (idx < this._count && idx >= 0) {\n        return this._indices[idx];\n    }\n    return -1;\n}\n\n/**\n * Get raw data item\n * @param {number} idx\n * @return {number}\n */\nlistProto.getRawDataItem = function (idx) {\n    if (!this._rawData.persistent) {\n        var val = [];\n        for (var i = 0; i < this.dimensions.length; i++) {\n            var dim = this.dimensions[i];\n            val.push(this.get(dim, idx));\n        }\n        return val;\n    }\n    else {\n        return this._rawData.getItem(this.getRawIndex(idx));\n    }\n};\n\n/**\n * @param {number} idx\n * @param {boolean} [notDefaultIdx=false]\n * @return {string}\n */\nlistProto.getName = function (idx) {\n    var rawIndex = this.getRawIndex(idx);\n    return this._nameList[rawIndex]\n        || getRawValueFromStore(this, this._nameDimIdx, rawIndex)\n        || '';\n};\n\n/**\n * @param {number} idx\n * @param {boolean} [notDefaultIdx=false]\n * @return {string}\n */\nlistProto.getId = function (idx) {\n    return getId(this, this.getRawIndex(idx));\n};\n\nfunction getId(list, rawIndex) {\n    var id = list._idList[rawIndex];\n    if (id == null) {\n        id = getRawValueFromStore(list, list._idDimIdx, rawIndex);\n    }\n    if (id == null) {\n        // FIXME Check the usage in graph, should not use prefix.\n        id = ID_PREFIX + rawIndex;\n    }\n    return id;\n}\n\nfunction normalizeDimensions(dimensions) {\n    if (!zrUtil.isArray(dimensions)) {\n        dimensions = [dimensions];\n    }\n    return dimensions;\n}\n\nfunction validateDimensions(list, dims) {\n    for (var i = 0; i < dims.length; i++) {\n        // stroage may be empty when no data, so use\n        // dimensionInfos to check.\n        if (!list._dimensionInfos[dims[i]]) {\n            console.error('Unkown dimension ' + dims[i]);\n        }\n    }\n}\n\n/**\n * Data iteration\n * @param {string|Array.<string>}\n * @param {Function} cb\n * @param {*} [context=this]\n *\n * @example\n *  list.each('x', function (x, idx) {});\n *  list.each(['x', 'y'], function (x, y, idx) {});\n *  list.each(function (idx) {})\n */\nlistProto.each = function (dims, cb, context, contextCompat) {\n    'use strict';\n\n    if (!this._count) {\n        return;\n    }\n\n    if (typeof dims === 'function') {\n        contextCompat = context;\n        context = cb;\n        cb = dims;\n        dims = [];\n    }\n\n    // contextCompat just for compat echarts3\n    context = context || contextCompat || this;\n\n    dims = zrUtil.map(normalizeDimensions(dims), this.getDimension, this);\n\n    if (__DEV__) {\n        validateDimensions(this, dims);\n    }\n\n    var dimSize = dims.length;\n\n    for (var i = 0; i < this.count(); i++) {\n        // Simple optimization\n        switch (dimSize) {\n            case 0:\n                cb.call(context, i);\n                break;\n            case 1:\n                cb.call(context, this.get(dims[0], i), i);\n                break;\n            case 2:\n                cb.call(context, this.get(dims[0], i), this.get(dims[1], i), i);\n                break;\n            default:\n                var k = 0;\n                var value = [];\n                for (; k < dimSize; k++) {\n                    value[k] = this.get(dims[k], i);\n                }\n                // Index\n                value[k] = i;\n                cb.apply(context, value);\n        }\n    }\n};\n\n/**\n * Data filter\n * @param {string|Array.<string>}\n * @param {Function} cb\n * @param {*} [context=this]\n */\nlistProto.filterSelf = function (dimensions, cb, context, contextCompat) {\n    'use strict';\n\n    if (!this._count) {\n        return;\n    }\n\n    if (typeof dimensions === 'function') {\n        contextCompat = context;\n        context = cb;\n        cb = dimensions;\n        dimensions = [];\n    }\n\n    // contextCompat just for compat echarts3\n    context = context || contextCompat || this;\n\n    dimensions = zrUtil.map(\n        normalizeDimensions(dimensions), this.getDimension, this\n    );\n\n    if (__DEV__) {\n        validateDimensions(this, dimensions);\n    }\n\n\n    var count = this.count();\n    var Ctor = getIndicesCtor(this);\n    var newIndices = new Ctor(count);\n    var value = [];\n    var dimSize = dimensions.length;\n\n    var offset = 0;\n    var dim0 = dimensions[0];\n\n    for (var i = 0; i < count; i++) {\n        var keep;\n        var rawIdx = this.getRawIndex(i);\n        // Simple optimization\n        if (dimSize === 0) {\n            keep = cb.call(context, i);\n        }\n        else if (dimSize === 1) {\n            var val = this._getFast(dim0, rawIdx);\n            keep = cb.call(context, val, i);\n        }\n        else {\n            for (var k = 0; k < dimSize; k++) {\n                value[k] = this._getFast(dim0, rawIdx);\n            }\n            value[k] = i;\n            keep = cb.apply(context, value);\n        }\n        if (keep) {\n            newIndices[offset++] = rawIdx;\n        }\n    }\n\n    // Set indices after filtered.\n    if (offset < count) {\n        this._indices = newIndices;\n    }\n    this._count = offset;\n    // Reset data extent\n    this._extent = {};\n\n    this.getRawIndex = this._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;\n\n    return this;\n};\n\n/**\n * Select data in range. (For optimization of filter)\n * (Manually inline code, support 5 million data filtering in data zoom.)\n */\nlistProto.selectRange = function (range) {\n    'use strict';\n\n    if (!this._count) {\n        return;\n    }\n\n    var dimensions = [];\n    for (var dim in range) {\n        if (range.hasOwnProperty(dim)) {\n            dimensions.push(dim);\n        }\n    }\n\n    if (__DEV__) {\n        validateDimensions(this, dimensions);\n    }\n\n    var dimSize = dimensions.length;\n    if (!dimSize) {\n        return;\n    }\n\n    var originalCount = this.count();\n    var Ctor = getIndicesCtor(this);\n    var newIndices = new Ctor(originalCount);\n\n    var offset = 0;\n    var dim0 = dimensions[0];\n\n    var min = range[dim0][0];\n    var max = range[dim0][1];\n\n    var quickFinished = false;\n    if (!this._indices) {\n        // Extreme optimization for common case. About 2x faster in chrome.\n        var idx = 0;\n        if (dimSize === 1) {\n            var dimStorage = this._storage[dimensions[0]];\n            for (var k = 0; k < this._chunkCount; k++) {\n                var chunkStorage = dimStorage[k];\n                var len = Math.min(this._count - k * this._chunkSize, this._chunkSize);\n                for (var i = 0; i < len; i++) {\n                    var val = chunkStorage[i];\n                    // NaN will not be filtered. Consider the case, in line chart, empty\n                    // value indicates the line should be broken. But for the case like\n                    // scatter plot, a data item with empty value will not be rendered,\n                    // but the axis extent may be effected if some other dim of the data\n                    // item has value. Fortunately it is not a significant negative effect.\n                    if (\n                        (val >= min && val <= max) || isNaN(val)\n                    ) {\n                        newIndices[offset++] = idx;\n                    }\n                    idx++;\n                }\n            }\n            quickFinished = true;\n        }\n        else if (dimSize === 2) {\n            var dimStorage = this._storage[dim0];\n            var dimStorage2 = this._storage[dimensions[1]];\n            var min2 = range[dimensions[1]][0];\n            var max2 = range[dimensions[1]][1];\n            for (var k = 0; k < this._chunkCount; k++) {\n                var chunkStorage = dimStorage[k];\n                var chunkStorage2 = dimStorage2[k];\n                var len = Math.min(this._count - k * this._chunkSize, this._chunkSize);\n                for (var i = 0; i < len; i++) {\n                    var val = chunkStorage[i];\n                    var val2 = chunkStorage2[i];\n                    // Do not filter NaN, see comment above.\n                    if ((\n                            (val >= min && val <= max) || isNaN(val)\n                        )\n                        && (\n                            (val2 >= min2 && val2 <= max2) || isNaN(val2)\n                        )\n                    ) {\n                        newIndices[offset++] = idx;\n                    }\n                    idx++;\n                }\n            }\n            quickFinished = true;\n        }\n    }\n    if (!quickFinished) {\n        if (dimSize === 1) {\n            for (var i = 0; i < originalCount; i++) {\n                var rawIndex = this.getRawIndex(i);\n                var val = this._getFast(dim0, rawIndex);\n                // Do not filter NaN, see comment above.\n                if (\n                    (val >= min && val <= max) || isNaN(val)\n                ) {\n                    newIndices[offset++] = rawIndex;\n                }\n            }\n        }\n        else {\n            for (var i = 0; i < originalCount; i++) {\n                var keep = true;\n                var rawIndex = this.getRawIndex(i);\n                for (var k = 0; k < dimSize; k++) {\n                    var dimk = dimensions[k];\n                    var val = this._getFast(dim, rawIndex);\n                    // Do not filter NaN, see comment above.\n                    if (val < range[dimk][0] || val > range[dimk][1]) {\n                        keep = false;\n                    }\n                }\n                if (keep) {\n                    newIndices[offset++] = this.getRawIndex(i);\n                }\n            }\n        }\n    }\n\n    // Set indices after filtered.\n    if (offset < originalCount) {\n        this._indices = newIndices;\n    }\n    this._count = offset;\n    // Reset data extent\n    this._extent = {};\n\n    this.getRawIndex = this._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;\n\n    return this;\n};\n\n/**\n * Data mapping to a plain array\n * @param {string|Array.<string>} [dimensions]\n * @param {Function} cb\n * @param {*} [context=this]\n * @return {Array}\n */\nlistProto.mapArray = function (dimensions, cb, context, contextCompat) {\n    'use strict';\n\n    if (typeof dimensions === 'function') {\n        contextCompat = context;\n        context = cb;\n        cb = dimensions;\n        dimensions = [];\n    }\n\n    // contextCompat just for compat echarts3\n    context = context || contextCompat || this;\n\n    var result = [];\n    this.each(dimensions, function () {\n        result.push(cb && cb.apply(this, arguments));\n    }, context);\n    return result;\n};\n\n// Data in excludeDimensions is copied, otherwise transfered.\nfunction cloneListForMapAndSample(original, excludeDimensions) {\n    var allDimensions = original.dimensions;\n    var list = new List(\n        zrUtil.map(allDimensions, original.getDimensionInfo, original),\n        original.hostModel\n    );\n    // FIXME If needs stackedOn, value may already been stacked\n    transferProperties(list, original);\n\n    var storage = list._storage = {};\n    var originalStorage = original._storage;\n\n    // Init storage\n    for (var i = 0; i < allDimensions.length; i++) {\n        var dim = allDimensions[i];\n        if (originalStorage[dim]) {\n            // Notice that we do not reset invertedIndicesMap here, becuase\n            // there is no scenario of mapping or sampling ordinal dimension.\n            if (zrUtil.indexOf(excludeDimensions, dim) >= 0) {\n                storage[dim] = cloneDimStore(originalStorage[dim]);\n                list._rawExtent[dim] = getInitialExtent();\n                list._extent[dim] = null;\n            }\n            else {\n                // Direct reference for other dimensions\n                storage[dim] = originalStorage[dim];\n            }\n        }\n    }\n    return list;\n}\n\nfunction cloneDimStore(originalDimStore) {\n    var newDimStore = new Array(originalDimStore.length);\n    for (var j = 0; j < originalDimStore.length; j++) {\n        newDimStore[j] = cloneChunk(originalDimStore[j]);\n    }\n    return newDimStore;\n}\n\nfunction getInitialExtent() {\n    return [Infinity, -Infinity];\n}\n\n/**\n * Data mapping to a new List with given dimensions\n * @param {string|Array.<string>} dimensions\n * @param {Function} cb\n * @param {*} [context=this]\n * @return {Array}\n */\nlistProto.map = function (dimensions, cb, context, contextCompat) {\n    'use strict';\n\n    // contextCompat just for compat echarts3\n    context = context || contextCompat || this;\n\n    dimensions = zrUtil.map(\n        normalizeDimensions(dimensions), this.getDimension, this\n    );\n\n    if (__DEV__) {\n        validateDimensions(this, dimensions);\n    }\n\n    var list = cloneListForMapAndSample(this, dimensions);\n\n    // Following properties are all immutable.\n    // So we can reference to the same value\n    list._indices = this._indices;\n    list.getRawIndex = list._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;\n\n    var storage = list._storage;\n\n    var tmpRetValue = [];\n    var chunkSize = this._chunkSize;\n    var dimSize = dimensions.length;\n    var dataCount = this.count();\n    var values = [];\n    var rawExtent = list._rawExtent;\n\n    for (var dataIndex = 0; dataIndex < dataCount; dataIndex++) {\n        for (var dimIndex = 0; dimIndex < dimSize; dimIndex++) {\n            values[dimIndex] = this.get(dimensions[dimIndex], dataIndex /*, stack */);\n        }\n        values[dimSize] = dataIndex;\n\n        var retValue = cb && cb.apply(context, values);\n        if (retValue != null) {\n            // a number or string (in oridinal dimension)?\n            if (typeof retValue !== 'object') {\n                tmpRetValue[0] = retValue;\n                retValue = tmpRetValue;\n            }\n\n            var rawIndex = this.getRawIndex(dataIndex);\n            var chunkIndex = Math.floor(rawIndex / chunkSize);\n            var chunkOffset = rawIndex % chunkSize;\n\n            for (var i = 0; i < retValue.length; i++) {\n                var dim = dimensions[i];\n                var val = retValue[i];\n                var rawExtentOnDim = rawExtent[dim];\n\n                var dimStore = storage[dim];\n                if (dimStore) {\n                    dimStore[chunkIndex][chunkOffset] = val;\n                }\n\n                if (val < rawExtentOnDim[0]) {\n                    rawExtentOnDim[0] = val;\n                }\n                if (val > rawExtentOnDim[1]) {\n                    rawExtentOnDim[1] = val;\n                }\n            }\n        }\n    }\n\n    return list;\n};\n\n/**\n * Large data down sampling on given dimension\n * @param {string} dimension\n * @param {number} rate\n * @param {Function} sampleValue\n * @param {Function} sampleIndex Sample index for name and id\n */\nlistProto.downSample = function (dimension, rate, sampleValue, sampleIndex) {\n    var list = cloneListForMapAndSample(this, [dimension]);\n    var targetStorage = list._storage;\n\n    var frameValues = [];\n    var frameSize = Math.floor(1 / rate);\n\n    var dimStore = targetStorage[dimension];\n    var len = this.count();\n    var chunkSize = this._chunkSize;\n    var rawExtentOnDim = list._rawExtent[dimension];\n\n    var newIndices = new (getIndicesCtor(this))(len);\n\n    var offset = 0;\n    for (var i = 0; i < len; i += frameSize) {\n        // Last frame\n        if (frameSize > len - i) {\n            frameSize = len - i;\n            frameValues.length = frameSize;\n        }\n        for (var k = 0; k < frameSize; k++) {\n            var dataIdx = this.getRawIndex(i + k);\n            var originalChunkIndex = Math.floor(dataIdx / chunkSize);\n            var originalChunkOffset = dataIdx % chunkSize;\n            frameValues[k] = dimStore[originalChunkIndex][originalChunkOffset];\n        }\n        var value = sampleValue(frameValues);\n        var sampleFrameIdx = this.getRawIndex(\n            Math.min(i + sampleIndex(frameValues, value) || 0, len - 1)\n        );\n        var sampleChunkIndex = Math.floor(sampleFrameIdx / chunkSize);\n        var sampleChunkOffset = sampleFrameIdx % chunkSize;\n        // Only write value on the filtered data\n        dimStore[sampleChunkIndex][sampleChunkOffset] = value;\n\n        if (value < rawExtentOnDim[0]) {\n            rawExtentOnDim[0] = value;\n        }\n        if (value > rawExtentOnDim[1]) {\n            rawExtentOnDim[1] = value;\n        }\n\n        newIndices[offset++] = sampleFrameIdx;\n    }\n\n    list._count = offset;\n    list._indices = newIndices;\n\n    list.getRawIndex = getRawIndexWithIndices;\n\n    return list;\n};\n\n/**\n * Get model of one data item.\n *\n * @param {number} idx\n */\n// FIXME Model proxy ?\nlistProto.getItemModel = function (idx) {\n    var hostModel = this.hostModel;\n    return new Model(this.getRawDataItem(idx), hostModel, hostModel && hostModel.ecModel);\n};\n\n/**\n * Create a data differ\n * @param {module:echarts/data/List} otherList\n * @return {module:echarts/data/DataDiffer}\n */\nlistProto.diff = function (otherList) {\n    var thisList = this;\n\n    return new DataDiffer(\n        otherList ? otherList.getIndices() : [],\n        this.getIndices(),\n        function (idx) {\n            return getId(otherList, idx);\n        },\n        function (idx) {\n            return getId(thisList, idx);\n        }\n    );\n};\n/**\n * Get visual property.\n * @param {string} key\n */\nlistProto.getVisual = function (key) {\n    var visual = this._visual;\n    return visual && visual[key];\n};\n\n/**\n * Set visual property\n * @param {string|Object} key\n * @param {*} [value]\n *\n * @example\n *  setVisual('color', color);\n *  setVisual({\n *      'color': color\n *  });\n */\nlistProto.setVisual = function (key, val) {\n    if (isObject(key)) {\n        for (var name in key) {\n            if (key.hasOwnProperty(name)) {\n                this.setVisual(name, key[name]);\n            }\n        }\n        return;\n    }\n    this._visual = this._visual || {};\n    this._visual[key] = val;\n};\n\n/**\n * Set layout property.\n * @param {string|Object} key\n * @param {*} [val]\n */\nlistProto.setLayout = function (key, val) {\n    if (isObject(key)) {\n        for (var name in key) {\n            if (key.hasOwnProperty(name)) {\n                this.setLayout(name, key[name]);\n            }\n        }\n        return;\n    }\n    this._layout[key] = val;\n};\n\n/**\n * Get layout property.\n * @param  {string} key.\n * @return {*}\n */\nlistProto.getLayout = function (key) {\n    return this._layout[key];\n};\n\n/**\n * Get layout of single data item\n * @param {number} idx\n */\nlistProto.getItemLayout = function (idx) {\n    return this._itemLayouts[idx];\n};\n\n/**\n * Set layout of single data item\n * @param {number} idx\n * @param {Object} layout\n * @param {boolean=} [merge=false]\n */\nlistProto.setItemLayout = function (idx, layout, merge) {\n    this._itemLayouts[idx] = merge\n        ? zrUtil.extend(this._itemLayouts[idx] || {}, layout)\n        : layout;\n};\n\n/**\n * Clear all layout of single data item\n */\nlistProto.clearItemLayouts = function () {\n    this._itemLayouts.length = 0;\n};\n\n/**\n * Get visual property of single data item\n * @param {number} idx\n * @param {string} key\n * @param {boolean} [ignoreParent=false]\n */\nlistProto.getItemVisual = function (idx, key, ignoreParent) {\n    var itemVisual = this._itemVisuals[idx];\n    var val = itemVisual && itemVisual[key];\n    if (val == null && !ignoreParent) {\n        // Use global visual property\n        return this.getVisual(key);\n    }\n    return val;\n};\n\n/**\n * Set visual property of single data item\n *\n * @param {number} idx\n * @param {string|Object} key\n * @param {*} [value]\n *\n * @example\n *  setItemVisual(0, 'color', color);\n *  setItemVisual(0, {\n *      'color': color\n *  });\n */\nlistProto.setItemVisual = function (idx, key, value) {\n    var itemVisual = this._itemVisuals[idx] || {};\n    var hasItemVisual = this.hasItemVisual;\n    this._itemVisuals[idx] = itemVisual;\n\n    if (isObject(key)) {\n        for (var name in key) {\n            if (key.hasOwnProperty(name)) {\n                itemVisual[name] = key[name];\n                hasItemVisual[name] = true;\n            }\n        }\n        return;\n    }\n    itemVisual[key] = value;\n    hasItemVisual[key] = true;\n};\n\n/**\n * Clear itemVisuals and list visual.\n */\nlistProto.clearAllVisual = function () {\n    this._visual = {};\n    this._itemVisuals = [];\n    this.hasItemVisual = {};\n};\n\nvar setItemDataAndSeriesIndex = function (child) {\n    child.seriesIndex = this.seriesIndex;\n    child.dataIndex = this.dataIndex;\n    child.dataType = this.dataType;\n};\n/**\n * Set graphic element relative to data. It can be set as null\n * @param {number} idx\n * @param {module:zrender/Element} [el]\n */\nlistProto.setItemGraphicEl = function (idx, el) {\n    var hostModel = this.hostModel;\n\n    if (el) {\n        // Add data index and series index for indexing the data by element\n        // Useful in tooltip\n        el.dataIndex = idx;\n        el.dataType = this.dataType;\n        el.seriesIndex = hostModel && hostModel.seriesIndex;\n        if (el.type === 'group') {\n            el.traverse(setItemDataAndSeriesIndex, el);\n        }\n    }\n\n    this._graphicEls[idx] = el;\n};\n\n/**\n * @param {number} idx\n * @return {module:zrender/Element}\n */\nlistProto.getItemGraphicEl = function (idx) {\n    return this._graphicEls[idx];\n};\n\n/**\n * @param {Function} cb\n * @param {*} context\n */\nlistProto.eachItemGraphicEl = function (cb, context) {\n    zrUtil.each(this._graphicEls, function (el, idx) {\n        if (el) {\n            cb && cb.call(context, el, idx);\n        }\n    });\n};\n\n/**\n * Shallow clone a new list except visual and layout properties, and graph elements.\n * New list only change the indices.\n */\nlistProto.cloneShallow = function (list) {\n    if (!list) {\n        var dimensionInfoList = zrUtil.map(this.dimensions, this.getDimensionInfo, this);\n        list = new List(dimensionInfoList, this.hostModel);\n    }\n\n    // FIXME\n    list._storage = this._storage;\n\n    transferProperties(list, this);\n\n    // Clone will not change the data extent and indices\n    if (this._indices) {\n        var Ctor = this._indices.constructor;\n        list._indices = new Ctor(this._indices);\n    }\n    else {\n        list._indices = null;\n    }\n    list.getRawIndex = list._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;\n\n    return list;\n};\n\n/**\n * Wrap some method to add more feature\n * @param {string} methodName\n * @param {Function} injectFunction\n */\nlistProto.wrapMethod = function (methodName, injectFunction) {\n    var originalMethod = this[methodName];\n    if (typeof originalMethod !== 'function') {\n        return;\n    }\n    this.__wrappedMethods = this.__wrappedMethods || [];\n    this.__wrappedMethods.push(methodName);\n    this[methodName] = function () {\n        var res = originalMethod.apply(this, arguments);\n        return injectFunction.apply(this, [res].concat(zrUtil.slice(arguments)));\n    };\n};\n\n// Methods that create a new list based on this list should be listed here.\n// Notice that those method should `RETURN` the new list.\nlistProto.TRANSFERABLE_METHODS = ['cloneShallow', 'downSample', 'map'];\n// Methods that change indices of this list should be listed here.\nlistProto.CHANGABLE_METHODS = ['filterSelf', 'selectRange'];\n\nexport default List;\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 * @deprecated\n * Use `echarts/data/helper/createDimensions` instead.\n */\n\nimport {createHashMap, each, isString, defaults, extend, isObject, clone} from 'zrender/src/core/util';\nimport {normalizeToArray} from '../../util/model';\nimport {guessOrdinal} from './sourceHelper';\nimport Source from '../Source';\nimport {OTHER_DIMENSIONS} from './dimensionHelper';\n\n/**\n * @see {module:echarts/test/ut/spec/data/completeDimensions}\n *\n * Complete the dimensions array, by user defined `dimension` and `encode`,\n * and guessing from the data structure.\n * If no 'value' dimension specified, the first no-named dimension will be\n * named as 'value'.\n *\n * @param {Array.<string>} sysDims Necessary dimensions, like ['x', 'y'], which\n *      provides not only dim template, but also default order.\n *      properties: 'name', 'type', 'displayName'.\n *      `name` of each item provides default coord name.\n *      [{dimsDef: [string|Object, ...]}, ...] dimsDef of sysDim item provides default dim name, and\n *                                    provide dims count that the sysDim required.\n *      [{ordinalMeta}] can be specified.\n * @param {module:echarts/data/Source|Array|Object} source or data (for compatibal with pervious)\n * @param {Object} [opt]\n * @param {Array.<Object|string>} [opt.dimsDef] option.series.dimensions User defined dimensions\n *      For example: ['asdf', {name, type}, ...].\n * @param {Object|HashMap} [opt.encodeDef] option.series.encode {x: 2, y: [3, 1], tooltip: [1, 2], label: 3}\n * @param {string} [opt.generateCoord] Generate coord dim with the given name.\n *                 If not specified, extra dim names will be:\n *                 'value', 'value0', 'value1', ...\n * @param {number} [opt.generateCoordCount] By default, the generated dim name is `generateCoord`.\n *                 If `generateCoordCount` specified, the generated dim names will be:\n *                 `generateCoord` + 0, `generateCoord` + 1, ...\n *                 can be Infinity, indicate that use all of the remain columns.\n * @param {number} [opt.dimCount] If not specified, guess by the first data item.\n * @param {number} [opt.encodeDefaulter] If not specified, auto find the next available data dim.\n * @return {Array.<Object>} [{\n *      name: string mandatory,\n *      displayName: string, the origin name in dimsDef, see source helper.\n *                 If displayName given, the tooltip will displayed vertically.\n *      coordDim: string mandatory,\n *      coordDimIndex: number mandatory,\n *      type: string optional,\n *      otherDims: { never null/undefined\n *          tooltip: number optional,\n *          label: number optional,\n *          itemName: number optional,\n *          seriesName: number optional,\n *      },\n *      isExtraCoord: boolean true if coord is generated\n *          (not specified in encode and not series specified)\n *      other props ...\n * }]\n */\nfunction completeDimensions(sysDims, source, opt) {\n    if (!Source.isInstance(source)) {\n        source = Source.seriesDataToSource(source);\n    }\n\n    opt = opt || {};\n    sysDims = (sysDims || []).slice();\n    var dimsDef = (opt.dimsDef || []).slice();\n    var encodeDef = createHashMap(opt.encodeDef);\n    var dataDimNameMap = createHashMap();\n    var coordDimNameMap = createHashMap();\n    // var valueCandidate;\n    var result = [];\n\n    var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimCount);\n\n    // Apply user defined dims (`name` and `type`) and init result.\n    for (var i = 0; i < dimCount; i++) {\n        var dimDefItem = dimsDef[i] = extend(\n            {}, isObject(dimsDef[i]) ? dimsDef[i] : {name: dimsDef[i]}\n        );\n        var userDimName = dimDefItem.name;\n        var resultItem = result[i] = {otherDims: {}};\n        // Name will be applied later for avoiding duplication.\n        if (userDimName != null && dataDimNameMap.get(userDimName) == null) {\n            // Only if `series.dimensions` is defined in option\n            // displayName, will be set, and dimension will be diplayed vertically in\n            // tooltip by default.\n            resultItem.name = resultItem.displayName = userDimName;\n            dataDimNameMap.set(userDimName, i);\n        }\n        dimDefItem.type != null && (resultItem.type = dimDefItem.type);\n        dimDefItem.displayName != null && (resultItem.displayName = dimDefItem.displayName);\n    }\n\n    // Set `coordDim` and `coordDimIndex` by `encodeDef` and normalize `encodeDef`.\n    encodeDef.each(function (dataDims, coordDim) {\n        dataDims = normalizeToArray(dataDims).slice();\n\n        // Note: It is allowed that `dataDims.length` is `0`, e.g., options is\n        // `{encode: {x: -1, y: 1}}`. Should not filter anything in\n        // this case.\n        if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) {\n            encodeDef.set(coordDim, false);\n            return;\n        }\n\n        var validDataDims = encodeDef.set(coordDim, []);\n        each(dataDims, function (resultDimIdx, idx) {\n            // The input resultDimIdx can be dim name or index.\n            isString(resultDimIdx) && (resultDimIdx = dataDimNameMap.get(resultDimIdx));\n            if (resultDimIdx != null && resultDimIdx < dimCount) {\n                validDataDims[idx] = resultDimIdx;\n                applyDim(result[resultDimIdx], coordDim, idx);\n            }\n        });\n    });\n\n    // Apply templetes and default order from `sysDims`.\n    var availDimIdx = 0;\n    each(sysDims, function (sysDimItem, sysDimIndex) {\n        var coordDim;\n        var sysDimItem;\n        var sysDimItemDimsDef;\n        var sysDimItemOtherDims;\n        if (isString(sysDimItem)) {\n            coordDim = sysDimItem;\n            sysDimItem = {};\n        }\n        else {\n            coordDim = sysDimItem.name;\n            var ordinalMeta = sysDimItem.ordinalMeta;\n            sysDimItem.ordinalMeta = null;\n            sysDimItem = clone(sysDimItem);\n            sysDimItem.ordinalMeta = ordinalMeta;\n            // `coordDimIndex` should not be set directly.\n            sysDimItemDimsDef = sysDimItem.dimsDef;\n            sysDimItemOtherDims = sysDimItem.otherDims;\n            sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex =\n                sysDimItem.dimsDef = sysDimItem.otherDims = null;\n        }\n\n        var dataDims = encodeDef.get(coordDim);\n\n        // negative resultDimIdx means no need to mapping.\n        if (dataDims === false) {\n            return;\n        }\n\n        var dataDims = normalizeToArray(dataDims);\n\n        // dimensions provides default dim sequences.\n        if (!dataDims.length) {\n            for (var i = 0; i < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i++) {\n                while (availDimIdx < result.length && result[availDimIdx].coordDim != null) {\n                    availDimIdx++;\n                }\n                availDimIdx < result.length && dataDims.push(availDimIdx++);\n            }\n        }\n\n        // Apply templates.\n        each(dataDims, function (resultDimIdx, coordDimIndex) {\n            var resultItem = result[resultDimIdx];\n            applyDim(defaults(resultItem, sysDimItem), coordDim, coordDimIndex);\n            if (resultItem.name == null && sysDimItemDimsDef) {\n                var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex];\n                !isObject(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = {name: sysDimItemDimsDefItem});\n                resultItem.name = resultItem.displayName = sysDimItemDimsDefItem.name;\n                resultItem.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip;\n            }\n            // FIXME refactor, currently only used in case: {otherDims: {tooltip: false}}\n            sysDimItemOtherDims && defaults(resultItem.otherDims, sysDimItemOtherDims);\n        });\n    });\n\n    function applyDim(resultItem, coordDim, coordDimIndex) {\n        if (OTHER_DIMENSIONS.get(coordDim) != null) {\n            resultItem.otherDims[coordDim] = coordDimIndex;\n        }\n        else {\n            resultItem.coordDim = coordDim;\n            resultItem.coordDimIndex = coordDimIndex;\n            coordDimNameMap.set(coordDim, true);\n        }\n    }\n\n    // Make sure the first extra dim is 'value'.\n    var generateCoord = opt.generateCoord;\n    var generateCoordCount = opt.generateCoordCount;\n    var fromZero = generateCoordCount != null;\n    generateCoordCount = generateCoord ? (generateCoordCount || 1) : 0;\n    var extra = generateCoord || 'value';\n\n    // Set dim `name` and other `coordDim` and other props.\n    for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) {\n        var resultItem = result[resultDimIdx] = result[resultDimIdx] || {};\n        var coordDim = resultItem.coordDim;\n\n        if (coordDim == null) {\n            resultItem.coordDim = genName(\n                extra, coordDimNameMap, fromZero\n            );\n            resultItem.coordDimIndex = 0;\n            if (!generateCoord || generateCoordCount <= 0) {\n                resultItem.isExtraCoord = true;\n            }\n            generateCoordCount--;\n        }\n\n        resultItem.name == null && (resultItem.name = genName(\n            resultItem.coordDim,\n            dataDimNameMap\n        ));\n\n        if (resultItem.type == null && guessOrdinal(source, resultDimIdx, resultItem.name)) {\n            resultItem.type = 'ordinal';\n        }\n    }\n\n    return result;\n}\n\n// ??? TODO\n// Originally detect dimCount by data[0]. Should we\n// optimize it to only by sysDims and dimensions and encode.\n// So only necessary dims will be initialized.\n// But\n// (1) custom series should be considered. where other dims\n// may be visited.\n// (2) sometimes user need to calcualte bubble size or use visualMap\n// on other dimensions besides coordSys needed.\n// So, dims that is not used by system, should be shared in storage?\nfunction getDimCount(source, sysDims, dimsDef, optDimCount) {\n    // Note that the result dimCount should not small than columns count\n    // of data, otherwise `dataDimNameMap` checking will be incorrect.\n    var dimCount = Math.max(\n        source.dimensionsDetectCount || 1,\n        sysDims.length,\n        dimsDef.length,\n        optDimCount || 0\n    );\n    each(sysDims, function (sysDimItem) {\n        var sysDimItemDimsDef = sysDimItem.dimsDef;\n        sysDimItemDimsDef && (dimCount = Math.max(dimCount, sysDimItemDimsDef.length));\n    });\n    return dimCount;\n}\n\nfunction genName(name, map, fromZero) {\n    if (fromZero || map.get(name) != null) {\n        var i = 0;\n        while (map.get(name + i) != null) {\n            i++;\n        }\n        name += i;\n    }\n    map.set(name, true);\n    return name;\n}\n\nexport default completeDimensions;\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 * Substitute `completeDimensions`.\n * `completeDimensions` is to be deprecated.\n */\nimport completeDimensions from './completeDimensions';\n\n/**\n * @param {module:echarts/data/Source|module:echarts/data/List} source or data.\n * @param {Object|Array} [opt]\n * @param {Array.<string|Object>} [opt.coordDimensions=[]]\n * @param {number} [opt.dimensionsCount]\n * @param {string} [opt.generateCoord]\n * @param {string} [opt.generateCoordCount]\n * @param {Array.<string|Object>} [opt.dimensionsDefine=source.dimensionsDefine] Overwrite source define.\n * @param {Object|HashMap} [opt.encodeDefine=source.encodeDefine] Overwrite source define.\n * @return {Array.<Object>} dimensionsInfo\n */\nexport default function (source, opt) {\n    opt = opt || {};\n    return completeDimensions(opt.coordDimensions || [], source, {\n        dimsDef: opt.dimensionsDefine || source.dimensionsDefine,\n        encodeDef: opt.encodeDefine || source.encodeDefine,\n        dimCount: opt.dimensionsCount,\n        generateCoord: opt.generateCoord,\n        generateCoordCount: opt.generateCoordCount\n    });\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {each, isString} from 'zrender/src/core/util';\n\n/**\n * Note that it is too complicated to support 3d stack by value\n * (have to create two-dimension inverted index), so in 3d case\n * we just support that stacked by index.\n *\n * @param {module:echarts/model/Series} seriesModel\n * @param {Array.<string|Object>} dimensionInfoList The same as the input of <module:echarts/data/List>.\n *        The input dimensionInfoList will be modified.\n * @param {Object} [opt]\n * @param {boolean} [opt.stackedCoordDimension=''] Specify a coord dimension if needed.\n * @param {boolean} [opt.byIndex=false]\n * @return {Object} calculationInfo\n * {\n *     stackedDimension: string\n *     stackedByDimension: string\n *     isStackedByIndex: boolean\n *     stackedOverDimension: string\n *     stackResultDimension: string\n * }\n */\nexport function enableDataStack(seriesModel, dimensionInfoList, opt) {\n    opt = opt || {};\n    var byIndex = opt.byIndex;\n    var stackedCoordDimension = opt.stackedCoordDimension;\n\n    // Compatibal: when `stack` is set as '', do not stack.\n    var mayStack = !!(seriesModel && seriesModel.get('stack'));\n    var stackedByDimInfo;\n    var stackedDimInfo;\n    var stackResultDimension;\n    var stackedOverDimension;\n\n    each(dimensionInfoList, function (dimensionInfo, index) {\n        if (isString(dimensionInfo)) {\n            dimensionInfoList[index] = dimensionInfo = {name: dimensionInfo};\n        }\n\n        if (mayStack && !dimensionInfo.isExtraCoord) {\n            // Find the first ordinal dimension as the stackedByDimInfo.\n            if (!byIndex && !stackedByDimInfo && dimensionInfo.ordinalMeta) {\n                stackedByDimInfo = dimensionInfo;\n            }\n            // Find the first stackable dimension as the stackedDimInfo.\n            if (!stackedDimInfo\n                && dimensionInfo.type !== 'ordinal'\n                && dimensionInfo.type !== 'time'\n                && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim)\n            ) {\n                stackedDimInfo = dimensionInfo;\n            }\n        }\n    });\n\n    if (stackedDimInfo && !byIndex && !stackedByDimInfo) {\n        // Compatible with previous design, value axis (time axis) only stack by index.\n        // It may make sense if the user provides elaborately constructed data.\n        byIndex = true;\n    }\n\n    // Add stack dimension, they can be both calculated by coordinate system in `unionExtent`.\n    // That put stack logic in List is for using conveniently in echarts extensions, but it\n    // might not be a good way.\n    if (stackedDimInfo) {\n        // Use a weird name that not duplicated with other names.\n        stackResultDimension = '__\\0ecstackresult';\n        stackedOverDimension = '__\\0ecstackedover';\n\n        // Create inverted index to fast query index by value.\n        if (stackedByDimInfo) {\n            stackedByDimInfo.createInvertedIndices = true;\n        }\n\n        var stackedDimCoordDim = stackedDimInfo.coordDim;\n        var stackedDimType = stackedDimInfo.type;\n        var stackedDimCoordIndex = 0;\n\n        each(dimensionInfoList, function (dimensionInfo) {\n            if (dimensionInfo.coordDim === stackedDimCoordDim) {\n                stackedDimCoordIndex++;\n            }\n        });\n\n        dimensionInfoList.push({\n            name: stackResultDimension,\n            coordDim: stackedDimCoordDim,\n            coordDimIndex: stackedDimCoordIndex,\n            type: stackedDimType,\n            isExtraCoord: true,\n            isCalculationCoord: true\n        });\n\n        stackedDimCoordIndex++;\n\n        dimensionInfoList.push({\n            name: stackedOverDimension,\n            // This dimension contains stack base (generally, 0), so do not set it as\n            // `stackedDimCoordDim` to avoid extent calculation, consider log scale.\n            coordDim: stackedOverDimension,\n            coordDimIndex: stackedDimCoordIndex,\n            type: stackedDimType,\n            isExtraCoord: true,\n            isCalculationCoord: true\n        });\n    }\n\n    return {\n        stackedDimension: stackedDimInfo && stackedDimInfo.name,\n        stackedByDimension: stackedByDimInfo && stackedByDimInfo.name,\n        isStackedByIndex: byIndex,\n        stackedOverDimension: stackedOverDimension,\n        stackResultDimension: stackResultDimension\n    };\n}\n\n/**\n * @param {module:echarts/data/List} data\n * @param {string} stackedDim\n */\nexport function isDimensionStacked(data, stackedDim /*, stackedByDim*/) {\n    // Each single series only maps to one pair of axis. So we do not need to\n    // check stackByDim, whatever stacked by a dimension or stacked by index.\n    return !!stackedDim && stackedDim === data.getCalculationInfo('stackedDimension');\n        // && (\n        //     stackedByDim != null\n        //         ? stackedByDim === data.getCalculationInfo('stackedByDimension')\n        //         : data.getCalculationInfo('isStackedByIndex')\n        // );\n}\n\n/**\n * @param {module:echarts/data/List} data\n * @param {string} targetDim\n * @param {string} [stackedByDim] If not input this parameter, check whether\n *                                stacked by index.\n * @return {string} dimension\n */\nexport function getStackedDimension(data, targetDim) {\n    return isDimensionStacked(data, targetDim)\n        ? data.getCalculationInfo('stackResultDimension')\n        : targetDim;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport List from '../../data/List';\nimport createDimensions from '../../data/helper/createDimensions';\nimport {SOURCE_FORMAT_ORIGINAL} from '../../data/helper/sourceType';\nimport {getDimensionTypeByAxis} from '../../data/helper/dimensionHelper';\nimport {getDataItemValue} from '../../util/model';\nimport CoordinateSystem from '../../CoordinateSystem';\nimport {getCoordSysDefineBySeries} from '../../model/referHelper';\nimport Source from '../../data/Source';\nimport {enableDataStack} from '../../data/helper/dataStackHelper';\n\n/**\n * @param {module:echarts/data/Source|Array} source Or raw data.\n * @param {module:echarts/model/Series} seriesModel\n * @param {Object} [opt]\n * @param {string} [opt.generateCoord]\n */\nfunction createListFromArray(source, seriesModel, opt) {\n    opt = opt || {};\n\n    if (!Source.isInstance(source)) {\n        source = Source.seriesDataToSource(source);\n    }\n\n    var coordSysName = seriesModel.get('coordinateSystem');\n    var registeredCoordSys = CoordinateSystem.get(coordSysName);\n\n    var coordSysDefine = getCoordSysDefineBySeries(seriesModel);\n\n    var coordSysDimDefs;\n\n    if (coordSysDefine) {\n        coordSysDimDefs = zrUtil.map(coordSysDefine.coordSysDims, function (dim) {\n            var dimInfo = {name: dim};\n            var axisModel = coordSysDefine.axisMap.get(dim);\n            if (axisModel) {\n                var axisType = axisModel.get('type');\n                dimInfo.type = getDimensionTypeByAxis(axisType);\n                // dimInfo.stackable = isStackable(axisType);\n            }\n            return dimInfo;\n        });\n    }\n\n    if (!coordSysDimDefs) {\n        // Get dimensions from registered coordinate system\n        coordSysDimDefs = (registeredCoordSys && (\n            registeredCoordSys.getDimensionsInfo\n                ? registeredCoordSys.getDimensionsInfo()\n                : registeredCoordSys.dimensions.slice()\n        )) || ['x', 'y'];\n    }\n\n    var dimInfoList = createDimensions(source, {\n        coordDimensions: coordSysDimDefs,\n        generateCoord: opt.generateCoord\n    });\n\n    var firstCategoryDimIndex;\n    var hasNameEncode;\n    coordSysDefine && zrUtil.each(dimInfoList, function (dimInfo, dimIndex) {\n        var coordDim = dimInfo.coordDim;\n        var categoryAxisModel = coordSysDefine.categoryAxisMap.get(coordDim);\n        if (categoryAxisModel) {\n            if (firstCategoryDimIndex == null) {\n                firstCategoryDimIndex = dimIndex;\n            }\n            dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta();\n        }\n        if (dimInfo.otherDims.itemName != null) {\n            hasNameEncode = true;\n        }\n    });\n    if (!hasNameEncode && firstCategoryDimIndex != null) {\n        dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0;\n    }\n\n    var stackCalculationInfo = enableDataStack(seriesModel, dimInfoList);\n\n    var list = new List(dimInfoList, seriesModel);\n\n    list.setCalculationInfo(stackCalculationInfo);\n\n    var dimValueGetter = (firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source))\n        ? function (itemOpt, dimName, dataIndex, dimIndex) {\n            // Use dataIndex as ordinal value in categoryAxis\n            return dimIndex === firstCategoryDimIndex\n                ? dataIndex\n                : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex);\n        }\n        : null;\n\n    list.hasItemOption = false;\n    list.initData(source, null, dimValueGetter);\n\n    return list;\n}\n\nfunction isNeedCompleteOrdinalData(source) {\n    if (source.sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n        var sampleItem = firstDataNotNull(source.data || []);\n        return sampleItem != null\n            && !zrUtil.isArray(getDataItemValue(sampleItem));\n    }\n}\n\nfunction firstDataNotNull(data) {\n    var i = 0;\n    while (i < data.length && data[i] == null) {\n        i++;\n    }\n    return data[i];\n}\n\nexport default createListFromArray;\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 * // Scale class management\n * @module echarts/scale/Scale\n */\n\nimport * as clazzUtil from '../util/clazz';\n\n/**\n * @param {Object} [setting]\n */\nfunction Scale(setting) {\n    this._setting = setting || {};\n\n    /**\n     * Extent\n     * @type {Array.<number>}\n     * @protected\n     */\n    this._extent = [Infinity, -Infinity];\n\n    /**\n     * Step is calculated in adjustExtent\n     * @type {Array.<number>}\n     * @protected\n     */\n    this._interval = 0;\n\n    this.init && this.init.apply(this, arguments);\n}\n\n/**\n * Parse input val to valid inner number.\n * @param {*} val\n * @return {number}\n */\nScale.prototype.parse = function (val) {\n    // Notice: This would be a trap here, If the implementation\n    // of this method depends on extent, and this method is used\n    // before extent set (like in dataZoom), it would be wrong.\n    // Nevertheless, parse does not depend on extent generally.\n    return val;\n};\n\nScale.prototype.getSetting = function (name) {\n    return this._setting[name];\n};\n\nScale.prototype.contain = function (val) {\n    var extent = this._extent;\n    return val >= extent[0] && val <= extent[1];\n};\n\n/**\n * Normalize value to linear [0, 1], return 0.5 if extent span is 0\n * @param {number} val\n * @return {number}\n */\nScale.prototype.normalize = function (val) {\n    var extent = this._extent;\n    if (extent[1] === extent[0]) {\n        return 0.5;\n    }\n    return (val - extent[0]) / (extent[1] - extent[0]);\n};\n\n/**\n * Scale normalized value\n * @param {number} val\n * @return {number}\n */\nScale.prototype.scale = function (val) {\n    var extent = this._extent;\n    return val * (extent[1] - extent[0]) + extent[0];\n};\n\n/**\n * Set extent from data\n * @param {Array.<number>} other\n */\nScale.prototype.unionExtent = function (other) {\n    var extent = this._extent;\n    other[0] < extent[0] && (extent[0] = other[0]);\n    other[1] > extent[1] && (extent[1] = other[1]);\n    // not setExtent because in log axis it may transformed to power\n    // this.setExtent(extent[0], extent[1]);\n};\n\n/**\n * Set extent from data\n * @param {module:echarts/data/List} data\n * @param {string} dim\n */\nScale.prototype.unionExtentFromData = function (data, dim) {\n    this.unionExtent(data.getApproximateExtent(dim));\n};\n\n/**\n * Get extent\n * @return {Array.<number>}\n */\nScale.prototype.getExtent = function () {\n    return this._extent.slice();\n};\n\n/**\n * Set extent\n * @param {number} start\n * @param {number} end\n */\nScale.prototype.setExtent = function (start, end) {\n    var thisExtent = this._extent;\n    if (!isNaN(start)) {\n        thisExtent[0] = start;\n    }\n    if (!isNaN(end)) {\n        thisExtent[1] = end;\n    }\n};\n\n/**\n * When axis extent depends on data and no data exists,\n * axis ticks should not be drawn, which is named 'blank'.\n */\nScale.prototype.isBlank = function () {\n    return this._isBlank;\n},\n\n/**\n * When axis extent depends on data and no data exists,\n * axis ticks should not be drawn, which is named 'blank'.\n */\nScale.prototype.setBlank = function (isBlank) {\n    this._isBlank = isBlank;\n};\n\n/**\n * @abstract\n * @param {*} tick\n * @return {string} label of the tick.\n */\nScale.prototype.getLabel = null;\n\n\nclazzUtil.enableClassExtend(Scale);\nclazzUtil.enableClassManagement(Scale, {\n    registerWhenExtend: true\n});\n\nexport default Scale;","/*\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\nimport {createHashMap, isObject, map} from 'zrender/src/core/util';\n\n/**\n * @constructor\n * @param {Object} [opt]\n * @param {Object} [opt.categories=[]]\n * @param {Object} [opt.needCollect=false]\n * @param {Object} [opt.deduplication=false]\n */\nfunction OrdinalMeta(opt) {\n\n    /**\n     * @readOnly\n     * @type {Array.<string>}\n     */\n    this.categories = opt.categories || [];\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._needCollect = opt.needCollect;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._deduplication = opt.deduplication;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._map;\n}\n\n/**\n * @param {module:echarts/model/Model} axisModel\n * @return {module:echarts/data/OrdinalMeta}\n */\nOrdinalMeta.createByAxisModel = function (axisModel) {\n    var option = axisModel.option;\n    var data = option.data;\n    var categories = data && map(data, getName);\n\n    return new OrdinalMeta({\n        categories: categories,\n        needCollect: !categories,\n        // deduplication is default in axis.\n        deduplication: option.dedplication !== false\n    });\n};\n\nvar proto = OrdinalMeta.prototype;\n\n/**\n * @param {string} category\n * @return {number} ordinal\n */\nproto.getOrdinal = function (category) {\n    return getOrCreateMap(this).get(category);\n};\n\n/**\n * @param {*} category\n * @return {number} The ordinal. If not found, return NaN.\n */\nproto.parseAndCollect = function (category) {\n    var index;\n    var needCollect = this._needCollect;\n\n    // The value of category dim can be the index of the given category set.\n    // This feature is only supported when !needCollect, because we should\n    // consider a common case: a value is 2017, which is a number but is\n    // expected to be tread as a category. This case usually happen in dataset,\n    // where it happent to be no need of the index feature.\n    if (typeof category !== 'string' && !needCollect) {\n        return category;\n    }\n\n    // Optimize for the scenario:\n    // category is ['2012-01-01', '2012-01-02', ...], where the input\n    // data has been ensured not duplicate and is large data.\n    // Notice, if a dataset dimension provide categroies, usually echarts\n    // should remove duplication except user tell echarts dont do that\n    // (set axis.deduplication = false), because echarts do not know whether\n    // the values in the category dimension has duplication (consider the\n    // parallel-aqi example)\n    if (needCollect && !this._deduplication) {\n        index = this.categories.length;\n        this.categories[index] = category;\n        return index;\n    }\n\n    var map = getOrCreateMap(this);\n    index = map.get(category);\n\n    if (index == null) {\n        if (needCollect) {\n            index = this.categories.length;\n            this.categories[index] = category;\n            map.set(category, index);\n        }\n        else {\n            index = NaN;\n        }\n    }\n\n    return index;\n};\n\n// Consider big data, do not create map until needed.\nfunction getOrCreateMap(ordinalMeta) {\n    return ordinalMeta._map || (\n        ordinalMeta._map = createHashMap(ordinalMeta.categories)\n    );\n}\n\nfunction getName(obj) {\n    if (isObject(obj) && obj.value != null) {\n        return obj.value;\n    }\n    else {\n        return obj + '';\n    }\n}\n\nexport default OrdinalMeta;\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 * Linear continuous scale\n * @module echarts/coord/scale/Ordinal\n *\n * http://en.wikipedia.org/wiki/Level_of_measurement\n */\n\n// FIXME only one data\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport Scale from './Scale';\nimport OrdinalMeta from '../data/OrdinalMeta';\n\nvar scaleProto = Scale.prototype;\n\nvar OrdinalScale = Scale.extend({\n\n    type: 'ordinal',\n\n    /**\n     * @param {module:echarts/data/OrdianlMeta|Array.<string>} ordinalMeta\n     */\n    init: function (ordinalMeta, extent) {\n        // Caution: Should not use instanceof, consider ec-extensions using\n        // import approach to get OrdinalMeta class.\n        if (!ordinalMeta || zrUtil.isArray(ordinalMeta)) {\n            ordinalMeta = new OrdinalMeta({categories: ordinalMeta});\n        }\n        this._ordinalMeta = ordinalMeta;\n        this._extent = extent || [0, ordinalMeta.categories.length - 1];\n    },\n\n    parse: function (val) {\n        return typeof val === 'string'\n            ? this._ordinalMeta.getOrdinal(val)\n            // val might be float.\n            : Math.round(val);\n    },\n\n    contain: function (rank) {\n        rank = this.parse(rank);\n        return scaleProto.contain.call(this, rank)\n            && this._ordinalMeta.categories[rank] != null;\n    },\n\n    /**\n     * Normalize given rank or name to linear [0, 1]\n     * @param {number|string} [val]\n     * @return {number}\n     */\n    normalize: function (val) {\n        return scaleProto.normalize.call(this, this.parse(val));\n    },\n\n    scale: function (val) {\n        return Math.round(scaleProto.scale.call(this, val));\n    },\n\n    /**\n     * @return {Array}\n     */\n    getTicks: function () {\n        var ticks = [];\n        var extent = this._extent;\n        var rank = extent[0];\n\n        while (rank <= extent[1]) {\n            ticks.push(rank);\n            rank++;\n        }\n\n        return ticks;\n    },\n\n    /**\n     * Get item on rank n\n     * @param {number} n\n     * @return {string}\n     */\n    getLabel: function (n) {\n        if (!this.isBlank()) {\n            // Note that if no data, ordinalMeta.categories is an empty array.\n            return this._ordinalMeta.categories[n];\n        }\n    },\n\n    /**\n     * @return {number}\n     */\n    count: function () {\n        return this._extent[1] - this._extent[0] + 1;\n    },\n\n    /**\n     * @override\n     */\n    unionExtentFromData: function (data, dim) {\n        this.unionExtent(data.getApproximateExtent(dim));\n    },\n\n    getOrdinalMeta: function () {\n        return this._ordinalMeta;\n    },\n\n    niceTicks: zrUtil.noop,\n    niceExtent: zrUtil.noop\n});\n\n/**\n * @return {module:echarts/scale/Time}\n */\nOrdinalScale.create = function () {\n    return new OrdinalScale();\n};\n\nexport default OrdinalScale;","/*\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 * For testable.\n */\n\nimport * as numberUtil from '../util/number';\n\nvar roundNumber = numberUtil.round;\n\n/**\n * @param {Array.<number>} extent Both extent[0] and extent[1] should be valid number.\n *                                Should be extent[0] < extent[1].\n * @param {number} splitNumber splitNumber should be >= 1.\n * @param {number} [minInterval]\n * @param {number} [maxInterval]\n * @return {Object} {interval, intervalPrecision, niceTickExtent}\n */\nexport function intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) {\n    var result = {};\n    var span = extent[1] - extent[0];\n\n    var interval = result.interval = numberUtil.nice(span / splitNumber, true);\n    if (minInterval != null && interval < minInterval) {\n        interval = result.interval = minInterval;\n    }\n    if (maxInterval != null && interval > maxInterval) {\n        interval = result.interval = maxInterval;\n    }\n    // Tow more digital for tick.\n    var precision = result.intervalPrecision = getIntervalPrecision(interval);\n    // Niced extent inside original extent\n    var niceTickExtent = result.niceTickExtent = [\n        roundNumber(Math.ceil(extent[0] / interval) * interval, precision),\n        roundNumber(Math.floor(extent[1] / interval) * interval, precision)\n    ];\n\n    fixExtent(niceTickExtent, extent);\n\n    return result;\n}\n\n/**\n * @param {number} interval\n * @return {number} interval precision\n */\nexport function getIntervalPrecision(interval) {\n    // Tow more digital for tick.\n    return numberUtil.getPrecisionSafe(interval) + 2;\n}\n\nfunction clamp(niceTickExtent, idx, extent) {\n    niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]);\n}\n\n// In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent.\nexport function fixExtent(niceTickExtent, extent) {\n    !isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]);\n    !isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]);\n    clamp(niceTickExtent, 0, extent);\n    clamp(niceTickExtent, 1, extent);\n    if (niceTickExtent[0] > niceTickExtent[1]) {\n        niceTickExtent[0] = niceTickExtent[1];\n    }\n}\n\nexport function intervalScaleGetTicks(interval, extent, niceTickExtent, intervalPrecision) {\n    var ticks = [];\n\n    // If interval is 0, return [];\n    if (!interval) {\n        return ticks;\n    }\n\n    // Consider this case: using dataZoom toolbox, zoom and zoom.\n    var safeLimit = 10000;\n\n    if (extent[0] < niceTickExtent[0]) {\n        ticks.push(extent[0]);\n    }\n    var tick = niceTickExtent[0];\n\n    while (tick <= niceTickExtent[1]) {\n        ticks.push(tick);\n        // Avoid rounding error\n        tick = roundNumber(tick + interval, intervalPrecision);\n        if (tick === ticks[ticks.length - 1]) {\n            // Consider out of safe float point, e.g.,\n            // -3711126.9907707 + 2e-10 === -3711126.9907707\n            break;\n        }\n        if (ticks.length > safeLimit) {\n            return [];\n        }\n    }\n    // Consider this case: the last item of ticks is smaller\n    // than niceTickExtent[1] and niceTickExtent[1] === extent[1].\n    if (extent[1] > (ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1])) {\n        ticks.push(extent[1]);\n    }\n\n    return ticks;\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 * Interval scale\n * @module echarts/scale/Interval\n */\n\n\nimport * as numberUtil from '../util/number';\nimport * as formatUtil from '../util/format';\nimport Scale from './Scale';\nimport * as helper from './helper';\n\nvar roundNumber = numberUtil.round;\n\n/**\n * @alias module:echarts/coord/scale/Interval\n * @constructor\n */\nvar IntervalScale = Scale.extend({\n\n    type: 'interval',\n\n    _interval: 0,\n\n    _intervalPrecision: 2,\n\n    setExtent: function (start, end) {\n        var thisExtent = this._extent;\n        //start,end may be a Number like '25',so...\n        if (!isNaN(start)) {\n            thisExtent[0] = parseFloat(start);\n        }\n        if (!isNaN(end)) {\n            thisExtent[1] = parseFloat(end);\n        }\n    },\n\n    unionExtent: function (other) {\n        var extent = this._extent;\n        other[0] < extent[0] && (extent[0] = other[0]);\n        other[1] > extent[1] && (extent[1] = other[1]);\n\n        // unionExtent may called by it's sub classes\n        IntervalScale.prototype.setExtent.call(this, extent[0], extent[1]);\n    },\n    /**\n     * Get interval\n     */\n    getInterval: function () {\n        return this._interval;\n    },\n\n    /**\n     * Set interval\n     */\n    setInterval: function (interval) {\n        this._interval = interval;\n        // Dropped auto calculated niceExtent and use user setted extent\n        // We assume user wan't to set both interval, min, max to get a better result\n        this._niceExtent = this._extent.slice();\n\n        this._intervalPrecision = helper.getIntervalPrecision(interval);\n    },\n\n    /**\n     * @return {Array.<number>}\n     */\n    getTicks: function () {\n        return helper.intervalScaleGetTicks(\n            this._interval, this._extent, this._niceExtent, this._intervalPrecision\n        );\n    },\n\n    /**\n     * @param {number} data\n     * @param {Object} [opt]\n     * @param {number|string} [opt.precision] If 'auto', use nice presision.\n     * @param {boolean} [opt.pad] returns 1.50 but not 1.5 if precision is 2.\n     * @return {string}\n     */\n    getLabel: function (data, opt) {\n        if (data == null) {\n            return '';\n        }\n\n        var precision = opt && opt.precision;\n\n        if (precision == null) {\n            precision = numberUtil.getPrecisionSafe(data) || 0;\n        }\n        else if (precision === 'auto') {\n            // Should be more precise then tick.\n            precision = this._intervalPrecision;\n        }\n\n        // (1) If `precision` is set, 12.005 should be display as '12.00500'.\n        // (2) Use roundNumber (toFixed) to avoid scientific notation like '3.5e-7'.\n        data = roundNumber(data, precision, true);\n\n        return formatUtil.addCommas(data);\n    },\n\n    /**\n     * Update interval and extent of intervals for nice ticks\n     *\n     * @param {number} [splitNumber = 5] Desired number of ticks\n     * @param {number} [minInterval]\n     * @param {number} [maxInterval]\n     */\n    niceTicks: function (splitNumber, minInterval, maxInterval) {\n        splitNumber = splitNumber || 5;\n        var extent = this._extent;\n        var span = extent[1] - extent[0];\n        if (!isFinite(span)) {\n            return;\n        }\n        // User may set axis min 0 and data are all negative\n        // FIXME If it needs to reverse ?\n        if (span < 0) {\n            span = -span;\n            extent.reverse();\n        }\n\n        var result = helper.intervalScaleNiceTicks(\n            extent, splitNumber, minInterval, maxInterval\n        );\n\n        this._intervalPrecision = result.intervalPrecision;\n        this._interval = result.interval;\n        this._niceExtent = result.niceTickExtent;\n    },\n\n    /**\n     * Nice extent.\n     * @param {Object} opt\n     * @param {number} [opt.splitNumber = 5] Given approx tick number\n     * @param {boolean} [opt.fixMin=false]\n     * @param {boolean} [opt.fixMax=false]\n     * @param {boolean} [opt.minInterval]\n     * @param {boolean} [opt.maxInterval]\n     */\n    niceExtent: function (opt) {\n        var extent = this._extent;\n        // If extent start and end are same, expand them\n        if (extent[0] === extent[1]) {\n            if (extent[0] !== 0) {\n                // Expand extent\n                var expandSize = extent[0];\n                // In the fowllowing case\n                //      Axis has been fixed max 100\n                //      Plus data are all 100 and axis extent are [100, 100].\n                // Extend to the both side will cause expanded max is larger than fixed max.\n                // So only expand to the smaller side.\n                if (!opt.fixMax) {\n                    extent[1] += expandSize / 2;\n                    extent[0] -= expandSize / 2;\n                }\n                else {\n                    extent[0] -= expandSize / 2;\n                }\n            }\n            else {\n                extent[1] = 1;\n            }\n        }\n        var span = extent[1] - extent[0];\n        // If there are no data and extent are [Infinity, -Infinity]\n        if (!isFinite(span)) {\n            extent[0] = 0;\n            extent[1] = 1;\n        }\n\n        this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);\n\n        // var extent = this._extent;\n        var interval = this._interval;\n\n        if (!opt.fixMin) {\n            extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval);\n        }\n        if (!opt.fixMax) {\n            extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval);\n        }\n    }\n});\n\n/**\n * @return {module:echarts/scale/Time}\n */\nIntervalScale.create = function () {\n    return new IntervalScale();\n};\n\nexport default IntervalScale;","/*\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 */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport {parsePercent} from '../util/number';\nimport {isDimensionStacked} from '../data/helper/dataStackHelper';\nimport createRenderPlanner from '../chart/helper/createRenderPlanner';\n\nvar STACK_PREFIX = '__ec_stack_';\nvar LARGE_BAR_MIN_WIDTH = 0.5;\n\nvar LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;\n\nfunction getSeriesStackId(seriesModel) {\n    return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex;\n}\n\nfunction getAxisKey(axis) {\n    return axis.dim + axis.index;\n}\n\n/**\n * @param {Object} opt\n * @param {module:echarts/coord/Axis} opt.axis Only support category axis currently.\n * @param {number} opt.count Positive interger.\n * @param {number} [opt.barWidth]\n * @param {number} [opt.barMaxWidth]\n * @param {number} [opt.barMinWidth]\n * @param {number} [opt.barGap]\n * @param {number} [opt.barCategoryGap]\n * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined.\n */\nexport function getLayoutOnAxis(opt) {\n    var params = [];\n    var baseAxis = opt.axis;\n    var axisKey = 'axis0';\n\n    if (baseAxis.type !== 'category') {\n        return;\n    }\n    var bandWidth = baseAxis.getBandWidth();\n\n    for (var i = 0; i < opt.count || 0; i++) {\n        params.push(zrUtil.defaults({\n            bandWidth: bandWidth,\n            axisKey: axisKey,\n            stackId: STACK_PREFIX + i\n        }, opt));\n    }\n    var widthAndOffsets = doCalBarWidthAndOffset(params);\n\n    var result = [];\n    for (var i = 0; i < opt.count; i++) {\n        var item = widthAndOffsets[axisKey][STACK_PREFIX + i];\n        item.offsetCenter = item.offset + item.width / 2;\n        result.push(item);\n    }\n\n    return result;\n}\n\nexport function prepareLayoutBarSeries(seriesType, ecModel) {\n    var seriesModels = [];\n    ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n        // Check series coordinate, do layout for cartesian2d only\n        if (isOnCartesian(seriesModel) && !isInLargeMode(seriesModel)) {\n            seriesModels.push(seriesModel);\n        }\n    });\n    return seriesModels;\n}\n\n\n/**\n * Map from (baseAxis.dim + '_' + baseAxis.index) to min gap of two adjacent\n * values.\n * This works for time axes, value axes, and log axes.\n * For a single time axis, return value is in the form like\n * {'x_0': [1000000]}.\n * The value of 1000000 is in milliseconds.\n */\nfunction getValueAxesMinGaps(barSeries) {\n    /**\n     * Map from axis.index to values.\n     * For a single time axis, axisValues is in the form like\n     * {'x_0': [1495555200000, 1495641600000, 1495728000000]}.\n     * Items in axisValues[x], e.g. 1495555200000, are time values of all\n     * series.\n     */\n    var axisValues = {};\n    zrUtil.each(barSeries, function (seriesModel) {\n        var cartesian = seriesModel.coordinateSystem;\n        var baseAxis = cartesian.getBaseAxis();\n        if (baseAxis.type !== 'time' && baseAxis.type !== 'value') {\n            return;\n        }\n\n        var data = seriesModel.getData();\n        var key = baseAxis.dim + '_' + baseAxis.index;\n        var dim = data.mapDimension(baseAxis.dim);\n        for (var i = 0, cnt = data.count(); i < cnt; ++i) {\n            var value = data.get(dim, i);\n            if (!axisValues[key]) {\n                // No previous data for the axis\n                axisValues[key] = [value];\n            }\n            else {\n                // No value in previous series\n                axisValues[key].push(value);\n            }\n            // Ignore duplicated time values in the same axis\n        }\n    });\n\n    var axisMinGaps = [];\n    for (var key in axisValues) {\n        if (axisValues.hasOwnProperty(key)) {\n            var valuesInAxis = axisValues[key];\n            if (valuesInAxis) {\n                // Sort axis values into ascending order to calculate gaps\n                valuesInAxis.sort(function (a, b) {\n                    return a - b;\n                });\n\n                var min = null;\n                for (var j = 1; j < valuesInAxis.length; ++j) {\n                    var delta = valuesInAxis[j] - valuesInAxis[j - 1];\n                    if (delta > 0) {\n                        // Ignore 0 delta because they are of the same axis value\n                        min = min === null ? delta : Math.min(min, delta);\n                    }\n                }\n                // Set to null if only have one data\n                axisMinGaps[key] = min;\n            }\n        }\n    }\n    return axisMinGaps;\n}\n\nexport function makeColumnLayout(barSeries) {\n    var axisMinGaps = getValueAxesMinGaps(barSeries);\n\n    var seriesInfoList = [];\n    zrUtil.each(barSeries, function (seriesModel) {\n        var cartesian = seriesModel.coordinateSystem;\n        var baseAxis = cartesian.getBaseAxis();\n        var axisExtent = baseAxis.getExtent();\n\n        var bandWidth;\n        if (baseAxis.type === 'category') {\n            bandWidth = baseAxis.getBandWidth();\n        }\n        else if (baseAxis.type === 'value' || baseAxis.type === 'time') {\n            var key = baseAxis.dim + '_' + baseAxis.index;\n            var minGap = axisMinGaps[key];\n            var extentSpan = Math.abs(axisExtent[1] - axisExtent[0]);\n            var scale = baseAxis.scale.getExtent();\n            var scaleSpan = Math.abs(scale[1] - scale[0]);\n            bandWidth = minGap\n                ? extentSpan / scaleSpan * minGap\n                : extentSpan; // When there is only one data value\n        }\n        else {\n            var data = seriesModel.getData();\n            bandWidth = Math.abs(axisExtent[1] - axisExtent[0]) / data.count();\n        }\n\n        var barWidth = parsePercent(\n            seriesModel.get('barWidth'), bandWidth\n        );\n        var barMaxWidth = parsePercent(\n            seriesModel.get('barMaxWidth'), bandWidth\n        );\n        var barMinWidth = parsePercent(\n            // barMinWidth by default is 1 in cartesian. Because in value axis,\n            // the auto-calculated bar width might be less than 1.\n            seriesModel.get('barMinWidth') || 1, bandWidth\n        );\n        var barGap = seriesModel.get('barGap');\n        var barCategoryGap = seriesModel.get('barCategoryGap');\n\n        seriesInfoList.push({\n            bandWidth: bandWidth,\n            barWidth: barWidth,\n            barMaxWidth: barMaxWidth,\n            barMinWidth: barMinWidth,\n            barGap: barGap,\n            barCategoryGap: barCategoryGap,\n            axisKey: getAxisKey(baseAxis),\n            stackId: getSeriesStackId(seriesModel)\n        });\n    });\n\n    return doCalBarWidthAndOffset(seriesInfoList);\n}\n\nfunction doCalBarWidthAndOffset(seriesInfoList) {\n    // Columns info on each category axis. Key is cartesian name\n    var columnsMap = {};\n\n    zrUtil.each(seriesInfoList, function (seriesInfo, idx) {\n        var axisKey = seriesInfo.axisKey;\n        var bandWidth = seriesInfo.bandWidth;\n        var columnsOnAxis = columnsMap[axisKey] || {\n            bandWidth: bandWidth,\n            remainedWidth: bandWidth,\n            autoWidthCount: 0,\n            categoryGap: '20%',\n            gap: '30%',\n            stacks: {}\n        };\n        var stacks = columnsOnAxis.stacks;\n        columnsMap[axisKey] = columnsOnAxis;\n\n        var stackId = seriesInfo.stackId;\n\n        if (!stacks[stackId]) {\n            columnsOnAxis.autoWidthCount++;\n        }\n        stacks[stackId] = stacks[stackId] || {\n            width: 0,\n            maxWidth: 0\n        };\n\n        // Caution: In a single coordinate system, these barGrid attributes\n        // will be shared by series. Consider that they have default values,\n        // only the attributes set on the last series will work.\n        // Do not change this fact unless there will be a break change.\n\n        // TODO\n        var barWidth = seriesInfo.barWidth;\n        if (barWidth && !stacks[stackId].width) {\n            // See #6312, do not restrict width.\n            stacks[stackId].width = barWidth;\n            barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n            columnsOnAxis.remainedWidth -= barWidth;\n        }\n\n        var barMaxWidth = seriesInfo.barMaxWidth;\n        barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n        var barMinWidth = seriesInfo.barMinWidth;\n        barMinWidth && (stacks[stackId].minWidth = barMinWidth);\n        var barGap = seriesInfo.barGap;\n        (barGap != null) && (columnsOnAxis.gap = barGap);\n        var barCategoryGap = seriesInfo.barCategoryGap;\n        (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);\n    });\n\n    var result = {};\n\n    zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {\n\n        result[coordSysName] = {};\n\n        var stacks = columnsOnAxis.stacks;\n        var bandWidth = columnsOnAxis.bandWidth;\n        var categoryGap = parsePercent(columnsOnAxis.categoryGap, bandWidth);\n        var barGapPercent = parsePercent(columnsOnAxis.gap, 1);\n\n        var remainedWidth = columnsOnAxis.remainedWidth;\n        var autoWidthCount = columnsOnAxis.autoWidthCount;\n        var autoWidth = (remainedWidth - categoryGap)\n            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n        autoWidth = Math.max(autoWidth, 0);\n\n        // Find if any auto calculated bar exceeded maxBarWidth\n        zrUtil.each(stacks, function (column) {\n            var maxWidth = column.maxWidth;\n            var minWidth = column.minWidth;\n            if (!column.width) {\n                var finalWidth = autoWidth;\n                if (maxWidth && maxWidth < finalWidth) {\n                    finalWidth = Math.min(maxWidth, remainedWidth);\n                }\n                // `minWidth` has higher priority. `minWidth` decide that wheter the\n                // bar is able to be visible. So `minWidth` should not be restricted\n                // by `maxWidth` or `remainedWidth` (which is from `bandWidth`). In\n                // the extreme cases for `value` axis, bars are allowed to overlap\n                // with each other if `minWidth` specified.\n                if (minWidth && minWidth > finalWidth) {\n                    finalWidth = minWidth;\n                }\n                if (finalWidth !== autoWidth) {\n                    column.width = finalWidth;\n                    remainedWidth -= finalWidth;\n                    autoWidthCount--;\n                }\n            }\n            else {\n                // `barMinWidth/barMaxWidth` has higher priority than `barWidth`, as\n                // CSS does. Becuase barWidth can be a percent value, where\n                // `barMaxWidth` can be used to restrict the final width.\n                var finalWidth = column.width;\n                if (maxWidth) {\n                    finalWidth = Math.min(finalWidth, maxWidth);\n                }\n                // `minWidth` has higher priority, as described above\n                if (minWidth) {\n                    finalWidth = Math.max(finalWidth, minWidth);\n                }\n                column.width = finalWidth;\n                remainedWidth -= finalWidth;\n                autoWidthCount--;\n            }\n        });\n\n        // Recalculate width again\n        autoWidth = (remainedWidth - categoryGap)\n            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n        autoWidth = Math.max(autoWidth, 0);\n\n        var widthSum = 0;\n        var lastColumn;\n        zrUtil.each(stacks, function (column, idx) {\n            if (!column.width) {\n                column.width = autoWidth;\n            }\n            lastColumn = column;\n            widthSum += column.width * (1 + barGapPercent);\n        });\n        if (lastColumn) {\n            widthSum -= lastColumn.width * barGapPercent;\n        }\n\n        var offset = -widthSum / 2;\n        zrUtil.each(stacks, function (column, stackId) {\n            result[coordSysName][stackId] = result[coordSysName][stackId] || {\n                bandWidth: bandWidth,\n                offset: offset,\n                width: column.width\n            };\n\n            offset += column.width * (1 + barGapPercent);\n        });\n    });\n\n    return result;\n}\n\n/**\n * @param {Object} barWidthAndOffset The result of makeColumnLayout\n * @param {module:echarts/coord/Axis} axis\n * @param {module:echarts/model/Series} [seriesModel] If not provided, return all.\n * @return {Object} {stackId: {offset, width}} or {offset, width} if seriesModel provided.\n */\nexport function retrieveColumnLayout(barWidthAndOffset, axis, seriesModel) {\n    if (barWidthAndOffset && axis) {\n        var result = barWidthAndOffset[getAxisKey(axis)];\n        if (result != null && seriesModel != null) {\n            result = result[getSeriesStackId(seriesModel)];\n        }\n        return result;\n    }\n}\n\n/**\n * @param {string} seriesType\n * @param {module:echarts/model/Global} ecModel\n */\nexport function layout(seriesType, ecModel) {\n\n    var seriesModels = prepareLayoutBarSeries(seriesType, ecModel);\n    var barWidthAndOffset = makeColumnLayout(seriesModels);\n\n    var lastStackCoords = {};\n    var lastStackCoordsOrigin = {};\n\n    zrUtil.each(seriesModels, function (seriesModel) {\n\n        var data = seriesModel.getData();\n        var cartesian = seriesModel.coordinateSystem;\n        var baseAxis = cartesian.getBaseAxis();\n\n        var stackId = getSeriesStackId(seriesModel);\n        var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId];\n        var columnOffset = columnLayoutInfo.offset;\n        var columnWidth = columnLayoutInfo.width;\n        var valueAxis = cartesian.getOtherAxis(baseAxis);\n\n        var barMinHeight = seriesModel.get('barMinHeight') || 0;\n\n        lastStackCoords[stackId] = lastStackCoords[stackId] || [];\n        lastStackCoordsOrigin[stackId] = lastStackCoordsOrigin[stackId] || []; // Fix #4243\n\n        data.setLayout({\n            bandWidth: columnLayoutInfo.bandWidth,\n            offset: columnOffset,\n            size: columnWidth\n        });\n\n        var valueDim = data.mapDimension(valueAxis.dim);\n        var baseDim = data.mapDimension(baseAxis.dim);\n        var stacked = isDimensionStacked(data, valueDim /*, baseDim*/);\n        var isValueAxisH = valueAxis.isHorizontal();\n\n        var valueAxisStart = getValueAxisStart(baseAxis, valueAxis, stacked);\n\n        for (var idx = 0, len = data.count(); idx < len; idx++) {\n            var value = data.get(valueDim, idx);\n            var baseValue = data.get(baseDim, idx);\n\n            // If dataZoom in filteMode: 'empty', the baseValue can be set as NaN in \"axisProxy\".\n            if (isNaN(value) || isNaN(baseValue)) {\n                continue;\n            }\n\n            var sign = value >= 0 ? 'p' : 'n';\n            var baseCoord = valueAxisStart;\n\n            // Because of the barMinHeight, we can not use the value in\n            // stackResultDimension directly.\n            if (stacked) {\n                // Only ordinal axis can be stacked.\n                if (!lastStackCoords[stackId][baseValue]) {\n                    lastStackCoords[stackId][baseValue] = {\n                        p: valueAxisStart, // Positive stack\n                        n: valueAxisStart  // Negative stack\n                    };\n                }\n                // Should also consider #4243\n                baseCoord = lastStackCoords[stackId][baseValue][sign];\n            }\n\n            var x;\n            var y;\n            var width;\n            var height;\n\n            if (isValueAxisH) {\n                var coord = cartesian.dataToPoint([value, baseValue]);\n                x = baseCoord;\n                y = coord[1] + columnOffset;\n                width = coord[0] - valueAxisStart;\n                height = columnWidth;\n\n                if (Math.abs(width) < barMinHeight) {\n                    width = (width < 0 ? -1 : 1) * barMinHeight;\n                }\n                stacked && (lastStackCoords[stackId][baseValue][sign] += width);\n            }\n            else {\n                var coord = cartesian.dataToPoint([baseValue, value]);\n                x = coord[0] + columnOffset;\n                y = baseCoord;\n                width = columnWidth;\n                height = coord[1] - valueAxisStart;\n\n                if (Math.abs(height) < barMinHeight) {\n                    // Include zero to has a positive bar\n                    height = (height <= 0 ? -1 : 1) * barMinHeight;\n                }\n                stacked && (lastStackCoords[stackId][baseValue][sign] += height);\n            }\n            data.setItemLayout(idx, {\n                x: x,\n                y: y,\n                width: width,\n                height: height\n            });\n        }\n\n    }, this);\n}\n\n// TODO: Do not support stack in large mode yet.\nexport var largeLayout = {\n\n    seriesType: 'bar',\n\n    plan: createRenderPlanner(),\n\n    reset: function (seriesModel) {\n        if (!isOnCartesian(seriesModel) || !isInLargeMode(seriesModel)) {\n            return;\n        }\n\n        var data = seriesModel.getData();\n        var cartesian = seriesModel.coordinateSystem;\n        var baseAxis = cartesian.getBaseAxis();\n        var valueAxis = cartesian.getOtherAxis(baseAxis);\n        var valueDim = data.mapDimension(valueAxis.dim);\n        var baseDim = data.mapDimension(baseAxis.dim);\n        var valueAxisHorizontal = valueAxis.isHorizontal();\n        var valueDimIdx = valueAxisHorizontal ? 0 : 1;\n\n        var barWidth = retrieveColumnLayout(\n            makeColumnLayout([seriesModel]), baseAxis, seriesModel\n        ).width;\n        if (!(barWidth > LARGE_BAR_MIN_WIDTH)) { // jshint ignore:line\n            barWidth = LARGE_BAR_MIN_WIDTH;\n        }\n\n        return {progress: progress};\n\n        function progress(params, data) {\n            var count = params.count;\n            var largePoints = new LargeArr(count * 2);\n            var largeDataIndices = new LargeArr(count);\n            var dataIndex;\n            var coord = [];\n            var valuePair = [];\n            var pointsOffset = 0;\n            var idxOffset = 0;\n\n            while ((dataIndex = params.next()) != null) {\n                valuePair[valueDimIdx] = data.get(valueDim, dataIndex);\n                valuePair[1 - valueDimIdx] = data.get(baseDim, dataIndex);\n\n                coord = cartesian.dataToPoint(valuePair, null, coord);\n                // Data index might not be in order, depends on `progressiveChunkMode`.\n                largePoints[pointsOffset++] = coord[0];\n                largePoints[pointsOffset++] = coord[1];\n                largeDataIndices[idxOffset++] = dataIndex;\n            }\n\n            data.setLayout({\n                largePoints: largePoints,\n                largeDataIndices: largeDataIndices,\n                barWidth: barWidth,\n                valueAxisStart: getValueAxisStart(baseAxis, valueAxis, false),\n                valueAxisHorizontal: valueAxisHorizontal\n            });\n        }\n    }\n};\n\nfunction isOnCartesian(seriesModel) {\n    return seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'cartesian2d';\n}\n\nfunction isInLargeMode(seriesModel) {\n    return seriesModel.pipelineContext && seriesModel.pipelineContext.large;\n}\n\n// See cases in `test/bar-start.html` and `#7412`, `#8747`.\nfunction getValueAxisStart(baseAxis, valueAxis, stacked) {\n    return valueAxis.toGlobalCoord(valueAxis.dataToCoord(valueAxis.type === 'log' ? 1 : 0));\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embeded for some of the code in this file:\n* The \"scaleLevels\" was originally copied from \"d3.js\" with some\n* modifications made for this project.\n* (See more details in the comment on the definition of \"scaleLevels\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n\n\n// [About UTC and local time zone]:\n// In most cases, `number.parseDate` will treat input data string as local time\n// (except time zone is specified in time string). And `format.formateTime` returns\n// local time by default. option.useUTC is false by default. This design have\n// concidered these common case:\n// (1) Time that is persistent in server is in UTC, but it is needed to be diplayed\n// in local time by default.\n// (2) By default, the input data string (e.g., '2011-01-02') should be displayed\n// as its original time, without any time difference.\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as numberUtil from '../util/number';\nimport * as formatUtil from '../util/format';\nimport * as scaleHelper from './helper';\nimport IntervalScale from './Interval';\n\nvar intervalScaleProto = IntervalScale.prototype;\n\nvar mathCeil = Math.ceil;\nvar mathFloor = Math.floor;\nvar ONE_SECOND = 1000;\nvar ONE_MINUTE = ONE_SECOND * 60;\nvar ONE_HOUR = ONE_MINUTE * 60;\nvar ONE_DAY = ONE_HOUR * 24;\n\n// FIXME 公用？\nvar bisect = function (a, x, lo, hi) {\n    while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (a[mid][1] < x) {\n            lo = mid + 1;\n        }\n        else {\n            hi = mid;\n        }\n    }\n    return lo;\n};\n\n/**\n * @alias module:echarts/coord/scale/Time\n * @constructor\n */\nvar TimeScale = IntervalScale.extend({\n    type: 'time',\n\n    /**\n     * @override\n     */\n    getLabel: function (val) {\n        var stepLvl = this._stepLvl;\n\n        var date = new Date(val);\n\n        return formatUtil.formatTime(stepLvl[0], date, this.getSetting('useUTC'));\n    },\n\n    /**\n     * @override\n     */\n    niceExtent: function (opt) {\n        var extent = this._extent;\n        // If extent start and end are same, expand them\n        if (extent[0] === extent[1]) {\n            // Expand extent\n            extent[0] -= ONE_DAY;\n            extent[1] += ONE_DAY;\n        }\n        // If there are no data and extent are [Infinity, -Infinity]\n        if (extent[1] === -Infinity && extent[0] === Infinity) {\n            var d = new Date();\n            extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate());\n            extent[0] = extent[1] - ONE_DAY;\n        }\n\n        this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);\n\n        // var extent = this._extent;\n        var interval = this._interval;\n\n        if (!opt.fixMin) {\n            extent[0] = numberUtil.round(mathFloor(extent[0] / interval) * interval);\n        }\n        if (!opt.fixMax) {\n            extent[1] = numberUtil.round(mathCeil(extent[1] / interval) * interval);\n        }\n    },\n\n    /**\n     * @override\n     */\n    niceTicks: function (approxTickNum, minInterval, maxInterval) {\n        approxTickNum = approxTickNum || 10;\n\n        var extent = this._extent;\n        var span = extent[1] - extent[0];\n        var approxInterval = span / approxTickNum;\n\n        if (minInterval != null && approxInterval < minInterval) {\n            approxInterval = minInterval;\n        }\n        if (maxInterval != null && approxInterval > maxInterval) {\n            approxInterval = maxInterval;\n        }\n\n        var scaleLevelsLen = scaleLevels.length;\n        var idx = bisect(scaleLevels, approxInterval, 0, scaleLevelsLen);\n\n        var level = scaleLevels[Math.min(idx, scaleLevelsLen - 1)];\n        var interval = level[1];\n        // Same with interval scale if span is much larger than 1 year\n        if (level[0] === 'year') {\n            var yearSpan = span / interval;\n\n            // From \"Nice Numbers for Graph Labels\" of Graphic Gems\n            // var niceYearSpan = numberUtil.nice(yearSpan, false);\n            var yearStep = numberUtil.nice(yearSpan / approxTickNum, true);\n\n            interval *= yearStep;\n        }\n\n        var timezoneOffset = this.getSetting('useUTC')\n            ? 0 : (new Date(+extent[0] || +extent[1])).getTimezoneOffset() * 60 * 1000;\n        var niceExtent = [\n            Math.round(mathCeil((extent[0] - timezoneOffset) / interval) * interval + timezoneOffset),\n            Math.round(mathFloor((extent[1] - timezoneOffset) / interval) * interval + timezoneOffset)\n        ];\n\n        scaleHelper.fixExtent(niceExtent, extent);\n\n        this._stepLvl = level;\n        // Interval will be used in getTicks\n        this._interval = interval;\n        this._niceExtent = niceExtent;\n    },\n\n    parse: function (val) {\n        // val might be float.\n        return +numberUtil.parseDate(val);\n    }\n});\n\nzrUtil.each(['contain', 'normalize'], function (methodName) {\n    TimeScale.prototype[methodName] = function (val) {\n        return intervalScaleProto[methodName].call(this, this.parse(val));\n    };\n});\n\n/**\n * This implementation was originally copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/time/scale.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n */\nvar scaleLevels = [\n    // Format              interval\n    ['hh:mm:ss', ONE_SECOND],          // 1s\n    ['hh:mm:ss', ONE_SECOND * 5],      // 5s\n    ['hh:mm:ss', ONE_SECOND * 10],     // 10s\n    ['hh:mm:ss', ONE_SECOND * 15],     // 15s\n    ['hh:mm:ss', ONE_SECOND * 30],     // 30s\n    ['hh:mm\\nMM-dd', ONE_MINUTE],      // 1m\n    ['hh:mm\\nMM-dd', ONE_MINUTE * 5],  // 5m\n    ['hh:mm\\nMM-dd', ONE_MINUTE * 10], // 10m\n    ['hh:mm\\nMM-dd', ONE_MINUTE * 15], // 15m\n    ['hh:mm\\nMM-dd', ONE_MINUTE * 30], // 30m\n    ['hh:mm\\nMM-dd', ONE_HOUR],        // 1h\n    ['hh:mm\\nMM-dd', ONE_HOUR * 2],    // 2h\n    ['hh:mm\\nMM-dd', ONE_HOUR * 6],    // 6h\n    ['hh:mm\\nMM-dd', ONE_HOUR * 12],   // 12h\n    ['MM-dd\\nyyyy', ONE_DAY],          // 1d\n    ['MM-dd\\nyyyy', ONE_DAY * 2],      // 2d\n    ['MM-dd\\nyyyy', ONE_DAY * 3],      // 3d\n    ['MM-dd\\nyyyy', ONE_DAY * 4],      // 4d\n    ['MM-dd\\nyyyy', ONE_DAY * 5],      // 5d\n    ['MM-dd\\nyyyy', ONE_DAY * 6],      // 6d\n    ['week', ONE_DAY * 7],             // 7d\n    ['MM-dd\\nyyyy', ONE_DAY * 10],     // 10d\n    ['week', ONE_DAY * 14],            // 2w\n    ['week', ONE_DAY * 21],            // 3w\n    ['month', ONE_DAY * 31],           // 1M\n    ['week', ONE_DAY * 42],            // 6w\n    ['month', ONE_DAY * 62],           // 2M\n    ['week', ONE_DAY * 70],            // 10w\n    ['quarter', ONE_DAY * 95],         // 3M\n    ['month', ONE_DAY * 31 * 4],       // 4M\n    ['month', ONE_DAY * 31 * 5],       // 5M\n    ['half-year', ONE_DAY * 380 / 2],  // 6M\n    ['month', ONE_DAY * 31 * 8],       // 8M\n    ['month', ONE_DAY * 31 * 10],      // 10M\n    ['year', ONE_DAY * 380]            // 1Y\n];\n\n/**\n * @param {module:echarts/model/Model}\n * @return {module:echarts/scale/Time}\n */\nTimeScale.create = function (model) {\n    return new TimeScale({useUTC: model.ecModel.get('useUTC')});\n};\n\nexport default TimeScale;","/*\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 * Log scale\n * @module echarts/scale/Log\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport Scale from './Scale';\nimport * as numberUtil from '../util/number';\n\n// Use some method of IntervalScale\nimport IntervalScale from './Interval';\n\nvar scaleProto = Scale.prototype;\nvar intervalScaleProto = IntervalScale.prototype;\n\nvar getPrecisionSafe = numberUtil.getPrecisionSafe;\nvar roundingErrorFix = numberUtil.round;\n\nvar mathFloor = Math.floor;\nvar mathCeil = Math.ceil;\nvar mathPow = Math.pow;\n\nvar mathLog = Math.log;\n\nvar LogScale = Scale.extend({\n\n    type: 'log',\n\n    base: 10,\n\n    $constructor: function () {\n        Scale.apply(this, arguments);\n        this._originalScale = new IntervalScale();\n    },\n\n    /**\n     * @return {Array.<number>}\n     */\n    getTicks: function () {\n        var originalScale = this._originalScale;\n        var extent = this._extent;\n        var originalExtent = originalScale.getExtent();\n\n        return zrUtil.map(intervalScaleProto.getTicks.call(this), function (val) {\n            var powVal = numberUtil.round(mathPow(this.base, val));\n\n            // Fix #4158\n            powVal = (val === extent[0] && originalScale.__fixMin)\n                ? fixRoundingError(powVal, originalExtent[0])\n                : powVal;\n            powVal = (val === extent[1] && originalScale.__fixMax)\n                ? fixRoundingError(powVal, originalExtent[1])\n                : powVal;\n\n            return powVal;\n        }, this);\n    },\n\n    /**\n     * @param {number} val\n     * @return {string}\n     */\n    getLabel: intervalScaleProto.getLabel,\n\n    /**\n     * @param  {number} val\n     * @return {number}\n     */\n    scale: function (val) {\n        val = scaleProto.scale.call(this, val);\n        return mathPow(this.base, val);\n    },\n\n    /**\n     * @param {number} start\n     * @param {number} end\n     */\n    setExtent: function (start, end) {\n        var base = this.base;\n        start = mathLog(start) / mathLog(base);\n        end = mathLog(end) / mathLog(base);\n        intervalScaleProto.setExtent.call(this, start, end);\n    },\n\n    /**\n     * @return {number} end\n     */\n    getExtent: function () {\n        var base = this.base;\n        var extent = scaleProto.getExtent.call(this);\n        extent[0] = mathPow(base, extent[0]);\n        extent[1] = mathPow(base, extent[1]);\n\n        // Fix #4158\n        var originalScale = this._originalScale;\n        var originalExtent = originalScale.getExtent();\n        originalScale.__fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0]));\n        originalScale.__fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1]));\n\n        return extent;\n    },\n\n    /**\n     * @param  {Array.<number>} extent\n     */\n    unionExtent: function (extent) {\n        this._originalScale.unionExtent(extent);\n\n        var base = this.base;\n        extent[0] = mathLog(extent[0]) / mathLog(base);\n        extent[1] = mathLog(extent[1]) / mathLog(base);\n        scaleProto.unionExtent.call(this, extent);\n    },\n\n    /**\n     * @override\n     */\n    unionExtentFromData: function (data, dim) {\n        // TODO\n        // filter value that <= 0\n        this.unionExtent(data.getApproximateExtent(dim));\n    },\n\n    /**\n     * Update interval and extent of intervals for nice ticks\n     * @param  {number} [approxTickNum = 10] Given approx tick number\n     */\n    niceTicks: function (approxTickNum) {\n        approxTickNum = approxTickNum || 10;\n        var extent = this._extent;\n        var span = extent[1] - extent[0];\n        if (span === Infinity || span <= 0) {\n            return;\n        }\n\n        var interval = numberUtil.quantity(span);\n        var err = approxTickNum / span * interval;\n\n        // Filter ticks to get closer to the desired count.\n        if (err <= 0.5) {\n            interval *= 10;\n        }\n\n        // Interval should be integer\n        while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) {\n            interval *= 10;\n        }\n\n        var niceExtent = [\n            numberUtil.round(mathCeil(extent[0] / interval) * interval),\n            numberUtil.round(mathFloor(extent[1] / interval) * interval)\n        ];\n\n        this._interval = interval;\n        this._niceExtent = niceExtent;\n    },\n\n    /**\n     * Nice extent.\n     * @override\n     */\n    niceExtent: function (opt) {\n        intervalScaleProto.niceExtent.call(this, opt);\n\n        var originalScale = this._originalScale;\n        originalScale.__fixMin = opt.fixMin;\n        originalScale.__fixMax = opt.fixMax;\n    }\n\n});\n\nzrUtil.each(['contain', 'normalize'], function (methodName) {\n    LogScale.prototype[methodName] = function (val) {\n        val = mathLog(val) / mathLog(this.base);\n        return scaleProto[methodName].call(this, val);\n    };\n});\n\nLogScale.create = function () {\n    return new LogScale();\n};\n\nfunction fixRoundingError(val, originalVal) {\n    return roundingErrorFix(val, getPrecisionSafe(originalVal));\n}\n\nexport default LogScale;","/*\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\nimport {__DEV__} from '../config';\nimport * as zrUtil from 'zrender/src/core/util';\nimport OrdinalScale from '../scale/Ordinal';\nimport IntervalScale from '../scale/Interval';\nimport Scale from '../scale/Scale';\nimport * as numberUtil from '../util/number';\nimport {\n    prepareLayoutBarSeries,\n    makeColumnLayout,\n    retrieveColumnLayout\n} from '../layout/barGrid';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\n\nimport '../scale/Time';\nimport '../scale/Log';\n\n/**\n * Get axis scale extent before niced.\n * Item of returned array can only be number (including Infinity and NaN).\n */\nexport function getScaleExtent(scale, model) {\n    var scaleType = scale.type;\n\n    var min = model.getMin();\n    var max = model.getMax();\n    var fixMin = min != null;\n    var fixMax = max != null;\n    var originalExtent = scale.getExtent();\n\n    var axisDataLen;\n    var boundaryGap;\n    var span;\n    if (scaleType === 'ordinal') {\n        axisDataLen = model.getCategories().length;\n    }\n    else {\n        boundaryGap = model.get('boundaryGap');\n        if (!zrUtil.isArray(boundaryGap)) {\n            boundaryGap = [boundaryGap || 0, boundaryGap || 0];\n        }\n        if (typeof boundaryGap[0] === 'boolean') {\n            if (__DEV__) {\n                console.warn('Boolean type for boundaryGap is only '\n                    + 'allowed for ordinal axis. Please use string in '\n                    + 'percentage instead, e.g., \"20%\". Currently, '\n                    + 'boundaryGap is set to be 0.');\n            }\n            boundaryGap = [0, 0];\n        }\n        boundaryGap[0] = numberUtil.parsePercent(boundaryGap[0], 1);\n        boundaryGap[1] = numberUtil.parsePercent(boundaryGap[1], 1);\n        span = (originalExtent[1] - originalExtent[0])\n            || Math.abs(originalExtent[0]);\n    }\n\n    // Notice: When min/max is not set (that is, when there are null/undefined,\n    // which is the most common case), these cases should be ensured:\n    // (1) For 'ordinal', show all axis.data.\n    // (2) For others:\n    //      + `boundaryGap` is applied (if min/max set, boundaryGap is\n    //      disabled).\n    //      + If `needCrossZero`, min/max should be zero, otherwise, min/max should\n    //      be the result that originalExtent enlarged by boundaryGap.\n    // (3) If no data, it should be ensured that `scale.setBlank` is set.\n\n    // FIXME\n    // (1) When min/max is 'dataMin' or 'dataMax', should boundaryGap be able to used?\n    // (2) When `needCrossZero` and all data is positive/negative, should it be ensured\n    // that the results processed by boundaryGap are positive/negative?\n\n    if (min == null) {\n        min = scaleType === 'ordinal'\n            ? (axisDataLen ? 0 : NaN)\n            : originalExtent[0] - boundaryGap[0] * span;\n    }\n    if (max == null) {\n        max = scaleType === 'ordinal'\n            ? (axisDataLen ? axisDataLen - 1 : NaN)\n            : originalExtent[1] + boundaryGap[1] * span;\n    }\n\n    if (min === 'dataMin') {\n        min = originalExtent[0];\n    }\n    else if (typeof min === 'function') {\n        min = min({\n            min: originalExtent[0],\n            max: originalExtent[1]\n        });\n    }\n\n    if (max === 'dataMax') {\n        max = originalExtent[1];\n    }\n    else if (typeof max === 'function') {\n        max = max({\n            min: originalExtent[0],\n            max: originalExtent[1]\n        });\n    }\n\n    (min == null || !isFinite(min)) && (min = NaN);\n    (max == null || !isFinite(max)) && (max = NaN);\n\n    scale.setBlank(\n        zrUtil.eqNaN(min)\n        || zrUtil.eqNaN(max)\n        || (scaleType === 'ordinal' && !scale.getOrdinalMeta().categories.length)\n    );\n\n    // Evaluate if axis needs cross zero\n    if (model.getNeedCrossZero()) {\n        // Axis is over zero and min is not set\n        if (min > 0 && max > 0 && !fixMin) {\n            min = 0;\n        }\n        // Axis is under zero and max is not set\n        if (min < 0 && max < 0 && !fixMax) {\n            max = 0;\n        }\n    }\n\n    // If bars are placed on a base axis of type time or interval account for axis boundary overflow and current axis\n    // is base axis\n    // FIXME\n    // (1) Consider support value axis, where below zero and axis `onZero` should be handled properly.\n    // (2) Refactor the logic with `barGrid`. Is it not need to `makeBarWidthAndOffsetInfo` twice with different extent?\n    //     Should not depend on series type `bar`?\n    // (3) Fix that might overlap when using dataZoom.\n    // (4) Consider other chart types using `barGrid`?\n    // See #6728, #4862, `test/bar-overflow-time-plot.html`\n    var ecModel = model.ecModel;\n    if (ecModel && (scaleType === 'time' /*|| scaleType === 'interval' */)) {\n        var barSeriesModels = prepareLayoutBarSeries('bar', ecModel);\n        var isBaseAxisAndHasBarSeries;\n\n        zrUtil.each(barSeriesModels, function (seriesModel) {\n            isBaseAxisAndHasBarSeries |= seriesModel.getBaseAxis() === model.axis;\n        });\n\n        if (isBaseAxisAndHasBarSeries) {\n            // Calculate placement of bars on axis\n            var barWidthAndOffset = makeColumnLayout(barSeriesModels);\n\n            // Adjust axis min and max to account for overflow\n            var adjustedScale = adjustScaleForOverflow(min, max, model, barWidthAndOffset);\n            min = adjustedScale.min;\n            max = adjustedScale.max;\n        }\n    }\n\n    return [min, max];\n}\n\nfunction adjustScaleForOverflow(min, max, model, barWidthAndOffset) {\n\n    // Get Axis Length\n    var axisExtent = model.axis.getExtent();\n    var axisLength = axisExtent[1] - axisExtent[0];\n\n    // Get bars on current base axis and calculate min and max overflow\n    var barsOnCurrentAxis = retrieveColumnLayout(barWidthAndOffset, model.axis);\n    if (barsOnCurrentAxis === undefined) {\n        return {min: min, max: max};\n    }\n\n    var minOverflow = Infinity;\n    zrUtil.each(barsOnCurrentAxis, function (item) {\n        minOverflow = Math.min(item.offset, minOverflow);\n    });\n    var maxOverflow = -Infinity;\n    zrUtil.each(barsOnCurrentAxis, function (item) {\n        maxOverflow = Math.max(item.offset + item.width, maxOverflow);\n    });\n    minOverflow = Math.abs(minOverflow);\n    maxOverflow = Math.abs(maxOverflow);\n    var totalOverFlow = minOverflow + maxOverflow;\n\n    // Calulate required buffer based on old range and overflow\n    var oldRange = max - min;\n    var oldRangePercentOfNew = (1 - (minOverflow + maxOverflow) / axisLength);\n    var overflowBuffer = ((oldRange / oldRangePercentOfNew) - oldRange);\n\n    max += overflowBuffer * (maxOverflow / totalOverFlow);\n    min -= overflowBuffer * (minOverflow / totalOverFlow);\n\n    return {min: min, max: max};\n}\n\nexport function niceScaleExtent(scale, model) {\n    var extent = getScaleExtent(scale, model);\n    var fixMin = model.getMin() != null;\n    var fixMax = model.getMax() != null;\n    var splitNumber = model.get('splitNumber');\n\n    if (scale.type === 'log') {\n        scale.base = model.get('logBase');\n    }\n\n    var scaleType = scale.type;\n    scale.setExtent(extent[0], extent[1]);\n    scale.niceExtent({\n        splitNumber: splitNumber,\n        fixMin: fixMin,\n        fixMax: fixMax,\n        minInterval: (scaleType === 'interval' || scaleType === 'time')\n            ? model.get('minInterval') : null,\n        maxInterval: (scaleType === 'interval' || scaleType === 'time')\n            ? model.get('maxInterval') : null\n    });\n\n    // If some one specified the min, max. And the default calculated interval\n    // is not good enough. He can specify the interval. It is often appeared\n    // in angle axis with angle 0 - 360. Interval calculated in interval scale is hard\n    // to be 60.\n    // FIXME\n    var interval = model.get('interval');\n    if (interval != null) {\n        scale.setInterval && scale.setInterval(interval);\n    }\n}\n\n/**\n * @param {module:echarts/model/Model} model\n * @param {string} [axisType] Default retrieve from model.type\n * @return {module:echarts/scale/*}\n */\nexport function createScaleByModel(model, axisType) {\n    axisType = axisType || model.get('type');\n    if (axisType) {\n        switch (axisType) {\n            // Buildin scale\n            case 'category':\n                return new OrdinalScale(\n                    model.getOrdinalMeta\n                        ? model.getOrdinalMeta()\n                        : model.getCategories(),\n                    [Infinity, -Infinity]\n                );\n            case 'value':\n                return new IntervalScale();\n            // Extended scale, like time and log\n            default:\n                return (Scale.getClass(axisType) || IntervalScale).create(model);\n        }\n    }\n}\n\n/**\n * Check if the axis corss 0\n */\nexport function ifAxisCrossZero(axis) {\n    var dataExtent = axis.scale.getExtent();\n    var min = dataExtent[0];\n    var max = dataExtent[1];\n    return !((min > 0 && max > 0) || (min < 0 && max < 0));\n}\n\n/**\n * @param {module:echarts/coord/Axis} axis\n * @return {Function} Label formatter function.\n *         param: {number} tickValue,\n *         param: {number} idx, the index in all ticks.\n *                         If category axis, this param is not requied.\n *         return: {string} label string.\n */\nexport function makeLabelFormatter(axis) {\n    var labelFormatter = axis.getLabelModel().get('formatter');\n    var categoryTickStart = axis.type === 'category' ? axis.scale.getExtent()[0] : null;\n\n    if (typeof labelFormatter === 'string') {\n        labelFormatter = (function (tpl) {\n            return function (val) {\n                // For category axis, get raw value; for numeric axis,\n                // get foramtted label like '1,333,444'.\n                val = axis.scale.getLabel(val);\n                return tpl.replace('{value}', val != null ? val : '');\n            };\n        })(labelFormatter);\n        // Consider empty array\n        return labelFormatter;\n    }\n    else if (typeof labelFormatter === 'function') {\n        return function (tickValue, idx) {\n            // The original intention of `idx` is \"the index of the tick in all ticks\".\n            // But the previous implementation of category axis do not consider the\n            // `axisLabel.interval`, which cause that, for example, the `interval` is\n            // `1`, then the ticks \"name5\", \"name7\", \"name9\" are displayed, where the\n            // corresponding `idx` are `0`, `2`, `4`, but not `0`, `1`, `2`. So we keep\n            // the definition here for back compatibility.\n            if (categoryTickStart != null) {\n                idx = tickValue - categoryTickStart;\n            }\n            return labelFormatter(getAxisRawValue(axis, tickValue), idx);\n        };\n    }\n    else {\n        return function (tick) {\n            return axis.scale.getLabel(tick);\n        };\n    }\n}\n\nexport function getAxisRawValue(axis, value) {\n    // In category axis with data zoom, tick is not the original\n    // index of axis.data. So tick should not be exposed to user\n    // in category axis.\n    return axis.type === 'category' ? axis.scale.getLabel(value) : value;\n}\n\n/**\n * @param {module:echarts/coord/Axis} axis\n * @return {module:zrender/core/BoundingRect} Be null/undefined if no labels.\n */\nexport function estimateLabelUnionRect(axis) {\n    var axisModel = axis.model;\n    var scale = axis.scale;\n\n    if (!axisModel.get('axisLabel.show') || scale.isBlank()) {\n        return;\n    }\n\n    var isCategory = axis.type === 'category';\n\n    var realNumberScaleTicks;\n    var tickCount;\n    var categoryScaleExtent = scale.getExtent();\n\n    // Optimize for large category data, avoid call `getTicks()`.\n    if (isCategory) {\n        tickCount = scale.count();\n    }\n    else {\n        realNumberScaleTicks = scale.getTicks();\n        tickCount = realNumberScaleTicks.length;\n    }\n\n    var axisLabelModel = axis.getLabelModel();\n    var labelFormatter = makeLabelFormatter(axis);\n\n    var rect;\n    var step = 1;\n    // Simple optimization for large amount of labels\n    if (tickCount > 40) {\n        step = Math.ceil(tickCount / 40);\n    }\n    for (var i = 0; i < tickCount; i += step) {\n        var tickValue = realNumberScaleTicks ? realNumberScaleTicks[i] : categoryScaleExtent[0] + i;\n        var label = labelFormatter(tickValue);\n        var unrotatedSingleRect = axisLabelModel.getTextRect(label);\n        var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get('rotate') || 0);\n\n        rect ? rect.union(singleRect) : (rect = singleRect);\n    }\n\n    return rect;\n}\n\nfunction rotateTextRect(textRect, rotate) {\n    var rotateRadians = rotate * Math.PI / 180;\n    var boundingBox = textRect.plain();\n    var beforeWidth = boundingBox.width;\n    var beforeHeight = boundingBox.height;\n    var afterWidth = beforeWidth * Math.cos(rotateRadians) + beforeHeight * Math.sin(rotateRadians);\n    var afterHeight = beforeWidth * Math.sin(rotateRadians) + beforeHeight * Math.cos(rotateRadians);\n    var rotatedRect = new BoundingRect(boundingBox.x, boundingBox.y, afterWidth, afterHeight);\n\n    return rotatedRect;\n}\n\n/**\n * @param {module:echarts/src/model/Model} model axisLabelModel or axisTickModel\n * @return {number|String} Can be null|'auto'|number|function\n */\nexport function getOptionCategoryInterval(model) {\n    var interval = model.get('interval');\n    return interval == null ? 'auto' : interval;\n}\n\n/**\n * Set `categoryInterval` as 0 implicitly indicates that\n * show all labels reguardless of overlap.\n * @param {Object} axis axisModel.axis\n * @return {boolean}\n */\nexport function shouldShowAllLabels(axis) {\n    return axis.type === 'category'\n        && getOptionCategoryInterval(axis.getLabelModel()) === 0;\n}\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\n// import * as axisHelper from './axisHelper';\n\nexport default {\n\n    /**\n     * @param {boolean} origin\n     * @return {number|string} min value or 'dataMin' or null/undefined (means auto) or NaN\n     */\n    getMin: function (origin) {\n        var option = this.option;\n        var min = (!origin && option.rangeStart != null)\n            ? option.rangeStart : option.min;\n\n        if (this.axis\n            && min != null\n            && min !== 'dataMin'\n            && typeof min !== 'function'\n            && !zrUtil.eqNaN(min)\n        ) {\n            min = this.axis.scale.parse(min);\n        }\n        return min;\n    },\n\n    /**\n     * @param {boolean} origin\n     * @return {number|string} max value or 'dataMax' or null/undefined (means auto) or NaN\n     */\n    getMax: function (origin) {\n        var option = this.option;\n        var max = (!origin && option.rangeEnd != null)\n            ? option.rangeEnd : option.max;\n\n        if (this.axis\n            && max != null\n            && max !== 'dataMax'\n            && typeof max !== 'function'\n            && !zrUtil.eqNaN(max)\n        ) {\n            max = this.axis.scale.parse(max);\n        }\n        return max;\n    },\n\n    /**\n     * @return {boolean}\n     */\n    getNeedCrossZero: function () {\n        var option = this.option;\n        return (option.rangeStart != null || option.rangeEnd != null)\n            ? false : !option.scale;\n    },\n\n    /**\n     * Should be implemented by each axis model if necessary.\n     * @return {module:echarts/model/Component} coordinate system model\n     */\n    getCoordSysModel: zrUtil.noop,\n\n    /**\n     * @param {number} rangeStart Can only be finite number or null/undefined or NaN.\n     * @param {number} rangeEnd Can only be finite number or null/undefined or NaN.\n     */\n    setRange: function (rangeStart, rangeEnd) {\n        this.option.rangeStart = rangeStart;\n        this.option.rangeEnd = rangeEnd;\n    },\n\n    /**\n     * Reset range\n     */\n    resetRange: function () {\n        // rangeStart and rangeEnd is readonly.\n        this.option.rangeStart = this.option.rangeEnd = null;\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// Symbol factory\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from './graphic';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport {calculateTextPosition} from 'zrender/src/contain/text';\n\n/**\n * Triangle shape\n * @inner\n */\nvar Triangle = graphic.extendShape({\n    type: 'triangle',\n    shape: {\n        cx: 0,\n        cy: 0,\n        width: 0,\n        height: 0\n    },\n    buildPath: function (path, shape) {\n        var cx = shape.cx;\n        var cy = shape.cy;\n        var width = shape.width / 2;\n        var height = shape.height / 2;\n        path.moveTo(cx, cy - height);\n        path.lineTo(cx + width, cy + height);\n        path.lineTo(cx - width, cy + height);\n        path.closePath();\n    }\n});\n\n/**\n * Diamond shape\n * @inner\n */\nvar Diamond = graphic.extendShape({\n    type: 'diamond',\n    shape: {\n        cx: 0,\n        cy: 0,\n        width: 0,\n        height: 0\n    },\n    buildPath: function (path, shape) {\n        var cx = shape.cx;\n        var cy = shape.cy;\n        var width = shape.width / 2;\n        var height = shape.height / 2;\n        path.moveTo(cx, cy - height);\n        path.lineTo(cx + width, cy);\n        path.lineTo(cx, cy + height);\n        path.lineTo(cx - width, cy);\n        path.closePath();\n    }\n});\n\n/**\n * Pin shape\n * @inner\n */\nvar Pin = graphic.extendShape({\n    type: 'pin',\n    shape: {\n        // x, y on the cusp\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n    },\n\n    buildPath: function (path, shape) {\n        var x = shape.x;\n        var y = shape.y;\n        var w = shape.width / 5 * 3;\n        // Height must be larger than width\n        var h = Math.max(w, shape.height);\n        var r = w / 2;\n\n        // Dist on y with tangent point and circle center\n        var dy = r * r / (h - r);\n        var cy = y - h + r + dy;\n        var angle = Math.asin(dy / r);\n        // Dist on x with tangent point and circle center\n        var dx = Math.cos(angle) * r;\n\n        var tanX = Math.sin(angle);\n        var tanY = Math.cos(angle);\n\n        var cpLen = r * 0.6;\n        var cpLen2 = r * 0.7;\n\n        path.moveTo(x - dx, cy + dy);\n\n        path.arc(\n            x, cy, r,\n            Math.PI - angle,\n            Math.PI * 2 + angle\n        );\n        path.bezierCurveTo(\n            x + dx - tanX * cpLen, cy + dy + tanY * cpLen,\n            x, y - cpLen2,\n            x, y\n        );\n        path.bezierCurveTo(\n            x, y - cpLen2,\n            x - dx + tanX * cpLen, cy + dy + tanY * cpLen,\n            x - dx, cy + dy\n        );\n        path.closePath();\n    }\n});\n\n/**\n * Arrow shape\n * @inner\n */\nvar Arrow = graphic.extendShape({\n\n    type: 'arrow',\n\n    shape: {\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var height = shape.height;\n        var width = shape.width;\n        var x = shape.x;\n        var y = shape.y;\n        var dx = width / 3 * 2;\n        ctx.moveTo(x, y);\n        ctx.lineTo(x + dx, y + height);\n        ctx.lineTo(x, y + height / 4 * 3);\n        ctx.lineTo(x - dx, y + height);\n        ctx.lineTo(x, y);\n        ctx.closePath();\n    }\n});\n\n/**\n * Map of path contructors\n * @type {Object.<string, module:zrender/graphic/Path>}\n */\nvar symbolCtors = {\n\n    line: graphic.Line,\n\n    rect: graphic.Rect,\n\n    roundRect: graphic.Rect,\n\n    square: graphic.Rect,\n\n    circle: graphic.Circle,\n\n    diamond: Diamond,\n\n    pin: Pin,\n\n    arrow: Arrow,\n\n    triangle: Triangle\n};\n\nvar symbolShapeMakers = {\n\n    line: function (x, y, w, h, shape) {\n        // FIXME\n        shape.x1 = x;\n        shape.y1 = y + h / 2;\n        shape.x2 = x + w;\n        shape.y2 = y + h / 2;\n    },\n\n    rect: function (x, y, w, h, shape) {\n        shape.x = x;\n        shape.y = y;\n        shape.width = w;\n        shape.height = h;\n    },\n\n    roundRect: function (x, y, w, h, shape) {\n        shape.x = x;\n        shape.y = y;\n        shape.width = w;\n        shape.height = h;\n        shape.r = Math.min(w, h) / 4;\n    },\n\n    square: function (x, y, w, h, shape) {\n        var size = Math.min(w, h);\n        shape.x = x;\n        shape.y = y;\n        shape.width = size;\n        shape.height = size;\n    },\n\n    circle: function (x, y, w, h, shape) {\n        // Put circle in the center of square\n        shape.cx = x + w / 2;\n        shape.cy = y + h / 2;\n        shape.r = Math.min(w, h) / 2;\n    },\n\n    diamond: function (x, y, w, h, shape) {\n        shape.cx = x + w / 2;\n        shape.cy = y + h / 2;\n        shape.width = w;\n        shape.height = h;\n    },\n\n    pin: function (x, y, w, h, shape) {\n        shape.x = x + w / 2;\n        shape.y = y + h / 2;\n        shape.width = w;\n        shape.height = h;\n    },\n\n    arrow: function (x, y, w, h, shape) {\n        shape.x = x + w / 2;\n        shape.y = y + h / 2;\n        shape.width = w;\n        shape.height = h;\n    },\n\n    triangle: function (x, y, w, h, shape) {\n        shape.cx = x + w / 2;\n        shape.cy = y + h / 2;\n        shape.width = w;\n        shape.height = h;\n    }\n};\n\nvar symbolBuildProxies = {};\nzrUtil.each(symbolCtors, function (Ctor, name) {\n    symbolBuildProxies[name] = new Ctor();\n});\n\nvar SymbolClz = graphic.extendShape({\n\n    type: 'symbol',\n\n    shape: {\n        symbolType: '',\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n    },\n\n    calculateTextPosition: function (out, style, rect) {\n        var res = calculateTextPosition(out, style, rect);\n        var shape = this.shape;\n        if (shape && shape.symbolType === 'pin' && style.textPosition === 'inside') {\n            res.y = rect.y + rect.height * 0.4;\n        }\n        return res;\n    },\n\n    buildPath: function (ctx, shape, inBundle) {\n        var symbolType = shape.symbolType;\n        if (symbolType !== 'none') {\n            var proxySymbol = symbolBuildProxies[symbolType];\n            if (!proxySymbol) {\n                // Default rect\n                symbolType = 'rect';\n                proxySymbol = symbolBuildProxies[symbolType];\n            }\n            symbolShapeMakers[symbolType](\n                shape.x, shape.y, shape.width, shape.height, proxySymbol.shape\n            );\n            proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle);\n        }\n    }\n});\n\n// Provide setColor helper method to avoid determine if set the fill or stroke outside\nfunction symbolPathSetColor(color, innerColor) {\n    if (this.type !== 'image') {\n        var symbolStyle = this.style;\n        var symbolShape = this.shape;\n        if (symbolShape && symbolShape.symbolType === 'line') {\n            symbolStyle.stroke = color;\n        }\n        else if (this.__isEmptyBrush) {\n            symbolStyle.stroke = color;\n            symbolStyle.fill = innerColor || '#fff';\n        }\n        else {\n            // FIXME 判断图形默认是填充还是描边，使用 onlyStroke ?\n            symbolStyle.fill && (symbolStyle.fill = color);\n            symbolStyle.stroke && (symbolStyle.stroke = color);\n        }\n        this.dirty(false);\n    }\n}\n\n/**\n * Create a symbol element with given symbol configuration: shape, x, y, width, height, color\n * @param {string} symbolType\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {string} color\n * @param {boolean} [keepAspect=false] whether to keep the ratio of w/h,\n *                            for path and image only.\n */\nexport function createSymbol(symbolType, x, y, w, h, color, keepAspect) {\n    // TODO Support image object, DynamicImage.\n\n    var isEmpty = symbolType.indexOf('empty') === 0;\n    if (isEmpty) {\n        symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6);\n    }\n    var symbolPath;\n\n    if (symbolType.indexOf('image://') === 0) {\n        symbolPath = graphic.makeImage(\n            symbolType.slice(8),\n            new BoundingRect(x, y, w, h),\n            keepAspect ? 'center' : 'cover'\n        );\n    }\n    else if (symbolType.indexOf('path://') === 0) {\n        symbolPath = graphic.makePath(\n            symbolType.slice(7),\n            {},\n            new BoundingRect(x, y, w, h),\n            keepAspect ? 'center' : 'cover'\n        );\n    }\n    else {\n        symbolPath = new SymbolClz({\n            shape: {\n                symbolType: symbolType,\n                x: x,\n                y: y,\n                width: w,\n                height: h\n            }\n        });\n    }\n\n    symbolPath.__isEmptyBrush = isEmpty;\n\n    symbolPath.setColor = symbolPathSetColor;\n\n    symbolPath.setColor(color);\n\n    return symbolPath;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport createListFromArray from './chart/helper/createListFromArray';\n// import createGraphFromNodeEdge from './chart/helper/createGraphFromNodeEdge';\nimport * as axisHelper from './coord/axisHelper';\nimport axisModelCommonMixin from './coord/axisModelCommonMixin';\nimport Model from './model/Model';\nimport {getLayoutRect} from './util/layout';\nimport {\n    enableDataStack,\n    isDimensionStacked,\n    getStackedDimension\n} from './data/helper/dataStackHelper';\n\n/**\n * Create a muti dimension List structure from seriesModel.\n * @param  {module:echarts/model/Model} seriesModel\n * @return {module:echarts/data/List} list\n */\nexport function createList(seriesModel) {\n    return createListFromArray(seriesModel.getSource(), seriesModel);\n}\n\n// export function createGraph(seriesModel) {\n//     var nodes = seriesModel.get('data');\n//     var links = seriesModel.get('links');\n//     return createGraphFromNodeEdge(nodes, links, seriesModel);\n// }\n\nexport {getLayoutRect};\n\n/**\n * // TODO: @deprecated\n */\nexport {default as completeDimensions} from './data/helper/completeDimensions';\n\nexport {default as createDimensions} from './data/helper/createDimensions';\n\nexport var dataStack = {\n    isDimensionStacked: isDimensionStacked,\n    enableDataStack: enableDataStack,\n    getStackedDimension: getStackedDimension\n};\n\n/**\n * Create a symbol element with given symbol configuration: shape, x, y, width, height, color\n * @param {string} symbolDesc\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {string} color\n */\nexport {createSymbol} from './util/symbol';\n\n/**\n * Create scale\n * @param {Array.<number>} dataExtent\n * @param {Object|module:echarts/Model} option\n */\nexport function createScale(dataExtent, option) {\n    var axisModel = option;\n    if (!Model.isInstance(option)) {\n        axisModel = new Model(option);\n        zrUtil.mixin(axisModel, axisModelCommonMixin);\n    }\n\n    var scale = axisHelper.createScaleByModel(axisModel);\n    scale.setExtent(dataExtent[0], dataExtent[1]);\n\n    axisHelper.niceScaleExtent(scale, axisModel);\n    return scale;\n}\n\n/**\n * Mixin common methods to axis model,\n *\n * Inlcude methods\n * `getFormattedLabels() => Array.<string>`\n * `getCategories() => Array.<string>`\n * `getMin(origin: boolean) => number`\n * `getMax(origin: boolean) => number`\n * `getNeedCrossZero() => boolean`\n * `setRange(start: number, end: number)`\n * `resetRange()`\n */\nexport function mixinAxisModelCommonMethods(Model) {\n    zrUtil.mixin(Model, axisModelCommonMixin);\n}","import windingLine from './windingLine';\n\nvar EPSILON = 1e-8;\n\nfunction isAroundEqual(a, b) {\n    return Math.abs(a - b) < EPSILON;\n}\n\nexport function contain(points, x, y) {\n    var w = 0;\n    var p = points[0];\n\n    if (!p) {\n        return false;\n    }\n\n    for (var i = 1; i < points.length; i++) {\n        var p2 = points[i];\n        w += windingLine(p[0], p[1], p2[0], p2[1], x, y);\n        p = p2;\n    }\n\n    // Close polygon\n    var p0 = points[0];\n    if (!isAroundEqual(p[0], p0[0]) || !isAroundEqual(p[1], p0[1])) {\n        w += windingLine(p[0], p[1], p0[0], p0[1], x, y);\n    }\n\n    return w !== 0;\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/coord/geo/Region\n */\n\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport * as bbox from 'zrender/src/core/bbox';\nimport * as vec2 from 'zrender/src/core/vector';\nimport * as polygonContain from 'zrender/src/contain/polygon';\n\n/**\n * @param {string|Region} name\n * @param {Array} geometries\n * @param {Array.<number>} cp\n */\nfunction Region(name, geometries, cp) {\n\n    /**\n     * @type {string}\n     * @readOnly\n     */\n    this.name = name;\n\n    /**\n     * @type {Array.<Array>}\n     * @readOnly\n     */\n    this.geometries = geometries;\n\n    if (!cp) {\n        var rect = this.getBoundingRect();\n        cp = [\n            rect.x + rect.width / 2,\n            rect.y + rect.height / 2\n        ];\n    }\n    else {\n        cp = [cp[0], cp[1]];\n    }\n    /**\n     * @type {Array.<number>}\n     */\n    this.center = cp;\n}\n\nRegion.prototype = {\n\n    constructor: Region,\n\n    properties: null,\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getBoundingRect: function () {\n        var rect = this._rect;\n        if (rect) {\n            return rect;\n        }\n\n        var MAX_NUMBER = Number.MAX_VALUE;\n        var min = [MAX_NUMBER, MAX_NUMBER];\n        var max = [-MAX_NUMBER, -MAX_NUMBER];\n        var min2 = [];\n        var max2 = [];\n        var geometries = this.geometries;\n        for (var i = 0; i < geometries.length; i++) {\n            // Only support polygon\n            if (geometries[i].type !== 'polygon') {\n                continue;\n            }\n            // Doesn't consider hole\n            var exterior = geometries[i].exterior;\n            bbox.fromPoints(exterior, min2, max2);\n            vec2.min(min, min, min2);\n            vec2.max(max, max, max2);\n        }\n        // No data\n        if (i === 0) {\n            min[0] = min[1] = max[0] = max[1] = 0;\n        }\n\n        return (this._rect = new BoundingRect(\n            min[0], min[1], max[0] - min[0], max[1] - min[1]\n        ));\n    },\n\n    /**\n     * @param {<Array.<number>} coord\n     * @return {boolean}\n     */\n    contain: function (coord) {\n        var rect = this.getBoundingRect();\n        var geometries = this.geometries;\n        if (!rect.contain(coord[0], coord[1])) {\n            return false;\n        }\n        loopGeo: for (var i = 0, len = geometries.length; i < len; i++) {\n            // Only support polygon.\n            if (geometries[i].type !== 'polygon') {\n                continue;\n            }\n            var exterior = geometries[i].exterior;\n            var interiors = geometries[i].interiors;\n            if (polygonContain.contain(exterior, coord[0], coord[1])) {\n                // Not in the region if point is in the hole.\n                for (var k = 0; k < (interiors ? interiors.length : 0); k++) {\n                    if (polygonContain.contain(interiors[k])) {\n                        continue loopGeo;\n                    }\n                }\n                return true;\n            }\n        }\n        return false;\n    },\n\n    transformTo: function (x, y, width, height) {\n        var rect = this.getBoundingRect();\n        var aspect = rect.width / rect.height;\n        if (!width) {\n            width = aspect * height;\n        }\n        else if (!height) {\n            height = width / aspect;\n        }\n        var target = new BoundingRect(x, y, width, height);\n        var transform = rect.calculateTransform(target);\n        var geometries = this.geometries;\n        for (var i = 0; i < geometries.length; i++) {\n            // Only support polygon.\n            if (geometries[i].type !== 'polygon') {\n                continue;\n            }\n            var exterior = geometries[i].exterior;\n            var interiors = geometries[i].interiors;\n            for (var p = 0; p < exterior.length; p++) {\n                vec2.applyTransform(exterior[p], exterior[p], transform);\n            }\n            for (var h = 0; h < (interiors ? interiors.length : 0); h++) {\n                for (var p = 0; p < interiors[h].length; p++) {\n                    vec2.applyTransform(interiors[h][p], interiors[h][p], transform);\n                }\n            }\n        }\n        rect = this._rect;\n        rect.copy(target);\n        // Update center\n        this.center = [\n            rect.x + rect.width / 2,\n            rect.y + rect.height / 2\n        ];\n    },\n\n    cloneShallow: function (name) {\n        name == null && (name = this.name);\n        var newRegion = new Region(name, this.geometries, this.center);\n        newRegion._rect = this._rect;\n        newRegion.transformTo = null; // Simply avoid to be called.\n        return newRegion;\n    }\n};\n\nexport default Region;","/*\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 * Parse and decode geo json\n * @module echarts/coord/geo/parseGeoJson\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport Region from './Region';\n\nfunction decode(json) {\n    if (!json.UTF8Encoding) {\n        return json;\n    }\n    var encodeScale = json.UTF8Scale;\n    if (encodeScale == null) {\n        encodeScale = 1024;\n    }\n\n    var features = json.features;\n\n    for (var f = 0; f < features.length; f++) {\n        var feature = features[f];\n        var geometry = feature.geometry;\n        var coordinates = geometry.coordinates;\n        var encodeOffsets = geometry.encodeOffsets;\n\n        for (var c = 0; c < coordinates.length; c++) {\n            var coordinate = coordinates[c];\n\n            if (geometry.type === 'Polygon') {\n                coordinates[c] = decodePolygon(\n                    coordinate,\n                    encodeOffsets[c],\n                    encodeScale\n                );\n            }\n            else if (geometry.type === 'MultiPolygon') {\n                for (var c2 = 0; c2 < coordinate.length; c2++) {\n                    var polygon = coordinate[c2];\n                    coordinate[c2] = decodePolygon(\n                        polygon,\n                        encodeOffsets[c][c2],\n                        encodeScale\n                    );\n                }\n            }\n        }\n    }\n    // Has been decoded\n    json.UTF8Encoding = false;\n    return json;\n}\n\nfunction decodePolygon(coordinate, encodeOffsets, encodeScale) {\n    var result = [];\n    var prevX = encodeOffsets[0];\n    var prevY = encodeOffsets[1];\n\n    for (var i = 0; i < coordinate.length; i += 2) {\n        var x = coordinate.charCodeAt(i) - 64;\n        var y = coordinate.charCodeAt(i + 1) - 64;\n        // ZigZag decoding\n        x = (x >> 1) ^ (-(x & 1));\n        y = (y >> 1) ^ (-(y & 1));\n        // Delta deocding\n        x += prevX;\n        y += prevY;\n\n        prevX = x;\n        prevY = y;\n        // Dequantize\n        result.push([x / encodeScale, y / encodeScale]);\n    }\n\n    return result;\n}\n\n/**\n * @alias module:echarts/coord/geo/parseGeoJson\n * @param {Object} geoJson\n * @return {module:zrender/container/Group}\n */\nexport default function (geoJson) {\n\n    decode(geoJson);\n\n    return zrUtil.map(zrUtil.filter(geoJson.features, function (featureObj) {\n        // Output of mapshaper may have geometry null\n        return featureObj.geometry\n            && featureObj.properties\n            && featureObj.geometry.coordinates.length > 0;\n    }), function (featureObj) {\n        var properties = featureObj.properties;\n        var geo = featureObj.geometry;\n\n        var coordinates = geo.coordinates;\n\n        var geometries = [];\n        if (geo.type === 'Polygon') {\n            geometries.push({\n                type: 'polygon',\n                // According to the GeoJSON specification.\n                // First must be exterior, and the rest are all interior(holes).\n                exterior: coordinates[0],\n                interiors: coordinates.slice(1)\n            });\n        }\n        if (geo.type === 'MultiPolygon') {\n            zrUtil.each(coordinates, function (item) {\n                if (item[0]) {\n                    geometries.push({\n                        type: 'polygon',\n                        exterior: item[0],\n                        interiors: item.slice(1)\n                    });\n                }\n            });\n        }\n\n        var region = new Region(\n            properties.name,\n            geometries,\n            properties.cp\n        );\n        region.properties = properties;\n        return region;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as textContain from 'zrender/src/contain/text';\nimport {makeInner} from '../util/model';\nimport {\n    makeLabelFormatter,\n    getOptionCategoryInterval,\n    shouldShowAllLabels\n} from './axisHelper';\n\nvar inner = makeInner();\n\n/**\n * @param {module:echats/coord/Axis} axis\n * @return {Object} {\n *     labels: [{\n *         formattedLabel: string,\n *         rawLabel: string,\n *         tickValue: number\n *     }, ...],\n *     labelCategoryInterval: number\n * }\n */\nexport function createAxisLabels(axis) {\n    // Only ordinal scale support tick interval\n    return axis.type === 'category'\n        ? makeCategoryLabels(axis)\n        : makeRealNumberLabels(axis);\n}\n\n/**\n * @param {module:echats/coord/Axis} axis\n * @param {module:echarts/model/Model} tickModel For example, can be axisTick, splitLine, splitArea.\n * @return {Object} {\n *     ticks: Array.<number>\n *     tickCategoryInterval: number\n * }\n */\nexport function createAxisTicks(axis, tickModel) {\n    // Only ordinal scale support tick interval\n    return axis.type === 'category'\n        ? makeCategoryTicks(axis, tickModel)\n        : {ticks: axis.scale.getTicks()};\n}\n\nfunction makeCategoryLabels(axis) {\n    var labelModel = axis.getLabelModel();\n    var result = makeCategoryLabelsActually(axis, labelModel);\n\n    return (!labelModel.get('show') || axis.scale.isBlank())\n        ? {labels: [], labelCategoryInterval: result.labelCategoryInterval}\n        : result;\n}\n\nfunction makeCategoryLabelsActually(axis, labelModel) {\n    var labelsCache = getListCache(axis, 'labels');\n    var optionLabelInterval = getOptionCategoryInterval(labelModel);\n    var result = listCacheGet(labelsCache, optionLabelInterval);\n\n    if (result) {\n        return result;\n    }\n\n    var labels;\n    var numericLabelInterval;\n\n    if (zrUtil.isFunction(optionLabelInterval)) {\n        labels = makeLabelsByCustomizedCategoryInterval(axis, optionLabelInterval);\n    }\n    else {\n        numericLabelInterval = optionLabelInterval === 'auto'\n            ? makeAutoCategoryInterval(axis) : optionLabelInterval;\n        labels = makeLabelsByNumericCategoryInterval(axis, numericLabelInterval);\n    }\n\n    // Cache to avoid calling interval function repeatly.\n    return listCacheSet(labelsCache, optionLabelInterval, {\n        labels: labels, labelCategoryInterval: numericLabelInterval\n    });\n}\n\nfunction makeCategoryTicks(axis, tickModel) {\n    var ticksCache = getListCache(axis, 'ticks');\n    var optionTickInterval = getOptionCategoryInterval(tickModel);\n    var result = listCacheGet(ticksCache, optionTickInterval);\n\n    if (result) {\n        return result;\n    }\n\n    var ticks;\n    var tickCategoryInterval;\n\n    // Optimize for the case that large category data and no label displayed,\n    // we should not return all ticks.\n    if (!tickModel.get('show') || axis.scale.isBlank()) {\n        ticks = [];\n    }\n\n    if (zrUtil.isFunction(optionTickInterval)) {\n        ticks = makeLabelsByCustomizedCategoryInterval(axis, optionTickInterval, true);\n    }\n    // Always use label interval by default despite label show. Consider this\n    // scenario, Use multiple grid with the xAxis sync, and only one xAxis shows\n    // labels. `splitLine` and `axisTick` should be consistent in this case.\n    else if (optionTickInterval === 'auto') {\n        var labelsResult = makeCategoryLabelsActually(axis, axis.getLabelModel());\n        tickCategoryInterval = labelsResult.labelCategoryInterval;\n        ticks = zrUtil.map(labelsResult.labels, function (labelItem) {\n            return labelItem.tickValue;\n        });\n    }\n    else {\n        tickCategoryInterval = optionTickInterval;\n        ticks = makeLabelsByNumericCategoryInterval(axis, tickCategoryInterval, true);\n    }\n\n    // Cache to avoid calling interval function repeatly.\n    return listCacheSet(ticksCache, optionTickInterval, {\n        ticks: ticks, tickCategoryInterval: tickCategoryInterval\n    });\n}\n\nfunction makeRealNumberLabels(axis) {\n    var ticks = axis.scale.getTicks();\n    var labelFormatter = makeLabelFormatter(axis);\n    return {\n        labels: zrUtil.map(ticks, function (tickValue, idx) {\n            return {\n                formattedLabel: labelFormatter(tickValue, idx),\n                rawLabel: axis.scale.getLabel(tickValue),\n                tickValue: tickValue\n            };\n        })\n    };\n}\n\n// Large category data calculation is performence sensitive, and ticks and label\n// probably be fetched by multiple times. So we cache the result.\n// axis is created each time during a ec process, so we do not need to clear cache.\nfunction getListCache(axis, prop) {\n    // Because key can be funciton, and cache size always be small, we use array cache.\n    return inner(axis)[prop] || (inner(axis)[prop] = []);\n}\n\nfunction listCacheGet(cache, key) {\n    for (var i = 0; i < cache.length; i++) {\n        if (cache[i].key === key) {\n            return cache[i].value;\n        }\n    }\n}\n\nfunction listCacheSet(cache, key, value) {\n    cache.push({key: key, value: value});\n    return value;\n}\n\nfunction makeAutoCategoryInterval(axis) {\n    var result = inner(axis).autoInterval;\n    return result != null\n        ? result\n        : (inner(axis).autoInterval = axis.calculateCategoryInterval());\n}\n\n/**\n * Calculate interval for category axis ticks and labels.\n * To get precise result, at least one of `getRotate` and `isHorizontal`\n * should be implemented in axis.\n */\nexport function calculateCategoryInterval(axis) {\n    var params = fetchAutoCategoryIntervalCalculationParams(axis);\n    var labelFormatter = makeLabelFormatter(axis);\n    var rotation = (params.axisRotate - params.labelRotate) / 180 * Math.PI;\n\n    var ordinalScale = axis.scale;\n    var ordinalExtent = ordinalScale.getExtent();\n    // Providing this method is for optimization:\n    // avoid generating a long array by `getTicks`\n    // in large category data case.\n    var tickCount = ordinalScale.count();\n\n    if (ordinalExtent[1] - ordinalExtent[0] < 1) {\n        return 0;\n    }\n\n    var step = 1;\n    // Simple optimization. Empirical value: tick count should less than 40.\n    if (tickCount > 40) {\n        step = Math.max(1, Math.floor(tickCount / 40));\n    }\n    var tickValue = ordinalExtent[0];\n    var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);\n    var unitW = Math.abs(unitSpan * Math.cos(rotation));\n    var unitH = Math.abs(unitSpan * Math.sin(rotation));\n\n    var maxW = 0;\n    var maxH = 0;\n\n    // Caution: Performance sensitive for large category data.\n    // Consider dataZoom, we should make appropriate step to avoid O(n) loop.\n    for (; tickValue <= ordinalExtent[1]; tickValue += step) {\n        var width = 0;\n        var height = 0;\n\n        // Not precise, do not consider align and vertical align\n        // and each distance from axis line yet.\n        var rect = textContain.getBoundingRect(\n            labelFormatter(tickValue), params.font, 'center', 'top'\n        );\n        // Magic number\n        width = rect.width * 1.3;\n        height = rect.height * 1.3;\n\n        // Min size, void long loop.\n        maxW = Math.max(maxW, width, 7);\n        maxH = Math.max(maxH, height, 7);\n    }\n\n    var dw = maxW / unitW;\n    var dh = maxH / unitH;\n    // 0/0 is NaN, 1/0 is Infinity.\n    isNaN(dw) && (dw = Infinity);\n    isNaN(dh) && (dh = Infinity);\n    var interval = Math.max(0, Math.floor(Math.min(dw, dh)));\n\n    var cache = inner(axis.model);\n    var axisExtent = axis.getExtent();\n    var lastAutoInterval = cache.lastAutoInterval;\n    var lastTickCount = cache.lastTickCount;\n\n    // Use cache to keep interval stable while moving zoom window,\n    // otherwise the calculated interval might jitter when the zoom\n    // window size is close to the interval-changing size.\n    // For example, if all of the axis labels are `a, b, c, d, e, f, g`.\n    // The jitter will cause that sometimes the displayed labels are\n    // `a, d, g` (interval: 2) sometimes `a, c, e`(interval: 1).\n    if (lastAutoInterval != null\n        && lastTickCount != null\n        && Math.abs(lastAutoInterval - interval) <= 1\n        && Math.abs(lastTickCount - tickCount) <= 1\n        // Always choose the bigger one, otherwise the critical\n        // point is not the same when zooming in or zooming out.\n        && lastAutoInterval > interval\n        // If the axis change is caused by chart resize, the cache should not\n        // be used. Otherwise some hiden labels might not be shown again.\n        && cache.axisExtend0 === axisExtent[0]\n        && cache.axisExtend1 === axisExtent[1]\n    ) {\n        interval = lastAutoInterval;\n    }\n    // Only update cache if cache not used, otherwise the\n    // changing of interval is too insensitive.\n    else {\n        cache.lastTickCount = tickCount;\n        cache.lastAutoInterval = interval;\n        cache.axisExtend0 = axisExtent[0];\n        cache.axisExtend1 = axisExtent[1];\n    }\n\n    return interval;\n}\n\nfunction fetchAutoCategoryIntervalCalculationParams(axis) {\n    var labelModel = axis.getLabelModel();\n    return {\n        axisRotate: axis.getRotate\n            ? axis.getRotate()\n            : (axis.isHorizontal && !axis.isHorizontal())\n            ? 90\n            : 0,\n        labelRotate: labelModel.get('rotate') || 0,\n        font: labelModel.getFont()\n    };\n}\n\nfunction makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) {\n    var labelFormatter = makeLabelFormatter(axis);\n    var ordinalScale = axis.scale;\n    var ordinalExtent = ordinalScale.getExtent();\n    var labelModel = axis.getLabelModel();\n    var result = [];\n\n    // TODO: axisType: ordinalTime, pick the tick from each month/day/year/...\n\n    var step = Math.max((categoryInterval || 0) + 1, 1);\n    var startTick = ordinalExtent[0];\n    var tickCount = ordinalScale.count();\n\n    // Calculate start tick based on zero if possible to keep label consistent\n    // while zooming and moving while interval > 0. Otherwise the selection\n    // of displayable ticks and symbols probably keep changing.\n    // 3 is empirical value.\n    if (startTick !== 0 && step > 1 && tickCount / step > 2) {\n        startTick = Math.round(Math.ceil(startTick / step) * step);\n    }\n\n    // (1) Only add min max label here but leave overlap checking\n    // to render stage, which also ensure the returned list\n    // suitable for splitLine and splitArea rendering.\n    // (2) Scales except category always contain min max label so\n    // do not need to perform this process.\n    var showAllLabel = shouldShowAllLabels(axis);\n    var includeMinLabel = labelModel.get('showMinLabel') || showAllLabel;\n    var includeMaxLabel = labelModel.get('showMaxLabel') || showAllLabel;\n\n    if (includeMinLabel && startTick !== ordinalExtent[0]) {\n        addItem(ordinalExtent[0]);\n    }\n\n    // Optimize: avoid generating large array by `ordinalScale.getTicks()`.\n    var tickValue = startTick;\n    for (; tickValue <= ordinalExtent[1]; tickValue += step) {\n        addItem(tickValue);\n    }\n\n    if (includeMaxLabel && tickValue - step !== ordinalExtent[1]) {\n        addItem(ordinalExtent[1]);\n    }\n\n    function addItem(tVal) {\n        result.push(onlyTick\n            ? tVal\n            : {\n                formattedLabel: labelFormatter(tVal),\n                rawLabel: ordinalScale.getLabel(tVal),\n                tickValue: tVal\n            }\n        );\n    }\n\n    return result;\n}\n\n// When interval is function, the result `false` means ignore the tick.\n// It is time consuming for large category data.\nfunction makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick) {\n    var ordinalScale = axis.scale;\n    var labelFormatter = makeLabelFormatter(axis);\n    var result = [];\n\n    zrUtil.each(ordinalScale.getTicks(), function (tickValue) {\n        var rawLabel = ordinalScale.getLabel(tickValue);\n        if (categoryInterval(tickValue, rawLabel)) {\n            result.push(onlyTick\n                ? tickValue\n                : {\n                    formattedLabel: labelFormatter(tickValue),\n                    rawLabel: rawLabel,\n                    tickValue: tickValue\n                }\n            );\n        }\n    });\n\n    return result;\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\nimport {each, map} from 'zrender/src/core/util';\nimport {linearMap, getPixelPrecision, round} from '../util/number';\nimport {\n    createAxisTicks,\n    createAxisLabels,\n    calculateCategoryInterval\n} from './axisTickLabelBuilder';\n\nvar NORMALIZED_EXTENT = [0, 1];\n\n/**\n * Base class of Axis.\n * @constructor\n */\nvar Axis = function (dim, scale, extent) {\n\n    /**\n     * Axis dimension. Such as 'x', 'y', 'z', 'angle', 'radius'.\n     * @type {string}\n     */\n    this.dim = dim;\n\n    /**\n     * Axis scale\n     * @type {module:echarts/coord/scale/*}\n     */\n    this.scale = scale;\n\n    /**\n     * @type {Array.<number>}\n     * @private\n     */\n    this._extent = extent || [0, 0];\n\n    /**\n     * @type {boolean}\n     */\n    this.inverse = false;\n\n    /**\n     * Usually true when axis has a ordinal scale\n     * @type {boolean}\n     */\n    this.onBand = false;\n};\n\nAxis.prototype = {\n\n    constructor: Axis,\n\n    /**\n     * If axis extent contain given coord\n     * @param {number} coord\n     * @return {boolean}\n     */\n    contain: function (coord) {\n        var extent = this._extent;\n        var min = Math.min(extent[0], extent[1]);\n        var max = Math.max(extent[0], extent[1]);\n        return coord >= min && coord <= max;\n    },\n\n    /**\n     * If axis extent contain given data\n     * @param {number} data\n     * @return {boolean}\n     */\n    containData: function (data) {\n        return this.contain(this.dataToCoord(data));\n    },\n\n    /**\n     * Get coord extent.\n     * @return {Array.<number>}\n     */\n    getExtent: function () {\n        return this._extent.slice();\n    },\n\n    /**\n     * Get precision used for formatting\n     * @param {Array.<number>} [dataExtent]\n     * @return {number}\n     */\n    getPixelPrecision: function (dataExtent) {\n        return getPixelPrecision(\n            dataExtent || this.scale.getExtent(),\n            this._extent\n        );\n    },\n\n    /**\n     * Set coord extent\n     * @param {number} start\n     * @param {number} end\n     */\n    setExtent: function (start, end) {\n        var extent = this._extent;\n        extent[0] = start;\n        extent[1] = end;\n    },\n\n    /**\n     * Convert data to coord. Data is the rank if it has an ordinal scale\n     * @param {number} data\n     * @param  {boolean} clamp\n     * @return {number}\n     */\n    dataToCoord: function (data, clamp) {\n        var extent = this._extent;\n        var scale = this.scale;\n        data = scale.normalize(data);\n\n        if (this.onBand && scale.type === 'ordinal') {\n            extent = extent.slice();\n            fixExtentWithBands(extent, scale.count());\n        }\n\n        return linearMap(data, NORMALIZED_EXTENT, extent, clamp);\n    },\n\n    /**\n     * Convert coord to data. Data is the rank if it has an ordinal scale\n     * @param {number} coord\n     * @param  {boolean} clamp\n     * @return {number}\n     */\n    coordToData: function (coord, clamp) {\n        var extent = this._extent;\n        var scale = this.scale;\n\n        if (this.onBand && scale.type === 'ordinal') {\n            extent = extent.slice();\n            fixExtentWithBands(extent, scale.count());\n        }\n\n        var t = linearMap(coord, extent, NORMALIZED_EXTENT, clamp);\n\n        return this.scale.scale(t);\n    },\n\n    /**\n     * Convert pixel point to data in axis\n     * @param {Array.<number>} point\n     * @param  {boolean} clamp\n     * @return {number} data\n     */\n    pointToData: function (point, clamp) {\n        // Should be implemented in derived class if necessary.\n    },\n\n    /**\n     * Different from `zrUtil.map(axis.getTicks(), axis.dataToCoord, axis)`,\n     * `axis.getTicksCoords` considers `onBand`, which is used by\n     * `boundaryGap:true` of category axis and splitLine and splitArea.\n     * @param {Object} [opt]\n     * @param {number} [opt.tickModel=axis.model.getModel('axisTick')]\n     * @param {boolean} [opt.clamp] If `true`, the first and the last\n     *        tick must be at the axis end points. Otherwise, clip ticks\n     *        that outside the axis extent.\n     * @return {Array.<Object>} [{\n     *     coord: ...,\n     *     tickValue: ...\n     * }, ...]\n     */\n    getTicksCoords: function (opt) {\n        opt = opt || {};\n\n        var tickModel = opt.tickModel || this.getTickModel();\n        var result = createAxisTicks(this, tickModel);\n        var ticks = result.ticks;\n\n        var ticksCoords = map(ticks, function (tickValue) {\n            return {\n                coord: this.dataToCoord(tickValue),\n                tickValue: tickValue\n            };\n        }, this);\n\n        var alignWithLabel = tickModel.get('alignWithLabel');\n\n        fixOnBandTicksCoords(\n            this, ticksCoords, alignWithLabel, opt.clamp\n        );\n\n        return ticksCoords;\n    },\n\n    /**\n     * @return {Array.<Object>} [{\n     *     formattedLabel: string,\n     *     rawLabel: axis.scale.getLabel(tickValue)\n     *     tickValue: number\n     * }, ...]\n     */\n    getViewLabels: function () {\n        return createAxisLabels(this).labels;\n    },\n\n    /**\n     * @return {module:echarts/coord/model/Model}\n     */\n    getLabelModel: function () {\n        return this.model.getModel('axisLabel');\n    },\n\n    /**\n     * Notice here we only get the default tick model. For splitLine\n     * or splitArea, we should pass the splitLineModel or splitAreaModel\n     * manually when calling `getTicksCoords`.\n     * In GL, this method may be overrided to:\n     * `axisModel.getModel('axisTick', grid3DModel.getModel('axisTick'));`\n     * @return {module:echarts/coord/model/Model}\n     */\n    getTickModel: function () {\n        return this.model.getModel('axisTick');\n    },\n\n    /**\n     * Get width of band\n     * @return {number}\n     */\n    getBandWidth: function () {\n        var axisExtent = this._extent;\n        var dataExtent = this.scale.getExtent();\n\n        var len = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0);\n        // Fix #2728, avoid NaN when only one data.\n        len === 0 && (len = 1);\n\n        var size = Math.abs(axisExtent[1] - axisExtent[0]);\n\n        return Math.abs(size) / len;\n    },\n\n    /**\n     * @abstract\n     * @return {boolean} Is horizontal\n     */\n    isHorizontal: null,\n\n    /**\n     * @abstract\n     * @return {number} Get axis rotate, by degree.\n     */\n    getRotate: null,\n\n    /**\n     * Only be called in category axis.\n     * Can be overrided, consider other axes like in 3D.\n     * @return {number} Auto interval for cateogry axis tick and label\n     */\n    calculateCategoryInterval: function () {\n        return calculateCategoryInterval(this);\n    }\n\n};\n\nfunction fixExtentWithBands(extent, nTick) {\n    var size = extent[1] - extent[0];\n    var len = nTick;\n    var margin = size / len / 2;\n    extent[0] += margin;\n    extent[1] -= margin;\n}\n\n// If axis has labels [1, 2, 3, 4]. Bands on the axis are\n// |---1---|---2---|---3---|---4---|.\n// So the displayed ticks and splitLine/splitArea should between\n// each data item, otherwise cause misleading (e.g., split tow bars\n// of a single data item when there are two bar series).\n// Also consider if tickCategoryInterval > 0 and onBand, ticks and\n// splitLine/spliteArea should layout appropriately corresponding\n// to displayed labels. (So we should not use `getBandWidth` in this\n// case).\nfunction fixOnBandTicksCoords(axis, ticksCoords, alignWithLabel, clamp) {\n    var ticksLen = ticksCoords.length;\n\n    if (!axis.onBand || alignWithLabel || !ticksLen) {\n        return;\n    }\n\n    var axisExtent = axis.getExtent();\n    var last;\n    var diffSize;\n    if (ticksLen === 1) {\n        ticksCoords[0].coord = axisExtent[0];\n        last = ticksCoords[1] = {coord: axisExtent[0]};\n    }\n    else {\n        var crossLen = ticksCoords[ticksLen - 1].tickValue - ticksCoords[0].tickValue;\n        var shift = (ticksCoords[ticksLen - 1].coord - ticksCoords[0].coord) / crossLen;\n\n        each(ticksCoords, function (ticksItem) {\n            ticksItem.coord -= shift / 2;\n        });\n\n        var dataExtent = axis.scale.getExtent();\n        diffSize = 1 + dataExtent[1] - ticksCoords[ticksLen - 1].tickValue;\n\n        last = {coord: ticksCoords[ticksLen - 1].coord + shift * diffSize};\n\n        ticksCoords.push(last);\n    }\n\n    var inverse = axisExtent[0] > axisExtent[1];\n\n    // Handling clamp.\n    if (littleThan(ticksCoords[0].coord, axisExtent[0])) {\n        clamp ? (ticksCoords[0].coord = axisExtent[0]) : ticksCoords.shift();\n    }\n    if (clamp && littleThan(axisExtent[0], ticksCoords[0].coord)) {\n        ticksCoords.unshift({coord: axisExtent[0]});\n    }\n    if (littleThan(axisExtent[1], last.coord)) {\n        clamp ? (last.coord = axisExtent[1]) : ticksCoords.pop();\n    }\n    if (clamp && littleThan(last.coord, axisExtent[1])) {\n        ticksCoords.push({coord: axisExtent[1]});\n    }\n\n    function littleThan(a, b) {\n        // Avoid rounding error cause calculated tick coord different with extent.\n        // It may cause an extra unecessary tick added.\n        a = round(a);\n        b = round(b);\n        return inverse ? a > b : a < b;\n    }\n}\n\nexport default Axis;\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 * Do not mount those modules on 'src/echarts' for better tree shaking.\n */\n\nimport * as zrender from 'zrender/src/zrender';\nimport * as matrix from 'zrender/src/core/matrix';\nimport * as vector from 'zrender/src/core/vector';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as colorTool from 'zrender/src/tool/color';\nimport * as graphicUtil from './util/graphic';\nimport * as numberUtil from './util/number';\nimport * as formatUtil from './util/format';\nimport {throttle} from './util/throttle';\nimport * as ecHelper from './helper';\nimport parseGeoJSON from './coord/geo/parseGeoJson';\n\n\nexport {zrender};\nexport {default as List} from './data/List';\nexport {default as Model} from './model/Model';\nexport {default as Axis} from './coord/Axis';\nexport {numberUtil as number};\nexport {formatUtil as format};\nexport {throttle};\nexport {ecHelper as helper};\nexport {matrix};\nexport {vector};\nexport {colorTool as color};\nexport {default as env} from 'zrender/src/core/env';\n\nexport {parseGeoJSON};\nexport var parseGeoJson = parseGeoJSON;\n\nvar ecUtil = {};\nzrUtil.each(\n    [\n        'map', 'each', 'filter', 'indexOf', 'inherits', 'reduce', 'filter',\n        'bind', 'curry', 'isArray', 'isString', 'isObject', 'isFunction',\n        'extend', 'defaults', 'clone', 'merge'\n    ],\n    function (name) {\n        ecUtil[name] = zrUtil[name];\n    }\n);\nexport {ecUtil as util};\n\nvar graphic = {};\nzrUtil.each(\n    [\n        'extendShape', 'extendPath', 'makePath', 'makeImage',\n        'mergePath', 'resizePath', 'createIcon',\n        'setHoverStyle', 'setLabelStyle', 'setTextStyle', 'setText',\n        'getFont', 'updateProps', 'initProps', 'getTransform',\n        'clipPointsByRect', 'clipRectByRect',\n        'registerShape', 'getShapeClass',\n        'Group',\n        'Image',\n        'Text',\n        'Circle',\n        'Sector',\n        'Ring',\n        'Polygon',\n        'Polyline',\n        'Rect',\n        'Line',\n        'BezierCurve',\n        'Arc',\n        'IncrementalDisplayable',\n        'CompoundPath',\n        'LinearGradient',\n        'RadialGradient',\n        'BoundingRect'\n    ],\n    function (name) {\n        graphic[name] = graphicUtil[name];\n    }\n);\nexport {graphic};\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\nimport {__DEV__} from '../../config';\nimport createListFromArray from '../helper/createListFromArray';\nimport SeriesModel from '../../model/Series';\n\nexport default SeriesModel.extend({\n\n    type: 'series.line',\n\n    dependencies: ['grid', 'polar'],\n\n    getInitialData: function (option, ecModel) {\n        if (__DEV__) {\n            var coordSys = option.coordinateSystem;\n            if (coordSys !== 'polar' && coordSys !== 'cartesian2d') {\n                throw new Error('Line not support coordinateSystem besides cartesian and polar');\n            }\n        }\n        return createListFromArray(this.getSource(), this);\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        coordinateSystem: 'cartesian2d',\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n        // stack: null\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // polarIndex: 0,\n\n        // If clip the overflow value\n        clip: true,\n        // cursor: null,\n\n        label: {\n            position: 'top'\n        },\n        // itemStyle: {\n        // },\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\n        // Disabled if step is true\n        smooth: false,\n        smoothMonotone: null,\n        symbol: 'emptyCircle',\n        symbolSize: 4,\n        symbolRotate: null,\n\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\n        // Whether to connect break point.\n        connectNulls: false,\n\n        // Sampling for large data. Can be: 'average', 'max', 'min', 'sum'.\n        sampling: 'none',\n\n        animationEasing: 'linear',\n\n        // Disable progressive\n        progressive: 0,\n        hoverLayerThreshold: Infinity\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\nimport {retrieveRawValue} from '../../data/helper/dataProvider';\n\n/**\n * @param {module:echarts/data/List} data\n * @param {number} dataIndex\n * @return {string} label string. Not null/undefined\n */\nexport function getDefaultLabel(data, dataIndex) {\n    var labelDims = data.mapDimension('defaultedLabel', true);\n    var len = labelDims.length;\n\n    // Simple optimization (in lots of cases, label dims length is 1)\n    if (len === 1) {\n        return retrieveRawValue(data, dataIndex, labelDims[0]);\n    }\n    else if (len) {\n        var vals = [];\n        for (var i = 0; i < labelDims.length; i++) {\n            var val = retrieveRawValue(data, dataIndex, labelDims[i]);\n            vals.push(val);\n        }\n        return vals.join(' ');\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/chart/helper/Symbol\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport {createSymbol} from '../../util/symbol';\nimport * as graphic from '../../util/graphic';\nimport {parsePercent} from '../../util/number';\nimport {getDefaultLabel} from './labelHelper';\n\n\n/**\n * @constructor\n * @alias {module:echarts/chart/helper/Symbol}\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @extends {module:zrender/graphic/Group}\n */\nfunction SymbolClz(data, idx, seriesScope) {\n    graphic.Group.call(this);\n    this.updateData(data, idx, seriesScope);\n}\n\nvar symbolProto = SymbolClz.prototype;\n\n/**\n * @public\n * @static\n * @param {module:echarts/data/List} data\n * @param {number} dataIndex\n * @return {Array.<number>} [width, height]\n */\nvar getSymbolSize = SymbolClz.getSymbolSize = function (data, idx) {\n    var symbolSize = data.getItemVisual(idx, 'symbolSize');\n    return symbolSize instanceof Array\n        ? symbolSize.slice()\n        : [+symbolSize, +symbolSize];\n};\n\nfunction getScale(symbolSize) {\n    return [symbolSize[0] / 2, symbolSize[1] / 2];\n}\n\nfunction driftSymbol(dx, dy) {\n    this.parent.drift(dx, dy);\n}\n\nsymbolProto._createSymbol = function (\n    symbolType,\n    data,\n    idx,\n    symbolSize,\n    keepAspect\n) {\n    // Remove paths created before\n    this.removeAll();\n\n    var color = data.getItemVisual(idx, 'color');\n\n    // var symbolPath = createSymbol(\n    //     symbolType, -0.5, -0.5, 1, 1, color\n    // );\n    // If width/height are set too small (e.g., set to 1) on ios10\n    // and macOS Sierra, a circle stroke become a rect, no matter what\n    // the scale is set. So we set width/height as 2. See #4150.\n    var symbolPath = createSymbol(\n        symbolType, -1, -1, 2, 2, color, keepAspect\n    );\n\n    symbolPath.attr({\n        z2: 100,\n        culling: true,\n        scale: getScale(symbolSize)\n    });\n    // Rewrite drift method\n    symbolPath.drift = driftSymbol;\n\n    this._symbolType = symbolType;\n\n    this.add(symbolPath);\n};\n\n/**\n * Stop animation\n * @param {boolean} toLastFrame\n */\nsymbolProto.stopSymbolAnimation = function (toLastFrame) {\n    this.childAt(0).stopAnimation(toLastFrame);\n};\n\n/**\n * FIXME:\n * Caution: This method breaks the encapsulation of this module,\n * but it indeed brings convenience. So do not use the method\n * unless you detailedly know all the implements of `Symbol`,\n * especially animation.\n *\n * Get symbol path element.\n */\nsymbolProto.getSymbolPath = function () {\n    return this.childAt(0);\n};\n\n/**\n * Get scale(aka, current symbol size).\n * Including the change caused by animation\n */\nsymbolProto.getScale = function () {\n    return this.childAt(0).scale;\n};\n\n/**\n * Highlight symbol\n */\nsymbolProto.highlight = function () {\n    this.childAt(0).trigger('emphasis');\n};\n\n/**\n * Downplay symbol\n */\nsymbolProto.downplay = function () {\n    this.childAt(0).trigger('normal');\n};\n\n/**\n * @param {number} zlevel\n * @param {number} z\n */\nsymbolProto.setZ = function (zlevel, z) {\n    var symbolPath = this.childAt(0);\n    symbolPath.zlevel = zlevel;\n    symbolPath.z = z;\n};\n\nsymbolProto.setDraggable = function (draggable) {\n    var symbolPath = this.childAt(0);\n    symbolPath.draggable = draggable;\n    symbolPath.cursor = draggable ? 'move' : symbolPath.cursor;\n};\n\n/**\n * Update symbol properties\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @param {Object} [seriesScope]\n * @param {Object} [seriesScope.itemStyle]\n * @param {Object} [seriesScope.hoverItemStyle]\n * @param {Object} [seriesScope.symbolRotate]\n * @param {Object} [seriesScope.symbolOffset]\n * @param {module:echarts/model/Model} [seriesScope.labelModel]\n * @param {module:echarts/model/Model} [seriesScope.hoverLabelModel]\n * @param {boolean} [seriesScope.hoverAnimation]\n * @param {Object} [seriesScope.cursorStyle]\n * @param {module:echarts/model/Model} [seriesScope.itemModel]\n * @param {string} [seriesScope.symbolInnerColor]\n * @param {Object} [seriesScope.fadeIn=false]\n */\nsymbolProto.updateData = function (data, idx, seriesScope) {\n    this.silent = false;\n\n    var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';\n    var seriesModel = data.hostModel;\n    var symbolSize = getSymbolSize(data, idx);\n    var isInit = symbolType !== this._symbolType;\n\n    if (isInit) {\n        var keepAspect = data.getItemVisual(idx, 'symbolKeepAspect');\n        this._createSymbol(symbolType, data, idx, symbolSize, keepAspect);\n    }\n    else {\n        var symbolPath = this.childAt(0);\n        symbolPath.silent = false;\n        graphic.updateProps(symbolPath, {\n            scale: getScale(symbolSize)\n        }, seriesModel, idx);\n    }\n\n    this._updateCommon(data, idx, symbolSize, seriesScope);\n\n    if (isInit) {\n        var symbolPath = this.childAt(0);\n        var fadeIn = seriesScope && seriesScope.fadeIn;\n\n        var target = {scale: symbolPath.scale.slice()};\n        fadeIn && (target.style = {opacity: symbolPath.style.opacity});\n\n        symbolPath.scale = [0, 0];\n        fadeIn && (symbolPath.style.opacity = 0);\n\n        graphic.initProps(symbolPath, target, seriesModel, idx);\n    }\n\n    this._seriesModel = seriesModel;\n};\n\n// Update common properties\nvar normalStyleAccessPath = ['itemStyle'];\nvar emphasisStyleAccessPath = ['emphasis', 'itemStyle'];\nvar normalLabelAccessPath = ['label'];\nvar emphasisLabelAccessPath = ['emphasis', 'label'];\n\n/**\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @param {Array.<number>} symbolSize\n * @param {Object} [seriesScope]\n */\nsymbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) {\n    var symbolPath = this.childAt(0);\n    var seriesModel = data.hostModel;\n    var color = data.getItemVisual(idx, 'color');\n\n    // Reset style\n    if (symbolPath.type !== 'image') {\n        symbolPath.useStyle({\n            strokeNoScale: true\n        });\n    }\n    else {\n        symbolPath.setStyle({\n            opacity: null,\n            shadowBlur: null,\n            shadowOffsetX: null,\n            shadowOffsetY: null,\n            shadowColor: null\n        });\n    }\n\n    var itemStyle = seriesScope && seriesScope.itemStyle;\n    var hoverItemStyle = seriesScope && seriesScope.hoverItemStyle;\n    var symbolRotate = seriesScope && seriesScope.symbolRotate;\n    var symbolOffset = seriesScope && seriesScope.symbolOffset;\n    var labelModel = seriesScope && seriesScope.labelModel;\n    var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;\n    var hoverAnimation = seriesScope && seriesScope.hoverAnimation;\n    var cursorStyle = seriesScope && seriesScope.cursorStyle;\n\n    if (!seriesScope || data.hasItemOption) {\n        var itemModel = (seriesScope && seriesScope.itemModel)\n            ? seriesScope.itemModel : data.getItemModel(idx);\n\n        // Color must be excluded.\n        // Because symbol provide setColor individually to set fill and stroke\n        itemStyle = itemModel.getModel(normalStyleAccessPath).getItemStyle(['color']);\n        hoverItemStyle = itemModel.getModel(emphasisStyleAccessPath).getItemStyle();\n\n        symbolRotate = itemModel.getShallow('symbolRotate');\n        symbolOffset = itemModel.getShallow('symbolOffset');\n\n        labelModel = itemModel.getModel(normalLabelAccessPath);\n        hoverLabelModel = itemModel.getModel(emphasisLabelAccessPath);\n        hoverAnimation = itemModel.getShallow('hoverAnimation');\n        cursorStyle = itemModel.getShallow('cursor');\n    }\n    else {\n        hoverItemStyle = zrUtil.extend({}, hoverItemStyle);\n    }\n\n    var elStyle = symbolPath.style;\n\n    symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0);\n\n    if (symbolOffset) {\n        symbolPath.attr('position', [\n            parsePercent(symbolOffset[0], symbolSize[0]),\n            parsePercent(symbolOffset[1], symbolSize[1])\n        ]);\n    }\n\n    cursorStyle && symbolPath.attr('cursor', cursorStyle);\n\n    // PENDING setColor before setStyle!!!\n    symbolPath.setColor(color, seriesScope && seriesScope.symbolInnerColor);\n\n    symbolPath.setStyle(itemStyle);\n\n    var opacity = data.getItemVisual(idx, 'opacity');\n    if (opacity != null) {\n        elStyle.opacity = opacity;\n    }\n\n    var liftZ = data.getItemVisual(idx, 'liftZ');\n    var z2Origin = symbolPath.__z2Origin;\n    if (liftZ != null) {\n        if (z2Origin == null) {\n            symbolPath.__z2Origin = symbolPath.z2;\n            symbolPath.z2 += liftZ;\n        }\n    }\n    else if (z2Origin != null) {\n        symbolPath.z2 = z2Origin;\n        symbolPath.__z2Origin = null;\n    }\n\n    var useNameLabel = seriesScope && seriesScope.useNameLabel;\n\n    graphic.setLabelStyle(\n        elStyle, hoverItemStyle, labelModel, hoverLabelModel,\n        {\n            labelFetcher: seriesModel,\n            labelDataIndex: idx,\n            defaultText: getLabelDefaultText,\n            isRectText: true,\n            autoColor: color\n        }\n    );\n\n    // Do not execute util needed.\n    function getLabelDefaultText(idx, opt) {\n        return useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx);\n    }\n\n    symbolPath.__symbolOriginalScale = getScale(symbolSize);\n    symbolPath.hoverStyle = hoverItemStyle;\n    symbolPath.highDownOnUpdate = (\n        hoverAnimation && seriesModel.isAnimationEnabled()\n    ) ? highDownOnUpdate : null;\n\n    graphic.setHoverStyle(symbolPath);\n};\n\nfunction highDownOnUpdate(fromState, toState) {\n    // Do not support this hover animation util some scenario required.\n    // Animation can only be supported in hover layer when using `el.incremetal`.\n    if (this.incremental || this.useHoverLayer) {\n        return;\n    }\n\n    if (toState === 'emphasis') {\n        var scale = this.__symbolOriginalScale;\n        var ratio = scale[1] / scale[0];\n        var emphasisOpt = {\n            scale: [\n                Math.max(scale[0] * 1.1, scale[0] + 3),\n                Math.max(scale[1] * 1.1, scale[1] + 3 * ratio)\n            ]\n        };\n        // FIXME\n        // modify it after support stop specified animation.\n        // toState === fromState\n        //     ? (this.stopAnimation(), this.attr(emphasisOpt))\n        this.animateTo(emphasisOpt, 400, 'elasticOut');\n    }\n    else if (toState === 'normal') {\n        this.animateTo({\n            scale: this.__symbolOriginalScale\n        }, 400, 'elasticOut');\n    }\n}\n\n/**\n * @param {Function} cb\n * @param {Object} [opt]\n * @param {Object} [opt.keepLabel=true]\n */\nsymbolProto.fadeOut = function (cb, opt) {\n    var symbolPath = this.childAt(0);\n    // Avoid mistaken hover when fading out\n    this.silent = symbolPath.silent = true;\n    // Not show text when animating\n    !(opt && opt.keepLabel) && (symbolPath.style.text = null);\n\n    graphic.updateProps(\n        symbolPath,\n        {\n            style: {opacity: 0},\n            scale: [0, 0]\n        },\n        this._seriesModel,\n        this.dataIndex,\n        cb\n    );\n};\n\nzrUtil.inherits(SymbolClz, graphic.Group);\n\nexport default SymbolClz;","/*\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 * @module echarts/chart/helper/SymbolDraw\n */\n\nimport * as graphic from '../../util/graphic';\nimport SymbolClz from './Symbol';\nimport { isObject } from 'zrender/src/core/util';\n\n/**\n * @constructor\n * @alias module:echarts/chart/helper/SymbolDraw\n * @param {module:zrender/graphic/Group} [symbolCtor]\n */\nfunction SymbolDraw(symbolCtor) {\n    this.group = new graphic.Group();\n\n    this._symbolCtor = symbolCtor || SymbolClz;\n}\n\nvar symbolDrawProto = SymbolDraw.prototype;\n\nfunction symbolNeedsDraw(data, point, idx, opt) {\n    return point && !isNaN(point[0]) && !isNaN(point[1])\n        && !(opt.isIgnore && opt.isIgnore(idx))\n        // We do not set clipShape on group, because it will cut part of\n        // the symbol element shape. We use the same clip shape here as\n        // the line clip.\n        && !(opt.clipShape && !opt.clipShape.contain(point[0], point[1]))\n        && data.getItemVisual(idx, 'symbol') !== 'none';\n}\n\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n * @param {Object} [opt] Or isIgnore\n * @param {Function} [opt.isIgnore]\n * @param {Object} [opt.clipShape]\n */\nsymbolDrawProto.updateData = function (data, opt) {\n    opt = normalizeUpdateOpt(opt);\n\n    var group = this.group;\n    var seriesModel = data.hostModel;\n    var oldData = this._data;\n    var SymbolCtor = this._symbolCtor;\n\n    var seriesScope = makeSeriesScope(data);\n\n    // There is no oldLineData only when first rendering or switching from\n    // stream mode to normal mode, where previous elements should be removed.\n    if (!oldData) {\n        group.removeAll();\n    }\n\n    data.diff(oldData)\n        .add(function (newIdx) {\n            var point = data.getItemLayout(newIdx);\n            if (symbolNeedsDraw(data, point, newIdx, opt)) {\n                var symbolEl = new SymbolCtor(data, newIdx, seriesScope);\n                symbolEl.attr('position', point);\n                data.setItemGraphicEl(newIdx, symbolEl);\n                group.add(symbolEl);\n            }\n        })\n        .update(function (newIdx, oldIdx) {\n            var symbolEl = oldData.getItemGraphicEl(oldIdx);\n            var point = data.getItemLayout(newIdx);\n            if (!symbolNeedsDraw(data, point, newIdx, opt)) {\n                group.remove(symbolEl);\n                return;\n            }\n            if (!symbolEl) {\n                symbolEl = new SymbolCtor(data, newIdx);\n                symbolEl.attr('position', point);\n            }\n            else {\n                symbolEl.updateData(data, newIdx, seriesScope);\n                graphic.updateProps(symbolEl, {\n                    position: point\n                }, seriesModel);\n            }\n\n            // Add back\n            group.add(symbolEl);\n\n            data.setItemGraphicEl(newIdx, symbolEl);\n        })\n        .remove(function (oldIdx) {\n            var el = oldData.getItemGraphicEl(oldIdx);\n            el && el.fadeOut(function () {\n                group.remove(el);\n            });\n        })\n        .execute();\n\n    this._data = data;\n};\n\nsymbolDrawProto.isPersistent = function () {\n    return true;\n};\n\nsymbolDrawProto.updateLayout = function () {\n    var data = this._data;\n    if (data) {\n        // Not use animation\n        data.eachItemGraphicEl(function (el, idx) {\n            var point = data.getItemLayout(idx);\n            el.attr('position', point);\n        });\n    }\n};\n\nsymbolDrawProto.incrementalPrepareUpdate = function (data) {\n    this._seriesScope = makeSeriesScope(data);\n    this._data = null;\n    this.group.removeAll();\n};\n\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n * @param {Object} [opt] Or isIgnore\n * @param {Function} [opt.isIgnore]\n * @param {Object} [opt.clipShape]\n */\nsymbolDrawProto.incrementalUpdate = function (taskParams, data, opt) {\n    opt = normalizeUpdateOpt(opt);\n\n    function updateIncrementalAndHover(el) {\n        if (!el.isGroup) {\n            el.incremental = el.useHoverLayer = true;\n        }\n    }\n    for (var idx = taskParams.start; idx < taskParams.end; idx++) {\n        var point = data.getItemLayout(idx);\n        if (symbolNeedsDraw(data, point, idx, opt)) {\n            var el = new this._symbolCtor(data, idx, this._seriesScope);\n            el.traverse(updateIncrementalAndHover);\n            el.attr('position', point);\n            this.group.add(el);\n            data.setItemGraphicEl(idx, el);\n        }\n    }\n};\n\nfunction normalizeUpdateOpt(opt) {\n    if (opt != null && !isObject(opt)) {\n        opt = {isIgnore: opt};\n    }\n    return opt || {};\n}\n\nsymbolDrawProto.remove = function (enableAnimation) {\n    var group = this.group;\n    var data = this._data;\n    // Incremental model do not have this._data.\n    if (data && enableAnimation) {\n        data.eachItemGraphicEl(function (el) {\n            el.fadeOut(function () {\n                group.remove(el);\n            });\n        });\n    }\n    else {\n        group.removeAll();\n    }\n};\n\nfunction makeSeriesScope(data) {\n    var seriesModel = data.hostModel;\n    return {\n        itemStyle: seriesModel.getModel('itemStyle').getItemStyle(['color']),\n        hoverItemStyle: seriesModel.getModel('emphasis.itemStyle').getItemStyle(),\n        symbolRotate: seriesModel.get('symbolRotate'),\n        symbolOffset: seriesModel.get('symbolOffset'),\n        hoverAnimation: seriesModel.get('hoverAnimation'),\n        labelModel: seriesModel.getModel('label'),\n        hoverLabelModel: seriesModel.getModel('emphasis.label'),\n        cursorStyle: seriesModel.get('cursor')\n    };\n}\n\nexport default SymbolDraw;","/*\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\nimport {isDimensionStacked} from '../../data/helper/dataStackHelper';\nimport {map} from 'zrender/src/core/util';\n\n/**\n * @param {Object} coordSys\n * @param {module:echarts/data/List} data\n * @param {string} valueOrigin lineSeries.option.areaStyle.origin\n */\nexport function prepareDataCoordInfo(coordSys, data, valueOrigin) {\n    var baseAxis = coordSys.getBaseAxis();\n    var valueAxis = coordSys.getOtherAxis(baseAxis);\n    var valueStart = getValueStart(valueAxis, valueOrigin);\n\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\n    var dims = map(coordSys.dimensions, function (coordDim) {\n        return data.mapDimension(coordDim);\n    });\n\n    var stacked;\n    var stackResultDim = data.getCalculationInfo('stackResultDimension');\n    if (stacked |= isDimensionStacked(data, dims[0] /*, dims[1]*/)) { // jshint ignore:line\n        dims[0] = stackResultDim;\n    }\n    if (stacked |= isDimensionStacked(data, dims[1] /*, dims[0]*/)) { // 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    }\n    else if (valueOrigin === 'end') {\n        valueStart = extent[1];\n    }\n    // auto\n    else {\n        // Both positive\n        if (extent[0] > 0) {\n            valueStart = extent[0];\n        }\n        // Both negative\n        else if (extent[1] < 0) {\n            valueStart = extent[1];\n        }\n        // If is one positive, and one negative, onZero shall be true\n    }\n\n    return valueStart;\n}\n\nexport function getStackedOnPoint(dataCoordInfo, coordSys, data, idx) {\n    var value = NaN;\n    if (dataCoordInfo.stacked) {\n        value = data.get(data.getCalculationInfo('stackedOverDimension'), idx);\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\n    return coordSys.dataToPoint(stackedData);\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\nimport {prepareDataCoordInfo, getStackedOnPoint} from './helper';\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\n// function convertToIntId(newIdList, oldIdList) {\n//     // Generate int id instead of string id.\n//     // Compare string maybe slow in score function of arrDiff\n\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// }\n\nfunction diffData(oldData, newData) {\n    var diffResult = [];\n\n    newData.diff(oldData)\n        .add(function (idx) {\n            diffResult.push({cmd: '+', idx: idx});\n        })\n        .update(function (newIdx, oldIdx) {\n            diffResult.push({cmd: '=', idx: oldIdx, idx1: newIdx});\n        })\n        .remove(function (idx) {\n            diffResult.push({cmd: '-', idx: idx});\n        })\n        .execute();\n\n    return diffResult;\n}\n\nexport default function (\n    oldData, newData,\n    oldStackedOnPoints, newStackedOnPoints,\n    oldCoordSys, newCoordSys,\n    oldValueOrigin, newValueOrigin\n) {\n    var diff = diffData(oldData, newData);\n\n    // var newIdList = newData.mapArray(newData.getId);\n    // var oldIdList = oldData.mapArray(oldData.getId);\n\n    // convertToIntId(newIdList, oldIdList);\n\n    // // FIXME One data ?\n    // diff = arrayDiff(oldIdList, newIdList);\n\n    var currPoints = [];\n    var nextPoints = [];\n    // Points for stacking base line\n    var currStackedPoints = [];\n    var nextStackedPoints = [];\n\n    var status = [];\n    var sortedIndices = [];\n    var rawIndices = [];\n\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;\n\n        // 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        switch (diffItem.cmd) {\n            case '=':\n                var currentPt = oldData.getItemLayout(diffItem.idx);\n                var nextPt = newData.getItemLayout(diffItem.idx1);\n                // If previous data is NaN, use next point directly\n                if (isNaN(currentPt[0]) || isNaN(currentPt[1])) {\n                    currentPt = nextPt.slice();\n                }\n                currPoints.push(currentPt);\n                nextPoints.push(nextPt);\n\n                currStackedPoints.push(oldStackedOnPoints[diffItem.idx]);\n                nextStackedPoints.push(newStackedOnPoints[diffItem.idx1]);\n\n                rawIndices.push(newData.getRawIndex(diffItem.idx1));\n                break;\n            case '+':\n                var idx = diffItem.idx;\n                currPoints.push(\n                    oldCoordSys.dataToPoint([\n                        newData.get(newDataOldCoordInfo.dataDimsForPoint[0], idx),\n                        newData.get(newDataOldCoordInfo.dataDimsForPoint[1], idx)\n                    ])\n                );\n\n                nextPoints.push(newData.getItemLayout(idx).slice());\n\n                currStackedPoints.push(\n                    getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, idx)\n                );\n                nextStackedPoints.push(newStackedOnPoints[idx]);\n\n                rawIndices.push(newData.getRawIndex(idx));\n                break;\n            case '-':\n                var idx = diffItem.idx;\n                var rawIndex = oldData.getRawIndex(idx);\n                // Data is replaced. In the case of dynamic data queue\n                // FIXME FIXME FIXME\n                if (rawIndex !== idx) {\n                    currPoints.push(oldData.getItemLayout(idx));\n                    nextPoints.push(newCoordSys.dataToPoint([\n                        oldData.get(oldDataNewCoordInfo.dataDimsForPoint[0], idx),\n                        oldData.get(oldDataNewCoordInfo.dataDimsForPoint[1], idx)\n                    ]));\n\n                    currStackedPoints.push(oldStackedOnPoints[idx]);\n                    nextStackedPoints.push(\n                        getStackedOnPoint(oldDataNewCoordInfo, newCoordSys, oldData, idx)\n                    );\n\n                    rawIndices.push(rawIndex);\n                }\n                else {\n                    pointAdded = false;\n                }\n        }\n\n        // Original indices\n        if (pointAdded) {\n            status.push(diffItem);\n            sortedIndices.push(sortedIndices.length);\n        }\n    }\n\n    // Diff result may be crossed if all items are changed\n    // Sort by data index\n    sortedIndices.sort(function (a, b) {\n        return rawIndices[a] - rawIndices[b];\n    });\n\n    var sortedCurrPoints = [];\n    var sortedNextPoints = [];\n\n    var sortedCurrStackedPoints = [];\n    var sortedNextStackedPoints = [];\n\n    var sortedStatus = [];\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\n        sortedCurrStackedPoints[i] = currStackedPoints[idx];\n        sortedNextStackedPoints[i] = nextStackedPoints[idx];\n\n        sortedStatus[i] = status[idx];\n    }\n\n    return {\n        current: sortedCurrPoints,\n        next: sortedNextPoints,\n\n        stackedOnCurrent: sortedCurrStackedPoints,\n        stackedOnNext: sortedNextStackedPoints,\n\n        status: sortedStatus\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// Poly path support NaN point\n\nimport Path from 'zrender/src/graphic/Path';\nimport * as vec2 from 'zrender/src/core/vector';\nimport fixClipWithShadow from 'zrender/src/graphic/helper/fixClipWithShadow';\n\nvar vec2Min = vec2.min;\nvar vec2Max = vec2.max;\n\nvar scaleAndAdd = vec2.scaleAndAdd;\nvar v2Copy = vec2.copy;\n\n// Temporary variable\nvar v = [];\nvar cp0 = [];\nvar cp1 = [];\n\nfunction isPointNull(p) {\n    return isNaN(p[0]) || isNaN(p[1]);\n}\n\nfunction drawSegment(\n    ctx, points, start, segLen, allLen,\n    dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls\n) {\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    }\n    else {\n        return drawMono.apply(this, arguments);\n    }\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\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 */\nfunction drawMono(\n    ctx, points, start, segLen, allLen,\n    dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls\n) {\n    var prevIdx = 0;\n    var idx = start;\n    for (var k = 0; k < segLen; k++) {\n        var p = points[idx];\n        if (idx >= allLen || idx < 0) {\n            break;\n        }\n        if (isPointNull(p)) {\n            if (connectNulls) {\n                idx += dir;\n                continue;\n            }\n            break;\n        }\n\n        if (idx === start) {\n            ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);\n        }\n        else {\n            if (smooth > 0) {\n                var prevP = points[prevIdx];\n                var dim = smoothMonotone === 'y' ? 1 : 0;\n\n                // Length of control point to p, either in x or y, but not both\n                var ctrlLen = (p[dim] - prevP[dim]) * smooth;\n\n                v2Copy(cp0, prevP);\n                cp0[dim] = prevP[dim] + ctrlLen;\n\n                v2Copy(cp1, p);\n                cp1[dim] = p[dim] - ctrlLen;\n\n                ctx.bezierCurveTo(\n                    cp0[0], cp0[1],\n                    cp1[0], cp1[1],\n                    p[0], p[1]\n                );\n            }\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/**\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 */\nfunction drawNonMono(\n    ctx, points, start, segLen, allLen,\n    dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls\n) {\n    var prevIdx = 0;\n    var idx = start;\n    for (var k = 0; k < segLen; k++) {\n        var p = points[idx];\n        if (idx >= allLen || idx < 0) {\n            break;\n        }\n        if (isPointNull(p)) {\n            if (connectNulls) {\n                idx += dir;\n                continue;\n            }\n            break;\n        }\n\n        if (idx === start) {\n            ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);\n            v2Copy(cp0, p);\n        }\n        else {\n            if (smooth > 0) {\n                var nextIdx = idx + dir;\n                var nextP = points[nextIdx];\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];\n                // Last point\n                if (!nextP || isPointNull(nextP)) {\n                    v2Copy(cp1, p);\n                }\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\n                    var lenPrevSeg;\n                    var lenNextSeg;\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                    }\n                    else {\n                        lenPrevSeg = vec2.dist(p, prevP);\n                        lenNextSeg = vec2.dist(p, nextP);\n                    }\n\n                    // Use ratio of seg length\n                    ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg);\n\n                    scaleAndAdd(cp1, p, v, -smooth * (1 - ratioNextSeg));\n                }\n                // Smooth constraint\n                vec2Min(cp0, cp0, smoothMax);\n                vec2Max(cp0, cp0, smoothMin);\n                vec2Min(cp1, cp1, smoothMax);\n                vec2Max(cp1, cp1, smoothMin);\n\n                ctx.bezierCurveTo(\n                    cp0[0], cp0[1],\n                    cp1[0], cp1[1],\n                    p[0], p[1]\n                );\n                // cp0 of next segment\n                scaleAndAdd(cp0, p, v, smooth * ratioNextSeg);\n            }\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    if (smoothConstraint) {\n        for (var i = 0; i < points.length; i++) {\n            var pt = points[i];\n            if (pt[0] < ptMin[0]) {\n                ptMin[0] = pt[0];\n            }\n            if (pt[1] < ptMin[1]) {\n                ptMin[1] = pt[1];\n            }\n            if (pt[0] > ptMax[0]) {\n                ptMax[0] = pt[0];\n            }\n            if (pt[1] > ptMax[1]) {\n                ptMax[1] = pt[1];\n            }\n        }\n    }\n    return {\n        min: smoothConstraint ? ptMin : ptMax,\n        max: smoothConstraint ? ptMax : ptMin\n    };\n}\n\nexport var Polyline = Path.extend({\n\n    type: 'ec-polyline',\n\n    shape: {\n        points: [],\n\n        smooth: 0,\n\n        smoothConstraint: true,\n\n        smoothMonotone: null,\n\n        connectNulls: false\n    },\n\n    style: {\n        fill: null,\n\n        stroke: '#000'\n    },\n\n    brush: fixClipWithShadow(Path.prototype.brush),\n\n    buildPath: function (ctx, shape) {\n        var points = shape.points;\n\n        var i = 0;\n        var len = points.length;\n\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            for (; i < len; i++) {\n                if (!isPointNull(points[i])) {\n                    break;\n                }\n            }\n        }\n        while (i < len) {\n            i += drawSegment(\n                ctx, points, i, len, len,\n                1, result.min, result.max, shape.smooth,\n                shape.smoothMonotone, shape.connectNulls\n            ) + 1;\n        }\n    }\n});\n\nexport var Polygon = Path.extend({\n\n    type: 'ec-polygon',\n\n    shape: {\n        points: [],\n\n        // Offset between stacked base points and points\n        stackedOnPoints: [],\n\n        smooth: 0,\n\n        stackedOnSmooth: 0,\n\n        smoothConstraint: true,\n\n        smoothMonotone: null,\n\n        connectNulls: false\n    },\n\n    brush: fixClipWithShadow(Path.prototype.brush),\n\n    buildPath: function (ctx, shape) {\n        var points = shape.points;\n        var stackedOnPoints = shape.stackedOnPoints;\n\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            for (; i < len; i++) {\n                if (!isPointNull(points[i])) {\n                    break;\n                }\n            }\n        }\n        while (i < len) {\n            var k = drawSegment(\n                ctx, points, i, len, len,\n                1, bbox.min, bbox.max, shape.smooth,\n                smoothMonotone, shape.connectNulls\n            );\n            drawSegment(\n                ctx, stackedOnPoints, i + k - 1, k, len,\n                -1, stackedOnBBox.min, stackedOnBBox.max, shape.stackedOnSmooth,\n                smoothMonotone, shape.connectNulls\n            );\n            i += k + 1;\n\n            ctx.closePath();\n        }\n    }\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as graphic from '../../util/graphic';\nimport {round} from '../../util/number';\n\nfunction createGridClipPath(cartesian, hasAnimation, seriesModel) {\n    var rect = cartesian.getArea();\n    var isHorizontal = cartesian.getBaseAxis().isHorizontal();\n\n    var x = rect.x;\n    var y = rect.y;\n    var width = rect.width;\n    var height = rect.height;\n\n    var lineWidth = seriesModel.get('lineStyle.width') || 2;\n    // Expand the clip path a bit to avoid the border is clipped and looks thinner\n    x -= lineWidth / 2;\n    y -= lineWidth / 2;\n    width += lineWidth;\n    height += lineWidth;\n\n    var clipPath = new graphic.Rect({\n        shape: {\n            x: x,\n            y: y,\n            width: width,\n            height: height\n        }\n    });\n\n    if (hasAnimation) {\n        clipPath.shape[isHorizontal ? 'width' : 'height'] = 0;\n        graphic.initProps(clipPath, {\n            shape: {\n                width: width,\n                height: height\n            }\n        }, seriesModel);\n    }\n\n    return clipPath;\n}\n\nfunction createPolarClipPath(polar, hasAnimation, seriesModel) {\n    var sectorArea = polar.getArea();\n    // Avoid float number rounding error for symbol on the edge of axis extent.\n\n    var clipPath = new graphic.Sector({\n        shape: {\n            cx: round(polar.cx, 1),\n            cy: round(polar.cy, 1),\n            r0: round(sectorArea.r0, 1),\n            r: round(sectorArea.r, 1),\n            startAngle: sectorArea.startAngle,\n            endAngle: sectorArea.endAngle,\n            clockwise: sectorArea.clockwise\n        }\n    });\n\n    if (hasAnimation) {\n        clipPath.shape.endAngle = sectorArea.startAngle;\n        graphic.initProps(clipPath, {\n            shape: {\n                endAngle: sectorArea.endAngle\n            }\n        }, seriesModel);\n    }\n    return clipPath;\n}\n\nfunction createClipPath(coordSys, hasAnimation, seriesModel) {\n    if (!coordSys) {\n        return null;\n    }\n    else if (coordSys.type === 'polar') {\n        return createPolarClipPath(coordSys, hasAnimation, seriesModel);\n    }\n    else if (coordSys.type === 'cartesian2d') {\n        return createGridClipPath(coordSys, hasAnimation, seriesModel);\n    }\n    return null;\n}\n\nexport {\n    createGridClipPath,\n    createPolarClipPath,\n    createClipPath\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// FIXME step not support polar\n\nimport {__DEV__} from '../../config';\nimport * as zrUtil from 'zrender/src/core/util';\nimport SymbolDraw from '../helper/SymbolDraw';\nimport SymbolClz from '../helper/Symbol';\nimport lineAnimationDiff from './lineAnimationDiff';\nimport * as graphic from '../../util/graphic';\nimport * as modelUtil from '../../util/model';\nimport {Polyline, Polygon} from './poly';\nimport ChartView from '../../view/Chart';\nimport {prepareDataCoordInfo, getStackedOnPoint} from './helper';\nimport {createGridClipPath, createPolarClipPath} from '../helper/createClipPathFromCoordSys';\n\nfunction isPointsSame(points1, points2) {\n    if (points1.length !== points2.length) {\n        return;\n    }\n    for (var i = 0; i < points1.length; i++) {\n        var p1 = points1[i];\n        var p2 = points2[i];\n        if (p1[0] !== p2[0] || p1[1] !== p2[1]) {\n            return;\n        }\n    }\n    return true;\n}\n\nfunction getSmooth(smooth) {\n    return typeof (smooth) === 'number' ? smooth : (smooth ? 0.5 : 0);\n}\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 */\nfunction getStackedOnPoints(coordSys, data, dataCoordInfo) {\n    if (!dataCoordInfo.valueDim) {\n        return [];\n    }\n\n    var points = [];\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\n    var stepPoints = [];\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\n        var stepPt = [];\n        switch (stepTurnAt) {\n            case 'end':\n                stepPt[baseIndex] = nextPt[baseIndex];\n                stepPt[1 - baseIndex] = pt[1 - baseIndex];\n                // default is start\n                stepPoints.push(stepPt);\n                break;\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            default:\n                stepPt[baseIndex] = pt[baseIndex];\n                stepPt[1 - baseIndex] = nextPt[1 - baseIndex];\n                // default is start\n                stepPoints.push(stepPt);\n        }\n    }\n    // Last points\n    points[i] && stepPoints.push(points[i]);\n    return stepPoints;\n}\n\nfunction getVisualGradient(data, coordSys) {\n    var visualMetaList = data.getVisual('visualMeta');\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        if (__DEV__) {\n            console.warn('Visual map on line style is only supported on cartesian2d.');\n        }\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;\n        // Can only be x or y\n        if (coordDim === 'x' || coordDim === 'y') {\n            visualMeta = visualMetaList[i];\n            break;\n        }\n    }\n\n    if (!visualMeta) {\n        if (__DEV__) {\n            console.warn('Visual map on line style only support x or y dimension.');\n        }\n        return;\n    }\n\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    var axis = coordSys.getAxis(coordDim);\n\n    // dataToCoor mapping may not be linear, but must be monotonic.\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    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({ // notice colorStops.length have been changed.\n        offset: stopLen ? colorStops[0].offset : 0.5,\n        color: outerColors[0] || 'transparent'\n    });\n\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\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    if (!categoryAxis) {\n        return;\n    }\n\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    if (isAuto\n        // Simplify the logic, do not determine label overlap here.\n        && canShowAllSymbolForCategory(categoryAxis, data)\n    ) {\n        return;\n    }\n\n    // Otherwise follow the label interval strategy on category axis.\n    var categoryDataDim = data.mapDimension(categoryAxis.dim);\n    var labelMap = {};\n\n    zrUtil.each(categoryAxis.getViewLabels(), function (labelItem) {\n        labelMap[labelItem.tickValue] = 1;\n    });\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\n    // Sampling some points, max 5.\n    var dataLen = data.count();\n    var step = Math.max(1, Math.round(dataLen / 5));\n    for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) {\n        if (SymbolClz.getSymbolSize(\n                data, dataIndex\n            // Only for cartesian, where `isHorizontal` exists.\n            )[categoryAxis.isHorizontal() ? 1 : 0]\n            // Empirical number\n            * 1.5 > availSize\n        ) {\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);\n        // Expand clip shape to avoid clipping when line value exceeds axis\n        if (!seriesModel.get('clip', true)) {\n            var rectShape = clipPath.shape;\n            var expandSize = Math.max(rectShape.width, rectShape.height);\n            if (isHorizontal) {\n                rectShape.y -= expandSize;\n                rectShape.height += expandSize * 2;\n            }\n            else {\n                rectShape.x -= expandSize;\n                rectShape.width += expandSize * 2;\n            }\n        }\n        return clipPath;\n    }\n    else {\n        return createPolarClipPath(coordSys, hasAnimation, seriesModel);\n    }\n\n}\n\nexport default ChartView.extend({\n\n    type: 'line',\n\n    init: function () {\n        var lineGroup = new graphic.Group();\n\n        var symbolDraw = new SymbolDraw();\n        this.group.add(symbolDraw.group);\n\n        this._symbolDraw = symbolDraw;\n        this._lineGroup = lineGroup;\n    },\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\n        var points = data.mapArray(data.getItemLayout);\n\n        var isCoordSysPolar = coordSys.type === 'polar';\n        var prevCoordSys = this._coordSys;\n\n        var symbolDraw = this._symbolDraw;\n        var polyline = this._polyline;\n        var polygon = this._polygon;\n\n        var lineGroup = this._lineGroup;\n\n        var hasAnimation = seriesModel.get('animation');\n\n        var isAreaChart = !areaStyleModel.isEmpty();\n\n        var valueOrigin = areaStyleModel.get('origin');\n        var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin);\n\n        var stackedOnPoints = getStackedOnPoints(coordSys, data, dataCoordInfo);\n\n        var showSymbol = seriesModel.get('showSymbol');\n\n        var isIgnoreFunc = showSymbol && !isCoordSysPolar\n            && getIsIgnoreFunc(seriesModel, data, coordSys);\n\n        // Remove temporary symbols\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        });\n\n        // Remove previous created symbols if showSymbol changed to false\n        if (!showSymbol) {\n            symbolDraw.remove();\n        }\n\n        group.add(lineGroup);\n\n        // FIXME step not support polar\n        var step = !isCoordSysPolar && seriesModel.get('step');\n        var clipShapeForSymbol;\n        if (coordSys && coordSys.getArea) {\n            clipShapeForSymbol = coordSys.getArea();\n            // Avoid float number rounding error for symbol on the edge of axis extent.\n            // See #7913 and `test/dataZoom-clip.html`.\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            }\n            else if (clipShapeForSymbol.r0) {\n                clipShapeForSymbol.r0 -= 0.5;\n                clipShapeForSymbol.r1 += 0.5;\n            }\n        }\n        // Initialization animation or coordinate system changed\n        if (\n            !(polyline && prevCoordSys.type === coordSys.type && step === this._step)\n        ) {\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            if (isAreaChart) {\n                polygon = this._newPolygon(\n                    points, stackedOnPoints,\n                    coordSys, hasAnimation\n                );\n            }\n            lineGroup.setClipPath(createLineClipPath(coordSys, true, seriesModel));\n        }\n        else {\n            if (isAreaChart && !polygon) {\n                // If areaStyle is added\n                polygon = this._newPolygon(\n                    points, stackedOnPoints,\n                    coordSys, hasAnimation\n                );\n            }\n            else if (polygon && !isAreaChart) {\n                // If areaStyle is removed\n                lineGroup.remove(polygon);\n                polygon = this._polygon = null;\n            }\n\n            // Update clipPath\n            lineGroup.setClipPath(createLineClipPath(coordSys, false, seriesModel));\n\n            // Always update, or it is wrong in the case turning on legend\n            // because points are not changed\n            showSymbol && symbolDraw.updateData(data, {\n                isIgnore: isIgnoreFunc,\n                clipShape: clipShapeForSymbol\n            });\n\n            // Stop symbol animation and sync with line points\n            // FIXME performance?\n            data.eachItemGraphicEl(function (el) {\n                el.stopAnimation(true);\n            });\n\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            if (!isPointsSame(this._stackedOnPoints, stackedOnPoints)\n                || !isPointsSame(this._points, points)\n            ) {\n                if (hasAnimation) {\n                    this._updateAnimation(\n                        data, stackedOnPoints, coordSys, api, step, valueOrigin\n                    );\n                }\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\n        polyline.useStyle(zrUtil.defaults(\n            // Use color in lineStyle first\n            lineStyleModel.getLineStyle(),\n            {\n                fill: 'none',\n                stroke: visualColor,\n                lineJoin: 'bevel'\n            }\n        ));\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\n            polygon.useStyle(zrUtil.defaults(\n                areaStyleModel.getAreaStyle(),\n                {\n                    fill: visualColor,\n                    opacity: 0.7,\n                    lineJoin: 'bevel'\n                }\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;\n        // Save the coordinate system for transition animation when data changed\n        this._coordSys = coordSys;\n        this._stackedOnPoints = stackedOnPoints;\n        this._points = points;\n        this._step = step;\n        this._valueOrigin = valueOrigin;\n    },\n\n    dispose: function () {},\n\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            if (!symbol) {\n                // Create a temporary symbol if it is not exists\n                var pt = data.getItemLayout(dataIndex);\n                if (!pt) {\n                    // Null data\n                    return;\n                }\n                symbol = new SymbolClz(data, dataIndex);\n                symbol.position = pt;\n                symbol.setZ(\n                    seriesModel.get('zlevel'),\n                    seriesModel.get('z')\n                );\n                symbol.ignore = isNaN(pt[0]) || isNaN(pt[1]);\n                symbol.__temp = true;\n                data.setItemGraphicEl(dataIndex, symbol);\n\n                // Stop scale animation\n                symbol.stopSymbolAnimation(true);\n\n                this.group.add(symbol);\n            }\n            symbol.highlight();\n        }\n        else {\n            // Highlight whole series\n            ChartView.prototype.highlight.call(\n                this, seriesModel, ecModel, api, payload\n            );\n        }\n    },\n\n    downplay: function (seriesModel, ecModel, api, payload) {\n        var data = seriesModel.getData();\n        var dataIndex = modelUtil.queryDataIndex(data, payload);\n        if (dataIndex != null && dataIndex >= 0) {\n            var symbol = data.getItemGraphicEl(dataIndex);\n            if (symbol) {\n                if (symbol.__temp) {\n                    data.setItemGraphicEl(dataIndex, null);\n                    this.group.remove(symbol);\n                }\n                else {\n                    symbol.downplay();\n                }\n            }\n        }\n        else {\n            // FIXME\n            // can not downplay completely.\n            // Downplay whole series\n            ChartView.prototype.downplay.call(\n                this, seriesModel, ecModel, api, payload\n            );\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;\n        // Remove previous created polyline\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\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;\n        // Remove previous created polygon\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\n        var diff = lineAnimationDiff(\n            this._data, data,\n            this._stackedOnPoints, stackedOnPoints,\n            this._coordSys, coordSys,\n            this._valueOrigin, valueOrigin\n        );\n\n        var current = diff.current;\n        var stackedOnCurrent = diff.stackedOnCurrent;\n        var next = diff.next;\n        var stackedOnNext = diff.stackedOnNext;\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        }\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        polyline.shape.__points = diff.current;\n        polyline.shape.points = current;\n\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            if (cmd === '=') {\n                var el = data.getItemGraphicEl(diffStatus[i].idx1);\n                if (el) {\n                    updatedDataInfo.push({\n                        el: el,\n                        ptIdx: i    // Index of points\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\n    remove: function (ecModel) {\n        var group = this.group;\n        var oldData = this._data;\n        this._lineGroup.removeAll();\n        this._symbolDraw.remove(true);\n        // Remove temporary created elements when highlighting\n        oldData && oldData.eachItemGraphicEl(function (el, idx) {\n            if (el.__temp) {\n                group.remove(el);\n                oldData.setItemGraphicEl(idx, null);\n            }\n        });\n\n        this._polyline =\n            this._polygon =\n            this._coordSys =\n            this._points =\n            this._stackedOnPoints =\n            this._data = null;\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\nimport {isFunction} from 'zrender/src/core/util';\n\nexport default function (seriesType, defaultSymbolType, legendSymbol) {\n    // Encoding visual for all series include which is filtered for legend drawing\n    return {\n        seriesType: seriesType,\n\n        // For legend.\n        performRawSeries: true,\n\n        reset: function (seriesModel, ecModel, api) {\n            var data = seriesModel.getData();\n\n            var symbolType = seriesModel.get('symbol');\n            var symbolSize = seriesModel.get('symbolSize');\n            var keepAspect = seriesModel.get('symbolKeepAspect');\n\n            var hasSymbolTypeCallback = isFunction(symbolType);\n            var hasSymbolSizeCallback = isFunction(symbolSize);\n            var hasCallback = hasSymbolTypeCallback || hasSymbolSizeCallback;\n            var seriesSymbol = (!hasSymbolTypeCallback && symbolType) ? symbolType : defaultSymbolType;\n            var seriesSymbolSize = !hasSymbolSizeCallback ? symbolSize : null;\n\n            data.setVisual({\n                legendSymbol: legendSymbol || seriesSymbol,\n                // If seting callback functions on `symbol` or `symbolSize`, for simplicity and avoiding\n                // to bring trouble, we do not pick a reuslt from one of its calling on data item here,\n                // but just use the default value. Callback on `symbol` or `symbolSize` is convenient in\n                // some cases but generally it is not recommanded.\n                symbol: seriesSymbol,\n                symbolSize: seriesSymbolSize,\n                symbolKeepAspect: keepAspect\n            });\n\n            // Only visible series has each data be visual encoded\n            if (ecModel.isSeriesFiltered(seriesModel)) {\n                return;\n            }\n\n            function dataEach(data, idx) {\n                if (hasCallback) {\n                    var rawValue = seriesModel.getRawValue(idx);\n                    var params = seriesModel.getDataParams(idx);\n                    hasSymbolTypeCallback && data.setItemVisual(idx, 'symbol', symbolType(rawValue, params));\n                    hasSymbolSizeCallback && data.setItemVisual(idx, 'symbolSize', symbolSize(rawValue, params));\n                }\n\n                if (data.hasItemOption) {\n                    var itemModel = data.getItemModel(idx);\n                    var itemSymbolType = itemModel.getShallow('symbol', true);\n                    var itemSymbolSize = itemModel.getShallow('symbolSize', true);\n                    var itemSymbolKeepAspect = itemModel.getShallow('symbolKeepAspect', true);\n\n                    // If has item symbol\n                    if (itemSymbolType != null) {\n                        data.setItemVisual(idx, 'symbol', itemSymbolType);\n                    }\n                    if (itemSymbolSize != null) {\n                        // PENDING Transform symbolSize ?\n                        data.setItemVisual(idx, 'symbolSize', itemSymbolSize);\n                    }\n                    if (itemSymbolKeepAspect != null) {\n                        data.setItemVisual(idx, 'symbolKeepAspect', itemSymbolKeepAspect);\n                    }\n                }\n            }\n\n            return { dataEach: (data.hasItemOption || hasCallback) ? dataEach : null };\n        }\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\n\nimport {map} from 'zrender/src/core/util';\nimport createRenderPlanner from '../chart/helper/createRenderPlanner';\nimport {isDimensionStacked} from '../data/helper/dataStackHelper';\n\nexport default function (seriesType) {\n    return {\n        seriesType: seriesType,\n\n        plan: createRenderPlanner(),\n\n        reset: function (seriesModel) {\n            var data = seriesModel.getData();\n            var coordSys = seriesModel.coordinateSystem;\n            var pipelineContext = seriesModel.pipelineContext;\n            var isLargeRender = pipelineContext.large;\n\n            if (!coordSys) {\n                return;\n            }\n\n            var dims = map(coordSys.dimensions, function (dim) {\n                return data.mapDimension(dim);\n            }).slice(0, 2);\n            var dimLen = dims.length;\n\n            var stackResultDim = data.getCalculationInfo('stackResultDimension');\n            if (isDimensionStacked(data, dims[0] /*, dims[1]*/)) {\n                dims[0] = stackResultDim;\n            }\n            if (isDimensionStacked(data, dims[1] /*, dims[0]*/)) {\n                dims[1] = stackResultDim;\n            }\n\n            function progress(params, data) {\n                var segCount = params.end - params.start;\n                var points = isLargeRender && new Float32Array(segCount * dimLen);\n\n                for (var i = params.start, offset = 0, tmpIn = [], tmpOut = []; i < params.end; i++) {\n                    var point;\n\n                    if (dimLen === 1) {\n                        var x = data.get(dims[0], i);\n                        point = !isNaN(x) && coordSys.dataToPoint(x, null, tmpOut);\n                    }\n                    else {\n                        var x = tmpIn[0] = data.get(dims[0], i);\n                        var y = tmpIn[1] = data.get(dims[1], i);\n                        // Also {Array.<number>}, not undefined to avoid if...else... statement\n                        point = !isNaN(x) && !isNaN(y) && coordSys.dataToPoint(tmpIn, null, tmpOut);\n                    }\n\n                    if (isLargeRender) {\n                        points[offset++] = point ? point[0] : NaN;\n                        points[offset++] = point ? point[1] : NaN;\n                    }\n                    else {\n                        data.setItemLayout(i, (point && point.slice()) || [NaN, NaN]);\n                    }\n                }\n\n                isLargeRender && data.setLayout('symbolPoints', points);\n            }\n\n            return dimLen && {progress: progress};\n        }\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar samplers = {\n    average: function (frame) {\n        var sum = 0;\n        var count = 0;\n        for (var i = 0; i < frame.length; i++) {\n            if (!isNaN(frame[i])) {\n                sum += frame[i];\n                count++;\n            }\n        }\n        // Return NaN if count is 0\n        return count === 0 ? NaN : sum / count;\n    },\n    sum: function (frame) {\n        var sum = 0;\n        for (var i = 0; i < frame.length; i++) {\n            // Ignore NaN\n            sum += frame[i] || 0;\n        }\n        return sum;\n    },\n    max: function (frame) {\n        var max = -Infinity;\n        for (var i = 0; i < frame.length; i++) {\n            frame[i] > max && (max = frame[i]);\n        }\n        // NaN will cause illegal axis extent.\n        return isFinite(max) ? max : NaN;\n    },\n    min: function (frame) {\n        var min = Infinity;\n        for (var i = 0; i < frame.length; i++) {\n            frame[i] < min && (min = frame[i]);\n        }\n        // NaN will cause illegal axis extent.\n        return isFinite(min) ? min : NaN;\n    },\n    // TODO\n    // Median\n    nearest: function (frame) {\n        return frame[0];\n    }\n};\n\nvar indexSampler = function (frame, value) {\n    return Math.round(frame.length / 2);\n};\n\nexport default function (seriesType) {\n    return {\n\n        seriesType: seriesType,\n\n        modifyOutputEnd: true,\n\n        reset: function (seriesModel, ecModel, api) {\n            var data = seriesModel.getData();\n            var sampling = seriesModel.get('sampling');\n            var coordSys = seriesModel.coordinateSystem;\n            // Only cartesian2d support down sampling\n            if (coordSys.type === 'cartesian2d' && sampling) {\n                var baseAxis = coordSys.getBaseAxis();\n                var valueAxis = coordSys.getOtherAxis(baseAxis);\n                var extent = baseAxis.getExtent();\n                // Coordinste system has been resized\n                var size = extent[1] - extent[0];\n                var rate = Math.round(data.count() / size);\n                if (rate > 1) {\n                    var sampler;\n                    if (typeof sampling === 'string') {\n                        sampler = samplers[sampling];\n                    }\n                    else if (typeof sampling === 'function') {\n                        sampler = sampling;\n                    }\n                    if (sampler) {\n                        // Only support sample the first dim mapped from value axis.\n                        seriesModel.setData(data.downSample(\n                            data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler\n                        ));\n                    }\n                }\n            }\n        }\n    };\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Cartesian coordinate system\n * @module  echarts/coord/Cartesian\n *\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\n\nfunction dimAxisMapper(dim) {\n    return this._axes[dim];\n}\n\n/**\n * @alias module:echarts/coord/Cartesian\n * @constructor\n */\nvar Cartesian = function (name) {\n    this._axes = {};\n\n    this._dimList = [];\n\n    /**\n     * @type {string}\n     */\n    this.name = name || '';\n};\n\nCartesian.prototype = {\n\n    constructor: Cartesian,\n\n    type: 'cartesian',\n\n    /**\n     * Get axis\n     * @param  {number|string} dim\n     * @return {module:echarts/coord/Cartesian~Axis}\n     */\n    getAxis: function (dim) {\n        return this._axes[dim];\n    },\n\n    /**\n     * Get axes list\n     * @return {Array.<module:echarts/coord/Cartesian~Axis>}\n     */\n    getAxes: function () {\n        return zrUtil.map(this._dimList, dimAxisMapper, this);\n    },\n\n    /**\n     * Get axes list by given scale type\n     */\n    getAxesByScale: function (scaleType) {\n        scaleType = scaleType.toLowerCase();\n        return zrUtil.filter(\n            this.getAxes(),\n            function (axis) {\n                return axis.scale.type === scaleType;\n            }\n        );\n    },\n\n    /**\n     * Add axis\n     * @param {module:echarts/coord/Cartesian.Axis}\n     */\n    addAxis: function (axis) {\n        var dim = axis.dim;\n\n        this._axes[dim] = axis;\n\n        this._dimList.push(dim);\n    },\n\n    /**\n     * Convert data to coord in nd space\n     * @param {Array.<number>|Object.<string, number>} val\n     * @return {Array.<number>|Object.<string, number>}\n     */\n    dataToCoord: function (val) {\n        return this._dataCoordConvert(val, 'dataToCoord');\n    },\n\n    /**\n     * Convert coord in nd space to data\n     * @param  {Array.<number>|Object.<string, number>} val\n     * @return {Array.<number>|Object.<string, number>}\n     */\n    coordToData: function (val) {\n        return this._dataCoordConvert(val, 'coordToData');\n    },\n\n    _dataCoordConvert: function (input, method) {\n        var dimList = this._dimList;\n\n        var output = input instanceof Array ? [] : {};\n\n        for (var i = 0; i < dimList.length; i++) {\n            var dim = dimList[i];\n            var axis = this._axes[dim];\n\n            output[dim] = axis[method](input[dim]);\n        }\n\n        return output;\n    }\n};\n\nexport default Cartesian;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport Cartesian from './Cartesian';\n\nfunction Cartesian2D(name) {\n\n    Cartesian.call(this, name);\n}\n\nCartesian2D.prototype = {\n\n    constructor: Cartesian2D,\n\n    type: 'cartesian2d',\n\n    /**\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    dimensions: ['x', 'y'],\n\n    /**\n     * Base axis will be used on stacking.\n     *\n     * @return {module:echarts/coord/cartesian/Axis2D}\n     */\n    getBaseAxis: function () {\n        return this.getAxesByScale('ordinal')[0]\n            || this.getAxesByScale('time')[0]\n            || this.getAxis('x');\n    },\n\n    /**\n     * If contain point\n     * @param {Array.<number>} point\n     * @return {boolean}\n     */\n    containPoint: function (point) {\n        var axisX = this.getAxis('x');\n        var axisY = this.getAxis('y');\n        return axisX.contain(axisX.toLocalCoord(point[0]))\n            && axisY.contain(axisY.toLocalCoord(point[1]));\n    },\n\n    /**\n     * If contain data\n     * @param {Array.<number>} data\n     * @return {boolean}\n     */\n    containData: function (data) {\n        return this.getAxis('x').containData(data[0])\n            && this.getAxis('y').containData(data[1]);\n    },\n\n    /**\n     * @param {Array.<number>} data\n     * @param {Array.<number>} out\n     * @return {Array.<number>}\n     */\n    dataToPoint: function (data, reserved, out) {\n        var xAxis = this.getAxis('x');\n        var yAxis = this.getAxis('y');\n        out = out || [];\n        out[0] = xAxis.toGlobalCoord(xAxis.dataToCoord(data[0]));\n        out[1] = yAxis.toGlobalCoord(yAxis.dataToCoord(data[1]));\n        return out;\n    },\n\n    /**\n     * @param {Array.<number>} data\n     * @param {Array.<number>} out\n     * @return {Array.<number>}\n     */\n    clampData: function (data, out) {\n        var xScale = this.getAxis('x').scale;\n        var yScale = this.getAxis('y').scale;\n        var xAxisExtent = xScale.getExtent();\n        var yAxisExtent = yScale.getExtent();\n        var x = xScale.parse(data[0]);\n        var y = yScale.parse(data[1]);\n        out = out || [];\n        out[0] = Math.min(\n            Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x),\n            Math.max(xAxisExtent[0], xAxisExtent[1])\n        );\n        out[1] = Math.min(\n            Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y),\n            Math.max(yAxisExtent[0], yAxisExtent[1])\n        );\n\n        return out;\n    },\n\n    /**\n     * @param {Array.<number>} point\n     * @param {Array.<number>} out\n     * @return {Array.<number>}\n     */\n    pointToData: function (point, out) {\n        var xAxis = this.getAxis('x');\n        var yAxis = this.getAxis('y');\n        out = out || [];\n        out[0] = xAxis.coordToData(xAxis.toLocalCoord(point[0]));\n        out[1] = yAxis.coordToData(yAxis.toLocalCoord(point[1]));\n        return out;\n    },\n\n    /**\n     * Get other axis\n     * @param {module:echarts/coord/cartesian/Axis2D} axis\n     */\n    getOtherAxis: function (axis) {\n        return this.getAxis(axis.dim === 'x' ? 'y' : 'x');\n    },\n\n    /**\n     * Get rect area of cartesian.\n     * Area will have a contain function to determine if a point is in the coordinate system.\n     * @return {BoundingRect}\n     */\n    getArea: function () {\n        var xExtent = this.getAxis('x').getGlobalExtent();\n        var yExtent = this.getAxis('y').getGlobalExtent();\n        var x = Math.min(xExtent[0], xExtent[1]);\n        var y = Math.min(yExtent[0], yExtent[1]);\n        var width = Math.max(xExtent[0], xExtent[1]) - x;\n        var height = Math.max(yExtent[0], yExtent[1]) - y;\n\n        var rect = new BoundingRect(x, y, width, height);\n        return rect;\n    }\n\n};\n\nzrUtil.inherits(Cartesian2D, Cartesian);\n\nexport default Cartesian2D;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport Axis from '../Axis';\n\n/**\n * Extend axis 2d\n * @constructor module:echarts/coord/cartesian/Axis2D\n * @extends {module:echarts/coord/cartesian/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.<number>} coordExtent\n * @param {string} axisType\n * @param {string} position\n */\nvar Axis2D = function (dim, scale, coordExtent, axisType, position) {\n    Axis.call(this, dim, scale, coordExtent);\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = axisType || 'value';\n\n    /**\n     * Axis position\n     *  - 'top'\n     *  - 'bottom'\n     *  - 'left'\n     *  - 'right'\n     */\n    this.position = position || 'bottom';\n};\n\nAxis2D.prototype = {\n\n    constructor: Axis2D,\n\n    /**\n     * Index of axis, can be used as key\n     */\n    index: 0,\n\n    /**\n     * Implemented in <module:echarts/coord/cartesian/Grid>.\n     * @return {Array.<module:echarts/coord/cartesian/Axis2D>}\n     *         If not on zero of other axis, return null/undefined.\n     *         If no axes, return an empty array.\n     */\n    getAxesOnZeroOf: null,\n\n    /**\n     * Axis model\n     * @param {module:echarts/coord/cartesian/AxisModel}\n     */\n    model: null,\n\n    isHorizontal: function () {\n        var position = this.position;\n        return position === 'top' || position === 'bottom';\n    },\n\n    /**\n     * Each item cooresponds to this.getExtent(), which\n     * means globalExtent[0] may greater than globalExtent[1],\n     * unless `asc` is input.\n     *\n     * @param {boolean} [asc]\n     * @return {Array.<number>}\n     */\n    getGlobalExtent: function (asc) {\n        var ret = this.getExtent();\n        ret[0] = this.toGlobalCoord(ret[0]);\n        ret[1] = this.toGlobalCoord(ret[1]);\n        asc && ret[0] > ret[1] && ret.reverse();\n        return ret;\n    },\n\n    getOtherAxis: function () {\n        this.grid.getOtherAxis();\n    },\n\n    /**\n     * @override\n     */\n    pointToData: function (point, clamp) {\n        return this.coordToData(this.toLocalCoord(point[this.dim === 'x' ? 0 : 1]), clamp);\n    },\n\n    /**\n     * Transform global coord to local coord,\n     * i.e. var localCoord = axis.toLocalCoord(80);\n     * designate by module:echarts/coord/cartesian/Grid.\n     * @type {Function}\n     */\n    toLocalCoord: null,\n\n    /**\n     * Transform global coord to local coord,\n     * i.e. var globalCoord = axis.toLocalCoord(40);\n     * designate by module:echarts/coord/cartesian/Grid.\n     * @type {Function}\n     */\n    toGlobalCoord: null\n\n};\n\nzrUtil.inherits(Axis2D, Axis);\n\nexport default Axis2D;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar defaultOption = {\n    show: true,\n    zlevel: 0,\n    z: 0,\n    // Inverse the axis.\n    inverse: false,\n\n    // Axis name displayed.\n    name: '',\n    // 'start' | 'middle' | 'end'\n    nameLocation: 'end',\n    // By degree. By defualt auto rotate by nameLocation.\n    nameRotate: null,\n    nameTruncate: {\n        maxWidth: null,\n        ellipsis: '...',\n        placeholder: '.'\n    },\n    // Use global text style by default.\n    nameTextStyle: {},\n    // The gap between axisName and axisLine.\n    nameGap: 15,\n\n    // Default `false` to support tooltip.\n    silent: false,\n    // Default `false` to avoid legacy user event listener fail.\n    triggerEvent: false,\n\n    tooltip: {\n        show: false\n    },\n\n    axisPointer: {},\n\n    axisLine: {\n        show: true,\n        onZero: true,\n        onZeroAxisIndex: null,\n        lineStyle: {\n            color: '#333',\n            width: 1,\n            type: 'solid'\n        },\n        // The arrow at both ends the the axis.\n        symbol: ['none', 'none'],\n        symbolSize: [10, 15]\n    },\n    axisTick: {\n        show: true,\n        // Whether axisTick is inside the grid or outside the grid.\n        inside: false,\n        // The length of axisTick.\n        length: 5,\n        lineStyle: {\n            width: 1\n        }\n    },\n    axisLabel: {\n        show: true,\n        // Whether axisLabel is inside the grid or outside the grid.\n        inside: false,\n        rotate: 0,\n        // true | false | null/undefined (auto)\n        showMinLabel: null,\n        // true | false | null/undefined (auto)\n        showMaxLabel: null,\n        margin: 8,\n        // formatter: null,\n        fontSize: 12\n    },\n    splitLine: {\n        show: true,\n        lineStyle: {\n            color: ['#ccc'],\n            width: 1,\n            type: 'solid'\n        }\n    },\n    splitArea: {\n        show: false,\n        areaStyle: {\n            color: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)']\n        }\n    }\n};\n\nvar axisDefault = {};\n\naxisDefault.categoryAxis = zrUtil.merge({\n    // The gap at both ends of the axis. For categoryAxis, boolean.\n    boundaryGap: true,\n    // Set false to faster category collection.\n    // Only usefull in the case like: category is\n    // ['2012-01-01', '2012-01-02', ...], where the input\n    // data has been ensured not duplicate and is large data.\n    // null means \"auto\":\n    // if axis.data provided, do not deduplication,\n    // else do deduplication.\n    deduplication: null,\n    // splitArea: {\n        // show: false\n    // },\n    splitLine: {\n        show: false\n    },\n    axisTick: {\n        // If tick is align with label when boundaryGap is true\n        alignWithLabel: false,\n        interval: 'auto'\n    },\n    axisLabel: {\n        interval: 'auto'\n    }\n}, defaultOption);\n\naxisDefault.valueAxis = zrUtil.merge({\n    // The gap at both ends of the axis. For value axis, [GAP, GAP], where\n    // `GAP` can be an absolute pixel number (like `35`), or percent (like `'30%'`)\n    boundaryGap: [0, 0],\n\n    // TODO\n    // min/max: [30, datamin, 60] or [20, datamin] or [datamin, 60]\n\n    // Min value of the axis. can be:\n    // + a number\n    // + 'dataMin': use the min value in data.\n    // + null/undefined: auto decide min value (consider pretty look and boundaryGap).\n    // min: null,\n\n    // Max value of the axis. can be:\n    // + a number\n    // + 'dataMax': use the max value in data.\n    // + null/undefined: auto decide max value (consider pretty look and boundaryGap).\n    // max: null,\n\n    // Readonly prop, specifies start value of the range when using data zoom.\n    // rangeStart: null\n\n    // Readonly prop, specifies end value of the range when using data zoom.\n    // rangeEnd: null\n\n    // Optional value can be:\n    // + `false`: always include value 0.\n    // + `true`: the extent do not consider value 0.\n    // scale: false,\n\n    // AxisTick and axisLabel and splitLine are caculated based on splitNumber.\n    splitNumber: 5\n\n    // Interval specifies the span of the ticks is mandatorily.\n    // interval: null\n\n    // Specify min interval when auto calculate tick interval.\n    // minInterval: null\n\n    // Specify max interval when auto calculate tick interval.\n    // maxInterval: null\n\n}, defaultOption);\n\naxisDefault.timeAxis = zrUtil.defaults({\n    scale: true,\n    min: 'dataMin',\n    max: 'dataMax'\n}, axisDefault.valueAxis);\n\naxisDefault.logAxis = zrUtil.defaults({\n    scale: true,\n    logBase: 10\n}, axisDefault.valueAxis);\n\nexport default axisDefault;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport axisDefault from './axisDefault';\nimport ComponentModel from '../model/Component';\nimport {\n    getLayoutParams,\n    mergeLayoutParam\n} from '../util/layout';\nimport OrdinalMeta from '../data/OrdinalMeta';\n\n\n// FIXME axisType is fixed ?\nvar AXIS_TYPES = ['value', 'category', 'time', 'log'];\n\n/**\n * Generate sub axis model class\n * @param {string} axisName 'x' 'y' 'radius' 'angle' 'parallel'\n * @param {module:echarts/model/Component} BaseAxisModelClass\n * @param {Function} axisTypeDefaulter\n * @param {Object} [extraDefaultOption]\n */\nexport default function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraDefaultOption) {\n\n    zrUtil.each(AXIS_TYPES, function (axisType) {\n\n        BaseAxisModelClass.extend({\n\n            /**\n             * @readOnly\n             */\n            type: axisName + 'Axis.' + axisType,\n\n            mergeDefaultAndTheme: function (option, ecModel) {\n                var layoutMode = this.layoutMode;\n                var inputPositionParams = layoutMode\n                    ? getLayoutParams(option) : {};\n\n                var themeModel = ecModel.getTheme();\n                zrUtil.merge(option, themeModel.get(axisType + 'Axis'));\n                zrUtil.merge(option, this.getDefaultOption());\n\n                option.type = axisTypeDefaulter(axisName, option);\n\n                if (layoutMode) {\n                    mergeLayoutParam(option, inputPositionParams, layoutMode);\n                }\n            },\n\n            /**\n             * @override\n             */\n            optionUpdated: function () {\n                var thisOption = this.option;\n                if (thisOption.type === 'category') {\n                    this.__ordinalMeta = OrdinalMeta.createByAxisModel(this);\n                }\n            },\n\n            /**\n             * Should not be called before all of 'getInitailData' finished.\n             * Because categories are collected during initializing data.\n             */\n            getCategories: function (rawData) {\n                var option = this.option;\n                // FIXME\n                // warning if called before all of 'getInitailData' finished.\n                if (option.type === 'category') {\n                    if (rawData) {\n                        return option.data;\n                    }\n                    return this.__ordinalMeta.categories;\n                }\n            },\n\n            getOrdinalMeta: function () {\n                return this.__ordinalMeta;\n            },\n\n            defaultOption: zrUtil.mergeAll(\n                [\n                    {},\n                    axisDefault[axisType + 'Axis'],\n                    extraDefaultOption\n                ],\n                true\n            )\n        });\n    });\n\n    ComponentModel.registerSubTypeDefaulter(\n        axisName + 'Axis',\n        zrUtil.curry(axisTypeDefaulter, axisName)\n    );\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport ComponentModel from '../../model/Component';\nimport axisModelCreator from '../axisModelCreator';\nimport axisModelCommonMixin from '../axisModelCommonMixin';\n\nvar AxisModel = ComponentModel.extend({\n\n    type: 'cartesian2dAxis',\n\n    /**\n     * @type {module:echarts/coord/cartesian/Axis2D}\n     */\n    axis: null,\n\n    /**\n     * @override\n     */\n    init: function () {\n        AxisModel.superApply(this, 'init', arguments);\n        this.resetRange();\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function () {\n        AxisModel.superApply(this, 'mergeOption', arguments);\n        this.resetRange();\n    },\n\n    /**\n     * @override\n     */\n    restoreData: function () {\n        AxisModel.superApply(this, 'restoreData', arguments);\n        this.resetRange();\n    },\n\n    /**\n     * @override\n     * @return {module:echarts/model/Component}\n     */\n    getCoordSysModel: function () {\n        return this.ecModel.queryComponents({\n            mainType: 'grid',\n            index: this.option.gridIndex,\n            id: this.option.gridId\n        })[0];\n    }\n\n});\n\nfunction getAxisType(axisDim, option) {\n    // Default axis with data is category axis\n    return option.type || (option.data ? 'category' : 'value');\n}\n\nzrUtil.merge(AxisModel.prototype, axisModelCommonMixin);\n\nvar extraOption = {\n    // gridIndex: 0,\n    // gridId: '',\n\n    // Offset is for multiple axis on the same position\n    offset: 0\n};\n\naxisModelCreator('x', AxisModel, getAxisType, extraOption);\naxisModelCreator('y', AxisModel, getAxisType, extraOption);\n\nexport default AxisModel;","/*\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// Grid 是在有直角坐标系的时候必须要存在的\n// 所以这里也要被 Cartesian2D 依赖\n\nimport './AxisModel';\nimport ComponentModel from '../../model/Component';\n\nexport default ComponentModel.extend({\n\n    type: 'grid',\n\n    dependencies: ['xAxis', 'yAxis'],\n\n    layoutMode: 'box',\n\n    /**\n     * @type {module:echarts/coord/cartesian/Grid}\n     */\n    coordinateSystem: null,\n\n    defaultOption: {\n        show: false,\n        zlevel: 0,\n        z: 0,\n        left: '10%',\n        top: 60,\n        right: '10%',\n        bottom: 60,\n        // If grid size contain label\n        containLabel: false,\n        // width: {totalWidth} - left - right,\n        // height: {totalHeight} - top - bottom,\n        backgroundColor: 'rgba(0,0,0,0)',\n        borderWidth: 1,\n        borderColor: '#ccc'\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 * Grid is a region which contains at most 4 cartesian systems\n *\n * TODO Default cartesian\n */\n\nimport {__DEV__} from '../../config';\nimport {isObject, each, map, indexOf, retrieve} from 'zrender/src/core/util';\nimport {getLayoutRect} from '../../util/layout';\nimport {\n    createScaleByModel,\n    ifAxisCrossZero,\n    niceScaleExtent,\n    estimateLabelUnionRect\n} from '../../coord/axisHelper';\nimport Cartesian2D from './Cartesian2D';\nimport Axis2D from './Axis2D';\nimport CoordinateSystem from '../../CoordinateSystem';\nimport {getStackedDimension} from '../../data/helper/dataStackHelper';\n\n// Depends on GridModel, AxisModel, which performs preprocess.\nimport './GridModel';\n\n/**\n * Check if the axis is used in the specified grid\n * @inner\n */\nfunction isAxisUsedInTheGrid(axisModel, gridModel, ecModel) {\n    return axisModel.getCoordSysModel() === gridModel;\n}\n\nfunction Grid(gridModel, ecModel, api) {\n    /**\n     * @type {Object.<string, module:echarts/coord/cartesian/Cartesian2D>}\n     * @private\n     */\n    this._coordsMap = {};\n\n    /**\n     * @type {Array.<module:echarts/coord/cartesian/Cartesian>}\n     * @private\n     */\n    this._coordsList = [];\n\n    /**\n     * @type {Object.<string, Array.<module:echarts/coord/cartesian/Axis2D>>}\n     * @private\n     */\n    this._axesMap = {};\n\n    /**\n     * @type {Array.<module:echarts/coord/cartesian/Axis2D>}\n     * @private\n     */\n    this._axesList = [];\n\n    this._initCartesian(gridModel, ecModel, api);\n\n    this.model = gridModel;\n}\n\nvar gridProto = Grid.prototype;\n\ngridProto.type = 'grid';\n\ngridProto.axisPointerEnabled = true;\n\ngridProto.getRect = function () {\n    return this._rect;\n};\n\ngridProto.update = function (ecModel, api) {\n\n    var axesMap = this._axesMap;\n\n    this._updateScale(ecModel, this.model);\n\n    each(axesMap.x, function (xAxis) {\n        niceScaleExtent(xAxis.scale, xAxis.model);\n    });\n    each(axesMap.y, function (yAxis) {\n        niceScaleExtent(yAxis.scale, yAxis.model);\n    });\n\n    // Key: axisDim_axisIndex, value: boolean, whether onZero target.\n    var onZeroRecords = {};\n\n    each(axesMap.x, function (xAxis) {\n        fixAxisOnZero(axesMap, 'y', xAxis, onZeroRecords);\n    });\n    each(axesMap.y, function (yAxis) {\n        fixAxisOnZero(axesMap, 'x', yAxis, onZeroRecords);\n    });\n\n    // Resize again if containLabel is enabled\n    // FIXME It may cause getting wrong grid size in data processing stage\n    this.resize(this.model, api);\n};\n\nfunction fixAxisOnZero(axesMap, otherAxisDim, axis, onZeroRecords) {\n\n    axis.getAxesOnZeroOf = function () {\n        // TODO: onZero of multiple axes.\n        return otherAxisOnZeroOf ? [otherAxisOnZeroOf] : [];\n    };\n\n    // onZero can not be enabled in these two situations:\n    // 1. When any other axis is a category axis.\n    // 2. When no axis is cross 0 point.\n    var otherAxes = axesMap[otherAxisDim];\n\n    var otherAxisOnZeroOf;\n    var axisModel = axis.model;\n    var onZero = axisModel.get('axisLine.onZero');\n    var onZeroAxisIndex = axisModel.get('axisLine.onZeroAxisIndex');\n\n    if (!onZero) {\n        return;\n    }\n\n    // If target axis is specified.\n    if (onZeroAxisIndex != null) {\n        if (canOnZeroToAxis(otherAxes[onZeroAxisIndex])) {\n            otherAxisOnZeroOf = otherAxes[onZeroAxisIndex];\n        }\n    }\n    else {\n        // Find the first available other axis.\n        for (var idx in otherAxes) {\n            if (otherAxes.hasOwnProperty(idx)\n                && canOnZeroToAxis(otherAxes[idx])\n                // Consider that two Y axes on one value axis,\n                // if both onZero, the two Y axes overlap.\n                && !onZeroRecords[getOnZeroRecordKey(otherAxes[idx])]\n            ) {\n                otherAxisOnZeroOf = otherAxes[idx];\n                break;\n            }\n        }\n    }\n\n    if (otherAxisOnZeroOf) {\n        onZeroRecords[getOnZeroRecordKey(otherAxisOnZeroOf)] = true;\n    }\n\n    function getOnZeroRecordKey(axis) {\n        return axis.dim + '_' + axis.index;\n    }\n}\n\nfunction canOnZeroToAxis(axis) {\n    return axis && axis.type !== 'category' && axis.type !== 'time' && ifAxisCrossZero(axis);\n}\n\n/**\n * Resize the grid\n * @param {module:echarts/coord/cartesian/GridModel} gridModel\n * @param {module:echarts/ExtensionAPI} api\n */\ngridProto.resize = function (gridModel, api, ignoreContainLabel) {\n\n    var gridRect = getLayoutRect(\n        gridModel.getBoxLayoutParams(), {\n            width: api.getWidth(),\n            height: api.getHeight()\n        });\n\n    this._rect = gridRect;\n\n    var axesList = this._axesList;\n\n    adjustAxes();\n\n    // Minus label size\n    if (!ignoreContainLabel && gridModel.get('containLabel')) {\n        each(axesList, function (axis) {\n            if (!axis.model.get('axisLabel.inside')) {\n                var labelUnionRect = estimateLabelUnionRect(axis);\n                if (labelUnionRect) {\n                    var dim = axis.isHorizontal() ? 'height' : 'width';\n                    var margin = axis.model.get('axisLabel.margin');\n                    gridRect[dim] -= labelUnionRect[dim] + margin;\n                    if (axis.position === 'top') {\n                        gridRect.y += labelUnionRect.height + margin;\n                    }\n                    else if (axis.position === 'left') {\n                        gridRect.x += labelUnionRect.width + margin;\n                    }\n                }\n            }\n        });\n\n        adjustAxes();\n    }\n\n    function adjustAxes() {\n        each(axesList, function (axis) {\n            var isHorizontal = axis.isHorizontal();\n            var extent = isHorizontal ? [0, gridRect.width] : [0, gridRect.height];\n            var idx = axis.inverse ? 1 : 0;\n            axis.setExtent(extent[idx], extent[1 - idx]);\n            updateAxisTransform(axis, isHorizontal ? gridRect.x : gridRect.y);\n        });\n    }\n};\n\n/**\n * @param {string} axisType\n * @param {number} [axisIndex]\n */\ngridProto.getAxis = function (axisType, axisIndex) {\n    var axesMapOnDim = this._axesMap[axisType];\n    if (axesMapOnDim != null) {\n        if (axisIndex == null) {\n            // Find first axis\n            for (var name in axesMapOnDim) {\n                if (axesMapOnDim.hasOwnProperty(name)) {\n                    return axesMapOnDim[name];\n                }\n            }\n        }\n        return axesMapOnDim[axisIndex];\n    }\n};\n\n/**\n * @return {Array.<module:echarts/coord/Axis>}\n */\ngridProto.getAxes = function () {\n    return this._axesList.slice();\n};\n\n/**\n * Usage:\n *      grid.getCartesian(xAxisIndex, yAxisIndex);\n *      grid.getCartesian(xAxisIndex);\n *      grid.getCartesian(null, yAxisIndex);\n *      grid.getCartesian({xAxisIndex: ..., yAxisIndex: ...});\n *\n * @param {number|Object} [xAxisIndex]\n * @param {number} [yAxisIndex]\n */\ngridProto.getCartesian = function (xAxisIndex, yAxisIndex) {\n    if (xAxisIndex != null && yAxisIndex != null) {\n        var key = 'x' + xAxisIndex + 'y' + yAxisIndex;\n        return this._coordsMap[key];\n    }\n\n    if (isObject(xAxisIndex)) {\n        yAxisIndex = xAxisIndex.yAxisIndex;\n        xAxisIndex = xAxisIndex.xAxisIndex;\n    }\n    // When only xAxisIndex or yAxisIndex given, find its first cartesian.\n    for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) {\n        if (coordList[i].getAxis('x').index === xAxisIndex\n            || coordList[i].getAxis('y').index === yAxisIndex\n        ) {\n            return coordList[i];\n        }\n    }\n};\n\ngridProto.getCartesians = function () {\n    return this._coordsList.slice();\n};\n\n/**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\ngridProto.convertToPixel = function (ecModel, finder, value) {\n    var target = this._findConvertTarget(ecModel, finder);\n\n    return target.cartesian\n        ? target.cartesian.dataToPoint(value)\n        : target.axis\n        ? target.axis.toGlobalCoord(target.axis.dataToCoord(value))\n        : null;\n};\n\n/**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\ngridProto.convertFromPixel = function (ecModel, finder, value) {\n    var target = this._findConvertTarget(ecModel, finder);\n\n    return target.cartesian\n        ? target.cartesian.pointToData(value)\n        : target.axis\n        ? target.axis.coordToData(target.axis.toLocalCoord(value))\n        : null;\n};\n\n/**\n * @inner\n */\ngridProto._findConvertTarget = function (ecModel, finder) {\n    var seriesModel = finder.seriesModel;\n    var xAxisModel = finder.xAxisModel\n        || (seriesModel && seriesModel.getReferringComponents('xAxis')[0]);\n    var yAxisModel = finder.yAxisModel\n        || (seriesModel && seriesModel.getReferringComponents('yAxis')[0]);\n    var gridModel = finder.gridModel;\n    var coordsList = this._coordsList;\n    var cartesian;\n    var axis;\n\n    if (seriesModel) {\n        cartesian = seriesModel.coordinateSystem;\n        indexOf(coordsList, cartesian) < 0 && (cartesian = null);\n    }\n    else if (xAxisModel && yAxisModel) {\n        cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);\n    }\n    else if (xAxisModel) {\n        axis = this.getAxis('x', xAxisModel.componentIndex);\n    }\n    else if (yAxisModel) {\n        axis = this.getAxis('y', yAxisModel.componentIndex);\n    }\n    // Lowest priority.\n    else if (gridModel) {\n        var grid = gridModel.coordinateSystem;\n        if (grid === this) {\n            cartesian = this._coordsList[0];\n        }\n    }\n\n    return {cartesian: cartesian, axis: axis};\n};\n\n/**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\ngridProto.containPoint = function (point) {\n    var coord = this._coordsList[0];\n    if (coord) {\n        return coord.containPoint(point);\n    }\n};\n\n/**\n * Initialize cartesian coordinate systems\n * @private\n */\ngridProto._initCartesian = function (gridModel, ecModel, api) {\n    var axisPositionUsed = {\n        left: false,\n        right: false,\n        top: false,\n        bottom: false\n    };\n\n    var axesMap = {\n        x: {},\n        y: {}\n    };\n    var axesCount = {\n        x: 0,\n        y: 0\n    };\n\n    /// Create axis\n    ecModel.eachComponent('xAxis', createAxisCreator('x'), this);\n    ecModel.eachComponent('yAxis', createAxisCreator('y'), this);\n\n    if (!axesCount.x || !axesCount.y) {\n        // Roll back when there no either x or y axis\n        this._axesMap = {};\n        this._axesList = [];\n        return;\n    }\n\n    this._axesMap = axesMap;\n\n    /// Create cartesian2d\n    each(axesMap.x, function (xAxis, xAxisIndex) {\n        each(axesMap.y, function (yAxis, yAxisIndex) {\n            var key = 'x' + xAxisIndex + 'y' + yAxisIndex;\n            var cartesian = new Cartesian2D(key);\n\n            cartesian.grid = this;\n            cartesian.model = gridModel;\n\n            this._coordsMap[key] = cartesian;\n            this._coordsList.push(cartesian);\n\n            cartesian.addAxis(xAxis);\n            cartesian.addAxis(yAxis);\n        }, this);\n    }, this);\n\n    function createAxisCreator(axisType) {\n        return function (axisModel, idx) {\n            if (!isAxisUsedInTheGrid(axisModel, gridModel, ecModel)) {\n                return;\n            }\n\n            var axisPosition = axisModel.get('position');\n            if (axisType === 'x') {\n                // Fix position\n                if (axisPosition !== 'top' && axisPosition !== 'bottom') {\n                    // Default bottom of X\n                    axisPosition = axisPositionUsed.bottom ? 'top' : 'bottom';\n                }\n            }\n            else {\n                // Fix position\n                if (axisPosition !== 'left' && axisPosition !== 'right') {\n                    // Default left of Y\n                    axisPosition = axisPositionUsed.left ? 'right' : 'left';\n                }\n            }\n            axisPositionUsed[axisPosition] = true;\n\n            var axis = new Axis2D(\n                axisType, createScaleByModel(axisModel),\n                [0, 0],\n                axisModel.get('type'),\n                axisPosition\n            );\n\n            var isCategory = axis.type === 'category';\n            axis.onBand = isCategory && axisModel.get('boundaryGap');\n            axis.inverse = axisModel.get('inverse');\n\n            // Inject axis into axisModel\n            axisModel.axis = axis;\n\n            // Inject axisModel into axis\n            axis.model = axisModel;\n\n            // Inject grid info axis\n            axis.grid = this;\n\n            // Index of axis, can be used as key\n            axis.index = idx;\n\n            this._axesList.push(axis);\n\n            axesMap[axisType][idx] = axis;\n            axesCount[axisType]++;\n        };\n    }\n};\n\n/**\n * Update cartesian properties from series\n * @param  {module:echarts/model/Option} option\n * @private\n */\ngridProto._updateScale = function (ecModel, gridModel) {\n    // Reset scale\n    each(this._axesList, function (axis) {\n        axis.scale.setExtent(Infinity, -Infinity);\n    });\n    ecModel.eachSeries(function (seriesModel) {\n        if (isCartesian2D(seriesModel)) {\n            var axesModels = findAxesModels(seriesModel, ecModel);\n            var xAxisModel = axesModels[0];\n            var yAxisModel = axesModels[1];\n\n            if (!isAxisUsedInTheGrid(xAxisModel, gridModel, ecModel)\n                || !isAxisUsedInTheGrid(yAxisModel, gridModel, ecModel)\n            ) {\n                return;\n            }\n\n            var cartesian = this.getCartesian(\n                xAxisModel.componentIndex, yAxisModel.componentIndex\n            );\n            var data = seriesModel.getData();\n            var xAxis = cartesian.getAxis('x');\n            var yAxis = cartesian.getAxis('y');\n\n            if (data.type === 'list') {\n                unionExtent(data, xAxis, seriesModel);\n                unionExtent(data, yAxis, seriesModel);\n            }\n        }\n    }, this);\n\n    function unionExtent(data, axis, seriesModel) {\n        each(data.mapDimension(axis.dim, true), function (dim) {\n            axis.scale.unionExtentFromData(\n                // For example, the extent of the orginal dimension\n                // is [0.1, 0.5], the extent of the `stackResultDimension`\n                // is [7, 9], the final extent should not include [0.1, 0.5].\n                data, getStackedDimension(data, dim)\n            );\n        });\n    }\n};\n\n/**\n * @param {string} [dim] 'x' or 'y' or 'auto' or null/undefined\n * @return {Object} {baseAxes: [], otherAxes: []}\n */\ngridProto.getTooltipAxes = function (dim) {\n    var baseAxes = [];\n    var otherAxes = [];\n\n    each(this.getCartesians(), function (cartesian) {\n        var baseAxis = (dim != null && dim !== 'auto')\n            ? cartesian.getAxis(dim) : cartesian.getBaseAxis();\n        var otherAxis = cartesian.getOtherAxis(baseAxis);\n        indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis);\n        indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis);\n    });\n\n    return {baseAxes: baseAxes, otherAxes: otherAxes};\n};\n\n/**\n * @inner\n */\nfunction updateAxisTransform(axis, coordBase) {\n    var axisExtent = axis.getExtent();\n    var axisExtentSum = axisExtent[0] + axisExtent[1];\n\n    // Fast transform\n    axis.toGlobalCoord = axis.dim === 'x'\n        ? function (coord) {\n            return coord + coordBase;\n        }\n        : function (coord) {\n            return axisExtentSum - coord + coordBase;\n        };\n    axis.toLocalCoord = axis.dim === 'x'\n        ? function (coord) {\n            return coord - coordBase;\n        }\n        : function (coord) {\n            return axisExtentSum - coord + coordBase;\n        };\n}\n\nvar axesTypes = ['xAxis', 'yAxis'];\n/**\n * @inner\n */\nfunction findAxesModels(seriesModel, ecModel) {\n    return map(axesTypes, function (axisType) {\n        var axisModel = seriesModel.getReferringComponents(axisType)[0];\n\n        if (__DEV__) {\n            if (!axisModel) {\n                throw new Error(axisType + ' \"' + retrieve(\n                    seriesModel.get(axisType + 'Index'),\n                    seriesModel.get(axisType + 'Id'),\n                    0\n                ) + '\" not found');\n            }\n        }\n        return axisModel;\n    });\n}\n\n/**\n * @inner\n */\nfunction isCartesian2D(seriesModel) {\n    return seriesModel.get('coordinateSystem') === 'cartesian2d';\n}\n\nGrid.create = function (ecModel, api) {\n    var grids = [];\n    ecModel.eachComponent('grid', function (gridModel, idx) {\n        var grid = new Grid(gridModel, ecModel, api);\n        grid.name = 'grid_' + idx;\n        // dataSampling requires axis extent, so resize\n        // should be performed in create stage.\n        grid.resize(gridModel, api, true);\n\n        gridModel.coordinateSystem = grid;\n\n        grids.push(grid);\n    });\n\n    // Inject the coordinateSystems into seriesModel\n    ecModel.eachSeries(function (seriesModel) {\n        if (!isCartesian2D(seriesModel)) {\n            return;\n        }\n\n        var axesModels = findAxesModels(seriesModel, ecModel);\n        var xAxisModel = axesModels[0];\n        var yAxisModel = axesModels[1];\n\n        var gridModel = xAxisModel.getCoordSysModel();\n\n        if (__DEV__) {\n            if (!gridModel) {\n                throw new Error(\n                    'Grid \"' + retrieve(\n                        xAxisModel.get('gridIndex'),\n                        xAxisModel.get('gridId'),\n                        0\n                    ) + '\" not found'\n                );\n            }\n            if (xAxisModel.getCoordSysModel() !== yAxisModel.getCoordSysModel()) {\n                throw new Error('xAxis and yAxis must use the same grid');\n            }\n        }\n\n        var grid = gridModel.coordinateSystem;\n\n        seriesModel.coordinateSystem = grid.getCartesian(\n            xAxisModel.componentIndex, yAxisModel.componentIndex\n        );\n    });\n\n    return grids;\n};\n\n// For deciding which dimensions to use when creating list data\nGrid.dimensions = Grid.prototype.dimensions = Cartesian2D.prototype.dimensions;\n\nCoordinateSystem.register('cartesian2d', Grid);\n\nexport default Grid;\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\nimport {retrieve, defaults, extend, each} from 'zrender/src/core/util';\nimport * as formatUtil from '../../util/format';\nimport * as graphic from '../../util/graphic';\nimport Model from '../../model/Model';\nimport {isRadianAroundZero, remRadian} from '../../util/number';\nimport {createSymbol} from '../../util/symbol';\nimport * as matrixUtil from 'zrender/src/core/matrix';\nimport {applyTransform as v2ApplyTransform} from 'zrender/src/core/vector';\nimport {shouldShowAllLabels} from '../../coord/axisHelper';\n\n\nvar PI = Math.PI;\n\n/**\n * A final axis is translated and rotated from a \"standard axis\".\n * So opt.position and opt.rotation is required.\n *\n * A standard axis is and axis from [0, 0] to [0, axisExtent[1]],\n * for example: (0, 0) ------------> (0, 50)\n *\n * nameDirection or tickDirection or labelDirection is 1 means tick\n * or label is below the standard axis, whereas is -1 means above\n * the standard axis. labelOffset means offset between label and axis,\n * which is useful when 'onZero', where axisLabel is in the grid and\n * label in outside grid.\n *\n * Tips: like always,\n * positive rotation represents anticlockwise, and negative rotation\n * represents clockwise.\n * The direction of position coordinate is the same as the direction\n * of screen coordinate.\n *\n * Do not need to consider axis 'inverse', which is auto processed by\n * axis extent.\n *\n * @param {module:zrender/container/Group} group\n * @param {Object} axisModel\n * @param {Object} opt Standard axis parameters.\n * @param {Array.<number>} opt.position [x, y]\n * @param {number} opt.rotation by radian\n * @param {number} [opt.nameDirection=1] 1 or -1 Used when nameLocation is 'middle' or 'center'.\n * @param {number} [opt.tickDirection=1] 1 or -1\n * @param {number} [opt.labelDirection=1] 1 or -1\n * @param {number} [opt.labelOffset=0] Usefull when onZero.\n * @param {string} [opt.axisLabelShow] default get from axisModel.\n * @param {string} [opt.axisName] default get from axisModel.\n * @param {number} [opt.axisNameAvailableWidth]\n * @param {number} [opt.labelRotate] by degree, default get from axisModel.\n * @param {number} [opt.strokeContainThreshold] Default label interval when label\n * @param {number} [opt.nameTruncateMaxWidth]\n */\nvar AxisBuilder = function (axisModel, opt) {\n\n    /**\n     * @readOnly\n     */\n    this.opt = opt;\n\n    /**\n     * @readOnly\n     */\n    this.axisModel = axisModel;\n\n    // Default value\n    defaults(\n        opt,\n        {\n            labelOffset: 0,\n            nameDirection: 1,\n            tickDirection: 1,\n            labelDirection: 1,\n            silent: true\n        }\n    );\n\n    /**\n     * @readOnly\n     */\n    this.group = new graphic.Group();\n\n    // FIXME Not use a seperate text group?\n    var dumbGroup = new graphic.Group({\n        position: opt.position.slice(),\n        rotation: opt.rotation\n    });\n\n    // this.group.add(dumbGroup);\n    // this._dumbGroup = dumbGroup;\n\n    dumbGroup.updateTransform();\n    this._transform = dumbGroup.transform;\n\n    this._dumbGroup = dumbGroup;\n};\n\nAxisBuilder.prototype = {\n\n    constructor: AxisBuilder,\n\n    hasBuilder: function (name) {\n        return !!builders[name];\n    },\n\n    add: function (name) {\n        builders[name].call(this);\n    },\n\n    getGroup: function () {\n        return this.group;\n    }\n\n};\n\nvar builders = {\n\n    /**\n     * @private\n     */\n    axisLine: function () {\n        var opt = this.opt;\n        var axisModel = this.axisModel;\n\n        if (!axisModel.get('axisLine.show')) {\n            return;\n        }\n\n        var extent = this.axisModel.axis.getExtent();\n\n        var matrix = this._transform;\n        var pt1 = [extent[0], 0];\n        var pt2 = [extent[1], 0];\n        if (matrix) {\n            v2ApplyTransform(pt1, pt1, matrix);\n            v2ApplyTransform(pt2, pt2, matrix);\n        }\n\n        var lineStyle = extend(\n            {\n                lineCap: 'round'\n            },\n            axisModel.getModel('axisLine.lineStyle').getLineStyle()\n        );\n\n        this.group.add(new graphic.Line({\n            // Id for animation\n            anid: 'line',\n            subPixelOptimize: true,\n            shape: {\n                x1: pt1[0],\n                y1: pt1[1],\n                x2: pt2[0],\n                y2: pt2[1]\n            },\n            style: lineStyle,\n            strokeContainThreshold: opt.strokeContainThreshold || 5,\n            silent: true,\n            z2: 1\n        }));\n\n        var arrows = axisModel.get('axisLine.symbol');\n        var arrowSize = axisModel.get('axisLine.symbolSize');\n\n        var arrowOffset = axisModel.get('axisLine.symbolOffset') || 0;\n        if (typeof arrowOffset === 'number') {\n            arrowOffset = [arrowOffset, arrowOffset];\n        }\n\n        if (arrows != null) {\n            if (typeof arrows === 'string') {\n                // Use the same arrow for start and end point\n                arrows = [arrows, arrows];\n            }\n            if (typeof arrowSize === 'string'\n                || typeof arrowSize === 'number'\n            ) {\n                // Use the same size for width and height\n                arrowSize = [arrowSize, arrowSize];\n            }\n\n            var symbolWidth = arrowSize[0];\n            var symbolHeight = arrowSize[1];\n\n            each([{\n                rotate: opt.rotation + Math.PI / 2,\n                offset: arrowOffset[0],\n                r: 0\n            }, {\n                rotate: opt.rotation - Math.PI / 2,\n                offset: arrowOffset[1],\n                r: Math.sqrt((pt1[0] - pt2[0]) * (pt1[0] - pt2[0])\n                    + (pt1[1] - pt2[1]) * (pt1[1] - pt2[1]))\n            }], function (point, index) {\n                if (arrows[index] !== 'none' && arrows[index] != null) {\n                    var symbol = createSymbol(\n                        arrows[index],\n                        -symbolWidth / 2,\n                        -symbolHeight / 2,\n                        symbolWidth,\n                        symbolHeight,\n                        lineStyle.stroke,\n                        true\n                    );\n\n                    // Calculate arrow position with offset\n                    var r = point.r + point.offset;\n                    var pos = [\n                        pt1[0] + r * Math.cos(opt.rotation),\n                        pt1[1] - r * Math.sin(opt.rotation)\n                    ];\n\n                    symbol.attr({\n                        rotation: point.rotate,\n                        position: pos,\n                        silent: true,\n                        z2: 11\n                    });\n                    this.group.add(symbol);\n                }\n            }, this);\n        }\n    },\n\n    /**\n     * @private\n     */\n    axisTickLabel: function () {\n        var axisModel = this.axisModel;\n        var opt = this.opt;\n\n        var tickEls = buildAxisTick(this, axisModel, opt);\n        var labelEls = buildAxisLabel(this, axisModel, opt);\n\n        fixMinMaxLabelShow(axisModel, labelEls, tickEls);\n    },\n\n    /**\n     * @private\n     */\n    axisName: function () {\n        var opt = this.opt;\n        var axisModel = this.axisModel;\n        var name = retrieve(opt.axisName, axisModel.get('name'));\n\n        if (!name) {\n            return;\n        }\n\n        var nameLocation = axisModel.get('nameLocation');\n        var nameDirection = opt.nameDirection;\n        var textStyleModel = axisModel.getModel('nameTextStyle');\n        var gap = axisModel.get('nameGap') || 0;\n\n        var extent = this.axisModel.axis.getExtent();\n        var gapSignal = extent[0] > extent[1] ? -1 : 1;\n        var pos = [\n            nameLocation === 'start'\n                ? extent[0] - gapSignal * gap\n                : nameLocation === 'end'\n                ? extent[1] + gapSignal * gap\n                : (extent[0] + extent[1]) / 2, // 'middle'\n            // Reuse labelOffset.\n            isNameLocationCenter(nameLocation) ? opt.labelOffset + nameDirection * gap : 0\n        ];\n\n        var labelLayout;\n\n        var nameRotation = axisModel.get('nameRotate');\n        if (nameRotation != null) {\n            nameRotation = nameRotation * PI / 180; // To radian.\n        }\n\n        var axisNameAvailableWidth;\n\n        if (isNameLocationCenter(nameLocation)) {\n            labelLayout = innerTextLayout(\n                opt.rotation,\n                nameRotation != null ? nameRotation : opt.rotation, // Adapt to axis.\n                nameDirection\n            );\n        }\n        else {\n            labelLayout = endTextLayout(\n                opt, nameLocation, nameRotation || 0, extent\n            );\n\n            axisNameAvailableWidth = opt.axisNameAvailableWidth;\n            if (axisNameAvailableWidth != null) {\n                axisNameAvailableWidth = Math.abs(\n                    axisNameAvailableWidth / Math.sin(labelLayout.rotation)\n                );\n                !isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null);\n            }\n        }\n\n        var textFont = textStyleModel.getFont();\n\n        var truncateOpt = axisModel.get('nameTruncate', true) || {};\n        var ellipsis = truncateOpt.ellipsis;\n        var maxWidth = retrieve(\n            opt.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth\n        );\n        // FIXME\n        // truncate rich text? (consider performance)\n        var truncatedText = (ellipsis != null && maxWidth != null)\n            ? formatUtil.truncateText(\n                name, maxWidth, textFont, ellipsis,\n                {minChar: 2, placeholder: truncateOpt.placeholder}\n            )\n            : name;\n\n        var tooltipOpt = axisModel.get('tooltip', true);\n\n        var mainType = axisModel.mainType;\n        var formatterParams = {\n            componentType: mainType,\n            name: name,\n            $vars: ['name']\n        };\n        formatterParams[mainType + 'Index'] = axisModel.componentIndex;\n\n        var textEl = new graphic.Text({\n            // Id for animation\n            anid: 'name',\n\n            __fullText: name,\n            __truncatedText: truncatedText,\n\n            position: pos,\n            rotation: labelLayout.rotation,\n            silent: isLabelSilent(axisModel),\n            z2: 1,\n            tooltip: (tooltipOpt && tooltipOpt.show)\n                ? extend({\n                    content: name,\n                    formatter: function () {\n                        return name;\n                    },\n                    formatterParams: formatterParams\n                }, tooltipOpt)\n                : null\n        });\n\n        graphic.setTextStyle(textEl.style, textStyleModel, {\n            text: truncatedText,\n            textFont: textFont,\n            textFill: textStyleModel.getTextColor()\n                || axisModel.get('axisLine.lineStyle.color'),\n            textAlign: textStyleModel.get('align')\n                || labelLayout.textAlign,\n            textVerticalAlign: textStyleModel.get('verticalAlign')\n                || labelLayout.textVerticalAlign\n        });\n\n        if (axisModel.get('triggerEvent')) {\n            textEl.eventData = makeAxisEventDataBase(axisModel);\n            textEl.eventData.targetType = 'axisName';\n            textEl.eventData.name = name;\n        }\n\n        // FIXME\n        this._dumbGroup.add(textEl);\n        textEl.updateTransform();\n\n        this.group.add(textEl);\n\n        textEl.decomposeTransform();\n    }\n\n};\n\nvar makeAxisEventDataBase = AxisBuilder.makeAxisEventDataBase = function (axisModel) {\n    var eventData = {\n        componentType: axisModel.mainType,\n        componentIndex: axisModel.componentIndex\n    };\n    eventData[axisModel.mainType + 'Index'] = axisModel.componentIndex;\n    return eventData;\n};\n\n/**\n * @public\n * @static\n * @param {Object} opt\n * @param {number} axisRotation in radian\n * @param {number} textRotation in radian\n * @param {number} direction\n * @return {Object} {\n *  rotation, // according to axis\n *  textAlign,\n *  textVerticalAlign\n * }\n */\nvar innerTextLayout = AxisBuilder.innerTextLayout = function (axisRotation, textRotation, direction) {\n    var rotationDiff = remRadian(textRotation - axisRotation);\n    var textAlign;\n    var textVerticalAlign;\n\n    if (isRadianAroundZero(rotationDiff)) { // Label is parallel with axis line.\n        textVerticalAlign = direction > 0 ? 'top' : 'bottom';\n        textAlign = 'center';\n    }\n    else if (isRadianAroundZero(rotationDiff - PI)) { // Label is inverse parallel with axis line.\n        textVerticalAlign = direction > 0 ? 'bottom' : 'top';\n        textAlign = 'center';\n    }\n    else {\n        textVerticalAlign = 'middle';\n\n        if (rotationDiff > 0 && rotationDiff < PI) {\n            textAlign = direction > 0 ? 'right' : 'left';\n        }\n        else {\n            textAlign = direction > 0 ? 'left' : 'right';\n        }\n    }\n\n    return {\n        rotation: rotationDiff,\n        textAlign: textAlign,\n        textVerticalAlign: textVerticalAlign\n    };\n};\n\nfunction endTextLayout(opt, textPosition, textRotate, extent) {\n    var rotationDiff = remRadian(textRotate - opt.rotation);\n    var textAlign;\n    var textVerticalAlign;\n    var inverse = extent[0] > extent[1];\n    var onLeft = (textPosition === 'start' && !inverse)\n        || (textPosition !== 'start' && inverse);\n\n    if (isRadianAroundZero(rotationDiff - PI / 2)) {\n        textVerticalAlign = onLeft ? 'bottom' : 'top';\n        textAlign = 'center';\n    }\n    else if (isRadianAroundZero(rotationDiff - PI * 1.5)) {\n        textVerticalAlign = onLeft ? 'top' : 'bottom';\n        textAlign = 'center';\n    }\n    else {\n        textVerticalAlign = 'middle';\n        if (rotationDiff < PI * 1.5 && rotationDiff > PI / 2) {\n            textAlign = onLeft ? 'left' : 'right';\n        }\n        else {\n            textAlign = onLeft ? 'right' : 'left';\n        }\n    }\n\n    return {\n        rotation: rotationDiff,\n        textAlign: textAlign,\n        textVerticalAlign: textVerticalAlign\n    };\n}\n\nvar isLabelSilent = AxisBuilder.isLabelSilent = function (axisModel) {\n    var tooltipOpt = axisModel.get('tooltip');\n    return axisModel.get('silent')\n        // Consider mouse cursor, add these restrictions.\n        || !(\n            axisModel.get('triggerEvent') || (tooltipOpt && tooltipOpt.show)\n        );\n};\n\nfunction fixMinMaxLabelShow(axisModel, labelEls, tickEls) {\n    if (shouldShowAllLabels(axisModel.axis)) {\n        return;\n    }\n\n    // If min or max are user set, we need to check\n    // If the tick on min(max) are overlap on their neighbour tick\n    // If they are overlapped, we need to hide the min(max) tick label\n    var showMinLabel = axisModel.get('axisLabel.showMinLabel');\n    var showMaxLabel = axisModel.get('axisLabel.showMaxLabel');\n\n    // FIXME\n    // Have not consider onBand yet, where tick els is more than label els.\n\n    labelEls = labelEls || [];\n    tickEls = tickEls || [];\n\n    var firstLabel = labelEls[0];\n    var nextLabel = labelEls[1];\n    var lastLabel = labelEls[labelEls.length - 1];\n    var prevLabel = labelEls[labelEls.length - 2];\n\n    var firstTick = tickEls[0];\n    var nextTick = tickEls[1];\n    var lastTick = tickEls[tickEls.length - 1];\n    var prevTick = tickEls[tickEls.length - 2];\n\n    if (showMinLabel === false) {\n        ignoreEl(firstLabel);\n        ignoreEl(firstTick);\n    }\n    else if (isTwoLabelOverlapped(firstLabel, nextLabel)) {\n        if (showMinLabel) {\n            ignoreEl(nextLabel);\n            ignoreEl(nextTick);\n        }\n        else {\n            ignoreEl(firstLabel);\n            ignoreEl(firstTick);\n        }\n    }\n\n    if (showMaxLabel === false) {\n        ignoreEl(lastLabel);\n        ignoreEl(lastTick);\n    }\n    else if (isTwoLabelOverlapped(prevLabel, lastLabel)) {\n        if (showMaxLabel) {\n            ignoreEl(prevLabel);\n            ignoreEl(prevTick);\n        }\n        else {\n            ignoreEl(lastLabel);\n            ignoreEl(lastTick);\n        }\n    }\n}\n\nfunction ignoreEl(el) {\n    el && (el.ignore = true);\n}\n\nfunction isTwoLabelOverlapped(current, next, labelLayout) {\n    // current and next has the same rotation.\n    var firstRect = current && current.getBoundingRect().clone();\n    var nextRect = next && next.getBoundingRect().clone();\n\n    if (!firstRect || !nextRect) {\n        return;\n    }\n\n    // When checking intersect of two rotated labels, we use mRotationBack\n    // to avoid that boundingRect is enlarge when using `boundingRect.applyTransform`.\n    var mRotationBack = matrixUtil.identity([]);\n    matrixUtil.rotate(mRotationBack, mRotationBack, -current.rotation);\n\n    firstRect.applyTransform(matrixUtil.mul([], mRotationBack, current.getLocalTransform()));\n    nextRect.applyTransform(matrixUtil.mul([], mRotationBack, next.getLocalTransform()));\n\n    return firstRect.intersect(nextRect);\n}\n\nfunction isNameLocationCenter(nameLocation) {\n    return nameLocation === 'middle' || nameLocation === 'center';\n}\n\nfunction buildAxisTick(axisBuilder, axisModel, opt) {\n    var axis = axisModel.axis;\n\n    if (!axisModel.get('axisTick.show') || axis.scale.isBlank()) {\n        return;\n    }\n\n    var tickModel = axisModel.getModel('axisTick');\n\n    var lineStyleModel = tickModel.getModel('lineStyle');\n    var tickLen = tickModel.get('length');\n\n    var ticksCoords = axis.getTicksCoords();\n\n    var pt1 = [];\n    var pt2 = [];\n    var matrix = axisBuilder._transform;\n\n    var tickEls = [];\n\n    for (var i = 0; i < ticksCoords.length; i++) {\n        var tickCoord = ticksCoords[i].coord;\n\n        pt1[0] = tickCoord;\n        pt1[1] = 0;\n        pt2[0] = tickCoord;\n        pt2[1] = opt.tickDirection * tickLen;\n\n        if (matrix) {\n            v2ApplyTransform(pt1, pt1, matrix);\n            v2ApplyTransform(pt2, pt2, matrix);\n        }\n        // Tick line, Not use group transform to have better line draw\n        var tickEl = new graphic.Line({\n            // Id for animation\n            anid: 'tick_' + ticksCoords[i].tickValue,\n            subPixelOptimize: true,\n            shape: {\n                x1: pt1[0],\n                y1: pt1[1],\n                x2: pt2[0],\n                y2: pt2[1]\n            },\n            style: defaults(\n                lineStyleModel.getLineStyle(),\n                {\n                    stroke: axisModel.get('axisLine.lineStyle.color')\n                }\n            ),\n            z2: 2,\n            silent: true\n        });\n        axisBuilder.group.add(tickEl);\n        tickEls.push(tickEl);\n    }\n\n    return tickEls;\n}\n\nfunction buildAxisLabel(axisBuilder, axisModel, opt) {\n    var axis = axisModel.axis;\n    var show = retrieve(opt.axisLabelShow, axisModel.get('axisLabel.show'));\n\n    if (!show || axis.scale.isBlank()) {\n        return;\n    }\n\n    var labelModel = axisModel.getModel('axisLabel');\n    var labelMargin = labelModel.get('margin');\n    var labels = axis.getViewLabels();\n\n    // Special label rotate.\n    var labelRotation = (\n        retrieve(opt.labelRotate, labelModel.get('rotate')) || 0\n    ) * PI / 180;\n\n    var labelLayout = innerTextLayout(opt.rotation, labelRotation, opt.labelDirection);\n    var rawCategoryData = axisModel.getCategories && axisModel.getCategories(true);\n\n    var labelEls = [];\n    var silent = isLabelSilent(axisModel);\n    var triggerEvent = axisModel.get('triggerEvent');\n\n    each(labels, function (labelItem, index) {\n        var tickValue = labelItem.tickValue;\n        var formattedLabel = labelItem.formattedLabel;\n        var rawLabel = labelItem.rawLabel;\n\n        var itemLabelModel = labelModel;\n        if (rawCategoryData && rawCategoryData[tickValue] && rawCategoryData[tickValue].textStyle) {\n            itemLabelModel = new Model(\n                rawCategoryData[tickValue].textStyle, labelModel, axisModel.ecModel\n            );\n        }\n\n        var textColor = itemLabelModel.getTextColor()\n            || axisModel.get('axisLine.lineStyle.color');\n\n        var tickCoord = axis.dataToCoord(tickValue);\n        var pos = [\n            tickCoord,\n            opt.labelOffset + opt.labelDirection * labelMargin\n        ];\n\n        var textEl = new graphic.Text({\n            // Id for animation\n            anid: 'label_' + tickValue,\n            position: pos,\n            rotation: labelLayout.rotation,\n            silent: silent,\n            z2: 10\n        });\n\n        graphic.setTextStyle(textEl.style, itemLabelModel, {\n            text: formattedLabel,\n            textAlign: itemLabelModel.getShallow('align', true)\n                || labelLayout.textAlign,\n            textVerticalAlign: itemLabelModel.getShallow('verticalAlign', true)\n                || itemLabelModel.getShallow('baseline', true)\n                || labelLayout.textVerticalAlign,\n            textFill: typeof textColor === 'function'\n                ? textColor(\n                    // (1) In category axis with data zoom, tick is not the original\n                    // index of axis.data. So tick should not be exposed to user\n                    // in category axis.\n                    // (2) Compatible with previous version, which always use formatted label as\n                    // input. But in interval scale the formatted label is like '223,445', which\n                    // maked user repalce ','. So we modify it to return original val but remain\n                    // it as 'string' to avoid error in replacing.\n                    axis.type === 'category'\n                        ? rawLabel\n                        : axis.type === 'value'\n                        ? tickValue + ''\n                        : tickValue,\n                    index\n                )\n                : textColor\n        });\n\n        // Pack data for mouse event\n        if (triggerEvent) {\n            textEl.eventData = makeAxisEventDataBase(axisModel);\n            textEl.eventData.targetType = 'axisLabel';\n            textEl.eventData.value = rawLabel;\n        }\n\n        // FIXME\n        axisBuilder._dumbGroup.add(textEl);\n        textEl.updateTransform();\n\n        labelEls.push(textEl);\n        axisBuilder.group.add(textEl);\n\n        textEl.decomposeTransform();\n\n    });\n\n    return labelEls;\n}\n\n\nexport default AxisBuilder;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport Model from '../../model/Model';\n\nvar each = zrUtil.each;\nvar curry = zrUtil.curry;\n\n// Build axisPointerModel, mergin tooltip.axisPointer model for each axis.\n// allAxesInfo should be updated when setOption performed.\nexport function collect(ecModel, api) {\n    var result = {\n        /**\n         * key: makeKey(axis.model)\n         * value: {\n         *      axis,\n         *      coordSys,\n         *      axisPointerModel,\n         *      triggerTooltip,\n         *      involveSeries,\n         *      snap,\n         *      seriesModels,\n         *      seriesDataCount\n         * }\n         */\n        axesInfo: {},\n        seriesInvolved: false,\n        /**\n         * key: makeKey(coordSys.model)\n         * value: Object: key makeKey(axis.model), value: axisInfo\n         */\n        coordSysAxesInfo: {},\n        coordSysMap: {}\n    };\n\n    collectAxesInfo(result, ecModel, api);\n\n    // Check seriesInvolved for performance, in case too many series in some chart.\n    result.seriesInvolved && collectSeriesInfo(result, ecModel);\n\n    return result;\n}\n\nfunction collectAxesInfo(result, ecModel, api) {\n    var globalTooltipModel = ecModel.getComponent('tooltip');\n    var globalAxisPointerModel = ecModel.getComponent('axisPointer');\n    // links can only be set on global.\n    var linksOption = globalAxisPointerModel.get('link', true) || [];\n    var linkGroups = [];\n\n    // Collect axes info.\n    each(api.getCoordinateSystems(), function (coordSys) {\n        // Some coordinate system do not support axes, like geo.\n        if (!coordSys.axisPointerEnabled) {\n            return;\n        }\n\n        var coordSysKey = makeKey(coordSys.model);\n        var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {};\n        result.coordSysMap[coordSysKey] = coordSys;\n\n        // Set tooltip (like 'cross') is a convienent way to show axisPointer\n        // for user. So we enable seting tooltip on coordSys model.\n        var coordSysModel = coordSys.model;\n        var baseTooltipModel = coordSysModel.getModel('tooltip', globalTooltipModel);\n\n        each(coordSys.getAxes(), curry(saveTooltipAxisInfo, false, null));\n\n        // If axis tooltip used, choose tooltip axis for each coordSys.\n        // Notice this case: coordSys is `grid` but not `cartesian2D` here.\n        if (coordSys.getTooltipAxes\n            && globalTooltipModel\n            // If tooltip.showContent is set as false, tooltip will not\n            // show but axisPointer will show as normal.\n            && baseTooltipModel.get('show')\n        ) {\n            // Compatible with previous logic. But series.tooltip.trigger: 'axis'\n            // or series.data[n].tooltip.trigger: 'axis' are not support any more.\n            var triggerAxis = baseTooltipModel.get('trigger') === 'axis';\n            var cross = baseTooltipModel.get('axisPointer.type') === 'cross';\n            var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get('axisPointer.axis'));\n            if (triggerAxis || cross) {\n                each(tooltipAxes.baseAxes, curry(\n                    saveTooltipAxisInfo, cross ? 'cross' : true, triggerAxis\n                ));\n            }\n            if (cross) {\n                each(tooltipAxes.otherAxes, curry(saveTooltipAxisInfo, 'cross', false));\n            }\n        }\n\n        // fromTooltip: true | false | 'cross'\n        // triggerTooltip: true | false | null\n        function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) {\n            var axisPointerModel = axis.model.getModel('axisPointer', globalAxisPointerModel);\n\n            var axisPointerShow = axisPointerModel.get('show');\n            if (!axisPointerShow || (\n                axisPointerShow === 'auto'\n                && !fromTooltip\n                && !isHandleTrigger(axisPointerModel)\n            )) {\n                return;\n            }\n\n            if (triggerTooltip == null) {\n                triggerTooltip = axisPointerModel.get('triggerTooltip');\n            }\n\n            axisPointerModel = fromTooltip\n                ? makeAxisPointerModel(\n                    axis, baseTooltipModel, globalAxisPointerModel, ecModel,\n                    fromTooltip, triggerTooltip\n                )\n                : axisPointerModel;\n\n            var snap = axisPointerModel.get('snap');\n            var key = makeKey(axis.model);\n            var involveSeries = triggerTooltip || snap || axis.type === 'category';\n\n            // If result.axesInfo[key] exist, override it (tooltip has higher priority).\n            var axisInfo = result.axesInfo[key] = {\n                key: key,\n                axis: axis,\n                coordSys: coordSys,\n                axisPointerModel: axisPointerModel,\n                triggerTooltip: triggerTooltip,\n                involveSeries: involveSeries,\n                snap: snap,\n                useHandle: isHandleTrigger(axisPointerModel),\n                seriesModels: []\n            };\n            axesInfoInCoordSys[key] = axisInfo;\n            result.seriesInvolved |= involveSeries;\n\n            var groupIndex = getLinkGroupIndex(linksOption, axis);\n            if (groupIndex != null) {\n                var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = {axesInfo: {}});\n                linkGroup.axesInfo[key] = axisInfo;\n                linkGroup.mapper = linksOption[groupIndex].mapper;\n                axisInfo.linkGroup = linkGroup;\n            }\n        }\n    });\n}\n\nfunction makeAxisPointerModel(\n    axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip\n) {\n    var tooltipAxisPointerModel = baseTooltipModel.getModel('axisPointer');\n    var volatileOption = {};\n\n    each(\n        [\n            'type', 'snap', 'lineStyle', 'shadowStyle', 'label',\n            'animation', 'animationDurationUpdate', 'animationEasingUpdate', 'z'\n        ],\n        function (field) {\n            volatileOption[field] = zrUtil.clone(tooltipAxisPointerModel.get(field));\n        }\n    );\n\n    // category axis do not auto snap, otherwise some tick that do not\n    // has value can not be hovered. value/time/log axis default snap if\n    // triggered from tooltip and trigger tooltip.\n    volatileOption.snap = axis.type !== 'category' && !!triggerTooltip;\n\n    // Compatibel with previous behavior, tooltip axis do not show label by default.\n    // Only these properties can be overrided from tooltip to axisPointer.\n    if (tooltipAxisPointerModel.get('type') === 'cross') {\n        volatileOption.type = 'line';\n    }\n    var labelOption = volatileOption.label || (volatileOption.label = {});\n    // Follow the convention, do not show label when triggered by tooltip by default.\n    labelOption.show == null && (labelOption.show = false);\n\n    if (fromTooltip === 'cross') {\n        // When 'cross', both axes show labels.\n        var tooltipAxisPointerLabelShow = tooltipAxisPointerModel.get('label.show');\n        labelOption.show = tooltipAxisPointerLabelShow != null ? tooltipAxisPointerLabelShow : true;\n        // If triggerTooltip, this is a base axis, which should better not use cross style\n        // (cross style is dashed by default)\n        if (!triggerTooltip) {\n            var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get('crossStyle');\n            crossStyle && zrUtil.defaults(labelOption, crossStyle.textStyle);\n        }\n    }\n\n    return axis.model.getModel(\n        'axisPointer',\n        new Model(volatileOption, globalAxisPointerModel, ecModel)\n    );\n}\n\nfunction collectSeriesInfo(result, ecModel) {\n    // Prepare data for axis trigger\n    ecModel.eachSeries(function (seriesModel) {\n\n        // Notice this case: this coordSys is `cartesian2D` but not `grid`.\n        var coordSys = seriesModel.coordinateSystem;\n        var seriesTooltipTrigger = seriesModel.get('tooltip.trigger', true);\n        var seriesTooltipShow = seriesModel.get('tooltip.show', true);\n        if (!coordSys\n            || seriesTooltipTrigger === 'none'\n            || seriesTooltipTrigger === false\n            || seriesTooltipTrigger === 'item'\n            || seriesTooltipShow === false\n            || seriesModel.get('axisPointer.show', true) === false\n        ) {\n            return;\n        }\n\n        each(result.coordSysAxesInfo[makeKey(coordSys.model)], function (axisInfo) {\n            var axis = axisInfo.axis;\n            if (coordSys.getAxis(axis.dim) === axis) {\n                axisInfo.seriesModels.push(seriesModel);\n                axisInfo.seriesDataCount == null && (axisInfo.seriesDataCount = 0);\n                axisInfo.seriesDataCount += seriesModel.getData().count();\n            }\n        });\n\n    }, this);\n}\n\n/**\n * For example:\n * {\n *     axisPointer: {\n *         links: [{\n *             xAxisIndex: [2, 4],\n *             yAxisIndex: 'all'\n *         }, {\n *             xAxisId: ['a5', 'a7'],\n *             xAxisName: 'xxx'\n *         }]\n *     }\n * }\n */\nfunction getLinkGroupIndex(linksOption, axis) {\n    var axisModel = axis.model;\n    var dim = axis.dim;\n    for (var i = 0; i < linksOption.length; i++) {\n        var linkOption = linksOption[i] || {};\n        if (checkPropInLink(linkOption[dim + 'AxisId'], axisModel.id)\n            || checkPropInLink(linkOption[dim + 'AxisIndex'], axisModel.componentIndex)\n            || checkPropInLink(linkOption[dim + 'AxisName'], axisModel.name)\n        ) {\n            return i;\n        }\n    }\n}\n\nfunction checkPropInLink(linkPropValue, axisPropValue) {\n    return linkPropValue === 'all'\n        || (zrUtil.isArray(linkPropValue) && zrUtil.indexOf(linkPropValue, axisPropValue) >= 0)\n        || linkPropValue === axisPropValue;\n}\n\nexport function fixValue(axisModel) {\n    var axisInfo = getAxisInfo(axisModel);\n    if (!axisInfo) {\n        return;\n    }\n\n    var axisPointerModel = axisInfo.axisPointerModel;\n    var scale = axisInfo.axis.scale;\n    var option = axisPointerModel.option;\n    var status = axisPointerModel.get('status');\n    var value = axisPointerModel.get('value');\n\n    // Parse init value for category and time axis.\n    if (value != null) {\n        value = scale.parse(value);\n    }\n\n    var useHandle = isHandleTrigger(axisPointerModel);\n    // If `handle` used, `axisPointer` will always be displayed, so value\n    // and status should be initialized.\n    if (status == null) {\n        option.status = useHandle ? 'show' : 'hide';\n    }\n\n    var extent = scale.getExtent().slice();\n    extent[0] > extent[1] && extent.reverse();\n\n    if (// Pick a value on axis when initializing.\n        value == null\n        // If both `handle` and `dataZoom` are used, value may be out of axis extent,\n        // where we should re-pick a value to keep `handle` displaying normally.\n        || value > extent[1]\n    ) {\n        // Make handle displayed on the end of the axis when init, which looks better.\n        value = extent[1];\n    }\n    if (value < extent[0]) {\n        value = extent[0];\n    }\n\n    option.value = value;\n\n    if (useHandle) {\n        option.status = axisInfo.axis.scale.isBlank() ? 'hide' : 'show';\n    }\n}\n\nexport function getAxisInfo(axisModel) {\n    var coordSysAxesInfo = (axisModel.ecModel.getComponent('axisPointer') || {}).coordSysAxesInfo;\n    return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)];\n}\n\nexport function getAxisPointerModel(axisModel) {\n    var axisInfo = getAxisInfo(axisModel);\n    return axisInfo && axisInfo.axisPointerModel;\n}\n\nfunction isHandleTrigger(axisPointerModel) {\n    return !!axisPointerModel.get('handle.show');\n}\n\n/**\n * @param {module:echarts/model/Model} model\n * @return {string} unique key\n */\nexport function makeKey(model) {\n    return model.type + '||' + model.id;\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\nimport {__DEV__} from '../../config';\nimport * as echarts from '../../echarts';\nimport * as axisPointerModelHelper from '../axisPointer/modelHelper';\n\n/**\n * Base class of AxisView.\n */\nvar AxisView = echarts.extendComponentView({\n\n    type: 'axis',\n\n    /**\n     * @private\n     */\n    _axisPointer: null,\n\n    /**\n     * @protected\n     * @type {string}\n     */\n    axisPointerClass: null,\n\n    /**\n     * @override\n     */\n    render: function (axisModel, ecModel, api, payload) {\n        // FIXME\n        // This process should proformed after coordinate systems updated\n        // (axis scale updated), and should be performed each time update.\n        // So put it here temporarily, although it is not appropriate to\n        // put a model-writing procedure in `view`.\n        this.axisPointerClass && axisPointerModelHelper.fixValue(axisModel);\n\n        AxisView.superApply(this, 'render', arguments);\n\n        updateAxisPointer(this, axisModel, ecModel, api, payload, true);\n    },\n\n    /**\n     * Action handler.\n     * @public\n     * @param {module:echarts/coord/cartesian/AxisModel} axisModel\n     * @param {module:echarts/model/Global} ecModel\n     * @param {module:echarts/ExtensionAPI} api\n     * @param {Object} payload\n     */\n    updateAxisPointer: function (axisModel, ecModel, api, payload, force) {\n        updateAxisPointer(this, axisModel, ecModel, api, payload, false);\n    },\n\n    /**\n     * @override\n     */\n    remove: function (ecModel, api) {\n        var axisPointer = this._axisPointer;\n        axisPointer && axisPointer.remove(api);\n        AxisView.superApply(this, 'remove', arguments);\n    },\n\n    /**\n     * @override\n     */\n    dispose: function (ecModel, api) {\n        disposeAxisPointer(this, api);\n        AxisView.superApply(this, 'dispose', arguments);\n    }\n\n});\n\nfunction updateAxisPointer(axisView, axisModel, ecModel, api, payload, forceRender) {\n    var Clazz = AxisView.getAxisPointerClass(axisView.axisPointerClass);\n    if (!Clazz) {\n        return;\n    }\n    var axisPointerModel = axisPointerModelHelper.getAxisPointerModel(axisModel);\n    axisPointerModel\n        ? (axisView._axisPointer || (axisView._axisPointer = new Clazz()))\n            .render(axisModel, axisPointerModel, api, forceRender)\n        : disposeAxisPointer(axisView, api);\n}\n\nfunction disposeAxisPointer(axisView, ecModel, api) {\n    var axisPointer = axisView._axisPointer;\n    axisPointer && axisPointer.dispose(ecModel, api);\n    axisView._axisPointer = null;\n}\n\nvar axisPointerClazz = [];\n\nAxisView.registerAxisPointerClass = function (type, clazz) {\n    if (__DEV__) {\n        if (axisPointerClazz[type]) {\n            throw new Error('axisPointer ' + type + ' exists');\n        }\n    }\n    axisPointerClazz[type] = clazz;\n};\n\nAxisView.getAxisPointerClass = function (type) {\n    return type && axisPointerClazz[type];\n};\n\nexport default AxisView;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\n\n/**\n * Can only be called after coordinate system creation stage.\n * (Can be called before coordinate system update stage).\n *\n * @param {Object} opt {labelInside}\n * @return {Object} {\n *  position, rotation, labelDirection, labelOffset,\n *  tickDirection, labelRotate, z2\n * }\n */\nexport function layout(gridModel, axisModel, opt) {\n    opt = opt || {};\n    var grid = gridModel.coordinateSystem;\n    var axis = axisModel.axis;\n    var layout = {};\n    var otherAxisOnZeroOf = axis.getAxesOnZeroOf()[0];\n\n    var rawAxisPosition = axis.position;\n    var axisPosition = otherAxisOnZeroOf ? 'onZero' : rawAxisPosition;\n    var axisDim = axis.dim;\n\n    var rect = grid.getRect();\n    var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];\n    var idx = {left: 0, right: 1, top: 0, bottom: 1, onZero: 2};\n    var axisOffset = axisModel.get('offset') || 0;\n\n    var posBound = axisDim === 'x'\n        ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset]\n        : [rectBound[0] - axisOffset, rectBound[1] + axisOffset];\n\n    if (otherAxisOnZeroOf) {\n        var onZeroCoord = otherAxisOnZeroOf.toGlobalCoord(otherAxisOnZeroOf.dataToCoord(0));\n        posBound[idx.onZero] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]);\n    }\n\n    // Axis position\n    layout.position = [\n        axisDim === 'y' ? posBound[idx[axisPosition]] : rectBound[0],\n        axisDim === 'x' ? posBound[idx[axisPosition]] : rectBound[3]\n    ];\n\n    // Axis rotation\n    layout.rotation = Math.PI / 2 * (axisDim === 'x' ? 0 : 1);\n\n    // Tick and label direction, x y is axisDim\n    var dirMap = {top: -1, bottom: 1, left: -1, right: 1};\n\n    layout.labelDirection = layout.tickDirection = layout.nameDirection = dirMap[rawAxisPosition];\n    layout.labelOffset = otherAxisOnZeroOf ? posBound[idx[rawAxisPosition]] - posBound[idx.onZero] : 0;\n\n    if (axisModel.get('axisTick.inside')) {\n        layout.tickDirection = -layout.tickDirection;\n    }\n    if (zrUtil.retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {\n        layout.labelDirection = -layout.labelDirection;\n    }\n\n    // Special label rotation\n    var labelRotate = axisModel.get('axisLabel.rotate');\n    layout.labelRotate = axisPosition === 'top' ? -labelRotate : labelRotate;\n\n    // Over splitLine and splitArea\n    layout.z2 = 1;\n\n    return layout;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport AxisBuilder from './AxisBuilder';\nimport AxisView from './AxisView';\nimport * as cartesianAxisHelper from '../../coord/cartesian/cartesianAxisHelper';\n\nvar axisBuilderAttrs = [\n    'axisLine', 'axisTickLabel', 'axisName'\n];\nvar selfBuilderAttrs = [\n    'splitArea', 'splitLine'\n];\n\n// function getAlignWithLabel(model, axisModel) {\n//     var alignWithLabel = model.get('alignWithLabel');\n//     if (alignWithLabel === 'auto') {\n//         alignWithLabel = axisModel.get('axisTick.alignWithLabel');\n//     }\n//     return alignWithLabel;\n// }\n\nvar CartesianAxisView = AxisView.extend({\n\n    type: 'cartesianAxis',\n\n    axisPointerClass: 'CartesianAxisPointer',\n\n    /**\n     * @override\n     */\n    render: function (axisModel, ecModel, api, payload) {\n\n        this.group.removeAll();\n\n        var oldAxisGroup = this._axisGroup;\n        this._axisGroup = new graphic.Group();\n\n        this.group.add(this._axisGroup);\n\n        if (!axisModel.get('show')) {\n            return;\n        }\n\n        var gridModel = axisModel.getCoordSysModel();\n\n        var layout = cartesianAxisHelper.layout(gridModel, axisModel);\n\n        var axisBuilder = new AxisBuilder(axisModel, layout);\n\n        zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n\n        this._axisGroup.add(axisBuilder.getGroup());\n\n        zrUtil.each(selfBuilderAttrs, function (name) {\n            if (axisModel.get(name + '.show')) {\n                this['_' + name](axisModel, gridModel);\n            }\n        }, this);\n\n        graphic.groupTransition(oldAxisGroup, this._axisGroup, axisModel);\n\n        CartesianAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);\n    },\n\n    remove: function () {\n        this._splitAreaColors = null;\n    },\n\n    /**\n     * @param {module:echarts/coord/cartesian/AxisModel} axisModel\n     * @param {module:echarts/coord/cartesian/GridModel} gridModel\n     * @private\n     */\n    _splitLine: function (axisModel, gridModel) {\n        var axis = axisModel.axis;\n\n        if (axis.scale.isBlank()) {\n            return;\n        }\n\n        var splitLineModel = axisModel.getModel('splitLine');\n        var lineStyleModel = splitLineModel.getModel('lineStyle');\n        var lineColors = lineStyleModel.get('color');\n\n        lineColors = zrUtil.isArray(lineColors) ? lineColors : [lineColors];\n\n        var gridRect = gridModel.coordinateSystem.getRect();\n        var isHorizontal = axis.isHorizontal();\n\n        var lineCount = 0;\n\n        var ticksCoords = axis.getTicksCoords({\n            tickModel: splitLineModel\n        });\n\n        var p1 = [];\n        var p2 = [];\n\n        // Simple optimization\n        // Batching the lines if color are the same\n        var lineStyle = lineStyleModel.getLineStyle();\n        for (var i = 0; i < ticksCoords.length; i++) {\n            var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);\n\n            if (isHorizontal) {\n                p1[0] = tickCoord;\n                p1[1] = gridRect.y;\n                p2[0] = tickCoord;\n                p2[1] = gridRect.y + gridRect.height;\n            }\n            else {\n                p1[0] = gridRect.x;\n                p1[1] = tickCoord;\n                p2[0] = gridRect.x + gridRect.width;\n                p2[1] = tickCoord;\n            }\n\n            var colorIndex = (lineCount++) % lineColors.length;\n            var tickValue = ticksCoords[i].tickValue;\n            this._axisGroup.add(new graphic.Line({\n                anid: tickValue != null ? 'line_' + ticksCoords[i].tickValue : null,\n                subPixelOptimize: true,\n                shape: {\n                    x1: p1[0],\n                    y1: p1[1],\n                    x2: p2[0],\n                    y2: p2[1]\n                },\n                style: zrUtil.defaults({\n                    stroke: lineColors[colorIndex]\n                }, lineStyle),\n                silent: true\n            }));\n        }\n    },\n\n    /**\n     * @param {module:echarts/coord/cartesian/AxisModel} axisModel\n     * @param {module:echarts/coord/cartesian/GridModel} gridModel\n     * @private\n     */\n    _splitArea: function (axisModel, gridModel) {\n        var axis = axisModel.axis;\n\n        if (axis.scale.isBlank()) {\n            return;\n        }\n\n        var splitAreaModel = axisModel.getModel('splitArea');\n        var areaStyleModel = splitAreaModel.getModel('areaStyle');\n        var areaColors = areaStyleModel.get('color');\n\n        var gridRect = gridModel.coordinateSystem.getRect();\n\n        var ticksCoords = axis.getTicksCoords({\n            tickModel: splitAreaModel,\n            clamp: true\n        });\n\n        if (!ticksCoords.length) {\n            return;\n        }\n\n        // For Making appropriate splitArea animation, the color and anid\n        // should be corresponding to previous one if possible.\n        var areaColorsLen = areaColors.length;\n        var lastSplitAreaColors = this._splitAreaColors;\n        var newSplitAreaColors = zrUtil.createHashMap();\n        var colorIndex = 0;\n        if (lastSplitAreaColors) {\n            for (var i = 0; i < ticksCoords.length; i++) {\n                var cIndex = lastSplitAreaColors.get(ticksCoords[i].tickValue);\n                if (cIndex != null) {\n                    colorIndex = (cIndex + (areaColorsLen - 1) * i) % areaColorsLen;\n                    break;\n                }\n            }\n        }\n\n        var prev = axis.toGlobalCoord(ticksCoords[0].coord);\n\n        var areaStyle = areaStyleModel.getAreaStyle();\n        areaColors = zrUtil.isArray(areaColors) ? areaColors : [areaColors];\n\n        for (var i = 1; i < ticksCoords.length; i++) {\n            var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);\n\n            var x;\n            var y;\n            var width;\n            var height;\n            if (axis.isHorizontal()) {\n                x = prev;\n                y = gridRect.y;\n                width = tickCoord - x;\n                height = gridRect.height;\n                prev = x + width;\n            }\n            else {\n                x = gridRect.x;\n                y = prev;\n                width = gridRect.width;\n                height = tickCoord - y;\n                prev = y + height;\n            }\n\n            var tickValue = ticksCoords[i - 1].tickValue;\n            tickValue != null && newSplitAreaColors.set(tickValue, colorIndex);\n\n            this._axisGroup.add(new graphic.Rect({\n                anid: tickValue != null ? 'area_' + tickValue : null,\n                shape: {\n                    x: x,\n                    y: y,\n                    width: width,\n                    height: height\n                },\n                style: zrUtil.defaults({\n                    fill: areaColors[colorIndex]\n                }, areaStyle),\n                silent: true\n            }));\n\n            colorIndex = (colorIndex + 1) % areaColorsLen;\n        }\n\n        this._splitAreaColors = newSplitAreaColors;\n    }\n});\n\nCartesianAxisView.extend({\n    type: 'xAxis'\n});\nCartesianAxisView.extend({\n    type: 'yAxis'\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\nimport '../coord/cartesian/AxisModel';\nimport './axis/CartesianAxisView';","/*\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\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../util/graphic';\n\nimport '../coord/cartesian/Grid';\nimport './axis';\n\n// Grid view\necharts.extendComponentView({\n\n    type: 'grid',\n\n    render: function (gridModel, ecModel) {\n        this.group.removeAll();\n        if (gridModel.get('show')) {\n            this.group.add(new graphic.Rect({\n                shape: gridModel.coordinateSystem.getRect(),\n                style: zrUtil.defaults({\n                    fill: gridModel.get('backgroundColor')\n                }, gridModel.getItemStyle()),\n                silent: true,\n                z2: -1\n            }));\n        }\n    }\n\n});\n\necharts.registerPreprocessor(function (option) {\n    // Only create grid when need\n    if (option.xAxis && option.yAxis && !option.grid) {\n        option.grid = {};\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\nimport * as echarts from '../echarts';\n\nimport './line/LineSeries';\nimport './line/LineView';\nimport visualSymbol from '../visual/symbol';\nimport layoutPoints from '../layout/points';\nimport dataSample from '../processor/dataSample';\n\n// In case developer forget to include grid component\nimport '../component/gridSimple';\n\necharts.registerVisual(visualSymbol('line', 'circle', 'line'));\necharts.registerLayout(layoutPoints('line'));\n\n// Down sample after filter\necharts.registerProcessor(\n    echarts.PRIORITY.PROCESSOR.STATISTIC,\n    dataSample('line')\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\nimport SeriesModel from '../../model/Series';\nimport createListFromArray from '../helper/createListFromArray';\n\nexport default SeriesModel.extend({\n\n    type: 'series.__base_bar__',\n\n    getInitialData: function (option, ecModel) {\n        return createListFromArray(this.getSource(), this);\n    },\n\n    getMarkerPosition: function (value) {\n        var coordSys = this.coordinateSystem;\n        if (coordSys) {\n            // PENDING if clamp ?\n            var pt = coordSys.dataToPoint(coordSys.clampData(value));\n            var data = this.getData();\n            var offset = data.getLayout('offset');\n            var size = data.getLayout('size');\n            var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1;\n            pt[offsetIndex] += offset + size / 2;\n            return pt;\n        }\n        return [NaN, NaN];\n    },\n\n    defaultOption: {\n        zlevel: 0,                  // 一级层叠\n        z: 2,                       // 二级层叠\n        coordinateSystem: 'cartesian2d',\n        legendHoverLink: true,\n        // stack: null\n\n        // Cartesian coordinate system\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // 最小高度改为0\n        barMinHeight: 0,\n        // 最小角度为0，仅对极坐标系下的柱状图有效\n        barMinAngle: 0,\n        // cursor: null,\n\n        large: false,\n        largeThreshold: 400,\n        progressive: 3e3,\n        progressiveChunkMode: 'mod',\n\n        // barMaxWidth: null,\n\n        // In cartesian, the default value is 1. Otherwise null.\n        // barMinWidth: null,\n\n        // 默认自适应\n        // barWidth: null,\n        // 柱间距离，默认为柱形宽度的30%，可设固定值\n        // barGap: '30%',\n        // 类目间柱形距离，默认为类目间距的20%，可设固定值\n        // barCategoryGap: '20%',\n        // label: {\n        //      show: false\n        // },\n        itemStyle: {},\n        emphasis: {}\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\nimport BaseBarSeries from './BaseBarSeries';\n\nexport default BaseBarSeries.extend({\n\n    type: 'series.bar',\n\n    dependencies: ['grid', 'polar'],\n\n    brushSelector: 'rect',\n\n    /**\n     * @override\n     */\n    getProgressive: function () {\n        // Do not support progressive in normal mode.\n        return this.get('large')\n            ? this.get('progressive')\n            : false;\n    },\n\n    /**\n     * @override\n     */\n    getProgressiveThreshold: function () {\n        // Do not support progressive in normal mode.\n        var progressiveThreshold = this.get('progressiveThreshold');\n        var largeThreshold = this.get('largeThreshold');\n        if (largeThreshold > progressiveThreshold) {\n            progressiveThreshold = largeThreshold;\n        }\n        return progressiveThreshold;\n    },\n\n    defaultOption: {\n        // If clipped\n        // Only available on cartesian2d\n        clip: true,\n\n        // If use caps on two sides of bars\n        // Only available on tangential polar bar\n        roundCap: false\n    }\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as graphic from '../../util/graphic';\nimport {getDefaultLabel} from '../helper/labelHelper';\n\nexport function setLabel(\n    normalStyle, hoverStyle, itemModel, color, seriesModel, dataIndex, labelPositionOutside\n) {\n    var labelModel = itemModel.getModel('label');\n    var hoverLabelModel = itemModel.getModel('emphasis.label');\n\n    graphic.setLabelStyle(\n        normalStyle, hoverStyle, labelModel, hoverLabelModel,\n        {\n            labelFetcher: seriesModel,\n            labelDataIndex: dataIndex,\n            defaultText: getDefaultLabel(seriesModel.getData(), dataIndex),\n            isRectText: true,\n            autoColor: color\n        }\n    );\n\n    fixPosition(normalStyle);\n    fixPosition(hoverStyle);\n}\n\nfunction fixPosition(style, labelPositionOutside) {\n    if (style.textPosition === 'outside') {\n        style.textPosition = labelPositionOutside;\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport makeStyleMapper from '../../model/mixin/makeStyleMapper';\n\nvar getBarItemStyle = makeStyleMapper(\n    [\n        ['fill', 'color'],\n        ['stroke', 'borderColor'],\n        ['lineWidth', 'borderWidth'],\n        // Compatitable with 2\n        ['stroke', 'barBorderColor'],\n        ['lineWidth', 'barBorderWidth'],\n        ['opacity'],\n        ['shadowBlur'],\n        ['shadowOffsetX'],\n        ['shadowOffsetY'],\n        ['shadowColor']\n    ]\n);\n\nexport default {\n    getBarItemStyle: function (excludes) {\n        var style = getBarItemStyle(this, excludes);\n        if (this.getBorderLineDash) {\n            var lineDash = this.getBorderLineDash();\n            lineDash && (style.lineDash = lineDash);\n        }\n        return style;\n    }\n};\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {extendShape} from '../graphic';\n\n/**\n * Sausage: similar to sector, but have half circle on both sides\n * @public\n */\nexport default extendShape({\n\n    type: 'sausage',\n\n    shape: {\n\n        cx: 0,\n\n        cy: 0,\n\n        r0: 0,\n\n        r: 0,\n\n        startAngle: 0,\n\n        endAngle: Math.PI * 2,\n\n        clockwise: true\n    },\n\n    buildPath: function (ctx, shape) {\n        var x = shape.cx;\n        var y = shape.cy;\n        var r0 = Math.max(shape.r0 || 0, 0);\n        var r = Math.max(shape.r, 0);\n        var dr = (r - r0) * 0.5;\n        var rCenter = r0 + dr;\n        var startAngle = shape.startAngle;\n        var endAngle = shape.endAngle;\n        var clockwise = shape.clockwise;\n\n        var unitStartX = Math.cos(startAngle);\n        var unitStartY = Math.sin(startAngle);\n        var unitEndX = Math.cos(endAngle);\n        var unitEndY = Math.sin(endAngle);\n\n        var lessThanCircle = clockwise\n            ? endAngle - startAngle < Math.PI * 2\n            : startAngle - endAngle < Math.PI * 2;\n\n        if (lessThanCircle) {\n            ctx.moveTo(unitStartX * r0 + x, unitStartY * r0 + y);\n\n            ctx.arc(\n                unitStartX * rCenter + x, unitStartY * rCenter + y, dr,\n                -Math.PI + startAngle, startAngle, !clockwise\n            );\n        }\n\n        ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n\n        ctx.moveTo(unitEndX * r + x, unitEndY * r + y);\n\n        ctx.arc(\n            unitEndX * rCenter + x, unitEndY * rCenter + y, dr,\n            endAngle - Math.PI * 2, endAngle - Math.PI, !clockwise\n        );\n\n        if (r0 !== 0) {\n            ctx.arc(x, y, r0, endAngle, startAngle, clockwise);\n\n            ctx.moveTo(unitStartX * r0 + x, unitEndY * r0 + y);\n        }\n\n        ctx.closePath();\n    }\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {__DEV__} from '../../config';\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport {setLabel} from './helper';\nimport Model from '../../model/Model';\nimport barItemStyle from './barItemStyle';\nimport Path from 'zrender/src/graphic/Path';\nimport {throttle} from '../../util/throttle';\nimport {createClipPath} from '../helper/createClipPathFromCoordSys';\nimport Sausage from '../../util/shape/sausage';\n\nvar BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'barBorderWidth'];\nvar _eventPos = [0, 0];\n\n// FIXME\n// Just for compatible with ec2.\nzrUtil.extend(Model.prototype, barItemStyle);\n\nfunction getClipArea(coord, data) {\n    var coordSysClipArea = coord.getArea && coord.getArea();\n    if (coord.type === 'cartesian2d') {\n        var baseAxis = coord.getBaseAxis();\n        // When boundaryGap is false or using time axis. bar may exceed the grid.\n        // We should not clip this part.\n        // See test/bar2.html\n        if (baseAxis.type !== 'category' || !baseAxis.onBand) {\n            var expandWidth = data.getLayout('bandWidth');\n            if (baseAxis.isHorizontal()) {\n                coordSysClipArea.x -= expandWidth;\n                coordSysClipArea.width += expandWidth * 2;\n            }\n            else {\n                coordSysClipArea.y -= expandWidth;\n                coordSysClipArea.height += expandWidth * 2;\n            }\n        }\n    }\n\n    return coordSysClipArea;\n}\n\nexport default echarts.extendChartView({\n\n    type: 'bar',\n\n    render: function (seriesModel, ecModel, api) {\n        this._updateDrawMode(seriesModel);\n\n        var coordinateSystemType = seriesModel.get('coordinateSystem');\n\n        if (coordinateSystemType === 'cartesian2d'\n            || coordinateSystemType === 'polar'\n        ) {\n            this._isLargeDraw\n                ? this._renderLarge(seriesModel, ecModel, api)\n                : this._renderNormal(seriesModel, ecModel, api);\n        }\n        else if (__DEV__) {\n            console.warn('Only cartesian2d and polar supported for bar.');\n        }\n\n        return this.group;\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        this._clear();\n        this._updateDrawMode(seriesModel);\n    },\n\n    incrementalRender: function (params, seriesModel, ecModel, api) {\n        // Do not support progressive in normal mode.\n        this._incrementalRenderLarge(params, seriesModel);\n    },\n\n    _updateDrawMode: function (seriesModel) {\n        var isLargeDraw = seriesModel.pipelineContext.large;\n        if (this._isLargeDraw == null || isLargeDraw ^ this._isLargeDraw) {\n            this._isLargeDraw = isLargeDraw;\n            this._clear();\n        }\n    },\n\n    _renderNormal: function (seriesModel, ecModel, api) {\n        var group = this.group;\n        var data = seriesModel.getData();\n        var oldData = this._data;\n\n        var coord = seriesModel.coordinateSystem;\n        var baseAxis = coord.getBaseAxis();\n        var isHorizontalOrRadial;\n\n        if (coord.type === 'cartesian2d') {\n            isHorizontalOrRadial = baseAxis.isHorizontal();\n        }\n        else if (coord.type === 'polar') {\n            isHorizontalOrRadial = baseAxis.dim === 'angle';\n        }\n\n        var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null;\n\n        var needsClip = seriesModel.get('clip', true);\n        var coordSysClipArea = getClipArea(coord, data);\n        // If there is clipPath created in large mode. Remove it.\n        group.removeClipPath();\n        // We don't use clipPath in normal mode because we needs a perfect animation\n        // And don't want the label are clipped.\n\n        var roundCap = seriesModel.get('roundCap', true);\n\n        data.diff(oldData)\n            .add(function (dataIndex) {\n                if (!data.hasValue(dataIndex)) {\n                    return;\n                }\n\n                var itemModel = data.getItemModel(dataIndex);\n                var layout = getLayout[coord.type](data, dataIndex, itemModel);\n\n                if (needsClip) {\n                    // Clip will modify the layout params.\n                    // And return a boolean to determine if the shape are fully clipped.\n                    var isClipped = clip[coord.type](coordSysClipArea, layout);\n                    if (isClipped) {\n                        group.remove(el);\n                        return;\n                    }\n                }\n\n                var el = elementCreator[coord.type](\n                    dataIndex, layout, isHorizontalOrRadial, animationModel, false, roundCap\n                );\n                data.setItemGraphicEl(dataIndex, el);\n                group.add(el);\n\n                updateStyle(\n                    el, data, dataIndex, itemModel, layout,\n                    seriesModel, isHorizontalOrRadial, coord.type === 'polar'\n                );\n            })\n            .update(function (newIndex, oldIndex) {\n                var el = oldData.getItemGraphicEl(oldIndex);\n\n                if (!data.hasValue(newIndex)) {\n                    group.remove(el);\n                    return;\n                }\n\n                var itemModel = data.getItemModel(newIndex);\n                var layout = getLayout[coord.type](data, newIndex, itemModel);\n\n                if (needsClip) {\n                    var isClipped = clip[coord.type](coordSysClipArea, layout);\n                    if (isClipped) {\n                        group.remove(el);\n                        return;\n                    }\n                }\n\n                if (el) {\n                    graphic.updateProps(el, {shape: layout}, animationModel, newIndex);\n                }\n                else {\n                    el = elementCreator[coord.type](\n                        newIndex, layout, isHorizontalOrRadial, animationModel, true, roundCap\n                    );\n                }\n\n                data.setItemGraphicEl(newIndex, el);\n                // Add back\n                group.add(el);\n\n                updateStyle(\n                    el, data, newIndex, itemModel, layout,\n                    seriesModel, isHorizontalOrRadial, coord.type === 'polar'\n                );\n            })\n            .remove(function (dataIndex) {\n                var el = oldData.getItemGraphicEl(dataIndex);\n                if (coord.type === 'cartesian2d') {\n                    el && removeRect(dataIndex, animationModel, el);\n                }\n                else {\n                    el && removeSector(dataIndex, animationModel, el);\n                }\n            })\n            .execute();\n\n        this._data = data;\n    },\n\n    _renderLarge: function (seriesModel, ecModel, api) {\n        this._clear();\n        createLarge(seriesModel, this.group);\n\n        // Use clipPath in large mode.\n        var clipPath = seriesModel.get('clip', true)\n            ? createClipPath(seriesModel.coordinateSystem, false, seriesModel)\n            : null;\n        if (clipPath) {\n            this.group.setClipPath(clipPath);\n        }\n        else {\n            this.group.removeClipPath();\n        }\n    },\n\n    _incrementalRenderLarge: function (params, seriesModel) {\n        createLarge(seriesModel, this.group, true);\n    },\n\n    dispose: zrUtil.noop,\n\n    remove: function (ecModel) {\n        this._clear(ecModel);\n    },\n\n    _clear: function (ecModel) {\n        var group = this.group;\n        var data = this._data;\n        if (ecModel && ecModel.get('animation') && data && !this._isLargeDraw) {\n            data.eachItemGraphicEl(function (el) {\n                if (el.type === 'sector') {\n                    removeSector(el.dataIndex, ecModel, el);\n                }\n                else {\n                    removeRect(el.dataIndex, ecModel, el);\n                }\n            });\n        }\n        else {\n            group.removeAll();\n        }\n        this._data = null;\n    }\n\n});\n\nvar mathMax = Math.max;\nvar mathMin = Math.min;\n\nvar clip = {\n    cartesian2d: function (coordSysBoundingRect, layout) {\n        var signWidth = layout.width < 0 ? -1 : 1;\n        var signHeight = layout.height < 0 ? -1 : 1;\n        // Needs positive width and height\n        if (signWidth < 0) {\n            layout.x += layout.width;\n            layout.width = -layout.width;\n        }\n        if (signHeight < 0) {\n            layout.y += layout.height;\n            layout.height = -layout.height;\n        }\n\n        var x = mathMax(layout.x, coordSysBoundingRect.x);\n        var x2 = mathMin(layout.x + layout.width, coordSysBoundingRect.x + coordSysBoundingRect.width);\n        var y = mathMax(layout.y, coordSysBoundingRect.y);\n        var y2 = mathMin(layout.y + layout.height, coordSysBoundingRect.y + coordSysBoundingRect.height);\n\n        layout.x = x;\n        layout.y = y;\n        layout.width = x2 - x;\n        layout.height = y2 - y;\n\n        var clipped = layout.width < 0 || layout.height < 0;\n\n        // Reverse back\n        if (signWidth < 0) {\n            layout.x += layout.width;\n            layout.width = -layout.width;\n        }\n        if (signHeight < 0) {\n            layout.y += layout.height;\n            layout.height = -layout.height;\n        }\n\n        return clipped;\n    },\n\n    polar: function (coordSysClipArea) {\n        return false;\n    }\n};\n\nvar elementCreator = {\n\n    cartesian2d: function (\n        dataIndex, layout, isHorizontal,\n        animationModel, isUpdate\n    ) {\n        var rect = new graphic.Rect({shape: zrUtil.extend({}, layout)});\n\n        // Animation\n        if (animationModel) {\n            var rectShape = rect.shape;\n            var animateProperty = isHorizontal ? 'height' : 'width';\n            var animateTarget = {};\n            rectShape[animateProperty] = 0;\n            animateTarget[animateProperty] = layout[animateProperty];\n            graphic[isUpdate ? 'updateProps' : 'initProps'](rect, {\n                shape: animateTarget\n            }, animationModel, dataIndex);\n        }\n\n        return rect;\n    },\n\n    polar: function (\n        dataIndex, layout, isRadial,\n        animationModel, isUpdate, roundCap\n    ) {\n        // Keep the same logic with bar in catesion: use end value to control\n        // direction. Notice that if clockwise is true (by default), the sector\n        // will always draw clockwisely, no matter whether endAngle is greater\n        // or less than startAngle.\n        var clockwise = layout.startAngle < layout.endAngle;\n\n        var ShapeClass = (!isRadial && roundCap) ? Sausage : graphic.Sector;\n\n        var sector = new ShapeClass({\n            shape: zrUtil.defaults({clockwise: clockwise}, layout)\n        });\n\n        // Animation\n        if (animationModel) {\n            var sectorShape = sector.shape;\n            var animateProperty = isRadial ? 'r' : 'endAngle';\n            var animateTarget = {};\n            sectorShape[animateProperty] = isRadial ? 0 : layout.startAngle;\n            animateTarget[animateProperty] = layout[animateProperty];\n            graphic[isUpdate ? 'updateProps' : 'initProps'](sector, {\n                shape: animateTarget\n            }, animationModel, dataIndex);\n        }\n\n        return sector;\n    }\n};\n\nfunction removeRect(dataIndex, animationModel, el) {\n    // Not show text when animating\n    el.style.text = null;\n    graphic.updateProps(el, {\n        shape: {\n            width: 0\n        }\n    }, animationModel, dataIndex, function () {\n        el.parent && el.parent.remove(el);\n    });\n}\n\nfunction removeSector(dataIndex, animationModel, el) {\n    // Not show text when animating\n    el.style.text = null;\n    graphic.updateProps(el, {\n        shape: {\n            r: el.shape.r0\n        }\n    }, animationModel, dataIndex, function () {\n        el.parent && el.parent.remove(el);\n    });\n}\n\nvar getLayout = {\n    cartesian2d: function (data, dataIndex, itemModel) {\n        var layout = data.getItemLayout(dataIndex);\n        var fixedLineWidth = getLineWidth(itemModel, layout);\n\n        // fix layout with lineWidth\n        var signX = layout.width > 0 ? 1 : -1;\n        var signY = layout.height > 0 ? 1 : -1;\n        return {\n            x: layout.x + signX * fixedLineWidth / 2,\n            y: layout.y + signY * fixedLineWidth / 2,\n            width: layout.width - signX * fixedLineWidth,\n            height: layout.height - signY * fixedLineWidth\n        };\n    },\n\n    polar: function (data, dataIndex, itemModel) {\n        var layout = data.getItemLayout(dataIndex);\n        return {\n            cx: layout.cx,\n            cy: layout.cy,\n            r0: layout.r0,\n            r: layout.r,\n            startAngle: layout.startAngle,\n            endAngle: layout.endAngle\n        };\n    }\n};\n\nfunction updateStyle(\n    el, data, dataIndex, itemModel, layout, seriesModel, isHorizontal, isPolar\n) {\n    var color = data.getItemVisual(dataIndex, 'color');\n    var opacity = data.getItemVisual(dataIndex, 'opacity');\n    var itemStyleModel = itemModel.getModel('itemStyle');\n    var hoverStyle = itemModel.getModel('emphasis.itemStyle').getBarItemStyle();\n\n    if (!isPolar) {\n        el.setShape('r', itemStyleModel.get('barBorderRadius') || 0);\n    }\n\n    el.useStyle(zrUtil.defaults(\n        {\n            fill: color,\n            opacity: opacity\n        },\n        itemStyleModel.getBarItemStyle()\n    ));\n\n    var cursorStyle = itemModel.getShallow('cursor');\n    cursorStyle && el.attr('cursor', cursorStyle);\n\n    var labelPositionOutside = isHorizontal\n        ? (layout.height > 0 ? 'bottom' : 'top')\n        : (layout.width > 0 ? 'left' : 'right');\n\n    if (!isPolar) {\n        setLabel(\n            el.style, hoverStyle, itemModel, color,\n            seriesModel, dataIndex, labelPositionOutside\n        );\n    }\n\n    graphic.setHoverStyle(el, hoverStyle);\n}\n\n// In case width or height are too small.\nfunction getLineWidth(itemModel, rawLayout) {\n    var lineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;\n    return Math.min(lineWidth, Math.abs(rawLayout.width), Math.abs(rawLayout.height));\n}\n\n\nvar LargePath = Path.extend({\n\n    type: 'largeBar',\n\n    shape: {points: []},\n\n    buildPath: function (ctx, shape) {\n        // Drawing lines is more efficient than drawing\n        // a whole line or drawing rects.\n        var points = shape.points;\n        var startPoint = this.__startPoint;\n        var baseDimIdx = this.__baseDimIdx;\n\n        for (var i = 0; i < points.length; i += 2) {\n            startPoint[baseDimIdx] = points[i + baseDimIdx];\n            ctx.moveTo(startPoint[0], startPoint[1]);\n            ctx.lineTo(points[i], points[i + 1]);\n        }\n    }\n});\n\nfunction createLarge(seriesModel, group, incremental) {\n    // TODO support polar\n    var data = seriesModel.getData();\n    var startPoint = [];\n    var baseDimIdx = data.getLayout('valueAxisHorizontal') ? 1 : 0;\n    startPoint[1 - baseDimIdx] = data.getLayout('valueAxisStart');\n\n    var el = new LargePath({\n        shape: {points: data.getLayout('largePoints')},\n        incremental: !!incremental,\n        __startPoint: startPoint,\n        __baseDimIdx: baseDimIdx,\n        __largeDataIndices: data.getLayout('largeDataIndices'),\n        __barWidth: data.getLayout('barWidth')\n    });\n    group.add(el);\n    setLargeStyle(el, seriesModel, data);\n\n    // Enable tooltip and user mouse/touch event handlers.\n    el.seriesIndex = seriesModel.seriesIndex;\n\n    if (!seriesModel.get('silent')) {\n        el.on('mousedown', largePathUpdateDataIndex);\n        el.on('mousemove', largePathUpdateDataIndex);\n    }\n}\n\n// Use throttle to avoid frequently traverse to find dataIndex.\nvar largePathUpdateDataIndex = throttle(function (event) {\n    var largePath = this;\n    var dataIndex = largePathFindDataIndex(largePath, event.offsetX, event.offsetY);\n    largePath.dataIndex = dataIndex >= 0 ? dataIndex : null;\n}, 30, false);\n\nfunction largePathFindDataIndex(largePath, x, y) {\n    var baseDimIdx = largePath.__baseDimIdx;\n    var valueDimIdx = 1 - baseDimIdx;\n    var points = largePath.shape.points;\n    var largeDataIndices = largePath.__largeDataIndices;\n    var barWidthHalf = Math.abs(largePath.__barWidth / 2);\n    var startValueVal = largePath.__startPoint[valueDimIdx];\n\n    _eventPos[0] = x;\n    _eventPos[1] = y;\n    var pointerBaseVal = _eventPos[baseDimIdx];\n    var pointerValueVal = _eventPos[1 - baseDimIdx];\n    var baseLowerBound = pointerBaseVal - barWidthHalf;\n    var baseUpperBound = pointerBaseVal + barWidthHalf;\n\n    for (var i = 0, len = points.length / 2; i < len; i++) {\n        var ii = i * 2;\n        var barBaseVal = points[ii + baseDimIdx];\n        var barValueVal = points[ii + valueDimIdx];\n        if (\n            barBaseVal >= baseLowerBound && barBaseVal <= baseUpperBound\n            && (\n                startValueVal <= barValueVal\n                    ? (pointerValueVal >= startValueVal && pointerValueVal <= barValueVal)\n                    : (pointerValueVal >= barValueVal && pointerValueVal <= startValueVal)\n            )\n        ) {\n            return largeDataIndices[i];\n        }\n    }\n\n    return -1;\n}\n\nfunction setLargeStyle(el, seriesModel, data) {\n    var borderColor = data.getVisual('borderColor') || data.getVisual('color');\n    var itemStyle = seriesModel.getModel('itemStyle').getItemStyle(['color', 'borderColor']);\n\n    el.useStyle(itemStyle);\n    el.style.fill = null;\n    el.style.stroke = borderColor;\n    el.style.lineWidth = data.getLayout('barWidth');\n}\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {layout, largeLayout} from '../layout/barGrid';\n\nimport '../coord/cartesian/Grid';\nimport './bar/BarSeries';\nimport './bar/BarView';\n// In case developer forget to include grid component\nimport '../component/gridSimple';\n\n\necharts.registerLayout(echarts.PRIORITY.VISUAL.LAYOUT, zrUtil.curry(layout, 'bar'));\n// Use higher prority to avoid to be blocked by other overall layout, which do not\n// only exist in this module, but probably also exist in other modules, like `barPolar`.\necharts.registerLayout(echarts.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, largeLayout);\n\necharts.registerVisual({\n    seriesType: 'bar',\n    reset: function (seriesModel) {\n        // Visual coding for legend\n        seriesModel.getData().setVisual('legendSymbol', 'roundRect');\n    }\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nimport createDimensions from '../../data/helper/createDimensions';\nimport List from '../../data/List';\nimport {extend, isArray} from 'zrender/src/core/util';\n\n/**\n * [Usage]:\n * (1)\n * createListSimply(seriesModel, ['value']);\n * (2)\n * createListSimply(seriesModel, {\n *     coordDimensions: ['value'],\n *     dimensionsCount: 5\n * });\n *\n * @param {module:echarts/model/Series} seriesModel\n * @param {Object|Array.<string|Object>} opt opt or coordDimensions\n *        The options in opt, see `echarts/data/helper/createDimensions`\n * @param {Array.<string>} [nameList]\n * @return {module:echarts/data/List}\n */\nexport default function (seriesModel, opt, nameList) {\n    opt = isArray(opt) && {coordDimensions: opt} || extend({}, opt);\n\n    var source = seriesModel.getSource();\n\n    var dimensionsInfo = createDimensions(source, opt);\n\n    var list = new List(dimensionsInfo, seriesModel);\n    list.initData(source, nameList);\n\n    return list;\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Data selectable mixin for chart series.\n * To eanble data select, option of series must have `selectedMode`.\n * And each data item will use `selected` to toggle itself selected status\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default {\n\n    /**\n     * @param {Array.<Object>} targetList [{name, value, selected}, ...]\n     *        If targetList is an array, it should like [{name: ..., value: ...}, ...].\n     *        If targetList is a \"List\", it must have coordDim: 'value' dimension and name.\n     */\n    updateSelectedMap: function (targetList) {\n        this._targetList = zrUtil.isArray(targetList) ? targetList.slice() : [];\n\n        this._selectTargetMap = zrUtil.reduce(targetList || [], function (targetMap, target) {\n            targetMap.set(target.name, target);\n            return targetMap;\n        }, zrUtil.createHashMap());\n    },\n\n    /**\n     * Either name or id should be passed as input here.\n     * If both of them are defined, id is used.\n     *\n     * @param {string|undefined} name name of data\n     * @param {number|undefined} id dataIndex of data\n     */\n    // PENGING If selectedMode is null ?\n    select: function (name, id) {\n        var target = id != null\n            ? this._targetList[id]\n            : this._selectTargetMap.get(name);\n        var selectedMode = this.get('selectedMode');\n        if (selectedMode === 'single') {\n            this._selectTargetMap.each(function (target) {\n                target.selected = false;\n            });\n        }\n        target && (target.selected = true);\n    },\n\n    /**\n     * Either name or id should be passed as input here.\n     * If both of them are defined, id is used.\n     *\n     * @param {string|undefined} name name of data\n     * @param {number|undefined} id dataIndex of data\n     */\n    unSelect: function (name, id) {\n        var target = id != null\n            ? this._targetList[id]\n            : this._selectTargetMap.get(name);\n        // var selectedMode = this.get('selectedMode');\n        // selectedMode !== 'single' && target && (target.selected = false);\n        target && (target.selected = false);\n    },\n\n    /**\n     * Either name or id should be passed as input here.\n     * If both of them are defined, id is used.\n     *\n     * @param {string|undefined} name name of data\n     * @param {number|undefined} id dataIndex of data\n     */\n    toggleSelected: function (name, id) {\n        var target = id != null\n            ? this._targetList[id]\n            : this._selectTargetMap.get(name);\n        if (target != null) {\n            this[target.selected ? 'unSelect' : 'select'](name, id);\n            return target.selected;\n        }\n    },\n\n    /**\n     * Either name or id should be passed as input here.\n     * If both of them are defined, id is used.\n     *\n     * @param {string|undefined} name name of data\n     * @param {number|undefined} id dataIndex of data\n     */\n    isSelected: function (name, id) {\n        var target = id != null\n            ? this._targetList[id]\n            : this._selectTargetMap.get(name);\n        return target && target.selected;\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\nimport * as echarts from '../../echarts';\nimport createListSimply from '../helper/createListSimply';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as modelUtil from '../../util/model';\nimport {getPercentWithPrecision} from '../../util/number';\nimport dataSelectableMixin from '../../component/helper/selectableMixin';\nimport {retrieveRawAttr} from '../../data/helper/dataProvider';\n\n\nvar PieSeries = echarts.extendSeriesModel({\n\n    type: 'series.pie',\n\n    // Overwrite\n    init: function (option) {\n        PieSeries.superApply(this, 'init', arguments);\n\n        // Enable legend selection for each data item\n        // Use a function instead of direct access because data reference may changed\n        this.legendDataProvider = function () {\n            return this.getRawData();\n        };\n\n        this.updateSelectedMap(this._createSelectableList());\n\n        this._defaultLabelLine(option);\n    },\n\n    // Overwrite\n    mergeOption: function (newOption) {\n        PieSeries.superCall(this, 'mergeOption', newOption);\n\n        this.updateSelectedMap(this._createSelectableList());\n    },\n\n    getInitialData: function (option, ecModel) {\n        return createListSimply(this, ['value']);\n    },\n\n    _createSelectableList: function () {\n        var data = this.getRawData();\n        var valueDim = data.mapDimension('value');\n        var targetList = [];\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        return targetList;\n    },\n\n    // Overwrite\n    getDataParams: function (dataIndex) {\n        var data = this.getData();\n        var params = PieSeries.superCall(this, 'getDataParams', dataIndex);\n        // FIXME toFixed?\n\n        var valueList = [];\n        data.each(data.mapDimension('value'), function (value) {\n            valueList.push(value);\n        });\n\n        params.percent = getPercentWithPrecision(\n            valueList,\n            dataIndex,\n            data.hostModel.get('percentPrecision')\n        );\n\n        params.$vars.push('percent');\n        return params;\n    },\n\n    _defaultLabelLine: function (option) {\n        // Extend labelLine emphasis\n        modelUtil.defaultEmphasis(option, 'labelLine', ['show']);\n\n        var labelLineNormalOpt = option.labelLine;\n        var labelLineEmphasisOpt = option.emphasis.labelLine;\n        // Not show label line if `label.normal.show = false`\n        labelLineNormalOpt.show = labelLineNormalOpt.show\n            && option.label.show;\n        labelLineEmphasisOpt.show = labelLineEmphasisOpt.show\n            && option.emphasis.label.show;\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        legendHoverLink: true,\n\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\n        // If the angle of a sector less than `minShowLabelAngle`,\n        // the label will not be displayed.\n        minShowLabelAngle: 0,\n\n        // 选中时扇区偏移量\n        selectedOffset: 10,\n        // 高亮扇区偏移量\n        hoverOffset: 10,\n\n        // If use strategy to avoid label overlapping\n        avoidLabelOverlap: true,\n        // 选择模式，默认关闭，可选single，multiple\n        // selectedMode: false,\n        // 南丁格尔玫瑰图模式，'radius'（半径） | 'area'（面积）\n        // roseType: null,\n\n        percentPrecision: 2,\n\n        // If still show when all data zero.\n        stillShowZeroSum: true,\n\n        // cursor: null,\n\n        label: {\n            // If rotate around circle\n            rotate: false,\n            show: true,\n            // 'outer', 'inside', 'center'\n            position: 'outer'\n            // formatter: 标签文本格式器，同Tooltip.formatter，不支持异步回调\n            // 默认使用全局文本样式，详见TEXTSTYLE\n            // distance: 当position为inner时有效，为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数\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\n        // Animation type. Valid values: expansion, scale\n        animationType: 'expansion',\n\n        // Animation type when update. Valid values: transition, expansion\n        animationTypeUpdate: 'transition',\n\n        animationEasing: 'cubicOut'\n    }\n});\n\nzrUtil.mixin(PieSeries, dataSelectableMixin);\n\nexport default PieSeries;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport ChartView from '../../view/Chart';\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\n    api.dispatchAction({\n        type: 'pieToggleSelect',\n        from: uid,\n        name: name,\n        seriesId: seriesModel.id\n    });\n\n    data.each(function (idx) {\n        toggleItemSelected(\n            data.getItemGraphicEl(idx),\n            data.getItemLayout(idx),\n            seriesModel.isSelected(data.getName(idx)),\n            selectedOffset,\n            hasAnimation\n        );\n    });\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 */\nfunction toggleItemSelected(el, layout, isSelected, selectedOffset, hasAnimation) {\n    var midAngle = (layout.startAngle + layout.endAngle) / 2;\n\n    var dx = Math.cos(midAngle);\n    var dy = Math.sin(midAngle);\n\n    var offset = isSelected ? selectedOffset : 0;\n    var position = [dx * offset, dy * offset];\n\n    hasAnimation\n        // animateTo will stop revious animation like update transition\n        ? el.animate()\n            .when(200, {\n                position: position\n            })\n            .start('bounceOut')\n        : el.attr('position', position);\n}\n\n/**\n * Piece of pie including Sector, Label, LabelLine\n * @constructor\n * @extends {module:zrender/graphic/Group}\n */\nfunction PiePiece(data, idx) {\n\n    graphic.Group.call(this);\n\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\n    this.updateData(data, idx, true);\n}\n\nvar piePieceProto = PiePiece.prototype;\n\npiePieceProto.updateData = function (data, idx, firstCreate) {\n\n    var sector = this.childAt(0);\n    var labelLine = this.childAt(1);\n    var labelText = this.childAt(2);\n\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\n    var animationTypeUpdate = seriesModel.getShallow('animationTypeUpdate');\n\n    if (firstCreate) {\n        sector.setShape(sectorShape);\n\n        var animationType = seriesModel.getShallow('animationType');\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        }\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\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        }\n        else {\n            // Transition animation from the old shape\n            graphic.updateProps(sector, {\n                shape: sectorShape\n            }, seriesModel, idx);\n        }\n    }\n\n    // Update common style\n    var visualColor = data.getItemVisual(idx, 'color');\n\n    sector.useStyle(\n        zrUtil.defaults(\n            {\n                lineJoin: 'bevel',\n                fill: visualColor\n            },\n            itemModel.getModel('itemStyle').getItemStyle()\n        )\n    );\n    sector.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n\n    var cursorStyle = itemModel.getShallow('cursor');\n    cursorStyle && sector.attr('cursor', cursorStyle);\n\n    // Toggle selected\n    toggleItemSelected(\n        this,\n        data.getItemLayout(idx),\n        seriesModel.isSelected(null, idx),\n        seriesModel.get('selectedOffset'),\n        seriesModel.get('animation')\n    );\n\n    // Label and text animation should be applied only for transition type animation when update\n    var withAnimation = !firstCreate && animationTypeUpdate === 'transition';\n    this._updateLabel(data, idx, withAnimation);\n\n    this.highDownOnUpdate = (itemModel.get('hoverAnimation') && seriesModel.isAnimationEnabled())\n        ? function (fromState, toState) {\n            if (toState === 'emphasis') {\n                labelLine.ignore = labelLine.hoverIgnore;\n                labelText.ignore = labelText.hoverIgnore;\n\n                // Sector may has animation of updating data. Force to move to the last frame\n                // Or it may stopped on the wrong shape\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                sector.stopAnimation(true);\n                sector.animateTo({\n                    shape: {\n                        r: layout.r\n                    }\n                }, 300, 'elasticOut');\n            }\n        }\n        : null;\n\n    graphic.setHoverStyle(this);\n};\n\npiePieceProto._updateLabel = function (data, idx, withAnimation) {\n\n    var labelLine = this.childAt(1);\n    var labelText = this.childAt(2);\n\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 =\n        labelLine.ignore = labelLine.normalIgnore = labelLine.hoverIgnore = true;\n        return;\n    }\n\n    var targetLineShape = {\n        points: labelLayout.linePoints || [\n            [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y]\n        ]\n    };\n    var targetTextStyle = {\n        x: labelLayout.x,\n        y: labelLayout.y\n    };\n    if (withAnimation) {\n        graphic.updateProps(labelLine, {\n            shape: targetLineShape\n        }, seriesModel, idx);\n\n        graphic.updateProps(labelText, {\n            style: targetTextStyle\n        }, seriesModel, idx);\n    }\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\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\n    graphic.setLabelStyle(\n        labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel,\n        {\n            labelFetcher: data.hostModel,\n            labelDataIndex: idx,\n            defaultText: data.getName(idx),\n            autoColor: visualColor,\n            useInsideStyle: !!labelLayout.inside\n        },\n        {\n            textAlign: labelLayout.textAlign,\n            textVerticalAlign: labelLayout.verticalAlign,\n            opacity: data.getItemVisual(idx, 'opacity')\n        }\n    );\n\n    labelText.ignore = labelText.normalIgnore = !labelModel.get('show');\n    labelText.hoverIgnore = !labelHoverModel.get('show');\n\n    labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show');\n    labelLine.hoverIgnore = !labelLineHoverModel.get('show');\n\n    // Default use item visual color\n    labelLine.setStyle({\n        stroke: visualColor,\n        opacity: data.getItemVisual(idx, 'opacity')\n    });\n    labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle());\n\n    labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();\n\n    var smooth = labelLineModel.get('smooth');\n    if (smooth && smooth === true) {\n        smooth = 0.4;\n    }\n    labelLine.setShape({\n        smooth: smooth\n    });\n};\n\nzrUtil.inherits(PiePiece, graphic.Group);\n\n\n// Pie view\nvar PieView = ChartView.extend({\n\n    type: 'pie',\n\n    init: function () {\n        var sectorGroup = new graphic.Group();\n        this._sectorGroup = sectorGroup;\n    },\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\n        var hasAnimation = ecModel.get('animation');\n        var isFirstRender = !oldData;\n        var animationType = seriesModel.get('animationType');\n        var animationTypeUpdate = seriesModel.get('animationTypeUpdate');\n\n        var onSectorClick = zrUtil.curry(\n            updateDataSelected, this.uid, seriesModel, hasAnimation, api\n        );\n\n        var selectedMode = seriesModel.get('selectedMode');\n        data.diff(oldData)\n            .add(function (idx) {\n                var piePiece = new PiePiece(data, idx);\n                // Default expansion animation\n                if (isFirstRender && animationType !== 'scale') {\n                    piePiece.eachChild(function (child) {\n                        child.stopAnimation(true);\n                    });\n                }\n\n                selectedMode && piePiece.on('click', onSectorClick);\n\n                data.setItemGraphicEl(idx, piePiece);\n\n                group.add(piePiece);\n            })\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\n                piePiece.off('click');\n                selectedMode && piePiece.on('click', onSectorClick);\n                group.add(piePiece);\n                data.setItemGraphicEl(newIdx, piePiece);\n            })\n            .remove(function (idx) {\n                var piePiece = oldData.getItemGraphicEl(idx);\n                group.remove(piePiece);\n            })\n            .execute();\n\n        if (\n            hasAnimation && data.count() > 0\n            && (isFirstRender ? animationType !== 'scale' : animationTypeUpdate !== 'transition')\n        ) {\n            var shape = data.getItemLayout(0);\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\n            var removeClipPath = zrUtil.bind(group.removeClipPath, group);\n            group.setClipPath(this._createClipPath(\n                shape.cx, shape.cy, r, shape.startAngle, shape.clockwise, removeClipPath, seriesModel, isFirstRender\n            ));\n        }\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\n    dispose: function () {},\n\n    _createClipPath: function (\n        cx, cy, r, startAngle, clockwise, cb, seriesModel, isFirstRender\n    ) {\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\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\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        if (itemLayout) {\n            var dx = point[0] - itemLayout.cx;\n            var dy = point[1] - itemLayout.cy;\n            var radius = Math.sqrt(dx * dx + dy * dy);\n            return radius <= itemLayout.r && radius >= itemLayout.r0;\n        }\n    }\n\n});\n\nexport default PieView;\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default function (seriesType, actionInfos) {\n    zrUtil.each(actionInfos, function (actionInfo) {\n        actionInfo.update = 'updateView';\n        /**\n         * @payload\n         * @property {string} seriesName\n         * @property {string} name\n         */\n        echarts.registerAction(actionInfo, function (payload, ecModel) {\n            var selected = {};\n            ecModel.eachComponent(\n                {mainType: 'series', subType: seriesType, query: payload},\n                function (seriesModel) {\n                    if (seriesModel[actionInfo.method]) {\n                        seriesModel[actionInfo.method](\n                            payload.name,\n                            payload.dataIndex\n                        );\n                    }\n                    var data = seriesModel.getData();\n                    // Create selected map\n                    data.each(function (idx) {\n                        var name = data.getName(idx);\n                        selected[name] = seriesModel.isSelected(name)\n                            || false;\n                    });\n                }\n            );\n            return {\n                name: payload.name,\n                selected: selected,\n                seriesId: payload.seriesId\n            };\n        });\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Pick color from palette for each data item.\n// Applicable for charts that require applying color palette\n// in data level (like pie, funnel, chord).\nimport {createHashMap} from 'zrender/src/core/util';\n\nexport default function (seriesType) {\n    return {\n        getTargetSeries: function (ecModel) {\n            // Pie and funnel may use diferrent scope\n            var paletteScope = {};\n            var seiresModelMap = createHashMap();\n\n            ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n                seriesModel.__paletteScope = paletteScope;\n                seiresModelMap.set(seriesModel.uid, seriesModel);\n            });\n\n            return seiresModelMap;\n        },\n        reset: function (seriesModel, ecModel) {\n            var dataAll = seriesModel.getRawData();\n            var idxMap = {};\n            var data = seriesModel.getData();\n\n            data.each(function (idx) {\n                var rawIdx = data.getRawIndex(idx);\n                idxMap[rawIdx] = idx;\n            });\n\n            dataAll.each(function (rawIdx) {\n                var filteredIdx = idxMap[rawIdx];\n\n                // If series.itemStyle.normal.color is a function. itemVisual may be encoded\n                var singleDataColor = filteredIdx != null\n                    && data.getItemVisual(filteredIdx, 'color', true);\n\n                var singleDataBorderColor = filteredIdx != null\n                    && data.getItemVisual(filteredIdx, 'borderColor', true);\n\n                var itemModel;\n                if (!singleDataColor || !singleDataBorderColor) {\n                    // FIXME Performance\n                    itemModel = dataAll.getItemModel(rawIdx);\n                }\n\n                if (!singleDataColor) {\n                    var color = itemModel.get('itemStyle.color')\n                        || seriesModel.getColorFromPalette(\n                            dataAll.getName(rawIdx) || (rawIdx + ''), seriesModel.__paletteScope,\n                            dataAll.count()\n                        );\n                    // Legend may use the visual info in data before processed\n                    dataAll.setItemVisual(rawIdx, 'color', color);\n\n                    // Data is not filtered\n                    if (filteredIdx != null) {\n                        data.setItemVisual(filteredIdx, 'color', color);\n                    }\n                }\n                else {\n                    // Set data all color for legend\n                    dataAll.setItemVisual(rawIdx, 'color', singleDataColor);\n                }\n\n                if (!singleDataBorderColor) {\n                    var borderColor = itemModel.get('itemStyle.borderColor');\n                    // Legend may use the visual info in data before processed\n                    dataAll.setItemVisual(rawIdx, 'borderColor', borderColor);\n\n                    // Data is not filtered\n                    if (filteredIdx != null) {\n                        data.setItemVisual(filteredIdx, 'borderColor', borderColor);\n                    }\n                }\n                else {\n                    // Set data all borderColor for legend\n                    dataAll.setItemVisual(rawIdx, 'borderColor', singleDataBorderColor);\n                }\n            });\n        }\n    };\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// FIXME emphasis label position is not same with normal label position\n\nimport * as textContain from 'zrender/src/contain/text';\n\nvar RADIAN = Math.PI / 180;\n\nfunction adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) {\n    list.sort(function (a, b) {\n        return a.y - b.y;\n    });\n\n    function shiftDown(start, end, delta, dir) {\n        for (var j = start; j < end; j++) {\n            list[j].y += delta;\n            if (j > start\n                && j + 1 < end\n                && list[j + 1].y > list[j].y + list[j].height\n            ) {\n                shiftUp(j, delta / 2);\n                return;\n            }\n        }\n\n        shiftUp(end - 1, delta / 2);\n    }\n\n    function shiftUp(end, delta) {\n        for (var j = end; j >= 0; j--) {\n            list[j].y -= delta;\n            if (j > 0\n                && list[j].y > list[j - 1].y + list[j - 1].height\n            ) {\n                break;\n            }\n        }\n    }\n\n    function changeX(list, isDownList, cx, cy, r, dir) {\n        var lastDeltaX = dir > 0\n            ? isDownList                // right-side\n                ? Number.MAX_VALUE      // down\n                : 0                     // up\n            : isDownList                // left-side\n                ? Number.MAX_VALUE      // down\n                : 0;                    // up\n\n        for (var i = 0, l = list.length; i < l; i++) {\n            var deltaY = Math.abs(list[i].y - cy);\n            var length = list[i].len;\n            var length2 = list[i].len2;\n            var deltaX = (deltaY < r + length)\n                ? Math.sqrt(\n                        (r + length + length2) * (r + length + length2)\n                        - deltaY * deltaY\n                    )\n                : Math.abs(list[i].x - cx);\n            if (isDownList && deltaX >= lastDeltaX) {\n                // right-down, left-down\n                deltaX = lastDeltaX - 10;\n            }\n            if (!isDownList && deltaX <= lastDeltaX) {\n                // right-up, left-up\n                deltaX = lastDeltaX + 10;\n            }\n\n            list[i].x = cx + deltaX * dir;\n            lastDeltaX = deltaX;\n        }\n    }\n\n    var lastY = 0;\n    var delta;\n    var len = list.length;\n    var upList = [];\n    var downList = [];\n    for (var i = 0; i < len; i++) {\n        delta = list[i].y - lastY;\n        if (delta < 0) {\n            shiftDown(i, len, -delta, dir);\n        }\n        lastY = list[i].y + list[i].height;\n    }\n    if (viewHeight - lastY < 0) {\n        shiftUp(len - 1, lastY - viewHeight);\n    }\n    for (var i = 0; i < len; i++) {\n        if (list[i].y >= cy) {\n            downList.push(list[i]);\n        }\n        else {\n            upList.push(list[i]);\n        }\n    }\n    changeX(upList, false, cx, cy, r, dir);\n    changeX(downList, true, cx, cy, r, dir);\n}\n\nfunction avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight) {\n    var leftList = [];\n    var rightList = [];\n    for (var i = 0; i < labelLayoutList.length; i++) {\n        if (isPositionCenter(labelLayoutList[i])) {\n            continue;\n        }\n        if (labelLayoutList[i].x < cx) {\n            leftList.push(labelLayoutList[i]);\n        }\n        else {\n            rightList.push(labelLayoutList[i]);\n        }\n    }\n\n    adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight);\n    adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight);\n\n    for (var i = 0; i < labelLayoutList.length; i++) {\n        if (isPositionCenter(labelLayoutList[i])) {\n            continue;\n        }\n        var linePoints = labelLayoutList[i].linePoints;\n        if (linePoints) {\n            var dist = linePoints[1][0] - linePoints[2][0];\n            if (labelLayoutList[i].x < cx) {\n                linePoints[2][0] = labelLayoutList[i].x + 3;\n            }\n            else {\n                linePoints[2][0] = labelLayoutList[i].x - 3;\n            }\n            linePoints[1][1] = linePoints[2][1] = labelLayoutList[i].y;\n            linePoints[1][0] = linePoints[2][0] + dist;\n        }\n    }\n}\n\nfunction isPositionCenter(layout) {\n    // Not change x for center label\n    return layout.position === 'center';\n}\n\nexport default function (seriesModel, r, viewWidth, viewHeight, sum) {\n    var data = seriesModel.getData();\n    var labelLayoutList = [];\n    var cx;\n    var cy;\n    var hasLabelRotate = false;\n    var minShowLabelRadian = (seriesModel.get('minShowLabelAngle') || 0) * RADIAN;\n\n    data.each(function (idx) {\n        var layout = data.getItemLayout(idx);\n\n        var itemModel = data.getItemModel(idx);\n        var labelModel = itemModel.getModel('label');\n        // Use position in normal or emphasis\n        var labelPosition = labelModel.get('position') || itemModel.get('emphasis.label.position');\n\n        var labelLineModel = itemModel.getModel('labelLine');\n        var labelLineLen = labelLineModel.get('length');\n        var labelLineLen2 = labelLineModel.get('length2');\n\n        if (layout.angle < minShowLabelRadian) {\n            return;\n        }\n\n        var midAngle = (layout.startAngle + layout.endAngle) / 2;\n        var dx = Math.cos(midAngle);\n        var dy = Math.sin(midAngle);\n\n        var textX;\n        var textY;\n        var linePoints;\n        var textAlign;\n\n        cx = layout.cx;\n        cy = layout.cy;\n\n        var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';\n        if (labelPosition === 'center') {\n            textX = layout.cx;\n            textY = layout.cy;\n            textAlign = 'center';\n        }\n        else {\n            var x1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dx : layout.r * dx) + cx;\n            var y1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dy : layout.r * dy) + cy;\n\n            textX = x1 + dx * 3;\n            textY = y1 + dy * 3;\n\n            if (!isLabelInside) {\n                // For roseType\n                var x2 = x1 + dx * (labelLineLen + r - layout.r);\n                var y2 = y1 + dy * (labelLineLen + r - layout.r);\n                var x3 = x2 + ((dx < 0 ? -1 : 1) * labelLineLen2);\n                var y3 = y2;\n\n                textX = x3 + (dx < 0 ? -5 : 5);\n                textY = y3;\n                linePoints = [[x1, y1], [x2, y2], [x3, y3]];\n            }\n\n            textAlign = isLabelInside ? 'center' : (dx > 0 ? 'left' : 'right');\n        }\n        var font = labelModel.getFont();\n\n        var labelRotate;\n        var rotate = labelModel.get('rotate');\n        if (typeof rotate === 'number') {\n            labelRotate = rotate * (Math.PI / 180);\n        }\n        else {\n            labelRotate = rotate\n                ? (dx < 0 ? -midAngle + Math.PI : -midAngle)\n                : 0;\n        }\n        var text = seriesModel.getFormattedLabel(idx, 'normal')\n                    || data.getName(idx);\n        var textRect = textContain.getBoundingRect(\n            text, font, textAlign, 'top'\n        );\n        hasLabelRotate = !!labelRotate;\n        layout.label = {\n            x: textX,\n            y: textY,\n            position: labelPosition,\n            height: textRect.height,\n            len: labelLineLen,\n            len2: labelLineLen2,\n            linePoints: linePoints,\n            textAlign: textAlign,\n            verticalAlign: 'middle',\n            rotation: labelRotate,\n            inside: isLabelInside\n        };\n\n        // Not layout the inside label\n        if (!isLabelInside) {\n            labelLayoutList.push(layout.label);\n        }\n    });\n    if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) {\n        avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight);\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\nimport {parsePercent, linearMap} from '../../util/number';\nimport labelLayout from './labelLayout';\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar PI2 = Math.PI * 2;\nvar RADIAN = Math.PI / 180;\n\nexport default function (seriesType, ecModel, api, payload) {\n    ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n        var data = seriesModel.getData();\n        var valueDim = data.mapDimension('value');\n\n        var center = seriesModel.get('center');\n        var radius = seriesModel.get('radius');\n\n        if (!zrUtil.isArray(radius)) {\n            radius = [0, radius];\n        }\n        if (!zrUtil.isArray(center)) {\n            center = [center, center];\n        }\n\n        var width = api.getWidth();\n        var height = api.getHeight();\n        var size = Math.min(width, height);\n        var cx = parsePercent(center[0], width);\n        var cy = parsePercent(center[1], height);\n        var r0 = parsePercent(radius[0], size / 2);\n        var r = parsePercent(radius[1], size / 2);\n\n        var startAngle = -seriesModel.get('startAngle') * RADIAN;\n\n        var minAngle = seriesModel.get('minAngle') * RADIAN;\n\n        var validDataCount = 0;\n        data.each(valueDim, function (value) {\n            !isNaN(value) && validDataCount++;\n        });\n\n        var sum = data.getSum(valueDim);\n        // Sum may be 0\n        var unitRadian = Math.PI / (sum || validDataCount) * 2;\n\n        var clockwise = seriesModel.get('clockwise');\n\n        var roseType = seriesModel.get('roseType');\n        var stillShowZeroSum = seriesModel.get('stillShowZeroSum');\n\n        // [0...max]\n        var extent = data.getDataExtent(valueDim);\n        extent[0] = 0;\n\n        // In the case some sector angle is smaller than minAngle\n        var restAngle = PI2;\n        var valueSumLargerThanMinAngle = 0;\n\n        var currentAngle = startAngle;\n        var dir = clockwise ? 1 : -1;\n\n        data.each(valueDim, function (value, idx) {\n            var angle;\n            if (isNaN(value)) {\n                data.setItemLayout(idx, {\n                    angle: NaN,\n                    startAngle: NaN,\n                    endAngle: NaN,\n                    clockwise: clockwise,\n                    cx: cx,\n                    cy: cy,\n                    r0: r0,\n                    r: roseType\n                        ? NaN\n                        : r\n                });\n                return;\n            }\n\n            // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样？\n            if (roseType !== 'area') {\n                angle = (sum === 0 && stillShowZeroSum)\n                    ? unitRadian : (value * unitRadian);\n            }\n            else {\n                angle = PI2 / validDataCount;\n            }\n\n            if (angle < minAngle) {\n                angle = minAngle;\n                restAngle -= minAngle;\n            }\n            else {\n                valueSumLargerThanMinAngle += value;\n            }\n\n            var endAngle = currentAngle + dir * angle;\n            data.setItemLayout(idx, {\n                angle: angle,\n                startAngle: currentAngle,\n                endAngle: endAngle,\n                clockwise: clockwise,\n                cx: cx,\n                cy: cy,\n                r0: r0,\n                r: roseType\n                    ? linearMap(value, extent, [r0, r])\n                    : r\n            });\n\n            currentAngle = endAngle;\n        });\n\n        // Some sector is constrained by minAngle\n        // Rest sectors needs recalculate angle\n        if (restAngle < PI2 && validDataCount) {\n            // Average the angle if rest angle is not enough after all angles is\n            // Constrained by minAngle\n            if (restAngle <= 1e-3) {\n                var angle = PI2 / validDataCount;\n                data.each(valueDim, function (value, idx) {\n                    if (!isNaN(value)) {\n                        var layout = data.getItemLayout(idx);\n                        layout.angle = angle;\n                        layout.startAngle = startAngle + dir * idx * angle;\n                        layout.endAngle = startAngle + dir * (idx + 1) * angle;\n                    }\n                });\n            }\n            else {\n                unitRadian = restAngle / valueSumLargerThanMinAngle;\n                currentAngle = startAngle;\n                data.each(valueDim, function (value, idx) {\n                    if (!isNaN(value)) {\n                        var layout = data.getItemLayout(idx);\n                        var angle = layout.angle === minAngle\n                            ? minAngle : value * unitRadian;\n                        layout.startAngle = currentAngle;\n                        layout.endAngle = currentAngle + dir * angle;\n                        currentAngle += dir * angle;\n                    }\n                });\n            }\n        }\n\n        labelLayout(seriesModel, r, width, height);\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\nexport default function (seriesType) {\n    return {\n        seriesType: seriesType,\n        reset: function (seriesModel, ecModel) {\n            var legendModels = ecModel.findComponents({\n                mainType: 'legend'\n            });\n            if (!legendModels || !legendModels.length) {\n                return;\n            }\n            var data = seriesModel.getData();\n            data.filterSelf(function (idx) {\n                var name = data.getName(idx);\n                // If in any legend component the status is not selected.\n                for (var i = 0; i < legendModels.length; i++) {\n                    if (!legendModels[i].isSelected(name)) {\n                        return false;\n                    }\n                }\n                return true;\n            });\n        }\n    };\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\n\nimport './pie/PieSeries';\nimport './pie/PieView';\n\nimport createDataSelectAction from '../action/createDataSelectAction';\nimport dataColor from '../visual/dataColor';\nimport pieLayout from './pie/pieLayout';\nimport dataFilter from '../processor/dataFilter';\n\ncreateDataSelectAction('pie', [{\n    type: 'pieToggleSelect',\n    event: 'pieselectchanged',\n    method: 'toggleSelected'\n}, {\n    type: 'pieSelect',\n    event: 'pieselected',\n    method: 'select'\n}, {\n    type: 'pieUnSelect',\n    event: 'pieunselected',\n    method: 'unSelect'\n}]);\n\necharts.registerVisual(dataColor('pie'));\necharts.registerLayout(zrUtil.curry(pieLayout, 'pie'));\necharts.registerProcessor(dataFilter('pie'));","/*\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\nimport createListFromArray from '../helper/createListFromArray';\nimport SeriesModel from '../../model/Series';\n\nexport default SeriesModel.extend({\n\n    type: 'series.scatter',\n\n    dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],\n\n    getInitialData: function (option, ecModel) {\n        return createListFromArray(this.getSource(), this);\n    },\n\n    brushSelector: 'point',\n\n    getProgressive: function () {\n        var progressive = this.option.progressive;\n        if (progressive == null) {\n            // PENDING\n            return this.option.large ? 5e3 : this.get('progressive');\n        }\n        return progressive;\n    },\n\n    getProgressiveThreshold: function () {\n        var progressiveThreshold = this.option.progressiveThreshold;\n        if (progressiveThreshold == null) {\n            // PENDING\n            return this.option.large ? 1e4 : this.get('progressiveThreshold');\n        }\n        return progressiveThreshold;\n    },\n\n    defaultOption: {\n        coordinateSystem: 'cartesian2d',\n        zlevel: 0,\n        z: 2,\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n        // Cartesian coordinate system\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // Polar coordinate system\n        // polarIndex: 0,\n\n        // Geo coordinate system\n        // geoIndex: 0,\n\n        // symbol: null,        // 图形类型\n        symbolSize: 10,          // 图形大小，半宽（半径）参数，当图形为方向或菱形则总宽度为symbolSize * 2\n        // symbolRotate: null,  // 图形旋转控制\n\n        large: false,\n        // Available when large is true\n        largeThreshold: 2000,\n        // cursor: null,\n\n        // label: {\n            // show: false\n            // distance: 5,\n            // formatter: 标签文本格式器，同Tooltip.formatter，不支持异步回调\n            // position: 默认自适应，水平布局为'top'，垂直布局为'right'，可选为\n            //           'inside'|'left'|'right'|'top'|'bottom'\n            // 默认使用全局文本样式，详见TEXTSTYLE\n        // },\n        itemStyle: {\n            opacity: 0.8\n            // color: 各异\n        },\n\n        // If clip the overflow graphics\n        // Works on cartesian / polar series\n        clip: true\n\n        // progressive: null\n    }\n\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\n\n// TODO Batch by color\n\nimport * as graphic from '../../util/graphic';\nimport {createSymbol} from '../../util/symbol';\nimport IncrementalDisplayable from 'zrender/src/graphic/IncrementalDisplayable';\n\nvar BOOST_SIZE_THRESHOLD = 4;\n\nvar LargeSymbolPath = graphic.extendShape({\n\n    shape: {\n        points: null\n    },\n\n    symbolProxy: null,\n\n    softClipShape: null,\n\n    buildPath: function (path, shape) {\n        var points = shape.points;\n        var size = shape.size;\n\n        var symbolProxy = this.symbolProxy;\n        var symbolProxyShape = symbolProxy.shape;\n        var ctx = path.getContext ? path.getContext() : path;\n        var canBoost = ctx && size[0] < BOOST_SIZE_THRESHOLD;\n\n        // Do draw in afterBrush.\n        if (canBoost) {\n            return;\n        }\n\n        for (var i = 0; i < points.length;) {\n            var x = points[i++];\n            var y = points[i++];\n\n            if (isNaN(x) || isNaN(y)) {\n                continue;\n            }\n            if (this.softClipShape && !this.softClipShape.contain(x, y)) {\n                continue;\n            }\n\n            symbolProxyShape.x = x - size[0] / 2;\n            symbolProxyShape.y = y - size[1] / 2;\n            symbolProxyShape.width = size[0];\n            symbolProxyShape.height = size[1];\n\n            symbolProxy.buildPath(path, symbolProxyShape, true);\n        }\n    },\n\n    afterBrush: function (ctx) {\n        var shape = this.shape;\n        var points = shape.points;\n        var size = shape.size;\n        var canBoost = size[0] < BOOST_SIZE_THRESHOLD;\n\n        if (!canBoost) {\n            return;\n        }\n\n        this.setTransform(ctx);\n        // PENDING If style or other canvas status changed?\n        for (var i = 0; i < points.length;) {\n            var x = points[i++];\n            var y = points[i++];\n            if (isNaN(x) || isNaN(y)) {\n                continue;\n            }\n            if (this.softClipShape && !this.softClipShape.contain(x, y)) {\n                continue;\n            }\n            // fillRect is faster than building a rect path and draw.\n            // And it support light globalCompositeOperation.\n            ctx.fillRect(\n                x - size[0] / 2, y - size[1] / 2,\n                size[0], size[1]\n            );\n        }\n\n        this.restoreTransform(ctx);\n    },\n\n    findDataIndex: function (x, y) {\n        // TODO ???\n        // Consider transform\n\n        var shape = this.shape;\n        var points = shape.points;\n        var size = shape.size;\n\n        var w = Math.max(size[0], 4);\n        var h = Math.max(size[1], 4);\n\n        // Not consider transform\n        // Treat each element as a rect\n        // top down traverse\n        for (var idx = points.length / 2 - 1; idx >= 0; idx--) {\n            var i = idx * 2;\n            var x0 = points[i] - w / 2;\n            var y0 = points[i + 1] - h / 2;\n            if (x >= x0 && y >= y0 && x <= x0 + w && y <= y0 + h) {\n                return idx;\n            }\n        }\n\n        return -1;\n    }\n});\n\nfunction LargeSymbolDraw() {\n    this.group = new graphic.Group();\n}\n\nvar largeSymbolProto = LargeSymbolDraw.prototype;\n\nlargeSymbolProto.isPersistent = function () {\n    return !this._incremental;\n};\n\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n * @param {Object} opt\n * @param {Object} [opt.clipShape]\n */\nlargeSymbolProto.updateData = function (data, opt) {\n    this.group.removeAll();\n    var symbolEl = new LargeSymbolPath({\n        rectHover: true,\n        cursor: 'default'\n    });\n\n    symbolEl.setShape({\n        points: data.getLayout('symbolPoints')\n    });\n    this._setCommon(symbolEl, data, false, opt);\n    this.group.add(symbolEl);\n\n    this._incremental = null;\n};\n\nlargeSymbolProto.updateLayout = function (data) {\n    if (this._incremental) {\n        return;\n    }\n\n    var points = data.getLayout('symbolPoints');\n    this.group.eachChild(function (child) {\n        if (child.startIndex != null) {\n            var len = (child.endIndex - child.startIndex) * 2;\n            var byteOffset = child.startIndex * 4 * 2;\n            points = new Float32Array(points.buffer, byteOffset, len);\n        }\n        child.setShape('points', points);\n    });\n};\n\nlargeSymbolProto.incrementalPrepareUpdate = function (data) {\n    this.group.removeAll();\n\n    this._clearIncremental();\n    // Only use incremental displayables when data amount is larger than 2 million.\n    // PENDING Incremental data?\n    if (data.count() > 2e6) {\n        if (!this._incremental) {\n            this._incremental = new IncrementalDisplayable({\n                silent: true\n            });\n        }\n        this.group.add(this._incremental);\n    }\n    else {\n        this._incremental = null;\n    }\n};\n\nlargeSymbolProto.incrementalUpdate = function (taskParams, data, opt) {\n    var symbolEl;\n    if (this._incremental) {\n        symbolEl = new LargeSymbolPath();\n        this._incremental.addDisplayable(symbolEl, true);\n    }\n    else {\n        symbolEl = new LargeSymbolPath({\n            rectHover: true,\n            cursor: 'default',\n            startIndex: taskParams.start,\n            endIndex: taskParams.end\n        });\n        symbolEl.incremental = true;\n        this.group.add(symbolEl);\n    }\n\n    symbolEl.setShape({\n        points: data.getLayout('symbolPoints')\n    });\n    this._setCommon(symbolEl, data, !!this._incremental, opt);\n};\n\nlargeSymbolProto._setCommon = function (symbolEl, data, isIncremental, opt) {\n    var hostModel = data.hostModel;\n\n    opt = opt || {};\n    // TODO\n    // if (data.hasItemVisual.symbolSize) {\n    //     // TODO typed array?\n    //     symbolEl.setShape('sizes', data.mapArray(\n    //         function (idx) {\n    //             var size = data.getItemVisual(idx, 'symbolSize');\n    //             return (size instanceof Array) ? size : [size, size];\n    //         }\n    //     ));\n    // }\n    // else {\n    var size = data.getVisual('symbolSize');\n    symbolEl.setShape('size', (size instanceof Array) ? size : [size, size]);\n    // }\n\n    symbolEl.softClipShape = opt.clipShape || null;\n    // Create symbolProxy to build path for each data\n    symbolEl.symbolProxy = createSymbol(\n        data.getVisual('symbol'), 0, 0, 0, 0\n    );\n    // Use symbolProxy setColor method\n    symbolEl.setColor = symbolEl.symbolProxy.setColor;\n\n    var extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD;\n    symbolEl.useStyle(\n        // Draw shadow when doing fillRect is extremely slow.\n        hostModel.getModel('itemStyle').getItemStyle(extrudeShadow ? ['color', 'shadowBlur', 'shadowColor'] : ['color'])\n    );\n\n    var visualColor = data.getVisual('color');\n    if (visualColor) {\n        symbolEl.setColor(visualColor);\n    }\n\n    if (!isIncremental) {\n        // Enable tooltip\n        // PENDING May have performance issue when path is extremely large\n        symbolEl.seriesIndex = hostModel.seriesIndex;\n        symbolEl.on('mousemove', function (e) {\n            symbolEl.dataIndex = null;\n            var dataIndex = symbolEl.findDataIndex(e.offsetX, e.offsetY);\n            if (dataIndex >= 0) {\n                // Provide dataIndex for tooltip\n                symbolEl.dataIndex = dataIndex + (symbolEl.startIndex || 0);\n            }\n        });\n    }\n};\n\nlargeSymbolProto.remove = function () {\n    this._clearIncremental();\n    this._incremental = null;\n    this.group.removeAll();\n};\n\nlargeSymbolProto._clearIncremental = function () {\n    var incremental = this._incremental;\n    if (incremental) {\n        incremental.clearDisplaybles();\n    }\n};\n\nexport default LargeSymbolDraw;","/*\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\nimport * as echarts from '../../echarts';\nimport SymbolDraw from '../helper/SymbolDraw';\nimport LargeSymbolDraw from '../helper/LargeSymbolDraw';\n\nimport pointsLayout from '../../layout/points';\n\necharts.extendChartView({\n\n    type: 'scatter',\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n\n        var symbolDraw = this._updateSymbolDraw(data, seriesModel);\n\n        symbolDraw.updateData(data, {\n            // TODO\n            // If this parameter should be a shape or a bounding volume\n            // shape will be more general.\n            // But bounding volume like bounding rect will be much faster in the contain calculation\n            clipShape: this._getClipShape(seriesModel)\n        });\n\n        this._finished = true;\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        var symbolDraw = this._updateSymbolDraw(data, seriesModel);\n\n        symbolDraw.incrementalPrepareUpdate(data);\n\n        this._finished = false;\n    },\n\n    incrementalRender: function (taskParams, seriesModel, ecModel) {\n        this._symbolDraw.incrementalUpdate(taskParams, seriesModel.getData(), {\n            clipShape: this._getClipShape(seriesModel)\n        });\n\n        this._finished = taskParams.end === seriesModel.getData().count();\n    },\n\n    updateTransform: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        // Must mark group dirty and make sure the incremental layer will be cleared\n        // PENDING\n        this.group.dirty();\n\n        if (!this._finished || data.count() > 1e4 || !this._symbolDraw.isPersistent()) {\n            return {\n                update: true\n            };\n        }\n        else {\n            var res = pointsLayout().reset(seriesModel);\n            if (res.progress) {\n                res.progress({ start: 0, end: data.count() }, data);\n            }\n\n            this._symbolDraw.updateLayout(data);\n        }\n    },\n\n    _getClipShape: function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n        var clipArea = coordSys && coordSys.getArea && coordSys.getArea();\n        return seriesModel.get('clip', true) ? clipArea : null;\n    },\n\n    _updateSymbolDraw: function (data, seriesModel) {\n        var symbolDraw = this._symbolDraw;\n        var pipelineContext = seriesModel.pipelineContext;\n        var isLargeDraw = pipelineContext.large;\n\n        if (!symbolDraw || isLargeDraw !== this._isLargeDraw) {\n            symbolDraw && symbolDraw.remove();\n            symbolDraw = this._symbolDraw = isLargeDraw\n                ? new LargeSymbolDraw()\n                : new SymbolDraw();\n            this._isLargeDraw = isLargeDraw;\n            this.group.removeAll();\n        }\n\n        this.group.add(symbolDraw.group);\n\n        return symbolDraw;\n    },\n\n    remove: function (ecModel, api) {\n        this._symbolDraw && this._symbolDraw.remove(true);\n        this._symbolDraw = null;\n    },\n\n    dispose: function () {}\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\nimport * as echarts from '../echarts';\n// import * as zrUtil from 'zrender/src/core/util';\n\nimport './scatter/ScatterSeries';\nimport './scatter/ScatterView';\n\nimport visualSymbol from '../visual/symbol';\nimport layoutPoints from '../layout/points';\n\n// In case developer forget to include grid component\nimport '../component/gridSimple';\n\necharts.registerVisual(visualSymbol('scatter', 'circle'));\necharts.registerLayout(layoutPoints('scatter'));\n\n// echarts.registerProcessor(function (ecModel, api) {\n//     ecModel.eachSeriesByType('scatter', function (seriesModel) {\n//         var data = seriesModel.getData();\n//         var coordSys = seriesModel.coordinateSystem;\n//         if (coordSys.type !== 'geo') {\n//             return;\n//         }\n//         var startPt = coordSys.pointToData([0, 0]);\n//         var endPt = coordSys.pointToData([api.getWidth(), api.getHeight()]);\n\n//         var dims = zrUtil.map(coordSys.dimensions, function (dim) {\n//             return data.mapDimension(dim);\n//         });\n//         var range = {};\n//         range[dims[0]] = [Math.min(startPt[0], endPt[0]), Math.max(startPt[0], endPt[0])];\n//         range[dims[1]] = [Math.min(startPt[1], endPt[1]), Math.max(startPt[1], endPt[1])];\n\n//         data.selectRange(range);\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport Axis from '../Axis';\n\nfunction IndicatorAxis(dim, scale, radiusExtent) {\n    Axis.call(this, dim, scale, radiusExtent);\n\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = 'value';\n\n    this.angle = 0;\n\n    /**\n     * Indicator name\n     * @type {string}\n     */\n    this.name = '';\n    /**\n     * @type {module:echarts/model/Model}\n     */\n    this.model;\n}\n\nzrUtil.inherits(IndicatorAxis, Axis);\n\nexport default IndicatorAxis;","/*\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// TODO clockwise\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport IndicatorAxis from './IndicatorAxis';\nimport IntervalScale from '../../scale/Interval';\nimport * as numberUtil from '../../util/number';\nimport {\n    getScaleExtent,\n    niceScaleExtent\n} from '../axisHelper';\nimport CoordinateSystem from '../../CoordinateSystem';\nimport LogScale from '../../scale/Log';\n\nfunction Radar(radarModel, ecModel, api) {\n\n    this._model = radarModel;\n    /**\n     * Radar dimensions\n     * @type {Array.<string>}\n     */\n    this.dimensions = [];\n\n    this._indicatorAxes = zrUtil.map(radarModel.getIndicatorModels(), function (indicatorModel, idx) {\n        var dim = 'indicator_' + idx;\n        var indicatorAxis = new IndicatorAxis(dim,\n            (indicatorModel.get('axisType') === 'log') ? new LogScale() : new IntervalScale());\n        indicatorAxis.name = indicatorModel.get('name');\n        // Inject model and axis\n        indicatorAxis.model = indicatorModel;\n        indicatorModel.axis = indicatorAxis;\n        this.dimensions.push(dim);\n        return indicatorAxis;\n    }, this);\n\n    this.resize(radarModel, api);\n\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.cx;\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.cy;\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.r;\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.r0;\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.startAngle;\n}\n\nRadar.prototype.getIndicatorAxes = function () {\n    return this._indicatorAxes;\n};\n\nRadar.prototype.dataToPoint = function (value, indicatorIndex) {\n    var indicatorAxis = this._indicatorAxes[indicatorIndex];\n\n    return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex);\n};\n\nRadar.prototype.coordToPoint = function (coord, indicatorIndex) {\n    var indicatorAxis = this._indicatorAxes[indicatorIndex];\n    var angle = indicatorAxis.angle;\n    var x = this.cx + coord * Math.cos(angle);\n    var y = this.cy - coord * Math.sin(angle);\n    return [x, y];\n};\n\nRadar.prototype.pointToData = function (pt) {\n    var dx = pt[0] - this.cx;\n    var dy = pt[1] - this.cy;\n    var radius = Math.sqrt(dx * dx + dy * dy);\n    dx /= radius;\n    dy /= radius;\n\n    var radian = Math.atan2(-dy, dx);\n\n    // Find the closest angle\n    // FIXME index can calculated directly\n    var minRadianDiff = Infinity;\n    var closestAxis;\n    var closestAxisIdx = -1;\n    for (var i = 0; i < this._indicatorAxes.length; i++) {\n        var indicatorAxis = this._indicatorAxes[i];\n        var diff = Math.abs(radian - indicatorAxis.angle);\n        if (diff < minRadianDiff) {\n            closestAxis = indicatorAxis;\n            closestAxisIdx = i;\n            minRadianDiff = diff;\n        }\n    }\n\n    return [closestAxisIdx, +(closestAxis && closestAxis.coordToData(radius))];\n};\n\nRadar.prototype.resize = function (radarModel, api) {\n    var center = radarModel.get('center');\n    var viewWidth = api.getWidth();\n    var viewHeight = api.getHeight();\n    var viewSize = Math.min(viewWidth, viewHeight) / 2;\n    this.cx = numberUtil.parsePercent(center[0], viewWidth);\n    this.cy = numberUtil.parsePercent(center[1], viewHeight);\n\n    this.startAngle = radarModel.get('startAngle') * Math.PI / 180;\n\n    // radius may be single value like `20`, `'80%'`, or array like `[10, '80%']`\n    var radius = radarModel.get('radius');\n    if (typeof radius === 'string' || typeof radius === 'number') {\n        radius = [0, radius];\n    }\n    this.r0 = numberUtil.parsePercent(radius[0], viewSize);\n    this.r = numberUtil.parsePercent(radius[1], viewSize);\n\n    zrUtil.each(this._indicatorAxes, function (indicatorAxis, idx) {\n        indicatorAxis.setExtent(this.r0, this.r);\n        var angle = (this.startAngle + idx * Math.PI * 2 / this._indicatorAxes.length);\n        // Normalize to [-PI, PI]\n        angle = Math.atan2(Math.sin(angle), Math.cos(angle));\n        indicatorAxis.angle = angle;\n    }, this);\n};\n\nRadar.prototype.update = function (ecModel, api) {\n    var indicatorAxes = this._indicatorAxes;\n    var radarModel = this._model;\n    zrUtil.each(indicatorAxes, function (indicatorAxis) {\n        indicatorAxis.scale.setExtent(Infinity, -Infinity);\n    });\n    ecModel.eachSeriesByType('radar', function (radarSeries, idx) {\n        if (radarSeries.get('coordinateSystem') !== 'radar'\n            || ecModel.getComponent('radar', radarSeries.get('radarIndex')) !== radarModel\n        ) {\n            return;\n        }\n        var data = radarSeries.getData();\n        zrUtil.each(indicatorAxes, function (indicatorAxis) {\n            indicatorAxis.scale.unionExtentFromData(data, data.mapDimension(indicatorAxis.dim));\n        });\n    }, this);\n\n    var splitNumber = radarModel.get('splitNumber');\n\n    function increaseInterval(interval) {\n        var exp10 = Math.pow(10, Math.floor(Math.log(interval) / Math.LN10));\n        // Increase interval\n        var f = interval / exp10;\n        if (f === 2) {\n            f = 5;\n        }\n        else { // f is 2 or 5\n            f *= 2;\n        }\n        return f * exp10;\n    }\n    // Force all the axis fixing the maxSplitNumber.\n    zrUtil.each(indicatorAxes, function (indicatorAxis, idx) {\n        var rawExtent = getScaleExtent(indicatorAxis.scale, indicatorAxis.model);\n        niceScaleExtent(indicatorAxis.scale, indicatorAxis.model);\n\n        var axisModel = indicatorAxis.model;\n        var scale = indicatorAxis.scale;\n        var fixedMin = axisModel.getMin();\n        var fixedMax = axisModel.getMax();\n        var interval = scale.getInterval();\n\n        if (fixedMin != null && fixedMax != null) {\n            // User set min, max, divide to get new interval\n            scale.setExtent(+fixedMin, +fixedMax);\n            scale.setInterval(\n                (fixedMax - fixedMin) / splitNumber\n            );\n        }\n        else if (fixedMin != null) {\n            var max;\n            // User set min, expand extent on the other side\n            do {\n                max = fixedMin + interval * splitNumber;\n                scale.setExtent(+fixedMin, max);\n                // Interval must been set after extent\n                // FIXME\n                scale.setInterval(interval);\n\n                interval = increaseInterval(interval);\n            } while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1]));\n        }\n        else if (fixedMax != null) {\n            var min;\n            // User set min, expand extent on the other side\n            do {\n                min = fixedMax - interval * splitNumber;\n                scale.setExtent(min, +fixedMax);\n                scale.setInterval(interval);\n                interval = increaseInterval(interval);\n            } while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0]));\n        }\n        else {\n            var nicedSplitNumber = scale.getTicks().length - 1;\n            if (nicedSplitNumber > splitNumber) {\n                interval = increaseInterval(interval);\n            }\n            // PENDING\n            var center = Math.round((rawExtent[0] + rawExtent[1]) / 2 / interval) * interval;\n            var halfSplitNumber = Math.round(splitNumber / 2);\n            scale.setExtent(\n                numberUtil.round(center - halfSplitNumber * interval),\n                numberUtil.round(center + (splitNumber - halfSplitNumber) * interval)\n            );\n            scale.setInterval(interval);\n        }\n    });\n};\n\n/**\n * Radar dimensions is based on the data\n * @type {Array}\n */\nRadar.dimensions = [];\n\nRadar.create = function (ecModel, api) {\n    var radarList = [];\n    ecModel.eachComponent('radar', function (radarModel) {\n        var radar = new Radar(radarModel, ecModel, api);\n        radarList.push(radar);\n        radarModel.coordinateSystem = radar;\n    });\n    ecModel.eachSeriesByType('radar', function (radarSeries) {\n        if (radarSeries.get('coordinateSystem') === 'radar') {\n            // Inject coordinate system\n            radarSeries.coordinateSystem = radarList[radarSeries.get('radarIndex') || 0];\n        }\n    });\n    return radarList;\n};\n\nCoordinateSystem.register('radar', Radar);\n\nexport default Radar;","/*\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport axisDefault from '../axisDefault';\nimport Model from '../../model/Model';\nimport axisModelCommonMixin from '../axisModelCommonMixin';\n\nvar valueAxisDefault = axisDefault.valueAxis;\n\nfunction defaultsShow(opt, show) {\n    return zrUtil.defaults({\n        show: show\n    }, opt);\n}\n\nvar RadarModel = echarts.extendComponentModel({\n\n    type: 'radar',\n\n    optionUpdated: function () {\n        var boundaryGap = this.get('boundaryGap');\n        var splitNumber = this.get('splitNumber');\n        var scale = this.get('scale');\n        var axisLine = this.get('axisLine');\n        var axisTick = this.get('axisTick');\n        var axisType = this.get('axisType');\n        var axisLabel = this.get('axisLabel');\n        var nameTextStyle = this.get('name');\n        var showName = this.get('name.show');\n        var nameFormatter = this.get('name.formatter');\n        var nameGap = this.get('nameGap');\n        var triggerEvent = this.get('triggerEvent');\n\n        var indicatorModels = zrUtil.map(this.get('indicator') || [], function (indicatorOpt) {\n            // PENDING\n            if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) {\n                indicatorOpt.min = 0;\n            }\n            else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) {\n                indicatorOpt.max = 0;\n            }\n            var iNameTextStyle = nameTextStyle;\n            if (indicatorOpt.color != null) {\n                iNameTextStyle = zrUtil.defaults({color: indicatorOpt.color}, nameTextStyle);\n            }\n            // Use same configuration\n            indicatorOpt = zrUtil.merge(zrUtil.clone(indicatorOpt), {\n                boundaryGap: boundaryGap,\n                splitNumber: splitNumber,\n                scale: scale,\n                axisLine: axisLine,\n                axisTick: axisTick,\n                axisType: axisType,\n                axisLabel: axisLabel,\n                // Compatible with 2 and use text\n                name: indicatorOpt.text,\n                nameLocation: 'end',\n                nameGap: nameGap,\n                // min: 0,\n                nameTextStyle: iNameTextStyle,\n                triggerEvent: triggerEvent\n            }, false);\n            if (!showName) {\n                indicatorOpt.name = '';\n            }\n            if (typeof nameFormatter === 'string') {\n                var indName = indicatorOpt.name;\n                indicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : '');\n            }\n            else if (typeof nameFormatter === 'function') {\n                indicatorOpt.name = nameFormatter(\n                    indicatorOpt.name, indicatorOpt\n                );\n            }\n            var model = zrUtil.extend(\n                new Model(indicatorOpt, null, this.ecModel),\n                axisModelCommonMixin\n            );\n\n            // For triggerEvent.\n            model.mainType = 'radar';\n            model.componentIndex = this.componentIndex;\n\n            return model;\n        }, this);\n\n        this.getIndicatorModels = function () {\n            return indicatorModels;\n        };\n    },\n\n    defaultOption: {\n\n        zlevel: 0,\n\n        z: 0,\n\n        center: ['50%', '50%'],\n\n        radius: '75%',\n\n        startAngle: 90,\n\n        name: {\n            show: true\n            // formatter: null\n            // textStyle: {}\n        },\n\n        boundaryGap: [0, 0],\n\n        splitNumber: 5,\n\n        nameGap: 15,\n\n        scale: false,\n\n        // Polygon or circle\n        shape: 'polygon',\n\n        axisLine: zrUtil.merge(\n            {\n                lineStyle: {\n                    color: '#bbb'\n                }\n            },\n            valueAxisDefault.axisLine\n        ),\n        axisLabel: defaultsShow(valueAxisDefault.axisLabel, false),\n        axisTick: defaultsShow(valueAxisDefault.axisTick, false),\n        axisType: 'interval',\n        splitLine: defaultsShow(valueAxisDefault.splitLine, true),\n        splitArea: defaultsShow(valueAxisDefault.splitArea, true),\n\n        // {text, min, max}\n        indicator: []\n    }\n});\n\nexport default RadarModel;\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\nimport {__DEV__} from '../../config';\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport AxisBuilder from '../axis/AxisBuilder';\nimport * as graphic from '../../util/graphic';\n\nvar axisBuilderAttrs = [\n    'axisLine', 'axisTickLabel', 'axisName'\n];\n\nexport default echarts.extendComponentView({\n\n    type: 'radar',\n\n    render: function (radarModel, ecModel, api) {\n        var group = this.group;\n        group.removeAll();\n\n        this._buildAxes(radarModel);\n        this._buildSplitLineAndArea(radarModel);\n    },\n\n    _buildAxes: function (radarModel) {\n        var radar = radarModel.coordinateSystem;\n        var indicatorAxes = radar.getIndicatorAxes();\n        var axisBuilders = zrUtil.map(indicatorAxes, function (indicatorAxis) {\n            var axisBuilder = new AxisBuilder(indicatorAxis.model, {\n                position: [radar.cx, radar.cy],\n                rotation: indicatorAxis.angle,\n                labelDirection: -1,\n                tickDirection: -1,\n                nameDirection: 1\n            });\n            return axisBuilder;\n        });\n\n        zrUtil.each(axisBuilders, function (axisBuilder) {\n            zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n            this.group.add(axisBuilder.getGroup());\n        }, this);\n    },\n\n    _buildSplitLineAndArea: function (radarModel) {\n        var radar = radarModel.coordinateSystem;\n        var indicatorAxes = radar.getIndicatorAxes();\n        if (!indicatorAxes.length) {\n            return;\n        }\n        var shape = radarModel.get('shape');\n        var splitLineModel = radarModel.getModel('splitLine');\n        var splitAreaModel = radarModel.getModel('splitArea');\n        var lineStyleModel = splitLineModel.getModel('lineStyle');\n        var areaStyleModel = splitAreaModel.getModel('areaStyle');\n\n        var showSplitLine = splitLineModel.get('show');\n        var showSplitArea = splitAreaModel.get('show');\n        var splitLineColors = lineStyleModel.get('color');\n        var splitAreaColors = areaStyleModel.get('color');\n\n        splitLineColors = zrUtil.isArray(splitLineColors) ? splitLineColors : [splitLineColors];\n        splitAreaColors = zrUtil.isArray(splitAreaColors) ? splitAreaColors : [splitAreaColors];\n\n        var splitLines = [];\n        var splitAreas = [];\n\n        function getColorIndex(areaOrLine, areaOrLineColorList, idx) {\n            var colorIndex = idx % areaOrLineColorList.length;\n            areaOrLine[colorIndex] = areaOrLine[colorIndex] || [];\n            return colorIndex;\n        }\n\n        if (shape === 'circle') {\n            var ticksRadius = indicatorAxes[0].getTicksCoords();\n            var cx = radar.cx;\n            var cy = radar.cy;\n            for (var i = 0; i < ticksRadius.length; i++) {\n                if (showSplitLine) {\n                    var colorIndex = getColorIndex(splitLines, splitLineColors, i);\n                    splitLines[colorIndex].push(new graphic.Circle({\n                        shape: {\n                            cx: cx,\n                            cy: cy,\n                            r: ticksRadius[i].coord\n                        }\n                    }));\n                }\n                if (showSplitArea && i < ticksRadius.length - 1) {\n                    var colorIndex = getColorIndex(splitAreas, splitAreaColors, i);\n                    splitAreas[colorIndex].push(new graphic.Ring({\n                        shape: {\n                            cx: cx,\n                            cy: cy,\n                            r0: ticksRadius[i].coord,\n                            r: ticksRadius[i + 1].coord\n                        }\n                    }));\n                }\n            }\n        }\n        // Polyyon\n        else {\n            var realSplitNumber;\n            var axesTicksPoints = zrUtil.map(indicatorAxes, function (indicatorAxis, idx) {\n                var ticksCoords = indicatorAxis.getTicksCoords();\n                realSplitNumber = realSplitNumber == null\n                    ? ticksCoords.length - 1\n                    : Math.min(ticksCoords.length - 1, realSplitNumber);\n                return zrUtil.map(ticksCoords, function (tickCoord) {\n                    return radar.coordToPoint(tickCoord.coord, idx);\n                });\n            });\n\n            var prevPoints = [];\n            for (var i = 0; i <= realSplitNumber; i++) {\n                var points = [];\n                for (var j = 0; j < indicatorAxes.length; j++) {\n                    points.push(axesTicksPoints[j][i]);\n                }\n                // Close\n                if (points[0]) {\n                    points.push(points[0].slice());\n                }\n                else {\n                    if (__DEV__) {\n                        console.error('Can\\'t draw value axis ' + i);\n                    }\n                }\n\n                if (showSplitLine) {\n                    var colorIndex = getColorIndex(splitLines, splitLineColors, i);\n                    splitLines[colorIndex].push(new graphic.Polyline({\n                        shape: {\n                            points: points\n                        }\n                    }));\n                }\n                if (showSplitArea && prevPoints) {\n                    var colorIndex = getColorIndex(splitAreas, splitAreaColors, i - 1);\n                    splitAreas[colorIndex].push(new graphic.Polygon({\n                        shape: {\n                            points: points.concat(prevPoints)\n                        }\n                    }));\n                }\n                prevPoints = points.slice().reverse();\n            }\n        }\n\n        var lineStyle = lineStyleModel.getLineStyle();\n        var areaStyle = areaStyleModel.getAreaStyle();\n        // Add splitArea before splitLine\n        zrUtil.each(splitAreas, function (splitAreas, idx) {\n            this.group.add(graphic.mergePath(\n                splitAreas, {\n                    style: zrUtil.defaults({\n                        stroke: 'none',\n                        fill: splitAreaColors[idx % splitAreaColors.length]\n                    }, areaStyle),\n                    silent: true\n                }\n            ));\n        }, this);\n\n        zrUtil.each(splitLines, function (splitLines, idx) {\n            this.group.add(graphic.mergePath(\n                splitLines, {\n                    style: zrUtil.defaults({\n                        fill: 'none',\n                        stroke: splitLineColors[idx % splitLineColors.length]\n                    }, lineStyle),\n                    silent: true\n                }\n            ));\n        }, this);\n\n    }\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport '../coord/radar/Radar';\nimport '../coord/radar/RadarModel';\nimport './radar/RadarView';","/*\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\nimport SeriesModel from '../../model/Series';\nimport createListSimply from '../helper/createListSimply';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {encodeHTML} from '../../util/format';\n\nvar RadarSeries = SeriesModel.extend({\n\n    type: 'series.radar',\n\n    dependencies: ['radar'],\n\n\n    // Overwrite\n    init: function (option) {\n        RadarSeries.superApply(this, 'init', arguments);\n\n        // Enable legend selection for each data item\n        // Use a function instead of direct access because data reference may changed\n        this.legendDataProvider = function () {\n            return this.getRawData();\n        };\n    },\n\n    getInitialData: function (option, ecModel) {\n        return createListSimply(this, {\n            generateCoord: 'indicator_',\n            generateCoordCount: Infinity\n        });\n    },\n\n    formatTooltip: function (dataIndex) {\n        var data = this.getData();\n        var coordSys = this.coordinateSystem;\n        var indicatorAxes = coordSys.getIndicatorAxes();\n        var name = this.getData().getName(dataIndex);\n        return encodeHTML(name === '' ? this.name : name) + '<br/>'\n            + zrUtil.map(indicatorAxes, function (axis, idx) {\n                var val = data.get(data.mapDimension(axis.dim), dataIndex);\n                return encodeHTML(axis.name + ' : ' + val);\n            }).join('<br />');\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        coordinateSystem: 'radar',\n        legendHoverLink: true,\n        radarIndex: 0,\n        lineStyle: {\n            width: 2,\n            type: 'solid'\n        },\n        label: {\n            position: 'top'\n        },\n        // areaStyle: {\n        // },\n        // itemStyle: {}\n        symbol: 'emptyCircle',\n        symbolSize: 4\n        // symbolRotate: null\n    }\n});\n\nexport default RadarSeries;","/*\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\nimport * as echarts from '../../echarts';\nimport * as graphic from '../../util/graphic';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as symbolUtil from '../../util/symbol';\n\nfunction normalizeSymbolSize(symbolSize) {\n    if (!zrUtil.isArray(symbolSize)) {\n        symbolSize = [+symbolSize, +symbolSize];\n    }\n    return symbolSize;\n}\n\nexport default echarts.extendChartView({\n\n    type: 'radar',\n\n    render: function (seriesModel, ecModel, api) {\n        var polar = seriesModel.coordinateSystem;\n        var group = this.group;\n\n        var data = seriesModel.getData();\n        var oldData = this._data;\n\n        function createSymbol(data, idx) {\n            var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';\n            var color = data.getItemVisual(idx, 'color');\n            if (symbolType === 'none') {\n                return;\n            }\n            var symbolSize = normalizeSymbolSize(\n                data.getItemVisual(idx, 'symbolSize')\n            );\n            var symbolPath = symbolUtil.createSymbol(\n                symbolType, -1, -1, 2, 2, color\n            );\n            symbolPath.attr({\n                style: {\n                    strokeNoScale: true\n                },\n                z2: 100,\n                scale: [symbolSize[0] / 2, symbolSize[1] / 2]\n            });\n            return symbolPath;\n        }\n\n        function updateSymbols(oldPoints, newPoints, symbolGroup, data, idx, isInit) {\n            // Simply rerender all\n            symbolGroup.removeAll();\n            for (var i = 0; i < newPoints.length - 1; i++) {\n                var symbolPath = createSymbol(data, idx);\n                if (symbolPath) {\n                    symbolPath.__dimIdx = i;\n                    if (oldPoints[i]) {\n                        symbolPath.attr('position', oldPoints[i]);\n                        graphic[isInit ? 'initProps' : 'updateProps'](\n                            symbolPath, {\n                                position: newPoints[i]\n                            }, seriesModel, idx\n                        );\n                    }\n                    else {\n                        symbolPath.attr('position', newPoints[i]);\n                    }\n                    symbolGroup.add(symbolPath);\n                }\n            }\n        }\n\n        function getInitialPoints(points) {\n            return zrUtil.map(points, function (pt) {\n                return [polar.cx, polar.cy];\n            });\n        }\n        data.diff(oldData)\n            .add(function (idx) {\n                var points = data.getItemLayout(idx);\n                if (!points) {\n                    return;\n                }\n                var polygon = new graphic.Polygon();\n                var polyline = new graphic.Polyline();\n                var target = {\n                    shape: {\n                        points: points\n                    }\n                };\n\n                polygon.shape.points = getInitialPoints(points);\n                polyline.shape.points = getInitialPoints(points);\n                graphic.initProps(polygon, target, seriesModel, idx);\n                graphic.initProps(polyline, target, seriesModel, idx);\n\n                var itemGroup = new graphic.Group();\n                var symbolGroup = new graphic.Group();\n                itemGroup.add(polyline);\n                itemGroup.add(polygon);\n                itemGroup.add(symbolGroup);\n\n                updateSymbols(\n                    polyline.shape.points, points, symbolGroup, data, idx, true\n                );\n\n                data.setItemGraphicEl(idx, itemGroup);\n            })\n            .update(function (newIdx, oldIdx) {\n                var itemGroup = oldData.getItemGraphicEl(oldIdx);\n                var polyline = itemGroup.childAt(0);\n                var polygon = itemGroup.childAt(1);\n                var symbolGroup = itemGroup.childAt(2);\n                var target = {\n                    shape: {\n                        points: data.getItemLayout(newIdx)\n                    }\n                };\n\n                if (!target.shape.points) {\n                    return;\n                }\n                updateSymbols(\n                    polyline.shape.points, target.shape.points, symbolGroup, data, newIdx, false\n                );\n\n                graphic.updateProps(polyline, target, seriesModel);\n                graphic.updateProps(polygon, target, seriesModel);\n\n                data.setItemGraphicEl(newIdx, itemGroup);\n            })\n            .remove(function (idx) {\n                group.remove(oldData.getItemGraphicEl(idx));\n            })\n            .execute();\n\n        data.eachItemGraphicEl(function (itemGroup, idx) {\n            var itemModel = data.getItemModel(idx);\n            var polyline = itemGroup.childAt(0);\n            var polygon = itemGroup.childAt(1);\n            var symbolGroup = itemGroup.childAt(2);\n            var color = data.getItemVisual(idx, 'color');\n\n            group.add(itemGroup);\n\n            polyline.useStyle(\n                zrUtil.defaults(\n                    itemModel.getModel('lineStyle').getLineStyle(),\n                    {\n                        fill: 'none',\n                        stroke: color\n                    }\n                )\n            );\n            polyline.hoverStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle();\n\n            var areaStyleModel = itemModel.getModel('areaStyle');\n            var hoverAreaStyleModel = itemModel.getModel('emphasis.areaStyle');\n            var polygonIgnore = areaStyleModel.isEmpty() && areaStyleModel.parentModel.isEmpty();\n            var hoverPolygonIgnore = hoverAreaStyleModel.isEmpty() && hoverAreaStyleModel.parentModel.isEmpty();\n\n            hoverPolygonIgnore = hoverPolygonIgnore && polygonIgnore;\n            polygon.ignore = polygonIgnore;\n\n            polygon.useStyle(\n                zrUtil.defaults(\n                    areaStyleModel.getAreaStyle(),\n                    {\n                        fill: color,\n                        opacity: 0.7\n                    }\n                )\n            );\n            polygon.hoverStyle = hoverAreaStyleModel.getAreaStyle();\n\n            var itemStyle = itemModel.getModel('itemStyle').getItemStyle(['color']);\n            var itemHoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n            var labelModel = itemModel.getModel('label');\n            var labelHoverModel = itemModel.getModel('emphasis.label');\n            symbolGroup.eachChild(function (symbolPath) {\n                symbolPath.setStyle(itemStyle);\n                symbolPath.hoverStyle = zrUtil.clone(itemHoverStyle);\n                var defaultText = data.get(data.dimensions[symbolPath.__dimIdx], idx);\n                (defaultText == null || isNaN(defaultText)) && (defaultText = '');\n\n                graphic.setLabelStyle(\n                    symbolPath.style, symbolPath.hoverStyle, labelModel, labelHoverModel,\n                    {\n                        labelFetcher: data.hostModel,\n                        labelDataIndex: idx,\n                        labelDimIndex: symbolPath.__dimIdx,\n                        defaultText: defaultText,\n                        autoColor: color,\n                        isRectText: true\n                    }\n                );\n            });\n\n            itemGroup.highDownOnUpdate = function (fromState, toState) {\n                polygon.attr('ignore', toState === 'emphasis' ? hoverPolygonIgnore : polygonIgnore);\n            };\n            graphic.setHoverStyle(itemGroup);\n        });\n\n        this._data = data;\n    },\n\n    remove: function () {\n        this.group.removeAll();\n        this._data = null;\n    },\n\n    dispose: function () {}\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default function (ecModel) {\n    ecModel.eachSeriesByType('radar', function (seriesModel) {\n        var data = seriesModel.getData();\n        var points = [];\n        var coordSys = seriesModel.coordinateSystem;\n        if (!coordSys) {\n            return;\n        }\n\n        var axes = coordSys.getIndicatorAxes();\n\n        zrUtil.each(axes, function (axis, axisIndex) {\n            data.each(data.mapDimension(axes[axisIndex].dim), function (val, dataIndex) {\n                points[dataIndex] = points[dataIndex] || [];\n                var point = coordSys.dataToPoint(val, axisIndex);\n                points[dataIndex][axisIndex] = isValidPoint(point)\n                    ? point : getValueMissingPoint(coordSys);\n            });\n        });\n\n        // Close polygon\n        data.each(function (idx) {\n            // TODO\n            // Is it appropriate to connect to the next data when some data is missing?\n            // Or, should trade it like `connectNull` in line chart?\n            var firstPoint = zrUtil.find(points[idx], function (point) {\n                return isValidPoint(point);\n            }) || getValueMissingPoint(coordSys);\n\n            // Copy the first actual point to the end of the array\n            points[idx].push(firstPoint.slice());\n            data.setItemLayout(idx, points[idx]);\n        });\n    });\n}\n\nfunction isValidPoint(point) {\n    return !isNaN(point[0]) && !isNaN(point[1]);\n}\n\nfunction getValueMissingPoint(coordSys) {\n    // It is error-prone to input [NaN, NaN] into polygon, polygon.\n    // (probably cause problem when refreshing or animating)\n    return [coordSys.cx, coordSys.cy];\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// Backward compat for radar chart in 2\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default function (option) {\n    var polarOptArr = option.polar;\n    if (polarOptArr) {\n        if (!zrUtil.isArray(polarOptArr)) {\n            polarOptArr = [polarOptArr];\n        }\n        var polarNotRadar = [];\n        zrUtil.each(polarOptArr, function (polarOpt, idx) {\n            if (polarOpt.indicator) {\n                if (polarOpt.type && !polarOpt.shape) {\n                    polarOpt.shape = polarOpt.type;\n                }\n                option.radar = option.radar || [];\n                if (!zrUtil.isArray(option.radar)) {\n                    option.radar = [option.radar];\n                }\n                option.radar.push(polarOpt);\n            }\n            else {\n                polarNotRadar.push(polarOpt);\n            }\n        });\n        option.polar = polarNotRadar;\n    }\n    zrUtil.each(option.series, function (seriesOpt) {\n        if (seriesOpt && seriesOpt.type === 'radar' && seriesOpt.polarIndex) {\n            seriesOpt.radarIndex = seriesOpt.polarIndex;\n        }\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nimport * as echarts from '../echarts';\n\n// Must use radar component\nimport '../component/radar';\nimport './radar/RadarSeries';\nimport './radar/RadarView';\n\nimport dataColor from '../visual/dataColor';\nimport visualSymbol from '../visual/symbol';\nimport radarLayout from './radar/radarLayout';\nimport dataFilter from '../processor/dataFilter';\nimport backwardCompat from './radar/backwardCompat';\n\necharts.registerVisual(dataColor('radar'));\necharts.registerVisual(visualSymbol('radar', 'circle'));\necharts.registerLayout(radarLayout);\necharts.registerProcessor(dataFilter('radar'));\necharts.registerPreprocessor(backwardCompat);","/*\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// Fix for 南海诸岛\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport Region from '../Region';\n\nvar geoCoord = [126, 25];\n\nvar points = [\n    [[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, 0.7], [52, 0.7],\n        [56, 7.7], [59, 0.7], [64, 0.7], [64, 0], [5, 0], [0, 3.5]],\n    [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]],\n    [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]],\n    [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]],\n    [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]],\n    [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]],\n    [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]],\n    [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]],\n    [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]],\n    [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]],\n    [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]],\n    [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4],\n        [1, 92.4], [1, 3.5], [0, 3.5]]\n];\n\nfor (var i = 0; i < points.length; i++) {\n    for (var k = 0; k < points[i].length; k++) {\n        points[i][k][0] /= 10.5;\n        points[i][k][1] /= -10.5 / 0.75;\n\n        points[i][k][0] += geoCoord[0];\n        points[i][k][1] += geoCoord[1];\n    }\n}\n\nexport default function (mapType, regions) {\n    if (mapType === 'china') {\n        regions.push(new Region(\n            '南海诸岛',\n            zrUtil.map(points, function (exterior) {\n                return {\n                    type: 'polygon',\n                    exterior: exterior\n                };\n            }), geoCoord\n        ));\n    }\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar coordsOffsetMap = {\n    '南海诸岛': [32, 80],\n    // 全国\n    '广东': [0, -10],\n    '香港': [10, 5],\n    '澳门': [-10, 10],\n    //'北京': [-10, 0],\n    '天津': [5, 5]\n};\n\nexport default function (mapType, region) {\n    if (mapType === 'china') {\n        var coordFix = coordsOffsetMap[region.name];\n        if (coordFix) {\n            var cp = region.center;\n            cp[0] += coordFix[0] / 10.5;\n            cp[1] += -coordFix[1] / (10.5 / 0.75);\n        }\n    }\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar geoCoordMap = {\n    'Russia': [100, 60],\n    'United States': [-99, 38],\n    'United States of America': [-99, 38]\n};\n\nexport default function (mapType, region) {\n    if (mapType === 'world') {\n        var geoCoord = geoCoordMap[region.name];\n        if (geoCoord) {\n            var cp = region.center;\n            cp[0] = geoCoord[0];\n            cp[1] = geoCoord[1];\n        }\n    }\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Fix for 钓鱼岛\n\n// var Region = require('../Region');\n// var zrUtil = require('zrender/src/core/util');\n\n// var geoCoord = [126, 25];\n\nvar points = [\n    [\n        [123.45165252685547, 25.73527164402261],\n        [123.49731445312499, 25.73527164402261],\n        [123.49731445312499, 25.750734064600884],\n        [123.45165252685547, 25.750734064600884],\n        [123.45165252685547, 25.73527164402261]\n    ]\n];\n\nexport default function (mapType, region) {\n    if (mapType === 'china' && region.name === '台湾') {\n        region.geometries.push({\n            type: 'polygon',\n            exterior: points[0]\n        });\n    }\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {each} from 'zrender/src/core/util';\nimport parseGeoJson from './parseGeoJson';\nimport {makeInner} from '../../util/model';\n\n// Built-in GEO fixer.\nimport fixNanhai from './fix/nanhai';\nimport fixTextCoord from './fix/textCoord';\nimport fixGeoCoord from './fix/geoCoord';\nimport fixDiaoyuIsland from './fix/diaoyuIsland';\n\nvar inner = makeInner();\n\nexport default {\n\n    /**\n     * @param {string} mapName\n     * @param {Object} mapRecord {specialAreas, geoJSON}\n     * @return {Object} {regions, boundingRect}\n     */\n    load: function (mapName, mapRecord) {\n\n        var parsed = inner(mapRecord).parsed;\n\n        if (parsed) {\n            return parsed;\n        }\n\n        var specialAreas = mapRecord.specialAreas || {};\n        var geoJSON = mapRecord.geoJSON;\n        var regions;\n\n        // https://jsperf.com/try-catch-performance-overhead\n        try {\n            regions = geoJSON ? parseGeoJson(geoJSON) : [];\n        }\n        catch (e) {\n            throw new Error('Invalid geoJson format\\n' + e.message);\n        }\n\n        fixNanhai(mapName, regions);\n\n        each(regions, function (region) {\n            var regionName = region.name;\n\n            fixTextCoord(mapName, region);\n            fixGeoCoord(mapName, region);\n            fixDiaoyuIsland(mapName, region);\n\n            // Some area like Alaska in USA map needs to be tansformed\n            // to look better\n            var specialArea = specialAreas[regionName];\n            if (specialArea) {\n                region.transformTo(\n                    specialArea.left, specialArea.top, specialArea.width, specialArea.height\n                );\n            }\n        });\n\n        return (inner(mapRecord).parsed = {\n            regions: regions,\n            boundingRect: getBoundingRect(regions)\n        });\n    }\n};\n\nfunction getBoundingRect(regions) {\n    var rect;\n    for (var i = 0; i < regions.length; i++) {\n        var regionRect = regions[i].getBoundingRect();\n        rect = rect || regionRect.clone();\n        rect.union(regionRect);\n    }\n    return rect;\n}\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {parseSVG, makeViewBoxTransform} from 'zrender/src/tool/parseSVG';\nimport Group from 'zrender/src/container/Group';\nimport Rect from 'zrender/src/graphic/shape/Rect';\nimport {assert, createHashMap} from 'zrender/src/core/util';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport {makeInner} from '../../util/model';\n\nvar inner = makeInner();\n\nexport default {\n\n    /**\n     * @param {string} mapName\n     * @param {Object} mapRecord {specialAreas, geoJSON}\n     * @return {Object} {root, boundingRect}\n     */\n    load: function (mapName, mapRecord) {\n        var originRoot = inner(mapRecord).originRoot;\n        if (originRoot) {\n            return {\n                root: originRoot,\n                boundingRect: inner(mapRecord).boundingRect\n            };\n        }\n\n        var graphic = buildGraphic(mapRecord);\n\n        inner(mapRecord).originRoot = graphic.root;\n        inner(mapRecord).boundingRect = graphic.boundingRect;\n\n        return graphic;\n    },\n\n    makeGraphic: function (mapName, mapRecord, hostKey) {\n        // For performance consideration (in large SVG), graphic only maked\n        // when necessary and reuse them according to hostKey.\n        var field = inner(mapRecord);\n        var rootMap = field.rootMap || (field.rootMap = createHashMap());\n\n        var root = rootMap.get(hostKey);\n        if (root) {\n            return root;\n        }\n\n        var originRoot = field.originRoot;\n        var boundingRect = field.boundingRect;\n\n        // For performance, if originRoot is not used by a view,\n        // assign it to a view, but not reproduce graphic elements.\n        if (!field.originRootHostKey) {\n            field.originRootHostKey = hostKey;\n            root = originRoot;\n        }\n        else {\n            root = buildGraphic(mapRecord, boundingRect).root;\n        }\n\n        return rootMap.set(hostKey, root);\n    },\n\n    removeGraphic: function (mapName, mapRecord, hostKey) {\n        var field = inner(mapRecord);\n        var rootMap = field.rootMap;\n        rootMap && rootMap.removeKey(hostKey);\n        if (hostKey === field.originRootHostKey) {\n            field.originRootHostKey = null;\n        }\n    }\n};\n\nfunction buildGraphic(mapRecord, boundingRect) {\n    var svgXML = mapRecord.svgXML;\n    var result;\n    var root;\n\n    try {\n        result = svgXML && parseSVG(svgXML, {\n            ignoreViewBox: true,\n            ignoreRootClip: true\n        }) || {};\n        root = result.root;\n        assert(root != null);\n    }\n    catch (e) {\n        throw new Error('Invalid svg format\\n' + e.message);\n    }\n\n    var svgWidth = result.width;\n    var svgHeight = result.height;\n    var viewBoxRect = result.viewBoxRect;\n\n    if (!boundingRect) {\n        boundingRect = (svgWidth == null || svgHeight == null)\n            // If svg width / height not specified, calculate\n            // bounding rect as the width / height\n            ? root.getBoundingRect()\n            : new BoundingRect(0, 0, 0, 0);\n\n        if (svgWidth != null) {\n            boundingRect.width = svgWidth;\n        }\n        if (svgHeight != null) {\n            boundingRect.height = svgHeight;\n        }\n    }\n\n    if (viewBoxRect) {\n        var viewBoxTransform = makeViewBoxTransform(viewBoxRect, boundingRect.width, boundingRect.height);\n        var elRoot = root;\n        root = new Group();\n        root.add(elRoot);\n        elRoot.scale = viewBoxTransform.scale;\n        elRoot.position = viewBoxTransform.position;\n    }\n\n    root.setClipPath(new Rect({\n        shape: boundingRect.plain()\n    }));\n\n    return {\n        root: root,\n        boundingRect: boundingRect\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {__DEV__} from '../../config';\nimport {each, createHashMap} from 'zrender/src/core/util';\nimport mapDataStorage from './mapDataStorage';\nimport geoJSONLoader from './geoJSONLoader';\nimport geoSVGLoader from './geoSVGLoader';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\n\nvar loaders = {\n    geoJSON: geoJSONLoader,\n    svg: geoSVGLoader\n};\n\nexport default {\n\n    /**\n     * @param {string} mapName\n     * @param {Object} nameMap\n     * @return {Object} source {regions, regionsMap, nameCoordMap, boundingRect}\n     */\n    load: function (mapName, nameMap) {\n        var regions = [];\n        var regionsMap = createHashMap();\n        var nameCoordMap = createHashMap();\n        var boundingRect;\n        var mapRecords = retrieveMap(mapName);\n\n        each(mapRecords, function (record) {\n            var singleSource = loaders[record.type].load(mapName, record);\n\n            each(singleSource.regions, function (region) {\n                var regionName = region.name;\n\n                // Try use the alias in geoNameMap\n                if (nameMap && nameMap.hasOwnProperty(regionName)) {\n                    region = region.cloneShallow(regionName = nameMap[regionName]);\n                }\n\n                regions.push(region);\n                regionsMap.set(regionName, region);\n                nameCoordMap.set(regionName, region.center);\n            });\n\n            var rect = singleSource.boundingRect;\n            if (rect) {\n                boundingRect\n                    ? boundingRect.union(rect)\n                    : (boundingRect = rect.clone());\n            }\n        });\n\n        return {\n            regions: regions,\n            regionsMap: regionsMap,\n            nameCoordMap: nameCoordMap,\n            // FIXME Always return new ?\n            boundingRect: boundingRect || new BoundingRect(0, 0, 0, 0)\n        };\n    },\n\n    /**\n     * @param {string} mapName\n     * @param {string} hostKey For cache.\n     * @return {Array.<module:zrender/Element>} Roots.\n     */\n    makeGraphic: makeInvoker('makeGraphic'),\n\n    /**\n     * @param {string} mapName\n     * @param {string} hostKey For cache.\n     */\n    removeGraphic: makeInvoker('removeGraphic')\n};\n\nfunction makeInvoker(methodName) {\n    return function (mapName, hostKey) {\n        var mapRecords = retrieveMap(mapName);\n        var results = [];\n\n        each(mapRecords, function (record) {\n            var method = loaders[record.type][methodName];\n            method && results.push(method(mapName, record, hostKey));\n        });\n\n        return results;\n    };\n}\n\nfunction mapNotExistsError(mapName) {\n    if (__DEV__) {\n        console.error(\n            'Map ' + mapName + ' not exists. The GeoJSON of the map must be provided.'\n        );\n    }\n}\n\nfunction retrieveMap(mapName) {\n    var mapRecords = mapDataStorage.retrieveMap(mapName) || [];\n\n    if (__DEV__) {\n        if (!mapRecords.length) {\n            mapNotExistsError(mapName);\n        }\n    }\n\n    return mapRecords;\n}\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport createListSimply from '../helper/createListSimply';\nimport SeriesModel from '../../model/Series';\nimport {encodeHTML, addCommas} from '../../util/format';\nimport dataSelectableMixin from '../../component/helper/selectableMixin';\nimport {retrieveRawAttr} from '../../data/helper/dataProvider';\nimport geoSourceManager from '../../coord/geo/geoSourceManager';\n\nvar MapSeries = SeriesModel.extend({\n\n    type: 'series.map',\n\n    dependencies: ['geo'],\n\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\n    getInitialData: function (option) {\n        var data = createListSimply(this, ['value']);\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);\n        zrUtil.each(geoSource.regions, function (region) {\n            var name = region.name;\n            if (!dataNameMap.get(name)) {\n                selectTargetList.push({name: name});\n                toAppendNames.push(name);\n            }\n        });\n\n        this.updateSelectedMap(selectTargetList);\n\n        // 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        data.appendValues([], toAppendNames);\n\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\n            ? this.dependentModels.geo[geoIndex]\n            : null;\n    },\n\n    getMapType: function () {\n        return (this.getHostGeoModel() || this).option.map;\n    },\n\n    // _fillOption: function (option, mapName) {\n        // Shallow clone\n        // option = zrUtil.extend({}, option);\n\n        // option.data = geoCreator.getFilledRegions(option.data, mapName, option.nameMap);\n\n        // return option;\n    // },\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) {\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\n        var seriesGroup = this.seriesGroup;\n        var seriesNames = [];\n        for (var i = 0; i < seriesGroup.length; i++) {\n            var otherIndex = seriesGroup[i].originalData.indexOfName(name);\n            var valueDim = data.mapDimension('value');\n            if (!isNaN(seriesGroup[i].originalData.get(valueDim, otherIndex))) {\n                seriesNames.push(\n                    encodeHTML(seriesGroup[i].name)\n                );\n            }\n        }\n\n        return seriesNames.join(', ') + '<br />'\n            + 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\n            return region && geo.dataToPoint(region.center);\n        }\n    },\n\n    setZoom: function (zoom) {\n        this.option.zoom = zoom;\n    },\n\n    setCenter: function (center) {\n        this.option.center = center;\n    },\n\n    defaultOption: {\n        // 一级层叠\n        zlevel: 0,\n        // 二级层叠\n        z: 2,\n\n        coordinateSystem: 'geo',\n\n        // map should be explicitly specified since ec3.\n        map: '',\n\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\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\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\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\n        // 数值合并方式，默认加和，可选为：\n        // 'sum' | 'average' | 'max' | 'min'\n        // mapValueCalculation: 'sum',\n        // 地图数值计算结果小数精度\n        // mapValuePrecision: 0,\n\n\n        // 显示图例颜色标识（系列标识的小圆点），图例开启时有效\n        showLegendSymbol: true,\n        // 选择模式，默认关闭，可选single，multiple\n        // selectedMode: false,\n        dataRangeHoverLink: true,\n        // 是否开启缩放及漫游模式\n        // roam: false,\n\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\n        // Default on center of map\n        center: null,\n\n        zoom: 1,\n\n        scaleLimit: null,\n\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\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    }\n\n});\n\nzrUtil.mixin(MapSeries, dataSelectableMixin);\n\nexport default MapSeries;","/*\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\nimport * as echarts from '../../echarts';\n\nvar ATTR = '\\0_ec_interaction_mutex';\n\nexport function take(zr, resourceKey, userKey) {\n    var store = getStore(zr);\n    store[resourceKey] = userKey;\n}\n\nexport function release(zr, resourceKey, userKey) {\n    var store = getStore(zr);\n    var uKey = store[resourceKey];\n\n    if (uKey === userKey) {\n        store[resourceKey] = null;\n    }\n}\n\nexport function isTaken(zr, resourceKey) {\n    return !!getStore(zr)[resourceKey];\n}\n\nfunction getStore(zr) {\n    return zr[ATTR] || (zr[ATTR] = {});\n}\n\n/**\n * payload: {\n *     type: 'takeGlobalCursor',\n *     key: 'dataZoomSelect', or 'brush', or ...,\n *         If no userKey, release global cursor.\n * }\n */\necharts.registerAction(\n    {type: 'takeGlobalCursor', event: 'globalCursorTaken', update: 'update'},\n    function () {}\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport Eventful from 'zrender/src/mixin/Eventful';\nimport * as eventTool from 'zrender/src/core/event';\nimport * as interactionMutex from './interactionMutex';\n\n/**\n * @alias module:echarts/component/helper/RoamController\n * @constructor\n * @mixin {module:zrender/mixin/Eventful}\n *\n * @param {module:zrender/zrender~ZRender} zr\n */\nfunction RoamController(zr) {\n\n    /**\n     * @type {Function}\n     */\n    this.pointerChecker;\n\n    /**\n     * @type {module:zrender}\n     */\n    this._zr = zr;\n\n    /**\n     * @type {Object}\n     */\n    this._opt = {};\n\n    // Avoid two roamController bind the same handler\n    var bind = zrUtil.bind;\n    var mousedownHandler = bind(mousedown, this);\n    var mousemoveHandler = bind(mousemove, this);\n    var mouseupHandler = bind(mouseup, this);\n    var mousewheelHandler = bind(mousewheel, this);\n    var pinchHandler = bind(pinch, this);\n\n    Eventful.call(this);\n\n    /**\n     * @param {Function} pointerChecker\n     *                   input: x, y\n     *                   output: boolean\n     */\n    this.setPointerChecker = function (pointerChecker) {\n        this.pointerChecker = pointerChecker;\n    };\n\n    /**\n     * Notice: only enable needed types. For example, if 'zoom'\n     * is not needed, 'zoom' should not be enabled, otherwise\n     * default mousewheel behaviour (scroll page) will be disabled.\n     *\n     * @param  {boolean|string} [controlType=true] Specify the control type,\n     *                          which can be null/undefined or true/false\n     *                          or 'pan/move' or 'zoom'/'scale'\n     * @param {Object} [opt]\n     * @param {Object} [opt.zoomOnMouseWheel=true] The value can be: true / false / 'shift' / 'ctrl' / 'alt'.\n     * @param {Object} [opt.moveOnMouseMove=true] The value can be: true / false / 'shift' / 'ctrl' / 'alt'.\n     * @param {Object} [opt.moveOnMouseWheel=false] The value can be: true / false / 'shift' / 'ctrl' / 'alt'.\n     * @param {Object} [opt.preventDefaultMouseMove=true] When pan.\n     */\n    this.enable = function (controlType, opt) {\n\n        // Disable previous first\n        this.disable();\n\n        this._opt = zrUtil.defaults(zrUtil.clone(opt) || {}, {\n            zoomOnMouseWheel: true,\n            moveOnMouseMove: true,\n            // By default, wheel do not trigger move.\n            moveOnMouseWheel: false,\n            preventDefaultMouseMove: true\n        });\n\n        if (controlType == null) {\n            controlType = true;\n        }\n\n        if (controlType === true || (controlType === 'move' || controlType === 'pan')) {\n            zr.on('mousedown', mousedownHandler);\n            zr.on('mousemove', mousemoveHandler);\n            zr.on('mouseup', mouseupHandler);\n        }\n        if (controlType === true || (controlType === 'scale' || controlType === 'zoom')) {\n            zr.on('mousewheel', mousewheelHandler);\n            zr.on('pinch', pinchHandler);\n        }\n    };\n\n    this.disable = function () {\n        zr.off('mousedown', mousedownHandler);\n        zr.off('mousemove', mousemoveHandler);\n        zr.off('mouseup', mouseupHandler);\n        zr.off('mousewheel', mousewheelHandler);\n        zr.off('pinch', pinchHandler);\n    };\n\n    this.dispose = this.disable;\n\n    this.isDragging = function () {\n        return this._dragging;\n    };\n\n    this.isPinching = function () {\n        return this._pinching;\n    };\n}\n\nzrUtil.mixin(RoamController, Eventful);\n\n\nfunction mousedown(e) {\n    if (eventTool.isMiddleOrRightButtonOnMouseUpDown(e)\n        || (e.target && e.target.draggable)\n    ) {\n        return;\n    }\n\n    var x = e.offsetX;\n    var y = e.offsetY;\n\n    // Only check on mosedown, but not mousemove.\n    // Mouse can be out of target when mouse moving.\n    if (this.pointerChecker && this.pointerChecker(e, x, y)) {\n        this._x = x;\n        this._y = y;\n        this._dragging = true;\n    }\n}\n\nfunction mousemove(e) {\n    if (!this._dragging\n        || !isAvailableBehavior('moveOnMouseMove', e, this._opt)\n        || e.gestureEvent === 'pinch'\n        || interactionMutex.isTaken(this._zr, 'globalPan')\n    ) {\n        return;\n    }\n\n    var x = e.offsetX;\n    var y = e.offsetY;\n\n    var oldX = this._x;\n    var oldY = this._y;\n\n    var dx = x - oldX;\n    var dy = y - oldY;\n\n    this._x = x;\n    this._y = y;\n\n    this._opt.preventDefaultMouseMove && eventTool.stop(e.event);\n\n    trigger(this, 'pan', 'moveOnMouseMove', e, {\n        dx: dx, dy: dy, oldX: oldX, oldY: oldY, newX: x, newY: y\n    });\n}\n\nfunction mouseup(e) {\n    if (!eventTool.isMiddleOrRightButtonOnMouseUpDown(e)) {\n        this._dragging = false;\n    }\n}\n\nfunction mousewheel(e) {\n    var shouldZoom = isAvailableBehavior('zoomOnMouseWheel', e, this._opt);\n    var shouldMove = isAvailableBehavior('moveOnMouseWheel', e, this._opt);\n    var wheelDelta = e.wheelDelta;\n    var absWheelDeltaDelta = Math.abs(wheelDelta);\n    var originX = e.offsetX;\n    var originY = e.offsetY;\n\n    // wheelDelta maybe -0 in chrome mac.\n    if (wheelDelta === 0 || (!shouldZoom && !shouldMove)) {\n        return;\n    }\n\n    // If both `shouldZoom` and `shouldMove` is true, trigger\n    // their event both, and the final behavior is determined\n    // by event listener themselves.\n\n    if (shouldZoom) {\n        // Convenience:\n        // Mac and VM Windows on Mac: scroll up: zoom out.\n        // Windows: scroll up: zoom in.\n\n        // FIXME: Should do more test in different environment.\n        // wheelDelta is too complicated in difference nvironment\n        // (https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel),\n        // although it has been normallized by zrender.\n        // wheelDelta of mouse wheel is bigger than touch pad.\n        var factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 1 ? 1.2 : 1.1;\n        var scale = wheelDelta > 0 ? factor : 1 / factor;\n        checkPointerAndTrigger(this, 'zoom', 'zoomOnMouseWheel', e, {\n            scale: scale, originX: originX, originY: originY\n        });\n    }\n\n    if (shouldMove) {\n        // FIXME: Should do more test in different environment.\n        var absDelta = Math.abs(wheelDelta);\n        // wheelDelta of mouse wheel is bigger than touch pad.\n        var scrollDelta = (wheelDelta > 0 ? 1 : -1) * (absDelta > 3 ? 0.4 : absDelta > 1 ? 0.15 : 0.05);\n        checkPointerAndTrigger(this, 'scrollMove', 'moveOnMouseWheel', e, {\n            scrollDelta: scrollDelta, originX: originX, originY: originY\n        });\n    }\n}\n\nfunction pinch(e) {\n    if (interactionMutex.isTaken(this._zr, 'globalPan')) {\n        return;\n    }\n    var scale = e.pinchScale > 1 ? 1.1 : 1 / 1.1;\n    checkPointerAndTrigger(this, 'zoom', null, e, {\n        scale: scale, originX: e.pinchX, originY: e.pinchY\n    });\n}\n\nfunction checkPointerAndTrigger(controller, eventName, behaviorToCheck, e, contollerEvent) {\n    if (controller.pointerChecker\n        && controller.pointerChecker(e, contollerEvent.originX, contollerEvent.originY)\n    ) {\n        // When mouse is out of roamController rect,\n        // default befavoius should not be be disabled, otherwise\n        // page sliding is disabled, contrary to expectation.\n        eventTool.stop(e.event);\n\n        trigger(controller, eventName, behaviorToCheck, e, contollerEvent);\n    }\n}\n\nfunction trigger(controller, eventName, behaviorToCheck, e, contollerEvent) {\n    // Also provide behavior checker for event listener, for some case that\n    // multiple components share one listener.\n    contollerEvent.isAvailableBehavior = zrUtil.bind(isAvailableBehavior, null, behaviorToCheck, e);\n    controller.trigger(eventName, contollerEvent);\n}\n\n// settings: {\n//     zoomOnMouseWheel\n//     moveOnMouseMove\n//     moveOnMouseWheel\n// }\n// The value can be: true / false / 'shift' / 'ctrl' / 'alt'.\nfunction isAvailableBehavior(behaviorToCheck, e, settings) {\n    var setting = settings[behaviorToCheck];\n    return !behaviorToCheck || (\n        setting && (!zrUtil.isString(setting) || e.event[setting + 'Key'])\n    );\n}\n\nexport default RoamController;","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * For geo and graph.\n *\n * @param {Object} controllerHost\n * @param {module:zrender/Element} controllerHost.target\n */\nexport function updateViewOnPan(controllerHost, dx, dy) {\n    var target = controllerHost.target;\n    var pos = target.position;\n    pos[0] += dx;\n    pos[1] += dy;\n    target.dirty();\n}\n\n/**\n * For geo and graph.\n *\n * @param {Object} controllerHost\n * @param {module:zrender/Element} controllerHost.target\n * @param {number} controllerHost.zoom\n * @param {number} controllerHost.zoomLimit like: {min: 1, max: 2}\n */\nexport function updateViewOnZoom(controllerHost, zoomDelta, zoomX, zoomY) {\n    var target = controllerHost.target;\n    var zoomLimit = controllerHost.zoomLimit;\n    var pos = target.position;\n    var scale = target.scale;\n\n    var newZoom = controllerHost.zoom = controllerHost.zoom || 1;\n    newZoom *= zoomDelta;\n    if (zoomLimit) {\n        var zoomMin = zoomLimit.min || 0;\n        var zoomMax = zoomLimit.max || Infinity;\n        newZoom = Math.max(\n            Math.min(zoomMax, newZoom),\n            zoomMin\n        );\n    }\n    var zoomScale = newZoom / controllerHost.zoom;\n    controllerHost.zoom = newZoom;\n    // Keep the mouse center when scaling\n    pos[0] -= (zoomX - pos[0]) * (zoomScale - 1);\n    pos[1] -= (zoomY - pos[1]) * (zoomScale - 1);\n    scale[0] *= zoomScale;\n    scale[1] *= zoomScale;\n\n    target.dirty();\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\nvar IRRELEVANT_EXCLUDES = {'axisPointer': 1, 'tooltip': 1, 'brush': 1};\n\n/**\n * Avoid that: mouse click on a elements that is over geo or graph,\n * but roam is triggered.\n */\nexport function onIrrelevantElement(e, api, targetCoordSysModel) {\n    var model = api.getComponentByElement(e.topTarget);\n    // If model is axisModel, it works only if it is injected with coordinateSystem.\n    var coordSys = model && model.coordinateSystem;\n    return model\n        && model !== targetCoordSysModel\n        && !IRRELEVANT_EXCLUDES[model.mainType]\n        && (coordSys && coordSys.model !== targetCoordSysModel);\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport RoamController from './RoamController';\nimport * as roamHelper from '../../component/helper/roamHelper';\nimport {onIrrelevantElement} from '../../component/helper/cursorHelper';\nimport * as graphic from '../../util/graphic';\nimport geoSourceManager from '../../coord/geo/geoSourceManager';\nimport {getUID} from '../../util/component';\n\nfunction getFixedItemStyle(model) {\n    var itemStyle = model.getItemStyle();\n    var areaColor = model.get('areaColor');\n\n    // If user want the color not to be changed when hover,\n    // they should both set areaColor and color to be null.\n    if (areaColor != null) {\n        itemStyle.fill = areaColor;\n    }\n\n    return itemStyle;\n}\n\nfunction updateMapSelectHandler(mapDraw, mapOrGeoModel, regionsGroup, api, fromView) {\n    regionsGroup.off('click');\n    regionsGroup.off('mousedown');\n\n    if (mapOrGeoModel.get('selectedMode')) {\n\n        regionsGroup.on('mousedown', function () {\n            mapDraw._mouseDownFlag = true;\n        });\n\n        regionsGroup.on('click', function (e) {\n            if (!mapDraw._mouseDownFlag) {\n                return;\n            }\n            mapDraw._mouseDownFlag = false;\n\n            var el = e.target;\n            while (!el.__regions) {\n                el = el.parent;\n            }\n            if (!el) {\n                return;\n            }\n\n            var action = {\n                type: (mapOrGeoModel.mainType === 'geo' ? 'geo' : 'map') + 'ToggleSelect',\n                batch: zrUtil.map(el.__regions, function (region) {\n                    return {\n                        name: region.name,\n                        from: fromView.uid\n                    };\n                })\n            };\n            action[mapOrGeoModel.mainType + 'Id'] = mapOrGeoModel.id;\n\n            api.dispatchAction(action);\n\n            updateMapSelected(mapOrGeoModel, regionsGroup);\n        });\n    }\n}\n\nfunction updateMapSelected(mapOrGeoModel, regionsGroup) {\n    // FIXME\n    regionsGroup.eachChild(function (otherRegionEl) {\n        zrUtil.each(otherRegionEl.__regions, function (region) {\n            otherRegionEl.trigger(mapOrGeoModel.isSelected(region.name) ? 'emphasis' : 'normal');\n        });\n    });\n}\n\n/**\n * @alias module:echarts/component/helper/MapDraw\n * @param {module:echarts/ExtensionAPI} api\n * @param {boolean} updateGroup\n */\nfunction MapDraw(api, updateGroup) {\n\n    var group = new graphic.Group();\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.uid = getUID('ec_map_draw');\n\n    /**\n     * @type {module:echarts/component/helper/RoamController}\n     * @private\n     */\n    this._controller = new RoamController(api.getZr());\n\n    /**\n     * @type {Object} {target, zoom, zoomLimit}\n     * @private\n     */\n    this._controllerHost = {target: updateGroup ? group : null};\n\n    /**\n     * @type {module:zrender/container/Group}\n     * @readOnly\n     */\n    this.group = group;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._updateGroup = updateGroup;\n\n    /**\n     * This flag is used to make sure that only one among\n     * `pan`, `zoom`, `click` can occurs, otherwise 'selected'\n     * action may be triggered when `pan`, which is unexpected.\n     * @type {booelan}\n     */\n    this._mouseDownFlag;\n\n    /**\n     * @type {string}\n     */\n    this._mapName;\n\n    /**\n     * @type {boolean}\n     */\n    this._initialized;\n\n    /**\n     * @type {module:zrender/container/Group}\n     */\n    group.add(this._regionsGroup = new graphic.Group());\n\n    /**\n     * @type {module:zrender/container/Group}\n     */\n    group.add(this._backgroundGroup = new graphic.Group());\n}\n\nMapDraw.prototype = {\n\n    constructor: MapDraw,\n\n    draw: function (mapOrGeoModel, ecModel, api, fromView, payload) {\n\n        var isGeo = mapOrGeoModel.mainType === 'geo';\n\n        // Map series has data. GEO model that controlled by map series\n        // will be assigned with map data. Other GEO model has no data.\n        var data = mapOrGeoModel.getData && mapOrGeoModel.getData();\n        isGeo && ecModel.eachComponent({mainType: 'series', subType: 'map'}, function (mapSeries) {\n            if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) {\n                data = mapSeries.getData();\n            }\n        });\n\n        var geo = mapOrGeoModel.coordinateSystem;\n\n        this._updateBackground(geo);\n\n        var regionsGroup = this._regionsGroup;\n        var group = this.group;\n\n        if (geo._roamTransformable.transform) {\n            group.transform = geo._roamTransformable.transform.slice();\n            group.decomposeTransform();\n        }\n\n        var scale = geo._rawTransformable.scale;\n        var position = geo._rawTransformable.position;\n\n        regionsGroup.removeAll();\n\n        var itemStyleAccessPath = ['itemStyle'];\n        var hoverItemStyleAccessPath = ['emphasis', 'itemStyle'];\n        var labelAccessPath = ['label'];\n        var hoverLabelAccessPath = ['emphasis', 'label'];\n        var nameMap = zrUtil.createHashMap();\n\n        zrUtil.each(geo.regions, function (region) {\n            // Consider in GeoJson properties.name may be duplicated, for example,\n            // there is multiple region named \"United Kindom\" or \"France\" (so many\n            // colonies). And it is not appropriate to merge them in geo, which\n            // will make them share the same label and bring trouble in label\n            // location calculation.\n            var regionGroup = nameMap.get(region.name)\n                || nameMap.set(region.name, new graphic.Group());\n\n            var compoundPath = new graphic.CompoundPath({\n                segmentIgnoreThreshold: 1,\n                shape: {\n                    paths: []\n                }\n            });\n            regionGroup.add(compoundPath);\n\n            var regionModel = mapOrGeoModel.getRegionModel(region.name) || mapOrGeoModel;\n\n            var itemStyleModel = regionModel.getModel(itemStyleAccessPath);\n            var hoverItemStyleModel = regionModel.getModel(hoverItemStyleAccessPath);\n            var itemStyle = getFixedItemStyle(itemStyleModel);\n            var hoverItemStyle = getFixedItemStyle(hoverItemStyleModel);\n\n            var labelModel = regionModel.getModel(labelAccessPath);\n            var hoverLabelModel = regionModel.getModel(hoverLabelAccessPath);\n\n            var dataIdx;\n            // Use the itemStyle in data if has data\n            if (data) {\n                dataIdx = data.indexOfName(region.name);\n                // Only visual color of each item will be used. It can be encoded by dataRange\n                // But visual color of series is used in symbol drawing\n                //\n                // Visual color for each series is for the symbol draw\n                var visualColor = data.getItemVisual(dataIdx, 'color', true);\n                if (visualColor) {\n                    itemStyle.fill = visualColor;\n                }\n            }\n\n            var transformPoint = function (point) {\n                return [\n                    point[0] * scale[0] + position[0],\n                    point[1] * scale[1] + position[1]\n                ];\n            };\n\n            zrUtil.each(region.geometries, function (geometry) {\n                if (geometry.type !== 'polygon') {\n                    return;\n                }\n                var points = [];\n                for (var i = 0; i < geometry.exterior.length; ++i) {\n                    points.push(transformPoint(geometry.exterior[i]));\n                }\n                compoundPath.shape.paths.push(new graphic.Polygon({\n                    segmentIgnoreThreshold: 1,\n                    shape: {\n                        points: points\n                    }\n                }));\n\n                for (var i = 0; i < (geometry.interiors ? geometry.interiors.length : 0); ++i) {\n                    var interior = geometry.interiors[i];\n                    var points = [];\n                    for (var j = 0; j < interior.length; ++j) {\n                        points.push(transformPoint(interior[j]));\n                    }\n                    compoundPath.shape.paths.push(new graphic.Polygon({\n                        segmentIgnoreThreshold: 1,\n                        shape: {\n                            points: points\n                        }\n                    }));\n                }\n            });\n\n            compoundPath.setStyle(itemStyle);\n            compoundPath.style.strokeNoScale = true;\n            compoundPath.culling = true;\n\n            // Label\n            var showLabel = labelModel.get('show');\n            var hoverShowLabel = hoverLabelModel.get('show');\n\n            var isDataNaN = data && isNaN(data.get(data.mapDimension('value'), dataIdx));\n            var itemLayout = data && data.getItemLayout(dataIdx);\n            // In the following cases label will be drawn\n            // 1. In map series and data value is NaN\n            // 2. In geo component\n            // 4. Region has no series legendSymbol, which will be add a showLabel flag in mapSymbolLayout\n            if (\n                (isGeo || isDataNaN && (showLabel || hoverShowLabel))\n                || (itemLayout && itemLayout.showLabel)\n            ) {\n                var query = !isGeo ? dataIdx : region.name;\n                var labelFetcher;\n\n                // Consider dataIdx not found.\n                if (!data || dataIdx >= 0) {\n                    labelFetcher = mapOrGeoModel;\n                }\n\n                var textEl = new graphic.Text({\n                    position: transformPoint(region.center.slice()),\n                    // FIXME\n                    // label rotation is not support yet in geo or regions of series-map\n                    // that has no data. The rotation will be effected by this `scale`.\n                    // So needed to change to RectText?\n                    scale: [1 / group.scale[0], 1 / group.scale[1]],\n                    z2: 10,\n                    silent: true\n                });\n\n                graphic.setLabelStyle(\n                    textEl.style, textEl.hoverStyle = {}, labelModel, hoverLabelModel,\n                    {\n                        labelFetcher: labelFetcher,\n                        labelDataIndex: query,\n                        defaultText: region.name,\n                        useInsideStyle: false\n                    },\n                    {\n                        textAlign: 'center',\n                        textVerticalAlign: 'middle'\n                    }\n                );\n\n                regionGroup.add(textEl);\n            }\n\n            // setItemGraphicEl, setHoverStyle after all polygons and labels\n            // are added to the rigionGroup\n            if (data) {\n                data.setItemGraphicEl(dataIdx, regionGroup);\n            }\n            else {\n                var regionModel = mapOrGeoModel.getRegionModel(region.name);\n                // Package custom mouse event for geo component\n                compoundPath.eventData = {\n                    componentType: 'geo',\n                    componentIndex: mapOrGeoModel.componentIndex,\n                    geoIndex: mapOrGeoModel.componentIndex,\n                    name: region.name,\n                    region: (regionModel && regionModel.option) || {}\n                };\n            }\n\n            var groupRegions = regionGroup.__regions || (regionGroup.__regions = []);\n            groupRegions.push(region);\n\n            regionGroup.highDownSilentOnTouch = !!mapOrGeoModel.get('selectedMode');\n            graphic.setHoverStyle(regionGroup, hoverItemStyle);\n\n            regionsGroup.add(regionGroup);\n        });\n\n        this._updateController(mapOrGeoModel, ecModel, api);\n\n        updateMapSelectHandler(this, mapOrGeoModel, regionsGroup, api, fromView);\n\n        updateMapSelected(mapOrGeoModel, regionsGroup);\n    },\n\n    remove: function () {\n        this._regionsGroup.removeAll();\n        this._backgroundGroup.removeAll();\n        this._controller.dispose();\n        this._mapName && geoSourceManager.removeGraphic(this._mapName, this.uid);\n        this._mapName = null;\n        this._controllerHost = {};\n    },\n\n    _updateBackground: function (geo) {\n        var mapName = geo.map;\n\n        if (this._mapName !== mapName) {\n            zrUtil.each(geoSourceManager.makeGraphic(mapName, this.uid), function (root) {\n                this._backgroundGroup.add(root);\n            }, this);\n        }\n\n        this._mapName = mapName;\n    },\n\n    _updateController: function (mapOrGeoModel, ecModel, api) {\n        var geo = mapOrGeoModel.coordinateSystem;\n        var controller = this._controller;\n        var controllerHost = this._controllerHost;\n\n        controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit');\n        controllerHost.zoom = geo.getZoom();\n\n        // roamType is will be set default true if it is null\n        controller.enable(mapOrGeoModel.get('roam') || false);\n        var mainType = mapOrGeoModel.mainType;\n\n        function makeActionBase() {\n            var action = {\n                type: 'geoRoam',\n                componentType: mainType\n            };\n            action[mainType + 'Id'] = mapOrGeoModel.id;\n            return action;\n        }\n\n        controller.off('pan').on('pan', function (e) {\n            this._mouseDownFlag = false;\n\n            roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy);\n\n            api.dispatchAction(zrUtil.extend(makeActionBase(), {\n                dx: e.dx,\n                dy: e.dy\n            }));\n        }, this);\n\n        controller.off('zoom').on('zoom', function (e) {\n            this._mouseDownFlag = false;\n\n            roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);\n\n            api.dispatchAction(zrUtil.extend(makeActionBase(), {\n                zoom: e.scale,\n                originX: e.originX,\n                originY: e.originY\n            }));\n\n            if (this._updateGroup) {\n                var scale = this.group.scale;\n                this._regionsGroup.traverse(function (el) {\n                    if (el.type === 'text') {\n                        el.attr('scale', [1 / scale[0], 1 / scale[1]]);\n                    }\n                });\n            }\n        }, this);\n\n        controller.setPointerChecker(function (e, x, y) {\n            return geo.getViewRectAfterRoam().contain(x, y)\n                && !onIrrelevantElement(e, api, mapOrGeoModel);\n        });\n    }\n};\n\nexport default MapDraw;\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport MapDraw from '../../component/helper/MapDraw';\n\nvar HIGH_DOWN_PROP = '__seriesMapHighDown';\nvar RECORD_VERSION_PROP = '__seriesMapCallKey';\n\nexport default echarts.extendChartView({\n\n    type: 'map',\n\n    render: function (mapModel, ecModel, api, payload) {\n        // Not render if it is an toggleSelect action from self\n        if (payload && payload.type === 'mapToggleSelect'\n            && payload.from === this.uid\n        ) {\n            return;\n        }\n\n        var group = this.group;\n        group.removeAll();\n\n        if (mapModel.getHostGeoModel()) {\n            return;\n        }\n\n        // Not update map if it is an roam action from self\n        if (!(payload && payload.type === 'geoRoam'\n                && payload.componentType === 'series'\n                && payload.seriesId === mapModel.id\n            )\n        ) {\n            if (mapModel.needsDrawMap) {\n                var mapDraw = this._mapDraw || new MapDraw(api, true);\n                group.add(mapDraw.group);\n\n                mapDraw.draw(mapModel, ecModel, api, this, payload);\n\n                this._mapDraw = mapDraw;\n            }\n            else {\n                // Remove drawed map\n                this._mapDraw && this._mapDraw.remove();\n                this._mapDraw = null;\n            }\n        }\n        else {\n            var mapDraw = this._mapDraw;\n            mapDraw && group.add(mapDraw.group);\n        }\n\n        mapModel.get('showLegendSymbol') && ecModel.getComponent('legend')\n            && this._renderSymbols(mapModel, ecModel, api);\n    },\n\n    remove: function () {\n        this._mapDraw && this._mapDraw.remove();\n        this._mapDraw = null;\n        this.group.removeAll();\n    },\n\n    dispose: function () {\n        this._mapDraw && this._mapDraw.remove();\n        this._mapDraw = null;\n    },\n\n    _renderSymbols: function (mapModel, ecModel, api) {\n        var originalData = mapModel.originalData;\n        var group = this.group;\n\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\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            });\n\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            if (!offset) {\n\n                var fullData = mapModel.mainSeries.getData();\n                var name = originalData.getName(originalDataIndex);\n\n                var fullIndex = fullData.indexOfName(name);\n\n                var itemModel = originalData.getItemModel(originalDataIndex);\n                var labelModel = itemModel.getModel('label');\n                var hoverLabelModel = itemModel.getModel('emphasis.label');\n\n                var regionGroup = fullData.getItemGraphicEl(fullIndex);\n\n                // `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                var normalText = zrUtil.retrieve2(\n                    mapModel.getFormattedLabel(fullIndex, 'normal'),\n                    name\n                );\n                var emphasisText = zrUtil.retrieve2(\n                    mapModel.getFormattedLabel(fullIndex, 'emphasis'),\n                    normalText\n                );\n\n                var highDownRecord = regionGroup[HIGH_DOWN_PROP];\n                var recordVersion = Math.random();\n\n                // Prevent from register listeners duplicatedly when roaming.\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)\n                        .on('mouseout', onNormal)\n                        .on('emphasis', onEmphasis)\n                        .on('normal', onNormal);\n                }\n\n                // Prevent removed regions effect current grapics.\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                });\n\n                // FIXME\n                // Consider set option when emphasis.\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    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(\n            graphic.setTextStyle({}, hoverLabelModel, {\n                text: hoverLabelModel.get('show') ? emphasisText : null\n            }, {isRectText: true, useInsideStyle: false}, true)\n        );\n        // Make label upper than others if overlaps.\n        circle.__mapOriginalZ2 = circle.z2;\n        circle.z2 += graphic.Z2_EMPHASIS_LIFT;\n    }\n    else {\n        graphic.setTextStyle(circle.style, labelModel, {\n            text: labelModel.get('show') ? normalText : null,\n            textPosition: labelModel.getShallow('position') || 'bottom'\n        }, {isRectText: true, useInsideStyle: false});\n        // Trigger normalize style like padding.\n        circle.dirty(false);\n\n        if (circle.__mapOriginalZ2 != null) {\n            circle.z2 = circle.__mapOriginalZ2;\n            circle.__mapOriginalZ2 = null;\n        }\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {module:echarts/coord/View} view\n * @param {Object} payload\n * @param {Object} [zoomLimit]\n */\nexport function updateCenterAndZoom(\n    view, payload, zoomLimit\n) {\n    var previousZoom = view.getZoom();\n    var center = view.getCenter();\n    var zoom = payload.zoom;\n\n    var point = view.dataToPoint(center);\n\n    if (payload.dx != null && payload.dy != null) {\n        point[0] -= payload.dx;\n        point[1] -= payload.dy;\n\n        var center = view.pointToData(point);\n        view.setCenter(center);\n    }\n    if (zoom != null) {\n        if (zoomLimit) {\n            var zoomMin = zoomLimit.min || 0;\n            var zoomMax = zoomLimit.max || Infinity;\n            zoom = Math.max(\n                Math.min(previousZoom * zoom, zoomMax),\n                zoomMin\n            ) / previousZoom;\n        }\n\n        // Zoom on given point(originX, originY)\n        view.scale[0] *= zoom;\n        view.scale[1] *= zoom;\n        var position = view.position;\n        var fixX = (payload.originX - position[0]) * (zoom - 1);\n        var fixY = (payload.originY - position[1]) * (zoom - 1);\n\n        position[0] -= fixX;\n        position[1] -= fixY;\n\n        view.updateTransform();\n        // Get the new center\n        var center = view.pointToData(point);\n        view.setCenter(center);\n        view.setZoom(zoom * previousZoom);\n    }\n\n    return {\n        center: view.getCenter(),\n        zoom: view.getZoom()\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {updateCenterAndZoom} from './roamHelper';\n\n/**\n * @payload\n * @property {string} [componentType=series]\n * @property {number} [dx]\n * @property {number} [dy]\n * @property {number} [zoom]\n * @property {number} [originX]\n * @property {number} [originY]\n */\necharts.registerAction({\n    type: 'geoRoam',\n    event: 'geoRoam',\n    update: 'updateTransform'\n}, function (payload, ecModel) {\n    var componentType = payload.componentType || 'series';\n\n    ecModel.eachComponent(\n        { mainType: componentType, query: payload },\n        function (componentModel) {\n            var geo = componentModel.coordinateSystem;\n            if (geo.type !== 'geo') {\n                return;\n            }\n\n            var res = updateCenterAndZoom(\n                geo, payload, componentModel.get('scaleLimit')\n            );\n\n            componentModel.setCenter\n                && componentModel.setCenter(res.center);\n\n            componentModel.setZoom\n                && componentModel.setZoom(res.zoom);\n\n            // All map series with same `map` use the same geo coordinate system\n            // So the center and zoom must be in sync. Include the series not selected by legend\n            if (componentType === 'series') {\n                zrUtil.each(componentModel.seriesGroup, function (seriesModel) {\n                    seriesModel.setCenter(res.center);\n                    seriesModel.setZoom(res.zoom);\n                });\n            }\n        }\n    );\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Simple view coordinate system\n * Mapping given x, y to transformd view x, y\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as vector from 'zrender/src/core/vector';\nimport * as matrix from 'zrender/src/core/matrix';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport Transformable from 'zrender/src/mixin/Transformable';\n\nvar v2ApplyTransform = vector.applyTransform;\n\n// Dummy transform node\nfunction TransformDummy() {\n    Transformable.call(this);\n}\nzrUtil.mixin(TransformDummy, Transformable);\n\nfunction View(name) {\n    /**\n     * @type {string}\n     */\n    this.name = name;\n\n    /**\n     * @type {Object}\n     */\n    this.zoomLimit;\n\n    Transformable.call(this);\n\n    this._roamTransformable = new TransformDummy();\n\n    this._rawTransformable = new TransformDummy();\n\n    this._center;\n    this._zoom;\n}\n\nView.prototype = {\n\n    constructor: View,\n\n    type: 'view',\n\n    /**\n     * @param {Array.<string>}\n     * @readOnly\n     */\n    dimensions: ['x', 'y'],\n\n    /**\n     * Set bounding rect\n     * @param {number} x\n     * @param {number} y\n     * @param {number} width\n     * @param {number} height\n     */\n\n    // PENDING to getRect\n    setBoundingRect: function (x, y, width, height) {\n        this._rect = new BoundingRect(x, y, width, height);\n        return this._rect;\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    // PENDING to getRect\n    getBoundingRect: function () {\n        return this._rect;\n    },\n\n    /**\n     * @param {number} x\n     * @param {number} y\n     * @param {number} width\n     * @param {number} height\n     */\n    setViewRect: function (x, y, width, height) {\n        this.transformTo(x, y, width, height);\n        this._viewRect = new BoundingRect(x, y, width, height);\n    },\n\n    /**\n     * Transformed to particular position and size\n     * @param {number} x\n     * @param {number} y\n     * @param {number} width\n     * @param {number} height\n     */\n    transformTo: function (x, y, width, height) {\n        var rect = this.getBoundingRect();\n        var rawTransform = this._rawTransformable;\n\n        rawTransform.transform = rect.calculateTransform(\n            new BoundingRect(x, y, width, height)\n        );\n\n        rawTransform.decomposeTransform();\n\n        this._updateTransform();\n    },\n\n    /**\n     * Set center of view\n     * @param {Array.<number>} [centerCoord]\n     */\n    setCenter: function (centerCoord) {\n        if (!centerCoord) {\n            return;\n        }\n        this._center = centerCoord;\n\n        this._updateCenterAndZoom();\n    },\n\n    /**\n     * @param {number} zoom\n     */\n    setZoom: function (zoom) {\n        zoom = zoom || 1;\n\n        var zoomLimit = this.zoomLimit;\n        if (zoomLimit) {\n            if (zoomLimit.max != null) {\n                zoom = Math.min(zoomLimit.max, zoom);\n            }\n            if (zoomLimit.min != null) {\n                zoom = Math.max(zoomLimit.min, zoom);\n            }\n        }\n        this._zoom = zoom;\n\n        this._updateCenterAndZoom();\n    },\n\n    /**\n     * Get default center without roam\n     */\n    getDefaultCenter: function () {\n        // Rect before any transform\n        var rawRect = this.getBoundingRect();\n        var cx = rawRect.x + rawRect.width / 2;\n        var cy = rawRect.y + rawRect.height / 2;\n\n        return [cx, cy];\n    },\n\n    getCenter: function () {\n        return this._center || this.getDefaultCenter();\n    },\n\n    getZoom: function () {\n        return this._zoom || 1;\n    },\n\n    /**\n     * @return {Array.<number}\n     */\n    getRoamTransform: function () {\n        return this._roamTransformable.getLocalTransform();\n    },\n\n    /**\n     * Remove roam\n     */\n\n    _updateCenterAndZoom: function () {\n        // Must update after view transform updated\n        var rawTransformMatrix = this._rawTransformable.getLocalTransform();\n        var roamTransform = this._roamTransformable;\n        var defaultCenter = this.getDefaultCenter();\n        var center = this.getCenter();\n        var zoom = this.getZoom();\n\n        center = vector.applyTransform([], center, rawTransformMatrix);\n        defaultCenter = vector.applyTransform([], defaultCenter, rawTransformMatrix);\n\n        roamTransform.origin = center;\n        roamTransform.position = [\n            defaultCenter[0] - center[0],\n            defaultCenter[1] - center[1]\n        ];\n        roamTransform.scale = [zoom, zoom];\n\n        this._updateTransform();\n    },\n\n    /**\n     * Update transform from roam and mapLocation\n     * @private\n     */\n    _updateTransform: function () {\n        var roamTransformable = this._roamTransformable;\n        var rawTransformable = this._rawTransformable;\n\n        rawTransformable.parent = roamTransformable;\n        roamTransformable.updateTransform();\n        rawTransformable.updateTransform();\n\n        matrix.copy(this.transform || (this.transform = []), rawTransformable.transform || matrix.create());\n\n        this._rawTransform = rawTransformable.getLocalTransform();\n\n        this.invTransform = this.invTransform || [];\n        matrix.invert(this.invTransform, this.transform);\n\n        this.decomposeTransform();\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getViewRect: function () {\n        return this._viewRect;\n    },\n\n    /**\n     * Get view rect after roam transform\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getViewRectAfterRoam: function () {\n        var rect = this.getBoundingRect().clone();\n        rect.applyTransform(this.transform);\n        return rect;\n    },\n\n    /**\n     * Convert a single (lon, lat) data item to (x, y) point.\n     * @param {Array.<number>} data\n     * @param {boolean} noRoam\n     * @param {Array.<number>} [out]\n     * @return {Array.<number>}\n     */\n    dataToPoint: function (data, noRoam, out) {\n        var transform = noRoam ? this._rawTransform : this.transform;\n        out = out || [];\n        return transform\n            ? v2ApplyTransform(out, data, transform)\n            : vector.copy(out, data);\n    },\n\n    /**\n     * Convert a (x, y) point to (lon, lat) data\n     * @param {Array.<number>} point\n     * @return {Array.<number>}\n     */\n    pointToData: function (point) {\n        var invTransform = this.invTransform;\n        return invTransform\n            ? v2ApplyTransform([], point, invTransform)\n            : [point[0], point[1]];\n    },\n\n    /**\n     * @implements\n     * see {module:echarts/CoodinateSystem}\n     */\n    convertToPixel: zrUtil.curry(doConvert, 'dataToPoint'),\n\n    /**\n     * @implements\n     * see {module:echarts/CoodinateSystem}\n     */\n    convertFromPixel: zrUtil.curry(doConvert, 'pointToData'),\n\n    /**\n     * @implements\n     * see {module:echarts/CoodinateSystem}\n     */\n    containPoint: function (point) {\n        return this.getViewRectAfterRoam().contain(point[0], point[1]);\n    }\n\n    /**\n     * @return {number}\n     */\n    // getScalarScale: function () {\n    //     // Use determinant square root of transform to mutiply scalar\n    //     var m = this.transform;\n    //     var det = Math.sqrt(Math.abs(m[0] * m[3] - m[2] * m[1]));\n    //     return det;\n    // }\n};\n\nzrUtil.mixin(View, Transformable);\n\nfunction doConvert(methodName, ecModel, finder, value) {\n    var seriesModel = finder.seriesModel;\n    var coordSys = seriesModel ? seriesModel.coordinateSystem : null; // e.g., graph.\n    return coordSys === this ? coordSys[methodName](value) : null;\n}\n\nexport default View;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport View from '../View';\nimport geoSourceManager from './geoSourceManager';\n\n\n/**\n * [Geo description]\n * For backward compatibility, the orginal interface:\n * `name, map, geoJson, specialAreas, nameMap` is kept.\n *\n * @param {string|Object} name\n * @param {string} map Map type\n *        Specify the positioned areas by left, top, width, height\n * @param {Object.<string, string>} [nameMap]\n *        Specify name alias\n * @param {boolean} [invertLongitute=true]\n */\nfunction Geo(name, map, nameMap, invertLongitute) {\n\n    View.call(this, name);\n\n    /**\n     * Map type\n     * @type {string}\n     */\n    this.map = map;\n\n    var source = geoSourceManager.load(map, nameMap);\n\n    this._nameCoordMap = source.nameCoordMap;\n    this._regionsMap = source.regionsMap;\n    this._invertLongitute = invertLongitute == null ? true : invertLongitute;\n\n    /**\n     * @readOnly\n     */\n    this.regions = source.regions;\n\n    /**\n     * @type {module:zrender/src/core/BoundingRect}\n     */\n    this._rect = source.boundingRect;\n}\n\nGeo.prototype = {\n\n    constructor: Geo,\n\n    type: 'geo',\n\n    /**\n     * @param {Array.<string>}\n     * @readOnly\n     */\n    dimensions: ['lng', 'lat'],\n\n    /**\n     * If contain given lng,lat coord\n     * @param {Array.<number>}\n     * @readOnly\n     */\n    containCoord: function (coord) {\n        var regions = this.regions;\n        for (var i = 0; i < regions.length; i++) {\n            if (regions[i].contain(coord)) {\n                return true;\n            }\n        }\n        return false;\n    },\n\n    /**\n     * @override\n     */\n    transformTo: function (x, y, width, height) {\n        var rect = this.getBoundingRect();\n        var invertLongitute = this._invertLongitute;\n\n        rect = rect.clone();\n\n        if (invertLongitute) {\n            // Longitute is inverted\n            rect.y = -rect.y - rect.height;\n        }\n\n        var rawTransformable = this._rawTransformable;\n\n        rawTransformable.transform = rect.calculateTransform(\n            new BoundingRect(x, y, width, height)\n        );\n\n        rawTransformable.decomposeTransform();\n\n        if (invertLongitute) {\n            var scale = rawTransformable.scale;\n            scale[1] = -scale[1];\n        }\n\n        rawTransformable.updateTransform();\n\n        this._updateTransform();\n    },\n\n    /**\n     * @param {string} name\n     * @return {module:echarts/coord/geo/Region}\n     */\n    getRegion: function (name) {\n        return this._regionsMap.get(name);\n    },\n\n    getRegionByCoord: function (coord) {\n        var regions = this.regions;\n        for (var i = 0; i < regions.length; i++) {\n            if (regions[i].contain(coord)) {\n                return regions[i];\n            }\n        }\n    },\n\n    /**\n     * Add geoCoord for indexing by name\n     * @param {string} name\n     * @param {Array.<number>} geoCoord\n     */\n    addGeoCoord: function (name, geoCoord) {\n        this._nameCoordMap.set(name, geoCoord);\n    },\n\n    /**\n     * Get geoCoord by name\n     * @param {string} name\n     * @return {Array.<number>}\n     */\n    getGeoCoord: function (name) {\n        return this._nameCoordMap.get(name);\n    },\n\n    /**\n     * @override\n     */\n    getBoundingRect: function () {\n        return this._rect;\n    },\n\n    /**\n     * @param {string|Array.<number>} data\n     * @param {boolean} noRoam\n     * @param {Array.<number>} [out]\n     * @return {Array.<number>}\n     */\n    dataToPoint: function (data, noRoam, out) {\n        if (typeof data === 'string') {\n            // Map area name to geoCoord\n            data = this.getGeoCoord(data);\n        }\n        if (data) {\n            return View.prototype.dataToPoint.call(this, data, noRoam, out);\n        }\n    },\n\n    /**\n     * @override\n     */\n    convertToPixel: zrUtil.curry(doConvert, 'dataToPoint'),\n\n    /**\n     * @override\n     */\n    convertFromPixel: zrUtil.curry(doConvert, 'pointToData')\n\n};\n\nzrUtil.mixin(Geo, View);\n\nfunction doConvert(methodName, ecModel, finder, value) {\n    var geoModel = finder.geoModel;\n    var seriesModel = finder.seriesModel;\n\n    var coordSys = geoModel\n        ? geoModel.coordinateSystem\n        : seriesModel\n        ? (\n            seriesModel.coordinateSystem // For map.\n            || (seriesModel.getReferringComponents('geo')[0] || {}).coordinateSystem\n        )\n        : null;\n\n    return coordSys === this ? coordSys[methodName](value) : null;\n}\n\nexport default Geo;","/*\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\nimport {__DEV__} from '../../config';\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport Geo from './Geo';\nimport * as layout from '../../util/layout';\nimport * as numberUtil from '../../util/number';\nimport geoSourceManager from './geoSourceManager';\nimport mapDataStorage from './mapDataStorage';\n\n/**\n * Resize method bound to the geo\n * @param {module:echarts/coord/geo/GeoModel|module:echarts/chart/map/MapModel} geoModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction resizeGeo(geoModel, api) {\n\n    var boundingCoords = geoModel.get('boundingCoords');\n    if (boundingCoords != null) {\n        var leftTop = boundingCoords[0];\n        var rightBottom = boundingCoords[1];\n        if (isNaN(leftTop[0]) || isNaN(leftTop[1]) || isNaN(rightBottom[0]) || isNaN(rightBottom[1])) {\n            if (__DEV__) {\n                console.error('Invalid boundingCoords');\n            }\n        }\n        else {\n            this.setBoundingRect(leftTop[0], leftTop[1], rightBottom[0] - leftTop[0], rightBottom[1] - leftTop[1]);\n        }\n    }\n\n    var rect = this.getBoundingRect();\n\n    var boxLayoutOption;\n\n    var center = geoModel.get('layoutCenter');\n    var size = geoModel.get('layoutSize');\n\n    var viewWidth = api.getWidth();\n    var viewHeight = api.getHeight();\n\n    var aspect = rect.width / rect.height * this.aspectScale;\n\n    var useCenterAndSize = false;\n\n    if (center && size) {\n        center = [\n            numberUtil.parsePercent(center[0], viewWidth),\n            numberUtil.parsePercent(center[1], viewHeight)\n        ];\n        size = numberUtil.parsePercent(size, Math.min(viewWidth, viewHeight));\n\n        if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) {\n            useCenterAndSize = true;\n        }\n        else {\n            if (__DEV__) {\n                console.warn('Given layoutCenter or layoutSize data are invalid. Use left/top/width/height instead.');\n            }\n        }\n    }\n\n    var viewRect;\n    if (useCenterAndSize) {\n        var viewRect = {};\n        if (aspect > 1) {\n            // Width is same with size\n            viewRect.width = size;\n            viewRect.height = size / aspect;\n        }\n        else {\n            viewRect.height = size;\n            viewRect.width = size * aspect;\n        }\n        viewRect.y = center[1] - viewRect.height / 2;\n        viewRect.x = center[0] - viewRect.width / 2;\n    }\n    else {\n        // Use left/top/width/height\n        boxLayoutOption = geoModel.getBoxLayoutParams();\n\n        // 0.75 rate\n        boxLayoutOption.aspect = aspect;\n\n        viewRect = layout.getLayoutRect(boxLayoutOption, {\n            width: viewWidth,\n            height: viewHeight\n        });\n    }\n\n    this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height);\n\n    this.setCenter(geoModel.get('center'));\n    this.setZoom(geoModel.get('zoom'));\n}\n\n/**\n * @param {module:echarts/coord/Geo} geo\n * @param {module:echarts/model/Model} model\n * @inner\n */\nfunction setGeoCoords(geo, model) {\n    zrUtil.each(model.get('geoCoord'), function (geoCoord, name) {\n        geo.addGeoCoord(name, geoCoord);\n    });\n}\n\nvar geoCreator = {\n\n    // For deciding which dimensions to use when creating list data\n    dimensions: Geo.prototype.dimensions,\n\n    create: function (ecModel, api) {\n        var geoList = [];\n\n        // FIXME Create each time may be slow\n        ecModel.eachComponent('geo', function (geoModel, idx) {\n            var name = geoModel.get('map');\n\n            var aspectScale = geoModel.get('aspectScale');\n            var invertLongitute = true;\n            var mapRecords = mapDataStorage.retrieveMap(name);\n            if (mapRecords && mapRecords[0] && mapRecords[0].type === 'svg') {\n                aspectScale == null && (aspectScale = 1);\n                invertLongitute = false;\n            }\n            else {\n                aspectScale == null && (aspectScale = 0.75);\n            }\n\n            var geo = new Geo(name + idx, name, geoModel.get('nameMap'), invertLongitute);\n\n            geo.aspectScale = aspectScale;\n            geo.zoomLimit = geoModel.get('scaleLimit');\n            geoList.push(geo);\n\n            setGeoCoords(geo, geoModel);\n\n            geoModel.coordinateSystem = geo;\n            geo.model = geoModel;\n\n            // Inject resize method\n            geo.resize = resizeGeo;\n\n            geo.resize(geoModel, api);\n        });\n\n        ecModel.eachSeries(function (seriesModel) {\n            var coordSys = seriesModel.get('coordinateSystem');\n            if (coordSys === 'geo') {\n                var geoIndex = seriesModel.get('geoIndex') || 0;\n                seriesModel.coordinateSystem = geoList[geoIndex];\n            }\n        });\n\n        // If has map series\n        var mapModelGroupBySeries = {};\n\n        ecModel.eachSeriesByType('map', function (seriesModel) {\n            if (!seriesModel.getHostGeoModel()) {\n                var mapType = seriesModel.getMapType();\n                mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || [];\n                mapModelGroupBySeries[mapType].push(seriesModel);\n            }\n        });\n\n        zrUtil.each(mapModelGroupBySeries, function (mapSeries, mapType) {\n            var nameMapList = zrUtil.map(mapSeries, function (singleMapSeries) {\n                return singleMapSeries.get('nameMap');\n            });\n            var geo = new Geo(mapType, mapType, zrUtil.mergeAll(nameMapList));\n\n            geo.zoomLimit = zrUtil.retrieve.apply(null, zrUtil.map(mapSeries, function (singleMapSeries) {\n                return singleMapSeries.get('scaleLimit');\n            }));\n            geoList.push(geo);\n\n            // Inject resize method\n            geo.resize = resizeGeo;\n            geo.aspectScale = mapSeries[0].get('aspectScale');\n\n            geo.resize(mapSeries[0], api);\n\n            zrUtil.each(mapSeries, function (singleMapSeries) {\n                singleMapSeries.coordinateSystem = geo;\n\n                setGeoCoords(geo, singleMapSeries);\n            });\n        });\n\n        return geoList;\n    },\n\n    /**\n     * Fill given regions array\n     * @param  {Array.<Object>} originRegionArr\n     * @param  {string} mapName\n     * @param  {Object} [nameMap]\n     * @return {Array}\n     */\n    getFilledRegions: function (originRegionArr, mapName, nameMap) {\n        // Not use the original\n        var regionsArr = (originRegionArr || []).slice();\n\n        var dataNameMap = zrUtil.createHashMap();\n        for (var i = 0; i < regionsArr.length; i++) {\n            dataNameMap.set(regionsArr[i].name, regionsArr[i]);\n        }\n\n        var source = geoSourceManager.load(mapName, nameMap);\n        zrUtil.each(source.regions, function (region) {\n            var name = region.name;\n            !dataNameMap.get(name) && regionsArr.push({name: name});\n        });\n\n        return regionsArr;\n    }\n};\n\necharts.registerCoordinateSystem('geo', geoCreator);\n\nexport default geoCreator;\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default function (ecModel) {\n\n    var processedMapType = {};\n\n    ecModel.eachSeriesByType('map', function (mapSeries) {\n        var mapType = mapSeries.getMapType();\n        if (mapSeries.getHostGeoModel() || processedMapType[mapType]) {\n            return;\n        }\n\n        var mapSymbolOffsets = {};\n\n        zrUtil.each(mapSeries.seriesGroup, function (subMapSeries) {\n            var geo = subMapSeries.coordinateSystem;\n            var data = subMapSeries.originalData;\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);\n\n                    // 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                    if (!region || isNaN(value)) {\n                        return;\n                    }\n\n                    var offset = mapSymbolOffsets[name] || 0;\n\n                    var point = geo.dataToPoint(region.center);\n\n                    mapSymbolOffsets[name] = offset + 1;\n\n                    data.setItemLayout(idx, {\n                        point: point,\n                        offset: offset\n                    });\n                });\n            }\n        });\n\n        // Show label of those region not has legendSymbol(which is offset 0)\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\n        processedMapType[mapType] = true;\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\nexport default function (ecModel) {\n    ecModel.eachSeriesByType('map', function (seriesModel) {\n        var colorList = seriesModel.get('color');\n        var itemStyleModel = seriesModel.getModel('itemStyle');\n\n        var areaColor = itemStyleModel.get('areaColor');\n        var color = itemStyleModel.get('color')\n            || colorList[seriesModel.seriesIndex % colorList.length];\n\n        seriesModel.getData().setVisual({\n            'areaColor': areaColor,\n            'color': color\n        });\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\n\n// FIXME 公用？\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\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            if (!isNaN(value)) {\n                dataNameMap[mapKey].push(value);\n            }\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        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        var result;\n        if (statisticType === 'min') {\n            result = min;\n        }\n        else if (statisticType === 'max') {\n            result = max;\n        }\n        else if (statisticType === 'average') {\n            result = sum / len;\n        }\n        else {\n            result = sum;\n        }\n        return len === 0 ? NaN : result;\n    });\n}\n\nexport default function (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\n    zrUtil.each(seriesGroups, function (seriesList, key) {\n        var data = dataStatistics(\n            zrUtil.map(seriesList, function (seriesModel) {\n                return seriesModel.getData();\n            }),\n            seriesList[0].get('mapValueCalculation')\n        );\n\n        for (var i = 0; i < seriesList.length; i++) {\n            seriesList[i].originalData = seriesList[i].getData();\n        }\n\n        // FIXME Put where?\n        for (var i = 0; i < seriesList.length; i++) {\n            seriesList[i].seriesGroup = seriesList;\n            seriesList[i].needsDrawMap = i === 0 && !seriesList[i].getHostGeoModel();\n\n            seriesList[i].setData(data.cloneShallow());\n            seriesList[i].mainSeries = seriesList[0];\n        }\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default function (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;\n            // Put x, y, width, height, x2, y2 in the top level\n            zrUtil.defaults(seriesOpt, seriesOpt.mapLocation);\n        }\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\n\nimport './map/MapSeries';\nimport './map/MapView';\nimport '../action/geoRoam';\nimport '../coord/geo/geoCreator';\n\nimport mapSymbolLayout from './map/mapSymbolLayout';\nimport mapVisual from './map/mapVisual';\nimport mapDataStatistic from './map/mapDataStatistic';\nimport backwardCompat from './map/backwardCompat';\nimport createDataSelectAction from '../action/createDataSelectAction';\n\necharts.registerLayout(mapSymbolLayout);\necharts.registerVisual(mapVisual);\necharts.registerProcessor(echarts.PRIORITY.PROCESSOR.STATISTIC, mapDataStatistic);\necharts.registerPreprocessor(backwardCompat);\n\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* 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 * Link lists and struct (graph or tree)\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar each = zrUtil.each;\n\nvar DATAS = '\\0__link_datas';\nvar MAIN_DATA = '\\0__link_mainData';\n\n// Caution:\n// In most case, either list or its shallow clones (see list.cloneShallow)\n// is active in echarts process. So considering heap memory consumption,\n// we do not clone tree or graph, but share them among list and its shallow clones.\n// But in some rare case, we have to keep old list (like do animation in chart). So\n// please take care that both the old list and the new list share the same tree/graph.\n\n/**\n * @param {Object} opt\n * @param {module:echarts/data/List} opt.mainData\n * @param {Object} [opt.struct] For example, instance of Graph or Tree.\n * @param {string} [opt.structAttr] designation: list[structAttr] = struct;\n * @param {Object} [opt.datas] {dataType: data},\n *                 like: {node: nodeList, edge: edgeList}.\n *                 Should contain mainData.\n * @param {Object} [opt.datasAttr] {dataType: attr},\n *                 designation: struct[datasAttr[dataType]] = list;\n */\nfunction linkList(opt) {\n    var mainData = opt.mainData;\n    var datas = opt.datas;\n\n    if (!datas) {\n        datas = {main: mainData};\n        opt.datasAttr = {main: 'data'};\n    }\n    opt.datas = opt.mainData = null;\n\n    linkAll(mainData, datas, opt);\n\n    // Porxy data original methods.\n    each(datas, function (data) {\n        each(mainData.TRANSFERABLE_METHODS, function (methodName) {\n            data.wrapMethod(methodName, zrUtil.curry(transferInjection, opt));\n        });\n\n    });\n\n    // Beyond transfer, additional features should be added to `cloneShallow`.\n    mainData.wrapMethod('cloneShallow', zrUtil.curry(cloneShallowInjection, opt));\n\n    // Only mainData trigger change, because struct.update may trigger\n    // another changable methods, which may bring about dead lock.\n    each(mainData.CHANGABLE_METHODS, function (methodName) {\n        mainData.wrapMethod(methodName, zrUtil.curry(changeInjection, opt));\n    });\n\n    // Make sure datas contains mainData.\n    zrUtil.assert(datas[mainData.dataType] === mainData);\n}\n\nfunction transferInjection(opt, res) {\n    if (isMainData(this)) {\n        // Transfer datas to new main data.\n        var datas = zrUtil.extend({}, this[DATAS]);\n        datas[this.dataType] = res;\n        linkAll(res, datas, opt);\n    }\n    else {\n        // Modify the reference in main data to point newData.\n        linkSingle(res, this.dataType, this[MAIN_DATA], opt);\n    }\n    return res;\n}\n\nfunction changeInjection(opt, res) {\n    opt.struct && opt.struct.update(this);\n    return res;\n}\n\nfunction cloneShallowInjection(opt, res) {\n    // cloneShallow, which brings about some fragilities, may be inappropriate\n    // to be exposed as an API. So for implementation simplicity we can make\n    // the restriction that cloneShallow of not-mainData should not be invoked\n    // outside, but only be invoked here.\n    each(res[DATAS], function (data, dataType) {\n        data !== res && linkSingle(data.cloneShallow(), dataType, res, opt);\n    });\n    return res;\n}\n\n/**\n * Supplement method to List.\n *\n * @public\n * @param {string} [dataType] If not specified, return mainData.\n * @return {module:echarts/data/List}\n */\nfunction getLinkedData(dataType) {\n    var mainData = this[MAIN_DATA];\n    return (dataType == null || mainData == null)\n        ? mainData\n        : mainData[DATAS][dataType];\n}\n\nfunction isMainData(data) {\n    return data[MAIN_DATA] === data;\n}\n\nfunction linkAll(mainData, datas, opt) {\n    mainData[DATAS] = {};\n    each(datas, function (data, dataType) {\n        linkSingle(data, dataType, mainData, opt);\n    });\n}\n\nfunction linkSingle(data, dataType, mainData, opt) {\n    mainData[DATAS][dataType] = data;\n    data[MAIN_DATA] = mainData;\n    data.dataType = dataType;\n\n    if (opt.struct) {\n        data[opt.structAttr] = opt.struct;\n        opt.struct[opt.datasAttr[dataType]] = data;\n    }\n\n    // Supplement method.\n    data.getLinkedData = getLinkedData;\n}\n\nexport default linkList;","/*\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 * Tree data structure\n *\n * @module echarts/data/Tree\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport Model from '../model/Model';\nimport linkList from './helper/linkList';\nimport List from './List';\nimport createDimensions from './helper/createDimensions';\n\n/**\n * @constructor module:echarts/data/Tree~TreeNode\n * @param {string} name\n * @param {module:echarts/data/Tree} hostTree\n */\nvar TreeNode = function (name, hostTree) {\n    /**\n     * @type {string}\n     */\n    this.name = name || '';\n\n    /**\n     * Depth of node\n     *\n     * @type {number}\n     * @readOnly\n     */\n    this.depth = 0;\n\n    /**\n     * Height of the subtree rooted at this node.\n     * @type {number}\n     * @readOnly\n     */\n    this.height = 0;\n\n    /**\n     * @type {module:echarts/data/Tree~TreeNode}\n     * @readOnly\n     */\n    this.parentNode = null;\n\n    /**\n     * Reference to list item.\n     * Do not persistent dataIndex outside,\n     * besause it may be changed by list.\n     * If dataIndex -1,\n     * this node is logical deleted (filtered) in list.\n     *\n     * @type {Object}\n     * @readOnly\n     */\n    this.dataIndex = -1;\n\n    /**\n     * @type {Array.<module:echarts/data/Tree~TreeNode>}\n     * @readOnly\n     */\n    this.children = [];\n\n    /**\n     * @type {Array.<module:echarts/data/Tree~TreeNode>}\n     * @pubilc\n     */\n    this.viewChildren = [];\n\n    /**\n     * @type {moduel:echarts/data/Tree}\n     * @readOnly\n     */\n    this.hostTree = hostTree;\n};\n\nTreeNode.prototype = {\n\n    constructor: TreeNode,\n\n    /**\n     * The node is removed.\n     * @return {boolean} is removed.\n     */\n    isRemoved: function () {\n        return this.dataIndex < 0;\n    },\n\n    /**\n     * Travel this subtree (include this node).\n     * Usage:\n     *    node.eachNode(function () { ... }); // preorder\n     *    node.eachNode('preorder', function () { ... }); // preorder\n     *    node.eachNode('postorder', function () { ... }); // postorder\n     *    node.eachNode(\n     *        {order: 'postorder', attr: 'viewChildren'},\n     *        function () { ... }\n     *    ); // postorder\n     *\n     * @param {(Object|string)} options If string, means order.\n     * @param {string=} options.order 'preorder' or 'postorder'\n     * @param {string=} options.attr 'children' or 'viewChildren'\n     * @param {Function} cb If in preorder and return false,\n     *                      its subtree will not be visited.\n     * @param {Object} [context]\n     */\n    eachNode: function (options, cb, context) {\n        if (typeof options === 'function') {\n            context = cb;\n            cb = options;\n            options = null;\n        }\n\n        options = options || {};\n        if (zrUtil.isString(options)) {\n            options = {order: options};\n        }\n\n        var order = options.order || 'preorder';\n        var children = this[options.attr || 'children'];\n\n        var suppressVisitSub;\n        order === 'preorder' && (suppressVisitSub = cb.call(context, this));\n\n        for (var i = 0; !suppressVisitSub && i < children.length; i++) {\n            children[i].eachNode(options, cb, context);\n        }\n\n        order === 'postorder' && cb.call(context, this);\n    },\n\n    /**\n     * Update depth and height of this subtree.\n     *\n     * @param  {number} depth\n     */\n    updateDepthAndHeight: function (depth) {\n        var height = 0;\n        this.depth = depth;\n        for (var i = 0; i < this.children.length; i++) {\n            var child = this.children[i];\n            child.updateDepthAndHeight(depth + 1);\n            if (child.height > height) {\n                height = child.height;\n            }\n        }\n        this.height = height + 1;\n    },\n\n    /**\n     * @param  {string} id\n     * @return {module:echarts/data/Tree~TreeNode}\n     */\n    getNodeById: function (id) {\n        if (this.getId() === id) {\n            return this;\n        }\n        for (var i = 0, children = this.children, len = children.length; i < len; i++) {\n            var res = children[i].getNodeById(id);\n            if (res) {\n                return res;\n            }\n        }\n    },\n\n    /**\n     * @param {module:echarts/data/Tree~TreeNode} node\n     * @return {boolean}\n     */\n    contains: function (node) {\n        if (node === this) {\n            return true;\n        }\n        for (var i = 0, children = this.children, len = children.length; i < len; i++) {\n            var res = children[i].contains(node);\n            if (res) {\n                return res;\n            }\n        }\n    },\n\n    /**\n     * @param {boolean} includeSelf Default false.\n     * @return {Array.<module:echarts/data/Tree~TreeNode>} order: [root, child, grandchild, ...]\n     */\n    getAncestors: function (includeSelf) {\n        var ancestors = [];\n        var node = includeSelf ? this : this.parentNode;\n        while (node) {\n            ancestors.push(node);\n            node = node.parentNode;\n        }\n        ancestors.reverse();\n        return ancestors;\n    },\n\n    /**\n     * @param {string|Array=} [dimension='value'] Default 'value'. can be 0, 1, 2, 3\n     * @return {number} Value.\n     */\n    getValue: function (dimension) {\n        var data = this.hostTree.data;\n        return data.get(data.getDimension(dimension || 'value'), this.dataIndex);\n    },\n\n    /**\n     * @param {Object} layout\n     * @param {boolean=} [merge=false]\n     */\n    setLayout: function (layout, merge) {\n        this.dataIndex >= 0\n            && this.hostTree.data.setItemLayout(this.dataIndex, layout, merge);\n    },\n\n    /**\n     * @return {Object} layout\n     */\n    getLayout: function () {\n        return this.hostTree.data.getItemLayout(this.dataIndex);\n    },\n\n    /**\n     * @param {string} [path]\n     * @return {module:echarts/model/Model}\n     */\n    getModel: function (path) {\n        if (this.dataIndex < 0) {\n            return;\n        }\n        var hostTree = this.hostTree;\n        var itemModel = hostTree.data.getItemModel(this.dataIndex);\n        var levelModel = this.getLevelModel();\n        var leavesModel;\n        if (!levelModel && (this.children.length === 0 || (this.children.length !== 0 && this.isExpand === false))) {\n            leavesModel = this.getLeavesModel();\n        }\n        return itemModel.getModel(path, (levelModel || leavesModel || hostTree.hostModel).getModel(path));\n    },\n\n    /**\n     * @return {module:echarts/model/Model}\n     */\n    getLevelModel: function () {\n        return (this.hostTree.levelModels || [])[this.depth];\n    },\n\n    /**\n     * @return {module:echarts/model/Model}\n     */\n    getLeavesModel: function () {\n        return this.hostTree.leavesModel;\n    },\n\n    /**\n     * @example\n     *  setItemVisual('color', color);\n     *  setItemVisual({\n     *      'color': color\n     *  });\n     */\n    setVisual: function (key, value) {\n        this.dataIndex >= 0\n            && this.hostTree.data.setItemVisual(this.dataIndex, key, value);\n    },\n\n    /**\n     * Get item visual\n     */\n    getVisual: function (key, ignoreParent) {\n        return this.hostTree.data.getItemVisual(this.dataIndex, key, ignoreParent);\n    },\n\n    /**\n     * @public\n     * @return {number}\n     */\n    getRawIndex: function () {\n        return this.hostTree.data.getRawIndex(this.dataIndex);\n    },\n\n    /**\n     * @public\n     * @return {string}\n     */\n    getId: function () {\n        return this.hostTree.data.getId(this.dataIndex);\n    },\n\n    /**\n     * if this is an ancestor of another node\n     *\n     * @public\n     * @param {TreeNode} node another node\n     * @return {boolean} if is ancestor\n     */\n    isAncestorOf: function (node) {\n        var parent = node.parentNode;\n        while (parent) {\n            if (parent === this) {\n                return true;\n            }\n            parent = parent.parentNode;\n        }\n        return false;\n    },\n\n    /**\n     * if this is an descendant of another node\n     *\n     * @public\n     * @param {TreeNode} node another node\n     * @return {boolean} if is descendant\n     */\n    isDescendantOf: function (node) {\n        return node !== this && node.isAncestorOf(this);\n    }\n};\n\n/**\n * @constructor\n * @alias module:echarts/data/Tree\n * @param {module:echarts/model/Model} hostModel\n * @param {Array.<Object>} levelOptions\n * @param {Object} leavesOption\n */\nfunction Tree(hostModel, levelOptions, leavesOption) {\n    /**\n     * @type {module:echarts/data/Tree~TreeNode}\n     * @readOnly\n     */\n    this.root;\n\n    /**\n     * @type {module:echarts/data/List}\n     * @readOnly\n     */\n    this.data;\n\n    /**\n     * Index of each item is the same as the raw index of coresponding list item.\n     * @private\n     * @type {Array.<module:echarts/data/Tree~TreeNode}\n     */\n    this._nodes = [];\n\n    /**\n     * @private\n     * @readOnly\n     * @type {module:echarts/model/Model}\n     */\n    this.hostModel = hostModel;\n\n    /**\n     * @private\n     * @readOnly\n     * @type {Array.<module:echarts/model/Model}\n     */\n    this.levelModels = zrUtil.map(levelOptions || [], function (levelDefine) {\n        return new Model(levelDefine, hostModel, hostModel.ecModel);\n    });\n\n    this.leavesModel = new Model(leavesOption || {}, hostModel, hostModel.ecModel);\n}\n\nTree.prototype = {\n\n    constructor: Tree,\n\n    type: 'tree',\n\n    /**\n     * Travel this subtree (include this node).\n     * Usage:\n     *    node.eachNode(function () { ... }); // preorder\n     *    node.eachNode('preorder', function () { ... }); // preorder\n     *    node.eachNode('postorder', function () { ... }); // postorder\n     *    node.eachNode(\n     *        {order: 'postorder', attr: 'viewChildren'},\n     *        function () { ... }\n     *    ); // postorder\n     *\n     * @param {(Object|string)} options If string, means order.\n     * @param {string=} options.order 'preorder' or 'postorder'\n     * @param {string=} options.attr 'children' or 'viewChildren'\n     * @param {Function} cb\n     * @param {Object}   [context]\n     */\n    eachNode: function (options, cb, context) {\n        this.root.eachNode(options, cb, context);\n    },\n\n    /**\n     * @param {number} dataIndex\n     * @return {module:echarts/data/Tree~TreeNode}\n     */\n    getNodeByDataIndex: function (dataIndex) {\n        var rawIndex = this.data.getRawIndex(dataIndex);\n        return this._nodes[rawIndex];\n    },\n\n    /**\n     * @param {string} name\n     * @return {module:echarts/data/Tree~TreeNode}\n     */\n    getNodeByName: function (name) {\n        return this.root.getNodeByName(name);\n    },\n\n    /**\n     * Update item available by list,\n     * when list has been performed options like 'filterSelf' or 'map'.\n     */\n    update: function () {\n        var data = this.data;\n        var nodes = this._nodes;\n\n        for (var i = 0, len = nodes.length; i < len; i++) {\n            nodes[i].dataIndex = -1;\n        }\n\n        for (var i = 0, len = data.count(); i < len; i++) {\n            nodes[data.getRawIndex(i)].dataIndex = i;\n        }\n    },\n\n    /**\n     * Clear all layouts\n     */\n    clearLayouts: function () {\n        this.data.clearItemLayouts();\n    }\n};\n\n/**\n * data node format:\n * {\n *     name: ...\n *     value: ...\n *     children: [\n *         {\n *             name: ...\n *             value: ...\n *             children: ...\n *         },\n *         ...\n *     ]\n * }\n *\n * @static\n * @param {Object} dataRoot Root node.\n * @param {module:echarts/model/Model} hostModel\n * @param {Object} treeOptions\n * @param {Array.<Object>} treeOptions.levels\n * @param {Array.<Object>} treeOptions.leaves\n * @return module:echarts/data/Tree\n */\nTree.createTree = function (dataRoot, hostModel, treeOptions) {\n\n    var tree = new Tree(hostModel, treeOptions.levels, treeOptions.leaves);\n    var listData = [];\n    var dimMax = 1;\n\n    buildHierarchy(dataRoot);\n\n    function buildHierarchy(dataNode, parentNode) {\n        var value = dataNode.value;\n        dimMax = Math.max(dimMax, zrUtil.isArray(value) ? value.length : 1);\n\n        listData.push(dataNode);\n\n        var node = new TreeNode(dataNode.name, tree);\n        parentNode\n            ? addChild(node, parentNode)\n            : (tree.root = node);\n\n        tree._nodes.push(node);\n\n        var children = dataNode.children;\n        if (children) {\n            for (var i = 0; i < children.length; i++) {\n                buildHierarchy(children[i], node);\n            }\n        }\n    }\n\n    tree.root.updateDepthAndHeight(0);\n\n    var dimensionsInfo = createDimensions(listData, {\n        coordDimensions: ['value'],\n        dimensionsCount: dimMax\n    });\n\n    var list = new List(dimensionsInfo, hostModel);\n    list.initData(listData);\n\n    linkList({\n        mainData: list,\n        struct: tree,\n        structAttr: 'tree'\n    });\n\n    tree.update();\n\n    return tree;\n};\n\n/**\n * It is needed to consider the mess of 'list', 'hostModel' when creating a TreeNote,\n * so this function is not ready and not necessary to be public.\n *\n * @param {(module:echarts/data/Tree~TreeNode|Object)} child\n */\nfunction addChild(child, node) {\n    var children = node.children;\n    if (child.parentNode === node) {\n        return;\n    }\n\n    children.push(child);\n    child.parentNode = node;\n}\n\nexport default Tree;","/*\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\nimport SeriesModel from '../../model/Series';\nimport Tree from '../../data/Tree';\nimport {encodeHTML} from '../../util/format';\n\nexport default SeriesModel.extend({\n\n    type: 'series.tree',\n\n    layoutInfo: null,\n\n    // can support the position parameters 'left', 'top','right','bottom', 'width',\n    // 'height' in the setOption() with 'merge' mode normal.\n    layoutMode: 'box',\n\n    /**\n     * Init a tree data structure from data in option series\n     * @param  {Object} option  the object used to config echarts view\n     * @return {module:echarts/data/List} storage initial data\n     */\n    getInitialData: function (option) {\n\n        //create an virtual root\n        var root = {name: option.name, children: option.data};\n\n        var leaves = option.leaves || {};\n\n        var treeOption = {};\n\n        treeOption.leaves = leaves;\n\n        var tree = Tree.createTree(root, this, treeOption);\n\n        var treeDepth = 0;\n\n        tree.eachNode('preorder', function (node) {\n            if (node.depth > treeDepth) {\n                treeDepth = node.depth;\n            }\n        });\n\n        var expandAndCollapse = option.expandAndCollapse;\n        var expandTreeDepth = (expandAndCollapse && option.initialTreeDepth >= 0)\n            ? option.initialTreeDepth : treeDepth;\n\n        tree.root.eachNode('preorder', function (node) {\n            var item = node.hostTree.data.getRawDataItem(node.dataIndex);\n            // Add item.collapsed != null, because users can collapse node original in the series.data.\n            node.isExpand = (item && item.collapsed != null)\n                ? !item.collapsed\n                : node.depth <= expandTreeDepth;\n        });\n\n        return tree.data;\n    },\n\n    /**\n     * Make the configuration 'orient' backward compatibly, with 'horizontal = LR', 'vertical = TB'.\n     * @returns {string} orient\n     */\n    getOrient: function () {\n        var orient = this.get('orient');\n        if (orient === 'horizontal') {\n            orient = 'LR';\n        }\n        else if (orient === 'vertical') {\n            orient = 'TB';\n        }\n        return orient;\n    },\n\n    setZoom: function (zoom) {\n        this.option.zoom = zoom;\n    },\n\n    setCenter: function (center) {\n        this.option.center = center;\n    },\n\n    /**\n     * @override\n     * @param {number} dataIndex\n     */\n    formatTooltip: function (dataIndex) {\n        var tree = this.getData().tree;\n        var realRoot = tree.root.children[0];\n        var node = tree.getNodeByDataIndex(dataIndex);\n        var value = node.getValue();\n        var name = node.name;\n        while (node && (node !== realRoot)) {\n            name = node.parentNode.name + '.' + name;\n            node = node.parentNode;\n        }\n        return encodeHTML(name + (\n            (isNaN(value) || value == null) ? '' : ' : ' + value\n        ));\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        coordinateSystem: 'view',\n\n        // the position of the whole view\n        left: '12%',\n        top: '12%',\n        right: '12%',\n        bottom: '12%',\n\n        // the layout of the tree, two value can be selected, 'orthogonal' or 'radial'\n        layout: 'orthogonal',\n\n        // true | false | 'move' | 'scale', see module:component/helper/RoamController.\n        roam: false,\n\n        // Symbol size scale ratio in roam\n        nodeScaleRatio: 0.4,\n\n        // Default on center of graph\n        center: null,\n\n        zoom: 1,\n\n        // The orient of orthoginal layout, can be setted to 'LR', 'TB', 'RL', 'BT'.\n        // and the backward compatibility configuration 'horizontal = LR', 'vertical = TB'.\n        orient: 'LR',\n\n        symbol: 'emptyCircle',\n\n        symbolSize: 7,\n\n        expandAndCollapse: true,\n\n        initialTreeDepth: 2,\n\n        lineStyle: {\n            color: '#ccc',\n            width: 1.5,\n            curveness: 0.5\n        },\n\n        itemStyle: {\n            color: 'lightsteelblue',\n            borderColor: '#c23531',\n            borderWidth: 1.5\n        },\n\n        label: {\n            show: true,\n            color: '#555'\n        },\n\n        leaves: {\n            label: {\n                show: true\n            }\n        },\n\n        animationEasing: 'linear',\n\n        animationDuration: 700,\n\n        animationDurationUpdate: 1000\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* A third-party license is embeded for some of the code in this file:\n* The tree layoutHelper implementation was originally copied from\n* \"d3.js\"(https://github.com/d3/d3-hierarchy) with\n* some modifications made for this project.\n* (see more details in the comment of the specific method below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the licence of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n\n/**\n * @file The layout algorithm of node-link tree diagrams. Here we using Reingold-Tilford algorithm to drawing\n *       the tree.\n */\n\nimport * as layout from '../../util/layout';\n\n/**\n * Initialize all computational message for following algorithm.\n *\n * @param  {module:echarts/data/Tree~TreeNode} root   The virtual root of the tree.\n */\nexport function init(root) {\n    root.hierNode = {\n        defaultAncestor: null,\n        ancestor: root,\n        prelim: 0,\n        modifier: 0,\n        change: 0,\n        shift: 0,\n        i: 0,\n        thread: null\n    };\n\n    var nodes = [root];\n    var node;\n    var children;\n\n    while (node = nodes.pop()) { // jshint ignore:line\n        children = node.children;\n        if (node.isExpand && children.length) {\n            var n = children.length;\n            for (var i = n - 1; i >= 0; i--) {\n                var child = children[i];\n                child.hierNode = {\n                    defaultAncestor: null,\n                    ancestor: child,\n                    prelim: 0,\n                    modifier: 0,\n                    change: 0,\n                    shift: 0,\n                    i: i,\n                    thread: null\n                };\n                nodes.push(child);\n            }\n        }\n    }\n}\n\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * Computes a preliminary x coordinate for node. Before that, this function is\n * applied recursively to the children of node, as well as the function\n * apportion(). After spacing out the children by calling executeShifts(), the\n * node is placed to the midpoint of its outermost children.\n *\n * @param  {module:echarts/data/Tree~TreeNode} node\n * @param {Function} separation\n */\nexport function firstWalk(node, separation) {\n    var children = node.isExpand ? node.children : [];\n    var siblings = node.parentNode.children;\n    var subtreeW = node.hierNode.i ? siblings[node.hierNode.i - 1] : null;\n    if (children.length) {\n        executeShifts(node);\n        var midPoint = (children[0].hierNode.prelim + children[children.length - 1].hierNode.prelim) / 2;\n        if (subtreeW) {\n            node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW);\n            node.hierNode.modifier = node.hierNode.prelim - midPoint;\n        }\n        else {\n            node.hierNode.prelim = midPoint;\n        }\n    }\n    else if (subtreeW) {\n        node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW);\n    }\n    node.parentNode.hierNode.defaultAncestor = apportion(\n        node,\n        subtreeW,\n        node.parentNode.hierNode.defaultAncestor || siblings[0],\n        separation\n    );\n}\n\n\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * Computes all real x-coordinates by summing up the modifiers recursively.\n *\n * @param  {module:echarts/data/Tree~TreeNode} node\n */\nexport function secondWalk(node) {\n    var nodeX = node.hierNode.prelim + node.parentNode.hierNode.modifier;\n    node.setLayout({x: nodeX}, true);\n    node.hierNode.modifier += node.parentNode.hierNode.modifier;\n}\n\n\nexport function separation(cb) {\n    return arguments.length ? cb : defaultSeparation;\n}\n\n/**\n * Transform the common coordinate to radial coordinate.\n *\n * @param  {number} x\n * @param  {number} y\n * @return {Object}\n */\nexport function radialCoordinate(x, y) {\n    var radialCoor = {};\n    x -= Math.PI / 2;\n    radialCoor.x = y * Math.cos(x);\n    radialCoor.y = y * Math.sin(x);\n    return radialCoor;\n}\n\n/**\n * Get the layout position of the whole view.\n *\n * @param {module:echarts/model/Series} seriesModel  the model object of sankey series\n * @param {module:echarts/ExtensionAPI} api  provide the API list that the developer can call\n * @return {module:zrender/core/BoundingRect}  size of rect to draw the sankey view\n */\nexport function getViewRect(seriesModel, api) {\n    return layout.getLayoutRect(\n        seriesModel.getBoxLayoutParams(), {\n            width: api.getWidth(),\n            height: api.getHeight()\n        }\n    );\n}\n\n/**\n * All other shifts, applied to the smaller subtrees between w- and w+, are\n * performed by this function.\n *\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * @param  {module:echarts/data/Tree~TreeNode} node\n */\nfunction executeShifts(node) {\n    var children = node.children;\n    var n = children.length;\n    var shift = 0;\n    var change = 0;\n    while (--n >= 0) {\n        var child = children[n];\n        child.hierNode.prelim += shift;\n        child.hierNode.modifier += shift;\n        change += child.hierNode.change;\n        shift += child.hierNode.shift + change;\n    }\n}\n\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * The core of the algorithm. Here, a new subtree is combined with the\n * previous subtrees. Threads are used to traverse the inside and outside\n * contours of the left and right subtree up to the highest common level.\n * Whenever two nodes of the inside contours conflict, we compute the left\n * one of the greatest uncommon ancestors using the function nextAncestor()\n * and call moveSubtree() to shift the subtree and prepare the shifts of\n * smaller subtrees. Finally, we add a new thread (if necessary).\n *\n * @param  {module:echarts/data/Tree~TreeNode} subtreeV\n * @param  {module:echarts/data/Tree~TreeNode} subtreeW\n * @param  {module:echarts/data/Tree~TreeNode} ancestor\n * @param  {Function} separation\n * @return {module:echarts/data/Tree~TreeNode}\n */\nfunction apportion(subtreeV, subtreeW, ancestor, separation) {\n\n    if (subtreeW) {\n        var nodeOutRight = subtreeV;\n        var nodeInRight = subtreeV;\n        var nodeOutLeft = nodeInRight.parentNode.children[0];\n        var nodeInLeft = subtreeW;\n\n        var sumOutRight = nodeOutRight.hierNode.modifier;\n        var sumInRight = nodeInRight.hierNode.modifier;\n        var sumOutLeft = nodeOutLeft.hierNode.modifier;\n        var sumInLeft = nodeInLeft.hierNode.modifier;\n\n        while (nodeInLeft = nextRight(nodeInLeft), nodeInRight = nextLeft(nodeInRight), nodeInLeft && nodeInRight) {\n            nodeOutRight = nextRight(nodeOutRight);\n            nodeOutLeft = nextLeft(nodeOutLeft);\n            nodeOutRight.hierNode.ancestor = subtreeV;\n            var shift = nodeInLeft.hierNode.prelim + sumInLeft - nodeInRight.hierNode.prelim\n                    - sumInRight + separation(nodeInLeft, nodeInRight);\n            if (shift > 0) {\n                moveSubtree(nextAncestor(nodeInLeft, subtreeV, ancestor), subtreeV, shift);\n                sumInRight += shift;\n                sumOutRight += shift;\n            }\n            sumInLeft += nodeInLeft.hierNode.modifier;\n            sumInRight += nodeInRight.hierNode.modifier;\n            sumOutRight += nodeOutRight.hierNode.modifier;\n            sumOutLeft += nodeOutLeft.hierNode.modifier;\n        }\n        if (nodeInLeft && !nextRight(nodeOutRight)) {\n            nodeOutRight.hierNode.thread = nodeInLeft;\n            nodeOutRight.hierNode.modifier += sumInLeft - sumOutRight;\n\n        }\n        if (nodeInRight && !nextLeft(nodeOutLeft)) {\n            nodeOutLeft.hierNode.thread = nodeInRight;\n            nodeOutLeft.hierNode.modifier += sumInRight - sumOutLeft;\n            ancestor = subtreeV;\n        }\n    }\n    return ancestor;\n}\n\n/**\n * This function is used to traverse the right contour of a subtree.\n * It returns the rightmost child of node or the thread of node. The function\n * returns null if and only if node is on the highest depth of its subtree.\n *\n * @param  {module:echarts/data/Tree~TreeNode} node\n * @return {module:echarts/data/Tree~TreeNode}\n */\nfunction nextRight(node) {\n    var children = node.children;\n    return children.length && node.isExpand ? children[children.length - 1] : node.hierNode.thread;\n}\n\n/**\n * This function is used to traverse the left contour of a subtree (or a subforest).\n * It returns the leftmost child of node or the thread of node. The function\n * returns null if and only if node is on the highest depth of its subtree.\n *\n * @param  {module:echarts/data/Tree~TreeNode} node\n * @return {module:echarts/data/Tree~TreeNode}\n */\nfunction nextLeft(node) {\n    var children = node.children;\n    return children.length && node.isExpand ? children[0] : node.hierNode.thread;\n}\n\n/**\n * If nodeInLeft’s ancestor is a sibling of node, returns nodeInLeft’s ancestor.\n * Otherwise, returns the specified ancestor.\n *\n * @param  {module:echarts/data/Tree~TreeNode} nodeInLeft\n * @param  {module:echarts/data/Tree~TreeNode} node\n * @param  {module:echarts/data/Tree~TreeNode} ancestor\n * @return {module:echarts/data/Tree~TreeNode}\n */\nfunction nextAncestor(nodeInLeft, node, ancestor) {\n    return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode\n        ? nodeInLeft.hierNode.ancestor : ancestor;\n}\n\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * Shifts the current subtree rooted at wr.\n * This is done by increasing prelim(w+) and modifier(w+) by shift.\n *\n * @param  {module:echarts/data/Tree~TreeNode} wl\n * @param  {module:echarts/data/Tree~TreeNode} wr\n * @param  {number} shift [description]\n */\nfunction moveSubtree(wl, wr, shift) {\n    var change = shift / (wr.hierNode.i - wl.hierNode.i);\n    wr.hierNode.change -= change;\n    wr.hierNode.shift += shift;\n    wr.hierNode.modifier += shift;\n    wr.hierNode.prelim += shift;\n    wl.hierNode.change += change;\n}\n\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n */\nfunction defaultSeparation(node1, node2) {\n    return node1.parentNode === node2.parentNode ? 1 : 2;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport SymbolClz from '../helper/Symbol';\nimport {radialCoordinate} from './layoutHelper';\nimport * as echarts from '../../echarts';\nimport * as bbox from 'zrender/src/core/bbox';\nimport View from '../../coord/View';\nimport * as roamHelper from '../../component/helper/roamHelper';\nimport RoamController from '../../component/helper/RoamController';\nimport {onIrrelevantElement} from '../../component/helper/cursorHelper';\n\nexport default echarts.extendChartView({\n\n    type: 'tree',\n\n    /**\n     * Init the chart\n     * @override\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    init: function (ecModel, api) {\n\n        /**\n         * @private\n         * @type {module:echarts/data/Tree}\n         */\n        this._oldTree;\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this._mainGroup = new graphic.Group();\n\n        /**\n         * @private\n         * @type {module:echarts/componet/helper/RoamController}\n         */\n        this._controller = new RoamController(api.getZr());\n\n        this._controllerHost = {target: this.group};\n\n        this.group.add(this._mainGroup);\n    },\n\n    render: function (seriesModel, ecModel, api, payload) {\n        var data = seriesModel.getData();\n\n        var layoutInfo = seriesModel.layoutInfo;\n\n        var group = this._mainGroup;\n\n        var layout = seriesModel.get('layout');\n\n        if (layout === 'radial') {\n            group.attr('position', [layoutInfo.x + layoutInfo.width / 2, layoutInfo.y + layoutInfo.height / 2]);\n        }\n        else {\n            group.attr('position', [layoutInfo.x, layoutInfo.y]);\n        }\n\n        this._updateViewCoordSys(seriesModel, layoutInfo, layout);\n        this._updateController(seriesModel, ecModel, api);\n\n        var oldData = this._data;\n\n        var seriesScope = {\n            expandAndCollapse: seriesModel.get('expandAndCollapse'),\n            layout: layout,\n            orient: seriesModel.getOrient(),\n            curvature: seriesModel.get('lineStyle.curveness'),\n            symbolRotate: seriesModel.get('symbolRotate'),\n            symbolOffset: seriesModel.get('symbolOffset'),\n            hoverAnimation: seriesModel.get('hoverAnimation'),\n            useNameLabel: true,\n            fadeIn: true\n        };\n\n        data.diff(oldData)\n            .add(function (newIdx) {\n                if (symbolNeedsDraw(data, newIdx)) {\n                    // Create node and edge\n                    updateNode(data, newIdx, null, group, seriesModel, seriesScope);\n                }\n            })\n            .update(function (newIdx, oldIdx) {\n                var symbolEl = oldData.getItemGraphicEl(oldIdx);\n                if (!symbolNeedsDraw(data, newIdx)) {\n                    symbolEl && removeNode(oldData, oldIdx, symbolEl, group, seriesModel, seriesScope);\n                    return;\n                }\n                // Update node and edge\n                updateNode(data, newIdx, symbolEl, group, seriesModel, seriesScope);\n            })\n            .remove(function (oldIdx) {\n                var symbolEl = oldData.getItemGraphicEl(oldIdx);\n                // When remove a collapsed node of subtree, since the collapsed\n                // node haven't been initialized with a symbol element,\n                // you can't found it's symbol element through index.\n                // so if we want to remove the symbol element we should insure\n                // that the symbol element is not null.\n                if (symbolEl) {\n                    removeNode(oldData, oldIdx, symbolEl, group, seriesModel, seriesScope);\n                }\n            })\n            .execute();\n\n        this._nodeScaleRatio = seriesModel.get('nodeScaleRatio');\n\n        this._updateNodeAndLinkScale(seriesModel);\n\n        if (seriesScope.expandAndCollapse === true) {\n            data.eachItemGraphicEl(function (el, dataIndex) {\n                el.off('click').on('click', function () {\n                    api.dispatchAction({\n                        type: 'treeExpandAndCollapse',\n                        seriesId: seriesModel.id,\n                        dataIndex: dataIndex\n                    });\n                });\n            });\n        }\n        this._data = data;\n    },\n\n    _updateViewCoordSys: function (seriesModel) {\n        var data = seriesModel.getData();\n        var points = [];\n        data.each(function (idx) {\n            var layout = data.getItemLayout(idx);\n            if (layout && !isNaN(layout.x) && !isNaN(layout.y)) {\n                points.push([+layout.x, +layout.y]);\n            }\n        });\n        var min = [];\n        var max = [];\n        bbox.fromPoints(points, min, max);\n\n        // If don't Store min max when collapse the root node after roam,\n        // the root node will disappear.\n        var oldMin = this._min;\n        var oldMax = this._max;\n\n        // If width or height is 0\n        if (max[0] - min[0] === 0) {\n            min[0] = oldMin ? oldMin[0] : min[0] - 1;\n            max[0] = oldMax ? oldMax[0] : max[0] + 1;\n        }\n        if (max[1] - min[1] === 0) {\n            min[1] = oldMin ? oldMin[1] : min[1] - 1;\n            max[1] = oldMax ? oldMax[1] : max[1] + 1;\n        }\n\n        var viewCoordSys = seriesModel.coordinateSystem = new View();\n        viewCoordSys.zoomLimit = seriesModel.get('scaleLimit');\n\n        viewCoordSys.setBoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\n        viewCoordSys.setCenter(seriesModel.get('center'));\n        viewCoordSys.setZoom(seriesModel.get('zoom'));\n\n        // Here we use viewCoordSys just for computing the 'position' and 'scale' of the group\n        this.group.attr({\n            position: viewCoordSys.position,\n            scale: viewCoordSys.scale\n        });\n\n        this._viewCoordSys = viewCoordSys;\n        this._min = min;\n        this._max = max;\n    },\n\n    _updateController: function (seriesModel, ecModel, api) {\n        var controller = this._controller;\n        var controllerHost = this._controllerHost;\n        var group = this.group;\n        controller.setPointerChecker(function (e, x, y) {\n            var rect = group.getBoundingRect();\n            rect.applyTransform(group.transform);\n            return rect.contain(x, y)\n                && !onIrrelevantElement(e, api, seriesModel);\n        });\n\n        controller.enable(seriesModel.get('roam'));\n        controllerHost.zoomLimit = seriesModel.get('scaleLimit');\n        controllerHost.zoom = seriesModel.coordinateSystem.getZoom();\n\n        controller\n            .off('pan')\n            .off('zoom')\n            .on('pan', function (e) {\n                roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy);\n                api.dispatchAction({\n                    seriesId: seriesModel.id,\n                    type: 'treeRoam',\n                    dx: e.dx,\n                    dy: e.dy\n                });\n            }, this)\n            .on('zoom', function (e) {\n                roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);\n                api.dispatchAction({\n                    seriesId: seriesModel.id,\n                    type: 'treeRoam',\n                    zoom: e.scale,\n                    originX: e.originX,\n                    originY: e.originY\n                });\n                this._updateNodeAndLinkScale(seriesModel);\n            }, this);\n    },\n\n    _updateNodeAndLinkScale: function (seriesModel) {\n        var data = seriesModel.getData();\n\n        var nodeScale = this._getNodeGlobalScale(seriesModel);\n        var invScale = [nodeScale, nodeScale];\n\n        data.eachItemGraphicEl(function (el, idx) {\n            el.attr('scale', invScale);\n        });\n    },\n\n    _getNodeGlobalScale: function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys.type !== 'view') {\n            return 1;\n        }\n\n        var nodeScaleRatio = this._nodeScaleRatio;\n\n        var groupScale = coordSys.scale;\n        var groupZoom = (groupScale && groupScale[0]) || 1;\n        // Scale node when zoom changes\n        var roamZoom = coordSys.getZoom();\n        var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;\n\n        return nodeScale / groupZoom;\n    },\n\n    dispose: function () {\n        this._controller && this._controller.dispose();\n        this._controllerHost = {};\n    },\n\n    remove: function () {\n        this._mainGroup.removeAll();\n        this._data = null;\n    }\n\n});\n\nfunction symbolNeedsDraw(data, dataIndex) {\n    var layout = data.getItemLayout(dataIndex);\n\n    return layout\n        && !isNaN(layout.x) && !isNaN(layout.y)\n        && data.getItemVisual(dataIndex, 'symbol') !== 'none';\n}\n\nfunction getTreeNodeStyle(node, itemModel, seriesScope) {\n    seriesScope.itemModel = itemModel;\n    seriesScope.itemStyle = itemModel.getModel('itemStyle').getItemStyle();\n    seriesScope.hoverItemStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n    seriesScope.lineStyle = itemModel.getModel('lineStyle').getLineStyle();\n    seriesScope.labelModel = itemModel.getModel('label');\n    seriesScope.hoverLabelModel = itemModel.getModel('emphasis.label');\n\n    if (node.isExpand === false && node.children.length !== 0) {\n        seriesScope.symbolInnerColor = seriesScope.itemStyle.fill;\n    }\n    else {\n        seriesScope.symbolInnerColor = '#fff';\n    }\n\n    return seriesScope;\n}\n\nfunction updateNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) {\n    var isInit = !symbolEl;\n    var node = data.tree.getNodeByDataIndex(dataIndex);\n    var itemModel = node.getModel();\n    var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope);\n    var virtualRoot = data.tree.root;\n\n    var source = node.parentNode === virtualRoot ? node : node.parentNode || node;\n    var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex);\n    var sourceLayout = source.getLayout();\n    var sourceOldLayout = sourceSymbolEl\n        ? {\n            x: sourceSymbolEl.position[0],\n            y: sourceSymbolEl.position[1],\n            rawX: sourceSymbolEl.__radialOldRawX,\n            rawY: sourceSymbolEl.__radialOldRawY\n        }\n        : sourceLayout;\n    var targetLayout = node.getLayout();\n\n    if (isInit) {\n        symbolEl = new SymbolClz(data, dataIndex, seriesScope);\n        symbolEl.attr('position', [sourceOldLayout.x, sourceOldLayout.y]);\n    }\n    else {\n        symbolEl.updateData(data, dataIndex, seriesScope);\n    }\n\n    symbolEl.__radialOldRawX = symbolEl.__radialRawX;\n    symbolEl.__radialOldRawY = symbolEl.__radialRawY;\n    symbolEl.__radialRawX = targetLayout.rawX;\n    symbolEl.__radialRawY = targetLayout.rawY;\n\n    group.add(symbolEl);\n    data.setItemGraphicEl(dataIndex, symbolEl);\n    graphic.updateProps(symbolEl, {\n        position: [targetLayout.x, targetLayout.y]\n    }, seriesModel);\n\n    var symbolPath = symbolEl.getSymbolPath();\n\n    if (seriesScope.layout === 'radial') {\n        var realRoot = virtualRoot.children[0];\n        var rootLayout = realRoot.getLayout();\n        var length = realRoot.children.length;\n        var rad;\n        var isLeft;\n\n        if (targetLayout.x === rootLayout.x && node.isExpand === true) {\n            var center = {};\n            center.x = (realRoot.children[0].getLayout().x + realRoot.children[length - 1].getLayout().x) / 2;\n            center.y = (realRoot.children[0].getLayout().y + realRoot.children[length - 1].getLayout().y) / 2;\n            rad = Math.atan2(center.y - rootLayout.y, center.x - rootLayout.x);\n            if (rad < 0) {\n                rad = Math.PI * 2 + rad;\n            }\n            isLeft = center.x < rootLayout.x;\n            if (isLeft) {\n                rad = rad - Math.PI;\n            }\n        }\n        else {\n            rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x);\n            if (rad < 0) {\n                rad = Math.PI * 2 + rad;\n            }\n            if (node.children.length === 0 || (node.children.length !== 0 && node.isExpand === false)) {\n                isLeft = targetLayout.x < rootLayout.x;\n                if (isLeft) {\n                    rad = rad - Math.PI;\n                }\n            }\n            else {\n                isLeft = targetLayout.x > rootLayout.x;\n                if (!isLeft) {\n                    rad = rad - Math.PI;\n                }\n            }\n        }\n\n        var textPosition = isLeft ? 'left' : 'right';\n        var rotate = seriesScope.labelModel.get('rotate');\n        var labelRotateRadian = rotate * (Math.PI / 180);\n\n        symbolPath.setStyle({\n            textPosition: seriesScope.labelModel.get('position') || textPosition,\n            textRotation: rotate == null ? -rad : labelRotateRadian,\n            textOrigin: 'center',\n            verticalAlign: 'middle'\n        });\n    }\n\n    if (node.parentNode && node.parentNode !== virtualRoot) {\n        var edge = symbolEl.__edge;\n        if (!edge) {\n            edge = symbolEl.__edge = new graphic.BezierCurve({\n                shape: getEdgeShape(seriesScope, sourceOldLayout, sourceOldLayout),\n                style: zrUtil.defaults({opacity: 0, strokeNoScale: true}, seriesScope.lineStyle)\n            });\n        }\n\n        graphic.updateProps(edge, {\n            shape: getEdgeShape(seriesScope, sourceLayout, targetLayout),\n            style: {opacity: 1}\n        }, seriesModel);\n\n        group.add(edge);\n    }\n}\n\nfunction removeNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) {\n    var node = data.tree.getNodeByDataIndex(dataIndex);\n    var virtualRoot = data.tree.root;\n    var itemModel = node.getModel();\n    var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope);\n\n    var source = node.parentNode === virtualRoot ? node : node.parentNode || node;\n    var sourceLayout;\n    while (sourceLayout = source.getLayout(), sourceLayout == null) {\n        source = source.parentNode === virtualRoot ? source : source.parentNode || source;\n    }\n\n    graphic.updateProps(symbolEl, {\n        position: [sourceLayout.x + 1, sourceLayout.y + 1]\n    }, seriesModel, function () {\n        group.remove(symbolEl);\n        data.setItemGraphicEl(dataIndex, null);\n    });\n\n    symbolEl.fadeOut(null, {keepLabel: true});\n\n    var edge = symbolEl.__edge;\n    if (edge) {\n        graphic.updateProps(edge, {\n            shape: getEdgeShape(seriesScope, sourceLayout, sourceLayout),\n            style: {\n                opacity: 0\n            }\n        }, seriesModel, function () {\n            group.remove(edge);\n        });\n    }\n}\n\nfunction getEdgeShape(seriesScope, sourceLayout, targetLayout) {\n    var cpx1;\n    var cpy1;\n    var cpx2;\n    var cpy2;\n    var orient = seriesScope.orient;\n    var x1;\n    var x2;\n    var y1;\n    var y2;\n\n    if (seriesScope.layout === 'radial') {\n        x1 = sourceLayout.rawX;\n        y1 = sourceLayout.rawY;\n        x2 = targetLayout.rawX;\n        y2 = targetLayout.rawY;\n\n        var radialCoor1 = radialCoordinate(x1, y1);\n        var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * seriesScope.curvature);\n        var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * seriesScope.curvature);\n        var radialCoor4 = radialCoordinate(x2, y2);\n\n        return {\n            x1: radialCoor1.x,\n            y1: radialCoor1.y,\n            x2: radialCoor4.x,\n            y2: radialCoor4.y,\n            cpx1: radialCoor2.x,\n            cpy1: radialCoor2.y,\n            cpx2: radialCoor3.x,\n            cpy2: radialCoor3.y\n        };\n    }\n    else {\n        x1 = sourceLayout.x;\n        y1 = sourceLayout.y;\n        x2 = targetLayout.x;\n        y2 = targetLayout.y;\n\n        if (orient === 'LR' || orient === 'RL') {\n            cpx1 = x1 + (x2 - x1) * seriesScope.curvature;\n            cpy1 = y1;\n            cpx2 = x2 + (x1 - x2) * seriesScope.curvature;\n            cpy2 = y2;\n        }\n        if (orient === 'TB' || orient === 'BT') {\n            cpx1 = x1;\n            cpy1 = y1 + (y2 - y1) * seriesScope.curvature;\n            cpx2 = x2;\n            cpy2 = y2 + (y1 - y2) * seriesScope.curvature;\n        }\n    }\n\n    return {\n        x1: x1,\n        y1: y1,\n        x2: x2,\n        y2: y2,\n        cpx1: cpx1,\n        cpy1: cpy1,\n        cpx2: cpx2,\n        cpy2: cpy2\n    };\n\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../../echarts';\nimport {updateCenterAndZoom} from '../../action/roamHelper';\n\necharts.registerAction({\n    type: 'treeExpandAndCollapse',\n    event: 'treeExpandAndCollapse',\n    update: 'update'\n}, function (payload, ecModel) {\n    ecModel.eachComponent({mainType: 'series', subType: 'tree', query: payload}, function (seriesModel) {\n        var dataIndex = payload.dataIndex;\n        var tree = seriesModel.getData().tree;\n        var node = tree.getNodeByDataIndex(dataIndex);\n        node.isExpand = !node.isExpand;\n    });\n});\n\necharts.registerAction({\n    type: 'treeRoam',\n    event: 'treeRoam',\n    // Here we set 'none' instead of 'update', because roam action\n    // just need to update the transform matrix without having to recalculate\n    // the layout. So don't need to go through the whole update process, such\n    // as 'dataPrcocess', 'coordSystemUpdate', 'layout' and so on.\n    update: 'none'\n}, function (payload, ecModel) {\n    ecModel.eachComponent({mainType: 'series', subType: 'tree', query: payload}, function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n        var res = updateCenterAndZoom(coordSys, payload);\n\n        seriesModel.setCenter\n            && seriesModel.setCenter(res.center);\n\n        seriesModel.setZoom\n            && seriesModel.setZoom(res.zoom);\n    });\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * Traverse the tree from bottom to top and do something\n * @param  {module:echarts/data/Tree~TreeNode} root  The real root of the tree\n * @param  {Function} callback\n */\nfunction eachAfter(root, callback, separation) {\n    var nodes = [root];\n    var next = [];\n    var node;\n\n    while (node = nodes.pop()) { // jshint ignore:line\n        next.push(node);\n        if (node.isExpand) {\n            var children = node.children;\n            if (children.length) {\n                for (var i = 0; i < children.length; i++) {\n                    nodes.push(children[i]);\n                }\n            }\n        }\n    }\n\n    while (node = next.pop()) { // jshint ignore:line\n        callback(node, separation);\n    }\n}\n\n/**\n * Traverse the tree from top to bottom and do something\n * @param  {module:echarts/data/Tree~TreeNode} root  The real root of the tree\n * @param  {Function} callback\n */\nfunction eachBefore(root, callback) {\n    var nodes = [root];\n    var node;\n    while (node = nodes.pop()) { // jshint ignore:line\n        callback(node);\n        if (node.isExpand) {\n            var children = node.children;\n            if (children.length) {\n                for (var i = children.length - 1; i >= 0; i--) {\n                    nodes.push(children[i]);\n                }\n            }\n        }\n    }\n}\n\nexport { eachAfter, eachBefore };","/*\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\nimport {\n    eachAfter,\n    eachBefore\n} from './traversalHelper';\nimport {\n    init,\n    firstWalk,\n    secondWalk,\n    separation as sep,\n    radialCoordinate,\n    getViewRect\n} from './layoutHelper';\n\nexport default function (ecModel, api) {\n    ecModel.eachSeriesByType('tree', function (seriesModel) {\n        commonLayout(seriesModel, api);\n    });\n}\n\nfunction commonLayout(seriesModel, api) {\n    var layoutInfo = getViewRect(seriesModel, api);\n    seriesModel.layoutInfo = layoutInfo;\n    var layout = seriesModel.get('layout');\n    var width = 0;\n    var height = 0;\n    var separation = null;\n\n    if (layout === 'radial') {\n        width = 2 * Math.PI;\n        height = Math.min(layoutInfo.height, layoutInfo.width) / 2;\n        separation = sep(function (node1, node2) {\n            return (node1.parentNode === node2.parentNode ? 1 : 2) / node1.depth;\n        });\n    }\n    else {\n        width = layoutInfo.width;\n        height = layoutInfo.height;\n        separation = sep();\n    }\n\n    var virtualRoot = seriesModel.getData().tree.root;\n    var realRoot = virtualRoot.children[0];\n\n    if (realRoot) {\n        init(virtualRoot);\n        eachAfter(realRoot, firstWalk, separation);\n        virtualRoot.hierNode.modifier = -realRoot.hierNode.prelim;\n        eachBefore(realRoot, secondWalk);\n\n        var left = realRoot;\n        var right = realRoot;\n        var bottom = realRoot;\n        eachBefore(realRoot, function (node) {\n            var x = node.getLayout().x;\n            if (x < left.getLayout().x) {\n                left = node;\n            }\n            if (x > right.getLayout().x) {\n                right = node;\n            }\n            if (node.depth > bottom.depth) {\n                bottom = node;\n            }\n        });\n\n        var delta = left === right ? 1 : separation(left, right) / 2;\n        var tx = delta - left.getLayout().x;\n        var kx = 0;\n        var ky = 0;\n        var coorX = 0;\n        var coorY = 0;\n        if (layout === 'radial') {\n            kx = width / (right.getLayout().x + delta + tx);\n            // here we use (node.depth - 1), bucause the real root's depth is 1\n            ky = height / ((bottom.depth - 1) || 1);\n            eachBefore(realRoot, function (node) {\n                coorX = (node.getLayout().x + tx) * kx;\n                coorY = (node.depth - 1) * ky;\n                var finalCoor = radialCoordinate(coorX, coorY);\n                node.setLayout({x: finalCoor.x, y: finalCoor.y, rawX: coorX, rawY: coorY}, true);\n            });\n        }\n        else {\n            var orient = seriesModel.getOrient();\n            if (orient === 'RL' || orient === 'LR') {\n                ky = height / (right.getLayout().x + delta + tx);\n                kx = width / ((bottom.depth - 1) || 1);\n                eachBefore(realRoot, function (node) {\n                    coorY = (node.getLayout().x + tx) * ky;\n                    coorX = orient === 'LR'\n                        ? (node.depth - 1) * kx\n                        : width - (node.depth - 1) * kx;\n                    node.setLayout({x: coorX, y: coorY}, true);\n                });\n            }\n            else if (orient === 'TB' || orient === 'BT') {\n                kx = width / (right.getLayout().x + delta + tx);\n                ky = height / ((bottom.depth - 1) || 1);\n                eachBefore(realRoot, function (node) {\n                    coorX = (node.getLayout().x + tx) * kx;\n                    coorY = orient === 'TB'\n                        ? (node.depth - 1) * ky\n                        : height - (node.depth - 1) * ky;\n                    node.setLayout({x: coorX, y: coorY}, true);\n                });\n            }\n        }\n    }\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\n\nimport './tree/TreeSeries';\nimport './tree/TreeView';\nimport './tree/treeAction';\n\nimport visualSymbol from '../visual/symbol';\nimport treeLayout from './tree/treeLayout';\n\necharts.registerVisual(visualSymbol('tree', 'circle'));\necharts.registerLayout(treeLayout);\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport function retrieveTargetInfo(payload, validPayloadTypes, seriesModel) {\n    if (payload && zrUtil.indexOf(validPayloadTypes, payload.type) >= 0) {\n        var root = seriesModel.getData().tree.root;\n        var targetNode = payload.targetNode;\n\n        if (typeof targetNode === 'string') {\n            targetNode = root.getNodeById(targetNode);\n        }\n\n        if (targetNode && root.contains(targetNode)) {\n            return {node: targetNode};\n        }\n\n        var targetNodeId = payload.targetNodeId;\n        if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) {\n            return {node: targetNode};\n        }\n    }\n}\n\n// Not includes the given node at the last item.\nexport function getPathToRoot(node) {\n    var path = [];\n    while (node) {\n        node = node.parentNode;\n        node && path.push(node);\n    }\n    return path.reverse();\n}\n\nexport function aboveViewRoot(viewRoot, node) {\n    var viewPath = getPathToRoot(viewRoot);\n    return zrUtil.indexOf(viewPath, node) >= 0;\n}\n\n// From root to the input node (the input node will be included).\nexport function wrapTreePathInfo(node, seriesModel) {\n    var treePathInfo = [];\n\n    while (node) {\n        var nodeDataIndex = node.dataIndex;\n        treePathInfo.push({\n            name: node.name,\n            dataIndex: nodeDataIndex,\n            value: seriesModel.getRawValue(nodeDataIndex)\n        });\n        node = node.parentNode;\n    }\n\n    treePathInfo.reverse();\n\n    return treePathInfo;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport SeriesModel from '../../model/Series';\nimport Tree from '../../data/Tree';\nimport Model from '../../model/Model';\nimport {encodeHTML, addCommas} from '../../util/format';\nimport {wrapTreePathInfo} from '../helper/treeHelper';\n\nexport default SeriesModel.extend({\n\n    type: 'series.treemap',\n\n    layoutMode: 'box',\n\n    dependencies: ['grid', 'polar'],\n\n    preventUsingHoverLayer: true,\n\n    /**\n     * @type {module:echarts/data/Tree~Node}\n     */\n    _viewRoot: null,\n\n    defaultOption: {\n        // Disable progressive rendering\n        progressive: 0,\n        // center: ['50%', '50%'],          // not supported in ec3.\n        // size: ['80%', '80%'],            // deprecated, compatible with ec2.\n        left: 'center',\n        top: 'middle',\n        right: null,\n        bottom: null,\n        width: '80%',\n        height: '80%',\n        sort: true,                         // Can be null or false or true\n                                            // (order by desc default, asc not supported yet (strange effect))\n        clipWindow: 'origin',               // Size of clipped window when zooming. 'origin' or 'fullscreen'\n        squareRatio: 0.5 * (1 + Math.sqrt(5)), // golden ratio\n        leafDepth: null,                    // Nodes on depth from root are regarded as leaves.\n                                            // Count from zero (zero represents only view root).\n        drillDownIcon: '▶',                 // Use html character temporarily because it is complicated\n                                            // to align specialized icon. ▷▶❒❐▼✚\n\n        zoomToNodeRatio: 0.32 * 0.32,       // Be effective when using zoomToNode. Specify the proportion of the\n                                            // target node area in the view area.\n        roam: true,                         // true, false, 'scale' or 'zoom', 'move'.\n        nodeClick: 'zoomToNode',            // Leaf node click behaviour: 'zoomToNode', 'link', false.\n                                            // If leafDepth is set and clicking a node which has children but\n                                            // be on left depth, the behaviour would be changing root. Otherwise\n                                            // use behavious defined above.\n        animation: true,\n        animationDurationUpdate: 900,\n        animationEasing: 'quinticInOut',\n        breadcrumb: {\n            show: true,\n            height: 22,\n            left: 'center',\n            top: 'bottom',\n            // right\n            // bottom\n            emptyItemWidth: 25,             // Width of empty node.\n            itemStyle: {\n                color: 'rgba(0,0,0,0.7)', //'#5793f3',\n                borderColor: 'rgba(255,255,255,0.7)',\n                borderWidth: 1,\n                shadowColor: 'rgba(150,150,150,1)',\n                shadowBlur: 3,\n                shadowOffsetX: 0,\n                shadowOffsetY: 0,\n                textStyle: {\n                    color: '#fff'\n                }\n            },\n            emphasis: {\n                textStyle: {}\n            }\n        },\n        label: {\n            show: true,\n            // Do not use textDistance, for ellipsis rect just the same as treemap node rect.\n            distance: 0,\n            padding: 5,\n            position: 'inside', // Can be [5, '5%'] or position stirng like 'insideTopLeft', ...\n            // formatter: null,\n            color: '#fff',\n            ellipsis: true\n            // align\n            // verticalAlign\n        },\n        upperLabel: {                   // Label when node is parent.\n            show: false,\n            position: [0, '50%'],\n            height: 20,\n            // formatter: null,\n            color: '#fff',\n            ellipsis: true,\n            // align: null,\n            verticalAlign: 'middle'\n        },\n        itemStyle: {\n            color: null,            // Can be 'none' if not necessary.\n            colorAlpha: null,       // Can be 'none' if not necessary.\n            colorSaturation: null,  // Can be 'none' if not necessary.\n            borderWidth: 0,\n            gapWidth: 0,\n            borderColor: '#fff',\n            borderColorSaturation: null // If specified, borderColor will be ineffective, and the\n                                        // border color is evaluated by color of current node and\n                                        // borderColorSaturation.\n        },\n        emphasis: {\n            upperLabel: {\n                show: true,\n                position: [0, '50%'],\n                color: '#fff',\n                ellipsis: true,\n                verticalAlign: 'middle'\n            }\n        },\n\n        visualDimension: 0,                 // Can be 0, 1, 2, 3.\n        visualMin: null,\n        visualMax: null,\n\n        color: [],                  // + treemapSeries.color should not be modified. Please only modified\n                                    // level[n].color (if necessary).\n                                    // + Specify color list of each level. level[0].color would be global\n                                    // color list if not specified. (see method `setDefault`).\n                                    // + But set as a empty array to forbid fetch color from global palette\n                                    // when using nodeModel.get('color'), otherwise nodes on deep level\n                                    // will always has color palette set and are not able to inherit color\n                                    // from parent node.\n                                    // + TreemapSeries.color can not be set as 'none', otherwise effect\n                                    // legend color fetching (see seriesColor.js).\n        colorAlpha: null,           // Array. Specify color alpha range of each level, like [0.2, 0.8]\n        colorSaturation: null,      // Array. Specify color saturation of each level, like [0.2, 0.5]\n        colorMappingBy: 'index',    // 'value' or 'index' or 'id'.\n        visibleMin: 10,             // If area less than this threshold (unit: pixel^2), node will not\n                                    // be rendered. Only works when sort is 'asc' or 'desc'.\n        childrenVisibleMin: null,   // If area of a node less than this threshold (unit: pixel^2),\n                                    // grandchildren will not show.\n                                    // Why grandchildren? If not grandchildren but children,\n                                    // some siblings show children and some not,\n                                    // the appearance may be mess and not consistent,\n        levels: []                  // Each item: {\n                                    //     visibleMin, itemStyle, visualDimension, label\n                                    // }\n        // data: {\n        //      value: [],\n        //      children: [],\n        //      link: 'http://xxx.xxx.xxx',\n        //      target: 'blank' or 'self'\n        // }\n    },\n\n    /**\n     * @override\n     */\n    getInitialData: function (option, ecModel) {\n        // Create a virtual root.\n        var root = {name: option.name, children: option.data};\n\n        completeTreeValue(root);\n\n        var levels = option.levels || [];\n\n        levels = option.levels = setDefault(levels, ecModel);\n\n        var treeOption = {};\n\n        treeOption.levels = levels;\n\n        // Make sure always a new tree is created when setOption,\n        // in TreemapView, we check whether oldTree === newTree\n        // to choose mappings approach among old shapes and new shapes.\n        return Tree.createTree(root, this, treeOption).data;\n    },\n\n    optionUpdated: function () {\n        this.resetViewRoot();\n    },\n\n    /**\n     * @override\n     * @param {number} dataIndex\n     * @param {boolean} [mutipleSeries=false]\n     */\n    formatTooltip: function (dataIndex) {\n        var data = this.getData();\n        var value = this.getRawValue(dataIndex);\n        var formattedValue = zrUtil.isArray(value)\n            ? addCommas(value[0]) : addCommas(value);\n        var name = data.getName(dataIndex);\n\n        return encodeHTML(name + ': ' + formattedValue);\n    },\n\n    /**\n     * Add tree path to tooltip param\n     *\n     * @override\n     * @param {number} dataIndex\n     * @return {Object}\n     */\n    getDataParams: function (dataIndex) {\n        var params = SeriesModel.prototype.getDataParams.apply(this, arguments);\n\n        var node = this.getData().tree.getNodeByDataIndex(dataIndex);\n        params.treePathInfo = wrapTreePathInfo(node, this);\n\n        return params;\n    },\n\n    /**\n     * @public\n     * @param {Object} layoutInfo {\n     *                                x: containerGroup x\n     *                                y: containerGroup y\n     *                                width: containerGroup width\n     *                                height: containerGroup height\n     *                            }\n     */\n    setLayoutInfo: function (layoutInfo) {\n        /**\n         * @readOnly\n         * @type {Object}\n         */\n        this.layoutInfo = this.layoutInfo || {};\n        zrUtil.extend(this.layoutInfo, layoutInfo);\n    },\n\n    /**\n     * @param  {string} id\n     * @return {number} index\n     */\n    mapIdToIndex: function (id) {\n        // A feature is implemented:\n        // index is monotone increasing with the sequence of\n        // input id at the first time.\n        // This feature can make sure that each data item and its\n        // mapped color have the same index between data list and\n        // color list at the beginning, which is useful for user\n        // to adjust data-color mapping.\n\n        /**\n         * @private\n         * @type {Object}\n         */\n        var idIndexMap = this._idIndexMap;\n\n        if (!idIndexMap) {\n            idIndexMap = this._idIndexMap = zrUtil.createHashMap();\n            /**\n             * @private\n             * @type {number}\n             */\n            this._idIndexMapCount = 0;\n        }\n\n        var index = idIndexMap.get(id);\n        if (index == null) {\n            idIndexMap.set(id, index = this._idIndexMapCount++);\n        }\n\n        return index;\n    },\n\n    getViewRoot: function () {\n        return this._viewRoot;\n    },\n\n    /**\n     * @param {module:echarts/data/Tree~Node} [viewRoot]\n     */\n    resetViewRoot: function (viewRoot) {\n        viewRoot\n            ? (this._viewRoot = viewRoot)\n            : (viewRoot = this._viewRoot);\n\n        var root = this.getRawData().tree.root;\n\n        if (!viewRoot\n            || (viewRoot !== root && !root.contains(viewRoot))\n        ) {\n            this._viewRoot = root;\n        }\n    }\n});\n\n/**\n * @param {Object} dataNode\n */\nfunction completeTreeValue(dataNode) {\n    // Postorder travel tree.\n    // If value of none-leaf node is not set,\n    // calculate it by suming up the value of all children.\n    var sum = 0;\n\n    zrUtil.each(dataNode.children, function (child) {\n\n        completeTreeValue(child);\n\n        var childValue = child.value;\n        zrUtil.isArray(childValue) && (childValue = childValue[0]);\n\n        sum += childValue;\n    });\n\n    var thisValue = dataNode.value;\n    if (zrUtil.isArray(thisValue)) {\n        thisValue = thisValue[0];\n    }\n\n    if (thisValue == null || isNaN(thisValue)) {\n        thisValue = sum;\n    }\n    // Value should not less than 0.\n    if (thisValue < 0) {\n        thisValue = 0;\n    }\n\n    zrUtil.isArray(dataNode.value)\n        ? (dataNode.value[0] = thisValue)\n        : (dataNode.value = thisValue);\n}\n\n/**\n * set default to level configuration\n */\nfunction setDefault(levels, ecModel) {\n    var globalColorList = ecModel.get('color');\n\n    if (!globalColorList) {\n        return;\n    }\n\n    levels = levels || [];\n    var hasColorDefine;\n    zrUtil.each(levels, function (levelDefine) {\n        var model = new Model(levelDefine);\n        var modelColor = model.get('color');\n\n        if (model.get('itemStyle.color')\n            || (modelColor && modelColor !== 'none')\n        ) {\n            hasColorDefine = true;\n        }\n    });\n\n    if (!hasColorDefine) {\n        var level0 = levels[0] || (levels[0] = {});\n        level0.color = globalColorList.slice();\n    }\n\n    return levels;\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\nimport * as graphic from '../../util/graphic';\nimport * as layout from '../../util/layout';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {wrapTreePathInfo} from '../helper/treeHelper';\n\nvar TEXT_PADDING = 8;\nvar ITEM_GAP = 8;\nvar ARRAY_LENGTH = 5;\n\nfunction Breadcrumb(containerGroup) {\n    /**\n     * @private\n     * @type {module:zrender/container/Group}\n     */\n    this.group = new graphic.Group();\n\n    containerGroup.add(this.group);\n}\n\nBreadcrumb.prototype = {\n\n    constructor: Breadcrumb,\n\n    render: function (seriesModel, api, targetNode, onSelect) {\n        var model = seriesModel.getModel('breadcrumb');\n        var thisGroup = this.group;\n\n        thisGroup.removeAll();\n\n        if (!model.get('show') || !targetNode) {\n            return;\n        }\n\n        var normalStyleModel = model.getModel('itemStyle');\n        // var emphasisStyleModel = model.getModel('emphasis.itemStyle');\n        var textStyleModel = normalStyleModel.getModel('textStyle');\n\n        var layoutParam = {\n            pos: {\n                left: model.get('left'),\n                right: model.get('right'),\n                top: model.get('top'),\n                bottom: model.get('bottom')\n            },\n            box: {\n                width: api.getWidth(),\n                height: api.getHeight()\n            },\n            emptyItemWidth: model.get('emptyItemWidth'),\n            totalWidth: 0,\n            renderList: []\n        };\n\n        this._prepare(targetNode, layoutParam, textStyleModel);\n        this._renderContent(seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect);\n\n        layout.positionElement(thisGroup, layoutParam.pos, layoutParam.box);\n    },\n\n    /**\n     * Prepare render list and total width\n     * @private\n     */\n    _prepare: function (targetNode, layoutParam, textStyleModel) {\n        for (var node = targetNode; node; node = node.parentNode) {\n            var text = node.getModel().get('name');\n            var textRect = textStyleModel.getTextRect(text);\n            var itemWidth = Math.max(\n                textRect.width + TEXT_PADDING * 2,\n                layoutParam.emptyItemWidth\n            );\n            layoutParam.totalWidth += itemWidth + ITEM_GAP;\n            layoutParam.renderList.push({node: node, text: text, width: itemWidth});\n        }\n    },\n\n    /**\n     * @private\n     */\n    _renderContent: function (\n        seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect\n    ) {\n        // Start rendering.\n        var lastX = 0;\n        var emptyItemWidth = layoutParam.emptyItemWidth;\n        var height = seriesModel.get('breadcrumb.height');\n        var availableSize = layout.getAvailableSize(layoutParam.pos, layoutParam.box);\n        var totalWidth = layoutParam.totalWidth;\n        var renderList = layoutParam.renderList;\n\n        for (var i = renderList.length - 1; i >= 0; i--) {\n            var item = renderList[i];\n            var itemNode = item.node;\n            var itemWidth = item.width;\n            var text = item.text;\n\n            // Hdie text and shorten width if necessary.\n            if (totalWidth > availableSize.width) {\n                totalWidth -= itemWidth - emptyItemWidth;\n                itemWidth = emptyItemWidth;\n                text = null;\n            }\n\n            var el = new graphic.Polygon({\n                shape: {\n                    points: makeItemPoints(\n                        lastX, 0, itemWidth, height,\n                        i === renderList.length - 1, i === 0\n                    )\n                },\n                style: zrUtil.defaults(\n                    normalStyleModel.getItemStyle(),\n                    {\n                        lineJoin: 'bevel',\n                        text: text,\n                        textFill: textStyleModel.getTextColor(),\n                        textFont: textStyleModel.getFont()\n                    }\n                ),\n                z: 10,\n                onclick: zrUtil.curry(onSelect, itemNode)\n            });\n            this.group.add(el);\n\n            packEventData(el, seriesModel, itemNode);\n\n            lastX += itemWidth + ITEM_GAP;\n        }\n    },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        this.group.removeAll();\n    }\n};\n\nfunction makeItemPoints(x, y, itemWidth, itemHeight, head, tail) {\n    var points = [\n        [head ? x : x - ARRAY_LENGTH, y],\n        [x + itemWidth, y],\n        [x + itemWidth, y + itemHeight],\n        [head ? x : x - ARRAY_LENGTH, y + itemHeight]\n    ];\n    !tail && points.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]);\n    !head && points.push([x, y + itemHeight / 2]);\n    return points;\n}\n\n// Package custom mouse event.\nfunction packEventData(el, seriesModel, itemNode) {\n    el.eventData = {\n        componentType: 'series',\n        componentSubType: 'treemap',\n        componentIndex: seriesModel.componentIndex,\n        seriesIndex: seriesModel.componentIndex,\n        seriesName: seriesModel.name,\n        seriesType: 'treemap',\n        selfType: 'breadcrumb', // Distinguish with click event on treemap node.\n        nodeData: {\n            dataIndex: itemNode && itemNode.dataIndex,\n            name: itemNode && itemNode.name\n        },\n        treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel)\n    };\n}\n\nexport default Breadcrumb;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\n\n/**\n * @param {number} [time=500] Time in ms\n * @param {string} [easing='linear']\n * @param {number} [delay=0]\n * @param {Function} [callback]\n *\n * @example\n *  // Animate position\n *  animation\n *      .createWrap()\n *      .add(el1, {position: [10, 10]})\n *      .add(el2, {shape: {width: 500}, style: {fill: 'red'}}, 400)\n *      .done(function () { // done })\n *      .start('cubicOut');\n */\nexport function createWrap() {\n\n    var storage = [];\n    var elExistsMap = {};\n    var doneCallback;\n\n    return {\n\n        /**\n         * Caution: a el can only be added once, otherwise 'done'\n         * might not be called. This method checks this (by el.id),\n         * suppresses adding and returns false when existing el found.\n         *\n         * @param {modele:zrender/Element} el\n         * @param {Object} target\n         * @param {number} [time=500]\n         * @param {number} [delay=0]\n         * @param {string} [easing='linear']\n         * @return {boolean} Whether adding succeeded.\n         *\n         * @example\n         *     add(el, target, time, delay, easing);\n         *     add(el, target, time, easing);\n         *     add(el, target, time);\n         *     add(el, target);\n         */\n        add: function (el, target, time, delay, easing) {\n            if (zrUtil.isString(delay)) {\n                easing = delay;\n                delay = 0;\n            }\n\n            if (elExistsMap[el.id]) {\n                return false;\n            }\n            elExistsMap[el.id] = 1;\n\n            storage.push(\n                {el: el, target: target, time: time, delay: delay, easing: easing}\n            );\n\n            return true;\n        },\n\n        /**\n         * Only execute when animation finished. Will not execute when any\n         * of 'stop' or 'stopAnimation' called.\n         *\n         * @param {Function} callback\n         */\n        done: function (callback) {\n            doneCallback = callback;\n            return this;\n        },\n\n        /**\n         * Will stop exist animation firstly.\n         */\n        start: function () {\n            var count = storage.length;\n\n            for (var i = 0, len = storage.length; i < len; i++) {\n                var item = storage[i];\n                item.el.animateTo(item.target, item.time, item.delay, item.easing, done);\n            }\n\n            return this;\n\n            function done() {\n                count--;\n                if (!count) {\n                    storage.length = 0;\n                    elExistsMap = {};\n                    doneCallback && doneCallback();\n                }\n            }\n        }\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport DataDiffer from '../../data/DataDiffer';\nimport * as helper from '../helper/treeHelper';\nimport Breadcrumb from './Breadcrumb';\nimport RoamController from '../../component/helper/RoamController';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport * as matrix from 'zrender/src/core/matrix';\nimport * as animationUtil from '../../util/animation';\nimport makeStyleMapper from '../../model/mixin/makeStyleMapper';\n\nvar bind = zrUtil.bind;\nvar Group = graphic.Group;\nvar Rect = graphic.Rect;\nvar each = zrUtil.each;\n\nvar DRAG_THRESHOLD = 3;\nvar PATH_LABEL_NOAMAL = ['label'];\nvar PATH_LABEL_EMPHASIS = ['emphasis', 'label'];\nvar PATH_UPPERLABEL_NORMAL = ['upperLabel'];\nvar PATH_UPPERLABEL_EMPHASIS = ['emphasis', 'upperLabel'];\nvar Z_BASE = 10; // Should bigger than every z.\nvar Z_BG = 1;\nvar Z_CONTENT = 2;\n\nvar getItemStyleEmphasis = makeStyleMapper([\n    ['fill', 'color'],\n    // `borderColor` and `borderWidth` has been occupied,\n    // so use `stroke` to indicate the stroke of the rect.\n    ['stroke', 'strokeColor'],\n    ['lineWidth', 'strokeWidth'],\n    ['shadowBlur'],\n    ['shadowOffsetX'],\n    ['shadowOffsetY'],\n    ['shadowColor']\n]);\nvar getItemStyleNormal = function (model) {\n    // Normal style props should include emphasis style props.\n    var itemStyle = getItemStyleEmphasis(model);\n    // Clear styles set by emphasis.\n    itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null;\n    return itemStyle;\n};\n\nexport default echarts.extendChartView({\n\n    type: 'treemap',\n\n    /**\n     * @override\n     */\n    init: function (o, api) {\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this._containerGroup;\n\n        /**\n         * @private\n         * @type {Object.<string, Array.<module:zrender/container/Group>>}\n         */\n        this._storage = createStorage();\n\n        /**\n         * @private\n         * @type {module:echarts/data/Tree}\n         */\n        this._oldTree;\n\n        /**\n         * @private\n         * @type {module:echarts/chart/treemap/Breadcrumb}\n         */\n        this._breadcrumb;\n\n        /**\n         * @private\n         * @type {module:echarts/component/helper/RoamController}\n         */\n        this._controller;\n\n        /**\n         * 'ready', 'animating'\n         * @private\n         */\n        this._state = 'ready';\n    },\n\n    /**\n     * @override\n     */\n    render: function (seriesModel, ecModel, api, payload) {\n\n        var models = ecModel.findComponents({\n            mainType: 'series', subType: 'treemap', query: payload\n        });\n        if (zrUtil.indexOf(models, seriesModel) < 0) {\n            return;\n        }\n\n        this.seriesModel = seriesModel;\n        this.api = api;\n        this.ecModel = ecModel;\n\n        var types = ['treemapZoomToNode', 'treemapRootToNode'];\n        var targetInfo = helper\n            .retrieveTargetInfo(payload, types, seriesModel);\n        var payloadType = payload && payload.type;\n        var layoutInfo = seriesModel.layoutInfo;\n        var isInit = !this._oldTree;\n        var thisStorage = this._storage;\n\n        // Mark new root when action is treemapRootToNode.\n        var reRoot = (payloadType === 'treemapRootToNode' && targetInfo && thisStorage)\n            ? {\n                rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()],\n                direction: payload.direction\n            }\n            : null;\n\n        var containerGroup = this._giveContainerGroup(layoutInfo);\n\n        var renderResult = this._doRender(containerGroup, seriesModel, reRoot);\n        (\n            !isInit && (\n                !payloadType\n                || payloadType === 'treemapZoomToNode'\n                || payloadType === 'treemapRootToNode'\n            )\n        )\n            ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot)\n            : renderResult.renderFinally();\n\n        this._resetController(api);\n\n        this._renderBreadcrumb(seriesModel, api, targetInfo);\n    },\n\n    /**\n     * @private\n     */\n    _giveContainerGroup: function (layoutInfo) {\n        var containerGroup = this._containerGroup;\n        if (!containerGroup) {\n            // FIXME\n            // 加一层containerGroup是为了clip，但是现在clip功能并没有实现。\n            containerGroup = this._containerGroup = new Group();\n            this._initEvents(containerGroup);\n            this.group.add(containerGroup);\n        }\n        containerGroup.attr('position', [layoutInfo.x, layoutInfo.y]);\n\n        return containerGroup;\n    },\n\n    /**\n     * @private\n     */\n    _doRender: function (containerGroup, seriesModel, reRoot) {\n        var thisTree = seriesModel.getData().tree;\n        var oldTree = this._oldTree;\n\n        // Clear last shape records.\n        var lastsForAnimation = createStorage();\n        var thisStorage = createStorage();\n        var oldStorage = this._storage;\n        var willInvisibleEls = [];\n        var doRenderNode = zrUtil.curry(\n            renderNode, seriesModel,\n            thisStorage, oldStorage, reRoot,\n            lastsForAnimation, willInvisibleEls\n        );\n\n        // Notice: when thisTree and oldTree are the same tree (see list.cloneShallow),\n        // the oldTree is actually losted, so we can not find all of the old graphic\n        // elements from tree. So we use this stragegy: make element storage, move\n        // from old storage to new storage, clear old storage.\n\n        dualTravel(\n            thisTree.root ? [thisTree.root] : [],\n            (oldTree && oldTree.root) ? [oldTree.root] : [],\n            containerGroup,\n            thisTree === oldTree || !oldTree,\n            0\n        );\n\n        // Process all removing.\n        var willDeleteEls = clearStorage(oldStorage);\n\n        this._oldTree = thisTree;\n        this._storage = thisStorage;\n\n        return {\n            lastsForAnimation: lastsForAnimation,\n            willDeleteEls: willDeleteEls,\n            renderFinally: renderFinally\n        };\n\n        function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) {\n            // When 'render' is triggered by action,\n            // 'this' and 'old' may be the same tree,\n            // we use rawIndex in that case.\n            if (sameTree) {\n                oldViewChildren = thisViewChildren;\n                each(thisViewChildren, function (child, index) {\n                    !child.isRemoved() && processNode(index, index);\n                });\n            }\n            // Diff hierarchically (diff only in each subtree, but not whole).\n            // because, consistency of view is important.\n            else {\n                (new DataDiffer(oldViewChildren, thisViewChildren, getKey, getKey))\n                    .add(processNode)\n                    .update(processNode)\n                    .remove(zrUtil.curry(processNode, null))\n                    .execute();\n            }\n\n            function getKey(node) {\n                // Identify by name or raw index.\n                return node.getId();\n            }\n\n            function processNode(newIndex, oldIndex) {\n                var thisNode = newIndex != null ? thisViewChildren[newIndex] : null;\n                var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null;\n\n                var group = doRenderNode(thisNode, oldNode, parentGroup, depth);\n\n                group && dualTravel(\n                    thisNode && thisNode.viewChildren || [],\n                    oldNode && oldNode.viewChildren || [],\n                    group,\n                    sameTree,\n                    depth + 1\n                );\n            }\n        }\n\n        function clearStorage(storage) {\n            var willDeleteEls = createStorage();\n            storage && each(storage, function (store, storageName) {\n                var delEls = willDeleteEls[storageName];\n                each(store, function (el) {\n                    el && (delEls.push(el), el.__tmWillDelete = 1);\n                });\n            });\n            return willDeleteEls;\n        }\n\n        function renderFinally() {\n            each(willDeleteEls, function (els) {\n                each(els, function (el) {\n                    el.parent && el.parent.remove(el);\n                });\n            });\n            each(willInvisibleEls, function (el) {\n                el.invisible = true;\n                // Setting invisible is for optimizing, so no need to set dirty,\n                // just mark as invisible.\n                el.dirty();\n            });\n        }\n    },\n\n    /**\n     * @private\n     */\n    _doAnimation: function (containerGroup, renderResult, seriesModel, reRoot) {\n        if (!seriesModel.get('animation')) {\n            return;\n        }\n\n        var duration = seriesModel.get('animationDurationUpdate');\n        var easing = seriesModel.get('animationEasing');\n        var animationWrap = animationUtil.createWrap();\n\n        // Make delete animations.\n        each(renderResult.willDeleteEls, function (store, storageName) {\n            each(store, function (el, rawIndex) {\n                if (el.invisible) {\n                    return;\n                }\n\n                var parent = el.parent; // Always has parent, and parent is nodeGroup.\n                var target;\n\n                if (reRoot && reRoot.direction === 'drillDown') {\n                    target = parent === reRoot.rootNodeGroup\n                        // This is the content element of view root.\n                        // Only `content` will enter this branch, because\n                        // `background` and `nodeGroup` will not be deleted.\n                        ? {\n                            shape: {\n                                x: 0,\n                                y: 0,\n                                width: parent.__tmNodeWidth,\n                                height: parent.__tmNodeHeight\n                            },\n                            style: {\n                                opacity: 0\n                            }\n                        }\n                        // Others.\n                        : {style: {opacity: 0}};\n                }\n                else {\n                    var targetX = 0;\n                    var targetY = 0;\n\n                    if (!parent.__tmWillDelete) {\n                        // Let node animate to right-bottom corner, cooperating with fadeout,\n                        // which is appropriate for user understanding.\n                        // Divided by 2 for reRoot rolling up effect.\n                        targetX = parent.__tmNodeWidth / 2;\n                        targetY = parent.__tmNodeHeight / 2;\n                    }\n\n                    target = storageName === 'nodeGroup'\n                        ? {position: [targetX, targetY], style: {opacity: 0}}\n                        : {\n                            shape: {x: targetX, y: targetY, width: 0, height: 0},\n                            style: {opacity: 0}\n                        };\n                }\n\n                target && animationWrap.add(el, target, duration, easing);\n            });\n        });\n\n        // Make other animations\n        each(this._storage, function (store, storageName) {\n            each(store, function (el, rawIndex) {\n                var last = renderResult.lastsForAnimation[storageName][rawIndex];\n                var target = {};\n\n                if (!last) {\n                    return;\n                }\n\n                if (storageName === 'nodeGroup') {\n                    if (last.old) {\n                        target.position = el.position.slice();\n                        el.attr('position', last.old);\n                    }\n                }\n                else {\n                    if (last.old) {\n                        target.shape = zrUtil.extend({}, el.shape);\n                        el.setShape(last.old);\n                    }\n\n                    if (last.fadein) {\n                        el.setStyle('opacity', 0);\n                        target.style = {opacity: 1};\n                    }\n                    // When animation is stopped for succedent animation starting,\n                    // el.style.opacity might not be 1\n                    else if (el.style.opacity !== 1) {\n                        target.style = {opacity: 1};\n                    }\n                }\n\n                animationWrap.add(el, target, duration, easing);\n            });\n        }, this);\n\n        this._state = 'animating';\n\n        animationWrap\n            .done(bind(function () {\n                this._state = 'ready';\n                renderResult.renderFinally();\n            }, this))\n            .start();\n    },\n\n    /**\n     * @private\n     */\n    _resetController: function (api) {\n        var controller = this._controller;\n\n        // Init controller.\n        if (!controller) {\n            controller = this._controller = new RoamController(api.getZr());\n            controller.enable(this.seriesModel.get('roam'));\n            controller.on('pan', bind(this._onPan, this));\n            controller.on('zoom', bind(this._onZoom, this));\n        }\n\n        var rect = new BoundingRect(0, 0, api.getWidth(), api.getHeight());\n        controller.setPointerChecker(function (e, x, y) {\n            return rect.contain(x, y);\n        });\n    },\n\n    /**\n     * @private\n     */\n    _clearController: function () {\n        var controller = this._controller;\n        if (controller) {\n            controller.dispose();\n            controller = null;\n        }\n    },\n\n    /**\n     * @private\n     */\n    _onPan: function (e) {\n        if (this._state !== 'animating'\n            && (Math.abs(e.dx) > DRAG_THRESHOLD || Math.abs(e.dy) > DRAG_THRESHOLD)\n        ) {\n            // These param must not be cached.\n            var root = this.seriesModel.getData().tree.root;\n\n            if (!root) {\n                return;\n            }\n\n            var rootLayout = root.getLayout();\n\n            if (!rootLayout) {\n                return;\n            }\n\n            this.api.dispatchAction({\n                type: 'treemapMove',\n                from: this.uid,\n                seriesId: this.seriesModel.id,\n                rootRect: {\n                    x: rootLayout.x + e.dx, y: rootLayout.y + e.dy,\n                    width: rootLayout.width, height: rootLayout.height\n                }\n            });\n        }\n    },\n\n    /**\n     * @private\n     */\n    _onZoom: function (e) {\n        var mouseX = e.originX;\n        var mouseY = e.originY;\n\n        if (this._state !== 'animating') {\n            // These param must not be cached.\n            var root = this.seriesModel.getData().tree.root;\n\n            if (!root) {\n                return;\n            }\n\n            var rootLayout = root.getLayout();\n\n            if (!rootLayout) {\n                return;\n            }\n\n            var rect = new BoundingRect(\n                rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height\n            );\n            var layoutInfo = this.seriesModel.layoutInfo;\n\n            // Transform mouse coord from global to containerGroup.\n            mouseX -= layoutInfo.x;\n            mouseY -= layoutInfo.y;\n\n            // Scale root bounding rect.\n            var m = matrix.create();\n            matrix.translate(m, m, [-mouseX, -mouseY]);\n            matrix.scale(m, m, [e.scale, e.scale]);\n            matrix.translate(m, m, [mouseX, mouseY]);\n\n            rect.applyTransform(m);\n\n            this.api.dispatchAction({\n                type: 'treemapRender',\n                from: this.uid,\n                seriesId: this.seriesModel.id,\n                rootRect: {\n                    x: rect.x, y: rect.y,\n                    width: rect.width, height: rect.height\n                }\n            });\n        }\n    },\n\n    /**\n     * @private\n     */\n    _initEvents: function (containerGroup) {\n        containerGroup.on('click', function (e) {\n            if (this._state !== 'ready') {\n                return;\n            }\n\n            var nodeClick = this.seriesModel.get('nodeClick', true);\n\n            if (!nodeClick) {\n                return;\n            }\n\n            var targetInfo = this.findTarget(e.offsetX, e.offsetY);\n\n            if (!targetInfo) {\n                return;\n            }\n\n            var node = targetInfo.node;\n            if (node.getLayout().isLeafRoot) {\n                this._rootToNode(targetInfo);\n            }\n            else {\n                if (nodeClick === 'zoomToNode') {\n                    this._zoomToNode(targetInfo);\n                }\n                else if (nodeClick === 'link') {\n                    var itemModel = node.hostTree.data.getItemModel(node.dataIndex);\n                    var link = itemModel.get('link', true);\n                    var linkTarget = itemModel.get('target', true) || 'blank';\n                    link && window.open(link, linkTarget);\n                }\n            }\n\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _renderBreadcrumb: function (seriesModel, api, targetInfo) {\n        if (!targetInfo) {\n            targetInfo = seriesModel.get('leafDepth', true) != null\n                ? {node: seriesModel.getViewRoot()}\n                // FIXME\n                // better way?\n                // Find breadcrumb tail on center of containerGroup.\n                : this.findTarget(api.getWidth() / 2, api.getHeight() / 2);\n\n            if (!targetInfo) {\n                targetInfo = {node: seriesModel.getData().tree.root};\n            }\n        }\n\n        (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group)))\n            .render(seriesModel, api, targetInfo.node, bind(onSelect, this));\n\n        function onSelect(node) {\n            if (this._state !== 'animating') {\n                helper.aboveViewRoot(seriesModel.getViewRoot(), node)\n                    ? this._rootToNode({node: node})\n                    : this._zoomToNode({node: node});\n            }\n        }\n    },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        this._clearController();\n        this._containerGroup && this._containerGroup.removeAll();\n        this._storage = createStorage();\n        this._state = 'ready';\n        this._breadcrumb && this._breadcrumb.remove();\n    },\n\n    dispose: function () {\n        this._clearController();\n    },\n\n    /**\n     * @private\n     */\n    _zoomToNode: function (targetInfo) {\n        this.api.dispatchAction({\n            type: 'treemapZoomToNode',\n            from: this.uid,\n            seriesId: this.seriesModel.id,\n            targetNode: targetInfo.node\n        });\n    },\n\n    /**\n     * @private\n     */\n    _rootToNode: function (targetInfo) {\n        this.api.dispatchAction({\n            type: 'treemapRootToNode',\n            from: this.uid,\n            seriesId: this.seriesModel.id,\n            targetNode: targetInfo.node\n        });\n    },\n\n    /**\n     * @public\n     * @param {number} x Global coord x.\n     * @param {number} y Global coord y.\n     * @return {Object} info If not found, return undefined;\n     * @return {number} info.node Target node.\n     * @return {number} info.offsetX x refer to target node.\n     * @return {number} info.offsetY y refer to target node.\n     */\n    findTarget: function (x, y) {\n        var targetInfo;\n        var viewRoot = this.seriesModel.getViewRoot();\n\n        viewRoot.eachNode({attr: 'viewChildren', order: 'preorder'}, function (node) {\n            var bgEl = this._storage.background[node.getRawIndex()];\n            // If invisible, there might be no element.\n            if (bgEl) {\n                var point = bgEl.transformCoordToLocal(x, y);\n                var shape = bgEl.shape;\n\n                // For performance consideration, dont use 'getBoundingRect'.\n                if (shape.x <= point[0]\n                    && point[0] <= shape.x + shape.width\n                    && shape.y <= point[1]\n                    && point[1] <= shape.y + shape.height\n                ) {\n                    targetInfo = {node: node, offsetX: point[0], offsetY: point[1]};\n                }\n                else {\n                    return false; // Suppress visit subtree.\n                }\n            }\n        }, this);\n\n        return targetInfo;\n    }\n\n});\n\n/**\n * @inner\n */\nfunction createStorage() {\n    return {nodeGroup: [], background: [], content: []};\n}\n\n/**\n * @inner\n * @return Return undefined means do not travel further.\n */\nfunction renderNode(\n    seriesModel, thisStorage, oldStorage, reRoot,\n    lastsForAnimation, willInvisibleEls,\n    thisNode, oldNode, parentGroup, depth\n) {\n    // Whether under viewRoot.\n    if (!thisNode) {\n        // Deleting nodes will be performed finally. This method just find\n        // element from old storage, or create new element, set them to new\n        // storage, and set styles.\n        return;\n    }\n\n    // -------------------------------------------------------------------\n    // Start of closure variables available in \"Procedures in renderNode\".\n\n    var thisLayout = thisNode.getLayout();\n\n    if (!thisLayout || !thisLayout.isInView) {\n        return;\n    }\n\n    var thisWidth = thisLayout.width;\n    var thisHeight = thisLayout.height;\n    var borderWidth = thisLayout.borderWidth;\n    var thisInvisible = thisLayout.invisible;\n\n    var thisRawIndex = thisNode.getRawIndex();\n    var oldRawIndex = oldNode && oldNode.getRawIndex();\n\n    var thisViewChildren = thisNode.viewChildren;\n    var upperHeight = thisLayout.upperHeight;\n    var isParent = thisViewChildren && thisViewChildren.length;\n    var itemStyleNormalModel = thisNode.getModel('itemStyle');\n    var itemStyleEmphasisModel = thisNode.getModel('emphasis.itemStyle');\n\n    // End of closure ariables available in \"Procedures in renderNode\".\n    // -----------------------------------------------------------------\n\n    // Node group\n    var group = giveGraphic('nodeGroup', Group);\n\n    if (!group) {\n        return;\n    }\n\n    parentGroup.add(group);\n    // x,y are not set when el is above view root.\n    group.attr('position', [thisLayout.x || 0, thisLayout.y || 0]);\n    group.__tmNodeWidth = thisWidth;\n    group.__tmNodeHeight = thisHeight;\n\n    if (thisLayout.isAboveViewRoot) {\n        return group;\n    }\n\n    // Background\n    var bg = giveGraphic('background', Rect, depth, Z_BG);\n    bg && renderBackground(group, bg, isParent && thisLayout.upperHeight);\n\n    // No children, render content.\n    if (!isParent) {\n        var content = giveGraphic('content', Rect, depth, Z_CONTENT);\n        content && renderContent(group, content);\n    }\n\n    return group;\n\n    // ----------------------------\n    // | Procedures in renderNode |\n    // ----------------------------\n\n    function renderBackground(group, bg, useUpperLabel) {\n        // For tooltip.\n        bg.dataIndex = thisNode.dataIndex;\n        bg.seriesIndex = seriesModel.seriesIndex;\n\n        bg.setShape({x: 0, y: 0, width: thisWidth, height: thisHeight});\n        var visualBorderColor = thisNode.getVisual('borderColor', true);\n        var emphasisBorderColor = itemStyleEmphasisModel.get('borderColor');\n\n        updateStyle(bg, function () {\n            var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n            normalStyle.fill = visualBorderColor;\n            var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel);\n            emphasisStyle.fill = emphasisBorderColor;\n\n            if (useUpperLabel) {\n                var upperLabelWidth = thisWidth - 2 * borderWidth;\n\n                prepareText(\n                    normalStyle, emphasisStyle, visualBorderColor, upperLabelWidth, upperHeight,\n                    {x: borderWidth, y: 0, width: upperLabelWidth, height: upperHeight}\n                );\n            }\n            // For old bg.\n            else {\n                normalStyle.text = emphasisStyle.text = null;\n            }\n\n            bg.setStyle(normalStyle);\n            graphic.setHoverStyle(bg, emphasisStyle);\n        });\n\n        group.add(bg);\n    }\n\n    function renderContent(group, content) {\n        // For tooltip.\n        content.dataIndex = thisNode.dataIndex;\n        content.seriesIndex = seriesModel.seriesIndex;\n\n        var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0);\n        var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0);\n\n        content.culling = true;\n        content.setShape({\n            x: borderWidth,\n            y: borderWidth,\n            width: contentWidth,\n            height: contentHeight\n        });\n\n        var visualColor = thisNode.getVisual('color', true);\n        updateStyle(content, function () {\n            var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n            normalStyle.fill = visualColor;\n            var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel);\n\n            prepareText(normalStyle, emphasisStyle, visualColor, contentWidth, contentHeight);\n\n            content.setStyle(normalStyle);\n            graphic.setHoverStyle(content, emphasisStyle);\n        });\n\n        group.add(content);\n    }\n\n    function updateStyle(element, cb) {\n        if (!thisInvisible) {\n            // If invisible, do not set visual, otherwise the element will\n            // change immediately before animation. We think it is OK to\n            // remain its origin color when moving out of the view window.\n            cb();\n\n            if (!element.__tmWillVisible) {\n                element.invisible = false;\n            }\n        }\n        else {\n            // Delay invisible setting utill animation finished,\n            // avoid element vanish suddenly before animation.\n            !element.invisible && willInvisibleEls.push(element);\n        }\n    }\n\n    function prepareText(normalStyle, emphasisStyle, visualColor, width, height, upperLabelRect) {\n        var nodeModel = thisNode.getModel();\n        var text = zrUtil.retrieve(\n            seriesModel.getFormattedLabel(\n                thisNode.dataIndex, 'normal', null, null, upperLabelRect ? 'upperLabel' : 'label'\n            ),\n            nodeModel.get('name')\n        );\n        if (!upperLabelRect && thisLayout.isLeafRoot) {\n            var iconChar = seriesModel.get('drillDownIcon', true);\n            text = iconChar ? iconChar + ' ' + text : text;\n        }\n\n        var normalLabelModel = nodeModel.getModel(\n            upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL\n        );\n        var emphasisLabelModel = nodeModel.getModel(\n            upperLabelRect ? PATH_UPPERLABEL_EMPHASIS : PATH_LABEL_EMPHASIS\n        );\n\n        var isShow = normalLabelModel.getShallow('show');\n\n        graphic.setLabelStyle(\n            normalStyle, emphasisStyle, normalLabelModel, emphasisLabelModel,\n            {\n                defaultText: isShow ? text : null,\n                autoColor: visualColor,\n                isRectText: true\n            }\n        );\n\n        upperLabelRect && (normalStyle.textRect = zrUtil.clone(upperLabelRect));\n\n        normalStyle.truncate = (isShow && normalLabelModel.get('ellipsis'))\n            ? {\n                outerWidth: width,\n                outerHeight: height,\n                minChar: 2\n            }\n            : null;\n    }\n\n    function giveGraphic(storageName, Ctor, depth, z) {\n        var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex];\n        var lasts = lastsForAnimation[storageName];\n\n        if (element) {\n            // Remove from oldStorage\n            oldStorage[storageName][oldRawIndex] = null;\n            prepareAnimationWhenHasOld(lasts, element, storageName);\n        }\n        // If invisible and no old element, do not create new element (for optimizing).\n        else if (!thisInvisible) {\n            element = new Ctor({z: calculateZ(depth, z)});\n            element.__tmDepth = depth;\n            element.__tmStorageName = storageName;\n            prepareAnimationWhenNoOld(lasts, element, storageName);\n        }\n\n        // Set to thisStorage\n        return (thisStorage[storageName][thisRawIndex] = element);\n    }\n\n    function prepareAnimationWhenHasOld(lasts, element, storageName) {\n        var lastCfg = lasts[thisRawIndex] = {};\n        lastCfg.old = storageName === 'nodeGroup'\n            ? element.position.slice()\n            : zrUtil.extend({}, element.shape);\n    }\n\n    // If a element is new, we need to find the animation start point carefully,\n    // otherwise it will looks strange when 'zoomToNode'.\n    function prepareAnimationWhenNoOld(lasts, element, storageName) {\n        var lastCfg = lasts[thisRawIndex] = {};\n        var parentNode = thisNode.parentNode;\n\n        if (parentNode && (!reRoot || reRoot.direction === 'drillDown')) {\n            var parentOldX = 0;\n            var parentOldY = 0;\n\n            // New nodes appear from right-bottom corner in 'zoomToNode' animation.\n            // For convenience, get old bounding rect from background.\n            var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()];\n            if (!reRoot && parentOldBg && parentOldBg.old) {\n                parentOldX = parentOldBg.old.width;\n                parentOldY = parentOldBg.old.height;\n            }\n\n            // When no parent old shape found, its parent is new too,\n            // so we can just use {x:0, y:0}.\n            lastCfg.old = storageName === 'nodeGroup'\n                ? [0, parentOldY]\n                : {x: parentOldX, y: parentOldY, width: 0, height: 0};\n        }\n\n        // Fade in, user can be aware that these nodes are new.\n        lastCfg.fadein = storageName !== 'nodeGroup';\n    }\n}\n\n// We can not set all backgroud with the same z, Because the behaviour of\n// drill down and roll up differ background creation sequence from tree\n// hierarchy sequence, which cause that lowser background element overlap\n// upper ones. So we calculate z based on depth.\n// Moreover, we try to shrink down z interval to [0, 1] to avoid that\n// treemap with large z overlaps other components.\nfunction calculateZ(depth, zInLevel) {\n    var zb = depth * Z_BASE + zInLevel;\n    return (zb - 1) / zb;\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 * @file Treemap action\n */\n\nimport * as echarts from '../../echarts';\nimport * as helper from '../helper/treeHelper';\n\nvar noop = function () {};\n\nvar actionTypes = [\n    'treemapZoomToNode',\n    'treemapRender',\n    'treemapMove'\n];\n\nfor (var i = 0; i < actionTypes.length; i++) {\n    echarts.registerAction({type: actionTypes[i], update: 'updateView'}, noop);\n}\n\necharts.registerAction(\n    {type: 'treemapRootToNode', update: 'updateView'},\n    function (payload, ecModel) {\n\n        ecModel.eachComponent(\n            {mainType: 'series', subType: 'treemap', query: payload},\n            handleRootToNode\n        );\n\n        function handleRootToNode(model, index) {\n            var types = ['treemapZoomToNode', 'treemapRootToNode'];\n            var targetInfo = helper.retrieveTargetInfo(payload, types, model);\n\n            if (targetInfo) {\n                var originViewRoot = model.getViewRoot();\n                if (originViewRoot) {\n                    payload.direction = helper.aboveViewRoot(originViewRoot, targetInfo.node)\n                        ? 'rollUp' : 'drillDown';\n                }\n                model.resetViewRoot(targetInfo.node);\n            }\n        }\n    }\n);\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as zrColor from 'zrender/src/tool/color';\nimport {linearMap} from '../util/number';\n\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\n\nvar CATEGORY_DEFAULT_VISUAL_INDEX = -1;\n\n/**\n * @param {Object} option\n * @param {string} [option.type] See visualHandlers.\n * @param {string} [option.mappingMethod] 'linear' or 'piecewise' or 'category' or 'fixed'\n * @param {Array.<number>=} [option.dataExtent] [minExtent, maxExtent],\n *                                              required when mappingMethod is 'linear'\n * @param {Array.<Object>=} [option.pieceList] [\n *                                             {value: someValue},\n *                                             {interval: [min1, max1], visual: {...}},\n *                                             {interval: [min2, max2]}\n *                                             ],\n *                                            required when mappingMethod is 'piecewise'.\n *                                            Visual for only each piece can be specified.\n * @param {Array.<string|Object>=} [option.categories] ['cate1', 'cate2']\n *                                            required when mappingMethod is 'category'.\n *                                            If no option.categories, categories is set\n *                                            as [0, 1, 2, ...].\n * @param {boolean} [option.loop=false] Whether loop mapping when mappingMethod is 'category'.\n * @param {(Array|Object|*)} [option.visual]  Visual data.\n *                                            when mappingMethod is 'category',\n *                                            visual data can be array or object\n *                                            (like: {cate1: '#222', none: '#fff'})\n *                                            or primary types (which represents\n *                                            defualt category visual), otherwise visual\n *                                            can be array or primary (which will be\n *                                            normalized to array).\n *\n */\nvar VisualMapping = function (option) {\n    var mappingMethod = option.mappingMethod;\n    var visualType = option.type;\n\n    /**\n     * @readOnly\n     * @type {Object}\n     */\n    var thisOption = this.option = zrUtil.clone(option);\n\n    /**\n     * @readOnly\n     * @type {string}\n     */\n    this.type = visualType;\n\n    /**\n     * @readOnly\n     * @type {string}\n     */\n    this.mappingMethod = mappingMethod;\n\n    /**\n     * @private\n     * @type {Function}\n     */\n    this._normalizeData = normalizers[mappingMethod];\n\n    var visualHandler = visualHandlers[visualType];\n\n    /**\n     * @public\n     * @type {Function}\n     */\n    this.applyVisual = visualHandler.applyVisual;\n\n    /**\n     * @public\n     * @type {Function}\n     */\n    this.getColorMapper = visualHandler.getColorMapper;\n\n    /**\n     * @private\n     * @type {Function}\n     */\n    this._doMap = visualHandler._doMap[mappingMethod];\n\n    if (mappingMethod === 'piecewise') {\n        normalizeVisualRange(thisOption);\n        preprocessForPiecewise(thisOption);\n    }\n    else if (mappingMethod === 'category') {\n        thisOption.categories\n            ? preprocessForSpecifiedCategory(thisOption)\n            // categories is ordinal when thisOption.categories not specified,\n            // which need no more preprocess except normalize visual.\n            : normalizeVisualRange(thisOption, true);\n    }\n    else { // mappingMethod === 'linear' or 'fixed'\n        zrUtil.assert(mappingMethod !== 'linear' || thisOption.dataExtent);\n        normalizeVisualRange(thisOption);\n    }\n};\n\nVisualMapping.prototype = {\n\n    constructor: VisualMapping,\n\n    mapValueToVisual: function (value) {\n        var normalized = this._normalizeData(value);\n        return this._doMap(normalized, value);\n    },\n\n    getNormalizer: function () {\n        return zrUtil.bind(this._normalizeData, this);\n    }\n};\n\nvar visualHandlers = VisualMapping.visualHandlers = {\n\n    color: {\n\n        applyVisual: makeApplyVisual('color'),\n\n        /**\n         * Create a mapper function\n         * @return {Function}\n         */\n        getColorMapper: function () {\n            var thisOption = this.option;\n\n            return zrUtil.bind(\n                thisOption.mappingMethod === 'category'\n                    ? function (value, isNormalized) {\n                        !isNormalized && (value = this._normalizeData(value));\n                        return doMapCategory.call(this, value);\n                    }\n                    : function (value, isNormalized, out) {\n                        // If output rgb array\n                        // which will be much faster and useful in pixel manipulation\n                        var returnRGBArray = !!out;\n                        !isNormalized && (value = this._normalizeData(value));\n                        out = zrColor.fastLerp(value, thisOption.parsedVisual, out);\n                        return returnRGBArray ? out : zrColor.stringify(out, 'rgba');\n                    },\n                this\n            );\n        },\n\n        _doMap: {\n            linear: function (normalized) {\n                return zrColor.stringify(\n                    zrColor.fastLerp(normalized, this.option.parsedVisual),\n                    'rgba'\n                );\n            },\n            category: doMapCategory,\n            piecewise: function (normalized, value) {\n                var result = getSpecifiedVisual.call(this, value);\n                if (result == null) {\n                    result = zrColor.stringify(\n                        zrColor.fastLerp(normalized, this.option.parsedVisual),\n                        'rgba'\n                    );\n                }\n                return result;\n            },\n            fixed: doMapFixed\n        }\n    },\n\n    colorHue: makePartialColorVisualHandler(function (color, value) {\n        return zrColor.modifyHSL(color, value);\n    }),\n\n    colorSaturation: makePartialColorVisualHandler(function (color, value) {\n        return zrColor.modifyHSL(color, null, value);\n    }),\n\n    colorLightness: makePartialColorVisualHandler(function (color, value) {\n        return zrColor.modifyHSL(color, null, null, value);\n    }),\n\n    colorAlpha: makePartialColorVisualHandler(function (color, value) {\n        return zrColor.modifyAlpha(color, value);\n    }),\n\n    opacity: {\n        applyVisual: makeApplyVisual('opacity'),\n        _doMap: makeDoMap([0, 1])\n    },\n\n    liftZ: {\n        applyVisual: makeApplyVisual('liftZ'),\n        _doMap: {\n            linear: doMapFixed,\n            category: doMapFixed,\n            piecewise: doMapFixed,\n            fixed: doMapFixed\n        }\n    },\n\n    symbol: {\n        applyVisual: function (value, getter, setter) {\n            var symbolCfg = this.mapValueToVisual(value);\n            if (zrUtil.isString(symbolCfg)) {\n                setter('symbol', symbolCfg);\n            }\n            else if (isObject(symbolCfg)) {\n                for (var name in symbolCfg) {\n                    if (symbolCfg.hasOwnProperty(name)) {\n                        setter(name, symbolCfg[name]);\n                    }\n                }\n            }\n        },\n        _doMap: {\n            linear: doMapToArray,\n            category: doMapCategory,\n            piecewise: function (normalized, value) {\n                var result = getSpecifiedVisual.call(this, value);\n                if (result == null) {\n                    result = doMapToArray.call(this, normalized);\n                }\n                return result;\n            },\n            fixed: doMapFixed\n        }\n    },\n\n    symbolSize: {\n        applyVisual: makeApplyVisual('symbolSize'),\n        _doMap: makeDoMap([0, 1])\n    }\n};\n\n\nfunction preprocessForPiecewise(thisOption) {\n    var pieceList = thisOption.pieceList;\n    thisOption.hasSpecialVisual = false;\n\n    zrUtil.each(pieceList, function (piece, index) {\n        piece.originIndex = index;\n        // piece.visual is \"result visual value\" but not\n        // a visual range, so it does not need to be normalized.\n        if (piece.visual != null) {\n            thisOption.hasSpecialVisual = true;\n        }\n    });\n}\n\nfunction preprocessForSpecifiedCategory(thisOption) {\n    // Hash categories.\n    var categories = thisOption.categories;\n    var visual = thisOption.visual;\n\n    var categoryMap = thisOption.categoryMap = {};\n    each(categories, function (cate, index) {\n        categoryMap[cate] = index;\n    });\n\n    // Process visual map input.\n    if (!zrUtil.isArray(visual)) {\n        var visualArr = [];\n\n        if (zrUtil.isObject(visual)) {\n            each(visual, function (v, cate) {\n                var index = categoryMap[cate];\n                visualArr[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v;\n            });\n        }\n        else { // Is primary type, represents default visual.\n            visualArr[CATEGORY_DEFAULT_VISUAL_INDEX] = visual;\n        }\n\n        visual = setVisualToOption(thisOption, visualArr);\n    }\n\n    // Remove categories that has no visual,\n    // then we can mapping them to CATEGORY_DEFAULT_VISUAL_INDEX.\n    for (var i = categories.length - 1; i >= 0; i--) {\n        if (visual[i] == null) {\n            delete categoryMap[categories[i]];\n            categories.pop();\n        }\n    }\n}\n\nfunction normalizeVisualRange(thisOption, isCategory) {\n    var visual = thisOption.visual;\n    var visualArr = [];\n\n    if (zrUtil.isObject(visual)) {\n        each(visual, function (v) {\n            visualArr.push(v);\n        });\n    }\n    else if (visual != null) {\n        visualArr.push(visual);\n    }\n\n    var doNotNeedPair = {color: 1, symbol: 1};\n\n    if (!isCategory\n        && visualArr.length === 1\n        && !doNotNeedPair.hasOwnProperty(thisOption.type)\n    ) {\n        // Do not care visualArr.length === 0, which is illegal.\n        visualArr[1] = visualArr[0];\n    }\n\n    setVisualToOption(thisOption, visualArr);\n}\n\nfunction makePartialColorVisualHandler(applyValue) {\n    return {\n        applyVisual: function (value, getter, setter) {\n            value = this.mapValueToVisual(value);\n            // Must not be array value\n            setter('color', applyValue(getter('color'), value));\n        },\n        _doMap: makeDoMap([0, 1])\n    };\n}\n\nfunction doMapToArray(normalized) {\n    var visual = this.option.visual;\n    return visual[\n        Math.round(linearMap(normalized, [0, 1], [0, visual.length - 1], true))\n    ] || {};\n}\n\nfunction makeApplyVisual(visualType) {\n    return function (value, getter, setter) {\n        setter(visualType, this.mapValueToVisual(value));\n    };\n}\n\nfunction doMapCategory(normalized) {\n    var visual = this.option.visual;\n    return visual[\n        (this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX)\n            ? normalized % visual.length\n            : normalized\n    ];\n}\n\nfunction doMapFixed() {\n    return this.option.visual[0];\n}\n\nfunction makeDoMap(sourceExtent) {\n    return {\n        linear: function (normalized) {\n            return linearMap(normalized, sourceExtent, this.option.visual, true);\n        },\n        category: doMapCategory,\n        piecewise: function (normalized, value) {\n            var result = getSpecifiedVisual.call(this, value);\n            if (result == null) {\n                result = linearMap(normalized, sourceExtent, this.option.visual, true);\n            }\n            return result;\n        },\n        fixed: doMapFixed\n    };\n}\n\nfunction getSpecifiedVisual(value) {\n    var thisOption = this.option;\n    var pieceList = thisOption.pieceList;\n    if (thisOption.hasSpecialVisual) {\n        var pieceIndex = VisualMapping.findPieceIndex(value, pieceList);\n        var piece = pieceList[pieceIndex];\n        if (piece && piece.visual) {\n            return piece.visual[this.type];\n        }\n    }\n}\n\nfunction setVisualToOption(thisOption, visualArr) {\n    thisOption.visual = visualArr;\n    if (thisOption.type === 'color') {\n        thisOption.parsedVisual = zrUtil.map(visualArr, function (item) {\n            return zrColor.parse(item);\n        });\n    }\n    return visualArr;\n}\n\n\n/**\n * Normalizers by mapping methods.\n */\nvar normalizers = {\n\n    linear: function (value) {\n        return linearMap(value, this.option.dataExtent, [0, 1], true);\n    },\n\n    piecewise: function (value) {\n        var pieceList = this.option.pieceList;\n        var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true);\n        if (pieceIndex != null) {\n            return linearMap(pieceIndex, [0, pieceList.length - 1], [0, 1], true);\n        }\n    },\n\n    category: function (value) {\n        var index = this.option.categories\n            ? this.option.categoryMap[value]\n            : value; // ordinal\n        return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index;\n    },\n\n    fixed: zrUtil.noop\n};\n\n\n\n/**\n * List available visual types.\n *\n * @public\n * @return {Array.<string>}\n */\nVisualMapping.listVisualTypes = function () {\n    var visualTypes = [];\n    zrUtil.each(visualHandlers, function (handler, key) {\n        visualTypes.push(key);\n    });\n    return visualTypes;\n};\n\n/**\n * @public\n */\nVisualMapping.addVisualHandler = function (name, handler) {\n    visualHandlers[name] = handler;\n};\n\n/**\n * @public\n */\nVisualMapping.isValidType = function (visualType) {\n    return visualHandlers.hasOwnProperty(visualType);\n};\n\n/**\n * Convinent method.\n * Visual can be Object or Array or primary type.\n *\n * @public\n */\nVisualMapping.eachVisual = function (visual, callback, context) {\n    if (zrUtil.isObject(visual)) {\n        zrUtil.each(visual, callback, context);\n    }\n    else {\n        callback.call(context, visual);\n    }\n};\n\nVisualMapping.mapVisual = function (visual, callback, context) {\n    var isPrimary;\n    var newVisual = zrUtil.isArray(visual)\n        ? []\n        : zrUtil.isObject(visual)\n        ? {}\n        : (isPrimary = true, null);\n\n    VisualMapping.eachVisual(visual, function (v, key) {\n        var newVal = callback.call(context, v, key);\n        isPrimary ? (newVisual = newVal) : (newVisual[key] = newVal);\n    });\n    return newVisual;\n};\n\n/**\n * @public\n * @param {Object} obj\n * @return {Object} new object containers visual values.\n *                 If no visuals, return null.\n */\nVisualMapping.retrieveVisuals = function (obj) {\n    var ret = {};\n    var hasVisual;\n\n    obj && each(visualHandlers, function (h, visualType) {\n        if (obj.hasOwnProperty(visualType)) {\n            ret[visualType] = obj[visualType];\n            hasVisual = true;\n        }\n    });\n\n    return hasVisual ? ret : null;\n};\n\n/**\n * Give order to visual types, considering colorSaturation, colorAlpha depends on color.\n *\n * @public\n * @param {(Object|Array)} visualTypes If Object, like: {color: ..., colorSaturation: ...}\n *                                     IF Array, like: ['color', 'symbol', 'colorSaturation']\n * @return {Array.<string>} Sorted visual types.\n */\nVisualMapping.prepareVisualTypes = function (visualTypes) {\n    if (isObject(visualTypes)) {\n        var types = [];\n        each(visualTypes, function (item, type) {\n            types.push(type);\n        });\n        visualTypes = types;\n    }\n    else if (zrUtil.isArray(visualTypes)) {\n        visualTypes = visualTypes.slice();\n    }\n    else {\n        return [];\n    }\n\n    visualTypes.sort(function (type1, type2) {\n        // color should be front of colorSaturation, colorAlpha, ...\n        // symbol and symbolSize do not matter.\n        return (type2 === 'color' && type1 !== 'color' && type1.indexOf('color') === 0)\n            ? 1 : -1;\n    });\n\n    return visualTypes;\n};\n\n/**\n * 'color', 'colorSaturation', 'colorAlpha', ... are depends on 'color'.\n * Other visuals are only depends on themself.\n *\n * @public\n * @param {string} visualType1\n * @param {string} visualType2\n * @return {boolean}\n */\nVisualMapping.dependsOn = function (visualType1, visualType2) {\n    return visualType2 === 'color'\n        ? !!(visualType1 && visualType1.indexOf(visualType2) === 0)\n        : visualType1 === visualType2;\n};\n\n/**\n * @param {number} value\n * @param {Array.<Object>} pieceList [{value: ..., interval: [min, max]}, ...]\n *                         Always from small to big.\n * @param {boolean} [findClosestWhenOutside=false]\n * @return {number} index\n */\nVisualMapping.findPieceIndex = function (value, pieceList, findClosestWhenOutside) {\n    var possibleI;\n    var abs = Infinity;\n\n    // value has the higher priority.\n    for (var i = 0, len = pieceList.length; i < len; i++) {\n        var pieceValue = pieceList[i].value;\n        if (pieceValue != null) {\n            if (pieceValue === value\n                // FIXME\n                // It is supposed to compare value according to value type of dimension,\n                // but currently value type can exactly be string or number.\n                // Compromise for numeric-like string (like '12'), especially\n                // in the case that visualMap.categories is ['22', '33'].\n                || (typeof pieceValue === 'string' && pieceValue === value + '')\n            ) {\n                return i;\n            }\n            findClosestWhenOutside && updatePossible(pieceValue, i);\n        }\n    }\n\n    for (var i = 0, len = pieceList.length; i < len; i++) {\n        var piece = pieceList[i];\n        var interval = piece.interval;\n        var close = piece.close;\n\n        if (interval) {\n            if (interval[0] === -Infinity) {\n                if (littleThan(close[1], value, interval[1])) {\n                    return i;\n                }\n            }\n            else if (interval[1] === Infinity) {\n                if (littleThan(close[0], interval[0], value)) {\n                    return i;\n                }\n            }\n            else if (\n                littleThan(close[0], interval[0], value)\n                && littleThan(close[1], value, interval[1])\n            ) {\n                return i;\n            }\n            findClosestWhenOutside && updatePossible(interval[0], i);\n            findClosestWhenOutside && updatePossible(interval[1], i);\n        }\n    }\n\n    if (findClosestWhenOutside) {\n        return value === Infinity\n            ? pieceList.length - 1\n            : value === -Infinity\n            ? 0\n            : possibleI;\n    }\n\n    function updatePossible(val, index) {\n        var newAbs = Math.abs(val - value);\n        if (newAbs < abs) {\n            abs = newAbs;\n            possibleI = index;\n        }\n    }\n\n};\n\nfunction littleThan(close, a, b) {\n    return close ? a <= b : a < b;\n}\n\nexport default VisualMapping;\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\nimport VisualMapping from '../../visual/VisualMapping';\nimport * as zrColor from 'zrender/src/tool/color';\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar isArray = zrUtil.isArray;\n\nvar ITEM_STYLE_NORMAL = 'itemStyle';\n\nexport default {\n    seriesType: 'treemap',\n    reset: function (seriesModel, ecModel, api, payload) {\n        var tree = seriesModel.getData().tree;\n        var root = tree.root;\n        var seriesItemStyleModel = seriesModel.getModel(ITEM_STYLE_NORMAL);\n\n        if (root.isRemoved()) {\n            return;\n        }\n\n        var levelItemStyles = zrUtil.map(tree.levelModels, function (levelModel) {\n            return levelModel ? levelModel.get(ITEM_STYLE_NORMAL) : null;\n        });\n\n        travelTree(\n            root, // Visual should calculate from tree root but not view root.\n            {},\n            levelItemStyles,\n            seriesItemStyleModel,\n            seriesModel.getViewRoot().getAncestors(),\n            seriesModel\n        );\n    }\n};\n\nfunction travelTree(\n    node, designatedVisual, levelItemStyles, seriesItemStyleModel,\n    viewRootAncestors, seriesModel\n) {\n    var nodeModel = node.getModel();\n    var nodeLayout = node.getLayout();\n\n    // Optimize\n    if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) {\n        return;\n    }\n\n    var nodeItemStyleModel = node.getModel(ITEM_STYLE_NORMAL);\n    var levelItemStyle = levelItemStyles[node.depth];\n    var visuals = buildVisuals(\n        nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel\n    );\n\n    // calculate border color\n    var borderColor = nodeItemStyleModel.get('borderColor');\n    var borderColorSaturation = nodeItemStyleModel.get('borderColorSaturation');\n    var thisNodeColor;\n    if (borderColorSaturation != null) {\n        // For performance, do not always execute 'calculateColor'.\n        thisNodeColor = calculateColor(visuals, node);\n        borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor);\n    }\n    node.setVisual('borderColor', borderColor);\n\n    var viewChildren = node.viewChildren;\n    if (!viewChildren || !viewChildren.length) {\n        thisNodeColor = calculateColor(visuals, node);\n        // Apply visual to this node.\n        node.setVisual('color', thisNodeColor);\n    }\n    else {\n        var mapping = buildVisualMapping(\n            node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren\n        );\n\n        // Designate visual to children.\n        zrUtil.each(viewChildren, function (child, index) {\n            // If higher than viewRoot, only ancestors of viewRoot is needed to visit.\n            if (child.depth >= viewRootAncestors.length\n                || child === viewRootAncestors[child.depth]\n            ) {\n                var childVisual = mapVisual(\n                    nodeModel, visuals, child, index, mapping, seriesModel\n                );\n                travelTree(\n                    child, childVisual, levelItemStyles, seriesItemStyleModel,\n                    viewRootAncestors, seriesModel\n                );\n            }\n        });\n    }\n}\n\nfunction buildVisuals(\n    nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel\n) {\n    var visuals = zrUtil.extend({}, designatedVisual);\n\n    zrUtil.each(['color', 'colorAlpha', 'colorSaturation'], function (visualName) {\n        // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel\n        var val = nodeItemStyleModel.get(visualName, true); // Ignore parent\n        val == null && levelItemStyle && (val = levelItemStyle[visualName]);\n        val == null && (val = designatedVisual[visualName]);\n        val == null && (val = seriesItemStyleModel.get(visualName));\n\n        val != null && (visuals[visualName] = val);\n    });\n\n    return visuals;\n}\n\nfunction calculateColor(visuals) {\n    var color = getValueVisualDefine(visuals, 'color');\n\n    if (color) {\n        var colorAlpha = getValueVisualDefine(visuals, 'colorAlpha');\n        var colorSaturation = getValueVisualDefine(visuals, 'colorSaturation');\n        if (colorSaturation) {\n            color = zrColor.modifyHSL(color, null, null, colorSaturation);\n        }\n        if (colorAlpha) {\n            color = zrColor.modifyAlpha(color, colorAlpha);\n        }\n\n        return color;\n    }\n}\n\nfunction calculateBorderColor(borderColorSaturation, thisNodeColor) {\n    return thisNodeColor != null\n            ? zrColor.modifyHSL(thisNodeColor, null, null, borderColorSaturation)\n            : null;\n}\n\nfunction getValueVisualDefine(visuals, name) {\n    var value = visuals[name];\n    if (value != null && value !== 'none') {\n        return value;\n    }\n}\n\nfunction buildVisualMapping(\n    node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren\n) {\n    if (!viewChildren || !viewChildren.length) {\n        return;\n    }\n\n    var rangeVisual = getRangeVisual(nodeModel, 'color')\n        || (\n            visuals.color != null\n            && visuals.color !== 'none'\n            && (\n                getRangeVisual(nodeModel, 'colorAlpha')\n                || getRangeVisual(nodeModel, 'colorSaturation')\n            )\n        );\n\n    if (!rangeVisual) {\n        return;\n    }\n\n    var visualMin = nodeModel.get('visualMin');\n    var visualMax = nodeModel.get('visualMax');\n    var dataExtent = nodeLayout.dataExtent.slice();\n    visualMin != null && visualMin < dataExtent[0] && (dataExtent[0] = visualMin);\n    visualMax != null && visualMax > dataExtent[1] && (dataExtent[1] = visualMax);\n\n    var colorMappingBy = nodeModel.get('colorMappingBy');\n    var opt = {\n        type: rangeVisual.name,\n        dataExtent: dataExtent,\n        visual: rangeVisual.range\n    };\n    if (opt.type === 'color'\n        && (colorMappingBy === 'index' || colorMappingBy === 'id')\n    ) {\n        opt.mappingMethod = 'category';\n        opt.loop = true;\n        // categories is ordinal, so do not set opt.categories.\n    }\n    else {\n        opt.mappingMethod = 'linear';\n    }\n\n    var mapping = new VisualMapping(opt);\n    mapping.__drColorMappingBy = colorMappingBy;\n\n    return mapping;\n}\n\n// Notice: If we dont have the attribute 'colorRange', but only use\n// attribute 'color' to represent both concepts of 'colorRange' and 'color',\n// (It means 'colorRange' when 'color' is Array, means 'color' when not array),\n// this problem will be encountered:\n// If a level-1 node dont have children, and its siblings has children,\n// and colorRange is set on level-1, then the node can not be colored.\n// So we separate 'colorRange' and 'color' to different attributes.\nfunction getRangeVisual(nodeModel, name) {\n    // 'colorRange', 'colorARange', 'colorSRange'.\n    // If not exsits on this node, fetch from levels and series.\n    var range = nodeModel.get(name);\n    return (isArray(range) && range.length) ? {name: name, range: range} : null;\n}\n\nfunction mapVisual(nodeModel, visuals, child, index, mapping, seriesModel) {\n    var childVisuals = zrUtil.extend({}, visuals);\n\n    if (mapping) {\n        var mappingType = mapping.type;\n        var colorMappingBy = mappingType === 'color' && mapping.__drColorMappingBy;\n        var value = colorMappingBy === 'index'\n            ? index\n            : colorMappingBy === 'id'\n            ? seriesModel.mapIdToIndex(child.getId())\n            : child.getValue(nodeModel.get('visualDimension'));\n\n        childVisuals[mappingType] = mapping.mapValueToVisual(value);\n    }\n\n    return childVisuals;\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* A third-party license is embeded for some of the code in this file:\n* The treemap layout implementation was originally copied from\n* \"d3.js\" with some modifications made for this project.\n* (See more details in the comment of the method \"squarify\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport {parsePercent, MAX_SAFE_INTEGER} from '../../util/number';\nimport * as layout from '../../util/layout';\nimport * as helper from '../helper/treeHelper';\n\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar retrieveValue = zrUtil.retrieve;\nvar each = zrUtil.each;\n\nvar PATH_BORDER_WIDTH = ['itemStyle', 'borderWidth'];\nvar PATH_GAP_WIDTH = ['itemStyle', 'gapWidth'];\nvar PATH_UPPER_LABEL_SHOW = ['upperLabel', 'show'];\nvar PATH_UPPER_LABEL_HEIGHT = ['upperLabel', 'height'];\n\n/**\n * @public\n */\nexport default {\n    seriesType: 'treemap',\n    reset: function (seriesModel, ecModel, api, payload) {\n        // Layout result in each node:\n        // {x, y, width, height, area, borderWidth}\n        var ecWidth = api.getWidth();\n        var ecHeight = api.getHeight();\n        var seriesOption = seriesModel.option;\n\n        var layoutInfo = layout.getLayoutRect(\n            seriesModel.getBoxLayoutParams(),\n            {\n                width: api.getWidth(),\n                height: api.getHeight()\n            }\n        );\n\n        var size = seriesOption.size || []; // Compatible with ec2.\n        var containerWidth = parsePercent(\n            retrieveValue(layoutInfo.width, size[0]),\n            ecWidth\n        );\n        var containerHeight = parsePercent(\n            retrieveValue(layoutInfo.height, size[1]),\n            ecHeight\n        );\n\n        // Fetch payload info.\n        var payloadType = payload && payload.type;\n        var types = ['treemapZoomToNode', 'treemapRootToNode'];\n        var targetInfo = helper\n            .retrieveTargetInfo(payload, types, seriesModel);\n        var rootRect = (payloadType === 'treemapRender' || payloadType === 'treemapMove')\n            ? payload.rootRect : null;\n        var viewRoot = seriesModel.getViewRoot();\n        var viewAbovePath = helper.getPathToRoot(viewRoot);\n\n        if (payloadType !== 'treemapMove') {\n            var rootSize = payloadType === 'treemapZoomToNode'\n                ? estimateRootSize(\n                    seriesModel, targetInfo, viewRoot, containerWidth, containerHeight\n                )\n                : rootRect\n                ? [rootRect.width, rootRect.height]\n                : [containerWidth, containerHeight];\n\n            var sort = seriesOption.sort;\n            if (sort && sort !== 'asc' && sort !== 'desc') {\n                sort = 'desc';\n            }\n            var options = {\n                squareRatio: seriesOption.squareRatio,\n                sort: sort,\n                leafDepth: seriesOption.leafDepth\n            };\n\n            // layout should be cleared because using updateView but not update.\n            viewRoot.hostTree.clearLayouts();\n\n            // TODO\n            // optimize: if out of view clip, do not layout.\n            // But take care that if do not render node out of view clip,\n            // how to calculate start po\n\n            var viewRootLayout = {\n                x: 0, y: 0,\n                width: rootSize[0], height: rootSize[1],\n                area: rootSize[0] * rootSize[1]\n            };\n            viewRoot.setLayout(viewRootLayout);\n\n            squarify(viewRoot, options, false, 0);\n            // Supplement layout.\n            var viewRootLayout = viewRoot.getLayout();\n            each(viewAbovePath, function (node, index) {\n                var childValue = (viewAbovePath[index + 1] || viewRoot).getValue();\n                node.setLayout(zrUtil.extend(\n                    {dataExtent: [childValue, childValue], borderWidth: 0, upperHeight: 0},\n                    viewRootLayout\n                ));\n            });\n        }\n\n        var treeRoot = seriesModel.getData().tree.root;\n\n        treeRoot.setLayout(\n            calculateRootPosition(layoutInfo, rootRect, targetInfo),\n            true\n        );\n\n        seriesModel.setLayoutInfo(layoutInfo);\n\n        // FIXME\n        // 现在没有clip功能，暂时取ec高宽。\n        prunning(\n            treeRoot,\n            // Transform to base element coordinate system.\n            new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight),\n            viewAbovePath,\n            viewRoot,\n            0\n        );\n    }\n};\n\n/**\n * Layout treemap with squarify algorithm.\n * The original presentation of this algorithm\n * was made by Mark Bruls, Kees Huizing, and Jarke J. van Wijk\n * <https://graphics.ethz.ch/teaching/scivis_common/Literature/squarifiedTreeMaps.pdf>.\n * The implementation of this algorithm was originally copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/layout/treemap.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * @protected\n * @param {module:echarts/data/Tree~TreeNode} node\n * @param {Object} options\n * @param {string} options.sort 'asc' or 'desc'\n * @param {number} options.squareRatio\n * @param {boolean} hideChildren\n * @param {number} depth\n */\nfunction squarify(node, options, hideChildren, depth) {\n    var width;\n    var height;\n\n    if (node.isRemoved()) {\n        return;\n    }\n\n    var thisLayout = node.getLayout();\n    width = thisLayout.width;\n    height = thisLayout.height;\n\n    // Considering border and gap\n    var nodeModel = node.getModel();\n    var borderWidth = nodeModel.get(PATH_BORDER_WIDTH);\n    var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2;\n    var upperLabelHeight = getUpperLabelHeight(nodeModel);\n    var upperHeight = Math.max(borderWidth, upperLabelHeight);\n    var layoutOffset = borderWidth - halfGapWidth;\n    var layoutOffsetUpper = upperHeight - halfGapWidth;\n    var nodeModel = node.getModel();\n\n    node.setLayout({\n        borderWidth: borderWidth,\n        upperHeight: upperHeight,\n        upperLabelHeight: upperLabelHeight\n    }, true);\n\n    width = mathMax(width - 2 * layoutOffset, 0);\n    height = mathMax(height - layoutOffset - layoutOffsetUpper, 0);\n\n    var totalArea = width * height;\n    var viewChildren = initChildren(\n        node, nodeModel, totalArea, options, hideChildren, depth\n    );\n\n    if (!viewChildren.length) {\n        return;\n    }\n\n    var rect = {x: layoutOffset, y: layoutOffsetUpper, width: width, height: height};\n    var rowFixedLength = mathMin(width, height);\n    var best = Infinity; // the best row score so far\n    var row = [];\n    row.area = 0;\n\n    for (var i = 0, len = viewChildren.length; i < len;) {\n        var child = viewChildren[i];\n\n        row.push(child);\n        row.area += child.getLayout().area;\n        var score = worst(row, rowFixedLength, options.squareRatio);\n\n        // continue with this orientation\n        if (score <= best) {\n            i++;\n            best = score;\n        }\n        // abort, and try a different orientation\n        else {\n            row.area -= row.pop().getLayout().area;\n            position(row, rowFixedLength, rect, halfGapWidth, false);\n            rowFixedLength = mathMin(rect.width, rect.height);\n            row.length = row.area = 0;\n            best = Infinity;\n        }\n    }\n\n    if (row.length) {\n        position(row, rowFixedLength, rect, halfGapWidth, true);\n    }\n\n    if (!hideChildren) {\n        var childrenVisibleMin = nodeModel.get('childrenVisibleMin');\n        if (childrenVisibleMin != null && totalArea < childrenVisibleMin) {\n            hideChildren = true;\n        }\n    }\n\n    for (var i = 0, len = viewChildren.length; i < len; i++) {\n        squarify(viewChildren[i], options, hideChildren, depth + 1);\n    }\n}\n\n/**\n * Set area to each child, and calculate data extent for visual coding.\n */\nfunction initChildren(node, nodeModel, totalArea, options, hideChildren, depth) {\n    var viewChildren = node.children || [];\n    var orderBy = options.sort;\n    orderBy !== 'asc' && orderBy !== 'desc' && (orderBy = null);\n\n    var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth;\n\n    // leafDepth has higher priority.\n    if (hideChildren && !overLeafDepth) {\n        return (node.viewChildren = []);\n    }\n\n    // Sort children, order by desc.\n    viewChildren = zrUtil.filter(viewChildren, function (child) {\n        return !child.isRemoved();\n    });\n\n    sort(viewChildren, orderBy);\n\n    var info = statistic(nodeModel, viewChildren, orderBy);\n\n    if (info.sum === 0) {\n        return (node.viewChildren = []);\n    }\n\n    info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren);\n\n    if (info.sum === 0) {\n        return (node.viewChildren = []);\n    }\n\n    // Set area to each child.\n    for (var i = 0, len = viewChildren.length; i < len; i++) {\n        var area = viewChildren[i].getValue() / info.sum * totalArea;\n        // Do not use setLayout({...}, true), because it is needed to clear last layout.\n        viewChildren[i].setLayout({area: area});\n    }\n\n    if (overLeafDepth) {\n        viewChildren.length && node.setLayout({isLeafRoot: true}, true);\n        viewChildren.length = 0;\n    }\n\n    node.viewChildren = viewChildren;\n    node.setLayout({dataExtent: info.dataExtent}, true);\n\n    return viewChildren;\n}\n\n/**\n * Consider 'visibleMin'. Modify viewChildren and get new sum.\n */\nfunction filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) {\n\n    // visibleMin is not supported yet when no option.sort.\n    if (!orderBy) {\n        return sum;\n    }\n\n    var visibleMin = nodeModel.get('visibleMin');\n    var len = orderedChildren.length;\n    var deletePoint = len;\n\n    // Always travel from little value to big value.\n    for (var i = len - 1; i >= 0; i--) {\n        var value = orderedChildren[\n            orderBy === 'asc' ? len - i - 1 : i\n        ].getValue();\n\n        if (value / sum * totalArea < visibleMin) {\n            deletePoint = i;\n            sum -= value;\n        }\n    }\n\n    orderBy === 'asc'\n        ? orderedChildren.splice(0, len - deletePoint)\n        : orderedChildren.splice(deletePoint, len - deletePoint);\n\n    return sum;\n}\n\n/**\n * Sort\n */\nfunction sort(viewChildren, orderBy) {\n    if (orderBy) {\n        viewChildren.sort(function (a, b) {\n            var diff = orderBy === 'asc'\n                ? a.getValue() - b.getValue() : b.getValue() - a.getValue();\n            return diff === 0\n                ? (orderBy === 'asc'\n                    ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex\n                )\n                : diff;\n        });\n    }\n    return viewChildren;\n}\n\n/**\n * Statistic\n */\nfunction statistic(nodeModel, children, orderBy) {\n    // Calculate sum.\n    var sum = 0;\n    for (var i = 0, len = children.length; i < len; i++) {\n        sum += children[i].getValue();\n    }\n\n    // Statistic data extent for latter visual coding.\n    // Notice: data extent should be calculate based on raw children\n    // but not filtered view children, otherwise visual mapping will not\n    // be stable when zoom (where children is filtered by visibleMin).\n\n    var dimension = nodeModel.get('visualDimension');\n    var dataExtent;\n\n    // The same as area dimension.\n    if (!children || !children.length) {\n        dataExtent = [NaN, NaN];\n    }\n    else if (dimension === 'value' && orderBy) {\n        dataExtent = [\n            children[children.length - 1].getValue(),\n            children[0].getValue()\n        ];\n        orderBy === 'asc' && dataExtent.reverse();\n    }\n    // Other dimension.\n    else {\n        var dataExtent = [Infinity, -Infinity];\n        each(children, function (child) {\n            var value = child.getValue(dimension);\n            value < dataExtent[0] && (dataExtent[0] = value);\n            value > dataExtent[1] && (dataExtent[1] = value);\n        });\n    }\n\n    return {sum: sum, dataExtent: dataExtent};\n}\n\n/**\n * Computes the score for the specified row,\n * as the worst aspect ratio.\n */\nfunction worst(row, rowFixedLength, ratio) {\n    var areaMax = 0;\n    var areaMin = Infinity;\n\n    for (var i = 0, area, len = row.length; i < len; i++) {\n        area = row[i].getLayout().area;\n        if (area) {\n            area < areaMin && (areaMin = area);\n            area > areaMax && (areaMax = area);\n        }\n    }\n\n    var squareArea = row.area * row.area;\n    var f = rowFixedLength * rowFixedLength * ratio;\n\n    return squareArea\n        ? mathMax(\n            (f * areaMax) / squareArea,\n            squareArea / (f * areaMin)\n        )\n        : Infinity;\n}\n\n/**\n * Positions the specified row of nodes. Modifies `rect`.\n */\nfunction position(row, rowFixedLength, rect, halfGapWidth, flush) {\n    // When rowFixedLength === rect.width,\n    // it is horizontal subdivision,\n    // rowFixedLength is the width of the subdivision,\n    // rowOtherLength is the height of the subdivision,\n    // and nodes will be positioned from left to right.\n\n    // wh[idx0WhenH] means: when horizontal,\n    //      wh[idx0WhenH] => wh[0] => 'width'.\n    //      xy[idx1WhenH] => xy[1] => 'y'.\n    var idx0WhenH = rowFixedLength === rect.width ? 0 : 1;\n    var idx1WhenH = 1 - idx0WhenH;\n    var xy = ['x', 'y'];\n    var wh = ['width', 'height'];\n\n    var last = rect[xy[idx0WhenH]];\n    var rowOtherLength = rowFixedLength\n        ? row.area / rowFixedLength : 0;\n\n    if (flush || rowOtherLength > rect[wh[idx1WhenH]]) {\n        rowOtherLength = rect[wh[idx1WhenH]]; // over+underflow\n    }\n    for (var i = 0, rowLen = row.length; i < rowLen; i++) {\n        var node = row[i];\n        var nodeLayout = {};\n        var step = rowOtherLength\n            ? node.getLayout().area / rowOtherLength : 0;\n\n        var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax(rowOtherLength - 2 * halfGapWidth, 0);\n\n        // We use Math.max/min to avoid negative width/height when considering gap width.\n        var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last;\n        var modWH = (i === rowLen - 1 || remain < step) ? remain : step;\n        var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax(modWH - 2 * halfGapWidth, 0);\n\n        nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin(halfGapWidth, wh1 / 2);\n        nodeLayout[xy[idx0WhenH]] = last + mathMin(halfGapWidth, wh0 / 2);\n\n        last += modWH;\n        node.setLayout(nodeLayout, true);\n    }\n\n    rect[xy[idx1WhenH]] += rowOtherLength;\n    rect[wh[idx1WhenH]] -= rowOtherLength;\n}\n\n// Return [containerWidth, containerHeight] as defualt.\nfunction estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) {\n    // If targetInfo.node exists, we zoom to the node,\n    // so estimate whold width and heigth by target node.\n    var currNode = (targetInfo || {}).node;\n    var defaultSize = [containerWidth, containerHeight];\n\n    if (!currNode || currNode === viewRoot) {\n        return defaultSize;\n    }\n\n    var parent;\n    var viewArea = containerWidth * containerHeight;\n    var area = viewArea * seriesModel.option.zoomToNodeRatio;\n\n    while (parent = currNode.parentNode) { // jshint ignore:line\n        var sum = 0;\n        var siblings = parent.children;\n\n        for (var i = 0, len = siblings.length; i < len; i++) {\n            sum += siblings[i].getValue();\n        }\n        var currNodeValue = currNode.getValue();\n        if (currNodeValue === 0) {\n            return defaultSize;\n        }\n        area *= sum / currNodeValue;\n\n        // Considering border, suppose aspect ratio is 1.\n        var parentModel = parent.getModel();\n        var borderWidth = parentModel.get(PATH_BORDER_WIDTH);\n        var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel, borderWidth));\n        area += 4 * borderWidth * borderWidth\n            + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5);\n\n        area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER);\n\n        currNode = parent;\n    }\n\n    area < viewArea && (area = viewArea);\n    var scale = Math.pow(area / viewArea, 0.5);\n\n    return [containerWidth * scale, containerHeight * scale];\n}\n\n// Root postion base on coord of containerGroup\nfunction calculateRootPosition(layoutInfo, rootRect, targetInfo) {\n    if (rootRect) {\n        return {x: rootRect.x, y: rootRect.y};\n    }\n\n    var defaultPosition = {x: 0, y: 0};\n    if (!targetInfo) {\n        return defaultPosition;\n    }\n\n    // If targetInfo is fetched by 'retrieveTargetInfo',\n    // old tree and new tree are the same tree,\n    // so the node still exists and we can visit it.\n\n    var targetNode = targetInfo.node;\n    var layout = targetNode.getLayout();\n\n    if (!layout) {\n        return defaultPosition;\n    }\n\n    // Transform coord from local to container.\n    var targetCenter = [layout.width / 2, layout.height / 2];\n    var node = targetNode;\n    while (node) {\n        var nodeLayout = node.getLayout();\n        targetCenter[0] += nodeLayout.x;\n        targetCenter[1] += nodeLayout.y;\n        node = node.parentNode;\n    }\n\n    return {\n        x: layoutInfo.width / 2 - targetCenter[0],\n        y: layoutInfo.height / 2 - targetCenter[1]\n    };\n}\n\n// Mark nodes visible for prunning when visual coding and rendering.\n// Prunning depends on layout and root position, so we have to do it after layout.\nfunction prunning(node, clipRect, viewAbovePath, viewRoot, depth) {\n    var nodeLayout = node.getLayout();\n    var nodeInViewAbovePath = viewAbovePath[depth];\n    var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node;\n\n    if (\n        (nodeInViewAbovePath && !isAboveViewRoot)\n        || (depth === viewAbovePath.length && node !== viewRoot)\n    ) {\n        return;\n    }\n\n    node.setLayout({\n        // isInView means: viewRoot sub tree + viewAbovePath\n        isInView: true,\n        // invisible only means: outside view clip so that the node can not\n        // see but still layout for animation preparation but not render.\n        invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout),\n        isAboveViewRoot: isAboveViewRoot\n    }, true);\n\n    // Transform to child coordinate.\n    var childClipRect = new BoundingRect(\n        clipRect.x - nodeLayout.x,\n        clipRect.y - nodeLayout.y,\n        clipRect.width,\n        clipRect.height\n    );\n\n    each(node.viewChildren || [], function (child) {\n        prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1);\n    });\n}\n\nfunction getUpperLabelHeight(model) {\n    return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0;\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\nimport * as echarts from '../echarts';\n\nimport './treemap/TreemapSeries';\nimport './treemap/TreemapView';\nimport './treemap/treemapAction';\n\nimport treemapVisual from './treemap/treemapVisual';\nimport treemapLayout from './treemap/treemapLayout';\n\necharts.registerVisual(treemapVisual);\necharts.registerLayout(treemapLayout);","/*\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\nimport {__DEV__} from '../config';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {enableClassCheck} from '../util/clazz';\n\n// id may be function name of Object, add a prefix to avoid this problem.\nfunction generateNodeKey(id) {\n    return '_EC_' + id;\n}\n/**\n * @alias module:echarts/data/Graph\n * @constructor\n * @param {boolean} directed\n */\nvar Graph = function (directed) {\n    /**\n     * 是否是有向图\n     * @type {boolean}\n     * @private\n     */\n    this._directed = directed || false;\n\n    /**\n     * @type {Array.<module:echarts/data/Graph.Node>}\n     * @readOnly\n     */\n    this.nodes = [];\n\n    /**\n     * @type {Array.<module:echarts/data/Graph.Edge>}\n     * @readOnly\n     */\n    this.edges = [];\n\n    /**\n     * @type {Object.<string, module:echarts/data/Graph.Node>}\n     * @private\n     */\n    this._nodesMap = {};\n    /**\n     * @type {Object.<string, module:echarts/data/Graph.Edge>}\n     * @private\n     */\n    this._edgesMap = {};\n\n    /**\n     * @type {module:echarts/data/List}\n     * @readOnly\n     */\n    this.data;\n\n    /**\n     * @type {module:echarts/data/List}\n     * @readOnly\n     */\n    this.edgeData;\n};\n\nvar graphProto = Graph.prototype;\n/**\n * @type {string}\n */\ngraphProto.type = 'graph';\n\n/**\n * If is directed graph\n * @return {boolean}\n */\ngraphProto.isDirected = function () {\n    return this._directed;\n};\n\n/**\n * Add a new node\n * @param {string} id\n * @param {number} [dataIndex]\n */\ngraphProto.addNode = function (id, dataIndex) {\n    id = id == null ? ('' + dataIndex) : ('' + id);\n\n    var nodesMap = this._nodesMap;\n\n    if (nodesMap[generateNodeKey(id)]) {\n        if (__DEV__) {\n            console.error('Graph nodes have duplicate name or id');\n        }\n        return;\n    }\n\n    var node = new Node(id, dataIndex);\n    node.hostGraph = this;\n\n    this.nodes.push(node);\n\n    nodesMap[generateNodeKey(id)] = node;\n    return node;\n};\n\n/**\n * Get node by data index\n * @param  {number} dataIndex\n * @return {module:echarts/data/Graph~Node}\n */\ngraphProto.getNodeByIndex = function (dataIndex) {\n    var rawIdx = this.data.getRawIndex(dataIndex);\n    return this.nodes[rawIdx];\n};\n/**\n * Get node by id\n * @param  {string} id\n * @return {module:echarts/data/Graph.Node}\n */\ngraphProto.getNodeById = function (id) {\n    return this._nodesMap[generateNodeKey(id)];\n};\n\n/**\n * Add a new edge\n * @param {number|string|module:echarts/data/Graph.Node} n1\n * @param {number|string|module:echarts/data/Graph.Node} n2\n * @param {number} [dataIndex=-1]\n * @return {module:echarts/data/Graph.Edge}\n */\ngraphProto.addEdge = function (n1, n2, dataIndex) {\n    var nodesMap = this._nodesMap;\n    var edgesMap = this._edgesMap;\n\n    // PNEDING\n    if (typeof n1 === 'number') {\n        n1 = this.nodes[n1];\n    }\n    if (typeof n2 === 'number') {\n        n2 = this.nodes[n2];\n    }\n\n    if (!Node.isInstance(n1)) {\n        n1 = nodesMap[generateNodeKey(n1)];\n    }\n    if (!Node.isInstance(n2)) {\n        n2 = nodesMap[generateNodeKey(n2)];\n    }\n    if (!n1 || !n2) {\n        return;\n    }\n\n    var key = n1.id + '-' + n2.id;\n    // PENDING\n    if (edgesMap[key]) {\n        return;\n    }\n\n    var edge = new Edge(n1, n2, dataIndex);\n    edge.hostGraph = this;\n\n    if (this._directed) {\n        n1.outEdges.push(edge);\n        n2.inEdges.push(edge);\n    }\n    n1.edges.push(edge);\n    if (n1 !== n2) {\n        n2.edges.push(edge);\n    }\n\n    this.edges.push(edge);\n    edgesMap[key] = edge;\n\n    return edge;\n};\n\n/**\n * Get edge by data index\n * @param  {number} dataIndex\n * @return {module:echarts/data/Graph~Node}\n */\ngraphProto.getEdgeByIndex = function (dataIndex) {\n    var rawIdx = this.edgeData.getRawIndex(dataIndex);\n    return this.edges[rawIdx];\n};\n/**\n * Get edge by two linked nodes\n * @param  {module:echarts/data/Graph.Node|string} n1\n * @param  {module:echarts/data/Graph.Node|string} n2\n * @return {module:echarts/data/Graph.Edge}\n */\ngraphProto.getEdge = function (n1, n2) {\n    if (Node.isInstance(n1)) {\n        n1 = n1.id;\n    }\n    if (Node.isInstance(n2)) {\n        n2 = n2.id;\n    }\n\n    var edgesMap = this._edgesMap;\n\n    if (this._directed) {\n        return edgesMap[n1 + '-' + n2];\n    }\n    else {\n        return edgesMap[n1 + '-' + n2]\n            || edgesMap[n2 + '-' + n1];\n    }\n};\n\n/**\n * Iterate all nodes\n * @param  {Function} cb\n * @param  {*} [context]\n */\ngraphProto.eachNode = function (cb, context) {\n    var nodes = this.nodes;\n    var len = nodes.length;\n    for (var i = 0; i < len; i++) {\n        if (nodes[i].dataIndex >= 0) {\n            cb.call(context, nodes[i], i);\n        }\n    }\n};\n\n/**\n * Iterate all edges\n * @param  {Function} cb\n * @param  {*} [context]\n */\ngraphProto.eachEdge = function (cb, context) {\n    var edges = this.edges;\n    var len = edges.length;\n    for (var i = 0; i < len; i++) {\n        if (edges[i].dataIndex >= 0\n            && edges[i].node1.dataIndex >= 0\n            && edges[i].node2.dataIndex >= 0\n        ) {\n            cb.call(context, edges[i], i);\n        }\n    }\n};\n\n/**\n * Breadth first traverse\n * @param {Function} cb\n * @param {module:echarts/data/Graph.Node} startNode\n * @param {string} [direction='none'] 'none'|'in'|'out'\n * @param {*} [context]\n */\ngraphProto.breadthFirstTraverse = function (\n    cb, startNode, direction, context\n) {\n    if (!Node.isInstance(startNode)) {\n        startNode = this._nodesMap[generateNodeKey(startNode)];\n    }\n    if (!startNode) {\n        return;\n    }\n\n    var edgeType = direction === 'out'\n        ? 'outEdges' : (direction === 'in' ? 'inEdges' : 'edges');\n\n    for (var i = 0; i < this.nodes.length; i++) {\n        this.nodes[i].__visited = false;\n    }\n\n    if (cb.call(context, startNode, null)) {\n        return;\n    }\n\n    var queue = [startNode];\n    while (queue.length) {\n        var currentNode = queue.shift();\n        var edges = currentNode[edgeType];\n\n        for (var i = 0; i < edges.length; i++) {\n            var e = edges[i];\n            var otherNode = e.node1 === currentNode\n                ? e.node2 : e.node1;\n            if (!otherNode.__visited) {\n                if (cb.call(context, otherNode, currentNode)) {\n                    // Stop traversing\n                    return;\n                }\n                queue.push(otherNode);\n                otherNode.__visited = true;\n            }\n        }\n    }\n};\n\n// TODO\n// graphProto.depthFirstTraverse = function (\n//     cb, startNode, direction, context\n// ) {\n\n// };\n\n// Filter update\ngraphProto.update = function () {\n    var data = this.data;\n    var edgeData = this.edgeData;\n    var nodes = this.nodes;\n    var edges = this.edges;\n\n    for (var i = 0, len = nodes.length; i < len; i++) {\n        nodes[i].dataIndex = -1;\n    }\n    for (var i = 0, len = data.count(); i < len; i++) {\n        nodes[data.getRawIndex(i)].dataIndex = i;\n    }\n\n    edgeData.filterSelf(function (idx) {\n        var edge = edges[edgeData.getRawIndex(idx)];\n        return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0;\n    });\n\n    // Update edge\n    for (var i = 0, len = edges.length; i < len; i++) {\n        edges[i].dataIndex = -1;\n    }\n    for (var i = 0, len = edgeData.count(); i < len; i++) {\n        edges[edgeData.getRawIndex(i)].dataIndex = i;\n    }\n};\n\n/**\n * @return {module:echarts/data/Graph}\n */\ngraphProto.clone = function () {\n    var graph = new Graph(this._directed);\n    var nodes = this.nodes;\n    var edges = this.edges;\n    for (var i = 0; i < nodes.length; i++) {\n        graph.addNode(nodes[i].id, nodes[i].dataIndex);\n    }\n    for (var i = 0; i < edges.length; i++) {\n        var e = edges[i];\n        graph.addEdge(e.node1.id, e.node2.id, e.dataIndex);\n    }\n    return graph;\n};\n\n\n/**\n * @alias module:echarts/data/Graph.Node\n */\nfunction Node(id, dataIndex) {\n    /**\n    * @type {string}\n    */\n    this.id = id == null ? '' : id;\n\n    /**\n    * @type {Array.<module:echarts/data/Graph.Edge>}\n    */\n    this.inEdges = [];\n    /**\n    * @type {Array.<module:echarts/data/Graph.Edge>}\n    */\n    this.outEdges = [];\n    /**\n    * @type {Array.<module:echarts/data/Graph.Edge>}\n    */\n    this.edges = [];\n    /**\n     * @type {module:echarts/data/Graph}\n     */\n    this.hostGraph;\n\n    /**\n     * @type {number}\n     */\n    this.dataIndex = dataIndex == null ? -1 : dataIndex;\n}\n\nNode.prototype = {\n\n    constructor: Node,\n\n    /**\n     * @return {number}\n     */\n    degree: function () {\n        return this.edges.length;\n    },\n\n    /**\n     * @return {number}\n     */\n    inDegree: function () {\n        return this.inEdges.length;\n    },\n\n    /**\n    * @return {number}\n    */\n    outDegree: function () {\n        return this.outEdges.length;\n    },\n\n    /**\n     * @param {string} [path]\n     * @return {module:echarts/model/Model}\n     */\n    getModel: function (path) {\n        if (this.dataIndex < 0) {\n            return;\n        }\n        var graph = this.hostGraph;\n        var itemModel = graph.data.getItemModel(this.dataIndex);\n\n        return itemModel.getModel(path);\n    }\n};\n\n/**\n * 图边\n * @alias module:echarts/data/Graph.Edge\n * @param {module:echarts/data/Graph.Node} n1\n * @param {module:echarts/data/Graph.Node} n2\n * @param {number} [dataIndex=-1]\n */\nfunction Edge(n1, n2, dataIndex) {\n\n    /**\n     * 节点1，如果是有向图则为源节点\n     * @type {module:echarts/data/Graph.Node}\n     */\n    this.node1 = n1;\n\n    /**\n     * 节点2，如果是有向图则为目标节点\n     * @type {module:echarts/data/Graph.Node}\n     */\n    this.node2 = n2;\n\n    this.dataIndex = dataIndex == null ? -1 : dataIndex;\n}\n\n/**\n * @param {string} [path]\n * @return {module:echarts/model/Model}\n */\nEdge.prototype.getModel = function (path) {\n    if (this.dataIndex < 0) {\n        return;\n    }\n    var graph = this.hostGraph;\n    var itemModel = graph.edgeData.getItemModel(this.dataIndex);\n\n    return itemModel.getModel(path);\n};\n\nvar createGraphDataProxyMixin = function (hostName, dataName) {\n    return {\n        /**\n         * @param {string=} [dimension='value'] Default 'value'. can be 'a', 'b', 'c', 'd', 'e'.\n         * @return {number}\n         */\n        getValue: function (dimension) {\n            var data = this[hostName][dataName];\n            return data.get(data.getDimension(dimension || 'value'), this.dataIndex);\n        },\n\n        /**\n         * @param {Object|string} key\n         * @param {*} [value]\n         */\n        setVisual: function (key, value) {\n            this.dataIndex >= 0\n                && this[hostName][dataName].setItemVisual(this.dataIndex, key, value);\n        },\n\n        /**\n         * @param {string} key\n         * @return {boolean}\n         */\n        getVisual: function (key, ignoreParent) {\n            return this[hostName][dataName].getItemVisual(this.dataIndex, key, ignoreParent);\n        },\n\n        /**\n         * @param {Object} layout\n         * @return {boolean} [merge=false]\n         */\n        setLayout: function (layout, merge) {\n            this.dataIndex >= 0\n                && this[hostName][dataName].setItemLayout(this.dataIndex, layout, merge);\n        },\n\n        /**\n         * @return {Object}\n         */\n        getLayout: function () {\n            return this[hostName][dataName].getItemLayout(this.dataIndex);\n        },\n\n        /**\n         * @return {module:zrender/Element}\n         */\n        getGraphicEl: function () {\n            return this[hostName][dataName].getItemGraphicEl(this.dataIndex);\n        },\n\n        /**\n         * @return {number}\n         */\n        getRawIndex: function () {\n            return this[hostName][dataName].getRawIndex(this.dataIndex);\n        }\n    };\n};\n\nzrUtil.mixin(Node, createGraphDataProxyMixin('hostGraph', 'data'));\nzrUtil.mixin(Edge, createGraphDataProxyMixin('hostGraph', 'edgeData'));\n\nGraph.Node = Node;\nGraph.Edge = Edge;\n\nenableClassCheck(Node);\nenableClassCheck(Edge);\n\nexport default Graph;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport List from '../../data/List';\nimport Graph from '../../data/Graph';\nimport linkList from '../../data/helper/linkList';\nimport createDimensions from '../../data/helper/createDimensions';\nimport CoordinateSystem from '../../CoordinateSystem';\nimport createListFromArray from './createListFromArray';\n\nexport default function (nodes, edges, seriesModel, directed, beforeLink) {\n    // ??? TODO\n    // support dataset?\n    var graph = new Graph(directed);\n    for (var i = 0; i < nodes.length; i++) {\n        graph.addNode(zrUtil.retrieve(\n            // Id, name, dataIndex\n            nodes[i].id, nodes[i].name, i\n        ), i);\n    }\n\n    var linkNameList = [];\n    var validEdges = [];\n    var linkCount = 0;\n    for (var i = 0; i < edges.length; i++) {\n        var link = edges[i];\n        var source = link.source;\n        var target = link.target;\n        // addEdge may fail when source or target not exists\n        if (graph.addEdge(source, target, linkCount)) {\n            validEdges.push(link);\n            linkNameList.push(zrUtil.retrieve(link.id, source + ' > ' + target));\n            linkCount++;\n        }\n    }\n\n    var coordSys = seriesModel.get('coordinateSystem');\n    var nodeData;\n    if (coordSys === 'cartesian2d' || coordSys === 'polar') {\n        nodeData = createListFromArray(nodes, seriesModel);\n    }\n    else {\n        var coordSysCtor = CoordinateSystem.get(coordSys);\n        var coordDimensions = (coordSysCtor && coordSysCtor.type !== 'view')\n            ? (coordSysCtor.dimensions || []) : [];\n        // FIXME: Some geo do not need `value` dimenson, whereas `calendar` needs\n        // `value` dimension, but graph need `value` dimension. It's better to\n        // uniform this behavior.\n        if (zrUtil.indexOf(coordDimensions, 'value') < 0) {\n            coordDimensions.concat(['value']);\n        }\n\n        var dimensionNames = createDimensions(nodes, {\n            coordDimensions: coordDimensions\n        });\n        nodeData = new List(dimensionNames, seriesModel);\n        nodeData.initData(nodes);\n    }\n\n    var edgeData = new List(['value'], seriesModel);\n    edgeData.initData(validEdges, linkNameList);\n\n    beforeLink && beforeLink(nodeData, edgeData);\n\n    linkList({\n        mainData: nodeData,\n        struct: graph,\n        structAttr: 'graph',\n        datas: {node: nodeData, edge: edgeData},\n        datasAttr: {node: 'data', edge: 'edgeData'}\n    });\n\n    // Update dataIndex of nodes and edges because invalid edge may be removed\n    graph.update();\n\n    return graph;\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\nimport * as echarts from '../../echarts';\nimport List from '../../data/List';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {defaultEmphasis} from '../../util/model';\nimport Model from '../../model/Model';\nimport {encodeHTML} from '../../util/format';\nimport createGraphFromNodeEdge from '../helper/createGraphFromNodeEdge';\n\nvar GraphSeries = echarts.extendSeriesModel({\n\n    type: 'series.graph',\n\n    init: function (option) {\n        GraphSeries.superApply(this, 'init', arguments);\n\n        // Provide data for legend select\n        this.legendDataProvider = function () {\n            return this._categoriesData;\n        };\n\n        this.fillDataTextStyle(option.edges || option.links);\n\n        this._updateCategoriesData();\n    },\n\n    mergeOption: function (option) {\n        GraphSeries.superApply(this, 'mergeOption', arguments);\n\n        this.fillDataTextStyle(option.edges || option.links);\n\n        this._updateCategoriesData();\n    },\n\n    mergeDefaultAndTheme: function (option) {\n        GraphSeries.superApply(this, 'mergeDefaultAndTheme', arguments);\n        defaultEmphasis(option, ['edgeLabel'], ['show']);\n    },\n\n    getInitialData: function (option, ecModel) {\n        var edges = option.edges || option.links || [];\n        var nodes = option.data || option.nodes || [];\n        var self = this;\n\n        if (nodes && edges) {\n            return createGraphFromNodeEdge(nodes, edges, this, true, beforeLink).data;\n        }\n\n        function beforeLink(nodeData, edgeData) {\n            // Overwrite nodeData.getItemModel to\n            nodeData.wrapMethod('getItemModel', function (model) {\n                var categoriesModels = self._categoriesModels;\n                var categoryIdx = model.getShallow('category');\n                var categoryModel = categoriesModels[categoryIdx];\n                if (categoryModel) {\n                    categoryModel.parentModel = model.parentModel;\n                    model.parentModel = categoryModel;\n                }\n                return model;\n            });\n\n            var edgeLabelModel = self.getModel('edgeLabel');\n            // For option `edgeLabel` can be found by label.xxx.xxx on item mode.\n            var fakeSeriesModel = new Model(\n                {label: edgeLabelModel.option},\n                edgeLabelModel.parentModel,\n                ecModel\n            );\n            var emphasisEdgeLabelModel = self.getModel('emphasis.edgeLabel');\n            var emphasisFakeSeriesModel = new Model(\n                {emphasis: {label: emphasisEdgeLabelModel.option}},\n                emphasisEdgeLabelModel.parentModel,\n                ecModel\n            );\n\n            edgeData.wrapMethod('getItemModel', function (model) {\n                model.customizeGetParent(edgeGetParent);\n                return model;\n            });\n\n            function edgeGetParent(path) {\n                path = this.parsePath(path);\n                return (path && path[0] === 'label')\n                    ? fakeSeriesModel\n                    : (path && path[0] === 'emphasis' && path[1] === 'label')\n                    ? emphasisFakeSeriesModel\n                    : this.parentModel;\n            }\n        }\n    },\n\n    /**\n     * @return {module:echarts/data/Graph}\n     */\n    getGraph: function () {\n        return this.getData().graph;\n    },\n\n    /**\n     * @return {module:echarts/data/List}\n     */\n    getEdgeData: function () {\n        return this.getGraph().edgeData;\n    },\n\n    /**\n     * @return {module:echarts/data/List}\n     */\n    getCategoriesData: function () {\n        return this._categoriesData;\n    },\n\n    /**\n     * @override\n     */\n    formatTooltip: function (dataIndex, multipleSeries, dataType) {\n        if (dataType === 'edge') {\n            var nodeData = this.getData();\n            var params = this.getDataParams(dataIndex, dataType);\n            var edge = nodeData.graph.getEdgeByIndex(dataIndex);\n            var sourceName = nodeData.getName(edge.node1.dataIndex);\n            var targetName = nodeData.getName(edge.node2.dataIndex);\n\n            var html = [];\n            sourceName != null && html.push(sourceName);\n            targetName != null && html.push(targetName);\n            html = encodeHTML(html.join(' > '));\n\n            if (params.value) {\n                html += ' : ' + encodeHTML(params.value);\n            }\n            return html;\n        }\n        else { // dataType === 'node' or empty\n            return GraphSeries.superApply(this, 'formatTooltip', arguments);\n        }\n    },\n\n    _updateCategoriesData: function () {\n        var categories = zrUtil.map(this.option.categories || [], function (category) {\n            // Data must has value\n            return category.value != null ? category : zrUtil.extend({\n                value: 0\n            }, category);\n        });\n        var categoriesData = new List(['value'], this);\n        categoriesData.initData(categories);\n\n        this._categoriesData = categoriesData;\n\n        this._categoriesModels = categoriesData.mapArray(function (idx) {\n            return categoriesData.getItemModel(idx, true);\n        });\n    },\n\n    setZoom: function (zoom) {\n        this.option.zoom = zoom;\n    },\n\n    setCenter: function (center) {\n        this.option.center = center;\n    },\n\n    isAnimationEnabled: function () {\n        return GraphSeries.superCall(this, 'isAnimationEnabled')\n            // Not enable animation when do force layout\n            && !(this.get('layout') === 'force' && this.get('force.layoutAnimation'));\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n\n        coordinateSystem: 'view',\n\n        // Default option for all coordinate systems\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n        // polarIndex: 0,\n        // geoIndex: 0,\n\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n\n        layout: null,\n\n        focusNodeAdjacency: false,\n\n        // Configuration of circular layout\n        circular: {\n            rotateLabel: false\n        },\n        // Configuration of force directed layout\n        force: {\n            initLayout: null,\n            // Node repulsion. Can be an array to represent range.\n            repulsion: [0, 50],\n            gravity: 0.1,\n            // Initial friction\n            friction: 0.6,\n\n            // Edge length. Can be an array to represent range.\n            edgeLength: 30,\n\n            layoutAnimation: true\n        },\n\n        left: 'center',\n        top: 'center',\n        // right: null,\n        // bottom: null,\n        // width: '80%',\n        // height: '80%',\n\n        symbol: 'circle',\n        symbolSize: 10,\n\n        edgeSymbol: ['none', 'none'],\n        edgeSymbolSize: 10,\n        edgeLabel: {\n            position: 'middle'\n        },\n\n        draggable: false,\n\n        roam: false,\n\n        // Default on center of graph\n        center: null,\n\n        zoom: 1,\n        // Symbol size scale ratio in roam\n        nodeScaleRatio: 0.6,\n        // cursor: null,\n\n        // categories: [],\n\n        // data: []\n        // Or\n        // nodes: []\n        //\n        // links: []\n        // Or\n        // edges: []\n\n        label: {\n            show: false,\n            formatter: '{b}'\n        },\n\n        itemStyle: {},\n\n        lineStyle: {\n            color: '#aaa',\n            width: 1,\n            curveness: 0,\n            opacity: 0.5\n        },\n        emphasis: {\n            label: {\n                show: true\n            }\n        }\n    }\n});\n\nexport default GraphSeries;","/*\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 * Line path for bezier and straight line draw\n */\n\nimport * as graphic from '../../util/graphic';\nimport * as vec2 from 'zrender/src/core/vector';\n\nvar straightLineProto = graphic.Line.prototype;\nvar bezierCurveProto = graphic.BezierCurve.prototype;\n\nfunction isLine(shape) {\n    return isNaN(+shape.cpx1) || isNaN(+shape.cpy1);\n}\n\nexport default graphic.extendShape({\n\n    type: 'ec-line',\n\n    style: {\n        stroke: '#000',\n        fill: null\n    },\n\n    shape: {\n        x1: 0,\n        y1: 0,\n        x2: 0,\n        y2: 0,\n        percent: 1,\n        cpx1: null,\n        cpy1: null\n    },\n\n    buildPath: function (ctx, shape) {\n        this[isLine(shape) ? '_buildPathLine' : '_buildPathCurve'](ctx, shape);\n    },\n    _buildPathLine: straightLineProto.buildPath,\n    _buildPathCurve: bezierCurveProto.buildPath,\n\n    pointAt: function (t) {\n        return this[isLine(this.shape) ? '_pointAtLine' : '_pointAtCurve'](t);\n    },\n    _pointAtLine: straightLineProto.pointAt,\n    _pointAtCurve: bezierCurveProto.pointAt,\n\n    tangentAt: function (t) {\n        var shape = this.shape;\n        var p = isLine(shape)\n            ? [shape.x2 - shape.x1, shape.y2 - shape.y1]\n            : this._tangentAtCurve(t);\n        return vec2.normalize(p, p);\n    },\n    _tangentAtCurve: bezierCurveProto.tangentAt\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 * @module echarts/chart/helper/Line\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as vector from 'zrender/src/core/vector';\nimport * as symbolUtil from '../../util/symbol';\nimport LinePath from './LinePath';\nimport * as graphic from '../../util/graphic';\nimport {round} from '../../util/number';\n\nvar SYMBOL_CATEGORIES = ['fromSymbol', 'toSymbol'];\n\nfunction makeSymbolTypeKey(symbolCategory) {\n    return '_' + symbolCategory + 'Type';\n}\n/**\n * @inner\n */\nfunction createSymbol(name, lineData, idx) {\n    var color = lineData.getItemVisual(idx, 'color');\n    var symbolType = lineData.getItemVisual(idx, name);\n    var symbolSize = lineData.getItemVisual(idx, name + 'Size');\n\n    if (!symbolType || symbolType === 'none') {\n        return;\n    }\n\n    if (!zrUtil.isArray(symbolSize)) {\n        symbolSize = [symbolSize, symbolSize];\n    }\n    var symbolPath = symbolUtil.createSymbol(\n        symbolType, -symbolSize[0] / 2, -symbolSize[1] / 2,\n        symbolSize[0], symbolSize[1], color\n    );\n\n    symbolPath.name = name;\n\n    return symbolPath;\n}\n\nfunction createLine(points) {\n    var line = new LinePath({\n        name: 'line',\n        subPixelOptimize: true\n    });\n    setLinePoints(line.shape, points);\n    return line;\n}\n\nfunction setLinePoints(targetShape, points) {\n    targetShape.x1 = points[0][0];\n    targetShape.y1 = points[0][1];\n    targetShape.x2 = points[1][0];\n    targetShape.y2 = points[1][1];\n    targetShape.percent = 1;\n\n    var cp1 = points[2];\n    if (cp1) {\n        targetShape.cpx1 = cp1[0];\n        targetShape.cpy1 = cp1[1];\n    }\n    else {\n        targetShape.cpx1 = NaN;\n        targetShape.cpy1 = NaN;\n    }\n}\n\nfunction updateSymbolAndLabelBeforeLineUpdate() {\n    var lineGroup = this;\n    var symbolFrom = lineGroup.childOfName('fromSymbol');\n    var symbolTo = lineGroup.childOfName('toSymbol');\n    var label = lineGroup.childOfName('label');\n    // Quick reject\n    if (!symbolFrom && !symbolTo && label.ignore) {\n        return;\n    }\n\n    var invScale = 1;\n    var parentNode = this.parent;\n    while (parentNode) {\n        if (parentNode.scale) {\n            invScale /= parentNode.scale[0];\n        }\n        parentNode = parentNode.parent;\n    }\n\n    var line = lineGroup.childOfName('line');\n    // If line not changed\n    // FIXME Parent scale changed\n    if (!this.__dirty && !line.__dirty) {\n        return;\n    }\n\n    var percent = line.shape.percent;\n    var fromPos = line.pointAt(0);\n    var toPos = line.pointAt(percent);\n\n    var d = vector.sub([], toPos, fromPos);\n    vector.normalize(d, d);\n\n    if (symbolFrom) {\n        symbolFrom.attr('position', fromPos);\n        var tangent = line.tangentAt(0);\n        symbolFrom.attr('rotation', Math.PI / 2 - Math.atan2(\n            tangent[1], tangent[0]\n        ));\n        symbolFrom.attr('scale', [invScale * percent, invScale * percent]);\n    }\n    if (symbolTo) {\n        symbolTo.attr('position', toPos);\n        var tangent = line.tangentAt(1);\n        symbolTo.attr('rotation', -Math.PI / 2 - Math.atan2(\n            tangent[1], tangent[0]\n        ));\n        symbolTo.attr('scale', [invScale * percent, invScale * percent]);\n    }\n\n    if (!label.ignore) {\n        label.attr('position', toPos);\n\n        var textPosition;\n        var textAlign;\n        var textVerticalAlign;\n\n        var distance = 5 * invScale;\n        // End\n        if (label.__position === 'end') {\n            textPosition = [d[0] * distance + toPos[0], d[1] * distance + toPos[1]];\n            textAlign = d[0] > 0.8 ? 'left' : (d[0] < -0.8 ? 'right' : 'center');\n            textVerticalAlign = d[1] > 0.8 ? 'top' : (d[1] < -0.8 ? 'bottom' : 'middle');\n        }\n        // Middle\n        else if (label.__position === 'middle') {\n            var halfPercent = percent / 2;\n            var tangent = line.tangentAt(halfPercent);\n            var n = [tangent[1], -tangent[0]];\n            var cp = line.pointAt(halfPercent);\n            if (n[1] > 0) {\n                n[0] = -n[0];\n                n[1] = -n[1];\n            }\n            textPosition = [cp[0] + n[0] * distance, cp[1] + n[1] * distance];\n            textAlign = 'center';\n            textVerticalAlign = 'bottom';\n            var rotation = -Math.atan2(tangent[1], tangent[0]);\n            if (toPos[0] < fromPos[0]) {\n                rotation = Math.PI + rotation;\n            }\n            label.attr('rotation', rotation);\n        }\n        // Start\n        else {\n            textPosition = [-d[0] * distance + fromPos[0], -d[1] * distance + fromPos[1]];\n            textAlign = d[0] > 0.8 ? 'right' : (d[0] < -0.8 ? 'left' : 'center');\n            textVerticalAlign = d[1] > 0.8 ? 'bottom' : (d[1] < -0.8 ? 'top' : 'middle');\n        }\n        label.attr({\n            style: {\n                // Use the user specified text align and baseline first\n                textVerticalAlign: label.__verticalAlign || textVerticalAlign,\n                textAlign: label.__textAlign || textAlign\n            },\n            position: textPosition,\n            scale: [invScale, invScale]\n        });\n    }\n}\n\n/**\n * @constructor\n * @extends {module:zrender/graphic/Group}\n * @alias {module:echarts/chart/helper/Line}\n */\nfunction Line(lineData, idx, seriesScope) {\n    graphic.Group.call(this);\n\n    this._createLine(lineData, idx, seriesScope);\n}\n\nvar lineProto = Line.prototype;\n\n// Update symbol position and rotation\nlineProto.beforeUpdate = updateSymbolAndLabelBeforeLineUpdate;\n\nlineProto._createLine = function (lineData, idx, seriesScope) {\n    var seriesModel = lineData.hostModel;\n    var linePoints = lineData.getItemLayout(idx);\n    var line = createLine(linePoints);\n    line.shape.percent = 0;\n    graphic.initProps(line, {\n        shape: {\n            percent: 1\n        }\n    }, seriesModel, idx);\n\n    this.add(line);\n\n    var label = new graphic.Text({\n        name: 'label',\n        // FIXME\n        // Temporary solution for `focusNodeAdjacency`.\n        // line label do not use the opacity of lineStyle.\n        lineLabelOriginalOpacity: 1\n    });\n    this.add(label);\n\n    zrUtil.each(SYMBOL_CATEGORIES, function (symbolCategory) {\n        var symbol = createSymbol(symbolCategory, lineData, idx);\n        // symbols must added after line to make sure\n        // it will be updated after line#update.\n        // Or symbol position and rotation update in line#beforeUpdate will be one frame slow\n        this.add(symbol);\n        this[makeSymbolTypeKey(symbolCategory)] = lineData.getItemVisual(idx, symbolCategory);\n    }, this);\n\n    this._updateCommonStl(lineData, idx, seriesScope);\n};\n\nlineProto.updateData = function (lineData, idx, seriesScope) {\n    var seriesModel = lineData.hostModel;\n\n    var line = this.childOfName('line');\n    var linePoints = lineData.getItemLayout(idx);\n    var target = {\n        shape: {}\n    };\n\n    setLinePoints(target.shape, linePoints);\n    graphic.updateProps(line, target, seriesModel, idx);\n\n    zrUtil.each(SYMBOL_CATEGORIES, function (symbolCategory) {\n        var symbolType = lineData.getItemVisual(idx, symbolCategory);\n        var key = makeSymbolTypeKey(symbolCategory);\n        // Symbol changed\n        if (this[key] !== symbolType) {\n            this.remove(this.childOfName(symbolCategory));\n            var symbol = createSymbol(symbolCategory, lineData, idx);\n            this.add(symbol);\n        }\n        this[key] = symbolType;\n    }, this);\n\n    this._updateCommonStl(lineData, idx, seriesScope);\n};\n\nlineProto._updateCommonStl = function (lineData, idx, seriesScope) {\n    var seriesModel = lineData.hostModel;\n\n    var line = this.childOfName('line');\n\n    var lineStyle = seriesScope && seriesScope.lineStyle;\n    var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;\n    var labelModel = seriesScope && seriesScope.labelModel;\n    var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;\n\n    // Optimization for large dataset\n    if (!seriesScope || lineData.hasItemOption) {\n        var itemModel = lineData.getItemModel(idx);\n\n        lineStyle = itemModel.getModel('lineStyle').getLineStyle();\n        hoverLineStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle();\n\n        labelModel = itemModel.getModel('label');\n        hoverLabelModel = itemModel.getModel('emphasis.label');\n    }\n\n    var visualColor = lineData.getItemVisual(idx, 'color');\n    var visualOpacity = zrUtil.retrieve3(\n        lineData.getItemVisual(idx, 'opacity'),\n        lineStyle.opacity,\n        1\n    );\n\n    line.useStyle(zrUtil.defaults(\n        {\n            strokeNoScale: true,\n            fill: 'none',\n            stroke: visualColor,\n            opacity: visualOpacity\n        },\n        lineStyle\n    ));\n    line.hoverStyle = hoverLineStyle;\n\n    // Update symbol\n    zrUtil.each(SYMBOL_CATEGORIES, function (symbolCategory) {\n        var symbol = this.childOfName(symbolCategory);\n        if (symbol) {\n            symbol.setColor(visualColor);\n            symbol.setStyle({\n                opacity: visualOpacity\n            });\n        }\n    }, this);\n\n    var showLabel = labelModel.getShallow('show');\n    var hoverShowLabel = hoverLabelModel.getShallow('show');\n\n    var label = this.childOfName('label');\n    var defaultLabelColor;\n    var baseText;\n\n    // FIXME: the logic below probably should be merged to `graphic.setLabelStyle`.\n    if (showLabel || hoverShowLabel) {\n        defaultLabelColor = visualColor || '#000';\n\n        baseText = seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType);\n        if (baseText == null) {\n            var rawVal = seriesModel.getRawValue(idx);\n            baseText = rawVal == null\n                ? lineData.getName(idx)\n                : isFinite(rawVal)\n                ? round(rawVal)\n                : rawVal;\n        }\n    }\n    var normalText = showLabel ? baseText : null;\n    var emphasisText = hoverShowLabel\n        ? zrUtil.retrieve2(\n            seriesModel.getFormattedLabel(idx, 'emphasis', lineData.dataType),\n            baseText\n        )\n        : null;\n\n    var labelStyle = label.style;\n\n    // Always set `textStyle` even if `normalStyle.text` is null, because default\n    // values have to be set on `normalStyle`.\n    if (normalText != null || emphasisText != null) {\n        graphic.setTextStyle(label.style, labelModel, {\n            text: normalText\n        }, {\n            autoColor: defaultLabelColor\n        });\n\n        label.__textAlign = labelStyle.textAlign;\n        label.__verticalAlign = labelStyle.textVerticalAlign;\n        // 'start', 'middle', 'end'\n        label.__position = labelModel.get('position') || 'middle';\n    }\n\n    if (emphasisText != null) {\n        // Only these properties supported in this emphasis style here.\n        label.hoverStyle = {\n            text: emphasisText,\n            textFill: hoverLabelModel.getTextColor(true),\n            // For merging hover style to normal style, do not use\n            // `hoverLabelModel.getFont()` here.\n            fontStyle: hoverLabelModel.getShallow('fontStyle'),\n            fontWeight: hoverLabelModel.getShallow('fontWeight'),\n            fontSize: hoverLabelModel.getShallow('fontSize'),\n            fontFamily: hoverLabelModel.getShallow('fontFamily')\n        };\n    }\n    else {\n        label.hoverStyle = {\n            text: null\n        };\n    }\n\n    label.ignore = !showLabel && !hoverShowLabel;\n\n    graphic.setHoverStyle(this);\n};\n\nlineProto.highlight = function () {\n    this.trigger('emphasis');\n};\n\nlineProto.downplay = function () {\n    this.trigger('normal');\n};\n\nlineProto.updateLayout = function (lineData, idx) {\n    this.setLinePoints(lineData.getItemLayout(idx));\n};\n\nlineProto.setLinePoints = function (points) {\n    var linePath = this.childOfName('line');\n    setLinePoints(linePath.shape, points);\n    linePath.dirty();\n};\n\nzrUtil.inherits(Line, graphic.Group);\n\nexport default Line;","/*\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 * @module echarts/chart/helper/LineDraw\n */\n\nimport * as graphic from '../../util/graphic';\nimport LineGroup from './Line';\n// import IncrementalDisplayable from 'zrender/src/graphic/IncrementalDisplayable';\n\n/**\n * @alias module:echarts/component/marker/LineDraw\n * @constructor\n */\nfunction LineDraw(ctor) {\n    this._ctor = ctor || LineGroup;\n\n    this.group = new graphic.Group();\n}\n\nvar lineDrawProto = LineDraw.prototype;\n\nlineDrawProto.isPersistent = function () {\n    return true;\n};\n\n/**\n * @param {module:echarts/data/List} lineData\n */\nlineDrawProto.updateData = function (lineData) {\n    var lineDraw = this;\n    var group = lineDraw.group;\n\n    var oldLineData = lineDraw._lineData;\n    lineDraw._lineData = lineData;\n\n    // There is no oldLineData only when first rendering or switching from\n    // stream mode to normal mode, where previous elements should be removed.\n    if (!oldLineData) {\n        group.removeAll();\n    }\n\n    var seriesScope = makeSeriesScope(lineData);\n\n    lineData.diff(oldLineData)\n        .add(function (idx) {\n            doAdd(lineDraw, lineData, idx, seriesScope);\n        })\n        .update(function (newIdx, oldIdx) {\n            doUpdate(lineDraw, oldLineData, lineData, oldIdx, newIdx, seriesScope);\n        })\n        .remove(function (idx) {\n            group.remove(oldLineData.getItemGraphicEl(idx));\n        })\n        .execute();\n};\n\nfunction doAdd(lineDraw, lineData, idx, seriesScope) {\n    var itemLayout = lineData.getItemLayout(idx);\n\n    if (!lineNeedsDraw(itemLayout)) {\n        return;\n    }\n\n    var el = new lineDraw._ctor(lineData, idx, seriesScope);\n    lineData.setItemGraphicEl(idx, el);\n    lineDraw.group.add(el);\n}\n\nfunction doUpdate(lineDraw, oldLineData, newLineData, oldIdx, newIdx, seriesScope) {\n    var itemEl = oldLineData.getItemGraphicEl(oldIdx);\n\n    if (!lineNeedsDraw(newLineData.getItemLayout(newIdx))) {\n        lineDraw.group.remove(itemEl);\n        return;\n    }\n\n    if (!itemEl) {\n        itemEl = new lineDraw._ctor(newLineData, newIdx, seriesScope);\n    }\n    else {\n        itemEl.updateData(newLineData, newIdx, seriesScope);\n    }\n\n    newLineData.setItemGraphicEl(newIdx, itemEl);\n\n    lineDraw.group.add(itemEl);\n}\n\nlineDrawProto.updateLayout = function () {\n    var lineData = this._lineData;\n\n    // Do not support update layout in incremental mode.\n    if (!lineData) {\n        return;\n    }\n\n    lineData.eachItemGraphicEl(function (el, idx) {\n        el.updateLayout(lineData, idx);\n    }, this);\n};\n\nlineDrawProto.incrementalPrepareUpdate = function (lineData) {\n    this._seriesScope = makeSeriesScope(lineData);\n    this._lineData = null;\n    this.group.removeAll();\n};\n\nlineDrawProto.incrementalUpdate = function (taskParams, lineData) {\n    function updateIncrementalAndHover(el) {\n        if (!el.isGroup) {\n            el.incremental = el.useHoverLayer = true;\n        }\n    }\n\n    for (var idx = taskParams.start; idx < taskParams.end; idx++) {\n        var itemLayout = lineData.getItemLayout(idx);\n\n        if (lineNeedsDraw(itemLayout)) {\n            var el = new this._ctor(lineData, idx, this._seriesScope);\n            el.traverse(updateIncrementalAndHover);\n\n            this.group.add(el);\n            lineData.setItemGraphicEl(idx, el);\n        }\n    }\n};\n\nfunction makeSeriesScope(lineData) {\n    var hostModel = lineData.hostModel;\n    return {\n        lineStyle: hostModel.getModel('lineStyle').getLineStyle(),\n        hoverLineStyle: hostModel.getModel('emphasis.lineStyle').getLineStyle(),\n        labelModel: hostModel.getModel('label'),\n        hoverLabelModel: hostModel.getModel('emphasis.label')\n    };\n}\n\nlineDrawProto.remove = function () {\n    this._clearIncremental();\n    this._incremental = null;\n    this.group.removeAll();\n};\n\nlineDrawProto._clearIncremental = function () {\n    var incremental = this._incremental;\n    if (incremental) {\n        incremental.clearDisplaybles();\n    }\n};\n\nfunction isPointNaN(pt) {\n    return isNaN(pt[0]) || isNaN(pt[1]);\n}\n\nfunction lineNeedsDraw(pts) {\n    return !isPointNaN(pts[0]) && !isPointNaN(pts[1]);\n}\n\nexport default LineDraw;\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\nexport function getNodeGlobalScale(seriesModel) {\n    var coordSys = seriesModel.coordinateSystem;\n    if (coordSys.type !== 'view') {\n        return 1;\n    }\n\n    var nodeScaleRatio = seriesModel.option.nodeScaleRatio;\n\n    var groupScale = coordSys.scale;\n    var groupZoom = (groupScale && groupScale[0]) || 1;\n    // Scale node when zoom changes\n    var roamZoom = coordSys.getZoom();\n    var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;\n\n    return nodeScale / groupZoom;\n}\n\nexport function getSymbolSize(node) {\n    var symbolSize = node.getVisual('symbolSize');\n    if (symbolSize instanceof Array) {\n        symbolSize = (symbolSize[0] + symbolSize[1]) / 2;\n    }\n    return +symbolSize;\n}\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as curveTool from 'zrender/src/core/curve';\nimport * as vec2 from 'zrender/src/core/vector';\nimport {getSymbolSize} from './graphHelper';\n\nvar v1 = [];\nvar v2 = [];\nvar v3 = [];\nvar quadraticAt = curveTool.quadraticAt;\nvar v2DistSquare = vec2.distSquare;\nvar mathAbs = Math.abs;\nfunction intersectCurveCircle(curvePoints, center, radius) {\n    var p0 = curvePoints[0];\n    var p1 = curvePoints[1];\n    var p2 = curvePoints[2];\n\n    var d = Infinity;\n    var t;\n    var radiusSquare = radius * radius;\n    var interval = 0.1;\n\n    for (var _t = 0.1; _t <= 0.9; _t += 0.1) {\n        v1[0] = quadraticAt(p0[0], p1[0], p2[0], _t);\n        v1[1] = quadraticAt(p0[1], p1[1], p2[1], _t);\n        var diff = mathAbs(v2DistSquare(v1, center) - radiusSquare);\n        if (diff < d) {\n            d = diff;\n            t = _t;\n        }\n    }\n\n    // Assume the segment is monotone，Find root through Bisection method\n    // At most 32 iteration\n    for (var i = 0; i < 32; i++) {\n        // var prev = t - interval;\n        var next = t + interval;\n        // v1[0] = quadraticAt(p0[0], p1[0], p2[0], prev);\n        // v1[1] = quadraticAt(p0[1], p1[1], p2[1], prev);\n        v2[0] = quadraticAt(p0[0], p1[0], p2[0], t);\n        v2[1] = quadraticAt(p0[1], p1[1], p2[1], t);\n        v3[0] = quadraticAt(p0[0], p1[0], p2[0], next);\n        v3[1] = quadraticAt(p0[1], p1[1], p2[1], next);\n\n        var diff = v2DistSquare(v2, center) - radiusSquare;\n        if (mathAbs(diff) < 1e-2) {\n            break;\n        }\n\n        // var prevDiff = v2DistSquare(v1, center) - radiusSquare;\n        var nextDiff = v2DistSquare(v3, center) - radiusSquare;\n\n        interval /= 2;\n        if (diff < 0) {\n            if (nextDiff >= 0) {\n                t = t + interval;\n            }\n            else {\n                t = t - interval;\n            }\n        }\n        else {\n            if (nextDiff >= 0) {\n                t = t - interval;\n            }\n            else {\n                t = t + interval;\n            }\n        }\n    }\n\n    return t;\n}\n\n// Adjust edge to avoid\nexport default function (graph, scale) {\n    var tmp0 = [];\n    var quadraticSubdivide = curveTool.quadraticSubdivide;\n    var pts = [[], [], []];\n    var pts2 = [[], []];\n    var v = [];\n    scale /= 2;\n\n    graph.eachEdge(function (edge, idx) {\n        var linePoints = edge.getLayout();\n        var fromSymbol = edge.getVisual('fromSymbol');\n        var toSymbol = edge.getVisual('toSymbol');\n\n        if (!linePoints.__original) {\n            linePoints.__original = [\n                vec2.clone(linePoints[0]),\n                vec2.clone(linePoints[1])\n            ];\n            if (linePoints[2]) {\n                linePoints.__original.push(vec2.clone(linePoints[2]));\n            }\n        }\n        var originalPoints = linePoints.__original;\n        // Quadratic curve\n        if (linePoints[2] != null) {\n            vec2.copy(pts[0], originalPoints[0]);\n            vec2.copy(pts[1], originalPoints[2]);\n            vec2.copy(pts[2], originalPoints[1]);\n            if (fromSymbol && fromSymbol !== 'none') {\n                var symbolSize = getSymbolSize(edge.node1);\n\n                var t = intersectCurveCircle(pts, originalPoints[0], symbolSize * scale);\n                // Subdivide and get the second\n                quadraticSubdivide(pts[0][0], pts[1][0], pts[2][0], t, tmp0);\n                pts[0][0] = tmp0[3];\n                pts[1][0] = tmp0[4];\n                quadraticSubdivide(pts[0][1], pts[1][1], pts[2][1], t, tmp0);\n                pts[0][1] = tmp0[3];\n                pts[1][1] = tmp0[4];\n            }\n            if (toSymbol && toSymbol !== 'none') {\n                var symbolSize = getSymbolSize(edge.node2);\n\n                var t = intersectCurveCircle(pts, originalPoints[1], symbolSize * scale);\n                // Subdivide and get the first\n                quadraticSubdivide(pts[0][0], pts[1][0], pts[2][0], t, tmp0);\n                pts[1][0] = tmp0[1];\n                pts[2][0] = tmp0[2];\n                quadraticSubdivide(pts[0][1], pts[1][1], pts[2][1], t, tmp0);\n                pts[1][1] = tmp0[1];\n                pts[2][1] = tmp0[2];\n            }\n            // Copy back to layout\n            vec2.copy(linePoints[0], pts[0]);\n            vec2.copy(linePoints[1], pts[2]);\n            vec2.copy(linePoints[2], pts[1]);\n        }\n        // Line\n        else {\n            vec2.copy(pts2[0], originalPoints[0]);\n            vec2.copy(pts2[1], originalPoints[1]);\n\n            vec2.sub(v, pts2[1], pts2[0]);\n            vec2.normalize(v, v);\n            if (fromSymbol && fromSymbol !== 'none') {\n\n                var symbolSize = getSymbolSize(edge.node1);\n\n                vec2.scaleAndAdd(pts2[0], pts2[0], v, symbolSize * scale);\n            }\n            if (toSymbol && toSymbol !== 'none') {\n                var symbolSize = getSymbolSize(edge.node2);\n\n                vec2.scaleAndAdd(pts2[1], pts2[1], v, -symbolSize * scale);\n            }\n            vec2.copy(linePoints[0], pts2[0]);\n            vec2.copy(linePoints[1], pts2[1]);\n        }\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport SymbolDraw from '../helper/SymbolDraw';\nimport LineDraw from '../helper/LineDraw';\nimport RoamController from '../../component/helper/RoamController';\nimport * as roamHelper from '../../component/helper/roamHelper';\nimport {onIrrelevantElement} from '../../component/helper/cursorHelper';\nimport * as graphic from '../../util/graphic';\nimport adjustEdge from './adjustEdge';\nimport {getNodeGlobalScale} from './graphHelper';\n\nvar FOCUS_ADJACENCY = '__focusNodeAdjacency';\nvar UNFOCUS_ADJACENCY = '__unfocusNodeAdjacency';\n\nvar nodeOpacityPath = ['itemStyle', 'opacity'];\nvar lineOpacityPath = ['lineStyle', 'opacity'];\n\nfunction getItemOpacity(item, opacityPath) {\n    var opacity = item.getVisual('opacity');\n    return opacity != null ? opacity : item.getModel().get(opacityPath);\n}\n\nfunction fadeOutItem(item, opacityPath, opacityRatio) {\n    var el = item.getGraphicEl();\n    var opacity = getItemOpacity(item, opacityPath);\n\n    if (opacityRatio != null) {\n        opacity == null && (opacity = 1);\n        opacity *= opacityRatio;\n    }\n\n    el.downplay && el.downplay();\n    el.traverse(function (child) {\n        if (!child.isGroup) {\n            var opct = child.lineLabelOriginalOpacity;\n            if (opct == null || opacityRatio != null) {\n                opct = opacity;\n            }\n            child.setStyle('opacity', opct);\n        }\n    });\n}\n\nfunction fadeInItem(item, opacityPath) {\n    var opacity = getItemOpacity(item, opacityPath);\n    var el = item.getGraphicEl();\n    // Should go back to normal opacity first, consider hoverLayer,\n    // where current state is copied to elMirror, and support\n    // emphasis opacity here.\n    el.traverse(function (child) {\n        !child.isGroup && child.setStyle('opacity', opacity);\n    });\n    el.highlight && el.highlight();\n}\n\nexport default echarts.extendChartView({\n\n    type: 'graph',\n\n    init: function (ecModel, api) {\n        var symbolDraw = new SymbolDraw();\n        var lineDraw = new LineDraw();\n        var group = this.group;\n\n        this._controller = new RoamController(api.getZr());\n        this._controllerHost = {target: group};\n\n        group.add(symbolDraw.group);\n        group.add(lineDraw.group);\n\n        this._symbolDraw = symbolDraw;\n        this._lineDraw = lineDraw;\n\n        this._firstRender = true;\n    },\n\n    render: function (seriesModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n\n        this._model = seriesModel;\n\n        var symbolDraw = this._symbolDraw;\n        var lineDraw = this._lineDraw;\n\n        var group = this.group;\n\n        if (coordSys.type === 'view') {\n            var groupNewProp = {\n                position: coordSys.position,\n                scale: coordSys.scale\n            };\n            if (this._firstRender) {\n                group.attr(groupNewProp);\n            }\n            else {\n                graphic.updateProps(group, groupNewProp, seriesModel);\n            }\n        }\n        // Fix edge contact point with node\n        adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));\n\n        var data = seriesModel.getData();\n        symbolDraw.updateData(data);\n\n        var edgeData = seriesModel.getEdgeData();\n        lineDraw.updateData(edgeData);\n\n        this._updateNodeAndLinkScale();\n\n        this._updateController(seriesModel, ecModel, api);\n\n        clearTimeout(this._layoutTimeout);\n        var forceLayout = seriesModel.forceLayout;\n        var layoutAnimation = seriesModel.get('force.layoutAnimation');\n        if (forceLayout) {\n            this._startForceLayoutIteration(forceLayout, layoutAnimation);\n        }\n\n        data.eachItemGraphicEl(function (el, idx) {\n            var itemModel = data.getItemModel(idx);\n            // Update draggable\n            el.off('drag').off('dragend');\n            var draggable = itemModel.get('draggable');\n            if (draggable) {\n                el.on('drag', function () {\n                    if (forceLayout) {\n                        forceLayout.warmUp();\n                        !this._layouting\n                            && this._startForceLayoutIteration(forceLayout, layoutAnimation);\n                        forceLayout.setFixed(idx);\n                        // Write position back to layout\n                        data.setItemLayout(idx, el.position);\n                    }\n                }, this).on('dragend', function () {\n                    if (forceLayout) {\n                        forceLayout.setUnfixed(idx);\n                    }\n                }, this);\n            }\n            el.setDraggable(draggable && forceLayout);\n\n            el[FOCUS_ADJACENCY] && el.off('mouseover', el[FOCUS_ADJACENCY]);\n            el[UNFOCUS_ADJACENCY] && el.off('mouseout', el[UNFOCUS_ADJACENCY]);\n\n            if (itemModel.get('focusNodeAdjacency')) {\n                el.on('mouseover', el[FOCUS_ADJACENCY] = function () {\n                    api.dispatchAction({\n                        type: 'focusNodeAdjacency',\n                        seriesId: seriesModel.id,\n                        dataIndex: el.dataIndex\n                    });\n                });\n                el.on('mouseout', el[UNFOCUS_ADJACENCY] = function () {\n                    api.dispatchAction({\n                        type: 'unfocusNodeAdjacency',\n                        seriesId: seriesModel.id\n                    });\n                });\n            }\n\n        }, this);\n\n        data.graph.eachEdge(function (edge) {\n            var el = edge.getGraphicEl();\n\n            el[FOCUS_ADJACENCY] && el.off('mouseover', el[FOCUS_ADJACENCY]);\n            el[UNFOCUS_ADJACENCY] && el.off('mouseout', el[UNFOCUS_ADJACENCY]);\n\n            if (edge.getModel().get('focusNodeAdjacency')) {\n                el.on('mouseover', el[FOCUS_ADJACENCY] = function () {\n                    api.dispatchAction({\n                        type: 'focusNodeAdjacency',\n                        seriesId: seriesModel.id,\n                        edgeDataIndex: edge.dataIndex\n                    });\n                });\n                el.on('mouseout', el[UNFOCUS_ADJACENCY] = function () {\n                    api.dispatchAction({\n                        type: 'unfocusNodeAdjacency',\n                        seriesId: seriesModel.id\n                    });\n                });\n            }\n        });\n\n        var circularRotateLabel = seriesModel.get('layout') === 'circular'\n            && seriesModel.get('circular.rotateLabel');\n        var cx = data.getLayout('cx');\n        var cy = data.getLayout('cy');\n        data.eachItemGraphicEl(function (el, idx) {\n            var itemModel = data.getItemModel(idx);\n            var labelRotate = itemModel.get('label.rotate') || 0;\n            var symbolPath = el.getSymbolPath();\n            if (circularRotateLabel) {\n                var pos = data.getItemLayout(idx);\n                var rad = Math.atan2(pos[1] - cy, pos[0] - cx);\n                if (rad < 0) {\n                    rad = Math.PI * 2 + rad;\n                }\n                var isLeft = pos[0] < cx;\n                if (isLeft) {\n                    rad = rad - Math.PI;\n                }\n                var textPosition = isLeft ? 'left' : 'right';\n                graphic.modifyLabelStyle(\n                    symbolPath,\n                    {\n                        textRotation: -rad,\n                        textPosition: textPosition,\n                        textOrigin: 'center'\n                    },\n                    {\n                        textPosition: textPosition\n                    }\n                );\n            }\n            else {\n                graphic.modifyLabelStyle(\n                    symbolPath,\n                    {\n                        textRotation: labelRotate *= Math.PI / 180\n                    }\n                );\n            }\n        });\n\n        this._firstRender = false;\n    },\n\n    dispose: function () {\n        this._controller && this._controller.dispose();\n        this._controllerHost = {};\n    },\n\n    focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n        var data = this._model.getData();\n        var graph = data.graph;\n        var dataIndex = payload.dataIndex;\n        var edgeDataIndex = payload.edgeDataIndex;\n\n        var node = graph.getNodeByIndex(dataIndex);\n        var edge = graph.getEdgeByIndex(edgeDataIndex);\n\n        if (!node && !edge) {\n            return;\n        }\n\n        graph.eachNode(function (node) {\n            fadeOutItem(node, nodeOpacityPath, 0.1);\n        });\n        graph.eachEdge(function (edge) {\n            fadeOutItem(edge, lineOpacityPath, 0.1);\n        });\n\n        if (node) {\n            fadeInItem(node, nodeOpacityPath);\n            zrUtil.each(node.edges, function (adjacentEdge) {\n                if (adjacentEdge.dataIndex < 0) {\n                    return;\n                }\n                fadeInItem(adjacentEdge, lineOpacityPath);\n                fadeInItem(adjacentEdge.node1, nodeOpacityPath);\n                fadeInItem(adjacentEdge.node2, nodeOpacityPath);\n            });\n        }\n        if (edge) {\n            fadeInItem(edge, lineOpacityPath);\n            fadeInItem(edge.node1, nodeOpacityPath);\n            fadeInItem(edge.node2, nodeOpacityPath);\n        }\n    },\n\n    unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n        var graph = this._model.getData().graph;\n\n        graph.eachNode(function (node) {\n            fadeOutItem(node, nodeOpacityPath);\n        });\n        graph.eachEdge(function (edge) {\n            fadeOutItem(edge, lineOpacityPath);\n        });\n    },\n\n    _startForceLayoutIteration: function (forceLayout, layoutAnimation) {\n        var self = this;\n        (function step() {\n            forceLayout.step(function (stopped) {\n                self.updateLayout(self._model);\n                (self._layouting = !stopped) && (\n                    layoutAnimation\n                        ? (self._layoutTimeout = setTimeout(step, 16))\n                        : step()\n                );\n            });\n        })();\n    },\n\n    _updateController: function (seriesModel, ecModel, api) {\n        var controller = this._controller;\n        var controllerHost = this._controllerHost;\n        var group = this.group;\n\n        controller.setPointerChecker(function (e, x, y) {\n            var rect = group.getBoundingRect();\n            rect.applyTransform(group.transform);\n            return rect.contain(x, y)\n                && !onIrrelevantElement(e, api, seriesModel);\n        });\n\n        if (seriesModel.coordinateSystem.type !== 'view') {\n            controller.disable();\n            return;\n        }\n        controller.enable(seriesModel.get('roam'));\n        controllerHost.zoomLimit = seriesModel.get('scaleLimit');\n        controllerHost.zoom = seriesModel.coordinateSystem.getZoom();\n\n        controller\n            .off('pan')\n            .off('zoom')\n            .on('pan', function (e) {\n                roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy);\n                api.dispatchAction({\n                    seriesId: seriesModel.id,\n                    type: 'graphRoam',\n                    dx: e.dx,\n                    dy: e.dy\n                });\n            })\n            .on('zoom', function (e) {\n                roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);\n                api.dispatchAction({\n                    seriesId: seriesModel.id,\n                    type: 'graphRoam',\n                    zoom: e.scale,\n                    originX: e.originX,\n                    originY: e.originY\n                });\n                this._updateNodeAndLinkScale();\n                adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));\n                this._lineDraw.updateLayout();\n            }, this);\n    },\n\n    _updateNodeAndLinkScale: function () {\n        var seriesModel = this._model;\n        var data = seriesModel.getData();\n\n        var nodeScale = getNodeGlobalScale(seriesModel);\n        var invScale = [nodeScale, nodeScale];\n\n        data.eachItemGraphicEl(function (el, idx) {\n            el.attr('scale', invScale);\n        });\n    },\n\n    updateLayout: function (seriesModel) {\n        adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));\n\n        this._symbolDraw.updateLayout();\n        this._lineDraw.updateLayout();\n    },\n\n    remove: function (ecModel, api) {\n        this._symbolDraw && this._symbolDraw.remove();\n        this._lineDraw && this._lineDraw.remove();\n    }\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../../echarts';\n\n/**\n * @payload\n * @property {number} [seriesIndex]\n * @property {string} [seriesId]\n * @property {string} [seriesName]\n * @property {number} [dataIndex]\n */\necharts.registerAction({\n    type: 'focusNodeAdjacency',\n    event: 'focusNodeAdjacency',\n    update: 'series:focusNodeAdjacency'\n}, function () {});\n\n/**\n * @payload\n * @property {number} [seriesIndex]\n * @property {string} [seriesId]\n * @property {string} [seriesName]\n */\necharts.registerAction({\n    type: 'unfocusNodeAdjacency',\n    event: 'unfocusNodeAdjacency',\n    update: 'series:unfocusNodeAdjacency'\n}, function () {});\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\nimport * as echarts from '../../echarts';\nimport {updateCenterAndZoom} from '../../action/roamHelper';\nimport '../helper/focusNodeAdjacencyAction';\n\nvar actionInfo = {\n    type: 'graphRoam',\n    event: 'graphRoam',\n    update: 'none'\n};\n\n/**\n * @payload\n * @property {string} name Series name\n * @property {number} [dx]\n * @property {number} [dy]\n * @property {number} [zoom]\n * @property {number} [originX]\n * @property {number} [originY]\n */\necharts.registerAction(actionInfo, function (payload, ecModel) {\n    ecModel.eachComponent({mainType: 'series', query: payload}, function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n\n        var res = updateCenterAndZoom(coordSys, payload);\n\n        seriesModel.setCenter\n            && seriesModel.setCenter(res.center);\n\n        seriesModel.setZoom\n            && seriesModel.setZoom(res.zoom);\n    });\n});\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nexport default function (ecModel) {\n    var legendModels = ecModel.findComponents({\n        mainType: 'legend'\n    });\n    if (!legendModels || !legendModels.length) {\n        return;\n    }\n    ecModel.eachSeriesByType('graph', function (graphSeries) {\n        var categoriesData = graphSeries.getCategoriesData();\n        var graph = graphSeries.getGraph();\n        var data = graph.data;\n\n        var categoryNames = categoriesData.mapArray(categoriesData.getName);\n\n        data.filterSelf(function (idx) {\n            var model = data.getItemModel(idx);\n            var category = model.getShallow('category');\n            if (category != null) {\n                if (typeof category === 'number') {\n                    category = categoryNames[category];\n                }\n                // If in any legend component the status is not selected.\n                for (var i = 0; i < legendModels.length; i++) {\n                    if (!legendModels[i].isSelected(category)) {\n                        return false;\n                    }\n                }\n            }\n            return true;\n        });\n    }, this);\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\nexport default function (ecModel) {\n\n    var paletteScope = {};\n    ecModel.eachSeriesByType('graph', function (seriesModel) {\n        var categoriesData = seriesModel.getCategoriesData();\n        var data = seriesModel.getData();\n\n        var categoryNameIdxMap = {};\n\n        categoriesData.each(function (idx) {\n            var name = categoriesData.getName(idx);\n            // Add prefix to avoid conflict with Object.prototype.\n            categoryNameIdxMap['ec-' + name] = idx;\n            var itemModel = categoriesData.getItemModel(idx);\n\n            var color = itemModel.get('itemStyle.color')\n                || seriesModel.getColorFromPalette(name, paletteScope);\n            categoriesData.setItemVisual(idx, 'color', color);\n\n            var itemStyleList = ['opacity', 'symbol', 'symbolSize', 'symbolKeepAspect'];\n            for (var i = 0; i < itemStyleList.length; i++) {\n                var itemStyle = itemModel.getShallow(itemStyleList[i], true);\n                if (itemStyle != null) {\n                    categoriesData.setItemVisual(idx, itemStyleList[i], itemStyle);\n                }\n            }\n        });\n\n        // Assign category color to visual\n        if (categoriesData.count()) {\n            data.each(function (idx) {\n                var model = data.getItemModel(idx);\n                var category = model.getShallow('category');\n                if (category != null) {\n                    if (typeof category === 'string') {\n                        category = categoryNameIdxMap['ec-' + category];\n                    }\n\n                    var itemStyleList = ['color', 'opacity', 'symbol', 'symbolSize', 'symbolKeepAspect'];\n\n                    for (var i = 0; i < itemStyleList.length; i++) {\n                        if (data.getItemVisual(idx, itemStyleList[i], true) == null) {\n                            data.setItemVisual(\n                                idx, itemStyleList[i],\n                                categoriesData.getItemVisual(category, itemStyleList[i])\n                            );\n                        }\n                    }\n                }\n            });\n        }\n    });\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nfunction normalize(a) {\n    if (!(a instanceof Array)) {\n        a = [a, a];\n    }\n    return a;\n}\n\nexport default function (ecModel) {\n    ecModel.eachSeriesByType('graph', function (seriesModel) {\n        var graph = seriesModel.getGraph();\n        var edgeData = seriesModel.getEdgeData();\n        var symbolType = normalize(seriesModel.get('edgeSymbol'));\n        var symbolSize = normalize(seriesModel.get('edgeSymbolSize'));\n\n        var colorQuery = 'lineStyle.color'.split('.');\n        var opacityQuery = 'lineStyle.opacity'.split('.');\n\n        edgeData.setVisual('fromSymbol', symbolType && symbolType[0]);\n        edgeData.setVisual('toSymbol', symbolType && symbolType[1]);\n        edgeData.setVisual('fromSymbolSize', symbolSize && symbolSize[0]);\n        edgeData.setVisual('toSymbolSize', symbolSize && symbolSize[1]);\n        edgeData.setVisual('color', seriesModel.get(colorQuery));\n        edgeData.setVisual('opacity', seriesModel.get(opacityQuery));\n\n        edgeData.each(function (idx) {\n            var itemModel = edgeData.getItemModel(idx);\n            var edge = graph.getEdgeByIndex(idx);\n            var symbolType = normalize(itemModel.getShallow('symbol', true));\n            var symbolSize = normalize(itemModel.getShallow('symbolSize', true));\n            // Edge visual must after node visual\n            var color = itemModel.get(colorQuery);\n            var opacity = itemModel.get(opacityQuery);\n            switch (color) {\n                case 'source':\n                    color = edge.node1.getVisual('color');\n                    break;\n                case 'target':\n                    color = edge.node2.getVisual('color');\n                    break;\n            }\n\n            symbolType[0] && edge.setVisual('fromSymbol', symbolType[0]);\n            symbolType[1] && edge.setVisual('toSymbol', symbolType[1]);\n            symbolSize[0] && edge.setVisual('fromSymbolSize', symbolSize[0]);\n            symbolSize[1] && edge.setVisual('toSymbolSize', symbolSize[1]);\n\n            edge.setVisual('color', color);\n            edge.setVisual('opacity', opacity);\n        });\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as vec2 from 'zrender/src/core/vector';\n\nexport function simpleLayout(seriesModel) {\n    var coordSys = seriesModel.coordinateSystem;\n    if (coordSys && coordSys.type !== 'view') {\n        return;\n    }\n    var graph = seriesModel.getGraph();\n\n    graph.eachNode(function (node) {\n        var model = node.getModel();\n        node.setLayout([+model.get('x'), +model.get('y')]);\n    });\n\n    simpleLayoutEdge(graph);\n}\n\nexport function simpleLayoutEdge(graph) {\n    graph.eachEdge(function (edge) {\n        var curveness = edge.getModel().get('lineStyle.curveness') || 0;\n        var p1 = vec2.clone(edge.node1.getLayout());\n        var p2 = vec2.clone(edge.node2.getLayout());\n        var points = [p1, p2];\n        if (+curveness) {\n            points.push([\n                (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness,\n                (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * curveness\n            ]);\n        }\n        edge.setLayout(points);\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\nimport {each} from 'zrender/src/core/util';\nimport {simpleLayout, simpleLayoutEdge} from './simpleLayoutHelper';\n\nexport default function (ecModel, api) {\n    ecModel.eachSeriesByType('graph', function (seriesModel) {\n        var layout = seriesModel.get('layout');\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys && coordSys.type !== 'view') {\n            var data = seriesModel.getData();\n\n            var dimensions = [];\n            each(coordSys.dimensions, function (coordDim) {\n                dimensions = dimensions.concat(data.mapDimension(coordDim, true));\n            });\n\n            for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) {\n                var value = [];\n                var hasValue = false;\n                for (var i = 0; i < dimensions.length; i++) {\n                    var val = data.get(dimensions[i], dataIndex);\n                    if (!isNaN(val)) {\n                        hasValue = true;\n                    }\n                    value.push(val);\n                }\n                if (hasValue) {\n                    data.setItemLayout(dataIndex, coordSys.dataToPoint(value));\n                }\n                else {\n                    // Also {Array.<number>}, not undefined to avoid if...else... statement\n                    data.setItemLayout(dataIndex, [NaN, NaN]);\n                }\n            }\n\n            simpleLayoutEdge(data.graph);\n        }\n        else if (!layout || layout === 'none') {\n            simpleLayout(seriesModel);\n        }\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as vec2 from 'zrender/src/core/vector';\nimport {getSymbolSize, getNodeGlobalScale} from './graphHelper';\n\nvar PI = Math.PI;\n\nvar _symbolRadiansHalf = [];\n\n/**\n * `basedOn` can be:\n * 'value':\n *     This layout is not accurate and have same bad case. For example,\n *     if the min value is very smaller than the max value, the nodes\n *     with the min value probably overlap even though there is enough\n *     space to layout them. So we only use this approach in the as the\n *     init layout of the force layout.\n *     FIXME\n *     Probably we do not need this method any more but use\n *     `basedOn: 'symbolSize'` in force layout if\n *     delay its init operations to GraphView.\n * 'symbolSize':\n *     This approach work only if all of the symbol size calculated.\n *     That is, the progressive rendering is not applied to graph.\n *     FIXME\n *     If progressive rendering is applied to graph some day,\n *     probably we have to use `basedOn: 'value'`.\n *\n * @param {module:echarts/src/model/Series} seriesModel\n * @param {string} basedOn 'value' or 'symbolSize'\n */\nexport function circularLayout(seriesModel, basedOn) {\n    var coordSys = seriesModel.coordinateSystem;\n    if (coordSys && coordSys.type !== 'view') {\n        return;\n    }\n\n    var rect = coordSys.getBoundingRect();\n\n    var nodeData = seriesModel.getData();\n    var graph = nodeData.graph;\n\n    var cx = rect.width / 2 + rect.x;\n    var cy = rect.height / 2 + rect.y;\n    var r = Math.min(rect.width, rect.height) / 2;\n    var count = nodeData.count();\n\n    nodeData.setLayout({\n        cx: cx,\n        cy: cy\n    });\n\n    if (!count) {\n        return;\n    }\n\n    _layoutNodesBasedOn[basedOn](seriesModel, coordSys, graph, nodeData, r, cx, cy, count);\n\n    graph.eachEdge(function (edge) {\n        var curveness = edge.getModel().get('lineStyle.curveness') || 0;\n        var p1 = vec2.clone(edge.node1.getLayout());\n        var p2 = vec2.clone(edge.node2.getLayout());\n        var cp1;\n        var x12 = (p1[0] + p2[0]) / 2;\n        var y12 = (p1[1] + p2[1]) / 2;\n        if (+curveness) {\n            curveness *= 3;\n            cp1 = [\n                cx * curveness + x12 * (1 - curveness),\n                cy * curveness + y12 * (1 - curveness)\n            ];\n        }\n        edge.setLayout([p1, p2, cp1]);\n    });\n}\n\nvar _layoutNodesBasedOn = {\n\n    value: function (seriesModel, coordSys, graph, nodeData, r, cx, cy, count) {\n        var angle = 0;\n        var sum = nodeData.getSum('value');\n        var unitAngle = Math.PI * 2 / (sum || count);\n\n        graph.eachNode(function (node) {\n            var value = node.getValue('value');\n            var radianHalf = unitAngle * (sum ? value : 1) / 2;\n\n            angle += radianHalf;\n            node.setLayout([\n                r * Math.cos(angle) + cx,\n                r * Math.sin(angle) + cy\n            ]);\n            angle += radianHalf;\n        });\n    },\n\n    symbolSize: function (seriesModel, coordSys, graph, nodeData, r, cx, cy, count) {\n        var sumRadian = 0;\n        _symbolRadiansHalf.length = count;\n\n        var nodeScale = getNodeGlobalScale(seriesModel);\n\n        graph.eachNode(function (node) {\n            var symbolSize = getSymbolSize(node);\n\n            // Normally this case will not happen, but we still add\n            // some the defensive code (2px is an arbitrary value).\n            isNaN(symbolSize) && (symbolSize = 2);\n            symbolSize < 0 && (symbolSize = 0);\n\n            symbolSize *= nodeScale;\n\n            var symbolRadianHalf = Math.asin(symbolSize / 2 / r);\n            // when `symbolSize / 2` is bigger than `r`.\n            isNaN(symbolRadianHalf) && (symbolRadianHalf = PI / 2);\n            _symbolRadiansHalf[node.dataIndex] = symbolRadianHalf;\n            sumRadian += symbolRadianHalf * 2;\n        });\n\n        var halfRemainRadian = (2 * PI - sumRadian) / count / 2;\n\n        var angle = 0;\n        graph.eachNode(function (node) {\n            var radianHalf = halfRemainRadian + _symbolRadiansHalf[node.dataIndex];\n\n            angle += radianHalf;\n            node.setLayout([\n                r * Math.cos(angle) + cx,\n                r * Math.sin(angle) + cy\n            ]);\n            angle += radianHalf;\n        });\n    }\n};\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {circularLayout} from './circularLayoutHelper';\n\nexport default function (ecModel) {\n    ecModel.eachSeriesByType('graph', function (seriesModel) {\n        if (seriesModel.get('layout') === 'circular') {\n            circularLayout(seriesModel, 'symbolSize');\n        }\n    });\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embeded for some of the code in this file:\n* Some formulas were originally copied from \"d3.js\" with some\n* modifications made for this project.\n* (See more details in the comment of the method \"step\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n\nimport * as vec2 from 'zrender/src/core/vector';\n\nvar scaleAndAdd = vec2.scaleAndAdd;\n\n// function adjacentNode(n, e) {\n//     return e.n1 === n ? e.n2 : e.n1;\n// }\n\nexport function forceLayout(nodes, edges, opts) {\n    var rect = opts.rect;\n    var width = rect.width;\n    var height = rect.height;\n    var center = [rect.x + width / 2, rect.y + height / 2];\n    // var scale = opts.scale || 1;\n    var gravity = opts.gravity == null ? 0.1 : opts.gravity;\n\n    // for (var i = 0; i < edges.length; i++) {\n    //     var e = edges[i];\n    //     var n1 = e.n1;\n    //     var n2 = e.n2;\n    //     n1.edges = n1.edges || [];\n    //     n2.edges = n2.edges || [];\n    //     n1.edges.push(e);\n    //     n2.edges.push(e);\n    // }\n    // Init position\n    for (var i = 0; i < nodes.length; i++) {\n        var n = nodes[i];\n        if (!n.p) {\n            n.p = vec2.create(\n                width * (Math.random() - 0.5) + center[0],\n                height * (Math.random() - 0.5) + center[1]\n            );\n        }\n        n.pp = vec2.clone(n.p);\n        n.edges = null;\n    }\n\n    // Formula in 'Graph Drawing by Force-directed Placement'\n    // var k = scale * Math.sqrt(width * height / nodes.length);\n    // var k2 = k * k;\n\n    var initialFriction = opts.friction == null ? 0.6 : opts.friction;\n    var friction = initialFriction;\n\n    return {\n        warmUp: function () {\n            friction = initialFriction * 0.8;\n        },\n\n        setFixed: function (idx) {\n            nodes[idx].fixed = true;\n        },\n\n        setUnfixed: function (idx) {\n            nodes[idx].fixed = false;\n        },\n\n        /**\n         * Some formulas were originally copied from \"d3.js\"\n         * https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/layout/force.js\n         * with some modifications made for this project.\n         * See the license statement at the head of this file.\n         */\n        step: function (cb) {\n            var v12 = [];\n            var nLen = nodes.length;\n            for (var i = 0; i < edges.length; i++) {\n                var e = edges[i];\n                if (e.ignoreForceLayout) {\n                    continue;\n                }\n                var n1 = e.n1;\n                var n2 = e.n2;\n\n                vec2.sub(v12, n2.p, n1.p);\n                var d = vec2.len(v12) - e.d;\n                var w = n2.w / (n1.w + n2.w);\n\n                if (isNaN(w)) {\n                    w = 0;\n                }\n\n                vec2.normalize(v12, v12);\n\n                !n1.fixed && scaleAndAdd(n1.p, n1.p, v12, w * d * friction);\n                !n2.fixed && scaleAndAdd(n2.p, n2.p, v12, -(1 - w) * d * friction);\n            }\n            // Gravity\n            for (var i = 0; i < nLen; i++) {\n                var n = nodes[i];\n                if (!n.fixed) {\n                    vec2.sub(v12, center, n.p);\n                    // var d = vec2.len(v12);\n                    // vec2.scale(v12, v12, 1 / d);\n                    // var gravityFactor = gravity;\n                    scaleAndAdd(n.p, n.p, v12, gravity * friction);\n                }\n            }\n\n            // Repulsive\n            // PENDING\n            for (var i = 0; i < nLen; i++) {\n                var n1 = nodes[i];\n                for (var j = i + 1; j < nLen; j++) {\n                    var n2 = nodes[j];\n                    vec2.sub(v12, n2.p, n1.p);\n                    var d = vec2.len(v12);\n                    if (d === 0) {\n                        // Random repulse\n                        vec2.set(v12, Math.random() - 0.5, Math.random() - 0.5);\n                        d = 1;\n                    }\n                    var repFact = (n1.rep + n2.rep) / d / d;\n                    !n1.fixed && scaleAndAdd(n1.pp, n1.pp, v12, repFact);\n                    !n2.fixed && scaleAndAdd(n2.pp, n2.pp, v12, -repFact);\n                }\n            }\n            var v = [];\n            for (var i = 0; i < nLen; i++) {\n                var n = nodes[i];\n                if (!n.fixed) {\n                    vec2.sub(v, n.p, n.pp);\n                    scaleAndAdd(n.p, n.p, v, friction);\n                    vec2.copy(n.pp, n.p);\n                }\n            }\n\n            friction = friction * 0.992;\n\n            cb && cb(nodes, edges, friction < 0.01);\n        }\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {forceLayout} from './forceHelper';\nimport {simpleLayout} from './simpleLayoutHelper';\nimport {circularLayout} from './circularLayoutHelper';\nimport {linearMap} from '../../util/number';\nimport * as vec2 from 'zrender/src/core/vector';\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default function (ecModel) {\n    ecModel.eachSeriesByType('graph', function (graphSeries) {\n        var coordSys = graphSeries.coordinateSystem;\n        if (coordSys && coordSys.type !== 'view') {\n            return;\n        }\n        if (graphSeries.get('layout') === 'force') {\n            var preservedPoints = graphSeries.preservedPoints || {};\n            var graph = graphSeries.getGraph();\n            var nodeData = graph.data;\n            var edgeData = graph.edgeData;\n            var forceModel = graphSeries.getModel('force');\n            var initLayout = forceModel.get('initLayout');\n            if (graphSeries.preservedPoints) {\n                nodeData.each(function (idx) {\n                    var id = nodeData.getId(idx);\n                    nodeData.setItemLayout(idx, preservedPoints[id] || [NaN, NaN]);\n                });\n            }\n            else if (!initLayout || initLayout === 'none') {\n                simpleLayout(graphSeries);\n            }\n            else if (initLayout === 'circular') {\n                circularLayout(graphSeries, 'value');\n            }\n\n            var nodeDataExtent = nodeData.getDataExtent('value');\n            var edgeDataExtent = edgeData.getDataExtent('value');\n            // var edgeDataExtent = edgeData.getDataExtent('value');\n            var repulsion = forceModel.get('repulsion');\n            var edgeLength = forceModel.get('edgeLength');\n            if (!zrUtil.isArray(repulsion)) {\n                repulsion = [repulsion, repulsion];\n            }\n            if (!zrUtil.isArray(edgeLength)) {\n                edgeLength = [edgeLength, edgeLength];\n            }\n            // Larger value has smaller length\n            edgeLength = [edgeLength[1], edgeLength[0]];\n\n            var nodes = nodeData.mapArray('value', function (value, idx) {\n                var point = nodeData.getItemLayout(idx);\n                var rep = linearMap(value, nodeDataExtent, repulsion);\n                if (isNaN(rep)) {\n                    rep = (repulsion[0] + repulsion[1]) / 2;\n                }\n                return {\n                    w: rep,\n                    rep: rep,\n                    fixed: nodeData.getItemModel(idx).get('fixed'),\n                    p: (!point || isNaN(point[0]) || isNaN(point[1])) ? null : point\n                };\n            });\n            var edges = edgeData.mapArray('value', function (value, idx) {\n                var edge = graph.getEdgeByIndex(idx);\n                var d = linearMap(value, edgeDataExtent, edgeLength);\n                if (isNaN(d)) {\n                    d = (edgeLength[0] + edgeLength[1]) / 2;\n                }\n                var edgeModel = edge.getModel();\n                return {\n                    n1: nodes[edge.node1.dataIndex],\n                    n2: nodes[edge.node2.dataIndex],\n                    d: d,\n                    curveness: edgeModel.get('lineStyle.curveness') || 0,\n                    ignoreForceLayout: edgeModel.get('ignoreForceLayout')\n                };\n            });\n\n            var coordSys = graphSeries.coordinateSystem;\n            var rect = coordSys.getBoundingRect();\n            var forceInstance = forceLayout(nodes, edges, {\n                rect: rect,\n                gravity: forceModel.get('gravity'),\n                friction: forceModel.get('friction')\n            });\n            var oldStep = forceInstance.step;\n            forceInstance.step = function (cb) {\n                for (var i = 0, l = nodes.length; i < l; i++) {\n                    if (nodes[i].fixed) {\n                        // Write back to layout instance\n                        vec2.copy(nodes[i].p, graph.getNodeByIndex(i).getLayout());\n                    }\n                }\n                oldStep(function (nodes, edges, stopped) {\n                    for (var i = 0, l = nodes.length; i < l; i++) {\n                        if (!nodes[i].fixed) {\n                            graph.getNodeByIndex(i).setLayout(nodes[i].p);\n                        }\n                        preservedPoints[nodeData.getId(i)] = nodes[i].p;\n                    }\n                    for (var i = 0, l = edges.length; i < l; i++) {\n                        var e = edges[i];\n                        var edge = graph.getEdgeByIndex(i);\n                        var p1 = e.n1.p;\n                        var p2 = e.n2.p;\n                        var points = edge.getLayout();\n                        points = points ? points.slice() : [];\n                        points[0] = points[0] || [];\n                        points[1] = points[1] || [];\n                        vec2.copy(points[0], p1);\n                        vec2.copy(points[1], p2);\n                        if (+e.curveness) {\n                            points[2] = [\n                                (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * e.curveness,\n                                (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * e.curveness\n                            ];\n                        }\n                        edge.setLayout(points);\n                    }\n                    // Update layout\n\n                    cb && cb(stopped);\n                });\n            };\n            graphSeries.forceLayout = forceInstance;\n            graphSeries.preservedPoints = preservedPoints;\n\n            // Step to get the layout\n            forceInstance.step();\n        }\n        else {\n            // Remove prev injected forceLayout instance\n            graphSeries.forceLayout = null;\n        }\n    });\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// FIXME Where to create the simple view coordinate system\nimport View from '../../coord/View';\nimport {getLayoutRect} from '../../util/layout';\nimport * as bbox from 'zrender/src/core/bbox';\n\nfunction getViewRect(seriesModel, api, aspect) {\n    var option = seriesModel.getBoxLayoutParams();\n    option.aspect = aspect;\n    return getLayoutRect(option, {\n        width: api.getWidth(),\n        height: api.getHeight()\n    });\n}\n\nexport default function (ecModel, api) {\n    var viewList = [];\n    ecModel.eachSeriesByType('graph', function (seriesModel) {\n        var coordSysType = seriesModel.get('coordinateSystem');\n        if (!coordSysType || coordSysType === 'view') {\n\n            var data = seriesModel.getData();\n            var positions = data.mapArray(function (idx) {\n                var itemModel = data.getItemModel(idx);\n                return [+itemModel.get('x'), +itemModel.get('y')];\n            });\n\n            var min = [];\n            var max = [];\n\n            bbox.fromPoints(positions, min, max);\n\n            // If width or height is 0\n            if (max[0] - min[0] === 0) {\n                max[0] += 1;\n                min[0] -= 1;\n            }\n            if (max[1] - min[1] === 0) {\n                max[1] += 1;\n                min[1] -= 1;\n            }\n            var aspect = (max[0] - min[0]) / (max[1] - min[1]);\n            // FIXME If get view rect after data processed?\n            var viewRect = getViewRect(seriesModel, api, aspect);\n            // Position may be NaN, use view rect instead\n            if (isNaN(aspect)) {\n                min = [viewRect.x, viewRect.y];\n                max = [viewRect.x + viewRect.width, viewRect.y + viewRect.height];\n            }\n\n            var bbWidth = max[0] - min[0];\n            var bbHeight = max[1] - min[1];\n\n            var viewWidth = viewRect.width;\n            var viewHeight = viewRect.height;\n\n            var viewCoordSys = seriesModel.coordinateSystem = new View();\n            viewCoordSys.zoomLimit = seriesModel.get('scaleLimit');\n\n            viewCoordSys.setBoundingRect(\n                min[0], min[1], bbWidth, bbHeight\n            );\n            viewCoordSys.setViewRect(\n                viewRect.x, viewRect.y, viewWidth, viewHeight\n            );\n\n            // Update roam info\n            viewCoordSys.setCenter(seriesModel.get('center'));\n            viewCoordSys.setZoom(seriesModel.get('zoom'));\n\n            viewList.push(viewCoordSys);\n        }\n    });\n\n    return viewList;\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\nimport * as echarts from '../echarts';\n\nimport './graph/GraphSeries';\nimport './graph/GraphView';\nimport './graph/graphAction';\n\nimport categoryFilter from './graph/categoryFilter';\nimport visualSymbol from '../visual/symbol';\nimport categoryVisual from './graph/categoryVisual';\nimport edgeVisual from './graph/edgeVisual';\nimport simpleLayout from './graph/simpleLayout';\nimport circularLayout from './graph/circularLayout';\nimport forceLayout from './graph/forceLayout';\nimport createView from './graph/createView';\n\necharts.registerProcessor(categoryFilter);\n\necharts.registerVisual(visualSymbol('graph', 'circle', null));\necharts.registerVisual(categoryVisual);\necharts.registerVisual(edgeVisual);\n\necharts.registerLayout(simpleLayout);\necharts.registerLayout(echarts.PRIORITY.VISUAL.POST_CHART_LAYOUT, circularLayout);\necharts.registerLayout(forceLayout);\n\n// Graph view coordinate system\necharts.registerCoordinateSystem('graphView', {\n    create: createView\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\nimport createListSimply from '../helper/createListSimply';\nimport SeriesModel from '../../model/Series';\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar GaugeSeries = SeriesModel.extend({\n\n    type: 'series.gauge',\n\n    getInitialData: function (option, ecModel) {\n        return createListSimply(this, ['value']);\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        // 默认全局居中\n        center: ['50%', '50%'],\n        legendHoverLink: true,\n        radius: '75%',\n        startAngle: 225,\n        endAngle: -45,\n        clockwise: true,\n        // 最小值\n        min: 0,\n        // 最大值\n        max: 100,\n        // 分割段数，默认为10\n        splitNumber: 10,\n        // 坐标轴线\n        axisLine: {\n            // 默认显示，属性show控制显示与否\n            show: true,\n            lineStyle: {       // 属性lineStyle控制线条样式\n                color: [[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']],\n                width: 30\n            }\n        },\n        // 分隔线\n        splitLine: {\n            // 默认显示，属性show控制显示与否\n            show: true,\n            // 属性length控制线长\n            length: 30,\n            // 属性lineStyle（详见lineStyle）控制线条样式\n            lineStyle: {\n                color: '#eee',\n                width: 2,\n                type: 'solid'\n            }\n        },\n        // 坐标轴小标记\n        axisTick: {\n            // 属性show控制显示与否，默认不显示\n            show: true,\n            // 每份split细分多少段\n            splitNumber: 5,\n            // 属性length控制线长\n            length: 8,\n            // 属性lineStyle控制线条样式\n            lineStyle: {\n                color: '#eee',\n                width: 1,\n                type: 'solid'\n            }\n        },\n        axisLabel: {\n            show: true,\n            distance: 5,\n            // formatter: null,\n            color: 'auto'\n        },\n        pointer: {\n            show: true,\n            length: '80%',\n            width: 8\n        },\n        itemStyle: {\n            color: 'auto'\n        },\n        title: {\n            show: true,\n            // x, y，单位px\n            offsetCenter: [0, '-40%'],\n            // 其余属性默认使用全局文本样式，详见TEXTSTYLE\n            color: '#333',\n            fontSize: 15\n        },\n        detail: {\n            show: true,\n            backgroundColor: 'rgba(0,0,0,0)',\n            borderWidth: 0,\n            borderColor: '#ccc',\n            width: 100,\n            height: null, // self-adaption\n            padding: [5, 10],\n            // x, y，单位px\n            offsetCenter: [0, '40%'],\n            // formatter: null,\n            // 其余属性默认使用全局文本样式，详见TEXTSTYLE\n            color: 'auto',\n            fontSize: 30\n        }\n    }\n});\n\nexport default GaugeSeries;","/*\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\nimport Path from 'zrender/src/graphic/Path';\n\nexport default Path.extend({\n\n    type: 'echartsGaugePointer',\n\n    shape: {\n        angle: 0,\n\n        width: 10,\n\n        r: 10,\n\n        x: 0,\n\n        y: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var mathCos = Math.cos;\n        var mathSin = Math.sin;\n\n        var r = shape.r;\n        var width = shape.width;\n        var angle = shape.angle;\n        var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2);\n        var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2);\n\n        angle = shape.angle - Math.PI / 2;\n        ctx.moveTo(x, y);\n        ctx.lineTo(\n            shape.x + mathCos(angle) * width,\n            shape.y + mathSin(angle) * width\n        );\n        ctx.lineTo(\n            shape.x + mathCos(shape.angle) * r,\n            shape.y + mathSin(shape.angle) * r\n        );\n        ctx.lineTo(\n            shape.x - mathCos(angle) * width,\n            shape.y - mathSin(angle) * width\n        );\n        ctx.lineTo(x, y);\n        return;\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\nimport PointerPath from './PointerPath';\nimport * as graphic from '../../util/graphic';\nimport ChartView from '../../view/Chart';\nimport {parsePercent, round, linearMap} from '../../util/number';\n\nfunction parsePosition(seriesModel, api) {\n    var center = seriesModel.get('center');\n    var width = api.getWidth();\n    var height = api.getHeight();\n    var size = Math.min(width, height);\n    var cx = parsePercent(center[0], api.getWidth());\n    var cy = parsePercent(center[1], api.getHeight());\n    var r = parsePercent(seriesModel.get('radius'), size / 2);\n\n    return {\n        cx: cx,\n        cy: cy,\n        r: r\n    };\n}\n\nfunction formatLabel(label, labelFormatter) {\n    if (labelFormatter) {\n        if (typeof labelFormatter === 'string') {\n            label = labelFormatter.replace('{value}', label != null ? label : '');\n        }\n        else if (typeof labelFormatter === 'function') {\n            label = labelFormatter(label);\n        }\n    }\n\n    return label;\n}\n\nvar PI2 = Math.PI * 2;\n\nvar GaugeView = ChartView.extend({\n\n    type: 'gauge',\n\n    render: function (seriesModel, ecModel, api) {\n\n        this.group.removeAll();\n\n        var colorList = seriesModel.get('axisLine.lineStyle.color');\n        var posInfo = parsePosition(seriesModel, api);\n\n        this._renderMain(\n            seriesModel, ecModel, api, colorList, posInfo\n        );\n    },\n\n    dispose: function () {},\n\n    _renderMain: function (seriesModel, ecModel, api, colorList, posInfo) {\n        var group = this.group;\n\n        var axisLineModel = seriesModel.getModel('axisLine');\n        var lineStyleModel = axisLineModel.getModel('lineStyle');\n\n        var clockwise = seriesModel.get('clockwise');\n        var startAngle = -seriesModel.get('startAngle') / 180 * Math.PI;\n        var endAngle = -seriesModel.get('endAngle') / 180 * Math.PI;\n\n        var angleRangeSpan = (endAngle - startAngle) % PI2;\n\n        var prevEndAngle = startAngle;\n        var axisLineWidth = lineStyleModel.get('width');\n        var showAxis = axisLineModel.get('show');\n\n        for (var i = 0; showAxis && i < colorList.length; i++) {\n            // Clamp\n            var percent = Math.min(Math.max(colorList[i][0], 0), 1);\n            var endAngle = startAngle + angleRangeSpan * percent;\n            var sector = new graphic.Sector({\n                shape: {\n                    startAngle: prevEndAngle,\n                    endAngle: endAngle,\n                    cx: posInfo.cx,\n                    cy: posInfo.cy,\n                    clockwise: clockwise,\n                    r0: posInfo.r - axisLineWidth,\n                    r: posInfo.r\n                },\n                silent: true\n            });\n\n            sector.setStyle({\n                fill: colorList[i][1]\n            });\n\n            sector.setStyle(lineStyleModel.getLineStyle(\n                // Because we use sector to simulate arc\n                // so the properties for stroking are useless\n                ['color', 'borderWidth', 'borderColor']\n            ));\n\n            group.add(sector);\n\n            prevEndAngle = endAngle;\n        }\n\n        var getColor = function (percent) {\n            // Less than 0\n            if (percent <= 0) {\n                return colorList[0][1];\n            }\n            for (var i = 0; i < colorList.length; i++) {\n                if (colorList[i][0] >= percent\n                    && (i === 0 ? 0 : colorList[i - 1][0]) < percent\n                ) {\n                    return colorList[i][1];\n                }\n            }\n            // More than 1\n            return colorList[i - 1][1];\n        };\n\n        if (!clockwise) {\n            var tmp = startAngle;\n            startAngle = endAngle;\n            endAngle = tmp;\n        }\n\n        this._renderTicks(\n            seriesModel, ecModel, api, getColor, posInfo,\n            startAngle, endAngle, clockwise\n        );\n\n        this._renderPointer(\n            seriesModel, ecModel, api, getColor, posInfo,\n            startAngle, endAngle, clockwise\n        );\n\n        this._renderTitle(\n            seriesModel, ecModel, api, getColor, posInfo\n        );\n        this._renderDetail(\n            seriesModel, ecModel, api, getColor, posInfo\n        );\n    },\n\n    _renderTicks: function (\n        seriesModel, ecModel, api, getColor, posInfo,\n        startAngle, endAngle, clockwise\n    ) {\n        var group = this.group;\n        var cx = posInfo.cx;\n        var cy = posInfo.cy;\n        var r = posInfo.r;\n\n        var minVal = +seriesModel.get('min');\n        var maxVal = +seriesModel.get('max');\n\n        var splitLineModel = seriesModel.getModel('splitLine');\n        var tickModel = seriesModel.getModel('axisTick');\n        var labelModel = seriesModel.getModel('axisLabel');\n\n        var splitNumber = seriesModel.get('splitNumber');\n        var subSplitNumber = tickModel.get('splitNumber');\n\n        var splitLineLen = parsePercent(\n            splitLineModel.get('length'), r\n        );\n        var tickLen = parsePercent(\n            tickModel.get('length'), r\n        );\n\n        var angle = startAngle;\n        var step = (endAngle - startAngle) / splitNumber;\n        var subStep = step / subSplitNumber;\n\n        var splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle();\n        var tickLineStyle = tickModel.getModel('lineStyle').getLineStyle();\n\n        for (var i = 0; i <= splitNumber; i++) {\n            var unitX = Math.cos(angle);\n            var unitY = Math.sin(angle);\n            // Split line\n            if (splitLineModel.get('show')) {\n                var splitLine = new graphic.Line({\n                    shape: {\n                        x1: unitX * r + cx,\n                        y1: unitY * r + cy,\n                        x2: unitX * (r - splitLineLen) + cx,\n                        y2: unitY * (r - splitLineLen) + cy\n                    },\n                    style: splitLineStyle,\n                    silent: true\n                });\n                if (splitLineStyle.stroke === 'auto') {\n                    splitLine.setStyle({\n                        stroke: getColor(i / splitNumber)\n                    });\n                }\n\n                group.add(splitLine);\n            }\n\n            // Label\n            if (labelModel.get('show')) {\n                var label = formatLabel(\n                    round(i / splitNumber * (maxVal - minVal) + minVal),\n                    labelModel.get('formatter')\n                );\n                var distance = labelModel.get('distance');\n                var autoColor = getColor(i / splitNumber);\n\n                group.add(new graphic.Text({\n                    style: graphic.setTextStyle({}, labelModel, {\n                        text: label,\n                        x: unitX * (r - splitLineLen - distance) + cx,\n                        y: unitY * (r - splitLineLen - distance) + cy,\n                        textVerticalAlign: unitY < -0.4 ? 'top' : (unitY > 0.4 ? 'bottom' : 'middle'),\n                        textAlign: unitX < -0.4 ? 'left' : (unitX > 0.4 ? 'right' : 'center')\n                    }, {autoColor: autoColor}),\n                    silent: true\n                }));\n            }\n\n            // Axis tick\n            if (tickModel.get('show') && i !== splitNumber) {\n                for (var j = 0; j <= subSplitNumber; j++) {\n                    var unitX = Math.cos(angle);\n                    var unitY = Math.sin(angle);\n                    var tickLine = new graphic.Line({\n                        shape: {\n                            x1: unitX * r + cx,\n                            y1: unitY * r + cy,\n                            x2: unitX * (r - tickLen) + cx,\n                            y2: unitY * (r - tickLen) + cy\n                        },\n                        silent: true,\n                        style: tickLineStyle\n                    });\n\n                    if (tickLineStyle.stroke === 'auto') {\n                        tickLine.setStyle({\n                            stroke: getColor((i + j / subSplitNumber) / splitNumber)\n                        });\n                    }\n\n                    group.add(tickLine);\n                    angle += subStep;\n                }\n                angle -= subStep;\n            }\n            else {\n                angle += step;\n            }\n        }\n    },\n\n    _renderPointer: function (\n        seriesModel, ecModel, api, getColor, posInfo,\n        startAngle, endAngle, clockwise\n    ) {\n\n        var group = this.group;\n        var oldData = this._data;\n\n        if (!seriesModel.get('pointer.show')) {\n            // Remove old element\n            oldData && oldData.eachItemGraphicEl(function (el) {\n                group.remove(el);\n            });\n            return;\n        }\n\n        var valueExtent = [+seriesModel.get('min'), +seriesModel.get('max')];\n        var angleExtent = [startAngle, endAngle];\n\n        var data = seriesModel.getData();\n        var valueDim = data.mapDimension('value');\n\n        data.diff(oldData)\n            .add(function (idx) {\n                var pointer = new PointerPath({\n                    shape: {\n                        angle: startAngle\n                    }\n                });\n\n                graphic.initProps(pointer, {\n                    shape: {\n                        angle: linearMap(data.get(valueDim, idx), valueExtent, angleExtent, true)\n                    }\n                }, seriesModel);\n\n                group.add(pointer);\n                data.setItemGraphicEl(idx, pointer);\n            })\n            .update(function (newIdx, oldIdx) {\n                var pointer = oldData.getItemGraphicEl(oldIdx);\n\n                graphic.updateProps(pointer, {\n                    shape: {\n                        angle: linearMap(data.get(valueDim, newIdx), valueExtent, angleExtent, true)\n                    }\n                }, seriesModel);\n\n                group.add(pointer);\n                data.setItemGraphicEl(newIdx, pointer);\n            })\n            .remove(function (idx) {\n                var pointer = oldData.getItemGraphicEl(idx);\n                group.remove(pointer);\n            })\n            .execute();\n\n        data.eachItemGraphicEl(function (pointer, idx) {\n            var itemModel = data.getItemModel(idx);\n            var pointerModel = itemModel.getModel('pointer');\n\n            pointer.setShape({\n                x: posInfo.cx,\n                y: posInfo.cy,\n                width: parsePercent(\n                    pointerModel.get('width'), posInfo.r\n                ),\n                r: parsePercent(pointerModel.get('length'), posInfo.r)\n            });\n\n            pointer.useStyle(itemModel.getModel('itemStyle').getItemStyle());\n\n            if (pointer.style.fill === 'auto') {\n                pointer.setStyle('fill', getColor(\n                    linearMap(data.get(valueDim, idx), valueExtent, [0, 1], true)\n                ));\n            }\n\n            graphic.setHoverStyle(\n                pointer, itemModel.getModel('emphasis.itemStyle').getItemStyle()\n            );\n        });\n\n        this._data = data;\n    },\n\n    _renderTitle: function (\n        seriesModel, ecModel, api, getColor, posInfo\n    ) {\n        var data = seriesModel.getData();\n        var valueDim = data.mapDimension('value');\n        var titleModel = seriesModel.getModel('title');\n        if (titleModel.get('show')) {\n            var offsetCenter = titleModel.get('offsetCenter');\n            var x = posInfo.cx + parsePercent(offsetCenter[0], posInfo.r);\n            var y = posInfo.cy + parsePercent(offsetCenter[1], posInfo.r);\n\n            var minVal = +seriesModel.get('min');\n            var maxVal = +seriesModel.get('max');\n            var value = seriesModel.getData().get(valueDim, 0);\n            var autoColor = getColor(\n                linearMap(value, [minVal, maxVal], [0, 1], true)\n            );\n\n            this.group.add(new graphic.Text({\n                silent: true,\n                style: graphic.setTextStyle({}, titleModel, {\n                    x: x,\n                    y: y,\n                    // FIXME First data name ?\n                    text: data.getName(0),\n                    textAlign: 'center',\n                    textVerticalAlign: 'middle'\n                }, {autoColor: autoColor, forceRich: true})\n            }));\n        }\n    },\n\n    _renderDetail: function (\n        seriesModel, ecModel, api, getColor, posInfo\n    ) {\n        var detailModel = seriesModel.getModel('detail');\n        var minVal = +seriesModel.get('min');\n        var maxVal = +seriesModel.get('max');\n        if (detailModel.get('show')) {\n            var offsetCenter = detailModel.get('offsetCenter');\n            var x = posInfo.cx + parsePercent(offsetCenter[0], posInfo.r);\n            var y = posInfo.cy + parsePercent(offsetCenter[1], posInfo.r);\n            var width = parsePercent(detailModel.get('width'), posInfo.r);\n            var height = parsePercent(detailModel.get('height'), posInfo.r);\n            var data = seriesModel.getData();\n            var value = data.get(data.mapDimension('value'), 0);\n            var autoColor = getColor(\n                linearMap(value, [minVal, maxVal], [0, 1], true)\n            );\n\n            this.group.add(new graphic.Text({\n                silent: true,\n                style: graphic.setTextStyle({}, detailModel, {\n                    x: x,\n                    y: y,\n                    text: formatLabel(\n                        // FIXME First data name ?\n                        value, detailModel.get('formatter')\n                    ),\n                    textWidth: isNaN(width) ? null : width,\n                    textHeight: isNaN(height) ? null : height,\n                    textAlign: 'center',\n                    textVerticalAlign: 'middle'\n                }, {autoColor: autoColor, forceRich: true})\n            }));\n        }\n    }\n});\n\nexport default GaugeView;\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\nimport './gauge/GaugeSeries';\nimport './gauge/GaugeView';","/*\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\nimport * as echarts from '../../echarts';\nimport createListSimply from '../helper/createListSimply';\nimport {defaultEmphasis} from '../../util/model';\n\nvar FunnelSeries = echarts.extendSeriesModel({\n\n    type: 'series.funnel',\n\n    init: function (option) {\n        FunnelSeries.superApply(this, 'init', arguments);\n\n        // Enable legend selection for each data item\n        // Use a function instead of direct access because data reference may changed\n        this.legendDataProvider = function () {\n            return this.getRawData();\n        };\n        // Extend labelLine emphasis\n        this._defaultLabelLine(option);\n    },\n\n    getInitialData: function (option, ecModel) {\n        return createListSimply(this, ['value']);\n    },\n\n    _defaultLabelLine: function (option) {\n        // Extend labelLine emphasis\n        defaultEmphasis(option, 'labelLine', ['show']);\n\n        var labelLineNormalOpt = option.labelLine;\n        var labelLineEmphasisOpt = option.emphasis.labelLine;\n        // Not show label line if `label.normal.show = false`\n        labelLineNormalOpt.show = labelLineNormalOpt.show\n            && option.label.show;\n        labelLineEmphasisOpt.show = labelLineEmphasisOpt.show\n            && option.emphasis.label.show;\n    },\n\n    // Overwrite\n    getDataParams: function (dataIndex) {\n        var data = this.getData();\n        var params = FunnelSeries.superCall(this, 'getDataParams', dataIndex);\n        var valueDim = data.mapDimension('value');\n        var sum = data.getSum(valueDim);\n        // Percent is 0 if sum is 0\n        params.percent = !sum ? 0 : +(data.get(valueDim, dataIndex) / sum * 100).toFixed(2);\n\n        params.$vars.push('percent');\n        return params;\n    },\n\n    defaultOption: {\n        zlevel: 0,                  // 一级层叠\n        z: 2,                       // 二级层叠\n        legendHoverLink: true,\n        left: 80,\n        top: 60,\n        right: 80,\n        bottom: 60,\n        // width: {totalWidth} - left - right,\n        // height: {totalHeight} - top - bottom,\n\n        // 默认取数据最小最大值\n        // min: 0,\n        // max: 100,\n        minSize: '0%',\n        maxSize: '100%',\n        sort: 'descending', // 'ascending', 'descending'\n        gap: 0,\n        funnelAlign: 'center',\n        label: {\n            show: true,\n            position: 'outer'\n            // formatter: 标签文本格式器，同Tooltip.formatter，不支持异步回调\n        },\n        labelLine: {\n            show: true,\n            length: 20,\n            lineStyle: {\n                // color: 各异,\n                width: 1,\n                type: 'solid'\n            }\n        },\n        itemStyle: {\n            // color: 各异,\n            borderColor: '#fff',\n            borderWidth: 1\n        },\n        emphasis: {\n            label: {\n                show: true\n            }\n        }\n    }\n});\n\nexport default FunnelSeries;\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\nimport * as graphic from '../../util/graphic';\nimport * as zrUtil from 'zrender/src/core/util';\nimport ChartView from '../../view/Chart';\n\n/**\n * Piece of pie including Sector, Label, LabelLine\n * @constructor\n * @extends {module:zrender/graphic/Group}\n */\nfunction FunnelPiece(data, idx) {\n\n    graphic.Group.call(this);\n\n    var polygon = new graphic.Polygon();\n    var labelLine = new graphic.Polyline();\n    var text = new graphic.Text();\n    this.add(polygon);\n    this.add(labelLine);\n    this.add(text);\n\n    this.highDownOnUpdate = function (fromState, toState) {\n        if (toState === 'emphasis') {\n            labelLine.ignore = labelLine.hoverIgnore;\n            text.ignore = text.hoverIgnore;\n        }\n        else {\n            labelLine.ignore = labelLine.normalIgnore;\n            text.ignore = text.normalIgnore;\n        }\n    };\n\n    this.updateData(data, idx, true);\n}\n\nvar funnelPieceProto = FunnelPiece.prototype;\n\nvar opacityAccessPath = ['itemStyle', 'opacity'];\nfunnelPieceProto.updateData = function (data, idx, firstCreate) {\n\n    var polygon = this.childAt(0);\n\n    var seriesModel = data.hostModel;\n    var itemModel = data.getItemModel(idx);\n    var layout = data.getItemLayout(idx);\n    var opacity = data.getItemModel(idx).get(opacityAccessPath);\n    opacity = opacity == null ? 1 : opacity;\n\n    // Reset style\n    polygon.useStyle({});\n\n    if (firstCreate) {\n        polygon.setShape({\n            points: layout.points\n        });\n        polygon.setStyle({opacity: 0});\n        graphic.initProps(polygon, {\n            style: {\n                opacity: opacity\n            }\n        }, seriesModel, idx);\n    }\n    else {\n        graphic.updateProps(polygon, {\n            style: {\n                opacity: opacity\n            },\n            shape: {\n                points: layout.points\n            }\n        }, seriesModel, idx);\n    }\n\n    // Update common style\n    var itemStyleModel = itemModel.getModel('itemStyle');\n    var visualColor = data.getItemVisual(idx, 'color');\n\n    polygon.setStyle(\n        zrUtil.defaults(\n            {\n                lineJoin: 'round',\n                fill: visualColor\n            },\n            itemStyleModel.getItemStyle(['opacity'])\n        )\n    );\n    polygon.hoverStyle = itemStyleModel.getModel('emphasis').getItemStyle();\n\n    this._updateLabel(data, idx);\n\n    graphic.setHoverStyle(this);\n};\n\nfunnelPieceProto._updateLabel = function (data, idx) {\n\n    var labelLine = this.childAt(1);\n    var labelText = this.childAt(2);\n\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    graphic.updateProps(labelLine, {\n        shape: {\n            points: labelLayout.linePoints || labelLayout.linePoints\n        }\n    }, seriesModel, idx);\n\n    graphic.updateProps(labelText, {\n        style: {\n            x: labelLayout.x,\n            y: labelLayout.y\n        }\n    }, seriesModel, idx);\n    labelText.attr({\n        rotation: labelLayout.rotation,\n        origin: [labelLayout.x, labelLayout.y],\n        z2: 10\n    });\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\n    graphic.setLabelStyle(\n        labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel,\n        {\n            labelFetcher: data.hostModel,\n            labelDataIndex: idx,\n            defaultText: data.getName(idx),\n            autoColor: visualColor,\n            useInsideStyle: !!labelLayout.inside\n        },\n        {\n            textAlign: labelLayout.textAlign,\n            textVerticalAlign: labelLayout.verticalAlign\n        }\n    );\n\n    labelText.ignore = labelText.normalIgnore = !labelModel.get('show');\n    labelText.hoverIgnore = !labelHoverModel.get('show');\n\n    labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show');\n    labelLine.hoverIgnore = !labelLineHoverModel.get('show');\n\n    // Default use item visual color\n    labelLine.setStyle({\n        stroke: visualColor\n    });\n    labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle());\n\n    labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();\n};\n\nzrUtil.inherits(FunnelPiece, graphic.Group);\n\n\nvar FunnelView = ChartView.extend({\n\n    type: 'funnel',\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        var oldData = this._data;\n\n        var group = this.group;\n\n        data.diff(oldData)\n            .add(function (idx) {\n                var funnelPiece = new FunnelPiece(data, idx);\n\n                data.setItemGraphicEl(idx, funnelPiece);\n\n                group.add(funnelPiece);\n            })\n            .update(function (newIdx, oldIdx) {\n                var piePiece = oldData.getItemGraphicEl(oldIdx);\n\n                piePiece.updateData(data, newIdx);\n\n                group.add(piePiece);\n                data.setItemGraphicEl(newIdx, piePiece);\n            })\n            .remove(function (idx) {\n                var piePiece = oldData.getItemGraphicEl(idx);\n                group.remove(piePiece);\n            })\n            .execute();\n\n        this._data = data;\n    },\n\n    remove: function () {\n        this.group.removeAll();\n        this._data = null;\n    },\n\n    dispose: function () {}\n});\n\nexport default FunnelView;","/*\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\nimport * as layout from '../../util/layout';\nimport {parsePercent, linearMap} from '../../util/number';\n\nfunction getViewRect(seriesModel, api) {\n    return layout.getLayoutRect(\n        seriesModel.getBoxLayoutParams(), {\n            width: api.getWidth(),\n            height: api.getHeight()\n        }\n    );\n}\n\nfunction getSortedIndices(data, sort) {\n    var valueDim = data.mapDimension('value');\n    var valueArr = data.mapArray(valueDim, function (val) {\n        return val;\n    });\n    var indices = [];\n    var isAscending = sort === 'ascending';\n    for (var i = 0, len = data.count(); i < len; i++) {\n        indices[i] = i;\n    }\n\n    // Add custom sortable function & none sortable opetion by \"options.sort\"\n    if (typeof sort === 'function') {\n        indices.sort(sort);\n    }\n    else if (sort !== 'none') {\n        indices.sort(function (a, b) {\n            return isAscending ? valueArr[a] - valueArr[b] : valueArr[b] - valueArr[a];\n        });\n    }\n    return indices;\n}\n\nfunction labelLayout(data) {\n    data.each(function (idx) {\n        var itemModel = data.getItemModel(idx);\n        var labelModel = itemModel.getModel('label');\n        var labelPosition = labelModel.get('position');\n\n        var labelLineModel = itemModel.getModel('labelLine');\n\n        var layout = data.getItemLayout(idx);\n        var points = layout.points;\n\n        var isLabelInside = labelPosition === 'inner'\n            || labelPosition === 'inside' || labelPosition === 'center'\n            || labelPosition === 'insideLeft' || labelPosition === 'insideRight';\n\n        var textAlign;\n        var textX;\n        var textY;\n        var linePoints;\n\n        if (isLabelInside) {\n            if (labelPosition === 'insideLeft') {\n                textX = (points[0][0] + points[3][0]) / 2 + 5;\n                textY = (points[0][1] + points[3][1]) / 2;\n                textAlign = 'left';\n            }\n            else if (labelPosition === 'insideRight') {\n                textX = (points[1][0] + points[2][0]) / 2 - 5;\n                textY = (points[1][1] + points[2][1]) / 2;\n                textAlign = 'right';\n            }\n            else {\n                textX = (points[0][0] + points[1][0] + points[2][0] + points[3][0]) / 4;\n                textY = (points[0][1] + points[1][1] + points[2][1] + points[3][1]) / 4;\n                textAlign = 'center';\n            }\n            linePoints = [\n                [textX, textY], [textX, textY]\n            ];\n        }\n        else {\n            var x1;\n            var y1;\n            var x2;\n            var labelLineLen = labelLineModel.get('length');\n            if (labelPosition === 'left') {\n                // Left side\n                x1 = (points[3][0] + points[0][0]) / 2;\n                y1 = (points[3][1] + points[0][1]) / 2;\n                x2 = x1 - labelLineLen;\n                textX = x2 - 5;\n                textAlign = 'right';\n            }\n            else if (labelPosition === 'right') {\n                // Right side\n                x1 = (points[1][0] + points[2][0]) / 2;\n                y1 = (points[1][1] + points[2][1]) / 2;\n                x2 = x1 + labelLineLen;\n                textX = x2 + 5;\n                textAlign = 'left';\n            }\n            else if (labelPosition === 'rightTop') {\n                // RightTop side\n                x1 = points[1][0];\n                y1 = points[1][1];\n                x2 = x1 + labelLineLen;\n                textX = x2 + 5;\n                textAlign = 'top';\n            }\n            else if (labelPosition === 'rightBottom') {\n                // RightBottom side\n                x1 = points[2][0];\n                y1 = points[2][1];\n                x2 = x1 + labelLineLen;\n                textX = x2 + 5;\n                textAlign = 'bottom';\n            }\n            else if (labelPosition === 'leftTop') {\n                // LeftTop side\n                x1 = points[0][0];\n                y1 = points[1][1];\n                x2 = x1 - labelLineLen;\n                textX = x2 - 5;\n                textAlign = 'right';\n            }\n            else if (labelPosition === 'leftBottom') {\n                // LeftBottom side\n                x1 = points[3][0];\n                y1 = points[2][1];\n                x2 = x1 - labelLineLen;\n                textX = x2 - 5;\n                textAlign = 'right';\n            }\n            else {\n                // Right side\n                x1 = (points[1][0] + points[2][0]) / 2;\n                y1 = (points[1][1] + points[2][1]) / 2;\n                x2 = x1 + labelLineLen;\n                textX = x2 + 5;\n                textAlign = 'left';\n            }\n            var y2 = y1;\n\n            linePoints = [[x1, y1], [x2, y2]];\n            textY = y2;\n        }\n\n        layout.label = {\n            linePoints: linePoints,\n            x: textX,\n            y: textY,\n            verticalAlign: 'middle',\n            textAlign: textAlign,\n            inside: isLabelInside\n        };\n    });\n}\n\nexport default function (ecModel, api, payload) {\n    ecModel.eachSeriesByType('funnel', function (seriesModel) {\n        var data = seriesModel.getData();\n        var valueDim = data.mapDimension('value');\n        var sort = seriesModel.get('sort');\n        var viewRect = getViewRect(seriesModel, api);\n        var indices = getSortedIndices(data, sort);\n\n        var sizeExtent = [\n            parsePercent(seriesModel.get('minSize'), viewRect.width),\n            parsePercent(seriesModel.get('maxSize'), viewRect.width)\n        ];\n        var dataExtent = data.getDataExtent(valueDim);\n        var min = seriesModel.get('min');\n        var max = seriesModel.get('max');\n        if (min == null) {\n            min = Math.min(dataExtent[0], 0);\n        }\n        if (max == null) {\n            max = dataExtent[1];\n        }\n\n        var funnelAlign = seriesModel.get('funnelAlign');\n        var gap = seriesModel.get('gap');\n        var itemHeight = (viewRect.height - gap * (data.count() - 1)) / data.count();\n\n        var y = viewRect.y;\n\n        var getLinePoints = function (idx, offY) {\n            // End point index is data.count() and we assign it 0\n            var val = data.get(valueDim, idx) || 0;\n            var itemWidth = linearMap(val, [min, max], sizeExtent, true);\n            var x0;\n            switch (funnelAlign) {\n                case 'left':\n                    x0 = viewRect.x;\n                    break;\n                case 'center':\n                    x0 = viewRect.x + (viewRect.width - itemWidth) / 2;\n                    break;\n                case 'right':\n                    x0 = viewRect.x + viewRect.width - itemWidth;\n                    break;\n            }\n            return [\n                [x0, offY],\n                [x0 + itemWidth, offY]\n            ];\n        };\n\n        if (sort === 'ascending') {\n            // From bottom to top\n            itemHeight = -itemHeight;\n            gap = -gap;\n            y += viewRect.height;\n            indices = indices.reverse();\n        }\n\n        for (var i = 0; i < indices.length; i++) {\n            var idx = indices[i];\n            var nextIdx = indices[i + 1];\n\n            var itemModel = data.getItemModel(idx);\n            var height = itemModel.get('itemStyle.height');\n            if (height == null) {\n                height = itemHeight;\n            }\n            else {\n                height = parsePercent(height, viewRect.height);\n                if (sort === 'ascending') {\n                    height = -height;\n                }\n            }\n\n            var start = getLinePoints(idx, y);\n            var end = getLinePoints(nextIdx, y + height);\n\n            y += height + gap;\n\n            data.setItemLayout(idx, {\n                points: start.concat(end.slice().reverse())\n            });\n        }\n\n        labelLayout(data);\n    });\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\n\nimport './funnel/FunnelSeries';\nimport './funnel/FunnelView';\n\nimport dataColor from '../visual/dataColor';\nimport funnelLayout from './funnel/funnelLayout';\nimport dataFilter from '../processor/dataFilter';\n\necharts.registerVisual(dataColor('funnel'));\necharts.registerLayout(funnelLayout);\necharts.registerProcessor(dataFilter('funnel'));","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as modelUtil from '../../util/model';\n\nexport default function (option) {\n    createParallelIfNeeded(option);\n    mergeAxisOptionFromParallel(option);\n}\n\n/**\n * Create a parallel coordinate if not exists.\n * @inner\n */\nfunction createParallelIfNeeded(option) {\n    if (option.parallel) {\n        return;\n    }\n\n    var hasParallelSeries = false;\n\n    zrUtil.each(option.series, function (seriesOpt) {\n        if (seriesOpt && seriesOpt.type === 'parallel') {\n            hasParallelSeries = true;\n        }\n    });\n\n    if (hasParallelSeries) {\n        option.parallel = [{}];\n    }\n}\n\n/**\n * Merge aixs definition from parallel option (if exists) to axis option.\n * @inner\n */\nfunction mergeAxisOptionFromParallel(option) {\n    var axes = modelUtil.normalizeToArray(option.parallelAxis);\n\n    zrUtil.each(axes, function (axisOption) {\n        if (!zrUtil.isObject(axisOption)) {\n            return;\n        }\n\n        var parallelIndex = axisOption.parallelIndex || 0;\n        var parallelOption = modelUtil.normalizeToArray(option.parallel)[parallelIndex];\n\n        if (parallelOption && parallelOption.parallelAxisDefault) {\n            zrUtil.merge(axisOption, parallelOption.parallelAxisDefault, false);\n        }\n    });\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport Axis from '../Axis';\n\n/**\n * @constructor module:echarts/coord/parallel/ParallelAxis\n * @extends {module:echarts/coord/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.<number>} coordExtent\n * @param {string} axisType\n */\nvar ParallelAxis = function (dim, scale, coordExtent, axisType, axisIndex) {\n\n    Axis.call(this, dim, scale, coordExtent);\n\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = axisType || 'value';\n\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.axisIndex = axisIndex;\n};\n\nParallelAxis.prototype = {\n\n    constructor: ParallelAxis,\n\n    /**\n     * Axis model\n     * @param {module:echarts/coord/parallel/AxisModel}\n     */\n    model: null,\n\n    /**\n     * @override\n     */\n    isHorizontal: function () {\n        return this.coordinateSystem.getModel().get('layout') !== 'horizontal';\n    }\n\n};\n\nzrUtil.inherits(ParallelAxis, Axis);\n\nexport default ParallelAxis;","/*\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 * Calculate slider move result.\n * Usage:\n * (1) If both handle0 and handle1 are needed to be moved, set minSpan the same as\n * maxSpan and the same as `Math.abs(handleEnd[1] - handleEnds[0])`.\n * (2) If handle0 is forbidden to cross handle1, set minSpan as `0`.\n *\n * @param {number} delta Move length.\n * @param {Array.<number>} handleEnds handleEnds[0] can be bigger then handleEnds[1].\n *              handleEnds will be modified in this method.\n * @param {Array.<number>} extent handleEnds is restricted by extent.\n *              extent[0] should less or equals than extent[1].\n * @param {number|string} handleIndex Can be 'all', means that both move the two handleEnds.\n * @param {number} [minSpan] The range of dataZoom can not be smaller than that.\n *              If not set, handle0 and cross handle1. If set as a non-negative\n *              number (including `0`), handles will push each other when reaching\n *              the minSpan.\n * @param {number} [maxSpan] The range of dataZoom can not be larger than that.\n * @return {Array.<number>} The input handleEnds.\n */\nexport default function (delta, handleEnds, extent, handleIndex, minSpan, maxSpan) {\n\n    delta = delta || 0;\n\n    var extentSpan = extent[1] - extent[0];\n\n    // Notice maxSpan and minSpan can be null/undefined.\n    if (minSpan != null) {\n        minSpan = restrict(minSpan, [0, extentSpan]);\n    }\n    if (maxSpan != null) {\n        maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0);\n    }\n    if (handleIndex === 'all') {\n        var handleSpan = Math.abs(handleEnds[1] - handleEnds[0]);\n        handleSpan = restrict(handleSpan, [0, extentSpan]);\n        minSpan = maxSpan = restrict(handleSpan, [minSpan, maxSpan]);\n        handleIndex = 0;\n    }\n\n    handleEnds[0] = restrict(handleEnds[0], extent);\n    handleEnds[1] = restrict(handleEnds[1], extent);\n\n    var originalDistSign = getSpanSign(handleEnds, handleIndex);\n\n    handleEnds[handleIndex] += delta;\n\n    // Restrict in extent.\n    var extentMinSpan = minSpan || 0;\n    var realExtent = extent.slice();\n    originalDistSign.sign < 0 ? (realExtent[0] += extentMinSpan) : (realExtent[1] -= extentMinSpan);\n    handleEnds[handleIndex] = restrict(handleEnds[handleIndex], realExtent);\n\n    // Expand span.\n    var currDistSign = getSpanSign(handleEnds, handleIndex);\n    if (minSpan != null && (\n        currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan\n    )) {\n        // If minSpan exists, 'cross' is forbidden.\n        handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan;\n    }\n\n    // Shrink span.\n    var currDistSign = getSpanSign(handleEnds, handleIndex);\n    if (maxSpan != null && currDistSign.span > maxSpan) {\n        handleEnds[1 - handleIndex] = handleEnds[handleIndex] + currDistSign.sign * maxSpan;\n    }\n\n    return handleEnds;\n}\n\nfunction getSpanSign(handleEnds, handleIndex) {\n    var dist = handleEnds[handleIndex] - handleEnds[1 - handleIndex];\n    // If `handleEnds[0] === handleEnds[1]`, always believe that handleEnd[0]\n    // is at left of handleEnds[1] for non-cross case.\n    return {span: Math.abs(dist), sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1};\n}\n\nfunction restrict(value, extend) {\n    return Math.min(\n        extend[1] != null ? extend[1] : Infinity,\n        Math.max(extend[0] != null ? extend[0] : -Infinity, value)\n    );\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Parallel Coordinates\n * <https://en.wikipedia.org/wiki/Parallel_coordinates>\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as matrix from 'zrender/src/core/matrix';\nimport * as layoutUtil from '../../util/layout';\nimport * as axisHelper from '../../coord/axisHelper';\nimport ParallelAxis from './ParallelAxis';\nimport * as graphic from '../../util/graphic';\nimport * as numberUtil from '../../util/number';\nimport sliderMove from '../../component/helper/sliderMove';\n\nvar each = zrUtil.each;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathFloor = Math.floor;\nvar mathCeil = Math.ceil;\nvar round = numberUtil.round;\n\nvar PI = Math.PI;\n\nfunction Parallel(parallelModel, ecModel, api) {\n\n    /**\n     * key: dimension\n     * @type {Object.<string, module:echarts/coord/parallel/Axis>}\n     * @private\n     */\n    this._axesMap = zrUtil.createHashMap();\n\n    /**\n     * key: dimension\n     * value: {position: [], rotation, }\n     * @type {Object.<string, Object>}\n     * @private\n     */\n    this._axesLayout = {};\n\n    /**\n     * Always follow axis order.\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    this.dimensions = parallelModel.dimensions;\n\n    /**\n     * @type {module:zrender/core/BoundingRect}\n     */\n    this._rect;\n\n    /**\n     * @type {module:echarts/coord/parallel/ParallelModel}\n     */\n    this._model = parallelModel;\n\n    this._init(parallelModel, ecModel, api);\n}\n\nParallel.prototype = {\n\n    type: 'parallel',\n\n    constructor: Parallel,\n\n    /**\n     * Initialize cartesian coordinate systems\n     * @private\n     */\n    _init: function (parallelModel, ecModel, api) {\n\n        var dimensions = parallelModel.dimensions;\n        var parallelAxisIndex = parallelModel.parallelAxisIndex;\n\n        each(dimensions, function (dim, idx) {\n\n            var axisIndex = parallelAxisIndex[idx];\n            var axisModel = ecModel.getComponent('parallelAxis', axisIndex);\n\n            var axis = this._axesMap.set(dim, new ParallelAxis(\n                dim,\n                axisHelper.createScaleByModel(axisModel),\n                [0, 0],\n                axisModel.get('type'),\n                axisIndex\n            ));\n\n            var isCategory = axis.type === 'category';\n            axis.onBand = isCategory && axisModel.get('boundaryGap');\n            axis.inverse = axisModel.get('inverse');\n\n            // Injection\n            axisModel.axis = axis;\n            axis.model = axisModel;\n            axis.coordinateSystem = axisModel.coordinateSystem = this;\n\n        }, this);\n    },\n\n    /**\n     * Update axis scale after data processed\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    update: function (ecModel, api) {\n        this._updateAxesFromSeries(this._model, ecModel);\n    },\n\n    /**\n     * @override\n     */\n    containPoint: function (point) {\n        var layoutInfo = this._makeLayoutInfo();\n        var axisBase = layoutInfo.axisBase;\n        var layoutBase = layoutInfo.layoutBase;\n        var pixelDimIndex = layoutInfo.pixelDimIndex;\n        var pAxis = point[1 - pixelDimIndex];\n        var pLayout = point[pixelDimIndex];\n\n        return pAxis >= axisBase\n            && pAxis <= axisBase + layoutInfo.axisLength\n            && pLayout >= layoutBase\n            && pLayout <= layoutBase + layoutInfo.layoutLength;\n    },\n\n    getModel: function () {\n        return this._model;\n    },\n\n    /**\n     * Update properties from series\n     * @private\n     */\n    _updateAxesFromSeries: function (parallelModel, ecModel) {\n        ecModel.eachSeries(function (seriesModel) {\n\n            if (!parallelModel.contains(seriesModel, ecModel)) {\n                return;\n            }\n\n            var data = seriesModel.getData();\n\n            each(this.dimensions, function (dim) {\n                var axis = this._axesMap.get(dim);\n                axis.scale.unionExtentFromData(data, data.mapDimension(dim));\n                axisHelper.niceScaleExtent(axis.scale, axis.model);\n            }, this);\n        }, this);\n    },\n\n    /**\n     * Resize the parallel coordinate system.\n     * @param {module:echarts/coord/parallel/ParallelModel} parallelModel\n     * @param {module:echarts/ExtensionAPI} api\n     */\n    resize: function (parallelModel, api) {\n        this._rect = layoutUtil.getLayoutRect(\n            parallelModel.getBoxLayoutParams(),\n            {\n                width: api.getWidth(),\n                height: api.getHeight()\n            }\n        );\n\n        this._layoutAxes();\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getRect: function () {\n        return this._rect;\n    },\n\n    /**\n     * @private\n     */\n    _makeLayoutInfo: function () {\n        var parallelModel = this._model;\n        var rect = this._rect;\n        var xy = ['x', 'y'];\n        var wh = ['width', 'height'];\n        var layout = parallelModel.get('layout');\n        var pixelDimIndex = layout === 'horizontal' ? 0 : 1;\n        var layoutLength = rect[wh[pixelDimIndex]];\n        var layoutExtent = [0, layoutLength];\n        var axisCount = this.dimensions.length;\n\n        var axisExpandWidth = restrict(parallelModel.get('axisExpandWidth'), layoutExtent);\n        var axisExpandCount = restrict(parallelModel.get('axisExpandCount') || 0, [0, axisCount]);\n        var axisExpandable = parallelModel.get('axisExpandable')\n            && axisCount > 3\n            && axisCount > axisExpandCount\n            && axisExpandCount > 1\n            && axisExpandWidth > 0\n            && layoutLength > 0;\n\n        // `axisExpandWindow` is According to the coordinates of [0, axisExpandLength],\n        // for sake of consider the case that axisCollapseWidth is 0 (when screen is narrow),\n        // where collapsed axes should be overlapped.\n        var axisExpandWindow = parallelModel.get('axisExpandWindow');\n        var winSize;\n        if (!axisExpandWindow) {\n            winSize = restrict(axisExpandWidth * (axisExpandCount - 1), layoutExtent);\n            var axisExpandCenter = parallelModel.get('axisExpandCenter') || mathFloor(axisCount / 2);\n            axisExpandWindow = [axisExpandWidth * axisExpandCenter - winSize / 2];\n            axisExpandWindow[1] = axisExpandWindow[0] + winSize;\n        }\n        else {\n                winSize = restrict(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent);\n                axisExpandWindow[1] = axisExpandWindow[0] + winSize;\n        }\n\n        var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount);\n        // Avoid axisCollapseWidth is too small.\n        axisCollapseWidth < 3 && (axisCollapseWidth = 0);\n\n        // Find the first and last indices > ewin[0] and < ewin[1].\n        var winInnerIndices = [\n            mathFloor(round(axisExpandWindow[0] / axisExpandWidth, 1)) + 1,\n            mathCeil(round(axisExpandWindow[1] / axisExpandWidth, 1)) - 1\n        ];\n\n        // Pos in ec coordinates.\n        var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0];\n\n        return {\n            layout: layout,\n            pixelDimIndex: pixelDimIndex,\n            layoutBase: rect[xy[pixelDimIndex]],\n            layoutLength: layoutLength,\n            axisBase: rect[xy[1 - pixelDimIndex]],\n            axisLength: rect[wh[1 - pixelDimIndex]],\n            axisExpandable: axisExpandable,\n            axisExpandWidth: axisExpandWidth,\n            axisCollapseWidth: axisCollapseWidth,\n            axisExpandWindow: axisExpandWindow,\n            axisCount: axisCount,\n            winInnerIndices: winInnerIndices,\n            axisExpandWindow0Pos: axisExpandWindow0Pos\n        };\n    },\n\n    /**\n     * @private\n     */\n    _layoutAxes: function () {\n        var rect = this._rect;\n        var axes = this._axesMap;\n        var dimensions = this.dimensions;\n        var layoutInfo = this._makeLayoutInfo();\n        var layout = layoutInfo.layout;\n\n        axes.each(function (axis) {\n            var axisExtent = [0, layoutInfo.axisLength];\n            var idx = axis.inverse ? 1 : 0;\n            axis.setExtent(axisExtent[idx], axisExtent[1 - idx]);\n        });\n\n        each(dimensions, function (dim, idx) {\n            var posInfo = (layoutInfo.axisExpandable\n                ? layoutAxisWithExpand : layoutAxisWithoutExpand\n            )(idx, layoutInfo);\n\n            var positionTable = {\n                horizontal: {\n                    x: posInfo.position,\n                    y: layoutInfo.axisLength\n                },\n                vertical: {\n                    x: 0,\n                    y: posInfo.position\n                }\n            };\n            var rotationTable = {\n                horizontal: PI / 2,\n                vertical: 0\n            };\n\n            var position = [\n                positionTable[layout].x + rect.x,\n                positionTable[layout].y + rect.y\n            ];\n\n            var rotation = rotationTable[layout];\n            var transform = matrix.create();\n            matrix.rotate(transform, transform, rotation);\n            matrix.translate(transform, transform, position);\n\n            // TODO\n            // tick等排布信息。\n\n            // TODO\n            // 根据axis order 更新 dimensions顺序。\n\n            this._axesLayout[dim] = {\n                position: position,\n                rotation: rotation,\n                transform: transform,\n                axisNameAvailableWidth: posInfo.axisNameAvailableWidth,\n                axisLabelShow: posInfo.axisLabelShow,\n                nameTruncateMaxWidth: posInfo.nameTruncateMaxWidth,\n                tickDirection: 1,\n                labelDirection: 1\n            };\n        }, this);\n    },\n\n    /**\n     * Get axis by dim.\n     * @param {string} dim\n     * @return {module:echarts/coord/parallel/ParallelAxis} [description]\n     */\n    getAxis: function (dim) {\n        return this._axesMap.get(dim);\n    },\n\n    /**\n     * Convert a dim value of a single item of series data to Point.\n     * @param {*} value\n     * @param {string} dim\n     * @return {Array}\n     */\n    dataToPoint: function (value, dim) {\n        return this.axisCoordToPoint(\n            this._axesMap.get(dim).dataToCoord(value),\n            dim\n        );\n    },\n\n    /**\n     * Travel data for one time, get activeState of each data item.\n     * @param {module:echarts/data/List} data\n     * @param {Functio} cb param: {string} activeState 'active' or 'inactive' or 'normal'\n     *                            {number} dataIndex\n     * @param {number} [start=0] the start dataIndex that travel from.\n     * @param {number} [end=data.count()] the next dataIndex of the last dataIndex will be travel.\n     */\n    eachActiveState: function (data, callback, start, end) {\n        start == null && (start = 0);\n        end == null && (end = data.count());\n\n        var axesMap = this._axesMap;\n        var dimensions = this.dimensions;\n        var dataDimensions = [];\n        var axisModels = [];\n\n        zrUtil.each(dimensions, function (axisDim) {\n            dataDimensions.push(data.mapDimension(axisDim));\n            axisModels.push(axesMap.get(axisDim).model);\n        });\n\n        var hasActiveSet = this.hasAxisBrushed();\n\n        for (var dataIndex = start; dataIndex < end; dataIndex++) {\n            var activeState;\n\n            if (!hasActiveSet) {\n                activeState = 'normal';\n            }\n            else {\n                activeState = 'active';\n                var values = data.getValues(dataDimensions, dataIndex);\n                for (var j = 0, lenj = dimensions.length; j < lenj; j++) {\n                    var state = axisModels[j].getActiveState(values[j]);\n\n                    if (state === 'inactive') {\n                        activeState = 'inactive';\n                        break;\n                    }\n                }\n            }\n\n            callback(activeState, dataIndex);\n        }\n    },\n\n    /**\n     * Whether has any activeSet.\n     * @return {boolean}\n     */\n    hasAxisBrushed: function () {\n        var dimensions = this.dimensions;\n        var axesMap = this._axesMap;\n        var hasActiveSet = false;\n\n        for (var j = 0, lenj = dimensions.length; j < lenj; j++) {\n            if (axesMap.get(dimensions[j]).model.getActiveState() !== 'normal') {\n                hasActiveSet = true;\n            }\n        }\n\n        return hasActiveSet;\n    },\n\n    /**\n     * Convert coords of each axis to Point.\n     *  Return point. For example: [10, 20]\n     * @param {Array.<number>} coords\n     * @param {string} dim\n     * @return {Array.<number>}\n     */\n    axisCoordToPoint: function (coord, dim) {\n        var axisLayout = this._axesLayout[dim];\n        return graphic.applyTransform([coord, 0], axisLayout.transform);\n    },\n\n    /**\n     * Get axis layout.\n     */\n    getAxisLayout: function (dim) {\n        return zrUtil.clone(this._axesLayout[dim]);\n    },\n\n    /**\n     * @param {Array.<number>} point\n     * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}.\n     */\n    getSlidedAxisExpandWindow: function (point) {\n        var layoutInfo = this._makeLayoutInfo();\n        var pixelDimIndex = layoutInfo.pixelDimIndex;\n        var axisExpandWindow = layoutInfo.axisExpandWindow.slice();\n        var winSize = axisExpandWindow[1] - axisExpandWindow[0];\n        var extent = [0, layoutInfo.axisExpandWidth * (layoutInfo.axisCount - 1)];\n\n        // Out of the area of coordinate system.\n        if (!this.containPoint(point)) {\n            return {behavior: 'none', axisExpandWindow: axisExpandWindow};\n        }\n\n        // Conver the point from global to expand coordinates.\n        var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos;\n\n        // For dragging operation convenience, the window should not be\n        // slided when mouse is the center area of the window.\n        var delta;\n        var behavior = 'slide';\n        var axisCollapseWidth = layoutInfo.axisCollapseWidth;\n        var triggerArea = this._model.get('axisExpandSlideTriggerArea');\n        // But consider touch device, jump is necessary.\n        var useJump = triggerArea[0] != null;\n\n        if (axisCollapseWidth) {\n            if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) {\n                behavior = 'jump';\n                delta = pointCoord - winSize * triggerArea[2];\n            }\n            else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) {\n                behavior = 'jump';\n                delta = pointCoord - winSize * (1 - triggerArea[2]);\n            }\n            else {\n                (delta = pointCoord - winSize * triggerArea[1]) >= 0\n                    && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0\n                    && (delta = 0);\n            }\n            delta *= layoutInfo.axisExpandWidth / axisCollapseWidth;\n            delta\n                ? sliderMove(delta, axisExpandWindow, extent, 'all')\n                // Avoid nonsense triger on mousemove.\n                : (behavior = 'none');\n        }\n        // When screen is too narrow, make it visible and slidable, although it is hard to interact.\n        else {\n            var winSize = axisExpandWindow[1] - axisExpandWindow[0];\n            var pos = extent[1] * pointCoord / winSize;\n            axisExpandWindow = [mathMax(0, pos - winSize / 2)];\n            axisExpandWindow[1] = mathMin(extent[1], axisExpandWindow[0] + winSize);\n            axisExpandWindow[0] = axisExpandWindow[1] - winSize;\n        }\n\n        return {\n            axisExpandWindow: axisExpandWindow,\n            behavior: behavior\n        };\n    }\n};\n\nfunction restrict(len, extent) {\n    return mathMin(mathMax(len, extent[0]), extent[1]);\n}\n\nfunction layoutAxisWithoutExpand(axisIndex, layoutInfo) {\n    var step = layoutInfo.layoutLength / (layoutInfo.axisCount - 1);\n    return {\n        position: step * axisIndex,\n        axisNameAvailableWidth: step,\n        axisLabelShow: true\n    };\n}\n\nfunction layoutAxisWithExpand(axisIndex, layoutInfo) {\n    var layoutLength = layoutInfo.layoutLength;\n    var axisExpandWidth = layoutInfo.axisExpandWidth;\n    var axisCount = layoutInfo.axisCount;\n    var axisCollapseWidth = layoutInfo.axisCollapseWidth;\n    var winInnerIndices = layoutInfo.winInnerIndices;\n\n    var position;\n    var axisNameAvailableWidth = axisCollapseWidth;\n    var axisLabelShow = false;\n    var nameTruncateMaxWidth;\n\n    if (axisIndex < winInnerIndices[0]) {\n        position = axisIndex * axisCollapseWidth;\n        nameTruncateMaxWidth = axisCollapseWidth;\n    }\n    else if (axisIndex <= winInnerIndices[1]) {\n        position = layoutInfo.axisExpandWindow0Pos\n            + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0];\n        axisNameAvailableWidth = axisExpandWidth;\n        axisLabelShow = true;\n    }\n    else {\n        position = layoutLength - (axisCount - 1 - axisIndex) * axisCollapseWidth;\n        nameTruncateMaxWidth = axisCollapseWidth;\n    }\n\n    return {\n        position: position,\n        axisNameAvailableWidth: axisNameAvailableWidth,\n        axisLabelShow: axisLabelShow,\n        nameTruncateMaxWidth: nameTruncateMaxWidth\n    };\n}\n\nexport default Parallel;","/*\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 * Parallel coordinate system creater.\n */\n\nimport Parallel from './Parallel';\nimport CoordinateSystem from '../../CoordinateSystem';\n\nfunction create(ecModel, api) {\n    var coordSysList = [];\n\n    ecModel.eachComponent('parallel', function (parallelModel, idx) {\n        var coordSys = new Parallel(parallelModel, ecModel, api);\n\n        coordSys.name = 'parallel_' + idx;\n        coordSys.resize(parallelModel, api);\n\n        parallelModel.coordinateSystem = coordSys;\n        coordSys.model = parallelModel;\n\n        coordSysList.push(coordSys);\n    });\n\n    // Inject the coordinateSystems into seriesModel\n    ecModel.eachSeries(function (seriesModel) {\n        if (seriesModel.get('coordinateSystem') === 'parallel') {\n            var parallelModel = ecModel.queryComponents({\n                mainType: 'parallel',\n                index: seriesModel.get('parallelIndex'),\n                id: seriesModel.get('parallelId')\n            })[0];\n            seriesModel.coordinateSystem = parallelModel.coordinateSystem;\n        }\n    });\n\n    return coordSysList;\n}\n\nCoordinateSystem.register('parallel', {create: create});\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport ComponentModel from '../../model/Component';\nimport makeStyleMapper from '../../model/mixin/makeStyleMapper';\nimport axisModelCreator from '../axisModelCreator';\nimport * as numberUtil from '../../util/number';\nimport axisModelCommonMixin from '../axisModelCommonMixin';\n\nvar AxisModel = ComponentModel.extend({\n\n    type: 'baseParallelAxis',\n\n    /**\n     * @type {module:echarts/coord/parallel/Axis}\n     */\n    axis: null,\n\n    /**\n     * @type {Array.<Array.<number>}\n     * @readOnly\n     */\n    activeIntervals: [],\n\n    /**\n     * @return {Object}\n     */\n    getAreaSelectStyle: function () {\n        return makeStyleMapper(\n            [\n                ['fill', 'color'],\n                ['lineWidth', 'borderWidth'],\n                ['stroke', 'borderColor'],\n                ['width', 'width'],\n                ['opacity', 'opacity']\n            ]\n        )(this.getModel('areaSelectStyle'));\n    },\n\n    /**\n     * The code of this feature is put on AxisModel but not ParallelAxis,\n     * because axisModel can be alive after echarts updating but instance of\n     * ParallelAxis having been disposed. this._activeInterval should be kept\n     * when action dispatched (i.e. legend click).\n     *\n     * @param {Array.<Array<number>>} intervals interval.length === 0\n     *                                          means set all active.\n     * @public\n     */\n    setActiveIntervals: function (intervals) {\n        var activeIntervals = this.activeIntervals = zrUtil.clone(intervals);\n\n        // Normalize\n        if (activeIntervals) {\n            for (var i = activeIntervals.length - 1; i >= 0; i--) {\n                numberUtil.asc(activeIntervals[i]);\n            }\n        }\n    },\n\n    /**\n     * @param {number|string} [value] When attempting to detect 'no activeIntervals set',\n     *                         value can not be input.\n     * @return {string} 'normal': no activeIntervals set,\n     *                  'active',\n     *                  'inactive'.\n     * @public\n     */\n    getActiveState: function (value) {\n        var activeIntervals = this.activeIntervals;\n\n        if (!activeIntervals.length) {\n            return 'normal';\n        }\n\n        if (value == null || isNaN(value)) {\n            return 'inactive';\n        }\n\n        // Simple optimization\n        if (activeIntervals.length === 1) {\n            var interval = activeIntervals[0];\n            if (interval[0] <= value && value <= interval[1]) {\n                return 'active';\n            }\n        }\n        else {\n            for (var i = 0, len = activeIntervals.length; i < len; i++) {\n                if (activeIntervals[i][0] <= value && value <= activeIntervals[i][1]) {\n                    return 'active';\n                }\n            }\n        }\n\n        return 'inactive';\n    }\n\n});\n\nvar defaultOption = {\n\n    type: 'value',\n\n    /**\n     * @type {Array.<number>}\n     */\n    dim: null, // 0, 1, 2, ...\n\n    // parallelIndex: null,\n\n    areaSelectStyle: {\n        width: 20,\n        borderWidth: 1,\n        borderColor: 'rgba(160,197,232)',\n        color: 'rgba(160,197,232)',\n        opacity: 0.3\n    },\n\n    realtime: true, // Whether realtime update view when select.\n\n    z: 10\n};\n\nzrUtil.merge(AxisModel.prototype, axisModelCommonMixin);\n\nfunction getAxisType(axisName, option) {\n    return option.type || (option.data ? 'category' : 'value');\n}\n\naxisModelCreator('parallel', AxisModel, getAxisType, defaultOption);\n\nexport default AxisModel;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport Component from '../../model/Component';\n\nimport './AxisModel';\n\nexport default Component.extend({\n\n    type: 'parallel',\n\n    dependencies: ['parallelAxis'],\n\n    /**\n     * @type {module:echarts/coord/parallel/Parallel}\n     */\n    coordinateSystem: null,\n\n    /**\n     * Each item like: 'dim0', 'dim1', 'dim2', ...\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    dimensions: null,\n\n    /**\n     * Coresponding to dimensions.\n     * @type {Array.<number>}\n     * @readOnly\n     */\n    parallelAxisIndex: null,\n\n    layoutMode: 'box',\n\n    defaultOption: {\n        zlevel: 0,\n        z: 0,\n        left: 80,\n        top: 60,\n        right: 80,\n        bottom: 60,\n        // width: {totalWidth} - left - right,\n        // height: {totalHeight} - top - bottom,\n\n        layout: 'horizontal',      // 'horizontal' or 'vertical'\n\n        // FIXME\n        // naming?\n        axisExpandable: false,\n        axisExpandCenter: null,\n        axisExpandCount: 0,\n        axisExpandWidth: 50,      // FIXME '10%' ?\n        axisExpandRate: 17,\n        axisExpandDebounce: 50,\n        // [out, in, jumpTarget]. In percentage. If use [null, 0.05], null means full.\n        // Do not doc to user until necessary.\n        axisExpandSlideTriggerArea: [-0.15, 0.05, 0.4],\n        axisExpandTriggerOn: 'click', // 'mousemove' or 'click'\n\n        parallelAxisDefault: null\n    },\n\n    /**\n     * @override\n     */\n    init: function () {\n        Component.prototype.init.apply(this, arguments);\n\n        this.mergeOption({});\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function (newOption) {\n        var thisOption = this.option;\n\n        newOption && zrUtil.merge(thisOption, newOption, true);\n\n        this._initDimensions();\n    },\n\n    /**\n     * Whether series or axis is in this coordinate system.\n     * @param {module:echarts/model/Series|module:echarts/coord/parallel/AxisModel} model\n     * @param {module:echarts/model/Global} ecModel\n     */\n    contains: function (model, ecModel) {\n        var parallelIndex = model.get('parallelIndex');\n        return parallelIndex != null\n            && ecModel.getComponent('parallel', parallelIndex) === this;\n    },\n\n    setAxisExpand: function (opt) {\n        zrUtil.each(\n            ['axisExpandable', 'axisExpandCenter', 'axisExpandCount', 'axisExpandWidth', 'axisExpandWindow'],\n            function (name) {\n                if (opt.hasOwnProperty(name)) {\n                    this.option[name] = opt[name];\n                }\n            },\n            this\n        );\n    },\n\n    /**\n     * @private\n     */\n    _initDimensions: function () {\n        var dimensions = this.dimensions = [];\n        var parallelAxisIndex = this.parallelAxisIndex = [];\n\n        var axisModels = zrUtil.filter(this.dependentModels.parallelAxis, function (axisModel) {\n            // Can not use this.contains here, because\n            // initialization has not been completed yet.\n            return (axisModel.get('parallelIndex') || 0) === this.componentIndex;\n        }, this);\n\n        zrUtil.each(axisModels, function (axisModel) {\n            dimensions.push('dim' + axisModel.get('dim'));\n            parallelAxisIndex.push(axisModel.componentIndex);\n        });\n    }\n\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../../echarts';\n\n/**\n * @payload\n * @property {string} parallelAxisId\n * @property {Array.<Array.<number>>} intervals\n */\nvar actionInfo = {\n    type: 'axisAreaSelect',\n    event: 'axisAreaSelected'\n    // update: 'updateVisual'\n};\n\necharts.registerAction(actionInfo, function (payload, ecModel) {\n    ecModel.eachComponent(\n        {mainType: 'parallelAxis', query: payload},\n        function (parallelAxisModel) {\n            parallelAxisModel.axis.model.setActiveIntervals(payload.intervals);\n        }\n    );\n});\n\n/**\n * @payload\n */\necharts.registerAction('parallelAxisExpand', function (payload, ecModel) {\n    ecModel.eachComponent(\n        {mainType: 'parallel', query: payload},\n        function (parallelModel) {\n            parallelModel.setAxisExpand(payload);\n        }\n    );\n\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {__DEV__} from '../../config';\nimport * as zrUtil from 'zrender/src/core/util';\nimport Eventful from 'zrender/src/mixin/Eventful';\nimport * as graphic from '../../util/graphic';\nimport * as interactionMutex from './interactionMutex';\nimport DataDiffer from '../../data/DataDiffer';\n\nvar curry = zrUtil.curry;\nvar each = zrUtil.each;\nvar map = zrUtil.map;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathPow = Math.pow;\n\nvar COVER_Z = 10000;\nvar UNSELECT_THRESHOLD = 6;\nvar MIN_RESIZE_LINE_WIDTH = 6;\nvar MUTEX_RESOURCE_KEY = 'globalPan';\n\nvar DIRECTION_MAP = {\n    w: [0, 0],\n    e: [0, 1],\n    n: [1, 0],\n    s: [1, 1]\n};\nvar CURSOR_MAP = {\n    w: 'ew',\n    e: 'ew',\n    n: 'ns',\n    s: 'ns',\n    ne: 'nesw',\n    sw: 'nesw',\n    nw: 'nwse',\n    se: 'nwse'\n};\nvar DEFAULT_BRUSH_OPT = {\n    brushStyle: {\n        lineWidth: 2,\n        stroke: 'rgba(0,0,0,0.3)',\n        fill: 'rgba(0,0,0,0.1)'\n    },\n    transformable: true,\n    brushMode: 'single',\n    removeOnClick: false\n};\n\nvar baseUID = 0;\n\n/**\n * @alias module:echarts/component/helper/BrushController\n * @constructor\n * @mixin {module:zrender/mixin/Eventful}\n * @event module:echarts/component/helper/BrushController#brush\n *        params:\n *            areas: Array.<Array>, coord relates to container group,\n *                                    If no container specified, to global.\n *            opt {\n *                isEnd: boolean,\n *                removeOnClick: boolean\n *            }\n *\n * @param {module:zrender/zrender~ZRender} zr\n */\nfunction BrushController(zr) {\n\n    if (__DEV__) {\n        zrUtil.assert(zr);\n    }\n\n    Eventful.call(this);\n\n    /**\n     * @type {module:zrender/zrender~ZRender}\n     * @private\n     */\n    this._zr = zr;\n\n    /**\n     * @type {module:zrender/container/Group}\n     * @readOnly\n     */\n    this.group = new graphic.Group();\n\n    /**\n     * Only for drawing (after enabledBrush).\n     *     'line', 'rect', 'polygon' or false\n     *     If passing false/null/undefined, disable brush.\n     *     If passing 'auto', determined by panel.defaultBrushType\n     * @private\n     * @type {string}\n     */\n    this._brushType;\n\n    /**\n     * Only for drawing (after enabledBrush).\n     *\n     * @private\n     * @type {Object}\n     */\n    this._brushOption;\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._panels;\n\n    /**\n     * @private\n     * @type {Array.<nubmer>}\n     */\n    this._track = [];\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._dragging;\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._lastMouseMovePoint = {};\n\n    /**\n     * @private\n     * @type {Array}\n     */\n    this._covers = [];\n\n    /**\n     * @private\n     * @type {moudule:zrender/container/Group}\n     */\n    this._creatingCover;\n\n    /**\n     * `true` means global panel\n     * @private\n     * @type {module:zrender/container/Group|boolean}\n     */\n    this._creatingPanel;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._enableGlobalPan;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    if (__DEV__) {\n        this._mounted;\n    }\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this._uid = 'brushController_' + baseUID++;\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._handlers = {};\n    each(mouseHandlers, function (handler, eventName) {\n        this._handlers[eventName] = zrUtil.bind(handler, this);\n    }, this);\n}\n\nBrushController.prototype = {\n\n    constructor: BrushController,\n\n    /**\n     * If set to null/undefined/false, select disabled.\n     * @param {Object} brushOption\n     * @param {string|boolean} brushOption.brushType 'line', 'rect', 'polygon' or false\n     *                          If passing false/null/undefined, disable brush.\n     *                          If passing 'auto', determined by panel.defaultBrushType.\n     *                              ('auto' can not be used in global panel)\n     * @param {number} [brushOption.brushMode='single'] 'single' or 'multiple'\n     * @param {boolean} [brushOption.transformable=true]\n     * @param {boolean} [brushOption.removeOnClick=false]\n     * @param {Object} [brushOption.brushStyle]\n     * @param {number} [brushOption.brushStyle.width]\n     * @param {number} [brushOption.brushStyle.lineWidth]\n     * @param {string} [brushOption.brushStyle.stroke]\n     * @param {string} [brushOption.brushStyle.fill]\n     * @param {number} [brushOption.z]\n     */\n    enableBrush: function (brushOption) {\n        if (__DEV__) {\n            zrUtil.assert(this._mounted);\n        }\n\n        this._brushType && doDisableBrush(this);\n        brushOption.brushType && doEnableBrush(this, brushOption);\n\n        return this;\n    },\n\n    /**\n     * @param {Array.<Object>} panelOpts If not pass, it is global brush.\n     *        Each items: {\n     *            panelId, // mandatory.\n     *            clipPath, // mandatory. function.\n     *            isTargetByCursor, // mandatory. function.\n     *            defaultBrushType, // optional, only used when brushType is 'auto'.\n     *            getLinearBrushOtherExtent, // optional. function.\n     *        }\n     */\n    setPanels: function (panelOpts) {\n        if (panelOpts && panelOpts.length) {\n            var panels = this._panels = {};\n            zrUtil.each(panelOpts, function (panelOpts) {\n                panels[panelOpts.panelId] = zrUtil.clone(panelOpts);\n            });\n        }\n        else {\n            this._panels = null;\n        }\n        return this;\n    },\n\n    /**\n     * @param {Object} [opt]\n     * @return {boolean} [opt.enableGlobalPan=false]\n     */\n    mount: function (opt) {\n        opt = opt || {};\n\n        if (__DEV__) {\n            this._mounted = true; // should be at first.\n        }\n\n        this._enableGlobalPan = opt.enableGlobalPan;\n\n        var thisGroup = this.group;\n        this._zr.add(thisGroup);\n\n        thisGroup.attr({\n            position: opt.position || [0, 0],\n            rotation: opt.rotation || 0,\n            scale: opt.scale || [1, 1]\n        });\n        this._transform = thisGroup.getLocalTransform();\n\n        return this;\n    },\n\n    eachCover: function (cb, context) {\n        each(this._covers, cb, context);\n    },\n\n    /**\n     * Update covers.\n     * @param {Array.<Object>} brushOptionList Like:\n     *        [\n     *            {id: 'xx', brushType: 'line', range: [23, 44], brushStyle, transformable},\n     *            {id: 'yy', brushType: 'rect', range: [[23, 44], [23, 54]]},\n     *            ...\n     *        ]\n     *        `brushType` is required in each cover info. (can not be 'auto')\n     *        `id` is not mandatory.\n     *        `brushStyle`, `transformable` is not mandatory, use DEFAULT_BRUSH_OPT by default.\n     *        If brushOptionList is null/undefined, all covers removed.\n     */\n    updateCovers: function (brushOptionList) {\n        if (__DEV__) {\n            zrUtil.assert(this._mounted);\n        }\n\n        brushOptionList = zrUtil.map(brushOptionList, function (brushOption) {\n            return zrUtil.merge(zrUtil.clone(DEFAULT_BRUSH_OPT), brushOption, true);\n        });\n\n        var tmpIdPrefix = '\\0-brush-index-';\n        var oldCovers = this._covers;\n        var newCovers = this._covers = [];\n        var controller = this;\n        var creatingCover = this._creatingCover;\n\n        (new DataDiffer(oldCovers, brushOptionList, oldGetKey, getKey))\n            .add(addOrUpdate)\n            .update(addOrUpdate)\n            .remove(remove)\n            .execute();\n\n        return this;\n\n        function getKey(brushOption, index) {\n            return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index)\n                + '-' + brushOption.brushType;\n        }\n\n        function oldGetKey(cover, index) {\n            return getKey(cover.__brushOption, index);\n        }\n\n        function addOrUpdate(newIndex, oldIndex) {\n            var newBrushOption = brushOptionList[newIndex];\n            // Consider setOption in event listener of brushSelect,\n            // where updating cover when creating should be forbiden.\n            if (oldIndex != null && oldCovers[oldIndex] === creatingCover) {\n                newCovers[newIndex] = oldCovers[oldIndex];\n            }\n            else {\n                var cover = newCovers[newIndex] = oldIndex != null\n                    ? (\n                        oldCovers[oldIndex].__brushOption = newBrushOption,\n                        oldCovers[oldIndex]\n                    )\n                    : endCreating(controller, createCover(controller, newBrushOption));\n                updateCoverAfterCreation(controller, cover);\n            }\n        }\n\n        function remove(oldIndex) {\n            if (oldCovers[oldIndex] !== creatingCover) {\n                controller.group.remove(oldCovers[oldIndex]);\n            }\n        }\n    },\n\n    unmount: function () {\n        if (__DEV__) {\n            if (!this._mounted) {\n                return;\n            }\n        }\n\n        this.enableBrush(false);\n\n        // container may 'removeAll' outside.\n        clearCovers(this);\n        this._zr.remove(this.group);\n\n        if (__DEV__) {\n            this._mounted = false; // should be at last.\n        }\n\n        return this;\n    },\n\n    dispose: function () {\n        this.unmount();\n        this.off();\n    }\n};\n\nzrUtil.mixin(BrushController, Eventful);\n\nfunction doEnableBrush(controller, brushOption) {\n    var zr = controller._zr;\n\n    // Consider roam, which takes globalPan too.\n    if (!controller._enableGlobalPan) {\n        interactionMutex.take(zr, MUTEX_RESOURCE_KEY, controller._uid);\n    }\n\n    each(controller._handlers, function (handler, eventName) {\n        zr.on(eventName, handler);\n    });\n\n    controller._brushType = brushOption.brushType;\n    controller._brushOption = zrUtil.merge(zrUtil.clone(DEFAULT_BRUSH_OPT), brushOption, true);\n}\n\nfunction doDisableBrush(controller) {\n    var zr = controller._zr;\n\n    interactionMutex.release(zr, MUTEX_RESOURCE_KEY, controller._uid);\n\n    each(controller._handlers, function (handler, eventName) {\n        zr.off(eventName, handler);\n    });\n\n    controller._brushType = controller._brushOption = null;\n}\n\nfunction createCover(controller, brushOption) {\n    var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption);\n    cover.__brushOption = brushOption;\n    updateZ(cover, brushOption);\n    controller.group.add(cover);\n    return cover;\n}\n\nfunction endCreating(controller, creatingCover) {\n    var coverRenderer = getCoverRenderer(creatingCover);\n    if (coverRenderer.endCreating) {\n        coverRenderer.endCreating(controller, creatingCover);\n        updateZ(creatingCover, creatingCover.__brushOption);\n    }\n    return creatingCover;\n}\n\nfunction updateCoverShape(controller, cover) {\n    var brushOption = cover.__brushOption;\n    getCoverRenderer(cover).updateCoverShape(\n        controller, cover, brushOption.range, brushOption\n    );\n}\n\nfunction updateZ(cover, brushOption) {\n    var z = brushOption.z;\n    z == null && (z = COVER_Z);\n    cover.traverse(function (el) {\n        el.z = z;\n        el.z2 = z; // Consider in given container.\n    });\n}\n\nfunction updateCoverAfterCreation(controller, cover) {\n    getCoverRenderer(cover).updateCommon(controller, cover);\n    updateCoverShape(controller, cover);\n}\n\nfunction getCoverRenderer(cover) {\n    return coverRenderers[cover.__brushOption.brushType];\n}\n\n// return target panel or `true` (means global panel)\nfunction getPanelByPoint(controller, e, localCursorPoint) {\n    var panels = controller._panels;\n    if (!panels) {\n        return true; // Global panel\n    }\n    var panel;\n    var transform = controller._transform;\n    each(panels, function (pn) {\n        pn.isTargetByCursor(e, localCursorPoint, transform) && (panel = pn);\n    });\n    return panel;\n}\n\n// Return a panel or true\nfunction getPanelByCover(controller, cover) {\n    var panels = controller._panels;\n    if (!panels) {\n        return true; // Global panel\n    }\n    var panelId = cover.__brushOption.panelId;\n    // User may give cover without coord sys info,\n    // which is then treated as global panel.\n    return panelId != null ? panels[panelId] : true;\n}\n\nfunction clearCovers(controller) {\n    var covers = controller._covers;\n    var originalLength = covers.length;\n    each(covers, function (cover) {\n        controller.group.remove(cover);\n    }, controller);\n    covers.length = 0;\n\n    return !!originalLength;\n}\n\nfunction trigger(controller, opt) {\n    var areas = map(controller._covers, function (cover) {\n        var brushOption = cover.__brushOption;\n        var range = zrUtil.clone(brushOption.range);\n        return {\n            brushType: brushOption.brushType,\n            panelId: brushOption.panelId,\n            range: range\n        };\n    });\n\n    controller.trigger('brush', areas, {\n        isEnd: !!opt.isEnd,\n        removeOnClick: !!opt.removeOnClick\n    });\n}\n\nfunction shouldShowCover(controller) {\n    var track = controller._track;\n\n    if (!track.length) {\n        return false;\n    }\n\n    var p2 = track[track.length - 1];\n    var p1 = track[0];\n    var dx = p2[0] - p1[0];\n    var dy = p2[1] - p1[1];\n    var dist = mathPow(dx * dx + dy * dy, 0.5);\n\n    return dist > UNSELECT_THRESHOLD;\n}\n\nfunction getTrackEnds(track) {\n    var tail = track.length - 1;\n    tail < 0 && (tail = 0);\n    return [track[0], track[tail]];\n}\n\nfunction createBaseRectCover(doDrift, controller, brushOption, edgeNames) {\n    var cover = new graphic.Group();\n\n    cover.add(new graphic.Rect({\n        name: 'main',\n        style: makeStyle(brushOption),\n        silent: true,\n        draggable: true,\n        cursor: 'move',\n        drift: curry(doDrift, controller, cover, 'nswe'),\n        ondragend: curry(trigger, controller, {isEnd: true})\n    }));\n\n    each(\n        edgeNames,\n        function (name) {\n            cover.add(new graphic.Rect({\n                name: name,\n                style: {opacity: 0},\n                draggable: true,\n                silent: true,\n                invisible: true,\n                drift: curry(doDrift, controller, cover, name),\n                ondragend: curry(trigger, controller, {isEnd: true})\n            }));\n        }\n    );\n\n    return cover;\n}\n\nfunction updateBaseRect(controller, cover, localRange, brushOption) {\n    var lineWidth = brushOption.brushStyle.lineWidth || 0;\n    var handleSize = mathMax(lineWidth, MIN_RESIZE_LINE_WIDTH);\n    var x = localRange[0][0];\n    var y = localRange[1][0];\n    var xa = x - lineWidth / 2;\n    var ya = y - lineWidth / 2;\n    var x2 = localRange[0][1];\n    var y2 = localRange[1][1];\n    var x2a = x2 - handleSize + lineWidth / 2;\n    var y2a = y2 - handleSize + lineWidth / 2;\n    var width = x2 - x;\n    var height = y2 - y;\n    var widtha = width + lineWidth;\n    var heighta = height + lineWidth;\n\n    updateRectShape(controller, cover, 'main', x, y, width, height);\n\n    if (brushOption.transformable) {\n        updateRectShape(controller, cover, 'w', xa, ya, handleSize, heighta);\n        updateRectShape(controller, cover, 'e', x2a, ya, handleSize, heighta);\n        updateRectShape(controller, cover, 'n', xa, ya, widtha, handleSize);\n        updateRectShape(controller, cover, 's', xa, y2a, widtha, handleSize);\n\n        updateRectShape(controller, cover, 'nw', xa, ya, handleSize, handleSize);\n        updateRectShape(controller, cover, 'ne', x2a, ya, handleSize, handleSize);\n        updateRectShape(controller, cover, 'sw', xa, y2a, handleSize, handleSize);\n        updateRectShape(controller, cover, 'se', x2a, y2a, handleSize, handleSize);\n    }\n}\n\nfunction updateCommon(controller, cover) {\n    var brushOption = cover.__brushOption;\n    var transformable = brushOption.transformable;\n\n    var mainEl = cover.childAt(0);\n    mainEl.useStyle(makeStyle(brushOption));\n    mainEl.attr({\n        silent: !transformable,\n        cursor: transformable ? 'move' : 'default'\n    });\n\n    each(\n        ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw'],\n        function (name) {\n            var el = cover.childOfName(name);\n            var globalDir = getGlobalDirection(controller, name);\n\n            el && el.attr({\n                silent: !transformable,\n                invisible: !transformable,\n                cursor: transformable ? CURSOR_MAP[globalDir] + '-resize' : null\n            });\n        }\n    );\n}\n\nfunction updateRectShape(controller, cover, name, x, y, w, h) {\n    var el = cover.childOfName(name);\n    el && el.setShape(pointsToRect(\n        clipByPanel(controller, cover, [[x, y], [x + w, y + h]])\n    ));\n}\n\nfunction makeStyle(brushOption) {\n    return zrUtil.defaults({strokeNoScale: true}, brushOption.brushStyle);\n}\n\nfunction formatRectRange(x, y, x2, y2) {\n    var min = [mathMin(x, x2), mathMin(y, y2)];\n    var max = [mathMax(x, x2), mathMax(y, y2)];\n\n    return [\n        [min[0], max[0]], // x range\n        [min[1], max[1]] // y range\n    ];\n}\n\nfunction getTransform(controller) {\n    return graphic.getTransform(controller.group);\n}\n\nfunction getGlobalDirection(controller, localDirection) {\n    if (localDirection.length > 1) {\n        localDirection = localDirection.split('');\n        var globalDir = [\n            getGlobalDirection(controller, localDirection[0]),\n            getGlobalDirection(controller, localDirection[1])\n        ];\n        (globalDir[0] === 'e' || globalDir[0] === 'w') && globalDir.reverse();\n        return globalDir.join('');\n    }\n    else {\n        var map = {w: 'left', e: 'right', n: 'top', s: 'bottom'};\n        var inverseMap = {left: 'w', right: 'e', top: 'n', bottom: 's'};\n        var globalDir = graphic.transformDirection(\n            map[localDirection], getTransform(controller)\n        );\n        return inverseMap[globalDir];\n    }\n}\n\nfunction driftRect(toRectRange, fromRectRange, controller, cover, name, dx, dy, e) {\n    var brushOption = cover.__brushOption;\n    var rectRange = toRectRange(brushOption.range);\n    var localDelta = toLocalDelta(controller, dx, dy);\n\n    each(name.split(''), function (namePart) {\n        var ind = DIRECTION_MAP[namePart];\n        rectRange[ind[0]][ind[1]] += localDelta[ind[0]];\n    });\n\n    brushOption.range = fromRectRange(formatRectRange(\n        rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1]\n    ));\n\n    updateCoverAfterCreation(controller, cover);\n    trigger(controller, {isEnd: false});\n}\n\nfunction driftPolygon(controller, cover, dx, dy, e) {\n    var range = cover.__brushOption.range;\n    var localDelta = toLocalDelta(controller, dx, dy);\n\n    each(range, function (point) {\n        point[0] += localDelta[0];\n        point[1] += localDelta[1];\n    });\n\n    updateCoverAfterCreation(controller, cover);\n    trigger(controller, {isEnd: false});\n}\n\nfunction toLocalDelta(controller, dx, dy) {\n    var thisGroup = controller.group;\n    var localD = thisGroup.transformCoordToLocal(dx, dy);\n    var localZero = thisGroup.transformCoordToLocal(0, 0);\n\n    return [localD[0] - localZero[0], localD[1] - localZero[1]];\n}\n\nfunction clipByPanel(controller, cover, data) {\n    var panel = getPanelByCover(controller, cover);\n\n    return (panel && panel !== true)\n        ? panel.clipPath(data, controller._transform)\n        : zrUtil.clone(data);\n}\n\nfunction pointsToRect(points) {\n    var xmin = mathMin(points[0][0], points[1][0]);\n    var ymin = mathMin(points[0][1], points[1][1]);\n    var xmax = mathMax(points[0][0], points[1][0]);\n    var ymax = mathMax(points[0][1], points[1][1]);\n\n    return {\n        x: xmin,\n        y: ymin,\n        width: xmax - xmin,\n        height: ymax - ymin\n    };\n}\n\nfunction resetCursor(controller, e, localCursorPoint) {\n    // Check active\n    if (!controller._brushType) {\n        return;\n    }\n\n    var zr = controller._zr;\n    var covers = controller._covers;\n    var currPanel = getPanelByPoint(controller, e, localCursorPoint);\n\n    // Check whether in covers.\n    if (!controller._dragging) {\n        for (var i = 0; i < covers.length; i++) {\n            var brushOption = covers[i].__brushOption;\n            if (currPanel\n                && (currPanel === true || brushOption.panelId === currPanel.panelId)\n                && coverRenderers[brushOption.brushType].contain(\n                    covers[i], localCursorPoint[0], localCursorPoint[1]\n                )\n            ) {\n                // Use cursor style set on cover.\n                return;\n            }\n        }\n    }\n\n    currPanel && zr.setCursorStyle('crosshair');\n}\n\nfunction preventDefault(e) {\n    var rawE = e.event;\n    rawE.preventDefault && rawE.preventDefault();\n}\n\nfunction mainShapeContain(cover, x, y) {\n    return cover.childOfName('main').contain(x, y);\n}\n\nfunction updateCoverByMouse(controller, e, localCursorPoint, isEnd) {\n    var creatingCover = controller._creatingCover;\n    var panel = controller._creatingPanel;\n    var thisBrushOption = controller._brushOption;\n    var eventParams;\n\n    controller._track.push(localCursorPoint.slice());\n\n    if (shouldShowCover(controller) || creatingCover) {\n\n        if (panel && !creatingCover) {\n            thisBrushOption.brushMode === 'single' && clearCovers(controller);\n            var brushOption = zrUtil.clone(thisBrushOption);\n            brushOption.brushType = determineBrushType(brushOption.brushType, panel);\n            brushOption.panelId = panel === true ? null : panel.panelId;\n            creatingCover = controller._creatingCover = createCover(controller, brushOption);\n            controller._covers.push(creatingCover);\n        }\n\n        if (creatingCover) {\n            var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)];\n            var coverBrushOption = creatingCover.__brushOption;\n\n            coverBrushOption.range = coverRenderer.getCreatingRange(\n                clipByPanel(controller, creatingCover, controller._track)\n            );\n\n            if (isEnd) {\n                endCreating(controller, creatingCover);\n                coverRenderer.updateCommon(controller, creatingCover);\n            }\n\n            updateCoverShape(controller, creatingCover);\n\n            eventParams = {isEnd: isEnd};\n        }\n    }\n    else if (\n        isEnd\n        && thisBrushOption.brushMode === 'single'\n        && thisBrushOption.removeOnClick\n    ) {\n        // Help user to remove covers easily, only by a tiny drag, in 'single' mode.\n        // But a single click do not clear covers, because user may have casual\n        // clicks (for example, click on other component and do not expect covers\n        // disappear).\n        // Only some cover removed, trigger action, but not every click trigger action.\n        if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) {\n            eventParams = {isEnd: isEnd, removeOnClick: true};\n        }\n    }\n\n    return eventParams;\n}\n\nfunction determineBrushType(brushType, panel) {\n    if (brushType === 'auto') {\n        if (__DEV__) {\n            zrUtil.assert(\n                panel && panel.defaultBrushType,\n                'MUST have defaultBrushType when brushType is \"atuo\"'\n            );\n        }\n        return panel.defaultBrushType;\n    }\n    return brushType;\n}\n\nvar mouseHandlers = {\n\n    mousedown: function (e) {\n        if (this._dragging) {\n            // In case some browser do not support globalOut,\n            // and release mose out side the browser.\n            handleDragEnd(this, e);\n        }\n        else if (!e.target || !e.target.draggable) {\n\n            preventDefault(e);\n\n            var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\n\n            this._creatingCover = null;\n            var panel = this._creatingPanel = getPanelByPoint(this, e, localCursorPoint);\n\n            if (panel) {\n                this._dragging = true;\n                this._track = [localCursorPoint.slice()];\n            }\n        }\n    },\n\n    mousemove: function (e) {\n        var lastPoint = this._lastMouseMovePoint;\n        lastPoint.x = e.offsetX;\n        lastPoint.y = e.offsetY;\n\n        var localCursorPoint = this.group.transformCoordToLocal(lastPoint.x, lastPoint.y);\n\n        resetCursor(this, e, localCursorPoint);\n\n        if (this._dragging) {\n\n            preventDefault(e);\n\n            var eventParams = updateCoverByMouse(this, e, localCursorPoint, false);\n\n            eventParams && trigger(this, eventParams);\n        }\n    },\n\n    mouseup: function (e) {\n        handleDragEnd(this, e);\n    },\n\n    globalout: function (e) {\n        handleDragEnd(this, e, true);\n    }\n};\n\nfunction handleDragEnd(controller, e, isGlobalOut) {\n    if (controller._dragging) {\n\n        // Just be worried about bring some side effect to the world\n        // out of echarts, we do not `preventDefault` for globalout.\n        !isGlobalOut && preventDefault(e);\n\n        var pointerX = e.offsetX;\n        var pointerY = e.offsetY;\n        var lastPoint = controller._lastMouseMovePoint;\n        if (isGlobalOut) {\n            pointerX = lastPoint.x;\n            pointerY = lastPoint.y;\n        }\n\n        var localCursorPoint = controller.group.transformCoordToLocal(pointerX, pointerY);\n        // FIXME\n        // Here `e` is used only in `onIrrelevantElement` finally. And it's OK\n        // that pass the `e` of `globalout` to `onIrrelevantElement`. But it is\n        // not a good design of these interfaces. However, we do not refactor\n        // these code now because the implementation of `onIrrelevantElement`\n        // need to be discussed and probably be changed in future, becuase it\n        // slows down the performance of zrender in some cases.\n        var eventParams = updateCoverByMouse(controller, e, localCursorPoint, true);\n\n        controller._dragging = false;\n        controller._track = [];\n        controller._creatingCover = null;\n\n        // trigger event shoule be at final, after procedure will be nested.\n        eventParams && trigger(controller, eventParams);\n    }\n}\n\n/**\n * key: brushType\n * @type {Object}\n */\nvar coverRenderers = {\n\n    lineX: getLineRenderer(0),\n\n    lineY: getLineRenderer(1),\n\n    rect: {\n        createCover: function (controller, brushOption) {\n            return createBaseRectCover(\n                curry(\n                    driftRect,\n                    function (range) {\n                        return range;\n                    },\n                    function (range) {\n                        return range;\n                    }\n                ),\n                controller,\n                brushOption,\n                ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw']\n            );\n        },\n        getCreatingRange: function (localTrack) {\n            var ends = getTrackEnds(localTrack);\n            return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]);\n        },\n        updateCoverShape: function (controller, cover, localRange, brushOption) {\n            updateBaseRect(controller, cover, localRange, brushOption);\n        },\n        updateCommon: updateCommon,\n        contain: mainShapeContain\n    },\n\n    polygon: {\n        createCover: function (controller, brushOption) {\n            var cover = new graphic.Group();\n\n            // Do not use graphic.Polygon because graphic.Polyline do not close the\n            // border of the shape when drawing, which is a better experience for user.\n            cover.add(new graphic.Polyline({\n                name: 'main',\n                style: makeStyle(brushOption),\n                silent: true\n            }));\n\n            return cover;\n        },\n        getCreatingRange: function (localTrack) {\n            return localTrack;\n        },\n        endCreating: function (controller, cover) {\n            cover.remove(cover.childAt(0));\n            // Use graphic.Polygon close the shape.\n            cover.add(new graphic.Polygon({\n                name: 'main',\n                draggable: true,\n                drift: curry(driftPolygon, controller, cover),\n                ondragend: curry(trigger, controller, {isEnd: true})\n            }));\n        },\n        updateCoverShape: function (controller, cover, localRange, brushOption) {\n            cover.childAt(0).setShape({\n                points: clipByPanel(controller, cover, localRange)\n            });\n        },\n        updateCommon: updateCommon,\n        contain: mainShapeContain\n    }\n};\n\nfunction getLineRenderer(xyIndex) {\n    return {\n        createCover: function (controller, brushOption) {\n            return createBaseRectCover(\n                curry(\n                    driftRect,\n                    function (range) {\n                        var rectRange = [range, [0, 100]];\n                        xyIndex && rectRange.reverse();\n                        return rectRange;\n                    },\n                    function (rectRange) {\n                        return rectRange[xyIndex];\n                    }\n                ),\n                controller,\n                brushOption,\n                [['w', 'e'], ['n', 's']][xyIndex]\n            );\n        },\n        getCreatingRange: function (localTrack) {\n            var ends = getTrackEnds(localTrack);\n            var min = mathMin(ends[0][xyIndex], ends[1][xyIndex]);\n            var max = mathMax(ends[0][xyIndex], ends[1][xyIndex]);\n\n            return [min, max];\n        },\n        updateCoverShape: function (controller, cover, localRange, brushOption) {\n            var otherExtent;\n            // If brushWidth not specified, fit the panel.\n            var panel = getPanelByCover(controller, cover);\n            if (panel !== true && panel.getLinearBrushOtherExtent) {\n                otherExtent = panel.getLinearBrushOtherExtent(\n                    xyIndex, controller._transform\n                );\n            }\n            else {\n                var zr = controller._zr;\n                otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]];\n            }\n            var rectRange = [localRange, otherExtent];\n            xyIndex && rectRange.reverse();\n\n            updateBaseRect(controller, cover, rectRange, brushOption);\n        },\n        updateCommon: updateCommon,\n        contain: mainShapeContain\n    };\n}\n\nexport default BrushController;","/*\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\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport {onIrrelevantElement} from './cursorHelper';\nimport * as graphicUtil from '../../util/graphic';\n\nexport function makeRectPanelClipPath(rect) {\n    rect = normalizeRect(rect);\n    return function (localPoints, transform) {\n        return graphicUtil.clipPointsByRect(localPoints, rect);\n    };\n}\n\nexport function makeLinearBrushOtherExtent(rect, specifiedXYIndex) {\n    rect = normalizeRect(rect);\n    return function (xyIndex) {\n        var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex;\n        var brushWidth = idx ? rect.width : rect.height;\n        var base = idx ? rect.x : rect.y;\n        return [base, base + (brushWidth || 0)];\n    };\n}\n\nexport function makeRectIsTargetByCursor(rect, api, targetModel) {\n    rect = normalizeRect(rect);\n    return function (e, localCursorPoint, transform) {\n        return rect.contain(localCursorPoint[0], localCursorPoint[1])\n            && !onIrrelevantElement(e, api, targetModel);\n    };\n}\n\n// Consider width/height is negative.\nfunction normalizeRect(rect) {\n    return BoundingRect.create(rect);\n}\n\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport AxisBuilder from './AxisBuilder';\nimport BrushController from '../helper/BrushController';\nimport * as brushHelper from '../helper/brushHelper';\nimport * as graphic from '../../util/graphic';\n\nvar elementList = ['axisLine', 'axisTickLabel', 'axisName'];\n\nvar AxisView = echarts.extendComponentView({\n\n    type: 'parallelAxis',\n\n    /**\n     * @override\n     */\n    init: function (ecModel, api) {\n        AxisView.superApply(this, 'init', arguments);\n\n        /**\n         * @type {module:echarts/component/helper/BrushController}\n         */\n        (this._brushController = new BrushController(api.getZr()))\n            .on('brush', zrUtil.bind(this._onBrush, this));\n    },\n\n    /**\n     * @override\n     */\n    render: function (axisModel, ecModel, api, payload) {\n        if (fromAxisAreaSelect(axisModel, ecModel, payload)) {\n            return;\n        }\n\n        this.axisModel = axisModel;\n        this.api = api;\n\n        this.group.removeAll();\n\n        var oldAxisGroup = this._axisGroup;\n        this._axisGroup = new graphic.Group();\n        this.group.add(this._axisGroup);\n\n        if (!axisModel.get('show')) {\n            return;\n        }\n\n        var coordSysModel = getCoordSysModel(axisModel, ecModel);\n        var coordSys = coordSysModel.coordinateSystem;\n\n        var areaSelectStyle = axisModel.getAreaSelectStyle();\n        var areaWidth = areaSelectStyle.width;\n\n        var dim = axisModel.axis.dim;\n        var axisLayout = coordSys.getAxisLayout(dim);\n\n        var builderOpt = zrUtil.extend(\n            {strokeContainThreshold: areaWidth},\n            axisLayout\n        );\n\n        var axisBuilder = new AxisBuilder(axisModel, builderOpt);\n\n        zrUtil.each(elementList, axisBuilder.add, axisBuilder);\n\n        this._axisGroup.add(axisBuilder.getGroup());\n\n        this._refreshBrushController(\n            builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api\n        );\n\n        var animationModel = (payload && payload.animation === false) ? null : axisModel;\n        graphic.groupTransition(oldAxisGroup, this._axisGroup, animationModel);\n    },\n\n    // /**\n    //  * @override\n    //  */\n    // updateVisual: function (axisModel, ecModel, api, payload) {\n    //     this._brushController && this._brushController\n    //         .updateCovers(getCoverInfoList(axisModel));\n    // },\n\n    _refreshBrushController: function (\n        builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api\n    ) {\n        // After filtering, axis may change, select area needs to be update.\n        var extent = axisModel.axis.getExtent();\n        var extentLen = extent[1] - extent[0];\n        var extra = Math.min(30, Math.abs(extentLen) * 0.1); // Arbitrary value.\n\n        // width/height might be negative, which will be\n        // normalized in BoundingRect.\n        var rect = graphic.BoundingRect.create({\n            x: extent[0],\n            y: -areaWidth / 2,\n            width: extentLen,\n            height: areaWidth\n        });\n        rect.x -= extra;\n        rect.width += 2 * extra;\n\n        this._brushController\n            .mount({\n                enableGlobalPan: true,\n                rotation: builderOpt.rotation,\n                position: builderOpt.position\n            })\n            .setPanels([{\n                panelId: 'pl',\n                clipPath: brushHelper.makeRectPanelClipPath(rect),\n                isTargetByCursor: brushHelper.makeRectIsTargetByCursor(rect, api, coordSysModel),\n                getLinearBrushOtherExtent: brushHelper.makeLinearBrushOtherExtent(rect, 0)\n            }])\n            .enableBrush({\n                brushType: 'lineX',\n                brushStyle: areaSelectStyle,\n                removeOnClick: true\n            })\n            .updateCovers(getCoverInfoList(axisModel));\n    },\n\n    _onBrush: function (coverInfoList, opt) {\n        // Do not cache these object, because the mey be changed.\n        var axisModel = this.axisModel;\n        var axis = axisModel.axis;\n        var intervals = zrUtil.map(coverInfoList, function (coverInfo) {\n            return [\n                axis.coordToData(coverInfo.range[0], true),\n                axis.coordToData(coverInfo.range[1], true)\n            ];\n        });\n\n        // If realtime is true, action is not dispatched on drag end, because\n        // the drag end emits the same params with the last drag move event,\n        // and may have some delay when using touch pad.\n        if (!axisModel.option.realtime === opt.isEnd || opt.removeOnClick) { // jshint ignore:line\n            this.api.dispatchAction({\n                type: 'axisAreaSelect',\n                parallelAxisId: axisModel.id,\n                intervals: intervals\n            });\n        }\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        this._brushController.dispose();\n    }\n});\n\nfunction fromAxisAreaSelect(axisModel, ecModel, payload) {\n    return payload\n        && payload.type === 'axisAreaSelect'\n        && ecModel.findComponents(\n            {mainType: 'parallelAxis', query: payload}\n        )[0] === axisModel;\n}\n\nfunction getCoverInfoList(axisModel) {\n    var axis = axisModel.axis;\n    return zrUtil.map(axisModel.activeIntervals, function (interval) {\n        return {\n            brushType: 'lineX',\n            panelId: 'pl',\n            range: [\n                axis.dataToCoord(interval[0], true),\n                axis.dataToCoord(interval[1], true)\n            ]\n        };\n    });\n}\n\nfunction getCoordSysModel(axisModel, ecModel) {\n    return ecModel.getComponent(\n        'parallel', axisModel.get('parallelIndex')\n    );\n}\n\nexport default AxisView;","/*\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\nimport '../coord/parallel/parallelCreator';\nimport './axis/parallelAxisAction';\nimport './axis/ParallelAxisView';\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\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as throttleUtil from '../util/throttle';\nimport parallelPreprocessor from '../coord/parallel/parallelPreprocessor';\n\nimport '../coord/parallel/parallelCreator';\nimport '../coord/parallel/ParallelModel';\nimport './parallelAxis';\n\nvar CLICK_THRESHOLD = 5; // > 4\n\n// Parallel view\necharts.extendComponentView({\n    type: 'parallel',\n\n    render: function (parallelModel, ecModel, api) {\n        this._model = parallelModel;\n        this._api = api;\n\n        if (!this._handlers) {\n            this._handlers = {};\n            zrUtil.each(handlers, function (handler, eventName) {\n                api.getZr().on(eventName, this._handlers[eventName] = zrUtil.bind(handler, this));\n            }, this);\n        }\n\n        throttleUtil.createOrUpdate(\n            this,\n            '_throttledDispatchExpand',\n            parallelModel.get('axisExpandRate'),\n            'fixRate'\n        );\n    },\n\n    dispose: function (ecModel, api) {\n        zrUtil.each(this._handlers, function (handler, eventName) {\n            api.getZr().off(eventName, handler);\n        });\n        this._handlers = null;\n    },\n\n    /**\n     * @param {Object} [opt] If null, cancle the last action triggering for debounce.\n     */\n    _throttledDispatchExpand: function (opt) {\n        this._dispatchExpand(opt);\n    },\n\n    _dispatchExpand: function (opt) {\n        opt && this._api.dispatchAction(\n            zrUtil.extend({type: 'parallelAxisExpand'}, opt)\n        );\n    }\n\n});\n\nvar handlers = {\n\n    mousedown: function (e) {\n        if (checkTrigger(this, 'click')) {\n            this._mouseDownPoint = [e.offsetX, e.offsetY];\n        }\n    },\n\n    mouseup: function (e) {\n        var mouseDownPoint = this._mouseDownPoint;\n\n        if (checkTrigger(this, 'click') && mouseDownPoint) {\n            var point = [e.offsetX, e.offsetY];\n            var dist = Math.pow(mouseDownPoint[0] - point[0], 2)\n                + Math.pow(mouseDownPoint[1] - point[1], 2);\n\n            if (dist > CLICK_THRESHOLD) {\n                return;\n            }\n\n            var result = this._model.coordinateSystem.getSlidedAxisExpandWindow(\n                [e.offsetX, e.offsetY]\n            );\n\n            result.behavior !== 'none' && this._dispatchExpand({\n                axisExpandWindow: result.axisExpandWindow\n            });\n        }\n\n        this._mouseDownPoint = null;\n    },\n\n    mousemove: function (e) {\n        // Should do nothing when brushing.\n        if (this._mouseDownPoint || !checkTrigger(this, 'mousemove')) {\n            return;\n        }\n        var model = this._model;\n        var result = model.coordinateSystem.getSlidedAxisExpandWindow(\n            [e.offsetX, e.offsetY]\n        );\n\n        var behavior = result.behavior;\n        behavior === 'jump' && this._throttledDispatchExpand.debounceNextCall(model.get('axisExpandDebounce'));\n        this._throttledDispatchExpand(\n            behavior === 'none'\n                ? null // Cancle the last trigger, in case that mouse slide out of the area quickly.\n                : {\n                    axisExpandWindow: result.axisExpandWindow,\n                    // Jumping uses animation, and sliding suppresses animation.\n                    animation: behavior === 'jump' ? null : false\n                }\n        );\n    }\n};\n\nfunction checkTrigger(view, triggerOn) {\n    var model = view._model;\n    return model.get('axisExpandable') && model.get('axisExpandTriggerOn') === triggerOn;\n}\n\necharts.registerPreprocessor(parallelPreprocessor);\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\nimport {each, createHashMap} from 'zrender/src/core/util';\nimport SeriesModel from '../../model/Series';\nimport createListFromArray from '../helper/createListFromArray';\n\nexport default SeriesModel.extend({\n\n    type: 'series.parallel',\n\n    dependencies: ['parallel'],\n\n    visualColorAccessPath: 'lineStyle.color',\n\n    getInitialData: function (option, ecModel) {\n        var source = this.getSource();\n\n        setEncodeAndDimensions(source, this);\n\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\n        coordSys.eachActiveState(data, function (theActiveState, dataIndex) {\n            if (activeState === theActiveState) {\n                indices.push(data.getRawIndex(dataIndex));\n            }\n        });\n\n        return indices;\n    },\n\n    defaultOption: {\n        zlevel: 0,                  // 一级层叠\n        z: 2,                       // 二级层叠\n\n        coordinateSystem: 'parallel',\n        parallelIndex: 0,\n\n        label: {\n            show: false\n        },\n\n        inactiveOpacity: 0.05,\n        activeOpacity: 1,\n\n        lineStyle: {\n            width: 1,\n            opacity: 0.45,\n            type: 'solid'\n        },\n        emphasis: {\n            label: {\n                show: false\n            }\n        },\n\n        progressive: 500,\n        smooth: false, // true | false | number\n\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\n    if (source.encodeDefine) {\n        return;\n    }\n\n    var parallelModel = seriesModel.ecModel.getComponent(\n        '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","/*\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\nimport * as graphic from '../../util/graphic';\nimport ChartView from '../../view/Chart';\n\nvar DEFAULT_SMOOTH = 0.3;\n\nvar ParallelView = ChartView.extend({\n\n    type: 'parallel',\n\n    init: function () {\n\n        /**\n         * @type {module:zrender/container/Group}\n         * @private\n         */\n        this._dataGroup = new graphic.Group();\n\n        this.group.add(this._dataGroup);\n\n        /**\n         * @type {module:echarts/data/List}\n         */\n        this._data;\n\n        /**\n         * @type {boolean}\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\n        data.diff(oldData)\n            .add(add)\n            .update(update)\n            .remove(remove)\n            .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, {shape: {points: points}}, animationModel, newDataIndex);\n\n            updateElCommon(line, data, newDataIndex, seriesScope);\n        }\n\n        function remove(oldDataIndex) {\n            var line = oldData.getItemGraphicEl(oldDataIndex);\n            dataGroup.remove(line);\n        }\n\n        // First create\n        if (!this._initialized) {\n            this._initialized = true;\n            var clipPath = createGridClipShape(\n                coordSys, seriesModel, function () {\n                    // Callback will be invoked immediately if there is no animation\n                    setTimeout(function () {\n                        dataGroup.removeClipPath();\n                    });\n                }\n            );\n            dataGroup.setClipPath(clipPath);\n        }\n\n        this._data = data;\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        this._initialized = true;\n        this._data = null;\n        this._dataGroup.removeAll();\n    },\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\n    dispose: function () {},\n\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\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\n    //     updateElCommon(data, progressive, smooth);\n\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\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    for (var i = 0; i < dimensions.length; i++) {\n        var dimName = dimensions[i];\n        var value = data.get(data.mapDimension(dimName), dataIndex);\n        if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) {\n            points.push(coordSys.dataToPoint(value, dimName));\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: {points: points},\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\n    var elStyle = el.style;\n    elStyle.fill = null;\n    // lineStyle.color have been set to itemVisual in module:echarts/visual/seriesColor.\n    elStyle.stroke = data.getItemVisual(dataIndex, 'color');\n    // lineStyle.opacity have been set to itemVisual in parallelVisual.\n    elStyle.opacity = data.getItemVisual(dataIndex, 'opacity');\n\n    seriesScope.smooth && (el.shape.smooth = seriesScope.smooth);\n}\n\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\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\n//     return false;\n// }\n\n// FIXME\n// 公用方法?\nfunction isEmptyValue(val, axisType) {\n    return axisType === 'category'\n        ? val == null\n        : (val == null || isNaN(val)); // axisType === 'value'\n}\n\nexport default ParallelView;","/*\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\nvar opacityAccessPath = ['lineStyle', 'normal', 'opacity'];\n\nexport default {\n\n    seriesType: 'parallel',\n\n    reset: function (seriesModel, ecModel, api) {\n\n        var itemStyleModel = seriesModel.getModel('itemStyle');\n        var lineStyleModel = seriesModel.getModel('lineStyle');\n        var globalColors = ecModel.get('color');\n\n        var color = lineStyleModel.get('color')\n            || itemStyleModel.get('color')\n            || 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\n        var coordSys = seriesModel.coordinateSystem;\n        var data = seriesModel.getData();\n\n        var opacityMap = {\n            normal: lineStyle.opacity,\n            active: activeOpacity,\n            inactive: inactiveOpacity\n        };\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                if (activeState === 'normal' && data.hasItemOption) {\n                    var itemOpacity = data.getItemModel(dataIndex).get(opacityAccessPath, true);\n                    itemOpacity != null && (opacity = itemOpacity);\n                }\n                data.setItemVisual(dataIndex, 'opacity', opacity);\n            }, params.start, params.end);\n        }\n\n        return {progress: progress};\n    }\n};\n\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\nimport '../component/parallel';\nimport './parallel/ParallelSeries';\nimport './parallel/ParallelView';\nimport parallelVisual from './parallel/parallelVisual';\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\nimport SeriesModel from '../../model/Series';\nimport createGraphFromNodeEdge from '../helper/createGraphFromNodeEdge';\nimport {encodeHTML} from '../../util/format';\nimport Model from '../../model/Model';\nimport { __DEV__ } from '../../config';\n\nvar SankeySeries = SeriesModel.extend({\n\n    type: 'series.sankey',\n\n    layoutInfo: null,\n\n    levelModels: null,\n\n    /**\n     * Init a graph data structure from data in option series\n     *\n     * @param  {Object} option  the object used to config echarts view\n     * @return {module:echarts/data/List} storage initial data\n     */\n    getInitialData: function (option, ecModel) {\n        var links = option.edges || option.links;\n        var nodes = option.data || option.nodes;\n        var levels = option.levels;\n        var levelModels = this.levelModels = {};\n\n        for (var i = 0; i < levels.length; i++) {\n            if (levels[i].depth != null && levels[i].depth >= 0) {\n                levelModels[levels[i].depth] = new Model(levels[i], this, ecModel);\n            }\n            else {\n                if (__DEV__) {\n                    throw new Error('levels[i].depth is mandatory and should be natural number');\n                }\n            }\n        }\n        if (nodes && links) {\n            var graph = createGraphFromNodeEdge(nodes, links, this, true, beforeLink);\n            return graph.data;\n        }\n        function beforeLink(nodeData, edgeData) {\n            nodeData.wrapMethod('getItemModel', function (model, idx) {\n                model.customizeGetParent(function (path) {\n                    var parentModel = this.parentModel;\n                    var nodeDepth = parentModel.getData().getItemLayout(idx).depth;\n                    var levelModel = parentModel.levelModels[nodeDepth];\n                    return levelModel || this.parentModel;\n                });\n                return model;\n            });\n\n            edgeData.wrapMethod('getItemModel', function (model, idx) {\n                model.customizeGetParent(function (path) {\n                    var parentModel = this.parentModel;\n                    var edge = parentModel.getGraph().getEdgeByIndex(idx);\n                    var depth = edge.node1.getLayout().depth;\n                    var levelModel = parentModel.levelModels[depth];\n                    return levelModel || this.parentModel;\n                });\n                return model;\n            });\n        }\n    },\n\n    setNodePosition: function (dataIndex, localPosition) {\n        var dataItem = this.option.data[dataIndex];\n        dataItem.localX = localPosition[0];\n        dataItem.localY = localPosition[1];\n    },\n\n    /**\n     * Return the graphic data structure\n     *\n     * @return {module:echarts/data/Graph} graphic data structure\n     */\n    getGraph: function () {\n        return this.getData().graph;\n    },\n\n    /**\n     * Get edge data of graphic data structure\n     *\n     * @return {module:echarts/data/List} data structure of list\n     */\n    getEdgeData: function () {\n        return this.getGraph().edgeData;\n    },\n\n    /**\n     * @override\n     */\n    formatTooltip: function (dataIndex, multipleSeries, dataType) {\n        // dataType === 'node' or empty do not show tooltip by default\n        if (dataType === 'edge') {\n            var params = this.getDataParams(dataIndex, dataType);\n            var rawDataOpt = params.data;\n            var html = rawDataOpt.source + ' -- ' + rawDataOpt.target;\n            if (params.value) {\n                html += ' : ' + params.value;\n            }\n            return encodeHTML(html);\n        }\n        else if (dataType === 'node') {\n            var node = this.getGraph().getNodeByIndex(dataIndex);\n            var value = node.getLayout().value;\n            var name = this.getDataParams(dataIndex, dataType).data.name;\n            if (value) {\n                var html = name + ' : ' + value;\n            }\n            return encodeHTML(html);\n        }\n        return SankeySeries.superCall(this, 'formatTooltip', dataIndex, multipleSeries);\n    },\n\n    optionUpdated: function () {\n        var option = this.option;\n        if (option.focusNodeAdjacency === true) {\n            option.focusNodeAdjacency = 'allEdges';\n        }\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n\n        coordinateSystem: 'view',\n\n        layout: null,\n\n        // The position of the whole view\n        left: '5%',\n        top: '5%',\n        right: '20%',\n        bottom: '5%',\n\n        // Value can be 'vertical'\n        orient: 'horizontal',\n\n        // The dx of the node\n        nodeWidth: 20,\n\n        // The vertical distance between two nodes\n        nodeGap: 8,\n\n        // Control if the node can move or not\n        draggable: true,\n\n        // Value can be 'inEdges', 'outEdges', 'allEdges', true (the same as 'allEdges').\n        focusNodeAdjacency: false,\n\n        // The number of iterations to change the position of the node\n        layoutIterations: 32,\n\n        label: {\n            show: true,\n            position: 'right',\n            color: '#000',\n            fontSize: 12\n        },\n\n        levels: [],\n\n        // Value can be 'left' or 'right'\n        nodeAlign: 'justify',\n\n        itemStyle: {\n            borderWidth: 1,\n            borderColor: '#333'\n        },\n\n        lineStyle: {\n            color: '#314656',\n            opacity: 0.2,\n            curveness: 0.5\n        },\n\n        emphasis: {\n            label: {\n                show: true\n            },\n            lineStyle: {\n                opacity: 0.6\n            }\n        },\n\n        animationEasing: 'linear',\n\n        animationDuration: 1000\n    }\n\n});\n\nexport default SankeySeries;","/*\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\nimport * as graphic from '../../util/graphic';\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar nodeOpacityPath = ['itemStyle', 'opacity'];\nvar lineOpacityPath = ['lineStyle', 'opacity'];\n\nfunction getItemOpacity(item, opacityPath) {\n    return item.getVisual('opacity') || item.getModel().get(opacityPath);\n}\n\nfunction fadeOutItem(item, opacityPath, opacityRatio) {\n    var el = item.getGraphicEl();\n\n    var opacity = getItemOpacity(item, opacityPath);\n    if (opacityRatio != null) {\n        opacity == null && (opacity = 1);\n        opacity *= opacityRatio;\n    }\n\n    el.downplay && el.downplay();\n    el.traverse(function (child) {\n        if (child.type !== 'group') {\n            child.setStyle('opacity', opacity);\n        }\n    });\n}\n\nfunction fadeInItem(item, opacityPath) {\n    var opacity = getItemOpacity(item, opacityPath);\n    var el = item.getGraphicEl();\n\n    el.highlight && el.highlight();\n    el.traverse(function (child) {\n        if (child.type !== 'group') {\n            child.setStyle('opacity', opacity);\n        }\n    });\n}\n\nvar SankeyShape = graphic.extendShape({\n    shape: {\n        x1: 0, y1: 0,\n        x2: 0, y2: 0,\n        cpx1: 0, cpy1: 0,\n        cpx2: 0, cpy2: 0,\n        extent: 0,\n        orient: ''\n    },\n\n    buildPath: function (ctx, shape) {\n        var extent = shape.extent;\n        ctx.moveTo(shape.x1, shape.y1);\n        ctx.bezierCurveTo(\n            shape.cpx1, shape.cpy1,\n            shape.cpx2, shape.cpy2,\n            shape.x2, shape.y2\n        );\n        if (shape.orient === 'vertical') {\n            ctx.lineTo(shape.x2 + extent, shape.y2);\n            ctx.bezierCurveTo(\n                shape.cpx2 + extent, shape.cpy2,\n                shape.cpx1 + extent, shape.cpy1,\n                shape.x1 + extent, shape.y1\n            );\n        }\n        else {\n            ctx.lineTo(shape.x2, shape.y2 + extent);\n            ctx.bezierCurveTo(\n                shape.cpx2, shape.cpy2 + extent,\n                shape.cpx1, shape.cpy1 + extent,\n                shape.x1, shape.y1 + extent\n            );\n        }\n        ctx.closePath();\n    }\n});\n\nexport default echarts.extendChartView({\n\n    type: 'sankey',\n\n    /**\n     * @private\n     * @type {module:echarts/chart/sankey/SankeySeries}\n     */\n    _model: null,\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    _focusAdjacencyDisabled: false,\n\n    render: function (seriesModel, ecModel, api) {\n        var sankeyView = this;\n        var graph = seriesModel.getGraph();\n        var group = this.group;\n        var layoutInfo = seriesModel.layoutInfo;\n        // view width\n        var width = layoutInfo.width;\n        // view height\n        var height = layoutInfo.height;\n        var nodeData = seriesModel.getData();\n        var edgeData = seriesModel.getData('edge');\n        var orient = seriesModel.get('orient');\n\n        this._model = seriesModel;\n\n        group.removeAll();\n\n        group.attr('position', [layoutInfo.x, layoutInfo.y]);\n\n        // generate a bezire Curve for each edge\n        graph.eachEdge(function (edge) {\n            var curve = new SankeyShape();\n            curve.dataIndex = edge.dataIndex;\n            curve.seriesIndex = seriesModel.seriesIndex;\n            curve.dataType = 'edge';\n            var lineStyleModel = edge.getModel('lineStyle');\n            var curvature = lineStyleModel.get('curveness');\n            var n1Layout = edge.node1.getLayout();\n            var node1Model = edge.node1.getModel();\n            var dragX1 = node1Model.get('localX');\n            var dragY1 = node1Model.get('localY');\n            var n2Layout = edge.node2.getLayout();\n            var node2Model = edge.node2.getModel();\n            var dragX2 = node2Model.get('localX');\n            var dragY2 = node2Model.get('localY');\n            var edgeLayout = edge.getLayout();\n            var x1;\n            var y1;\n            var x2;\n            var y2;\n            var cpx1;\n            var cpy1;\n            var cpx2;\n            var cpy2;\n\n            curve.shape.extent = Math.max(1, edgeLayout.dy);\n            curve.shape.orient = orient;\n\n            if (orient === 'vertical') {\n                x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + edgeLayout.sy;\n                y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + n1Layout.dy;\n                x2 = (dragX2 != null ? dragX2 * width : n2Layout.x) + edgeLayout.ty;\n                y2 = dragY2 != null ? dragY2 * height : n2Layout.y;\n                cpx1 = x1;\n                cpy1 = y1 * (1 - curvature) + y2 * curvature;\n                cpx2 = x2;\n                cpy2 = y1 * curvature + y2 * (1 - curvature);\n            }\n            else {\n                x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + n1Layout.dx;\n                y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + edgeLayout.sy;\n                x2 = dragX2 != null ? dragX2 * width : n2Layout.x;\n                y2 = (dragY2 != null ? dragY2 * height : n2Layout.y) + edgeLayout.ty;\n                cpx1 = x1 * (1 - curvature) + x2 * curvature;\n                cpy1 = y1;\n                cpx2 = x1 * curvature + x2 * (1 - curvature);\n                cpy2 = y2;\n            }\n\n            curve.setShape({\n                x1: x1,\n                y1: y1,\n                x2: x2,\n                y2: y2,\n                cpx1: cpx1,\n                cpy1: cpy1,\n                cpx2: cpx2,\n                cpy2: cpy2\n            });\n\n            curve.setStyle(lineStyleModel.getItemStyle());\n            // Special color, use source node color or target node color\n            switch (curve.style.fill) {\n                case 'source':\n                    curve.style.fill = edge.node1.getVisual('color');\n                    break;\n                case 'target':\n                    curve.style.fill = edge.node2.getVisual('color');\n                    break;\n            }\n\n            graphic.setHoverStyle(curve, edge.getModel('emphasis.lineStyle').getItemStyle());\n\n            group.add(curve);\n\n            edgeData.setItemGraphicEl(edge.dataIndex, curve);\n        });\n\n        // Generate a rect for each node\n        graph.eachNode(function (node) {\n            var layout = node.getLayout();\n            var itemModel = node.getModel();\n            var dragX = itemModel.get('localX');\n            var dragY = itemModel.get('localY');\n            var labelModel = itemModel.getModel('label');\n            var labelHoverModel = itemModel.getModel('emphasis.label');\n\n            var rect = new graphic.Rect({\n                shape: {\n                    x: dragX != null ? dragX * width : layout.x,\n                    y: dragY != null ? dragY * height : layout.y,\n                    width: layout.dx,\n                    height: layout.dy\n                },\n                style: itemModel.getModel('itemStyle').getItemStyle()\n            });\n\n            var hoverStyle = node.getModel('emphasis.itemStyle').getItemStyle();\n\n            graphic.setLabelStyle(\n                rect.style, hoverStyle, labelModel, labelHoverModel,\n                {\n                    labelFetcher: seriesModel,\n                    labelDataIndex: node.dataIndex,\n                    defaultText: node.id,\n                    isRectText: true\n                }\n            );\n\n            rect.setStyle('fill', node.getVisual('color'));\n\n            graphic.setHoverStyle(rect, hoverStyle);\n\n            group.add(rect);\n\n            nodeData.setItemGraphicEl(node.dataIndex, rect);\n\n            rect.dataType = 'node';\n        });\n\n        nodeData.eachItemGraphicEl(function (el, dataIndex) {\n            var itemModel = nodeData.getItemModel(dataIndex);\n            if (itemModel.get('draggable')) {\n                el.drift = function (dx, dy) {\n                    sankeyView._focusAdjacencyDisabled = true;\n                    this.shape.x += dx;\n                    this.shape.y += dy;\n                    this.dirty();\n                    api.dispatchAction({\n                        type: 'dragNode',\n                        seriesId: seriesModel.id,\n                        dataIndex: nodeData.getRawIndex(dataIndex),\n                        localX: this.shape.x / width,\n                        localY: this.shape.y / height\n                    });\n                };\n                el.ondragend = function () {\n                    sankeyView._focusAdjacencyDisabled = false;\n                };\n                el.draggable = true;\n                el.cursor = 'move';\n            }\n\n            if (itemModel.get('focusNodeAdjacency')) {\n                el.off('mouseover').on('mouseover', function () {\n                    if (!sankeyView._focusAdjacencyDisabled) {\n                        api.dispatchAction({\n                            type: 'focusNodeAdjacency',\n                            seriesId: seriesModel.id,\n                            dataIndex: el.dataIndex\n                        });\n                    }\n                });\n                el.off('mouseout').on('mouseout', function () {\n                    if (!sankeyView._focusAdjacencyDisabled) {\n                        api.dispatchAction({\n                            type: 'unfocusNodeAdjacency',\n                            seriesId: seriesModel.id\n                        });\n                    }\n                });\n            }\n        });\n\n        edgeData.eachItemGraphicEl(function (el, dataIndex) {\n            var edgeModel = edgeData.getItemModel(dataIndex);\n            if (edgeModel.get('focusNodeAdjacency')) {\n                el.off('mouseover').on('mouseover', function () {\n                    if (!sankeyView._focusAdjacencyDisabled) {\n                        api.dispatchAction({\n                            type: 'focusNodeAdjacency',\n                            seriesId: seriesModel.id,\n                            edgeDataIndex: el.dataIndex\n                        });\n                    }\n                });\n                el.off('mouseout').on('mouseout', function () {\n                    if (!sankeyView._focusAdjacencyDisabled) {\n                        api.dispatchAction({\n                            type: 'unfocusNodeAdjacency',\n                            seriesId: seriesModel.id\n                        });\n                    }\n                });\n            }\n        });\n\n        if (!this._data && seriesModel.get('animation')) {\n            group.setClipPath(createGridClipShape(group.getBoundingRect(), seriesModel, function () {\n                group.removeClipPath();\n            }));\n        }\n\n        this._data = seriesModel.getData();\n    },\n\n    dispose: function () {},\n\n    focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n        var data = this._model.getData();\n        var graph = data.graph;\n        var dataIndex = payload.dataIndex;\n        var itemModel = data.getItemModel(dataIndex);\n        var edgeDataIndex = payload.edgeDataIndex;\n\n        if (dataIndex == null && edgeDataIndex == null) {\n            return;\n        }\n        var node = graph.getNodeByIndex(dataIndex);\n        var edge = graph.getEdgeByIndex(edgeDataIndex);\n\n        graph.eachNode(function (node) {\n            fadeOutItem(node, nodeOpacityPath, 0.1);\n        });\n        graph.eachEdge(function (edge) {\n            fadeOutItem(edge, lineOpacityPath, 0.1);\n        });\n\n        if (node) {\n            fadeInItem(node, nodeOpacityPath);\n            var focusNodeAdj = itemModel.get('focusNodeAdjacency');\n            if (focusNodeAdj === 'outEdges') {\n                zrUtil.each(node.outEdges, function (edge) {\n                    if (edge.dataIndex < 0) {\n                        return;\n                    }\n                    fadeInItem(edge, lineOpacityPath);\n                    fadeInItem(edge.node2, nodeOpacityPath);\n                });\n            }\n            else if (focusNodeAdj === 'inEdges') {\n                zrUtil.each(node.inEdges, function (edge) {\n                    if (edge.dataIndex < 0) {\n                        return;\n                    }\n                    fadeInItem(edge, lineOpacityPath);\n                    fadeInItem(edge.node1, nodeOpacityPath);\n                });\n            }\n            else if (focusNodeAdj === 'allEdges') {\n                zrUtil.each(node.edges, function (edge) {\n                    if (edge.dataIndex < 0) {\n                        return;\n                    }\n                    fadeInItem(edge, lineOpacityPath);\n                    fadeInItem(edge.node1, nodeOpacityPath);\n                    fadeInItem(edge.node2, nodeOpacityPath);\n                });\n            }\n        }\n        if (edge) {\n            fadeInItem(edge, lineOpacityPath);\n            fadeInItem(edge.node1, nodeOpacityPath);\n            fadeInItem(edge.node2, nodeOpacityPath);\n        }\n    },\n\n    unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n        var graph = this._model.getGraph();\n\n        graph.eachNode(function (node) {\n            fadeOutItem(node, nodeOpacityPath);\n        });\n        graph.eachEdge(function (edge) {\n            fadeOutItem(edge, lineOpacityPath);\n        });\n    }\n});\n\n// Add animation to the view\nfunction createGridClipShape(rect, seriesModel, cb) {\n    var rectEl = new graphic.Rect({\n        shape: {\n            x: rect.x - 10,\n            y: rect.y - 10,\n            width: 0,\n            height: rect.height + 20\n        }\n    });\n    graphic.initProps(rectEl, {\n        shape: {\n            width: rect.width + 20,\n            height: rect.height + 20\n        }\n    }, seriesModel, cb);\n\n    return rectEl;\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\nimport * as echarts from '../../echarts';\nimport '../helper/focusNodeAdjacencyAction';\n\necharts.registerAction({\n    type: 'dragNode',\n    event: 'dragnode',\n    // here can only use 'update' now, other value is not support in echarts.\n    update: 'update'\n}, function (payload, ecModel) {\n    ecModel.eachComponent({mainType: 'series', subType: 'sankey', query: payload}, function (seriesModel) {\n        seriesModel.setNodePosition(payload.dataIndex, [payload.localX, payload.localY]);\n    });\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as layout from '../../util/layout';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {groupData} from '../../util/model';\n\nexport default function (ecModel, api, payload) {\n\n    ecModel.eachSeriesByType('sankey', function (seriesModel) {\n\n        var nodeWidth = seriesModel.get('nodeWidth');\n        var nodeGap = seriesModel.get('nodeGap');\n\n        var layoutInfo = getViewRect(seriesModel, api);\n\n        seriesModel.layoutInfo = layoutInfo;\n\n        var width = layoutInfo.width;\n        var height = layoutInfo.height;\n\n        var graph = seriesModel.getGraph();\n\n        var nodes = graph.nodes;\n        var edges = graph.edges;\n\n        computeNodeValues(nodes);\n\n        var filteredNodes = zrUtil.filter(nodes, function (node) {\n            return node.getLayout().value === 0;\n        });\n\n        var iterations = filteredNodes.length !== 0 ? 0 : seriesModel.get('layoutIterations');\n\n        var orient = seriesModel.get('orient');\n\n        var nodeAlign = seriesModel.get('nodeAlign');\n\n        layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign);\n    });\n}\n\n/**\n * Get the layout position of the whole view\n *\n * @param {module:echarts/model/Series} seriesModel  the model object of sankey series\n * @param {module:echarts/ExtensionAPI} api  provide the API list that the developer can call\n * @return {module:zrender/core/BoundingRect}  size of rect to draw the sankey view\n */\nfunction getViewRect(seriesModel, api) {\n    return layout.getLayoutRect(\n        seriesModel.getBoxLayoutParams(), {\n            width: api.getWidth(),\n            height: api.getHeight()\n        }\n    );\n}\n\nfunction layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign) {\n    computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign);\n    computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient);\n    computeEdgeDepths(nodes, orient);\n}\n\n/**\n * Compute the value of each node by summing the associated edge's value\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n */\nfunction computeNodeValues(nodes) {\n    zrUtil.each(nodes, function (node) {\n        var value1 = sum(node.outEdges, getEdgeValue);\n        var value2 = sum(node.inEdges, getEdgeValue);\n        var value = Math.max(value1, value2);\n        node.setLayout({value: value}, true);\n    });\n}\n\n/**\n * Compute the x-position for each node.\n *\n * Here we use Kahn algorithm to detect cycle when we traverse\n * the node to computer the initial x position.\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n * @param  {number} nodeWidth  the dx of the node\n * @param  {number} width  the whole width of the area to draw the view\n */\nfunction computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign) {\n    // Used to mark whether the edge is deleted. if it is deleted,\n    // the value is 0, otherwise it is 1.\n    var remainEdges = [];\n    // Storage each node's indegree.\n    var indegreeArr = [];\n    //Used to storage the node with indegree is equal to 0.\n    var zeroIndegrees = [];\n    var nextTargetNode = [];\n    var x = 0;\n    var kx = 0;\n\n    for (var i = 0; i < edges.length; i++) {\n        remainEdges[i] = 1;\n    }\n    for (i = 0; i < nodes.length; i++) {\n        indegreeArr[i] = nodes[i].inEdges.length;\n        if (indegreeArr[i] === 0) {\n            zeroIndegrees.push(nodes[i]);\n        }\n    }\n    var maxNodeDepth = -1;\n    // Traversing nodes using topological sorting to calculate the\n    // horizontal(if orient === 'horizontal') or vertical(if orient === 'vertical')\n    // position of the nodes.\n    while (zeroIndegrees.length) {\n        for (var idx = 0; idx < zeroIndegrees.length; idx++) {\n            var node = zeroIndegrees[idx];\n            var item = node.hostGraph.data.getRawDataItem(node.dataIndex);\n            var isItemDepth = item.depth != null && item.depth >= 0;\n            if (isItemDepth && item.depth > maxNodeDepth) {\n                maxNodeDepth = item.depth;\n            }\n            node.setLayout({depth: isItemDepth ? item.depth : x}, true);\n            orient === 'vertical'\n                ? node.setLayout({dy: nodeWidth}, true)\n                : node.setLayout({dx: nodeWidth}, true);\n\n            for (var edgeIdx = 0; edgeIdx < node.outEdges.length; edgeIdx++) {\n                var edge = node.outEdges[edgeIdx];\n                var indexEdge = edges.indexOf(edge);\n                remainEdges[indexEdge] = 0;\n                var targetNode = edge.node2;\n                var nodeIndex = nodes.indexOf(targetNode);\n                if (--indegreeArr[nodeIndex] === 0 && nextTargetNode.indexOf(targetNode) < 0) {\n                    nextTargetNode.push(targetNode);\n                }\n            }\n        }\n        ++x;\n        zeroIndegrees = nextTargetNode;\n        nextTargetNode = [];\n    }\n\n    for (i = 0; i < remainEdges.length; i++) {\n        if (remainEdges[i] === 1) {\n            throw new Error('Sankey is a DAG, the original data has cycle!');\n        }\n    }\n\n    var maxDepth = maxNodeDepth > x - 1 ? maxNodeDepth : x - 1;\n    if (nodeAlign && nodeAlign !== 'left') {\n        adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth);\n    }\n    var kx = orient === 'vertical'\n                ? (height - nodeWidth) / maxDepth\n                : (width - nodeWidth) / maxDepth;\n\n    scaleNodeBreadths(nodes, kx, orient);\n}\n\nfunction isNodeDepth(node) {\n    var item = node.hostGraph.data.getRawDataItem(node.dataIndex);\n    return item.depth != null && item.depth >= 0;\n}\n\nfunction adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth) {\n    if (nodeAlign === 'right') {\n        var nextSourceNode = [];\n        var remainNodes = nodes;\n        var nodeHeight = 0;\n        while (remainNodes.length) {\n            for (var i = 0; i < remainNodes.length; i++) {\n                var node = remainNodes[i];\n                node.setLayout({skNodeHeight: nodeHeight}, true);\n                for (var j = 0; j < node.inEdges.length; j++) {\n                    var edge = node.inEdges[j];\n                    if (nextSourceNode.indexOf(edge.node1) < 0) {\n                        nextSourceNode.push(edge.node1);\n                    }\n                }\n            }\n            remainNodes = nextSourceNode;\n            nextSourceNode = [];\n            ++nodeHeight;\n        }\n\n        zrUtil.each(nodes, function (node) {\n            if (!isNodeDepth(node)) {\n                node.setLayout({depth: Math.max(0, maxDepth - node.getLayout().skNodeHeight)}, true);\n            }\n        });\n    }\n    else if (nodeAlign === 'justify') {\n        moveSinksRight(nodes, maxDepth);\n    }\n}\n\n/**\n * All the node without outEgdes are assigned maximum x-position and\n *     be aligned in the last column.\n *\n * @param {module:echarts/data/Graph~Node} nodes.  node of sankey view.\n * @param {number} maxDepth.  use to assign to node without outEdges as x-position.\n */\nfunction moveSinksRight(nodes, maxDepth) {\n    zrUtil.each(nodes, function (node) {\n        if (!isNodeDepth(node) && !node.outEdges.length) {\n            node.setLayout({depth: maxDepth}, true);\n        }\n    });\n}\n\n/**\n * Scale node x-position to the width\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n * @param {number} kx   multiple used to scale nodes\n */\nfunction scaleNodeBreadths(nodes, kx, orient) {\n    zrUtil.each(nodes, function (node) {\n        var nodeDepth = node.getLayout().depth * kx;\n        orient === 'vertical'\n            ? node.setLayout({y: nodeDepth}, true)\n            : node.setLayout({x: nodeDepth}, true);\n    });\n}\n\n/**\n * Using Gauss-Seidel iterations method to compute the node depth(y-position)\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n * @param {module:echarts/data/Graph~Edge} edges  edge of sankey view\n * @param {number} height  the whole height of the area to draw the view\n * @param {number} nodeGap  the vertical distance between two nodes\n *     in the same column.\n * @param {number} iterations  the number of iterations for the algorithm\n */\nfunction computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient) {\n    var nodesByBreadth = prepareNodesByBreadth(nodes, orient);\n\n    initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient);\n    resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);\n\n    for (var alpha = 1; iterations > 0; iterations--) {\n        // 0.99 is a experience parameter, ensure that each iterations of\n        // changes as small as possible.\n        alpha *= 0.99;\n        relaxRightToLeft(nodesByBreadth, alpha, orient);\n        resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);\n        relaxLeftToRight(nodesByBreadth, alpha, orient);\n        resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);\n    }\n}\n\nfunction prepareNodesByBreadth(nodes, orient) {\n    var nodesByBreadth = [];\n    var keyAttr = orient === 'vertical' ? 'y' : 'x';\n\n    var groupResult = groupData(nodes, function (node) {\n        return node.getLayout()[keyAttr];\n    });\n    groupResult.keys.sort(function (a, b) {\n        return a - b;\n    });\n    zrUtil.each(groupResult.keys, function (key) {\n        nodesByBreadth.push(groupResult.buckets.get(key));\n    });\n\n    return nodesByBreadth;\n}\n\n/**\n * Compute the original y-position for each node\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth\n *     group by the array of all sankey nodes based on the nodes x-position.\n * @param {module:echarts/data/Graph~Edge} edges  edge of sankey view\n * @param {number} height  the whole height of the area to draw the view\n * @param {number} nodeGap  the vertical distance between two nodes\n */\nfunction initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient) {\n    var minKy = Infinity;\n    zrUtil.each(nodesByBreadth, function (nodes) {\n        var n = nodes.length;\n        var sum = 0;\n        zrUtil.each(nodes, function (node) {\n            sum += node.getLayout().value;\n        });\n        var ky = orient === 'vertical'\n                    ? (width - (n - 1) * nodeGap) / sum\n                    : (height - (n - 1) * nodeGap) / sum;\n\n        if (ky < minKy) {\n            minKy = ky;\n        }\n    });\n\n    zrUtil.each(nodesByBreadth, function (nodes) {\n        zrUtil.each(nodes, function (node, i) {\n            var nodeDy = node.getLayout().value * minKy;\n            if (orient === 'vertical') {\n                node.setLayout({x: i}, true);\n                node.setLayout({dx: nodeDy}, true);\n            }\n            else {\n                node.setLayout({y: i}, true);\n                node.setLayout({dy: nodeDy}, true);\n            }\n        });\n    });\n\n    zrUtil.each(edges, function (edge) {\n        var edgeDy = +edge.getValue() * minKy;\n        edge.setLayout({dy: edgeDy}, true);\n    });\n}\n\n/**\n * Resolve the collision of initialized depth (y-position)\n *\n * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth\n *     group by the array of all sankey nodes based on the nodes x-position.\n * @param {number} nodeGap  the vertical distance between two nodes\n * @param {number} height  the whole height of the area to draw the view\n */\nfunction resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) {\n    var keyAttr = orient === 'vertical' ? 'x' : 'y';\n    zrUtil.each(nodesByBreadth, function (nodes) {\n        nodes.sort(function (a, b) {\n            return a.getLayout()[keyAttr] - b.getLayout()[keyAttr];\n        });\n        var nodeX;\n        var node;\n        var dy;\n        var y0 = 0;\n        var n = nodes.length;\n        var nodeDyAttr = orient === 'vertical' ? 'dx' : 'dy';\n        for (var i = 0; i < n; i++) {\n            node = nodes[i];\n            dy = y0 - node.getLayout()[keyAttr];\n            if (dy > 0) {\n                nodeX = node.getLayout()[keyAttr] + dy;\n                orient === 'vertical'\n                    ? node.setLayout({x: nodeX}, true)\n                    : node.setLayout({y: nodeX}, true);\n            }\n            y0 = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap;\n        }\n        var viewWidth = orient === 'vertical' ? width : height;\n        // If the bottommost node goes outside the bounds, push it back up\n        dy = y0 - nodeGap - viewWidth;\n        if (dy > 0) {\n            nodeX = node.getLayout()[keyAttr] - dy;\n            orient === 'vertical'\n                ? node.setLayout({x: nodeX}, true)\n                : node.setLayout({y: nodeX}, true);\n\n            y0 = nodeX;\n            for (i = n - 2; i >= 0; --i) {\n                node = nodes[i];\n                dy = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap - y0;\n                if (dy > 0) {\n                    nodeX = node.getLayout()[keyAttr] - dy;\n                    orient === 'vertical'\n                        ? node.setLayout({x: nodeX}, true)\n                        : node.setLayout({y: nodeX}, true);\n                }\n                y0 = node.getLayout()[keyAttr];\n            }\n        }\n    });\n}\n\n/**\n * Change the y-position of the nodes, except most the right side nodes\n *\n * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth\n *     group by the array of all sankey nodes based on the node x-position.\n * @param {number} alpha  parameter used to adjust the nodes y-position\n */\nfunction relaxRightToLeft(nodesByBreadth, alpha, orient) {\n    zrUtil.each(nodesByBreadth.slice().reverse(), function (nodes) {\n        zrUtil.each(nodes, function (node) {\n            if (node.outEdges.length) {\n                var y = sum(node.outEdges, weightedTarget, orient)\n                        / sum(node.outEdges, getEdgeValue, orient);\n                if (orient === 'vertical') {\n                    var nodeX = node.getLayout().x + (y - center(node, orient)) * alpha;\n                    node.setLayout({x: nodeX}, true);\n                }\n                else {\n                    var nodeY = node.getLayout().y + (y - center(node, orient)) * alpha;\n                    node.setLayout({y: nodeY}, true);\n                }\n            }\n        });\n    });\n}\n\nfunction weightedTarget(edge, orient) {\n    return center(edge.node2, orient) * edge.getValue();\n}\n\nfunction weightedSource(edge, orient) {\n    return center(edge.node1, orient) * edge.getValue();\n}\n\nfunction center(node, orient) {\n    return orient === 'vertical'\n            ? node.getLayout().x + node.getLayout().dx / 2\n            : node.getLayout().y + node.getLayout().dy / 2;\n}\n\nfunction getEdgeValue(edge) {\n    return edge.getValue();\n}\n\nfunction sum(array, f, orient) {\n    var sum = 0;\n    var len = array.length;\n    var i = -1;\n    while (++i < len) {\n        var value = +f.call(array, array[i], orient);\n        if (!isNaN(value)) {\n            sum += value;\n        }\n    }\n    return sum;\n}\n\n/**\n * Change the y-position of the nodes, except most the left side nodes\n *\n * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth\n *     group by the array of all sankey nodes based on the node x-position.\n * @param {number} alpha  parameter used to adjust the nodes y-position\n */\nfunction relaxLeftToRight(nodesByBreadth, alpha, orient) {\n    zrUtil.each(nodesByBreadth, function (nodes) {\n        zrUtil.each(nodes, function (node) {\n            if (node.inEdges.length) {\n                var y = sum(node.inEdges, weightedSource, orient)\n                        / sum(node.inEdges, getEdgeValue, orient);\n                if (orient === 'vertical') {\n                    var nodeX = node.getLayout().x + (y - center(node, orient)) * alpha;\n                    node.setLayout({x: nodeX}, true);\n                }\n                else {\n                    var nodeY = node.getLayout().y + (y - center(node, orient)) * alpha;\n                    node.setLayout({y: nodeY}, true);\n                }\n            }\n        });\n    });\n}\n\n/**\n * Compute the depth(y-position) of each edge\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n */\nfunction computeEdgeDepths(nodes, orient) {\n    var keyAttr = orient === 'vertical' ? 'x' : 'y';\n    zrUtil.each(nodes, function (node) {\n        node.outEdges.sort(function (a, b) {\n            return a.node2.getLayout()[keyAttr] - b.node2.getLayout()[keyAttr];\n        });\n        node.inEdges.sort(function (a, b) {\n            return a.node1.getLayout()[keyAttr] - b.node1.getLayout()[keyAttr];\n        });\n    });\n    zrUtil.each(nodes, function (node) {\n        var sy = 0;\n        var ty = 0;\n        zrUtil.each(node.outEdges, function (edge) {\n            edge.setLayout({sy: sy}, true);\n            sy += edge.getLayout().dy;\n        });\n        zrUtil.each(node.inEdges, function (edge) {\n            edge.setLayout({ty: ty}, true);\n            ty += edge.getLayout().dy;\n        });\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport VisualMapping from '../../visual/VisualMapping';\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default function (ecModel, payload) {\n    ecModel.eachSeriesByType('sankey', function (seriesModel) {\n        var graph = seriesModel.getGraph();\n        var nodes = graph.nodes;\n        if (nodes.length) {\n            var minValue = Infinity;\n            var maxValue = -Infinity;\n            zrUtil.each(nodes, function (node) {\n                var nodeValue = node.getLayout().value;\n                if (nodeValue < minValue) {\n                    minValue = nodeValue;\n                }\n                if (nodeValue > maxValue) {\n                    maxValue = nodeValue;\n                }\n            });\n\n            zrUtil.each(nodes, function (node) {\n                var mapping = new VisualMapping({\n                    type: 'color',\n                    mappingMethod: 'linear',\n                    dataExtent: [minValue, maxValue],\n                    visual: seriesModel.get('color')\n                });\n\n                var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value);\n                var customColor = node.getModel().get('itemStyle.color');\n                customColor != null\n                    ? node.setVisual('color', customColor)\n                    : node.setVisual('color', mapValueToColor);\n            });\n        }\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\n\nimport './sankey/SankeySeries';\nimport './sankey/SankeyView';\nimport './sankey/sankeyAction';\n\nimport sankeyLayout from './sankey/sankeyLayout';\nimport sankeyVisual from './sankey/sankeyVisual';\n\necharts.registerLayout(sankeyLayout);\necharts.registerVisual(sankeyVisual);","/*\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\nimport createListSimply from '../helper/createListSimply';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {getDimensionTypeByAxis} from '../../data/helper/dimensionHelper';\n\nexport var seriesModelMixin = {\n\n    /**\n     * @private\n     * @type {string}\n     */\n    _baseAxisDim: null,\n\n    /**\n     * @override\n     */\n    getInitialData: function (option, ecModel) {\n        // When both types of xAxis and yAxis are 'value', layout is\n        // needed to be specified by user. Otherwise, layout can be\n        // judged by which axis is category.\n\n        var ordinalMeta;\n\n        var xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex'));\n        var yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex'));\n        var xAxisType = xAxisModel.get('type');\n        var yAxisType = yAxisModel.get('type');\n        var addOrdinal;\n\n        // FIXME\n        // 考虑时间轴\n\n        if (xAxisType === 'category') {\n            option.layout = 'horizontal';\n            ordinalMeta = xAxisModel.getOrdinalMeta();\n            addOrdinal = true;\n        }\n        else if (yAxisType === 'category') {\n            option.layout = 'vertical';\n            ordinalMeta = yAxisModel.getOrdinalMeta();\n            addOrdinal = true;\n        }\n        else {\n            option.layout = option.layout || 'horizontal';\n        }\n\n        var coordDims = ['x', 'y'];\n        var baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1;\n        var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex];\n        var otherAxisDim = coordDims[1 - baseAxisDimIndex];\n        var axisModels = [xAxisModel, yAxisModel];\n        var baseAxisType = axisModels[baseAxisDimIndex].get('type');\n        var otherAxisType = axisModels[1 - baseAxisDimIndex].get('type');\n        var data = option.data;\n\n        // ??? FIXME make a stage to perform data transfrom.\n        // MUST create a new data, consider setOption({}) again.\n        if (data && addOrdinal) {\n            var newOptionData = [];\n            zrUtil.each(data, function (item, index) {\n                var newItem;\n                if (item.value && zrUtil.isArray(item.value)) {\n                    newItem = item.value.slice();\n                    item.value.unshift(index);\n                }\n                else if (zrUtil.isArray(item)) {\n                    newItem = item.slice();\n                    item.unshift(index);\n                }\n                else {\n                    newItem = item;\n                }\n                newOptionData.push(newItem);\n            });\n            option.data = newOptionData;\n        }\n\n        var defaultValueDimensions = this.defaultValueDimensions;\n\n        return createListSimply(\n            this,\n            {\n                coordDimensions: [{\n                    name: baseAxisDim,\n                    type: getDimensionTypeByAxis(baseAxisType),\n                    ordinalMeta: ordinalMeta,\n                    otherDims: {\n                        tooltip: false,\n                        itemName: 0\n                    },\n                    dimsDef: ['base']\n                }, {\n                    name: otherAxisDim,\n                    type: getDimensionTypeByAxis(otherAxisType),\n                    dimsDef: defaultValueDimensions.slice()\n                }],\n                dimensionsCount: defaultValueDimensions.length + 1\n            }\n        );\n    },\n\n    /**\n     * If horizontal, base axis is x, otherwise y.\n     * @override\n     */\n    getBaseAxis: function () {\n        var dim = this._baseAxisDim;\n        return this.ecModel.getComponent(dim + 'Axis', this.get(dim + 'AxisIndex')).axis;\n    }\n\n};\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport SeriesModel from '../../model/Series';\nimport {seriesModelMixin} from '../helper/whiskerBoxCommon';\n\nvar BoxplotSeries = SeriesModel.extend({\n\n    type: 'series.boxplot',\n\n    dependencies: ['xAxis', 'yAxis', 'grid'],\n\n    // TODO\n    // box width represents group size, so dimension should have 'size'.\n\n    /**\n     * @see <https://en.wikipedia.org/wiki/Box_plot>\n     * The meanings of 'min' and 'max' depend on user,\n     * and echarts do not need to know it.\n     * @readOnly\n     */\n    defaultValueDimensions: [\n        {name: 'min', defaultTooltip: true},\n        {name: 'Q1', defaultTooltip: true},\n        {name: 'median', defaultTooltip: true},\n        {name: 'Q3', defaultTooltip: true},\n        {name: 'max', defaultTooltip: true}\n    ],\n\n    /**\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    dimensions: null,\n\n    /**\n     * @override\n     */\n    defaultOption: {\n        zlevel: 0,                  // 一级层叠\n        z: 2,                       // 二级层叠\n        coordinateSystem: 'cartesian2d',\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        layout: null,               // 'horizontal' or 'vertical'\n        boxWidth: [7, 50],       // [min, max] can be percent of band width.\n\n        itemStyle: {\n            color: '#fff',\n            borderWidth: 1\n        },\n\n        emphasis: {\n            itemStyle: {\n                borderWidth: 2,\n                shadowBlur: 5,\n                shadowOffsetX: 2,\n                shadowOffsetY: 2,\n                shadowColor: 'rgba(0,0,0,0.4)'\n            }\n        },\n\n        animationEasing: 'elasticOut',\n        animationDuration: 800\n    }\n});\n\nzrUtil.mixin(BoxplotSeries, seriesModelMixin, true);\n\nexport default BoxplotSeries;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport ChartView from '../../view/Chart';\nimport * as graphic from '../../util/graphic';\nimport Path from 'zrender/src/graphic/Path';\n\n// Update common properties\nvar NORMAL_ITEM_STYLE_PATH = ['itemStyle'];\nvar EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'];\n\nvar BoxplotView = ChartView.extend({\n\n    type: 'boxplot',\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        var group = this.group;\n        var oldData = this._data;\n\n        // There is no old data only when first rendering or switching from\n        // stream mode to normal mode, where previous elements should be removed.\n        if (!this._data) {\n            group.removeAll();\n        }\n\n        var constDim = seriesModel.get('layout') === 'horizontal' ? 1 : 0;\n\n        data.diff(oldData)\n            .add(function (newIdx) {\n                if (data.hasValue(newIdx)) {\n                    var itemLayout = data.getItemLayout(newIdx);\n                    var symbolEl = createNormalBox(itemLayout, data, newIdx, constDim, true);\n                    data.setItemGraphicEl(newIdx, symbolEl);\n                    group.add(symbolEl);\n                }\n            })\n            .update(function (newIdx, oldIdx) {\n                var symbolEl = oldData.getItemGraphicEl(oldIdx);\n\n                // Empty data\n                if (!data.hasValue(newIdx)) {\n                    group.remove(symbolEl);\n                    return;\n                }\n\n                var itemLayout = data.getItemLayout(newIdx);\n                if (!symbolEl) {\n                    symbolEl = createNormalBox(itemLayout, data, newIdx, constDim);\n                }\n                else {\n                    updateNormalBoxData(itemLayout, symbolEl, data, newIdx);\n                }\n\n                group.add(symbolEl);\n\n                data.setItemGraphicEl(newIdx, symbolEl);\n            })\n            .remove(function (oldIdx) {\n                var el = oldData.getItemGraphicEl(oldIdx);\n                el && group.remove(el);\n            })\n            .execute();\n\n        this._data = data;\n    },\n\n    remove: function (ecModel) {\n        var group = this.group;\n        var data = this._data;\n        this._data = null;\n        data && data.eachItemGraphicEl(function (el) {\n            el && group.remove(el);\n        });\n    },\n\n    dispose: zrUtil.noop\n\n});\n\n\nvar BoxPath = Path.extend({\n\n    type: 'boxplotBoxPath',\n\n    shape: {},\n\n    buildPath: function (ctx, shape) {\n        var ends = shape.points;\n\n        var i = 0;\n        ctx.moveTo(ends[i][0], ends[i][1]);\n        i++;\n        for (; i < 4; i++) {\n            ctx.lineTo(ends[i][0], ends[i][1]);\n        }\n        ctx.closePath();\n\n        for (; i < ends.length; i++) {\n            ctx.moveTo(ends[i][0], ends[i][1]);\n            i++;\n            ctx.lineTo(ends[i][0], ends[i][1]);\n        }\n    }\n});\n\n\nfunction createNormalBox(itemLayout, data, dataIndex, constDim, isInit) {\n    var ends = itemLayout.ends;\n\n    var el = new BoxPath({\n        shape: {\n            points: isInit\n                ? transInit(ends, constDim, itemLayout)\n                : ends\n        }\n    });\n\n    updateNormalBoxData(itemLayout, el, data, dataIndex, isInit);\n\n    return el;\n}\n\nfunction updateNormalBoxData(itemLayout, el, data, dataIndex, isInit) {\n    var seriesModel = data.hostModel;\n    var updateMethod = graphic[isInit ? 'initProps' : 'updateProps'];\n\n    updateMethod(\n        el,\n        {shape: {points: itemLayout.ends}},\n        seriesModel,\n        dataIndex\n    );\n\n    var itemModel = data.getItemModel(dataIndex);\n    var normalItemStyleModel = itemModel.getModel(NORMAL_ITEM_STYLE_PATH);\n    var borderColor = data.getItemVisual(dataIndex, 'color');\n\n    // Exclude borderColor.\n    var itemStyle = normalItemStyleModel.getItemStyle(['borderColor']);\n    itemStyle.stroke = borderColor;\n    itemStyle.strokeNoScale = true;\n    el.useStyle(itemStyle);\n\n    el.z2 = 100;\n\n    var hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH).getItemStyle();\n    graphic.setHoverStyle(el, hoverStyle);\n}\n\nfunction transInit(points, dim, itemLayout) {\n    return zrUtil.map(points, function (point) {\n        point = point.slice();\n        point[dim] = itemLayout.initBaseline;\n        return point;\n    });\n}\n\nexport default BoxplotView;\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\nvar borderColorQuery = ['itemStyle', 'borderColor'];\n\nexport default function (ecModel, api) {\n\n    var globalColors = ecModel.get('color');\n\n    ecModel.eachRawSeriesByType('boxplot', function (seriesModel) {\n\n        var defaulColor = globalColors[seriesModel.seriesIndex % globalColors.length];\n        var data = seriesModel.getData();\n\n        data.setVisual({\n            legendSymbol: 'roundRect',\n            // Use name 'color' but not 'borderColor' for legend usage and\n            // visual coding from other component like dataRange.\n            color: seriesModel.get(borderColorQuery) || defaulColor\n        });\n\n        // Only visible series has each data be visual encoded\n        if (!ecModel.isSeriesFiltered(seriesModel)) {\n            data.each(function (idx) {\n                var itemModel = data.getItemModel(idx);\n                data.setItemVisual(\n                    idx,\n                    {color: itemModel.get(borderColorQuery, true)}\n                );\n            });\n        }\n    });\n\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport {parsePercent} from '../../util/number';\n\nvar each = zrUtil.each;\n\nexport default function (ecModel) {\n\n    var groupResult = groupSeriesByAxis(ecModel);\n\n    each(groupResult, function (groupItem) {\n        var seriesModels = groupItem.seriesModels;\n\n        if (!seriesModels.length) {\n            return;\n        }\n\n        calculateBase(groupItem);\n\n        each(seriesModels, function (seriesModel, idx) {\n            layoutSingleSeries(\n                seriesModel,\n                groupItem.boxOffsetList[idx],\n                groupItem.boxWidthList[idx]\n            );\n        });\n    });\n}\n\n/**\n * Group series by axis.\n */\nfunction groupSeriesByAxis(ecModel) {\n    var result = [];\n    var axisList = [];\n\n    ecModel.eachSeriesByType('boxplot', function (seriesModel) {\n        var baseAxis = seriesModel.getBaseAxis();\n        var idx = zrUtil.indexOf(axisList, baseAxis);\n\n        if (idx < 0) {\n            idx = axisList.length;\n            axisList[idx] = baseAxis;\n            result[idx] = {axis: baseAxis, seriesModels: []};\n        }\n\n        result[idx].seriesModels.push(seriesModel);\n    });\n\n    return result;\n}\n\n/**\n * Calculate offset and box width for each series.\n */\nfunction calculateBase(groupItem) {\n    var extent;\n    var baseAxis = groupItem.axis;\n    var seriesModels = groupItem.seriesModels;\n    var seriesCount = seriesModels.length;\n\n    var boxWidthList = groupItem.boxWidthList = [];\n    var boxOffsetList = groupItem.boxOffsetList = [];\n    var boundList = [];\n\n    var bandWidth;\n    if (baseAxis.type === 'category') {\n        bandWidth = baseAxis.getBandWidth();\n    }\n    else {\n        var maxDataCount = 0;\n        each(seriesModels, function (seriesModel) {\n            maxDataCount = Math.max(maxDataCount, seriesModel.getData().count());\n        });\n        extent = baseAxis.getExtent(),\n        Math.abs(extent[1] - extent[0]) / maxDataCount;\n    }\n\n    each(seriesModels, function (seriesModel) {\n        var boxWidthBound = seriesModel.get('boxWidth');\n        if (!zrUtil.isArray(boxWidthBound)) {\n            boxWidthBound = [boxWidthBound, boxWidthBound];\n        }\n        boundList.push([\n            parsePercent(boxWidthBound[0], bandWidth) || 0,\n            parsePercent(boxWidthBound[1], bandWidth) || 0\n        ]);\n    });\n\n    var availableWidth = bandWidth * 0.8 - 2;\n    var boxGap = availableWidth / seriesCount * 0.3;\n    var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount;\n    var base = boxWidth / 2 - availableWidth / 2;\n\n    each(seriesModels, function (seriesModel, idx) {\n        boxOffsetList.push(base);\n        base += boxGap + boxWidth;\n\n        boxWidthList.push(\n            Math.min(Math.max(boxWidth, boundList[idx][0]), boundList[idx][1])\n        );\n    });\n}\n\n/**\n * Calculate points location for each series.\n */\nfunction layoutSingleSeries(seriesModel, offset, boxWidth) {\n    var coordSys = seriesModel.coordinateSystem;\n    var data = seriesModel.getData();\n    var halfWidth = boxWidth / 2;\n    var cDimIdx = seriesModel.get('layout') === 'horizontal' ? 0 : 1;\n    var vDimIdx = 1 - cDimIdx;\n    var coordDims = ['x', 'y'];\n    var cDim = data.mapDimension(coordDims[cDimIdx]);\n    var vDims = data.mapDimension(coordDims[vDimIdx], true);\n\n    if (cDim == null || vDims.length < 5) {\n        return;\n    }\n\n    for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) {\n        var axisDimVal = data.get(cDim, dataIndex);\n\n        var median = getPoint(axisDimVal, vDims[2], dataIndex);\n        var end1 = getPoint(axisDimVal, vDims[0], dataIndex);\n        var end2 = getPoint(axisDimVal, vDims[1], dataIndex);\n        var end4 = getPoint(axisDimVal, vDims[3], dataIndex);\n        var end5 = getPoint(axisDimVal, vDims[4], dataIndex);\n\n        var ends = [];\n        addBodyEnd(ends, end2, 0);\n        addBodyEnd(ends, end4, 1);\n\n        ends.push(end1, end2, end5, end4);\n        layEndLine(ends, end1);\n        layEndLine(ends, end5);\n        layEndLine(ends, median);\n\n        data.setItemLayout(dataIndex, {\n            initBaseline: median[vDimIdx],\n            ends: ends\n        });\n    }\n\n    function getPoint(axisDimVal, dimIdx, dataIndex) {\n        var val = data.get(dimIdx, dataIndex);\n        var p = [];\n        p[cDimIdx] = axisDimVal;\n        p[vDimIdx] = val;\n        var point;\n        if (isNaN(axisDimVal) || isNaN(val)) {\n            point = [NaN, NaN];\n        }\n        else {\n            point = coordSys.dataToPoint(p);\n            point[cDimIdx] += offset;\n        }\n        return point;\n    }\n\n    function addBodyEnd(ends, point, start) {\n        var point1 = point.slice();\n        var point2 = point.slice();\n        point1[cDimIdx] += halfWidth;\n        point2[cDimIdx] -= halfWidth;\n        start\n            ? ends.push(point1, point2)\n            : ends.push(point2, point1);\n    }\n\n    function layEndLine(ends, endCenter) {\n        var from = endCenter.slice();\n        var to = endCenter.slice();\n        from[cDimIdx] -= halfWidth;\n        to[cDimIdx] += halfWidth;\n        ends.push(from, to);\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\nimport './boxplot/BoxplotSeries';\nimport './boxplot/BoxplotView';\nimport boxplotVisual from './boxplot/boxplotVisual';\nimport boxplotLayout from './boxplot/boxplotLayout';\n\necharts.registerVisual(boxplotVisual);\necharts.registerLayout(boxplotLayout);\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport SeriesModel from '../../model/Series';\nimport {seriesModelMixin} from '../helper/whiskerBoxCommon';\n\nvar CandlestickSeries = SeriesModel.extend({\n\n    type: 'series.candlestick',\n\n    dependencies: ['xAxis', 'yAxis', 'grid'],\n\n    /**\n     * @readOnly\n     */\n    defaultValueDimensions: [\n        {name: 'open', defaultTooltip: true},\n        {name: 'close', defaultTooltip: true},\n        {name: 'lowest', defaultTooltip: true},\n        {name: 'highest', defaultTooltip: true}\n    ],\n\n    /**\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    dimensions: null,\n\n    /**\n     * @override\n     */\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        coordinateSystem: 'cartesian2d',\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        layout: null, // 'horizontal' or 'vertical'\n\n        clip: true,\n\n        itemStyle: {\n            color: '#c23531', // 阳线 positive\n            color0: '#314656', // 阴线 negative     '#c23531', '#314656'\n            borderWidth: 1,\n            // FIXME\n            // ec2中使用的是lineStyle.color 和 lineStyle.color0\n            borderColor: '#c23531',\n            borderColor0: '#314656'\n        },\n\n        emphasis: {\n            itemStyle: {\n                borderWidth: 2\n            }\n        },\n\n        barMaxWidth: null,\n        barMinWidth: null,\n        barWidth: null,\n\n        large: true,\n        largeThreshold: 600,\n\n        progressive: 3e3,\n        progressiveThreshold: 1e4,\n        progressiveChunkMode: 'mod',\n\n        animationUpdate: false,\n        animationEasing: 'linear',\n        animationDuration: 300\n    },\n\n    /**\n     * Get dimension for shadow in dataZoom\n     * @return {string} dimension name\n     */\n    getShadowDim: function () {\n        return 'open';\n    },\n\n    brushSelector: function (dataIndex, data, selectors) {\n        var itemLayout = data.getItemLayout(dataIndex);\n        return itemLayout && selectors.rect(itemLayout.brushRect);\n    }\n\n});\n\nzrUtil.mixin(CandlestickSeries, seriesModelMixin, true);\n\nexport default CandlestickSeries;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport ChartView from '../../view/Chart';\nimport * as graphic from '../../util/graphic';\nimport Path from 'zrender/src/graphic/Path';\nimport {createClipPath} from '../helper/createClipPathFromCoordSys';\n\nvar NORMAL_ITEM_STYLE_PATH = ['itemStyle'];\nvar EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'];\nvar SKIP_PROPS = ['color', 'color0', 'borderColor', 'borderColor0'];\n\nvar CandlestickView = ChartView.extend({\n\n    type: 'candlestick',\n\n    render: function (seriesModel, ecModel, api) {\n        // If there is clipPath created in large mode. Remove it.\n        this.group.removeClipPath();\n\n        this._updateDrawMode(seriesModel);\n\n        this._isLargeDraw\n            ? this._renderLarge(seriesModel)\n            : this._renderNormal(seriesModel);\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        this._clear();\n        this._updateDrawMode(seriesModel);\n    },\n\n    incrementalRender: function (params, seriesModel, ecModel, api) {\n        this._isLargeDraw\n             ? this._incrementalRenderLarge(params, seriesModel)\n             : this._incrementalRenderNormal(params, seriesModel);\n    },\n\n    _updateDrawMode: function (seriesModel) {\n        var isLargeDraw = seriesModel.pipelineContext.large;\n        if (this._isLargeDraw == null || isLargeDraw ^ this._isLargeDraw) {\n            this._isLargeDraw = isLargeDraw;\n            this._clear();\n        }\n    },\n\n    _renderNormal: function (seriesModel) {\n        var data = seriesModel.getData();\n        var oldData = this._data;\n        var group = this.group;\n        var isSimpleBox = data.getLayout('isSimpleBox');\n\n        var needsClip = seriesModel.get('clip', true);\n        var coord = seriesModel.coordinateSystem;\n        var clipArea = coord.getArea && coord.getArea();\n\n        // There is no old data only when first rendering or switching from\n        // stream mode to normal mode, where previous elements should be removed.\n        if (!this._data) {\n            group.removeAll();\n        }\n\n        data.diff(oldData)\n            .add(function (newIdx) {\n                if (data.hasValue(newIdx)) {\n                    var el;\n\n                    var itemLayout = data.getItemLayout(newIdx);\n\n                    if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {\n                        return;\n                    }\n\n                    el = createNormalBox(itemLayout, newIdx, true);\n                    graphic.initProps(el, {shape: {points: itemLayout.ends}}, seriesModel, newIdx);\n\n                    setBoxCommon(el, data, newIdx, isSimpleBox);\n\n                    group.add(el);\n\n                    data.setItemGraphicEl(newIdx, el);\n                }\n            })\n            .update(function (newIdx, oldIdx) {\n                var el = oldData.getItemGraphicEl(oldIdx);\n\n                // Empty data\n                if (!data.hasValue(newIdx)) {\n                    group.remove(el);\n                    return;\n                }\n\n                var itemLayout = data.getItemLayout(newIdx);\n                if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {\n                    group.remove(el);\n                    return;\n                }\n\n                if (!el) {\n                    el = createNormalBox(itemLayout, newIdx);\n                }\n                else {\n                    graphic.updateProps(el, {shape: {points: itemLayout.ends}}, seriesModel, newIdx);\n                }\n\n                setBoxCommon(el, data, newIdx, isSimpleBox);\n\n                group.add(el);\n                data.setItemGraphicEl(newIdx, el);\n            })\n            .remove(function (oldIdx) {\n                var el = oldData.getItemGraphicEl(oldIdx);\n                el && group.remove(el);\n            })\n            .execute();\n\n        this._data = data;\n    },\n\n    _renderLarge: function (seriesModel) {\n        this._clear();\n\n        createLarge(seriesModel, this.group);\n\n        var clipPath = seriesModel.get('clip', true)\n            ? createClipPath(seriesModel.coordinateSystem, false, seriesModel)\n            : null;\n        if (clipPath) {\n            this.group.setClipPath(clipPath);\n        }\n        else {\n            this.group.removeClipPath();\n        }\n\n    },\n\n    _incrementalRenderNormal: function (params, seriesModel) {\n        var data = seriesModel.getData();\n        var isSimpleBox = data.getLayout('isSimpleBox');\n\n        var dataIndex;\n        while ((dataIndex = params.next()) != null) {\n            var el;\n\n            var itemLayout = data.getItemLayout(dataIndex);\n            el = createNormalBox(itemLayout, dataIndex);\n            setBoxCommon(el, data, dataIndex, isSimpleBox);\n\n            el.incremental = true;\n            this.group.add(el);\n        }\n    },\n\n    _incrementalRenderLarge: function (params, seriesModel) {\n        createLarge(seriesModel, this.group, true);\n    },\n\n    remove: function (ecModel) {\n        this._clear();\n    },\n\n    _clear: function () {\n        this.group.removeAll();\n        this._data = null;\n    },\n\n    dispose: zrUtil.noop\n\n});\n\n\nvar NormalBoxPath = Path.extend({\n\n    type: 'normalCandlestickBox',\n\n    shape: {},\n\n    buildPath: function (ctx, shape) {\n        var ends = shape.points;\n\n        if (this.__simpleBox) {\n            ctx.moveTo(ends[4][0], ends[4][1]);\n            ctx.lineTo(ends[6][0], ends[6][1]);\n        }\n        else {\n            ctx.moveTo(ends[0][0], ends[0][1]);\n            ctx.lineTo(ends[1][0], ends[1][1]);\n            ctx.lineTo(ends[2][0], ends[2][1]);\n            ctx.lineTo(ends[3][0], ends[3][1]);\n            ctx.closePath();\n\n            ctx.moveTo(ends[4][0], ends[4][1]);\n            ctx.lineTo(ends[5][0], ends[5][1]);\n            ctx.moveTo(ends[6][0], ends[6][1]);\n            ctx.lineTo(ends[7][0], ends[7][1]);\n        }\n    }\n});\n\n\nfunction createNormalBox(itemLayout, dataIndex, isInit) {\n    var ends = itemLayout.ends;\n    return new NormalBoxPath({\n        shape: {\n            points: isInit\n                ? transInit(ends, itemLayout)\n                : ends\n        },\n        z2: 100\n    });\n}\n\nfunction isNormalBoxClipped(clipArea, itemLayout) {\n    var clipped = true;\n    for (var i = 0; i < itemLayout.ends.length; i++) {\n        // If any point are in the region.\n        if (clipArea.contain(itemLayout.ends[i][0], itemLayout.ends[i][1])) {\n            clipped = false;\n            break;\n        }\n    }\n    return clipped;\n}\n\nfunction setBoxCommon(el, data, dataIndex, isSimpleBox) {\n    var itemModel = data.getItemModel(dataIndex);\n    var normalItemStyleModel = itemModel.getModel(NORMAL_ITEM_STYLE_PATH);\n    var color = data.getItemVisual(dataIndex, 'color');\n    var borderColor = data.getItemVisual(dataIndex, 'borderColor') || color;\n\n    // Color must be excluded.\n    // Because symbol provide setColor individually to set fill and stroke\n    var itemStyle = normalItemStyleModel.getItemStyle(SKIP_PROPS);\n\n    el.useStyle(itemStyle);\n    el.style.strokeNoScale = true;\n    el.style.fill = color;\n    el.style.stroke = borderColor;\n\n    el.__simpleBox = isSimpleBox;\n\n    var hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH).getItemStyle();\n    graphic.setHoverStyle(el, hoverStyle);\n}\n\nfunction transInit(points, itemLayout) {\n    return zrUtil.map(points, function (point) {\n        point = point.slice();\n        point[1] = itemLayout.initBaseline;\n        return point;\n    });\n}\n\n\n\nvar LargeBoxPath = Path.extend({\n\n    type: 'largeCandlestickBox',\n\n    shape: {},\n\n    buildPath: function (ctx, shape) {\n        // Drawing lines is more efficient than drawing\n        // a whole line or drawing rects.\n        var points = shape.points;\n        for (var i = 0; i < points.length;) {\n            if (this.__sign === points[i++]) {\n                var x = points[i++];\n                ctx.moveTo(x, points[i++]);\n                ctx.lineTo(x, points[i++]);\n            }\n            else {\n                i += 3;\n            }\n        }\n    }\n});\n\nfunction createLarge(seriesModel, group, incremental) {\n    var data = seriesModel.getData();\n    var largePoints = data.getLayout('largePoints');\n\n    var elP = new LargeBoxPath({\n        shape: {points: largePoints},\n        __sign: 1\n    });\n    group.add(elP);\n    var elN = new LargeBoxPath({\n        shape: {points: largePoints},\n        __sign: -1\n    });\n    group.add(elN);\n\n    setLargeStyle(1, elP, seriesModel, data);\n    setLargeStyle(-1, elN, seriesModel, data);\n\n    if (incremental) {\n        elP.incremental = true;\n        elN.incremental = true;\n    }\n}\n\nfunction setLargeStyle(sign, el, seriesModel, data) {\n    var suffix = sign > 0 ? 'P' : 'N';\n    var borderColor = data.getVisual('borderColor' + suffix)\n        || data.getVisual('color' + suffix);\n\n    // Color must be excluded.\n    // Because symbol provide setColor individually to set fill and stroke\n    var itemStyle = seriesModel.getModel(NORMAL_ITEM_STYLE_PATH).getItemStyle(SKIP_PROPS);\n\n    el.useStyle(itemStyle);\n    el.style.fill = null;\n    el.style.stroke = borderColor;\n    // No different\n    // el.style.lineWidth = .5;\n}\n\n\n\nexport default CandlestickView;\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default function (option) {\n    if (!option || !zrUtil.isArray(option.series)) {\n        return;\n    }\n\n    // Translate 'k' to 'candlestick'.\n    zrUtil.each(option.series, function (seriesItem) {\n        if (zrUtil.isObject(seriesItem) && seriesItem.type === 'k') {\n            seriesItem.type = 'candlestick';\n        }\n    });\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport createRenderPlanner from '../helper/createRenderPlanner';\n\nvar positiveBorderColorQuery = ['itemStyle', 'borderColor'];\nvar negativeBorderColorQuery = ['itemStyle', 'borderColor0'];\nvar positiveColorQuery = ['itemStyle', 'color'];\nvar negativeColorQuery = ['itemStyle', 'color0'];\n\nexport default {\n\n    seriesType: 'candlestick',\n\n    plan: createRenderPlanner(),\n\n    // For legend.\n    performRawSeries: true,\n\n    reset: function (seriesModel, ecModel) {\n\n        var data = seriesModel.getData();\n        var isLargeRender = seriesModel.pipelineContext.large;\n\n        data.setVisual({\n            legendSymbol: 'roundRect',\n            colorP: getColor(1, seriesModel),\n            colorN: getColor(-1, seriesModel),\n            borderColorP: getBorderColor(1, seriesModel),\n            borderColorN: getBorderColor(-1, seriesModel)\n        });\n\n        // Only visible series has each data be visual encoded\n        if (ecModel.isSeriesFiltered(seriesModel)) {\n            return;\n        }\n\n        return !isLargeRender && {progress: progress};\n\n\n        function progress(params, data) {\n            var dataIndex;\n            while ((dataIndex = params.next()) != null) {\n                var itemModel = data.getItemModel(dataIndex);\n                var sign = data.getItemLayout(dataIndex).sign;\n\n                data.setItemVisual(\n                    dataIndex,\n                    {\n                        color: getColor(sign, itemModel),\n                        borderColor: getBorderColor(sign, itemModel)\n                    }\n                );\n            }\n        }\n\n        function getColor(sign, model) {\n            return model.get(\n                sign > 0 ? positiveColorQuery : negativeColorQuery\n            );\n        }\n\n        function getBorderColor(sign, model) {\n            return model.get(\n                sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery\n            );\n        }\n\n    }\n\n};","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\n\nimport {subPixelOptimize} from '../../util/graphic';\nimport createRenderPlanner from '../helper/createRenderPlanner';\nimport {parsePercent} from '../../util/number';\nimport {retrieve2} from 'zrender/src/core/util';\n\nvar LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;\n\nexport default {\n\n    seriesType: 'candlestick',\n\n    plan: createRenderPlanner(),\n\n    reset: function (seriesModel) {\n\n        var coordSys = seriesModel.coordinateSystem;\n        var data = seriesModel.getData();\n        var candleWidth = calculateCandleWidth(seriesModel, data);\n        var cDimIdx = 0;\n        var vDimIdx = 1;\n        var coordDims = ['x', 'y'];\n        var cDim = data.mapDimension(coordDims[cDimIdx]);\n        var vDims = data.mapDimension(coordDims[vDimIdx], true);\n        var openDim = vDims[0];\n        var closeDim = vDims[1];\n        var lowestDim = vDims[2];\n        var highestDim = vDims[3];\n\n        data.setLayout({\n            candleWidth: candleWidth,\n            // The value is experimented visually.\n            isSimpleBox: candleWidth <= 1.3\n        });\n\n        if (cDim == null || vDims.length < 4) {\n            return;\n        }\n\n        return {\n            progress: seriesModel.pipelineContext.large\n                ? largeProgress : normalProgress\n        };\n\n        function normalProgress(params, data) {\n            var dataIndex;\n            while ((dataIndex = params.next()) != null) {\n\n                var axisDimVal = data.get(cDim, dataIndex);\n                var openVal = data.get(openDim, dataIndex);\n                var closeVal = data.get(closeDim, dataIndex);\n                var lowestVal = data.get(lowestDim, dataIndex);\n                var highestVal = data.get(highestDim, dataIndex);\n\n                var ocLow = Math.min(openVal, closeVal);\n                var ocHigh = Math.max(openVal, closeVal);\n\n                var ocLowPoint = getPoint(ocLow, axisDimVal);\n                var ocHighPoint = getPoint(ocHigh, axisDimVal);\n                var lowestPoint = getPoint(lowestVal, axisDimVal);\n                var highestPoint = getPoint(highestVal, axisDimVal);\n\n                var ends = [];\n                addBodyEnd(ends, ocHighPoint, 0);\n                addBodyEnd(ends, ocLowPoint, 1);\n\n                ends.push(\n                    subPixelOptimizePoint(highestPoint),\n                    subPixelOptimizePoint(ocHighPoint),\n                    subPixelOptimizePoint(lowestPoint),\n                    subPixelOptimizePoint(ocLowPoint)\n                );\n\n                data.setItemLayout(dataIndex, {\n                    sign: getSign(data, dataIndex, openVal, closeVal, closeDim),\n                    initBaseline: openVal > closeVal\n                        ? ocHighPoint[vDimIdx] : ocLowPoint[vDimIdx], // open point.\n                    ends: ends,\n                    brushRect: makeBrushRect(lowestVal, highestVal, axisDimVal)\n                });\n            }\n\n            function getPoint(val, axisDimVal) {\n                var p = [];\n                p[cDimIdx] = axisDimVal;\n                p[vDimIdx] = val;\n                return (isNaN(axisDimVal) || isNaN(val))\n                    ? [NaN, NaN]\n                    : coordSys.dataToPoint(p);\n            }\n\n            function addBodyEnd(ends, point, start) {\n                var point1 = point.slice();\n                var point2 = point.slice();\n\n                point1[cDimIdx] = subPixelOptimize(\n                    point1[cDimIdx] + candleWidth / 2, 1, false\n                );\n                point2[cDimIdx] = subPixelOptimize(\n                    point2[cDimIdx] - candleWidth / 2, 1, true\n                );\n\n                start\n                    ? ends.push(point1, point2)\n                    : ends.push(point2, point1);\n            }\n\n            function makeBrushRect(lowestVal, highestVal, axisDimVal) {\n                var pmin = getPoint(lowestVal, axisDimVal);\n                var pmax = getPoint(highestVal, axisDimVal);\n\n                pmin[cDimIdx] -= candleWidth / 2;\n                pmax[cDimIdx] -= candleWidth / 2;\n\n                return {\n                    x: pmin[0],\n                    y: pmin[1],\n                    width: vDimIdx ? candleWidth : pmax[0] - pmin[0],\n                    height: vDimIdx ? pmax[1] - pmin[1] : candleWidth\n                };\n            }\n\n            function subPixelOptimizePoint(point) {\n                point[cDimIdx] = subPixelOptimize(point[cDimIdx], 1);\n                return point;\n            }\n        }\n\n        function largeProgress(params, data) {\n            // Structure: [sign, x, yhigh, ylow, sign, x, yhigh, ylow, ...]\n            var points = new LargeArr(params.count * 4);\n            var offset = 0;\n            var point;\n            var tmpIn = [];\n            var tmpOut = [];\n            var dataIndex;\n\n            while ((dataIndex = params.next()) != null) {\n                var axisDimVal = data.get(cDim, dataIndex);\n                var openVal = data.get(openDim, dataIndex);\n                var closeVal = data.get(closeDim, dataIndex);\n                var lowestVal = data.get(lowestDim, dataIndex);\n                var highestVal = data.get(highestDim, dataIndex);\n\n                if (isNaN(axisDimVal) || isNaN(lowestVal) || isNaN(highestVal)) {\n                    points[offset++] = NaN;\n                    offset += 3;\n                    continue;\n                }\n\n                points[offset++] = getSign(data, dataIndex, openVal, closeVal, closeDim);\n\n                tmpIn[cDimIdx] = axisDimVal;\n\n                tmpIn[vDimIdx] = lowestVal;\n                point = coordSys.dataToPoint(tmpIn, null, tmpOut);\n                points[offset++] = point ? point[0] : NaN;\n                points[offset++] = point ? point[1] : NaN;\n                tmpIn[vDimIdx] = highestVal;\n                point = coordSys.dataToPoint(tmpIn, null, tmpOut);\n                points[offset++] = point ? point[1] : NaN;\n            }\n\n            data.setLayout('largePoints', points);\n        }\n    }\n};\n\nfunction getSign(data, dataIndex, openVal, closeVal, closeDim) {\n    var sign;\n    if (openVal > closeVal) {\n        sign = -1;\n    }\n    else if (openVal < closeVal) {\n        sign = 1;\n    }\n    else {\n        sign = dataIndex > 0\n            // If close === open, compare with close of last record\n            ? (data.get(closeDim, dataIndex - 1) <= closeVal ? 1 : -1)\n            // No record of previous, set to be positive\n            : 1;\n    }\n\n    return sign;\n}\n\nfunction calculateCandleWidth(seriesModel, data) {\n    var baseAxis = seriesModel.getBaseAxis();\n    var extent;\n\n    var bandWidth = baseAxis.type === 'category'\n        ? baseAxis.getBandWidth()\n        : (\n            extent = baseAxis.getExtent(),\n            Math.abs(extent[1] - extent[0]) / data.count()\n        );\n\n    var barMaxWidth = parsePercent(\n        retrieve2(seriesModel.get('barMaxWidth'), bandWidth),\n        bandWidth\n    );\n    var barMinWidth = parsePercent(\n        retrieve2(seriesModel.get('barMinWidth'), 1),\n        bandWidth\n    );\n    var barWidth = seriesModel.get('barWidth');\n\n    return barWidth != null\n        ? parsePercent(barWidth, bandWidth)\n        // Put max outer to ensure bar visible in spite of overlap.\n        : Math.max(Math.min(bandWidth / 2, barMaxWidth), barMinWidth);\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\nimport * as echarts from '../echarts';\n\nimport './candlestick/CandlestickSeries';\nimport './candlestick/CandlestickView';\nimport preprocessor from './candlestick/preprocessor';\n\nimport candlestickVisual from './candlestick/candlestickVisual';\nimport candlestickLayout from './candlestick/candlestickLayout';\n\necharts.registerPreprocessor(preprocessor);\necharts.registerVisual(candlestickVisual);\necharts.registerLayout(candlestickLayout);\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\nimport createListFromArray from '../helper/createListFromArray';\nimport SeriesModel from '../../model/Series';\n\nexport default SeriesModel.extend({\n\n    type: 'series.effectScatter',\n\n    dependencies: ['grid', 'polar'],\n\n    getInitialData: function (option, ecModel) {\n        return createListFromArray(this.getSource(), this);\n    },\n\n    brushSelector: 'point',\n\n    defaultOption: {\n        coordinateSystem: 'cartesian2d',\n        zlevel: 0,\n        z: 2,\n        legendHoverLink: true,\n\n        effectType: 'ripple',\n\n        progressive: 0,\n\n        // When to show the effect, option: 'render'|'emphasis'\n        showEffectOn: 'render',\n\n        // Ripple effect config\n        rippleEffect: {\n            period: 4,\n            // Scale of ripple\n            scale: 2.5,\n            // Brush type can be fill or stroke\n            brushType: 'fill'\n        },\n\n        // Cartesian coordinate system\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // Polar coordinate system\n        // polarIndex: 0,\n\n        // Geo coordinate system\n        // geoIndex: 0,\n\n        // symbol: null,        // 图形类型\n        symbolSize: 10          // 图形大小，半宽（半径）参数，当图形为方向或菱形则总宽度为symbolSize * 2\n        // symbolRotate: null,  // 图形旋转控制\n\n        // large: false,\n        // Available when large is true\n        // largeThreshold: 2000,\n\n        // itemStyle: {\n        //     opacity: 1\n        // }\n    }\n\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Symbol with ripple effect\n * @module echarts/chart/helper/EffectSymbol\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport {createSymbol} from '../../util/symbol';\nimport {Group} from '../../util/graphic';\nimport {parsePercent} from '../../util/number';\nimport SymbolClz from './Symbol';\n\nvar EFFECT_RIPPLE_NUMBER = 3;\n\nfunction normalizeSymbolSize(symbolSize) {\n    if (!zrUtil.isArray(symbolSize)) {\n        symbolSize = [+symbolSize, +symbolSize];\n    }\n    return symbolSize;\n}\n\nfunction updateRipplePath(rippleGroup, effectCfg) {\n    var color = effectCfg.rippleEffectColor || effectCfg.color;\n    rippleGroup.eachChild(function (ripplePath) {\n        ripplePath.attr({\n            z: effectCfg.z,\n            zlevel: effectCfg.zlevel,\n            style: {\n                stroke: effectCfg.brushType === 'stroke' ? color : null,\n                fill: effectCfg.brushType === 'fill' ? color : null\n            }\n        });\n    });\n}\n/**\n * @constructor\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @extends {module:zrender/graphic/Group}\n */\nfunction EffectSymbol(data, idx) {\n    Group.call(this);\n\n    var symbol = new SymbolClz(data, idx);\n    var rippleGroup = new Group();\n    this.add(symbol);\n    this.add(rippleGroup);\n\n    rippleGroup.beforeUpdate = function () {\n        this.attr(symbol.getScale());\n    };\n    this.updateData(data, idx);\n}\n\nvar effectSymbolProto = EffectSymbol.prototype;\n\neffectSymbolProto.stopEffectAnimation = function () {\n    this.childAt(1).removeAll();\n};\n\neffectSymbolProto.startEffectAnimation = function (effectCfg) {\n    var symbolType = effectCfg.symbolType;\n    var color = effectCfg.color;\n    var rippleGroup = this.childAt(1);\n\n    for (var i = 0; i < EFFECT_RIPPLE_NUMBER; i++) {\n        // If width/height are set too small (e.g., set to 1) on ios10\n        // and macOS Sierra, a circle stroke become a rect, no matter what\n        // the scale is set. So we set width/height as 2. See #4136.\n        var ripplePath = createSymbol(\n            symbolType, -1, -1, 2, 2, color\n        );\n        ripplePath.attr({\n            style: {\n                strokeNoScale: true\n            },\n            z2: 99,\n            silent: true,\n            scale: [0.5, 0.5]\n        });\n\n        var delay = -i / EFFECT_RIPPLE_NUMBER * effectCfg.period + effectCfg.effectOffset;\n        // TODO Configurable effectCfg.period\n        ripplePath.animate('', true)\n            .when(effectCfg.period, {\n                scale: [effectCfg.rippleScale / 2, effectCfg.rippleScale / 2]\n            })\n            .delay(delay)\n            .start();\n        ripplePath.animateStyle(true)\n            .when(effectCfg.period, {\n                opacity: 0\n            })\n            .delay(delay)\n            .start();\n\n        rippleGroup.add(ripplePath);\n    }\n\n    updateRipplePath(rippleGroup, effectCfg);\n};\n\n/**\n * Update effect symbol\n */\neffectSymbolProto.updateEffectAnimation = function (effectCfg) {\n    var oldEffectCfg = this._effectCfg;\n    var rippleGroup = this.childAt(1);\n\n    // Must reinitialize effect if following configuration changed\n    var DIFFICULT_PROPS = ['symbolType', 'period', 'rippleScale'];\n    for (var i = 0; i < DIFFICULT_PROPS.length; i++) {\n        var propName = DIFFICULT_PROPS[i];\n        if (oldEffectCfg[propName] !== effectCfg[propName]) {\n            this.stopEffectAnimation();\n            this.startEffectAnimation(effectCfg);\n            return;\n        }\n    }\n\n    updateRipplePath(rippleGroup, effectCfg);\n};\n\n/**\n * Highlight symbol\n */\neffectSymbolProto.highlight = function () {\n    this.trigger('emphasis');\n};\n\n/**\n * Downplay symbol\n */\neffectSymbolProto.downplay = function () {\n    this.trigger('normal');\n};\n\n/**\n * Update symbol properties\n * @param  {module:echarts/data/List} data\n * @param  {number} idx\n */\neffectSymbolProto.updateData = function (data, idx) {\n    var seriesModel = data.hostModel;\n\n    this.childAt(0).updateData(data, idx);\n\n    var rippleGroup = this.childAt(1);\n    var itemModel = data.getItemModel(idx);\n    var symbolType = data.getItemVisual(idx, 'symbol');\n    var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize'));\n    var color = data.getItemVisual(idx, 'color');\n\n    rippleGroup.attr('scale', symbolSize);\n\n    rippleGroup.traverse(function (ripplePath) {\n        ripplePath.attr({\n            fill: color\n        });\n    });\n\n    var symbolOffset = itemModel.getShallow('symbolOffset');\n    if (symbolOffset) {\n        var pos = rippleGroup.position;\n        pos[0] = parsePercent(symbolOffset[0], symbolSize[0]);\n        pos[1] = parsePercent(symbolOffset[1], symbolSize[1]);\n    }\n    rippleGroup.rotation = (itemModel.getShallow('symbolRotate') || 0) * Math.PI / 180 || 0;\n\n    var effectCfg = {};\n\n    effectCfg.showEffectOn = seriesModel.get('showEffectOn');\n    effectCfg.rippleScale = itemModel.get('rippleEffect.scale');\n    effectCfg.brushType = itemModel.get('rippleEffect.brushType');\n    effectCfg.period = itemModel.get('rippleEffect.period') * 1000;\n    effectCfg.effectOffset = idx / data.count();\n    effectCfg.z = itemModel.getShallow('z') || 0;\n    effectCfg.zlevel = itemModel.getShallow('zlevel') || 0;\n    effectCfg.symbolType = symbolType;\n    effectCfg.color = color;\n    effectCfg.rippleEffectColor = itemModel.get('rippleEffect.color');\n\n    this.off('mouseover').off('mouseout').off('emphasis').off('normal');\n\n    if (effectCfg.showEffectOn === 'render') {\n        this._effectCfg\n            ? this.updateEffectAnimation(effectCfg)\n            : this.startEffectAnimation(effectCfg);\n\n        this._effectCfg = effectCfg;\n    }\n    else {\n        // Not keep old effect config\n        this._effectCfg = null;\n\n        this.stopEffectAnimation();\n        var symbol = this.childAt(0);\n        var onEmphasis = function () {\n            symbol.highlight();\n            if (effectCfg.showEffectOn !== 'render') {\n                this.startEffectAnimation(effectCfg);\n            }\n        };\n        var onNormal = function () {\n            symbol.downplay();\n            if (effectCfg.showEffectOn !== 'render') {\n                this.stopEffectAnimation();\n            }\n        };\n        this.on('mouseover', onEmphasis, this)\n            .on('mouseout', onNormal, this)\n            .on('emphasis', onEmphasis, this)\n            .on('normal', onNormal, this);\n    }\n\n    this._effectCfg = effectCfg;\n};\n\neffectSymbolProto.fadeOut = function (cb) {\n    this.off('mouseover').off('mouseout').off('emphasis').off('normal');\n    cb && cb();\n};\n\nzrUtil.inherits(EffectSymbol, Group);\n\nexport default EffectSymbol;","/*\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\nimport * as echarts from '../../echarts';\nimport SymbolDraw from '../helper/SymbolDraw';\nimport EffectSymbol from '../helper/EffectSymbol';\nimport * as matrix from 'zrender/src/core/matrix';\n\nimport pointsLayout from '../../layout/points';\n\nexport default echarts.extendChartView({\n\n    type: 'effectScatter',\n\n    init: function () {\n        this._symbolDraw = new SymbolDraw(EffectSymbol);\n    },\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        var effectSymbolDraw = this._symbolDraw;\n        effectSymbolDraw.updateData(data);\n        this.group.add(effectSymbolDraw.group);\n    },\n\n    updateTransform: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n\n        this.group.dirty();\n\n        var res = pointsLayout().reset(seriesModel);\n        if (res.progress) {\n            res.progress({ start: 0, end: data.count() }, data);\n        }\n\n        this._symbolDraw.updateLayout(data);\n    },\n\n    _updateGroupTransform: function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys && coordSys.getRoamTransform) {\n            this.group.transform = matrix.clone(coordSys.getRoamTransform());\n            this.group.decomposeTransform();\n        }\n    },\n\n    remove: function (ecModel, api) {\n        this._symbolDraw && this._symbolDraw.remove(api);\n    },\n\n    dispose: function () {}\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\nimport * as echarts from '../echarts';\n\nimport './effectScatter/EffectScatterSeries';\nimport './effectScatter/EffectScatterView';\n\nimport visualSymbol from '../visual/symbol';\nimport layoutPoints from '../layout/points';\n\necharts.registerVisual(visualSymbol('effectScatter', 'circle'));\necharts.registerLayout(layoutPoints('effectScatter'));","/*\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 */\n\nimport {__DEV__} from '../../config';\nimport SeriesModel from '../../model/Series';\nimport List from '../../data/List';\nimport { concatArray, mergeAll, map } from 'zrender/src/core/util';\nimport {encodeHTML} from '../../util/format';\nimport CoordinateSystem from '../../CoordinateSystem';\n\nvar Uint32Arr = typeof Uint32Array === 'undefined' ? Array : Uint32Array;\nvar Float64Arr = typeof Float64Array === 'undefined' ? Array : Float64Array;\n\nfunction compatEc2(seriesOpt) {\n    var data = seriesOpt.data;\n    if (data && data[0] && data[0][0] && data[0][0].coord) {\n        if (__DEV__) {\n            console.warn('Lines data configuration has been changed to'\n                + ' { coords:[[1,2],[2,3]] }');\n        }\n        seriesOpt.data = map(data, function (itemOpt) {\n            var coords = [\n                itemOpt[0].coord, itemOpt[1].coord\n            ];\n            var target = {\n                coords: coords\n            };\n            if (itemOpt[0].name) {\n                target.fromName = itemOpt[0].name;\n            }\n            if (itemOpt[1].name) {\n                target.toName = itemOpt[1].name;\n            }\n            return mergeAll([target, itemOpt[0], itemOpt[1]]);\n        });\n    }\n}\n\nvar LinesSeries = SeriesModel.extend({\n\n    type: 'series.lines',\n\n    dependencies: ['grid', 'polar'],\n\n    visualColorAccessPath: 'lineStyle.color',\n\n    init: function (option) {\n        // The input data may be null/undefined.\n        option.data = option.data || [];\n\n        // Not using preprocessor because mergeOption may not have series.type\n        compatEc2(option);\n\n        var result = this._processFlatCoordsArray(option.data);\n        this._flatCoords = result.flatCoords;\n        this._flatCoordsOffset = result.flatCoordsOffset;\n        if (result.flatCoords) {\n            option.data = new Float32Array(result.count);\n        }\n\n        LinesSeries.superApply(this, 'init', arguments);\n    },\n\n    mergeOption: function (option) {\n        // The input data may be null/undefined.\n        option.data = option.data || [];\n\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            this._flatCoords = result.flatCoords;\n            this._flatCoordsOffset = result.flatCoordsOffset;\n            if (result.flatCoords) {\n                option.data = new Float32Array(result.count);\n            }\n        }\n\n        LinesSeries.superApply(this, 'mergeOption', arguments);\n    },\n\n    appendData: function (params) {\n        var result = this._processFlatCoordsArray(params.data);\n        if (result.flatCoords) {\n            if (!this._flatCoords) {\n                this._flatCoords = result.flatCoords;\n                this._flatCoordsOffset = result.flatCoordsOffset;\n            }\n            else {\n                this._flatCoords = concatArray(this._flatCoords, result.flatCoords);\n                this._flatCoordsOffset = concatArray(this._flatCoordsOffset, result.flatCoordsOffset);\n            }\n            params.data = new Float32Array(result.count);\n        }\n\n        this.getRawData().appendData(params.data);\n    },\n\n    _getCoordsFromItemModel: function (idx) {\n        var itemModel = this.getData().getItemModel(idx);\n        var coords = (itemModel.option instanceof Array)\n            ? itemModel.option : itemModel.getShallow('coords');\n\n        if (__DEV__) {\n            if (!(coords instanceof Array && coords.length > 0 && coords[0] instanceof Array)) {\n                throw new Error(\n                    'Invalid coords ' + JSON.stringify(coords) + '. Lines must have 2d coords array in data item.'\n                );\n            }\n        }\n        return coords;\n    },\n\n    getLineCoordsCount: function (idx) {\n        if (this._flatCoordsOffset) {\n            return this._flatCoordsOffset[idx * 2 + 1];\n        }\n        else {\n            return this._getCoordsFromItemModel(idx).length;\n        }\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            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            return len;\n        }\n        else {\n            var coords = this._getCoordsFromItemModel(idx);\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            return coords.length;\n        }\n    },\n\n    _processFlatCoordsArray: function (data) {\n        var startOffset = 0;\n        if (this._flatCoords) {\n            startOffset = this._flatCoords.length;\n        }\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        if (typeof data[0] === 'number') {\n            var len = data.length;\n            // Store offset and len of each segment\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            for (var i = 0; i < len;) {\n                dataCount++;\n                var count = data[i++];\n                // Offset\n                coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor + startOffset;\n                // Len\n                coordsOffsetAndLenStorage[offsetCursor++] = count;\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                        if (__DEV__) {\n                            throw new Error('Invalid data format.');\n                        }\n                    }\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\n    getInitialData: function (option, ecModel) {\n        if (__DEV__) {\n            var CoordSys = CoordinateSystem.get(option.coordinateSystem);\n            if (!CoordSys) {\n                throw new Error('Unkown coordinate system ' + option.coordinateSystem);\n            }\n        }\n\n        var lineData = new List(['value'], this);\n        lineData.hasItemOption = false;\n\n        lineData.initData(option.data, [], function (dataItem, dimName, dataIndex, dimIndex) {\n            // dataItem is simply coords\n            if (dataItem instanceof Array) {\n                return NaN;\n            }\n            else {\n                lineData.hasItemOption = true;\n                var value = dataItem.value;\n                if (value != null) {\n                    return value instanceof Array ? value[dimIndex] : value;\n                }\n            }\n        });\n\n        return lineData;\n    },\n\n    formatTooltip: function (dataIndex) {\n        var data = this.getData();\n        var itemModel = data.getItemModel(dataIndex);\n        var name = itemModel.get('name');\n        if (name) {\n            return name;\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\n        return encodeHTML(html.join(' > '));\n    },\n\n    preventIncremental: function () {\n        return !!this.get('effect.show');\n    },\n\n    getProgressive: function () {\n        var progressive = this.option.progressive;\n        if (progressive == null) {\n            return this.option.large ? 1e4 : this.get('progressive');\n        }\n        return progressive;\n    },\n\n    getProgressiveThreshold: function () {\n        var progressiveThreshold = this.option.progressiveThreshold;\n        if (progressiveThreshold == null) {\n            return this.option.large ? 2e4 : this.get('progressiveThreshold');\n        }\n        return progressiveThreshold;\n    },\n\n    defaultOption: {\n        coordinateSystem: 'geo',\n        zlevel: 0,\n        z: 2,\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n        // Cartesian coordinate system\n        xAxisIndex: 0,\n        yAxisIndex: 0,\n\n        symbol: ['none', 'none'],\n        symbolSize: [10, 10],\n        // Geo coordinate system\n        geoIndex: 0,\n\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\n            // Same with lineStyle.color\n            // color\n        },\n\n        large: false,\n        // Available when large is true\n        largeThreshold: 2000,\n\n        // If lines are polyline\n        // polyline not support curveness, label, animation\n        polyline: false,\n\n        // If clip the overflow.\n        // Available when coordinateSystem is cartesian or polar.\n        clip: true,\n\n        label: {\n            show: false,\n            position: 'end'\n            // distance: 5,\n            // formatter: 标签文本格式器，同Tooltip.formatter，不支持异步回调\n        },\n\n        lineStyle: {\n            opacity: 0.5\n        }\n    }\n});\n\nexport default LinesSeries;","/*\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 * Provide effect for line\n * @module echarts/chart/helper/EffectLine\n */\n\nimport * as graphic from '../../util/graphic';\nimport Line from './Line';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {createSymbol} from '../../util/symbol';\nimport * as vec2 from 'zrender/src/core/vector';\nimport * as curveUtil from 'zrender/src/core/curve';\n\n/**\n * @constructor\n * @extends {module:zrender/graphic/Group}\n * @alias {module:echarts/chart/helper/Line}\n */\nfunction EffectLine(lineData, idx, seriesScope) {\n    graphic.Group.call(this);\n\n    this.add(this.createLine(lineData, idx, seriesScope));\n\n    this._updateEffectSymbol(lineData, idx);\n}\n\nvar effectLineProto = EffectLine.prototype;\n\neffectLineProto.createLine = function (lineData, idx, seriesScope) {\n    return new Line(lineData, idx, seriesScope);\n};\n\neffectLineProto._updateEffectSymbol = function (lineData, idx) {\n    var itemModel = lineData.getItemModel(idx);\n    var effectModel = itemModel.getModel('effect');\n    var size = effectModel.get('symbolSize');\n    var symbolType = effectModel.get('symbol');\n    if (!zrUtil.isArray(size)) {\n        size = [size, size];\n    }\n    var color = effectModel.get('color') || lineData.getItemVisual(idx, 'color');\n    var symbol = this.childAt(1);\n\n    if (this._symbolType !== symbolType) {\n        // Remove previous\n        this.remove(symbol);\n\n        symbol = createSymbol(\n            symbolType, -0.5, -0.5, 1, 1, color\n        );\n        symbol.z2 = 100;\n        symbol.culling = true;\n\n        this.add(symbol);\n    }\n\n    // Symbol may be removed if loop is false\n    if (!symbol) {\n        return;\n    }\n\n    // Shadow color is same with color in default\n    symbol.setStyle('shadowColor', color);\n    symbol.setStyle(effectModel.getItemStyle(['color']));\n\n    symbol.attr('scale', size);\n\n    symbol.setColor(color);\n    symbol.attr('scale', size);\n\n    this._symbolType = symbolType;\n\n    this._updateEffectAnimation(lineData, effectModel, idx);\n};\n\neffectLineProto._updateEffectAnimation = function (lineData, effectModel, idx) {\n\n    var symbol = this.childAt(1);\n    if (!symbol) {\n        return;\n    }\n\n    var self = this;\n\n    var points = lineData.getItemLayout(idx);\n\n    var period = effectModel.get('period') * 1000;\n    var loop = effectModel.get('loop');\n    var constantSpeed = effectModel.get('constantSpeed');\n    var delayExpr = zrUtil.retrieve(effectModel.get('delay'), function (idx) {\n        return idx / lineData.count() * period / 3;\n    });\n    var isDelayFunc = typeof delayExpr === 'function';\n\n    // Ignore when updating\n    symbol.ignore = true;\n\n    this.updateAnimationPoints(symbol, points);\n\n    if (constantSpeed > 0) {\n        period = this.getLineLength(symbol) / constantSpeed * 1000;\n    }\n\n    if (period !== this._period || loop !== this._loop) {\n\n        symbol.stopAnimation();\n\n        var delay = delayExpr;\n        if (isDelayFunc) {\n            delay = delayExpr(idx);\n        }\n        if (symbol.__t > 0) {\n            delay = -period * symbol.__t;\n        }\n        symbol.__t = 0;\n        var animator = symbol.animate('', loop)\n            .when(period, {\n                __t: 1\n            })\n            .delay(delay)\n            .during(function () {\n                self.updateSymbolPosition(symbol);\n            });\n        if (!loop) {\n            animator.done(function () {\n                self.remove(symbol);\n            });\n        }\n        animator.start();\n    }\n\n    this._period = period;\n    this._loop = loop;\n};\n\neffectLineProto.getLineLength = function (symbol) {\n    // Not so accurate\n    return (vec2.dist(symbol.__p1, symbol.__cp1)\n        + vec2.dist(symbol.__cp1, symbol.__p2));\n};\n\neffectLineProto.updateAnimationPoints = function (symbol, points) {\n    symbol.__p1 = points[0];\n    symbol.__p2 = points[1];\n    symbol.__cp1 = points[2] || [\n        (points[0][0] + points[1][0]) / 2,\n        (points[0][1] + points[1][1]) / 2\n    ];\n};\n\neffectLineProto.updateData = function (lineData, idx, seriesScope) {\n    this.childAt(0).updateData(lineData, idx, seriesScope);\n    this._updateEffectSymbol(lineData, idx);\n};\n\neffectLineProto.updateSymbolPosition = function (symbol) {\n    var p1 = symbol.__p1;\n    var p2 = symbol.__p2;\n    var cp1 = symbol.__cp1;\n    var t = symbol.__t;\n    var pos = symbol.position;\n    var quadraticAt = curveUtil.quadraticAt;\n    var quadraticDerivativeAt = curveUtil.quadraticDerivativeAt;\n    pos[0] = quadraticAt(p1[0], cp1[0], p2[0], t);\n    pos[1] = quadraticAt(p1[1], cp1[1], p2[1], t);\n\n    // Tangent\n    var tx = quadraticDerivativeAt(p1[0], cp1[0], p2[0], t);\n    var ty = quadraticDerivativeAt(p1[1], cp1[1], p2[1], t);\n\n    symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;\n\n    symbol.ignore = false;\n};\n\n\neffectLineProto.updateLayout = function (lineData, idx) {\n    this.childAt(0).updateLayout(lineData, idx);\n\n    var effectModel = lineData.getItemModel(idx).getModel('effect');\n    this._updateEffectAnimation(lineData, effectModel, idx);\n};\n\nzrUtil.inherits(EffectLine, graphic.Group);\n\nexport default EffectLine;","/*\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 * @module echarts/chart/helper/Line\n */\n\nimport * as graphic from '../../util/graphic';\nimport * as zrUtil from 'zrender/src/core/util';\n\n/**\n * @constructor\n * @extends {module:zrender/graphic/Group}\n * @alias {module:echarts/chart/helper/Polyline}\n */\nfunction Polyline(lineData, idx, seriesScope) {\n    graphic.Group.call(this);\n\n    this._createPolyline(lineData, idx, seriesScope);\n}\n\nvar polylineProto = Polyline.prototype;\n\npolylineProto._createPolyline = function (lineData, idx, seriesScope) {\n    // var seriesModel = lineData.hostModel;\n    var points = lineData.getItemLayout(idx);\n\n    var line = new graphic.Polyline({\n        shape: {\n            points: points\n        }\n    });\n\n    this.add(line);\n\n    this._updateCommonStl(lineData, idx, seriesScope);\n};\n\npolylineProto.updateData = function (lineData, idx, seriesScope) {\n    var seriesModel = lineData.hostModel;\n\n    var line = this.childAt(0);\n    var target = {\n        shape: {\n            points: lineData.getItemLayout(idx)\n        }\n    };\n    graphic.updateProps(line, target, seriesModel, idx);\n\n    this._updateCommonStl(lineData, idx, seriesScope);\n};\n\npolylineProto._updateCommonStl = function (lineData, idx, seriesScope) {\n    var line = this.childAt(0);\n    var itemModel = lineData.getItemModel(idx);\n\n    var visualColor = lineData.getItemVisual(idx, 'color');\n\n    var lineStyle = seriesScope && seriesScope.lineStyle;\n    var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;\n\n    if (!seriesScope || lineData.hasItemOption) {\n        lineStyle = itemModel.getModel('lineStyle').getLineStyle();\n        hoverLineStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle();\n    }\n    line.useStyle(zrUtil.defaults(\n        {\n            strokeNoScale: true,\n            fill: 'none',\n            stroke: visualColor\n        },\n        lineStyle\n    ));\n    line.hoverStyle = hoverLineStyle;\n\n    graphic.setHoverStyle(this);\n};\n\npolylineProto.updateLayout = function (lineData, idx) {\n    var polyline = this.childAt(0);\n    polyline.setShape('points', lineData.getItemLayout(idx));\n};\n\nzrUtil.inherits(Polyline, graphic.Group);\n\nexport default Polyline;","/*\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 * Provide effect for line\n * @module echarts/chart/helper/EffectLine\n */\n\nimport Polyline from './Polyline';\nimport * as zrUtil from 'zrender/src/core/util';\nimport EffectLine from './EffectLine';\nimport * as vec2 from 'zrender/src/core/vector';\n\n/**\n * @constructor\n * @extends {module:echarts/chart/helper/EffectLine}\n * @alias {module:echarts/chart/helper/Polyline}\n */\nfunction EffectPolyline(lineData, idx, seriesScope) {\n    EffectLine.call(this, lineData, idx, seriesScope);\n    this._lastFrame = 0;\n    this._lastFramePercent = 0;\n}\n\nvar effectPolylineProto = EffectPolyline.prototype;\n\n// Overwrite\neffectPolylineProto.createLine = function (lineData, idx, seriesScope) {\n    return new Polyline(lineData, idx, seriesScope);\n};\n\n// Overwrite\neffectPolylineProto.updateAnimationPoints = function (symbol, points) {\n    this._points = points;\n    var accLenArr = [0];\n    var len = 0;\n    for (var i = 1; i < points.length; i++) {\n        var p1 = points[i - 1];\n        var p2 = points[i];\n        len += vec2.dist(p1, p2);\n        accLenArr.push(len);\n    }\n    if (len === 0) {\n        return;\n    }\n\n    for (var i = 0; i < accLenArr.length; i++) {\n        accLenArr[i] /= len;\n    }\n    this._offsets = accLenArr;\n    this._length = len;\n};\n\n// Overwrite\neffectPolylineProto.getLineLength = function (symbol) {\n    return this._length;\n};\n\n// Overwrite\neffectPolylineProto.updateSymbolPosition = function (symbol) {\n    var t = symbol.__t;\n    var points = this._points;\n    var offsets = this._offsets;\n    var len = points.length;\n\n    if (!offsets) {\n        // Has length 0\n        return;\n    }\n\n    var lastFrame = this._lastFrame;\n    var frame;\n\n    if (t < this._lastFramePercent) {\n        // Start from the next frame\n        // PENDING start from lastFrame ?\n        var start = Math.min(lastFrame + 1, len - 1);\n        for (frame = start; frame >= 0; frame--) {\n            if (offsets[frame] <= t) {\n                break;\n            }\n        }\n        // PENDING really need to do this ?\n        frame = Math.min(frame, len - 2);\n    }\n    else {\n        for (var frame = lastFrame; frame < len; frame++) {\n            if (offsets[frame] > t) {\n                break;\n            }\n        }\n        frame = Math.min(frame - 1, len - 2);\n    }\n\n    vec2.lerp(\n        symbol.position, points[frame], points[frame + 1],\n        (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame])\n    );\n\n    var tx = points[frame + 1][0] - points[frame][0];\n    var ty = points[frame + 1][1] - points[frame][1];\n    symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;\n\n    this._lastFrame = frame;\n    this._lastFramePercent = t;\n\n    symbol.ignore = false;\n};\n\nzrUtil.inherits(EffectPolyline, EffectLine);\n\nexport default EffectPolyline;","/*\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// TODO Batch by color\n\nimport * as graphic from '../../util/graphic';\nimport IncrementalDisplayable from 'zrender/src/graphic/IncrementalDisplayable';\nimport * as lineContain from 'zrender/src/contain/line';\nimport * as quadraticContain from 'zrender/src/contain/quadratic';\n\nvar LargeLineShape = graphic.extendShape({\n\n    shape: {\n        polyline: false,\n        curveness: 0,\n        segs: []\n    },\n\n    buildPath: function (path, shape) {\n        var segs = shape.segs;\n        var curveness = shape.curveness;\n\n        if (shape.polyline) {\n            for (var i = 0; i < segs.length;) {\n                var count = segs[i++];\n                if (count > 0) {\n                    path.moveTo(segs[i++], segs[i++]);\n                    for (var k = 1; k < count; k++) {\n                        path.lineTo(segs[i++], segs[i++]);\n                    }\n                }\n            }\n        }\n        else {\n            for (var i = 0; i < segs.length;) {\n                var x0 = segs[i++];\n                var y0 = segs[i++];\n                var x1 = segs[i++];\n                var y1 = segs[i++];\n                path.moveTo(x0, y0);\n                if (curveness > 0) {\n                    var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness;\n                    var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness;\n                    path.quadraticCurveTo(x2, y2, x1, y1);\n                }\n                else {\n                    path.lineTo(x1, y1);\n                }\n            }\n        }\n    },\n\n    findDataIndex: function (x, y) {\n\n        var shape = this.shape;\n        var segs = shape.segs;\n        var curveness = shape.curveness;\n\n        if (shape.polyline) {\n            var dataIndex = 0;\n            for (var i = 0; i < segs.length;) {\n                var count = segs[i++];\n                if (count > 0) {\n                    var x0 = segs[i++];\n                    var y0 = segs[i++];\n                    for (var k = 1; k < count; k++) {\n                        var x1 = segs[i++];\n                        var y1 = segs[i++];\n                        if (lineContain.containStroke(x0, y0, x1, y1)) {\n                            return dataIndex;\n                        }\n                    }\n                }\n\n                dataIndex++;\n            }\n        }\n        else {\n            var dataIndex = 0;\n            for (var i = 0; i < segs.length;) {\n                var x0 = segs[i++];\n                var y0 = segs[i++];\n                var x1 = segs[i++];\n                var y1 = segs[i++];\n                if (curveness > 0) {\n                    var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness;\n                    var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness;\n\n                    if (quadraticContain.containStroke(x0, y0, x2, y2, x1, y1)) {\n                        return dataIndex;\n                    }\n                }\n                else {\n                    if (lineContain.containStroke(x0, y0, x1, y1)) {\n                        return dataIndex;\n                    }\n                }\n\n                dataIndex++;\n            }\n        }\n\n        return -1;\n    }\n});\n\nfunction LargeLineDraw() {\n    this.group = new graphic.Group();\n}\n\nvar largeLineProto = LargeLineDraw.prototype;\n\nlargeLineProto.isPersistent = function () {\n    return !this._incremental;\n};\n\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n */\nlargeLineProto.updateData = function (data) {\n    this.group.removeAll();\n\n    var lineEl = new LargeLineShape({\n        rectHover: true,\n        cursor: 'default'\n    });\n    lineEl.setShape({\n        segs: data.getLayout('linesPoints')\n    });\n\n    this._setCommon(lineEl, data);\n\n    // Add back\n    this.group.add(lineEl);\n\n    this._incremental = null;\n};\n\n/**\n * @override\n */\nlargeLineProto.incrementalPrepareUpdate = function (data) {\n    this.group.removeAll();\n\n    this._clearIncremental();\n\n    if (data.count() > 5e5) {\n        if (!this._incremental) {\n            this._incremental = new IncrementalDisplayable({\n                silent: true\n            });\n        }\n        this.group.add(this._incremental);\n    }\n    else {\n        this._incremental = null;\n    }\n};\n\n/**\n * @override\n */\nlargeLineProto.incrementalUpdate = function (taskParams, data) {\n    var lineEl = new LargeLineShape();\n    lineEl.setShape({\n        segs: data.getLayout('linesPoints')\n    });\n\n    this._setCommon(lineEl, data, !!this._incremental);\n\n    if (!this._incremental) {\n        lineEl.rectHover = true;\n        lineEl.cursor = 'default';\n        lineEl.__startIndex = taskParams.start;\n        this.group.add(lineEl);\n    }\n    else {\n        this._incremental.addDisplayable(lineEl, true);\n    }\n};\n\n/**\n * @override\n */\nlargeLineProto.remove = function () {\n    this._clearIncremental();\n    this._incremental = null;\n    this.group.removeAll();\n};\n\nlargeLineProto._setCommon = function (lineEl, data, isIncremental) {\n    var hostModel = data.hostModel;\n\n    lineEl.setShape({\n        polyline: hostModel.get('polyline'),\n        curveness: hostModel.get('lineStyle.curveness')\n    });\n\n    lineEl.useStyle(\n        hostModel.getModel('lineStyle').getLineStyle()\n    );\n    lineEl.style.strokeNoScale = true;\n\n    var visualColor = data.getVisual('color');\n    if (visualColor) {\n        lineEl.setStyle('stroke', visualColor);\n    }\n    lineEl.setStyle('fill');\n\n    if (!isIncremental) {\n        // Enable tooltip\n        // PENDING May have performance issue when path is extremely large\n        lineEl.seriesIndex = hostModel.seriesIndex;\n        lineEl.on('mousemove', function (e) {\n            lineEl.dataIndex = null;\n            var dataIndex = lineEl.findDataIndex(e.offsetX, e.offsetY);\n            if (dataIndex > 0) {\n                // Provide dataIndex for tooltip\n                lineEl.dataIndex = dataIndex + lineEl.__startIndex;\n            }\n        });\n    }\n};\n\nlargeLineProto._clearIncremental = function () {\n    var incremental = this._incremental;\n    if (incremental) {\n        incremental.clearDisplaybles();\n    }\n};\n\nexport default LargeLineDraw;","/*\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 */\n\nimport createRenderPlanner from '../helper/createRenderPlanner';\n\nexport default {\n    seriesType: 'lines',\n\n    plan: createRenderPlanner(),\n\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            if (isLarge) {\n                var points;\n                var segCount = params.end - params.start;\n                if (isPolyline) {\n                    var totalCoordsCount = 0;\n                    for (var i = params.start; i < params.end; i++) {\n                        totalCoordsCount += seriesModel.getLineCoordsCount(i);\n                    }\n                    points = new Float32Array(segCount + totalCoordsCount * 2);\n                }\n                else {\n                    points = new Float32Array(segCount * 4);\n                }\n\n                var offset = 0;\n                var pt = [];\n                for (var i = params.start; i < params.end; i++) {\n                    var len = seriesModel.getLineCoords(i, lineCoords);\n                    if (isPolyline) {\n                        points[offset++] = len;\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            }\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\n                    var pts = [];\n                    if (isPolyline) {\n                        for (var j = 0; j < len; j++) {\n                            pts.push(coordSys.dataToPoint(lineCoords[j]));\n                        }\n                    }\n                    else {\n                        pts[0] = coordSys.dataToPoint(lineCoords[0]);\n                        pts[1] = coordSys.dataToPoint(lineCoords[1]);\n\n                        var curveness = itemModel.get('lineStyle.curveness');\n                        if (+curveness) {\n                            pts[2] = [\n                                (pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness,\n                                (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 { progress: progress };\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\nimport {__DEV__} from '../../config';\nimport * as echarts from '../../echarts';\nimport LineDraw from '../helper/LineDraw';\nimport EffectLine from '../helper/EffectLine';\nimport Line from '../helper/Line';\nimport Polyline from '../helper/Polyline';\nimport EffectPolyline from '../helper/EffectPolyline';\nimport LargeLineDraw from '../helper/LargeLineDraw';\nimport linesLayout from './linesLayout';\nimport {createClipPath} from '../helper/createClipPathFromCoordSys';\n\nexport default echarts.extendChartView({\n\n    type: 'lines',\n\n    init: function () {},\n\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\n        var zr = api.getZr();\n        // Avoid the drag cause ghost shadow\n        // FIXME Better way ?\n        // SVG doesn't support\n        var isSvg = zr.painter.getType() === 'svg';\n        if (!isSvg) {\n            zr.painter.getLayer(zlevel).clear(true);\n        }\n        // Config layer with motion blur\n        if (this._lastZlevel != null && !isSvg) {\n            zr.configLayer(this._lastZlevel, {\n                motionBlur: false\n            });\n        }\n        if (this._showEffect(seriesModel) && trailLength) {\n            if (__DEV__) {\n                var notInIndividual = false;\n                ecModel.eachSeries(function (otherSeriesModel) {\n                    if (otherSeriesModel !== seriesModel && otherSeriesModel.get('zlevel') === zlevel) {\n                        notInIndividual = true;\n                    }\n                });\n                notInIndividual && console.warn('Lines with trail effect should have an individual zlevel');\n            }\n\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\n        var clipPath = seriesModel.get('clip', true) && createClipPath(\n            seriesModel.coordinateSystem, false, seriesModel\n        );\n        if (clipPath) {\n            this.group.setClipPath(clipPath);\n        }\n        else {\n            this.group.removeClipPath();\n        }\n\n        this._lastZlevel = zlevel;\n\n        this._finished = true;\n    },\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\n    incrementalRender: function (taskParams, seriesModel, ecModel) {\n        this._lineDraw.incrementalUpdate(taskParams, seriesModel.getData());\n\n        this._finished = taskParams.end === seriesModel.getData().count();\n    },\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        }\n        else {\n            // TODO Use same logic with ScatterView.\n            // Manually update layout\n            var res = linesLayout.reset(seriesModel);\n            if (res.progress) {\n                res.progress({ start: 0, end: data.count() }, data);\n            }\n            this._lineDraw.updateLayout();\n            this._clearLayer(api);\n        }\n    },\n\n    _updateLineDraw: function (data, seriesModel) {\n        var lineDraw = this._lineDraw;\n        var hasEffect = this._showEffect(seriesModel);\n        var isPolyline = !!seriesModel.get('polyline');\n        var pipelineContext = seriesModel.pipelineContext;\n        var isLargeDraw = pipelineContext.large;\n\n        if (__DEV__) {\n            if (hasEffect && isLargeDraw) {\n                console.warn('Large lines not support effect');\n            }\n        }\n        if (!lineDraw\n            || hasEffect !== this._hasEffet\n            || isPolyline !== this._isPolyline\n            || isLargeDraw !== this._isLargeDraw\n        ) {\n            if (lineDraw) {\n                lineDraw.remove();\n            }\n            lineDraw = this._lineDraw = isLargeDraw\n                ? new LargeLineDraw()\n                : new LineDraw(\n                    isPolyline\n                        ? (hasEffect ? EffectPolyline : Polyline)\n                        : (hasEffect ? EffectLine : Line)\n                );\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\n        return lineDraw;\n    },\n\n    _showEffect: function (seriesModel) {\n        return !!seriesModel.get('effect.show');\n    },\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        if (!isSvg && this._lastZlevel != null) {\n            zr.painter.getLayer(this._lastZlevel).clear(true);\n        }\n    },\n\n    remove: function (ecModel, api) {\n        this._lineDraw && this._lineDraw.remove();\n        this._lineDraw = null;\n        // Clear motion when lineDraw is removed\n        this._clearLayer(api);\n    },\n\n    dispose: function () {}\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\nfunction normalize(a) {\n    if (!(a instanceof Array)) {\n        a = [a, a];\n    }\n    return a;\n}\n\nvar opacityQuery = 'lineStyle.opacity'.split('.');\n\nexport 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\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\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\n            data.setItemVisual(idx, 'opacity', opacity);\n        }\n\n        return {dataEach: data.hasItemOption ? dataEach : null};\n    }\n};\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\n\nimport './lines/LinesSeries';\nimport './lines/LinesView';\n\nimport linesLayout from './lines/linesLayout';\nimport linesVisual from './lines/linesVisual';\n\necharts.registerLayout(linesLayout);\necharts.registerVisual(linesVisual);","/*\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\nimport SeriesModel from '../../model/Series';\nimport createListFromArray from '../helper/createListFromArray';\nimport CoordinateSystem from '../../CoordinateSystem';\n\nexport default SeriesModel.extend({\n    type: 'series.heatmap',\n\n    getInitialData: function (option, ecModel) {\n        return createListFromArray(this.getSource(), this, {\n            generateCoord: 'value'\n        });\n    },\n\n    preventIncremental: function () {\n        var coordSysCreator = CoordinateSystem.get(this.get('coordinateSystem'));\n        if (coordSysCreator && coordSysCreator.dimensions) {\n            return coordSysCreator.dimensions[0] === 'lng' && coordSysCreator.dimensions[1] === 'lat';\n        }\n    },\n\n    defaultOption: {\n\n        // Cartesian2D or geo\n        coordinateSystem: 'cartesian2d',\n\n        zlevel: 0,\n\n        z: 2,\n\n        // Cartesian coordinate system\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // Geo coordinate system\n        geoIndex: 0,\n\n        blurSize: 30,\n\n        pointSize: 20,\n\n        maxOpacity: 1,\n\n        minOpacity: 0\n    }\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Uint8ClampedArray */\n\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar GRADIENT_LEVELS = 256;\n\n/**\n * Heatmap Chart\n *\n * @class\n */\nfunction Heatmap() {\n    var canvas = zrUtil.createCanvas();\n    this.canvas = canvas;\n\n    this.blurSize = 30;\n    this.pointSize = 20;\n\n    this.maxOpacity = 1;\n    this.minOpacity = 0;\n\n    this._gradientPixels = {};\n}\n\nHeatmap.prototype = {\n    /**\n     * Renders Heatmap and returns the rendered canvas\n     * @param {Array} data array of data, each has x, y, value\n     * @param {number} width canvas width\n     * @param {number} height canvas height\n     */\n    update: function (data, width, height, normalize, colorFunc, isInRange) {\n        var brush = this._getBrush();\n        var gradientInRange = this._getGradient(data, colorFunc, 'inRange');\n        var gradientOutOfRange = this._getGradient(data, colorFunc, 'outOfRange');\n        var r = this.pointSize + this.blurSize;\n\n        var canvas = this.canvas;\n        var ctx = canvas.getContext('2d');\n        var len = data.length;\n        canvas.width = width;\n        canvas.height = height;\n        for (var i = 0; i < len; ++i) {\n            var p = data[i];\n            var x = p[0];\n            var y = p[1];\n            var value = p[2];\n\n            // calculate alpha using value\n            var alpha = normalize(value);\n\n            // draw with the circle brush with alpha\n            ctx.globalAlpha = alpha;\n            ctx.drawImage(brush, x - r, y - r);\n        }\n\n        if (!canvas.width || !canvas.height) {\n            // Avoid \"Uncaught DOMException: Failed to execute 'getImageData' on\n            // 'CanvasRenderingContext2D': The source height is 0.\"\n            return canvas;\n        }\n\n        // colorize the canvas using alpha value and set with gradient\n        var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n\n        var pixels = imageData.data;\n        var offset = 0;\n        var pixelLen = pixels.length;\n        var minOpacity = this.minOpacity;\n        var maxOpacity = this.maxOpacity;\n        var diffOpacity = maxOpacity - minOpacity;\n\n        while (offset < pixelLen) {\n            var alpha = pixels[offset + 3] / 256;\n            var gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4;\n            // Simple optimize to ignore the empty data\n            if (alpha > 0) {\n                var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange;\n                // Any alpha > 0 will be mapped to [minOpacity, maxOpacity]\n                alpha > 0 && (alpha = alpha * diffOpacity + minOpacity);\n                pixels[offset++] = gradient[gradientOffset];\n                pixels[offset++] = gradient[gradientOffset + 1];\n                pixels[offset++] = gradient[gradientOffset + 2];\n                pixels[offset++] = gradient[gradientOffset + 3] * alpha * 256;\n            }\n            else {\n                offset += 4;\n            }\n        }\n        ctx.putImageData(imageData, 0, 0);\n\n        return canvas;\n    },\n\n    /**\n     * get canvas of a black circle brush used for canvas to draw later\n     * @private\n     * @returns {Object} circle brush canvas\n     */\n    _getBrush: function () {\n        var brushCanvas = this._brushCanvas || (this._brushCanvas = zrUtil.createCanvas());\n        // set brush size\n        var r = this.pointSize + this.blurSize;\n        var d = r * 2;\n        brushCanvas.width = d;\n        brushCanvas.height = d;\n\n        var ctx = brushCanvas.getContext('2d');\n        ctx.clearRect(0, 0, d, d);\n\n        // in order to render shadow without the distinct circle,\n        // draw the distinct circle in an invisible place,\n        // and use shadowOffset to draw shadow in the center of the canvas\n        ctx.shadowOffsetX = d;\n        ctx.shadowBlur = this.blurSize;\n        // draw the shadow in black, and use alpha and shadow blur to generate\n        // color in color map\n        ctx.shadowColor = '#000';\n\n        // draw circle in the left to the canvas\n        ctx.beginPath();\n        ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true);\n        ctx.closePath();\n        ctx.fill();\n        return brushCanvas;\n    },\n\n    /**\n     * get gradient color map\n     * @private\n     */\n    _getGradient: function (data, colorFunc, state) {\n        var gradientPixels = this._gradientPixels;\n        var pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = new Uint8ClampedArray(256 * 4));\n        var color = [0, 0, 0, 0];\n        var off = 0;\n        for (var i = 0; i < 256; i++) {\n            colorFunc[state](i / 255, true, color);\n            pixelsSingleState[off++] = color[0];\n            pixelsSingleState[off++] = color[1];\n            pixelsSingleState[off++] = color[2];\n            pixelsSingleState[off++] = color[3];\n        }\n        return pixelsSingleState;\n    }\n};\n\nexport default Heatmap;\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\nimport {__DEV__} from '../../config';\nimport * as echarts from '../../echarts';\nimport * as graphic from '../../util/graphic';\nimport HeatmapLayer from './HeatmapLayer';\nimport * as zrUtil from 'zrender/src/core/util';\n\nfunction getIsInPiecewiseRange(dataExtent, pieceList, selected) {\n    var dataSpan = dataExtent[1] - dataExtent[0];\n    pieceList = zrUtil.map(pieceList, function (piece) {\n        return {\n            interval: [\n                (piece.interval[0] - dataExtent[0]) / dataSpan,\n                (piece.interval[1] - dataExtent[0]) / dataSpan\n            ]\n        };\n    });\n    var len = pieceList.length;\n    var lastIndex = 0;\n\n    return function (val) {\n        // Try to find in the location of the last found\n        for (var i = lastIndex; i < len; i++) {\n            var interval = pieceList[i].interval;\n            if (interval[0] <= val && val <= interval[1]) {\n                lastIndex = i;\n                break;\n            }\n        }\n        if (i === len) { // Not found, back interation\n            for (var i = lastIndex - 1; i >= 0; i--) {\n                var interval = pieceList[i].interval;\n                if (interval[0] <= val && val <= interval[1]) {\n                    lastIndex = i;\n                    break;\n                }\n            }\n        }\n        return i >= 0 && i < len && selected[i];\n    };\n}\n\nfunction getIsInContinuousRange(dataExtent, range) {\n    var dataSpan = dataExtent[1] - dataExtent[0];\n    range = [\n        (range[0] - dataExtent[0]) / dataSpan,\n        (range[1] - dataExtent[0]) / dataSpan\n    ];\n    return function (val) {\n        return val >= range[0] && val <= range[1];\n    };\n}\n\nfunction isGeoCoordSys(coordSys) {\n    var dimensions = coordSys.dimensions;\n    // Not use coorSys.type === 'geo' because coordSys maybe extended\n    return dimensions[0] === 'lng' && dimensions[1] === 'lat';\n}\n\nexport default echarts.extendChartView({\n\n    type: 'heatmap',\n\n    render: function (seriesModel, ecModel, api) {\n        var visualMapOfThisSeries;\n        ecModel.eachComponent('visualMap', function (visualMap) {\n            visualMap.eachTargetSeries(function (targetSeries) {\n                if (targetSeries === seriesModel) {\n                    visualMapOfThisSeries = visualMap;\n                }\n            });\n        });\n\n        if (__DEV__) {\n            if (!visualMapOfThisSeries) {\n                throw new Error('Heatmap must use with visualMap');\n            }\n        }\n\n        this.group.removeAll();\n\n        this._incrementalDisplayable = null;\n\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys.type === 'cartesian2d' || coordSys.type === 'calendar') {\n            this._renderOnCartesianAndCalendar(seriesModel, api, 0, seriesModel.getData().count());\n        }\n        else if (isGeoCoordSys(coordSys)) {\n            this._renderOnGeo(\n                coordSys, seriesModel, visualMapOfThisSeries, api\n            );\n        }\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        this.group.removeAll();\n    },\n\n    incrementalRender: function (params, seriesModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys) {\n            this._renderOnCartesianAndCalendar(seriesModel, api, params.start, params.end, true);\n        }\n    },\n\n    _renderOnCartesianAndCalendar: function (seriesModel, api, start, end, incremental) {\n\n        var coordSys = seriesModel.coordinateSystem;\n        var width;\n        var height;\n\n        if (coordSys.type === 'cartesian2d') {\n            var xAxis = coordSys.getAxis('x');\n            var yAxis = coordSys.getAxis('y');\n\n            if (__DEV__) {\n                if (!(xAxis.type === 'category' && yAxis.type === 'category')) {\n                    throw new Error('Heatmap on cartesian must have two category axes');\n                }\n                if (!(xAxis.onBand && yAxis.onBand)) {\n                    throw new Error('Heatmap on cartesian must have two axes with boundaryGap true');\n                }\n            }\n\n            width = xAxis.getBandWidth();\n            height = yAxis.getBandWidth();\n        }\n\n        var group = this.group;\n        var data = seriesModel.getData();\n\n        var itemStyleQuery = 'itemStyle';\n        var hoverItemStyleQuery = 'emphasis.itemStyle';\n        var labelQuery = 'label';\n        var hoverLabelQuery = 'emphasis.label';\n        var style = seriesModel.getModel(itemStyleQuery).getItemStyle(['color']);\n        var hoverStl = seriesModel.getModel(hoverItemStyleQuery).getItemStyle();\n        var labelModel = seriesModel.getModel(labelQuery);\n        var hoverLabelModel = seriesModel.getModel(hoverLabelQuery);\n        var coordSysType = coordSys.type;\n\n\n        var dataDims = coordSysType === 'cartesian2d'\n            ? [\n                data.mapDimension('x'),\n                data.mapDimension('y'),\n                data.mapDimension('value')\n            ]\n            : [\n                data.mapDimension('time'),\n                data.mapDimension('value')\n            ];\n\n        for (var idx = start; idx < end; idx++) {\n            var rect;\n\n            if (coordSysType === 'cartesian2d') {\n                // Ignore empty data\n                if (isNaN(data.get(dataDims[2], idx))) {\n                    continue;\n                }\n\n                var point = coordSys.dataToPoint([\n                    data.get(dataDims[0], idx),\n                    data.get(dataDims[1], idx)\n                ]);\n\n                rect = new graphic.Rect({\n                    shape: {\n                        x: point[0] - width / 2,\n                        y: point[1] - height / 2,\n                        width: width,\n                        height: height\n                    },\n                    style: {\n                        fill: data.getItemVisual(idx, 'color'),\n                        opacity: data.getItemVisual(idx, 'opacity')\n                    }\n                });\n            }\n            else {\n                // Ignore empty data\n                if (isNaN(data.get(dataDims[1], idx))) {\n                    continue;\n                }\n\n                rect = new graphic.Rect({\n                    z2: 1,\n                    shape: coordSys.dataToRect([data.get(dataDims[0], idx)]).contentShape,\n                    style: {\n                        fill: data.getItemVisual(idx, 'color'),\n                        opacity: data.getItemVisual(idx, 'opacity')\n                    }\n                });\n            }\n\n            var itemModel = data.getItemModel(idx);\n\n            // Optimization for large datset\n            if (data.hasItemOption) {\n                style = itemModel.getModel(itemStyleQuery).getItemStyle(['color']);\n                hoverStl = itemModel.getModel(hoverItemStyleQuery).getItemStyle();\n                labelModel = itemModel.getModel(labelQuery);\n                hoverLabelModel = itemModel.getModel(hoverLabelQuery);\n            }\n\n            var rawValue = seriesModel.getRawValue(idx);\n            var defaultText = '-';\n            if (rawValue && rawValue[2] != null) {\n                defaultText = rawValue[2];\n            }\n\n            graphic.setLabelStyle(\n                style, hoverStl, labelModel, hoverLabelModel,\n                {\n                    labelFetcher: seriesModel,\n                    labelDataIndex: idx,\n                    defaultText: defaultText,\n                    isRectText: true\n                }\n            );\n\n            rect.setStyle(style);\n            graphic.setHoverStyle(rect, data.hasItemOption ? hoverStl : zrUtil.extend({}, hoverStl));\n\n            rect.incremental = incremental;\n            // PENDING\n            if (incremental) {\n                // Rect must use hover layer if it's incremental.\n                rect.useHoverLayer = true;\n            }\n\n            group.add(rect);\n            data.setItemGraphicEl(idx, rect);\n        }\n    },\n\n    _renderOnGeo: function (geo, seriesModel, visualMapModel, api) {\n        var inRangeVisuals = visualMapModel.targetVisuals.inRange;\n        var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange;\n        // if (!visualMapping) {\n        //     throw new Error('Data range must have color visuals');\n        // }\n\n        var data = seriesModel.getData();\n        var hmLayer = this._hmLayer || (this._hmLayer || new HeatmapLayer());\n        hmLayer.blurSize = seriesModel.get('blurSize');\n        hmLayer.pointSize = seriesModel.get('pointSize');\n        hmLayer.minOpacity = seriesModel.get('minOpacity');\n        hmLayer.maxOpacity = seriesModel.get('maxOpacity');\n\n        var rect = geo.getViewRect().clone();\n        var roamTransform = geo.getRoamTransform();\n        rect.applyTransform(roamTransform);\n\n        // Clamp on viewport\n        var x = Math.max(rect.x, 0);\n        var y = Math.max(rect.y, 0);\n        var x2 = Math.min(rect.width + rect.x, api.getWidth());\n        var y2 = Math.min(rect.height + rect.y, api.getHeight());\n        var width = x2 - x;\n        var height = y2 - y;\n\n        var dims = [\n            data.mapDimension('lng'),\n            data.mapDimension('lat'),\n            data.mapDimension('value')\n        ];\n\n        var points = data.mapArray(dims, function (lng, lat, value) {\n            var pt = geo.dataToPoint([lng, lat]);\n            pt[0] -= x;\n            pt[1] -= y;\n            pt.push(value);\n            return pt;\n        });\n\n        var dataExtent = visualMapModel.getExtent();\n        var isInRange = visualMapModel.type === 'visualMap.continuous'\n            ? getIsInContinuousRange(dataExtent, visualMapModel.option.range)\n            : getIsInPiecewiseRange(\n                dataExtent, visualMapModel.getPieceList(), visualMapModel.option.selected\n            );\n\n        hmLayer.update(\n            points, width, height,\n            inRangeVisuals.color.getNormalizer(),\n            {\n                inRange: inRangeVisuals.color.getColorMapper(),\n                outOfRange: outOfRangeVisuals.color.getColorMapper()\n            },\n            isInRange\n        );\n        var img = new graphic.Image({\n            style: {\n                width: width,\n                height: height,\n                x: x,\n                y: y,\n                image: hmLayer.canvas\n            },\n            silent: true\n        });\n        this.group.add(img);\n    },\n\n    dispose: function () {}\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\nimport './heatmap/HeatmapSeries';\nimport './heatmap/HeatmapView';","/*\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\nimport BaseBarSeries from './BaseBarSeries';\n\nvar PictorialBarSeries = BaseBarSeries.extend({\n\n    type: 'series.pictorialBar',\n\n    dependencies: ['grid'],\n\n    defaultOption: {\n        symbol: 'circle',     // Customized bar shape\n        symbolSize: null,     // Can be ['100%', '100%'], null means auto.\n        symbolRotate: null,\n\n        symbolPosition: null, // 'start' or 'end' or 'center', null means auto.\n        symbolOffset: null,\n        symbolMargin: null,   // start margin and end margin. Can be a number or a percent string.\n                                // Auto margin by defualt.\n        symbolRepeat: false,  // false/null/undefined, means no repeat.\n                                // Can be true, means auto calculate repeat times and cut by data.\n                                // Can be a number, specifies repeat times, and do not cut by data.\n                                // Can be 'fixed', means auto calculate repeat times but do not cut by data.\n        symbolRepeatDirection: 'end', // 'end' means from 'start' to 'end'.\n\n        symbolClip: false,\n        symbolBoundingData: null, // Can be 60 or -40 or [-40, 60]\n        symbolPatternSize: 400, // 400 * 400 px\n\n        barGap: '-100%',      // In most case, overlap is needed.\n\n        // z can be set in data item, which is z2 actually.\n\n        // Disable progressive\n        progressive: 0,\n        hoverAnimation: false // Open only when needed.\n    },\n\n    getInitialData: function (option) {\n        // Disable stack.\n        option.stack = null;\n        return PictorialBarSeries.superApply(this, 'getInitialData', arguments);\n    }\n});\n\nexport default PictorialBarSeries;","/*\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport {createSymbol} from '../../util/symbol';\nimport {parsePercent, isNumeric} from '../../util/number';\nimport {setLabel} from './helper';\n\n\nvar BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'borderWidth'];\n\n// index: +isHorizontal\nvar LAYOUT_ATTRS = [\n    {xy: 'x', wh: 'width', index: 0, posDesc: ['left', 'right']},\n    {xy: 'y', wh: 'height', index: 1, posDesc: ['top', 'bottom']}\n];\n\nvar pathForLineWidth = new graphic.Circle();\n\nvar BarView = echarts.extendChartView({\n\n    type: 'pictorialBar',\n\n    render: function (seriesModel, ecModel, api) {\n        var group = this.group;\n        var data = seriesModel.getData();\n        var oldData = this._data;\n\n        var cartesian = seriesModel.coordinateSystem;\n        var baseAxis = cartesian.getBaseAxis();\n        var isHorizontal = !!baseAxis.isHorizontal();\n        var coordSysRect = cartesian.grid.getRect();\n\n        var opt = {\n            ecSize: {width: api.getWidth(), height: api.getHeight()},\n            seriesModel: seriesModel,\n            coordSys: cartesian,\n            coordSysExtent: [\n                [coordSysRect.x, coordSysRect.x + coordSysRect.width],\n                [coordSysRect.y, coordSysRect.y + coordSysRect.height]\n            ],\n            isHorizontal: isHorizontal,\n            valueDim: LAYOUT_ATTRS[+isHorizontal],\n            categoryDim: LAYOUT_ATTRS[1 - isHorizontal]\n        };\n\n        data.diff(oldData)\n            .add(function (dataIndex) {\n                if (!data.hasValue(dataIndex)) {\n                    return;\n                }\n\n                var itemModel = getItemModel(data, dataIndex);\n                var symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt);\n\n                var bar = createBar(data, opt, symbolMeta);\n\n                data.setItemGraphicEl(dataIndex, bar);\n                group.add(bar);\n\n                updateCommon(bar, opt, symbolMeta);\n            })\n            .update(function (newIndex, oldIndex) {\n                var bar = oldData.getItemGraphicEl(oldIndex);\n\n                if (!data.hasValue(newIndex)) {\n                    group.remove(bar);\n                    return;\n                }\n\n                var itemModel = getItemModel(data, newIndex);\n                var symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt);\n\n                var pictorialShapeStr = getShapeStr(data, symbolMeta);\n                if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) {\n                    group.remove(bar);\n                    data.setItemGraphicEl(newIndex, null);\n                    bar = null;\n                }\n\n                if (bar) {\n                    updateBar(bar, opt, symbolMeta);\n                }\n                else {\n                    bar = createBar(data, opt, symbolMeta, true);\n                }\n\n                data.setItemGraphicEl(newIndex, bar);\n                bar.__pictorialSymbolMeta = symbolMeta;\n                // Add back\n                group.add(bar);\n\n                updateCommon(bar, opt, symbolMeta);\n            })\n            .remove(function (dataIndex) {\n                var bar = oldData.getItemGraphicEl(dataIndex);\n                bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar);\n            })\n            .execute();\n\n        this._data = data;\n\n        return this.group;\n    },\n\n    dispose: zrUtil.noop,\n\n    remove: function (ecModel, api) {\n        var group = this.group;\n        var data = this._data;\n        if (ecModel.get('animation')) {\n            if (data) {\n                data.eachItemGraphicEl(function (bar) {\n                    removeBar(data, bar.dataIndex, ecModel, bar);\n                });\n            }\n        }\n        else {\n            group.removeAll();\n        }\n    }\n});\n\n\n// Set or calculate default value about symbol, and calculate layout info.\nfunction getSymbolMeta(data, dataIndex, itemModel, opt) {\n    var layout = data.getItemLayout(dataIndex);\n    var symbolRepeat = itemModel.get('symbolRepeat');\n    var symbolClip = itemModel.get('symbolClip');\n    var symbolPosition = itemModel.get('symbolPosition') || 'start';\n    var symbolRotate = itemModel.get('symbolRotate');\n    var rotation = (symbolRotate || 0) * Math.PI / 180 || 0;\n    var symbolPatternSize = itemModel.get('symbolPatternSize') || 2;\n    var isAnimationEnabled = itemModel.isAnimationEnabled();\n\n    var symbolMeta = {\n        dataIndex: dataIndex,\n        layout: layout,\n        itemModel: itemModel,\n        symbolType: data.getItemVisual(dataIndex, 'symbol') || 'circle',\n        color: data.getItemVisual(dataIndex, 'color'),\n        symbolClip: symbolClip,\n        symbolRepeat: symbolRepeat,\n        symbolRepeatDirection: itemModel.get('symbolRepeatDirection'),\n        symbolPatternSize: symbolPatternSize,\n        rotation: rotation,\n        animationModel: isAnimationEnabled ? itemModel : null,\n        hoverAnimation: isAnimationEnabled && itemModel.get('hoverAnimation'),\n        z2: itemModel.getShallow('z', true) || 0\n    };\n\n    prepareBarLength(itemModel, symbolRepeat, layout, opt, symbolMeta);\n\n    prepareSymbolSize(\n        data, dataIndex, layout, symbolRepeat, symbolClip, symbolMeta.boundingLength,\n        symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta\n    );\n\n    prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta);\n\n    var symbolSize = symbolMeta.symbolSize;\n    var symbolOffset = itemModel.get('symbolOffset');\n    if (zrUtil.isArray(symbolOffset)) {\n        symbolOffset = [\n            parsePercent(symbolOffset[0], symbolSize[0]),\n            parsePercent(symbolOffset[1], symbolSize[1])\n        ];\n    }\n\n    prepareLayoutInfo(\n        itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset,\n        symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength,\n        opt, symbolMeta\n    );\n\n    return symbolMeta;\n}\n\n// bar length can be negative.\nfunction prepareBarLength(itemModel, symbolRepeat, layout, opt, output) {\n    var valueDim = opt.valueDim;\n    var symbolBoundingData = itemModel.get('symbolBoundingData');\n    var valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis());\n    var zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0));\n    var pxSignIdx = 1 - +(layout[valueDim.wh] <= 0);\n    var boundingLength;\n\n    if (zrUtil.isArray(symbolBoundingData)) {\n        var symbolBoundingExtent = [\n            convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx,\n            convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx\n        ];\n        symbolBoundingExtent[1] < symbolBoundingExtent[0] && (symbolBoundingExtent.reverse());\n        boundingLength = symbolBoundingExtent[pxSignIdx];\n    }\n    else if (symbolBoundingData != null) {\n        boundingLength = convertToCoordOnAxis(valueAxis, symbolBoundingData) - zeroPx;\n    }\n    else if (symbolRepeat) {\n        boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx;\n    }\n    else {\n        boundingLength = layout[valueDim.wh];\n    }\n\n    output.boundingLength = boundingLength;\n\n    if (symbolRepeat) {\n        output.repeatCutLength = layout[valueDim.wh];\n    }\n\n    output.pxSign = boundingLength > 0 ? 1 : boundingLength < 0 ? -1 : 0;\n}\n\nfunction convertToCoordOnAxis(axis, value) {\n    return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value)));\n}\n\n// Support ['100%', '100%']\nfunction prepareSymbolSize(\n    data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength,\n    pxSign, symbolPatternSize, opt, output\n) {\n    var valueDim = opt.valueDim;\n    var categoryDim = opt.categoryDim;\n    var categorySize = Math.abs(layout[categoryDim.wh]);\n\n    var symbolSize = data.getItemVisual(dataIndex, 'symbolSize');\n    if (zrUtil.isArray(symbolSize)) {\n        symbolSize = symbolSize.slice();\n    }\n    else {\n        if (symbolSize == null) {\n            symbolSize = '100%';\n        }\n        symbolSize = [symbolSize, symbolSize];\n    }\n\n    // Note: percentage symbolSize (like '100%') do not consider lineWidth, because it is\n    // to complicated to calculate real percent value if considering scaled lineWidth.\n    // So the actual size will bigger than layout size if lineWidth is bigger than zero,\n    // which can be tolerated in pictorial chart.\n\n    symbolSize[categoryDim.index] = parsePercent(\n        symbolSize[categoryDim.index],\n        categorySize\n    );\n    symbolSize[valueDim.index] = parsePercent(\n        symbolSize[valueDim.index],\n        symbolRepeat ? categorySize : Math.abs(boundingLength)\n    );\n\n    output.symbolSize = symbolSize;\n\n    // If x or y is less than zero, show reversed shape.\n    var symbolScale = output.symbolScale = [\n        symbolSize[0] / symbolPatternSize,\n        symbolSize[1] / symbolPatternSize\n    ];\n    // Follow convention, 'right' and 'top' is the normal scale.\n    symbolScale[valueDim.index] *= (opt.isHorizontal ? -1 : 1) * pxSign;\n}\n\nfunction prepareLineWidth(itemModel, symbolScale, rotation, opt, output) {\n    // In symbols are drawn with scale, so do not need to care about the case that width\n    // or height are too small. But symbol use strokeNoScale, where acture lineWidth should\n    // be calculated.\n    var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;\n\n    if (valueLineWidth) {\n        pathForLineWidth.attr({\n            scale: symbolScale.slice(),\n            rotation: rotation\n        });\n        pathForLineWidth.updateTransform();\n        valueLineWidth /= pathForLineWidth.getLineScale();\n        valueLineWidth *= symbolScale[opt.valueDim.index];\n    }\n\n    output.valueLineWidth = valueLineWidth;\n}\n\nfunction prepareLayoutInfo(\n    itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset,\n    symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, output\n) {\n    var categoryDim = opt.categoryDim;\n    var valueDim = opt.valueDim;\n    var pxSign = output.pxSign;\n\n    var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0);\n    var pathLen = unitLength;\n\n    // Note: rotation will not effect the layout of symbols, because user may\n    // want symbols to rotate on its center, which should not be translated\n    // when rotating.\n\n    if (symbolRepeat) {\n        var absBoundingLength = Math.abs(boundingLength);\n\n        var symbolMargin = zrUtil.retrieve(itemModel.get('symbolMargin'), '15%') + '';\n        var hasEndGap = false;\n        if (symbolMargin.lastIndexOf('!') === symbolMargin.length - 1) {\n            hasEndGap = true;\n            symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1);\n        }\n        symbolMargin = parsePercent(symbolMargin, symbolSize[valueDim.index]);\n\n        var uLenWithMargin = Math.max(unitLength + symbolMargin * 2, 0);\n\n        // When symbol margin is less than 0, margin at both ends will be subtracted\n        // to ensure that all of the symbols will not be overflow the given area.\n        var endFix = hasEndGap ? 0 : symbolMargin * 2;\n\n        // Both final repeatTimes and final symbolMargin area calculated based on\n        // boundingLength.\n        var repeatSpecified = isNumeric(symbolRepeat);\n        var repeatTimes = repeatSpecified\n            ? symbolRepeat\n            : toIntTimes((absBoundingLength + endFix) / uLenWithMargin);\n\n        // Adjust calculate margin, to ensure each symbol is displayed\n        // entirely in the given layout area.\n        var mDiff = absBoundingLength - repeatTimes * unitLength;\n        symbolMargin = mDiff / 2 / (hasEndGap ? repeatTimes : repeatTimes - 1);\n        uLenWithMargin = unitLength + symbolMargin * 2;\n        endFix = hasEndGap ? 0 : symbolMargin * 2;\n\n        // Update repeatTimes when not all symbol will be shown.\n        if (!repeatSpecified && symbolRepeat !== 'fixed') {\n            repeatTimes = repeatCutLength\n                ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin)\n                : 0;\n        }\n\n        pathLen = repeatTimes * uLenWithMargin - endFix;\n        output.repeatTimes = repeatTimes;\n        output.symbolMargin = symbolMargin;\n    }\n\n    var sizeFix = pxSign * (pathLen / 2);\n    var pathPosition = output.pathPosition = [];\n    pathPosition[categoryDim.index] = layout[categoryDim.wh] / 2;\n    pathPosition[valueDim.index] = symbolPosition === 'start'\n        ? sizeFix\n        : symbolPosition === 'end'\n        ? boundingLength - sizeFix\n        : boundingLength / 2; // 'center'\n    if (symbolOffset) {\n        pathPosition[0] += symbolOffset[0];\n        pathPosition[1] += symbolOffset[1];\n    }\n\n    var bundlePosition = output.bundlePosition = [];\n    bundlePosition[categoryDim.index] = layout[categoryDim.xy];\n    bundlePosition[valueDim.index] = layout[valueDim.xy];\n\n    var barRectShape = output.barRectShape = zrUtil.extend({}, layout);\n    barRectShape[valueDim.wh] = pxSign * Math.max(\n        Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix)\n    );\n    barRectShape[categoryDim.wh] = layout[categoryDim.wh];\n\n    var clipShape = output.clipShape = {};\n    // Consider that symbol may be overflow layout rect.\n    clipShape[categoryDim.xy] = -layout[categoryDim.xy];\n    clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh];\n    clipShape[valueDim.xy] = 0;\n    clipShape[valueDim.wh] = layout[valueDim.wh];\n}\n\nfunction createPath(symbolMeta) {\n    var symbolPatternSize = symbolMeta.symbolPatternSize;\n    var path = createSymbol(\n        // Consider texture img, make a big size.\n        symbolMeta.symbolType,\n        -symbolPatternSize / 2,\n        -symbolPatternSize / 2,\n        symbolPatternSize,\n        symbolPatternSize,\n        symbolMeta.color\n    );\n    path.attr({\n        culling: true\n    });\n    path.type !== 'image' && path.setStyle({\n        strokeNoScale: true\n    });\n\n    return path;\n}\n\nfunction createOrUpdateRepeatSymbols(bar, opt, symbolMeta, isUpdate) {\n    var bundle = bar.__pictorialBundle;\n    var symbolSize = symbolMeta.symbolSize;\n    var valueLineWidth = symbolMeta.valueLineWidth;\n    var pathPosition = symbolMeta.pathPosition;\n    var valueDim = opt.valueDim;\n    var repeatTimes = symbolMeta.repeatTimes || 0;\n\n    var index = 0;\n    var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2;\n\n    eachPath(bar, function (path) {\n        path.__pictorialAnimationIndex = index;\n        path.__pictorialRepeatTimes = repeatTimes;\n        if (index < repeatTimes) {\n            updateAttr(path, null, makeTarget(index), symbolMeta, isUpdate);\n        }\n        else {\n            updateAttr(path, null, {scale: [0, 0]}, symbolMeta, isUpdate, function () {\n                bundle.remove(path);\n            });\n        }\n\n        updateHoverAnimation(path, symbolMeta);\n\n        index++;\n    });\n\n    for (; index < repeatTimes; index++) {\n        var path = createPath(symbolMeta);\n        path.__pictorialAnimationIndex = index;\n        path.__pictorialRepeatTimes = repeatTimes;\n        bundle.add(path);\n\n        var target = makeTarget(index);\n\n        updateAttr(\n            path,\n            {\n                position: target.position,\n                scale: [0, 0]\n            },\n            {\n                scale: target.scale,\n                rotation: target.rotation\n            },\n            symbolMeta,\n            isUpdate\n        );\n\n        // FIXME\n        // If all emphasis/normal through action.\n        path\n            .on('mouseover', onMouseOver)\n            .on('mouseout', onMouseOut);\n\n        updateHoverAnimation(path, symbolMeta);\n    }\n\n    function makeTarget(index) {\n        var position = pathPosition.slice();\n        // (start && pxSign > 0) || (end && pxSign < 0): i = repeatTimes - index\n        // Otherwise: i = index;\n        var pxSign = symbolMeta.pxSign;\n        var i = index;\n        if (symbolMeta.symbolRepeatDirection === 'start' ? pxSign > 0 : pxSign < 0) {\n            i = repeatTimes - 1 - index;\n        }\n        position[valueDim.index] = unit * (i - repeatTimes / 2 + 0.5) + pathPosition[valueDim.index];\n\n        return {\n            position: position,\n            scale: symbolMeta.symbolScale.slice(),\n            rotation: symbolMeta.rotation\n        };\n    }\n\n    function onMouseOver() {\n        eachPath(bar, function (path) {\n            path.trigger('emphasis');\n        });\n    }\n\n    function onMouseOut() {\n        eachPath(bar, function (path) {\n            path.trigger('normal');\n        });\n    }\n}\n\nfunction createOrUpdateSingleSymbol(bar, opt, symbolMeta, isUpdate) {\n    var bundle = bar.__pictorialBundle;\n    var mainPath = bar.__pictorialMainPath;\n\n    if (!mainPath) {\n        mainPath = bar.__pictorialMainPath = createPath(symbolMeta);\n        bundle.add(mainPath);\n\n        updateAttr(\n            mainPath,\n            {\n                position: symbolMeta.pathPosition.slice(),\n                scale: [0, 0],\n                rotation: symbolMeta.rotation\n            },\n            {\n                scale: symbolMeta.symbolScale.slice()\n            },\n            symbolMeta,\n            isUpdate\n        );\n\n        mainPath\n            .on('mouseover', onMouseOver)\n            .on('mouseout', onMouseOut);\n    }\n    else {\n        updateAttr(\n            mainPath,\n            null,\n            {\n                position: symbolMeta.pathPosition.slice(),\n                scale: symbolMeta.symbolScale.slice(),\n                rotation: symbolMeta.rotation\n            },\n            symbolMeta,\n            isUpdate\n        );\n    }\n\n    updateHoverAnimation(mainPath, symbolMeta);\n\n    function onMouseOver() {\n        this.trigger('emphasis');\n    }\n\n    function onMouseOut() {\n        this.trigger('normal');\n    }\n}\n\n// bar rect is used for label.\nfunction createOrUpdateBarRect(bar, symbolMeta, isUpdate) {\n    var rectShape = zrUtil.extend({}, symbolMeta.barRectShape);\n\n    var barRect = bar.__pictorialBarRect;\n    if (!barRect) {\n        barRect = bar.__pictorialBarRect = new graphic.Rect({\n            z2: 2,\n            shape: rectShape,\n            silent: true,\n            style: {\n                stroke: 'transparent',\n                fill: 'transparent',\n                lineWidth: 0\n            }\n        });\n\n        bar.add(barRect);\n    }\n    else {\n        updateAttr(barRect, null, {shape: rectShape}, symbolMeta, isUpdate);\n    }\n}\n\nfunction createOrUpdateClip(bar, opt, symbolMeta, isUpdate) {\n    // If not clip, symbol will be remove and rebuilt.\n    if (symbolMeta.symbolClip) {\n        var clipPath = bar.__pictorialClipPath;\n        var clipShape = zrUtil.extend({}, symbolMeta.clipShape);\n        var valueDim = opt.valueDim;\n        var animationModel = symbolMeta.animationModel;\n        var dataIndex = symbolMeta.dataIndex;\n\n        if (clipPath) {\n            graphic.updateProps(\n                clipPath, {shape: clipShape}, animationModel, dataIndex\n            );\n        }\n        else {\n            clipShape[valueDim.wh] = 0;\n            clipPath = new graphic.Rect({shape: clipShape});\n            bar.__pictorialBundle.setClipPath(clipPath);\n            bar.__pictorialClipPath = clipPath;\n\n            var target = {};\n            target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh];\n\n            graphic[isUpdate ? 'updateProps' : 'initProps'](\n                clipPath, {shape: target}, animationModel, dataIndex\n            );\n        }\n    }\n}\n\nfunction getItemModel(data, dataIndex) {\n    var itemModel = data.getItemModel(dataIndex);\n    itemModel.getAnimationDelayParams = getAnimationDelayParams;\n    itemModel.isAnimationEnabled = isAnimationEnabled;\n    return itemModel;\n}\n\nfunction getAnimationDelayParams(path) {\n    // The order is the same as the z-order, see `symbolRepeatDiretion`.\n    return {\n        index: path.__pictorialAnimationIndex,\n        count: path.__pictorialRepeatTimes\n    };\n}\n\nfunction isAnimationEnabled() {\n    // `animation` prop can be set on itemModel in pictorial bar chart.\n    return this.parentModel.isAnimationEnabled() && !!this.getShallow('animation');\n}\n\nfunction updateHoverAnimation(path, symbolMeta) {\n    path.off('emphasis').off('normal');\n\n    var scale = symbolMeta.symbolScale.slice();\n\n    symbolMeta.hoverAnimation && path\n        .on('emphasis', function () {\n            this.animateTo({\n                scale: [scale[0] * 1.1, scale[1] * 1.1]\n            }, 400, 'elasticOut');\n        })\n        .on('normal', function () {\n            this.animateTo({\n                scale: scale.slice()\n            }, 400, 'elasticOut');\n        });\n}\n\nfunction createBar(data, opt, symbolMeta, isUpdate) {\n    // bar is the main element for each data.\n    var bar = new graphic.Group();\n    // bundle is used for location and clip.\n    var bundle = new graphic.Group();\n    bar.add(bundle);\n    bar.__pictorialBundle = bundle;\n    bundle.attr('position', symbolMeta.bundlePosition.slice());\n\n    if (symbolMeta.symbolRepeat) {\n        createOrUpdateRepeatSymbols(bar, opt, symbolMeta);\n    }\n    else {\n        createOrUpdateSingleSymbol(bar, opt, symbolMeta);\n    }\n\n    createOrUpdateBarRect(bar, symbolMeta, isUpdate);\n\n    createOrUpdateClip(bar, opt, symbolMeta, isUpdate);\n\n    bar.__pictorialShapeStr = getShapeStr(data, symbolMeta);\n    bar.__pictorialSymbolMeta = symbolMeta;\n\n    return bar;\n}\n\nfunction updateBar(bar, opt, symbolMeta) {\n    var animationModel = symbolMeta.animationModel;\n    var dataIndex = symbolMeta.dataIndex;\n    var bundle = bar.__pictorialBundle;\n\n    graphic.updateProps(\n        bundle, {position: symbolMeta.bundlePosition.slice()}, animationModel, dataIndex\n    );\n\n    if (symbolMeta.symbolRepeat) {\n        createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true);\n    }\n    else {\n        createOrUpdateSingleSymbol(bar, opt, symbolMeta, true);\n    }\n\n    createOrUpdateBarRect(bar, symbolMeta, true);\n\n    createOrUpdateClip(bar, opt, symbolMeta, true);\n}\n\nfunction removeBar(data, dataIndex, animationModel, bar) {\n    // Not show text when animating\n    var labelRect = bar.__pictorialBarRect;\n    labelRect && (labelRect.style.text = null);\n\n    var pathes = [];\n    eachPath(bar, function (path) {\n        pathes.push(path);\n    });\n    bar.__pictorialMainPath && pathes.push(bar.__pictorialMainPath);\n\n    // I do not find proper remove animation for clip yet.\n    bar.__pictorialClipPath && (animationModel = null);\n\n    zrUtil.each(pathes, function (path) {\n        graphic.updateProps(\n            path, {scale: [0, 0]}, animationModel, dataIndex,\n            function () {\n                bar.parent && bar.parent.remove(bar);\n            }\n        );\n    });\n\n    data.setItemGraphicEl(dataIndex, null);\n}\n\nfunction getShapeStr(data, symbolMeta) {\n    return [\n        data.getItemVisual(symbolMeta.dataIndex, 'symbol') || 'none',\n        !!symbolMeta.symbolRepeat,\n        !!symbolMeta.symbolClip\n    ].join(':');\n}\n\nfunction eachPath(bar, cb, context) {\n    // Do not use Group#eachChild, because it do not support remove.\n    zrUtil.each(bar.__pictorialBundle.children(), function (el) {\n        el !== bar.__pictorialBarRect && cb.call(context, el);\n    });\n}\n\nfunction updateAttr(el, immediateAttrs, animationAttrs, symbolMeta, isUpdate, cb) {\n    immediateAttrs && el.attr(immediateAttrs);\n    // when symbolCip used, only clip path has init animation, otherwise it would be weird effect.\n    if (symbolMeta.symbolClip && !isUpdate) {\n        animationAttrs && el.attr(animationAttrs);\n    }\n    else {\n        animationAttrs && graphic[isUpdate ? 'updateProps' : 'initProps'](\n            el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb\n        );\n    }\n}\n\nfunction updateCommon(bar, opt, symbolMeta) {\n    var color = symbolMeta.color;\n    var dataIndex = symbolMeta.dataIndex;\n    var itemModel = symbolMeta.itemModel;\n    // Color must be excluded.\n    // Because symbol provide setColor individually to set fill and stroke\n    var normalStyle = itemModel.getModel('itemStyle').getItemStyle(['color']);\n    var hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n    var cursorStyle = itemModel.getShallow('cursor');\n\n    eachPath(bar, function (path) {\n        // PENDING setColor should be before setStyle!!!\n        path.setColor(color);\n        path.setStyle(zrUtil.defaults(\n            {\n                fill: color,\n                opacity: symbolMeta.opacity\n            },\n            normalStyle\n        ));\n        graphic.setHoverStyle(path, hoverStyle);\n\n        cursorStyle && (path.cursor = cursorStyle);\n        path.z2 = symbolMeta.z2;\n    });\n\n    var barRectHoverStyle = {};\n    var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)];\n    var barRect = bar.__pictorialBarRect;\n\n    setLabel(\n        barRect.style, barRectHoverStyle, itemModel,\n        color, opt.seriesModel, dataIndex, barPositionOutside\n    );\n\n    graphic.setHoverStyle(barRect, barRectHoverStyle);\n}\n\nfunction toIntTimes(times) {\n    var roundedTimes = Math.round(times);\n    // Escapse accurate error\n    return Math.abs(times - roundedTimes) < 1e-4\n        ? roundedTimes\n        : Math.ceil(times);\n}\n\nexport default BarView;","/*\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\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\n\nimport '../coord/cartesian/Grid';\nimport './bar/PictorialBarSeries';\nimport './bar/PictorialBarView';\n\nimport { layout } from '../layout/barGrid';\nimport visualSymbol from '../visual/symbol';\n\n// In case developer forget to include grid component\nimport '../component/gridSimple';\n\necharts.registerLayout(zrUtil.curry(\n    layout, 'pictorialBar'\n));\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport Axis from '../Axis';\n\n/**\n * @constructor  module:echarts/coord/single/SingleAxis\n * @extends {module:echarts/coord/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.<number>} coordExtent\n * @param {string} axisType\n * @param {string} position\n */\nvar SingleAxis = function (dim, scale, coordExtent, axisType, position) {\n\n    Axis.call(this, dim, scale, coordExtent);\n\n    /**\n     * Axis type\n     * - 'category'\n     * - 'value'\n     * - 'time'\n     * - 'log'\n     * @type {string}\n     */\n    this.type = axisType || 'value';\n\n    /**\n     * Axis position\n     *  - 'top'\n     *  - 'bottom'\n     *  - 'left'\n     *  - 'right'\n     *  @type {string}\n     */\n    this.position = position || 'bottom';\n\n    /**\n     * Axis orient\n     *  - 'horizontal'\n     *  - 'vertical'\n     * @type {[type]}\n     */\n    this.orient = null;\n\n};\n\nSingleAxis.prototype = {\n\n    constructor: SingleAxis,\n\n    /**\n     * Axis model\n     * @type {module:echarts/coord/single/AxisModel}\n     */\n    model: null,\n\n    /**\n     * Judge the orient of the axis.\n     * @return {boolean}\n     */\n    isHorizontal: function () {\n        var position = this.position;\n        return position === 'top' || position === 'bottom';\n\n    },\n\n    /**\n     * @override\n     */\n    pointToData: function (point, clamp) {\n        return this.coordinateSystem.pointToData(point, clamp)[0];\n    },\n\n    /**\n     * Convert the local coord(processed by dataToCoord())\n     * to global coord(concrete pixel coord).\n     * designated by module:echarts/coord/single/Single.\n     * @type {Function}\n     */\n    toGlobalCoord: null,\n\n    /**\n     * Convert the global coord to local coord.\n     * designated by module:echarts/coord/single/Single.\n     * @type {Function}\n     */\n    toLocalCoord: null\n\n};\n\nzrUtil.inherits(SingleAxis, Axis);\n\nexport default SingleAxis;","/*\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 * Single coordinates system.\n */\n\nimport SingleAxis from './SingleAxis';\nimport * as axisHelper from '../axisHelper';\nimport {getLayoutRect} from '../../util/layout';\nimport {each} from 'zrender/src/core/util';\n\n/**\n * Create a single coordinates system.\n *\n * @param {module:echarts/coord/single/AxisModel} axisModel\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction Single(axisModel, ecModel, api) {\n\n    /**\n     * @type {string}\n     * @readOnly\n     */\n    this.dimension = 'single';\n\n    /**\n     * Add it just for draw tooltip.\n     *\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    this.dimensions = ['single'];\n\n    /**\n     * @private\n     * @type {module:echarts/coord/single/SingleAxis}.\n     */\n    this._axis = null;\n\n    /**\n     * @private\n     * @type {module:zrender/core/BoundingRect}\n     */\n    this._rect;\n\n    this._init(axisModel, ecModel, api);\n\n    /**\n     * @type {module:echarts/coord/single/AxisModel}\n     */\n    this.model = axisModel;\n}\n\nSingle.prototype = {\n\n    type: 'singleAxis',\n\n    axisPointerEnabled: true,\n\n    constructor: Single,\n\n    /**\n     * Initialize single coordinate system.\n     *\n     * @param  {module:echarts/coord/single/AxisModel} axisModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @private\n     */\n    _init: function (axisModel, ecModel, api) {\n\n        var dim = this.dimension;\n\n        var axis = new SingleAxis(\n            dim,\n            axisHelper.createScaleByModel(axisModel),\n            [0, 0],\n            axisModel.get('type'),\n            axisModel.get('position')\n        );\n\n        var isCategory = axis.type === 'category';\n        axis.onBand = isCategory && axisModel.get('boundaryGap');\n        axis.inverse = axisModel.get('inverse');\n        axis.orient = axisModel.get('orient');\n\n        axisModel.axis = axis;\n        axis.model = axisModel;\n        axis.coordinateSystem = this;\n        this._axis = axis;\n    },\n\n    /**\n     * Update axis scale after data processed\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    update: function (ecModel, api) {\n        ecModel.eachSeries(function (seriesModel) {\n            if (seriesModel.coordinateSystem === this) {\n                var data = seriesModel.getData();\n                each(data.mapDimension(this.dimension, true), function (dim) {\n                    this._axis.scale.unionExtentFromData(data, dim);\n                }, this);\n                axisHelper.niceScaleExtent(this._axis.scale, this._axis.model);\n            }\n        }, this);\n    },\n\n    /**\n     * Resize the single coordinate system.\n     *\n     * @param  {module:echarts/coord/single/AxisModel} axisModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    resize: function (axisModel, api) {\n        this._rect = getLayoutRect(\n            {\n                left: axisModel.get('left'),\n                top: axisModel.get('top'),\n                right: axisModel.get('right'),\n                bottom: axisModel.get('bottom'),\n                width: axisModel.get('width'),\n                height: axisModel.get('height')\n            },\n            {\n                width: api.getWidth(),\n                height: api.getHeight()\n            }\n        );\n\n        this._adjustAxis();\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getRect: function () {\n        return this._rect;\n    },\n\n    /**\n     * @private\n     */\n    _adjustAxis: function () {\n\n        var rect = this._rect;\n        var axis = this._axis;\n\n        var isHorizontal = axis.isHorizontal();\n        var extent = isHorizontal ? [0, rect.width] : [0, rect.height];\n        var idx = axis.reverse ? 1 : 0;\n\n        axis.setExtent(extent[idx], extent[1 - idx]);\n\n        this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y);\n\n    },\n\n    /**\n     * @param  {module:echarts/coord/single/SingleAxis} axis\n     * @param  {number} coordBase\n     */\n    _updateAxisTransform: function (axis, coordBase) {\n\n        var axisExtent = axis.getExtent();\n        var extentSum = axisExtent[0] + axisExtent[1];\n        var isHorizontal = axis.isHorizontal();\n\n        axis.toGlobalCoord = isHorizontal\n            ? function (coord) {\n                return coord + coordBase;\n            }\n            : function (coord) {\n                return extentSum - coord + coordBase;\n            };\n\n        axis.toLocalCoord = isHorizontal\n            ? function (coord) {\n                return coord - coordBase;\n            }\n            : function (coord) {\n                return extentSum - coord + coordBase;\n            };\n    },\n\n    /**\n     * Get axis.\n     *\n     * @return {module:echarts/coord/single/SingleAxis}\n     */\n    getAxis: function () {\n        return this._axis;\n    },\n\n    /**\n     * Get axis, add it just for draw tooltip.\n     *\n     * @return {[type]} [description]\n     */\n    getBaseAxis: function () {\n        return this._axis;\n    },\n\n    /**\n     * @return {Array.<module:echarts/coord/Axis>}\n     */\n    getAxes: function () {\n        return [this._axis];\n    },\n\n    /**\n     * @return {Object} {baseAxes: [], otherAxes: []}\n     */\n    getTooltipAxes: function () {\n        return {baseAxes: [this.getAxis()]};\n    },\n\n    /**\n     * If contain point.\n     *\n     * @param  {Array.<number>} point\n     * @return {boolean}\n     */\n    containPoint: function (point) {\n        var rect = this.getRect();\n        var axis = this.getAxis();\n        var orient = axis.orient;\n        if (orient === 'horizontal') {\n            return axis.contain(axis.toLocalCoord(point[0]))\n            && (point[1] >= rect.y && point[1] <= (rect.y + rect.height));\n        }\n        else {\n            return axis.contain(axis.toLocalCoord(point[1]))\n            && (point[0] >= rect.y && point[0] <= (rect.y + rect.height));\n        }\n    },\n\n    /**\n     * @param {Array.<number>} point\n     * @return {Array.<number>}\n     */\n    pointToData: function (point) {\n        var axis = this.getAxis();\n        return [axis.coordToData(axis.toLocalCoord(\n            point[axis.orient === 'horizontal' ? 0 : 1]\n        ))];\n    },\n\n    /**\n     * Convert the series data to concrete point.\n     *\n     * @param  {number|Array.<number>} val\n     * @return {Array.<number>}\n     */\n    dataToPoint: function (val) {\n        var axis = this.getAxis();\n        var rect = this.getRect();\n        var pt = [];\n        var idx = axis.orient === 'horizontal' ? 0 : 1;\n\n        if (val instanceof Array) {\n            val = val[0];\n        }\n\n        pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val));\n        pt[1 - idx] = idx === 0 ? (rect.y + rect.height / 2) : (rect.x + rect.width / 2);\n        return pt;\n    }\n\n};\n\nexport default Single;\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 * Single coordinate system creator.\n */\n\nimport Single from './Single';\nimport CoordinateSystem from '../../CoordinateSystem';\n\n/**\n * Create single coordinate system and inject it into seriesModel.\n *\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @return {Array.<module:echarts/coord/single/Single>}\n */\nfunction create(ecModel, api) {\n    var singles = [];\n\n    ecModel.eachComponent('singleAxis', function (axisModel, idx) {\n\n        var single = new Single(axisModel, ecModel, api);\n        single.name = 'single_' + idx;\n        single.resize(axisModel, api);\n        axisModel.coordinateSystem = single;\n        singles.push(single);\n\n    });\n\n    ecModel.eachSeries(function (seriesModel) {\n        if (seriesModel.get('coordinateSystem') === 'singleAxis') {\n            var singleAxisModel = ecModel.queryComponents({\n                mainType: 'singleAxis',\n                index: seriesModel.get('singleAxisIndex'),\n                id: seriesModel.get('singleAxisId')\n            })[0];\n            seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem;\n        }\n    });\n\n    return singles;\n}\n\nCoordinateSystem.register('single', {\n    create: create,\n    dimensions: Single.prototype.dimensions\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\nimport * as zrUtil from 'zrender/src/core/util';\n\n/**\n * @param {Object} opt {labelInside}\n * @return {Object} {\n *  position, rotation, labelDirection, labelOffset,\n *  tickDirection, labelRotate, z2\n * }\n */\nexport function layout(axisModel, opt) {\n    opt = opt || {};\n    var single = axisModel.coordinateSystem;\n    var axis = axisModel.axis;\n    var layout = {};\n\n    var axisPosition = axis.position;\n    var orient = axis.orient;\n\n    var rect = single.getRect();\n    var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];\n\n    var positionMap = {\n        horizontal: {top: rectBound[2], bottom: rectBound[3]},\n        vertical: {left: rectBound[0], right: rectBound[1]}\n    };\n\n    layout.position = [\n        orient === 'vertical'\n            ? positionMap.vertical[axisPosition]\n            : rectBound[0],\n        orient === 'horizontal'\n            ? positionMap.horizontal[axisPosition]\n            : rectBound[3]\n    ];\n\n    var r = {horizontal: 0, vertical: 1};\n    layout.rotation = Math.PI / 2 * r[orient];\n\n    var directionMap = {top: -1, bottom: 1, right: 1, left: -1};\n\n    layout.labelDirection = layout.tickDirection =\n        layout.nameDirection = directionMap[axisPosition];\n\n    if (axisModel.get('axisTick.inside')) {\n        layout.tickDirection = -layout.tickDirection;\n    }\n\n    if (zrUtil.retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {\n        layout.labelDirection = -layout.labelDirection;\n    }\n\n    var labelRotation = opt.rotate;\n    labelRotation == null && (labelRotation = axisModel.get('axisLabel.rotate'));\n    layout.labelRotation = axisPosition === 'top' ? -labelRotation : labelRotation;\n\n    layout.z2 = 1;\n\n    return layout;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport AxisBuilder from './AxisBuilder';\nimport * as graphic from '../../util/graphic';\nimport * as singleAxisHelper from '../../coord/single/singleAxisHelper';\nimport AxisView from './AxisView';\n\nvar axisBuilderAttrs = [\n    'axisLine', 'axisTickLabel', 'axisName'\n];\n\nvar selfBuilderAttr = 'splitLine';\n\nvar SingleAxisView = AxisView.extend({\n\n    type: 'singleAxis',\n\n    axisPointerClass: 'SingleAxisPointer',\n\n    render: function (axisModel, ecModel, api, payload) {\n\n        var group = this.group;\n\n        group.removeAll();\n\n        var layout = singleAxisHelper.layout(axisModel);\n\n        var axisBuilder = new AxisBuilder(axisModel, layout);\n\n        zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n\n        group.add(axisBuilder.getGroup());\n\n        if (axisModel.get(selfBuilderAttr + '.show')) {\n            this['_' + selfBuilderAttr](axisModel);\n        }\n\n        SingleAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);\n    },\n\n    _splitLine: function (axisModel) {\n        var axis = axisModel.axis;\n\n        if (axis.scale.isBlank()) {\n            return;\n        }\n\n        var splitLineModel = axisModel.getModel('splitLine');\n        var lineStyleModel = splitLineModel.getModel('lineStyle');\n        var lineWidth = lineStyleModel.get('width');\n        var lineColors = lineStyleModel.get('color');\n\n        lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n\n        var gridRect = axisModel.coordinateSystem.getRect();\n        var isHorizontal = axis.isHorizontal();\n\n        var splitLines = [];\n        var lineCount = 0;\n\n        var ticksCoords = axis.getTicksCoords({\n            tickModel: splitLineModel\n        });\n\n        var p1 = [];\n        var p2 = [];\n\n        for (var i = 0; i < ticksCoords.length; ++i) {\n            var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);\n            if (isHorizontal) {\n                p1[0] = tickCoord;\n                p1[1] = gridRect.y;\n                p2[0] = tickCoord;\n                p2[1] = gridRect.y + gridRect.height;\n            }\n            else {\n                p1[0] = gridRect.x;\n                p1[1] = tickCoord;\n                p2[0] = gridRect.x + gridRect.width;\n                p2[1] = tickCoord;\n            }\n            var colorIndex = (lineCount++) % lineColors.length;\n            splitLines[colorIndex] = splitLines[colorIndex] || [];\n            splitLines[colorIndex].push(new graphic.Line({\n                subPixelOptimize: true,\n                shape: {\n                    x1: p1[0],\n                    y1: p1[1],\n                    x2: p2[0],\n                    y2: p2[1]\n                },\n                style: {\n                    lineWidth: lineWidth\n                },\n                silent: true\n            }));\n        }\n\n        for (var i = 0; i < splitLines.length; ++i) {\n            this.group.add(graphic.mergePath(splitLines[i], {\n                style: {\n                    stroke: lineColors[i % lineColors.length],\n                    lineDash: lineStyleModel.getLineDash(lineWidth),\n                    lineWidth: lineWidth\n                },\n                silent: true\n            }));\n        }\n    }\n});\n\nexport default SingleAxisView;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport ComponentModel from '../../model/Component';\nimport axisModelCreator from '../axisModelCreator';\nimport axisModelCommonMixin from '../axisModelCommonMixin';\n\nvar AxisModel = ComponentModel.extend({\n\n    type: 'singleAxis',\n\n    layoutMode: 'box',\n\n    /**\n     * @type {module:echarts/coord/single/SingleAxis}\n     */\n    axis: null,\n\n    /**\n     * @type {module:echarts/coord/single/Single}\n     */\n    coordinateSystem: null,\n\n    /**\n     * @override\n     */\n    getCoordSysModel: function () {\n        return this;\n    }\n\n});\n\nvar defaultOption = {\n\n    left: '5%',\n    top: '5%',\n    right: '5%',\n    bottom: '5%',\n\n    type: 'value',\n\n    position: 'bottom',\n\n    orient: 'horizontal',\n\n    axisLine: {\n        show: true,\n        lineStyle: {\n            width: 1,\n            type: 'solid'\n        }\n    },\n\n    // Single coordinate system and single axis is the,\n    // which is used as the parent tooltip model.\n    // same model, so we set default tooltip show as true.\n    tooltip: {\n        show: true\n    },\n\n    axisTick: {\n        show: true,\n        length: 6,\n        lineStyle: {\n            width: 1\n        }\n    },\n\n    axisLabel: {\n        show: true,\n        interval: 'auto'\n    },\n\n    splitLine: {\n        show: true,\n        lineStyle: {\n            type: 'dashed',\n            opacity: 0.2\n        }\n    }\n};\n\nfunction getAxisType(axisName, option) {\n    return option.type || (option.data ? 'category' : 'value');\n}\n\nzrUtil.merge(AxisModel.prototype, axisModelCommonMixin);\n\naxisModelCreator('single', AxisModel, getAxisType, defaultOption);\n\nexport default AxisModel;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as modelUtil from '../../util/model';\n\n/**\n * @param {Object} finder contains {seriesIndex, dataIndex, dataIndexInside}\n * @param {module:echarts/model/Global} ecModel\n * @return {Object} {point: [x, y], el: ...} point Will not be null.\n */\nexport default function (finder, ecModel) {\n    var point = [];\n    var seriesIndex = finder.seriesIndex;\n    var seriesModel;\n    if (seriesIndex == null || !(\n        seriesModel = ecModel.getSeriesByIndex(seriesIndex)\n    )) {\n        return {point: []};\n    }\n\n    var data = seriesModel.getData();\n    var dataIndex = modelUtil.queryDataIndex(data, finder);\n    if (dataIndex == null || dataIndex < 0 || zrUtil.isArray(dataIndex)) {\n        return {point: []};\n    }\n\n    var el = data.getItemGraphicEl(dataIndex);\n    var coordSys = seriesModel.coordinateSystem;\n\n    if (seriesModel.getTooltipPosition) {\n        point = seriesModel.getTooltipPosition(dataIndex) || [];\n    }\n    else if (coordSys && coordSys.dataToPoint) {\n        point = coordSys.dataToPoint(\n            data.getValues(\n                zrUtil.map(coordSys.dimensions, function (dim) {\n                    return data.mapDimension(dim);\n                }), dataIndex, true\n            )\n        ) || [];\n    }\n    else if (el) {\n        // Use graphic bounding rect\n        var rect = el.getBoundingRect().clone();\n        rect.applyTransform(el.transform);\n        point = [\n            rect.x + rect.width / 2,\n            rect.y + rect.height / 2\n        ];\n    }\n\n    return {point: point, el: el};\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport {makeInner} from '../../util/model';\nimport * as modelHelper from './modelHelper';\nimport findPointFromSeries from './findPointFromSeries';\n\nvar each = zrUtil.each;\nvar curry = zrUtil.curry;\nvar inner = makeInner();\n\n/**\n * Basic logic: check all axis, if they do not demand show/highlight,\n * then hide/downplay them.\n *\n * @param {Object} coordSysAxesInfo\n * @param {Object} payload\n * @param {string} [payload.currTrigger] 'click' | 'mousemove' | 'leave'\n * @param {Array.<number>} [payload.x] x and y, which are mandatory, specify a point to\n *              trigger axisPointer and tooltip.\n * @param {Array.<number>} [payload.y] x and y, which are mandatory, specify a point to\n *              trigger axisPointer and tooltip.\n * @param {Object} [payload.seriesIndex] finder, optional, restrict target axes.\n * @param {Object} [payload.dataIndex] finder, restrict target axes.\n * @param {Object} [payload.axesInfo] finder, restrict target axes.\n *        [{\n *          axisDim: 'x'|'y'|'angle'|...,\n *          axisIndex: ...,\n *          value: ...\n *        }, ...]\n * @param {Function} [payload.dispatchAction]\n * @param {Object} [payload.tooltipOption]\n * @param {Object|Array.<number>|Function} [payload.position] Tooltip position,\n *        which can be specified in dispatchAction\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @return {Object} content of event obj for echarts.connect.\n */\nexport default function (payload, ecModel, api) {\n    var currTrigger = payload.currTrigger;\n    var point = [payload.x, payload.y];\n    var finder = payload;\n    var dispatchAction = payload.dispatchAction || zrUtil.bind(api.dispatchAction, api);\n    var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;\n\n    // Pending\n    // See #6121. But we are not able to reproduce it yet.\n    if (!coordSysAxesInfo) {\n        return;\n    }\n\n    if (illegalPoint(point)) {\n        // Used in the default behavior of `connection`: use the sample seriesIndex\n        // and dataIndex. And also used in the tooltipView trigger.\n        point = findPointFromSeries({\n            seriesIndex: finder.seriesIndex,\n            // Do not use dataIndexInside from other ec instance.\n            // FIXME: auto detect it?\n            dataIndex: finder.dataIndex\n        }, ecModel).point;\n    }\n    var isIllegalPoint = illegalPoint(point);\n\n    // Axis and value can be specified when calling dispatchAction({type: 'updateAxisPointer'}).\n    // Notice: In this case, it is difficult to get the `point` (which is necessary to show\n    // tooltip, so if point is not given, we just use the point found by sample seriesIndex\n    // and dataIndex.\n    var inputAxesInfo = finder.axesInfo;\n\n    var axesInfo = coordSysAxesInfo.axesInfo;\n    var shouldHide = currTrigger === 'leave' || illegalPoint(point);\n    var outputFinder = {};\n\n    var showValueMap = {};\n    var dataByCoordSys = {list: [], map: {}};\n    var updaters = {\n        showPointer: curry(showPointer, showValueMap),\n        showTooltip: curry(showTooltip, dataByCoordSys)\n    };\n\n    // Process for triggered axes.\n    each(coordSysAxesInfo.coordSysMap, function (coordSys, coordSysKey) {\n        // If a point given, it must be contained by the coordinate system.\n        var coordSysContainsPoint = isIllegalPoint || coordSys.containPoint(point);\n\n        each(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function (axisInfo, key) {\n            var axis = axisInfo.axis;\n            var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo);\n            // If no inputAxesInfo, no axis is restricted.\n            if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) {\n                var val = inputAxisInfo && inputAxisInfo.value;\n                if (val == null && !isIllegalPoint) {\n                    val = axis.pointToData(point);\n                }\n                val != null && processOnAxis(axisInfo, val, updaters, false, outputFinder);\n            }\n        });\n    });\n\n    // Process for linked axes.\n    var linkTriggers = {};\n    each(axesInfo, function (tarAxisInfo, tarKey) {\n        var linkGroup = tarAxisInfo.linkGroup;\n\n        // If axis has been triggered in the previous stage, it should not be triggered by link.\n        if (linkGroup && !showValueMap[tarKey]) {\n            each(linkGroup.axesInfo, function (srcAxisInfo, srcKey) {\n                var srcValItem = showValueMap[srcKey];\n                // If srcValItem exist, source axis is triggered, so link to target axis.\n                if (srcAxisInfo !== tarAxisInfo && srcValItem) {\n                    var val = srcValItem.value;\n                    linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper(\n                        val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo)\n                    )));\n                    linkTriggers[tarAxisInfo.key] = val;\n                }\n            });\n        }\n    });\n    each(linkTriggers, function (val, tarKey) {\n        processOnAxis(axesInfo[tarKey], val, updaters, true, outputFinder);\n    });\n\n    updateModelActually(showValueMap, axesInfo, outputFinder);\n    dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction);\n    dispatchHighDownActually(axesInfo, dispatchAction, api);\n\n    return outputFinder;\n}\n\nfunction processOnAxis(axisInfo, newValue, updaters, dontSnap, outputFinder) {\n    var axis = axisInfo.axis;\n\n    if (axis.scale.isBlank() || !axis.containData(newValue)) {\n        return;\n    }\n\n    if (!axisInfo.involveSeries) {\n        updaters.showPointer(axisInfo, newValue);\n        return;\n    }\n\n    // Heavy calculation. So put it after axis.containData checking.\n    var payloadInfo = buildPayloadsBySeries(newValue, axisInfo);\n    var payloadBatch = payloadInfo.payloadBatch;\n    var snapToValue = payloadInfo.snapToValue;\n\n    // Fill content of event obj for echarts.connect.\n    // By defualt use the first involved series data as a sample to connect.\n    if (payloadBatch[0] && outputFinder.seriesIndex == null) {\n        zrUtil.extend(outputFinder, payloadBatch[0]);\n    }\n\n    // If no linkSource input, this process is for collecting link\n    // target, where snap should not be accepted.\n    if (!dontSnap && axisInfo.snap) {\n        if (axis.containData(snapToValue) && snapToValue != null) {\n            newValue = snapToValue;\n        }\n    }\n\n    updaters.showPointer(axisInfo, newValue, payloadBatch, outputFinder);\n    // Tooltip should always be snapToValue, otherwise there will be\n    // incorrect \"axis value ~ series value\" mapping displayed in tooltip.\n    updaters.showTooltip(axisInfo, payloadInfo, snapToValue);\n}\n\nfunction buildPayloadsBySeries(value, axisInfo) {\n    var axis = axisInfo.axis;\n    var dim = axis.dim;\n    var snapToValue = value;\n    var payloadBatch = [];\n    var minDist = Number.MAX_VALUE;\n    var minDiff = -1;\n\n    each(axisInfo.seriesModels, function (series, idx) {\n        var dataDim = series.getData().mapDimension(dim, true);\n        var seriesNestestValue;\n        var dataIndices;\n\n        if (series.getAxisTooltipData) {\n            var result = series.getAxisTooltipData(dataDim, value, axis);\n            dataIndices = result.dataIndices;\n            seriesNestestValue = result.nestestValue;\n        }\n        else {\n            dataIndices = series.getData().indicesOfNearest(\n                dataDim[0],\n                value,\n                // Add a threshold to avoid find the wrong dataIndex\n                // when data length is not same.\n                // false,\n                axis.type === 'category' ? 0.5 : null\n            );\n            if (!dataIndices.length) {\n                return;\n            }\n            seriesNestestValue = series.getData().get(dataDim[0], dataIndices[0]);\n        }\n\n        if (seriesNestestValue == null || !isFinite(seriesNestestValue)) {\n            return;\n        }\n\n        var diff = value - seriesNestestValue;\n        var dist = Math.abs(diff);\n        // Consider category case\n        if (dist <= minDist) {\n            if (dist < minDist || (diff >= 0 && minDiff < 0)) {\n                minDist = dist;\n                minDiff = diff;\n                snapToValue = seriesNestestValue;\n                payloadBatch.length = 0;\n            }\n            each(dataIndices, function (dataIndex) {\n                payloadBatch.push({\n                    seriesIndex: series.seriesIndex,\n                    dataIndexInside: dataIndex,\n                    dataIndex: series.getData().getRawIndex(dataIndex)\n                });\n            });\n        }\n    });\n\n    return {\n        payloadBatch: payloadBatch,\n        snapToValue: snapToValue\n    };\n}\n\nfunction showPointer(showValueMap, axisInfo, value, payloadBatch) {\n    showValueMap[axisInfo.key] = {value: value, payloadBatch: payloadBatch};\n}\n\nfunction showTooltip(dataByCoordSys, axisInfo, payloadInfo, value) {\n    var payloadBatch = payloadInfo.payloadBatch;\n    var axis = axisInfo.axis;\n    var axisModel = axis.model;\n    var axisPointerModel = axisInfo.axisPointerModel;\n\n    // If no data, do not create anything in dataByCoordSys,\n    // whose length will be used to judge whether dispatch action.\n    if (!axisInfo.triggerTooltip || !payloadBatch.length) {\n        return;\n    }\n\n    var coordSysModel = axisInfo.coordSys.model;\n    var coordSysKey = modelHelper.makeKey(coordSysModel);\n    var coordSysItem = dataByCoordSys.map[coordSysKey];\n    if (!coordSysItem) {\n        coordSysItem = dataByCoordSys.map[coordSysKey] = {\n            coordSysId: coordSysModel.id,\n            coordSysIndex: coordSysModel.componentIndex,\n            coordSysType: coordSysModel.type,\n            coordSysMainType: coordSysModel.mainType,\n            dataByAxis: []\n        };\n        dataByCoordSys.list.push(coordSysItem);\n    }\n\n    coordSysItem.dataByAxis.push({\n        axisDim: axis.dim,\n        axisIndex: axisModel.componentIndex,\n        axisType: axisModel.type,\n        axisId: axisModel.id,\n        value: value,\n        // Caustion: viewHelper.getValueLabel is actually on \"view stage\", which\n        // depends that all models have been updated. So it should not be performed\n        // here. Considering axisPointerModel used here is volatile, which is hard\n        // to be retrieve in TooltipView, we prepare parameters here.\n        valueLabelOpt: {\n            precision: axisPointerModel.get('label.precision'),\n            formatter: axisPointerModel.get('label.formatter')\n        },\n        seriesDataIndices: payloadBatch.slice()\n    });\n}\n\nfunction updateModelActually(showValueMap, axesInfo, outputFinder) {\n    var outputAxesInfo = outputFinder.axesInfo = [];\n    // Basic logic: If no 'show' required, 'hide' this axisPointer.\n    each(axesInfo, function (axisInfo, key) {\n        var option = axisInfo.axisPointerModel.option;\n        var valItem = showValueMap[key];\n\n        if (valItem) {\n            !axisInfo.useHandle && (option.status = 'show');\n            option.value = valItem.value;\n            // For label formatter param and highlight.\n            option.seriesDataIndices = (valItem.payloadBatch || []).slice();\n        }\n        // When always show (e.g., handle used), remain\n        // original value and status.\n        else {\n            // If hide, value still need to be set, consider\n            // click legend to toggle axis blank.\n            !axisInfo.useHandle && (option.status = 'hide');\n        }\n\n        // If status is 'hide', should be no info in payload.\n        option.status === 'show' && outputAxesInfo.push({\n            axisDim: axisInfo.axis.dim,\n            axisIndex: axisInfo.axis.model.componentIndex,\n            value: option.value\n        });\n    });\n}\n\nfunction dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction) {\n    // Basic logic: If no showTip required, hideTip will be dispatched.\n    if (illegalPoint(point) || !dataByCoordSys.list.length) {\n        dispatchAction({type: 'hideTip'});\n        return;\n    }\n\n    // In most case only one axis (or event one series is used). It is\n    // convinient to fetch payload.seriesIndex and payload.dataIndex\n    // dirtectly. So put the first seriesIndex and dataIndex of the first\n    // axis on the payload.\n    var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};\n\n    dispatchAction({\n        type: 'showTip',\n        escapeConnect: true,\n        x: point[0],\n        y: point[1],\n        tooltipOption: payload.tooltipOption,\n        position: payload.position,\n        dataIndexInside: sampleItem.dataIndexInside,\n        dataIndex: sampleItem.dataIndex,\n        seriesIndex: sampleItem.seriesIndex,\n        dataByCoordSys: dataByCoordSys.list\n    });\n}\n\nfunction dispatchHighDownActually(axesInfo, dispatchAction, api) {\n    // FIXME\n    // highlight status modification shoule be a stage of main process?\n    // (Consider confilct (e.g., legend and axisPointer) and setOption)\n\n    var zr = api.getZr();\n    var highDownKey = 'axisPointerLastHighlights';\n    var lastHighlights = inner(zr)[highDownKey] || {};\n    var newHighlights = inner(zr)[highDownKey] = {};\n\n    // Update highlight/downplay status according to axisPointer model.\n    // Build hash map and remove duplicate incidentally.\n    each(axesInfo, function (axisInfo, key) {\n        var option = axisInfo.axisPointerModel.option;\n        option.status === 'show' && each(option.seriesDataIndices, function (batchItem) {\n            var key = batchItem.seriesIndex + ' | ' + batchItem.dataIndex;\n            newHighlights[key] = batchItem;\n        });\n    });\n\n    // Diff.\n    var toHighlight = [];\n    var toDownplay = [];\n    zrUtil.each(lastHighlights, function (batchItem, key) {\n        !newHighlights[key] && toDownplay.push(batchItem);\n    });\n    zrUtil.each(newHighlights, function (batchItem, key) {\n        !lastHighlights[key] && toHighlight.push(batchItem);\n    });\n\n    toDownplay.length && api.dispatchAction({\n        type: 'downplay', escapeConnect: true, batch: toDownplay\n    });\n    toHighlight.length && api.dispatchAction({\n        type: 'highlight', escapeConnect: true, batch: toHighlight\n    });\n}\n\nfunction findInputAxisInfo(inputAxesInfo, axisInfo) {\n    for (var i = 0; i < (inputAxesInfo || []).length; i++) {\n        var inputAxisInfo = inputAxesInfo[i];\n        if (axisInfo.axis.dim === inputAxisInfo.axisDim\n            && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex\n        ) {\n            return inputAxisInfo;\n        }\n    }\n}\n\nfunction makeMapperParam(axisInfo) {\n    var axisModel = axisInfo.axis.model;\n    var item = {};\n    var dim = item.axisDim = axisInfo.axis.dim;\n    item.axisIndex = item[dim + 'AxisIndex'] = axisModel.componentIndex;\n    item.axisName = item[dim + 'AxisName'] = axisModel.name;\n    item.axisId = item[dim + 'AxisId'] = axisModel.id;\n    return item;\n}\n\nfunction illegalPoint(point) {\n    return !point || point[0] == null || isNaN(point[0]) || point[1] == null || isNaN(point[1]);\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\nimport * as echarts from '../../echarts';\n\nvar AxisPointerModel = echarts.extendComponentModel({\n\n    type: 'axisPointer',\n\n    coordSysAxesInfo: null,\n\n    defaultOption: {\n        // 'auto' means that show when triggered by tooltip or handle.\n        show: 'auto',\n        // 'click' | 'mousemove' | 'none'\n        triggerOn: null, // set default in AxisPonterView.js\n\n        zlevel: 0,\n        z: 50,\n\n        type: 'line', // 'line' 'shadow' 'cross' 'none'.\n        // axispointer triggered by tootip determine snap automatically,\n        // see `modelHelper`.\n        snap: false,\n        triggerTooltip: true,\n\n        value: null,\n        status: null, // Init value depends on whether handle is used.\n\n        // [group0, group1, ...]\n        // Each group can be: {\n        //      mapper: function () {},\n        //      singleTooltip: 'multiple',  // 'multiple' or 'single'\n        //      xAxisId: ...,\n        //      yAxisName: ...,\n        //      angleAxisIndex: ...\n        // }\n        // mapper: can be ignored.\n        //      input: {axisInfo, value}\n        //      output: {axisInfo, value}\n        link: [],\n\n        // Do not set 'auto' here, otherwise global animation: false\n        // will not effect at this axispointer.\n        animation: null,\n        animationDurationUpdate: 200,\n\n        lineStyle: {\n            color: '#aaa',\n            width: 1,\n            type: 'solid'\n        },\n\n        shadowStyle: {\n            color: 'rgba(150,150,150,0.3)'\n        },\n\n        label: {\n            show: true,\n            formatter: null, // string | Function\n            precision: 'auto', // Or a number like 0, 1, 2 ...\n            margin: 3,\n            color: '#fff',\n            padding: [5, 7, 5, 7],\n            backgroundColor: 'auto', // default: axis line color\n            borderColor: null,\n            borderWidth: 0,\n            shadowBlur: 3,\n            shadowColor: '#aaa'\n            // Considering applicability, common style should\n            // better not have shadowOffset.\n            // shadowOffsetX: 0,\n            // shadowOffsetY: 2\n        },\n\n        handle: {\n            show: false,\n            /* eslint-disable */\n            icon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z', // jshint ignore:line\n            /* eslint-enable */\n            size: 45,\n            // handle margin is from symbol center to axis, which is stable when circular move.\n            margin: 50,\n            // color: '#1b8bbd'\n            // color: '#2f4554'\n            color: '#333',\n            shadowBlur: 3,\n            shadowColor: '#aaa',\n            shadowOffsetX: 0,\n            shadowOffsetY: 2,\n\n            // For mobile performance\n            throttle: 40\n        }\n    }\n\n});\n\nexport default AxisPointerModel;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport env from 'zrender/src/core/env';\nimport {makeInner} from '../../util/model';\n\nvar inner = makeInner();\nvar each = zrUtil.each;\n\n/**\n * @param {string} key\n * @param {module:echarts/ExtensionAPI} api\n * @param {Function} handler\n *      param: {string} currTrigger\n *      param: {Array.<number>} point\n */\nexport function register(key, api, handler) {\n    if (env.node) {\n        return;\n    }\n\n    var zr = api.getZr();\n    inner(zr).records || (inner(zr).records = {});\n\n    initGlobalListeners(zr, api);\n\n    var record = inner(zr).records[key] || (inner(zr).records[key] = {});\n    record.handler = handler;\n}\n\nfunction initGlobalListeners(zr, api) {\n    if (inner(zr).initialized) {\n        return;\n    }\n\n    inner(zr).initialized = true;\n\n    useHandler('click', zrUtil.curry(doEnter, 'click'));\n    useHandler('mousemove', zrUtil.curry(doEnter, 'mousemove'));\n    // useHandler('mouseout', onLeave);\n    useHandler('globalout', onLeave);\n\n    function useHandler(eventType, cb) {\n        zr.on(eventType, function (e) {\n            var dis = makeDispatchAction(api);\n\n            each(inner(zr).records, function (record) {\n                record && cb(record, e, dis.dispatchAction);\n            });\n\n            dispatchTooltipFinally(dis.pendings, api);\n        });\n    }\n}\n\nfunction dispatchTooltipFinally(pendings, api) {\n    var showLen = pendings.showTip.length;\n    var hideLen = pendings.hideTip.length;\n\n    var actuallyPayload;\n    if (showLen) {\n        actuallyPayload = pendings.showTip[showLen - 1];\n    }\n    else if (hideLen) {\n        actuallyPayload = pendings.hideTip[hideLen - 1];\n    }\n    if (actuallyPayload) {\n        actuallyPayload.dispatchAction = null;\n        api.dispatchAction(actuallyPayload);\n    }\n}\n\nfunction onLeave(record, e, dispatchAction) {\n    record.handler('leave', null, dispatchAction);\n}\n\nfunction doEnter(currTrigger, record, e, dispatchAction) {\n    record.handler(currTrigger, e, dispatchAction);\n}\n\nfunction makeDispatchAction(api) {\n    var pendings = {\n        showTip: [],\n        hideTip: []\n    };\n    // FIXME\n    // better approach?\n    // 'showTip' and 'hideTip' can be triggered by axisPointer and tooltip,\n    // which may be conflict, (axisPointer call showTip but tooltip call hideTip);\n    // So we have to add \"final stage\" to merge those dispatched actions.\n    var dispatchAction = function (payload) {\n        var pendingList = pendings[payload.type];\n        if (pendingList) {\n            pendingList.push(payload);\n        }\n        else {\n            payload.dispatchAction = dispatchAction;\n            api.dispatchAction(payload);\n        }\n    };\n\n    return {\n        dispatchAction: dispatchAction,\n        pendings: pendings\n    };\n}\n\n/**\n * @param {string} key\n * @param {module:echarts/ExtensionAPI} api\n */\nexport function unregister(key, api) {\n    if (env.node) {\n        return;\n    }\n    var zr = api.getZr();\n    var record = (inner(zr).records || {})[key];\n    if (record) {\n        inner(zr).records[key] = null;\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../../echarts';\nimport * as globalListener from './globalListener';\n\nvar AxisPointerView = echarts.extendComponentView({\n\n    type: 'axisPointer',\n\n    render: function (globalAxisPointerModel, ecModel, api) {\n        var globalTooltipModel = ecModel.getComponent('tooltip');\n        var triggerOn = globalAxisPointerModel.get('triggerOn')\n            || (globalTooltipModel && globalTooltipModel.get('triggerOn') || 'mousemove|click');\n\n        // Register global listener in AxisPointerView to enable\n        // AxisPointerView to be independent to Tooltip.\n        globalListener.register(\n            'axisPointer',\n            api,\n            function (currTrigger, e, dispatchAction) {\n                // If 'none', it is not controlled by mouse totally.\n                if (triggerOn !== 'none'\n                    && (currTrigger === 'leave' || triggerOn.indexOf(currTrigger) >= 0)\n                ) {\n                    dispatchAction({\n                        type: 'updateAxisPointer',\n                        currTrigger: currTrigger,\n                        x: e && e.offsetX,\n                        y: e && e.offsetY\n                    });\n                }\n            }\n        );\n    },\n\n    /**\n     * @override\n     */\n    remove: function (ecModel, api) {\n        globalListener.unregister(api.getZr(), 'axisPointer');\n        AxisPointerView.superApply(this._model, 'remove', arguments);\n    },\n\n    /**\n     * @override\n     */\n    dispose: function (ecModel, api) {\n        globalListener.unregister('axisPointer', api);\n        AxisPointerView.superApply(this._model, 'dispose', arguments);\n    }\n\n});\n\nexport default AxisPointerView;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as clazzUtil from '../../util/clazz';\nimport * as graphic from '../../util/graphic';\nimport * as axisPointerModelHelper from './modelHelper';\nimport * as eventTool from 'zrender/src/core/event';\nimport * as throttleUtil from '../../util/throttle';\nimport {makeInner} from '../../util/model';\n\nvar inner = makeInner();\nvar clone = zrUtil.clone;\nvar bind = zrUtil.bind;\n\n/**\n * Base axis pointer class in 2D.\n * Implemenents {module:echarts/component/axis/IAxisPointer}.\n */\nfunction BaseAxisPointer() {\n}\n\nBaseAxisPointer.prototype = {\n\n    /**\n     * @private\n     */\n    _group: null,\n\n    /**\n     * @private\n     */\n    _lastGraphicKey: null,\n\n    /**\n     * @private\n     */\n    _handle: null,\n\n    /**\n     * @private\n     */\n    _dragging: false,\n\n    /**\n     * @private\n     */\n    _lastValue: null,\n\n    /**\n     * @private\n     */\n    _lastStatus: null,\n\n    /**\n     * @private\n     */\n    _payloadInfo: null,\n\n    /**\n     * In px, arbitrary value. Do not set too small,\n     * no animation is ok for most cases.\n     * @protected\n     */\n    animationThreshold: 15,\n\n    /**\n     * @implement\n     */\n    render: function (axisModel, axisPointerModel, api, forceRender) {\n        var value = axisPointerModel.get('value');\n        var status = axisPointerModel.get('status');\n\n        // Bind them to `this`, not in closure, otherwise they will not\n        // be replaced when user calling setOption in not merge mode.\n        this._axisModel = axisModel;\n        this._axisPointerModel = axisPointerModel;\n        this._api = api;\n\n        // Optimize: `render` will be called repeatly during mouse move.\n        // So it is power consuming if performing `render` each time,\n        // especially on mobile device.\n        if (!forceRender\n            && this._lastValue === value\n            && this._lastStatus === status\n        ) {\n            return;\n        }\n        this._lastValue = value;\n        this._lastStatus = status;\n\n        var group = this._group;\n        var handle = this._handle;\n\n        if (!status || status === 'hide') {\n            // Do not clear here, for animation better.\n            group && group.hide();\n            handle && handle.hide();\n            return;\n        }\n        group && group.show();\n        handle && handle.show();\n\n        // Otherwise status is 'show'\n        var elOption = {};\n        this.makeElOption(elOption, value, axisModel, axisPointerModel, api);\n\n        // Enable change axis pointer type.\n        var graphicKey = elOption.graphicKey;\n        if (graphicKey !== this._lastGraphicKey) {\n            this.clear(api);\n        }\n        this._lastGraphicKey = graphicKey;\n\n        var moveAnimation = this._moveAnimation =\n            this.determineAnimation(axisModel, axisPointerModel);\n\n        if (!group) {\n            group = this._group = new graphic.Group();\n            this.createPointerEl(group, elOption, axisModel, axisPointerModel);\n            this.createLabelEl(group, elOption, axisModel, axisPointerModel);\n            api.getZr().add(group);\n        }\n        else {\n            var doUpdateProps = zrUtil.curry(updateProps, axisPointerModel, moveAnimation);\n            this.updatePointerEl(group, elOption, doUpdateProps, axisPointerModel);\n            this.updateLabelEl(group, elOption, doUpdateProps, axisPointerModel);\n        }\n\n        updateMandatoryProps(group, axisPointerModel, true);\n\n        this._renderHandle(value);\n    },\n\n    /**\n     * @implement\n     */\n    remove: function (api) {\n        this.clear(api);\n    },\n\n    /**\n     * @implement\n     */\n    dispose: function (api) {\n        this.clear(api);\n    },\n\n    /**\n     * @protected\n     */\n    determineAnimation: function (axisModel, axisPointerModel) {\n        var animation = axisPointerModel.get('animation');\n        var axis = axisModel.axis;\n        var isCategoryAxis = axis.type === 'category';\n        var useSnap = axisPointerModel.get('snap');\n\n        // Value axis without snap always do not snap.\n        if (!useSnap && !isCategoryAxis) {\n            return false;\n        }\n\n        if (animation === 'auto' || animation == null) {\n            var animationThreshold = this.animationThreshold;\n            if (isCategoryAxis && axis.getBandWidth() > animationThreshold) {\n                return true;\n            }\n\n            // It is important to auto animation when snap used. Consider if there is\n            // a dataZoom, animation will be disabled when too many points exist, while\n            // it will be enabled for better visual effect when little points exist.\n            if (useSnap) {\n                var seriesDataCount = axisPointerModelHelper.getAxisInfo(axisModel).seriesDataCount;\n                var axisExtent = axis.getExtent();\n                // Approximate band width\n                return Math.abs(axisExtent[0] - axisExtent[1]) / seriesDataCount > animationThreshold;\n            }\n\n            return false;\n        }\n\n        return animation === true;\n    },\n\n    /**\n     * add {pointer, label, graphicKey} to elOption\n     * @protected\n     */\n    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n        // Shoule be implemenented by sub-class.\n    },\n\n    /**\n     * @protected\n     */\n    createPointerEl: function (group, elOption, axisModel, axisPointerModel) {\n        var pointerOption = elOption.pointer;\n        if (pointerOption) {\n            var pointerEl = inner(group).pointerEl = new graphic[pointerOption.type](\n                clone(elOption.pointer)\n            );\n            group.add(pointerEl);\n        }\n    },\n\n    /**\n     * @protected\n     */\n    createLabelEl: function (group, elOption, axisModel, axisPointerModel) {\n        if (elOption.label) {\n            var labelEl = inner(group).labelEl = new graphic.Rect(\n                clone(elOption.label)\n            );\n\n            group.add(labelEl);\n            updateLabelShowHide(labelEl, axisPointerModel);\n        }\n    },\n\n    /**\n     * @protected\n     */\n    updatePointerEl: function (group, elOption, updateProps) {\n        var pointerEl = inner(group).pointerEl;\n        if (pointerEl && elOption.pointer) {\n            pointerEl.setStyle(elOption.pointer.style);\n            updateProps(pointerEl, {shape: elOption.pointer.shape});\n        }\n    },\n\n    /**\n     * @protected\n     */\n    updateLabelEl: function (group, elOption, updateProps, axisPointerModel) {\n        var labelEl = inner(group).labelEl;\n        if (labelEl) {\n            labelEl.setStyle(elOption.label.style);\n            updateProps(labelEl, {\n                // Consider text length change in vertical axis, animation should\n                // be used on shape, otherwise the effect will be weird.\n                shape: elOption.label.shape,\n                position: elOption.label.position\n            });\n\n            updateLabelShowHide(labelEl, axisPointerModel);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _renderHandle: function (value) {\n        if (this._dragging || !this.updateHandleTransform) {\n            return;\n        }\n\n        var axisPointerModel = this._axisPointerModel;\n        var zr = this._api.getZr();\n        var handle = this._handle;\n        var handleModel = axisPointerModel.getModel('handle');\n\n        var status = axisPointerModel.get('status');\n        if (!handleModel.get('show') || !status || status === 'hide') {\n            handle && zr.remove(handle);\n            this._handle = null;\n            return;\n        }\n\n        var isInit;\n        if (!this._handle) {\n            isInit = true;\n            handle = this._handle = graphic.createIcon(\n                handleModel.get('icon'),\n                {\n                    cursor: 'move',\n                    draggable: true,\n                    onmousemove: function (e) {\n                        // Fot mobile devicem, prevent screen slider on the button.\n                        eventTool.stop(e.event);\n                    },\n                    onmousedown: bind(this._onHandleDragMove, this, 0, 0),\n                    drift: bind(this._onHandleDragMove, this),\n                    ondragend: bind(this._onHandleDragEnd, this)\n                }\n            );\n            zr.add(handle);\n        }\n\n        updateMandatoryProps(handle, axisPointerModel, false);\n\n        // update style\n        var includeStyles = [\n            'color', 'borderColor', 'borderWidth', 'opacity',\n            'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'\n        ];\n        handle.setStyle(handleModel.getItemStyle(null, includeStyles));\n\n        // update position\n        var handleSize = handleModel.get('size');\n        if (!zrUtil.isArray(handleSize)) {\n            handleSize = [handleSize, handleSize];\n        }\n        handle.attr('scale', [handleSize[0] / 2, handleSize[1] / 2]);\n\n        throttleUtil.createOrUpdate(\n            this,\n            '_doDispatchAxisPointer',\n            handleModel.get('throttle') || 0,\n            'fixRate'\n        );\n\n        this._moveHandleToValue(value, isInit);\n    },\n\n    /**\n     * @private\n     */\n    _moveHandleToValue: function (value, isInit) {\n        updateProps(\n            this._axisPointerModel,\n            !isInit && this._moveAnimation,\n            this._handle,\n            getHandleTransProps(this.getHandleTransform(\n                value, this._axisModel, this._axisPointerModel\n            ))\n        );\n    },\n\n    /**\n     * @private\n     */\n    _onHandleDragMove: function (dx, dy) {\n        var handle = this._handle;\n        if (!handle) {\n            return;\n        }\n\n        this._dragging = true;\n\n        // Persistent for throttle.\n        var trans = this.updateHandleTransform(\n            getHandleTransProps(handle),\n            [dx, dy],\n            this._axisModel,\n            this._axisPointerModel\n        );\n        this._payloadInfo = trans;\n\n        handle.stopAnimation();\n        handle.attr(getHandleTransProps(trans));\n        inner(handle).lastProp = null;\n\n        this._doDispatchAxisPointer();\n    },\n\n    /**\n     * Throttled method.\n     * @private\n     */\n    _doDispatchAxisPointer: function () {\n        var handle = this._handle;\n        if (!handle) {\n            return;\n        }\n\n        var payloadInfo = this._payloadInfo;\n        var axisModel = this._axisModel;\n        this._api.dispatchAction({\n            type: 'updateAxisPointer',\n            x: payloadInfo.cursorPoint[0],\n            y: payloadInfo.cursorPoint[1],\n            tooltipOption: payloadInfo.tooltipOption,\n            axesInfo: [{\n                axisDim: axisModel.axis.dim,\n                axisIndex: axisModel.componentIndex\n            }]\n        });\n    },\n\n    /**\n     * @private\n     */\n    _onHandleDragEnd: function (moveAnimation) {\n        this._dragging = false;\n        var handle = this._handle;\n        if (!handle) {\n            return;\n        }\n\n        var value = this._axisPointerModel.get('value');\n        // Consider snap or categroy axis, handle may be not consistent with\n        // axisPointer. So move handle to align the exact value position when\n        // drag ended.\n        this._moveHandleToValue(value);\n\n        // For the effect: tooltip will be shown when finger holding on handle\n        // button, and will be hidden after finger left handle button.\n        this._api.dispatchAction({\n            type: 'hideTip'\n        });\n    },\n\n    /**\n     * Should be implemenented by sub-class if support `handle`.\n     * @protected\n     * @param {number} value\n     * @param {module:echarts/model/Model} axisModel\n     * @param {module:echarts/model/Model} axisPointerModel\n     * @return {Object} {position: [x, y], rotation: 0}\n     */\n    getHandleTransform: null,\n\n    /**\n     * * Should be implemenented by sub-class if support `handle`.\n     * @protected\n     * @param {Object} transform {position, rotation}\n     * @param {Array.<number>} delta [dx, dy]\n     * @param {module:echarts/model/Model} axisModel\n     * @param {module:echarts/model/Model} axisPointerModel\n     * @return {Object} {position: [x, y], rotation: 0, cursorPoint: [x, y]}\n     */\n    updateHandleTransform: null,\n\n    /**\n     * @private\n     */\n    clear: function (api) {\n        this._lastValue = null;\n        this._lastStatus = null;\n\n        var zr = api.getZr();\n        var group = this._group;\n        var handle = this._handle;\n        if (zr && group) {\n            this._lastGraphicKey = null;\n            group && zr.remove(group);\n            handle && zr.remove(handle);\n            this._group = null;\n            this._handle = null;\n            this._payloadInfo = null;\n        }\n    },\n\n    /**\n     * @protected\n     */\n    doClear: function () {\n        // Implemented by sub-class if necessary.\n    },\n\n    /**\n     * @protected\n     * @param {Array.<number>} xy\n     * @param {Array.<number>} wh\n     * @param {number} [xDimIndex=0] or 1\n     */\n    buildLabel: function (xy, wh, xDimIndex) {\n        xDimIndex = xDimIndex || 0;\n        return {\n            x: xy[xDimIndex],\n            y: xy[1 - xDimIndex],\n            width: wh[xDimIndex],\n            height: wh[1 - xDimIndex]\n        };\n    }\n};\n\nBaseAxisPointer.prototype.constructor = BaseAxisPointer;\n\n\nfunction updateProps(animationModel, moveAnimation, el, props) {\n    // Animation optimize.\n    if (!propsEqual(inner(el).lastProp, props)) {\n        inner(el).lastProp = props;\n        moveAnimation\n            ? graphic.updateProps(el, props, animationModel)\n            : (el.stopAnimation(), el.attr(props));\n    }\n}\n\nfunction propsEqual(lastProps, newProps) {\n    if (zrUtil.isObject(lastProps) && zrUtil.isObject(newProps)) {\n        var equals = true;\n        zrUtil.each(newProps, function (item, key) {\n            equals = equals && propsEqual(lastProps[key], item);\n        });\n        return !!equals;\n    }\n    else {\n        return lastProps === newProps;\n    }\n}\n\nfunction updateLabelShowHide(labelEl, axisPointerModel) {\n    labelEl[axisPointerModel.get('label.show') ? 'show' : 'hide']();\n}\n\nfunction getHandleTransProps(trans) {\n    return {\n        position: trans.position.slice(),\n        rotation: trans.rotation || 0\n    };\n}\n\nfunction updateMandatoryProps(group, axisPointerModel, silent) {\n    var z = axisPointerModel.get('z');\n    var zlevel = axisPointerModel.get('zlevel');\n\n    group && group.traverse(function (el) {\n        if (el.type !== 'group') {\n            z != null && (el.z = z);\n            zlevel != null && (el.zlevel = zlevel);\n            el.silent = silent;\n        }\n    });\n}\n\nclazzUtil.enableClassExtend(BaseAxisPointer);\n\nexport default BaseAxisPointer;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport * as textContain from 'zrender/src/contain/text';\nimport * as formatUtil from '../../util/format';\nimport * as matrix from 'zrender/src/core/matrix';\nimport * as axisHelper from '../../coord/axisHelper';\nimport AxisBuilder from '../axis/AxisBuilder';\n\n/**\n * @param {module:echarts/model/Model} axisPointerModel\n */\nexport function buildElStyle(axisPointerModel) {\n    var axisPointerType = axisPointerModel.get('type');\n    var styleModel = axisPointerModel.getModel(axisPointerType + 'Style');\n    var style;\n    if (axisPointerType === 'line') {\n        style = styleModel.getLineStyle();\n        style.fill = null;\n    }\n    else if (axisPointerType === 'shadow') {\n        style = styleModel.getAreaStyle();\n        style.stroke = null;\n    }\n    return style;\n}\n\n/**\n * @param {Function} labelPos {align, verticalAlign, position}\n */\nexport function buildLabelElOption(\n    elOption, axisModel, axisPointerModel, api, labelPos\n) {\n    var value = axisPointerModel.get('value');\n    var text = getValueLabel(\n        value, axisModel.axis, axisModel.ecModel,\n        axisPointerModel.get('seriesDataIndices'),\n        {\n            precision: axisPointerModel.get('label.precision'),\n            formatter: axisPointerModel.get('label.formatter')\n        }\n    );\n    var labelModel = axisPointerModel.getModel('label');\n    var paddings = formatUtil.normalizeCssArray(labelModel.get('padding') || 0);\n\n    var font = labelModel.getFont();\n    var textRect = textContain.getBoundingRect(text, font);\n\n    var position = labelPos.position;\n    var width = textRect.width + paddings[1] + paddings[3];\n    var height = textRect.height + paddings[0] + paddings[2];\n\n    // Adjust by align.\n    var align = labelPos.align;\n    align === 'right' && (position[0] -= width);\n    align === 'center' && (position[0] -= width / 2);\n    var verticalAlign = labelPos.verticalAlign;\n    verticalAlign === 'bottom' && (position[1] -= height);\n    verticalAlign === 'middle' && (position[1] -= height / 2);\n\n    // Not overflow ec container\n    confineInContainer(position, width, height, api);\n\n    var bgColor = labelModel.get('backgroundColor');\n    if (!bgColor || bgColor === 'auto') {\n        bgColor = axisModel.get('axisLine.lineStyle.color');\n    }\n\n    elOption.label = {\n        shape: {x: 0, y: 0, width: width, height: height, r: labelModel.get('borderRadius')},\n        position: position.slice(),\n        // TODO: rich\n        style: {\n            text: text,\n            textFont: font,\n            textFill: labelModel.getTextColor(),\n            textPosition: 'inside',\n            textPadding: paddings,\n            fill: bgColor,\n            stroke: labelModel.get('borderColor') || 'transparent',\n            lineWidth: labelModel.get('borderWidth') || 0,\n            shadowBlur: labelModel.get('shadowBlur'),\n            shadowColor: labelModel.get('shadowColor'),\n            shadowOffsetX: labelModel.get('shadowOffsetX'),\n            shadowOffsetY: labelModel.get('shadowOffsetY')\n        },\n        // Lable should be over axisPointer.\n        z2: 10\n    };\n}\n\n// Do not overflow ec container\nfunction confineInContainer(position, width, height, api) {\n    var viewWidth = api.getWidth();\n    var viewHeight = api.getHeight();\n    position[0] = Math.min(position[0] + width, viewWidth) - width;\n    position[1] = Math.min(position[1] + height, viewHeight) - height;\n    position[0] = Math.max(position[0], 0);\n    position[1] = Math.max(position[1], 0);\n}\n\n/**\n * @param {number} value\n * @param {module:echarts/coord/Axis} axis\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} opt\n * @param {Array.<Object>} seriesDataIndices\n * @param {number|string} opt.precision 'auto' or a number\n * @param {string|Function} opt.formatter label formatter\n */\nexport function getValueLabel(value, axis, ecModel, seriesDataIndices, opt) {\n    value = axis.scale.parse(value);\n    var text = axis.scale.getLabel(\n        // If `precision` is set, width can be fixed (like '12.00500'), which\n        // helps to debounce when when moving label.\n        value, {precision: opt.precision}\n    );\n    var formatter = opt.formatter;\n\n    if (formatter) {\n        var params = {\n            value: axisHelper.getAxisRawValue(axis, value),\n            axisDimension: axis.dim,\n            axisIndex: axis.index,\n            seriesData: []\n        };\n        zrUtil.each(seriesDataIndices, function (idxItem) {\n            var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);\n            var dataIndex = idxItem.dataIndexInside;\n            var dataParams = series && series.getDataParams(dataIndex);\n            dataParams && params.seriesData.push(dataParams);\n        });\n\n        if (zrUtil.isString(formatter)) {\n            text = formatter.replace('{value}', text);\n        }\n        else if (zrUtil.isFunction(formatter)) {\n            text = formatter(params);\n        }\n    }\n\n    return text;\n}\n\n/**\n * @param {module:echarts/coord/Axis} axis\n * @param {number} value\n * @param {Object} layoutInfo {\n *  rotation, position, labelOffset, labelDirection, labelMargin\n * }\n */\nexport function getTransformedPosition(axis, value, layoutInfo) {\n    var transform = matrix.create();\n    matrix.rotate(transform, transform, layoutInfo.rotation);\n    matrix.translate(transform, transform, layoutInfo.position);\n\n    return graphic.applyTransform([\n        axis.dataToCoord(value),\n        (layoutInfo.labelOffset || 0)\n            + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0)\n    ], transform);\n}\n\nexport function buildCartesianSingleLabelElOption(\n    value, elOption, layoutInfo, axisModel, axisPointerModel, api\n) {\n    var textLayout = AxisBuilder.innerTextLayout(\n        layoutInfo.rotation, 0, layoutInfo.labelDirection\n    );\n    layoutInfo.labelMargin = axisPointerModel.get('label.margin');\n    buildLabelElOption(elOption, axisModel, axisPointerModel, api, {\n        position: getTransformedPosition(axisModel.axis, value, layoutInfo),\n        align: textLayout.textAlign,\n        verticalAlign: textLayout.textVerticalAlign\n    });\n}\n\n/**\n * @param {Array.<number>} p1\n * @param {Array.<number>} p2\n * @param {number} [xDimIndex=0] or 1\n */\nexport function makeLineShape(p1, p2, xDimIndex) {\n    xDimIndex = xDimIndex || 0;\n    return {\n        x1: p1[xDimIndex],\n        y1: p1[1 - xDimIndex],\n        x2: p2[xDimIndex],\n        y2: p2[1 - xDimIndex]\n    };\n}\n\n/**\n * @param {Array.<number>} xy\n * @param {Array.<number>} wh\n * @param {number} [xDimIndex=0] or 1\n */\nexport function makeRectShape(xy, wh, xDimIndex) {\n    xDimIndex = xDimIndex || 0;\n    return {\n        x: xy[xDimIndex],\n        y: xy[1 - xDimIndex],\n        width: wh[xDimIndex],\n        height: wh[1 - xDimIndex]\n    };\n}\n\nexport function makeSectorShape(cx, cy, r0, r, startAngle, endAngle) {\n    return {\n        cx: cx,\n        cy: cy,\n        r0: r0,\n        r: r,\n        startAngle: startAngle,\n        endAngle: endAngle,\n        clockwise: true\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport BaseAxisPointer from './BaseAxisPointer';\nimport * as viewHelper from './viewHelper';\nimport * as cartesianAxisHelper from '../../coord/cartesian/cartesianAxisHelper';\nimport AxisView from '../axis/AxisView';\n\nvar CartesianAxisPointer = BaseAxisPointer.extend({\n\n    /**\n     * @override\n     */\n    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n        var axis = axisModel.axis;\n        var grid = axis.grid;\n        var axisPointerType = axisPointerModel.get('type');\n        var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();\n        var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true));\n\n        if (axisPointerType && axisPointerType !== 'none') {\n            var elStyle = viewHelper.buildElStyle(axisPointerModel);\n            var pointerOption = pointerShapeBuilder[axisPointerType](\n                axis, pixelValue, otherExtent\n            );\n            pointerOption.style = elStyle;\n            elOption.graphicKey = pointerOption.type;\n            elOption.pointer = pointerOption;\n        }\n\n        var layoutInfo = cartesianAxisHelper.layout(grid.model, axisModel);\n        viewHelper.buildCartesianSingleLabelElOption(\n            value, elOption, layoutInfo, axisModel, axisPointerModel, api\n        );\n    },\n\n    /**\n     * @override\n     */\n    getHandleTransform: function (value, axisModel, axisPointerModel) {\n        var layoutInfo = cartesianAxisHelper.layout(axisModel.axis.grid.model, axisModel, {\n            labelInside: false\n        });\n        layoutInfo.labelMargin = axisPointerModel.get('handle.margin');\n        return {\n            position: viewHelper.getTransformedPosition(axisModel.axis, value, layoutInfo),\n            rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)\n        };\n    },\n\n    /**\n     * @override\n     */\n    updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) {\n        var axis = axisModel.axis;\n        var grid = axis.grid;\n        var axisExtent = axis.getGlobalExtent(true);\n        var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();\n        var dimIndex = axis.dim === 'x' ? 0 : 1;\n\n        var currPosition = transform.position;\n        currPosition[dimIndex] += delta[dimIndex];\n        currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);\n        currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);\n\n        var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;\n        var cursorPoint = [cursorOtherValue, cursorOtherValue];\n        cursorPoint[dimIndex] = currPosition[dimIndex];\n\n        // Make tooltip do not overlap axisPointer and in the middle of the grid.\n        var tooltipOptions = [{verticalAlign: 'middle'}, {align: 'center'}];\n\n        return {\n            position: currPosition,\n            rotation: transform.rotation,\n            cursorPoint: cursorPoint,\n            tooltipOption: tooltipOptions[dimIndex]\n        };\n    }\n\n});\n\nfunction getCartesian(grid, axis) {\n    var opt = {};\n    opt[axis.dim + 'AxisIndex'] = axis.index;\n    return grid.getCartesian(opt);\n}\n\nvar pointerShapeBuilder = {\n\n    line: function (axis, pixelValue, otherExtent) {\n        var targetShape = viewHelper.makeLineShape(\n            [pixelValue, otherExtent[0]],\n            [pixelValue, otherExtent[1]],\n            getAxisDimIndex(axis)\n        );\n        return {\n            type: 'Line',\n            subPixelOptimize: true,\n            shape: targetShape\n        };\n    },\n\n    shadow: function (axis, pixelValue, otherExtent) {\n        var bandWidth = Math.max(1, axis.getBandWidth());\n        var span = otherExtent[1] - otherExtent[0];\n        return {\n            type: 'Rect',\n            shape: viewHelper.makeRectShape(\n                [pixelValue - bandWidth / 2, otherExtent[0]],\n                [bandWidth, span],\n                getAxisDimIndex(axis)\n            )\n        };\n    }\n};\n\nfunction getAxisDimIndex(axis) {\n    return axis.dim === 'x' ? 0 : 1;\n}\n\nAxisView.registerAxisPointerClass('CartesianAxisPointer', CartesianAxisPointer);\n\nexport default CartesianAxisPointer;","/*\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\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as axisPointerModelHelper from './axisPointer/modelHelper';\nimport axisTrigger from './axisPointer/axisTrigger';\n\nimport './axisPointer/AxisPointerModel';\nimport './axisPointer/AxisPointerView';\n\n// CartesianAxisPointer is not supposed to be required here. But consider\n// echarts.simple.js and online build tooltip, which only require gridSimple,\n// CartesianAxisPointer should be able to required somewhere.\nimport './axisPointer/CartesianAxisPointer';\n\necharts.registerPreprocessor(function (option) {\n    // Always has a global axisPointerModel for default setting.\n    if (option) {\n        (!option.axisPointer || option.axisPointer.length === 0)\n            && (option.axisPointer = {});\n\n        var link = option.axisPointer.link;\n        // Normalize to array to avoid object mergin. But if link\n        // is not set, remain null/undefined, otherwise it will\n        // override existent link setting.\n        if (link && !zrUtil.isArray(link)) {\n            option.axisPointer.link = [link];\n        }\n    }\n});\n\n// This process should proformed after coordinate systems created\n// and series data processed. So put it on statistic processing stage.\necharts.registerProcessor(echarts.PRIORITY.PROCESSOR.STATISTIC, function (ecModel, api) {\n    // Build axisPointerModel, mergin tooltip.axisPointer model for each axis.\n    // allAxesInfo should be updated when setOption performed.\n    ecModel.getComponent('axisPointer').coordSysAxesInfo =\n        axisPointerModelHelper.collect(ecModel, api);\n});\n\n// Broadcast to all views.\necharts.registerAction({\n    type: 'updateAxisPointer',\n    event: 'updateAxisPointer',\n    update: ':updateAxisPointer'\n}, axisTrigger);\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\nimport BaseAxisPointer from './BaseAxisPointer';\nimport * as viewHelper from './viewHelper';\nimport * as singleAxisHelper from '../../coord/single/singleAxisHelper';\nimport AxisView from '../axis/AxisView';\n\nvar XY = ['x', 'y'];\nvar WH = ['width', 'height'];\n\nvar SingleAxisPointer = BaseAxisPointer.extend({\n\n    /**\n     * @override\n     */\n    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n        var axis = axisModel.axis;\n        var coordSys = axis.coordinateSystem;\n        var otherExtent = getGlobalExtent(coordSys, 1 - getPointDimIndex(axis));\n        var pixelValue = coordSys.dataToPoint(value)[0];\n\n        var axisPointerType = axisPointerModel.get('type');\n        if (axisPointerType && axisPointerType !== 'none') {\n            var elStyle = viewHelper.buildElStyle(axisPointerModel);\n            var pointerOption = pointerShapeBuilder[axisPointerType](\n                axis, pixelValue, otherExtent\n            );\n            pointerOption.style = elStyle;\n\n            elOption.graphicKey = pointerOption.type;\n            elOption.pointer = pointerOption;\n        }\n\n        var layoutInfo = singleAxisHelper.layout(axisModel);\n        viewHelper.buildCartesianSingleLabelElOption(\n            value, elOption, layoutInfo, axisModel, axisPointerModel, api\n        );\n    },\n\n    /**\n     * @override\n     */\n    getHandleTransform: function (value, axisModel, axisPointerModel) {\n        var layoutInfo = singleAxisHelper.layout(axisModel, {labelInside: false});\n        layoutInfo.labelMargin = axisPointerModel.get('handle.margin');\n        return {\n            position: viewHelper.getTransformedPosition(axisModel.axis, value, layoutInfo),\n            rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)\n        };\n    },\n\n    /**\n     * @override\n     */\n    updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) {\n        var axis = axisModel.axis;\n        var coordSys = axis.coordinateSystem;\n        var dimIndex = getPointDimIndex(axis);\n        var axisExtent = getGlobalExtent(coordSys, dimIndex);\n        var currPosition = transform.position;\n        currPosition[dimIndex] += delta[dimIndex];\n        currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);\n        currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);\n        var otherExtent = getGlobalExtent(coordSys, 1 - dimIndex);\n        var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;\n        var cursorPoint = [cursorOtherValue, cursorOtherValue];\n        cursorPoint[dimIndex] = currPosition[dimIndex];\n\n        return {\n            position: currPosition,\n            rotation: transform.rotation,\n            cursorPoint: cursorPoint,\n            tooltipOption: {\n                verticalAlign: 'middle'\n            }\n        };\n    }\n});\n\nvar pointerShapeBuilder = {\n\n    line: function (axis, pixelValue, otherExtent) {\n        var targetShape = viewHelper.makeLineShape(\n            [pixelValue, otherExtent[0]],\n            [pixelValue, otherExtent[1]],\n            getPointDimIndex(axis)\n        );\n        return {\n            type: 'Line',\n            subPixelOptimize: true,\n            shape: targetShape\n        };\n    },\n\n    shadow: function (axis, pixelValue, otherExtent) {\n        var bandWidth = axis.getBandWidth();\n        var span = otherExtent[1] - otherExtent[0];\n        return {\n            type: 'Rect',\n            shape: viewHelper.makeRectShape(\n                [pixelValue - bandWidth / 2, otherExtent[0]],\n                [bandWidth, span],\n                getPointDimIndex(axis)\n            )\n        };\n    }\n};\n\nfunction getPointDimIndex(axis) {\n    return axis.isHorizontal() ? 0 : 1;\n}\n\nfunction getGlobalExtent(coordSys, dimIndex) {\n    var rect = coordSys.getRect();\n    return [rect[XY[dimIndex]], rect[XY[dimIndex]] + rect[WH[dimIndex]]];\n}\n\nAxisView.registerAxisPointerClass('SingleAxisPointer', SingleAxisPointer);\n\nexport default SingleAxisPointer;","/*\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\nimport * as echarts from '../echarts';\n\nimport '../coord/single/singleCreator';\nimport './axis/SingleAxisView';\nimport '../coord/single/AxisModel';\nimport './axisPointer';\nimport './axisPointer/SingleAxisPointer';\n\necharts.extendComponentView({\n    type: 'single'\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\nimport SeriesModel from '../../model/Series';\nimport createDimensions from '../../data/helper/createDimensions';\nimport {getDimensionTypeByAxis} from '../../data/helper/dimensionHelper';\nimport List from '../../data/List';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {groupData} from '../../util/model';\nimport {encodeHTML} from '../../util/format';\n\nvar DATA_NAME_INDEX = 2;\n\nvar ThemeRiverSeries = SeriesModel.extend({\n\n    type: 'series.themeRiver',\n\n    dependencies: ['singleAxis'],\n\n    /**\n     * @readOnly\n     * @type {module:zrender/core/util#HashMap}\n     */\n    nameMap: null,\n\n    /**\n     * @override\n     */\n    init: function (option) {\n        // eslint-disable-next-line\n        ThemeRiverSeries.superApply(this, 'init', arguments);\n\n        // Put this function here is for the sake of consistency of code style.\n        // Enable legend selection for each data item\n        // Use a function instead of direct access because data reference may changed\n        this.legendDataProvider = function () {\n            return this.getRawData();\n        };\n    },\n\n    /**\n     * If there is no value of a certain point in the time for some event,set it value to 0.\n     *\n     * @param {Array} data  initial data in the option\n     * @return {Array}\n     */\n    fixData: function (data) {\n        var rawDataLength = data.length;\n\n        // grouped data by name\n        var groupResult = groupData(data, function (item) {\n            return item[2];\n        });\n        var layData = [];\n        groupResult.buckets.each(function (items, key) {\n            layData.push({name: key, dataList: items});\n        });\n\n        var layerNum = layData.length;\n        var largestLayer = -1;\n        var index = -1;\n        for (var i = 0; i < layerNum; ++i) {\n            var len = layData[i].dataList.length;\n            if (len > largestLayer) {\n                largestLayer = len;\n                index = i;\n            }\n        }\n\n        for (var k = 0; k < layerNum; ++k) {\n            if (k === index) {\n                continue;\n            }\n            var name = layData[k].name;\n            for (var j = 0; j < largestLayer; ++j) {\n                var timeValue = layData[index].dataList[j][0];\n                var length = layData[k].dataList.length;\n                var keyIndex = -1;\n                for (var l = 0; l < length; ++l) {\n                    var value = layData[k].dataList[l][0];\n                    if (value === timeValue) {\n                        keyIndex = l;\n                        break;\n                    }\n                }\n                if (keyIndex === -1) {\n                    data[rawDataLength] = [];\n                    data[rawDataLength][0] = timeValue;\n                    data[rawDataLength][1] = 0;\n                    data[rawDataLength][2] = name;\n                    rawDataLength++;\n\n                }\n            }\n        }\n        return data;\n    },\n\n    /**\n     * @override\n     * @param  {Object} option  the initial option that user gived\n     * @param  {module:echarts/model/Model} ecModel  the model object for themeRiver option\n     * @return {module:echarts/data/List}\n     */\n    getInitialData: function (option, ecModel) {\n\n        var singleAxisModel = ecModel.queryComponents({\n            mainType: 'singleAxis',\n            index: this.get('singleAxisIndex'),\n            id: this.get('singleAxisId')\n        })[0];\n\n        var axisType = singleAxisModel.get('type');\n\n        // filter the data item with the value of label is undefined\n        var filterData = zrUtil.filter(option.data, function (dataItem) {\n            return dataItem[2] !== undefined;\n        });\n\n        // ??? TODO design a stage to transfer data for themeRiver and lines?\n        var data = this.fixData(filterData || []);\n        var nameList = [];\n        var nameMap = this.nameMap = zrUtil.createHashMap();\n        var count = 0;\n\n        for (var i = 0; i < data.length; ++i) {\n            nameList.push(data[i][DATA_NAME_INDEX]);\n            if (!nameMap.get(data[i][DATA_NAME_INDEX])) {\n                nameMap.set(data[i][DATA_NAME_INDEX], count);\n                count++;\n            }\n        }\n\n        var dimensionsInfo = createDimensions(data, {\n            coordDimensions: ['single'],\n            dimensionsDefine: [\n                {\n                    name: 'time',\n                    type: getDimensionTypeByAxis(axisType)\n                },\n                {\n                    name: 'value',\n                    type: 'float'\n                },\n                {\n                    name: 'name',\n                    type: 'ordinal'\n                }\n            ],\n            encodeDefine: {\n                single: 0,\n                value: 1,\n                itemName: 2\n            }\n        });\n\n        var list = new List(dimensionsInfo, this);\n        list.initData(data);\n\n        return list;\n    },\n\n    /**\n     * The raw data is divided into multiple layers and each layer\n     *     has same name.\n     *\n     * @return {Array.<Array.<number>>}\n     */\n    getLayerSeries: function () {\n        var data = this.getData();\n        var lenCount = data.count();\n        var indexArr = [];\n\n        for (var i = 0; i < lenCount; ++i) {\n            indexArr[i] = i;\n        }\n\n        var timeDim = data.mapDimension('single');\n\n        // data group by name\n        var groupResult = groupData(indexArr, function (index) {\n            return data.get('name', index);\n        });\n        var layerSeries = [];\n        groupResult.buckets.each(function (items, key) {\n            items.sort(function (index1, index2) {\n                return data.get(timeDim, index1) - data.get(timeDim, index2);\n            });\n            layerSeries.push({name: key, indices: items});\n        });\n\n        return layerSeries;\n    },\n\n    /**\n     * Get data indices for show tooltip content\n\n     * @param {Array.<string>|string} dim  single coordinate dimension\n     * @param {number} value axis value\n     * @param {module:echarts/coord/single/SingleAxis} baseAxis  single Axis used\n     *     the themeRiver.\n     * @return {Object} {dataIndices, nestestValue}\n     */\n    getAxisTooltipData: function (dim, value, baseAxis) {\n        if (!zrUtil.isArray(dim)) {\n            dim = dim ? [dim] : [];\n        }\n\n        var data = this.getData();\n        var layerSeries = this.getLayerSeries();\n        var indices = [];\n        var layerNum = layerSeries.length;\n        var nestestValue;\n\n        for (var i = 0; i < layerNum; ++i) {\n            var minDist = Number.MAX_VALUE;\n            var nearestIdx = -1;\n            var pointNum = layerSeries[i].indices.length;\n            for (var j = 0; j < pointNum; ++j) {\n                var theValue = data.get(dim[0], layerSeries[i].indices[j]);\n                var dist = Math.abs(theValue - value);\n                if (dist <= minDist) {\n                    nestestValue = theValue;\n                    minDist = dist;\n                    nearestIdx = layerSeries[i].indices[j];\n                }\n            }\n            indices.push(nearestIdx);\n        }\n\n        return {dataIndices: indices, nestestValue: nestestValue};\n    },\n\n    /**\n     * @override\n     * @param {number} dataIndex  index of data\n     */\n    formatTooltip: function (dataIndex) {\n        var data = this.getData();\n        var htmlName = data.getName(dataIndex);\n        var htmlValue = data.get(data.mapDimension('value'), dataIndex);\n        if (isNaN(htmlValue) || htmlValue == null) {\n            htmlValue = '-';\n        }\n        return encodeHTML(htmlName + ' : ' + htmlValue);\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n\n        coordinateSystem: 'singleAxis',\n\n        // gap in axis's orthogonal orientation\n        boundaryGap: ['10%', '10%'],\n\n        // legendHoverLink: true,\n\n        singleAxisIndex: 0,\n\n        animationEasing: 'linear',\n\n        label: {\n            margin: 4,\n            show: true,\n            position: 'left',\n            color: '#000',\n            fontSize: 11\n        },\n\n        emphasis: {\n            label: {\n                show: true\n            }\n        }\n    }\n});\n\nexport default ThemeRiverSeries;","/*\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\nimport * as echarts from '../../echarts';\nimport {Polygon} from '../line/poly';\nimport * as graphic from '../../util/graphic';\nimport {bind, extend} from 'zrender/src/core/util';\nimport DataDiffer from '../../data/DataDiffer';\n\nexport default echarts.extendChartView({\n\n    type: 'themeRiver',\n\n    init: function () {\n        this._layers = [];\n    },\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n\n        var group = this.group;\n\n        var layerSeries = seriesModel.getLayerSeries();\n\n        var layoutInfo = data.getLayout('layoutInfo');\n        var rect = layoutInfo.rect;\n        var boundaryGap = layoutInfo.boundaryGap;\n\n        group.attr('position', [0, rect.y + boundaryGap[0]]);\n\n        function keyGetter(item) {\n            return item.name;\n        }\n        var dataDiffer = new DataDiffer(\n            this._layersSeries || [], layerSeries,\n            keyGetter, keyGetter\n        );\n\n        var newLayersGroups = {};\n\n        dataDiffer\n            .add(bind(process, this, 'add'))\n            .update(bind(process, this, 'update'))\n            .remove(bind(process, this, 'remove'))\n            .execute();\n\n        function process(status, idx, oldIdx) {\n            var oldLayersGroups = this._layers;\n            if (status === 'remove') {\n                group.remove(oldLayersGroups[idx]);\n                return;\n            }\n            var points0 = [];\n            var points1 = [];\n            var color;\n            var indices = layerSeries[idx].indices;\n            for (var j = 0; j < indices.length; j++) {\n                var layout = data.getItemLayout(indices[j]);\n                var x = layout.x;\n                var y0 = layout.y0;\n                var y = layout.y;\n\n                points0.push([x, y0]);\n                points1.push([x, y0 + y]);\n\n                color = data.getItemVisual(indices[j], 'color');\n            }\n\n            var polygon;\n            var text;\n            var textLayout = data.getItemLayout(indices[0]);\n            var itemModel = data.getItemModel(indices[j - 1]);\n            var labelModel = itemModel.getModel('label');\n            var margin = labelModel.get('margin');\n            if (status === 'add') {\n                var layerGroup = newLayersGroups[idx] = new graphic.Group();\n                polygon = new Polygon({\n                    shape: {\n                        points: points0,\n                        stackedOnPoints: points1,\n                        smooth: 0.4,\n                        stackedOnSmooth: 0.4,\n                        smoothConstraint: false\n                    },\n                    z2: 0\n                });\n                text = new graphic.Text({\n                    style: {\n                        x: textLayout.x - margin,\n                        y: textLayout.y0 + textLayout.y / 2\n                    }\n                });\n                layerGroup.add(polygon);\n                layerGroup.add(text);\n                group.add(layerGroup);\n\n                polygon.setClipPath(createGridClipShape(polygon.getBoundingRect(), seriesModel, function () {\n                    polygon.removeClipPath();\n                }));\n            }\n            else {\n                var layerGroup = oldLayersGroups[oldIdx];\n                polygon = layerGroup.childAt(0);\n                text = layerGroup.childAt(1);\n                group.add(layerGroup);\n\n                newLayersGroups[idx] = layerGroup;\n\n                graphic.updateProps(polygon, {\n                    shape: {\n                        points: points0,\n                        stackedOnPoints: points1\n                    }\n                }, seriesModel);\n\n                graphic.updateProps(text, {\n                    style: {\n                        x: textLayout.x - margin,\n                        y: textLayout.y0 + textLayout.y / 2\n                    }\n                }, seriesModel);\n            }\n\n            var hoverItemStyleModel = itemModel.getModel('emphasis.itemStyle');\n            var itemStyleModel = itemModel.getModel('itemStyle');\n\n            graphic.setTextStyle(text.style, labelModel, {\n                text: labelModel.get('show')\n                    ? seriesModel.getFormattedLabel(indices[j - 1], 'normal')\n                        || data.getName(indices[j - 1])\n                    : null,\n                textVerticalAlign: 'middle'\n            });\n\n            polygon.setStyle(extend({\n                fill: color\n            }, itemStyleModel.getItemStyle(['color'])));\n\n            graphic.setHoverStyle(polygon, hoverItemStyleModel.getItemStyle());\n        }\n\n        this._layersSeries = layerSeries;\n        this._layers = newLayersGroups;\n    },\n\n    dispose: function () {}\n});\n\n// add animation to the view\nfunction createGridClipShape(rect, seriesModel, cb) {\n    var rectEl = new graphic.Rect({\n        shape: {\n            x: rect.x - 10,\n            y: rect.y - 10,\n            width: 0,\n            height: rect.height + 20\n        }\n    });\n    graphic.initProps(rectEl, {\n        shape: {\n            width: rect.width + 20,\n            height: rect.height + 20\n        }\n    }, seriesModel, cb);\n\n    return rectEl;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as numberUtil from '../../util/number';\n\nexport default function (ecModel, api) {\n\n    ecModel.eachSeriesByType('themeRiver', function (seriesModel) {\n\n        var data = seriesModel.getData();\n\n        var single = seriesModel.coordinateSystem;\n\n        var layoutInfo = {};\n\n        // use the axis boundingRect for view\n        var rect = single.getRect();\n\n        layoutInfo.rect = rect;\n\n        var boundaryGap = seriesModel.get('boundaryGap');\n\n        var axis = single.getAxis();\n\n        layoutInfo.boundaryGap = boundaryGap;\n\n        if (axis.orient === 'horizontal') {\n            boundaryGap[0] = numberUtil.parsePercent(boundaryGap[0], rect.height);\n            boundaryGap[1] = numberUtil.parsePercent(boundaryGap[1], rect.height);\n            var height = rect.height - boundaryGap[0] - boundaryGap[1];\n            themeRiverLayout(data, seriesModel, height);\n        }\n        else {\n            boundaryGap[0] = numberUtil.parsePercent(boundaryGap[0], rect.width);\n            boundaryGap[1] = numberUtil.parsePercent(boundaryGap[1], rect.width);\n            var width = rect.width - boundaryGap[0] - boundaryGap[1];\n            themeRiverLayout(data, seriesModel, width);\n        }\n\n        data.setLayout('layoutInfo', layoutInfo);\n    });\n}\n\n/**\n * The layout information about themeriver\n *\n * @param {module:echarts/data/List} data  data in the series\n * @param {module:echarts/model/Series} seriesModel  the model object of themeRiver series\n * @param {number} height  value used to compute every series height\n */\nfunction themeRiverLayout(data, seriesModel, height) {\n    if (!data.count()) {\n        return;\n    }\n    var coordSys = seriesModel.coordinateSystem;\n    // the data in each layer are organized into a series.\n    var layerSeries = seriesModel.getLayerSeries();\n\n    // the points in each layer.\n    var timeDim = data.mapDimension('single');\n    var valueDim = data.mapDimension('value');\n    var layerPoints = zrUtil.map(layerSeries, function (singleLayer) {\n        return zrUtil.map(singleLayer.indices, function (idx) {\n            var pt = coordSys.dataToPoint(data.get(timeDim, idx));\n            pt[1] = data.get(valueDim, idx);\n            return pt;\n        });\n    });\n\n    var base = computeBaseline(layerPoints);\n    var baseLine = base.y0;\n    var ky = height / base.max;\n\n    // set layout information for each item.\n    var n = layerSeries.length;\n    var m = layerSeries[0].indices.length;\n    var baseY0;\n    for (var j = 0; j < m; ++j) {\n        baseY0 = baseLine[j] * ky;\n        data.setItemLayout(layerSeries[0].indices[j], {\n            layerIndex: 0,\n            x: layerPoints[0][j][0],\n            y0: baseY0,\n            y: layerPoints[0][j][1] * ky\n        });\n        for (var i = 1; i < n; ++i) {\n            baseY0 += layerPoints[i - 1][j][1] * ky;\n            data.setItemLayout(layerSeries[i].indices[j], {\n                layerIndex: i,\n                x: layerPoints[i][j][0],\n                y0: baseY0,\n                y: layerPoints[i][j][1] * ky\n            });\n        }\n    }\n}\n\n/**\n * Compute the baseLine of the rawdata\n * Inspired by Lee Byron's paper Stacked Graphs - Geometry & Aesthetics\n *\n * @param  {Array.<Array>} data  the points in each layer\n * @return {Object}\n */\nfunction computeBaseline(data) {\n    var layerNum = data.length;\n    var pointNum = data[0].length;\n    var sums = [];\n    var y0 = [];\n    var max = 0;\n    var temp;\n    var base = {};\n\n    for (var i = 0; i < pointNum; ++i) {\n        for (var j = 0, temp = 0; j < layerNum; ++j) {\n            temp += data[j][i][1];\n        }\n        if (temp > max) {\n            max = temp;\n        }\n        sums.push(temp);\n    }\n\n    for (var k = 0; k < pointNum; ++k) {\n        y0[k] = (max - sums[k]) / 2;\n    }\n    max = 0;\n\n    for (var l = 0; l < pointNum; ++l) {\n        var sum = sums[l] + y0[l];\n        if (sum > max) {\n            max = sum;\n        }\n    }\n    base.y0 = y0;\n    base.max = max;\n\n    return base;\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\nimport {createHashMap} from 'zrender/src/core/util';\n\nexport default function (ecModel) {\n    ecModel.eachSeriesByType('themeRiver', function (seriesModel) {\n        var data = seriesModel.getData();\n        var rawData = seriesModel.getRawData();\n        var colorList = seriesModel.get('color');\n        var idxMap = createHashMap();\n\n        data.each(function (idx) {\n            idxMap.set(data.getRawIndex(idx), idx);\n        });\n\n        rawData.each(function (rawIndex) {\n            var name = rawData.getName(rawIndex);\n            var color = colorList[(seriesModel.nameMap.get(name) - 1) % colorList.length];\n\n            rawData.setItemVisual(rawIndex, 'color', color);\n\n            var idx = idxMap.get(rawIndex);\n\n            if (idx != null) {\n                data.setItemVisual(idx, 'color', color);\n            }\n        });\n    });\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\n\nimport '../component/singleAxis';\nimport './themeRiver/ThemeRiverSeries';\nimport './themeRiver/ThemeRiverView';\n\nimport themeRiverLayout from './themeRiver/themeRiverLayout';\nimport themeRiverVisual from './themeRiver/themeRiverVisual';\nimport dataFilter from '../processor/dataFilter';\n\necharts.registerLayout(themeRiverLayout);\necharts.registerVisual(themeRiverVisual);\necharts.registerProcessor(dataFilter('themeRiver'));","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport SeriesModel from '../../model/Series';\nimport Tree from '../../data/Tree';\nimport {wrapTreePathInfo} from '../helper/treeHelper';\n\nexport default SeriesModel.extend({\n\n    type: 'series.sunburst',\n\n    /**\n     * @type {module:echarts/data/Tree~Node}\n     */\n    _viewRoot: null,\n\n    getInitialData: function (option, ecModel) {\n        // Create a virtual root.\n        var root = { name: option.name, children: option.data };\n\n        completeTreeValue(root);\n\n        var levels = option.levels || [];\n\n        // levels = option.levels = setDefault(levels, ecModel);\n\n        var treeOption = {};\n\n        treeOption.levels = levels;\n\n        // Make sure always a new tree is created when setOption,\n        // in TreemapView, we check whether oldTree === newTree\n        // to choose mappings approach among old shapes and new shapes.\n        return Tree.createTree(root, this, treeOption).data;\n    },\n\n    optionUpdated: function () {\n        this.resetViewRoot();\n    },\n\n    /*\n     * @override\n     */\n    getDataParams: function (dataIndex) {\n        var params = SeriesModel.prototype.getDataParams.apply(this, arguments);\n\n        var node = this.getData().tree.getNodeByDataIndex(dataIndex);\n        params.treePathInfo = wrapTreePathInfo(node, this);\n\n        return params;\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n\n        // 默认全局居中\n        center: ['50%', '50%'],\n        radius: [0, '75%'],\n        // 默认顺时针\n        clockwise: true,\n        startAngle: 90,\n        // 最小角度改为0\n        minAngle: 0,\n\n        percentPrecision: 2,\n\n        // If still show when all data zero.\n        stillShowZeroSum: true,\n\n        // Policy of highlighting pieces when hover on one\n        // Valid values: 'none' (for not downplay others), 'descendant',\n        // 'ancestor', 'self'\n        highlightPolicy: 'descendant',\n\n        // 'rootToNode', 'link', or false\n        nodeClick: 'rootToNode',\n\n        renderLabelForZeroData: false,\n\n        label: {\n            // could be: 'radial', 'tangential', or 'none'\n            rotate: 'radial',\n            show: true,\n            opacity: 1,\n            // 'left' is for inner side of inside, and 'right' is for outter\n            // side for inside\n            align: 'center',\n            position: 'inside',\n            distance: 5,\n            silent: true,\n            emphasis: {}\n        },\n        itemStyle: {\n            borderWidth: 1,\n            borderColor: 'white',\n            borderType: 'solid',\n            shadowBlur: 0,\n            shadowColor: 'rgba(0, 0, 0, 0.2)',\n            shadowOffsetX: 0,\n            shadowOffsetY: 0,\n            opacity: 1,\n            emphasis: {},\n            highlight: {\n                opacity: 1\n            },\n            downplay: {\n                opacity: 0.9\n            }\n        },\n\n        // Animation type canbe expansion, scale\n        animationType: 'expansion',\n        animationDuration: 1000,\n        animationDurationUpdate: 500,\n        animationEasing: 'cubicOut',\n\n        data: [],\n\n        levels: [],\n\n        /**\n         * Sort order.\n         *\n         * Valid values: 'desc', 'asc', null, or callback function.\n         * 'desc' and 'asc' for descend and ascendant order;\n         * null for not sorting;\n         * example of callback function:\n         * function(nodeA, nodeB) {\n         *     return nodeA.getValue() - nodeB.getValue();\n         * }\n         */\n        sort: 'desc'\n    },\n\n    getViewRoot: function () {\n        return this._viewRoot;\n    },\n\n    /**\n     * @param {module:echarts/data/Tree~Node} [viewRoot]\n     */\n    resetViewRoot: function (viewRoot) {\n        viewRoot\n            ? (this._viewRoot = viewRoot)\n            : (viewRoot = this._viewRoot);\n\n        var root = this.getRawData().tree.root;\n\n        if (!viewRoot\n            || (viewRoot !== root && !root.contains(viewRoot))\n        ) {\n            this._viewRoot = root;\n        }\n    }\n});\n\n\n\n/**\n * @param {Object} dataNode\n */\nfunction completeTreeValue(dataNode) {\n    // Postorder travel tree.\n    // If value of none-leaf node is not set,\n    // calculate it by suming up the value of all children.\n    var sum = 0;\n\n    zrUtil.each(dataNode.children, function (child) {\n\n        completeTreeValue(child);\n\n        var childValue = child.value;\n        zrUtil.isArray(childValue) && (childValue = childValue[0]);\n\n        sum += childValue;\n    });\n\n    var thisValue = dataNode.value;\n    if (zrUtil.isArray(thisValue)) {\n        thisValue = thisValue[0];\n    }\n\n    if (thisValue == null || isNaN(thisValue)) {\n        thisValue = sum;\n    }\n    // Value should not less than 0.\n    if (thisValue < 0) {\n        thisValue = 0;\n    }\n\n    zrUtil.isArray(dataNode.value)\n        ? (dataNode.value[0] = thisValue)\n        : (dataNode.value = thisValue);\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\n\nvar NodeHighlightPolicy = {\n    NONE: 'none', // not downplay others\n    DESCENDANT: 'descendant',\n    ANCESTOR: 'ancestor',\n    SELF: 'self'\n};\n\nvar DEFAULT_SECTOR_Z = 2;\nvar DEFAULT_TEXT_Z = 4;\n\n/**\n * Sunburstce of Sunburst including Sector, Label, LabelLine\n * @constructor\n * @extends {module:zrender/graphic/Group}\n */\nfunction SunburstPiece(node, seriesModel, ecModel) {\n\n    graphic.Group.call(this);\n\n    var sector = new graphic.Sector({\n        z2: DEFAULT_SECTOR_Z\n    });\n    sector.seriesIndex = seriesModel.seriesIndex;\n\n    var text = new graphic.Text({\n        z2: DEFAULT_TEXT_Z,\n        silent: node.getModel('label').get('silent')\n    });\n    this.add(sector);\n    this.add(text);\n\n    this.updateData(true, node, 'normal', seriesModel, ecModel);\n\n    // Hover to change label and labelLine\n    function onEmphasis() {\n        text.ignore = text.hoverIgnore;\n    }\n    function onNormal() {\n        text.ignore = text.normalIgnore;\n    }\n    this.on('emphasis', onEmphasis)\n        .on('normal', onNormal)\n        .on('mouseover', onEmphasis)\n        .on('mouseout', onNormal);\n}\n\nvar SunburstPieceProto = SunburstPiece.prototype;\n\nSunburstPieceProto.updateData = function (\n    firstCreate,\n    node,\n    state,\n    seriesModel,\n    ecModel\n) {\n    this.node = node;\n    node.piece = this;\n\n    seriesModel = seriesModel || this._seriesModel;\n    ecModel = ecModel || this._ecModel;\n\n    var sector = this.childAt(0);\n    sector.dataIndex = node.dataIndex;\n\n    var itemModel = node.getModel();\n    var layout = node.getLayout();\n    // if (!layout) {\n    //     console.log(node.getLayout());\n    // }\n    var sectorShape = zrUtil.extend({}, layout);\n    sectorShape.label = null;\n\n    var visualColor = getNodeColor(node, seriesModel, ecModel);\n\n    fillDefaultColor(node, seriesModel, visualColor);\n\n    var normalStyle = itemModel.getModel('itemStyle').getItemStyle();\n    var style;\n    if (state === 'normal') {\n        style = normalStyle;\n    }\n    else {\n        var stateStyle = itemModel.getModel(state + '.itemStyle')\n            .getItemStyle();\n        style = zrUtil.merge(stateStyle, normalStyle);\n    }\n    style = zrUtil.defaults(\n        {\n            lineJoin: 'bevel',\n            fill: style.fill || visualColor\n        },\n        style\n    );\n\n    if (firstCreate) {\n        sector.setShape(sectorShape);\n        sector.shape.r = layout.r0;\n        graphic.updateProps(\n            sector,\n            {\n                shape: {\n                    r: layout.r\n                }\n            },\n            seriesModel,\n            node.dataIndex\n        );\n        sector.useStyle(style);\n    }\n    else if (typeof style.fill === 'object' && style.fill.type\n        || typeof sector.style.fill === 'object' && sector.style.fill.type\n    ) {\n        // Disable animation for gradient since no interpolation method\n        // is supported for gradient\n        graphic.updateProps(sector, {\n            shape: sectorShape\n        }, seriesModel);\n        sector.useStyle(style);\n    }\n    else {\n        graphic.updateProps(sector, {\n            shape: sectorShape,\n            style: style\n        }, seriesModel);\n    }\n\n    this._updateLabel(seriesModel, visualColor, state);\n\n    var cursorStyle = itemModel.getShallow('cursor');\n    cursorStyle && sector.attr('cursor', cursorStyle);\n\n    if (firstCreate) {\n        var highlightPolicy = seriesModel.getShallow('highlightPolicy');\n        this._initEvents(sector, node, seriesModel, highlightPolicy);\n    }\n\n    this._seriesModel = seriesModel || this._seriesModel;\n    this._ecModel = ecModel || this._ecModel;\n};\n\nSunburstPieceProto.onEmphasis = function (highlightPolicy) {\n    var that = this;\n    this.node.hostTree.root.eachNode(function (n) {\n        if (n.piece) {\n            if (that.node === n) {\n                n.piece.updateData(false, n, 'emphasis');\n            }\n            else if (isNodeHighlighted(n, that.node, highlightPolicy)) {\n                n.piece.childAt(0).trigger('highlight');\n            }\n            else if (highlightPolicy !== NodeHighlightPolicy.NONE) {\n                n.piece.childAt(0).trigger('downplay');\n            }\n        }\n    });\n};\n\nSunburstPieceProto.onNormal = function () {\n    this.node.hostTree.root.eachNode(function (n) {\n        if (n.piece) {\n            n.piece.updateData(false, n, 'normal');\n        }\n    });\n};\n\nSunburstPieceProto.onHighlight = function () {\n    this.updateData(false, this.node, 'highlight');\n};\n\nSunburstPieceProto.onDownplay = function () {\n    this.updateData(false, this.node, 'downplay');\n};\n\nSunburstPieceProto._updateLabel = function (seriesModel, visualColor, state) {\n    var itemModel = this.node.getModel();\n    var normalModel = itemModel.getModel('label');\n    var labelModel = state === 'normal' || state === 'emphasis'\n        ? normalModel\n        : itemModel.getModel(state + '.label');\n    var labelHoverModel = itemModel.getModel('emphasis.label');\n\n    var text = zrUtil.retrieve(\n        seriesModel.getFormattedLabel(\n            this.node.dataIndex, state, null, null, 'label'\n        ),\n        this.node.name\n    );\n    if (getLabelAttr('show') === false) {\n        text = '';\n    }\n\n    var layout = this.node.getLayout();\n    var labelMinAngle = labelModel.get('minAngle');\n    if (labelMinAngle == null) {\n        labelMinAngle = normalModel.get('minAngle');\n    }\n    labelMinAngle = labelMinAngle / 180 * Math.PI;\n    var angle = layout.endAngle - layout.startAngle;\n    if (labelMinAngle != null && Math.abs(angle) < labelMinAngle) {\n        // Not displaying text when angle is too small\n        text = '';\n    }\n\n    var label = this.childAt(1);\n\n    graphic.setLabelStyle(\n        label.style, label.hoverStyle || {}, normalModel, labelHoverModel,\n        {\n            defaultText: labelModel.getShallow('show') ? text : null,\n            autoColor: visualColor,\n            useInsideStyle: true\n        }\n    );\n\n    var midAngle = (layout.startAngle + layout.endAngle) / 2;\n    var dx = Math.cos(midAngle);\n    var dy = Math.sin(midAngle);\n\n    var r;\n    var labelPosition = getLabelAttr('position');\n    var labelPadding = getLabelAttr('distance') || 0;\n    var textAlign = getLabelAttr('align');\n    if (labelPosition === 'outside') {\n        r = layout.r + labelPadding;\n        textAlign = midAngle > Math.PI / 2 ? 'right' : 'left';\n    }\n    else {\n        if (!textAlign || textAlign === 'center') {\n            r = (layout.r + layout.r0) / 2;\n            textAlign = 'center';\n        }\n        else if (textAlign === 'left') {\n            r = layout.r0 + labelPadding;\n            if (midAngle > Math.PI / 2) {\n                textAlign = 'right';\n            }\n        }\n        else if (textAlign === 'right') {\n            r = layout.r - labelPadding;\n            if (midAngle > Math.PI / 2) {\n                textAlign = 'left';\n            }\n        }\n    }\n\n    label.attr('style', {\n        text: text,\n        textAlign: textAlign,\n        textVerticalAlign: getLabelAttr('verticalAlign') || 'middle',\n        opacity: getLabelAttr('opacity')\n    });\n\n    var textX = r * dx + layout.cx;\n    var textY = r * dy + layout.cy;\n    label.attr('position', [textX, textY]);\n\n    var rotateType = getLabelAttr('rotate');\n    var rotate = 0;\n    if (rotateType === 'radial') {\n        rotate = -midAngle;\n        if (rotate < -Math.PI / 2) {\n            rotate += Math.PI;\n        }\n    }\n    else if (rotateType === 'tangential') {\n        rotate = Math.PI / 2 - midAngle;\n        if (rotate > Math.PI / 2) {\n            rotate -= Math.PI;\n        }\n        else if (rotate < -Math.PI / 2) {\n            rotate += Math.PI;\n        }\n    }\n    else if (typeof rotateType === 'number') {\n        rotate = rotateType * Math.PI / 180;\n    }\n    label.attr('rotation', rotate);\n\n    function getLabelAttr(name) {\n        var stateAttr = labelModel.get(name);\n        if (stateAttr == null) {\n            return normalModel.get(name);\n        }\n        else {\n            return stateAttr;\n        }\n    }\n};\n\nSunburstPieceProto._initEvents = function (\n    sector,\n    node,\n    seriesModel,\n    highlightPolicy\n) {\n    sector.off('mouseover').off('mouseout').off('emphasis').off('normal');\n\n    var that = this;\n    var onEmphasis = function () {\n        that.onEmphasis(highlightPolicy);\n    };\n    var onNormal = function () {\n        that.onNormal();\n    };\n    var onDownplay = function () {\n        that.onDownplay();\n    };\n    var onHighlight = function () {\n        that.onHighlight();\n    };\n\n    if (seriesModel.isAnimationEnabled()) {\n        sector\n            .on('mouseover', onEmphasis)\n            .on('mouseout', onNormal)\n            .on('emphasis', onEmphasis)\n            .on('normal', onNormal)\n            .on('downplay', onDownplay)\n            .on('highlight', onHighlight);\n    }\n};\n\nzrUtil.inherits(SunburstPiece, graphic.Group);\n\nexport default SunburstPiece;\n\n\n/**\n * Get node color\n *\n * @param {TreeNode} node the node to get color\n * @param {module:echarts/model/Series} seriesModel series\n * @param {module:echarts/model/Global} ecModel echarts defaults\n */\nfunction getNodeColor(node, seriesModel, ecModel) {\n    // Color from visualMap\n    var visualColor = node.getVisual('color');\n    var visualMetaList = node.getVisual('visualMeta');\n    if (!visualMetaList || visualMetaList.length === 0) {\n        // Use first-generation color if has no visualMap\n        visualColor = null;\n    }\n\n    // Self color or level color\n    var color = node.getModel('itemStyle').get('color');\n    if (color) {\n        return color;\n    }\n    else if (visualColor) {\n        // Color mapping\n        return visualColor;\n    }\n    else if (node.depth === 0) {\n        // Virtual root node\n        return ecModel.option.color[0];\n    }\n    else {\n        // First-generation color\n        var length = ecModel.option.color.length;\n        color = ecModel.option.color[getRootId(node) % length];\n    }\n    return color;\n}\n\n/**\n * Get index of root in sorted order\n *\n * @param {TreeNode} node current node\n * @return {number} index in root\n */\nfunction getRootId(node) {\n    var ancestor = node;\n    while (ancestor.depth > 1) {\n        ancestor = ancestor.parentNode;\n    }\n\n    var virtualRoot = node.getAncestors()[0];\n    return zrUtil.indexOf(virtualRoot.children, ancestor);\n}\n\nfunction isNodeHighlighted(node, activeNode, policy) {\n    if (policy === NodeHighlightPolicy.NONE) {\n        return false;\n    }\n    else if (policy === NodeHighlightPolicy.SELF) {\n        return node === activeNode;\n    }\n    else if (policy === NodeHighlightPolicy.ANCESTOR) {\n        return node === activeNode || node.isAncestorOf(activeNode);\n    }\n    else {\n        return node === activeNode || node.isDescendantOf(activeNode);\n    }\n}\n\n// Fix tooltip callback function params.color incorrect when pick a default color\nfunction fillDefaultColor(node, seriesModel, color) {\n    var data = seriesModel.getData();\n    data.setItemVisual(node.dataIndex, 'color', color);\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport ChartView from '../../view/Chart';\nimport SunburstPiece from './SunburstPiece';\nimport DataDiffer from '../../data/DataDiffer';\n\nvar ROOT_TO_NODE_ACTION = 'sunburstRootToNode';\n\nvar SunburstView = ChartView.extend({\n\n    type: 'sunburst',\n\n    init: function () {\n    },\n\n    render: function (seriesModel, ecModel, api, payload) {\n        var that = this;\n\n        this.seriesModel = seriesModel;\n        this.api = api;\n        this.ecModel = ecModel;\n\n        var data = seriesModel.getData();\n        var virtualRoot = data.tree.root;\n\n        var newRoot = seriesModel.getViewRoot();\n\n        var group = this.group;\n\n        var renderLabelForZeroData = seriesModel.get('renderLabelForZeroData');\n\n        var newChildren = [];\n        newRoot.eachNode(function (node) {\n            newChildren.push(node);\n        });\n        var oldChildren = this._oldChildren || [];\n\n        dualTravel(newChildren, oldChildren);\n\n        renderRollUp(virtualRoot, newRoot);\n\n        if (payload && payload.highlight && payload.highlight.piece) {\n            var highlightPolicy = seriesModel.getShallow('highlightPolicy');\n            payload.highlight.piece.onEmphasis(highlightPolicy);\n        }\n        else if (payload && payload.unhighlight) {\n            var piece = this.virtualPiece;\n            if (!piece && virtualRoot.children.length) {\n                piece = virtualRoot.children[0].piece;\n            }\n            if (piece) {\n                piece.onNormal();\n            }\n        }\n\n        this._initEvents();\n\n        this._oldChildren = newChildren;\n\n        function dualTravel(newChildren, oldChildren) {\n            if (newChildren.length === 0 && oldChildren.length === 0) {\n                return;\n            }\n\n            new DataDiffer(oldChildren, newChildren, getKey, getKey)\n                .add(processNode)\n                .update(processNode)\n                .remove(zrUtil.curry(processNode, null))\n                .execute();\n\n            function getKey(node) {\n                return node.getId();\n            }\n\n            function processNode(newId, oldId) {\n                var newNode = newId == null ? null : newChildren[newId];\n                var oldNode = oldId == null ? null : oldChildren[oldId];\n\n                doRenderNode(newNode, oldNode);\n            }\n        }\n\n        function doRenderNode(newNode, oldNode) {\n            if (!renderLabelForZeroData && newNode && !newNode.getValue()) {\n                // Not render data with value 0\n                newNode = null;\n            }\n\n            if (newNode !== virtualRoot && oldNode !== virtualRoot) {\n                if (oldNode && oldNode.piece) {\n                    if (newNode) {\n                        // Update\n                        oldNode.piece.updateData(\n                            false, newNode, 'normal', seriesModel, ecModel);\n\n                        // For tooltip\n                        data.setItemGraphicEl(newNode.dataIndex, oldNode.piece);\n                    }\n                    else {\n                        // Remove\n                        removeNode(oldNode);\n                    }\n                }\n                else if (newNode) {\n                    // Add\n                    var piece = new SunburstPiece(\n                        newNode,\n                        seriesModel,\n                        ecModel\n                    );\n                    group.add(piece);\n\n                    // For tooltip\n                    data.setItemGraphicEl(newNode.dataIndex, piece);\n                }\n            }\n        }\n\n        function removeNode(node) {\n            if (!node) {\n                return;\n            }\n\n            if (node.piece) {\n                group.remove(node.piece);\n                node.piece = null;\n            }\n        }\n\n        function renderRollUp(virtualRoot, viewRoot) {\n            if (viewRoot.depth > 0) {\n                // Render\n                if (that.virtualPiece) {\n                    // Update\n                    that.virtualPiece.updateData(\n                        false, virtualRoot, 'normal', seriesModel, ecModel);\n                }\n                else {\n                    // Add\n                    that.virtualPiece = new SunburstPiece(\n                        virtualRoot,\n                        seriesModel,\n                        ecModel\n                    );\n                    group.add(that.virtualPiece);\n                }\n\n                if (viewRoot.piece._onclickEvent) {\n                    viewRoot.piece.off('click', viewRoot.piece._onclickEvent);\n                }\n                var event = function (e) {\n                    that._rootToNode(viewRoot.parentNode);\n                };\n                viewRoot.piece._onclickEvent = event;\n                that.virtualPiece.on('click', event);\n            }\n            else if (that.virtualPiece) {\n                // Remove\n                group.remove(that.virtualPiece);\n                that.virtualPiece = null;\n            }\n        }\n    },\n\n    dispose: function () {\n    },\n\n    /**\n     * @private\n     */\n    _initEvents: function () {\n        var that = this;\n\n        var event = function (e) {\n            var targetFound = false;\n            var viewRoot = that.seriesModel.getViewRoot();\n            viewRoot.eachNode(function (node) {\n                if (!targetFound\n                    && node.piece && node.piece.childAt(0) === e.target\n                ) {\n                    var nodeClick = node.getModel().get('nodeClick');\n                    if (nodeClick === 'rootToNode') {\n                        that._rootToNode(node);\n                    }\n                    else if (nodeClick === 'link') {\n                        var itemModel = node.getModel();\n                        var link = itemModel.get('link');\n                        if (link) {\n                            var linkTarget = itemModel.get('target', true)\n                                || '_blank';\n                            window.open(link, linkTarget);\n                        }\n                    }\n                    targetFound = true;\n                }\n            });\n        };\n\n        if (this.group._onclickEvent) {\n            this.group.off('click', this.group._onclickEvent);\n        }\n        this.group.on('click', event);\n        this.group._onclickEvent = event;\n    },\n\n    /**\n     * @private\n     */\n    _rootToNode: function (node) {\n        if (node !== this.seriesModel.getViewRoot()) {\n            this.api.dispatchAction({\n                type: ROOT_TO_NODE_ACTION,\n                from: this.uid,\n                seriesId: this.seriesModel.id,\n                targetNode: node\n            });\n        }\n    },\n\n    /**\n     * @implement\n     */\n    containPoint: function (point, seriesModel) {\n        var treeRoot = seriesModel.getData();\n        var itemLayout = treeRoot.getItemLayout(0);\n        if (itemLayout) {\n            var dx = point[0] - itemLayout.cx;\n            var dy = point[1] - itemLayout.cy;\n            var radius = Math.sqrt(dx * dx + dy * dy);\n            return radius <= itemLayout.r && radius >= itemLayout.r0;\n        }\n    }\n\n});\n\nexport default SunburstView;\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 * @file Sunburst action\n */\n\nimport * as echarts from '../../echarts';\nimport * as helper from '../helper/treeHelper';\n\nvar ROOT_TO_NODE_ACTION = 'sunburstRootToNode';\n\necharts.registerAction(\n    {type: ROOT_TO_NODE_ACTION, update: 'updateView'},\n    function (payload, ecModel) {\n\n        ecModel.eachComponent(\n            {mainType: 'series', subType: 'sunburst', query: payload},\n            handleRootToNode\n        );\n\n        function handleRootToNode(model, index) {\n            var targetInfo = helper\n                .retrieveTargetInfo(payload, [ROOT_TO_NODE_ACTION], model);\n\n            if (targetInfo) {\n                var originViewRoot = model.getViewRoot();\n                if (originViewRoot) {\n                    payload.direction = helper.aboveViewRoot(originViewRoot, targetInfo.node)\n                        ? 'rollUp' : 'drillDown';\n                }\n                model.resetViewRoot(targetInfo.node);\n            }\n        }\n    }\n);\n\n\nvar HIGHLIGHT_ACTION = 'sunburstHighlight';\n\necharts.registerAction(\n    {type: HIGHLIGHT_ACTION, update: 'updateView'},\n    function (payload, ecModel) {\n\n        ecModel.eachComponent(\n            {mainType: 'series', subType: 'sunburst', query: payload},\n            handleHighlight\n        );\n\n        function handleHighlight(model, index) {\n            var targetInfo = helper\n                .retrieveTargetInfo(payload, [HIGHLIGHT_ACTION], model);\n\n            if (targetInfo) {\n                payload.highlight = targetInfo.node;\n            }\n        }\n    }\n);\n\n\nvar UNHIGHLIGHT_ACTION = 'sunburstUnhighlight';\n\necharts.registerAction(\n    {type: UNHIGHLIGHT_ACTION, update: 'updateView'},\n    function (payload, ecModel) {\n\n        ecModel.eachComponent(\n            {mainType: 'series', subType: 'sunburst', query: payload},\n            handleUnhighlight\n        );\n\n        function handleUnhighlight(model, index) {\n            payload.unhighlight = true;\n        }\n    }\n);\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nimport { parsePercent } from '../../util/number';\nimport * as zrUtil from 'zrender/src/core/util';\n\n// var PI2 = Math.PI * 2;\nvar RADIAN = Math.PI / 180;\n\nexport default function (seriesType, ecModel, api, payload) {\n    ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n        var center = seriesModel.get('center');\n        var radius = seriesModel.get('radius');\n\n        if (!zrUtil.isArray(radius)) {\n            radius = [0, radius];\n        }\n        if (!zrUtil.isArray(center)) {\n            center = [center, center];\n        }\n\n        var width = api.getWidth();\n        var height = api.getHeight();\n        var size = Math.min(width, height);\n        var cx = parsePercent(center[0], width);\n        var cy = parsePercent(center[1], height);\n        var r0 = parsePercent(radius[0], size / 2);\n        var r = parsePercent(radius[1], size / 2);\n\n        var startAngle = -seriesModel.get('startAngle') * RADIAN;\n        var minAngle = seriesModel.get('minAngle') * RADIAN;\n\n        var virtualRoot = seriesModel.getData().tree.root;\n        var treeRoot = seriesModel.getViewRoot();\n        var rootDepth = treeRoot.depth;\n\n        var sort = seriesModel.get('sort');\n        if (sort != null) {\n            initChildren(treeRoot, sort);\n        }\n\n        var validDataCount = 0;\n        zrUtil.each(treeRoot.children, function (child) {\n            !isNaN(child.getValue()) && validDataCount++;\n        });\n\n        var sum = treeRoot.getValue();\n        // Sum may be 0\n        var unitRadian = Math.PI / (sum || validDataCount) * 2;\n\n        var renderRollupNode = treeRoot.depth > 0;\n        var levels = treeRoot.height - (renderRollupNode ? -1 : 1);\n        var rPerLevel = (r - r0) / (levels || 1);\n\n        var clockwise = seriesModel.get('clockwise');\n\n        var stillShowZeroSum = seriesModel.get('stillShowZeroSum');\n\n        // In the case some sector angle is smaller than minAngle\n        // var restAngle = PI2;\n        // var valueSumLargerThanMinAngle = 0;\n\n        var dir = clockwise ? 1 : -1;\n\n        /**\n         * Render a tree\n         * @return increased angle\n         */\n        var renderNode = function (node, startAngle) {\n            if (!node) {\n                return;\n            }\n\n            var endAngle = startAngle;\n\n            // Render self\n            if (node !== virtualRoot) {\n                // Tree node is virtual, so it doesn't need to be drawn\n                var value = node.getValue();\n\n                var angle = (sum === 0 && stillShowZeroSum)\n                    ? unitRadian : (value * unitRadian);\n                if (angle < minAngle) {\n                    angle = minAngle;\n                    // restAngle -= minAngle;\n                }\n                // else {\n                //     valueSumLargerThanMinAngle += value;\n                // }\n\n                endAngle = startAngle + dir * angle;\n\n                var depth = node.depth - rootDepth\n                    - (renderRollupNode ? -1 : 1);\n                var rStart = r0 + rPerLevel * depth;\n                var rEnd = r0 + rPerLevel * (depth + 1);\n\n                var itemModel = node.getModel();\n                if (itemModel.get('r0') != null) {\n                    rStart = parsePercent(itemModel.get('r0'), size / 2);\n                }\n                if (itemModel.get('r') != null) {\n                    rEnd = parsePercent(itemModel.get('r'), size / 2);\n                }\n\n                node.setLayout({\n                    angle: angle,\n                    startAngle: startAngle,\n                    endAngle: endAngle,\n                    clockwise: clockwise,\n                    cx: cx,\n                    cy: cy,\n                    r0: rStart,\n                    r: rEnd\n                });\n            }\n\n            // Render children\n            if (node.children && node.children.length) {\n                // currentAngle = startAngle;\n                var siblingAngle = 0;\n                zrUtil.each(node.children, function (node) {\n                    siblingAngle += renderNode(node, startAngle + siblingAngle);\n                });\n            }\n\n            return endAngle - startAngle;\n        };\n\n        // Virtual root node for roll up\n        if (renderRollupNode) {\n            var rStart = r0;\n            var rEnd = r0 + rPerLevel;\n\n            var angle = Math.PI * 2;\n            virtualRoot.setLayout({\n                angle: angle,\n                startAngle: startAngle,\n                endAngle: startAngle + angle,\n                clockwise: clockwise,\n                cx: cx,\n                cy: cy,\n                r0: rStart,\n                r: rEnd\n            });\n        }\n\n        renderNode(treeRoot, startAngle);\n    });\n}\n\n/**\n * Init node children by order and update visual\n *\n * @param {TreeNode} node  root node\n * @param {boolean}  isAsc if is in ascendant order\n */\nfunction initChildren(node, isAsc) {\n    var children = node.children || [];\n\n    node.children = sort(children, isAsc);\n\n    // Init children recursively\n    if (children.length) {\n        zrUtil.each(node.children, function (child) {\n            initChildren(child, isAsc);\n        });\n    }\n}\n\n/**\n * Sort children nodes\n *\n * @param {TreeNode[]}               children children of node to be sorted\n * @param {string | function | null} sort sort method\n *                                   See SunburstSeries.js for details.\n */\nfunction sort(children, sortOrder) {\n    if (typeof sortOrder === 'function') {\n        return children.sort(sortOrder);\n    }\n    else {\n        var isAsc = sortOrder === 'asc';\n        return children.sort(function (a, b) {\n            var diff = (a.getValue() - b.getValue()) * (isAsc ? 1 : -1);\n            return diff === 0\n                ? (a.dataIndex - b.dataIndex) * (isAsc ? -1 : 1)\n                : diff;\n        });\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\n\nimport './sunburst/SunburstSeries';\nimport './sunburst/SunburstView';\nimport './sunburst/sunburstAction';\n\nimport dataColor from '../visual/dataColor';\nimport sunburstLayout from './sunburst/sunburstLayout';\nimport dataFilter from '../processor/dataFilter';\n\necharts.registerVisual(zrUtil.curry(dataColor, 'sunburst'));\necharts.registerLayout(zrUtil.curry(sunburstLayout, 'sunburst'));\necharts.registerProcessor(zrUtil.curry(dataFilter, 'sunburst'));\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nfunction dataToCoordSize(dataSize, dataItem) {\n    // dataItem is necessary in log axis.\n    dataItem = dataItem || [0, 0];\n    return zrUtil.map(['x', 'y'], function (dim, dimIdx) {\n        var axis = this.getAxis(dim);\n        var val = dataItem[dimIdx];\n        var halfSize = dataSize[dimIdx] / 2;\n        return axis.type === 'category'\n            ? axis.getBandWidth()\n            : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));\n    }, this);\n}\n\nexport default function (coordSys) {\n    var rect = coordSys.grid.getRect();\n    return {\n        coordSys: {\n            // The name exposed to user is always 'cartesian2d' but not 'grid'.\n            type: 'cartesian2d',\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height\n        },\n        api: {\n            coord: function (data) {\n                // do not provide \"out\" param\n                return coordSys.dataToPoint(data);\n            },\n            size: zrUtil.bind(dataToCoordSize, coordSys)\n        }\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\n\nfunction dataToCoordSize(dataSize, dataItem) {\n    dataItem = dataItem || [0, 0];\n    return zrUtil.map([0, 1], function (dimIdx) {\n        var val = dataItem[dimIdx];\n        var halfSize = dataSize[dimIdx] / 2;\n        var p1 = [];\n        var p2 = [];\n        p1[dimIdx] = val - halfSize;\n        p2[dimIdx] = val + halfSize;\n        p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];\n        return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);\n    }, this);\n}\n\nexport default function (coordSys) {\n    var rect = coordSys.getBoundingRect();\n    return {\n        coordSys: {\n            type: 'geo',\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height,\n            zoom: coordSys.getZoom()\n        },\n        api: {\n            coord: function (data) {\n                // do not provide \"out\" and noRoam param,\n                // Compatible with this usage:\n                // echarts.util.map(item.points, api.coord)\n                return coordSys.dataToPoint(data);\n            },\n            size: zrUtil.bind(dataToCoordSize, coordSys)\n        }\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\n\nfunction dataToCoordSize(dataSize, dataItem) {\n    // dataItem is necessary in log axis.\n    var axis = this.getAxis();\n    var val = dataItem instanceof Array ? dataItem[0] : dataItem;\n    var halfSize = (dataSize instanceof Array ? dataSize[0] : dataSize) / 2;\n    return axis.type === 'category'\n        ? axis.getBandWidth()\n        : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));\n}\n\nexport default function (coordSys) {\n    var rect = coordSys.getRect();\n\n    return {\n        coordSys: {\n            type: 'singleAxis',\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height\n        },\n        api: {\n            coord: function (val) {\n                // do not provide \"out\" param\n                return coordSys.dataToPoint(val);\n            },\n            size: zrUtil.bind(dataToCoordSize, coordSys)\n        }\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\n\nfunction dataToCoordSize(dataSize, dataItem) {\n    // dataItem is necessary in log axis.\n    return zrUtil.map(['Radius', 'Angle'], function (dim, dimIdx) {\n        var axis = this['get' + dim + 'Axis']();\n        var val = dataItem[dimIdx];\n        var halfSize = dataSize[dimIdx] / 2;\n        var method = 'dataTo' + dim;\n\n        var result = axis.type === 'category'\n            ? axis.getBandWidth()\n            : Math.abs(axis[method](val - halfSize) - axis[method](val + halfSize));\n\n        if (dim === 'Angle') {\n            result = result * Math.PI / 180;\n        }\n\n        return result;\n\n    }, this);\n}\n\nexport default function (coordSys) {\n    var radiusAxis = coordSys.getRadiusAxis();\n    var angleAxis = coordSys.getAngleAxis();\n    var radius = radiusAxis.getExtent();\n    radius[0] > radius[1] && radius.reverse();\n\n    return {\n        coordSys: {\n            type: 'polar',\n            cx: coordSys.cx,\n            cy: coordSys.cy,\n            r: radius[1],\n            r0: radius[0]\n        },\n        api: {\n            coord: zrUtil.bind(function (data) {\n                var radius = radiusAxis.dataToRadius(data[0]);\n                var angle = angleAxis.dataToAngle(data[1]);\n                var coord = coordSys.coordToPoint([radius, angle]);\n                coord.push(radius, angle * Math.PI / 180);\n                return coord;\n            }),\n            size: zrUtil.bind(dataToCoordSize, coordSys)\n        }\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nexport default function (coordSys) {\n    var rect = coordSys.getRect();\n    var rangeInfo = coordSys.getRangeInfo();\n\n    return {\n        coordSys: {\n            type: 'calendar',\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height,\n            cellWidth: coordSys.getCellWidth(),\n            cellHeight: coordSys.getCellHeight(),\n            rangeInfo: {\n                start: rangeInfo.start,\n                end: rangeInfo.end,\n                weeks: rangeInfo.weeks,\n                dayCount: rangeInfo.allDay\n            }\n        },\n        api: {\n            coord: function (data, clamp) {\n                return coordSys.dataToPoint(data, clamp);\n            }\n        }\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {__DEV__} from '../config';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphicUtil from '../util/graphic';\nimport {getDefaultLabel} from './helper/labelHelper';\nimport createListFromArray from './helper/createListFromArray';\nimport {getLayoutOnAxis} from '../layout/barGrid';\nimport DataDiffer from '../data/DataDiffer';\nimport SeriesModel from '../model/Series';\nimport Model from '../model/Model';\nimport ChartView from '../view/Chart';\nimport {createClipPath} from './helper/createClipPathFromCoordSys';\n\nimport prepareCartesian2d from '../coord/cartesian/prepareCustom';\nimport prepareGeo from '../coord/geo/prepareCustom';\nimport prepareSingleAxis from '../coord/single/prepareCustom';\nimport preparePolar from '../coord/polar/prepareCustom';\nimport prepareCalendar from '../coord/calendar/prepareCustom';\n\nvar CACHED_LABEL_STYLE_PROPERTIES = graphicUtil.CACHED_LABEL_STYLE_PROPERTIES;\nvar ITEM_STYLE_NORMAL_PATH = ['itemStyle'];\nvar ITEM_STYLE_EMPHASIS_PATH = ['emphasis', 'itemStyle'];\nvar LABEL_NORMAL = ['label'];\nvar LABEL_EMPHASIS = ['emphasis', 'label'];\n// Use prefix to avoid index to be the same as el.name,\n// which will cause weird udpate animation.\nvar GROUP_DIFF_PREFIX = 'e\\0\\0';\n\n\n/**\n * To reduce total package size of each coordinate systems, the modules `prepareCustom`\n * of each coordinate systems are not required by each coordinate systems directly, but\n * required by the module `custom`.\n *\n * prepareInfoForCustomSeries {Function}: optional\n *     @return {Object} {coordSys: {...}, api: {\n *         coord: function (data, clamp) {}, // return point in global.\n *         size: function (dataSize, dataItem) {} // return size of each axis in coordSys.\n *     }}\n */\nvar prepareCustoms = {\n    cartesian2d: prepareCartesian2d,\n    geo: prepareGeo,\n    singleAxis: prepareSingleAxis,\n    polar: preparePolar,\n    calendar: prepareCalendar\n};\n\n\n// ------\n// Model\n// ------\n\nSeriesModel.extend({\n\n    type: 'series.custom',\n\n    dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],\n\n    defaultOption: {\n        coordinateSystem: 'cartesian2d', // Can be set as 'none'\n        zlevel: 0,\n        z: 2,\n        legendHoverLink: true,\n\n        useTransform: true,\n\n        // Custom series will not clip by default.\n        // Some case will use custom series to draw label\n        // For example https://echarts.apache.org/examples/en/editor.html?c=custom-gantt-flight\n        // Only works on polar and cartesian2d coordinate system.\n        clip: false\n\n        // Cartesian coordinate system\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // Polar coordinate system\n        // polarIndex: 0,\n\n        // Geo coordinate system\n        // geoIndex: 0,\n\n        // label: {}\n        // itemStyle: {}\n    },\n\n    /**\n     * @override\n     */\n    getInitialData: function (option, ecModel) {\n        return createListFromArray(this.getSource(), this);\n    },\n\n    /**\n     * @override\n     */\n    getDataParams: function (dataIndex, dataType, el) {\n        var params = SeriesModel.prototype.getDataParams.apply(this, arguments);\n        el && (params.info = el.info);\n        return params;\n    }\n});\n\n// -----\n// View\n// -----\n\nChartView.extend({\n\n    type: 'custom',\n\n    /**\n     * @private\n     * @type {module:echarts/data/List}\n     */\n    _data: null,\n\n    /**\n     * @override\n     */\n    render: function (customSeries, ecModel, api, payload) {\n        var oldData = this._data;\n        var data = customSeries.getData();\n        var group = this.group;\n        var renderItem = makeRenderItem(customSeries, data, ecModel, api);\n\n        // By default, merge mode is applied. In most cases, custom series is\n        // used in the scenario that data amount is not large but graphic elements\n        // is complicated, where merge mode is probably necessary for optimization.\n        // For example, reuse graphic elements and only update the transform when\n        // roam or data zoom according to `actionType`.\n        data.diff(oldData)\n            .add(function (newIdx) {\n                createOrUpdate(\n                    null, newIdx, renderItem(newIdx, payload), customSeries, group, data\n                );\n            })\n            .update(function (newIdx, oldIdx) {\n                var el = oldData.getItemGraphicEl(oldIdx);\n                createOrUpdate(\n                    el, newIdx, renderItem(newIdx, payload), customSeries, group, data\n                );\n            })\n            .remove(function (oldIdx) {\n                var el = oldData.getItemGraphicEl(oldIdx);\n                el && group.remove(el);\n            })\n            .execute();\n\n        // Do clipping\n        var clipPath = customSeries.get('clip', true)\n            ? createClipPath(customSeries.coordinateSystem, false, customSeries)\n            : null;\n        if (clipPath) {\n            group.setClipPath(clipPath);\n        }\n        else {\n            group.removeClipPath();\n        }\n\n        this._data = data;\n    },\n\n    incrementalPrepareRender: function (customSeries, ecModel, api) {\n        this.group.removeAll();\n        this._data = null;\n    },\n\n    incrementalRender: function (params, customSeries, ecModel, api, payload) {\n        var data = customSeries.getData();\n        var renderItem = makeRenderItem(customSeries, data, ecModel, api);\n        function setIncrementalAndHoverLayer(el) {\n            if (!el.isGroup) {\n                el.incremental = true;\n                el.useHoverLayer = true;\n            }\n        }\n        for (var idx = params.start; idx < params.end; idx++) {\n            var el = createOrUpdate(null, idx, renderItem(idx, payload), customSeries, this.group, data);\n            el.traverse(setIncrementalAndHoverLayer);\n        }\n    },\n\n    /**\n     * @override\n     */\n    dispose: zrUtil.noop,\n\n    /**\n     * @override\n     */\n    filterForExposedEvent: function (eventType, query, targetEl, packedEvent) {\n        var elementName = query.element;\n        if (elementName == null || targetEl.name === elementName) {\n            return true;\n        }\n\n        // Enable to give a name on a group made by `renderItem`, and listen\n        // events that triggerd by its descendents.\n        while ((targetEl = targetEl.parent) && targetEl !== this.group) {\n            if (targetEl.name === elementName) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n});\n\n\nfunction createEl(elOption) {\n    var graphicType = elOption.type;\n    var el;\n\n    // Those graphic elements are not shapes. They should not be\n    // overwritten by users, so do them first.\n    if (graphicType === 'path') {\n        var shape = elOption.shape;\n        // Using pathRect brings convenience to users sacle svg path.\n        var pathRect = (shape.width != null && shape.height != null)\n            ? {\n                x: shape.x || 0,\n                y: shape.y || 0,\n                width: shape.width,\n                height: shape.height\n            }\n            : null;\n        var pathData = getPathData(shape);\n        // Path is also used for icon, so layout 'center' by default.\n        el = graphicUtil.makePath(pathData, null, pathRect, shape.layout || 'center');\n        el.__customPathData = pathData;\n    }\n    else if (graphicType === 'image') {\n        el = new graphicUtil.Image({});\n        el.__customImagePath = elOption.style.image;\n    }\n    else if (graphicType === 'text') {\n        el = new graphicUtil.Text({});\n        el.__customText = elOption.style.text;\n    }\n    else if (graphicType === 'group') {\n        el = new graphicUtil.Group();\n    }\n    else if (graphicType === 'compoundPath') {\n        throw new Error('\"compoundPath\" is not supported yet.');\n    }\n    else {\n        var Clz = graphicUtil.getShapeClass(graphicType);\n\n        if (__DEV__) {\n            zrUtil.assert(Clz, 'graphic type \"' + graphicType + '\" can not be found.');\n        }\n\n        el = new Clz();\n    }\n\n    el.__customGraphicType = graphicType;\n    el.name = elOption.name;\n\n    return el;\n}\n\nfunction updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot) {\n    var transitionProps = {};\n    var elOptionStyle = elOption.style || {};\n\n    elOption.shape && (transitionProps.shape = zrUtil.clone(elOption.shape));\n    elOption.position && (transitionProps.position = elOption.position.slice());\n    elOption.scale && (transitionProps.scale = elOption.scale.slice());\n    elOption.origin && (transitionProps.origin = elOption.origin.slice());\n    elOption.rotation && (transitionProps.rotation = elOption.rotation);\n\n    if (el.type === 'image' && elOption.style) {\n        var targetStyle = transitionProps.style = {};\n        zrUtil.each(['x', 'y', 'width', 'height'], function (prop) {\n            prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit);\n        });\n    }\n\n    if (el.type === 'text' && elOption.style) {\n        var targetStyle = transitionProps.style = {};\n        zrUtil.each(['x', 'y'], function (prop) {\n            prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit);\n        });\n        // Compatible with previous: both support\n        // textFill and fill, textStroke and stroke in 'text' element.\n        !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && (\n            elOptionStyle.textFill = elOptionStyle.fill\n        );\n        !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && (\n            elOptionStyle.textStroke = elOptionStyle.stroke\n        );\n    }\n\n    if (el.type !== 'group') {\n        el.useStyle(elOptionStyle);\n\n        // Init animation.\n        if (isInit) {\n            el.style.opacity = 0;\n            var targetOpacity = elOptionStyle.opacity;\n            targetOpacity == null && (targetOpacity = 1);\n            graphicUtil.initProps(el, {style: {opacity: targetOpacity}}, animatableModel, dataIndex);\n        }\n    }\n\n    if (isInit) {\n        el.attr(transitionProps);\n    }\n    else {\n        graphicUtil.updateProps(el, transitionProps, animatableModel, dataIndex);\n    }\n\n    // Merge by default.\n    // z2 must not be null/undefined, otherwise sort error may occur.\n    elOption.hasOwnProperty('z2') && el.attr('z2', elOption.z2 || 0);\n    elOption.hasOwnProperty('silent') && el.attr('silent', elOption.silent);\n    elOption.hasOwnProperty('invisible') && el.attr('invisible', elOption.invisible);\n    elOption.hasOwnProperty('ignore') && el.attr('ignore', elOption.ignore);\n    // `elOption.info` enables user to mount some info on\n    // elements and use them in event handlers.\n    // Update them only when user specified, otherwise, remain.\n    elOption.hasOwnProperty('info') && el.attr('info', elOption.info);\n\n    // If `elOption.styleEmphasis` is `false`, remove hover style. The\n    // logic is ensured by `graphicUtil.setElementHoverStyle`.\n    var styleEmphasis = elOption.styleEmphasis;\n    // hoverStyle should always be set here, because if the hover style\n    // may already be changed, where the inner cache should be reset.\n    graphicUtil.setElementHoverStyle(el, styleEmphasis);\n    if (isRoot) {\n        graphicUtil.setAsHighDownDispatcher(el, styleEmphasis !== false);\n    }\n}\n\nfunction prepareStyleTransition(prop, targetStyle, elOptionStyle, oldElStyle, isInit) {\n    if (elOptionStyle[prop] != null && !isInit) {\n        targetStyle[prop] = elOptionStyle[prop];\n        elOptionStyle[prop] = oldElStyle[prop];\n    }\n}\n\nfunction makeRenderItem(customSeries, data, ecModel, api) {\n    var renderItem = customSeries.get('renderItem');\n    var coordSys = customSeries.coordinateSystem;\n    var prepareResult = {};\n\n    if (coordSys) {\n        if (__DEV__) {\n            zrUtil.assert(renderItem, 'series.render is required.');\n            zrUtil.assert(\n                coordSys.prepareCustoms || prepareCustoms[coordSys.type],\n                'This coordSys does not support custom series.'\n            );\n        }\n\n        prepareResult = coordSys.prepareCustoms\n            ? coordSys.prepareCustoms()\n            : prepareCustoms[coordSys.type](coordSys);\n    }\n\n    var userAPI = zrUtil.defaults({\n        getWidth: api.getWidth,\n        getHeight: api.getHeight,\n        getZr: api.getZr,\n        getDevicePixelRatio: api.getDevicePixelRatio,\n        value: value,\n        style: style,\n        styleEmphasis: styleEmphasis,\n        visual: visual,\n        barLayout: barLayout,\n        currentSeriesIndices: currentSeriesIndices,\n        font: font\n    }, prepareResult.api || {});\n\n    var userParams = {\n        // The life cycle of context: current round of rendering.\n        // The global life cycle is probably not necessary, because\n        // user can store global status by themselves.\n        context: {},\n        seriesId: customSeries.id,\n        seriesName: customSeries.name,\n        seriesIndex: customSeries.seriesIndex,\n        coordSys: prepareResult.coordSys,\n        dataInsideLength: data.count(),\n        encode: wrapEncodeDef(customSeries.getData())\n    };\n\n    // Do not support call `api` asynchronously without dataIndexInside input.\n    var currDataIndexInside;\n    var currDirty = true;\n    var currItemModel;\n    var currLabelNormalModel;\n    var currLabelEmphasisModel;\n    var currVisualColor;\n\n    return function (dataIndexInside, payload) {\n        currDataIndexInside = dataIndexInside;\n        currDirty = true;\n\n        return renderItem && renderItem(\n            zrUtil.defaults({\n                dataIndexInside: dataIndexInside,\n                dataIndex: data.getRawIndex(dataIndexInside),\n                // Can be used for optimization when zoom or roam.\n                actionType: payload ? payload.type : null\n            }, userParams),\n            userAPI\n        );\n    };\n\n    // Do not update cache until api called.\n    function updateCache(dataIndexInside) {\n        dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n        if (currDirty) {\n            currItemModel = data.getItemModel(dataIndexInside);\n            currLabelNormalModel = currItemModel.getModel(LABEL_NORMAL);\n            currLabelEmphasisModel = currItemModel.getModel(LABEL_EMPHASIS);\n            currVisualColor = data.getItemVisual(dataIndexInside, 'color');\n\n            currDirty = false;\n        }\n    }\n\n    /**\n     * @public\n     * @param {number|string} dim\n     * @param {number} [dataIndexInside=currDataIndexInside]\n     * @return {number|string} value\n     */\n    function value(dim, dataIndexInside) {\n        dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n        return data.get(data.getDimension(dim || 0), dataIndexInside);\n    }\n\n    /**\n     * By default, `visual` is applied to style (to support visualMap).\n     * `visual.color` is applied at `fill`. If user want apply visual.color on `stroke`,\n     * it can be implemented as:\n     * `api.style({stroke: api.visual('color'), fill: null})`;\n     * @public\n     * @param {Object} [extra]\n     * @param {number} [dataIndexInside=currDataIndexInside]\n     */\n    function style(extra, dataIndexInside) {\n        dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n        updateCache(dataIndexInside);\n\n        var itemStyle = currItemModel.getModel(ITEM_STYLE_NORMAL_PATH).getItemStyle();\n\n        currVisualColor != null && (itemStyle.fill = currVisualColor);\n        var opacity = data.getItemVisual(dataIndexInside, 'opacity');\n        opacity != null && (itemStyle.opacity = opacity);\n\n        var labelModel = extra\n            ? applyExtraBefore(extra, currLabelNormalModel)\n            : currLabelNormalModel;\n\n        graphicUtil.setTextStyle(itemStyle, labelModel, null, {\n            autoColor: currVisualColor,\n            isRectText: true\n        });\n\n        itemStyle.text = labelModel.getShallow('show')\n            ? zrUtil.retrieve2(\n                customSeries.getFormattedLabel(dataIndexInside, 'normal'),\n                getDefaultLabel(data, dataIndexInside)\n            )\n            : null;\n\n        extra && applyExtraAfter(itemStyle, extra);\n\n        return itemStyle;\n    }\n\n    /**\n     * @public\n     * @param {Object} [extra]\n     * @param {number} [dataIndexInside=currDataIndexInside]\n     */\n    function styleEmphasis(extra, dataIndexInside) {\n        dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n        updateCache(dataIndexInside);\n\n        var itemStyle = currItemModel.getModel(ITEM_STYLE_EMPHASIS_PATH).getItemStyle();\n\n        var labelModel = extra\n            ? applyExtraBefore(extra, currLabelEmphasisModel)\n            : currLabelEmphasisModel;\n\n        graphicUtil.setTextStyle(itemStyle, labelModel, null, {\n            isRectText: true\n        }, true);\n\n        itemStyle.text = labelModel.getShallow('show')\n            ? zrUtil.retrieve3(\n                customSeries.getFormattedLabel(dataIndexInside, 'emphasis'),\n                customSeries.getFormattedLabel(dataIndexInside, 'normal'),\n                getDefaultLabel(data, dataIndexInside)\n            )\n            : null;\n\n        extra && applyExtraAfter(itemStyle, extra);\n\n        return itemStyle;\n    }\n\n    /**\n     * @public\n     * @param {string} visualType\n     * @param {number} [dataIndexInside=currDataIndexInside]\n     */\n    function visual(visualType, dataIndexInside) {\n        dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n        return data.getItemVisual(dataIndexInside, visualType);\n    }\n\n    /**\n     * @public\n     * @param {number} opt.count Positive interger.\n     * @param {number} [opt.barWidth]\n     * @param {number} [opt.barMaxWidth]\n     * @param {number} [opt.barMinWidth]\n     * @param {number} [opt.barGap]\n     * @param {number} [opt.barCategoryGap]\n     * @return {Object} {width, offset, offsetCenter} is not support, return undefined.\n     */\n    function barLayout(opt) {\n        if (coordSys.getBaseAxis) {\n            var baseAxis = coordSys.getBaseAxis();\n            return getLayoutOnAxis(zrUtil.defaults({axis: baseAxis}, opt), api);\n        }\n    }\n\n    /**\n     * @public\n     * @return {Array.<number>}\n     */\n    function currentSeriesIndices() {\n        return ecModel.getCurrentSeriesIndices();\n    }\n\n    /**\n     * @public\n     * @param {Object} opt\n     * @param {string} [opt.fontStyle]\n     * @param {number} [opt.fontWeight]\n     * @param {number} [opt.fontSize]\n     * @param {string} [opt.fontFamily]\n     * @return {string} font string\n     */\n    function font(opt) {\n        return graphicUtil.getFont(opt, ecModel);\n    }\n}\n\nfunction wrapEncodeDef(data) {\n    var encodeDef = {};\n    zrUtil.each(data.dimensions, function (dimName, dataDimIndex) {\n        var dimInfo = data.getDimensionInfo(dimName);\n        if (!dimInfo.isExtraCoord) {\n            var coordDim = dimInfo.coordDim;\n            var dataDims = encodeDef[coordDim] = encodeDef[coordDim] || [];\n            dataDims[dimInfo.coordDimIndex] = dataDimIndex;\n        }\n    });\n    return encodeDef;\n}\n\nfunction createOrUpdate(el, dataIndex, elOption, animatableModel, group, data) {\n    el = doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data, true);\n    el && data.setItemGraphicEl(dataIndex, el);\n\n    return el;\n}\n\nfunction doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data, isRoot) {\n\n    // [Rule]\n    // By default, follow merge mode.\n    //     (It probably brings benifit for performance in some cases of large data, where\n    //     user program can be optimized to that only updated props needed to be re-calculated,\n    //     or according to `actionType` some calculation can be skipped.)\n    // If `renderItem` returns `null`/`undefined`/`false`, remove the previous el if existing.\n    //     (It seems that violate the \"merge\" principle, but most of users probably intuitively\n    //     regard \"return;\" as \"show nothing element whatever\", so make a exception to meet the\n    //     most cases.)\n\n    var simplyRemove = !elOption; // `null`/`undefined`/`false`\n    elOption = elOption || {};\n    var elOptionType = elOption.type;\n    var elOptionShape = elOption.shape;\n    var elOptionStyle = elOption.style;\n\n    if (el && (\n        simplyRemove\n        // || elOption.$merge === false\n        // If `elOptionType` is `null`, follow the merge principle.\n        || (elOptionType != null\n            && elOptionType !== el.__customGraphicType\n        )\n        || (elOptionType === 'path'\n            && hasOwnPathData(elOptionShape) && getPathData(elOptionShape) !== el.__customPathData\n        )\n        || (elOptionType === 'image'\n            && hasOwn(elOptionStyle, 'image') && elOptionStyle.image !== el.__customImagePath\n        )\n        // FIXME test and remove this restriction?\n        || (elOptionType === 'text'\n            && hasOwn(elOptionShape, 'text') && elOptionStyle.text !== el.__customText\n        )\n    )) {\n        group.remove(el);\n        el = null;\n    }\n\n    // `elOption.type` is undefined when `renderItem` returns nothing.\n    if (simplyRemove) {\n        return;\n    }\n\n    var isInit = !el;\n    !el && (el = createEl(elOption));\n    updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot);\n\n    if (elOptionType === 'group') {\n        mergeChildren(el, dataIndex, elOption, animatableModel, data);\n    }\n\n    // Always add whatever already added to ensure sequence.\n    group.add(el);\n\n    return el;\n}\n\n// Usage:\n// (1) By default, `elOption.$mergeChildren` is `'byIndex'`, which indicates that\n//     the existing children will not be removed, and enables the feature that\n//     update some of the props of some of the children simply by construct\n//     the returned children of `renderItem` like:\n//     `var children = group.children = []; children[3] = {opacity: 0.5};`\n// (2) If `elOption.$mergeChildren` is `'byName'`, add/update/remove children\n//     by child.name. But that might be lower performance.\n// (3) If `elOption.$mergeChildren` is `false`, the existing children will be\n//     replaced totally.\n// (4) If `!elOption.children`, following the \"merge\" principle, nothing will happen.\n//\n// For implementation simpleness, do not provide a direct way to remove sinlge\n// child (otherwise the total indicies of the children array have to be modified).\n// User can remove a single child by set its `ignore` as `true` or replace\n// it by another element, where its `$merge` can be set as `true` if necessary.\nfunction mergeChildren(el, dataIndex, elOption, animatableModel, data) {\n    var newChildren = elOption.children;\n    var newLen = newChildren ? newChildren.length : 0;\n    var mergeChildren = elOption.$mergeChildren;\n    // `diffChildrenByName` has been deprecated.\n    var byName = mergeChildren === 'byName' || elOption.diffChildrenByName;\n    var notMerge = mergeChildren === false;\n\n    // For better performance on roam update, only enter if necessary.\n    if (!newLen && !byName && !notMerge) {\n        return;\n    }\n\n    if (byName) {\n        diffGroupChildren({\n            oldChildren: el.children() || [],\n            newChildren: newChildren || [],\n            dataIndex: dataIndex,\n            animatableModel: animatableModel,\n            group: el,\n            data: data\n        });\n        return;\n    }\n\n    notMerge && el.removeAll();\n\n    // Mapping children of a group simply by index, which\n    // might be better performance.\n    var index = 0;\n    for (; index < newLen; index++) {\n        newChildren[index] && doCreateOrUpdate(\n            el.childAt(index),\n            dataIndex,\n            newChildren[index],\n            animatableModel,\n            el,\n            data\n        );\n    }\n    if (__DEV__) {\n        zrUtil.assert(\n            !notMerge || el.childCount() === index,\n            'MUST NOT contain empty item in children array when `group.$mergeChildren` is `false`.'\n        );\n    }\n}\n\nfunction diffGroupChildren(context) {\n    (new DataDiffer(\n        context.oldChildren,\n        context.newChildren,\n        getKey,\n        getKey,\n        context\n    ))\n        .add(processAddUpdate)\n        .update(processAddUpdate)\n        .remove(processRemove)\n        .execute();\n}\n\nfunction getKey(item, idx) {\n    var name = item && item.name;\n    return name != null ? name : GROUP_DIFF_PREFIX + idx;\n}\n\nfunction processAddUpdate(newIndex, oldIndex) {\n    var context = this.context;\n    var childOption = newIndex != null ? context.newChildren[newIndex] : null;\n    var child = oldIndex != null ? context.oldChildren[oldIndex] : null;\n\n    doCreateOrUpdate(\n        child,\n        context.dataIndex,\n        childOption,\n        context.animatableModel,\n        context.group,\n        context.data\n    );\n}\n\n// `graphic#applyDefaultTextStyle` will cache\n// textFill, textStroke, textStrokeWidth.\n// We have to do this trick.\nfunction applyExtraBefore(extra, model) {\n    var dummyModel = new Model({}, model);\n    zrUtil.each(CACHED_LABEL_STYLE_PROPERTIES, function (stylePropName, modelPropName) {\n        if (extra.hasOwnProperty(stylePropName)) {\n            dummyModel.option[modelPropName] = extra[stylePropName];\n        }\n    });\n    return dummyModel;\n}\n\nfunction applyExtraAfter(itemStyle, extra) {\n    for (var key in extra) {\n        if (extra.hasOwnProperty(key)\n            || !CACHED_LABEL_STYLE_PROPERTIES.hasOwnProperty(key)\n        ) {\n            itemStyle[key] = extra[key];\n        }\n    }\n}\n\nfunction processRemove(oldIndex) {\n    var context = this.context;\n    var child = context.oldChildren[oldIndex];\n    child && context.group.remove(child);\n}\n\nfunction getPathData(shape) {\n    // \"d\" follows the SVG convention.\n    return shape && (shape.pathData || shape.d);\n}\n\nfunction hasOwnPathData(shape) {\n    return shape && (shape.hasOwnProperty('pathData') || shape.hasOwnProperty('d'));\n}\n\nfunction hasOwn(host, prop) {\n    return host && host.hasOwnProperty(prop);\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\nimport './gridSimple';\nimport './axisPointer/CartesianAxisPointer';\nimport './axisPointer';\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport {parsePercent} from '../util/number';\nimport {isDimensionStacked} from '../data/helper/dataStackHelper';\n\nfunction getSeriesStackId(seriesModel) {\n    return seriesModel.get('stack')\n        || '__ec_stack_' + seriesModel.seriesIndex;\n}\n\nfunction getAxisKey(polar, axis) {\n    return axis.dim + polar.model.componentIndex;\n}\n\n/**\n * @param {string} seriesType\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction barLayoutPolar(seriesType, ecModel, api) {\n\n    var lastStackCoords = {};\n\n    var barWidthAndOffset = calRadialBar(\n        zrUtil.filter(\n            ecModel.getSeriesByType(seriesType),\n            function (seriesModel) {\n                return !ecModel.isSeriesFiltered(seriesModel)\n                    && seriesModel.coordinateSystem\n                    && seriesModel.coordinateSystem.type === 'polar';\n            }\n        )\n    );\n\n    ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n\n        // Check series coordinate, do layout for polar only\n        if (seriesModel.coordinateSystem.type !== 'polar') {\n            return;\n        }\n\n        var data = seriesModel.getData();\n        var polar = seriesModel.coordinateSystem;\n        var baseAxis = polar.getBaseAxis();\n        var axisKey = getAxisKey(polar, baseAxis);\n\n        var stackId = getSeriesStackId(seriesModel);\n        var columnLayoutInfo = barWidthAndOffset[axisKey][stackId];\n        var columnOffset = columnLayoutInfo.offset;\n        var columnWidth = columnLayoutInfo.width;\n        var valueAxis = polar.getOtherAxis(baseAxis);\n\n        var cx = seriesModel.coordinateSystem.cx;\n        var cy = seriesModel.coordinateSystem.cy;\n\n        var barMinHeight = seriesModel.get('barMinHeight') || 0;\n        var barMinAngle = seriesModel.get('barMinAngle') || 0;\n\n        lastStackCoords[stackId] = lastStackCoords[stackId] || [];\n\n        var valueDim = data.mapDimension(valueAxis.dim);\n        var baseDim = data.mapDimension(baseAxis.dim);\n        var stacked = isDimensionStacked(data, valueDim /*, baseDim*/);\n        var clampLayout = baseAxis.dim !== 'radius'\n            || !seriesModel.get('roundCap', true);\n\n        var valueAxisStart = valueAxis.getExtent()[0];\n\n        for (var idx = 0, len = data.count(); idx < len; idx++) {\n            var value = data.get(valueDim, idx);\n            var baseValue = data.get(baseDim, idx);\n\n            if (isNaN(value)) {\n                continue;\n            }\n\n            var sign = value >= 0 ? 'p' : 'n';\n            var baseCoord = valueAxisStart;\n\n            // Because of the barMinHeight, we can not use the value in\n            // stackResultDimension directly.\n            // Only ordinal axis can be stacked.\n            if (stacked) {\n                if (!lastStackCoords[stackId][baseValue]) {\n                    lastStackCoords[stackId][baseValue] = {\n                        p: valueAxisStart, // Positive stack\n                        n: valueAxisStart  // Negative stack\n                    };\n                }\n                // Should also consider #4243\n                baseCoord = lastStackCoords[stackId][baseValue][sign];\n            }\n\n            var r0;\n            var r;\n            var startAngle;\n            var endAngle;\n\n            // radial sector\n            if (valueAxis.dim === 'radius') {\n                var radiusSpan = valueAxis.dataToRadius(value) - valueAxisStart;\n                var angle = baseAxis.dataToAngle(baseValue);\n\n                if (Math.abs(radiusSpan) < barMinHeight) {\n                    radiusSpan = (radiusSpan < 0 ? -1 : 1) * barMinHeight;\n                }\n\n                r0 = baseCoord;\n                r = baseCoord + radiusSpan;\n                startAngle = angle - columnOffset;\n                endAngle = startAngle - columnWidth;\n\n                stacked && (lastStackCoords[stackId][baseValue][sign] = r);\n            }\n            // tangential sector\n            else {\n                var angleSpan = valueAxis.dataToAngle(value, clampLayout) - valueAxisStart;\n                var radius = baseAxis.dataToRadius(baseValue);\n\n                if (Math.abs(angleSpan) < barMinAngle) {\n                    angleSpan = (angleSpan < 0 ? -1 : 1) * barMinAngle;\n                }\n\n                r0 = radius + columnOffset;\n                r = r0 + columnWidth;\n                startAngle = baseCoord;\n                endAngle = baseCoord + angleSpan;\n\n                // if the previous stack is at the end of the ring,\n                // add a round to differentiate it from origin\n                // var extent = angleAxis.getExtent();\n                // var stackCoord = angle;\n                // if (stackCoord === extent[0] && value > 0) {\n                //     stackCoord = extent[1];\n                // }\n                // else if (stackCoord === extent[1] && value < 0) {\n                //     stackCoord = extent[0];\n                // }\n                stacked && (lastStackCoords[stackId][baseValue][sign] = endAngle);\n            }\n\n            data.setItemLayout(idx, {\n                cx: cx,\n                cy: cy,\n                r0: r0,\n                r: r,\n                // Consider that positive angle is anti-clockwise,\n                // while positive radian of sector is clockwise\n                startAngle: -startAngle * Math.PI / 180,\n                endAngle: -endAngle * Math.PI / 180\n            });\n\n        }\n\n    }, this);\n\n}\n\n/**\n * Calculate bar width and offset for radial bar charts\n */\nfunction calRadialBar(barSeries, api) {\n    // Columns info on each category axis. Key is polar name\n    var columnsMap = {};\n\n    zrUtil.each(barSeries, function (seriesModel, idx) {\n        var data = seriesModel.getData();\n        var polar = seriesModel.coordinateSystem;\n\n        var baseAxis = polar.getBaseAxis();\n        var axisKey = getAxisKey(polar, baseAxis);\n\n        var axisExtent = baseAxis.getExtent();\n        var bandWidth = baseAxis.type === 'category'\n            ? baseAxis.getBandWidth()\n            : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count());\n\n        var columnsOnAxis = columnsMap[axisKey] || {\n            bandWidth: bandWidth,\n            remainedWidth: bandWidth,\n            autoWidthCount: 0,\n            categoryGap: '20%',\n            gap: '30%',\n            stacks: {}\n        };\n        var stacks = columnsOnAxis.stacks;\n        columnsMap[axisKey] = columnsOnAxis;\n\n        var stackId = getSeriesStackId(seriesModel);\n\n        if (!stacks[stackId]) {\n            columnsOnAxis.autoWidthCount++;\n        }\n        stacks[stackId] = stacks[stackId] || {\n            width: 0,\n            maxWidth: 0\n        };\n\n        var barWidth = parsePercent(\n            seriesModel.get('barWidth'),\n            bandWidth\n        );\n        var barMaxWidth = parsePercent(\n            seriesModel.get('barMaxWidth'),\n            bandWidth\n        );\n        var barGap = seriesModel.get('barGap');\n        var barCategoryGap = seriesModel.get('barCategoryGap');\n\n        if (barWidth && !stacks[stackId].width) {\n            barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n            stacks[stackId].width = barWidth;\n            columnsOnAxis.remainedWidth -= barWidth;\n        }\n\n        barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n        (barGap != null) && (columnsOnAxis.gap = barGap);\n        (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);\n    });\n\n\n    var result = {};\n\n    zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {\n\n        result[coordSysName] = {};\n\n        var stacks = columnsOnAxis.stacks;\n        var bandWidth = columnsOnAxis.bandWidth;\n        var categoryGap = parsePercent(columnsOnAxis.categoryGap, bandWidth);\n        var barGapPercent = parsePercent(columnsOnAxis.gap, 1);\n\n        var remainedWidth = columnsOnAxis.remainedWidth;\n        var autoWidthCount = columnsOnAxis.autoWidthCount;\n        var autoWidth = (remainedWidth - categoryGap)\n            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n        autoWidth = Math.max(autoWidth, 0);\n\n        // Find if any auto calculated bar exceeded maxBarWidth\n        zrUtil.each(stacks, function (column, stack) {\n            var maxWidth = column.maxWidth;\n            if (maxWidth && maxWidth < autoWidth) {\n                maxWidth = Math.min(maxWidth, remainedWidth);\n                if (column.width) {\n                    maxWidth = Math.min(maxWidth, column.width);\n                }\n                remainedWidth -= maxWidth;\n                column.width = maxWidth;\n                autoWidthCount--;\n            }\n        });\n\n        // Recalculate width again\n        autoWidth = (remainedWidth - categoryGap)\n            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n        autoWidth = Math.max(autoWidth, 0);\n\n        var widthSum = 0;\n        var lastColumn;\n        zrUtil.each(stacks, function (column, idx) {\n            if (!column.width) {\n                column.width = autoWidth;\n            }\n            lastColumn = column;\n            widthSum += column.width * (1 + barGapPercent);\n        });\n        if (lastColumn) {\n            widthSum -= lastColumn.width * barGapPercent;\n        }\n\n        var offset = -widthSum / 2;\n        zrUtil.each(stacks, function (column, stackId) {\n            result[coordSysName][stackId] = result[coordSysName][stackId] || {\n                offset: offset,\n                width: column.width\n            };\n\n            offset += column.width * (1 + barGapPercent);\n        });\n    });\n\n    return result;\n}\n\nexport default barLayoutPolar;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport Axis from '../Axis';\n\nfunction RadiusAxis(scale, radiusExtent) {\n\n    Axis.call(this, 'radius', scale, radiusExtent);\n\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = 'category';\n}\n\nRadiusAxis.prototype = {\n\n    constructor: RadiusAxis,\n\n    /**\n     * @override\n     */\n    pointToData: function (point, clamp) {\n        return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];\n    },\n\n    dataToRadius: Axis.prototype.dataToCoord,\n\n    radiusToData: Axis.prototype.coordToData\n};\n\nzrUtil.inherits(RadiusAxis, Axis);\n\nexport default RadiusAxis;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as textContain from 'zrender/src/contain/text';\nimport Axis from '../Axis';\nimport {makeInner} from '../../util/model';\n\nvar inner = makeInner();\n\nfunction AngleAxis(scale, angleExtent) {\n\n    angleExtent = angleExtent || [0, 360];\n\n    Axis.call(this, 'angle', scale, angleExtent);\n\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = 'category';\n}\n\nAngleAxis.prototype = {\n\n    constructor: AngleAxis,\n\n    /**\n     * @override\n     */\n    pointToData: function (point, clamp) {\n        return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];\n    },\n\n    dataToAngle: Axis.prototype.dataToCoord,\n\n    angleToData: Axis.prototype.coordToData,\n\n    /**\n     * Only be called in category axis.\n     * Angle axis uses text height to decide interval\n     *\n     * @override\n     * @return {number} Auto interval for cateogry axis tick and label\n     */\n    calculateCategoryInterval: function () {\n        var axis = this;\n        var labelModel = axis.getLabelModel();\n\n        var ordinalScale = axis.scale;\n        var ordinalExtent = ordinalScale.getExtent();\n        // Providing this method is for optimization:\n        // avoid generating a long array by `getTicks`\n        // in large category data case.\n        var tickCount = ordinalScale.count();\n\n        if (ordinalExtent[1] - ordinalExtent[0] < 1) {\n            return 0;\n        }\n\n        var tickValue = ordinalExtent[0];\n        var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);\n        var unitH = Math.abs(unitSpan);\n\n        // Not precise, just use height as text width\n        // and each distance from axis line yet.\n        var rect = textContain.getBoundingRect(\n            tickValue, labelModel.getFont(), 'center', 'top'\n        );\n        var maxH = Math.max(rect.height, 7);\n\n        var dh = maxH / unitH;\n        // 0/0 is NaN, 1/0 is Infinity.\n        isNaN(dh) && (dh = Infinity);\n        var interval = Math.max(0, Math.floor(dh));\n\n        var cache = inner(axis.model);\n        var lastAutoInterval = cache.lastAutoInterval;\n        var lastTickCount = cache.lastTickCount;\n\n        // Use cache to keep interval stable while moving zoom window,\n        // otherwise the calculated interval might jitter when the zoom\n        // window size is close to the interval-changing size.\n        if (lastAutoInterval != null\n            && lastTickCount != null\n            && Math.abs(lastAutoInterval - interval) <= 1\n            && Math.abs(lastTickCount - tickCount) <= 1\n            // Always choose the bigger one, otherwise the critical\n            // point is not the same when zooming in or zooming out.\n            && lastAutoInterval > interval\n        ) {\n            interval = lastAutoInterval;\n        }\n        // Only update cache if cache not used, otherwise the\n        // changing of interval is too insensitive.\n        else {\n            cache.lastTickCount = tickCount;\n            cache.lastAutoInterval = interval;\n        }\n\n        return interval;\n    }\n};\n\nzrUtil.inherits(AngleAxis, Axis);\n\nexport default AngleAxis;","/*\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 * @module echarts/coord/polar/Polar\n */\n\nimport RadiusAxis from './RadiusAxis';\nimport AngleAxis from './AngleAxis';\n\n/**\n * @alias {module:echarts/coord/polar/Polar}\n * @constructor\n * @param {string} name\n */\nvar Polar = function (name) {\n\n    /**\n     * @type {string}\n     */\n    this.name = name || '';\n\n    /**\n     * x of polar center\n     * @type {number}\n     */\n    this.cx = 0;\n\n    /**\n     * y of polar center\n     * @type {number}\n     */\n    this.cy = 0;\n\n    /**\n     * @type {module:echarts/coord/polar/RadiusAxis}\n     * @private\n     */\n    this._radiusAxis = new RadiusAxis();\n\n    /**\n     * @type {module:echarts/coord/polar/AngleAxis}\n     * @private\n     */\n    this._angleAxis = new AngleAxis();\n\n    this._radiusAxis.polar = this._angleAxis.polar = this;\n};\n\nPolar.prototype = {\n\n    type: 'polar',\n\n    axisPointerEnabled: true,\n\n    constructor: Polar,\n\n    /**\n     * @param {Array.<string>}\n     * @readOnly\n     */\n    dimensions: ['radius', 'angle'],\n\n    /**\n     * @type {module:echarts/coord/PolarModel}\n     */\n    model: null,\n\n    /**\n     * If contain coord\n     * @param {Array.<number>} point\n     * @return {boolean}\n     */\n    containPoint: function (point) {\n        var coord = this.pointToCoord(point);\n        return this._radiusAxis.contain(coord[0])\n            && this._angleAxis.contain(coord[1]);\n    },\n\n    /**\n     * If contain data\n     * @param {Array.<number>} data\n     * @return {boolean}\n     */\n    containData: function (data) {\n        return this._radiusAxis.containData(data[0])\n            && this._angleAxis.containData(data[1]);\n    },\n\n    /**\n     * @param {string} dim\n     * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n     */\n    getAxis: function (dim) {\n        return this['_' + dim + 'Axis'];\n    },\n\n    /**\n     * @return {Array.<module:echarts/coord/Axis>}\n     */\n    getAxes: function () {\n        return [this._radiusAxis, this._angleAxis];\n    },\n\n    /**\n     * Get axes by type of scale\n     * @param {string} scaleType\n     * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n     */\n    getAxesByScale: function (scaleType) {\n        var axes = [];\n        var angleAxis = this._angleAxis;\n        var radiusAxis = this._radiusAxis;\n        angleAxis.scale.type === scaleType && axes.push(angleAxis);\n        radiusAxis.scale.type === scaleType && axes.push(radiusAxis);\n\n        return axes;\n    },\n\n    /**\n     * @return {module:echarts/coord/polar/AngleAxis}\n     */\n    getAngleAxis: function () {\n        return this._angleAxis;\n    },\n\n    /**\n     * @return {module:echarts/coord/polar/RadiusAxis}\n     */\n    getRadiusAxis: function () {\n        return this._radiusAxis;\n    },\n\n    /**\n     * @param {module:echarts/coord/polar/Axis}\n     * @return {module:echarts/coord/polar/Axis}\n     */\n    getOtherAxis: function (axis) {\n        var angleAxis = this._angleAxis;\n        return axis === angleAxis ? this._radiusAxis : angleAxis;\n    },\n\n    /**\n     * Base axis will be used on stacking.\n     *\n     * @return {module:echarts/coord/polar/Axis}\n     */\n    getBaseAxis: function () {\n        return this.getAxesByScale('ordinal')[0]\n            || this.getAxesByScale('time')[0]\n            || this.getAngleAxis();\n    },\n\n    /**\n     * @param {string} [dim] 'radius' or 'angle' or 'auto' or null/undefined\n     * @return {Object} {baseAxes: [], otherAxes: []}\n     */\n    getTooltipAxes: function (dim) {\n        var baseAxis = (dim != null && dim !== 'auto')\n            ? this.getAxis(dim) : this.getBaseAxis();\n        return {\n            baseAxes: [baseAxis],\n            otherAxes: [this.getOtherAxis(baseAxis)]\n        };\n    },\n\n    /**\n     * Convert a single data item to (x, y) point.\n     * Parameter data is an array which the first element is radius and the second is angle\n     * @param {Array.<number>} data\n     * @param {boolean} [clamp=false]\n     * @return {Array.<number>}\n     */\n    dataToPoint: function (data, clamp) {\n        return this.coordToPoint([\n            this._radiusAxis.dataToRadius(data[0], clamp),\n            this._angleAxis.dataToAngle(data[1], clamp)\n        ]);\n    },\n\n    /**\n     * Convert a (x, y) point to data\n     * @param {Array.<number>} point\n     * @param {boolean} [clamp=false]\n     * @return {Array.<number>}\n     */\n    pointToData: function (point, clamp) {\n        var coord = this.pointToCoord(point);\n        return [\n            this._radiusAxis.radiusToData(coord[0], clamp),\n            this._angleAxis.angleToData(coord[1], clamp)\n        ];\n    },\n\n    /**\n     * Convert a (x, y) point to (radius, angle) coord\n     * @param {Array.<number>} point\n     * @return {Array.<number>}\n     */\n    pointToCoord: function (point) {\n        var dx = point[0] - this.cx;\n        var dy = point[1] - this.cy;\n        var angleAxis = this.getAngleAxis();\n        var extent = angleAxis.getExtent();\n        var minAngle = Math.min(extent[0], extent[1]);\n        var maxAngle = Math.max(extent[0], extent[1]);\n        // Fix fixed extent in polarCreator\n        // FIXME\n        angleAxis.inverse\n            ? (minAngle = maxAngle - 360)\n            : (maxAngle = minAngle + 360);\n\n        var radius = Math.sqrt(dx * dx + dy * dy);\n        dx /= radius;\n        dy /= radius;\n\n        var radian = Math.atan2(-dy, dx) / Math.PI * 180;\n\n        // move to angleExtent\n        var dir = radian < minAngle ? 1 : -1;\n        while (radian < minAngle || radian > maxAngle) {\n            radian += dir * 360;\n        }\n\n        return [radius, radian];\n    },\n\n    /**\n     * Convert a (radius, angle) coord to (x, y) point\n     * @param {Array.<number>} coord\n     * @return {Array.<number>}\n     */\n    coordToPoint: function (coord) {\n        var radius = coord[0];\n        var radian = coord[1] / 180 * Math.PI;\n        var x = Math.cos(radian) * radius + this.cx;\n        // Inverse the y\n        var y = -Math.sin(radian) * radius + this.cy;\n\n        return [x, y];\n    },\n\n    /**\n     * Get ring area of cartesian.\n     * Area will have a contain function to determine if a point is in the coordinate system.\n     * @return {Ring}\n     */\n    getArea: function () {\n\n        var angleAxis = this.getAngleAxis();\n        var radiusAxis = this.getRadiusAxis();\n\n        var radiusExtent = radiusAxis.getExtent().slice();\n        radiusExtent[0] > radiusExtent[1] && radiusExtent.reverse();\n        var angleExtent = angleAxis.getExtent();\n\n        var RADIAN = Math.PI / 180;\n\n        return {\n            cx: this.cx,\n            cy: this.cy,\n            r0: radiusExtent[0],\n            r: radiusExtent[1],\n            startAngle: -angleExtent[0] * RADIAN,\n            endAngle: -angleExtent[1] * RADIAN,\n            clockwise: angleAxis.inverse,\n            contain: function (x, y) {\n                // It's a ring shape.\n                // Start angle and end angle don't matter\n                var dx = x - this.cx;\n                var dy = y - this.cy;\n                var d2 = dx * dx + dy * dy;\n                var r = this.r;\n                var r0 = this.r0;\n\n                return d2 <= r * r && d2 >= r0 * r0;\n            }\n        };\n    }\n\n};\n\nexport default Polar;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport ComponentModel from '../../model/Component';\nimport axisModelCreator from '../axisModelCreator';\nimport axisModelCommonMixin from '../axisModelCommonMixin';\n\nvar PolarAxisModel = ComponentModel.extend({\n\n    type: 'polarAxis',\n\n    /**\n     * @type {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n     */\n    axis: null,\n\n    /**\n     * @override\n     */\n    getCoordSysModel: function () {\n        return this.ecModel.queryComponents({\n            mainType: 'polar',\n            index: this.option.polarIndex,\n            id: this.option.polarId\n        })[0];\n    }\n\n});\n\nzrUtil.merge(PolarAxisModel.prototype, axisModelCommonMixin);\n\nvar polarAxisDefaultExtendedOption = {\n    angle: {\n        // polarIndex: 0,\n        // polarId: '',\n\n        startAngle: 90,\n\n        clockwise: true,\n\n        splitNumber: 12,\n\n        axisLabel: {\n            rotate: false\n        }\n    },\n    radius: {\n        // polarIndex: 0,\n        // polarId: '',\n\n        splitNumber: 5\n    }\n};\n\nfunction getAxisType(axisDim, option) {\n    // Default axis with data is category axis\n    return option.type || (option.data ? 'category' : 'value');\n}\n\naxisModelCreator('angle', PolarAxisModel, getAxisType, polarAxisDefaultExtendedOption.angle);\naxisModelCreator('radius', PolarAxisModel, getAxisType, polarAxisDefaultExtendedOption.radius);\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\nimport * as echarts from '../../echarts';\nimport './AxisModel';\n\nexport default echarts.extendComponentModel({\n\n    type: 'polar',\n\n    dependencies: ['polarAxis', 'angleAxis'],\n\n    /**\n     * @type {module:echarts/coord/polar/Polar}\n     */\n    coordinateSystem: null,\n\n    /**\n     * @param {string} axisType\n     * @return {module:echarts/coord/polar/AxisModel}\n     */\n    findAxisModel: function (axisType) {\n        var foundAxisModel;\n        var ecModel = this.ecModel;\n\n        ecModel.eachComponent(axisType, function (axisModel) {\n            if (axisModel.getCoordSysModel() === this) {\n                foundAxisModel = axisModel;\n            }\n        }, this);\n        return foundAxisModel;\n    },\n\n    defaultOption: {\n\n        zlevel: 0,\n\n        z: 0,\n\n        center: ['50%', '50%'],\n\n        radius: '80%'\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// TODO Axis scale\n\nimport {__DEV__} from '../../config';\nimport * as zrUtil from 'zrender/src/core/util';\nimport Polar from './Polar';\nimport {parsePercent} from '../../util/number';\nimport {\n    createScaleByModel,\n    niceScaleExtent\n} from '../../coord/axisHelper';\nimport CoordinateSystem from '../../CoordinateSystem';\nimport {getStackedDimension} from '../../data/helper/dataStackHelper';\n\nimport './PolarModel';\n\n/**\n * Resize method bound to the polar\n * @param {module:echarts/coord/polar/PolarModel} polarModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction resizePolar(polar, polarModel, api) {\n    var center = polarModel.get('center');\n    var width = api.getWidth();\n    var height = api.getHeight();\n\n    polar.cx = parsePercent(center[0], width);\n    polar.cy = parsePercent(center[1], height);\n\n    var radiusAxis = polar.getRadiusAxis();\n    var size = Math.min(width, height) / 2;\n\n    var radius = polarModel.get('radius');\n    if (radius == null) {\n        radius = [0, '100%'];\n    }\n    else if (!zrUtil.isArray(radius)) {\n        // r0 = 0\n        radius = [0, radius];\n    }\n    radius = [\n        parsePercent(radius[0], size),\n        parsePercent(radius[1], size)\n    ];\n\n    radiusAxis.inverse\n        ? radiusAxis.setExtent(radius[1], radius[0])\n        : radiusAxis.setExtent(radius[0], radius[1]);\n}\n\n/**\n * Update polar\n */\nfunction updatePolarScale(ecModel, api) {\n    var polar = this;\n    var angleAxis = polar.getAngleAxis();\n    var radiusAxis = polar.getRadiusAxis();\n    // Reset scale\n    angleAxis.scale.setExtent(Infinity, -Infinity);\n    radiusAxis.scale.setExtent(Infinity, -Infinity);\n\n    ecModel.eachSeries(function (seriesModel) {\n        if (seriesModel.coordinateSystem === polar) {\n            var data = seriesModel.getData();\n            zrUtil.each(data.mapDimension('radius', true), function (dim) {\n                radiusAxis.scale.unionExtentFromData(\n                    data, getStackedDimension(data, dim)\n                );\n            });\n            zrUtil.each(data.mapDimension('angle', true), function (dim) {\n                angleAxis.scale.unionExtentFromData(\n                    data, getStackedDimension(data, dim)\n                );\n            });\n        }\n    });\n\n    niceScaleExtent(angleAxis.scale, angleAxis.model);\n    niceScaleExtent(radiusAxis.scale, radiusAxis.model);\n\n    // Fix extent of category angle axis\n    if (angleAxis.type === 'category' && !angleAxis.onBand) {\n        var extent = angleAxis.getExtent();\n        var diff = 360 / angleAxis.scale.count();\n        angleAxis.inverse ? (extent[1] += diff) : (extent[1] -= diff);\n        angleAxis.setExtent(extent[0], extent[1]);\n    }\n}\n\n/**\n * Set common axis properties\n * @param {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n * @param {module:echarts/coord/polar/AxisModel}\n * @inner\n */\nfunction setAxis(axis, axisModel) {\n    axis.type = axisModel.get('type');\n    axis.scale = createScaleByModel(axisModel);\n    axis.onBand = axisModel.get('boundaryGap') && axis.type === 'category';\n    axis.inverse = axisModel.get('inverse');\n\n    if (axisModel.mainType === 'angleAxis') {\n        axis.inverse ^= axisModel.get('clockwise');\n        var startAngle = axisModel.get('startAngle');\n        axis.setExtent(startAngle, startAngle + (axis.inverse ? -360 : 360));\n    }\n\n    // Inject axis instance\n    axisModel.axis = axis;\n    axis.model = axisModel;\n}\n\n\nvar polarCreator = {\n\n    dimensions: Polar.prototype.dimensions,\n\n    create: function (ecModel, api) {\n        var polarList = [];\n        ecModel.eachComponent('polar', function (polarModel, idx) {\n            var polar = new Polar(idx);\n            // Inject resize and update method\n            polar.update = updatePolarScale;\n\n            var radiusAxis = polar.getRadiusAxis();\n            var angleAxis = polar.getAngleAxis();\n\n            var radiusAxisModel = polarModel.findAxisModel('radiusAxis');\n            var angleAxisModel = polarModel.findAxisModel('angleAxis');\n\n            setAxis(radiusAxis, radiusAxisModel);\n            setAxis(angleAxis, angleAxisModel);\n\n            resizePolar(polar, polarModel, api);\n\n            polarList.push(polar);\n\n            polarModel.coordinateSystem = polar;\n            polar.model = polarModel;\n        });\n        // Inject coordinateSystem to series\n        ecModel.eachSeries(function (seriesModel) {\n            if (seriesModel.get('coordinateSystem') === 'polar') {\n                var polarModel = ecModel.queryComponents({\n                    mainType: 'polar',\n                    index: seriesModel.get('polarIndex'),\n                    id: seriesModel.get('polarId')\n                })[0];\n\n                if (__DEV__) {\n                    if (!polarModel) {\n                        throw new Error(\n                            'Polar \"' + zrUtil.retrieve(\n                                seriesModel.get('polarIndex'),\n                                seriesModel.get('polarId'),\n                                0\n                            ) + '\" not found'\n                        );\n                    }\n                }\n                seriesModel.coordinateSystem = polarModel.coordinateSystem;\n            }\n        });\n\n        return polarList;\n    }\n};\n\nCoordinateSystem.register('polar', polarCreator);","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport Model from '../../model/Model';\nimport AxisView from './AxisView';\nimport AxisBuilder from './AxisBuilder';\n\nvar elementList = ['axisLine', 'axisLabel', 'axisTick', 'splitLine', 'splitArea'];\n\nfunction getAxisLineShape(polar, rExtent, angle) {\n    rExtent[1] > rExtent[0] && (rExtent = rExtent.slice().reverse());\n    var start = polar.coordToPoint([rExtent[0], angle]);\n    var end = polar.coordToPoint([rExtent[1], angle]);\n\n    return {\n        x1: start[0],\n        y1: start[1],\n        x2: end[0],\n        y2: end[1]\n    };\n}\n\nfunction getRadiusIdx(polar) {\n    var radiusAxis = polar.getRadiusAxis();\n    return radiusAxis.inverse ? 0 : 1;\n}\n\n// Remove the last tick which will overlap the first tick\nfunction fixAngleOverlap(list) {\n    var firstItem = list[0];\n    var lastItem = list[list.length - 1];\n    if (firstItem\n        && lastItem\n        && Math.abs(Math.abs(firstItem.coord - lastItem.coord) - 360) < 1e-4\n    ) {\n        list.pop();\n    }\n}\n\nexport default AxisView.extend({\n\n    type: 'angleAxis',\n\n    axisPointerClass: 'PolarAxisPointer',\n\n    render: function (angleAxisModel, ecModel) {\n        this.group.removeAll();\n        if (!angleAxisModel.get('show')) {\n            return;\n        }\n\n        var angleAxis = angleAxisModel.axis;\n        var polar = angleAxis.polar;\n        var radiusExtent = polar.getRadiusAxis().getExtent();\n\n        var ticksAngles = angleAxis.getTicksCoords();\n        var labels = zrUtil.map(angleAxis.getViewLabels(), function (labelItem) {\n            var labelItem = zrUtil.clone(labelItem);\n            labelItem.coord = angleAxis.dataToCoord(labelItem.tickValue);\n            return labelItem;\n        });\n\n        fixAngleOverlap(labels);\n        fixAngleOverlap(ticksAngles);\n\n        zrUtil.each(elementList, function (name) {\n            if (angleAxisModel.get(name + '.show')\n                && (!angleAxis.scale.isBlank() || name === 'axisLine')\n            ) {\n                this['_' + name](angleAxisModel, polar, ticksAngles, radiusExtent, labels);\n            }\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _axisLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n        var lineStyleModel = angleAxisModel.getModel('axisLine.lineStyle');\n\n        // extent id of the axis radius (r0 and r)\n        var rId = getRadiusIdx(polar);\n        var r0Id = rId ? 0 : 1;\n\n        var shape;\n        if (radiusExtent[r0Id] === 0) {\n            shape = new graphic.Circle({\n                shape: {\n                    cx: polar.cx,\n                    cy: polar.cy,\n                    r: radiusExtent[rId]\n                },\n                style: lineStyleModel.getLineStyle(),\n                z2: 1,\n                silent: true\n            });\n        }\n        else {\n            shape = new graphic.Ring({\n                shape: {\n                    cx: polar.cx,\n                    cy: polar.cy,\n                    r: radiusExtent[rId],\n                    r0: radiusExtent[r0Id]\n                },\n                style: lineStyleModel.getLineStyle(),\n                z2: 1,\n                silent: true\n            });\n        }\n        shape.style.fill = null;\n        this.group.add(shape);\n    },\n\n    /**\n     * @private\n     */\n    _axisTick: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n        var tickModel = angleAxisModel.getModel('axisTick');\n\n        var tickLen = (tickModel.get('inside') ? -1 : 1) * tickModel.get('length');\n        var radius = radiusExtent[getRadiusIdx(polar)];\n\n        var lines = zrUtil.map(ticksAngles, function (tickAngleItem) {\n            return new graphic.Line({\n                shape: getAxisLineShape(polar, [radius, radius + tickLen], tickAngleItem.coord)\n            });\n        });\n        this.group.add(graphic.mergePath(\n            lines, {\n                style: zrUtil.defaults(\n                    tickModel.getModel('lineStyle').getLineStyle(),\n                    {\n                        stroke: angleAxisModel.get('axisLine.lineStyle.color')\n                    }\n                )\n            }\n        ));\n    },\n\n    /**\n     * @private\n     */\n    _axisLabel: function (angleAxisModel, polar, ticksAngles, radiusExtent, labels) {\n        var rawCategoryData = angleAxisModel.getCategories(true);\n\n        var commonLabelModel = angleAxisModel.getModel('axisLabel');\n\n        var labelMargin = commonLabelModel.get('margin');\n        var triggerEvent = angleAxisModel.get('triggerEvent');\n\n        // Use length of ticksAngles because it may remove the last tick to avoid overlapping\n        zrUtil.each(labels, function (labelItem, idx) {\n            var labelModel = commonLabelModel;\n            var tickValue = labelItem.tickValue;\n\n            var r = radiusExtent[getRadiusIdx(polar)];\n            var p = polar.coordToPoint([r + labelMargin, labelItem.coord]);\n            var cx = polar.cx;\n            var cy = polar.cy;\n\n            var labelTextAlign = Math.abs(p[0] - cx) / r < 0.3\n                ? 'center' : (p[0] > cx ? 'left' : 'right');\n            var labelTextVerticalAlign = Math.abs(p[1] - cy) / r < 0.3\n                ? 'middle' : (p[1] > cy ? 'top' : 'bottom');\n\n            if (rawCategoryData && rawCategoryData[tickValue] && rawCategoryData[tickValue].textStyle) {\n                labelModel = new Model(\n                    rawCategoryData[tickValue].textStyle, commonLabelModel, commonLabelModel.ecModel\n                );\n            }\n\n            var textEl = new graphic.Text({\n                silent: AxisBuilder.isLabelSilent(angleAxisModel)\n            });\n            this.group.add(textEl);\n            graphic.setTextStyle(textEl.style, labelModel, {\n                x: p[0],\n                y: p[1],\n                textFill: labelModel.getTextColor() || angleAxisModel.get('axisLine.lineStyle.color'),\n                text: labelItem.formattedLabel,\n                textAlign: labelTextAlign,\n                textVerticalAlign: labelTextVerticalAlign\n            });\n\n            // Pack data for mouse event\n            if (triggerEvent) {\n                textEl.eventData = AxisBuilder.makeAxisEventDataBase(angleAxisModel);\n                textEl.eventData.targetType = 'axisLabel';\n                textEl.eventData.value = labelItem.rawLabel;\n            }\n\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _splitLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n        var splitLineModel = angleAxisModel.getModel('splitLine');\n        var lineStyleModel = splitLineModel.getModel('lineStyle');\n        var lineColors = lineStyleModel.get('color');\n        var lineCount = 0;\n\n        lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n\n        var splitLines = [];\n\n        for (var i = 0; i < ticksAngles.length; i++) {\n            var colorIndex = (lineCount++) % lineColors.length;\n            splitLines[colorIndex] = splitLines[colorIndex] || [];\n            splitLines[colorIndex].push(new graphic.Line({\n                shape: getAxisLineShape(polar, radiusExtent, ticksAngles[i].coord)\n            }));\n        }\n\n        // Simple optimization\n        // Batching the lines if color are the same\n        for (var i = 0; i < splitLines.length; i++) {\n            this.group.add(graphic.mergePath(splitLines[i], {\n                style: zrUtil.defaults({\n                    stroke: lineColors[i % lineColors.length]\n                }, lineStyleModel.getLineStyle()),\n                silent: true,\n                z: angleAxisModel.get('z')\n            }));\n        }\n    },\n\n    /**\n     * @private\n     */\n    _splitArea: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n        if (!ticksAngles.length) {\n            return;\n        }\n\n        var splitAreaModel = angleAxisModel.getModel('splitArea');\n        var areaStyleModel = splitAreaModel.getModel('areaStyle');\n        var areaColors = areaStyleModel.get('color');\n        var lineCount = 0;\n\n        areaColors = areaColors instanceof Array ? areaColors : [areaColors];\n\n        var splitAreas = [];\n\n        var RADIAN = Math.PI / 180;\n        var prevAngle = -ticksAngles[0].coord * RADIAN;\n        var r0 = Math.min(radiusExtent[0], radiusExtent[1]);\n        var r1 = Math.max(radiusExtent[0], radiusExtent[1]);\n\n        var clockwise = angleAxisModel.get('clockwise');\n\n        for (var i = 1; i < ticksAngles.length; i++) {\n            var colorIndex = (lineCount++) % areaColors.length;\n            splitAreas[colorIndex] = splitAreas[colorIndex] || [];\n            splitAreas[colorIndex].push(new graphic.Sector({\n                shape: {\n                    cx: polar.cx,\n                    cy: polar.cy,\n                    r0: r0,\n                    r: r1,\n                    startAngle: prevAngle,\n                    endAngle: -ticksAngles[i].coord * RADIAN,\n                    clockwise: clockwise\n                },\n                silent: true\n            }));\n            prevAngle = -ticksAngles[i].coord * RADIAN;\n        }\n\n        // Simple optimization\n        // Batching the lines if color are the same\n        for (var i = 0; i < splitAreas.length; i++) {\n            this.group.add(graphic.mergePath(splitAreas[i], {\n                style: zrUtil.defaults({\n                    fill: areaColors[i % areaColors.length]\n                }, areaStyleModel.getAreaStyle()),\n                silent: true\n            }));\n        }\n    }\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport '../coord/polar/polarCreator';\nimport './axis/AngleAxisView';","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport AxisBuilder from './AxisBuilder';\nimport AxisView from './AxisView';\n\nvar axisBuilderAttrs = [\n    'axisLine', 'axisTickLabel', 'axisName'\n];\nvar selfBuilderAttrs = [\n    'splitLine', 'splitArea'\n];\n\nexport default AxisView.extend({\n\n    type: 'radiusAxis',\n\n    axisPointerClass: 'PolarAxisPointer',\n\n    render: function (radiusAxisModel, ecModel) {\n        this.group.removeAll();\n        if (!radiusAxisModel.get('show')) {\n            return;\n        }\n        var radiusAxis = radiusAxisModel.axis;\n        var polar = radiusAxis.polar;\n        var angleAxis = polar.getAngleAxis();\n        var ticksCoords = radiusAxis.getTicksCoords();\n        var axisAngle = angleAxis.getExtent()[0];\n        var radiusExtent = radiusAxis.getExtent();\n\n        var layout = layoutAxis(polar, radiusAxisModel, axisAngle);\n        var axisBuilder = new AxisBuilder(radiusAxisModel, layout);\n        zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n        this.group.add(axisBuilder.getGroup());\n\n        zrUtil.each(selfBuilderAttrs, function (name) {\n            if (radiusAxisModel.get(name + '.show') && !radiusAxis.scale.isBlank()) {\n                this['_' + name](radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords);\n            }\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _splitLine: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) {\n        var splitLineModel = radiusAxisModel.getModel('splitLine');\n        var lineStyleModel = splitLineModel.getModel('lineStyle');\n        var lineColors = lineStyleModel.get('color');\n        var lineCount = 0;\n\n        lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n\n        var splitLines = [];\n\n        for (var i = 0; i < ticksCoords.length; i++) {\n            var colorIndex = (lineCount++) % lineColors.length;\n            splitLines[colorIndex] = splitLines[colorIndex] || [];\n            splitLines[colorIndex].push(new graphic.Circle({\n                shape: {\n                    cx: polar.cx,\n                    cy: polar.cy,\n                    r: ticksCoords[i].coord\n                },\n                silent: true\n            }));\n        }\n\n        // Simple optimization\n        // Batching the lines if color are the same\n        for (var i = 0; i < splitLines.length; i++) {\n            this.group.add(graphic.mergePath(splitLines[i], {\n                style: zrUtil.defaults({\n                    stroke: lineColors[i % lineColors.length],\n                    fill: null\n                }, lineStyleModel.getLineStyle()),\n                silent: true\n            }));\n        }\n    },\n\n    /**\n     * @private\n     */\n    _splitArea: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) {\n        if (!ticksCoords.length) {\n            return;\n        }\n\n        var splitAreaModel = radiusAxisModel.getModel('splitArea');\n        var areaStyleModel = splitAreaModel.getModel('areaStyle');\n        var areaColors = areaStyleModel.get('color');\n        var lineCount = 0;\n\n        areaColors = areaColors instanceof Array ? areaColors : [areaColors];\n\n        var splitAreas = [];\n\n        var prevRadius = ticksCoords[0].coord;\n        for (var i = 1; i < ticksCoords.length; i++) {\n            var colorIndex = (lineCount++) % areaColors.length;\n            splitAreas[colorIndex] = splitAreas[colorIndex] || [];\n            splitAreas[colorIndex].push(new graphic.Sector({\n                shape: {\n                    cx: polar.cx,\n                    cy: polar.cy,\n                    r0: prevRadius,\n                    r: ticksCoords[i].coord,\n                    startAngle: 0,\n                    endAngle: Math.PI * 2\n                },\n                silent: true\n            }));\n            prevRadius = ticksCoords[i].coord;\n        }\n\n        // Simple optimization\n        // Batching the lines if color are the same\n        for (var i = 0; i < splitAreas.length; i++) {\n            this.group.add(graphic.mergePath(splitAreas[i], {\n                style: zrUtil.defaults({\n                    fill: areaColors[i % areaColors.length]\n                }, areaStyleModel.getAreaStyle()),\n                silent: true\n            }));\n        }\n    }\n});\n\n/**\n * @inner\n */\nfunction layoutAxis(polar, radiusAxisModel, axisAngle) {\n    return {\n        position: [polar.cx, polar.cy],\n        rotation: axisAngle / 180 * Math.PI,\n        labelDirection: -1,\n        tickDirection: -1,\n        nameDirection: 1,\n        labelRotate: radiusAxisModel.getModel('axisLabel').get('rotate'),\n        // Over splitLine and splitArea\n        z2: 1\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\nimport '../coord/polar/polarCreator';\nimport './axis/RadiusAxisView';","/*\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\nimport * as formatUtil from '../../util/format';\nimport BaseAxisPointer from './BaseAxisPointer';\nimport * as graphic from '../../util/graphic';\nimport * as viewHelper from './viewHelper';\nimport * as matrix from 'zrender/src/core/matrix';\nimport AxisBuilder from '../axis/AxisBuilder';\nimport AxisView from '../axis/AxisView';\n\n\nvar PolarAxisPointer = BaseAxisPointer.extend({\n\n    /**\n     * @override\n     */\n    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n        var axis = axisModel.axis;\n\n        if (axis.dim === 'angle') {\n            this.animationThreshold = Math.PI / 18;\n        }\n\n        var polar = axis.polar;\n        var otherAxis = polar.getOtherAxis(axis);\n        var otherExtent = otherAxis.getExtent();\n\n        var coordValue;\n        coordValue = axis['dataTo' + formatUtil.capitalFirst(axis.dim)](value);\n\n        var axisPointerType = axisPointerModel.get('type');\n        if (axisPointerType && axisPointerType !== 'none') {\n            var elStyle = viewHelper.buildElStyle(axisPointerModel);\n            var pointerOption = pointerShapeBuilder[axisPointerType](\n                axis, polar, coordValue, otherExtent, elStyle\n            );\n            pointerOption.style = elStyle;\n            elOption.graphicKey = pointerOption.type;\n            elOption.pointer = pointerOption;\n        }\n\n        var labelMargin = axisPointerModel.get('label.margin');\n        var labelPos = getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin);\n        viewHelper.buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos);\n    }\n\n    // Do not support handle, utill any user requires it.\n\n});\n\nfunction getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin) {\n    var axis = axisModel.axis;\n    var coord = axis.dataToCoord(value);\n    var axisAngle = polar.getAngleAxis().getExtent()[0];\n    axisAngle = axisAngle / 180 * Math.PI;\n    var radiusExtent = polar.getRadiusAxis().getExtent();\n    var position;\n    var align;\n    var verticalAlign;\n\n    if (axis.dim === 'radius') {\n        var transform = matrix.create();\n        matrix.rotate(transform, transform, axisAngle);\n        matrix.translate(transform, transform, [polar.cx, polar.cy]);\n        position = graphic.applyTransform([coord, -labelMargin], transform);\n\n        var labelRotation = axisModel.getModel('axisLabel').get('rotate') || 0;\n        var labelLayout = AxisBuilder.innerTextLayout(\n            axisAngle, labelRotation * Math.PI / 180, -1\n        );\n        align = labelLayout.textAlign;\n        verticalAlign = labelLayout.textVerticalAlign;\n    }\n    else { // angle axis\n        var r = radiusExtent[1];\n        position = polar.coordToPoint([r + labelMargin, coord]);\n        var cx = polar.cx;\n        var cy = polar.cy;\n        align = Math.abs(position[0] - cx) / r < 0.3\n            ? 'center' : (position[0] > cx ? 'left' : 'right');\n        verticalAlign = Math.abs(position[1] - cy) / r < 0.3\n            ? 'middle' : (position[1] > cy ? 'top' : 'bottom');\n    }\n\n    return {\n        position: position,\n        align: align,\n        verticalAlign: verticalAlign\n    };\n}\n\n\nvar pointerShapeBuilder = {\n\n    line: function (axis, polar, coordValue, otherExtent, elStyle) {\n        return axis.dim === 'angle'\n            ? {\n                type: 'Line',\n                shape: viewHelper.makeLineShape(\n                    polar.coordToPoint([otherExtent[0], coordValue]),\n                    polar.coordToPoint([otherExtent[1], coordValue])\n                )\n            }\n            : {\n                type: 'Circle',\n                shape: {\n                    cx: polar.cx,\n                    cy: polar.cy,\n                    r: coordValue\n                }\n            };\n    },\n\n    shadow: function (axis, polar, coordValue, otherExtent, elStyle) {\n        var bandWidth = Math.max(1, axis.getBandWidth());\n        var radian = Math.PI / 180;\n\n        return axis.dim === 'angle'\n            ? {\n                type: 'Sector',\n                shape: viewHelper.makeSectorShape(\n                    polar.cx, polar.cy,\n                    otherExtent[0], otherExtent[1],\n                    // In ECharts y is negative if angle is positive\n                    (-coordValue - bandWidth / 2) * radian,\n                    (-coordValue + bandWidth / 2) * radian\n                )\n            }\n            : {\n                type: 'Sector',\n                shape: viewHelper.makeSectorShape(\n                    polar.cx, polar.cy,\n                    coordValue - bandWidth / 2,\n                    coordValue + bandWidth / 2,\n                    0, Math.PI * 2\n                )\n            };\n    }\n};\n\nAxisView.registerAxisPointerClass('PolarAxisPointer', PolarAxisPointer);\n\nexport default PolarAxisPointer;","/*\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\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport barPolar from '../layout/barPolar';\n\nimport '../coord/polar/polarCreator';\nimport './angleAxis';\nimport './radiusAxis';\nimport './axisPointer';\nimport './axisPointer/PolarAxisPointer';\n\n// For reducing size of echarts.min, barLayoutPolar is required by polar.\necharts.registerLayout(zrUtil.curry(barPolar, 'bar'));\n\n// Polar view\necharts.extendComponentView({\n    type: 'polar'\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as modelUtil from '../../util/model';\nimport ComponentModel from '../../model/Component';\nimport Model from '../../model/Model';\nimport selectableMixin from '../../component/helper/selectableMixin';\nimport geoCreator from './geoCreator';\n\nvar GeoModel = ComponentModel.extend({\n\n    type: 'geo',\n\n    /**\n     * @type {module:echarts/coord/geo/Geo}\n     */\n    coordinateSystem: null,\n\n    layoutMode: 'box',\n\n    init: function (option) {\n        ComponentModel.prototype.init.apply(this, arguments);\n\n        // Default label emphasis `show`\n        modelUtil.defaultEmphasis(option, 'label', ['show']);\n    },\n\n    optionUpdated: function () {\n        var option = this.option;\n        var self = this;\n\n        option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap);\n\n        this._optionModelMap = zrUtil.reduce(option.regions || [], function (optionModelMap, regionOpt) {\n            if (regionOpt.name) {\n                optionModelMap.set(regionOpt.name, new Model(regionOpt, self));\n            }\n            return optionModelMap;\n        }, zrUtil.createHashMap());\n\n        this.updateSelectedMap(option.regions);\n    },\n\n    defaultOption: {\n\n        zlevel: 0,\n\n        z: 0,\n\n        show: true,\n\n        left: 'center',\n\n        top: 'center',\n\n\n        // width:,\n        // height:,\n        // right\n        // bottom\n\n        // Aspect is width / height. Inited to be geoJson bbox aspect\n        // This parameter is used for scale this aspect\n        // If svg used, aspectScale is 1 by default.\n        // aspectScale: 0.75,\n        aspectScale: null,\n\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        silent: false,\n\n        // Map type\n        map: '',\n\n        // Define left-top, right-bottom coords to control view\n        // For example, [ [180, 90], [-180, -90] ]\n        boundingCoords: null,\n\n        // Default on center of map\n        center: null,\n\n        zoom: 1,\n\n        scaleLimit: null,\n\n        // selectedMode: false\n\n        label: {\n            show: false,\n            color: '#000'\n        },\n\n        itemStyle: {\n            // color: 各异,\n            borderWidth: 0.5,\n            borderColor: '#444',\n            color: '#eee'\n        },\n\n        emphasis: {\n            label: {\n                show: true,\n                color: 'rgb(100,0,0)'\n            },\n            itemStyle: {\n                color: 'rgba(255,215,0,0.8)'\n            }\n        },\n\n        regions: []\n    },\n\n    /**\n     * Get model of region\n     * @param  {string} name\n     * @return {module:echarts/model/Model}\n     */\n    getRegionModel: function (name) {\n        return this._optionModelMap.get(name) || new Model(null, this, this.ecModel);\n    },\n\n    /**\n     * Format label\n     * @param {string} name Region name\n     * @param {string} [status='normal'] 'normal' or 'emphasis'\n     * @return {string}\n     */\n    getFormattedLabel: function (name, status) {\n        var regionModel = this.getRegionModel(name);\n        var formatter = regionModel.get(\n            'label'\n            + (status === 'normal' ? '.' : status + '.')\n            + 'formatter'\n        );\n        var params = {\n            name: name\n        };\n        if (typeof formatter === 'function') {\n            params.status = status;\n            return formatter(params);\n        }\n        else if (typeof formatter === 'string') {\n            return formatter.replace('{a}', name != null ? name : '');\n        }\n    },\n\n    setZoom: function (zoom) {\n        this.option.zoom = zoom;\n    },\n\n    setCenter: function (center) {\n        this.option.center = center;\n    }\n});\n\nzrUtil.mixin(GeoModel, selectableMixin);\n\nexport default GeoModel;","/*\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\nimport MapDraw from '../helper/MapDraw';\nimport * as echarts from '../../echarts';\n\nexport default echarts.extendComponentView({\n\n    type: 'geo',\n\n    init: function (ecModel, api) {\n        var mapDraw = new MapDraw(api, true);\n        this._mapDraw = mapDraw;\n\n        this.group.add(mapDraw.group);\n    },\n\n    render: function (geoModel, ecModel, api, payload) {\n        // Not render if it is an toggleSelect action from self\n        if (payload && payload.type === 'geoToggleSelect'\n            && payload.from === this.uid\n        ) {\n            return;\n        }\n\n        var mapDraw = this._mapDraw;\n        if (geoModel.get('show')) {\n            mapDraw.draw(geoModel, ecModel, api, this, payload);\n        }\n        else {\n            this._mapDraw.group.removeAll();\n        }\n\n        this.group.silent = geoModel.get('silent');\n    },\n\n    dispose: function () {\n        this._mapDraw && this._mapDraw.remove();\n    }\n\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\n\nimport '../coord/geo/GeoModel';\nimport '../coord/geo/geoCreator';\nimport './geo/GeoView';\nimport '../action/geoRoam';\n\nfunction makeAction(method, actionInfo) {\n    actionInfo.update = 'updateView';\n    echarts.registerAction(actionInfo, function (payload, ecModel) {\n        var selected = {};\n\n        ecModel.eachComponent(\n            { mainType: 'geo', query: payload},\n            function (geoModel) {\n                geoModel[method](payload.name);\n                var geo = geoModel.coordinateSystem;\n                zrUtil.each(geo.regions, function (region) {\n                    selected[region.name] = geoModel.isSelected(region.name) || false;\n                });\n            }\n        );\n\n        return {\n            selected: selected,\n            name: payload.name\n        };\n    });\n}\n\nmakeAction('toggleSelected', {\n    type: 'geoToggleSelect',\n    event: 'geoselectchanged'\n});\nmakeAction('select', {\n    type: 'geoSelect',\n    event: 'geoselected'\n});\nmakeAction('unSelect', {\n    type: 'geoUnSelect',\n    event: 'geounselected'\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as layout from '../../util/layout';\nimport * as numberUtil from '../../util/number';\nimport CoordinateSystem from '../../CoordinateSystem';\n\n// (24*60*60*1000)\nvar PROXIMATE_ONE_DAY = 86400000;\n\n/**\n * Calendar\n *\n * @constructor\n *\n * @param {Object} calendarModel calendarModel\n * @param {Object} ecModel       ecModel\n * @param {Object} api           api\n */\nfunction Calendar(calendarModel, ecModel, api) {\n    this._model = calendarModel;\n}\n\nCalendar.prototype = {\n\n    constructor: Calendar,\n\n    type: 'calendar',\n\n    dimensions: ['time', 'value'],\n\n    // Required in createListFromData\n    getDimensionsInfo: function () {\n        return [{name: 'time', type: 'time'}, 'value'];\n    },\n\n    getRangeInfo: function () {\n        return this._rangeInfo;\n    },\n\n    getModel: function () {\n        return this._model;\n    },\n\n    getRect: function () {\n        return this._rect;\n    },\n\n    getCellWidth: function () {\n        return this._sw;\n    },\n\n    getCellHeight: function () {\n        return this._sh;\n    },\n\n    getOrient: function () {\n        return this._orient;\n    },\n\n    /**\n     * getFirstDayOfWeek\n     *\n     * @example\n     *     0 : start at Sunday\n     *     1 : start at Monday\n     *\n     * @return {number}\n     */\n    getFirstDayOfWeek: function () {\n        return this._firstDayOfWeek;\n    },\n\n    /**\n     * get date info\n     *\n     * @param  {string|number} date date\n     * @return {Object}\n     * {\n     *      y: string, local full year, eg., '1940',\n     *      m: string, local month, from '01' ot '12',\n     *      d: string, local date, from '01' to '31' (if exists),\n     *      day: It is not date.getDay(). It is the location of the cell in a week, from 0 to 6,\n     *      time: timestamp,\n     *      formatedDate: string, yyyy-MM-dd,\n     *      date: original date object.\n     * }\n     */\n    getDateInfo: function (date) {\n\n        date = numberUtil.parseDate(date);\n\n        var y = date.getFullYear();\n\n        var m = date.getMonth() + 1;\n        m = m < 10 ? '0' + m : m;\n\n        var d = date.getDate();\n        d = d < 10 ? '0' + d : d;\n\n        var day = date.getDay();\n\n        day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7);\n\n        return {\n            y: y,\n            m: m,\n            d: d,\n            day: day,\n            time: date.getTime(),\n            formatedDate: y + '-' + m + '-' + d,\n            date: date\n        };\n    },\n\n    getNextNDay: function (date, n) {\n        n = n || 0;\n        if (n === 0) {\n            return this.getDateInfo(date);\n        }\n\n        date = new Date(this.getDateInfo(date).time);\n        date.setDate(date.getDate() + n);\n\n        return this.getDateInfo(date);\n    },\n\n    update: function (ecModel, api) {\n\n        this._firstDayOfWeek = +this._model.getModel('dayLabel').get('firstDay');\n        this._orient = this._model.get('orient');\n        this._lineWidth = this._model.getModel('itemStyle').getItemStyle().lineWidth || 0;\n\n\n        this._rangeInfo = this._getRangeInfo(this._initRangeOption());\n        var weeks = this._rangeInfo.weeks || 1;\n        var whNames = ['width', 'height'];\n        var cellSize = this._model.get('cellSize').slice();\n        var layoutParams = this._model.getBoxLayoutParams();\n        var cellNumbers = this._orient === 'horizontal' ? [weeks, 7] : [7, weeks];\n\n        zrUtil.each([0, 1], function (idx) {\n            if (cellSizeSpecified(cellSize, idx)) {\n                layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx];\n            }\n        });\n\n        var whGlobal = {\n            width: api.getWidth(),\n            height: api.getHeight()\n        };\n        var calendarRect = this._rect = layout.getLayoutRect(layoutParams, whGlobal);\n\n        zrUtil.each([0, 1], function (idx) {\n            if (!cellSizeSpecified(cellSize, idx)) {\n                cellSize[idx] = calendarRect[whNames[idx]] / cellNumbers[idx];\n            }\n        });\n\n        function cellSizeSpecified(cellSize, idx) {\n            return cellSize[idx] != null && cellSize[idx] !== 'auto';\n        }\n\n        this._sw = cellSize[0];\n        this._sh = cellSize[1];\n    },\n\n\n    /**\n     * Convert a time data(time, value) item to (x, y) point.\n     *\n     * @override\n     * @param  {Array|number} data data\n     * @param  {boolean} [clamp=true] out of range\n     * @return {Array} point\n     */\n    dataToPoint: function (data, clamp) {\n        zrUtil.isArray(data) && (data = data[0]);\n        clamp == null && (clamp = true);\n\n        var dayInfo = this.getDateInfo(data);\n        var range = this._rangeInfo;\n        var date = dayInfo.formatedDate;\n\n        // if not in range return [NaN, NaN]\n        if (clamp && !(\n            dayInfo.time >= range.start.time\n            && dayInfo.time < range.end.time + PROXIMATE_ONE_DAY\n        )) {\n            return [NaN, NaN];\n        }\n\n        var week = dayInfo.day;\n        var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek;\n\n        if (this._orient === 'vertical') {\n            return [\n                this._rect.x + week * this._sw + this._sw / 2,\n                this._rect.y + nthWeek * this._sh + this._sh / 2\n            ];\n\n        }\n\n        return [\n            this._rect.x + nthWeek * this._sw + this._sw / 2,\n            this._rect.y + week * this._sh + this._sh / 2\n        ];\n\n    },\n\n    /**\n     * Convert a (x, y) point to time data\n     *\n     * @override\n     * @param  {string} point point\n     * @return {string}       data\n     */\n    pointToData: function (point) {\n\n        var date = this.pointToDate(point);\n\n        return date && date.time;\n    },\n\n    /**\n     * Convert a time date item to (x, y) four point.\n     *\n     * @param  {Array} data  date[0] is date\n     * @param  {boolean} [clamp=true]  out of range\n     * @return {Object}       point\n     */\n    dataToRect: function (data, clamp) {\n        var point = this.dataToPoint(data, clamp);\n\n        return {\n            contentShape: {\n                x: point[0] - (this._sw - this._lineWidth) / 2,\n                y: point[1] - (this._sh - this._lineWidth) / 2,\n                width: this._sw - this._lineWidth,\n                height: this._sh - this._lineWidth\n            },\n\n            center: point,\n\n            tl: [\n                point[0] - this._sw / 2,\n                point[1] - this._sh / 2\n            ],\n\n            tr: [\n                point[0] + this._sw / 2,\n                point[1] - this._sh / 2\n            ],\n\n            br: [\n                point[0] + this._sw / 2,\n                point[1] + this._sh / 2\n            ],\n\n            bl: [\n                point[0] - this._sw / 2,\n                point[1] + this._sh / 2\n            ]\n\n        };\n    },\n\n    /**\n     * Convert a (x, y) point to time date\n     *\n     * @param  {Array} point point\n     * @return {Object}       date\n     */\n    pointToDate: function (point) {\n        var nthX = Math.floor((point[0] - this._rect.x) / this._sw) + 1;\n        var nthY = Math.floor((point[1] - this._rect.y) / this._sh) + 1;\n        var range = this._rangeInfo.range;\n\n        if (this._orient === 'vertical') {\n            return this._getDateByWeeksAndDay(nthY, nthX - 1, range);\n        }\n\n        return this._getDateByWeeksAndDay(nthX, nthY - 1, range);\n    },\n\n    /**\n     * @inheritDoc\n     */\n    convertToPixel: zrUtil.curry(doConvert, 'dataToPoint'),\n\n    /**\n     * @inheritDoc\n     */\n    convertFromPixel: zrUtil.curry(doConvert, 'pointToData'),\n\n    /**\n     * initRange\n     *\n     * @private\n     * @return {Array} [start, end]\n     */\n    _initRangeOption: function () {\n        var range = this._model.get('range');\n\n        var rg = range;\n\n        if (zrUtil.isArray(rg) && rg.length === 1) {\n            rg = rg[0];\n        }\n\n        if (/^\\d{4}$/.test(rg)) {\n            range = [rg + '-01-01', rg + '-12-31'];\n        }\n\n        if (/^\\d{4}[\\/|-]\\d{1,2}$/.test(rg)) {\n\n            var start = this.getDateInfo(rg);\n            var firstDay = start.date;\n            firstDay.setMonth(firstDay.getMonth() + 1);\n\n            var end = this.getNextNDay(firstDay, -1);\n            range = [start.formatedDate, end.formatedDate];\n        }\n\n        if (/^\\d{4}[\\/|-]\\d{1,2}[\\/|-]\\d{1,2}$/.test(rg)) {\n            range = [rg, rg];\n        }\n\n        var tmp = this._getRangeInfo(range);\n\n        if (tmp.start.time > tmp.end.time) {\n            range.reverse();\n        }\n\n        return range;\n    },\n\n    /**\n     * range info\n     *\n     * @private\n     * @param  {Array} range range ['2017-01-01', '2017-07-08']\n     *  If range[0] > range[1], they will not be reversed.\n     * @return {Object}       obj\n     */\n    _getRangeInfo: function (range) {\n        range = [\n            this.getDateInfo(range[0]),\n            this.getDateInfo(range[1])\n        ];\n\n        var reversed;\n        if (range[0].time > range[1].time) {\n            reversed = true;\n            range.reverse();\n        }\n\n        var allDay = Math.floor(range[1].time / PROXIMATE_ONE_DAY)\n            - Math.floor(range[0].time / PROXIMATE_ONE_DAY) + 1;\n\n        // Consider case:\n        // Firstly set system timezone as \"Time Zone: America/Toronto\",\n        // ```\n        // var first = new Date(1478412000000 - 3600 * 1000 * 2.5);\n        // var second = new Date(1478412000000);\n        // var allDays = Math.floor(second / ONE_DAY) - Math.floor(first / ONE_DAY) + 1;\n        // ```\n        // will get wrong result because of DST. So we should fix it.\n        var date = new Date(range[0].time);\n        var startDateNum = date.getDate();\n        var endDateNum = range[1].date.getDate();\n        date.setDate(startDateNum + allDay - 1);\n        // The bias can not over a month, so just compare date.\n        if (date.getDate() !== endDateNum) {\n            var sign = date.getTime() - range[1].time > 0 ? 1 : -1;\n            while (date.getDate() !== endDateNum && (date.getTime() - range[1].time) * sign > 0) {\n                allDay -= sign;\n                date.setDate(startDateNum + allDay - 1);\n            }\n        }\n\n        var weeks = Math.floor((allDay + range[0].day + 6) / 7);\n        var nthWeek = reversed ? -weeks + 1 : weeks - 1;\n\n        reversed && range.reverse();\n\n        return {\n            range: [range[0].formatedDate, range[1].formatedDate],\n            start: range[0],\n            end: range[1],\n            allDay: allDay,\n            weeks: weeks,\n            // From 0.\n            nthWeek: nthWeek,\n            fweek: range[0].day,\n            lweek: range[1].day\n        };\n    },\n\n    /**\n     * get date by nthWeeks and week day in range\n     *\n     * @private\n     * @param  {number} nthWeek the week\n     * @param  {number} day   the week day\n     * @param  {Array} range [d1, d2]\n     * @return {Object}\n     */\n    _getDateByWeeksAndDay: function (nthWeek, day, range) {\n        var rangeInfo = this._getRangeInfo(range);\n\n        if (nthWeek > rangeInfo.weeks\n            || (nthWeek === 0 && day < rangeInfo.fweek)\n            || (nthWeek === rangeInfo.weeks && day > rangeInfo.lweek)\n        ) {\n            return false;\n        }\n\n        var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day;\n        var date = new Date(rangeInfo.start.time);\n        date.setDate(rangeInfo.start.d + nthDay);\n\n        return this.getDateInfo(date);\n    }\n};\n\nCalendar.dimensions = Calendar.prototype.dimensions;\n\nCalendar.getDimensionsInfo = Calendar.prototype.getDimensionsInfo;\n\nCalendar.create = function (ecModel, api) {\n    var calendarList = [];\n\n    ecModel.eachComponent('calendar', function (calendarModel) {\n        var calendar = new Calendar(calendarModel, ecModel, api);\n        calendarList.push(calendar);\n        calendarModel.coordinateSystem = calendar;\n    });\n\n    ecModel.eachSeries(function (calendarSeries) {\n        if (calendarSeries.get('coordinateSystem') === 'calendar') {\n            // Inject coordinate system\n            calendarSeries.coordinateSystem = calendarList[calendarSeries.get('calendarIndex') || 0];\n        }\n    });\n    return calendarList;\n};\n\nfunction doConvert(methodName, ecModel, finder, value) {\n    var calendarModel = finder.calendarModel;\n    var seriesModel = finder.seriesModel;\n\n    var coordSys = calendarModel\n        ? calendarModel.coordinateSystem\n        : seriesModel\n        ? seriesModel.coordinateSystem\n        : null;\n\n    return coordSys === this ? coordSys[methodName](value) : null;\n}\n\nCoordinateSystem.register('calendar', Calendar);\n\nexport default Calendar;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport ComponentModel from '../../model/Component';\nimport {\n    getLayoutParams,\n    sizeCalculable,\n    mergeLayoutParam\n} from '../../util/layout';\n\nvar CalendarModel = ComponentModel.extend({\n\n    type: 'calendar',\n\n    /**\n     * @type {module:echarts/coord/calendar/Calendar}\n     */\n    coordinateSystem: null,\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        left: 80,\n        top: 60,\n\n        cellSize: 20,\n\n        // horizontal vertical\n        orient: 'horizontal',\n\n        // month separate line style\n        splitLine: {\n            show: true,\n            lineStyle: {\n                color: '#000',\n                width: 1,\n                type: 'solid'\n            }\n        },\n\n        // rect style  temporarily unused emphasis\n        itemStyle: {\n            color: '#fff',\n            borderWidth: 1,\n            borderColor: '#ccc'\n        },\n\n        // week text style\n        dayLabel: {\n            show: true,\n\n            // a week first day\n            firstDay: 0,\n\n            // start end\n            position: 'start',\n            margin: '50%', // 50% of cellSize\n            nameMap: 'en',\n            color: '#000'\n        },\n\n        // month text style\n        monthLabel: {\n            show: true,\n\n            // start end\n            position: 'start',\n            margin: 5,\n\n            // center or left\n            align: 'center',\n\n            // cn en []\n            nameMap: 'en',\n            formatter: null,\n            color: '#000'\n        },\n\n        // year text style\n        yearLabel: {\n            show: true,\n\n            // top bottom left right\n            position: null,\n            margin: 30,\n            formatter: null,\n            color: '#ccc',\n            fontFamily: 'sans-serif',\n            fontWeight: 'bolder',\n            fontSize: 20\n        }\n    },\n\n    /**\n     * @override\n     */\n    init: function (option, parentModel, ecModel, extraOpt) {\n        var inputPositionParams = getLayoutParams(option);\n\n        CalendarModel.superApply(this, 'init', arguments);\n\n        mergeAndNormalizeLayoutParams(option, inputPositionParams);\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function (option, extraOpt) {\n        CalendarModel.superApply(this, 'mergeOption', arguments);\n\n        mergeAndNormalizeLayoutParams(this.option, option);\n    }\n});\n\nfunction mergeAndNormalizeLayoutParams(target, raw) {\n    // Normalize cellSize\n    var cellSize = target.cellSize;\n\n    if (!zrUtil.isArray(cellSize)) {\n        cellSize = target.cellSize = [cellSize, cellSize];\n    }\n    else if (cellSize.length === 1) {\n        cellSize[1] = cellSize[0];\n    }\n\n    var ignoreSize = zrUtil.map([0, 1], function (hvIdx) {\n        // If user have set `width` or both `left` and `right`, cellSize\n        // will be automatically set to 'auto', otherwise the default\n        // setting of cellSize will make `width` setting not work.\n        if (sizeCalculable(raw, hvIdx)) {\n            cellSize[hvIdx] = 'auto';\n        }\n        return cellSize[hvIdx] != null && cellSize[hvIdx] !== 'auto';\n    });\n\n    mergeLayoutParam(target, raw, {\n        type: 'box', ignoreSize: ignoreSize\n    });\n}\n\nexport default CalendarModel;\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport * as formatUtil from '../../util/format';\nimport * as numberUtil from '../../util/number';\n\nvar MONTH_TEXT = {\n    EN: [\n        'Jan', 'Feb', 'Mar',\n        'Apr', 'May', 'Jun',\n        'Jul', 'Aug', 'Sep',\n        'Oct', 'Nov', 'Dec'\n    ],\n    CN: [\n        '一月', '二月', '三月',\n        '四月', '五月', '六月',\n        '七月', '八月', '九月',\n        '十月', '十一月', '十二月'\n    ]\n};\n\nvar WEEK_TEXT = {\n    EN: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n    CN: ['日', '一', '二', '三', '四', '五', '六']\n};\n\nexport default echarts.extendComponentView({\n\n    type: 'calendar',\n\n    /**\n     * top/left line points\n     *  @private\n     */\n    _tlpoints: null,\n\n    /**\n     * bottom/right line points\n     *  @private\n     */\n    _blpoints: null,\n\n    /**\n     * first day of month\n     *  @private\n     */\n    _firstDayOfMonth: null,\n\n    /**\n     * first day point of month\n     *  @private\n     */\n    _firstDayPoints: null,\n\n    render: function (calendarModel, ecModel, api) {\n\n        var group = this.group;\n\n        group.removeAll();\n\n        var coordSys = calendarModel.coordinateSystem;\n\n        // range info\n        var rangeData = coordSys.getRangeInfo();\n        var orient = coordSys.getOrient();\n\n        this._renderDayRect(calendarModel, rangeData, group);\n\n        // _renderLines must be called prior to following function\n        this._renderLines(calendarModel, rangeData, orient, group);\n\n        this._renderYearText(calendarModel, rangeData, orient, group);\n\n        this._renderMonthText(calendarModel, orient, group);\n\n        this._renderWeekText(calendarModel, rangeData, orient, group);\n    },\n\n    // render day rect\n    _renderDayRect: function (calendarModel, rangeData, group) {\n        var coordSys = calendarModel.coordinateSystem;\n        var itemRectStyleModel = calendarModel.getModel('itemStyle').getItemStyle();\n        var sw = coordSys.getCellWidth();\n        var sh = coordSys.getCellHeight();\n\n        for (var i = rangeData.start.time;\n            i <= rangeData.end.time;\n            i = coordSys.getNextNDay(i, 1).time\n        ) {\n\n            var point = coordSys.dataToRect([i], false).tl;\n\n            // every rect\n            var rect = new graphic.Rect({\n                shape: {\n                    x: point[0],\n                    y: point[1],\n                    width: sw,\n                    height: sh\n                },\n                cursor: 'default',\n                style: itemRectStyleModel\n            });\n\n            group.add(rect);\n        }\n\n    },\n\n    // render separate line\n    _renderLines: function (calendarModel, rangeData, orient, group) {\n\n        var self = this;\n\n        var coordSys = calendarModel.coordinateSystem;\n\n        var lineStyleModel = calendarModel.getModel('splitLine.lineStyle').getLineStyle();\n        var show = calendarModel.get('splitLine.show');\n\n        var lineWidth = lineStyleModel.lineWidth;\n\n        this._tlpoints = [];\n        this._blpoints = [];\n        this._firstDayOfMonth = [];\n        this._firstDayPoints = [];\n\n\n        var firstDay = rangeData.start;\n\n        for (var i = 0; firstDay.time <= rangeData.end.time; i++) {\n            addPoints(firstDay.formatedDate);\n\n            if (i === 0) {\n                firstDay = coordSys.getDateInfo(rangeData.start.y + '-' + rangeData.start.m);\n            }\n\n            var date = firstDay.date;\n            date.setMonth(date.getMonth() + 1);\n            firstDay = coordSys.getDateInfo(date);\n        }\n\n        addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate);\n\n        function addPoints(date) {\n\n            self._firstDayOfMonth.push(coordSys.getDateInfo(date));\n            self._firstDayPoints.push(coordSys.dataToRect([date], false).tl);\n\n            var points = self._getLinePointsOfOneWeek(calendarModel, date, orient);\n\n            self._tlpoints.push(points[0]);\n            self._blpoints.push(points[points.length - 1]);\n\n            show && self._drawSplitline(points, lineStyleModel, group);\n        }\n\n\n        // render top/left line\n        show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group);\n\n        // render bottom/right line\n        show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group);\n\n    },\n\n    // get points at both ends\n    _getEdgesPoints: function (points, lineWidth, orient) {\n        var rs = [points[0].slice(), points[points.length - 1].slice()];\n        var idx = orient === 'horizontal' ? 0 : 1;\n\n        // both ends of the line are extend half lineWidth\n        rs[0][idx] = rs[0][idx] - lineWidth / 2;\n        rs[1][idx] = rs[1][idx] + lineWidth / 2;\n\n        return rs;\n    },\n\n    // render split line\n    _drawSplitline: function (points, lineStyleModel, group) {\n\n        var poyline = new graphic.Polyline({\n            z2: 20,\n            shape: {\n                points: points\n            },\n            style: lineStyleModel\n        });\n\n        group.add(poyline);\n    },\n\n    // render month line of one week points\n    _getLinePointsOfOneWeek: function (calendarModel, date, orient) {\n\n        var coordSys = calendarModel.coordinateSystem;\n        date = coordSys.getDateInfo(date);\n\n        var points = [];\n\n        for (var i = 0; i < 7; i++) {\n\n            var tmpD = coordSys.getNextNDay(date.time, i);\n            var point = coordSys.dataToRect([tmpD.time], false);\n\n            points[2 * tmpD.day] = point.tl;\n            points[2 * tmpD.day + 1] = point[orient === 'horizontal' ? 'bl' : 'tr'];\n        }\n\n        return points;\n\n    },\n\n    _formatterLabel: function (formatter, params) {\n\n        if (typeof formatter === 'string' && formatter) {\n            return formatUtil.formatTplSimple(formatter, params);\n        }\n\n        if (typeof formatter === 'function') {\n            return formatter(params);\n        }\n\n        return params.nameMap;\n\n    },\n\n    _yearTextPositionControl: function (textEl, point, orient, position, margin) {\n\n        point = point.slice();\n        var aligns = ['center', 'bottom'];\n\n        if (position === 'bottom') {\n            point[1] += margin;\n            aligns = ['center', 'top'];\n        }\n        else if (position === 'left') {\n            point[0] -= margin;\n        }\n        else if (position === 'right') {\n            point[0] += margin;\n            aligns = ['center', 'top'];\n        }\n        else { // top\n            point[1] -= margin;\n        }\n\n        var rotate = 0;\n        if (position === 'left' || position === 'right') {\n            rotate = Math.PI / 2;\n        }\n\n        return {\n            rotation: rotate,\n            position: point,\n            style: {\n                textAlign: aligns[0],\n                textVerticalAlign: aligns[1]\n            }\n        };\n    },\n\n    // render year\n    _renderYearText: function (calendarModel, rangeData, orient, group) {\n        var yearLabel = calendarModel.getModel('yearLabel');\n\n        if (!yearLabel.get('show')) {\n            return;\n        }\n\n        var margin = yearLabel.get('margin');\n        var pos = yearLabel.get('position');\n\n        if (!pos) {\n            pos = orient !== 'horizontal' ? 'top' : 'left';\n        }\n\n        var points = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]];\n        var xc = (points[0][0] + points[1][0]) / 2;\n        var yc = (points[0][1] + points[1][1]) / 2;\n\n        var idx = orient === 'horizontal' ? 0 : 1;\n\n        var posPoints = {\n            top: [xc, points[idx][1]],\n            bottom: [xc, points[1 - idx][1]],\n            left: [points[1 - idx][0], yc],\n            right: [points[idx][0], yc]\n        };\n\n        var name = rangeData.start.y;\n\n        if (+rangeData.end.y > +rangeData.start.y) {\n            name = name + '-' + rangeData.end.y;\n        }\n\n        var formatter = yearLabel.get('formatter');\n\n        var params = {\n            start: rangeData.start.y,\n            end: rangeData.end.y,\n            nameMap: name\n        };\n\n        var content = this._formatterLabel(formatter, params);\n\n        var yearText = new graphic.Text({z2: 30});\n        graphic.setTextStyle(yearText.style, yearLabel, {text: content}),\n        yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin));\n\n        group.add(yearText);\n    },\n\n    _monthTextPositionControl: function (point, isCenter, orient, position, margin) {\n        var align = 'left';\n        var vAlign = 'top';\n        var x = point[0];\n        var y = point[1];\n\n        if (orient === 'horizontal') {\n            y = y + margin;\n\n            if (isCenter) {\n                align = 'center';\n            }\n\n            if (position === 'start') {\n                vAlign = 'bottom';\n            }\n        }\n        else {\n            x = x + margin;\n\n            if (isCenter) {\n                vAlign = 'middle';\n            }\n\n            if (position === 'start') {\n                align = 'right';\n            }\n        }\n\n        return {\n            x: x,\n            y: y,\n            textAlign: align,\n            textVerticalAlign: vAlign\n        };\n    },\n\n    // render month and year text\n    _renderMonthText: function (calendarModel, orient, group) {\n        var monthLabel = calendarModel.getModel('monthLabel');\n\n        if (!monthLabel.get('show')) {\n            return;\n        }\n\n        var nameMap = monthLabel.get('nameMap');\n        var margin = monthLabel.get('margin');\n        var pos = monthLabel.get('position');\n        var align = monthLabel.get('align');\n\n        var termPoints = [this._tlpoints, this._blpoints];\n\n        if (zrUtil.isString(nameMap)) {\n            nameMap = MONTH_TEXT[nameMap.toUpperCase()] || [];\n        }\n\n        var idx = pos === 'start' ? 0 : 1;\n        var axis = orient === 'horizontal' ? 0 : 1;\n        margin = pos === 'start' ? -margin : margin;\n        var isCenter = (align === 'center');\n\n        for (var i = 0; i < termPoints[idx].length - 1; i++) {\n\n            var tmp = termPoints[idx][i].slice();\n            var firstDay = this._firstDayOfMonth[i];\n\n            if (isCenter) {\n                var firstDayPoints = this._firstDayPoints[i];\n                tmp[axis] = (firstDayPoints[axis] + termPoints[0][i + 1][axis]) / 2;\n            }\n\n            var formatter = monthLabel.get('formatter');\n            var name = nameMap[+firstDay.m - 1];\n            var params = {\n                yyyy: firstDay.y,\n                yy: (firstDay.y + '').slice(2),\n                MM: firstDay.m,\n                M: +firstDay.m,\n                nameMap: name\n            };\n\n            var content = this._formatterLabel(formatter, params);\n\n            var monthText = new graphic.Text({z2: 30});\n            zrUtil.extend(\n                graphic.setTextStyle(monthText.style, monthLabel, {text: content}),\n                this._monthTextPositionControl(tmp, isCenter, orient, pos, margin)\n            );\n\n            group.add(monthText);\n        }\n    },\n\n    _weekTextPositionControl: function (point, orient, position, margin, cellSize) {\n        var align = 'center';\n        var vAlign = 'middle';\n        var x = point[0];\n        var y = point[1];\n        var isStart = position === 'start';\n\n        if (orient === 'horizontal') {\n            x = x + margin + (isStart ? 1 : -1) * cellSize[0] / 2;\n            align = isStart ? 'right' : 'left';\n        }\n        else {\n            y = y + margin + (isStart ? 1 : -1) * cellSize[1] / 2;\n            vAlign = isStart ? 'bottom' : 'top';\n        }\n\n        return {\n            x: x,\n            y: y,\n            textAlign: align,\n            textVerticalAlign: vAlign\n        };\n    },\n\n    // render weeks\n    _renderWeekText: function (calendarModel, rangeData, orient, group) {\n        var dayLabel = calendarModel.getModel('dayLabel');\n\n        if (!dayLabel.get('show')) {\n            return;\n        }\n\n        var coordSys = calendarModel.coordinateSystem;\n        var pos = dayLabel.get('position');\n        var nameMap = dayLabel.get('nameMap');\n        var margin = dayLabel.get('margin');\n        var firstDayOfWeek = coordSys.getFirstDayOfWeek();\n\n        if (zrUtil.isString(nameMap)) {\n            nameMap = WEEK_TEXT[nameMap.toUpperCase()] || [];\n        }\n\n        var start = coordSys.getNextNDay(\n            rangeData.end.time, (7 - rangeData.lweek)\n        ).time;\n\n        var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()];\n        margin = numberUtil.parsePercent(margin, cellSize[orient === 'horizontal' ? 0 : 1]);\n\n        if (pos === 'start') {\n            start = coordSys.getNextNDay(\n                rangeData.start.time, -(7 + rangeData.fweek)\n            ).time;\n            margin = -margin;\n        }\n\n        for (var i = 0; i < 7; i++) {\n\n            var tmpD = coordSys.getNextNDay(start, i);\n            var point = coordSys.dataToRect([tmpD.time], false).center;\n            var day = i;\n            day = Math.abs((i + firstDayOfWeek) % 7);\n            var weekText = new graphic.Text({z2: 30});\n\n            zrUtil.extend(\n                graphic.setTextStyle(weekText.style, dayLabel, {text: nameMap[day]}),\n                this._weekTextPositionControl(point, orient, pos, margin, cellSize)\n            );\n            group.add(weekText);\n        }\n    }\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport '../coord/calendar/Calendar';\nimport '../coord/calendar/CalendarModel';\nimport './calendar/CalendarView';\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\nimport {__DEV__} from '../config';\nimport * as echarts from '../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\n\nimport * as modelUtil from '../util/model';\nimport * as graphicUtil from '../util/graphic';\nimport * as layoutUtil from '../util/layout';\nimport {parsePercent} from '../util/number';\n\nvar _nonShapeGraphicElements = {\n\n    // Reserved but not supported in graphic component.\n    path: null,\n    compoundPath: null,\n\n    // Supported in graphic component.\n    group: graphicUtil.Group,\n    image: graphicUtil.Image,\n    text: graphicUtil.Text\n};\n\n// -------------\n// Preprocessor\n// -------------\n\necharts.registerPreprocessor(function (option) {\n    var graphicOption = option.graphic;\n\n    // Convert\n    // {graphic: [{left: 10, type: 'circle'}, ...]}\n    // or\n    // {graphic: {left: 10, type: 'circle'}}\n    // to\n    // {graphic: [{elements: [{left: 10, type: 'circle'}, ...]}]}\n    if (zrUtil.isArray(graphicOption)) {\n        if (!graphicOption[0] || !graphicOption[0].elements) {\n            option.graphic = [{elements: graphicOption}];\n        }\n        else {\n            // Only one graphic instance can be instantiated. (We dont\n            // want that too many views are created in echarts._viewMap)\n            option.graphic = [option.graphic[0]];\n        }\n    }\n    else if (graphicOption && !graphicOption.elements) {\n        option.graphic = [{elements: [graphicOption]}];\n    }\n});\n\n// ------\n// Model\n// ------\n\nvar GraphicModel = echarts.extendComponentModel({\n\n    type: 'graphic',\n\n    defaultOption: {\n\n        // Extra properties for each elements:\n        //\n        // left/right/top/bottom: (like 12, '22%', 'center', default undefined)\n        //      If left/rigth is set, shape.x/shape.cx/position will not be used.\n        //      If top/bottom is set, shape.y/shape.cy/position will not be used.\n        //      This mechanism is useful when you want to position a group/element\n        //      against the right side or the center of this container.\n        //\n        // width/height: (can only be pixel value, default 0)\n        //      Only be used to specify contianer(group) size, if needed. And\n        //      can not be percentage value (like '33%'). See the reason in the\n        //      layout algorithm below.\n        //\n        // bounding: (enum: 'all' (default) | 'raw')\n        //      Specify how to calculate boundingRect when locating.\n        //      'all': Get uioned and transformed boundingRect\n        //          from both itself and its descendants.\n        //          This mode simplies confining a group of elements in the bounding\n        //          of their ancester container (e.g., using 'right: 0').\n        //      'raw': Only use the boundingRect of itself and before transformed.\n        //          This mode is similar to css behavior, which is useful when you\n        //          want an element to be able to overflow its container. (Consider\n        //          a rotated circle needs to be located in a corner.)\n        // info: custom info. enables user to mount some info on elements and use them\n        //      in event handlers. Update them only when user specified, otherwise, remain.\n\n        // Note: elements is always behind its ancestors in this elements array.\n        elements: [],\n        parentId: null\n    },\n\n    /**\n     * Save el options for the sake of the performance (only update modified graphics).\n     * The order is the same as those in option. (ancesters -> descendants)\n     *\n     * @private\n     * @type {Array.<Object>}\n     */\n    _elOptionsToUpdate: null,\n\n    /**\n     * @override\n     */\n    mergeOption: function (option) {\n        // Prevent default merge to elements\n        var elements = this.option.elements;\n        this.option.elements = null;\n\n        GraphicModel.superApply(this, 'mergeOption', arguments);\n\n        this.option.elements = elements;\n    },\n\n    /**\n     * @override\n     */\n    optionUpdated: function (newOption, isInit) {\n        var thisOption = this.option;\n        var newList = (isInit ? thisOption : newOption).elements;\n        var existList = thisOption.elements = isInit ? [] : thisOption.elements;\n\n        var flattenedList = [];\n        this._flatten(newList, flattenedList);\n\n        var mappingResult = modelUtil.mappingToExists(existList, flattenedList);\n        modelUtil.makeIdAndName(mappingResult);\n\n        // Clear elOptionsToUpdate\n        var elOptionsToUpdate = this._elOptionsToUpdate = [];\n\n        zrUtil.each(mappingResult, function (resultItem, index) {\n            var newElOption = resultItem.option;\n\n            if (__DEV__) {\n                zrUtil.assert(\n                    zrUtil.isObject(newElOption) || resultItem.exist,\n                    'Empty graphic option definition'\n                );\n            }\n\n            if (!newElOption) {\n                return;\n            }\n\n            elOptionsToUpdate.push(newElOption);\n\n            setKeyInfoToNewElOption(resultItem, newElOption);\n\n            mergeNewElOptionToExist(existList, index, newElOption);\n\n            setLayoutInfoToExist(existList[index], newElOption);\n\n        }, this);\n\n        // Clean\n        for (var i = existList.length - 1; i >= 0; i--) {\n            if (existList[i] == null) {\n                existList.splice(i, 1);\n            }\n            else {\n                // $action should be volatile, otherwise option gotten from\n                // `getOption` will contain unexpected $action.\n                delete existList[i].$action;\n            }\n        }\n    },\n\n    /**\n     * Convert\n     * [{\n     *  type: 'group',\n     *  id: 'xx',\n     *  children: [{type: 'circle'}, {type: 'polygon'}]\n     * }]\n     * to\n     * [\n     *  {type: 'group', id: 'xx'},\n     *  {type: 'circle', parentId: 'xx'},\n     *  {type: 'polygon', parentId: 'xx'}\n     * ]\n     *\n     * @private\n     * @param {Array.<Object>} optionList option list\n     * @param {Array.<Object>} result result of flatten\n     * @param {Object} parentOption parent option\n     */\n    _flatten: function (optionList, result, parentOption) {\n        zrUtil.each(optionList, function (option) {\n            if (!option) {\n                return;\n            }\n\n            if (parentOption) {\n                option.parentOption = parentOption;\n            }\n\n            result.push(option);\n\n            var children = option.children;\n            if (option.type === 'group' && children) {\n                this._flatten(children, result, option);\n            }\n            // Deleting for JSON output, and for not affecting group creation.\n            delete option.children;\n        }, this);\n    },\n\n    // FIXME\n    // Pass to view using payload? setOption has a payload?\n    useElOptionsToUpdate: function () {\n        var els = this._elOptionsToUpdate;\n        // Clear to avoid render duplicately when zooming.\n        this._elOptionsToUpdate = null;\n        return els;\n    }\n});\n\n// -----\n// View\n// -----\n\necharts.extendComponentView({\n\n    type: 'graphic',\n\n    /**\n     * @override\n     */\n    init: function (ecModel, api) {\n\n        /**\n         * @private\n         * @type {module:zrender/core/util.HashMap}\n         */\n        this._elMap = zrUtil.createHashMap();\n\n        /**\n         * @private\n         * @type {module:echarts/graphic/GraphicModel}\n         */\n        this._lastGraphicModel;\n    },\n\n    /**\n     * @override\n     */\n    render: function (graphicModel, ecModel, api) {\n\n        // Having leveraged between use cases and algorithm complexity, a very\n        // simple layout mechanism is used:\n        // The size(width/height) can be determined by itself or its parent (not\n        // implemented yet), but can not by its children. (Top-down travel)\n        // The location(x/y) can be determined by the bounding rect of itself\n        // (can including its descendants or not) and the size of its parent.\n        // (Bottom-up travel)\n\n        // When `chart.clear()` or `chart.setOption({...}, true)` with the same id,\n        // view will be reused.\n        if (graphicModel !== this._lastGraphicModel) {\n            this._clear();\n        }\n        this._lastGraphicModel = graphicModel;\n\n        this._updateElements(graphicModel);\n        this._relocate(graphicModel, api);\n    },\n\n    /**\n     * Update graphic elements.\n     *\n     * @private\n     * @param {Object} graphicModel graphic model\n     */\n    _updateElements: function (graphicModel) {\n        var elOptionsToUpdate = graphicModel.useElOptionsToUpdate();\n\n        if (!elOptionsToUpdate) {\n            return;\n        }\n\n        var elMap = this._elMap;\n        var rootGroup = this.group;\n\n        // Top-down tranverse to assign graphic settings to each elements.\n        zrUtil.each(elOptionsToUpdate, function (elOption) {\n            var $action = elOption.$action;\n            var id = elOption.id;\n            var existEl = elMap.get(id);\n            var parentId = elOption.parentId;\n            var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup;\n\n            var elOptionStyle = elOption.style;\n            if (elOption.type === 'text' && elOptionStyle) {\n                // In top/bottom mode, textVerticalAlign should not be used, which cause\n                // inaccurately locating.\n                if (elOption.hv && elOption.hv[1]) {\n                    elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = null;\n                }\n\n                // Compatible with previous setting: both support fill and textFill,\n                // stroke and textStroke.\n                !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && (\n                    elOptionStyle.textFill = elOptionStyle.fill\n                );\n                !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && (\n                    elOptionStyle.textStroke = elOptionStyle.stroke\n                );\n            }\n\n            // Remove unnecessary props to avoid potential problems.\n            var elOptionCleaned = getCleanedElOption(elOption);\n\n            // For simple, do not support parent change, otherwise reorder is needed.\n            if (__DEV__) {\n                existEl && zrUtil.assert(\n                    targetElParent === existEl.parent,\n                    'Changing parent is not supported.'\n                );\n            }\n\n            if (!$action || $action === 'merge') {\n                existEl\n                    ? existEl.attr(elOptionCleaned)\n                    : createEl(id, targetElParent, elOptionCleaned, elMap);\n            }\n            else if ($action === 'replace') {\n                removeEl(existEl, elMap);\n                createEl(id, targetElParent, elOptionCleaned, elMap);\n            }\n            else if ($action === 'remove') {\n                removeEl(existEl, elMap);\n            }\n\n            var el = elMap.get(id);\n            if (el) {\n                el.__ecGraphicWidthOption = elOption.width;\n                el.__ecGraphicHeightOption = elOption.height;\n                setEventData(el, graphicModel, elOption);\n            }\n        });\n    },\n\n    /**\n     * Locate graphic elements.\n     *\n     * @private\n     * @param {Object} graphicModel graphic model\n     * @param {module:echarts/ExtensionAPI} api extension API\n     */\n    _relocate: function (graphicModel, api) {\n        var elOptions = graphicModel.option.elements;\n        var rootGroup = this.group;\n        var elMap = this._elMap;\n        var apiWidth = api.getWidth();\n        var apiHeight = api.getHeight();\n\n        // Top-down to calculate percentage width/height of group\n        for (var i = 0; i < elOptions.length; i++) {\n            var elOption = elOptions[i];\n            var el = elMap.get(elOption.id);\n\n            if (!el || !el.isGroup) {\n                continue;\n            }\n            var parentEl = el.parent;\n            var isParentRoot = parentEl === rootGroup;\n            // Like 'position:absolut' in css, default 0.\n            el.__ecGraphicWidth = parsePercent(\n                el.__ecGraphicWidthOption,\n                isParentRoot ? apiWidth : parentEl.__ecGraphicWidth\n            ) || 0;\n            el.__ecGraphicHeight = parsePercent(\n                el.__ecGraphicHeightOption,\n                isParentRoot ? apiHeight : parentEl.__ecGraphicHeight\n            ) || 0;\n        }\n\n        // Bottom-up tranvese all elements (consider ec resize) to locate elements.\n        for (var i = elOptions.length - 1; i >= 0; i--) {\n            var elOption = elOptions[i];\n            var el = elMap.get(elOption.id);\n\n            if (!el) {\n                continue;\n            }\n\n            var parentEl = el.parent;\n            var containerInfo = parentEl === rootGroup\n                ? {\n                    width: apiWidth,\n                    height: apiHeight\n                }\n                : {\n                    width: parentEl.__ecGraphicWidth,\n                    height: parentEl.__ecGraphicHeight\n                };\n\n            // PENDING\n            // Currently, when `bounding: 'all'`, the union bounding rect of the group\n            // does not include the rect of [0, 0, group.width, group.height], which\n            // is probably weird for users. Should we make a break change for it?\n            layoutUtil.positionElement(\n                el, elOption, containerInfo, null,\n                {hv: elOption.hv, boundingMode: elOption.bounding}\n            );\n        }\n    },\n\n    /**\n     * Clear all elements.\n     *\n     * @private\n     */\n    _clear: function () {\n        var elMap = this._elMap;\n        elMap.each(function (el) {\n            removeEl(el, elMap);\n        });\n        this._elMap = zrUtil.createHashMap();\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        this._clear();\n    }\n});\n\nfunction createEl(id, targetElParent, elOption, elMap) {\n    var graphicType = elOption.type;\n\n    if (__DEV__) {\n        zrUtil.assert(graphicType, 'graphic type MUST be set');\n    }\n\n    var Clz = _nonShapeGraphicElements.hasOwnProperty(graphicType)\n        // Those graphic elements are not shapes. They should not be\n        // overwritten by users, so do them first.\n        ? _nonShapeGraphicElements[graphicType]\n        : graphicUtil.getShapeClass(graphicType);\n\n    if (__DEV__) {\n        zrUtil.assert(Clz, 'graphic type can not be found');\n    }\n\n    var el = new Clz(elOption);\n    targetElParent.add(el);\n    elMap.set(id, el);\n    el.__ecGraphicId = id;\n}\n\nfunction removeEl(existEl, elMap) {\n    var existElParent = existEl && existEl.parent;\n    if (existElParent) {\n        existEl.type === 'group' && existEl.traverse(function (el) {\n            removeEl(el, elMap);\n        });\n        elMap.removeKey(existEl.__ecGraphicId);\n        existElParent.remove(existEl);\n    }\n}\n\n// Remove unnecessary props to avoid potential problems.\nfunction getCleanedElOption(elOption) {\n    elOption = zrUtil.extend({}, elOption);\n    zrUtil.each(\n        ['id', 'parentId', '$action', 'hv', 'bounding'].concat(layoutUtil.LOCATION_PARAMS),\n        function (name) {\n            delete elOption[name];\n        }\n    );\n    return elOption;\n}\n\nfunction isSetLoc(obj, props) {\n    var isSet;\n    zrUtil.each(props, function (prop) {\n        obj[prop] != null && obj[prop] !== 'auto' && (isSet = true);\n    });\n    return isSet;\n}\n\nfunction setKeyInfoToNewElOption(resultItem, newElOption) {\n    var existElOption = resultItem.exist;\n\n    // Set id and type after id assigned.\n    newElOption.id = resultItem.keyInfo.id;\n    !newElOption.type && existElOption && (newElOption.type = existElOption.type);\n\n    // Set parent id if not specified\n    if (newElOption.parentId == null) {\n        var newElParentOption = newElOption.parentOption;\n        if (newElParentOption) {\n            newElOption.parentId = newElParentOption.id;\n        }\n        else if (existElOption) {\n            newElOption.parentId = existElOption.parentId;\n        }\n    }\n\n    // Clear\n    newElOption.parentOption = null;\n}\n\nfunction mergeNewElOptionToExist(existList, index, newElOption) {\n    // Update existing options, for `getOption` feature.\n    var newElOptCopy = zrUtil.extend({}, newElOption);\n    var existElOption = existList[index];\n\n    var $action = newElOption.$action || 'merge';\n    if ($action === 'merge') {\n        if (existElOption) {\n\n            if (__DEV__) {\n                var newType = newElOption.type;\n                zrUtil.assert(\n                    !newType || existElOption.type === newType,\n                    'Please set $action: \"replace\" to change `type`'\n                );\n            }\n\n            // We can ensure that newElOptCopy and existElOption are not\n            // the same object, so `merge` will not change newElOptCopy.\n            zrUtil.merge(existElOption, newElOptCopy, true);\n            // Rigid body, use ignoreSize.\n            layoutUtil.mergeLayoutParam(existElOption, newElOptCopy, {ignoreSize: true});\n            // Will be used in render.\n            layoutUtil.copyLayoutParams(newElOption, existElOption);\n        }\n        else {\n            existList[index] = newElOptCopy;\n        }\n    }\n    else if ($action === 'replace') {\n        existList[index] = newElOptCopy;\n    }\n    else if ($action === 'remove') {\n        // null will be cleaned later.\n        existElOption && (existList[index] = null);\n    }\n}\n\nfunction setLayoutInfoToExist(existItem, newElOption) {\n    if (!existItem) {\n        return;\n    }\n    existItem.hv = newElOption.hv = [\n        // Rigid body, dont care `width`.\n        isSetLoc(newElOption, ['left', 'right']),\n        // Rigid body, dont care `height`.\n        isSetLoc(newElOption, ['top', 'bottom'])\n    ];\n    // Give default group size. Otherwise layout error may occur.\n    if (existItem.type === 'group') {\n        existItem.width == null && (existItem.width = newElOption.width = 0);\n        existItem.height == null && (existItem.height = newElOption.height = 0);\n    }\n}\n\nfunction setEventData(el, graphicModel, elOption) {\n    var eventData = el.eventData;\n    // Simple optimize for large amount of elements that no need event.\n    if (!el.silent && !el.ignore && !eventData) {\n        eventData = el.eventData = {\n            componentType: 'graphic',\n            componentIndex: graphicModel.componentIndex,\n            name: el.name\n        };\n    }\n\n    // `elOption.info` enables user to mount some info on\n    // elements and use them in event handlers.\n    if (eventData) {\n        eventData.info = el.info;\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar features = {};\n\nexport function register(name, ctor) {\n    features[name] = ctor;\n}\n\nexport function get(name) {\n    return features[name];\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as featureManager from './featureManager';\n\nvar ToolboxModel = echarts.extendComponentModel({\n\n    type: 'toolbox',\n\n    layoutMode: {\n        type: 'box',\n        ignoreSize: true\n    },\n\n    optionUpdated: function () {\n        ToolboxModel.superApply(this, 'optionUpdated', arguments);\n\n        zrUtil.each(this.option.feature, function (featureOpt, featureName) {\n            var Feature = featureManager.get(featureName);\n            Feature && zrUtil.merge(featureOpt, Feature.defaultOption);\n        });\n    },\n\n    defaultOption: {\n\n        show: true,\n\n        z: 6,\n\n        zlevel: 0,\n\n        orient: 'horizontal',\n\n        left: 'right',\n\n        top: 'top',\n\n        // right\n        // bottom\n\n        backgroundColor: 'transparent',\n\n        borderColor: '#ccc',\n\n        borderRadius: 0,\n\n        borderWidth: 0,\n\n        padding: 5,\n\n        itemSize: 15,\n\n        itemGap: 8,\n\n        showTitle: true,\n\n        iconStyle: {\n            borderColor: '#666',\n            color: 'none'\n        },\n        emphasis: {\n            iconStyle: {\n                borderColor: '#3E98C5'\n            }\n        },\n        // textStyle: {},\n\n        // feature\n\n        tooltip: {\n            show: false\n        }\n    }\n});\n\nexport default ToolboxModel;","/*\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\nimport {\n    getLayoutRect,\n    box as layoutBox,\n    positionElement\n} from '../../util/layout';\nimport * as formatUtil from '../../util/format';\nimport * as graphic from '../../util/graphic';\n\n/**\n * Layout list like component.\n * It will box layout each items in group of component and then position the whole group in the viewport\n * @param {module:zrender/group/Group} group\n * @param {module:echarts/model/Component} componentModel\n * @param {module:echarts/ExtensionAPI}\n */\nexport function layout(group, componentModel, api) {\n    var boxLayoutParams = componentModel.getBoxLayoutParams();\n    var padding = componentModel.get('padding');\n    var viewportSize = {width: api.getWidth(), height: api.getHeight()};\n\n    var rect = getLayoutRect(\n        boxLayoutParams,\n        viewportSize,\n        padding\n    );\n\n    layoutBox(\n        componentModel.get('orient'),\n        group,\n        componentModel.get('itemGap'),\n        rect.width,\n        rect.height\n    );\n\n    positionElement(\n        group,\n        boxLayoutParams,\n        viewportSize,\n        padding\n    );\n}\n\nexport function makeBackground(rect, componentModel) {\n    var padding = formatUtil.normalizeCssArray(\n        componentModel.get('padding')\n    );\n    var style = componentModel.getItemStyle(['color', 'opacity']);\n    style.fill = componentModel.get('backgroundColor');\n    var rect = new graphic.Rect({\n        shape: {\n            x: rect.x - padding[3],\n            y: rect.y - padding[0],\n            width: rect.width + padding[1] + padding[3],\n            height: rect.height + padding[0] + padding[2],\n            r: componentModel.get('borderRadius')\n        },\n        style: style,\n        silent: true,\n        z2: -1\n    });\n    // FIXME\n    // `subPixelOptimizeRect` may bring some gap between edge of viewpart\n    // and background rect when setting like `left: 0`, `top: 0`.\n    // graphic.subPixelOptimizeRect(rect);\n\n    return rect;\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as textContain from 'zrender/src/contain/text';\nimport * as featureManager from './featureManager';\nimport * as graphic from '../../util/graphic';\nimport Model from '../../model/Model';\nimport DataDiffer from '../../data/DataDiffer';\nimport * as listComponentHelper from '../helper/listComponent';\n\nexport default echarts.extendComponentView({\n\n    type: 'toolbox',\n\n    render: function (toolboxModel, ecModel, api, payload) {\n        var group = this.group;\n        group.removeAll();\n\n        if (!toolboxModel.get('show')) {\n            return;\n        }\n\n        var itemSize = +toolboxModel.get('itemSize');\n        var featureOpts = toolboxModel.get('feature') || {};\n        var features = this._features || (this._features = {});\n\n        var featureNames = [];\n        zrUtil.each(featureOpts, function (opt, name) {\n            featureNames.push(name);\n        });\n\n        (new DataDiffer(this._featureNames || [], featureNames))\n            .add(processFeature)\n            .update(processFeature)\n            .remove(zrUtil.curry(processFeature, null))\n            .execute();\n\n        // Keep for diff.\n        this._featureNames = featureNames;\n\n        function processFeature(newIndex, oldIndex) {\n            var featureName = featureNames[newIndex];\n            var oldName = featureNames[oldIndex];\n            var featureOpt = featureOpts[featureName];\n            var featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel);\n            var feature;\n\n            if (featureName && !oldName) { // Create\n                if (isUserFeatureName(featureName)) {\n                    feature = {\n                        model: featureModel,\n                        onclick: featureModel.option.onclick,\n                        featureName: featureName\n                    };\n                }\n                else {\n                    var Feature = featureManager.get(featureName);\n                    if (!Feature) {\n                        return;\n                    }\n                    feature = new Feature(featureModel, ecModel, api);\n                }\n                features[featureName] = feature;\n            }\n            else {\n                feature = features[oldName];\n                // If feature does not exsit.\n                if (!feature) {\n                    return;\n                }\n                feature.model = featureModel;\n                feature.ecModel = ecModel;\n                feature.api = api;\n            }\n\n            if (!featureName && oldName) {\n                feature.dispose && feature.dispose(ecModel, api);\n                return;\n            }\n\n            if (!featureModel.get('show') || feature.unusable) {\n                feature.remove && feature.remove(ecModel, api);\n                return;\n            }\n\n            createIconPaths(featureModel, feature, featureName);\n\n            featureModel.setIconStatus = function (iconName, status) {\n                var option = this.option;\n                var iconPaths = this.iconPaths;\n                option.iconStatus = option.iconStatus || {};\n                option.iconStatus[iconName] = status;\n                // FIXME\n                iconPaths[iconName] && iconPaths[iconName].trigger(status);\n            };\n\n            if (feature.render) {\n                feature.render(featureModel, ecModel, api, payload);\n            }\n        }\n\n        function createIconPaths(featureModel, feature, featureName) {\n            var iconStyleModel = featureModel.getModel('iconStyle');\n            var iconStyleEmphasisModel = featureModel.getModel('emphasis.iconStyle');\n\n            // If one feature has mutiple icon. they are orginaized as\n            // {\n            //     icon: {\n            //         foo: '',\n            //         bar: ''\n            //     },\n            //     title: {\n            //         foo: '',\n            //         bar: ''\n            //     }\n            // }\n            var icons = feature.getIcons ? feature.getIcons() : featureModel.get('icon');\n            var titles = featureModel.get('title') || {};\n            if (typeof icons === 'string') {\n                var icon = icons;\n                var title = titles;\n                icons = {};\n                titles = {};\n                icons[featureName] = icon;\n                titles[featureName] = title;\n            }\n            var iconPaths = featureModel.iconPaths = {};\n            zrUtil.each(icons, function (iconStr, iconName) {\n                var path = graphic.createIcon(\n                    iconStr,\n                    {},\n                    {\n                        x: -itemSize / 2,\n                        y: -itemSize / 2,\n                        width: itemSize,\n                        height: itemSize\n                    }\n                );\n                path.setStyle(iconStyleModel.getItemStyle());\n                path.hoverStyle = iconStyleEmphasisModel.getItemStyle();\n\n                // Text position calculation\n                path.setStyle({\n                    text: titles[iconName],\n                    textAlign: iconStyleEmphasisModel.get('textAlign'),\n                    textBorderRadius: iconStyleEmphasisModel.get('textBorderRadius'),\n                    textPadding: iconStyleEmphasisModel.get('textPadding'),\n                    textFill: null\n                });\n\n                var tooltipModel = toolboxModel.getModel('tooltip');\n                if (tooltipModel && tooltipModel.get('show')) {\n                    path.attr('tooltip', zrUtil.extend({\n                        content: titles[iconName],\n                        formatter: tooltipModel.get('formatter', true)\n                            || function () {\n                                return titles[iconName];\n                            },\n                        formatterParams: {\n                            componentType: 'toolbox',\n                            name: iconName,\n                            title: titles[iconName],\n                            $vars: ['name', 'title']\n                        },\n                        position: tooltipModel.get('position', true) || 'bottom'\n                    }, tooltipModel.option));\n                }\n\n                graphic.setHoverStyle(path);\n\n                if (toolboxModel.get('showTitle')) {\n                    path.__title = titles[iconName];\n                    path.on('mouseover', function () {\n                            // Should not reuse above hoverStyle, which might be modified.\n                            var hoverStyle = iconStyleEmphasisModel.getItemStyle();\n                            var defaultTextPosition = toolboxModel.get('orient') === 'vertical'\n                                ? (toolboxModel.get('right') == null ? 'right' : 'left')\n                                : (toolboxModel.get('bottom') == null ? 'bottom' : 'top');\n                            path.setStyle({\n                                textFill: iconStyleEmphasisModel.get('textFill')\n                                    || hoverStyle.fill || hoverStyle.stroke || '#000',\n                                textBackgroundColor: iconStyleEmphasisModel.get('textBackgroundColor'),\n                                textPosition: iconStyleEmphasisModel.get('textPosition') || defaultTextPosition\n                            });\n                        })\n                        .on('mouseout', function () {\n                            path.setStyle({\n                                textFill: null,\n                                textBackgroundColor: null\n                            });\n                        });\n                }\n                path.trigger(featureModel.get('iconStatus.' + iconName) || 'normal');\n\n                group.add(path);\n                path.on('click', zrUtil.bind(\n                    feature.onclick, feature, ecModel, api, iconName\n                ));\n\n                iconPaths[iconName] = path;\n            });\n        }\n\n        listComponentHelper.layout(group, toolboxModel, api);\n        // Render background after group is layout\n        // FIXME\n        group.add(listComponentHelper.makeBackground(group.getBoundingRect(), toolboxModel));\n\n        // Adjust icon title positions to avoid them out of screen\n        group.eachChild(function (icon) {\n            var titleText = icon.__title;\n            var hoverStyle = icon.hoverStyle;\n            // May be background element\n            if (hoverStyle && titleText) {\n                var rect = textContain.getBoundingRect(\n                    titleText, textContain.makeFont(hoverStyle)\n                );\n                var offsetX = icon.position[0] + group.position[0];\n                var offsetY = icon.position[1] + group.position[1] + itemSize;\n\n                var needPutOnTop = false;\n                if (offsetY + rect.height > api.getHeight()) {\n                    hoverStyle.textPosition = 'top';\n                    needPutOnTop = true;\n                }\n                var topOffset = needPutOnTop ? (-5 - rect.height) : (itemSize + 8);\n                if (offsetX + rect.width / 2 > api.getWidth()) {\n                    hoverStyle.textPosition = ['100%', topOffset];\n                    hoverStyle.textAlign = 'right';\n                }\n                else if (offsetX - rect.width / 2 < 0) {\n                    hoverStyle.textPosition = [0, topOffset];\n                    hoverStyle.textAlign = 'left';\n                }\n            }\n        });\n    },\n\n    updateView: function (toolboxModel, ecModel, api, payload) {\n        zrUtil.each(this._features, function (feature) {\n            feature.updateView && feature.updateView(feature.model, ecModel, api, payload);\n        });\n    },\n\n    // updateLayout: function (toolboxModel, ecModel, api, payload) {\n    //     zrUtil.each(this._features, function (feature) {\n    //         feature.updateLayout && feature.updateLayout(feature.model, ecModel, api, payload);\n    //     });\n    // },\n\n    remove: function (ecModel, api) {\n        zrUtil.each(this._features, function (feature) {\n            feature.remove && feature.remove(ecModel, api);\n        });\n        this.group.removeAll();\n    },\n\n    dispose: function (ecModel, api) {\n        zrUtil.each(this._features, function (feature) {\n            feature.dispose && feature.dispose(ecModel, api);\n        });\n    }\n});\n\nfunction isUserFeatureName(featureName) {\n    return featureName.indexOf('my') === 0;\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Uint8Array */\n\nimport env from 'zrender/src/core/env';\nimport lang from '../../../lang';\nimport * as featureManager from '../featureManager';\n\nvar saveAsImageLang = lang.toolbox.saveAsImage;\n\nfunction SaveAsImage(model) {\n    this.model = model;\n}\n\nSaveAsImage.defaultOption = {\n    show: true,\n    icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',\n    title: saveAsImageLang.title,\n    type: 'png',\n    // Default use option.backgroundColor\n    // backgroundColor: '#fff',\n    connectedBackgroundColor: '#fff',\n    name: '',\n    excludeComponents: ['toolbox'],\n    pixelRatio: 1,\n    lang: saveAsImageLang.lang.slice()\n};\n\nSaveAsImage.prototype.unusable = !env.canvasSupported;\n\nvar proto = SaveAsImage.prototype;\n\nproto.onclick = function (ecModel, api) {\n    var model = this.model;\n    var title = model.get('name') || ecModel.get('title.0.text') || 'echarts';\n    var type = model.get('type', true) || 'png';\n    var url = api.getConnectedDataURL({\n        type: type,\n        backgroundColor: model.get('backgroundColor', true)\n            || ecModel.get('backgroundColor') || '#fff',\n        connectedBackgroundColor: model.get('connectedBackgroundColor'),\n        excludeComponents: model.get('excludeComponents'),\n        pixelRatio: model.get('pixelRatio')\n    });\n    // Chrome and Firefox\n    if (typeof MouseEvent === 'function' && !env.browser.ie && !env.browser.edge) {\n        var $a = document.createElement('a');\n        $a.download = title + '.' + type;\n        $a.target = '_blank';\n        $a.href = url;\n        var evt = new MouseEvent('click', {\n            view: window,\n            bubbles: true,\n            cancelable: false\n        });\n        $a.dispatchEvent(evt);\n    }\n    // IE\n    else {\n        if (window.navigator.msSaveOrOpenBlob) {\n            var bstr = atob(url.split(',')[1]);\n            var n = bstr.length;\n            var u8arr = new Uint8Array(n);\n            while (n--) {\n                u8arr[n] = bstr.charCodeAt(n);\n            }\n            var blob = new Blob([u8arr]);\n            window.navigator.msSaveOrOpenBlob(blob, title + '.' + type);\n        }\n        else {\n            var lang = model.get('lang');\n            var html = ''\n                + '<body style=\"margin:0;\">'\n                + '<img src=\"' + url + '\" style=\"max-width:100%;\" title=\"' + ((lang && lang[0]) || '') + '\" />'\n                + '</body>';\n            var tab = window.open();\n            tab.document.write(html);\n        }\n    }\n};\n\nfeatureManager.register(\n    'saveAsImage', SaveAsImage\n);\n\nexport default SaveAsImage;\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\nimport * as echarts from '../../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport lang from '../../../lang';\nimport * as featureManager from '../featureManager';\n\nvar magicTypeLang = lang.toolbox.magicType;\n\nfunction MagicType(model) {\n    this.model = model;\n}\n\nMagicType.defaultOption = {\n    show: true,\n    type: [],\n    // Icon group\n    icon: {\n        /* eslint-disable */\n        line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4',\n        bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7',\n        stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z', // jshint ignore:line\n        tiled: 'M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z'\n        /* eslint-enable */\n    },\n    // `line`, `bar`, `stack`, `tiled`\n    title: zrUtil.clone(magicTypeLang.title),\n    option: {},\n    seriesIndex: {}\n};\n\nvar proto = MagicType.prototype;\n\nproto.getIcons = function () {\n    var model = this.model;\n    var availableIcons = model.get('icon');\n    var icons = {};\n    zrUtil.each(model.get('type'), function (type) {\n        if (availableIcons[type]) {\n            icons[type] = availableIcons[type];\n        }\n    });\n    return icons;\n};\n\nvar seriesOptGenreator = {\n    'line': function (seriesType, seriesId, seriesModel, model) {\n        if (seriesType === 'bar') {\n            return zrUtil.merge({\n                id: seriesId,\n                type: 'line',\n                // Preserve data related option\n                data: seriesModel.get('data'),\n                stack: seriesModel.get('stack'),\n                markPoint: seriesModel.get('markPoint'),\n                markLine: seriesModel.get('markLine')\n            }, model.get('option.line') || {}, true);\n        }\n    },\n    'bar': function (seriesType, seriesId, seriesModel, model) {\n        if (seriesType === 'line') {\n            return zrUtil.merge({\n                id: seriesId,\n                type: 'bar',\n                // Preserve data related option\n                data: seriesModel.get('data'),\n                stack: seriesModel.get('stack'),\n                markPoint: seriesModel.get('markPoint'),\n                markLine: seriesModel.get('markLine')\n            }, model.get('option.bar') || {}, true);\n        }\n    },\n    'stack': function (seriesType, seriesId, seriesModel, model) {\n        if (seriesType === 'line' || seriesType === 'bar') {\n            return zrUtil.merge({\n                id: seriesId,\n                stack: '__ec_magicType_stack__'\n            }, model.get('option.stack') || {}, true);\n        }\n    },\n    'tiled': function (seriesType, seriesId, seriesModel, model) {\n        if (seriesType === 'line' || seriesType === 'bar') {\n            return zrUtil.merge({\n                id: seriesId,\n                stack: ''\n            }, model.get('option.tiled') || {}, true);\n        }\n    }\n};\n\nvar radioTypes = [\n    ['line', 'bar'],\n    ['stack', 'tiled']\n];\n\nproto.onclick = function (ecModel, api, type) {\n    var model = this.model;\n    var seriesIndex = model.get('seriesIndex.' + type);\n    // Not supported magicType\n    if (!seriesOptGenreator[type]) {\n        return;\n    }\n    var newOption = {\n        series: []\n    };\n    var generateNewSeriesTypes = function (seriesModel) {\n        var seriesType = seriesModel.subType;\n        var seriesId = seriesModel.id;\n        var newSeriesOpt = seriesOptGenreator[type](\n            seriesType, seriesId, seriesModel, model\n        );\n        if (newSeriesOpt) {\n            // PENDING If merge original option?\n            zrUtil.defaults(newSeriesOpt, seriesModel.option);\n            newOption.series.push(newSeriesOpt);\n        }\n        // Modify boundaryGap\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) {\n            var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n            if (categoryAxis) {\n                var axisDim = categoryAxis.dim;\n                var axisType = axisDim + 'Axis';\n                var axisModel = ecModel.queryComponents({\n                    mainType: axisType,\n                    index: seriesModel.get(name + 'Index'),\n                    id: seriesModel.get(name + 'Id')\n                })[0];\n                var axisIndex = axisModel.componentIndex;\n\n                newOption[axisType] = newOption[axisType] || [];\n                for (var i = 0; i <= axisIndex; i++) {\n                    newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {};\n                }\n                newOption[axisType][axisIndex].boundaryGap = type === 'bar';\n            }\n        }\n    };\n\n    zrUtil.each(radioTypes, function (radio) {\n        if (zrUtil.indexOf(radio, type) >= 0) {\n            zrUtil.each(radio, function (item) {\n                model.setIconStatus(item, 'normal');\n            });\n        }\n    });\n\n    model.setIconStatus(type, 'emphasis');\n\n    ecModel.eachComponent(\n        {\n            mainType: 'series',\n            query: seriesIndex == null ? null : {\n                seriesIndex: seriesIndex\n            }\n        }, generateNewSeriesTypes\n    );\n    api.dispatchAction({\n        type: 'changeMagicType',\n        currentType: type,\n        newOption: newOption\n    });\n};\n\necharts.registerAction({\n    type: 'changeMagicType',\n    event: 'magicTypeChanged',\n    update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n    ecModel.mergeOption(payload.newOption);\n});\n\nfeatureManager.register('magicType', MagicType);\n\nexport default MagicType;","/*\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\nimport * as echarts from '../../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as eventTool from 'zrender/src/core/event';\nimport lang from '../../../lang';\nimport * as featureManager from '../featureManager';\n\nvar dataViewLang = lang.toolbox.dataView;\n\nvar BLOCK_SPLITER = new Array(60).join('-');\nvar ITEM_SPLITER = '\\t';\n/**\n * Group series into two types\n *  1. on category axis, like line, bar\n *  2. others, like scatter, pie\n * @param {module:echarts/model/Global} ecModel\n * @return {Object}\n * @inner\n */\nfunction groupSeries(ecModel) {\n    var seriesGroupByCategoryAxis = {};\n    var otherSeries = [];\n    var meta = [];\n    ecModel.eachRawSeries(function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n\n        if (coordSys && (coordSys.type === 'cartesian2d' || coordSys.type === 'polar')) {\n            var baseAxis = coordSys.getBaseAxis();\n            if (baseAxis.type === 'category') {\n                var key = baseAxis.dim + '_' + baseAxis.index;\n                if (!seriesGroupByCategoryAxis[key]) {\n                    seriesGroupByCategoryAxis[key] = {\n                        categoryAxis: baseAxis,\n                        valueAxis: coordSys.getOtherAxis(baseAxis),\n                        series: []\n                    };\n                    meta.push({\n                        axisDim: baseAxis.dim,\n                        axisIndex: baseAxis.index\n                    });\n                }\n                seriesGroupByCategoryAxis[key].series.push(seriesModel);\n            }\n            else {\n                otherSeries.push(seriesModel);\n            }\n        }\n        else {\n            otherSeries.push(seriesModel);\n        }\n    });\n\n    return {\n        seriesGroupByCategoryAxis: seriesGroupByCategoryAxis,\n        other: otherSeries,\n        meta: meta\n    };\n}\n\n/**\n * Assemble content of series on cateogory axis\n * @param {Array.<module:echarts/model/Series>} series\n * @return {string}\n * @inner\n */\nfunction assembleSeriesWithCategoryAxis(series) {\n    var tables = [];\n    zrUtil.each(series, function (group, key) {\n        var categoryAxis = group.categoryAxis;\n        var valueAxis = group.valueAxis;\n        var valueAxisDim = valueAxis.dim;\n\n        var headers = [' '].concat(zrUtil.map(group.series, function (series) {\n            return series.name;\n        }));\n        var columns = [categoryAxis.model.getCategories()];\n        zrUtil.each(group.series, function (series) {\n            columns.push(series.getRawData().mapArray(valueAxisDim, function (val) {\n                return val;\n            }));\n        });\n        // Assemble table content\n        var lines = [headers.join(ITEM_SPLITER)];\n        for (var i = 0; i < columns[0].length; i++) {\n            var items = [];\n            for (var j = 0; j < columns.length; j++) {\n                items.push(columns[j][i]);\n            }\n            lines.push(items.join(ITEM_SPLITER));\n        }\n        tables.push(lines.join('\\n'));\n    });\n    return tables.join('\\n\\n' + BLOCK_SPLITER + '\\n\\n');\n}\n\n/**\n * Assemble content of other series\n * @param {Array.<module:echarts/model/Series>} series\n * @return {string}\n * @inner\n */\nfunction assembleOtherSeries(series) {\n    return zrUtil.map(series, function (series) {\n        var data = series.getRawData();\n        var lines = [series.name];\n        var vals = [];\n        data.each(data.dimensions, function () {\n            var argLen = arguments.length;\n            var dataIndex = arguments[argLen - 1];\n            var name = data.getName(dataIndex);\n            for (var i = 0; i < argLen - 1; i++) {\n                vals[i] = arguments[i];\n            }\n            lines.push((name ? (name + ITEM_SPLITER) : '') + vals.join(ITEM_SPLITER));\n        });\n        return lines.join('\\n');\n    }).join('\\n\\n' + BLOCK_SPLITER + '\\n\\n');\n}\n\n/**\n * @param {module:echarts/model/Global}\n * @return {Object}\n * @inner\n */\nfunction getContentFromModel(ecModel) {\n\n    var result = groupSeries(ecModel);\n\n    return {\n        value: zrUtil.filter([\n                assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis),\n                assembleOtherSeries(result.other)\n            ], function (str) {\n                return str.replace(/[\\n\\t\\s]/g, '');\n            }).join('\\n\\n' + BLOCK_SPLITER + '\\n\\n'),\n\n        meta: result.meta\n    };\n}\n\n\nfunction trim(str) {\n    return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n}\n/**\n * If a block is tsv format\n */\nfunction isTSVFormat(block) {\n    // Simple method to find out if a block is tsv format\n    var firstLine = block.slice(0, block.indexOf('\\n'));\n    if (firstLine.indexOf(ITEM_SPLITER) >= 0) {\n        return true;\n    }\n}\n\nvar itemSplitRegex = new RegExp('[' + ITEM_SPLITER + ']+', 'g');\n/**\n * @param {string} tsv\n * @return {Object}\n */\nfunction parseTSVContents(tsv) {\n    var tsvLines = tsv.split(/\\n+/g);\n    var headers = trim(tsvLines.shift()).split(itemSplitRegex);\n\n    var categories = [];\n    var series = zrUtil.map(headers, function (header) {\n        return {\n            name: header,\n            data: []\n        };\n    });\n    for (var i = 0; i < tsvLines.length; i++) {\n        var items = trim(tsvLines[i]).split(itemSplitRegex);\n        categories.push(items.shift());\n        for (var j = 0; j < items.length; j++) {\n            series[j] && (series[j].data[i] = items[j]);\n        }\n    }\n    return {\n        series: series,\n        categories: categories\n    };\n}\n\n/**\n * @param {string} str\n * @return {Array.<Object>}\n * @inner\n */\nfunction parseListContents(str) {\n    var lines = str.split(/\\n+/g);\n    var seriesName = trim(lines.shift());\n\n    var data = [];\n    for (var i = 0; i < lines.length; i++) {\n        var items = trim(lines[i]).split(itemSplitRegex);\n        var name = '';\n        var value;\n        var hasName = false;\n        if (isNaN(items[0])) { // First item is name\n            hasName = true;\n            name = items[0];\n            items = items.slice(1);\n            data[i] = {\n                name: name,\n                value: []\n            };\n            value = data[i].value;\n        }\n        else {\n            value = data[i] = [];\n        }\n        for (var j = 0; j < items.length; j++) {\n            value.push(+items[j]);\n        }\n        if (value.length === 1) {\n            hasName ? (data[i].value = value[0]) : (data[i] = value[0]);\n        }\n    }\n\n    return {\n        name: seriesName,\n        data: data\n    };\n}\n\n/**\n * @param {string} str\n * @param {Array.<Object>} blockMetaList\n * @return {Object}\n * @inner\n */\nfunction parseContents(str, blockMetaList) {\n    var blocks = str.split(new RegExp('\\n*' + BLOCK_SPLITER + '\\n*', 'g'));\n    var newOption = {\n        series: []\n    };\n    zrUtil.each(blocks, function (block, idx) {\n        if (isTSVFormat(block)) {\n            var result = parseTSVContents(block);\n            var blockMeta = blockMetaList[idx];\n            var axisKey = blockMeta.axisDim + 'Axis';\n\n            if (blockMeta) {\n                newOption[axisKey] = newOption[axisKey] || [];\n                newOption[axisKey][blockMeta.axisIndex] = {\n                    data: result.categories\n                };\n                newOption.series = newOption.series.concat(result.series);\n            }\n        }\n        else {\n            var result = parseListContents(block);\n            newOption.series.push(result);\n        }\n    });\n    return newOption;\n}\n\n/**\n * @alias {module:echarts/component/toolbox/feature/DataView}\n * @constructor\n * @param {module:echarts/model/Model} model\n */\nfunction DataView(model) {\n\n    this._dom = null;\n\n    this.model = model;\n}\n\nDataView.defaultOption = {\n    show: true,\n    readOnly: false,\n    optionToContent: null,\n    contentToOption: null,\n\n    icon: 'M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28',\n    title: zrUtil.clone(dataViewLang.title),\n    lang: zrUtil.clone(dataViewLang.lang),\n    backgroundColor: '#fff',\n    textColor: '#000',\n    textareaColor: '#fff',\n    textareaBorderColor: '#333',\n    buttonColor: '#c23531',\n    buttonTextColor: '#fff'\n};\n\nDataView.prototype.onclick = function (ecModel, api) {\n    var container = api.getDom();\n    var model = this.model;\n    if (this._dom) {\n        container.removeChild(this._dom);\n    }\n    var root = document.createElement('div');\n    root.style.cssText = 'position:absolute;left:5px;top:5px;bottom:5px;right:5px;';\n    root.style.backgroundColor = model.get('backgroundColor') || '#fff';\n\n    // Create elements\n    var header = document.createElement('h4');\n    var lang = model.get('lang') || [];\n    header.innerHTML = lang[0] || model.get('title');\n    header.style.cssText = 'margin: 10px 20px;';\n    header.style.color = model.get('textColor');\n\n    var viewMain = document.createElement('div');\n    var textarea = document.createElement('textarea');\n    viewMain.style.cssText = 'display:block;width:100%;overflow:auto;';\n\n    var optionToContent = model.get('optionToContent');\n    var contentToOption = model.get('contentToOption');\n    var result = getContentFromModel(ecModel);\n    if (typeof optionToContent === 'function') {\n        var htmlOrDom = optionToContent(api.getOption());\n        if (typeof htmlOrDom === 'string') {\n            viewMain.innerHTML = htmlOrDom;\n        }\n        else if (zrUtil.isDom(htmlOrDom)) {\n            viewMain.appendChild(htmlOrDom);\n        }\n    }\n    else {\n        // Use default textarea\n        viewMain.appendChild(textarea);\n        textarea.readOnly = model.get('readOnly');\n        textarea.style.cssText = 'width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;';\n        textarea.style.color = model.get('textColor');\n        textarea.style.borderColor = model.get('textareaBorderColor');\n        textarea.style.backgroundColor = model.get('textareaColor');\n        textarea.value = result.value;\n    }\n\n    var blockMetaList = result.meta;\n\n    var buttonContainer = document.createElement('div');\n    buttonContainer.style.cssText = 'position:absolute;bottom:0;left:0;right:0;';\n\n    var buttonStyle = 'float:right;margin-right:20px;border:none;'\n        + 'cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px';\n    var closeButton = document.createElement('div');\n    var refreshButton = document.createElement('div');\n\n    buttonStyle += ';background-color:' + model.get('buttonColor');\n    buttonStyle += ';color:' + model.get('buttonTextColor');\n\n    var self = this;\n\n    function close() {\n        container.removeChild(root);\n        self._dom = null;\n    }\n    eventTool.addEventListener(closeButton, 'click', close);\n\n    eventTool.addEventListener(refreshButton, 'click', function () {\n        var newOption;\n        try {\n            if (typeof contentToOption === 'function') {\n                newOption = contentToOption(viewMain, api.getOption());\n            }\n            else {\n                newOption = parseContents(textarea.value, blockMetaList);\n            }\n        }\n        catch (e) {\n            close();\n            throw new Error('Data view format error ' + e);\n        }\n        if (newOption) {\n            api.dispatchAction({\n                type: 'changeDataView',\n                newOption: newOption\n            });\n        }\n\n        close();\n    });\n\n    closeButton.innerHTML = lang[1];\n    refreshButton.innerHTML = lang[2];\n    refreshButton.style.cssText = buttonStyle;\n    closeButton.style.cssText = buttonStyle;\n\n    !model.get('readOnly') && buttonContainer.appendChild(refreshButton);\n    buttonContainer.appendChild(closeButton);\n\n    root.appendChild(header);\n    root.appendChild(viewMain);\n    root.appendChild(buttonContainer);\n\n    viewMain.style.height = (container.clientHeight - 80) + 'px';\n\n    container.appendChild(root);\n    this._dom = root;\n};\n\nDataView.prototype.remove = function (ecModel, api) {\n    this._dom && api.getDom().removeChild(this._dom);\n};\n\nDataView.prototype.dispose = function (ecModel, api) {\n    this.remove(ecModel, api);\n};\n\n/**\n * @inner\n */\nfunction tryMergeDataOption(newData, originalData) {\n    return zrUtil.map(newData, function (newVal, idx) {\n        var original = originalData && originalData[idx];\n        if (zrUtil.isObject(original) && !zrUtil.isArray(original)) {\n            if (zrUtil.isObject(newVal) && !zrUtil.isArray(newVal)) {\n                newVal = newVal.value;\n            }\n            // Original data has option\n            return zrUtil.defaults({\n                value: newVal\n            }, original);\n        }\n        else {\n            return newVal;\n        }\n    });\n}\n\nfeatureManager.register('dataView', DataView);\n\necharts.registerAction({\n    type: 'changeDataView',\n    event: 'dataViewChanged',\n    update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n    var newSeriesOptList = [];\n    zrUtil.each(payload.newOption.series, function (seriesOpt) {\n        var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0];\n        if (!seriesModel) {\n            // New created series\n            // Geuss the series type\n            newSeriesOptList.push(zrUtil.extend({\n                // Default is scatter\n                type: 'scatter'\n            }, seriesOpt));\n        }\n        else {\n            var originalData = seriesModel.get('data');\n            newSeriesOptList.push({\n                name: seriesOpt.name,\n                data: tryMergeDataOption(seriesOpt.data, originalData)\n            });\n        }\n    });\n\n    ecModel.mergeOption(zrUtil.defaults({\n        series: newSeriesOptList\n    }, payload.newOption));\n});\n\nexport default DataView;","/*\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\nimport {__DEV__} from '../../config';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport * as modelUtil from '../../util/model';\nimport * as brushHelper from './brushHelper';\n\nvar each = zrUtil.each;\nvar indexOf = zrUtil.indexOf;\nvar curry = zrUtil.curry;\n\nvar COORD_CONVERTS = ['dataToPoint', 'pointToData'];\n\n// FIXME\n// how to genarialize to more coordinate systems.\nvar INCLUDE_FINDER_MAIN_TYPES = [\n    'grid', 'xAxis', 'yAxis', 'geo', 'graph',\n    'polar', 'radiusAxis', 'angleAxis', 'bmap'\n];\n\n/**\n * [option in constructor]:\n * {\n *     Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder.\n * }\n *\n *\n * [targetInfo]:\n *\n * There can be multiple axes in a single targetInfo. Consider the case\n * of `grid` component, a targetInfo represents a grid which contains one or more\n * cartesian and one or more axes. And consider the case of parallel system,\n * which has multiple axes in a coordinate system.\n * Can be {\n *     panelId: ...,\n *     coordSys: <a representitive cartesian in grid (first cartesian by default)>,\n *     coordSyses: all cartesians.\n *     gridModel: <grid component>\n *     xAxes: correspond to coordSyses on index\n *     yAxes: correspond to coordSyses on index\n * }\n * or {\n *     panelId: ...,\n *     coordSys: <geo coord sys>\n *     coordSyses: [<geo coord sys>]\n *     geoModel: <geo component>\n * }\n *\n *\n * [panelOpt]:\n *\n * Make from targetInfo. Input to BrushController.\n * {\n *     panelId: ...,\n *     rect: ...\n * }\n *\n *\n * [area]:\n *\n * Generated by BrushController or user input.\n * {\n *     panelId: Used to locate coordInfo directly. If user inpput, no panelId.\n *     brushType: determine how to convert to/from coord('rect' or 'polygon' or 'lineX/Y').\n *     Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder.\n *     range: pixel range.\n *     coordRange: representitive coord range (the first one of coordRanges).\n *     coordRanges: <Array> coord ranges, used in multiple cartesian in one grid.\n * }\n */\n\n/**\n * @param {Object} option contains Index/Id/Name of xAxis/yAxis/geo/grid\n *        Each can be {number|Array.<number>}. like: {xAxisIndex: [3, 4]}\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} [opt]\n * @param {Array.<string>} [opt.include] include coordinate system types.\n */\nfunction BrushTargetManager(option, ecModel, opt) {\n    /**\n     * @private\n     * @type {Array.<Object>}\n     */\n    var targetInfoList = this._targetInfoList = [];\n    var info = {};\n    var foundCpts = parseFinder(ecModel, option);\n\n    each(targetInfoBuilders, function (builder, type) {\n        if (!opt || !opt.include || indexOf(opt.include, type) >= 0) {\n            builder(foundCpts, targetInfoList, info);\n        }\n    });\n}\n\nvar proto = BrushTargetManager.prototype;\n\nproto.setOutputRanges = function (areas, ecModel) {\n    this.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {\n        (area.coordRanges || (area.coordRanges = [])).push(coordRange);\n        // area.coordRange is the first of area.coordRanges\n        if (!area.coordRange) {\n            area.coordRange = coordRange;\n            // In 'category' axis, coord to pixel is not reversible, so we can not\n            // rebuild range by coordRange accrately, which may bring trouble when\n            // brushing only one item. So we use __rangeOffset to rebuilding range\n            // by coordRange. And this it only used in brush component so it is no\n            // need to be adapted to coordRanges.\n            var result = coordConvert[area.brushType](0, coordSys, coordRange);\n            area.__rangeOffset = {\n                offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]),\n                xyMinMax: result.xyMinMax\n            };\n        }\n    });\n};\n\nproto.matchOutputRanges = function (areas, ecModel, cb) {\n    each(areas, function (area) {\n        var targetInfo = this.findTargetInfo(area, ecModel);\n\n        if (targetInfo && targetInfo !== true) {\n            zrUtil.each(\n                targetInfo.coordSyses,\n                function (coordSys) {\n                    var result = coordConvert[area.brushType](1, coordSys, area.range);\n                    cb(area, result.values, coordSys, ecModel);\n                }\n            );\n        }\n    }, this);\n};\n\nproto.setInputRanges = function (areas, ecModel) {\n    each(areas, function (area) {\n        var targetInfo = this.findTargetInfo(area, ecModel);\n\n        if (__DEV__) {\n            zrUtil.assert(\n                !targetInfo || targetInfo === true || area.coordRange,\n                'coordRange must be specified when coord index specified.'\n            );\n            zrUtil.assert(\n                !targetInfo || targetInfo !== true || area.range,\n                'range must be specified in global brush.'\n            );\n        }\n\n        area.range = area.range || [];\n\n        // convert coordRange to global range and set panelId.\n        if (targetInfo && targetInfo !== true) {\n            area.panelId = targetInfo.panelId;\n            // (1) area.range shoule always be calculate from coordRange but does\n            // not keep its original value, for the sake of the dataZoom scenario,\n            // where area.coordRange remains unchanged but area.range may be changed.\n            // (2) Only support converting one coordRange to pixel range in brush\n            // component. So do not consider `coordRanges`.\n            // (3) About __rangeOffset, see comment above.\n            var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange);\n            var rangeOffset = area.__rangeOffset;\n            area.range = rangeOffset\n                ? diffProcessor[area.brushType](\n                    result.values,\n                    rangeOffset.offset,\n                    getScales(result.xyMinMax, rangeOffset.xyMinMax)\n                )\n                : result.values;\n        }\n    }, this);\n};\n\nproto.makePanelOpts = function (api, getDefaultBrushType) {\n    return zrUtil.map(this._targetInfoList, function (targetInfo) {\n        var rect = targetInfo.getPanelRect();\n        return {\n            panelId: targetInfo.panelId,\n            defaultBrushType: getDefaultBrushType && getDefaultBrushType(targetInfo),\n            clipPath: brushHelper.makeRectPanelClipPath(rect),\n            isTargetByCursor: brushHelper.makeRectIsTargetByCursor(\n                rect, api, targetInfo.coordSysModel\n            ),\n            getLinearBrushOtherExtent: brushHelper.makeLinearBrushOtherExtent(rect)\n        };\n    });\n};\n\nproto.controlSeries = function (area, seriesModel, ecModel) {\n    // Check whether area is bound in coord, and series do not belong to that coord.\n    // If do not do this check, some brush (like lineX) will controll all axes.\n    var targetInfo = this.findTargetInfo(area, ecModel);\n    return targetInfo === true || (\n        targetInfo && indexOf(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0\n    );\n};\n\n/**\n * If return Object, a coord found.\n * If reutrn true, global found.\n * Otherwise nothing found.\n *\n * @param {Object} area\n * @param {Array} targetInfoList\n * @return {Object|boolean}\n */\nproto.findTargetInfo = function (area, ecModel) {\n    var targetInfoList = this._targetInfoList;\n    var foundCpts = parseFinder(ecModel, area);\n\n    for (var i = 0; i < targetInfoList.length; i++) {\n        var targetInfo = targetInfoList[i];\n        var areaPanelId = area.panelId;\n        if (areaPanelId) {\n            if (targetInfo.panelId === areaPanelId) {\n                return targetInfo;\n            }\n        }\n        else {\n            for (var i = 0; i < targetInfoMatchers.length; i++) {\n                if (targetInfoMatchers[i](foundCpts, targetInfo)) {\n                    return targetInfo;\n                }\n            }\n        }\n    }\n\n    return true;\n};\n\nfunction formatMinMax(minMax) {\n    minMax[0] > minMax[1] && minMax.reverse();\n    return minMax;\n}\n\nfunction parseFinder(ecModel, option) {\n    return modelUtil.parseFinder(\n        ecModel, option, {includeMainTypes: INCLUDE_FINDER_MAIN_TYPES}\n    );\n}\n\nvar targetInfoBuilders = {\n\n    grid: function (foundCpts, targetInfoList) {\n        var xAxisModels = foundCpts.xAxisModels;\n        var yAxisModels = foundCpts.yAxisModels;\n        var gridModels = foundCpts.gridModels;\n        // Remove duplicated.\n        var gridModelMap = zrUtil.createHashMap();\n        var xAxesHas = {};\n        var yAxesHas = {};\n\n        if (!xAxisModels && !yAxisModels && !gridModels) {\n            return;\n        }\n\n        each(xAxisModels, function (axisModel) {\n            var gridModel = axisModel.axis.grid.model;\n            gridModelMap.set(gridModel.id, gridModel);\n            xAxesHas[gridModel.id] = true;\n        });\n        each(yAxisModels, function (axisModel) {\n            var gridModel = axisModel.axis.grid.model;\n            gridModelMap.set(gridModel.id, gridModel);\n            yAxesHas[gridModel.id] = true;\n        });\n        each(gridModels, function (gridModel) {\n            gridModelMap.set(gridModel.id, gridModel);\n            xAxesHas[gridModel.id] = true;\n            yAxesHas[gridModel.id] = true;\n        });\n\n        gridModelMap.each(function (gridModel) {\n            var grid = gridModel.coordinateSystem;\n            var cartesians = [];\n\n            each(grid.getCartesians(), function (cartesian, index) {\n                if (indexOf(xAxisModels, cartesian.getAxis('x').model) >= 0\n                    || indexOf(yAxisModels, cartesian.getAxis('y').model) >= 0\n                ) {\n                    cartesians.push(cartesian);\n                }\n            });\n            targetInfoList.push({\n                panelId: 'grid--' + gridModel.id,\n                gridModel: gridModel,\n                coordSysModel: gridModel,\n                // Use the first one as the representitive coordSys.\n                coordSys: cartesians[0],\n                coordSyses: cartesians,\n                getPanelRect: panelRectBuilder.grid,\n                xAxisDeclared: xAxesHas[gridModel.id],\n                yAxisDeclared: yAxesHas[gridModel.id]\n            });\n        });\n    },\n\n    geo: function (foundCpts, targetInfoList) {\n        each(foundCpts.geoModels, function (geoModel) {\n            var coordSys = geoModel.coordinateSystem;\n            targetInfoList.push({\n                panelId: 'geo--' + geoModel.id,\n                geoModel: geoModel,\n                coordSysModel: geoModel,\n                coordSys: coordSys,\n                coordSyses: [coordSys],\n                getPanelRect: panelRectBuilder.geo\n            });\n        });\n    }\n};\n\nvar targetInfoMatchers = [\n\n    // grid\n    function (foundCpts, targetInfo) {\n        var xAxisModel = foundCpts.xAxisModel;\n        var yAxisModel = foundCpts.yAxisModel;\n        var gridModel = foundCpts.gridModel;\n\n        !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model);\n        !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model);\n\n        return gridModel && gridModel === targetInfo.gridModel;\n    },\n\n    // geo\n    function (foundCpts, targetInfo) {\n        var geoModel = foundCpts.geoModel;\n        return geoModel && geoModel === targetInfo.geoModel;\n    }\n];\n\nvar panelRectBuilder = {\n\n    grid: function () {\n        // grid is not Transformable.\n        return this.coordSys.grid.getRect().clone();\n    },\n\n    geo: function () {\n        var coordSys = this.coordSys;\n        var rect = coordSys.getBoundingRect().clone();\n        // geo roam and zoom transform\n        rect.applyTransform(graphic.getTransform(coordSys));\n        return rect;\n    }\n};\n\nvar coordConvert = {\n\n    lineX: curry(axisConvert, 0),\n\n    lineY: curry(axisConvert, 1),\n\n    rect: function (to, coordSys, rangeOrCoordRange) {\n        var xminymin = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]]);\n        var xmaxymax = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]]);\n        var values = [\n            formatMinMax([xminymin[0], xmaxymax[0]]),\n            formatMinMax([xminymin[1], xmaxymax[1]])\n        ];\n        return {values: values, xyMinMax: values};\n    },\n\n    polygon: function (to, coordSys, rangeOrCoordRange) {\n        var xyMinMax = [[Infinity, -Infinity], [Infinity, -Infinity]];\n        var values = zrUtil.map(rangeOrCoordRange, function (item) {\n            var p = coordSys[COORD_CONVERTS[to]](item);\n            xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]);\n            xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]);\n            xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]);\n            xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]);\n            return p;\n        });\n        return {values: values, xyMinMax: xyMinMax};\n    }\n};\n\nfunction axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) {\n    if (__DEV__) {\n        zrUtil.assert(\n            coordSys.type === 'cartesian2d',\n            'lineX/lineY brush is available only in cartesian2d.'\n        );\n    }\n\n    var axis = coordSys.getAxis(['x', 'y'][axisNameIndex]);\n    var values = formatMinMax(zrUtil.map([0, 1], function (i) {\n        return to\n            ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i]))\n            : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i]));\n    }));\n    var xyMinMax = [];\n    xyMinMax[axisNameIndex] = values;\n    xyMinMax[1 - axisNameIndex] = [NaN, NaN];\n\n    return {values: values, xyMinMax: xyMinMax};\n}\n\nvar diffProcessor = {\n    lineX: curry(axisDiffProcessor, 0),\n\n    lineY: curry(axisDiffProcessor, 1),\n\n    rect: function (values, refer, scales) {\n        return [\n            [values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]],\n            [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]]\n        ];\n    },\n\n    polygon: function (values, refer, scales) {\n        return zrUtil.map(values, function (item, idx) {\n            return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]];\n        });\n    }\n};\n\nfunction axisDiffProcessor(axisNameIndex, values, refer, scales) {\n    return [\n        values[0] - scales[axisNameIndex] * refer[0],\n        values[1] - scales[axisNameIndex] * refer[1]\n    ];\n}\n\n// We have to process scale caused by dataZoom manually,\n// although it might be not accurate.\nfunction getScales(xyMinMaxCurr, xyMinMaxOrigin) {\n    var sizeCurr = getSize(xyMinMaxCurr);\n    var sizeOrigin = getSize(xyMinMaxOrigin);\n    var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]];\n    isNaN(scales[0]) && (scales[0] = 1);\n    isNaN(scales[1]) && (scales[1] = 1);\n    return scales;\n}\n\nfunction getSize(xyMinMax) {\n    return xyMinMax\n        ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]]\n        : [NaN, NaN];\n}\n\nexport default BrushTargetManager;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar each = zrUtil.each;\n\nvar ATTR = '\\0_ec_hist_store';\n\n/**\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} newSnapshot {dataZoomId, batch: [payloadInfo, ...]}\n */\nexport function push(ecModel, newSnapshot) {\n    var store = giveStore(ecModel);\n\n    // If previous dataZoom can not be found,\n    // complete an range with current range.\n    each(newSnapshot, function (batchItem, dataZoomId) {\n        var i = store.length - 1;\n        for (; i >= 0; i--) {\n            var snapshot = store[i];\n            if (snapshot[dataZoomId]) {\n                break;\n            }\n        }\n        if (i < 0) {\n            // No origin range set, create one by current range.\n            var dataZoomModel = ecModel.queryComponents(\n                {mainType: 'dataZoom', subType: 'select', id: dataZoomId}\n            )[0];\n            if (dataZoomModel) {\n                var percentRange = dataZoomModel.getPercentRange();\n                store[0][dataZoomId] = {\n                    dataZoomId: dataZoomId,\n                    start: percentRange[0],\n                    end: percentRange[1]\n                };\n            }\n        }\n    });\n\n    store.push(newSnapshot);\n}\n\n/**\n * @param {module:echarts/model/Global} ecModel\n * @return {Object} snapshot\n */\nexport function pop(ecModel) {\n    var store = giveStore(ecModel);\n    var head = store[store.length - 1];\n    store.length > 1 && store.pop();\n\n    // Find top for all dataZoom.\n    var snapshot = {};\n    each(head, function (batchItem, dataZoomId) {\n        for (var i = store.length - 1; i >= 0; i--) {\n            var batchItem = store[i][dataZoomId];\n            if (batchItem) {\n                snapshot[dataZoomId] = batchItem;\n                break;\n            }\n        }\n    });\n\n    return snapshot;\n}\n\n/**\n * @param {module:echarts/model/Global} ecModel\n */\nexport function clear(ecModel) {\n    ecModel[ATTR] = null;\n}\n\n/**\n * @param {module:echarts/model/Global} ecModel\n * @return {number} records. always >= 1.\n */\nexport function count(ecModel) {\n    return giveStore(ecModel).length;\n}\n\n/**\n * [{key: dataZoomId, value: {dataZoomId, range}}, ...]\n * History length of each dataZoom may be different.\n * this._history[0] is used to store origin range.\n * @type {Array.<Object>}\n */\nfunction giveStore(ecModel) {\n    var store = ecModel[ATTR];\n    if (!store) {\n        store = ecModel[ATTR] = [{}];\n    }\n    return store;\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\nimport Component from '../../model/Component';\n\nComponent.registerSubTypeDefaulter('dataZoom', function () {\n    // Default 'slider' when no type specified.\n    return 'slider';\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as formatUtil from '../../util/format';\n\n\nvar AXIS_DIMS = ['x', 'y', 'z', 'radius', 'angle', 'single'];\n// Supported coords.\nvar COORDS = ['cartesian2d', 'polar', 'singleAxis'];\n\n/**\n * @param {string} coordType\n * @return {boolean}\n */\nexport function isCoordSupported(coordType) {\n    return zrUtil.indexOf(COORDS, coordType) >= 0;\n}\n\n/**\n * Create \"each\" method to iterate names.\n *\n * @pubilc\n * @param  {Array.<string>} names\n * @param  {Array.<string>=} attrs\n * @return {Function}\n */\nexport function createNameEach(names, attrs) {\n    names = names.slice();\n    var capitalNames = zrUtil.map(names, formatUtil.capitalFirst);\n    attrs = (attrs || []).slice();\n    var capitalAttrs = zrUtil.map(attrs, formatUtil.capitalFirst);\n\n    return function (callback, context) {\n        zrUtil.each(names, function (name, index) {\n            var nameObj = {name: name, capital: capitalNames[index]};\n\n            for (var j = 0; j < attrs.length; j++) {\n                nameObj[attrs[j]] = name + capitalAttrs[j];\n            }\n\n            callback.call(context, nameObj);\n        });\n    };\n}\n\n/**\n * Iterate each dimension name.\n *\n * @public\n * @param {Function} callback The parameter is like:\n *                            {\n *                                name: 'angle',\n *                                capital: 'Angle',\n *                                axis: 'angleAxis',\n *                                axisIndex: 'angleAixs',\n *                                index: 'angleIndex'\n *                            }\n * @param {Object} context\n */\nexport var eachAxisDim = createNameEach(AXIS_DIMS, ['axisIndex', 'axis', 'index', 'id']);\n\n/**\n * If tow dataZoomModels has the same axis controlled, we say that they are 'linked'.\n * dataZoomModels and 'links' make up one or more graphics.\n * This function finds the graphic where the source dataZoomModel is in.\n *\n * @public\n * @param {Function} forEachNode Node iterator.\n * @param {Function} forEachEdgeType edgeType iterator\n * @param {Function} edgeIdGetter Giving node and edgeType, return an array of edge id.\n * @return {Function} Input: sourceNode, Output: Like {nodes: [], dims: {}}\n */\nexport function createLinkedNodesFinder(forEachNode, forEachEdgeType, edgeIdGetter) {\n\n    return function (sourceNode) {\n        var result = {\n            nodes: [],\n            records: {} // key: edgeType.name, value: Object (key: edge id, value: boolean).\n        };\n\n        forEachEdgeType(function (edgeType) {\n            result.records[edgeType.name] = {};\n        });\n\n        if (!sourceNode) {\n            return result;\n        }\n\n        absorb(sourceNode, result);\n\n        var existsLink;\n        do {\n            existsLink = false;\n            forEachNode(processSingleNode);\n        }\n        while (existsLink);\n\n        function processSingleNode(node) {\n            if (!isNodeAbsorded(node, result) && isLinked(node, result)) {\n                absorb(node, result);\n                existsLink = true;\n            }\n        }\n\n        return result;\n    };\n\n    function isNodeAbsorded(node, result) {\n        return zrUtil.indexOf(result.nodes, node) >= 0;\n    }\n\n    function isLinked(node, result) {\n        var hasLink = false;\n        forEachEdgeType(function (edgeType) {\n            zrUtil.each(edgeIdGetter(node, edgeType) || [], function (edgeId) {\n                result.records[edgeType.name][edgeId] && (hasLink = true);\n            });\n        });\n        return hasLink;\n    }\n\n    function absorb(node, result) {\n        result.nodes.push(node);\n        forEachEdgeType(function (edgeType) {\n            zrUtil.each(edgeIdGetter(node, edgeType) || [], function (edgeId) {\n                result.records[edgeType.name][edgeId] = true;\n            });\n        });\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as numberUtil from '../../util/number';\nimport * as helper from './helper';\nimport sliderMove from '../helper/sliderMove';\n\nvar each = zrUtil.each;\nvar asc = numberUtil.asc;\n\n/**\n * Operate single axis.\n * One axis can only operated by one axis operator.\n * Different dataZoomModels may be defined to operate the same axis.\n * (i.e. 'inside' data zoom and 'slider' data zoom components)\n * So dataZoomModels share one axisProxy in that case.\n *\n * @class\n */\nvar AxisProxy = function (dimName, axisIndex, dataZoomModel, ecModel) {\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this._dimName = dimName;\n\n    /**\n     * @private\n     */\n    this._axisIndex = axisIndex;\n\n    /**\n     * @private\n     * @type {Array.<number>}\n     */\n    this._valueWindow;\n\n    /**\n     * @private\n     * @type {Array.<number>}\n     */\n    this._percentWindow;\n\n    /**\n     * @private\n     * @type {Array.<number>}\n     */\n    this._dataExtent;\n\n    /**\n     * {minSpan, maxSpan, minValueSpan, maxValueSpan}\n     * @private\n     * @type {Object}\n     */\n    this._minMaxSpan;\n\n    /**\n     * @readOnly\n     * @type {module: echarts/model/Global}\n     */\n    this.ecModel = ecModel;\n\n    /**\n     * @private\n     * @type {module: echarts/component/dataZoom/DataZoomModel}\n     */\n    this._dataZoomModel = dataZoomModel;\n\n    // /**\n    //  * @readOnly\n    //  * @private\n    //  */\n    // this.hasSeriesStacked;\n};\n\nAxisProxy.prototype = {\n\n    constructor: AxisProxy,\n\n    /**\n     * Whether the axisProxy is hosted by dataZoomModel.\n     *\n     * @public\n     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n     * @return {boolean}\n     */\n    hostedBy: function (dataZoomModel) {\n        return this._dataZoomModel === dataZoomModel;\n    },\n\n    /**\n     * @return {Array.<number>} Value can only be NaN or finite value.\n     */\n    getDataValueWindow: function () {\n        return this._valueWindow.slice();\n    },\n\n    /**\n     * @return {Array.<number>}\n     */\n    getDataPercentWindow: function () {\n        return this._percentWindow.slice();\n    },\n\n    /**\n     * @public\n     * @param {number} axisIndex\n     * @return {Array} seriesModels\n     */\n    getTargetSeriesModels: function () {\n        var seriesModels = [];\n        var ecModel = this.ecModel;\n\n        ecModel.eachSeries(function (seriesModel) {\n            if (helper.isCoordSupported(seriesModel.get('coordinateSystem'))) {\n                var dimName = this._dimName;\n                var axisModel = ecModel.queryComponents({\n                    mainType: dimName + 'Axis',\n                    index: seriesModel.get(dimName + 'AxisIndex'),\n                    id: seriesModel.get(dimName + 'AxisId')\n                })[0];\n                if (this._axisIndex === (axisModel && axisModel.componentIndex)) {\n                    seriesModels.push(seriesModel);\n                }\n            }\n        }, this);\n\n        return seriesModels;\n    },\n\n    getAxisModel: function () {\n        return this.ecModel.getComponent(this._dimName + 'Axis', this._axisIndex);\n    },\n\n    getOtherAxisModel: function () {\n        var axisDim = this._dimName;\n        var ecModel = this.ecModel;\n        var axisModel = this.getAxisModel();\n        var isCartesian = axisDim === 'x' || axisDim === 'y';\n        var otherAxisDim;\n        var coordSysIndexName;\n        if (isCartesian) {\n            coordSysIndexName = 'gridIndex';\n            otherAxisDim = axisDim === 'x' ? 'y' : 'x';\n        }\n        else {\n            coordSysIndexName = 'polarIndex';\n            otherAxisDim = axisDim === 'angle' ? 'radius' : 'angle';\n        }\n        var foundOtherAxisModel;\n        ecModel.eachComponent(otherAxisDim + 'Axis', function (otherAxisModel) {\n            if ((otherAxisModel.get(coordSysIndexName) || 0)\n                === (axisModel.get(coordSysIndexName) || 0)\n            ) {\n                foundOtherAxisModel = otherAxisModel;\n            }\n        });\n        return foundOtherAxisModel;\n    },\n\n    getMinMaxSpan: function () {\n        return zrUtil.clone(this._minMaxSpan);\n    },\n\n    /**\n     * Only calculate by given range and this._dataExtent, do not change anything.\n     *\n     * @param {Object} opt\n     * @param {number} [opt.start]\n     * @param {number} [opt.end]\n     * @param {number} [opt.startValue]\n     * @param {number} [opt.endValue]\n     */\n    calculateDataWindow: function (opt) {\n        var dataExtent = this._dataExtent;\n        var axisModel = this.getAxisModel();\n        var scale = axisModel.axis.scale;\n        var rangePropMode = this._dataZoomModel.getRangePropMode();\n        var percentExtent = [0, 100];\n        var percentWindow = [];\n        var valueWindow = [];\n        var hasPropModeValue;\n\n        each(['start', 'end'], function (prop, idx) {\n            var boundPercent = opt[prop];\n            var boundValue = opt[prop + 'Value'];\n\n            // Notice: dataZoom is based either on `percentProp` ('start', 'end') or\n            // on `valueProp` ('startValue', 'endValue'). (They are based on the data extent\n            // but not min/max of axis, which will be calculated by data window then).\n            // The former one is suitable for cases that a dataZoom component controls multiple\n            // axes with different unit or extent, and the latter one is suitable for accurate\n            // zoom by pixel (e.g., in dataZoomSelect).\n            // we use `getRangePropMode()` to mark which prop is used. `rangePropMode` is updated\n            // only when setOption or dispatchAction, otherwise it remains its original value.\n            // (Why not only record `percentProp` and always map to `valueProp`? Because\n            // the map `valueProp` -> `percentProp` -> `valueProp` probably not the original\n            // `valueProp`. consider two axes constrolled by one dataZoom. They have different\n            // data extent. All of values that are overflow the `dataExtent` will be calculated\n            // to percent '100%').\n\n            if (rangePropMode[idx] === 'percent') {\n                boundPercent == null && (boundPercent = percentExtent[idx]);\n                // Use scale.parse to math round for category or time axis.\n                boundValue = scale.parse(numberUtil.linearMap(\n                    boundPercent, percentExtent, dataExtent\n                ));\n            }\n            else {\n                hasPropModeValue = true;\n                boundValue = boundValue == null ? dataExtent[idx] : scale.parse(boundValue);\n                // Calculating `percent` from `value` may be not accurate, because\n                // This calculation can not be inversed, because all of values that\n                // are overflow the `dataExtent` will be calculated to percent '100%'\n                boundPercent = numberUtil.linearMap(\n                    boundValue, dataExtent, percentExtent\n                );\n            }\n\n            // valueWindow[idx] = round(boundValue);\n            // percentWindow[idx] = round(boundPercent);\n            valueWindow[idx] = boundValue;\n            percentWindow[idx] = boundPercent;\n        });\n\n        asc(valueWindow);\n        asc(percentWindow);\n\n        // The windows from user calling of `dispatchAction` might be out of the extent,\n        // or do not obey the `min/maxSpan`, `min/maxValueSpan`. But we dont restrict window\n        // by `zoomLock` here, because we see `zoomLock` just as a interaction constraint,\n        // where API is able to initialize/modify the window size even though `zoomLock`\n        // specified.\n        var spans = this._minMaxSpan;\n        hasPropModeValue\n            ? restrictSet(valueWindow, percentWindow, dataExtent, percentExtent, false)\n            : restrictSet(percentWindow, valueWindow, percentExtent, dataExtent, true);\n\n        function restrictSet(fromWindow, toWindow, fromExtent, toExtent, toValue) {\n            var suffix = toValue ? 'Span' : 'ValueSpan';\n            sliderMove(0, fromWindow, fromExtent, 'all', spans['min' + suffix], spans['max' + suffix]);\n            for (var i = 0; i < 2; i++) {\n                toWindow[i] = numberUtil.linearMap(fromWindow[i], fromExtent, toExtent, true);\n                toValue && (toWindow[i] = scale.parse(toWindow[i]));\n            }\n        }\n\n        return {\n            valueWindow: valueWindow,\n            percentWindow: percentWindow\n        };\n    },\n\n    /**\n     * Notice: reset should not be called before series.restoreData() called,\n     * so it is recommanded to be called in \"process stage\" but not \"model init\n     * stage\".\n     *\n     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n     */\n    reset: function (dataZoomModel) {\n        if (dataZoomModel !== this._dataZoomModel) {\n            return;\n        }\n\n        var targetSeries = this.getTargetSeriesModels();\n        // Culculate data window and data extent, and record them.\n        this._dataExtent = calculateDataExtent(this, this._dimName, targetSeries);\n\n        // this.hasSeriesStacked = false;\n        // each(targetSeries, function (series) {\n            // var data = series.getData();\n            // var dataDim = data.mapDimension(this._dimName);\n            // var stackedDimension = data.getCalculationInfo('stackedDimension');\n            // if (stackedDimension && stackedDimension === dataDim) {\n                // this.hasSeriesStacked = true;\n            // }\n        // }, this);\n\n        // `calculateDataWindow` uses min/maxSpan.\n        setMinMaxSpan(this);\n\n        var dataWindow = this.calculateDataWindow(dataZoomModel.settledOption);\n\n        this._valueWindow = dataWindow.valueWindow;\n        this._percentWindow = dataWindow.percentWindow;\n\n        // Update axis setting then.\n        setAxisModel(this);\n    },\n\n    /**\n     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n     */\n    restore: function (dataZoomModel) {\n        if (dataZoomModel !== this._dataZoomModel) {\n            return;\n        }\n\n        this._valueWindow = this._percentWindow = null;\n        setAxisModel(this, true);\n    },\n\n    /**\n     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n     */\n    filterData: function (dataZoomModel, api) {\n        if (dataZoomModel !== this._dataZoomModel) {\n            return;\n        }\n\n        var axisDim = this._dimName;\n        var seriesModels = this.getTargetSeriesModels();\n        var filterMode = dataZoomModel.get('filterMode');\n        var valueWindow = this._valueWindow;\n\n        if (filterMode === 'none') {\n            return;\n        }\n\n        // FIXME\n        // Toolbox may has dataZoom injected. And if there are stacked bar chart\n        // with NaN data, NaN will be filtered and stack will be wrong.\n        // So we need to force the mode to be set empty.\n        // In fect, it is not a big deal that do not support filterMode-'filter'\n        // when using toolbox#dataZoom, utill tooltip#dataZoom support \"single axis\n        // selection\" some day, which might need \"adapt to data extent on the\n        // otherAxis\", which is disabled by filterMode-'empty'.\n        // But currently, stack has been fixed to based on value but not index,\n        // so this is not an issue any more.\n        // var otherAxisModel = this.getOtherAxisModel();\n        // if (dataZoomModel.get('$fromToolbox')\n        //     && otherAxisModel\n        //     && otherAxisModel.hasSeriesStacked\n        // ) {\n        //     filterMode = 'empty';\n        // }\n\n        // TODO\n        // filterMode 'weakFilter' and 'empty' is not optimized for huge data yet.\n\n        each(seriesModels, function (seriesModel) {\n            var seriesData = seriesModel.getData();\n            var dataDims = seriesData.mapDimension(axisDim, true);\n\n            if (!dataDims.length) {\n                return;\n            }\n\n            if (filterMode === 'weakFilter') {\n                seriesData.filterSelf(function (dataIndex) {\n                    var leftOut;\n                    var rightOut;\n                    var hasValue;\n                    for (var i = 0; i < dataDims.length; i++) {\n                        var value = seriesData.get(dataDims[i], dataIndex);\n                        var thisHasValue = !isNaN(value);\n                        var thisLeftOut = value < valueWindow[0];\n                        var thisRightOut = value > valueWindow[1];\n                        if (thisHasValue && !thisLeftOut && !thisRightOut) {\n                            return true;\n                        }\n                        thisHasValue && (hasValue = true);\n                        thisLeftOut && (leftOut = true);\n                        thisRightOut && (rightOut = true);\n                    }\n                    // If both left out and right out, do not filter.\n                    return hasValue && leftOut && rightOut;\n                });\n            }\n            else {\n                each(dataDims, function (dim) {\n                    if (filterMode === 'empty') {\n                        seriesModel.setData(\n                            seriesData = seriesData.map(dim, function (value) {\n                                return !isInWindow(value) ? NaN : value;\n                            })\n                        );\n                    }\n                    else {\n                        var range = {};\n                        range[dim] = valueWindow;\n\n                        // console.time('select');\n                        seriesData.selectRange(range);\n                        // console.timeEnd('select');\n                    }\n                });\n            }\n\n            each(dataDims, function (dim) {\n                seriesData.setApproximateExtent(valueWindow, dim);\n            });\n        });\n\n        function isInWindow(value) {\n            return value >= valueWindow[0] && value <= valueWindow[1];\n        }\n    }\n};\n\nfunction calculateDataExtent(axisProxy, axisDim, seriesModels) {\n    var dataExtent = [Infinity, -Infinity];\n\n    each(seriesModels, function (seriesModel) {\n        var seriesData = seriesModel.getData();\n        if (seriesData) {\n            each(seriesData.mapDimension(axisDim, true), function (dim) {\n                var seriesExtent = seriesData.getApproximateExtent(dim);\n                seriesExtent[0] < dataExtent[0] && (dataExtent[0] = seriesExtent[0]);\n                seriesExtent[1] > dataExtent[1] && (dataExtent[1] = seriesExtent[1]);\n            });\n        }\n    });\n\n    if (dataExtent[1] < dataExtent[0]) {\n        dataExtent = [NaN, NaN];\n    }\n\n    // It is important to get \"consistent\" extent when more then one axes is\n    // controlled by a `dataZoom`, otherwise those axes will not be synchronized\n    // when zooming. But it is difficult to know what is \"consistent\", considering\n    // axes have different type or even different meanings (For example, two\n    // time axes are used to compare data of the same date in different years).\n    // So basically dataZoom just obtains extent by series.data (in category axis\n    // extent can be obtained from axis.data).\n    // Nevertheless, user can set min/max/scale on axes to make extent of axes\n    // consistent.\n    fixExtentByAxis(axisProxy, dataExtent);\n\n    return dataExtent;\n}\n\nfunction fixExtentByAxis(axisProxy, dataExtent) {\n    var axisModel = axisProxy.getAxisModel();\n    var min = axisModel.getMin(true);\n\n    // For category axis, if min/max/scale are not set, extent is determined\n    // by axis.data by default.\n    var isCategoryAxis = axisModel.get('type') === 'category';\n    var axisDataLen = isCategoryAxis && axisModel.getCategories().length;\n\n    if (min != null && min !== 'dataMin' && typeof min !== 'function') {\n        dataExtent[0] = min;\n    }\n    else if (isCategoryAxis) {\n        dataExtent[0] = axisDataLen > 0 ? 0 : NaN;\n    }\n\n    var max = axisModel.getMax(true);\n    if (max != null && max !== 'dataMax' && typeof max !== 'function') {\n        dataExtent[1] = max;\n    }\n    else if (isCategoryAxis) {\n        dataExtent[1] = axisDataLen > 0 ? axisDataLen - 1 : NaN;\n    }\n\n    if (!axisModel.get('scale', true)) {\n        dataExtent[0] > 0 && (dataExtent[0] = 0);\n        dataExtent[1] < 0 && (dataExtent[1] = 0);\n    }\n\n    // For value axis, if min/max/scale are not set, we just use the extent obtained\n    // by series data, which may be a little different from the extent calculated by\n    // `axisHelper.getScaleExtent`. But the different just affects the experience a\n    // little when zooming. So it will not be fixed until some users require it strongly.\n\n    return dataExtent;\n}\n\nfunction setAxisModel(axisProxy, isRestore) {\n    var axisModel = axisProxy.getAxisModel();\n\n    var percentWindow = axisProxy._percentWindow;\n    var valueWindow = axisProxy._valueWindow;\n\n    if (!percentWindow) {\n        return;\n    }\n\n    // [0, 500]: arbitrary value, guess axis extent.\n    var precision = numberUtil.getPixelPrecision(valueWindow, [0, 500]);\n    precision = Math.min(precision, 20);\n    // isRestore or isFull\n    var useOrigin = isRestore || (percentWindow[0] === 0 && percentWindow[1] === 100);\n\n    axisModel.setRange(\n        useOrigin ? null : +valueWindow[0].toFixed(precision),\n        useOrigin ? null : +valueWindow[1].toFixed(precision)\n    );\n}\n\nfunction setMinMaxSpan(axisProxy) {\n    var minMaxSpan = axisProxy._minMaxSpan = {};\n    var dataZoomModel = axisProxy._dataZoomModel;\n    var dataExtent = axisProxy._dataExtent;\n\n    each(['min', 'max'], function (minMax) {\n        var percentSpan = dataZoomModel.get(minMax + 'Span');\n        var valueSpan = dataZoomModel.get(minMax + 'ValueSpan');\n        valueSpan != null && (valueSpan = axisProxy.getAxisModel().axis.scale.parse(valueSpan));\n\n        // minValueSpan and maxValueSpan has higher priority than minSpan and maxSpan\n        if (valueSpan != null) {\n            percentSpan = numberUtil.linearMap(\n                dataExtent[0] + valueSpan, dataExtent, [0, 100], true\n            );\n        }\n        else if (percentSpan != null) {\n            valueSpan = numberUtil.linearMap(\n                percentSpan, [0, 100], dataExtent, true\n            ) - dataExtent[0];\n        }\n\n        minMaxSpan[minMax + 'Span'] = percentSpan;\n        minMaxSpan[minMax + 'ValueSpan'] = valueSpan;\n    });\n}\n\nexport default AxisProxy;\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\nimport {__DEV__} from '../../config';\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport env from 'zrender/src/core/env';\nimport * as modelUtil from '../../util/model';\nimport * as helper from './helper';\nimport AxisProxy from './AxisProxy';\n\nvar each = zrUtil.each;\nvar eachAxisDim = helper.eachAxisDim;\n\nvar DataZoomModel = echarts.extendComponentModel({\n\n    type: 'dataZoom',\n\n    dependencies: [\n        'xAxis', 'yAxis', 'zAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'series'\n    ],\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        zlevel: 0,\n        z: 4,                   // Higher than normal component (z: 2).\n        orient: null,           // Default auto by axisIndex. Possible value: 'horizontal', 'vertical'.\n        xAxisIndex: null,       // Default the first horizontal category axis.\n        yAxisIndex: null,       // Default the first vertical category axis.\n\n        filterMode: 'filter',   // Possible values: 'filter' or 'empty' or 'weakFilter'.\n                                // 'filter': data items which are out of window will be removed. This option is\n                                //          applicable when filtering outliers. For each data item, it will be\n                                //          filtered if one of the relevant dimensions is out of the window.\n                                // 'weakFilter': data items which are out of window will be removed. This option\n                                //          is applicable when filtering outliers. For each data item, it will be\n                                //          filtered only if all  of the relevant dimensions are out of the same\n                                //          side of the window.\n                                // 'empty': data items which are out of window will be set to empty.\n                                //          This option is applicable when user should not neglect\n                                //          that there are some data items out of window.\n                                // 'none': Do not filter.\n                                // Taking line chart as an example, line will be broken in\n                                // the filtered points when filterModel is set to 'empty', but\n                                // be connected when set to 'filter'.\n\n        throttle: null,         // Dispatch action by the fixed rate, avoid frequency.\n                                // default 100. Do not throttle when use null/undefined.\n                                // If animation === true and animationDurationUpdate > 0,\n                                // default value is 100, otherwise 20.\n        start: 0,               // Start percent. 0 ~ 100\n        end: 100,               // End percent. 0 ~ 100\n        startValue: null,       // Start value. If startValue specified, start is ignored.\n        endValue: null,         // End value. If endValue specified, end is ignored.\n        minSpan: null,          // 0 ~ 100\n        maxSpan: null,          // 0 ~ 100\n        minValueSpan: null,     // The range of dataZoom can not be smaller than that.\n        maxValueSpan: null,     // The range of dataZoom can not be larger than that.\n        rangeMode: null         // Array, can be 'value' or 'percent'.\n    },\n\n    /**\n     * @override\n     */\n    init: function (option, parentModel, ecModel) {\n\n        /**\n         * key like x_0, y_1\n         * @private\n         * @type {Object}\n         */\n        this._dataIntervalByAxis = {};\n\n        /**\n         * @private\n         */\n        this._dataInfo = {};\n\n        /**\n         * key like x_0, y_1\n         * @private\n         */\n        this._axisProxies = {};\n\n        /**\n         * @readOnly\n         */\n        this.textStyleModel;\n\n        /**\n         * @private\n         */\n        this._autoThrottle = true;\n\n        /**\n         * It is `[rangeModeForMin, rangeModeForMax]`.\n         * The optional values for `rangeMode`:\n         * + `'value'` mode: the axis extent will always be determined by\n         *     `dataZoom.startValue` and `dataZoom.endValue`, despite\n         *     how data like and how `axis.min` and `axis.max` are.\n         * + `'percent'` mode: `100` represents 100% of the `[dMin, dMax]`,\n         *     where `dMin` is `axis.min` if `axis.min` specified, otherwise `data.extent[0]`,\n         *     and `dMax` is `axis.max` if `axis.max` specified, otherwise `data.extent[1]`.\n         *     Axis extent will be determined by the result of the percent of `[dMin, dMax]`.\n         *\n         * For example, when users are using dynamic data (update data periodically via `setOption`),\n         * if in `'value`' mode, the window will be kept in a fixed value range despite how\n         * data are appended, while if in `'percent'` mode, whe window range will be changed alone with\n         * the appended data (suppose `axis.min` and `axis.max` are not specified).\n         *\n         * @private\n         */\n        this._rangePropMode = ['percent', 'percent'];\n\n        var inputRawOption = retrieveRawOption(option);\n\n        /**\n         * Suppose a \"main process\" start at the point that model prepared (that is,\n         * model initialized or merged or method called in `action`).\n         * We should keep the `main process` idempotent, that is, given a set of values\n         * on `option`, we get the same result.\n         *\n         * But sometimes, values on `option` will be updated for providing users\n         * a \"final calculated value\" (`dataZoomProcessor` will do that). Those value\n         * should not be the base/input of the `main process`.\n         *\n         * So in that case we should save and keep the input of the `main process`\n         * separately, called `settledOption`.\n         *\n         * For example, consider the case:\n         * (Step_1) brush zoom the grid by `toolbox.dataZoom`,\n         *     where the original input `option.startValue`, `option.endValue` are earsed by\n         *     calculated value.\n         * (Step)2) click the legend to hide and show a series,\n         *     where the new range is calculated by the earsed `startValue` and `endValue`,\n         *     which brings incorrect result.\n         *\n         * @readOnly\n         */\n        this.settledOption = inputRawOption;\n\n        this.mergeDefaultAndTheme(option, ecModel);\n\n        this.doInit(inputRawOption);\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function (newOption) {\n        var inputRawOption = retrieveRawOption(newOption);\n\n        //FIX #2591\n        zrUtil.merge(this.option, newOption, true);\n        zrUtil.merge(this.settledOption, inputRawOption, true);\n\n        this.doInit(inputRawOption);\n    },\n\n    /**\n     * @protected\n     */\n    doInit: function (inputRawOption) {\n        var thisOption = this.option;\n\n        // Disable realtime view update if canvas is not supported.\n        if (!env.canvasSupported) {\n            thisOption.realtime = false;\n        }\n\n        this._setDefaultThrottle(inputRawOption);\n\n        updateRangeUse(this, inputRawOption);\n\n        var settledOption = this.settledOption;\n        each([['start', 'startValue'], ['end', 'endValue']], function (names, index) {\n            // start/end has higher priority over startValue/endValue if they\n            // both set, but we should make chart.setOption({endValue: 1000})\n            // effective, rather than chart.setOption({endValue: 1000, end: null}).\n            if (this._rangePropMode[index] === 'value') {\n                thisOption[names[0]] = settledOption[names[0]] = null;\n            }\n            // Otherwise do nothing and use the merge result.\n        }, this);\n\n        this.textStyleModel = this.getModel('textStyle');\n\n        this._resetTarget();\n\n        this._giveAxisProxies();\n    },\n\n    /**\n     * @private\n     */\n    _giveAxisProxies: function () {\n        var axisProxies = this._axisProxies;\n\n        this.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel, ecModel) {\n            var axisModel = this.dependentModels[dimNames.axis][axisIndex];\n\n            // If exists, share axisProxy with other dataZoomModels.\n            var axisProxy = axisModel.__dzAxisProxy || (\n                // Use the first dataZoomModel as the main model of axisProxy.\n                axisModel.__dzAxisProxy = new AxisProxy(\n                    dimNames.name, axisIndex, this, ecModel\n                )\n            );\n            // FIXME\n            // dispose __dzAxisProxy\n\n            axisProxies[dimNames.name + '_' + axisIndex] = axisProxy;\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _resetTarget: function () {\n        var thisOption = this.option;\n\n        var autoMode = this._judgeAutoMode();\n\n        eachAxisDim(function (dimNames) {\n            var axisIndexName = dimNames.axisIndex;\n            thisOption[axisIndexName] = modelUtil.normalizeToArray(\n                thisOption[axisIndexName]\n            );\n        }, this);\n\n        if (autoMode === 'axisIndex') {\n            this._autoSetAxisIndex();\n        }\n        else if (autoMode === 'orient') {\n            this._autoSetOrient();\n        }\n    },\n\n    /**\n     * @private\n     */\n    _judgeAutoMode: function () {\n        // Auto set only works for setOption at the first time.\n        // The following is user's reponsibility. So using merged\n        // option is OK.\n        var thisOption = this.option;\n\n        var hasIndexSpecified = false;\n        eachAxisDim(function (dimNames) {\n            // When user set axisIndex as a empty array, we think that user specify axisIndex\n            // but do not want use auto mode. Because empty array may be encountered when\n            // some error occured.\n            if (thisOption[dimNames.axisIndex] != null) {\n                hasIndexSpecified = true;\n            }\n        }, this);\n\n        var orient = thisOption.orient;\n\n        if (orient == null && hasIndexSpecified) {\n            return 'orient';\n        }\n        else if (!hasIndexSpecified) {\n            if (orient == null) {\n                thisOption.orient = 'horizontal';\n            }\n            return 'axisIndex';\n        }\n    },\n\n    /**\n     * @private\n     */\n    _autoSetAxisIndex: function () {\n        var autoAxisIndex = true;\n        var orient = this.get('orient', true);\n        var thisOption = this.option;\n        var dependentModels = this.dependentModels;\n\n        if (autoAxisIndex) {\n            // Find axis that parallel to dataZoom as default.\n            var dimName = orient === 'vertical' ? 'y' : 'x';\n\n            if (dependentModels[dimName + 'Axis'].length) {\n                thisOption[dimName + 'AxisIndex'] = [0];\n                autoAxisIndex = false;\n            }\n            else {\n                each(dependentModels.singleAxis, function (singleAxisModel) {\n                    if (autoAxisIndex && singleAxisModel.get('orient', true) === orient) {\n                        thisOption.singleAxisIndex = [singleAxisModel.componentIndex];\n                        autoAxisIndex = false;\n                    }\n                });\n            }\n        }\n\n        if (autoAxisIndex) {\n            // Find the first category axis as default. (consider polar)\n            eachAxisDim(function (dimNames) {\n                if (!autoAxisIndex) {\n                    return;\n                }\n                var axisIndices = [];\n                var axisModels = this.dependentModels[dimNames.axis];\n                if (axisModels.length && !axisIndices.length) {\n                    for (var i = 0, len = axisModels.length; i < len; i++) {\n                        if (axisModels[i].get('type') === 'category') {\n                            axisIndices.push(i);\n                        }\n                    }\n                }\n                thisOption[dimNames.axisIndex] = axisIndices;\n                if (axisIndices.length) {\n                    autoAxisIndex = false;\n                }\n            }, this);\n        }\n\n        if (autoAxisIndex) {\n            // FIXME\n            // 这里是兼容ec2的写法（没指定xAxisIndex和yAxisIndex时把scatter和双数值轴折柱纳入dataZoom控制），\n            // 但是实际是否需要Grid.js#getScaleByOption来判断（考虑time，log等axis type）？\n\n            // If both dataZoom.xAxisIndex and dataZoom.yAxisIndex is not specified,\n            // dataZoom component auto adopts series that reference to\n            // both xAxis and yAxis which type is 'value'.\n            this.ecModel.eachSeries(function (seriesModel) {\n                if (this._isSeriesHasAllAxesTypeOf(seriesModel, 'value')) {\n                    eachAxisDim(function (dimNames) {\n                        var axisIndices = thisOption[dimNames.axisIndex];\n\n                        var axisIndex = seriesModel.get(dimNames.axisIndex);\n                        var axisId = seriesModel.get(dimNames.axisId);\n\n                        var axisModel = seriesModel.ecModel.queryComponents({\n                            mainType: dimNames.axis,\n                            index: axisIndex,\n                            id: axisId\n                        })[0];\n\n                        if (__DEV__) {\n                            if (!axisModel) {\n                                throw new Error(\n                                    dimNames.axis + ' \"' + zrUtil.retrieve(\n                                        axisIndex,\n                                        axisId,\n                                        0\n                                    ) + '\" not found'\n                                );\n                            }\n                        }\n                        axisIndex = axisModel.componentIndex;\n\n                        if (zrUtil.indexOf(axisIndices, axisIndex) < 0) {\n                            axisIndices.push(axisIndex);\n                        }\n                    });\n                }\n            }, this);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _autoSetOrient: function () {\n        var dim;\n\n        // Find the first axis\n        this.eachTargetAxis(function (dimNames) {\n            !dim && (dim = dimNames.name);\n        }, this);\n\n        this.option.orient = dim === 'y' ? 'vertical' : 'horizontal';\n    },\n\n    /**\n     * @private\n     */\n    _isSeriesHasAllAxesTypeOf: function (seriesModel, axisType) {\n        // FIXME\n        // 需要series的xAxisIndex和yAxisIndex都首先自动设置上。\n        // 例如series.type === scatter时。\n\n        var is = true;\n        eachAxisDim(function (dimNames) {\n            var seriesAxisIndex = seriesModel.get(dimNames.axisIndex);\n            var axisModel = this.dependentModels[dimNames.axis][seriesAxisIndex];\n\n            if (!axisModel || axisModel.get('type') !== axisType) {\n                is = false;\n            }\n        }, this);\n        return is;\n    },\n\n    /**\n     * @private\n     */\n    _setDefaultThrottle: function (inputRawOption) {\n        // When first time user set throttle, auto throttle ends.\n        if (inputRawOption.hasOwnProperty('throttle')) {\n            this._autoThrottle = false;\n        }\n        if (this._autoThrottle) {\n            var globalOption = this.ecModel.option;\n            this.option.throttle = (\n                globalOption.animation && globalOption.animationDurationUpdate > 0\n            ) ? 100 : 20;\n        }\n    },\n\n    /**\n     * @public\n     */\n    getFirstTargetAxisModel: function () {\n        var firstAxisModel;\n        eachAxisDim(function (dimNames) {\n            if (firstAxisModel == null) {\n                var indices = this.get(dimNames.axisIndex);\n                if (indices.length) {\n                    firstAxisModel = this.dependentModels[dimNames.axis][indices[0]];\n                }\n            }\n        }, this);\n\n        return firstAxisModel;\n    },\n\n    /**\n     * @public\n     * @param {Function} callback param: axisModel, dimNames, axisIndex, dataZoomModel, ecModel\n     */\n    eachTargetAxis: function (callback, context) {\n        var ecModel = this.ecModel;\n        eachAxisDim(function (dimNames) {\n            each(\n                this.get(dimNames.axisIndex),\n                function (axisIndex) {\n                    callback.call(context, dimNames, axisIndex, this, ecModel);\n                },\n                this\n            );\n        }, this);\n    },\n\n    /**\n     * @param {string} dimName\n     * @param {number} axisIndex\n     * @return {module:echarts/component/dataZoom/AxisProxy} If not found, return null/undefined.\n     */\n    getAxisProxy: function (dimName, axisIndex) {\n        return this._axisProxies[dimName + '_' + axisIndex];\n    },\n\n    /**\n     * @param {string} dimName\n     * @param {number} axisIndex\n     * @return {module:echarts/model/Model} If not found, return null/undefined.\n     */\n    getAxisModel: function (dimName, axisIndex) {\n        var axisProxy = this.getAxisProxy(dimName, axisIndex);\n        return axisProxy && axisProxy.getAxisModel();\n    },\n\n    /**\n     * If not specified, set to undefined.\n     *\n     * @public\n     * @param {Object} opt\n     * @param {number} [opt.start]\n     * @param {number} [opt.end]\n     * @param {number} [opt.startValue]\n     * @param {number} [opt.endValue]\n     */\n    setRawRange: function (opt) {\n        var thisOption = this.option;\n        var settledOption = this.settledOption;\n        each([['start', 'startValue'], ['end', 'endValue']], function (names) {\n            // Consider the pair <start, startValue>:\n            // If one has value and the other one is `null/undefined`, we both set them\n            // to `settledOption`. This strategy enables the feature to clear the original\n            // value in `settledOption` to `null/undefined`.\n            // But if both of them are `null/undefined`, we do not set them to `settledOption`\n            // and keep `settledOption` with the original value. This strategy enables users to\n            // only set <end or endValue> but not set <start or startValue> when calling\n            // `dispatchAction`.\n            // The pair <end, endValue> is treated in the same way.\n            if (opt[names[0]] != null || opt[names[1]] != null) {\n                thisOption[names[0]] = settledOption[names[0]] = opt[names[0]];\n                thisOption[names[1]] = settledOption[names[1]] = opt[names[1]];\n            }\n        }, this);\n\n        updateRangeUse(this, opt);\n    },\n\n    /**\n     * @public\n     * @param {Object} opt\n     * @param {number} [opt.start]\n     * @param {number} [opt.end]\n     * @param {number} [opt.startValue]\n     * @param {number} [opt.endValue]\n     */\n    setCalculatedRange: function (opt) {\n        var option = this.option;\n        each(['start', 'startValue', 'end', 'endValue'], function (name) {\n            option[name] = opt[name];\n        });\n    },\n\n    /**\n     * @public\n     * @return {Array.<number>} [startPercent, endPercent]\n     */\n    getPercentRange: function () {\n        var axisProxy = this.findRepresentativeAxisProxy();\n        if (axisProxy) {\n            return axisProxy.getDataPercentWindow();\n        }\n    },\n\n    /**\n     * @public\n     * For example, chart.getModel().getComponent('dataZoom').getValueRange('y', 0);\n     *\n     * @param {string} [axisDimName]\n     * @param {number} [axisIndex]\n     * @return {Array.<number>} [startValue, endValue] value can only be '-' or finite number.\n     */\n    getValueRange: function (axisDimName, axisIndex) {\n        if (axisDimName == null && axisIndex == null) {\n            var axisProxy = this.findRepresentativeAxisProxy();\n            if (axisProxy) {\n                return axisProxy.getDataValueWindow();\n            }\n        }\n        else {\n            return this.getAxisProxy(axisDimName, axisIndex).getDataValueWindow();\n        }\n    },\n\n    /**\n     * @public\n     * @param {module:echarts/model/Model} [axisModel] If axisModel given, find axisProxy\n     *      corresponding to the axisModel\n     * @return {module:echarts/component/dataZoom/AxisProxy}\n     */\n    findRepresentativeAxisProxy: function (axisModel) {\n        if (axisModel) {\n            return axisModel.__dzAxisProxy;\n        }\n\n        // Find the first hosted axisProxy\n        var axisProxies = this._axisProxies;\n        for (var key in axisProxies) {\n            if (axisProxies.hasOwnProperty(key) && axisProxies[key].hostedBy(this)) {\n                return axisProxies[key];\n            }\n        }\n\n        // If no hosted axis find not hosted axisProxy.\n        // Consider this case: dataZoomModel1 and dataZoomModel2 control the same axis,\n        // and the option.start or option.end settings are different. The percentRange\n        // should follow axisProxy.\n        // (We encounter this problem in toolbox data zoom.)\n        for (var key in axisProxies) {\n            if (axisProxies.hasOwnProperty(key) && !axisProxies[key].hostedBy(this)) {\n                return axisProxies[key];\n            }\n        }\n    },\n\n    /**\n     * @return {Array.<string>}\n     */\n    getRangePropMode: function () {\n        return this._rangePropMode.slice();\n    }\n\n});\n\n/**\n * Retrieve the those raw params from option, which will be cached separately.\n * becasue they will be overwritten by normalized/calculated values in the main\n * process.\n */\nfunction retrieveRawOption(option) {\n    var ret = {};\n    each(\n        ['start', 'end', 'startValue', 'endValue', 'throttle'],\n        function (name) {\n            option.hasOwnProperty(name) && (ret[name] = option[name]);\n        }\n    );\n    return ret;\n}\n\nfunction updateRangeUse(dataZoomModel, inputRawOption) {\n    var rangePropMode = dataZoomModel._rangePropMode;\n    var rangeModeInOption = dataZoomModel.get('rangeMode');\n\n    each([['start', 'startValue'], ['end', 'endValue']], function (names, index) {\n        var percentSpecified = inputRawOption[names[0]] != null;\n        var valueSpecified = inputRawOption[names[1]] != null;\n        if (percentSpecified && !valueSpecified) {\n            rangePropMode[index] = 'percent';\n        }\n        else if (!percentSpecified && valueSpecified) {\n            rangePropMode[index] = 'value';\n        }\n        else if (rangeModeInOption) {\n            rangePropMode[index] = rangeModeInOption[index];\n        }\n        else if (percentSpecified) { // percentSpecified && valueSpecified\n            rangePropMode[index] = 'percent';\n        }\n        // else remain its original setting.\n    });\n}\n\nexport default DataZoomModel;","/*\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\nimport ComponentView from '../../view/Component';\n\nexport default ComponentView.extend({\n\n    type: 'dataZoom',\n\n    render: function (dataZoomModel, ecModel, api, payload) {\n        this.dataZoomModel = dataZoomModel;\n        this.ecModel = ecModel;\n        this.api = api;\n    },\n\n    /**\n     * Find the first target coordinate system.\n     *\n     * @protected\n     * @return {Object} {\n     *                   grid: [\n     *                       {model: coord0, axisModels: [axis1, axis3], coordIndex: 1},\n     *                       {model: coord1, axisModels: [axis0, axis2], coordIndex: 0},\n     *                       ...\n     *                   ],  // cartesians must not be null/undefined.\n     *                   polar: [\n     *                       {model: coord0, axisModels: [axis4], coordIndex: 0},\n     *                       ...\n     *                   ],  // polars must not be null/undefined.\n     *                   singleAxis: [\n     *                       {model: coord0, axisModels: [], coordIndex: 0}\n     *                   ]\n     */\n    getTargetCoordInfo: function () {\n        var dataZoomModel = this.dataZoomModel;\n        var ecModel = this.ecModel;\n        var coordSysLists = {};\n\n        dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) {\n            var axisModel = ecModel.getComponent(dimNames.axis, axisIndex);\n            if (axisModel) {\n                var coordModel = axisModel.getCoordSysModel();\n                coordModel && save(\n                    coordModel,\n                    axisModel,\n                    coordSysLists[coordModel.mainType] || (coordSysLists[coordModel.mainType] = []),\n                    coordModel.componentIndex\n                );\n            }\n        }, this);\n\n        function save(coordModel, axisModel, store, coordIndex) {\n            var item;\n            for (var i = 0; i < store.length; i++) {\n                if (store[i].model === coordModel) {\n                    item = store[i];\n                    break;\n                }\n            }\n            if (!item) {\n                store.push(item = {\n                    model: coordModel, axisModels: [], coordIndex: coordIndex\n                });\n            }\n            item.axisModels.push(axisModel);\n        }\n\n        return coordSysLists;\n    }\n\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport DataZoomModel from './DataZoomModel';\n\nexport default DataZoomModel.extend({\n    type: 'dataZoom.select'\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\nimport DataZoomView from './DataZoomView';\n\nexport default DataZoomView.extend({\n    type: 'dataZoom.select'\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\nimport * as echarts from '../../echarts';\nimport {createHashMap, each} from 'zrender/src/core/util';\n\necharts.registerProcessor({\n\n    // `dataZoomProcessor` will only be performed in needed series. Consider if\n    // there is a line series and a pie series, it is better not to update the\n    // line series if only pie series is needed to be updated.\n    getTargetSeries: function (ecModel) {\n        var seriesModelMap = createHashMap();\n\n        ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n            dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) {\n                var axisProxy = dataZoomModel.getAxisProxy(dimNames.name, axisIndex);\n                each(axisProxy.getTargetSeriesModels(), function (seriesModel) {\n                    seriesModelMap.set(seriesModel.uid, seriesModel);\n                });\n            });\n        });\n\n        return seriesModelMap;\n    },\n\n    modifyOutputEnd: true,\n\n    // Consider appendData, where filter should be performed. Because data process is\n    // in block mode currently, it is not need to worry about that the overallProgress\n    // execute every frame.\n    overallReset: function (ecModel, api) {\n\n        ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n            // We calculate window and reset axis here but not in model\n            // init stage and not after action dispatch handler, because\n            // reset should be called after seriesData.restoreData.\n            dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) {\n                dataZoomModel.getAxisProxy(dimNames.name, axisIndex).reset(dataZoomModel, api);\n            });\n\n            // Caution: data zoom filtering is order sensitive when using\n            // percent range and no min/max/scale set on axis.\n            // For example, we have dataZoom definition:\n            // [\n            //      {xAxisIndex: 0, start: 30, end: 70},\n            //      {yAxisIndex: 0, start: 20, end: 80}\n            // ]\n            // In this case, [20, 80] of y-dataZoom should be based on data\n            // that have filtered by x-dataZoom using range of [30, 70],\n            // but should not be based on full raw data. Thus sliding\n            // x-dataZoom will change both ranges of xAxis and yAxis,\n            // while sliding y-dataZoom will only change the range of yAxis.\n            // So we should filter x-axis after reset x-axis immediately,\n            // and then reset y-axis and filter y-axis.\n            dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) {\n                dataZoomModel.getAxisProxy(dimNames.name, axisIndex).filterData(dataZoomModel, api);\n            });\n        });\n\n        ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n            // Fullfill all of the range props so that user\n            // is able to get them from chart.getOption().\n            var axisProxy = dataZoomModel.findRepresentativeAxisProxy();\n            var percentRange = axisProxy.getDataPercentWindow();\n            var valueRange = axisProxy.getDataValueWindow();\n\n            dataZoomModel.setCalculatedRange({\n                start: percentRange[0],\n                end: percentRange[1],\n                startValue: valueRange[0],\n                endValue: valueRange[1]\n            });\n        });\n    }\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as helper from './helper';\n\n\necharts.registerAction('dataZoom', function (payload, ecModel) {\n\n    var linkedNodesFinder = helper.createLinkedNodesFinder(\n        zrUtil.bind(ecModel.eachComponent, ecModel, 'dataZoom'),\n        helper.eachAxisDim,\n        function (model, dimNames) {\n            return model.get(dimNames.axisIndex);\n        }\n    );\n\n    var effectedModels = [];\n\n    ecModel.eachComponent(\n        {mainType: 'dataZoom', query: payload},\n        function (model, index) {\n            effectedModels.push.apply(\n                effectedModels, linkedNodesFinder(model).nodes\n            );\n        }\n    );\n\n    zrUtil.each(effectedModels, function (dataZoomModel, index) {\n        dataZoomModel.setRawRange({\n            start: payload.start,\n            end: payload.end,\n            startValue: payload.startValue,\n            endValue: payload.endValue\n        });\n    });\n\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Only work for toolbox dataZoom. User\n * MUST NOT import this module directly.\n */\n\nimport './dataZoom/typeDefaulter';\n\nimport './dataZoom/DataZoomModel';\nimport './dataZoom/DataZoomView';\n\nimport './dataZoom/SelectZoomModel';\nimport './dataZoom/SelectZoomView';\n\nimport './dataZoom/dataZoomProcessor';\nimport './dataZoom/dataZoomAction';\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\nimport * as echarts from '../../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport BrushController from '../../helper/BrushController';\nimport BrushTargetManager from '../../helper/BrushTargetManager';\nimport * as history from '../../dataZoom/history';\nimport sliderMove from '../../helper/sliderMove';\nimport lang from '../../../lang';\nimport * as featureManager from '../featureManager';\n\n// Use dataZoomSelect\nimport '../../dataZoomSelect';\n\nvar dataZoomLang = lang.toolbox.dataZoom;\nvar each = zrUtil.each;\n\n// Spectial component id start with \\0ec\\0, see echarts/model/Global.js~hasInnerId\nvar DATA_ZOOM_ID_BASE = '\\0_ec_\\0toolbox-dataZoom_';\n\nfunction DataZoom(model, ecModel, api) {\n\n    /**\n     * @private\n     * @type {module:echarts/component/helper/BrushController}\n     */\n    (this._brushController = new BrushController(api.getZr()))\n        .on('brush', zrUtil.bind(this._onBrush, this))\n        .mount();\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._isZoomActive;\n}\n\nDataZoom.defaultOption = {\n    show: true,\n    filterMode: 'filter',\n    // Icon group\n    icon: {\n        zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1',\n        back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26'\n    },\n    // `zoom`, `back`\n    title: zrUtil.clone(dataZoomLang.title)\n};\n\nvar proto = DataZoom.prototype;\n\nproto.render = function (featureModel, ecModel, api, payload) {\n    this.model = featureModel;\n    this.ecModel = ecModel;\n    this.api = api;\n\n    updateZoomBtnStatus(featureModel, ecModel, this, payload, api);\n    updateBackBtnStatus(featureModel, ecModel);\n};\n\nproto.onclick = function (ecModel, api, type) {\n    handlers[type].call(this);\n};\n\nproto.remove = function (ecModel, api) {\n    this._brushController.unmount();\n};\n\nproto.dispose = function (ecModel, api) {\n    this._brushController.dispose();\n};\n\n/**\n * @private\n */\nvar handlers = {\n\n    zoom: function () {\n        var nextActive = !this._isZoomActive;\n\n        this.api.dispatchAction({\n            type: 'takeGlobalCursor',\n            key: 'dataZoomSelect',\n            dataZoomSelectActive: nextActive\n        });\n    },\n\n    back: function () {\n        this._dispatchZoomAction(history.pop(this.ecModel));\n    }\n};\n\n/**\n * @private\n */\nproto._onBrush = function (areas, opt) {\n    if (!opt.isEnd || !areas.length) {\n        return;\n    }\n    var snapshot = {};\n    var ecModel = this.ecModel;\n\n    this._brushController.updateCovers([]); // remove cover\n\n    var brushTargetManager = new BrushTargetManager(\n        retrieveAxisSetting(this.model.option), ecModel, {include: ['grid']}\n    );\n    brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {\n        if (coordSys.type !== 'cartesian2d') {\n            return;\n        }\n\n        var brushType = area.brushType;\n        if (brushType === 'rect') {\n            setBatch('x', coordSys, coordRange[0]);\n            setBatch('y', coordSys, coordRange[1]);\n        }\n        else {\n            setBatch(({lineX: 'x', lineY: 'y'})[brushType], coordSys, coordRange);\n        }\n    });\n\n    history.push(ecModel, snapshot);\n\n    this._dispatchZoomAction(snapshot);\n\n    function setBatch(dimName, coordSys, minMax) {\n        var axis = coordSys.getAxis(dimName);\n        var axisModel = axis.model;\n        var dataZoomModel = findDataZoom(dimName, axisModel, ecModel);\n\n        // Restrict range.\n        var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan();\n        if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) {\n            minMax = sliderMove(\n                0, minMax.slice(), axis.scale.getExtent(), 0,\n                minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan\n            );\n        }\n\n        dataZoomModel && (snapshot[dataZoomModel.id] = {\n            dataZoomId: dataZoomModel.id,\n            startValue: minMax[0],\n            endValue: minMax[1]\n        });\n    }\n\n    function findDataZoom(dimName, axisModel, ecModel) {\n        var found;\n        ecModel.eachComponent({mainType: 'dataZoom', subType: 'select'}, function (dzModel) {\n            var has = dzModel.getAxisModel(dimName, axisModel.componentIndex);\n            has && (found = dzModel);\n        });\n        return found;\n    }\n};\n\n/**\n * @private\n */\nproto._dispatchZoomAction = function (snapshot) {\n    var batch = [];\n\n    // Convert from hash map to array.\n    each(snapshot, function (batchItem, dataZoomId) {\n        batch.push(zrUtil.clone(batchItem));\n    });\n\n    batch.length && this.api.dispatchAction({\n        type: 'dataZoom',\n        from: this.uid,\n        batch: batch\n    });\n};\n\nfunction retrieveAxisSetting(option) {\n    var setting = {};\n    // Compatible with previous setting: null => all axis, false => no axis.\n    zrUtil.each(['xAxisIndex', 'yAxisIndex'], function (name) {\n        setting[name] = option[name];\n        setting[name] == null && (setting[name] = 'all');\n        (setting[name] === false || setting[name] === 'none') && (setting[name] = []);\n    });\n    return setting;\n}\n\nfunction updateBackBtnStatus(featureModel, ecModel) {\n    featureModel.setIconStatus(\n        'back',\n        history.count(ecModel) > 1 ? 'emphasis' : 'normal'\n    );\n}\n\nfunction updateZoomBtnStatus(featureModel, ecModel, view, payload, api) {\n    var zoomActive = view._isZoomActive;\n\n    if (payload && payload.type === 'takeGlobalCursor') {\n        zoomActive = payload.key === 'dataZoomSelect'\n            ? payload.dataZoomSelectActive : false;\n    }\n\n    view._isZoomActive = zoomActive;\n\n    featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal');\n\n    var brushTargetManager = new BrushTargetManager(\n        retrieveAxisSetting(featureModel.option), ecModel, {include: ['grid']}\n    );\n\n    view._brushController\n        .setPanels(brushTargetManager.makePanelOpts(api, function (targetInfo) {\n            return (targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared)\n                ? 'lineX'\n                : (!targetInfo.xAxisDeclared && targetInfo.yAxisDeclared)\n                ? 'lineY'\n                : 'rect';\n        }))\n        .enableBrush(\n            zoomActive\n            ? {\n                brushType: 'auto',\n                brushStyle: {\n                    // FIXME user customized?\n                    lineWidth: 0,\n                    fill: 'rgba(0,0,0,0.2)'\n                }\n            }\n            : false\n        );\n}\n\n\nfeatureManager.register('dataZoom', DataZoom);\n\n\n// Create special dataZoom option for select\n// FIXME consider the case of merge option, where axes options are not exists.\necharts.registerPreprocessor(function (option) {\n    if (!option) {\n        return;\n    }\n\n    var dataZoomOpts = option.dataZoom || (option.dataZoom = []);\n    if (!zrUtil.isArray(dataZoomOpts)) {\n        option.dataZoom = dataZoomOpts = [dataZoomOpts];\n    }\n\n    var toolboxOpt = option.toolbox;\n    if (toolboxOpt) {\n        // Assume there is only one toolbox\n        if (zrUtil.isArray(toolboxOpt)) {\n            toolboxOpt = toolboxOpt[0];\n        }\n\n        if (toolboxOpt && toolboxOpt.feature) {\n            var dataZoomOpt = toolboxOpt.feature.dataZoom;\n            // FIXME: If add dataZoom when setOption in merge mode,\n            // no axis info to be added. See `test/dataZoom-extreme.html`\n            addForAxis('xAxis', dataZoomOpt);\n            addForAxis('yAxis', dataZoomOpt);\n        }\n    }\n\n    function addForAxis(axisName, dataZoomOpt) {\n        if (!dataZoomOpt) {\n            return;\n        }\n\n        // Try not to modify model, because it is not merged yet.\n        var axisIndicesName = axisName + 'Index';\n        var givenAxisIndices = dataZoomOpt[axisIndicesName];\n        if (givenAxisIndices != null\n            && givenAxisIndices !== 'all'\n            && !zrUtil.isArray(givenAxisIndices)\n        ) {\n            givenAxisIndices = (givenAxisIndices === false || givenAxisIndices === 'none') ? [] : [givenAxisIndices];\n        }\n\n        forEachComponent(axisName, function (axisOpt, axisIndex) {\n            if (givenAxisIndices != null\n                && givenAxisIndices !== 'all'\n                && zrUtil.indexOf(givenAxisIndices, axisIndex) === -1\n            ) {\n                return;\n            }\n            var newOpt = {\n                type: 'select',\n                $fromToolbox: true,\n                // Default to be filter\n                filterMode: dataZoomOpt.filterMode || 'filter',\n                // Id for merge mapping.\n                id: DATA_ZOOM_ID_BASE + axisName + axisIndex\n            };\n            // FIXME\n            // Only support one axis now.\n            newOpt[axisIndicesName] = axisIndex;\n            dataZoomOpts.push(newOpt);\n        });\n    }\n\n    function forEachComponent(mainType, cb) {\n        var opts = option[mainType];\n        if (!zrUtil.isArray(opts)) {\n            opts = opts ? [opts] : [];\n        }\n        each(opts, cb);\n    }\n});\n\nexport default DataZoom;","/*\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\nimport * as echarts from '../../../echarts';\nimport * as history from '../../dataZoom/history';\nimport lang from '../../../lang';\nimport * as featureManager from '../featureManager';\n\nvar restoreLang = lang.toolbox.restore;\n\nfunction Restore(model) {\n    this.model = model;\n}\n\nRestore.defaultOption = {\n    show: true,\n    /* eslint-disable */\n    icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5',\n    /* eslint-enable */\n    title: restoreLang.title\n};\n\nvar proto = Restore.prototype;\n\nproto.onclick = function (ecModel, api, type) {\n    history.clear(ecModel);\n\n    api.dispatchAction({\n        type: 'restore',\n        from: this.uid\n    });\n};\n\nfeatureManager.register('restore', Restore);\n\necharts.registerAction(\n    {type: 'restore', event: 'restore', update: 'prepareAndUpdate'},\n    function (payload, ecModel) {\n        ecModel.resetOption('recreate');\n    }\n);\n\nexport default Restore;","/*\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\nimport './toolbox/ToolboxModel';\nimport './toolbox/ToolboxView';\nimport './toolbox/feature/SaveAsImage';\nimport './toolbox/feature/MagicType';\nimport './toolbox/feature/DataView';\nimport './toolbox/feature/DataZoom';\nimport './toolbox/feature/Restore';","/*\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\nimport * as echarts from '../../echarts';\n\nexport default echarts.extendComponentModel({\n\n    type: 'tooltip',\n\n    dependencies: ['axisPointer'],\n\n    defaultOption: {\n        zlevel: 0,\n\n        z: 60,\n\n        show: true,\n\n        // tooltip主体内容\n        showContent: true,\n\n        // 'trigger' only works on coordinate system.\n        // 'item' | 'axis' | 'none'\n        trigger: 'item',\n\n        // 'click' | 'mousemove' | 'none'\n        triggerOn: 'mousemove|click',\n\n        alwaysShowContent: false,\n\n        displayMode: 'single', // 'single' | 'multipleByCoordSys'\n\n        renderMode: 'auto', // 'auto' | 'html' | 'richText'\n        // 'auto': use html by default, and use non-html if `document` is not defined\n        // 'html': use html for tooltip\n        // 'richText': use canvas, svg, and etc. for tooltip\n\n        // 位置 {Array} | {Function}\n        // position: null\n        // Consider triggered from axisPointer handle, verticalAlign should be 'middle'\n        // align: null,\n        // verticalAlign: null,\n\n        // 是否约束 content 在 viewRect 中。默认 false 是为了兼容以前版本。\n        confine: false,\n\n        // 内容格式器：{string}（Template） ¦ {Function}\n        // formatter: null\n\n        showDelay: 0,\n\n        // 隐藏延迟，单位ms\n        hideDelay: 100,\n\n        // 动画变换时间，单位s\n        transitionDuration: 0.4,\n\n        enterable: false,\n\n        // 提示背景颜色，默认为透明度为0.7的黑色\n        backgroundColor: 'rgba(50,50,50,0.7)',\n\n        // 提示边框颜色\n        borderColor: '#333',\n\n        // 提示边框圆角，单位px，默认为4\n        borderRadius: 4,\n\n        // 提示边框线宽，单位px，默认为0（无边框）\n        borderWidth: 0,\n\n        // 提示内边距，单位px，默认各方向内边距为5，\n        // 接受数组分别设定上右下左边距，同css\n        padding: 5,\n\n        // Extra css text\n        extraCssText: '',\n\n        // 坐标轴指示器，坐标轴触发有效\n        axisPointer: {\n            // 默认为直线\n            // 可选为：'line' | 'shadow' | 'cross'\n            type: 'line',\n\n            // type 为 line 的时候有效，指定 tooltip line 所在的轴，可选\n            // 可选 'x' | 'y' | 'angle' | 'radius' | 'auto'\n            // 默认 'auto'，会选择类型为 category 的轴，对于双数值轴，笛卡尔坐标系会默认选择 x 轴\n            // 极坐标系会默认选择 angle 轴\n            axis: 'auto',\n\n            animation: 'auto',\n            animationDurationUpdate: 200,\n            animationEasingUpdate: 'exponentialOut',\n\n            crossStyle: {\n                color: '#999',\n                width: 1,\n                type: 'dashed',\n\n                // TODO formatter\n                textStyle: {}\n            }\n\n            // lineStyle and shadowStyle should not be specified here,\n            // otherwise it will always override those styles on option.axisPointer.\n        },\n        textStyle: {\n            color: '#fff',\n            fontSize: 14\n        }\n    }\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as zrColor from 'zrender/src/tool/color';\nimport * as eventUtil from 'zrender/src/core/event';\nimport env from 'zrender/src/core/env';\nimport * as formatUtil from '../../util/format';\n\nvar each = zrUtil.each;\nvar toCamelCase = formatUtil.toCamelCase;\n\nvar vendors = ['', '-webkit-', '-moz-', '-o-'];\n\nvar gCssText = 'position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;';\n\n/**\n * @param {number} duration\n * @return {string}\n * @inner\n */\nfunction assembleTransition(duration) {\n    var transitionCurve = 'cubic-bezier(0.23, 1, 0.32, 1)';\n    var transitionText = 'left ' + duration + 's ' + transitionCurve + ','\n                        + 'top ' + duration + 's ' + transitionCurve;\n    return zrUtil.map(vendors, function (vendorPrefix) {\n        return vendorPrefix + 'transition:' + transitionText;\n    }).join(';');\n}\n\n/**\n * @param {Object} textStyle\n * @return {string}\n * @inner\n */\nfunction assembleFont(textStyleModel) {\n    var cssText = [];\n\n    var fontSize = textStyleModel.get('fontSize');\n    var color = textStyleModel.getTextColor();\n\n    color && cssText.push('color:' + color);\n\n    cssText.push('font:' + textStyleModel.getFont());\n\n    fontSize\n        && cssText.push('line-height:' + Math.round(fontSize * 3 / 2) + 'px');\n\n    each(['decoration', 'align'], function (name) {\n        var val = textStyleModel.get(name);\n        val && cssText.push('text-' + name + ':' + val);\n    });\n\n    return cssText.join(';');\n}\n\n/**\n * @param {Object} tooltipModel\n * @return {string}\n * @inner\n */\nfunction assembleCssText(tooltipModel) {\n\n    var cssText = [];\n\n    var transitionDuration = tooltipModel.get('transitionDuration');\n    var backgroundColor = tooltipModel.get('backgroundColor');\n    var textStyleModel = tooltipModel.getModel('textStyle');\n    var padding = tooltipModel.get('padding');\n\n    // Animation transition. Do not animate when transitionDuration is 0.\n    transitionDuration\n        && cssText.push(assembleTransition(transitionDuration));\n\n    if (backgroundColor) {\n        if (env.canvasSupported) {\n            cssText.push('background-Color:' + backgroundColor);\n        }\n        else {\n            // for ie\n            cssText.push(\n                'background-Color:#' + zrColor.toHex(backgroundColor)\n            );\n            cssText.push('filter:alpha(opacity=70)');\n        }\n    }\n\n    // Border style\n    each(['width', 'color', 'radius'], function (name) {\n        var borderName = 'border-' + name;\n        var camelCase = toCamelCase(borderName);\n        var val = tooltipModel.get(camelCase);\n        val != null\n            && cssText.push(borderName + ':' + val + (name === 'color' ? '' : 'px'));\n    });\n\n    // Text style\n    cssText.push(assembleFont(textStyleModel));\n\n    // Padding\n    if (padding != null) {\n        cssText.push('padding:' + formatUtil.normalizeCssArray(padding).join('px ') + 'px');\n    }\n\n    return cssText.join(';') + ';';\n}\n\n/**\n * @alias module:echarts/component/tooltip/TooltipContent\n * @constructor\n */\nfunction TooltipContent(container, api) {\n    if (env.wxa) {\n        return null;\n    }\n\n    var el = document.createElement('div');\n    var zr = this._zr = api.getZr();\n\n    this.el = el;\n\n    this._x = api.getWidth() / 2;\n    this._y = api.getHeight() / 2;\n\n    container.appendChild(el);\n\n    this._container = container;\n\n    this._show = false;\n\n    /**\n     * @private\n     */\n    this._hideTimeout;\n\n    // FIXME\n    // Is it needed to trigger zr event manually if\n    // the browser do not support `pointer-events: none`.\n\n    var self = this;\n    el.onmouseenter = function () {\n        // clear the timeout in hideLater and keep showing tooltip\n        if (self._enterable) {\n            clearTimeout(self._hideTimeout);\n            self._show = true;\n        }\n        self._inContent = true;\n    };\n    el.onmousemove = function (e) {\n        e = e || window.event;\n        if (!self._enterable) {\n            // `pointer-events: none` is set to tooltip content div\n            // if `enterable` is set as `false`, and `el.onmousemove`\n            // can not be triggered. But in browser that do not\n            // support `pointer-events`, we need to do this:\n            // Try trigger zrender event to avoid mouse\n            // in and out shape too frequently\n            var handler = zr.handler;\n            eventUtil.normalizeEvent(container, e, true);\n            handler.dispatch('mousemove', e);\n        }\n    };\n    el.onmouseleave = function () {\n        if (self._enterable) {\n            if (self._show) {\n                self.hideLater(self._hideDelay);\n            }\n        }\n        self._inContent = false;\n    };\n}\n\nTooltipContent.prototype = {\n\n    constructor: TooltipContent,\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    _enterable: true,\n\n    /**\n     * Update when tooltip is rendered\n     */\n    update: function () {\n        // FIXME\n        // Move this logic to ec main?\n        var container = this._container;\n        var stl = container.currentStyle\n            || document.defaultView.getComputedStyle(container);\n        var domStyle = container.style;\n        if (domStyle.position !== 'absolute' && stl.position !== 'absolute') {\n            domStyle.position = 'relative';\n        }\n        // Hide the tooltip\n        // PENDING\n        // this.hide();\n    },\n\n    show: function (tooltipModel) {\n        clearTimeout(this._hideTimeout);\n        var el = this.el;\n\n        el.style.cssText = gCssText + assembleCssText(tooltipModel)\n            // Because of the reason described in:\n            // http://stackoverflow.com/questions/21125587/css3-transition-not-working-in-chrome-anymore\n            // we should set initial value to `left` and `top`.\n            + ';left:' + this._x + 'px;top:' + this._y + 'px;'\n            + (tooltipModel.get('extraCssText') || '');\n\n        el.style.display = el.innerHTML ? 'block' : 'none';\n\n        // If mouse occsionally move over the tooltip, a mouseout event will be\n        // triggered by canvas, and cuase some unexpectable result like dragging\n        // stop, \"unfocusAdjacency\". Here `pointer-events: none` is used to solve\n        // it. Although it is not suppored by IE8~IE10, fortunately it is a rare\n        // scenario.\n        el.style.pointerEvents = this._enterable ? 'auto' : 'none';\n\n        this._show = true;\n    },\n\n    setContent: function (content) {\n        this.el.innerHTML = content == null ? '' : content;\n    },\n\n    setEnterable: function (enterable) {\n        this._enterable = enterable;\n    },\n\n    getSize: function () {\n        var el = this.el;\n        return [el.clientWidth, el.clientHeight];\n    },\n\n    moveTo: function (x, y) {\n        // xy should be based on canvas root. But tooltipContent is\n        // the sibling of canvas root. So padding of ec container\n        // should be considered here.\n        var zr = this._zr;\n        var viewportRootOffset;\n        if (zr && zr.painter && (viewportRootOffset = zr.painter.getViewportRootOffset())) {\n            x += viewportRootOffset.offsetLeft;\n            y += viewportRootOffset.offsetTop;\n        }\n\n        var style = this.el.style;\n        style.left = x + 'px';\n        style.top = y + 'px';\n\n        this._x = x;\n        this._y = y;\n    },\n\n    hide: function () {\n        this.el.style.display = 'none';\n        this._show = false;\n    },\n\n    hideLater: function (time) {\n        if (this._show && !(this._inContent && this._enterable)) {\n            if (time) {\n                this._hideDelay = time;\n                // Set show false to avoid invoke hideLater mutiple times\n                this._show = false;\n                this._hideTimeout = setTimeout(zrUtil.bind(this.hide, this), time);\n            }\n            else {\n                this.hide();\n            }\n        }\n    },\n\n    isShow: function () {\n        return this._show;\n    },\n\n    getOuterSize: function () {\n        var width = this.el.clientWidth;\n        var height = this.el.clientHeight;\n\n        // Consider browser compatibility.\n        // IE8 does not support getComputedStyle.\n        if (document.defaultView && document.defaultView.getComputedStyle) {\n            var stl = document.defaultView.getComputedStyle(this.el);\n            if (stl) {\n                width += parseInt(stl.borderLeftWidth, 10) + parseInt(stl.borderRightWidth, 10);\n                height += parseInt(stl.borderTopWidth, 10) + parseInt(stl.borderBottomWidth, 10);\n            }\n        }\n\n        return {width: width, height: height};\n    }\n};\n\nexport default TooltipContent;\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\nimport * as zrUtil from 'zrender/src/core/util';\n// import Group from 'zrender/src/container/Group';\nimport Text from 'zrender/src/graphic/Text';\n\n/**\n * @alias module:echarts/component/tooltip/TooltipRichContent\n * @constructor\n */\nfunction TooltipRichContent(api) {\n\n    this._zr = api.getZr();\n\n    this._show = false;\n\n    /**\n     * @private\n     */\n    this._hideTimeout;\n}\n\nTooltipRichContent.prototype = {\n\n    constructor: TooltipRichContent,\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    _enterable: true,\n\n    /**\n     * Update when tooltip is rendered\n     */\n    update: function () {\n        // noop\n    },\n\n    show: function (tooltipModel) {\n        if (this._hideTimeout) {\n            clearTimeout(this._hideTimeout);\n        }\n\n        this.el.attr('show', true);\n        this._show = true;\n    },\n\n    /**\n     * Set tooltip content\n     *\n     * @param {string} content rich text string of content\n     * @param {Object} markerRich rich text style\n     * @param {Object} tooltipModel tooltip model\n     */\n    setContent: function (content, markerRich, tooltipModel) {\n        if (this.el) {\n            this._zr.remove(this.el);\n        }\n\n        var markers = {};\n        var text = content;\n        var prefix = '{marker';\n        var suffix = '|}';\n        var startId = text.indexOf(prefix);\n        while (startId >= 0) {\n            var endId = text.indexOf(suffix);\n            var name = text.substr(startId + prefix.length, endId - startId - prefix.length);\n            if (name.indexOf('sub') > -1) {\n                markers['marker' + name] = {\n                    textWidth: 4,\n                    textHeight: 4,\n                    textBorderRadius: 2,\n                    textBackgroundColor: markerRich[name],\n                    // TODO: textOffset is not implemented for rich text\n                    textOffset: [3, 0]\n                };\n            }\n            else {\n                markers['marker' + name] = {\n                    textWidth: 10,\n                    textHeight: 10,\n                    textBorderRadius: 5,\n                    textBackgroundColor: markerRich[name]\n                };\n            }\n\n            text = text.substr(endId + 1);\n            startId = text.indexOf('{marker');\n        }\n\n        this.el = new Text({\n            style: {\n                rich: markers,\n                text: content,\n                textLineHeight: 20,\n                textBackgroundColor: tooltipModel.get('backgroundColor'),\n                textBorderRadius: tooltipModel.get('borderRadius'),\n                textFill: tooltipModel.get('textStyle.color'),\n                textPadding: tooltipModel.get('padding')\n            },\n            z: tooltipModel.get('z')\n        });\n        this._zr.add(this.el);\n\n        var self = this;\n        this.el.on('mouseover', function () {\n            // clear the timeout in hideLater and keep showing tooltip\n            if (self._enterable) {\n                clearTimeout(self._hideTimeout);\n                self._show = true;\n            }\n            self._inContent = true;\n        });\n        this.el.on('mouseout', function () {\n            if (self._enterable) {\n                if (self._show) {\n                    self.hideLater(self._hideDelay);\n                }\n            }\n            self._inContent = false;\n        });\n    },\n\n    setEnterable: function (enterable) {\n        this._enterable = enterable;\n    },\n\n    getSize: function () {\n        var bounding = this.el.getBoundingRect();\n        return [bounding.width, bounding.height];\n    },\n\n    moveTo: function (x, y) {\n        if (this.el) {\n            this.el.attr('position', [x, y]);\n        }\n    },\n\n    hide: function () {\n        if (this.el) {\n            this.el.hide();\n        }\n        this._show = false;\n    },\n\n    hideLater: function (time) {\n        if (this._show && !(this._inContent && this._enterable)) {\n            if (time) {\n                this._hideDelay = time;\n                // Set show false to avoid invoke hideLater mutiple times\n                this._show = false;\n                this._hideTimeout = setTimeout(zrUtil.bind(this.hide, this), time);\n            }\n            else {\n                this.hide();\n            }\n        }\n    },\n\n    isShow: function () {\n        return this._show;\n    },\n\n    getOuterSize: function () {\n        var size = this.getSize();\n        return {\n            width: size[0],\n            height: size[1]\n        };\n    }\n};\n\nexport default TooltipRichContent;\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport env from 'zrender/src/core/env';\nimport TooltipContent from './TooltipContent';\nimport TooltipRichContent from './TooltipRichContent';\nimport * as formatUtil from '../../util/format';\nimport * as numberUtil from '../../util/number';\nimport * as graphic from '../../util/graphic';\nimport findPointFromSeries from '../axisPointer/findPointFromSeries';\nimport * as layoutUtil from '../../util/layout';\nimport Model from '../../model/Model';\nimport * as globalListener from '../axisPointer/globalListener';\nimport * as axisHelper from '../../coord/axisHelper';\nimport * as axisPointerViewHelper from '../axisPointer/viewHelper';\nimport { getTooltipRenderMode } from '../../util/model';\n\nvar bind = zrUtil.bind;\nvar each = zrUtil.each;\nvar parsePercent = numberUtil.parsePercent;\n\nvar proxyRect = new graphic.Rect({\n    shape: {x: -1, y: -1, width: 2, height: 2}\n});\n\nexport default echarts.extendComponentView({\n\n    type: 'tooltip',\n\n    init: function (ecModel, api) {\n        if (env.node) {\n            return;\n        }\n\n        var tooltipModel = ecModel.getComponent('tooltip');\n        var renderMode = tooltipModel.get('renderMode');\n        this._renderMode = getTooltipRenderMode(renderMode);\n\n        var tooltipContent;\n        if (this._renderMode === 'html') {\n            tooltipContent = new TooltipContent(api.getDom(), api);\n            this._newLine = '<br/>';\n        }\n        else {\n            tooltipContent = new TooltipRichContent(api);\n            this._newLine = '\\n';\n        }\n\n        this._tooltipContent = tooltipContent;\n    },\n\n    render: function (tooltipModel, ecModel, api) {\n        if (env.node) {\n            return;\n        }\n\n        // Reset\n        this.group.removeAll();\n\n        /**\n         * @private\n         * @type {module:echarts/component/tooltip/TooltipModel}\n         */\n        this._tooltipModel = tooltipModel;\n\n        /**\n         * @private\n         * @type {module:echarts/model/Global}\n         */\n        this._ecModel = ecModel;\n\n        /**\n         * @private\n         * @type {module:echarts/ExtensionAPI}\n         */\n        this._api = api;\n\n        /**\n         * Should be cleaned when render.\n         * @private\n         * @type {Array.<Array.<Object>>}\n         */\n        this._lastDataByCoordSys = null;\n\n        /**\n         * @private\n         * @type {boolean}\n         */\n        this._alwaysShowContent = tooltipModel.get('alwaysShowContent');\n\n        var tooltipContent = this._tooltipContent;\n        tooltipContent.update();\n        tooltipContent.setEnterable(tooltipModel.get('enterable'));\n\n        this._initGlobalListener();\n\n        this._keepShow();\n    },\n\n    _initGlobalListener: function () {\n        var tooltipModel = this._tooltipModel;\n        var triggerOn = tooltipModel.get('triggerOn');\n\n        globalListener.register(\n            'itemTooltip',\n            this._api,\n            bind(function (currTrigger, e, dispatchAction) {\n                // If 'none', it is not controlled by mouse totally.\n                if (triggerOn !== 'none') {\n                    if (triggerOn.indexOf(currTrigger) >= 0) {\n                        this._tryShow(e, dispatchAction);\n                    }\n                    else if (currTrigger === 'leave') {\n                        this._hide(dispatchAction);\n                    }\n                }\n            }, this)\n        );\n    },\n\n    _keepShow: function () {\n        var tooltipModel = this._tooltipModel;\n        var ecModel = this._ecModel;\n        var api = this._api;\n\n        // Try to keep the tooltip show when refreshing\n        if (this._lastX != null\n            && this._lastY != null\n            // When user is willing to control tooltip totally using API,\n            // self.manuallyShowTip({x, y}) might cause tooltip hide,\n            // which is not expected.\n            && tooltipModel.get('triggerOn') !== 'none'\n        ) {\n            var self = this;\n            clearTimeout(this._refreshUpdateTimeout);\n            this._refreshUpdateTimeout = setTimeout(function () {\n                // Show tip next tick after other charts are rendered\n                // In case highlight action has wrong result\n                // FIXME\n                !api.isDisposed() && self.manuallyShowTip(tooltipModel, ecModel, api, {\n                    x: self._lastX,\n                    y: self._lastY\n                });\n            });\n        }\n    },\n\n    /**\n     * Show tip manually by\n     * dispatchAction({\n     *     type: 'showTip',\n     *     x: 10,\n     *     y: 10\n     * });\n     * Or\n     * dispatchAction({\n     *      type: 'showTip',\n     *      seriesIndex: 0,\n     *      dataIndex or dataIndexInside or name\n     * });\n     *\n     *  TODO Batch\n     */\n    manuallyShowTip: function (tooltipModel, ecModel, api, payload) {\n        if (payload.from === this.uid || env.node) {\n            return;\n        }\n\n        var dispatchAction = makeDispatchAction(payload, api);\n\n        // Reset ticket\n        this._ticket = '';\n\n        // When triggered from axisPointer.\n        var dataByCoordSys = payload.dataByCoordSys;\n\n        if (payload.tooltip && payload.x != null && payload.y != null) {\n            var el = proxyRect;\n            el.position = [payload.x, payload.y];\n            el.update();\n            el.tooltip = payload.tooltip;\n            // Manually show tooltip while view is not using zrender elements.\n            this._tryShow({\n                offsetX: payload.x,\n                offsetY: payload.y,\n                target: el\n            }, dispatchAction);\n        }\n        else if (dataByCoordSys) {\n            this._tryShow({\n                offsetX: payload.x,\n                offsetY: payload.y,\n                position: payload.position,\n                event: {},\n                dataByCoordSys: payload.dataByCoordSys,\n                tooltipOption: payload.tooltipOption\n            }, dispatchAction);\n        }\n        else if (payload.seriesIndex != null) {\n\n            if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) {\n                return;\n            }\n\n            var pointInfo = findPointFromSeries(payload, ecModel);\n            var cx = pointInfo.point[0];\n            var cy = pointInfo.point[1];\n            if (cx != null && cy != null) {\n                this._tryShow({\n                    offsetX: cx,\n                    offsetY: cy,\n                    position: payload.position,\n                    target: pointInfo.el,\n                    event: {}\n                }, dispatchAction);\n            }\n        }\n        else if (payload.x != null && payload.y != null) {\n            // FIXME\n            // should wrap dispatchAction like `axisPointer/globalListener` ?\n            api.dispatchAction({\n                type: 'updateAxisPointer',\n                x: payload.x,\n                y: payload.y\n            });\n\n            this._tryShow({\n                offsetX: payload.x,\n                offsetY: payload.y,\n                position: payload.position,\n                target: api.getZr().findHover(payload.x, payload.y).target,\n                event: {}\n            }, dispatchAction);\n        }\n    },\n\n    manuallyHideTip: function (tooltipModel, ecModel, api, payload) {\n        var tooltipContent = this._tooltipContent;\n\n        if (!this._alwaysShowContent && this._tooltipModel) {\n            tooltipContent.hideLater(this._tooltipModel.get('hideDelay'));\n        }\n\n        this._lastX = this._lastY = null;\n\n        if (payload.from !== this.uid) {\n            this._hide(makeDispatchAction(payload, api));\n        }\n    },\n\n    // Be compatible with previous design, that is, when tooltip.type is 'axis' and\n    // dispatchAction 'showTip' with seriesIndex and dataIndex will trigger axis pointer\n    // and tooltip.\n    _manuallyAxisShowTip: function (tooltipModel, ecModel, api, payload) {\n        var seriesIndex = payload.seriesIndex;\n        var dataIndex = payload.dataIndex;\n        var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;\n\n        if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) {\n            return;\n        }\n\n        var seriesModel = ecModel.getSeriesByIndex(seriesIndex);\n        if (!seriesModel) {\n            return;\n        }\n\n        var data = seriesModel.getData();\n        var tooltipModel = buildTooltipModel([\n            data.getItemModel(dataIndex),\n            seriesModel,\n            (seriesModel.coordinateSystem || {}).model,\n            tooltipModel\n        ]);\n\n        if (tooltipModel.get('trigger') !== 'axis') {\n            return;\n        }\n\n        api.dispatchAction({\n            type: 'updateAxisPointer',\n            seriesIndex: seriesIndex,\n            dataIndex: dataIndex,\n            position: payload.position\n        });\n\n        return true;\n    },\n\n    _tryShow: function (e, dispatchAction) {\n        var el = e.target;\n        var tooltipModel = this._tooltipModel;\n\n        if (!tooltipModel) {\n            return;\n        }\n\n        // Save mouse x, mouse y. So we can try to keep showing the tip if chart is refreshed\n        this._lastX = e.offsetX;\n        this._lastY = e.offsetY;\n\n        var dataByCoordSys = e.dataByCoordSys;\n        if (dataByCoordSys && dataByCoordSys.length) {\n            this._showAxisTooltip(dataByCoordSys, e);\n        }\n        // Always show item tooltip if mouse is on the element with dataIndex\n        else if (el && el.dataIndex != null) {\n            this._lastDataByCoordSys = null;\n            this._showSeriesItemTooltip(e, el, dispatchAction);\n        }\n        // Tooltip provided directly. Like legend.\n        else if (el && el.tooltip) {\n            this._lastDataByCoordSys = null;\n            this._showComponentItemTooltip(e, el, dispatchAction);\n        }\n        else {\n            this._lastDataByCoordSys = null;\n            this._hide(dispatchAction);\n        }\n    },\n\n    _showOrMove: function (tooltipModel, cb) {\n        // showDelay is used in this case: tooltip.enterable is set\n        // as true. User intent to move mouse into tooltip and click\n        // something. `showDelay` makes it easyer to enter the content\n        // but tooltip do not move immediately.\n        var delay = tooltipModel.get('showDelay');\n        cb = zrUtil.bind(cb, this);\n        clearTimeout(this._showTimout);\n        delay > 0\n            ? (this._showTimout = setTimeout(cb, delay))\n            : cb();\n    },\n\n    _showAxisTooltip: function (dataByCoordSys, e) {\n        var ecModel = this._ecModel;\n        var globalTooltipModel = this._tooltipModel;\n        var point = [e.offsetX, e.offsetY];\n        var singleDefaultHTML = [];\n        var singleParamsList = [];\n        var singleTooltipModel = buildTooltipModel([\n            e.tooltipOption,\n            globalTooltipModel\n        ]);\n\n        var renderMode = this._renderMode;\n        var newLine = this._newLine;\n\n        var markers = {};\n\n        each(dataByCoordSys, function (itemCoordSys) {\n            // var coordParamList = [];\n            // var coordDefaultHTML = [];\n            // var coordTooltipModel = buildTooltipModel([\n            //     e.tooltipOption,\n            //     itemCoordSys.tooltipOption,\n            //     ecModel.getComponent(itemCoordSys.coordSysMainType, itemCoordSys.coordSysIndex),\n            //     globalTooltipModel\n            // ]);\n            // var displayMode = coordTooltipModel.get('displayMode');\n            // var paramsList = displayMode === 'single' ? singleParamsList : [];\n\n            each(itemCoordSys.dataByAxis, function (item) {\n                var axisModel = ecModel.getComponent(item.axisDim + 'Axis', item.axisIndex);\n                var axisValue = item.value;\n                var seriesDefaultHTML = [];\n\n                if (!axisModel || axisValue == null) {\n                    return;\n                }\n\n                var valueLabel = axisPointerViewHelper.getValueLabel(\n                    axisValue, axisModel.axis, ecModel,\n                    item.seriesDataIndices,\n                    item.valueLabelOpt\n                );\n\n                zrUtil.each(item.seriesDataIndices, function (idxItem) {\n                    var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);\n                    var dataIndex = idxItem.dataIndexInside;\n                    var dataParams = series && series.getDataParams(dataIndex);\n                    dataParams.axisDim = item.axisDim;\n                    dataParams.axisIndex = item.axisIndex;\n                    dataParams.axisType = item.axisType;\n                    dataParams.axisId = item.axisId;\n                    dataParams.axisValue = axisHelper.getAxisRawValue(axisModel.axis, axisValue);\n                    dataParams.axisValueLabel = valueLabel;\n\n                    if (dataParams) {\n                        singleParamsList.push(dataParams);\n                        var seriesTooltip = series.formatTooltip(dataIndex, true, null, renderMode);\n\n                        var html;\n                        if (zrUtil.isObject(seriesTooltip)) {\n                            html = seriesTooltip.html;\n                            var newMarkers = seriesTooltip.markers;\n                            zrUtil.merge(markers, newMarkers);\n                        }\n                        else {\n                            html = seriesTooltip;\n                        }\n                        seriesDefaultHTML.push(html);\n                    }\n                });\n\n                // Default tooltip content\n                // FIXME\n                // (1) shold be the first data which has name?\n                // (2) themeRiver, firstDataIndex is array, and first line is unnecessary.\n                var firstLine = valueLabel;\n                if (renderMode !== 'html') {\n                    singleDefaultHTML.push(seriesDefaultHTML.join(newLine));\n                }\n                else {\n                    singleDefaultHTML.push(\n                        (firstLine ? formatUtil.encodeHTML(firstLine) + newLine : '')\n                        + seriesDefaultHTML.join(newLine)\n                    );\n                }\n            });\n        }, this);\n\n        // In most case, the second axis is shown upper than the first one.\n        singleDefaultHTML.reverse();\n        singleDefaultHTML = singleDefaultHTML.join(this._newLine + this._newLine);\n\n        var positionExpr = e.position;\n        this._showOrMove(singleTooltipModel, function () {\n            if (this._updateContentNotChangedOnAxis(dataByCoordSys)) {\n                this._updatePosition(\n                    singleTooltipModel,\n                    positionExpr,\n                    point[0], point[1],\n                    this._tooltipContent,\n                    singleParamsList\n                );\n            }\n            else {\n                this._showTooltipContent(\n                    singleTooltipModel, singleDefaultHTML, singleParamsList, Math.random(),\n                    point[0], point[1], positionExpr, undefined, markers\n                );\n            }\n        });\n\n        // Do not trigger events here, because this branch only be entered\n        // from dispatchAction.\n    },\n\n    _showSeriesItemTooltip: function (e, el, dispatchAction) {\n        var ecModel = this._ecModel;\n        // Use dataModel in element if possible\n        // Used when mouseover on a element like markPoint or edge\n        // In which case, the data is not main data in series.\n        var seriesIndex = el.seriesIndex;\n        var seriesModel = ecModel.getSeriesByIndex(seriesIndex);\n\n        // For example, graph link.\n        var dataModel = el.dataModel || seriesModel;\n        var dataIndex = el.dataIndex;\n        var dataType = el.dataType;\n        var data = dataModel.getData();\n\n        var tooltipModel = buildTooltipModel([\n            data.getItemModel(dataIndex),\n            dataModel,\n            seriesModel && (seriesModel.coordinateSystem || {}).model,\n            this._tooltipModel\n        ]);\n\n        var tooltipTrigger = tooltipModel.get('trigger');\n        if (tooltipTrigger != null && tooltipTrigger !== 'item') {\n            return;\n        }\n\n        var params = dataModel.getDataParams(dataIndex, dataType);\n        var seriesTooltip = dataModel.formatTooltip(dataIndex, false, dataType, this._renderMode);\n        var defaultHtml;\n        var markers;\n        if (zrUtil.isObject(seriesTooltip)) {\n            defaultHtml = seriesTooltip.html;\n            markers = seriesTooltip.markers;\n        }\n        else {\n            defaultHtml = seriesTooltip;\n            markers = null;\n        }\n\n        var asyncTicket = 'item_' + dataModel.name + '_' + dataIndex;\n\n        this._showOrMove(tooltipModel, function () {\n            this._showTooltipContent(\n                tooltipModel, defaultHtml, params, asyncTicket,\n                e.offsetX, e.offsetY, e.position, e.target, markers\n            );\n        });\n\n        // FIXME\n        // duplicated showtip if manuallyShowTip is called from dispatchAction.\n        dispatchAction({\n            type: 'showTip',\n            dataIndexInside: dataIndex,\n            dataIndex: data.getRawIndex(dataIndex),\n            seriesIndex: seriesIndex,\n            from: this.uid\n        });\n    },\n\n    _showComponentItemTooltip: function (e, el, dispatchAction) {\n        var tooltipOpt = el.tooltip;\n        if (typeof tooltipOpt === 'string') {\n            var content = tooltipOpt;\n            tooltipOpt = {\n                content: content,\n                // Fixed formatter\n                formatter: content\n            };\n        }\n        var subTooltipModel = new Model(tooltipOpt, this._tooltipModel, this._ecModel);\n        var defaultHtml = subTooltipModel.get('content');\n        var asyncTicket = Math.random();\n\n        // Do not check whether `trigger` is 'none' here, because `trigger`\n        // only works on cooridinate system. In fact, we have not found case\n        // that requires setting `trigger` nothing on component yet.\n\n        this._showOrMove(subTooltipModel, function () {\n            this._showTooltipContent(\n                subTooltipModel, defaultHtml, subTooltipModel.get('formatterParams') || {},\n                asyncTicket, e.offsetX, e.offsetY, e.position, el\n            );\n        });\n\n        // If not dispatch showTip, tip may be hide triggered by axis.\n        dispatchAction({\n            type: 'showTip',\n            from: this.uid\n        });\n    },\n\n    _showTooltipContent: function (\n        tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el, markers\n    ) {\n        // Reset ticket\n        this._ticket = '';\n\n        if (!tooltipModel.get('showContent') || !tooltipModel.get('show')) {\n            return;\n        }\n\n        var tooltipContent = this._tooltipContent;\n\n        var formatter = tooltipModel.get('formatter');\n        positionExpr = positionExpr || tooltipModel.get('position');\n        var html = defaultHtml;\n\n        if (formatter && typeof formatter === 'string') {\n            html = formatUtil.formatTpl(formatter, params, true);\n        }\n        else if (typeof formatter === 'function') {\n            var callback = bind(function (cbTicket, html) {\n                if (cbTicket === this._ticket) {\n                    tooltipContent.setContent(html, markers, tooltipModel);\n                    this._updatePosition(\n                        tooltipModel, positionExpr, x, y, tooltipContent, params, el\n                    );\n                }\n            }, this);\n            this._ticket = asyncTicket;\n            html = formatter(params, asyncTicket, callback);\n        }\n\n        tooltipContent.setContent(html, markers, tooltipModel);\n        tooltipContent.show(tooltipModel);\n\n        this._updatePosition(\n            tooltipModel, positionExpr, x, y, tooltipContent, params, el\n        );\n    },\n\n    /**\n     * @param  {string|Function|Array.<number>|Object} positionExpr\n     * @param  {number} x Mouse x\n     * @param  {number} y Mouse y\n     * @param  {boolean} confine Whether confine tooltip content in view rect.\n     * @param  {Object|<Array.<Object>} params\n     * @param  {module:zrender/Element} el target element\n     * @param  {module:echarts/ExtensionAPI} api\n     * @return {Array.<number>}\n     */\n    _updatePosition: function (tooltipModel, positionExpr, x, y, content, params, el) {\n        var viewWidth = this._api.getWidth();\n        var viewHeight = this._api.getHeight();\n        positionExpr = positionExpr || tooltipModel.get('position');\n\n        var contentSize = content.getSize();\n        var align = tooltipModel.get('align');\n        var vAlign = tooltipModel.get('verticalAlign');\n        var rect = el && el.getBoundingRect().clone();\n        el && rect.applyTransform(el.transform);\n\n        if (typeof positionExpr === 'function') {\n            // Callback of position can be an array or a string specify the position\n            positionExpr = positionExpr([x, y], params, content.el, rect, {\n                viewSize: [viewWidth, viewHeight],\n                contentSize: contentSize.slice()\n            });\n        }\n\n        if (zrUtil.isArray(positionExpr)) {\n            x = parsePercent(positionExpr[0], viewWidth);\n            y = parsePercent(positionExpr[1], viewHeight);\n        }\n        else if (zrUtil.isObject(positionExpr)) {\n            positionExpr.width = contentSize[0];\n            positionExpr.height = contentSize[1];\n            var layoutRect = layoutUtil.getLayoutRect(\n                positionExpr, {width: viewWidth, height: viewHeight}\n            );\n            x = layoutRect.x;\n            y = layoutRect.y;\n            align = null;\n            // When positionExpr is left/top/right/bottom,\n            // align and verticalAlign will not work.\n            vAlign = null;\n        }\n        // Specify tooltip position by string 'top' 'bottom' 'left' 'right' around graphic element\n        else if (typeof positionExpr === 'string' && el) {\n            var pos = calcTooltipPosition(\n                positionExpr, rect, contentSize\n            );\n            x = pos[0];\n            y = pos[1];\n        }\n        else {\n            var pos = refixTooltipPosition(\n                x, y, content, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20\n            );\n            x = pos[0];\n            y = pos[1];\n        }\n\n        align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === 'right' ? contentSize[0] : 0);\n        vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === 'bottom' ? contentSize[1] : 0);\n\n        if (tooltipModel.get('confine')) {\n            var pos = confineTooltipPosition(\n                x, y, content, viewWidth, viewHeight\n            );\n            x = pos[0];\n            y = pos[1];\n        }\n\n        content.moveTo(x, y);\n    },\n\n    // FIXME\n    // Should we remove this but leave this to user?\n    _updateContentNotChangedOnAxis: function (dataByCoordSys) {\n        var lastCoordSys = this._lastDataByCoordSys;\n        var contentNotChanged = !!lastCoordSys\n            && lastCoordSys.length === dataByCoordSys.length;\n\n        contentNotChanged && each(lastCoordSys, function (lastItemCoordSys, indexCoordSys) {\n            var lastDataByAxis = lastItemCoordSys.dataByAxis || {};\n            var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {};\n            var thisDataByAxis = thisItemCoordSys.dataByAxis || [];\n            contentNotChanged &= lastDataByAxis.length === thisDataByAxis.length;\n\n            contentNotChanged && each(lastDataByAxis, function (lastItem, indexAxis) {\n                var thisItem = thisDataByAxis[indexAxis] || {};\n                var lastIndices = lastItem.seriesDataIndices || [];\n                var newIndices = thisItem.seriesDataIndices || [];\n\n                contentNotChanged\n                    &= lastItem.value === thisItem.value\n                    && lastItem.axisType === thisItem.axisType\n                    && lastItem.axisId === thisItem.axisId\n                    && lastIndices.length === newIndices.length;\n\n                contentNotChanged && each(lastIndices, function (lastIdxItem, j) {\n                    var newIdxItem = newIndices[j];\n                    contentNotChanged\n                        &= lastIdxItem.seriesIndex === newIdxItem.seriesIndex\n                        && lastIdxItem.dataIndex === newIdxItem.dataIndex;\n                });\n            });\n        });\n\n        this._lastDataByCoordSys = dataByCoordSys;\n\n        return !!contentNotChanged;\n    },\n\n    _hide: function (dispatchAction) {\n        // Do not directly hideLater here, because this behavior may be prevented\n        // in dispatchAction when showTip is dispatched.\n\n        // FIXME\n        // duplicated hideTip if manuallyHideTip is called from dispatchAction.\n        this._lastDataByCoordSys = null;\n        dispatchAction({\n            type: 'hideTip',\n            from: this.uid\n        });\n    },\n\n    dispose: function (ecModel, api) {\n        if (env.node) {\n            return;\n        }\n        this._tooltipContent.hide();\n        globalListener.unregister('itemTooltip', api);\n    }\n});\n\n\n/**\n * @param {Array.<Object|module:echarts/model/Model>} modelCascade\n * From top to bottom. (the last one should be globalTooltipModel);\n */\nfunction buildTooltipModel(modelCascade) {\n    var resultModel = modelCascade.pop();\n    while (modelCascade.length) {\n        var tooltipOpt = modelCascade.pop();\n        if (tooltipOpt) {\n            if (Model.isInstance(tooltipOpt)) {\n                tooltipOpt = tooltipOpt.get('tooltip', true);\n            }\n            // In each data item tooltip can be simply write:\n            // {\n            //  value: 10,\n            //  tooltip: 'Something you need to know'\n            // }\n            if (typeof tooltipOpt === 'string') {\n                tooltipOpt = {formatter: tooltipOpt};\n            }\n            resultModel = new Model(tooltipOpt, resultModel, resultModel.ecModel);\n        }\n    }\n    return resultModel;\n}\n\nfunction makeDispatchAction(payload, api) {\n    return payload.dispatchAction || zrUtil.bind(api.dispatchAction, api);\n}\n\nfunction refixTooltipPosition(x, y, content, viewWidth, viewHeight, gapH, gapV) {\n    var size = content.getOuterSize();\n    var width = size.width;\n    var height = size.height;\n\n    if (gapH != null) {\n        if (x + width + gapH > viewWidth) {\n            x -= width + gapH;\n        }\n        else {\n            x += gapH;\n        }\n    }\n    if (gapV != null) {\n        if (y + height + gapV > viewHeight) {\n            y -= height + gapV;\n        }\n        else {\n            y += gapV;\n        }\n    }\n    return [x, y];\n}\n\nfunction confineTooltipPosition(x, y, content, viewWidth, viewHeight) {\n    var size = content.getOuterSize();\n    var width = size.width;\n    var height = size.height;\n\n    x = Math.min(x + width, viewWidth) - width;\n    y = Math.min(y + height, viewHeight) - height;\n    x = Math.max(x, 0);\n    y = Math.max(y, 0);\n\n    return [x, y];\n}\n\nfunction calcTooltipPosition(position, rect, contentSize) {\n    var domWidth = contentSize[0];\n    var domHeight = contentSize[1];\n    var gap = 5;\n    var x = 0;\n    var y = 0;\n    var rectWidth = rect.width;\n    var rectHeight = rect.height;\n    switch (position) {\n        case 'inside':\n            x = rect.x + rectWidth / 2 - domWidth / 2;\n            y = rect.y + rectHeight / 2 - domHeight / 2;\n            break;\n        case 'top':\n            x = rect.x + rectWidth / 2 - domWidth / 2;\n            y = rect.y - domHeight - gap;\n            break;\n        case 'bottom':\n            x = rect.x + rectWidth / 2 - domWidth / 2;\n            y = rect.y + rectHeight + gap;\n            break;\n        case 'left':\n            x = rect.x - domWidth - gap;\n            y = rect.y + rectHeight / 2 - domHeight / 2;\n            break;\n        case 'right':\n            x = rect.x + rectWidth + gap;\n            y = rect.y + rectHeight / 2 - domHeight / 2;\n    }\n    return [x, y];\n}\n\nfunction isCenterAlign(align) {\n    return align === 'center' || align === 'middle';\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// FIXME Better way to pack data in graphic element\n\nimport * as echarts from '../echarts';\n\nimport './axisPointer';\nimport './tooltip/TooltipModel';\nimport './tooltip/TooltipView';\n\n\n/**\n * @action\n * @property {string} type\n * @property {number} seriesIndex\n * @property {number} dataIndex\n * @property {number} [x]\n * @property {number} [y]\n */\necharts.registerAction(\n    {\n        type: 'showTip',\n        event: 'showTip',\n        update: 'tooltip:manuallyShowTip'\n    },\n    // noop\n    function () {}\n);\n\necharts.registerAction(\n    {\n        type: 'hideTip',\n        event: 'hideTip',\n        update: 'tooltip:manuallyHideTip'\n    },\n    // noop\n    function () {}\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar DEFAULT_TOOLBOX_BTNS = ['rect', 'polygon', 'keep', 'clear'];\n\nexport default function (option, isNew) {\n    var brushComponents = option && option.brush;\n    if (!zrUtil.isArray(brushComponents)) {\n        brushComponents = brushComponents ? [brushComponents] : [];\n    }\n\n    if (!brushComponents.length) {\n        return;\n    }\n\n    var brushComponentSpecifiedBtns = [];\n\n    zrUtil.each(brushComponents, function (brushOpt) {\n        var tbs = brushOpt.hasOwnProperty('toolbox')\n            ? brushOpt.toolbox : [];\n\n        if (tbs instanceof Array) {\n            brushComponentSpecifiedBtns = brushComponentSpecifiedBtns.concat(tbs);\n        }\n    });\n\n    var toolbox = option && option.toolbox;\n\n    if (zrUtil.isArray(toolbox)) {\n        toolbox = toolbox[0];\n    }\n    if (!toolbox) {\n        toolbox = {feature: {}};\n        option.toolbox = [toolbox];\n    }\n\n    var toolboxFeature = (toolbox.feature || (toolbox.feature = {}));\n    var toolboxBrush = toolboxFeature.brush || (toolboxFeature.brush = {});\n    var brushTypes = toolboxBrush.type || (toolboxBrush.type = []);\n\n    brushTypes.push.apply(brushTypes, brushComponentSpecifiedBtns);\n\n    removeDuplicate(brushTypes);\n\n    if (isNew && !brushTypes.length) {\n        brushTypes.push.apply(brushTypes, DEFAULT_TOOLBOX_BTNS);\n    }\n}\n\nfunction removeDuplicate(arr) {\n    var map = {};\n    zrUtil.each(arr, function (val) {\n        map[val] = 1;\n    });\n    arr.length = 0;\n    zrUtil.each(map, function (flag, val) {\n        arr.push(val);\n    });\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @file Visual solution, for consistent option specification.\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport VisualMapping from './VisualMapping';\n\nvar each = zrUtil.each;\n\nfunction hasKeys(obj) {\n    if (obj) {\n        for (var name in obj) {\n            if (obj.hasOwnProperty(name)) {\n                return true;\n            }\n        }\n    }\n}\n\n/**\n * @param {Object} option\n * @param {Array.<string>} stateList\n * @param {Function} [supplementVisualOption]\n * @return {Object} visualMappings <state, <visualType, module:echarts/visual/VisualMapping>>\n */\nexport function createVisualMappings(option, stateList, supplementVisualOption) {\n    var visualMappings = {};\n\n    each(stateList, function (state) {\n        var mappings = visualMappings[state] = createMappings();\n\n        each(option[state], function (visualData, visualType) {\n            if (!VisualMapping.isValidType(visualType)) {\n                return;\n            }\n            var mappingOption = {\n                type: visualType,\n                visual: visualData\n            };\n            supplementVisualOption && supplementVisualOption(mappingOption, state);\n            mappings[visualType] = new VisualMapping(mappingOption);\n\n            // Prepare a alpha for opacity, for some case that opacity\n            // is not supported, such as rendering using gradient color.\n            if (visualType === 'opacity') {\n                mappingOption = zrUtil.clone(mappingOption);\n                mappingOption.type = 'colorAlpha';\n                mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption);\n            }\n        });\n    });\n\n    return visualMappings;\n\n    function createMappings() {\n        var Creater = function () {};\n        // Make sure hidden fields will not be visited by\n        // object iteration (with hasOwnProperty checking).\n        Creater.prototype.__hidden = Creater.prototype;\n        var obj = new Creater();\n        return obj;\n    }\n}\n\n/**\n * @param {Object} thisOption\n * @param {Object} newOption\n * @param {Array.<string>} keys\n */\nexport function replaceVisualOption(thisOption, newOption, keys) {\n    // Visual attributes merge is not supported, otherwise it\n    // brings overcomplicated merge logic. See #2853. So if\n    // newOption has anyone of these keys, all of these keys\n    // will be reset. Otherwise, all keys remain.\n    var has;\n    zrUtil.each(keys, function (key) {\n        if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {\n            has = true;\n        }\n    });\n    has && zrUtil.each(keys, function (key) {\n        if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {\n            thisOption[key] = zrUtil.clone(newOption[key]);\n        }\n        else {\n            delete thisOption[key];\n        }\n    });\n}\n\n/**\n * @param {Array.<string>} stateList\n * @param {Object} visualMappings <state, Object.<visualType, module:echarts/visual/VisualMapping>>\n * @param {module:echarts/data/List} list\n * @param {Function} getValueState param: valueOrIndex, return: state.\n * @param {object} [scope] Scope for getValueState\n * @param {string} [dimension] Concrete dimension, if used.\n */\n// ???! handle brush?\nexport function applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) {\n    var visualTypesMap = {};\n    zrUtil.each(stateList, function (state) {\n        var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);\n        visualTypesMap[state] = visualTypes;\n    });\n\n    var dataIndex;\n\n    function getVisual(key) {\n        return data.getItemVisual(dataIndex, key);\n    }\n\n    function setVisual(key, value) {\n        data.setItemVisual(dataIndex, key, value);\n    }\n\n    if (dimension == null) {\n        data.each(eachItem);\n    }\n    else {\n        data.each([dimension], eachItem);\n    }\n\n    function eachItem(valueOrIndex, index) {\n        dataIndex = dimension == null ? valueOrIndex : index;\n\n        var rawDataItem = data.getRawDataItem(dataIndex);\n        // Consider performance\n        if (rawDataItem && rawDataItem.visualMap === false) {\n            return;\n        }\n\n        var valueState = getValueState.call(scope, valueOrIndex);\n        var mappings = visualMappings[valueState];\n        var visualTypes = visualTypesMap[valueState];\n\n        for (var i = 0, len = visualTypes.length; i < len; i++) {\n            var type = visualTypes[i];\n            mappings[type] && mappings[type].applyVisual(\n                valueOrIndex, getVisual, setVisual\n            );\n        }\n    }\n}\n\n/**\n * @param {module:echarts/data/List} data\n * @param {Array.<string>} stateList\n * @param {Object} visualMappings <state, Object.<visualType, module:echarts/visual/VisualMapping>>\n * @param {Function} getValueState param: valueOrIndex, return: state.\n * @param {number} [dim] dimension or dimension index.\n */\nexport function incrementalApplyVisual(stateList, visualMappings, getValueState, dim) {\n    var visualTypesMap = {};\n    zrUtil.each(stateList, function (state) {\n        var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);\n        visualTypesMap[state] = visualTypes;\n    });\n\n    function progress(params, data) {\n        if (dim != null) {\n            dim = data.getDimension(dim);\n        }\n\n        function getVisual(key) {\n            return data.getItemVisual(dataIndex, key);\n        }\n\n        function setVisual(key, value) {\n            data.setItemVisual(dataIndex, key, value);\n        }\n\n        var dataIndex;\n        while ((dataIndex = params.next()) != null) {\n            var rawDataItem = data.getRawDataItem(dataIndex);\n\n            // Consider performance\n            if (rawDataItem && rawDataItem.visualMap === false) {\n                continue;\n            }\n\n            var value = dim != null\n                ? data.get(dim, dataIndex, true)\n                : dataIndex;\n\n            var valueState = getValueState(value);\n            var mappings = visualMappings[valueState];\n            var visualTypes = visualTypesMap[valueState];\n\n            for (var i = 0, len = visualTypes.length; i < len; i++) {\n                var type = visualTypes[i];\n                mappings[type] && mappings[type].applyVisual(value, getVisual, setVisual);\n            }\n        }\n    }\n\n    return {progress: progress};\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\nimport * as polygonContain from 'zrender/src/contain/polygon';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport {linePolygonIntersect} from '../../util/graphic';\n\n// Key of the first level is brushType: `line`, `rect`, `polygon`.\n// Key of the second level is chart element type: `point`, `rect`.\n// See moudule:echarts/component/helper/BrushController\n// function param:\n//      {Object} itemLayout fetch from data.getItemLayout(dataIndex)\n//      {Object} selectors {point: selector, rect: selector, ...}\n//      {Object} area {range: [[], [], ..], boudingRect}\n// function return:\n//      {boolean} Whether in the given brush.\nvar selector = {\n    lineX: getLineSelectors(0),\n    lineY: getLineSelectors(1),\n    rect: {\n        point: function (itemLayout, selectors, area) {\n            return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]);\n        },\n        rect: function (itemLayout, selectors, area) {\n            return itemLayout && area.boundingRect.intersect(itemLayout);\n        }\n    },\n    polygon: {\n        point: function (itemLayout, selectors, area) {\n            return itemLayout\n                && area.boundingRect.contain(itemLayout[0], itemLayout[1])\n                && polygonContain.contain(area.range, itemLayout[0], itemLayout[1]);\n        },\n        rect: function (itemLayout, selectors, area) {\n            var points = area.range;\n\n            if (!itemLayout || points.length <= 1) {\n                return false;\n            }\n\n            var x = itemLayout.x;\n            var y = itemLayout.y;\n            var width = itemLayout.width;\n            var height = itemLayout.height;\n            var p = points[0];\n\n            if (polygonContain.contain(points, x, y)\n                || polygonContain.contain(points, x + width, y)\n                || polygonContain.contain(points, x, y + height)\n                || polygonContain.contain(points, x + width, y + height)\n                || BoundingRect.create(itemLayout).contain(p[0], p[1])\n                || linePolygonIntersect(x, y, x + width, y, points)\n                || linePolygonIntersect(x, y, x, y + height, points)\n                || linePolygonIntersect(x + width, y, x + width, y + height, points)\n                || linePolygonIntersect(x, y + height, x + width, y + height, points)\n            ) {\n                return true;\n            }\n        }\n    }\n};\n\nfunction getLineSelectors(xyIndex) {\n    var xy = ['x', 'y'];\n    var wh = ['width', 'height'];\n\n    return {\n        point: function (itemLayout, selectors, area) {\n            if (itemLayout) {\n                var range = area.range;\n                var p = itemLayout[xyIndex];\n                return inLineRange(p, range);\n            }\n        },\n        rect: function (itemLayout, selectors, area) {\n            if (itemLayout) {\n                var range = area.range;\n                var layoutRange = [\n                    itemLayout[xy[xyIndex]],\n                    itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]]\n                ];\n                layoutRange[1] < layoutRange[0] && layoutRange.reverse();\n                return inLineRange(layoutRange[0], range)\n                    || inLineRange(layoutRange[1], range)\n                    || inLineRange(range[0], layoutRange)\n                    || inLineRange(range[1], layoutRange);\n            }\n        }\n    };\n}\n\nfunction inLineRange(p, range) {\n    return range[0] <= p && p <= range[1];\n}\n\nexport default selector;\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport * as visualSolution from '../../visual/visualSolution';\nimport selector from './selector';\nimport * as throttleUtil from '../../util/throttle';\nimport BrushTargetManager from '../helper/BrushTargetManager';\n\nvar STATE_LIST = ['inBrush', 'outOfBrush'];\nvar DISPATCH_METHOD = '__ecBrushSelect';\nvar DISPATCH_FLAG = '__ecInBrushSelectEvent';\nvar PRIORITY_BRUSH = echarts.PRIORITY.VISUAL.BRUSH;\n\n/**\n * Layout for visual, the priority higher than other layout, and before brush visual.\n */\necharts.registerLayout(PRIORITY_BRUSH, function (ecModel, api, payload) {\n    ecModel.eachComponent({mainType: 'brush'}, function (brushModel) {\n\n        payload && payload.type === 'takeGlobalCursor' && brushModel.setBrushOption(\n            payload.key === 'brush' ? payload.brushOption : {brushType: false}\n        );\n\n        var brushTargetManager = brushModel.brushTargetManager = new BrushTargetManager(brushModel.option, ecModel);\n\n        brushTargetManager.setInputRanges(brushModel.areas, ecModel);\n    });\n});\n\n/**\n * Register the visual encoding if this modules required.\n */\necharts.registerVisual(PRIORITY_BRUSH, function (ecModel, api, payload) {\n\n    var brushSelected = [];\n    var throttleType;\n    var throttleDelay;\n\n    ecModel.eachComponent({mainType: 'brush'}, function (brushModel, brushIndex) {\n\n        var thisBrushSelected = {\n            brushId: brushModel.id,\n            brushIndex: brushIndex,\n            brushName: brushModel.name,\n            areas: zrUtil.clone(brushModel.areas),\n            selected: []\n        };\n        // Every brush component exists in event params, convenient\n        // for user to find by index.\n        brushSelected.push(thisBrushSelected);\n\n        var brushOption = brushModel.option;\n        var brushLink = brushOption.brushLink;\n        var linkedSeriesMap = [];\n        var selectedDataIndexForLink = [];\n        var rangeInfoBySeries = [];\n        var hasBrushExists = 0;\n\n        if (!brushIndex) { // Only the first throttle setting works.\n            throttleType = brushOption.throttleType;\n            throttleDelay = brushOption.throttleDelay;\n        }\n\n        // Add boundingRect and selectors to range.\n        var areas = zrUtil.map(brushModel.areas, function (area) {\n            return bindSelector(\n                zrUtil.defaults(\n                    {boundingRect: boundingRectBuilders[area.brushType](area)},\n                    area\n                )\n            );\n        });\n\n        var visualMappings = visualSolution.createVisualMappings(\n            brushModel.option, STATE_LIST, function (mappingOption) {\n                mappingOption.mappingMethod = 'fixed';\n            }\n        );\n\n        zrUtil.isArray(brushLink) && zrUtil.each(brushLink, function (seriesIndex) {\n            linkedSeriesMap[seriesIndex] = 1;\n        });\n\n        function linkOthers(seriesIndex) {\n            return brushLink === 'all' || linkedSeriesMap[seriesIndex];\n        }\n\n        // If no supported brush or no brush on the series,\n        // all visuals should be in original state.\n        function brushed(rangeInfoList) {\n            return !!rangeInfoList.length;\n        }\n\n        /**\n         * Logic for each series: (If the logic has to be modified one day, do it carefully!)\n         *\n         * ( brushed ┬ && ┬hasBrushExist ┬ && linkOthers  ) => StepA: ┬record, ┬ StepB: ┬visualByRecord.\n         *   !brushed┘    ├hasBrushExist ┤                            └nothing,┘        ├visualByRecord.\n         *                └!hasBrushExist┘                                              └nothing.\n         * ( !brushed  && ┬hasBrushExist ┬ && linkOthers  ) => StepA:  nothing,  StepB: ┬visualByRecord.\n         *                └!hasBrushExist┘                                              └nothing.\n         * ( brushed ┬ &&                     !linkOthers ) => StepA:  nothing,  StepB: ┬visualByCheck.\n         *   !brushed┘                                                                  └nothing.\n         * ( !brushed  &&                     !linkOthers ) => StepA:  nothing,  StepB:  nothing.\n         */\n\n        // Step A\n        ecModel.eachSeries(function (seriesModel, seriesIndex) {\n            var rangeInfoList = rangeInfoBySeries[seriesIndex] = [];\n\n            seriesModel.subType === 'parallel'\n                ? stepAParallel(seriesModel, seriesIndex, rangeInfoList)\n                : stepAOthers(seriesModel, seriesIndex, rangeInfoList);\n        });\n\n        function stepAParallel(seriesModel, seriesIndex) {\n            var coordSys = seriesModel.coordinateSystem;\n            hasBrushExists |= coordSys.hasAxisBrushed();\n\n            linkOthers(seriesIndex) && coordSys.eachActiveState(\n                seriesModel.getData(),\n                function (activeState, dataIndex) {\n                    activeState === 'active' && (selectedDataIndexForLink[dataIndex] = 1);\n                }\n            );\n        }\n\n        function stepAOthers(seriesModel, seriesIndex, rangeInfoList) {\n            var selectorsByBrushType = getSelectorsByBrushType(seriesModel);\n            if (!selectorsByBrushType || brushModelNotControll(brushModel, seriesIndex)) {\n                return;\n            }\n\n            zrUtil.each(areas, function (area) {\n                selectorsByBrushType[area.brushType]\n                    && brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel)\n                    && rangeInfoList.push(area);\n                hasBrushExists |= brushed(rangeInfoList);\n            });\n\n            if (linkOthers(seriesIndex) && brushed(rangeInfoList)) {\n                var data = seriesModel.getData();\n                data.each(function (dataIndex) {\n                    if (checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex)) {\n                        selectedDataIndexForLink[dataIndex] = 1;\n                    }\n                });\n            }\n        }\n\n        // Step B\n        ecModel.eachSeries(function (seriesModel, seriesIndex) {\n            var seriesBrushSelected = {\n                seriesId: seriesModel.id,\n                seriesIndex: seriesIndex,\n                seriesName: seriesModel.name,\n                dataIndex: []\n            };\n            // Every series exists in event params, convenient\n            // for user to find series by seriesIndex.\n            thisBrushSelected.selected.push(seriesBrushSelected);\n\n            var selectorsByBrushType = getSelectorsByBrushType(seriesModel);\n            var rangeInfoList = rangeInfoBySeries[seriesIndex];\n\n            var data = seriesModel.getData();\n            var getValueState = linkOthers(seriesIndex)\n                ? function (dataIndex) {\n                    return selectedDataIndexForLink[dataIndex]\n                        ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush')\n                        : 'outOfBrush';\n                }\n                : function (dataIndex) {\n                    return checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex)\n                        ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush')\n                        : 'outOfBrush';\n                };\n\n            // If no supported brush or no brush, all visuals are in original state.\n            (linkOthers(seriesIndex) ? hasBrushExists : brushed(rangeInfoList))\n                && visualSolution.applyVisual(\n                    STATE_LIST, visualMappings, data, getValueState\n                );\n        });\n\n    });\n\n    dispatchAction(api, throttleType, throttleDelay, brushSelected, payload);\n});\n\nfunction dispatchAction(api, throttleType, throttleDelay, brushSelected, payload) {\n    // This event will not be triggered when `setOpion`, otherwise dead lock may\n    // triggered when do `setOption` in event listener, which we do not find\n    // satisfactory way to solve yet. Some considered resolutions:\n    // (a) Diff with prevoius selected data ant only trigger event when changed.\n    // But store previous data and diff precisely (i.e., not only by dataIndex, but\n    // also detect value changes in selected data) might bring complexity or fragility.\n    // (b) Use spectial param like `silent` to suppress event triggering.\n    // But such kind of volatile param may be weird in `setOption`.\n    if (!payload) {\n        return;\n    }\n\n    var zr = api.getZr();\n    if (zr[DISPATCH_FLAG]) {\n        return;\n    }\n\n    if (!zr[DISPATCH_METHOD]) {\n        zr[DISPATCH_METHOD] = doDispatch;\n    }\n\n    var fn = throttleUtil.createOrUpdate(zr, DISPATCH_METHOD, throttleDelay, throttleType);\n\n    fn(api, brushSelected);\n}\n\nfunction doDispatch(api, brushSelected) {\n    if (!api.isDisposed()) {\n        var zr = api.getZr();\n        zr[DISPATCH_FLAG] = true;\n        api.dispatchAction({\n            type: 'brushSelect',\n            batch: brushSelected\n        });\n        zr[DISPATCH_FLAG] = false;\n    }\n}\n\nfunction checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex) {\n    for (var i = 0, len = rangeInfoList.length; i < len; i++) {\n        var area = rangeInfoList[i];\n        if (selectorsByBrushType[area.brushType](\n            dataIndex, data, area.selectors, area\n        )) {\n            return true;\n        }\n    }\n}\n\nfunction getSelectorsByBrushType(seriesModel) {\n    var brushSelector = seriesModel.brushSelector;\n    if (zrUtil.isString(brushSelector)) {\n        var sels = [];\n        zrUtil.each(selector, function (selectorsByElementType, brushType) {\n            sels[brushType] = function (dataIndex, data, selectors, area) {\n                var itemLayout = data.getItemLayout(dataIndex);\n                return selectorsByElementType[brushSelector](itemLayout, selectors, area);\n            };\n        });\n        return sels;\n    }\n    else if (zrUtil.isFunction(brushSelector)) {\n        var bSelector = {};\n        zrUtil.each(selector, function (sel, brushType) {\n            bSelector[brushType] = brushSelector;\n        });\n        return bSelector;\n    }\n    return brushSelector;\n}\n\nfunction brushModelNotControll(brushModel, seriesIndex) {\n    var seriesIndices = brushModel.option.seriesIndex;\n    return seriesIndices != null\n        && seriesIndices !== 'all'\n        && (\n            zrUtil.isArray(seriesIndices)\n            ? zrUtil.indexOf(seriesIndices, seriesIndex) < 0\n            : seriesIndex !== seriesIndices\n        );\n}\n\nfunction bindSelector(area) {\n    var selectors = area.selectors = {};\n    zrUtil.each(selector[area.brushType], function (selFn, elType) {\n        // Do not use function binding or curry for performance.\n        selectors[elType] = function (itemLayout) {\n            return selFn(itemLayout, selectors, area);\n        };\n    });\n    return area;\n}\n\nvar boundingRectBuilders = {\n\n    lineX: zrUtil.noop,\n\n    lineY: zrUtil.noop,\n\n    rect: function (area) {\n        return getBoundingRectFromMinMax(area.range);\n    },\n\n    polygon: function (area) {\n        var minMax;\n        var range = area.range;\n\n        for (var i = 0, len = range.length; i < len; i++) {\n            minMax = minMax || [[Infinity, -Infinity], [Infinity, -Infinity]];\n            var rg = range[i];\n            rg[0] < minMax[0][0] && (minMax[0][0] = rg[0]);\n            rg[0] > minMax[0][1] && (minMax[0][1] = rg[0]);\n            rg[1] < minMax[1][0] && (minMax[1][0] = rg[1]);\n            rg[1] > minMax[1][1] && (minMax[1][1] = rg[1]);\n        }\n\n        return minMax && getBoundingRectFromMinMax(minMax);\n    }\n};\n\nfunction getBoundingRectFromMinMax(minMax) {\n    return new BoundingRect(\n        minMax[0][0],\n        minMax[1][0],\n        minMax[0][1] - minMax[0][0],\n        minMax[1][1] - minMax[1][0]\n    );\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport {__DEV__} from '../../config';\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as visualSolution from '../../visual/visualSolution';\nimport Model from '../../model/Model';\n\nvar DEFAULT_OUT_OF_BRUSH_COLOR = ['#ddd'];\n\nvar BrushModel = echarts.extendComponentModel({\n\n    type: 'brush',\n\n    dependencies: ['geo', 'grid', 'xAxis', 'yAxis', 'parallel', 'series'],\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        // inBrush: null,\n        // outOfBrush: null,\n        toolbox: null,          // Default value see preprocessor.\n        brushLink: null,        // Series indices array, broadcast using dataIndex.\n                                // or 'all', which means all series. 'none' or null means no series.\n        seriesIndex: 'all',     // seriesIndex array, specify series controlled by this brush component.\n        geoIndex: null,         //\n        xAxisIndex: null,\n        yAxisIndex: null,\n\n        brushType: 'rect',      // Default brushType, see BrushController.\n        brushMode: 'single',    // Default brushMode, 'single' or 'multiple'\n        transformable: true,    // Default transformable.\n        brushStyle: {           // Default brushStyle\n            borderWidth: 1,\n            color: 'rgba(120,140,180,0.3)',\n            borderColor: 'rgba(120,140,180,0.8)'\n        },\n\n        throttleType: 'fixRate', // Throttle in brushSelected event. 'fixRate' or 'debounce'.\n                                 // If null, no throttle. Valid only in the first brush component\n        throttleDelay: 0,        // Unit: ms, 0 means every event will be triggered.\n\n        // FIXME\n        // 试验效果\n        removeOnClick: true,\n\n        z: 10000\n    },\n\n    /**\n     * @readOnly\n     * @type {Array.<Object>}\n     */\n    areas: [],\n\n    /**\n     * Current activated brush type.\n     * If null, brush is inactived.\n     * see module:echarts/component/helper/BrushController\n     * @readOnly\n     * @type {string}\n     */\n    brushType: null,\n\n    /**\n     * Current brush opt.\n     * see module:echarts/component/helper/BrushController\n     * @readOnly\n     * @type {Object}\n     */\n    brushOption: {},\n\n    /**\n     * @readOnly\n     * @type {Array.<Object>}\n     */\n    coordInfoList: [],\n\n    optionUpdated: function (newOption, isInit) {\n        var thisOption = this.option;\n\n        !isInit && visualSolution.replaceVisualOption(\n            thisOption, newOption, ['inBrush', 'outOfBrush']\n        );\n\n        var inBrush = thisOption.inBrush = thisOption.inBrush || {};\n        // Always give default visual, consider setOption at the second time.\n        thisOption.outOfBrush = thisOption.outOfBrush || {color: DEFAULT_OUT_OF_BRUSH_COLOR};\n\n        if (!inBrush.hasOwnProperty('liftZ')) {\n            // Bigger than the highlight z lift, otherwise it will\n            // be effected by the highlight z when brush.\n            inBrush.liftZ = 5;\n        }\n    },\n\n    /**\n     * If ranges is null/undefined, range state remain.\n     *\n     * @param {Array.<Object>} [ranges]\n     */\n    setAreas: function (areas) {\n        if (__DEV__) {\n            zrUtil.assert(zrUtil.isArray(areas));\n            zrUtil.each(areas, function (area) {\n                zrUtil.assert(area.brushType, 'Illegal areas');\n            });\n        }\n\n        // If ranges is null/undefined, range state remain.\n        // This helps user to dispatchAction({type: 'brush'}) with no areas\n        // set but just want to get the current brush select info from a `brush` event.\n        if (!areas) {\n            return;\n        }\n\n        this.areas = zrUtil.map(areas, function (area) {\n            return generateBrushOption(this.option, area);\n        }, this);\n    },\n\n    /**\n     * see module:echarts/component/helper/BrushController\n     * @param {Object} brushOption\n     */\n    setBrushOption: function (brushOption) {\n        this.brushOption = generateBrushOption(this.option, brushOption);\n        this.brushType = this.brushOption.brushType;\n    }\n\n});\n\nfunction generateBrushOption(option, brushOption) {\n    return zrUtil.merge(\n        {\n            brushType: option.brushType,\n            brushMode: option.brushMode,\n            transformable: option.transformable,\n            brushStyle: new Model(option.brushStyle).getItemStyle(),\n            removeOnClick: option.removeOnClick,\n            z: option.z\n        },\n        brushOption,\n        true\n    );\n}\n\nexport default BrushModel;\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport BrushController from '../helper/BrushController';\n\nexport default echarts.extendComponentView({\n\n    type: 'brush',\n\n    init: function (ecModel, api) {\n\n        /**\n         * @readOnly\n         * @type {module:echarts/model/Global}\n         */\n        this.ecModel = ecModel;\n\n        /**\n         * @readOnly\n         * @type {module:echarts/ExtensionAPI}\n         */\n        this.api = api;\n\n        /**\n         * @readOnly\n         * @type {module:echarts/component/brush/BrushModel}\n         */\n        this.model;\n\n        /**\n         * @private\n         * @type {module:echarts/component/helper/BrushController}\n         */\n        (this._brushController = new BrushController(api.getZr()))\n            .on('brush', zrUtil.bind(this._onBrush, this))\n            .mount();\n    },\n\n    /**\n     * @override\n     */\n    render: function (brushModel) {\n        this.model = brushModel;\n        return updateController.apply(this, arguments);\n    },\n\n    /**\n     * @override\n     */\n    updateTransform: updateController,\n\n    /**\n     * @override\n     */\n    updateView: updateController,\n\n    // /**\n    //  * @override\n    //  */\n    // updateLayout: updateController,\n\n    // /**\n    //  * @override\n    //  */\n    // updateVisual: updateController,\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        this._brushController.dispose();\n    },\n\n    /**\n     * @private\n     */\n    _onBrush: function (areas, opt) {\n        var modelId = this.model.id;\n\n        this.model.brushTargetManager.setOutputRanges(areas, this.ecModel);\n\n        // Action is not dispatched on drag end, because the drag end\n        // emits the same params with the last drag move event, and\n        // may have some delay when using touch pad, which makes\n        // animation not smooth (when using debounce).\n        (!opt.isEnd || opt.removeOnClick) && this.api.dispatchAction({\n            type: 'brush',\n            brushId: modelId,\n            areas: zrUtil.clone(areas),\n            $from: modelId\n        });\n        opt.isEnd && this.api.dispatchAction({\n            type: 'brushEnd',\n            brushId: modelId,\n            areas: zrUtil.clone(areas),\n            $from: modelId\n        });\n    }\n\n});\n\nfunction updateController(brushModel, ecModel, api, payload) {\n    // Do not update controller when drawing.\n    (!payload || payload.$from !== brushModel.id) && this._brushController\n        .setPanels(brushModel.brushTargetManager.makePanelOpts(api))\n        .enableBrush(brushModel.brushOption)\n        .updateCovers(brushModel.areas.slice());\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\nimport * as echarts from '../../echarts';\n\n/**\n * payload: {\n *      brushIndex: number, or,\n *      brushId: string, or,\n *      brushName: string,\n *      globalRanges: Array\n * }\n */\necharts.registerAction(\n        {type: 'brush', event: 'brush' /*, update: 'updateView' */},\n    function (payload, ecModel) {\n        ecModel.eachComponent({mainType: 'brush', query: payload}, function (brushModel) {\n            brushModel.setAreas(payload.areas);\n        });\n    }\n);\n\n/**\n * payload: {\n *      brushComponents: [\n *          {\n *              brushId,\n *              brushIndex,\n *              brushName,\n *              series: [\n *                  {\n *                      seriesId,\n *                      seriesIndex,\n *                      seriesName,\n *                      rawIndices: [21, 34, ...]\n *                  },\n *                  ...\n *              ]\n *          },\n *          ...\n *      ]\n * }\n */\necharts.registerAction(\n    {type: 'brushSelect', event: 'brushSelected', update: 'none'},\n    function () {}\n);\n\necharts.registerAction(\n    {type: 'brushEnd', event: 'brushEnd', update: 'none'},\n    function () {}\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as featureManager from '../featureManager';\nimport lang from '../../../lang';\n\nvar brushLang = lang.toolbox.brush;\n\nfunction Brush(model, ecModel, api) {\n    this.model = model;\n    this.ecModel = ecModel;\n    this.api = api;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this._brushType;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this._brushMode;\n}\n\nBrush.defaultOption = {\n    show: true,\n    type: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'],\n    icon: {\n        /* eslint-disable */\n        rect: 'M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13', // jshint ignore:line\n        polygon: 'M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2', // jshint ignore:line\n        lineX: 'M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4', // jshint ignore:line\n        lineY: 'M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4', // jshint ignore:line\n        keep: 'M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z', // jshint ignore:line\n        clear: 'M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2' // jshint ignore:line\n        /* eslint-enable */\n    },\n    // `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear`\n    title: zrUtil.clone(brushLang.title)\n};\n\nvar proto = Brush.prototype;\n\n// proto.updateLayout = function (featureModel, ecModel, api) {\n/* eslint-disable */\nproto.render =\n/* eslint-enable */\nproto.updateView = function (featureModel, ecModel, api) {\n    var brushType;\n    var brushMode;\n    var isBrushed;\n\n    ecModel.eachComponent({mainType: 'brush'}, function (brushModel) {\n        brushType = brushModel.brushType;\n        brushMode = brushModel.brushOption.brushMode || 'single';\n        isBrushed |= brushModel.areas.length;\n    });\n    this._brushType = brushType;\n    this._brushMode = brushMode;\n\n    zrUtil.each(featureModel.get('type', true), function (type) {\n        featureModel.setIconStatus(\n            type,\n            (\n                type === 'keep'\n                ? brushMode === 'multiple'\n                : type === 'clear'\n                ? isBrushed\n                : type === brushType\n            ) ? 'emphasis' : 'normal'\n        );\n    });\n};\n\nproto.getIcons = function () {\n    var model = this.model;\n    var availableIcons = model.get('icon', true);\n    var icons = {};\n    zrUtil.each(model.get('type', true), function (type) {\n        if (availableIcons[type]) {\n            icons[type] = availableIcons[type];\n        }\n    });\n    return icons;\n};\n\nproto.onclick = function (ecModel, api, type) {\n    var brushType = this._brushType;\n    var brushMode = this._brushMode;\n\n    if (type === 'clear') {\n        // Trigger parallel action firstly\n        api.dispatchAction({\n            type: 'axisAreaSelect',\n            intervals: []\n        });\n\n        api.dispatchAction({\n            type: 'brush',\n            command: 'clear',\n            // Clear all areas of all brush components.\n            areas: []\n        });\n    }\n    else {\n        api.dispatchAction({\n            type: 'takeGlobalCursor',\n            key: 'brush',\n            brushOption: {\n                brushType: type === 'keep'\n                    ? brushType\n                    : (brushType === type ? false : type),\n                brushMode: type === 'keep'\n                    ? (brushMode === 'multiple' ? 'single' : 'multiple')\n                    : brushMode\n            }\n        });\n    }\n};\n\nfeatureManager.register('brush', Brush);\n\nexport default Brush;","/*\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 * Brush component entry\n */\n\nimport * as echarts from '../echarts';\nimport preprocessor from './brush/preprocessor';\n\nimport './brush/visualEncoding';\nimport './brush/BrushModel';\nimport './brush/BrushView';\nimport './brush/brushAction';\nimport './toolbox/feature/Brush';\n\necharts.registerPreprocessor(preprocessor);","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as echarts from '../echarts';\nimport * as graphic from '../util/graphic';\nimport {getLayoutRect} from '../util/layout';\n\n// Model\necharts.extendComponentModel({\n\n    type: 'title',\n\n    layoutMode: {type: 'box', ignoreSize: true},\n\n    defaultOption: {\n        // 一级层叠\n        zlevel: 0,\n        // 二级层叠\n        z: 6,\n        show: true,\n\n        text: '',\n        // 超链接跳转\n        // link: null,\n        // 仅支持self | blank\n        target: 'blank',\n        subtext: '',\n\n        // 超链接跳转\n        // sublink: null,\n        // 仅支持self | blank\n        subtarget: 'blank',\n\n        // 'center' ¦ 'left' ¦ 'right'\n        // ¦ {number}（x坐标，单位px）\n        left: 0,\n        // 'top' ¦ 'bottom' ¦ 'center'\n        // ¦ {number}（y坐标，单位px）\n        top: 0,\n\n        // 水平对齐\n        // 'auto' | 'left' | 'right' | 'center'\n        // 默认根据 left 的位置判断是左对齐还是右对齐\n        // textAlign: null\n        //\n        // 垂直对齐\n        // 'auto' | 'top' | 'bottom' | 'middle'\n        // 默认根据 top 位置判断是上对齐还是下对齐\n        // textVerticalAlign: null\n        // textBaseline: null // The same as textVerticalAlign.\n\n        backgroundColor: 'rgba(0,0,0,0)',\n\n        // 标题边框颜色\n        borderColor: '#ccc',\n\n        // 标题边框线宽，单位px，默认为0（无边框）\n        borderWidth: 0,\n\n        // 标题内边距，单位px，默认各方向内边距为5，\n        // 接受数组分别设定上右下左边距，同css\n        padding: 5,\n\n        // 主副标题纵向间隔，单位px，默认为10，\n        itemGap: 10,\n        textStyle: {\n            fontSize: 18,\n            fontWeight: 'bolder',\n            color: '#333'\n        },\n        subtextStyle: {\n            color: '#aaa'\n        }\n    }\n});\n\n// View\necharts.extendComponentView({\n\n    type: 'title',\n\n    render: function (titleModel, ecModel, api) {\n        this.group.removeAll();\n\n        if (!titleModel.get('show')) {\n            return;\n        }\n\n        var group = this.group;\n\n        var textStyleModel = titleModel.getModel('textStyle');\n        var subtextStyleModel = titleModel.getModel('subtextStyle');\n\n        var textAlign = titleModel.get('textAlign');\n        var textVerticalAlign = zrUtil.retrieve2(\n            titleModel.get('textBaseline'), titleModel.get('textVerticalAlign')\n        );\n\n        var textEl = new graphic.Text({\n            style: graphic.setTextStyle({}, textStyleModel, {\n                text: titleModel.get('text'),\n                textFill: textStyleModel.getTextColor()\n            }, {disableBox: true}),\n            z2: 10\n        });\n\n        var textRect = textEl.getBoundingRect();\n\n        var subText = titleModel.get('subtext');\n        var subTextEl = new graphic.Text({\n            style: graphic.setTextStyle({}, subtextStyleModel, {\n                text: subText,\n                textFill: subtextStyleModel.getTextColor(),\n                y: textRect.height + titleModel.get('itemGap'),\n                textVerticalAlign: 'top'\n            }, {disableBox: true}),\n            z2: 10\n        });\n\n        var link = titleModel.get('link');\n        var sublink = titleModel.get('sublink');\n        var triggerEvent = titleModel.get('triggerEvent', true);\n\n        textEl.silent = !link && !triggerEvent;\n        subTextEl.silent = !sublink && !triggerEvent;\n\n        if (link) {\n            textEl.on('click', function () {\n                window.open(link, '_' + titleModel.get('target'));\n            });\n        }\n        if (sublink) {\n            subTextEl.on('click', function () {\n                window.open(sublink, '_' + titleModel.get('subtarget'));\n            });\n        }\n\n        textEl.eventData = subTextEl.eventData = triggerEvent\n            ? {\n                componentType: 'title',\n                componentIndex: titleModel.componentIndex\n            }\n            : null;\n\n        group.add(textEl);\n        subText && group.add(subTextEl);\n        // If no subText, but add subTextEl, there will be an empty line.\n\n        var groupRect = group.getBoundingRect();\n        var layoutOption = titleModel.getBoxLayoutParams();\n        layoutOption.width = groupRect.width;\n        layoutOption.height = groupRect.height;\n        var layoutRect = getLayoutRect(\n            layoutOption, {\n                width: api.getWidth(),\n                height: api.getHeight()\n            }, titleModel.get('padding')\n        );\n        // Adjust text align based on position\n        if (!textAlign) {\n            // Align left if title is on the left. center and right is same\n            textAlign = titleModel.get('left') || titleModel.get('right');\n            if (textAlign === 'middle') {\n                textAlign = 'center';\n            }\n            // Adjust layout by text align\n            if (textAlign === 'right') {\n                layoutRect.x += layoutRect.width;\n            }\n            else if (textAlign === 'center') {\n                layoutRect.x += layoutRect.width / 2;\n            }\n        }\n        if (!textVerticalAlign) {\n            textVerticalAlign = titleModel.get('top') || titleModel.get('bottom');\n            if (textVerticalAlign === 'center') {\n                textVerticalAlign = 'middle';\n            }\n            if (textVerticalAlign === 'bottom') {\n                layoutRect.y += layoutRect.height;\n            }\n            else if (textVerticalAlign === 'middle') {\n                layoutRect.y += layoutRect.height / 2;\n            }\n\n            textVerticalAlign = textVerticalAlign || 'top';\n        }\n\n        group.attr('position', [layoutRect.x, layoutRect.y]);\n        var alignStyle = {\n            textAlign: textAlign,\n            textVerticalAlign: textVerticalAlign\n        };\n        textEl.setStyle(alignStyle);\n        subTextEl.setStyle(alignStyle);\n\n        // Render background\n        // Get groupRect again because textAlign has been changed\n        groupRect = group.getBoundingRect();\n        var padding = layoutRect.margin;\n        var style = titleModel.getItemStyle(['color', 'opacity']);\n        style.fill = titleModel.get('backgroundColor');\n        var rect = new graphic.Rect({\n            shape: {\n                x: groupRect.x - padding[3],\n                y: groupRect.y - padding[0],\n                width: groupRect.width + padding[1] + padding[3],\n                height: groupRect.height + padding[0] + padding[2],\n                r: titleModel.get('borderRadius')\n            },\n            style: style,\n            subPixelOptimize: true,\n            silent: true\n        });\n\n        group.add(rect);\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default function (option) {\n    var timelineOpt = option && option.timeline;\n\n    if (!zrUtil.isArray(timelineOpt)) {\n        timelineOpt = timelineOpt ? [timelineOpt] : [];\n    }\n\n    zrUtil.each(timelineOpt, function (opt) {\n        if (!opt) {\n            return;\n        }\n\n        compatibleEC2(opt);\n    });\n}\n\nfunction compatibleEC2(opt) {\n    var type = opt.type;\n\n    var ec2Types = {'number': 'value', 'time': 'time'};\n\n    // Compatible with ec2\n    if (ec2Types[type]) {\n        opt.axisType = ec2Types[type];\n        delete opt.type;\n    }\n\n    transferItem(opt);\n\n    if (has(opt, 'controlPosition')) {\n        var controlStyle = opt.controlStyle || (opt.controlStyle = {});\n        if (!has(controlStyle, 'position')) {\n            controlStyle.position = opt.controlPosition;\n        }\n        if (controlStyle.position === 'none' && !has(controlStyle, 'show')) {\n            controlStyle.show = false;\n            delete controlStyle.position;\n        }\n        delete opt.controlPosition;\n    }\n\n    zrUtil.each(opt.data || [], function (dataItem) {\n        if (zrUtil.isObject(dataItem) && !zrUtil.isArray(dataItem)) {\n            if (!has(dataItem, 'value') && has(dataItem, 'name')) {\n                // In ec2, using name as value.\n                dataItem.value = dataItem.name;\n            }\n            transferItem(dataItem);\n        }\n    });\n}\n\nfunction transferItem(opt) {\n    var itemStyle = opt.itemStyle || (opt.itemStyle = {});\n\n    var itemStyleEmphasis = itemStyle.emphasis || (itemStyle.emphasis = {});\n\n    // Transfer label out\n    var label = opt.label || (opt.label || {});\n    var labelNormal = label.normal || (label.normal = {});\n    var excludeLabelAttr = {normal: 1, emphasis: 1};\n\n    zrUtil.each(label, function (value, name) {\n        if (!excludeLabelAttr[name] && !has(labelNormal, name)) {\n            labelNormal[name] = value;\n        }\n    });\n\n    if (itemStyleEmphasis.label && !has(label, 'emphasis')) {\n        label.emphasis = itemStyleEmphasis.label;\n        delete itemStyleEmphasis.label;\n    }\n}\n\nfunction has(obj, attr) {\n    return obj.hasOwnProperty(attr);\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\nimport Component from '../../model/Component';\n\nComponent.registerSubTypeDefaulter('timeline', function () {\n    // Only slider now.\n    return 'slider';\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\n\necharts.registerAction(\n\n    {type: 'timelineChange', event: 'timelineChanged', update: 'prepareAndUpdate'},\n\n    function (payload, ecModel) {\n\n        var timelineModel = ecModel.getComponent('timeline');\n        if (timelineModel && payload.currentIndex != null) {\n            timelineModel.setCurrentIndex(payload.currentIndex);\n\n            if (!timelineModel.get('loop', true) && timelineModel.isIndexMax()) {\n                timelineModel.setPlayState(false);\n            }\n        }\n\n        // Set normalized currentIndex to payload.\n        ecModel.resetOption('timeline');\n\n        return zrUtil.defaults({\n            currentIndex: timelineModel.option.currentIndex\n        }, payload);\n    }\n);\n\necharts.registerAction(\n\n    {type: 'timelinePlayChange', event: 'timelinePlayChanged', update: 'update'},\n\n    function (payload, ecModel) {\n        var timelineModel = ecModel.getComponent('timeline');\n        if (timelineModel && payload.playState != null) {\n            timelineModel.setPlayState(payload.playState);\n        }\n    }\n);\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport ComponentModel from '../../model/Component';\nimport List from '../../data/List';\nimport * as modelUtil from '../../util/model';\n\nvar TimelineModel = ComponentModel.extend({\n\n    type: 'timeline',\n\n    layoutMode: 'box',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n\n        zlevel: 0,                  // 一级层叠\n        z: 4,                       // 二级层叠\n        show: true,\n\n        axisType: 'time',  // 模式是时间类型，支持 value, category\n\n        realtime: true,\n\n        left: '20%',\n        top: null,\n        right: '20%',\n        bottom: 0,\n        width: null,\n        height: 40,\n        padding: 5,\n\n        controlPosition: 'left',           // 'left' 'right' 'top' 'bottom' 'none'\n        autoPlay: false,\n        rewind: false,                     // 反向播放\n        loop: true,\n        playInterval: 2000,                // 播放时间间隔，单位ms\n\n        currentIndex: 0,\n\n        itemStyle: {},\n        label: {\n            color: '#000'\n        },\n\n        data: []\n    },\n\n    /**\n     * @override\n     */\n    init: function (option, parentModel, ecModel) {\n\n        /**\n         * @private\n         * @type {module:echarts/data/List}\n         */\n        this._data;\n\n        /**\n         * @private\n         * @type {Array.<string>}\n         */\n        this._names;\n\n        this.mergeDefaultAndTheme(option, ecModel);\n        this._initData();\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function (option) {\n        TimelineModel.superApply(this, 'mergeOption', arguments);\n        this._initData();\n    },\n\n    /**\n     * @param {number} [currentIndex]\n     */\n    setCurrentIndex: function (currentIndex) {\n        if (currentIndex == null) {\n            currentIndex = this.option.currentIndex;\n        }\n        var count = this._data.count();\n\n        if (this.option.loop) {\n            currentIndex = (currentIndex % count + count) % count;\n        }\n        else {\n            currentIndex >= count && (currentIndex = count - 1);\n            currentIndex < 0 && (currentIndex = 0);\n        }\n\n        this.option.currentIndex = currentIndex;\n    },\n\n    /**\n     * @return {number} currentIndex\n     */\n    getCurrentIndex: function () {\n        return this.option.currentIndex;\n    },\n\n    /**\n     * @return {boolean}\n     */\n    isIndexMax: function () {\n        return this.getCurrentIndex() >= this._data.count() - 1;\n    },\n\n    /**\n     * @param {boolean} state true: play, false: stop\n     */\n    setPlayState: function (state) {\n        this.option.autoPlay = !!state;\n    },\n\n    /**\n     * @return {boolean} true: play, false: stop\n     */\n    getPlayState: function () {\n        return !!this.option.autoPlay;\n    },\n\n    /**\n     * @private\n     */\n    _initData: function () {\n        var thisOption = this.option;\n        var dataArr = thisOption.data || [];\n        var axisType = thisOption.axisType;\n        var names = this._names = [];\n\n        if (axisType === 'category') {\n            var idxArr = [];\n            zrUtil.each(dataArr, function (item, index) {\n                var value = modelUtil.getDataItemValue(item);\n                var newItem;\n\n                if (zrUtil.isObject(item)) {\n                    newItem = zrUtil.clone(item);\n                    newItem.value = index;\n                }\n                else {\n                    newItem = index;\n                }\n\n                idxArr.push(newItem);\n\n                if (!zrUtil.isString(value) && (value == null || isNaN(value))) {\n                    value = '';\n                }\n\n                names.push(value + '');\n            });\n            dataArr = idxArr;\n        }\n\n        var dimType = ({category: 'ordinal', time: 'time'})[axisType] || 'number';\n\n        var data = this._data = new List([{name: 'value', type: dimType}], this);\n\n        data.initData(dataArr, names);\n    },\n\n    getData: function () {\n        return this._data;\n    },\n\n    /**\n     * @public\n     * @return {Array.<string>} categoreis\n     */\n    getCategories: function () {\n        if (this.get('axisType') === 'category') {\n            return this._names.slice();\n        }\n    }\n\n});\n\nexport default TimelineModel;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport TimelineModel from './TimelineModel';\nimport dataFormatMixin from '../../model/mixin/dataFormat';\n\nvar SliderTimelineModel = TimelineModel.extend({\n\n    type: 'timeline.slider',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n\n        backgroundColor: 'rgba(0,0,0,0)',   // 时间轴背景颜色\n        borderColor: '#ccc',               // 时间轴边框颜色\n        borderWidth: 0,                    // 时间轴边框线宽，单位px，默认为0（无边框）\n\n        orient: 'horizontal',              // 'vertical'\n        inverse: false,\n\n        tooltip: {                          // boolean or Object\n            trigger: 'item'                 // data item may also have tootip attr.\n        },\n\n        symbol: 'emptyCircle',\n        symbolSize: 10,\n\n        lineStyle: {\n            show: true,\n            width: 2,\n            color: '#304654'\n        },\n        label: {                            // 文本标签\n            position: 'auto',           // auto left right top bottom\n                                        // When using number, label position is not\n                                        // restricted by viewRect.\n                                        // positive: right/bottom, negative: left/top\n            show: true,\n            interval: 'auto',\n            rotate: 0,\n            // formatter: null,\n            // 其余属性默认使用全局文本样式，详见TEXTSTYLE\n            color: '#304654'\n        },\n        itemStyle: {\n            color: '#304654',\n            borderWidth: 1\n        },\n\n        checkpointStyle: {\n            symbol: 'circle',\n            symbolSize: 13,\n            color: '#c23531',\n            borderWidth: 5,\n            borderColor: 'rgba(194,53,49, 0.5)',\n            animation: true,\n            animationDuration: 300,\n            animationEasing: 'quinticInOut'\n        },\n\n        controlStyle: {\n            show: true,\n            showPlayBtn: true,\n            showPrevBtn: true,\n            showNextBtn: true,\n            itemSize: 22,\n            itemGap: 12,\n            position: 'left',  // 'left' 'right' 'top' 'bottom'\n            playIcon: 'path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z', // jshint ignore:line\n            stopIcon: 'path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z', // jshint ignore:line\n            nextIcon: 'path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z', // jshint ignore:line\n            prevIcon: 'path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z', // jshint ignore:line\n\n            color: '#304654',\n            borderColor: '#304654',\n            borderWidth: 1\n        },\n\n        emphasis: {\n            label: {\n                show: true,\n                // 其余属性默认使用全局文本样式，详见TEXTSTYLE\n                color: '#c23531'\n            },\n\n            itemStyle: {\n                color: '#c23531'\n            },\n\n            controlStyle: {\n                color: '#c23531',\n                borderColor: '#c23531',\n                borderWidth: 2\n            }\n        },\n        data: []\n    }\n\n});\n\nzrUtil.mixin(SliderTimelineModel, dataFormatMixin);\n\nexport default SliderTimelineModel;","/*\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\nimport ComponentView from '../../view/Component';\n\nexport default ComponentView.extend({\n    type: 'timeline'\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport Axis from '../../coord/Axis';\n\n/**\n * Extend axis 2d\n * @constructor module:echarts/coord/cartesian/Axis2D\n * @extends {module:echarts/coord/cartesian/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.<number>} coordExtent\n * @param {string} axisType\n * @param {string} position\n */\nvar TimelineAxis = function (dim, scale, coordExtent, axisType) {\n\n    Axis.call(this, dim, scale, coordExtent);\n\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = axisType || 'value';\n\n    /**\n     * Axis model\n     * @param {module:echarts/component/TimelineModel}\n     */\n    this.model = null;\n};\n\nTimelineAxis.prototype = {\n\n    constructor: TimelineAxis,\n\n    /**\n     * @override\n     */\n    getLabelModel: function () {\n        return this.model.getModel('label');\n    },\n\n    /**\n     * @override\n     */\n    isHorizontal: function () {\n        return this.model.get('orient') === 'horizontal';\n    }\n\n};\n\nzrUtil.inherits(TimelineAxis, Axis);\n\nexport default TimelineAxis;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport BoundingRect from 'zrender/src/core/BoundingRect';\nimport * as matrix from 'zrender/src/core/matrix';\nimport * as graphic from '../../util/graphic';\nimport * as layout from '../../util/layout';\nimport TimelineView from './TimelineView';\nimport TimelineAxis from './TimelineAxis';\nimport {createSymbol} from '../../util/symbol';\nimport * as axisHelper from '../../coord/axisHelper';\nimport * as numberUtil from '../../util/number';\nimport {encodeHTML} from '../../util/format';\n\nvar bind = zrUtil.bind;\nvar each = zrUtil.each;\n\nvar PI = Math.PI;\n\nexport default TimelineView.extend({\n\n    type: 'timeline.slider',\n\n    init: function (ecModel, api) {\n\n        this.api = api;\n\n        /**\n         * @private\n         * @type {module:echarts/component/timeline/TimelineAxis}\n         */\n        this._axis;\n\n        /**\n         * @private\n         * @type {module:zrender/core/BoundingRect}\n         */\n        this._viewRect;\n\n        /**\n         * @type {number}\n         */\n        this._timer;\n\n        /**\n         * @type {module:zrender/Element}\n         */\n        this._currentPointer;\n\n        /**\n         * @type {module:zrender/container/Group}\n         */\n        this._mainGroup;\n\n        /**\n         * @type {module:zrender/container/Group}\n         */\n        this._labelGroup;\n    },\n\n    /**\n     * @override\n     */\n    render: function (timelineModel, ecModel, api, payload) {\n        this.model = timelineModel;\n        this.api = api;\n        this.ecModel = ecModel;\n\n        this.group.removeAll();\n\n        if (timelineModel.get('show', true)) {\n\n            var layoutInfo = this._layout(timelineModel, api);\n            var mainGroup = this._createGroup('mainGroup');\n            var labelGroup = this._createGroup('labelGroup');\n\n            /**\n             * @private\n             * @type {module:echarts/component/timeline/TimelineAxis}\n             */\n            var axis = this._axis = this._createAxis(layoutInfo, timelineModel);\n\n            timelineModel.formatTooltip = function (dataIndex) {\n                return encodeHTML(axis.scale.getLabel(dataIndex));\n            };\n\n            each(\n                ['AxisLine', 'AxisTick', 'Control', 'CurrentPointer'],\n                function (name) {\n                    this['_render' + name](layoutInfo, mainGroup, axis, timelineModel);\n                },\n                this\n            );\n\n            this._renderAxisLabel(layoutInfo, labelGroup, axis, timelineModel);\n            this._position(layoutInfo, timelineModel);\n        }\n\n        this._doPlayStop();\n    },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        this._clearTimer();\n        this.group.removeAll();\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        this._clearTimer();\n    },\n\n    _layout: function (timelineModel, api) {\n        var labelPosOpt = timelineModel.get('label.position');\n        var orient = timelineModel.get('orient');\n        var viewRect = getViewRect(timelineModel, api);\n        // Auto label offset.\n        if (labelPosOpt == null || labelPosOpt === 'auto') {\n            labelPosOpt = orient === 'horizontal'\n                ? ((viewRect.y + viewRect.height / 2) < api.getHeight() / 2 ? '-' : '+')\n                : ((viewRect.x + viewRect.width / 2) < api.getWidth() / 2 ? '+' : '-');\n        }\n        else if (isNaN(labelPosOpt)) {\n            labelPosOpt = ({\n                horizontal: {top: '-', bottom: '+'},\n                vertical: {left: '-', right: '+'}\n            })[orient][labelPosOpt];\n        }\n\n        var labelAlignMap = {\n            horizontal: 'center',\n            vertical: (labelPosOpt >= 0 || labelPosOpt === '+') ? 'left' : 'right'\n        };\n\n        var labelBaselineMap = {\n            horizontal: (labelPosOpt >= 0 || labelPosOpt === '+') ? 'top' : 'bottom',\n            vertical: 'middle'\n        };\n        var rotationMap = {\n            horizontal: 0,\n            vertical: PI / 2\n        };\n\n        // Position\n        var mainLength = orient === 'vertical' ? viewRect.height : viewRect.width;\n\n        var controlModel = timelineModel.getModel('controlStyle');\n        var showControl = controlModel.get('show', true);\n        var controlSize = showControl ? controlModel.get('itemSize') : 0;\n        var controlGap = showControl ? controlModel.get('itemGap') : 0;\n        var sizePlusGap = controlSize + controlGap;\n\n        // Special label rotate.\n        var labelRotation = timelineModel.get('label.rotate') || 0;\n        labelRotation = labelRotation * PI / 180; // To radian.\n\n        var playPosition;\n        var prevBtnPosition;\n        var nextBtnPosition;\n        var axisExtent;\n        var controlPosition = controlModel.get('position', true);\n        var showPlayBtn = showControl && controlModel.get('showPlayBtn', true);\n        var showPrevBtn = showControl && controlModel.get('showPrevBtn', true);\n        var showNextBtn = showControl && controlModel.get('showNextBtn', true);\n        var xLeft = 0;\n        var xRight = mainLength;\n\n        // position[0] means left, position[1] means middle.\n        if (controlPosition === 'left' || controlPosition === 'bottom') {\n            showPlayBtn && (playPosition = [0, 0], xLeft += sizePlusGap);\n            showPrevBtn && (prevBtnPosition = [xLeft, 0], xLeft += sizePlusGap);\n            showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);\n        }\n        else { // 'top' 'right'\n            showPlayBtn && (playPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);\n            showPrevBtn && (prevBtnPosition = [0, 0], xLeft += sizePlusGap);\n            showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);\n        }\n        axisExtent = [xLeft, xRight];\n\n        if (timelineModel.get('inverse')) {\n            axisExtent.reverse();\n        }\n\n        return {\n            viewRect: viewRect,\n            mainLength: mainLength,\n            orient: orient,\n\n            rotation: rotationMap[orient],\n            labelRotation: labelRotation,\n            labelPosOpt: labelPosOpt,\n            labelAlign: timelineModel.get('label.align') || labelAlignMap[orient],\n            labelBaseline: timelineModel.get('label.verticalAlign')\n                || timelineModel.get('label.baseline')\n                || labelBaselineMap[orient],\n\n            // Based on mainGroup.\n            playPosition: playPosition,\n            prevBtnPosition: prevBtnPosition,\n            nextBtnPosition: nextBtnPosition,\n            axisExtent: axisExtent,\n\n            controlSize: controlSize,\n            controlGap: controlGap\n        };\n    },\n\n    _position: function (layoutInfo, timelineModel) {\n        // Position is be called finally, because bounding rect is needed for\n        // adapt content to fill viewRect (auto adapt offset).\n\n        // Timeline may be not all in the viewRect when 'offset' is specified\n        // as a number, because it is more appropriate that label aligns at\n        // 'offset' but not the other edge defined by viewRect.\n\n        var mainGroup = this._mainGroup;\n        var labelGroup = this._labelGroup;\n\n        var viewRect = layoutInfo.viewRect;\n        if (layoutInfo.orient === 'vertical') {\n            // transform to horizontal, inverse rotate by left-top point.\n            var m = matrix.create();\n            var rotateOriginX = viewRect.x;\n            var rotateOriginY = viewRect.y + viewRect.height;\n            matrix.translate(m, m, [-rotateOriginX, -rotateOriginY]);\n            matrix.rotate(m, m, -PI / 2);\n            matrix.translate(m, m, [rotateOriginX, rotateOriginY]);\n            viewRect = viewRect.clone();\n            viewRect.applyTransform(m);\n        }\n\n        var viewBound = getBound(viewRect);\n        var mainBound = getBound(mainGroup.getBoundingRect());\n        var labelBound = getBound(labelGroup.getBoundingRect());\n\n        var mainPosition = mainGroup.position;\n        var labelsPosition = labelGroup.position;\n\n        labelsPosition[0] = mainPosition[0] = viewBound[0][0];\n\n        var labelPosOpt = layoutInfo.labelPosOpt;\n\n        if (isNaN(labelPosOpt)) { // '+' or '-'\n            var mainBoundIdx = labelPosOpt === '+' ? 0 : 1;\n            toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);\n            toBound(labelsPosition, labelBound, viewBound, 1, 1 - mainBoundIdx);\n        }\n        else {\n            var mainBoundIdx = labelPosOpt >= 0 ? 0 : 1;\n            toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);\n            labelsPosition[1] = mainPosition[1] + labelPosOpt;\n        }\n\n        mainGroup.attr('position', mainPosition);\n        labelGroup.attr('position', labelsPosition);\n        mainGroup.rotation = labelGroup.rotation = layoutInfo.rotation;\n\n        setOrigin(mainGroup);\n        setOrigin(labelGroup);\n\n        function setOrigin(targetGroup) {\n            var pos = targetGroup.position;\n            targetGroup.origin = [\n                viewBound[0][0] - pos[0],\n                viewBound[1][0] - pos[1]\n            ];\n        }\n\n        function getBound(rect) {\n            // [[xmin, xmax], [ymin, ymax]]\n            return [\n                [rect.x, rect.x + rect.width],\n                [rect.y, rect.y + rect.height]\n            ];\n        }\n\n        function toBound(fromPos, from, to, dimIdx, boundIdx) {\n            fromPos[dimIdx] += to[dimIdx][boundIdx] - from[dimIdx][boundIdx];\n        }\n    },\n\n    _createAxis: function (layoutInfo, timelineModel) {\n        var data = timelineModel.getData();\n        var axisType = timelineModel.get('axisType');\n\n        var scale = axisHelper.createScaleByModel(timelineModel, axisType);\n\n        // Customize scale. The `tickValue` is `dataIndex`.\n        scale.getTicks = function () {\n            return data.mapArray(['value'], function (value) {\n                return value;\n            });\n        };\n\n        var dataExtent = data.getDataExtent('value');\n        scale.setExtent(dataExtent[0], dataExtent[1]);\n        scale.niceTicks();\n\n        var axis = new TimelineAxis('value', scale, layoutInfo.axisExtent, axisType);\n        axis.model = timelineModel;\n\n        return axis;\n    },\n\n    _createGroup: function (name) {\n        var newGroup = this['_' + name] = new graphic.Group();\n        this.group.add(newGroup);\n        return newGroup;\n    },\n\n    _renderAxisLine: function (layoutInfo, group, axis, timelineModel) {\n        var axisExtent = axis.getExtent();\n\n        if (!timelineModel.get('lineStyle.show')) {\n            return;\n        }\n\n        group.add(new graphic.Line({\n            shape: {\n                x1: axisExtent[0], y1: 0,\n                x2: axisExtent[1], y2: 0\n            },\n            style: zrUtil.extend(\n                {lineCap: 'round'},\n                timelineModel.getModel('lineStyle').getLineStyle()\n            ),\n            silent: true,\n            z2: 1\n        }));\n    },\n\n    /**\n     * @private\n     */\n    _renderAxisTick: function (layoutInfo, group, axis, timelineModel) {\n        var data = timelineModel.getData();\n        // Show all ticks, despite ignoring strategy.\n        var ticks = axis.scale.getTicks();\n\n        // The value is dataIndex, see the costomized scale.\n        each(ticks, function (value) {\n            var tickCoord = axis.dataToCoord(value);\n            var itemModel = data.getItemModel(value);\n            var itemStyleModel = itemModel.getModel('itemStyle');\n            var hoverStyleModel = itemModel.getModel('emphasis.itemStyle');\n            var symbolOpt = {\n                position: [tickCoord, 0],\n                onclick: bind(this._changeTimeline, this, value)\n            };\n            var el = giveSymbol(itemModel, itemStyleModel, group, symbolOpt);\n            graphic.setHoverStyle(el, hoverStyleModel.getItemStyle());\n\n            if (itemModel.get('tooltip')) {\n                el.dataIndex = value;\n                el.dataModel = timelineModel;\n            }\n            else {\n                el.dataIndex = el.dataModel = null;\n            }\n\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _renderAxisLabel: function (layoutInfo, group, axis, timelineModel) {\n        var labelModel = axis.getLabelModel();\n\n        if (!labelModel.get('show')) {\n            return;\n        }\n\n        var data = timelineModel.getData();\n        var labels = axis.getViewLabels();\n\n        each(labels, function (labelItem) {\n            // The tickValue is dataIndex, see the costomized scale.\n            var dataIndex = labelItem.tickValue;\n\n            var itemModel = data.getItemModel(dataIndex);\n            var normalLabelModel = itemModel.getModel('label');\n            var hoverLabelModel = itemModel.getModel('emphasis.label');\n            var tickCoord = axis.dataToCoord(labelItem.tickValue);\n            var textEl = new graphic.Text({\n                position: [tickCoord, 0],\n                rotation: layoutInfo.labelRotation - layoutInfo.rotation,\n                onclick: bind(this._changeTimeline, this, dataIndex),\n                silent: false\n            });\n            graphic.setTextStyle(textEl.style, normalLabelModel, {\n                text: labelItem.formattedLabel,\n                textAlign: layoutInfo.labelAlign,\n                textVerticalAlign: layoutInfo.labelBaseline\n            });\n\n            group.add(textEl);\n            graphic.setHoverStyle(\n                textEl, graphic.setTextStyle({}, hoverLabelModel)\n            );\n\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _renderControl: function (layoutInfo, group, axis, timelineModel) {\n        var controlSize = layoutInfo.controlSize;\n        var rotation = layoutInfo.rotation;\n\n        var itemStyle = timelineModel.getModel('controlStyle').getItemStyle();\n        var hoverStyle = timelineModel.getModel('emphasis.controlStyle').getItemStyle();\n        var rect = [0, -controlSize / 2, controlSize, controlSize];\n        var playState = timelineModel.getPlayState();\n        var inverse = timelineModel.get('inverse', true);\n\n        makeBtn(\n            layoutInfo.nextBtnPosition,\n            'controlStyle.nextIcon',\n            bind(this._changeTimeline, this, inverse ? '-' : '+')\n        );\n        makeBtn(\n            layoutInfo.prevBtnPosition,\n            'controlStyle.prevIcon',\n            bind(this._changeTimeline, this, inverse ? '+' : '-')\n        );\n        makeBtn(\n            layoutInfo.playPosition,\n            'controlStyle.' + (playState ? 'stopIcon' : 'playIcon'),\n            bind(this._handlePlayClick, this, !playState),\n            true\n        );\n\n        function makeBtn(position, iconPath, onclick, willRotate) {\n            if (!position) {\n                return;\n            }\n            var opt = {\n                position: position,\n                origin: [controlSize / 2, 0],\n                rotation: willRotate ? -rotation : 0,\n                rectHover: true,\n                style: itemStyle,\n                onclick: onclick\n            };\n            var btn = makeIcon(timelineModel, iconPath, rect, opt);\n            group.add(btn);\n            graphic.setHoverStyle(btn, hoverStyle);\n        }\n    },\n\n    _renderCurrentPointer: function (layoutInfo, group, axis, timelineModel) {\n        var data = timelineModel.getData();\n        var currentIndex = timelineModel.getCurrentIndex();\n        var pointerModel = data.getItemModel(currentIndex).getModel('checkpointStyle');\n        var me = this;\n\n        var callback = {\n            onCreate: function (pointer) {\n                pointer.draggable = true;\n                pointer.drift = bind(me._handlePointerDrag, me);\n                pointer.ondragend = bind(me._handlePointerDragend, me);\n                pointerMoveTo(pointer, currentIndex, axis, timelineModel, true);\n            },\n            onUpdate: function (pointer) {\n                pointerMoveTo(pointer, currentIndex, axis, timelineModel);\n            }\n        };\n\n        // Reuse when exists, for animation and drag.\n        this._currentPointer = giveSymbol(\n            pointerModel, pointerModel, this._mainGroup, {}, this._currentPointer, callback\n        );\n    },\n\n    _handlePlayClick: function (nextState) {\n        this._clearTimer();\n        this.api.dispatchAction({\n            type: 'timelinePlayChange',\n            playState: nextState,\n            from: this.uid\n        });\n    },\n\n    _handlePointerDrag: function (dx, dy, e) {\n        this._clearTimer();\n        this._pointerChangeTimeline([e.offsetX, e.offsetY]);\n    },\n\n    _handlePointerDragend: function (e) {\n        this._pointerChangeTimeline([e.offsetX, e.offsetY], true);\n    },\n\n    _pointerChangeTimeline: function (mousePos, trigger) {\n        var toCoord = this._toAxisCoord(mousePos)[0];\n\n        var axis = this._axis;\n        var axisExtent = numberUtil.asc(axis.getExtent().slice());\n\n        toCoord > axisExtent[1] && (toCoord = axisExtent[1]);\n        toCoord < axisExtent[0] && (toCoord = axisExtent[0]);\n\n        this._currentPointer.position[0] = toCoord;\n        this._currentPointer.dirty();\n\n        var targetDataIndex = this._findNearestTick(toCoord);\n        var timelineModel = this.model;\n\n        if (trigger || (\n            targetDataIndex !== timelineModel.getCurrentIndex()\n            && timelineModel.get('realtime')\n        )) {\n            this._changeTimeline(targetDataIndex);\n        }\n    },\n\n    _doPlayStop: function () {\n        this._clearTimer();\n\n        if (this.model.getPlayState()) {\n            this._timer = setTimeout(\n                bind(handleFrame, this),\n                this.model.get('playInterval')\n            );\n        }\n\n        function handleFrame() {\n            // Do not cache\n            var timelineModel = this.model;\n            this._changeTimeline(\n                timelineModel.getCurrentIndex()\n                + (timelineModel.get('rewind', true) ? -1 : 1)\n            );\n        }\n    },\n\n    _toAxisCoord: function (vertex) {\n        var trans = this._mainGroup.getLocalTransform();\n        return graphic.applyTransform(vertex, trans, true);\n    },\n\n    _findNearestTick: function (axisCoord) {\n        var data = this.model.getData();\n        var dist = Infinity;\n        var targetDataIndex;\n        var axis = this._axis;\n\n        data.each(['value'], function (value, dataIndex) {\n            var coord = axis.dataToCoord(value);\n            var d = Math.abs(coord - axisCoord);\n            if (d < dist) {\n                dist = d;\n                targetDataIndex = dataIndex;\n            }\n        });\n\n        return targetDataIndex;\n    },\n\n    _clearTimer: function () {\n        if (this._timer) {\n            clearTimeout(this._timer);\n            this._timer = null;\n        }\n    },\n\n    _changeTimeline: function (nextIndex) {\n        var currentIndex = this.model.getCurrentIndex();\n\n        if (nextIndex === '+') {\n            nextIndex = currentIndex + 1;\n        }\n        else if (nextIndex === '-') {\n            nextIndex = currentIndex - 1;\n        }\n\n        this.api.dispatchAction({\n            type: 'timelineChange',\n            currentIndex: nextIndex,\n            from: this.uid\n        });\n    }\n\n});\n\nfunction getViewRect(model, api) {\n    return layout.getLayoutRect(\n        model.getBoxLayoutParams(),\n        {\n            width: api.getWidth(),\n            height: api.getHeight()\n        },\n        model.get('padding')\n    );\n}\n\nfunction makeIcon(timelineModel, objPath, rect, opts) {\n    var icon = graphic.makePath(\n        timelineModel.get(objPath).replace(/^path:\\/\\//, ''),\n        zrUtil.clone(opts || {}),\n        new BoundingRect(rect[0], rect[1], rect[2], rect[3]),\n        'center'\n    );\n\n    return icon;\n}\n\n/**\n * Create symbol or update symbol\n * opt: basic position and event handlers\n */\nfunction giveSymbol(hostModel, itemStyleModel, group, opt, symbol, callback) {\n    var color = itemStyleModel.get('color');\n\n    if (!symbol) {\n        var symbolType = hostModel.get('symbol');\n        symbol = createSymbol(symbolType, -1, -1, 2, 2, color);\n        symbol.setStyle('strokeNoScale', true);\n        group.add(symbol);\n        callback && callback.onCreate(symbol);\n    }\n    else {\n        symbol.setColor(color);\n        group.add(symbol); // Group may be new, also need to add.\n        callback && callback.onUpdate(symbol);\n    }\n\n    // Style\n    var itemStyle = itemStyleModel.getItemStyle(['color', 'symbol', 'symbolSize']);\n    symbol.setStyle(itemStyle);\n\n    // Transform and events.\n    opt = zrUtil.merge({\n        rectHover: true,\n        z2: 100\n    }, opt, true);\n\n    var symbolSize = hostModel.get('symbolSize');\n    symbolSize = symbolSize instanceof Array\n        ? symbolSize.slice()\n        : [+symbolSize, +symbolSize];\n    symbolSize[0] /= 2;\n    symbolSize[1] /= 2;\n    opt.scale = symbolSize;\n\n    var symbolOffset = hostModel.get('symbolOffset');\n    if (symbolOffset) {\n        var pos = opt.position = opt.position || [0, 0];\n        pos[0] += numberUtil.parsePercent(symbolOffset[0], symbolSize[0]);\n        pos[1] += numberUtil.parsePercent(symbolOffset[1], symbolSize[1]);\n    }\n\n    var symbolRotate = hostModel.get('symbolRotate');\n    opt.rotation = (symbolRotate || 0) * Math.PI / 180 || 0;\n\n    symbol.attr(opt);\n\n    // FIXME\n    // (1) When symbol.style.strokeNoScale is true and updateTransform is not performed,\n    // getBoundingRect will return wrong result.\n    // (This is supposed to be resolved in zrender, but it is a little difficult to\n    // leverage performance and auto updateTransform)\n    // (2) All of ancesters of symbol do not scale, so we can just updateTransform symbol.\n    symbol.updateTransform();\n\n    return symbol;\n}\n\nfunction pointerMoveTo(pointer, dataIndex, axis, timelineModel, noAnimation) {\n    if (pointer.dragging) {\n        return;\n    }\n\n    var pointerModel = timelineModel.getModel('checkpointStyle');\n    var toCoord = axis.dataToCoord(timelineModel.getData().get(['value'], dataIndex));\n\n    if (noAnimation || !pointerModel.get('animation', true)) {\n        pointer.attr({position: [toCoord, 0]});\n    }\n    else {\n        pointer.stopAnimation(true);\n        pointer.animateTo(\n            {position: [toCoord, 0]},\n            pointerModel.get('animationDuration', true),\n            pointerModel.get('animationEasing', true)\n        );\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * DataZoom component entry\n */\n\nimport * as echarts from '../echarts';\nimport preprocessor from './timeline/preprocessor';\n\nimport './timeline/typeDefaulter';\nimport './timeline/timelineAction';\nimport './timeline/SliderTimelineModel';\nimport './timeline/SliderTimelineView';\n\necharts.registerPreprocessor(preprocessor);\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\nimport {__DEV__} from '../../config';\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport env from 'zrender/src/core/env';\nimport * as modelUtil from '../../util/model';\nimport * as formatUtil from '../../util/format';\nimport dataFormatMixin from '../../model/mixin/dataFormat';\n\nvar addCommas = formatUtil.addCommas;\nvar encodeHTML = formatUtil.encodeHTML;\n\nfunction fillLabel(opt) {\n    modelUtil.defaultEmphasis(opt, 'label', ['show']);\n}\nvar MarkerModel = echarts.extendComponentModel({\n\n    type: 'marker',\n\n    dependencies: ['series', 'grid', 'polar', 'geo'],\n\n    /**\n     * @overrite\n     */\n    init: function (option, parentModel, ecModel) {\n\n        if (__DEV__) {\n            if (this.type === 'marker') {\n                throw new Error('Marker component is abstract component. Use markLine, markPoint, markArea instead.');\n            }\n        }\n        this.mergeDefaultAndTheme(option, ecModel);\n        this._mergeOption(option, ecModel, false, true);\n    },\n\n    /**\n     * @return {boolean}\n     */\n    isAnimationEnabled: function () {\n        if (env.node) {\n            return false;\n        }\n\n        var hostSeries = this.__hostSeries;\n        return this.getShallow('animation') && hostSeries && hostSeries.isAnimationEnabled();\n    },\n\n    /**\n     * @overrite\n     */\n    mergeOption: function (newOpt, ecModel) {\n        this._mergeOption(newOpt, ecModel, false, false);\n    },\n\n    _mergeOption: function (newOpt, ecModel, createdBySelf, isInit) {\n        var MarkerModel = this.constructor;\n        var modelPropName = this.mainType + 'Model';\n        if (!createdBySelf) {\n            ecModel.eachSeries(function (seriesModel) {\n\n                var markerOpt = seriesModel.get(this.mainType, true);\n\n                var markerModel = seriesModel[modelPropName];\n                if (!markerOpt || !markerOpt.data) {\n                    seriesModel[modelPropName] = null;\n                    return;\n                }\n                if (!markerModel) {\n                    if (isInit) {\n                        // Default label emphasis `position` and `show`\n                        fillLabel(markerOpt);\n                    }\n                    zrUtil.each(markerOpt.data, function (item) {\n                        // FIXME Overwrite fillLabel method ?\n                        if (item instanceof Array) {\n                            fillLabel(item[0]);\n                            fillLabel(item[1]);\n                        }\n                        else {\n                            fillLabel(item);\n                        }\n                    });\n\n                    markerModel = new MarkerModel(\n                        markerOpt, this, ecModel\n                    );\n\n                    zrUtil.extend(markerModel, {\n                        mainType: this.mainType,\n                        // Use the same series index and name\n                        seriesIndex: seriesModel.seriesIndex,\n                        name: seriesModel.name,\n                        createdBySelf: true\n                    });\n\n                    markerModel.__hostSeries = seriesModel;\n                }\n                else {\n                    markerModel._mergeOption(markerOpt, ecModel, true);\n                }\n                seriesModel[modelPropName] = markerModel;\n            }, this);\n        }\n    },\n\n    formatTooltip: function (dataIndex) {\n        var data = this.getData();\n        var value = this.getRawValue(dataIndex);\n        var formattedValue = zrUtil.isArray(value)\n            ? zrUtil.map(value, addCommas).join(', ') : addCommas(value);\n        var name = data.getName(dataIndex);\n        var html = encodeHTML(this.name);\n        if (value != null || name) {\n            html += '<br />';\n        }\n        if (name) {\n            html += encodeHTML(name);\n            if (value != null) {\n                html += ' : ';\n            }\n        }\n        if (value != null) {\n            html += encodeHTML(formattedValue);\n        }\n        return html;\n    },\n\n    getData: function () {\n        return this._data;\n    },\n\n    setData: function (data) {\n        this._data = data;\n    }\n});\n\nzrUtil.mixin(MarkerModel, dataFormatMixin);\n\nexport default MarkerModel;","/*\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\nimport MarkerModel from './MarkerModel';\n\nexport default MarkerModel.extend({\n\n    type: 'markPoint',\n\n    defaultOption: {\n        zlevel: 0,\n        z: 5,\n        symbol: 'pin',\n        symbolSize: 50,\n        //symbolRotate: 0,\n        //symbolOffset: [0, 0]\n        tooltip: {\n            trigger: 'item'\n        },\n        label: {\n            show: true,\n            position: 'inside'\n        },\n        itemStyle: {\n            borderWidth: 2\n        },\n        emphasis: {\n            label: {\n                show: true\n            }\n        }\n    }\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as numberUtil from '../../util/number';\nimport {isDimensionStacked} from '../../data/helper/dataStackHelper';\n\nvar indexOf = zrUtil.indexOf;\n\nfunction hasXOrY(item) {\n    return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y)));\n}\n\nfunction hasXAndY(item) {\n    return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y));\n}\n\n// Make it simple, do not visit all stacked value to count precision.\n// function getPrecision(data, valueAxisDim, dataIndex) {\n//     var precision = -1;\n//     var stackedDim = data.mapDimension(valueAxisDim);\n//     do {\n//         precision = Math.max(\n//             numberUtil.getPrecision(data.get(stackedDim, dataIndex)),\n//             precision\n//         );\n//         var stackedOnSeries = data.getCalculationInfo('stackedOnSeries');\n//         if (stackedOnSeries) {\n//             var byValue = data.get(data.getCalculationInfo('stackedByDimension'), dataIndex);\n//             data = stackedOnSeries.getData();\n//             dataIndex = data.indexOf(data.getCalculationInfo('stackedByDimension'), byValue);\n//             stackedDim = data.getCalculationInfo('stackedDimension');\n//         }\n//         else {\n//             data = null;\n//         }\n//     } while (data);\n\n//     return precision;\n// }\n\nfunction markerTypeCalculatorWithExtent(\n    mlType, data, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex\n) {\n    var coordArr = [];\n\n    var stacked = isDimensionStacked(data, targetDataDim /*, otherDataDim*/);\n    var calcDataDim = stacked\n        ? data.getCalculationInfo('stackResultDimension')\n        : targetDataDim;\n\n    var value = numCalculate(data, calcDataDim, mlType);\n\n    var dataIndex = data.indicesOfNearest(calcDataDim, value)[0];\n    coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex);\n    coordArr[targetCoordIndex] = data.get(targetDataDim, dataIndex);\n\n    // Make it simple, do not visit all stacked value to count precision.\n    var precision = numberUtil.getPrecision(data.get(targetDataDim, dataIndex));\n    precision = Math.min(precision, 20);\n    if (precision >= 0) {\n        coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision);\n    }\n\n    return coordArr;\n}\n\nvar curry = zrUtil.curry;\n// TODO Specified percent\nvar markerTypeCalculator = {\n    /**\n     * @method\n     * @param {module:echarts/data/List} data\n     * @param {string} baseAxisDim\n     * @param {string} valueAxisDim\n     */\n    min: curry(markerTypeCalculatorWithExtent, 'min'),\n    /**\n     * @method\n     * @param {module:echarts/data/List} data\n     * @param {string} baseAxisDim\n     * @param {string} valueAxisDim\n     */\n    max: curry(markerTypeCalculatorWithExtent, 'max'),\n\n    /**\n     * @method\n     * @param {module:echarts/data/List} data\n     * @param {string} baseAxisDim\n     * @param {string} valueAxisDim\n     */\n    average: curry(markerTypeCalculatorWithExtent, 'average')\n};\n\n/**\n * Transform markPoint data item to format used in List by do the following\n * 1. Calculate statistic like `max`, `min`, `average`\n * 2. Convert `item.xAxis`, `item.yAxis` to `item.coord` array\n * @param  {module:echarts/model/Series} seriesModel\n * @param  {module:echarts/coord/*} [coordSys]\n * @param  {Object} item\n * @return {Object}\n */\nexport function dataTransform(seriesModel, item) {\n    var data = seriesModel.getData();\n    var coordSys = seriesModel.coordinateSystem;\n\n    // 1. If not specify the position with pixel directly\n    // 2. If `coord` is not a data array. Which uses `xAxis`,\n    // `yAxis` to specify the coord on each dimension\n\n    // parseFloat first because item.x and item.y can be percent string like '20%'\n    if (item && !hasXAndY(item) && !zrUtil.isArray(item.coord) && coordSys) {\n        var dims = coordSys.dimensions;\n        var axisInfo = getAxisInfo(item, data, coordSys, seriesModel);\n\n        // Clone the option\n        // Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value\n        item = zrUtil.clone(item);\n\n        if (item.type\n            && markerTypeCalculator[item.type]\n            && axisInfo.baseAxis && axisInfo.valueAxis\n        ) {\n            var otherCoordIndex = indexOf(dims, axisInfo.baseAxis.dim);\n            var targetCoordIndex = indexOf(dims, axisInfo.valueAxis.dim);\n\n            item.coord = markerTypeCalculator[item.type](\n                data, axisInfo.baseDataDim, axisInfo.valueDataDim,\n                otherCoordIndex, targetCoordIndex\n            );\n            // Force to use the value of calculated value.\n            item.value = item.coord[targetCoordIndex];\n        }\n        else {\n            // FIXME Only has one of xAxis and yAxis.\n            var coord = [\n                item.xAxis != null ? item.xAxis : item.radiusAxis,\n                item.yAxis != null ? item.yAxis : item.angleAxis\n            ];\n            // Each coord support max, min, average\n            for (var i = 0; i < 2; i++) {\n                if (markerTypeCalculator[coord[i]]) {\n                    coord[i] = numCalculate(data, data.mapDimension(dims[i]), coord[i]);\n                }\n            }\n            item.coord = coord;\n        }\n    }\n    return item;\n}\n\nexport function getAxisInfo(item, data, coordSys, seriesModel) {\n    var ret = {};\n\n    if (item.valueIndex != null || item.valueDim != null) {\n        ret.valueDataDim = item.valueIndex != null\n            ? data.getDimension(item.valueIndex) : item.valueDim;\n        ret.valueAxis = coordSys.getAxis(dataDimToCoordDim(seriesModel, ret.valueDataDim));\n        ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis);\n        ret.baseDataDim = data.mapDimension(ret.baseAxis.dim);\n    }\n    else {\n        ret.baseAxis = seriesModel.getBaseAxis();\n        ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis);\n        ret.baseDataDim = data.mapDimension(ret.baseAxis.dim);\n        ret.valueDataDim = data.mapDimension(ret.valueAxis.dim);\n    }\n\n    return ret;\n}\n\nfunction dataDimToCoordDim(seriesModel, dataDim) {\n    var data = seriesModel.getData();\n    var dimensions = data.dimensions;\n    dataDim = data.getDimension(dataDim);\n    for (var i = 0; i < dimensions.length; i++) {\n        var dimItem = data.getDimensionInfo(dimensions[i]);\n        if (dimItem.name === dataDim) {\n            return dimItem.coordDim;\n        }\n    }\n}\n\n/**\n * Filter data which is out of coordinateSystem range\n * [dataFilter description]\n * @param  {module:echarts/coord/*} [coordSys]\n * @param  {Object} item\n * @return {boolean}\n */\nexport function dataFilter(coordSys, item) {\n    // Alwalys return true if there is no coordSys\n    return (coordSys && coordSys.containData && item.coord && !hasXOrY(item))\n        ? coordSys.containData(item.coord) : true;\n}\n\nexport function dimValueGetter(item, dimName, dataIndex, dimIndex) {\n    // x, y, radius, angle\n    if (dimIndex < 2) {\n        return item.coord && item.coord[dimIndex];\n    }\n    return item.value;\n}\n\nexport function numCalculate(data, valueDataDim, type) {\n    if (type === 'average') {\n        var sum = 0;\n        var count = 0;\n        data.each(valueDataDim, function (val, idx) {\n            if (!isNaN(val)) {\n                sum += val;\n                count++;\n            }\n        });\n        return sum / count;\n    }\n    else if (type === 'median') {\n        return data.getMedian(valueDataDim);\n    }\n    else {\n        // max & min\n        return data.getDataExtent(valueDataDim, true)[type === 'max' ? 1 : 0];\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\n\nexport default echarts.extendComponentView({\n\n    type: 'marker',\n\n    init: function () {\n        /**\n         * Markline grouped by series\n         * @private\n         * @type {module:zrender/core/util.HashMap}\n         */\n        this.markerGroupMap = zrUtil.createHashMap();\n    },\n\n    render: function (markerModel, ecModel, api) {\n        var markerGroupMap = this.markerGroupMap;\n        markerGroupMap.each(function (item) {\n            item.__keep = false;\n        });\n\n        var markerModelKey = this.type + 'Model';\n        ecModel.eachSeries(function (seriesModel) {\n            var markerModel = seriesModel[markerModelKey];\n            markerModel && this.renderSeries(seriesModel, markerModel, ecModel, api);\n        }, this);\n\n        markerGroupMap.each(function (item) {\n            !item.__keep && this.group.remove(item.group);\n        }, this);\n    },\n\n    renderSeries: function () {}\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport SymbolDraw from '../../chart/helper/SymbolDraw';\nimport * as numberUtil from '../../util/number';\nimport List from '../../data/List';\nimport * as markerHelper from './markerHelper';\nimport MarkerView from './MarkerView';\n\nfunction updateMarkerLayout(mpData, seriesModel, api) {\n    var coordSys = seriesModel.coordinateSystem;\n    mpData.each(function (idx) {\n        var itemModel = mpData.getItemModel(idx);\n        var point;\n        var xPx = numberUtil.parsePercent(itemModel.get('x'), api.getWidth());\n        var yPx = numberUtil.parsePercent(itemModel.get('y'), api.getHeight());\n        if (!isNaN(xPx) && !isNaN(yPx)) {\n            point = [xPx, yPx];\n        }\n        // Chart like bar may have there own marker positioning logic\n        else if (seriesModel.getMarkerPosition) {\n            // Use the getMarkerPoisition\n            point = seriesModel.getMarkerPosition(\n                mpData.getValues(mpData.dimensions, idx)\n            );\n        }\n        else if (coordSys) {\n            var x = mpData.get(coordSys.dimensions[0], idx);\n            var y = mpData.get(coordSys.dimensions[1], idx);\n            point = coordSys.dataToPoint([x, y]);\n\n        }\n\n        // Use x, y if has any\n        if (!isNaN(xPx)) {\n            point[0] = xPx;\n        }\n        if (!isNaN(yPx)) {\n            point[1] = yPx;\n        }\n\n        mpData.setItemLayout(idx, point);\n    });\n}\n\nexport default MarkerView.extend({\n\n    type: 'markPoint',\n\n    // updateLayout: function (markPointModel, ecModel, api) {\n    //     ecModel.eachSeries(function (seriesModel) {\n    //         var mpModel = seriesModel.markPointModel;\n    //         if (mpModel) {\n    //             updateMarkerLayout(mpModel.getData(), seriesModel, api);\n    //             this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel);\n    //         }\n    //     }, this);\n    // },\n\n    updateTransform: function (markPointModel, ecModel, api) {\n        ecModel.eachSeries(function (seriesModel) {\n            var mpModel = seriesModel.markPointModel;\n            if (mpModel) {\n                updateMarkerLayout(mpModel.getData(), seriesModel, api);\n                this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel);\n            }\n        }, this);\n    },\n\n    renderSeries: function (seriesModel, mpModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n        var seriesId = seriesModel.id;\n        var seriesData = seriesModel.getData();\n\n        var symbolDrawMap = this.markerGroupMap;\n        var symbolDraw = symbolDrawMap.get(seriesId)\n            || symbolDrawMap.set(seriesId, new SymbolDraw());\n\n        var mpData = createList(coordSys, seriesModel, mpModel);\n\n        // FIXME\n        mpModel.setData(mpData);\n\n        updateMarkerLayout(mpModel.getData(), seriesModel, api);\n\n        mpData.each(function (idx) {\n            var itemModel = mpData.getItemModel(idx);\n            var symbol = itemModel.getShallow('symbol');\n            var symbolSize = itemModel.getShallow('symbolSize');\n            var isFnSymbol = zrUtil.isFunction(symbol);\n            var isFnSymbolSize = zrUtil.isFunction(symbolSize);\n\n            if (isFnSymbol || isFnSymbolSize) {\n                var rawIdx = mpModel.getRawValue(idx);\n                var dataParams = mpModel.getDataParams(idx);\n                if (isFnSymbol) {\n                    symbol = symbol(rawIdx, dataParams);\n                }\n                if (isFnSymbolSize) {\n                    // FIXME 这里不兼容 ECharts 2.x，2.x 貌似参数是整个数据？\n                    symbolSize = symbolSize(rawIdx, dataParams);\n                }\n            }\n\n            mpData.setItemVisual(idx, {\n                symbol: symbol,\n                symbolSize: symbolSize,\n                color: itemModel.get('itemStyle.color')\n                    || seriesData.getVisual('color')\n            });\n        });\n\n        // TODO Text are wrong\n        symbolDraw.updateData(mpData);\n        this.group.add(symbolDraw.group);\n\n        // Set host model for tooltip\n        // FIXME\n        mpData.eachItemGraphicEl(function (el) {\n            el.traverse(function (child) {\n                child.dataModel = mpModel;\n            });\n        });\n\n        symbolDraw.__keep = true;\n\n        symbolDraw.group.silent = mpModel.get('silent') || seriesModel.get('silent');\n    }\n});\n\n/**\n * @inner\n * @param {module:echarts/coord/*} [coordSys]\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Model} mpModel\n */\nfunction createList(coordSys, seriesModel, mpModel) {\n    var coordDimsInfos;\n    if (coordSys) {\n        coordDimsInfos = zrUtil.map(coordSys && coordSys.dimensions, function (coordDim) {\n            var info = seriesModel.getData().getDimensionInfo(\n                seriesModel.getData().mapDimension(coordDim)\n            ) || {};\n            // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n            return zrUtil.defaults({name: coordDim}, info);\n        });\n    }\n    else {\n        coordDimsInfos = [{\n            name: 'value',\n            type: 'float'\n        }];\n    }\n\n    var mpData = new List(coordDimsInfos, mpModel);\n    var dataOpt = zrUtil.map(mpModel.get('data'), zrUtil.curry(\n            markerHelper.dataTransform, seriesModel\n        ));\n    if (coordSys) {\n        dataOpt = zrUtil.filter(\n            dataOpt, zrUtil.curry(markerHelper.dataFilter, coordSys)\n        );\n    }\n\n    mpData.initData(dataOpt, null,\n        coordSys ? markerHelper.dimValueGetter : function (item) {\n            return item.value;\n        }\n    );\n\n    return mpData;\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// HINT Markpoint can't be used too much\nimport * as echarts from '../echarts';\n\nimport './marker/MarkPointModel';\nimport './marker/MarkPointView';\n\necharts.registerPreprocessor(function (opt) {\n    // Make sure markPoint component is enabled\n    opt.markPoint = opt.markPoint || {};\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\nimport MarkerModel from './MarkerModel';\n\nexport default MarkerModel.extend({\n\n    type: 'markLine',\n\n    defaultOption: {\n        zlevel: 0,\n        z: 5,\n\n        symbol: ['circle', 'arrow'],\n        symbolSize: [8, 16],\n\n        //symbolRotate: 0,\n\n        precision: 2,\n        tooltip: {\n            trigger: 'item'\n        },\n        label: {\n            show: true,\n            position: 'end'\n        },\n        lineStyle: {\n            type: 'dashed'\n        },\n        emphasis: {\n            label: {\n                show: true\n            },\n            lineStyle: {\n                width: 3\n            }\n        },\n        animationEasing: 'linear'\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport List from '../../data/List';\nimport * as numberUtil from '../../util/number';\nimport * as markerHelper from './markerHelper';\nimport LineDraw from '../../chart/helper/LineDraw';\nimport MarkerView from './MarkerView';\nimport {getStackedDimension} from '../../data/helper/dataStackHelper';\n\nvar markLineTransform = function (seriesModel, coordSys, mlModel, item) {\n    var data = seriesModel.getData();\n    // Special type markLine like 'min', 'max', 'average', 'median'\n    var mlType = item.type;\n\n    if (!zrUtil.isArray(item)\n        && (\n            mlType === 'min' || mlType === 'max' || mlType === 'average' || mlType === 'median'\n            // In case\n            // data: [{\n            //   yAxis: 10\n            // }]\n            || (item.xAxis != null || item.yAxis != null)\n        )\n    ) {\n        var valueAxis;\n        var value;\n\n        if (item.yAxis != null || item.xAxis != null) {\n            valueAxis = coordSys.getAxis(item.yAxis != null ? 'y' : 'x');\n            value = zrUtil.retrieve(item.yAxis, item.xAxis);\n        }\n        else {\n            var axisInfo = markerHelper.getAxisInfo(item, data, coordSys, seriesModel);\n            valueAxis = axisInfo.valueAxis;\n            var valueDataDim = getStackedDimension(data, axisInfo.valueDataDim);\n            value = markerHelper.numCalculate(data, valueDataDim, mlType);\n        }\n        var valueIndex = valueAxis.dim === 'x' ? 0 : 1;\n        var baseIndex = 1 - valueIndex;\n\n        var mlFrom = zrUtil.clone(item);\n        var mlTo = {};\n\n        mlFrom.type = null;\n\n        mlFrom.coord = [];\n        mlTo.coord = [];\n        mlFrom.coord[baseIndex] = -Infinity;\n        mlTo.coord[baseIndex] = Infinity;\n\n        var precision = mlModel.get('precision');\n        if (precision >= 0 && typeof value === 'number') {\n            value = +value.toFixed(Math.min(precision, 20));\n        }\n\n        mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value;\n\n        item = [mlFrom, mlTo, { // Extra option for tooltip and label\n            type: mlType,\n            valueIndex: item.valueIndex,\n            // Force to use the value of calculated value.\n            value: value\n        }];\n    }\n\n    item = [\n        markerHelper.dataTransform(seriesModel, item[0]),\n        markerHelper.dataTransform(seriesModel, item[1]),\n        zrUtil.extend({}, item[2])\n    ];\n\n    // Avoid line data type is extended by from(to) data type\n    item[2].type = item[2].type || '';\n\n    // Merge from option and to option into line option\n    zrUtil.merge(item[2], item[0]);\n    zrUtil.merge(item[2], item[1]);\n\n    return item;\n};\n\nfunction isInifinity(val) {\n    return !isNaN(val) && !isFinite(val);\n}\n\n// If a markLine has one dim\nfunction ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {\n    var otherDimIndex = 1 - dimIndex;\n    var dimName = coordSys.dimensions[dimIndex];\n    return isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex])\n        && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]);\n}\n\nfunction markLineFilter(coordSys, item) {\n    if (coordSys.type === 'cartesian2d') {\n        var fromCoord = item[0].coord;\n        var toCoord = item[1].coord;\n        // In case\n        // {\n        //  markLine: {\n        //    data: [{ yAxis: 2 }]\n        //  }\n        // }\n        if (\n            fromCoord && toCoord\n            && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys)\n            || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))\n        ) {\n            return true;\n        }\n    }\n    return markerHelper.dataFilter(coordSys, item[0])\n        && markerHelper.dataFilter(coordSys, item[1]);\n}\n\nfunction updateSingleMarkerEndLayout(\n    data, idx, isFrom, seriesModel, api\n) {\n    var coordSys = seriesModel.coordinateSystem;\n    var itemModel = data.getItemModel(idx);\n\n    var point;\n    var xPx = numberUtil.parsePercent(itemModel.get('x'), api.getWidth());\n    var yPx = numberUtil.parsePercent(itemModel.get('y'), api.getHeight());\n    if (!isNaN(xPx) && !isNaN(yPx)) {\n        point = [xPx, yPx];\n    }\n    else {\n        // Chart like bar may have there own marker positioning logic\n        if (seriesModel.getMarkerPosition) {\n            // Use the getMarkerPoisition\n            point = seriesModel.getMarkerPosition(\n                data.getValues(data.dimensions, idx)\n            );\n        }\n        else {\n            var dims = coordSys.dimensions;\n            var x = data.get(dims[0], idx);\n            var y = data.get(dims[1], idx);\n            point = coordSys.dataToPoint([x, y]);\n        }\n        // Expand line to the edge of grid if value on one axis is Inifnity\n        // In case\n        //  markLine: {\n        //    data: [{\n        //      yAxis: 2\n        //      // or\n        //      type: 'average'\n        //    }]\n        //  }\n        if (coordSys.type === 'cartesian2d') {\n            var xAxis = coordSys.getAxis('x');\n            var yAxis = coordSys.getAxis('y');\n            var dims = coordSys.dimensions;\n            if (isInifinity(data.get(dims[0], idx))) {\n                point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]);\n            }\n            else if (isInifinity(data.get(dims[1], idx))) {\n                point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]);\n            }\n        }\n\n        // Use x, y if has any\n        if (!isNaN(xPx)) {\n            point[0] = xPx;\n        }\n        if (!isNaN(yPx)) {\n            point[1] = yPx;\n        }\n    }\n\n    data.setItemLayout(idx, point);\n}\n\nexport default MarkerView.extend({\n\n    type: 'markLine',\n\n    // updateLayout: function (markLineModel, ecModel, api) {\n    //     ecModel.eachSeries(function (seriesModel) {\n    //         var mlModel = seriesModel.markLineModel;\n    //         if (mlModel) {\n    //             var mlData = mlModel.getData();\n    //             var fromData = mlModel.__from;\n    //             var toData = mlModel.__to;\n    //             // Update visual and layout of from symbol and to symbol\n    //             fromData.each(function (idx) {\n    //                 updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api);\n    //                 updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api);\n    //             });\n    //             // Update layout of line\n    //             mlData.each(function (idx) {\n    //                 mlData.setItemLayout(idx, [\n    //                     fromData.getItemLayout(idx),\n    //                     toData.getItemLayout(idx)\n    //                 ]);\n    //             });\n\n    //             this.markerGroupMap.get(seriesModel.id).updateLayout();\n\n    //         }\n    //     }, this);\n    // },\n\n    updateTransform: function (markLineModel, ecModel, api) {\n        ecModel.eachSeries(function (seriesModel) {\n            var mlModel = seriesModel.markLineModel;\n            if (mlModel) {\n                var mlData = mlModel.getData();\n                var fromData = mlModel.__from;\n                var toData = mlModel.__to;\n                // Update visual and layout of from symbol and to symbol\n                fromData.each(function (idx) {\n                    updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api);\n                    updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api);\n                });\n                // Update layout of line\n                mlData.each(function (idx) {\n                    mlData.setItemLayout(idx, [\n                        fromData.getItemLayout(idx),\n                        toData.getItemLayout(idx)\n                    ]);\n                });\n\n                this.markerGroupMap.get(seriesModel.id).updateLayout();\n\n            }\n        }, this);\n    },\n\n    renderSeries: function (seriesModel, mlModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n        var seriesId = seriesModel.id;\n        var seriesData = seriesModel.getData();\n\n        var lineDrawMap = this.markerGroupMap;\n        var lineDraw = lineDrawMap.get(seriesId)\n            || lineDrawMap.set(seriesId, new LineDraw());\n        this.group.add(lineDraw.group);\n\n        var mlData = createList(coordSys, seriesModel, mlModel);\n\n        var fromData = mlData.from;\n        var toData = mlData.to;\n        var lineData = mlData.line;\n\n        mlModel.__from = fromData;\n        mlModel.__to = toData;\n        // Line data for tooltip and formatter\n        mlModel.setData(lineData);\n\n        var symbolType = mlModel.get('symbol');\n        var symbolSize = mlModel.get('symbolSize');\n        if (!zrUtil.isArray(symbolType)) {\n            symbolType = [symbolType, symbolType];\n        }\n        if (typeof symbolSize === 'number') {\n            symbolSize = [symbolSize, symbolSize];\n        }\n\n        // Update visual and layout of from symbol and to symbol\n        mlData.from.each(function (idx) {\n            updateDataVisualAndLayout(fromData, idx, true);\n            updateDataVisualAndLayout(toData, idx, false);\n        });\n\n        // Update visual and layout of line\n        lineData.each(function (idx) {\n            var lineColor = lineData.getItemModel(idx).get('lineStyle.color');\n            lineData.setItemVisual(idx, {\n                color: lineColor || fromData.getItemVisual(idx, 'color')\n            });\n            lineData.setItemLayout(idx, [\n                fromData.getItemLayout(idx),\n                toData.getItemLayout(idx)\n            ]);\n\n            lineData.setItemVisual(idx, {\n                'fromSymbolSize': fromData.getItemVisual(idx, 'symbolSize'),\n                'fromSymbol': fromData.getItemVisual(idx, 'symbol'),\n                'toSymbolSize': toData.getItemVisual(idx, 'symbolSize'),\n                'toSymbol': toData.getItemVisual(idx, 'symbol')\n            });\n        });\n\n        lineDraw.updateData(lineData);\n\n        // Set host model for tooltip\n        // FIXME\n        mlData.line.eachItemGraphicEl(function (el, idx) {\n            el.traverse(function (child) {\n                child.dataModel = mlModel;\n            });\n        });\n\n        function updateDataVisualAndLayout(data, idx, isFrom) {\n            var itemModel = data.getItemModel(idx);\n\n            updateSingleMarkerEndLayout(\n                data, idx, isFrom, seriesModel, api\n            );\n\n            data.setItemVisual(idx, {\n                symbolSize: itemModel.get('symbolSize') || symbolSize[isFrom ? 0 : 1],\n                symbol: itemModel.get('symbol', true) || symbolType[isFrom ? 0 : 1],\n                color: itemModel.get('itemStyle.color') || seriesData.getVisual('color')\n            });\n        }\n\n        lineDraw.__keep = true;\n\n        lineDraw.group.silent = mlModel.get('silent') || seriesModel.get('silent');\n    }\n});\n\n/**\n * @inner\n * @param {module:echarts/coord/*} coordSys\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Model} mpModel\n */\nfunction createList(coordSys, seriesModel, mlModel) {\n\n    var coordDimsInfos;\n    if (coordSys) {\n        coordDimsInfos = zrUtil.map(coordSys && coordSys.dimensions, function (coordDim) {\n            var info = seriesModel.getData().getDimensionInfo(\n                seriesModel.getData().mapDimension(coordDim)\n            ) || {};\n            // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n            return zrUtil.defaults({name: coordDim}, info);\n        });\n    }\n    else {\n        coordDimsInfos = [{\n            name: 'value',\n            type: 'float'\n        }];\n    }\n\n    var fromData = new List(coordDimsInfos, mlModel);\n    var toData = new List(coordDimsInfos, mlModel);\n    // No dimensions\n    var lineData = new List([], mlModel);\n\n    var optData = zrUtil.map(mlModel.get('data'), zrUtil.curry(\n        markLineTransform, seriesModel, coordSys, mlModel\n    ));\n    if (coordSys) {\n        optData = zrUtil.filter(\n            optData, zrUtil.curry(markLineFilter, coordSys)\n        );\n    }\n    var dimValueGetter = coordSys ? markerHelper.dimValueGetter : function (item) {\n        return item.value;\n    };\n    fromData.initData(\n        zrUtil.map(optData, function (item) {\n            return item[0];\n        }),\n        null,\n        dimValueGetter\n    );\n    toData.initData(\n        zrUtil.map(optData, function (item) {\n            return item[1];\n        }),\n        null,\n        dimValueGetter\n    );\n    lineData.initData(\n        zrUtil.map(optData, function (item) {\n            return item[2];\n        })\n    );\n    lineData.hasItemOption = true;\n\n    return {\n        from: fromData,\n        to: toData,\n        line: lineData\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as echarts from '../echarts';\n\nimport './marker/MarkLineModel';\nimport './marker/MarkLineView';\n\necharts.registerPreprocessor(function (opt) {\n    // Make sure markLine component is enabled\n    opt.markLine = opt.markLine || {};\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\nimport MarkerModel from './MarkerModel';\n\nexport default MarkerModel.extend({\n\n    type: 'markArea',\n\n    defaultOption: {\n        zlevel: 0,\n        // PENDING\n        z: 1,\n        tooltip: {\n            trigger: 'item'\n        },\n        // markArea should fixed on the coordinate system\n        animation: false,\n        label: {\n            show: true,\n            position: 'top'\n        },\n        itemStyle: {\n            // color and borderColor default to use color from series\n            // color: 'auto'\n            // borderColor: 'auto'\n            borderWidth: 0\n        },\n\n        emphasis: {\n            label: {\n                show: true,\n                position: 'top'\n            }\n        }\n    }\n});","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// TODO Better on polar\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as colorUtil from 'zrender/src/tool/color';\nimport List from '../../data/List';\nimport * as numberUtil from '../../util/number';\nimport * as graphic from '../../util/graphic';\nimport * as markerHelper from './markerHelper';\nimport MarkerView from './MarkerView';\n\n\nvar markAreaTransform = function (seriesModel, coordSys, maModel, item) {\n    var lt = markerHelper.dataTransform(seriesModel, item[0]);\n    var rb = markerHelper.dataTransform(seriesModel, item[1]);\n    var retrieve = zrUtil.retrieve;\n\n    // FIXME make sure lt is less than rb\n    var ltCoord = lt.coord;\n    var rbCoord = rb.coord;\n    ltCoord[0] = retrieve(ltCoord[0], -Infinity);\n    ltCoord[1] = retrieve(ltCoord[1], -Infinity);\n\n    rbCoord[0] = retrieve(rbCoord[0], Infinity);\n    rbCoord[1] = retrieve(rbCoord[1], Infinity);\n\n    // Merge option into one\n    var result = zrUtil.mergeAll([{}, lt, rb]);\n\n    result.coord = [\n        lt.coord, rb.coord\n    ];\n    result.x0 = lt.x;\n    result.y0 = lt.y;\n    result.x1 = rb.x;\n    result.y1 = rb.y;\n    return result;\n};\n\nfunction isInifinity(val) {\n    return !isNaN(val) && !isFinite(val);\n}\n\n// If a markArea has one dim\nfunction ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {\n    var otherDimIndex = 1 - dimIndex;\n    return isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex]);\n}\n\nfunction markAreaFilter(coordSys, item) {\n    var fromCoord = item.coord[0];\n    var toCoord = item.coord[1];\n    if (coordSys.type === 'cartesian2d') {\n        // In case\n        // {\n        //  markArea: {\n        //    data: [{ yAxis: 2 }]\n        //  }\n        // }\n        if (\n            fromCoord && toCoord\n            && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys)\n            || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))\n        ) {\n            return true;\n        }\n    }\n    return markerHelper.dataFilter(coordSys, {\n            coord: fromCoord,\n            x: item.x0,\n            y: item.y0\n        })\n        || markerHelper.dataFilter(coordSys, {\n            coord: toCoord,\n            x: item.x1,\n            y: item.y1\n        });\n}\n\n// dims can be ['x0', 'y0'], ['x1', 'y1'], ['x0', 'y1'], ['x1', 'y0']\nfunction getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) {\n    var coordSys = seriesModel.coordinateSystem;\n    var itemModel = data.getItemModel(idx);\n\n    var point;\n    var xPx = numberUtil.parsePercent(itemModel.get(dims[0]), api.getWidth());\n    var yPx = numberUtil.parsePercent(itemModel.get(dims[1]), api.getHeight());\n    if (!isNaN(xPx) && !isNaN(yPx)) {\n        point = [xPx, yPx];\n    }\n    else {\n        // Chart like bar may have there own marker positioning logic\n        if (seriesModel.getMarkerPosition) {\n            // Use the getMarkerPoisition\n            point = seriesModel.getMarkerPosition(\n                data.getValues(dims, idx)\n            );\n        }\n        else {\n            var x = data.get(dims[0], idx);\n            var y = data.get(dims[1], idx);\n            var pt = [x, y];\n            coordSys.clampData && coordSys.clampData(pt, pt);\n            point = coordSys.dataToPoint(pt, true);\n        }\n        if (coordSys.type === 'cartesian2d') {\n            var xAxis = coordSys.getAxis('x');\n            var yAxis = coordSys.getAxis('y');\n            var x = data.get(dims[0], idx);\n            var y = data.get(dims[1], idx);\n            if (isInifinity(x)) {\n                point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === 'x0' ? 0 : 1]);\n            }\n            else if (isInifinity(y)) {\n                point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === 'y0' ? 0 : 1]);\n            }\n        }\n\n        // Use x, y if has any\n        if (!isNaN(xPx)) {\n            point[0] = xPx;\n        }\n        if (!isNaN(yPx)) {\n            point[1] = yPx;\n        }\n    }\n\n    return point;\n}\n\nvar dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']];\n\nMarkerView.extend({\n\n    type: 'markArea',\n\n    // updateLayout: function (markAreaModel, ecModel, api) {\n    //     ecModel.eachSeries(function (seriesModel) {\n    //         var maModel = seriesModel.markAreaModel;\n    //         if (maModel) {\n    //             var areaData = maModel.getData();\n    //             areaData.each(function (idx) {\n    //                 var points = zrUtil.map(dimPermutations, function (dim) {\n    //                     return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);\n    //                 });\n    //                 // Layout\n    //                 areaData.setItemLayout(idx, points);\n    //                 var el = areaData.getItemGraphicEl(idx);\n    //                 el.setShape('points', points);\n    //             });\n    //         }\n    //     }, this);\n    // },\n\n    updateTransform: function (markAreaModel, ecModel, api) {\n        ecModel.eachSeries(function (seriesModel) {\n            var maModel = seriesModel.markAreaModel;\n            if (maModel) {\n                var areaData = maModel.getData();\n                areaData.each(function (idx) {\n                    var points = zrUtil.map(dimPermutations, function (dim) {\n                        return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);\n                    });\n                    // Layout\n                    areaData.setItemLayout(idx, points);\n                    var el = areaData.getItemGraphicEl(idx);\n                    el.setShape('points', points);\n                });\n            }\n        }, this);\n    },\n\n    renderSeries: function (seriesModel, maModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n        var seriesId = seriesModel.id;\n        var seriesData = seriesModel.getData();\n\n        var areaGroupMap = this.markerGroupMap;\n        var polygonGroup = areaGroupMap.get(seriesId)\n            || areaGroupMap.set(seriesId, {group: new graphic.Group()});\n\n        this.group.add(polygonGroup.group);\n        polygonGroup.__keep = true;\n\n        var areaData = createList(coordSys, seriesModel, maModel);\n\n        // Line data for tooltip and formatter\n        maModel.setData(areaData);\n\n        // Update visual and layout of line\n        areaData.each(function (idx) {\n            // Layout\n            areaData.setItemLayout(idx, zrUtil.map(dimPermutations, function (dim) {\n                return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);\n            }));\n\n            // Visual\n            areaData.setItemVisual(idx, {\n                color: seriesData.getVisual('color')\n            });\n        });\n\n\n        areaData.diff(polygonGroup.__data)\n            .add(function (idx) {\n                var polygon = new graphic.Polygon({\n                    shape: {\n                        points: areaData.getItemLayout(idx)\n                    }\n                });\n                areaData.setItemGraphicEl(idx, polygon);\n                polygonGroup.group.add(polygon);\n            })\n            .update(function (newIdx, oldIdx) {\n                var polygon = polygonGroup.__data.getItemGraphicEl(oldIdx);\n                graphic.updateProps(polygon, {\n                    shape: {\n                        points: areaData.getItemLayout(newIdx)\n                    }\n                }, maModel, newIdx);\n                polygonGroup.group.add(polygon);\n                areaData.setItemGraphicEl(newIdx, polygon);\n            })\n            .remove(function (idx) {\n                var polygon = polygonGroup.__data.getItemGraphicEl(idx);\n                polygonGroup.group.remove(polygon);\n            })\n            .execute();\n\n        areaData.eachItemGraphicEl(function (polygon, idx) {\n            var itemModel = areaData.getItemModel(idx);\n            var labelModel = itemModel.getModel('label');\n            var labelHoverModel = itemModel.getModel('emphasis.label');\n            var color = areaData.getItemVisual(idx, 'color');\n            polygon.useStyle(\n                zrUtil.defaults(\n                    itemModel.getModel('itemStyle').getItemStyle(),\n                    {\n                        fill: colorUtil.modifyAlpha(color, 0.4),\n                        stroke: color\n                    }\n                )\n            );\n\n            polygon.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n\n            graphic.setLabelStyle(\n                polygon.style, polygon.hoverStyle, labelModel, labelHoverModel,\n                {\n                    labelFetcher: maModel,\n                    labelDataIndex: idx,\n                    defaultText: areaData.getName(idx) || '',\n                    isRectText: true,\n                    autoColor: color\n                }\n            );\n\n            graphic.setHoverStyle(polygon, {});\n\n            polygon.dataModel = maModel;\n        });\n\n        polygonGroup.__data = areaData;\n\n        polygonGroup.group.silent = maModel.get('silent') || seriesModel.get('silent');\n    }\n});\n\n/**\n * @inner\n * @param {module:echarts/coord/*} coordSys\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Model} mpModel\n */\nfunction createList(coordSys, seriesModel, maModel) {\n\n    var coordDimsInfos;\n    var areaData;\n    var dims = ['x0', 'y0', 'x1', 'y1'];\n    if (coordSys) {\n        coordDimsInfos = zrUtil.map(coordSys && coordSys.dimensions, function (coordDim) {\n            var data = seriesModel.getData();\n            var info = data.getDimensionInfo(\n                data.mapDimension(coordDim)\n            ) || {};\n            // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n            return zrUtil.defaults({name: coordDim}, info);\n        });\n        areaData = new List(zrUtil.map(dims, function (dim, idx) {\n            return {\n                name: dim,\n                type: coordDimsInfos[idx % 2].type\n            };\n        }), maModel);\n    }\n    else {\n        coordDimsInfos = [{\n            name: 'value',\n            type: 'float'\n        }];\n        areaData = new List(coordDimsInfos, maModel);\n    }\n\n    var optData = zrUtil.map(maModel.get('data'), zrUtil.curry(\n        markAreaTransform, seriesModel, coordSys, maModel\n    ));\n    if (coordSys) {\n        optData = zrUtil.filter(\n            optData, zrUtil.curry(markAreaFilter, coordSys)\n        );\n    }\n\n    var dimValueGetter = coordSys ? function (item, dimName, dataIndex, dimIndex) {\n        return item.coord[Math.floor(dimIndex / 2)][dimIndex % 2];\n    } : function (item) {\n        return item.value;\n    };\n    areaData.initData(optData, null, dimValueGetter);\n    areaData.hasItemOption = true;\n    return areaData;\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\nimport * as echarts from '../echarts';\n\nimport './marker/MarkAreaModel';\nimport './marker/MarkAreaView';\n\necharts.registerPreprocessor(function (opt) {\n    // Make sure markArea component is enabled\n    opt.markArea = opt.markArea || {};\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport Model from '../../model/Model';\nimport {isNameSpecified} from '../../util/model';\nimport lang from '../../lang';\n\nvar langSelector = lang.legend.selector;\n\nvar defaultSelectorOption = {\n    all: {\n        type: 'all',\n        title: zrUtil.clone(langSelector.all)\n    },\n    inverse: {\n        type: 'inverse',\n        title: zrUtil.clone(langSelector.inverse)\n    }\n};\n\nvar LegendModel = echarts.extendComponentModel({\n\n    type: 'legend.plain',\n\n    dependencies: ['series'],\n\n    layoutMode: {\n        type: 'box',\n        // legend.width/height are maxWidth/maxHeight actually,\n        // whereas realy width/height is calculated by its content.\n        // (Setting {left: 10, right: 10} does not make sense).\n        // So consider the case:\n        // `setOption({legend: {left: 10});`\n        // then `setOption({legend: {right: 10});`\n        // The previous `left` should be cleared by setting `ignoreSize`.\n        ignoreSize: true\n    },\n\n    init: function (option, parentModel, ecModel) {\n        this.mergeDefaultAndTheme(option, ecModel);\n\n        option.selected = option.selected || {};\n        this._updateSelector(option);\n    },\n\n    mergeOption: function (option) {\n        LegendModel.superCall(this, 'mergeOption', option);\n        this._updateSelector(option);\n    },\n\n    _updateSelector: function (option) {\n        var selector = option.selector;\n        if (selector === true) {\n            selector = option.selector = ['all', 'inverse'];\n        }\n        if (zrUtil.isArray(selector)) {\n            zrUtil.each(selector, function (item, index) {\n                zrUtil.isString(item) && (item = {type: item});\n                selector[index] = zrUtil.merge(item, defaultSelectorOption[item.type]);\n            });\n        }\n    },\n\n    optionUpdated: function () {\n        this._updateData(this.ecModel);\n\n        var legendData = this._data;\n\n        // If selectedMode is single, try to select one\n        if (legendData[0] && this.get('selectedMode') === 'single') {\n            var hasSelected = false;\n            // If has any selected in option.selected\n            for (var i = 0; i < legendData.length; i++) {\n                var name = legendData[i].get('name');\n                if (this.isSelected(name)) {\n                    // Force to unselect others\n                    this.select(name);\n                    hasSelected = true;\n                    break;\n                }\n            }\n            // Try select the first if selectedMode is single\n            !hasSelected && this.select(legendData[0].get('name'));\n        }\n    },\n\n    _updateData: function (ecModel) {\n        var potentialData = [];\n        var availableNames = [];\n\n        ecModel.eachRawSeries(function (seriesModel) {\n            var seriesName = seriesModel.name;\n            availableNames.push(seriesName);\n            var isPotential;\n\n            if (seriesModel.legendDataProvider) {\n                var data = seriesModel.legendDataProvider();\n                var names = data.mapArray(data.getName);\n\n                if (!ecModel.isSeriesFiltered(seriesModel)) {\n                    availableNames = availableNames.concat(names);\n                }\n\n                if (names.length) {\n                    potentialData = potentialData.concat(names);\n                }\n                else {\n                    isPotential = true;\n                }\n            }\n            else {\n                isPotential = true;\n            }\n\n            if (isPotential && isNameSpecified(seriesModel)) {\n                potentialData.push(seriesModel.name);\n            }\n        });\n\n        /**\n         * @type {Array.<string>}\n         * @private\n         */\n        this._availableNames = availableNames;\n\n        // If legend.data not specified in option, use availableNames as data,\n        // which is convinient for user preparing option.\n        var rawData = this.get('data') || potentialData;\n\n        var legendData = zrUtil.map(rawData, function (dataItem) {\n            // Can be string or number\n            if (typeof dataItem === 'string' || typeof dataItem === 'number') {\n                dataItem = {\n                    name: dataItem\n                };\n            }\n            return new Model(dataItem, this, this.ecModel);\n        }, this);\n\n        /**\n         * @type {Array.<module:echarts/model/Model>}\n         * @private\n         */\n        this._data = legendData;\n    },\n\n    /**\n     * @return {Array.<module:echarts/model/Model>}\n     */\n    getData: function () {\n        return this._data;\n    },\n\n    /**\n     * @param {string} name\n     */\n    select: function (name) {\n        var selected = this.option.selected;\n        var selectedMode = this.get('selectedMode');\n        if (selectedMode === 'single') {\n            var data = this._data;\n            zrUtil.each(data, function (dataItem) {\n                selected[dataItem.get('name')] = false;\n            });\n        }\n        selected[name] = true;\n    },\n\n    /**\n     * @param {string} name\n     */\n    unSelect: function (name) {\n        if (this.get('selectedMode') !== 'single') {\n            this.option.selected[name] = false;\n        }\n    },\n\n    /**\n     * @param {string} name\n     */\n    toggleSelected: function (name) {\n        var selected = this.option.selected;\n        // Default is true\n        if (!selected.hasOwnProperty(name)) {\n            selected[name] = true;\n        }\n        this[selected[name] ? 'unSelect' : 'select'](name);\n    },\n\n    allSelect: function () {\n        var data = this._data;\n        var selected = this.option.selected;\n        zrUtil.each(data, function (dataItem) {\n            selected[dataItem.get('name', true)] = true;\n        });\n    },\n\n    inverseSelect: function () {\n        var data = this._data;\n        var selected = this.option.selected;\n        zrUtil.each(data, function (dataItem) {\n            var name = dataItem.get('name', true);\n            // Initially, default value is true\n            if (!selected.hasOwnProperty(name)) {\n                selected[name] = true;\n            }\n            selected[name] = !selected[name];\n        });\n    },\n\n    /**\n     * @param {string} name\n     */\n    isSelected: function (name) {\n        var selected = this.option.selected;\n        return !(selected.hasOwnProperty(name) && !selected[name])\n            && zrUtil.indexOf(this._availableNames, name) >= 0;\n    },\n\n    getOrient: function () {\n        return this.get('orient') === 'vertical'\n            ? {index: 1, name: 'vertical'}\n            : {index: 0, name: 'horizontal'};\n    },\n\n    defaultOption: {\n        // 一级层叠\n        zlevel: 0,\n        // 二级层叠\n        z: 4,\n        show: true,\n\n        // 布局方式，默认为水平布局，可选为：\n        // 'horizontal' | 'vertical'\n        orient: 'horizontal',\n\n        left: 'center',\n        // right: 'center',\n\n        top: 0,\n        // bottom: null,\n\n        // 水平对齐\n        // 'auto' | 'left' | 'right'\n        // 默认为 'auto', 根据 x 的位置判断是左对齐还是右对齐\n        align: 'auto',\n\n        backgroundColor: 'rgba(0,0,0,0)',\n        // 图例边框颜色\n        borderColor: '#ccc',\n        borderRadius: 0,\n        // 图例边框线宽，单位px，默认为0（无边框）\n        borderWidth: 0,\n        // 图例内边距，单位px，默认各方向内边距为5，\n        // 接受数组分别设定上右下左边距，同css\n        padding: 5,\n        // 各个item之间的间隔，单位px，默认为10，\n        // 横向布局时为水平间隔，纵向布局时为纵向间隔\n        itemGap: 10,\n        // the width of legend symbol\n        itemWidth: 25,\n        // the height of legend symbol\n        itemHeight: 14,\n\n        // the color of unselected legend symbol\n        inactiveColor: '#ccc',\n\n        // the borderColor of unselected legend symbol\n        inactiveBorderColor: '#ccc',\n\n        itemStyle: {\n            // the default borderWidth of legend symbol\n            borderWidth: 0\n        },\n\n        textStyle: {\n            // 图例文字颜色\n            color: '#333'\n        },\n        // formatter: '',\n        // 选择模式，默认开启图例开关\n        selectedMode: true,\n        // 配置默认选中状态，可配合LEGEND.SELECTED事件做动态数据载入\n        // selected: null,\n        // 图例内容（详见legend.data，数组中每一项代表一个item\n        // data: [],\n\n        // Usage:\n        // selector: [{type: 'all or inverse', title: xxx}]\n        // or\n        // selector: true\n        // or\n        // selector: ['all', 'inverse']\n        selector: false,\n\n        selectorLabel: {\n            show: true,\n            borderRadius: 10,\n            padding: [3, 5, 3, 5],\n            fontSize: 12,\n            fontFamily: ' sans-serif',\n            color: '#666',\n            borderWidth: 1,\n            borderColor: '#666'\n        },\n\n        emphasis: {\n            selectorLabel: {\n                show: true,\n                color: '#eee',\n                backgroundColor: '#666'\n            }\n        },\n\n        // Value can be 'start' or 'end'\n        selectorPosition: 'auto',\n\n        selectorItemGap: 7,\n\n        selectorButtonGap: 10,\n\n        // Tooltip 相关配置\n        tooltip: {\n            show: false\n        }\n    }\n});\n\nexport default LegendModel;","/*\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\n\nfunction legendSelectActionHandler(methodName, payload, ecModel) {\n    var selectedMap = {};\n    var isToggleSelect = methodName === 'toggleSelected';\n    var isSelected;\n    // Update all legend components\n    ecModel.eachComponent('legend', function (legendModel) {\n        if (isToggleSelect && isSelected != null) {\n            // Force other legend has same selected status\n            // Or the first is toggled to true and other are toggled to false\n            // In the case one legend has some item unSelected in option. And if other legend\n            // doesn't has the item, they will assume it is selected.\n            legendModel[isSelected ? 'select' : 'unSelect'](payload.name);\n        }\n        else if (methodName === 'allSelect' || methodName === 'inverseSelect') {\n            legendModel[methodName]();\n        }\n        else {\n            legendModel[methodName](payload.name);\n            isSelected = legendModel.isSelected(payload.name);\n        }\n        var legendData = legendModel.getData();\n        zrUtil.each(legendData, function (model) {\n            var name = model.get('name');\n            // Wrap element\n            if (name === '\\n' || name === '') {\n                return;\n            }\n            var isItemSelected = legendModel.isSelected(name);\n            if (selectedMap.hasOwnProperty(name)) {\n                // Unselected if any legend is unselected\n                selectedMap[name] = selectedMap[name] && isItemSelected;\n            }\n            else {\n                selectedMap[name] = isItemSelected;\n            }\n        });\n    });\n    // Return the event explicitly\n    return (methodName === 'allSelect' || methodName === 'inverseSelect')\n        ? {\n            selected: selectedMap\n        }\n        : {\n            name: payload.name,\n            selected: selectedMap\n        };\n}\n/**\n * @event legendToggleSelect\n * @type {Object}\n * @property {string} type 'legendToggleSelect'\n * @property {string} [from]\n * @property {string} name Series name or data item name\n */\necharts.registerAction(\n    'legendToggleSelect', 'legendselectchanged',\n    zrUtil.curry(legendSelectActionHandler, 'toggleSelected')\n);\n\necharts.registerAction(\n    'legendAllSelect', 'legendselectall',\n    zrUtil.curry(legendSelectActionHandler, 'allSelect')\n);\n\necharts.registerAction(\n    'legendInverseSelect', 'legendinverseselect',\n    zrUtil.curry(legendSelectActionHandler, 'inverseSelect')\n);\n\n/**\n * @event legendSelect\n * @type {Object}\n * @property {string} type 'legendSelect'\n * @property {string} name Series name or data item name\n */\necharts.registerAction(\n    'legendSelect', 'legendselected',\n    zrUtil.curry(legendSelectActionHandler, 'select')\n);\n\n/**\n * @event legendUnSelect\n * @type {Object}\n * @property {string} type 'legendUnSelect'\n * @property {string} name Series name or data item name\n */\necharts.registerAction(\n    'legendUnSelect', 'legendunselected',\n    zrUtil.curry(legendSelectActionHandler, '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\nimport {__DEV__} from '../../config';\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport {createSymbol} from '../../util/symbol';\nimport * as graphic from '../../util/graphic';\nimport {makeBackground} from '../helper/listComponent';\nimport * as layoutUtil from '../../util/layout';\n\nvar curry = zrUtil.curry;\nvar each = zrUtil.each;\nvar Group = graphic.Group;\n\nexport default echarts.extendComponentView({\n\n    type: 'legend.plain',\n\n    newlineDisabled: false,\n\n    /**\n     * @override\n     */\n    init: function () {\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this.group.add(this._contentGroup = new Group());\n\n        /**\n         * @private\n         * @type {module:zrender/Element}\n         */\n        this._backgroundEl;\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this.group.add(this._selectorGroup = new Group());\n\n        /**\n         * If first rendering, `contentGroup.position` is [0, 0], which\n         * does not make sense and may cause unexepcted animation if adopted.\n         * @private\n         * @type {boolean}\n         */\n        this._isFirstRender = true;\n    },\n\n    /**\n     * @protected\n     */\n    getContentGroup: function () {\n        return this._contentGroup;\n    },\n\n    /**\n     * @protected\n     */\n    getSelectorGroup: function () {\n        return this._selectorGroup;\n    },\n\n    /**\n     * @override\n     */\n    render: function (legendModel, ecModel, api) {\n        var isFirstRender = this._isFirstRender;\n        this._isFirstRender = false;\n\n        this.resetInner();\n\n        if (!legendModel.get('show', true)) {\n            return;\n        }\n\n        var itemAlign = legendModel.get('align');\n        var orient = legendModel.get('orient');\n        if (!itemAlign || itemAlign === 'auto') {\n            itemAlign = (\n                legendModel.get('left') === 'right'\n                && orient === 'vertical'\n            ) ? 'right' : 'left';\n        }\n\n        var selector = legendModel.get('selector', true);\n        var selectorPosition = legendModel.get('selectorPosition', true);\n        if (selector && (!selectorPosition || selectorPosition === 'auto')) {\n            selectorPosition = orient === 'horizontal' ? 'end' : 'start';\n        }\n\n        this.renderInner(itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition);\n\n        // Perform layout.\n        var positionInfo = legendModel.getBoxLayoutParams();\n        var viewportSize = {width: api.getWidth(), height: api.getHeight()};\n        var padding = legendModel.get('padding');\n\n        var maxSize = layoutUtil.getLayoutRect(positionInfo, viewportSize, padding);\n\n        var mainRect = this.layoutInner(legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition);\n\n        // Place mainGroup, based on the calculated `mainRect`.\n        var layoutRect = layoutUtil.getLayoutRect(\n            zrUtil.defaults({width: mainRect.width, height: mainRect.height}, positionInfo),\n            viewportSize,\n            padding\n        );\n        this.group.attr('position', [layoutRect.x - mainRect.x, layoutRect.y - mainRect.y]);\n\n        // Render background after group is layout.\n        this.group.add(\n            this._backgroundEl = makeBackground(mainRect, legendModel)\n        );\n    },\n\n    /**\n     * @protected\n     */\n    resetInner: function () {\n        this.getContentGroup().removeAll();\n        this._backgroundEl && this.group.remove(this._backgroundEl);\n        this.getSelectorGroup().removeAll();\n    },\n\n    /**\n     * @protected\n     */\n    renderInner: function (itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition) {\n        var contentGroup = this.getContentGroup();\n        var legendDrawnMap = zrUtil.createHashMap();\n        var selectMode = legendModel.get('selectedMode');\n\n        var excludeSeriesId = [];\n        ecModel.eachRawSeries(function (seriesModel) {\n            !seriesModel.get('legendHoverLink') && excludeSeriesId.push(seriesModel.id);\n        });\n\n        each(legendModel.getData(), function (itemModel, dataIndex) {\n            var name = itemModel.get('name');\n\n            // Use empty string or \\n as a newline string\n            if (!this.newlineDisabled && (name === '' || name === '\\n')) {\n                contentGroup.add(new Group({\n                    newline: true\n                }));\n                return;\n            }\n\n            // Representitive series.\n            var seriesModel = ecModel.getSeriesByName(name)[0];\n\n            if (legendDrawnMap.get(name)) {\n                // Have been drawed\n                return;\n            }\n\n            // Series legend\n            if (seriesModel) {\n                var data = seriesModel.getData();\n                var color = data.getVisual('color');\n                var borderColor = data.getVisual('borderColor');\n\n                // If color is a callback function\n                if (typeof color === 'function') {\n                    // Use the first data\n                    color = color(seriesModel.getDataParams(0));\n                }\n\n                 // If borderColor is a callback function\n                if (typeof borderColor === 'function') {\n                    // Use the first data\n                    borderColor = borderColor(seriesModel.getDataParams(0));\n                }\n\n                // Using rect symbol defaultly\n                var legendSymbolType = data.getVisual('legendSymbol') || 'roundRect';\n                var symbolType = data.getVisual('symbol');\n\n                var itemGroup = this._createItem(\n                    name, dataIndex, itemModel, legendModel,\n                    legendSymbolType, symbolType,\n                    itemAlign, color, borderColor,\n                    selectMode\n                );\n\n                itemGroup.on('click', curry(dispatchSelectAction, name, api))\n                    .on('mouseover', curry(dispatchHighlightAction, seriesModel.name, null, api, excludeSeriesId))\n                    .on('mouseout', curry(dispatchDownplayAction, seriesModel.name, null, api, excludeSeriesId));\n\n                legendDrawnMap.set(name, true);\n            }\n            else {\n                // Data legend of pie, funnel\n                ecModel.eachRawSeries(function (seriesModel) {\n                    // In case multiple series has same data name\n                    if (legendDrawnMap.get(name)) {\n                        return;\n                    }\n\n                    if (seriesModel.legendDataProvider) {\n                        var data = seriesModel.legendDataProvider();\n                        var idx = data.indexOfName(name);\n                        if (idx < 0) {\n                            return;\n                        }\n\n                        var color = data.getItemVisual(idx, 'color');\n                        var borderColor = data.getItemVisual(idx, 'borderColor');\n\n                        var legendSymbolType = 'roundRect';\n\n                        var itemGroup = this._createItem(\n                            name, dataIndex, itemModel, legendModel,\n                            legendSymbolType, null,\n                            itemAlign, color, borderColor,\n                            selectMode\n                        );\n\n                        // FIXME: consider different series has items with the same name.\n                        itemGroup.on('click', curry(dispatchSelectAction, name, api))\n                            // Should not specify the series name, consider legend controls\n                            // more than one pie series.\n                            .on('mouseover', curry(dispatchHighlightAction, null, name, api, excludeSeriesId))\n                            .on('mouseout', curry(dispatchDownplayAction, null, name, api, excludeSeriesId));\n\n                        legendDrawnMap.set(name, true);\n                    }\n\n                }, this);\n            }\n\n            if (__DEV__) {\n                if (!legendDrawnMap.get(name)) {\n                    console.warn(\n                        name + ' series not exists. Legend data should be same with series name or data name.'\n                    );\n                }\n            }\n        }, this);\n\n        if (selector) {\n            this._createSelector(selector, legendModel, api, orient, selectorPosition);\n        }\n    },\n\n    _createSelector: function (selector, legendModel, api, orient, selectorPosition) {\n        var selectorGroup = this.getSelectorGroup();\n\n        each(selector, function (selectorItem) {\n            createSelectorButton(selectorItem);\n        });\n\n        function createSelectorButton(selectorItem) {\n            var type = selectorItem.type;\n\n            var labelText = new graphic.Text({\n                style: {\n                    x: 0,\n                    y: 0,\n                    align: 'center',\n                    verticalAlign: 'middle'\n                },\n                onclick: function () {\n                    api.dispatchAction({\n                        type: type === 'all' ? 'legendAllSelect' : 'legendInverseSelect'\n                    });\n                }\n            });\n\n            selectorGroup.add(labelText);\n\n            var labelModel = legendModel.getModel('selectorLabel');\n            var emphasisLabelModel = legendModel.getModel('emphasis.selectorLabel');\n\n            graphic.setLabelStyle(\n                labelText.style, labelText.hoverStyle = {}, labelModel, emphasisLabelModel,\n                {\n                    defaultText: selectorItem.title,\n                    isRectText: false\n                }\n            );\n            graphic.setHoverStyle(labelText);\n        }\n    },\n\n    _createItem: function (\n        name, dataIndex, itemModel, legendModel,\n        legendSymbolType, symbolType,\n        itemAlign, color, borderColor, selectMode\n    ) {\n        var itemWidth = legendModel.get('itemWidth');\n        var itemHeight = legendModel.get('itemHeight');\n        var inactiveColor = legendModel.get('inactiveColor');\n        var inactiveBorderColor = legendModel.get('inactiveBorderColor');\n        var symbolKeepAspect = legendModel.get('symbolKeepAspect');\n        var legendModelItemStyle = legendModel.getModel('itemStyle');\n\n        var isSelected = legendModel.isSelected(name);\n        var itemGroup = new Group();\n\n        var textStyleModel = itemModel.getModel('textStyle');\n\n        var itemIcon = itemModel.get('icon');\n\n        var tooltipModel = itemModel.getModel('tooltip');\n        var legendGlobalTooltipModel = tooltipModel.parentModel;\n\n        // Use user given icon first\n        legendSymbolType = itemIcon || legendSymbolType;\n        var legendSymbol = createSymbol(\n            legendSymbolType,\n            0,\n            0,\n            itemWidth,\n            itemHeight,\n            isSelected ? color : inactiveColor,\n            // symbolKeepAspect default true for legend\n            symbolKeepAspect == null ? true : symbolKeepAspect\n        );\n        itemGroup.add(\n            setSymbolStyle(\n                legendSymbol, legendSymbolType, legendModelItemStyle,\n                borderColor, inactiveBorderColor, isSelected\n            )\n        );\n\n        // Compose symbols\n        // PENDING\n        if (!itemIcon && symbolType\n            // At least show one symbol, can't be all none\n            && ((symbolType !== legendSymbolType) || symbolType === 'none')\n        ) {\n            var size = itemHeight * 0.8;\n            if (symbolType === 'none') {\n                symbolType = 'circle';\n            }\n            var legendSymbolCenter = createSymbol(\n                symbolType,\n                (itemWidth - size) / 2,\n                (itemHeight - size) / 2,\n                size,\n                size,\n                isSelected ? color : inactiveColor,\n                // symbolKeepAspect default true for legend\n                symbolKeepAspect == null ? true : symbolKeepAspect\n            );\n            // Put symbol in the center\n            itemGroup.add(\n                setSymbolStyle(\n                    legendSymbolCenter, symbolType, legendModelItemStyle,\n                    borderColor, inactiveBorderColor, isSelected\n                )\n            );\n        }\n\n        var textX = itemAlign === 'left' ? itemWidth + 5 : -5;\n        var textAlign = itemAlign;\n\n        var formatter = legendModel.get('formatter');\n        var content = name;\n        if (typeof formatter === 'string' && formatter) {\n            content = formatter.replace('{name}', name != null ? name : '');\n        }\n        else if (typeof formatter === 'function') {\n            content = formatter(name);\n        }\n\n        itemGroup.add(new graphic.Text({\n            style: graphic.setTextStyle({}, textStyleModel, {\n                text: content,\n                x: textX,\n                y: itemHeight / 2,\n                textFill: isSelected ? textStyleModel.getTextColor() : inactiveColor,\n                textAlign: textAlign,\n                textVerticalAlign: 'middle'\n            })\n        }));\n\n        // Add a invisible rect to increase the area of mouse hover\n        var hitRect = new graphic.Rect({\n            shape: itemGroup.getBoundingRect(),\n            invisible: true,\n            tooltip: tooltipModel.get('show') ? zrUtil.extend({\n                content: name,\n                // Defaul formatter\n                formatter: legendGlobalTooltipModel.get('formatter', true) || function () {\n                    return name;\n                },\n                formatterParams: {\n                    componentType: 'legend',\n                    legendIndex: legendModel.componentIndex,\n                    name: name,\n                    $vars: ['name']\n                }\n            }, tooltipModel.option) : null\n        });\n        itemGroup.add(hitRect);\n\n        itemGroup.eachChild(function (child) {\n            child.silent = true;\n        });\n\n        hitRect.silent = !selectMode;\n\n        this.getContentGroup().add(itemGroup);\n\n        graphic.setHoverStyle(itemGroup);\n\n        itemGroup.__legendDataIndex = dataIndex;\n\n        return itemGroup;\n    },\n\n    /**\n     * @protected\n     */\n    layoutInner: function (legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition) {\n        var contentGroup = this.getContentGroup();\n        var selectorGroup = this.getSelectorGroup();\n\n        // Place items in contentGroup.\n        layoutUtil.box(\n            legendModel.get('orient'),\n            contentGroup,\n            legendModel.get('itemGap'),\n            maxSize.width,\n            maxSize.height\n        );\n\n        var contentRect = contentGroup.getBoundingRect();\n        var contentPos = [-contentRect.x, -contentRect.y];\n\n        if (selector) {\n            // Place buttons in selectorGroup\n            layoutUtil.box(\n                // Buttons in selectorGroup always layout horizontally\n                'horizontal',\n                selectorGroup,\n                legendModel.get('selectorItemGap', true)\n            );\n\n            var selectorRect = selectorGroup.getBoundingRect();\n            var selectorPos = [-selectorRect.x, -selectorRect.y];\n            var selectorButtonGap = legendModel.get('selectorButtonGap', true);\n\n            var orientIdx = legendModel.getOrient().index;\n            var wh = orientIdx === 0 ? 'width' : 'height';\n            var hw = orientIdx === 0 ? 'height' : 'width';\n            var yx = orientIdx === 0 ? 'y' : 'x';\n\n            if (selectorPosition === 'end') {\n                selectorPos[orientIdx] += contentRect[wh] + selectorButtonGap;\n            }\n            else {\n                contentPos[orientIdx] += selectorRect[wh] + selectorButtonGap;\n            }\n\n            //Always align selector to content as 'middle'\n            selectorPos[1 - orientIdx] += contentRect[hw] / 2 - selectorRect[hw] / 2;\n            selectorGroup.attr('position', selectorPos);\n            contentGroup.attr('position', contentPos);\n\n            var mainRect = {x: 0, y: 0};\n            mainRect[wh] = contentRect[wh] + selectorButtonGap + selectorRect[wh];\n            mainRect[hw] = Math.max(contentRect[hw], selectorRect[hw]);\n            mainRect[yx] = Math.min(0, selectorRect[yx] + selectorPos[1 - orientIdx]);\n            return mainRect;\n        }\n        else {\n            contentGroup.attr('position', contentPos);\n            return this.group.getBoundingRect();\n        }\n    },\n\n    /**\n     * @protected\n     */\n    remove: function () {\n        this.getContentGroup().removeAll();\n        this._isFirstRender = true;\n    }\n\n});\n\nfunction setSymbolStyle(symbol, symbolType, legendModelItemStyle, borderColor, inactiveBorderColor, isSelected) {\n    var itemStyle;\n    if (symbolType !== 'line' && symbolType.indexOf('empty') < 0) {\n        itemStyle = legendModelItemStyle.getItemStyle();\n        symbol.style.stroke = borderColor;\n        if (!isSelected) {\n            itemStyle.stroke = inactiveBorderColor;\n        }\n    }\n    else {\n        itemStyle = legendModelItemStyle.getItemStyle(['borderWidth', 'borderColor']);\n    }\n    return symbol.setStyle(itemStyle);\n}\n\nfunction dispatchSelectAction(name, api) {\n    api.dispatchAction({\n        type: 'legendToggleSelect',\n        name: name\n    });\n}\n\nfunction dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId) {\n    // If element hover will move to a hoverLayer.\n    var el = api.getZr().storage.getDisplayList()[0];\n    if (!(el && el.useHoverLayer)) {\n        api.dispatchAction({\n            type: 'highlight',\n            seriesName: seriesName,\n            name: dataName,\n            excludeSeriesId: excludeSeriesId\n        });\n    }\n}\n\nfunction dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId) {\n    // If element hover will move to a hoverLayer.\n    var el = api.getZr().storage.getDisplayList()[0];\n    if (!(el && el.useHoverLayer)) {\n        api.dispatchAction({\n            type: 'downplay',\n            seriesName: seriesName,\n            name: dataName,\n            excludeSeriesId: excludeSeriesId\n        });\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nexport default function (ecModel) {\n\n    var legendModels = ecModel.findComponents({\n        mainType: 'legend'\n    });\n    if (legendModels && legendModels.length) {\n        ecModel.filterSeries(function (series) {\n            // If in any legend component the status is not selected.\n            // Because in legend series is assumed selected when it is not in the legend data.\n            for (var i = 0; i < legendModels.length; i++) {\n                if (!legendModels[i].isSelected(series.name)) {\n                    return false;\n                }\n            }\n            return true;\n        });\n    }\n\n}","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n// Do not contain scrollable legend, for sake of file size.\n\nimport * as echarts from '../echarts';\n\nimport './legend/LegendModel';\nimport './legend/legendAction';\nimport './legend/LegendView';\n\nimport legendFilter from './legend/legendFilter';\nimport Component from '../model/Component';\n\n// Series Filter\necharts.registerProcessor(echarts.PRIORITY.PROCESSOR.SERIES_FILTER, legendFilter);\n\nComponent.registerSubTypeDefaulter('legend', function () {\n    // Default 'plain' when no type specified.\n    return 'plain';\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\nimport LegendModel from './LegendModel';\nimport {\n    mergeLayoutParam,\n    getLayoutParams\n} from '../../util/layout';\n\nvar ScrollableLegendModel = LegendModel.extend({\n\n    type: 'legend.scroll',\n\n    /**\n     * @param {number} scrollDataIndex\n     */\n    setScrollDataIndex: function (scrollDataIndex) {\n        this.option.scrollDataIndex = scrollDataIndex;\n    },\n\n    defaultOption: {\n        scrollDataIndex: 0,\n        pageButtonItemGap: 5,\n        pageButtonGap: null,\n        pageButtonPosition: 'end', // 'start' or 'end'\n        pageFormatter: '{current}/{total}', // If null/undefined, do not show page.\n        pageIcons: {\n            horizontal: ['M0,0L12,-10L12,10z', 'M0,0L-12,-10L-12,10z'],\n            vertical: ['M0,0L20,0L10,-20z', 'M0,0L20,0L10,20z']\n        },\n        pageIconColor: '#2f4554',\n        pageIconInactiveColor: '#aaa',\n        pageIconSize: 15, // Can be [10, 3], which represents [width, height]\n        pageTextStyle: {\n            color: '#333'\n        },\n\n        animationDurationUpdate: 800\n    },\n\n    /**\n     * @override\n     */\n    init: function (option, parentModel, ecModel, extraOpt) {\n        var inputPositionParams = getLayoutParams(option);\n\n        ScrollableLegendModel.superCall(this, 'init', option, parentModel, ecModel, extraOpt);\n\n        mergeAndNormalizeLayoutParams(this, option, inputPositionParams);\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function (option, extraOpt) {\n        ScrollableLegendModel.superCall(this, 'mergeOption', option, extraOpt);\n\n        mergeAndNormalizeLayoutParams(this, this.option, option);\n    }\n\n});\n\n// Do not `ignoreSize` to enable setting {left: 10, right: 10}.\nfunction mergeAndNormalizeLayoutParams(legendModel, target, raw) {\n    var orient = legendModel.getOrient();\n    var ignoreSize = [1, 1];\n    ignoreSize[orient.index] = 0;\n    mergeLayoutParam(target, raw, {\n        type: 'box', ignoreSize: ignoreSize\n    });\n}\n\nexport default ScrollableLegendModel;","/*\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 * Separate legend and scrollable legend to reduce package size.\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport * as layoutUtil from '../../util/layout';\nimport LegendView from './LegendView';\n\nvar Group = graphic.Group;\n\nvar WH = ['width', 'height'];\nvar XY = ['x', 'y'];\n\nvar ScrollableLegendView = LegendView.extend({\n\n    type: 'legend.scroll',\n\n    newlineDisabled: true,\n\n    init: function () {\n\n        ScrollableLegendView.superCall(this, 'init');\n\n        /**\n         * @private\n         * @type {number} For `scroll`.\n         */\n        this._currentIndex = 0;\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this.group.add(this._containerGroup = new Group());\n        this._containerGroup.add(this.getContentGroup());\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this.group.add(this._controllerGroup = new Group());\n\n        /**\n         *\n         * @private\n         */\n        this._showController;\n    },\n\n    /**\n     * @override\n     */\n    resetInner: function () {\n        ScrollableLegendView.superCall(this, 'resetInner');\n\n        this._controllerGroup.removeAll();\n        this._containerGroup.removeClipPath();\n        this._containerGroup.__rectSize = null;\n    },\n\n    /**\n     * @override\n     */\n    renderInner: function (itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition) {\n        var me = this;\n\n        // Render content items.\n        ScrollableLegendView.superCall(this, 'renderInner', itemAlign,\n            legendModel, ecModel, api, selector, orient, selectorPosition);\n\n        var controllerGroup = this._controllerGroup;\n\n        // FIXME: support be 'auto' adapt to size number text length,\n        // e.g., '3/12345' should not overlap with the control arrow button.\n        var pageIconSize = legendModel.get('pageIconSize', true);\n        if (!zrUtil.isArray(pageIconSize)) {\n            pageIconSize = [pageIconSize, pageIconSize];\n        }\n\n        createPageButton('pagePrev', 0);\n\n        var pageTextStyleModel = legendModel.getModel('pageTextStyle');\n        controllerGroup.add(new graphic.Text({\n            name: 'pageText',\n            style: {\n                textFill: pageTextStyleModel.getTextColor(),\n                font: pageTextStyleModel.getFont(),\n                textVerticalAlign: 'middle',\n                textAlign: 'center'\n            },\n            silent: true\n        }));\n\n        createPageButton('pageNext', 1);\n\n        function createPageButton(name, iconIdx) {\n            var pageDataIndexName = name + 'DataIndex';\n            var icon = graphic.createIcon(\n                legendModel.get('pageIcons', true)[legendModel.getOrient().name][iconIdx],\n                {\n                    // Buttons will be created in each render, so we do not need\n                    // to worry about avoiding using legendModel kept in scope.\n                    onclick: zrUtil.bind(\n                        me._pageGo, me, pageDataIndexName, legendModel, api\n                    )\n                },\n                {\n                    x: -pageIconSize[0] / 2,\n                    y: -pageIconSize[1] / 2,\n                    width: pageIconSize[0],\n                    height: pageIconSize[1]\n                }\n            );\n            icon.name = name;\n            controllerGroup.add(icon);\n        }\n    },\n\n    /**\n     * @override\n     */\n    layoutInner: function (legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition) {\n        var selectorGroup = this.getSelectorGroup();\n\n        var orientIdx = legendModel.getOrient().index;\n        var wh = WH[orientIdx];\n        var xy = XY[orientIdx];\n        var hw = WH[1 - orientIdx];\n        var yx = XY[1 - orientIdx];\n\n        selector && layoutUtil.box(\n            // Buttons in selectorGroup always layout horizontally\n            'horizontal',\n            selectorGroup,\n            legendModel.get('selectorItemGap', true)\n        );\n\n        var selectorButtonGap = legendModel.get('selectorButtonGap', true);\n        var selectorRect = selectorGroup.getBoundingRect();\n        var selectorPos = [-selectorRect.x, -selectorRect.y];\n\n        var processMaxSize = zrUtil.clone(maxSize);\n        selector && (processMaxSize[wh] = maxSize[wh] - selectorRect[wh] - selectorButtonGap);\n\n        var mainRect = this._layoutContentAndController(legendModel, isFirstRender,\n            processMaxSize, orientIdx, wh, hw, yx\n        );\n\n        if (selector) {\n            if (selectorPosition === 'end') {\n                selectorPos[orientIdx] += mainRect[wh] + selectorButtonGap;\n            }\n            else {\n                var offset = selectorRect[wh] + selectorButtonGap;\n                selectorPos[orientIdx] -= offset;\n                mainRect[xy] -= offset;\n            }\n            mainRect[wh] += selectorRect[wh] + selectorButtonGap;\n\n            selectorPos[1 - orientIdx] += mainRect[yx] + mainRect[hw] / 2 - selectorRect[hw] / 2;\n            mainRect[hw] = Math.max(mainRect[hw], selectorRect[hw]);\n            mainRect[yx] = Math.min(mainRect[yx], selectorRect[yx] + selectorPos[1 - orientIdx]);\n\n            selectorGroup.attr('position', selectorPos);\n        }\n\n        return mainRect;\n    },\n\n    _layoutContentAndController: function (legendModel, isFirstRender, maxSize, orientIdx, wh, hw, yx) {\n        var contentGroup = this.getContentGroup();\n        var containerGroup = this._containerGroup;\n        var controllerGroup = this._controllerGroup;\n\n        // Place items in contentGroup.\n        layoutUtil.box(\n            legendModel.get('orient'),\n            contentGroup,\n            legendModel.get('itemGap'),\n            !orientIdx ? null : maxSize.width,\n            orientIdx ? null : maxSize.height\n        );\n\n        layoutUtil.box(\n            // Buttons in controller are layout always horizontally.\n            'horizontal',\n            controllerGroup,\n            legendModel.get('pageButtonItemGap', true)\n        );\n\n        var contentRect = contentGroup.getBoundingRect();\n        var controllerRect = controllerGroup.getBoundingRect();\n        var showController = this._showController = contentRect[wh] > maxSize[wh];\n\n        var contentPos = [-contentRect.x, -contentRect.y];\n        // Remain contentPos when scroll animation perfroming.\n        // If first rendering, `contentGroup.position` is [0, 0], which\n        // does not make sense and may cause unexepcted animation if adopted.\n        if (!isFirstRender) {\n            contentPos[orientIdx] = contentGroup.position[orientIdx];\n        }\n\n        // Layout container group based on 0.\n        var containerPos = [0, 0];\n        var controllerPos = [-controllerRect.x, -controllerRect.y];\n        var pageButtonGap = zrUtil.retrieve2(\n            legendModel.get('pageButtonGap', true), legendModel.get('itemGap', true)\n        );\n\n        // Place containerGroup and controllerGroup and contentGroup.\n        if (showController) {\n            var pageButtonPosition = legendModel.get('pageButtonPosition', true);\n            // controller is on the right / bottom.\n            if (pageButtonPosition === 'end') {\n                controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh];\n            }\n            // controller is on the left / top.\n            else {\n                containerPos[orientIdx] += controllerRect[wh] + pageButtonGap;\n            }\n        }\n\n        // Always align controller to content as 'middle'.\n        controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2;\n\n        contentGroup.attr('position', contentPos);\n        containerGroup.attr('position', containerPos);\n        controllerGroup.attr('position', controllerPos);\n\n        // Calculate `mainRect` and set `clipPath`.\n        // mainRect should not be calculated by `this.group.getBoundingRect()`\n        // for sake of the overflow.\n        var mainRect = {x: 0, y: 0};\n\n        // Consider content may be overflow (should be clipped).\n        mainRect[wh] = showController ? maxSize[wh] : contentRect[wh];\n        mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]);\n\n        // `containerRect[yx] + containerPos[1 - orientIdx]` is 0.\n        mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]);\n\n        containerGroup.__rectSize = maxSize[wh];\n        if (showController) {\n            var clipShape = {x: 0, y: 0};\n            clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0);\n            clipShape[hw] = mainRect[hw];\n            containerGroup.setClipPath(new graphic.Rect({shape: clipShape}));\n            // Consider content may be larger than container, container rect\n            // can not be obtained from `containerGroup.getBoundingRect()`.\n            containerGroup.__rectSize = clipShape[wh];\n        }\n        else {\n            // Do not remove or ignore controller. Keep them set as placeholders.\n            controllerGroup.eachChild(function (child) {\n                child.attr({invisible: true, silent: true});\n            });\n        }\n\n        // Content translate animation.\n        var pageInfo = this._getPageInfo(legendModel);\n        pageInfo.pageIndex != null && graphic.updateProps(\n            contentGroup,\n            {position: pageInfo.contentPosition},\n            // When switch from \"show controller\" to \"not show controller\", view should be\n            // updated immediately without animation, otherwise causes weird effect.\n            showController ? legendModel : false\n        );\n\n        this._updatePageInfoView(legendModel, pageInfo);\n\n        return mainRect;\n    },\n\n    _pageGo: function (to, legendModel, api) {\n        var scrollDataIndex = this._getPageInfo(legendModel)[to];\n\n        scrollDataIndex != null && api.dispatchAction({\n            type: 'legendScroll',\n            scrollDataIndex: scrollDataIndex,\n            legendId: legendModel.id\n        });\n    },\n\n    _updatePageInfoView: function (legendModel, pageInfo) {\n        var controllerGroup = this._controllerGroup;\n\n        zrUtil.each(['pagePrev', 'pageNext'], function (name) {\n            var canJump = pageInfo[name + 'DataIndex'] != null;\n            var icon = controllerGroup.childOfName(name);\n            if (icon) {\n                icon.setStyle(\n                    'fill',\n                    canJump\n                        ? legendModel.get('pageIconColor', true)\n                        : legendModel.get('pageIconInactiveColor', true)\n                );\n                icon.cursor = canJump ? 'pointer' : 'default';\n            }\n        });\n\n        var pageText = controllerGroup.childOfName('pageText');\n        var pageFormatter = legendModel.get('pageFormatter');\n        var pageIndex = pageInfo.pageIndex;\n        var current = pageIndex != null ? pageIndex + 1 : 0;\n        var total = pageInfo.pageCount;\n\n        pageText && pageFormatter && pageText.setStyle(\n            'text',\n            zrUtil.isString(pageFormatter)\n                ? pageFormatter.replace('{current}', current).replace('{total}', total)\n                : pageFormatter({current: current, total: total})\n        );\n    },\n\n    /**\n     * @param {module:echarts/model/Model} legendModel\n     * @return {Object} {\n     *  contentPosition: Array.<number>, null when data item not found.\n     *  pageIndex: number, null when data item not found.\n     *  pageCount: number, always be a number, can be 0.\n     *  pagePrevDataIndex: number, null when no previous page.\n     *  pageNextDataIndex: number, null when no next page.\n     * }\n     */\n    _getPageInfo: function (legendModel) {\n        var scrollDataIndex = legendModel.get('scrollDataIndex', true);\n        var contentGroup = this.getContentGroup();\n        var containerRectSize = this._containerGroup.__rectSize;\n        var orientIdx = legendModel.getOrient().index;\n        var wh = WH[orientIdx];\n        var xy = XY[orientIdx];\n\n        var targetItemIndex = this._findTargetItemIndex(scrollDataIndex);\n        var children = contentGroup.children();\n        var targetItem = children[targetItemIndex];\n        var itemCount = children.length;\n        var pCount = !itemCount ? 0 : 1;\n\n        var result = {\n            contentPosition: contentGroup.position.slice(),\n            pageCount: pCount,\n            pageIndex: pCount - 1,\n            pagePrevDataIndex: null,\n            pageNextDataIndex: null\n        };\n\n        if (!targetItem) {\n            return result;\n        }\n\n        var targetItemInfo = getItemInfo(targetItem);\n        result.contentPosition[orientIdx] = -targetItemInfo.s;\n\n        // Strategy:\n        // (1) Always align based on the left/top most item.\n        // (2) It is user-friendly that the last item shown in the\n        // current window is shown at the begining of next window.\n        // Otherwise if half of the last item is cut by the window,\n        // it will have no chance to display entirely.\n        // (3) Consider that item size probably be different, we\n        // have calculate pageIndex by size rather than item index,\n        // and we can not get page index directly by division.\n        // (4) The window is to narrow to contain more than\n        // one item, we should make sure that the page can be fliped.\n\n        for (var i = targetItemIndex + 1,\n            winStartItemInfo = targetItemInfo,\n            winEndItemInfo = targetItemInfo,\n            currItemInfo = null;\n            i <= itemCount;\n            ++i\n        ) {\n            currItemInfo = getItemInfo(children[i]);\n            if (\n                // Half of the last item is out of the window.\n                (!currItemInfo && winEndItemInfo.e > winStartItemInfo.s + containerRectSize)\n                // If the current item does not intersect with the window, the new page\n                // can be started at the current item or the last item.\n                || (currItemInfo && !intersect(currItemInfo, winStartItemInfo.s))\n            ) {\n                if (winEndItemInfo.i > winStartItemInfo.i) {\n                    winStartItemInfo = winEndItemInfo;\n                }\n                else { // e.g., when page size is smaller than item size.\n                    winStartItemInfo = currItemInfo;\n                }\n                if (winStartItemInfo) {\n                    if (result.pageNextDataIndex == null) {\n                        result.pageNextDataIndex = winStartItemInfo.i;\n                    }\n                    ++result.pageCount;\n                }\n            }\n            winEndItemInfo = currItemInfo;\n        }\n\n        for (var i = targetItemIndex - 1,\n            winStartItemInfo = targetItemInfo,\n            winEndItemInfo = targetItemInfo,\n            currItemInfo = null;\n            i >= -1;\n            --i\n        ) {\n            currItemInfo = getItemInfo(children[i]);\n            if (\n                // If the the end item does not intersect with the window started\n                // from the current item, a page can be settled.\n                (!currItemInfo || !intersect(winEndItemInfo, currItemInfo.s))\n                // e.g., when page size is smaller than item size.\n                && winStartItemInfo.i < winEndItemInfo.i\n            ) {\n                winEndItemInfo = winStartItemInfo;\n                if (result.pagePrevDataIndex == null) {\n                    result.pagePrevDataIndex = winStartItemInfo.i;\n                }\n                ++result.pageCount;\n                ++result.pageIndex;\n            }\n            winStartItemInfo = currItemInfo;\n        }\n\n        return result;\n\n        function getItemInfo(el) {\n            if (el) {\n                var itemRect = el.getBoundingRect();\n                var start = itemRect[xy] + el.position[orientIdx];\n                return {\n                    s: start,\n                    e: start + itemRect[wh],\n                    i: el.__legendDataIndex\n                };\n            }\n        }\n\n        function intersect(itemInfo, winStart) {\n            return itemInfo.e >= winStart && itemInfo.s <= winStart + containerRectSize;\n        }\n    },\n\n    _findTargetItemIndex: function (targetDataIndex) {\n        var index;\n        var contentGroup = this.getContentGroup();\n        var defaultIndex;\n\n        if (this._showController) {\n            contentGroup.eachChild(function (child, idx) {\n                var legendDataIdx = child.__legendDataIndex;\n                // FIXME\n                // If the given targetDataIndex (from model) is illegal,\n                // we use defualtIndex. But the index on the legend model and\n                // action payload is still illegal. That case will not be\n                // changed until some scenario requires.\n                if (defaultIndex == null && legendDataIdx != null) {\n                    defaultIndex = idx;\n                }\n                if (legendDataIdx === targetDataIndex) {\n                    index = idx;\n                }\n            });\n        }\n\n        return index != null ? index : defaultIndex;\n    }\n\n});\n\nexport default ScrollableLegendView;\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\nimport * as echarts from '../../echarts';\n\n/**\n * @event legendScroll\n * @type {Object}\n * @property {string} type 'legendScroll'\n * @property {string} scrollDataIndex\n */\necharts.registerAction(\n    'legendScroll', 'legendscroll',\n    function (payload, ecModel) {\n        var scrollDataIndex = payload.scrollDataIndex;\n\n        scrollDataIndex != null && ecModel.eachComponent(\n            {mainType: 'legend', subType: 'scroll', query: payload},\n            function (legendModel) {\n                legendModel.setScrollDataIndex(scrollDataIndex);\n            }\n        );\n    }\n);","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Legend component entry file8\n */\n\nimport './legend';\nimport './legend/ScrollableLegendModel';\nimport './legend/ScrollableLegendView';\nimport './legend/scrollableLegendAction';\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\nimport DataZoomModel from './DataZoomModel';\n\nvar SliderZoomModel = DataZoomModel.extend({\n\n    type: 'dataZoom.slider',\n\n    layoutMode: 'box',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        show: true,\n\n        // ph => placeholder. Using placehoder here because\n        // deault value can only be drived in view stage.\n        right: 'ph',  // Default align to grid rect.\n        top: 'ph',    // Default align to grid rect.\n        width: 'ph',  // Default align to grid rect.\n        height: 'ph', // Default align to grid rect.\n        left: null,   // Default align to grid rect.\n        bottom: null, // Default align to grid rect.\n\n        backgroundColor: 'rgba(47,69,84,0)',    // Background of slider zoom component.\n        // dataBackgroundColor: '#ddd',         // Background coor of data shadow and border of box,\n                                                // highest priority, remain for compatibility of\n                                                // previous version, but not recommended any more.\n        dataBackground: {\n            lineStyle: {\n                color: '#2f4554',\n                width: 0.5,\n                opacity: 0.3\n            },\n            areaStyle: {\n                color: 'rgba(47,69,84,0.3)',\n                opacity: 0.3\n            }\n        },\n        borderColor: '#ddd',                    // border color of the box. For compatibility,\n                                                // if dataBackgroundColor is set, borderColor\n                                                // is ignored.\n\n        fillerColor: 'rgba(167,183,204,0.4)',     // Color of selected area.\n        // handleColor: 'rgba(89,170,216,0.95)',     // Color of handle.\n        // handleIcon: 'path://M4.9,17.8c0-1.4,4.5-10.5,5.5-12.4c0-0.1,0.6-1.1,0.9-1.1c0.4,0,0.9,1,0.9,1.1c1.1,2.2,5.4,11,5.4,12.4v17.8c0,1.5-0.6,2.1-1.3,2.1H6.1c-0.7,0-1.3-0.6-1.3-2.1V17.8z',\n        /* eslint-disable */\n        handleIcon: 'M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z',\n        /* eslint-enable */\n        // Percent of the slider height\n        handleSize: '100%',\n\n        handleStyle: {\n            color: '#a7b7cc'\n        },\n\n        labelPrecision: null,\n        labelFormatter: null,\n        showDetail: true,\n        showDataShadow: 'auto',                 // Default auto decision.\n        realtime: true,\n        zoomLock: false,                        // Whether disable zoom.\n        textStyle: {\n            color: '#333'\n        }\n    }\n\n});\n\nexport default SliderZoomModel;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as eventTool from 'zrender/src/core/event';\nimport * as graphic from '../../util/graphic';\nimport * as throttle from '../../util/throttle';\nimport DataZoomView from './DataZoomView';\nimport * as numberUtil from '../../util/number';\nimport * as layout from '../../util/layout';\nimport sliderMove from '../helper/sliderMove';\n\nvar Rect = graphic.Rect;\nvar linearMap = numberUtil.linearMap;\nvar asc = numberUtil.asc;\nvar bind = zrUtil.bind;\nvar each = zrUtil.each;\n\n// Constants\nvar DEFAULT_LOCATION_EDGE_GAP = 7;\nvar DEFAULT_FRAME_BORDER_WIDTH = 1;\nvar DEFAULT_FILLER_SIZE = 30;\nvar HORIZONTAL = 'horizontal';\nvar VERTICAL = 'vertical';\nvar LABEL_GAP = 5;\nvar SHOW_DATA_SHADOW_SERIES_TYPE = ['line', 'bar', 'candlestick', 'scatter'];\n\nvar SliderZoomView = DataZoomView.extend({\n\n    type: 'dataZoom.slider',\n\n    init: function (ecModel, api) {\n\n        /**\n         * @private\n         * @type {Object}\n         */\n        this._displayables = {};\n\n        /**\n         * @private\n         * @type {string}\n         */\n        this._orient;\n\n        /**\n         * [0, 100]\n         * @private\n         */\n        this._range;\n\n        /**\n         * [coord of the first handle, coord of the second handle]\n         * @private\n         */\n        this._handleEnds;\n\n        /**\n         * [length, thick]\n         * @private\n         * @type {Array.<number>}\n         */\n        this._size;\n\n        /**\n         * @private\n         * @type {number}\n         */\n        this._handleWidth;\n\n        /**\n         * @private\n         * @type {number}\n         */\n        this._handleHeight;\n\n        /**\n         * @private\n         */\n        this._location;\n\n        /**\n         * @private\n         */\n        this._dragging;\n\n        /**\n         * @private\n         */\n        this._dataShadowInfo;\n\n        this.api = api;\n    },\n\n    /**\n     * @override\n     */\n    render: function (dataZoomModel, ecModel, api, payload) {\n        SliderZoomView.superApply(this, 'render', arguments);\n\n        throttle.createOrUpdate(\n            this,\n            '_dispatchZoomAction',\n            this.dataZoomModel.get('throttle'),\n            'fixRate'\n        );\n\n        this._orient = dataZoomModel.get('orient');\n\n        if (this.dataZoomModel.get('show') === false) {\n            this.group.removeAll();\n            return;\n        }\n\n        // Notice: this._resetInterval() should not be executed when payload.type\n        // is 'dataZoom', origin this._range should be maintained, otherwise 'pan'\n        // or 'zoom' info will be missed because of 'throttle' of this.dispatchAction,\n        if (!payload || payload.type !== 'dataZoom' || payload.from !== this.uid) {\n            this._buildView();\n        }\n\n        this._updateView();\n    },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        SliderZoomView.superApply(this, 'remove', arguments);\n        throttle.clear(this, '_dispatchZoomAction');\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        SliderZoomView.superApply(this, 'dispose', arguments);\n        throttle.clear(this, '_dispatchZoomAction');\n    },\n\n    _buildView: function () {\n        var thisGroup = this.group;\n\n        thisGroup.removeAll();\n\n        this._resetLocation();\n        this._resetInterval();\n\n        var barGroup = this._displayables.barGroup = new graphic.Group();\n\n        this._renderBackground();\n\n        this._renderHandle();\n\n        this._renderDataShadow();\n\n        thisGroup.add(barGroup);\n\n        this._positionGroup();\n    },\n\n    /**\n     * @private\n     */\n    _resetLocation: function () {\n        var dataZoomModel = this.dataZoomModel;\n        var api = this.api;\n\n        // If some of x/y/width/height are not specified,\n        // auto-adapt according to target grid.\n        var coordRect = this._findCoordRect();\n        var ecSize = {width: api.getWidth(), height: api.getHeight()};\n        // Default align by coordinate system rect.\n        var positionInfo = this._orient === HORIZONTAL\n            ? {\n                // Why using 'right', because right should be used in vertical,\n                // and it is better to be consistent for dealing with position param merge.\n                right: ecSize.width - coordRect.x - coordRect.width,\n                top: (ecSize.height - DEFAULT_FILLER_SIZE - DEFAULT_LOCATION_EDGE_GAP),\n                width: coordRect.width,\n                height: DEFAULT_FILLER_SIZE\n            }\n            : { // vertical\n                right: DEFAULT_LOCATION_EDGE_GAP,\n                top: coordRect.y,\n                width: DEFAULT_FILLER_SIZE,\n                height: coordRect.height\n            };\n\n        // Do not write back to option and replace value 'ph', because\n        // the 'ph' value should be recalculated when resize.\n        var layoutParams = layout.getLayoutParams(dataZoomModel.option);\n\n        // Replace the placeholder value.\n        zrUtil.each(['right', 'top', 'width', 'height'], function (name) {\n            if (layoutParams[name] === 'ph') {\n                layoutParams[name] = positionInfo[name];\n            }\n        });\n\n        var layoutRect = layout.getLayoutRect(\n            layoutParams,\n            ecSize,\n            dataZoomModel.padding\n        );\n\n        this._location = {x: layoutRect.x, y: layoutRect.y};\n        this._size = [layoutRect.width, layoutRect.height];\n        this._orient === VERTICAL && this._size.reverse();\n    },\n\n    /**\n     * @private\n     */\n    _positionGroup: function () {\n        var thisGroup = this.group;\n        var location = this._location;\n        var orient = this._orient;\n\n        // Just use the first axis to determine mapping.\n        var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel();\n        var inverse = targetAxisModel && targetAxisModel.get('inverse');\n\n        var barGroup = this._displayables.barGroup;\n        var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse;\n\n        // Transform barGroup.\n        barGroup.attr(\n            (orient === HORIZONTAL && !inverse)\n            ? {scale: otherAxisInverse ? [1, 1] : [1, -1]}\n            : (orient === HORIZONTAL && inverse)\n            ? {scale: otherAxisInverse ? [-1, 1] : [-1, -1]}\n            : (orient === VERTICAL && !inverse)\n            ? {scale: otherAxisInverse ? [1, -1] : [1, 1], rotation: Math.PI / 2}\n            // Dont use Math.PI, considering shadow direction.\n            : {scale: otherAxisInverse ? [-1, -1] : [-1, 1], rotation: Math.PI / 2}\n        );\n\n        // Position barGroup\n        var rect = thisGroup.getBoundingRect([barGroup]);\n        thisGroup.attr('position', [location.x - rect.x, location.y - rect.y]);\n    },\n\n    /**\n     * @private\n     */\n    _getViewExtent: function () {\n        return [0, this._size[0]];\n    },\n\n    _renderBackground: function () {\n        var dataZoomModel = this.dataZoomModel;\n        var size = this._size;\n        var barGroup = this._displayables.barGroup;\n\n        barGroup.add(new Rect({\n            silent: true,\n            shape: {\n                x: 0, y: 0, width: size[0], height: size[1]\n            },\n            style: {\n                fill: dataZoomModel.get('backgroundColor')\n            },\n            z2: -40\n        }));\n\n        // Click panel, over shadow, below handles.\n        barGroup.add(new Rect({\n            shape: {\n                x: 0, y: 0, width: size[0], height: size[1]\n            },\n            style: {\n                fill: 'transparent'\n            },\n            z2: 0,\n            onclick: zrUtil.bind(this._onClickPanelClick, this)\n        }));\n    },\n\n    _renderDataShadow: function () {\n        var info = this._dataShadowInfo = this._prepareDataShadowInfo();\n\n        if (!info) {\n            return;\n        }\n\n        var size = this._size;\n        var seriesModel = info.series;\n        var data = seriesModel.getRawData();\n\n        var otherDim = seriesModel.getShadowDim\n            ? seriesModel.getShadowDim() // @see candlestick\n            : info.otherDim;\n\n        if (otherDim == null) {\n            return;\n        }\n\n        var otherDataExtent = data.getDataExtent(otherDim);\n        // Nice extent.\n        var otherOffset = (otherDataExtent[1] - otherDataExtent[0]) * 0.3;\n        otherDataExtent = [\n            otherDataExtent[0] - otherOffset,\n            otherDataExtent[1] + otherOffset\n        ];\n        var otherShadowExtent = [0, size[1]];\n\n        var thisShadowExtent = [0, size[0]];\n\n        var areaPoints = [[size[0], 0], [0, 0]];\n        var linePoints = [];\n        var step = thisShadowExtent[1] / (data.count() - 1);\n        var thisCoord = 0;\n\n        // Optimize for large data shadow\n        var stride = Math.round(data.count() / size[0]);\n        var lastIsEmpty;\n        data.each([otherDim], function (value, index) {\n            if (stride > 0 && (index % stride)) {\n                thisCoord += step;\n                return;\n            }\n\n            // FIXME\n            // Should consider axis.min/axis.max when drawing dataShadow.\n\n            // FIXME\n            // 应该使用统一的空判断？还是在list里进行空判断？\n            var isEmpty = value == null || isNaN(value) || value === '';\n            // See #4235.\n            var otherCoord = isEmpty\n                ? 0 : linearMap(value, otherDataExtent, otherShadowExtent, true);\n\n            // Attempt to draw data shadow precisely when there are empty value.\n            if (isEmpty && !lastIsEmpty && index) {\n                areaPoints.push([areaPoints[areaPoints.length - 1][0], 0]);\n                linePoints.push([linePoints[linePoints.length - 1][0], 0]);\n            }\n            else if (!isEmpty && lastIsEmpty) {\n                areaPoints.push([thisCoord, 0]);\n                linePoints.push([thisCoord, 0]);\n            }\n\n            areaPoints.push([thisCoord, otherCoord]);\n            linePoints.push([thisCoord, otherCoord]);\n\n            thisCoord += step;\n            lastIsEmpty = isEmpty;\n        });\n\n        var dataZoomModel = this.dataZoomModel;\n        // var dataBackgroundModel = dataZoomModel.getModel('dataBackground');\n        this._displayables.barGroup.add(new graphic.Polygon({\n            shape: {points: areaPoints},\n            style: zrUtil.defaults(\n                {fill: dataZoomModel.get('dataBackgroundColor')},\n                dataZoomModel.getModel('dataBackground.areaStyle').getAreaStyle()\n            ),\n            silent: true,\n            z2: -20\n        }));\n        this._displayables.barGroup.add(new graphic.Polyline({\n            shape: {points: linePoints},\n            style: dataZoomModel.getModel('dataBackground.lineStyle').getLineStyle(),\n            silent: true,\n            z2: -19\n        }));\n    },\n\n    _prepareDataShadowInfo: function () {\n        var dataZoomModel = this.dataZoomModel;\n        var showDataShadow = dataZoomModel.get('showDataShadow');\n\n        if (showDataShadow === false) {\n            return;\n        }\n\n        // Find a representative series.\n        var result;\n        var ecModel = this.ecModel;\n\n        dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) {\n            var seriesModels = dataZoomModel\n                .getAxisProxy(dimNames.name, axisIndex)\n                .getTargetSeriesModels();\n\n            zrUtil.each(seriesModels, function (seriesModel) {\n                if (result) {\n                    return;\n                }\n\n                if (showDataShadow !== true && zrUtil.indexOf(\n                        SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get('type')\n                    ) < 0\n                ) {\n                    return;\n                }\n\n                var thisAxis = ecModel.getComponent(dimNames.axis, axisIndex).axis;\n                var otherDim = getOtherDim(dimNames.name);\n                var otherAxisInverse;\n                var coordSys = seriesModel.coordinateSystem;\n\n                if (otherDim != null && coordSys.getOtherAxis) {\n                    otherAxisInverse = coordSys.getOtherAxis(thisAxis).inverse;\n                }\n\n                otherDim = seriesModel.getData().mapDimension(otherDim);\n\n                result = {\n                    thisAxis: thisAxis,\n                    series: seriesModel,\n                    thisDim: dimNames.name,\n                    otherDim: otherDim,\n                    otherAxisInverse: otherAxisInverse\n                };\n\n            }, this);\n\n        }, this);\n\n        return result;\n    },\n\n    _renderHandle: function () {\n        var displaybles = this._displayables;\n        var handles = displaybles.handles = [];\n        var handleLabels = displaybles.handleLabels = [];\n        var barGroup = this._displayables.barGroup;\n        var size = this._size;\n        var dataZoomModel = this.dataZoomModel;\n\n        barGroup.add(displaybles.filler = new Rect({\n            draggable: true,\n            cursor: getCursor(this._orient),\n            drift: bind(this._onDragMove, this, 'all'),\n            onmousemove: function (e) {\n                // Fot mobile devicem, prevent screen slider on the button.\n                eventTool.stop(e.event);\n            },\n            ondragstart: bind(this._showDataInfo, this, true),\n            ondragend: bind(this._onDragEnd, this),\n            onmouseover: bind(this._showDataInfo, this, true),\n            onmouseout: bind(this._showDataInfo, this, false),\n            style: {\n                fill: dataZoomModel.get('fillerColor'),\n                textPosition: 'inside'\n            }\n        }));\n\n        // Frame border.\n        barGroup.add(new Rect({\n            silent: true,\n            subPixelOptimize: true,\n            shape: {\n                x: 0,\n                y: 0,\n                width: size[0],\n                height: size[1]\n            },\n            style: {\n                stroke: dataZoomModel.get('dataBackgroundColor')\n                    || dataZoomModel.get('borderColor'),\n                lineWidth: DEFAULT_FRAME_BORDER_WIDTH,\n                fill: 'rgba(0,0,0,0)'\n            }\n        }));\n\n        each([0, 1], function (handleIndex) {\n            var path = graphic.createIcon(\n                dataZoomModel.get('handleIcon'),\n                {\n                    cursor: getCursor(this._orient),\n                    draggable: true,\n                    drift: bind(this._onDragMove, this, handleIndex),\n                    onmousemove: function (e) {\n                        // Fot mobile devicem, prevent screen slider on the button.\n                        eventTool.stop(e.event);\n                    },\n                    ondragend: bind(this._onDragEnd, this),\n                    onmouseover: bind(this._showDataInfo, this, true),\n                    onmouseout: bind(this._showDataInfo, this, false)\n                },\n                {x: -1, y: 0, width: 2, height: 2}\n            );\n\n            var bRect = path.getBoundingRect();\n            this._handleHeight = numberUtil.parsePercent(dataZoomModel.get('handleSize'), this._size[1]);\n            this._handleWidth = bRect.width / bRect.height * this._handleHeight;\n\n            path.setStyle(dataZoomModel.getModel('handleStyle').getItemStyle());\n            var handleColor = dataZoomModel.get('handleColor');\n            // Compatitable with previous version\n            if (handleColor != null) {\n                path.style.fill = handleColor;\n            }\n\n            barGroup.add(handles[handleIndex] = path);\n\n            var textStyleModel = dataZoomModel.textStyleModel;\n\n            this.group.add(\n                handleLabels[handleIndex] = new graphic.Text({\n                silent: true,\n                invisible: true,\n                style: {\n                    x: 0, y: 0, text: '',\n                    textVerticalAlign: 'middle',\n                    textAlign: 'center',\n                    textFill: textStyleModel.getTextColor(),\n                    textFont: textStyleModel.getFont()\n                },\n                z2: 10\n            }));\n\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _resetInterval: function () {\n        var range = this._range = this.dataZoomModel.getPercentRange();\n        var viewExtent = this._getViewExtent();\n\n        this._handleEnds = [\n            linearMap(range[0], [0, 100], viewExtent, true),\n            linearMap(range[1], [0, 100], viewExtent, true)\n        ];\n    },\n\n    /**\n     * @private\n     * @param {(number|string)} handleIndex 0 or 1 or 'all'\n     * @param {number} delta\n     * @return {boolean} changed\n     */\n    _updateInterval: function (handleIndex, delta) {\n        var dataZoomModel = this.dataZoomModel;\n        var handleEnds = this._handleEnds;\n        var viewExtend = this._getViewExtent();\n        var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();\n        var percentExtent = [0, 100];\n\n        sliderMove(\n            delta,\n            handleEnds,\n            viewExtend,\n            dataZoomModel.get('zoomLock') ? 'all' : handleIndex,\n            minMaxSpan.minSpan != null\n                ? linearMap(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null,\n            minMaxSpan.maxSpan != null\n                ? linearMap(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null\n        );\n\n        var lastRange = this._range;\n        var range = this._range = asc([\n            linearMap(handleEnds[0], viewExtend, percentExtent, true),\n            linearMap(handleEnds[1], viewExtend, percentExtent, true)\n        ]);\n\n        return !lastRange || lastRange[0] !== range[0] || lastRange[1] !== range[1];\n    },\n\n    /**\n     * @private\n     */\n    _updateView: function (nonRealtime) {\n        var displaybles = this._displayables;\n        var handleEnds = this._handleEnds;\n        var handleInterval = asc(handleEnds.slice());\n        var size = this._size;\n\n        each([0, 1], function (handleIndex) {\n            // Handles\n            var handle = displaybles.handles[handleIndex];\n            var handleHeight = this._handleHeight;\n            handle.attr({\n                scale: [handleHeight / 2, handleHeight / 2],\n                position: [handleEnds[handleIndex], size[1] / 2 - handleHeight / 2]\n            });\n        }, this);\n\n        // Filler\n        displaybles.filler.setShape({\n            x: handleInterval[0],\n            y: 0,\n            width: handleInterval[1] - handleInterval[0],\n            height: size[1]\n        });\n\n        this._updateDataInfo(nonRealtime);\n    },\n\n    /**\n     * @private\n     */\n    _updateDataInfo: function (nonRealtime) {\n        var dataZoomModel = this.dataZoomModel;\n        var displaybles = this._displayables;\n        var handleLabels = displaybles.handleLabels;\n        var orient = this._orient;\n        var labelTexts = ['', ''];\n\n        // FIXME\n        // date型，支持formatter，autoformatter（ec2 date.getAutoFormatter）\n        if (dataZoomModel.get('showDetail')) {\n            var axisProxy = dataZoomModel.findRepresentativeAxisProxy();\n\n            if (axisProxy) {\n                var axis = axisProxy.getAxisModel().axis;\n                var range = this._range;\n\n                var dataInterval = nonRealtime\n                    // See #4434, data and axis are not processed and reset yet in non-realtime mode.\n                    ? axisProxy.calculateDataWindow({\n                        start: range[0], end: range[1]\n                    }).valueWindow\n                    : axisProxy.getDataValueWindow();\n\n                labelTexts = [\n                    this._formatLabel(dataInterval[0], axis),\n                    this._formatLabel(dataInterval[1], axis)\n                ];\n            }\n        }\n\n        var orderedHandleEnds = asc(this._handleEnds.slice());\n\n        setLabel.call(this, 0);\n        setLabel.call(this, 1);\n\n        function setLabel(handleIndex) {\n            // Label\n            // Text should not transform by barGroup.\n            // Ignore handlers transform\n            var barTransform = graphic.getTransform(\n                displaybles.handles[handleIndex].parent, this.group\n            );\n            var direction = graphic.transformDirection(\n                handleIndex === 0 ? 'right' : 'left', barTransform\n            );\n            var offset = this._handleWidth / 2 + LABEL_GAP;\n            var textPoint = graphic.applyTransform(\n                [\n                    orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset),\n                    this._size[1] / 2\n                ],\n                barTransform\n            );\n            handleLabels[handleIndex].setStyle({\n                x: textPoint[0],\n                y: textPoint[1],\n                textVerticalAlign: orient === HORIZONTAL ? 'middle' : direction,\n                textAlign: orient === HORIZONTAL ? direction : 'center',\n                text: labelTexts[handleIndex]\n            });\n        }\n    },\n\n    /**\n     * @private\n     */\n    _formatLabel: function (value, axis) {\n        var dataZoomModel = this.dataZoomModel;\n        var labelFormatter = dataZoomModel.get('labelFormatter');\n\n        var labelPrecision = dataZoomModel.get('labelPrecision');\n        if (labelPrecision == null || labelPrecision === 'auto') {\n            labelPrecision = axis.getPixelPrecision();\n        }\n\n        var valueStr = (value == null || isNaN(value))\n            ? ''\n            // FIXME Glue code\n            : (axis.type === 'category' || axis.type === 'time')\n                ? axis.scale.getLabel(Math.round(value))\n                // param of toFixed should less then 20.\n                : value.toFixed(Math.min(labelPrecision, 20));\n\n        return zrUtil.isFunction(labelFormatter)\n            ? labelFormatter(value, valueStr)\n            : zrUtil.isString(labelFormatter)\n            ? labelFormatter.replace('{value}', valueStr)\n            : valueStr;\n    },\n\n    /**\n     * @private\n     * @param {boolean} showOrHide true: show, false: hide\n     */\n    _showDataInfo: function (showOrHide) {\n        // Always show when drgging.\n        showOrHide = this._dragging || showOrHide;\n\n        var handleLabels = this._displayables.handleLabels;\n        handleLabels[0].attr('invisible', !showOrHide);\n        handleLabels[1].attr('invisible', !showOrHide);\n    },\n\n    _onDragMove: function (handleIndex, dx, dy) {\n        this._dragging = true;\n\n        // Transform dx, dy to bar coordination.\n        var barTransform = this._displayables.barGroup.getLocalTransform();\n        var vertex = graphic.applyTransform([dx, dy], barTransform, true);\n\n        var changed = this._updateInterval(handleIndex, vertex[0]);\n\n        var realtime = this.dataZoomModel.get('realtime');\n\n        this._updateView(!realtime);\n\n        // Avoid dispatch dataZoom repeatly but range not changed,\n        // which cause bad visual effect when progressive enabled.\n        changed && realtime && this._dispatchZoomAction();\n    },\n\n    _onDragEnd: function () {\n        this._dragging = false;\n        this._showDataInfo(false);\n\n        // While in realtime mode and stream mode, dispatch action when\n        // drag end will cause the whole view rerender, which is unnecessary.\n        var realtime = this.dataZoomModel.get('realtime');\n        !realtime && this._dispatchZoomAction();\n    },\n\n    _onClickPanelClick: function (e) {\n        var size = this._size;\n        var localPoint = this._displayables.barGroup.transformCoordToLocal(e.offsetX, e.offsetY);\n\n        if (localPoint[0] < 0 || localPoint[0] > size[0]\n            || localPoint[1] < 0 || localPoint[1] > size[1]\n        ) {\n            return;\n        }\n\n        var handleEnds = this._handleEnds;\n        var center = (handleEnds[0] + handleEnds[1]) / 2;\n\n        var changed = this._updateInterval('all', localPoint[0] - center);\n        this._updateView();\n        changed && this._dispatchZoomAction();\n    },\n\n    /**\n     * This action will be throttled.\n     * @private\n     */\n    _dispatchZoomAction: function () {\n        var range = this._range;\n\n        this.api.dispatchAction({\n            type: 'dataZoom',\n            from: this.uid,\n            dataZoomId: this.dataZoomModel.id,\n            start: range[0],\n            end: range[1]\n        });\n    },\n\n    /**\n     * @private\n     */\n    _findCoordRect: function () {\n        // Find the grid coresponding to the first axis referred by dataZoom.\n        var rect;\n        each(this.getTargetCoordInfo(), function (coordInfoList) {\n            if (!rect && coordInfoList.length) {\n                var coordSys = coordInfoList[0].model.coordinateSystem;\n                rect = coordSys.getRect && coordSys.getRect();\n            }\n        });\n        if (!rect) {\n            var width = this.api.getWidth();\n            var height = this.api.getHeight();\n            rect = {\n                x: width * 0.2,\n                y: height * 0.2,\n                width: width * 0.6,\n                height: height * 0.6\n            };\n        }\n\n        return rect;\n    }\n\n});\n\nfunction getOtherDim(thisDim) {\n    // FIXME\n    // 这个逻辑和getOtherAxis里一致，但是写在这里是否不好\n    var map = {x: 'y', y: 'x', radius: 'angle', angle: 'radius'};\n    return map[thisDim];\n}\n\nfunction getCursor(orient) {\n    return orient === 'vertical' ? 'ns-resize' : 'ew-resize';\n}\n\nexport default SliderZoomView;\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\nimport './dataZoom/typeDefaulter';\n\nimport './dataZoom/DataZoomModel';\nimport './dataZoom/DataZoomView';\n\nimport './dataZoom/SliderZoomModel';\nimport './dataZoom/SliderZoomView';\n\nimport './dataZoom/dataZoomProcessor';\nimport './dataZoom/dataZoomAction';\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\nimport DataZoomModel from './DataZoomModel';\n\nexport default DataZoomModel.extend({\n\n    type: 'dataZoom.inside',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        disabled: false,   // Whether disable this inside zoom.\n        zoomLock: false,   // Whether disable zoom but only pan.\n        zoomOnMouseWheel: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n        moveOnMouseMove: true,   // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n        moveOnMouseWheel: false, // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n        preventDefaultMouseMove: true\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// Only create one roam controller for each coordinate system.\n// one roam controller might be refered by two inside data zoom\n// components (for example, one for x and one for y). When user\n// pan or zoom, only dispatch one action for those data zoom\n// components.\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport RoamController from '../../component/helper/RoamController';\nimport * as throttleUtil from '../../util/throttle';\n\n\nvar ATTR = '\\0_ec_dataZoom_roams';\n\n\n/**\n * @public\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} dataZoomInfo\n * @param {string} dataZoomInfo.coordId\n * @param {Function} dataZoomInfo.containsPoint\n * @param {Array.<string>} dataZoomInfo.allCoordIds\n * @param {string} dataZoomInfo.dataZoomId\n * @param {Object} dataZoomInfo.getRange\n * @param {Function} dataZoomInfo.getRange.pan\n * @param {Function} dataZoomInfo.getRange.zoom\n * @param {Function} dataZoomInfo.getRange.scrollMove\n * @param {boolean} dataZoomInfo.dataZoomModel\n */\nexport function register(api, dataZoomInfo) {\n    var store = giveStore(api);\n    var theDataZoomId = dataZoomInfo.dataZoomId;\n    var theCoordId = dataZoomInfo.coordId;\n\n    // Do clean when a dataZoom changes its target coordnate system.\n    // Avoid memory leak, dispose all not-used-registered.\n    zrUtil.each(store, function (record, coordId) {\n        var dataZoomInfos = record.dataZoomInfos;\n        if (dataZoomInfos[theDataZoomId]\n            && zrUtil.indexOf(dataZoomInfo.allCoordIds, theCoordId) < 0\n        ) {\n            delete dataZoomInfos[theDataZoomId];\n            record.count--;\n        }\n    });\n\n    cleanStore(store);\n\n    var record = store[theCoordId];\n    // Create if needed.\n    if (!record) {\n        record = store[theCoordId] = {\n            coordId: theCoordId,\n            dataZoomInfos: {},\n            count: 0\n        };\n        record.controller = createController(api, record);\n        record.dispatchAction = zrUtil.curry(dispatchAction, api);\n    }\n\n    // Update reference of dataZoom.\n    !(record.dataZoomInfos[theDataZoomId]) && record.count++;\n    record.dataZoomInfos[theDataZoomId] = dataZoomInfo;\n\n    var controllerParams = mergeControllerParams(record.dataZoomInfos);\n    record.controller.enable(controllerParams.controlType, controllerParams.opt);\n\n    // Consider resize, area should be always updated.\n    record.controller.setPointerChecker(dataZoomInfo.containsPoint);\n\n    // Update throttle.\n    throttleUtil.createOrUpdate(\n        record,\n        'dispatchAction',\n        dataZoomInfo.dataZoomModel.get('throttle', true),\n        'fixRate'\n    );\n}\n\n/**\n * @public\n * @param {module:echarts/ExtensionAPI} api\n * @param {string} dataZoomId\n */\nexport function unregister(api, dataZoomId) {\n    var store = giveStore(api);\n\n    zrUtil.each(store, function (record) {\n        record.controller.dispose();\n        var dataZoomInfos = record.dataZoomInfos;\n        if (dataZoomInfos[dataZoomId]) {\n            delete dataZoomInfos[dataZoomId];\n            record.count--;\n        }\n    });\n\n    cleanStore(store);\n}\n\n/**\n * @public\n */\nexport function generateCoordId(coordModel) {\n    return coordModel.type + '\\0_' + coordModel.id;\n}\n\n/**\n * Key: coordId, value: {dataZoomInfos: [], count, controller}\n * @type {Array.<Object>}\n */\nfunction giveStore(api) {\n    // Mount store on zrender instance, so that we do not\n    // need to worry about dispose.\n    var zr = api.getZr();\n    return zr[ATTR] || (zr[ATTR] = {});\n}\n\nfunction createController(api, newRecord) {\n    var controller = new RoamController(api.getZr());\n\n    zrUtil.each(['pan', 'zoom', 'scrollMove'], function (eventName) {\n        controller.on(eventName, function (event) {\n            var batch = [];\n\n            zrUtil.each(newRecord.dataZoomInfos, function (info) {\n                // Check whether the behaviors (zoomOnMouseWheel, moveOnMouseMove,\n                // moveOnMouseWheel, ...) enabled.\n                if (!event.isAvailableBehavior(info.dataZoomModel.option)) {\n                    return;\n                }\n\n                var method = (info.getRange || {})[eventName];\n                var range = method && method(newRecord.controller, event);\n\n                !info.dataZoomModel.get('disabled', true) && range && batch.push({\n                    dataZoomId: info.dataZoomId,\n                    start: range[0],\n                    end: range[1]\n                });\n            });\n\n            batch.length && newRecord.dispatchAction(batch);\n        });\n    });\n\n    return controller;\n}\n\nfunction cleanStore(store) {\n    zrUtil.each(store, function (record, coordId) {\n        if (!record.count) {\n            record.controller.dispose();\n            delete store[coordId];\n        }\n    });\n}\n\n/**\n * This action will be throttled.\n */\nfunction dispatchAction(api, batch) {\n    api.dispatchAction({\n        type: 'dataZoom',\n        batch: batch\n    });\n}\n\n/**\n * Merge roamController settings when multiple dataZooms share one roamController.\n */\nfunction mergeControllerParams(dataZoomInfos) {\n    var controlType;\n    // DO NOT use reserved word (true, false, undefined) as key literally. Even if encapsulated\n    // as string, it is probably revert to reserved word by compress tool. See #7411.\n    var prefix = 'type_';\n    var typePriority = {\n        'type_true': 2,\n        'type_move': 1,\n        'type_false': 0,\n        'type_undefined': -1\n    };\n    var preventDefaultMouseMove = true;\n\n    zrUtil.each(dataZoomInfos, function (dataZoomInfo) {\n        var dataZoomModel = dataZoomInfo.dataZoomModel;\n        var oneType = dataZoomModel.get('disabled', true)\n            ? false\n            : dataZoomModel.get('zoomLock', true)\n            ? 'move'\n            : true;\n        if (typePriority[prefix + oneType] > typePriority[prefix + controlType]) {\n            controlType = oneType;\n        }\n\n        // Prevent default move event by default. If one false, do not prevent. Otherwise\n        // users may be confused why it does not work when multiple insideZooms exist.\n        preventDefaultMouseMove &= dataZoomModel.get('preventDefaultMouseMove', true);\n    });\n\n    return {\n        controlType: controlType,\n        opt: {\n            // RoamController will enable all of these functionalities,\n            // and the final behavior is determined by its event listener\n            // provided by each inside zoom.\n            zoomOnMouseWheel: true,\n            moveOnMouseMove: true,\n            moveOnMouseWheel: true,\n            preventDefaultMouseMove: !!preventDefaultMouseMove\n        }\n    };\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport DataZoomView from './DataZoomView';\nimport sliderMove from '../helper/sliderMove';\nimport * as roams from './roams';\n\nvar bind = zrUtil.bind;\n\nvar InsideZoomView = DataZoomView.extend({\n\n    type: 'dataZoom.inside',\n\n    /**\n     * @override\n     */\n    init: function (ecModel, api) {\n        /**\n         * 'throttle' is used in this.dispatchAction, so we save range\n         * to avoid missing some 'pan' info.\n         * @private\n         * @type {Array.<number>}\n         */\n        this._range;\n    },\n\n    /**\n     * @override\n     */\n    render: function (dataZoomModel, ecModel, api, payload) {\n        InsideZoomView.superApply(this, 'render', arguments);\n\n        // Hence the `throttle` util ensures to preserve command order,\n        // here simply updating range all the time will not cause missing\n        // any of the the roam change.\n        this._range = dataZoomModel.getPercentRange();\n\n        // Reset controllers.\n        zrUtil.each(this.getTargetCoordInfo(), function (coordInfoList, coordSysName) {\n\n            var allCoordIds = zrUtil.map(coordInfoList, function (coordInfo) {\n                return roams.generateCoordId(coordInfo.model);\n            });\n\n            zrUtil.each(coordInfoList, function (coordInfo) {\n                var coordModel = coordInfo.model;\n\n                var getRange = {};\n                zrUtil.each(['pan', 'zoom', 'scrollMove'], function (eventName) {\n                    getRange[eventName] = bind(roamHandlers[eventName], this, coordInfo, coordSysName);\n                }, this);\n\n                roams.register(\n                    api,\n                    {\n                        coordId: roams.generateCoordId(coordModel),\n                        allCoordIds: allCoordIds,\n                        containsPoint: function (e, x, y) {\n                            return coordModel.coordinateSystem.containPoint([x, y]);\n                        },\n                        dataZoomId: dataZoomModel.id,\n                        dataZoomModel: dataZoomModel,\n                        getRange: getRange\n                    }\n                );\n            }, this);\n\n        }, this);\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        roams.unregister(this.api, this.dataZoomModel.id);\n        InsideZoomView.superApply(this, 'dispose', arguments);\n        this._range = null;\n    }\n\n});\n\nvar roamHandlers = {\n\n    /**\n     * @this {module:echarts/component/dataZoom/InsideZoomView}\n     */\n    zoom: function (coordInfo, coordSysName, controller, e) {\n        var lastRange = this._range;\n        var range = lastRange.slice();\n\n        // Calculate transform by the first axis.\n        var axisModel = coordInfo.axisModels[0];\n        if (!axisModel) {\n            return;\n        }\n\n        var directionInfo = getDirectionInfo[coordSysName](\n            null, [e.originX, e.originY], axisModel, controller, coordInfo\n        );\n        var percentPoint = (\n            directionInfo.signal > 0\n                ? (directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel)\n                : (directionInfo.pixel - directionInfo.pixelStart)\n            ) / directionInfo.pixelLength * (range[1] - range[0]) + range[0];\n\n        var scale = Math.max(1 / e.scale, 0);\n        range[0] = (range[0] - percentPoint) * scale + percentPoint;\n        range[1] = (range[1] - percentPoint) * scale + percentPoint;\n\n        // Restrict range.\n        var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();\n\n        sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan);\n\n        this._range = range;\n\n        if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) {\n            return range;\n        }\n    },\n\n    /**\n     * @this {module:echarts/component/dataZoom/InsideZoomView}\n     */\n    pan: makeMover(function (range, axisModel, coordInfo, coordSysName, controller, e) {\n        var directionInfo = getDirectionInfo[coordSysName](\n            [e.oldX, e.oldY], [e.newX, e.newY], axisModel, controller, coordInfo\n        );\n\n        return directionInfo.signal\n            * (range[1] - range[0])\n            * directionInfo.pixel / directionInfo.pixelLength;\n    }),\n\n    /**\n     * @this {module:echarts/component/dataZoom/InsideZoomView}\n     */\n    scrollMove: makeMover(function (range, axisModel, coordInfo, coordSysName, controller, e) {\n        var directionInfo = getDirectionInfo[coordSysName](\n            [0, 0], [e.scrollDelta, e.scrollDelta], axisModel, controller, coordInfo\n        );\n        return directionInfo.signal * (range[1] - range[0]) * e.scrollDelta;\n    })\n};\n\nfunction makeMover(getPercentDelta) {\n    return function (coordInfo, coordSysName, controller, e) {\n        var lastRange = this._range;\n        var range = lastRange.slice();\n\n        // Calculate transform by the first axis.\n        var axisModel = coordInfo.axisModels[0];\n        if (!axisModel) {\n            return;\n        }\n\n        var percentDelta = getPercentDelta(\n            range, axisModel, coordInfo, coordSysName, controller, e\n        );\n\n        sliderMove(percentDelta, range, [0, 100], 'all');\n\n        this._range = range;\n\n        if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) {\n            return range;\n        }\n    };\n}\n\nvar getDirectionInfo = {\n\n    grid: function (oldPoint, newPoint, axisModel, controller, coordInfo) {\n        var axis = axisModel.axis;\n        var ret = {};\n        var rect = coordInfo.model.coordinateSystem.getRect();\n        oldPoint = oldPoint || [0, 0];\n\n        if (axis.dim === 'x') {\n            ret.pixel = newPoint[0] - oldPoint[0];\n            ret.pixelLength = rect.width;\n            ret.pixelStart = rect.x;\n            ret.signal = axis.inverse ? 1 : -1;\n        }\n        else { // axis.dim === 'y'\n            ret.pixel = newPoint[1] - oldPoint[1];\n            ret.pixelLength = rect.height;\n            ret.pixelStart = rect.y;\n            ret.signal = axis.inverse ? -1 : 1;\n        }\n\n        return ret;\n    },\n\n    polar: function (oldPoint, newPoint, axisModel, controller, coordInfo) {\n        var axis = axisModel.axis;\n        var ret = {};\n        var polar = coordInfo.model.coordinateSystem;\n        var radiusExtent = polar.getRadiusAxis().getExtent();\n        var angleExtent = polar.getAngleAxis().getExtent();\n\n        oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0];\n        newPoint = polar.pointToCoord(newPoint);\n\n        if (axisModel.mainType === 'radiusAxis') {\n            ret.pixel = newPoint[0] - oldPoint[0];\n            // ret.pixelLength = Math.abs(radiusExtent[1] - radiusExtent[0]);\n            // ret.pixelStart = Math.min(radiusExtent[0], radiusExtent[1]);\n            ret.pixelLength = radiusExtent[1] - radiusExtent[0];\n            ret.pixelStart = radiusExtent[0];\n            ret.signal = axis.inverse ? 1 : -1;\n        }\n        else { // 'angleAxis'\n            ret.pixel = newPoint[1] - oldPoint[1];\n            // ret.pixelLength = Math.abs(angleExtent[1] - angleExtent[0]);\n            // ret.pixelStart = Math.min(angleExtent[0], angleExtent[1]);\n            ret.pixelLength = angleExtent[1] - angleExtent[0];\n            ret.pixelStart = angleExtent[0];\n            ret.signal = axis.inverse ? -1 : 1;\n        }\n\n        return ret;\n    },\n\n    singleAxis: function (oldPoint, newPoint, axisModel, controller, coordInfo) {\n        var axis = axisModel.axis;\n        var rect = coordInfo.model.coordinateSystem.getRect();\n        var ret = {};\n\n        oldPoint = oldPoint || [0, 0];\n\n        if (axis.orient === 'horizontal') {\n            ret.pixel = newPoint[0] - oldPoint[0];\n            ret.pixelLength = rect.width;\n            ret.pixelStart = rect.x;\n            ret.signal = axis.inverse ? 1 : -1;\n        }\n        else { // 'vertical'\n            ret.pixel = newPoint[1] - oldPoint[1];\n            ret.pixelLength = rect.height;\n            ret.pixelStart = rect.y;\n            ret.signal = axis.inverse ? -1 : 1;\n        }\n\n        return ret;\n    }\n};\n\nexport default InsideZoomView;\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\nimport './dataZoom/typeDefaulter';\n\nimport './dataZoom/DataZoomModel';\nimport './dataZoom/DataZoomView';\n\nimport './dataZoom/InsideZoomModel';\nimport './dataZoom/InsideZoomView';\n\nimport './dataZoom/dataZoomProcessor';\nimport './dataZoom/dataZoomAction';\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\nimport './dataZoomSlider';\nimport './dataZoomInside';\n\n// Do not include './dataZoomSelect',\n// since it only work for toolbox dataZoom.\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\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar each = zrUtil.each;\n\nexport default function (option) {\n    var visualMap = option && option.visualMap;\n\n    if (!zrUtil.isArray(visualMap)) {\n        visualMap = visualMap ? [visualMap] : [];\n    }\n\n    each(visualMap, function (opt) {\n        if (!opt) {\n            return;\n        }\n\n        // rename splitList to pieces\n        if (has(opt, 'splitList') && !has(opt, 'pieces')) {\n            opt.pieces = opt.splitList;\n            delete opt.splitList;\n        }\n\n        var pieces = opt.pieces;\n        if (pieces && zrUtil.isArray(pieces)) {\n            each(pieces, function (piece) {\n                if (zrUtil.isObject(piece)) {\n                    if (has(piece, 'start') && !has(piece, 'min')) {\n                        piece.min = piece.start;\n                    }\n                    if (has(piece, 'end') && !has(piece, 'max')) {\n                        piece.max = piece.end;\n                    }\n                }\n            });\n        }\n    });\n}\n\nfunction has(obj, name) {\n    return obj && obj.hasOwnProperty && obj.hasOwnProperty(name);\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\nimport Component from '../../model/Component';\n\nComponent.registerSubTypeDefaulter('visualMap', function (option) {\n    // Compatible with ec2, when splitNumber === 0, continuous visualMap will be used.\n    return (\n            !option.categories\n            && (\n                !(\n                    option.pieces\n                        ? option.pieces.length > 0\n                        : option.splitNumber > 0\n                )\n                || option.calculable\n            )\n        )\n        ? 'continuous' : 'piecewise';\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as visualSolution from '../../visual/visualSolution';\nimport VisualMapping from '../../visual/VisualMapping';\n\nvar VISUAL_PRIORITY = echarts.PRIORITY.VISUAL.COMPONENT;\n\necharts.registerVisual(VISUAL_PRIORITY, {\n    createOnAllSeries: true,\n    reset: function (seriesModel, ecModel) {\n        var resetDefines = [];\n        ecModel.eachComponent('visualMap', function (visualMapModel) {\n            var pipelineContext = seriesModel.pipelineContext;\n            if (!visualMapModel.isTargetSeries(seriesModel)\n                || (pipelineContext && pipelineContext.large)\n            ) {\n                return;\n            }\n\n            resetDefines.push(visualSolution.incrementalApplyVisual(\n                visualMapModel.stateList,\n                visualMapModel.targetVisuals,\n                zrUtil.bind(visualMapModel.getValueState, visualMapModel),\n                visualMapModel.getDataDimension(seriesModel.getData())\n            ));\n        });\n\n        return resetDefines;\n    }\n});\n\n// Only support color.\necharts.registerVisual(VISUAL_PRIORITY, {\n    createOnAllSeries: true,\n    reset: function (seriesModel, ecModel) {\n        var data = seriesModel.getData();\n        var visualMetaList = [];\n\n        ecModel.eachComponent('visualMap', function (visualMapModel) {\n            if (visualMapModel.isTargetSeries(seriesModel)) {\n                var visualMeta = visualMapModel.getVisualMeta(\n                    zrUtil.bind(getColorVisual, null, seriesModel, visualMapModel)\n                ) || {stops: [], outerColors: []};\n\n                var concreteDim = visualMapModel.getDataDimension(data);\n                var dimInfo = data.getDimensionInfo(concreteDim);\n                if (dimInfo != null) {\n                    // visualMeta.dimension should be dimension index, but not concrete dimension.\n                    visualMeta.dimension = dimInfo.index;\n                    visualMetaList.push(visualMeta);\n                }\n            }\n        });\n\n        // console.log(JSON.stringify(visualMetaList.map(a => a.stops)));\n        seriesModel.getData().setVisual('visualMeta', visualMetaList);\n    }\n});\n\n// FIXME\n// performance and export for heatmap?\n// value can be Infinity or -Infinity\nfunction getColorVisual(seriesModel, visualMapModel, value, valueState) {\n    var mappings = visualMapModel.targetVisuals[valueState];\n    var visualTypes = VisualMapping.prepareVisualTypes(mappings);\n    var resultVisual = {\n        color: seriesModel.getData().getVisual('color') // default color.\n    };\n\n    for (var i = 0, len = visualTypes.length; i < len; i++) {\n        var type = visualTypes[i];\n        var mapping = mappings[\n            type === 'opacity' ? '__alphaForOpacity' : type\n        ];\n        mapping && mapping.applyVisual(value, getVisual, setVisual);\n    }\n\n    return resultVisual.color;\n\n    function getVisual(key) {\n        return resultVisual[key];\n    }\n\n    function setVisual(key, value) {\n        resultVisual[key] = value;\n    }\n}\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @file Visual mapping.\n */\n\nimport * as zrUtil from 'zrender/src/core/util';\n\nvar visualDefault = {\n\n    /**\n     * @public\n     */\n    get: function (visualType, key, isCategory) {\n        var value = zrUtil.clone(\n            (defaultOption[visualType] || {})[key]\n        );\n\n        return isCategory\n            ? (zrUtil.isArray(value) ? value[value.length - 1] : value)\n            : value;\n    }\n\n};\n\nvar defaultOption = {\n\n    color: {\n        active: ['#006edd', '#e0ffff'],\n        inactive: ['rgba(0,0,0,0)']\n    },\n\n    colorHue: {\n        active: [0, 360],\n        inactive: [0, 0]\n    },\n\n    colorSaturation: {\n        active: [0.3, 1],\n        inactive: [0, 0]\n    },\n\n    colorLightness: {\n        active: [0.9, 0.5],\n        inactive: [0, 0]\n    },\n\n    colorAlpha: {\n        active: [0.3, 1],\n        inactive: [0, 0]\n    },\n\n    opacity: {\n        active: [0.3, 1],\n        inactive: [0, 0]\n    },\n\n    symbol: {\n        active: ['circle', 'roundRect', 'diamond'],\n        inactive: ['none']\n    },\n\n    symbolSize: {\n        active: [10, 50],\n        inactive: [0, 0]\n    }\n};\n\nexport default visualDefault;\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport env from 'zrender/src/core/env';\nimport visualDefault from '../../visual/visualDefault';\nimport VisualMapping from '../../visual/VisualMapping';\nimport * as visualSolution from '../../visual/visualSolution';\nimport * as modelUtil from '../../util/model';\nimport * as numberUtil from '../../util/number';\n\nvar mapVisual = VisualMapping.mapVisual;\nvar eachVisual = VisualMapping.eachVisual;\nvar isArray = zrUtil.isArray;\nvar each = zrUtil.each;\nvar asc = numberUtil.asc;\nvar linearMap = numberUtil.linearMap;\nvar noop = zrUtil.noop;\n\nvar VisualMapModel = echarts.extendComponentModel({\n\n    type: 'visualMap',\n\n    dependencies: ['series'],\n\n    /**\n     * @readOnly\n     * @type {Array.<string>}\n     */\n    stateList: ['inRange', 'outOfRange'],\n\n    /**\n     * @readOnly\n     * @type {Array.<string>}\n     */\n    replacableOptionKeys: [\n        'inRange', 'outOfRange', 'target', 'controller', 'color'\n    ],\n\n    /**\n     * [lowerBound, upperBound]\n     *\n     * @readOnly\n     * @type {Array.<number>}\n     */\n    dataBound: [-Infinity, Infinity],\n\n    /**\n     * @readOnly\n     * @type {string|Object}\n     */\n    layoutMode: {type: 'box', ignoreSize: true},\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        show: true,\n\n        zlevel: 0,\n        z: 4,\n\n        seriesIndex: 'all',     // 'all' or null/undefined: all series.\n                                // A number or an array of number: the specified series.\n\n                                // set min: 0, max: 200, only for campatible with ec2.\n                                // In fact min max should not have default value.\n        min: 0,                 // min value, must specified if pieces is not specified.\n        max: 200,               // max value, must specified if pieces is not specified.\n\n        dimension: null,\n        inRange: null,          // 'color', 'colorHue', 'colorSaturation', 'colorLightness', 'colorAlpha',\n                                // 'symbol', 'symbolSize'\n        outOfRange: null,       // 'color', 'colorHue', 'colorSaturation',\n                                // 'colorLightness', 'colorAlpha',\n                                // 'symbol', 'symbolSize'\n\n        left: 0,                // 'center' ¦ 'left' ¦ 'right' ¦ {number} (px)\n        right: null,            // The same as left.\n        top: null,              // 'top' ¦ 'bottom' ¦ 'center' ¦ {number} (px)\n        bottom: 0,              // The same as top.\n\n        itemWidth: null,\n        itemHeight: null,\n        inverse: false,\n        orient: 'vertical',        // 'horizontal' ¦ 'vertical'\n\n        backgroundColor: 'rgba(0,0,0,0)',\n        borderColor: '#ccc',       // 值域边框颜色\n        contentColor: '#5793f3',\n        inactiveColor: '#aaa',\n        borderWidth: 0,            // 值域边框线宽，单位px，默认为0（无边框）\n        padding: 5,                // 值域内边距，单位px，默认各方向内边距为5，\n                                    // 接受数组分别设定上右下左边距，同css\n        textGap: 10,               //\n        precision: 0,              // 小数精度，默认为0，无小数点\n        color: null,               //颜色（deprecated，兼容ec2，顺序同pieces，不同于inRange/outOfRange）\n\n        formatter: null,\n        text: null,                // 文本，如['高', '低']，兼容ec2，text[0]对应高值，text[1]对应低值\n        textStyle: {\n            color: '#333'          // 值域文字颜色\n        }\n    },\n\n    /**\n     * @protected\n     */\n    init: function (option, parentModel, ecModel) {\n\n        /**\n         * @private\n         * @type {Array.<number>}\n         */\n        this._dataExtent;\n\n        /**\n         * @readOnly\n         */\n        this.targetVisuals = {};\n\n        /**\n         * @readOnly\n         */\n        this.controllerVisuals = {};\n\n        /**\n         * @readOnly\n         */\n        this.textStyleModel;\n\n        /**\n         * [width, height]\n         * @readOnly\n         * @type {Array.<number>}\n         */\n        this.itemSize;\n\n        this.mergeDefaultAndTheme(option, ecModel);\n    },\n\n    /**\n     * @protected\n     */\n    optionUpdated: function (newOption, isInit) {\n        var thisOption = this.option;\n\n        // FIXME\n        // necessary?\n        // Disable realtime view update if canvas is not supported.\n        if (!env.canvasSupported) {\n            thisOption.realtime = false;\n        }\n\n        !isInit && visualSolution.replaceVisualOption(\n            thisOption, newOption, this.replacableOptionKeys\n        );\n\n        this.textStyleModel = this.getModel('textStyle');\n\n        this.resetItemSize();\n\n        this.completeVisualOption();\n    },\n\n    /**\n     * @protected\n     */\n    resetVisual: function (supplementVisualOption) {\n        var stateList = this.stateList;\n        supplementVisualOption = zrUtil.bind(supplementVisualOption, this);\n\n        this.controllerVisuals = visualSolution.createVisualMappings(\n            this.option.controller, stateList, supplementVisualOption\n        );\n        this.targetVisuals = visualSolution.createVisualMappings(\n            this.option.target, stateList, supplementVisualOption\n        );\n    },\n\n    /**\n     * @protected\n     * @return {Array.<number>} An array of series indices.\n     */\n    getTargetSeriesIndices: function () {\n        var optionSeriesIndex = this.option.seriesIndex;\n        var seriesIndices = [];\n\n        if (optionSeriesIndex == null || optionSeriesIndex === 'all') {\n            this.ecModel.eachSeries(function (seriesModel, index) {\n                seriesIndices.push(index);\n            });\n        }\n        else {\n            seriesIndices = modelUtil.normalizeToArray(optionSeriesIndex);\n        }\n\n        return seriesIndices;\n    },\n\n    /**\n     * @public\n     */\n    eachTargetSeries: function (callback, context) {\n        zrUtil.each(this.getTargetSeriesIndices(), function (seriesIndex) {\n            callback.call(context, this.ecModel.getSeriesByIndex(seriesIndex));\n        }, this);\n    },\n\n    /**\n     * @pubilc\n     */\n    isTargetSeries: function (seriesModel) {\n        var is = false;\n        this.eachTargetSeries(function (model) {\n            model === seriesModel && (is = true);\n        });\n        return is;\n    },\n\n    /**\n     * @example\n     * this.formatValueText(someVal); // format single numeric value to text.\n     * this.formatValueText(someVal, true); // format single category value to text.\n     * this.formatValueText([min, max]); // format numeric min-max to text.\n     * this.formatValueText([this.dataBound[0], max]); // using data lower bound.\n     * this.formatValueText([min, this.dataBound[1]]); // using data upper bound.\n     *\n     * @param {number|Array.<number>} value Real value, or this.dataBound[0 or 1].\n     * @param {boolean} [isCategory=false] Only available when value is number.\n     * @param {Array.<string>} edgeSymbols Open-close symbol when value is interval.\n     * @return {string}\n     * @protected\n     */\n    formatValueText: function (value, isCategory, edgeSymbols) {\n        var option = this.option;\n        var precision = option.precision;\n        var dataBound = this.dataBound;\n        var formatter = option.formatter;\n        var isMinMax;\n        var textValue;\n        edgeSymbols = edgeSymbols || ['<', '>'];\n\n        if (zrUtil.isArray(value)) {\n            value = value.slice();\n            isMinMax = true;\n        }\n\n        textValue = isCategory\n            ? value\n            : (isMinMax\n                ? [toFixed(value[0]), toFixed(value[1])]\n                : toFixed(value)\n            );\n\n        if (zrUtil.isString(formatter)) {\n            return formatter\n                .replace('{value}', isMinMax ? textValue[0] : textValue)\n                .replace('{value2}', isMinMax ? textValue[1] : textValue);\n        }\n        else if (zrUtil.isFunction(formatter)) {\n            return isMinMax\n                ? formatter(value[0], value[1])\n                : formatter(value);\n        }\n\n        if (isMinMax) {\n            if (value[0] === dataBound[0]) {\n                return edgeSymbols[0] + ' ' + textValue[1];\n            }\n            else if (value[1] === dataBound[1]) {\n                return edgeSymbols[1] + ' ' + textValue[0];\n            }\n            else {\n                return textValue[0] + ' - ' + textValue[1];\n            }\n        }\n        else { // Format single value (includes category case).\n            return textValue;\n        }\n\n        function toFixed(val) {\n            return val === dataBound[0]\n                ? 'min'\n                : val === dataBound[1]\n                ? 'max'\n                : (+val).toFixed(Math.min(precision, 20));\n        }\n    },\n\n    /**\n     * @protected\n     */\n    resetExtent: function () {\n        var thisOption = this.option;\n\n        // Can not calculate data extent by data here.\n        // Because series and data may be modified in processing stage.\n        // So we do not support the feature \"auto min/max\".\n\n        var extent = asc([thisOption.min, thisOption.max]);\n\n        this._dataExtent = extent;\n    },\n\n    /**\n     * @public\n     * @param {module:echarts/data/List} list\n     * @return {string} Concrete dimention. If return null/undefined,\n     *                  no dimension used.\n     */\n    getDataDimension: function (list) {\n        var optDim = this.option.dimension;\n        var listDimensions = list.dimensions;\n        if (optDim == null && !listDimensions.length) {\n            return;\n        }\n\n        if (optDim != null) {\n            return list.getDimension(optDim);\n        }\n\n        var dimNames = list.dimensions;\n        for (var i = dimNames.length - 1; i >= 0; i--) {\n            var dimName = dimNames[i];\n            var dimInfo = list.getDimensionInfo(dimName);\n            if (!dimInfo.isCalculationCoord) {\n                return dimName;\n            }\n        }\n    },\n\n    /**\n     * @public\n     * @override\n     */\n    getExtent: function () {\n        return this._dataExtent.slice();\n    },\n\n    /**\n     * @protected\n     */\n    completeVisualOption: function () {\n        var ecModel = this.ecModel;\n        var thisOption = this.option;\n        var base = {inRange: thisOption.inRange, outOfRange: thisOption.outOfRange};\n\n        var target = thisOption.target || (thisOption.target = {});\n        var controller = thisOption.controller || (thisOption.controller = {});\n\n        zrUtil.merge(target, base); // Do not override\n        zrUtil.merge(controller, base); // Do not override\n\n        var isCategory = this.isCategory();\n\n        completeSingle.call(this, target);\n        completeSingle.call(this, controller);\n        completeInactive.call(this, target, 'inRange', 'outOfRange');\n        // completeInactive.call(this, target, 'outOfRange', 'inRange');\n        completeController.call(this, controller);\n\n        function completeSingle(base) {\n            // Compatible with ec2 dataRange.color.\n            // The mapping order of dataRange.color is: [high value, ..., low value]\n            // whereas inRange.color and outOfRange.color is [low value, ..., high value]\n            // Notice: ec2 has no inverse.\n            if (isArray(thisOption.color)\n                // If there has been inRange: {symbol: ...}, adding color is a mistake.\n                // So adding color only when no inRange defined.\n                && !base.inRange\n            ) {\n                base.inRange = {color: thisOption.color.slice().reverse()};\n            }\n\n            // Compatible with previous logic, always give a defautl color, otherwise\n            // simple config with no inRange and outOfRange will not work.\n            // Originally we use visualMap.color as the default color, but setOption at\n            // the second time the default color will be erased. So we change to use\n            // constant DEFAULT_COLOR.\n            // If user do not want the defualt color, set inRange: {color: null}.\n            base.inRange = base.inRange || {color: ecModel.get('gradientColor')};\n\n            // If using shortcut like: {inRange: 'symbol'}, complete default value.\n            each(this.stateList, function (state) {\n                var visualType = base[state];\n\n                if (zrUtil.isString(visualType)) {\n                    var defa = visualDefault.get(visualType, 'active', isCategory);\n                    if (defa) {\n                        base[state] = {};\n                        base[state][visualType] = defa;\n                    }\n                    else {\n                        // Mark as not specified.\n                        delete base[state];\n                    }\n                }\n            }, this);\n        }\n\n        function completeInactive(base, stateExist, stateAbsent) {\n            var optExist = base[stateExist];\n            var optAbsent = base[stateAbsent];\n\n            if (optExist && !optAbsent) {\n                optAbsent = base[stateAbsent] = {};\n                each(optExist, function (visualData, visualType) {\n                    if (!VisualMapping.isValidType(visualType)) {\n                        return;\n                    }\n\n                    var defa = visualDefault.get(visualType, 'inactive', isCategory);\n\n                    if (defa != null) {\n                        optAbsent[visualType] = defa;\n\n                        // Compatibable with ec2:\n                        // Only inactive color to rgba(0,0,0,0) can not\n                        // make label transparent, so use opacity also.\n                        if (visualType === 'color'\n                            && !optAbsent.hasOwnProperty('opacity')\n                            && !optAbsent.hasOwnProperty('colorAlpha')\n                        ) {\n                            optAbsent.opacity = [0, 0];\n                        }\n                    }\n                });\n            }\n        }\n\n        function completeController(controller) {\n            var symbolExists = (controller.inRange || {}).symbol\n                || (controller.outOfRange || {}).symbol;\n            var symbolSizeExists = (controller.inRange || {}).symbolSize\n                || (controller.outOfRange || {}).symbolSize;\n            var inactiveColor = this.get('inactiveColor');\n\n            each(this.stateList, function (state) {\n\n                var itemSize = this.itemSize;\n                var visuals = controller[state];\n\n                // Set inactive color for controller if no other color\n                // attr (like colorAlpha) specified.\n                if (!visuals) {\n                    visuals = controller[state] = {\n                        color: isCategory ? inactiveColor : [inactiveColor]\n                    };\n                }\n\n                // Consistent symbol and symbolSize if not specified.\n                if (visuals.symbol == null) {\n                    visuals.symbol = symbolExists\n                        && zrUtil.clone(symbolExists)\n                        || (isCategory ? 'roundRect' : ['roundRect']);\n                }\n                if (visuals.symbolSize == null) {\n                    visuals.symbolSize = symbolSizeExists\n                        && zrUtil.clone(symbolSizeExists)\n                        || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]);\n                }\n\n                // Filter square and none.\n                visuals.symbol = mapVisual(visuals.symbol, function (symbol) {\n                    return (symbol === 'none' || symbol === 'square') ? 'roundRect' : symbol;\n                });\n\n                // Normalize symbolSize\n                var symbolSize = visuals.symbolSize;\n\n                if (symbolSize != null) {\n                    var max = -Infinity;\n                    // symbolSize can be object when categories defined.\n                    eachVisual(symbolSize, function (value) {\n                        value > max && (max = value);\n                    });\n                    visuals.symbolSize = mapVisual(symbolSize, function (value) {\n                        return linearMap(value, [0, max], [0, itemSize[0]], true);\n                    });\n                }\n\n            }, this);\n        }\n    },\n\n    /**\n     * @protected\n     */\n    resetItemSize: function () {\n        this.itemSize = [\n            parseFloat(this.get('itemWidth')),\n            parseFloat(this.get('itemHeight'))\n        ];\n    },\n\n    /**\n     * @public\n     */\n    isCategory: function () {\n        return !!this.option.categories;\n    },\n\n    /**\n     * @public\n     * @abstract\n     */\n    setSelected: noop,\n\n    /**\n     * @public\n     * @abstract\n     * @param {*|module:echarts/data/List} valueOrData\n     * @param {number} dataIndex\n     * @return {string} state See this.stateList\n     */\n    getValueState: noop,\n\n    /**\n     * FIXME\n     * Do not publish to thirt-part-dev temporarily\n     * util the interface is stable. (Should it return\n     * a function but not visual meta?)\n     *\n     * @pubilc\n     * @abstract\n     * @param {Function} getColorVisual\n     *        params: value, valueState\n     *        return: color\n     * @return {Object} visualMeta\n     *        should includes {stops, outerColors}\n     *        outerColor means [colorBeyondMinValue, colorBeyondMaxValue]\n     */\n    getVisualMeta: noop\n\n});\n\nexport default VisualMapModel;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport VisualMapModel from './VisualMapModel';\nimport * as numberUtil from '../../util/number';\n\n// Constant\nvar DEFAULT_BAR_BOUND = [20, 140];\n\nvar ContinuousModel = VisualMapModel.extend({\n\n    type: 'visualMap.continuous',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        align: 'auto',           // 'auto', 'left', 'right', 'top', 'bottom'\n        calculable: false,       // This prop effect default component type determine,\n                                 // See echarts/component/visualMap/typeDefaulter.\n        range: null,             // selected range. In default case `range` is [min, max]\n                                 // and can auto change along with modification of min max,\n                                 // util use specifid a range.\n        realtime: true,          // Whether realtime update.\n        itemHeight: null,        // The length of the range control edge.\n        itemWidth: null,         // The length of the other side.\n        hoverLink: true,         // Enable hover highlight.\n        hoverLinkDataSize: null, // The size of hovered data.\n        hoverLinkOnHandle: null  // Whether trigger hoverLink when hover handle.\n                                 // If not specified, follow the value of `realtime`.\n    },\n\n    /**\n     * @override\n     */\n    optionUpdated: function (newOption, isInit) {\n        ContinuousModel.superApply(this, 'optionUpdated', arguments);\n\n        this.resetExtent();\n\n        this.resetVisual(function (mappingOption) {\n            mappingOption.mappingMethod = 'linear';\n            mappingOption.dataExtent = this.getExtent();\n        });\n\n        this._resetRange();\n    },\n\n    /**\n     * @protected\n     * @override\n     */\n    resetItemSize: function () {\n        ContinuousModel.superApply(this, 'resetItemSize', arguments);\n\n        var itemSize = this.itemSize;\n\n        this._orient === 'horizontal' && itemSize.reverse();\n\n        (itemSize[0] == null || isNaN(itemSize[0])) && (itemSize[0] = DEFAULT_BAR_BOUND[0]);\n        (itemSize[1] == null || isNaN(itemSize[1])) && (itemSize[1] = DEFAULT_BAR_BOUND[1]);\n    },\n\n    /**\n     * @private\n     */\n    _resetRange: function () {\n        var dataExtent = this.getExtent();\n        var range = this.option.range;\n\n        if (!range || range.auto) {\n            // `range` should always be array (so we dont use other\n            // value like 'auto') for user-friend. (consider getOption).\n            dataExtent.auto = 1;\n            this.option.range = dataExtent;\n        }\n        else if (zrUtil.isArray(range)) {\n            if (range[0] > range[1]) {\n                range.reverse();\n            }\n            range[0] = Math.max(range[0], dataExtent[0]);\n            range[1] = Math.min(range[1], dataExtent[1]);\n        }\n    },\n\n    /**\n     * @protected\n     * @override\n     */\n    completeVisualOption: function () {\n        VisualMapModel.prototype.completeVisualOption.apply(this, arguments);\n\n        zrUtil.each(this.stateList, function (state) {\n            var symbolSize = this.option.controller[state].symbolSize;\n            if (symbolSize && symbolSize[0] !== symbolSize[1]) {\n                symbolSize[0] = 0; // For good looking.\n            }\n        }, this);\n    },\n\n    /**\n     * @override\n     */\n    setSelected: function (selected) {\n        this.option.range = selected.slice();\n        this._resetRange();\n    },\n\n    /**\n     * @public\n     */\n    getSelected: function () {\n        var dataExtent = this.getExtent();\n\n        var dataInterval = numberUtil.asc(\n            (this.get('range') || []).slice()\n        );\n\n        // Clamp\n        dataInterval[0] > dataExtent[1] && (dataInterval[0] = dataExtent[1]);\n        dataInterval[1] > dataExtent[1] && (dataInterval[1] = dataExtent[1]);\n        dataInterval[0] < dataExtent[0] && (dataInterval[0] = dataExtent[0]);\n        dataInterval[1] < dataExtent[0] && (dataInterval[1] = dataExtent[0]);\n\n        return dataInterval;\n    },\n\n    /**\n     * @override\n     */\n    getValueState: function (value) {\n        var range = this.option.range;\n        var dataExtent = this.getExtent();\n\n        // When range[0] === dataExtent[0], any value larger than dataExtent[0] maps to 'inRange'.\n        // range[1] is processed likewise.\n        return (\n            (range[0] <= dataExtent[0] || range[0] <= value)\n            && (range[1] >= dataExtent[1] || value <= range[1])\n        ) ? 'inRange' : 'outOfRange';\n    },\n\n    /**\n     * @params {Array.<number>} range target value: range[0] <= value && value <= range[1]\n     * @return {Array.<Object>} [{seriesId, dataIndices: <Array.<number>>}, ...]\n     */\n    findTargetDataIndices: function (range) {\n        var result = [];\n\n        this.eachTargetSeries(function (seriesModel) {\n            var dataIndices = [];\n            var data = seriesModel.getData();\n\n            data.each(this.getDataDimension(data), function (value, dataIndex) {\n                range[0] <= value && value <= range[1] && dataIndices.push(dataIndex);\n            }, this);\n\n            result.push({seriesId: seriesModel.id, dataIndex: dataIndices});\n        }, this);\n\n        return result;\n    },\n\n    /**\n     * @implement\n     */\n    getVisualMeta: function (getColorVisual) {\n        var oVals = getColorStopValues(this, 'outOfRange', this.getExtent());\n        var iVals = getColorStopValues(this, 'inRange', this.option.range.slice());\n        var stops = [];\n\n        function setStop(value, valueState) {\n            stops.push({\n                value: value,\n                color: getColorVisual(value, valueState)\n            });\n        }\n\n        // Format to: outOfRange -- inRange -- outOfRange.\n        var iIdx = 0;\n        var oIdx = 0;\n        var iLen = iVals.length;\n        var oLen = oVals.length;\n\n        for (; oIdx < oLen && (!iVals.length || oVals[oIdx] <= iVals[0]); oIdx++) {\n            // If oVal[oIdx] === iVals[iIdx], oVal[oIdx] should be ignored.\n            if (oVals[oIdx] < iVals[iIdx]) {\n                setStop(oVals[oIdx], 'outOfRange');\n            }\n        }\n        for (var first = 1; iIdx < iLen; iIdx++, first = 0) {\n            // If range is full, value beyond min, max will be clamped.\n            // make a singularity\n            first && stops.length && setStop(iVals[iIdx], 'outOfRange');\n            setStop(iVals[iIdx], 'inRange');\n        }\n        for (var first = 1; oIdx < oLen; oIdx++) {\n            if (!iVals.length || iVals[iVals.length - 1] < oVals[oIdx]) {\n                // make a singularity\n                if (first) {\n                    stops.length && setStop(stops[stops.length - 1].value, 'outOfRange');\n                    first = 0;\n                }\n                setStop(oVals[oIdx], 'outOfRange');\n            }\n        }\n\n        var stopsLen = stops.length;\n\n        return {\n            stops: stops,\n            outerColors: [\n                stopsLen ? stops[0].color : 'transparent',\n                stopsLen ? stops[stopsLen - 1].color : 'transparent'\n            ]\n        };\n    }\n\n});\n\nfunction getColorStopValues(visualMapModel, valueState, dataExtent) {\n    if (dataExtent[0] === dataExtent[1]) {\n        return dataExtent.slice();\n    }\n\n    // When using colorHue mapping, it is not linear color any more.\n    // Moreover, canvas gradient seems not to be accurate linear.\n    // FIXME\n    // Should be arbitrary value 100? or based on pixel size?\n    var count = 200;\n    var step = (dataExtent[1] - dataExtent[0]) / count;\n\n    var value = dataExtent[0];\n    var stopValues = [];\n    for (var i = 0; i <= count && value < dataExtent[1]; i++) {\n        stopValues.push(value);\n        value += step;\n    }\n    stopValues.push(dataExtent[1]);\n\n    return stopValues;\n}\n\nexport default ContinuousModel;\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\nimport * as echarts from '../../echarts';\nimport * as zrUtil from 'zrender/src/core/util';\nimport * as graphic from '../../util/graphic';\nimport * as formatUtil from '../../util/format';\nimport * as layout from '../../util/layout';\nimport VisualMapping from '../../visual/VisualMapping';\n\nexport default echarts.extendComponentView({\n\n    type: 'visualMap',\n\n    /**\n     * @readOnly\n     * @type {Object}\n     */\n    autoPositionValues: {left: 1, right: 1, top: 1, bottom: 1},\n\n    init: function (ecModel, api) {\n        /**\n         * @readOnly\n         * @type {module:echarts/model/Global}\n         */\n        this.ecModel = ecModel;\n\n        /**\n         * @readOnly\n         * @type {module:echarts/ExtensionAPI}\n         */\n        this.api = api;\n\n        /**\n         * @readOnly\n         * @type {module:echarts/component/visualMap/visualMapModel}\n         */\n        this.visualMapModel;\n    },\n\n    /**\n     * @protected\n     */\n    render: function (visualMapModel, ecModel, api, payload) {\n        this.visualMapModel = visualMapModel;\n\n        if (visualMapModel.get('show') === false) {\n            this.group.removeAll();\n            return;\n        }\n\n        this.doRender.apply(this, arguments);\n    },\n\n    /**\n     * @protected\n     */\n    renderBackground: function (group) {\n        var visualMapModel = this.visualMapModel;\n        var padding = formatUtil.normalizeCssArray(visualMapModel.get('padding') || 0);\n        var rect = group.getBoundingRect();\n\n        group.add(new graphic.Rect({\n            z2: -1, // Lay background rect on the lowest layer.\n            silent: true,\n            shape: {\n                x: rect.x - padding[3],\n                y: rect.y - padding[0],\n                width: rect.width + padding[3] + padding[1],\n                height: rect.height + padding[0] + padding[2]\n            },\n            style: {\n                fill: visualMapModel.get('backgroundColor'),\n                stroke: visualMapModel.get('borderColor'),\n                lineWidth: visualMapModel.get('borderWidth')\n            }\n        }));\n    },\n\n    /**\n     * @protected\n     * @param {number} targetValue can be Infinity or -Infinity\n     * @param {string=} visualCluster Only can be 'color' 'opacity' 'symbol' 'symbolSize'\n     * @param {Object} [opts]\n     * @param {string=} [opts.forceState] Specify state, instead of using getValueState method.\n     * @param {string=} [opts.convertOpacityToAlpha=false] For color gradient in controller widget.\n     * @return {*} Visual value.\n     */\n    getControllerVisual: function (targetValue, visualCluster, opts) {\n        opts = opts || {};\n\n        var forceState = opts.forceState;\n        var visualMapModel = this.visualMapModel;\n        var visualObj = {};\n\n        // Default values.\n        if (visualCluster === 'symbol') {\n            visualObj.symbol = visualMapModel.get('itemSymbol');\n        }\n        if (visualCluster === 'color') {\n            var defaultColor = visualMapModel.get('contentColor');\n            visualObj.color = defaultColor;\n        }\n\n        function getter(key) {\n            return visualObj[key];\n        }\n\n        function setter(key, value) {\n            visualObj[key] = value;\n        }\n\n        var mappings = visualMapModel.controllerVisuals[\n            forceState || visualMapModel.getValueState(targetValue)\n        ];\n        var visualTypes = VisualMapping.prepareVisualTypes(mappings);\n\n        zrUtil.each(visualTypes, function (type) {\n            var visualMapping = mappings[type];\n            if (opts.convertOpacityToAlpha && type === 'opacity') {\n                type = 'colorAlpha';\n                visualMapping = mappings.__alphaForOpacity;\n            }\n            if (VisualMapping.dependsOn(type, visualCluster)) {\n                visualMapping && visualMapping.applyVisual(\n                    targetValue, getter, setter\n                );\n            }\n        });\n\n        return visualObj[visualCluster];\n    },\n\n    /**\n     * @protected\n     */\n    positionGroup: function (group) {\n        var model = this.visualMapModel;\n        var api = this.api;\n\n        layout.positionElement(\n            group,\n            model.getBoxLayoutParams(),\n            {width: api.getWidth(), height: api.getHeight()}\n        );\n    },\n\n    /**\n     * @protected\n     * @abstract\n     */\n    doRender: zrUtil.noop\n\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport * as zrUtil from 'zrender/src/core/util';\nimport {getLayoutRect} from '../../util/layout';\n\n/**\n * @param {module:echarts/component/visualMap/VisualMapModel} visualMapModel\\\n * @param {module:echarts/ExtensionAPI} api\n * @param {Array.<number>} itemSize always [short, long]\n * @return {string} 'left' or 'right' or 'top' or 'bottom'\n */\nexport function getItemAlign(visualMapModel, api, itemSize) {\n    var modelOption = visualMapModel.option;\n    var itemAlign = modelOption.align;\n\n    if (itemAlign != null && itemAlign !== 'auto') {\n        return itemAlign;\n    }\n\n    // Auto decision align.\n    var ecSize = {width: api.getWidth(), height: api.getHeight()};\n    var realIndex = modelOption.orient === 'horizontal' ? 1 : 0;\n\n    var paramsSet = [\n        ['left', 'right', 'width'],\n        ['top', 'bottom', 'height']\n    ];\n    var reals = paramsSet[realIndex];\n    var fakeValue = [0, null, 10];\n\n    var layoutInput = {};\n    for (var i = 0; i < 3; i++) {\n        layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i];\n        layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]];\n    }\n\n    var rParam = [['x', 'width', 3], ['y', 'height', 0]][realIndex];\n    var rect = getLayoutRect(layoutInput, ecSize, modelOption.padding);\n\n    return reals[\n        (rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5\n            < ecSize[rParam[1]] * 0.5 ? 0 : 1\n    ];\n}\n\n/**\n * Prepare dataIndex for outside usage, where dataIndex means rawIndex, and\n * dataIndexInside means filtered index.\n */\nexport function makeHighDownBatch(batch, visualMapModel) {\n    zrUtil.each(batch || [], function (batchItem) {\n        if (batchItem.dataIndex != null) {\n            batchItem.dataIndexInside = batchItem.dataIndex;\n            batchItem.dataIndex = null;\n        }\n        batchItem.highlightKey = 'visualMap' + (visualMapModel ? visualMapModel.componentIndex : '');\n    });\n    return batch;\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport LinearGradient from 'zrender/src/graphic/LinearGradient';\nimport * as eventTool from 'zrender/src/core/event';\nimport VisualMapView from './VisualMapView';\nimport * as graphic from '../../util/graphic';\nimport * as numberUtil from '../../util/number';\nimport sliderMove from '../helper/sliderMove';\nimport * as helper from './helper';\nimport * as modelUtil from '../../util/model';\n\nvar linearMap = numberUtil.linearMap;\nvar each = zrUtil.each;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\n\n// Arbitrary value\nvar HOVER_LINK_SIZE = 12;\nvar HOVER_LINK_OUT = 6;\n\n// Notice:\n// Any \"interval\" should be by the order of [low, high].\n// \"handle0\" (handleIndex === 0) maps to\n// low data value: this._dataInterval[0] and has low coord.\n// \"handle1\" (handleIndex === 1) maps to\n// high data value: this._dataInterval[1] and has high coord.\n// The logic of transform is implemented in this._createBarGroup.\n\nvar ContinuousView = VisualMapView.extend({\n\n    type: 'visualMap.continuous',\n\n    /**\n     * @override\n     */\n    init: function () {\n\n        ContinuousView.superApply(this, 'init', arguments);\n\n        /**\n         * @private\n         */\n        this._shapes = {};\n\n        /**\n         * @private\n         */\n        this._dataInterval = [];\n\n        /**\n         * @private\n         */\n        this._handleEnds = [];\n\n        /**\n         * @private\n         */\n        this._orient;\n\n        /**\n         * @private\n         */\n        this._useHandle;\n\n        /**\n         * @private\n         */\n        this._hoverLinkDataIndices = [];\n\n        /**\n         * @private\n         */\n        this._dragging;\n\n        /**\n         * @private\n         */\n        this._hovering;\n    },\n\n    /**\n     * @protected\n     * @override\n     */\n    doRender: function (visualMapModel, ecModel, api, payload) {\n        if (!payload || payload.type !== 'selectDataRange' || payload.from !== this.uid) {\n            this._buildView();\n        }\n    },\n\n    /**\n     * @private\n     */\n    _buildView: function () {\n        this.group.removeAll();\n\n        var visualMapModel = this.visualMapModel;\n        var thisGroup = this.group;\n\n        this._orient = visualMapModel.get('orient');\n        this._useHandle = visualMapModel.get('calculable');\n\n        this._resetInterval();\n\n        this._renderBar(thisGroup);\n\n        var dataRangeText = visualMapModel.get('text');\n        this._renderEndsText(thisGroup, dataRangeText, 0);\n        this._renderEndsText(thisGroup, dataRangeText, 1);\n\n        // Do this for background size calculation.\n        this._updateView(true);\n\n        // After updating view, inner shapes is built completely,\n        // and then background can be rendered.\n        this.renderBackground(thisGroup);\n\n        // Real update view\n        this._updateView();\n\n        this._enableHoverLinkToSeries();\n        this._enableHoverLinkFromSeries();\n\n        this.positionGroup(thisGroup);\n    },\n\n    /**\n     * @private\n     */\n    _renderEndsText: function (group, dataRangeText, endsIndex) {\n        if (!dataRangeText) {\n            return;\n        }\n\n        // Compatible with ec2, text[0] map to high value, text[1] map low value.\n        var text = dataRangeText[1 - endsIndex];\n        text = text != null ? text + '' : '';\n\n        var visualMapModel = this.visualMapModel;\n        var textGap = visualMapModel.get('textGap');\n        var itemSize = visualMapModel.itemSize;\n\n        var barGroup = this._shapes.barGroup;\n        var position = this._applyTransform(\n            [\n                itemSize[0] / 2,\n                endsIndex === 0 ? -textGap : itemSize[1] + textGap\n            ],\n            barGroup\n        );\n        var align = this._applyTransform(\n            endsIndex === 0 ? 'bottom' : 'top',\n            barGroup\n        );\n        var orient = this._orient;\n        var textStyleModel = this.visualMapModel.textStyleModel;\n\n        this.group.add(new graphic.Text({\n            style: {\n                x: position[0],\n                y: position[1],\n                textVerticalAlign: orient === 'horizontal' ? 'middle' : align,\n                textAlign: orient === 'horizontal' ? align : 'center',\n                text: text,\n                textFont: textStyleModel.getFont(),\n                textFill: textStyleModel.getTextColor()\n            }\n        }));\n    },\n\n    /**\n     * @private\n     */\n    _renderBar: function (targetGroup) {\n        var visualMapModel = this.visualMapModel;\n        var shapes = this._shapes;\n        var itemSize = visualMapModel.itemSize;\n        var orient = this._orient;\n        var useHandle = this._useHandle;\n        var itemAlign = helper.getItemAlign(visualMapModel, this.api, itemSize);\n        var barGroup = shapes.barGroup = this._createBarGroup(itemAlign);\n\n        // Bar\n        barGroup.add(shapes.outOfRange = createPolygon());\n        barGroup.add(shapes.inRange = createPolygon(\n            null,\n            useHandle ? getCursor(this._orient) : null,\n            zrUtil.bind(this._dragHandle, this, 'all', false),\n            zrUtil.bind(this._dragHandle, this, 'all', true)\n        ));\n\n        var textRect = visualMapModel.textStyleModel.getTextRect('国');\n        var textSize = mathMax(textRect.width, textRect.height);\n\n        // Handle\n        if (useHandle) {\n            shapes.handleThumbs = [];\n            shapes.handleLabels = [];\n            shapes.handleLabelPoints = [];\n\n            this._createHandle(barGroup, 0, itemSize, textSize, orient, itemAlign);\n            this._createHandle(barGroup, 1, itemSize, textSize, orient, itemAlign);\n        }\n\n        this._createIndicator(barGroup, itemSize, textSize, orient);\n\n        targetGroup.add(barGroup);\n    },\n\n    /**\n     * @private\n     */\n    _createHandle: function (barGroup, handleIndex, itemSize, textSize, orient) {\n        var onDrift = zrUtil.bind(this._dragHandle, this, handleIndex, false);\n        var onDragEnd = zrUtil.bind(this._dragHandle, this, handleIndex, true);\n        var handleThumb = createPolygon(\n            createHandlePoints(handleIndex, textSize),\n            getCursor(this._orient),\n            onDrift,\n            onDragEnd\n        );\n        handleThumb.position[0] = itemSize[0];\n        barGroup.add(handleThumb);\n\n        // Text is always horizontal layout but should not be effected by\n        // transform (orient/inverse). So label is built separately but not\n        // use zrender/graphic/helper/RectText, and is located based on view\n        // group (according to handleLabelPoint) but not barGroup.\n        var textStyleModel = this.visualMapModel.textStyleModel;\n        var handleLabel = new graphic.Text({\n            draggable: true,\n            drift: onDrift,\n            onmousemove: function (e) {\n                // Fot mobile devicem, prevent screen slider on the button.\n                eventTool.stop(e.event);\n            },\n            ondragend: onDragEnd,\n            style: {\n                x: 0, y: 0, text: '',\n                textFont: textStyleModel.getFont(),\n                textFill: textStyleModel.getTextColor()\n            }\n        });\n        this.group.add(handleLabel);\n\n        var handleLabelPoint = [\n            orient === 'horizontal'\n                ? textSize / 2\n                : textSize * 1.5,\n            orient === 'horizontal'\n                ? (handleIndex === 0 ? -(textSize * 1.5) : (textSize * 1.5))\n                : (handleIndex === 0 ? -textSize / 2 : textSize / 2)\n        ];\n\n        var shapes = this._shapes;\n        shapes.handleThumbs[handleIndex] = handleThumb;\n        shapes.handleLabelPoints[handleIndex] = handleLabelPoint;\n        shapes.handleLabels[handleIndex] = handleLabel;\n    },\n\n    /**\n     * @private\n     */\n    _createIndicator: function (barGroup, itemSize, textSize, orient) {\n        var indicator = createPolygon([[0, 0]], 'move');\n        indicator.position[0] = itemSize[0];\n        indicator.attr({invisible: true, silent: true});\n        barGroup.add(indicator);\n\n        var textStyleModel = this.visualMapModel.textStyleModel;\n        var indicatorLabel = new graphic.Text({\n            silent: true,\n            invisible: true,\n            style: {\n                x: 0, y: 0, text: '',\n                textFont: textStyleModel.getFont(),\n                textFill: textStyleModel.getTextColor()\n            }\n        });\n        this.group.add(indicatorLabel);\n\n        var indicatorLabelPoint = [\n            orient === 'horizontal' ? textSize / 2 : HOVER_LINK_OUT + 3,\n            0\n        ];\n\n        var shapes = this._shapes;\n        shapes.indicator = indicator;\n        shapes.indicatorLabel = indicatorLabel;\n        shapes.indicatorLabelPoint = indicatorLabelPoint;\n    },\n\n    /**\n     * @private\n     */\n    _dragHandle: function (handleIndex, isEnd, dx, dy) {\n        if (!this._useHandle) {\n            return;\n        }\n\n        this._dragging = !isEnd;\n\n        if (!isEnd) {\n            // Transform dx, dy to bar coordination.\n            var vertex = this._applyTransform([dx, dy], this._shapes.barGroup, true);\n            this._updateInterval(handleIndex, vertex[1]);\n\n            // Considering realtime, update view should be executed\n            // before dispatch action.\n            this._updateView();\n        }\n\n        // dragEnd do not dispatch action when realtime.\n        if (isEnd === !this.visualMapModel.get('realtime')) { // jshint ignore:line\n            this.api.dispatchAction({\n                type: 'selectDataRange',\n                from: this.uid,\n                visualMapId: this.visualMapModel.id,\n                selected: this._dataInterval.slice()\n            });\n        }\n\n        if (isEnd) {\n            !this._hovering && this._clearHoverLinkToSeries();\n        }\n        else if (useHoverLinkOnHandle(this.visualMapModel)) {\n            this._doHoverLinkToSeries(this._handleEnds[handleIndex], false);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _resetInterval: function () {\n        var visualMapModel = this.visualMapModel;\n\n        var dataInterval = this._dataInterval = visualMapModel.getSelected();\n        var dataExtent = visualMapModel.getExtent();\n        var sizeExtent = [0, visualMapModel.itemSize[1]];\n\n        this._handleEnds = [\n            linearMap(dataInterval[0], dataExtent, sizeExtent, true),\n            linearMap(dataInterval[1], dataExtent, sizeExtent, true)\n        ];\n    },\n\n    /**\n     * @private\n     * @param {(number|string)} handleIndex 0 or 1 or 'all'\n     * @param {number} dx\n     * @param {number} dy\n     */\n    _updateInterval: function (handleIndex, delta) {\n        delta = delta || 0;\n        var visualMapModel = this.visualMapModel;\n        var handleEnds = this._handleEnds;\n        var sizeExtent = [0, visualMapModel.itemSize[1]];\n\n        sliderMove(\n            delta,\n            handleEnds,\n            sizeExtent,\n            handleIndex,\n            // cross is forbiden\n            0\n        );\n\n        var dataExtent = visualMapModel.getExtent();\n        // Update data interval.\n        this._dataInterval = [\n            linearMap(handleEnds[0], sizeExtent, dataExtent, true),\n            linearMap(handleEnds[1], sizeExtent, dataExtent, true)\n        ];\n    },\n\n    /**\n     * @private\n     */\n    _updateView: function (forSketch) {\n        var visualMapModel = this.visualMapModel;\n        var dataExtent = visualMapModel.getExtent();\n        var shapes = this._shapes;\n\n        var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]];\n        var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds;\n\n        var visualInRange = this._createBarVisual(\n            this._dataInterval, dataExtent, inRangeHandleEnds, 'inRange'\n        );\n        var visualOutOfRange = this._createBarVisual(\n            dataExtent, dataExtent, outOfRangeHandleEnds, 'outOfRange'\n        );\n\n        shapes.inRange\n            .setStyle({\n                fill: visualInRange.barColor,\n                opacity: visualInRange.opacity\n            })\n            .setShape('points', visualInRange.barPoints);\n        shapes.outOfRange\n            .setStyle({\n                fill: visualOutOfRange.barColor,\n                opacity: visualOutOfRange.opacity\n            })\n            .setShape('points', visualOutOfRange.barPoints);\n\n        this._updateHandle(inRangeHandleEnds, visualInRange);\n    },\n\n    /**\n     * @private\n     */\n    _createBarVisual: function (dataInterval, dataExtent, handleEnds, forceState) {\n        var opts = {\n            forceState: forceState,\n            convertOpacityToAlpha: true\n        };\n        var colorStops = this._makeColorGradient(dataInterval, opts);\n\n        var symbolSizes = [\n            this.getControllerVisual(dataInterval[0], 'symbolSize', opts),\n            this.getControllerVisual(dataInterval[1], 'symbolSize', opts)\n        ];\n        var barPoints = this._createBarPoints(handleEnds, symbolSizes);\n\n        return {\n            barColor: new LinearGradient(0, 0, 0, 1, colorStops),\n            barPoints: barPoints,\n            handlesColor: [\n                colorStops[0].color,\n                colorStops[colorStops.length - 1].color\n            ]\n        };\n    },\n\n    /**\n     * @private\n     */\n    _makeColorGradient: function (dataInterval, opts) {\n        // Considering colorHue, which is not linear, so we have to sample\n        // to calculate gradient color stops, but not only caculate head\n        // and tail.\n        var sampleNumber = 100; // Arbitrary value.\n        var colorStops = [];\n        var step = (dataInterval[1] - dataInterval[0]) / sampleNumber;\n\n        colorStops.push({\n            color: this.getControllerVisual(dataInterval[0], 'color', opts),\n            offset: 0\n        });\n\n        for (var i = 1; i < sampleNumber; i++) {\n            var currValue = dataInterval[0] + step * i;\n            if (currValue > dataInterval[1]) {\n                break;\n            }\n            colorStops.push({\n                color: this.getControllerVisual(currValue, 'color', opts),\n                offset: i / sampleNumber\n            });\n        }\n\n        colorStops.push({\n            color: this.getControllerVisual(dataInterval[1], 'color', opts),\n            offset: 1\n        });\n\n        return colorStops;\n    },\n\n    /**\n     * @private\n     */\n    _createBarPoints: function (handleEnds, symbolSizes) {\n        var itemSize = this.visualMapModel.itemSize;\n\n        return [\n            [itemSize[0] - symbolSizes[0], handleEnds[0]],\n            [itemSize[0], handleEnds[0]],\n            [itemSize[0], handleEnds[1]],\n            [itemSize[0] - symbolSizes[1], handleEnds[1]]\n        ];\n    },\n\n    /**\n     * @private\n     */\n    _createBarGroup: function (itemAlign) {\n        var orient = this._orient;\n        var inverse = this.visualMapModel.get('inverse');\n\n        return new graphic.Group(\n            (orient === 'horizontal' && !inverse)\n            ? {scale: itemAlign === 'bottom' ? [1, 1] : [-1, 1], rotation: Math.PI / 2}\n            : (orient === 'horizontal' && inverse)\n            ? {scale: itemAlign === 'bottom' ? [-1, 1] : [1, 1], rotation: -Math.PI / 2}\n            : (orient === 'vertical' && !inverse)\n            ? {scale: itemAlign === 'left' ? [1, -1] : [-1, -1]}\n            : {scale: itemAlign === 'left' ? [1, 1] : [-1, 1]}\n        );\n    },\n\n    /**\n     * @private\n     */\n    _updateHandle: function (handleEnds, visualInRange) {\n        if (!this._useHandle) {\n            return;\n        }\n\n        var shapes = this._shapes;\n        var visualMapModel = this.visualMapModel;\n        var handleThumbs = shapes.handleThumbs;\n        var handleLabels = shapes.handleLabels;\n\n        each([0, 1], function (handleIndex) {\n            var handleThumb = handleThumbs[handleIndex];\n            handleThumb.setStyle('fill', visualInRange.handlesColor[handleIndex]);\n            handleThumb.position[1] = handleEnds[handleIndex];\n\n            // Update handle label position.\n            var textPoint = graphic.applyTransform(\n                shapes.handleLabelPoints[handleIndex],\n                graphic.getTransform(handleThumb, this.group)\n            );\n            handleLabels[handleIndex].setStyle({\n                x: textPoint[0],\n                y: textPoint[1],\n                text: visualMapModel.formatValueText(this._dataInterval[handleIndex]),\n                textVerticalAlign: 'middle',\n                textAlign: this._applyTransform(\n                    this._orient === 'horizontal'\n                        ? (handleIndex === 0 ? 'bottom' : 'top')\n                        : 'left',\n                    shapes.barGroup\n                )\n            });\n        }, this);\n    },\n\n    /**\n     * @private\n     * @param {number} cursorValue\n     * @param {number} textValue\n     * @param {string} [rangeSymbol]\n     * @param {number} [halfHoverLinkSize]\n     */\n    _showIndicator: function (cursorValue, textValue, rangeSymbol, halfHoverLinkSize) {\n        var visualMapModel = this.visualMapModel;\n        var dataExtent = visualMapModel.getExtent();\n        var itemSize = visualMapModel.itemSize;\n        var sizeExtent = [0, itemSize[1]];\n        var pos = linearMap(cursorValue, dataExtent, sizeExtent, true);\n\n        var shapes = this._shapes;\n        var indicator = shapes.indicator;\n        if (!indicator) {\n            return;\n        }\n\n        indicator.position[1] = pos;\n        indicator.attr('invisible', false);\n        indicator.setShape('points', createIndicatorPoints(\n            !!rangeSymbol, halfHoverLinkSize, pos, itemSize[1]\n        ));\n\n        var opts = {convertOpacityToAlpha: true};\n        var color = this.getControllerVisual(cursorValue, 'color', opts);\n        indicator.setStyle('fill', color);\n\n        // Update handle label position.\n        var textPoint = graphic.applyTransform(\n            shapes.indicatorLabelPoint,\n            graphic.getTransform(indicator, this.group)\n        );\n\n        var indicatorLabel = shapes.indicatorLabel;\n        indicatorLabel.attr('invisible', false);\n        var align = this._applyTransform('left', shapes.barGroup);\n        var orient = this._orient;\n        indicatorLabel.setStyle({\n            text: (rangeSymbol ? rangeSymbol : '') + visualMapModel.formatValueText(textValue),\n            textVerticalAlign: orient === 'horizontal' ? align : 'middle',\n            textAlign: orient === 'horizontal' ? 'center' : align,\n            x: textPoint[0],\n            y: textPoint[1]\n        });\n    },\n\n    /**\n     * @private\n     */\n    _enableHoverLinkToSeries: function () {\n        var self = this;\n        this._shapes.barGroup\n\n            .on('mousemove', function (e) {\n                self._hovering = true;\n\n                if (!self._dragging) {\n                    var itemSize = self.visualMapModel.itemSize;\n                    var pos = self._applyTransform(\n                        [e.offsetX, e.offsetY], self._shapes.barGroup, true, true\n                    );\n                    // For hover link show when hover handle, which might be\n                    // below or upper than sizeExtent.\n                    pos[1] = mathMin(mathMax(0, pos[1]), itemSize[1]);\n                    self._doHoverLinkToSeries(\n                        pos[1],\n                        0 <= pos[0] && pos[0] <= itemSize[0]\n                    );\n                }\n            })\n\n            .on('mouseout', function () {\n                // When mouse is out of handle, hoverLink still need\n                // to be displayed when realtime is set as false.\n                self._hovering = false;\n                !self._dragging && self._clearHoverLinkToSeries();\n            });\n    },\n\n    /**\n     * @private\n     */\n    _enableHoverLinkFromSeries: function () {\n        var zr = this.api.getZr();\n\n        if (this.visualMapModel.option.hoverLink) {\n            zr.on('mouseover', this._hoverLinkFromSeriesMouseOver, this);\n            zr.on('mouseout', this._hideIndicator, this);\n        }\n        else {\n            this._clearHoverLinkFromSeries();\n        }\n    },\n\n    /**\n     * @private\n     */\n    _doHoverLinkToSeries: function (cursorPos, hoverOnBar) {\n        var visualMapModel = this.visualMapModel;\n        var itemSize = visualMapModel.itemSize;\n\n        if (!visualMapModel.option.hoverLink) {\n            return;\n        }\n\n        var sizeExtent = [0, itemSize[1]];\n        var dataExtent = visualMapModel.getExtent();\n\n        // For hover link show when hover handle, which might be below or upper than sizeExtent.\n        cursorPos = mathMin(mathMax(sizeExtent[0], cursorPos), sizeExtent[1]);\n\n        var halfHoverLinkSize = getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent);\n        var hoverRange = [cursorPos - halfHoverLinkSize, cursorPos + halfHoverLinkSize];\n        var cursorValue = linearMap(cursorPos, sizeExtent, dataExtent, true);\n        var valueRange = [\n            linearMap(hoverRange[0], sizeExtent, dataExtent, true),\n            linearMap(hoverRange[1], sizeExtent, dataExtent, true)\n        ];\n        // Consider data range is out of visualMap range, see test/visualMap-continuous.html,\n        // where china and india has very large population.\n        hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity);\n        hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity);\n\n        // Do not show indicator when mouse is over handle,\n        // otherwise labels overlap, especially when dragging.\n        if (hoverOnBar) {\n            if (valueRange[0] === -Infinity) {\n                this._showIndicator(cursorValue, valueRange[1], '< ', halfHoverLinkSize);\n            }\n            else if (valueRange[1] === Infinity) {\n                this._showIndicator(cursorValue, valueRange[0], '> ', halfHoverLinkSize);\n            }\n            else {\n                this._showIndicator(cursorValue, cursorValue, '≈ ', halfHoverLinkSize);\n            }\n        }\n\n        // When realtime is set as false, handles, which are in barGroup,\n        // also trigger hoverLink, which help user to realize where they\n        // focus on when dragging. (see test/heatmap-large.html)\n        // When realtime is set as true, highlight will not show when hover\n        // handle, because the label on handle, which displays a exact value\n        // but not range, might mislead users.\n        var oldBatch = this._hoverLinkDataIndices;\n        var newBatch = [];\n        if (hoverOnBar || useHoverLinkOnHandle(visualMapModel)) {\n            newBatch = this._hoverLinkDataIndices = visualMapModel.findTargetDataIndices(valueRange);\n        }\n\n        var resultBatches = modelUtil.compressBatches(oldBatch, newBatch);\n\n        this._dispatchHighDown('downplay', helper.makeHighDownBatch(resultBatches[0], visualMapModel));\n        this._dispatchHighDown('highlight', helper.makeHighDownBatch(resultBatches[1], visualMapModel));\n    },\n\n    /**\n     * @private\n     */\n    _hoverLinkFromSeriesMouseOver: function (e) {\n        var el = e.target;\n        var visualMapModel = this.visualMapModel;\n\n        if (!el || el.dataIndex == null) {\n            return;\n        }\n\n        var dataModel = this.ecModel.getSeriesByIndex(el.seriesIndex);\n\n        if (!visualMapModel.isTargetSeries(dataModel)) {\n            return;\n        }\n\n        var data = dataModel.getData(el.dataType);\n        var value = data.get(visualMapModel.getDataDimension(data), el.dataIndex, true);\n\n        if (!isNaN(value)) {\n            this._showIndicator(value, value);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _hideIndicator: function () {\n        var shapes = this._shapes;\n        shapes.indicator && shapes.indicator.attr('invisible', true);\n        shapes.indicatorLabel && shapes.indicatorLabel.attr('invisible', true);\n    },\n\n    /**\n     * @private\n     */\n    _clearHoverLinkToSeries: function () {\n        this._hideIndicator();\n\n        var indices = this._hoverLinkDataIndices;\n        this._dispatchHighDown('downplay', helper.makeHighDownBatch(indices, this.visualMapModel));\n\n        indices.length = 0;\n    },\n\n    /**\n     * @private\n     */\n    _clearHoverLinkFromSeries: function () {\n        this._hideIndicator();\n\n        var zr = this.api.getZr();\n        zr.off('mouseover', this._hoverLinkFromSeriesMouseOver);\n        zr.off('mouseout', this._hideIndicator);\n    },\n\n    /**\n     * @private\n     */\n    _applyTransform: function (vertex, element, inverse, global) {\n        var transform = graphic.getTransform(element, global ? null : this.group);\n\n        return graphic[\n            zrUtil.isArray(vertex) ? 'applyTransform' : 'transformDirection'\n        ](vertex, transform, inverse);\n    },\n\n    /**\n     * @private\n     */\n    _dispatchHighDown: function (type, batch) {\n        batch && batch.length && this.api.dispatchAction({\n            type: type,\n            batch: batch\n        });\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        this._clearHoverLinkFromSeries();\n        this._clearHoverLinkToSeries();\n    },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        this._clearHoverLinkFromSeries();\n        this._clearHoverLinkToSeries();\n    }\n\n});\n\nfunction createPolygon(points, cursor, onDrift, onDragEnd) {\n    return new graphic.Polygon({\n        shape: {points: points},\n        draggable: !!onDrift,\n        cursor: cursor,\n        drift: onDrift,\n        onmousemove: function (e) {\n            // Fot mobile devicem, prevent screen slider on the button.\n            eventTool.stop(e.event);\n        },\n        ondragend: onDragEnd\n    });\n}\n\nfunction createHandlePoints(handleIndex, textSize) {\n    return handleIndex === 0\n        ? [[0, 0], [textSize, 0], [textSize, -textSize]]\n        : [[0, 0], [textSize, 0], [textSize, textSize]];\n}\n\nfunction createIndicatorPoints(isRange, halfHoverLinkSize, pos, extentMax) {\n    return isRange\n        ? [ // indicate range\n            [0, -mathMin(halfHoverLinkSize, mathMax(pos, 0))],\n            [HOVER_LINK_OUT, 0],\n            [0, mathMin(halfHoverLinkSize, mathMax(extentMax - pos, 0))]\n        ]\n        : [ // indicate single value\n            [0, 0], [5, -5], [5, 5]\n        ];\n}\n\nfunction getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) {\n    var halfHoverLinkSize = HOVER_LINK_SIZE / 2;\n    var hoverLinkDataSize = visualMapModel.get('hoverLinkDataSize');\n    if (hoverLinkDataSize) {\n        halfHoverLinkSize = linearMap(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2;\n    }\n    return halfHoverLinkSize;\n}\n\nfunction useHoverLinkOnHandle(visualMapModel) {\n    var hoverLinkOnHandle = visualMapModel.get('hoverLinkOnHandle');\n    return !!(hoverLinkOnHandle == null ? visualMapModel.get('realtime') : hoverLinkOnHandle);\n}\n\nfunction getCursor(orient) {\n    return orient === 'vertical' ? 'ns-resize' : 'ew-resize';\n}\n\nexport default ContinuousView;","/*\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\nimport * as echarts from '../../echarts';\n\nvar actionInfo = {\n    type: 'selectDataRange',\n    event: 'dataRangeSelected',\n    // FIXME use updateView appears wrong\n    update: 'update'\n};\n\necharts.registerAction(actionInfo, function (payload, ecModel) {\n\n    ecModel.eachComponent({mainType: 'visualMap', query: payload}, function (model) {\n        model.setSelected(payload.selected);\n    });\n\n});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * DataZoom component entry\n */\n\nimport * as echarts from '../echarts';\nimport preprocessor from './visualMap/preprocessor';\n\nimport './visualMap/typeDefaulter';\nimport './visualMap/visualEncoding';\nimport './visualMap/ContinuousModel';\nimport './visualMap/ContinuousView';\nimport './visualMap/visualMapAction';\n\necharts.registerPreprocessor(preprocessor);\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\nimport {__DEV__} from '../../config';\nimport * as zrUtil from 'zrender/src/core/util';\nimport VisualMapModel from './VisualMapModel';\nimport VisualMapping from '../../visual/VisualMapping';\nimport visualDefault from '../../visual/visualDefault';\nimport {reformIntervals} from '../../util/number';\n\nvar PiecewiseModel = VisualMapModel.extend({\n\n    type: 'visualMap.piecewise',\n\n    /**\n     * Order Rule:\n     *\n     * option.categories / option.pieces / option.text / option.selected:\n     *     If !option.inverse,\n     *     Order when vertical: ['top', ..., 'bottom'].\n     *     Order when horizontal: ['left', ..., 'right'].\n     *     If option.inverse, the meaning of\n     *     the order should be reversed.\n     *\n     * this._pieceList:\n     *     The order is always [low, ..., high].\n     *\n     * Mapping from location to low-high:\n     *     If !option.inverse\n     *     When vertical, top is high.\n     *     When horizontal, right is high.\n     *     If option.inverse, reverse.\n     */\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        selected: null,             // Object. If not specified, means selected.\n                                    // When pieces and splitNumber: {'0': true, '5': true}\n                                    // When categories: {'cate1': false, 'cate3': true}\n                                    // When selected === false, means all unselected.\n\n        minOpen: false,             // Whether include values that smaller than `min`.\n        maxOpen: false,             // Whether include values that bigger than `max`.\n\n        align: 'auto',              // 'auto', 'left', 'right'\n        itemWidth: 20,              // When put the controller vertically, it is the length of\n                                    // horizontal side of each item. Otherwise, vertical side.\n        itemHeight: 14,             // When put the controller vertically, it is the length of\n                                    // vertical side of each item. Otherwise, horizontal side.\n        itemSymbol: 'roundRect',\n        pieceList: null,            // Each item is Object, with some of those attrs:\n                                    // {min, max, lt, gt, lte, gte, value,\n                                    // color, colorSaturation, colorAlpha, opacity,\n                                    // symbol, symbolSize}, which customize the range or visual\n                                    // coding of the certain piece. Besides, see \"Order Rule\".\n        categories: null,           // category names, like: ['some1', 'some2', 'some3'].\n                                    // Attr min/max are ignored when categories set. See \"Order Rule\"\n        splitNumber: 5,             // If set to 5, auto split five pieces equally.\n                                    // If set to 0 and component type not set, component type will be\n                                    // determined as \"continuous\". (It is less reasonable but for ec2\n                                    // compatibility, see echarts/component/visualMap/typeDefaulter)\n        selectedMode: 'multiple',   // Can be 'multiple' or 'single'.\n        itemGap: 10,                // The gap between two items, in px.\n        hoverLink: true,            // Enable hover highlight.\n\n        showLabel: null             // By default, when text is used, label will hide (the logic\n                                    // is remained for compatibility reason)\n    },\n\n    /**\n     * @override\n     */\n    optionUpdated: function (newOption, isInit) {\n        PiecewiseModel.superApply(this, 'optionUpdated', arguments);\n\n        /**\n         * The order is always [low, ..., high].\n         * [{text: string, interval: Array.<number>}, ...]\n         * @private\n         * @type {Array.<Object>}\n         */\n        this._pieceList = [];\n\n        this.resetExtent();\n\n        /**\n         * 'pieces', 'categories', 'splitNumber'\n         * @type {string}\n         */\n        var mode = this._mode = this._determineMode();\n\n        resetMethods[this._mode].call(this);\n\n        this._resetSelected(newOption, isInit);\n\n        var categories = this.option.categories;\n\n        this.resetVisual(function (mappingOption, state) {\n            if (mode === 'categories') {\n                mappingOption.mappingMethod = 'category';\n                mappingOption.categories = zrUtil.clone(categories);\n            }\n            else {\n                mappingOption.dataExtent = this.getExtent();\n                mappingOption.mappingMethod = 'piecewise';\n                mappingOption.pieceList = zrUtil.map(this._pieceList, function (piece) {\n                    var piece = zrUtil.clone(piece);\n                    if (state !== 'inRange') {\n                        // FIXME\n                        // outOfRange do not support special visual in pieces.\n                        piece.visual = null;\n                    }\n                    return piece;\n                });\n            }\n        });\n    },\n\n    /**\n     * @protected\n     * @override\n     */\n    completeVisualOption: function () {\n        // Consider this case:\n        // visualMap: {\n        //      pieces: [{symbol: 'circle', lt: 0}, {symbol: 'rect', gte: 0}]\n        // }\n        // where no inRange/outOfRange set but only pieces. So we should make\n        // default inRange/outOfRange for this case, otherwise visuals that only\n        // appear in `pieces` will not be taken into account in visual encoding.\n\n        var option = this.option;\n        var visualTypesInPieces = {};\n        var visualTypes = VisualMapping.listVisualTypes();\n        var isCategory = this.isCategory();\n\n        zrUtil.each(option.pieces, function (piece) {\n            zrUtil.each(visualTypes, function (visualType) {\n                if (piece.hasOwnProperty(visualType)) {\n                    visualTypesInPieces[visualType] = 1;\n                }\n            });\n        });\n\n        zrUtil.each(visualTypesInPieces, function (v, visualType) {\n            var exists = 0;\n            zrUtil.each(this.stateList, function (state) {\n                exists |= has(option, state, visualType)\n                    || has(option.target, state, visualType);\n            }, this);\n\n            !exists && zrUtil.each(this.stateList, function (state) {\n                (option[state] || (option[state] = {}))[visualType] = visualDefault.get(\n                    visualType, state === 'inRange' ? 'active' : 'inactive', isCategory\n                );\n            });\n        }, this);\n\n        function has(obj, state, visualType) {\n            return obj && obj[state] && (\n                zrUtil.isObject(obj[state])\n                    ? obj[state].hasOwnProperty(visualType)\n                    : obj[state] === visualType // e.g., inRange: 'symbol'\n            );\n        }\n\n        VisualMapModel.prototype.completeVisualOption.apply(this, arguments);\n    },\n\n    _resetSelected: function (newOption, isInit) {\n        var thisOption = this.option;\n        var pieceList = this._pieceList;\n\n        // Selected do not merge but all override.\n        var selected = (isInit ? thisOption : newOption).selected || {};\n        thisOption.selected = selected;\n\n        // Consider 'not specified' means true.\n        zrUtil.each(pieceList, function (piece, index) {\n            var key = this.getSelectedMapKey(piece);\n            if (!selected.hasOwnProperty(key)) {\n                selected[key] = true;\n            }\n        }, this);\n\n        if (thisOption.selectedMode === 'single') {\n            // Ensure there is only one selected.\n            var hasSel = false;\n\n            zrUtil.each(pieceList, function (piece, index) {\n                var key = this.getSelectedMapKey(piece);\n                if (selected[key]) {\n                    hasSel\n                        ? (selected[key] = false)\n                        : (hasSel = true);\n                }\n            }, this);\n        }\n        // thisOption.selectedMode === 'multiple', default: all selected.\n    },\n\n    /**\n     * @public\n     */\n    getSelectedMapKey: function (piece) {\n        return this._mode === 'categories'\n            ? piece.value + '' : piece.index + '';\n    },\n\n    /**\n     * @public\n     */\n    getPieceList: function () {\n        return this._pieceList;\n    },\n\n    /**\n     * @private\n     * @return {string}\n     */\n    _determineMode: function () {\n        var option = this.option;\n\n        return option.pieces && option.pieces.length > 0\n            ? 'pieces'\n            : this.option.categories\n            ? 'categories'\n            : 'splitNumber';\n    },\n\n    /**\n     * @public\n     * @override\n     */\n    setSelected: function (selected) {\n        this.option.selected = zrUtil.clone(selected);\n    },\n\n    /**\n     * @public\n     * @override\n     */\n    getValueState: function (value) {\n        var index = VisualMapping.findPieceIndex(value, this._pieceList);\n\n        return index != null\n            ? (this.option.selected[this.getSelectedMapKey(this._pieceList[index])]\n                ? 'inRange' : 'outOfRange'\n            )\n            : 'outOfRange';\n    },\n\n    /**\n     * @public\n     * @params {number} pieceIndex piece index in visualMapModel.getPieceList()\n     * @return {Array.<Object>} [{seriesId, dataIndex: <Array.<number>>}, ...]\n     */\n    findTargetDataIndices: function (pieceIndex) {\n        var result = [];\n\n        this.eachTargetSeries(function (seriesModel) {\n            var dataIndices = [];\n            var data = seriesModel.getData();\n\n            data.each(this.getDataDimension(data), function (value, dataIndex) {\n                // Should always base on model pieceList, because it is order sensitive.\n                var pIdx = VisualMapping.findPieceIndex(value, this._pieceList);\n                pIdx === pieceIndex && dataIndices.push(dataIndex);\n            }, this);\n\n            result.push({seriesId: seriesModel.id, dataIndex: dataIndices});\n        }, this);\n\n        return result;\n    },\n\n    /**\n     * @private\n     * @param {Object} piece piece.value or piece.interval is required.\n     * @return {number} Can be Infinity or -Infinity\n     */\n    getRepresentValue: function (piece) {\n        var representValue;\n        if (this.isCategory()) {\n            representValue = piece.value;\n        }\n        else {\n            if (piece.value != null) {\n                representValue = piece.value;\n            }\n            else {\n                var pieceInterval = piece.interval || [];\n                representValue = (pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity)\n                    ? 0\n                    : (pieceInterval[0] + pieceInterval[1]) / 2;\n            }\n        }\n        return representValue;\n    },\n\n    getVisualMeta: function (getColorVisual) {\n        // Do not support category. (category axis is ordinal, numerical)\n        if (this.isCategory()) {\n            return;\n        }\n\n        var stops = [];\n        var outerColors = [];\n        var visualMapModel = this;\n\n        function setStop(interval, valueState) {\n            var representValue = visualMapModel.getRepresentValue({interval: interval});\n            if (!valueState) {\n                valueState = visualMapModel.getValueState(representValue);\n            }\n            var color = getColorVisual(representValue, valueState);\n            if (interval[0] === -Infinity) {\n                outerColors[0] = color;\n            }\n            else if (interval[1] === Infinity) {\n                outerColors[1] = color;\n            }\n            else {\n                stops.push(\n                    {value: interval[0], color: color},\n                    {value: interval[1], color: color}\n                );\n            }\n        }\n\n        // Suplement\n        var pieceList = this._pieceList.slice();\n        if (!pieceList.length) {\n            pieceList.push({interval: [-Infinity, Infinity]});\n        }\n        else {\n            var edge = pieceList[0].interval[0];\n            edge !== -Infinity && pieceList.unshift({interval: [-Infinity, edge]});\n            edge = pieceList[pieceList.length - 1].interval[1];\n            edge !== Infinity && pieceList.push({interval: [edge, Infinity]});\n        }\n\n        var curr = -Infinity;\n        zrUtil.each(pieceList, function (piece) {\n            var interval = piece.interval;\n            if (interval) {\n                // Fulfill gap.\n                interval[0] > curr && setStop([curr, interval[0]], 'outOfRange');\n                setStop(interval.slice());\n                curr = interval[1];\n            }\n        }, this);\n\n        return {stops: stops, outerColors: outerColors};\n    }\n\n});\n\n/**\n * Key is this._mode\n * @type {Object}\n * @this {module:echarts/component/viusalMap/PiecewiseMode}\n */\nvar resetMethods = {\n\n    splitNumber: function () {\n        var thisOption = this.option;\n        var pieceList = this._pieceList;\n        var precision = Math.min(thisOption.precision, 20);\n        var dataExtent = this.getExtent();\n        var splitNumber = thisOption.splitNumber;\n        splitNumber = Math.max(parseInt(splitNumber, 10), 1);\n        thisOption.splitNumber = splitNumber;\n\n        var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber;\n        // Precision auto-adaption\n        while (+splitStep.toFixed(precision) !== splitStep && precision < 5) {\n            precision++;\n        }\n        thisOption.precision = precision;\n        splitStep = +splitStep.toFixed(precision);\n\n        var index = 0;\n\n        if (thisOption.minOpen) {\n            pieceList.push({\n                index: index++,\n                interval: [-Infinity, dataExtent[0]],\n                close: [0, 0]\n            });\n        }\n\n        for (\n            var curr = dataExtent[0], len = index + splitNumber;\n            index < len;\n            curr += splitStep\n        ) {\n            var max = index === splitNumber - 1 ? dataExtent[1] : (curr + splitStep);\n\n            pieceList.push({\n                index: index++,\n                interval: [curr, max],\n                close: [1, 1]\n            });\n        }\n\n        if (thisOption.maxOpen) {\n            pieceList.push({\n                index: index++,\n                interval: [dataExtent[1], Infinity],\n                close: [0, 0]\n            });\n        }\n\n        reformIntervals(pieceList);\n\n        zrUtil.each(pieceList, function (piece) {\n            piece.text = this.formatValueText(piece.interval);\n        }, this);\n    },\n\n    categories: function () {\n        var thisOption = this.option;\n        zrUtil.each(thisOption.categories, function (cate) {\n            // FIXME category模式也使用pieceList，但在visualMapping中不是使用pieceList。\n            // 是否改一致。\n            this._pieceList.push({\n                text: this.formatValueText(cate, true),\n                value: cate\n            });\n        }, this);\n\n        // See \"Order Rule\".\n        normalizeReverse(thisOption, this._pieceList);\n    },\n\n    pieces: function () {\n        var thisOption = this.option;\n        var pieceList = this._pieceList;\n\n        zrUtil.each(thisOption.pieces, function (pieceListItem, index) {\n\n            if (!zrUtil.isObject(pieceListItem)) {\n                pieceListItem = {value: pieceListItem};\n            }\n\n            var item = {text: '', index: index};\n\n            if (pieceListItem.label != null) {\n                item.text = pieceListItem.label;\n            }\n\n            if (pieceListItem.hasOwnProperty('value')) {\n                var value = item.value = pieceListItem.value;\n                item.interval = [value, value];\n                item.close = [1, 1];\n            }\n            else {\n                // `min` `max` is legacy option.\n                // `lt` `gt` `lte` `gte` is recommanded.\n                var interval = item.interval = [];\n                var close = item.close = [0, 0];\n\n                var closeList = [1, 0, 1];\n                var infinityList = [-Infinity, Infinity];\n\n                var useMinMax = [];\n                for (var lg = 0; lg < 2; lg++) {\n                    var names = [['gte', 'gt', 'min'], ['lte', 'lt', 'max']][lg];\n                    for (var i = 0; i < 3 && interval[lg] == null; i++) {\n                        interval[lg] = pieceListItem[names[i]];\n                        close[lg] = closeList[i];\n                        useMinMax[lg] = i === 2;\n                    }\n                    interval[lg] == null && (interval[lg] = infinityList[lg]);\n                }\n                useMinMax[0] && interval[1] === Infinity && (close[0] = 0);\n                useMinMax[1] && interval[0] === -Infinity && (close[1] = 0);\n\n                if (__DEV__) {\n                    if (interval[0] > interval[1]) {\n                        console.warn(\n                            'Piece ' + index + 'is illegal: ' + interval\n                            + ' lower bound should not greater then uppper bound.'\n                        );\n                    }\n                }\n\n                if (interval[0] === interval[1] && close[0] && close[1]) {\n                    // Consider: [{min: 5, max: 5, visual: {...}}, {min: 0, max: 5}],\n                    // we use value to lift the priority when min === max\n                    item.value = interval[0];\n                }\n            }\n\n            item.visual = VisualMapping.retrieveVisuals(pieceListItem);\n\n            pieceList.push(item);\n\n        }, this);\n\n        // See \"Order Rule\".\n        normalizeReverse(thisOption, pieceList);\n        // Only pieces\n        reformIntervals(pieceList);\n\n        zrUtil.each(pieceList, function (piece) {\n            var close = piece.close;\n            var edgeSymbols = [['<', '≤'][close[1]], ['>', '≥'][close[0]]];\n            piece.text = piece.text || this.formatValueText(\n                piece.value != null ? piece.value : piece.interval,\n                false,\n                edgeSymbols\n            );\n        }, this);\n    }\n};\n\nfunction normalizeReverse(thisOption, pieceList) {\n    var inverse = thisOption.inverse;\n    if (thisOption.orient === 'vertical' ? !inverse : inverse) {\n            pieceList.reverse();\n    }\n}\n\nexport default PiecewiseModel;","/*\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\nimport * as zrUtil from 'zrender/src/core/util';\nimport VisualMapView from './VisualMapView';\nimport * as graphic from '../../util/graphic';\nimport {createSymbol} from '../../util/symbol';\nimport * as layout from '../../util/layout';\nimport * as helper from './helper';\n\nvar PiecewiseVisualMapView = VisualMapView.extend({\n\n    type: 'visualMap.piecewise',\n\n    /**\n     * @protected\n     * @override\n     */\n    doRender: function () {\n        var thisGroup = this.group;\n\n        thisGroup.removeAll();\n\n        var visualMapModel = this.visualMapModel;\n        var textGap = visualMapModel.get('textGap');\n        var textStyleModel = visualMapModel.textStyleModel;\n        var textFont = textStyleModel.getFont();\n        var textFill = textStyleModel.getTextColor();\n        var itemAlign = this._getItemAlign();\n        var itemSize = visualMapModel.itemSize;\n        var viewData = this._getViewData();\n        var endsText = viewData.endsText;\n        var showLabel = zrUtil.retrieve(visualMapModel.get('showLabel', true), !endsText);\n\n        endsText && this._renderEndsText(\n            thisGroup, endsText[0], itemSize, showLabel, itemAlign\n        );\n\n        zrUtil.each(viewData.viewPieceList, renderItem, this);\n\n        endsText && this._renderEndsText(\n            thisGroup, endsText[1], itemSize, showLabel, itemAlign\n        );\n\n        layout.box(\n            visualMapModel.get('orient'), thisGroup, visualMapModel.get('itemGap')\n        );\n\n        this.renderBackground(thisGroup);\n\n        this.positionGroup(thisGroup);\n\n        function renderItem(item) {\n            var piece = item.piece;\n\n            var itemGroup = new graphic.Group();\n            itemGroup.onclick = zrUtil.bind(this._onItemClick, this, piece);\n\n            this._enableHoverLink(itemGroup, item.indexInModelPieceList);\n\n            var representValue = visualMapModel.getRepresentValue(piece);\n\n            this._createItemSymbol(\n                itemGroup, representValue, [0, 0, itemSize[0], itemSize[1]]\n            );\n\n            if (showLabel) {\n                var visualState = this.visualMapModel.getValueState(representValue);\n\n                itemGroup.add(new graphic.Text({\n                    style: {\n                        x: itemAlign === 'right' ? -textGap : itemSize[0] + textGap,\n                        y: itemSize[1] / 2,\n                        text: piece.text,\n                        textVerticalAlign: 'middle',\n                        textAlign: itemAlign,\n                        textFont: textFont,\n                        textFill: textFill,\n                        opacity: visualState === 'outOfRange' ? 0.5 : 1\n                    }\n                }));\n            }\n\n            thisGroup.add(itemGroup);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _enableHoverLink: function (itemGroup, pieceIndex) {\n        itemGroup\n            .on('mouseover', zrUtil.bind(onHoverLink, this, 'highlight'))\n            .on('mouseout', zrUtil.bind(onHoverLink, this, 'downplay'));\n\n        function onHoverLink(method) {\n            var visualMapModel = this.visualMapModel;\n\n            visualMapModel.option.hoverLink && this.api.dispatchAction({\n                type: method,\n                batch: helper.makeHighDownBatch(\n                    visualMapModel.findTargetDataIndices(pieceIndex),\n                    visualMapModel\n                )\n            });\n        }\n    },\n\n    /**\n     * @private\n     */\n    _getItemAlign: function () {\n        var visualMapModel = this.visualMapModel;\n        var modelOption = visualMapModel.option;\n\n        if (modelOption.orient === 'vertical') {\n            return helper.getItemAlign(\n                visualMapModel, this.api, visualMapModel.itemSize\n            );\n        }\n        else { // horizontal, most case left unless specifying right.\n            var align = modelOption.align;\n            if (!align || align === 'auto') {\n                align = 'left';\n            }\n            return align;\n        }\n    },\n\n    /**\n     * @private\n     */\n    _renderEndsText: function (group, text, itemSize, showLabel, itemAlign) {\n        if (!text) {\n            return;\n        }\n\n        var itemGroup = new graphic.Group();\n        var textStyleModel = this.visualMapModel.textStyleModel;\n\n        itemGroup.add(new graphic.Text({\n            style: {\n                x: showLabel ? (itemAlign === 'right' ? itemSize[0] : 0) : itemSize[0] / 2,\n                y: itemSize[1] / 2,\n                textVerticalAlign: 'middle',\n                textAlign: showLabel ? itemAlign : 'center',\n                text: text,\n                textFont: textStyleModel.getFont(),\n                textFill: textStyleModel.getTextColor()\n            }\n        }));\n\n        group.add(itemGroup);\n    },\n\n    /**\n     * @private\n     * @return {Object} {peiceList, endsText} The order is the same as screen pixel order.\n     */\n    _getViewData: function () {\n        var visualMapModel = this.visualMapModel;\n\n        var viewPieceList = zrUtil.map(visualMapModel.getPieceList(), function (piece, index) {\n            return {piece: piece, indexInModelPieceList: index};\n        });\n        var endsText = visualMapModel.get('text');\n\n        // Consider orient and inverse.\n        var orient = visualMapModel.get('orient');\n        var inverse = visualMapModel.get('inverse');\n\n        // Order of model pieceList is always [low, ..., high]\n        if (orient === 'horizontal' ? inverse : !inverse) {\n            viewPieceList.reverse();\n        }\n        // Origin order of endsText is [high, low]\n        else if (endsText) {\n            endsText = endsText.slice().reverse();\n        }\n\n        return {viewPieceList: viewPieceList, endsText: endsText};\n    },\n\n    /**\n     * @private\n     */\n    _createItemSymbol: function (group, representValue, shapeParam) {\n        group.add(createSymbol(\n            this.getControllerVisual(representValue, 'symbol'),\n            shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3],\n            this.getControllerVisual(representValue, 'color')\n        ));\n    },\n\n    /**\n     * @private\n     */\n    _onItemClick: function (piece) {\n        var visualMapModel = this.visualMapModel;\n        var option = visualMapModel.option;\n        var selected = zrUtil.clone(option.selected);\n        var newKey = visualMapModel.getSelectedMapKey(piece);\n\n        if (option.selectedMode === 'single') {\n            selected[newKey] = true;\n            zrUtil.each(selected, function (o, key) {\n                selected[key] = key === newKey;\n            });\n        }\n        else {\n            selected[newKey] = !selected[newKey];\n        }\n\n        this.api.dispatchAction({\n            type: 'selectDataRange',\n            from: this.uid,\n            visualMapId: this.visualMapModel.id,\n            selected: selected\n        });\n    }\n});\n\nexport default PiecewiseVisualMapView;","/*\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 * DataZoom component entry\n */\n\nimport * as echarts from '../echarts';\nimport preprocessor from './visualMap/preprocessor';\n\nimport './visualMap/typeDefaulter';\nimport './visualMap/visualEncoding';\nimport './visualMap/PiecewiseModel';\nimport './visualMap/PiecewiseView';\nimport './visualMap/visualMapAction';\n\necharts.registerPreprocessor(preprocessor);\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 * visualMap component entry\n */\n\nimport './visualMapContinuous';\nimport './visualMapPiecewise';\n","import env from '../core/env';\n\n\nvar urn = 'urn:schemas-microsoft-com:vml';\nvar win = typeof window === 'undefined' ? null : window;\n\nvar vmlInited = false;\n\nexport var doc = win && win.document;\n\nexport function createNode(tagName) {\n    return doCreateNode(tagName);\n}\n\n// Avoid assign to an exported variable, for transforming to cjs.\nvar doCreateNode;\n\nif (doc && !env.canvasSupported) {\n    try {\n        !doc.namespaces.zrvml && doc.namespaces.add('zrvml', urn);\n        doCreateNode = function (tagName) {\n            return doc.createElement('<zrvml:' + tagName + ' class=\"zrvml\">');\n        };\n    }\n    catch (e) {\n        doCreateNode = function (tagName) {\n            return doc.createElement('<' + tagName + ' xmlns=\"' + urn + '\" class=\"zrvml\">');\n        };\n    }\n}\n\n// From raphael\nexport function initVML() {\n    if (vmlInited || !doc) {\n        return;\n    }\n    vmlInited = true;\n\n    var styleSheets = doc.styleSheets;\n    if (styleSheets.length < 31) {\n        doc.createStyleSheet().addRule('.zrvml', 'behavior:url(#default#VML)');\n    }\n    else {\n        // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx\n        styleSheets[0].addRule('.zrvml', 'behavior:url(#default#VML)');\n    }\n}\n","// http://www.w3.org/TR/NOTE-VML\n// TODO Use proxy like svg instead of overwrite brush methods\n\nimport env from '../core/env';\nimport {applyTransform} from '../core/vector';\nimport BoundingRect from '../core/BoundingRect';\nimport * as colorTool from '../tool/color';\nimport * as textContain from '../contain/text';\nimport * as textHelper from '../graphic/helper/text';\nimport RectText from '../graphic/mixin/RectText';\nimport Displayable from '../graphic/Displayable';\nimport ZImage from '../graphic/Image';\nimport Text from '../graphic/Text';\nimport Path from '../graphic/Path';\nimport PathProxy from '../core/PathProxy';\nimport Gradient from '../graphic/Gradient';\nimport * as vmlCore from './core';\n\nvar CMD = PathProxy.CMD;\nvar round = Math.round;\nvar sqrt = Math.sqrt;\nvar abs = Math.abs;\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar mathMax = Math.max;\n\nif (!env.canvasSupported) {\n\n    var comma = ',';\n    var imageTransformPrefix = 'progid:DXImageTransform.Microsoft';\n\n    var Z = 21600;\n    var Z2 = Z / 2;\n\n    var ZLEVEL_BASE = 100000;\n    var Z_BASE = 1000;\n\n    var initRootElStyle = function (el) {\n        el.style.cssText = 'position:absolute;left:0;top:0;width:1px;height:1px;';\n        el.coordsize = Z + ',' + Z;\n        el.coordorigin = '0,0';\n    };\n\n    var encodeHtmlAttribute = function (s) {\n        return String(s).replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n    };\n\n    var rgb2Str = function (r, g, b) {\n        return 'rgb(' + [r, g, b].join(',') + ')';\n    };\n\n    var append = function (parent, child) {\n        if (child && parent && child.parentNode !== parent) {\n            parent.appendChild(child);\n        }\n    };\n\n    var remove = function (parent, child) {\n        if (child && parent && child.parentNode === parent) {\n            parent.removeChild(child);\n        }\n    };\n\n    var getZIndex = function (zlevel, z, z2) {\n        // z 的取值范围为 [0, 1000]\n        return (parseFloat(zlevel) || 0) * ZLEVEL_BASE + (parseFloat(z) || 0) * Z_BASE + z2;\n    };\n\n    var parsePercent = textHelper.parsePercent;\n\n    /***************************************************\n     * PATH\n     **************************************************/\n\n    var setColorAndOpacity = function (el, color, opacity) {\n        var colorArr = colorTool.parse(color);\n        opacity = +opacity;\n        if (isNaN(opacity)) {\n            opacity = 1;\n        }\n        if (colorArr) {\n            el.color = rgb2Str(colorArr[0], colorArr[1], colorArr[2]);\n            el.opacity = opacity * colorArr[3];\n        }\n    };\n\n    var getColorAndAlpha = function (color) {\n        var colorArr = colorTool.parse(color);\n        return [\n            rgb2Str(colorArr[0], colorArr[1], colorArr[2]),\n            colorArr[3]\n        ];\n    };\n\n    var updateFillNode = function (el, style, zrEl) {\n        // TODO pattern\n        var fill = style.fill;\n        if (fill != null) {\n            // Modified from excanvas\n            if (fill instanceof Gradient) {\n                var gradientType;\n                var angle = 0;\n                var focus = [0, 0];\n                // additional offset\n                var shift = 0;\n                // scale factor for offset\n                var expansion = 1;\n                var rect = zrEl.getBoundingRect();\n                var rectWidth = rect.width;\n                var rectHeight = rect.height;\n                if (fill.type === 'linear') {\n                    gradientType = 'gradient';\n                    var transform = zrEl.transform;\n                    var p0 = [fill.x * rectWidth, fill.y * rectHeight];\n                    var p1 = [fill.x2 * rectWidth, fill.y2 * rectHeight];\n                    if (transform) {\n                        applyTransform(p0, p0, transform);\n                        applyTransform(p1, p1, transform);\n                    }\n                    var dx = p1[0] - p0[0];\n                    var dy = p1[1] - p0[1];\n                    angle = Math.atan2(dx, dy) * 180 / Math.PI;\n                    // The angle should be a non-negative number.\n                    if (angle < 0) {\n                        angle += 360;\n                    }\n\n                    // Very small angles produce an unexpected result because they are\n                    // converted to a scientific notation string.\n                    if (angle < 1e-6) {\n                        angle = 0;\n                    }\n                }\n                else {\n                    gradientType = 'gradientradial';\n                    var p0 = [fill.x * rectWidth, fill.y * rectHeight];\n                    var transform = zrEl.transform;\n                    var scale = zrEl.scale;\n                    var width = rectWidth;\n                    var height = rectHeight;\n                    focus = [\n                        // Percent in bounding rect\n                        (p0[0] - rect.x) / width,\n                        (p0[1] - rect.y) / height\n                    ];\n                    if (transform) {\n                        applyTransform(p0, p0, transform);\n                    }\n\n                    width /= scale[0] * Z;\n                    height /= scale[1] * Z;\n                    var dimension = mathMax(width, height);\n                    shift = 2 * 0 / dimension;\n                    expansion = 2 * fill.r / dimension - shift;\n                }\n\n                // We need to sort the color stops in ascending order by offset,\n                // otherwise IE won't interpret it correctly.\n                var stops = fill.colorStops.slice();\n                stops.sort(function (cs1, cs2) {\n                    return cs1.offset - cs2.offset;\n                });\n\n                var length = stops.length;\n                // Color and alpha list of first and last stop\n                var colorAndAlphaList = [];\n                var colors = [];\n                for (var i = 0; i < length; i++) {\n                    var stop = stops[i];\n                    var colorAndAlpha = getColorAndAlpha(stop.color);\n                    colors.push(stop.offset * expansion + shift + ' ' + colorAndAlpha[0]);\n                    if (i === 0 || i === length - 1) {\n                        colorAndAlphaList.push(colorAndAlpha);\n                    }\n                }\n\n                if (length >= 2) {\n                    var color1 = colorAndAlphaList[0][0];\n                    var color2 = colorAndAlphaList[1][0];\n                    var opacity1 = colorAndAlphaList[0][1] * style.opacity;\n                    var opacity2 = colorAndAlphaList[1][1] * style.opacity;\n\n                    el.type = gradientType;\n                    el.method = 'none';\n                    el.focus = '100%';\n                    el.angle = angle;\n                    el.color = color1;\n                    el.color2 = color2;\n                    el.colors = colors.join(',');\n                    // When colors attribute is used, the meanings of opacity and o:opacity2\n                    // are reversed.\n                    el.opacity = opacity2;\n                    // FIXME g_o_:opacity ?\n                    el.opacity2 = opacity1;\n                }\n                if (gradientType === 'radial') {\n                    el.focusposition = focus.join(',');\n                }\n            }\n            else {\n                // FIXME Change from Gradient fill to color fill\n                setColorAndOpacity(el, fill, style.opacity);\n            }\n        }\n    };\n\n    var updateStrokeNode = function (el, style) {\n        // if (style.lineJoin != null) {\n        //     el.joinstyle = style.lineJoin;\n        // }\n        // if (style.miterLimit != null) {\n        //     el.miterlimit = style.miterLimit * Z;\n        // }\n        // if (style.lineCap != null) {\n        //     el.endcap = style.lineCap;\n        // }\n        if (style.lineDash) {\n            el.dashstyle = style.lineDash.join(' ');\n        }\n        if (style.stroke != null && !(style.stroke instanceof Gradient)) {\n            setColorAndOpacity(el, style.stroke, style.opacity);\n        }\n    };\n\n    var updateFillAndStroke = function (vmlEl, type, style, zrEl) {\n        var isFill = type === 'fill';\n        var el = vmlEl.getElementsByTagName(type)[0];\n        // Stroke must have lineWidth\n        if (style[type] != null && style[type] !== 'none' && (isFill || (!isFill && style.lineWidth))) {\n            vmlEl[isFill ? 'filled' : 'stroked'] = 'true';\n            // FIXME Remove before updating, or set `colors` will throw error\n            if (style[type] instanceof Gradient) {\n                remove(vmlEl, el);\n            }\n            if (!el) {\n                el = vmlCore.createNode(type);\n            }\n\n            isFill ? updateFillNode(el, style, zrEl) : updateStrokeNode(el, style);\n            append(vmlEl, el);\n        }\n        else {\n            vmlEl[isFill ? 'filled' : 'stroked'] = 'false';\n            remove(vmlEl, el);\n        }\n    };\n\n    var points = [[], [], []];\n    var pathDataToString = function (path, m) {\n        var M = CMD.M;\n        var C = CMD.C;\n        var L = CMD.L;\n        var A = CMD.A;\n        var Q = CMD.Q;\n\n        var str = [];\n        var nPoint;\n        var cmdStr;\n        var cmd;\n        var i;\n        var xi;\n        var yi;\n        var data = path.data;\n        var dataLength = path.len();\n        for (i = 0; i < dataLength;) {\n            cmd = data[i++];\n            cmdStr = '';\n            nPoint = 0;\n            switch (cmd) {\n                case M:\n                    cmdStr = ' m ';\n                    nPoint = 1;\n                    xi = data[i++];\n                    yi = data[i++];\n                    points[0][0] = xi;\n                    points[0][1] = yi;\n                    break;\n                case L:\n                    cmdStr = ' l ';\n                    nPoint = 1;\n                    xi = data[i++];\n                    yi = data[i++];\n                    points[0][0] = xi;\n                    points[0][1] = yi;\n                    break;\n                case Q:\n                case C:\n                    cmdStr = ' c ';\n                    nPoint = 3;\n                    var x1 = data[i++];\n                    var y1 = data[i++];\n                    var x2 = data[i++];\n                    var y2 = data[i++];\n                    var x3;\n                    var y3;\n                    if (cmd === Q) {\n                        // Convert quadratic to cubic using degree elevation\n                        x3 = x2;\n                        y3 = y2;\n                        x2 = (x2 + 2 * x1) / 3;\n                        y2 = (y2 + 2 * y1) / 3;\n                        x1 = (xi + 2 * x1) / 3;\n                        y1 = (yi + 2 * y1) / 3;\n                    }\n                    else {\n                        x3 = data[i++];\n                        y3 = data[i++];\n                    }\n                    points[0][0] = x1;\n                    points[0][1] = y1;\n                    points[1][0] = x2;\n                    points[1][1] = y2;\n                    points[2][0] = x3;\n                    points[2][1] = y3;\n\n                    xi = x3;\n                    yi = y3;\n                    break;\n                case A:\n                    var x = 0;\n                    var y = 0;\n                    var sx = 1;\n                    var sy = 1;\n                    var angle = 0;\n                    if (m) {\n                        // Extract SRT from matrix\n                        x = m[4];\n                        y = m[5];\n                        sx = sqrt(m[0] * m[0] + m[1] * m[1]);\n                        sy = sqrt(m[2] * m[2] + m[3] * m[3]);\n                        angle = Math.atan2(-m[1] / sy, m[0] / sx);\n                    }\n\n                    var cx = data[i++];\n                    var cy = data[i++];\n                    var rx = data[i++];\n                    var ry = data[i++];\n                    var startAngle = data[i++] + angle;\n                    var endAngle = data[i++] + startAngle + angle;\n                    // FIXME\n                    // var psi = data[i++];\n                    i++;\n                    var clockwise = data[i++];\n\n                    var x0 = cx + cos(startAngle) * rx;\n                    var y0 = cy + sin(startAngle) * ry;\n\n                    var x1 = cx + cos(endAngle) * rx;\n                    var y1 = cy + sin(endAngle) * ry;\n\n                    var type = clockwise ? ' wa ' : ' at ';\n                    if (Math.abs(x0 - x1) < 1e-4) {\n                        // IE won't render arches drawn counter clockwise if x0 == x1.\n                        if (Math.abs(endAngle - startAngle) > 1e-2) {\n                            // Offset x0 by 1/80 of a pixel. Use something\n                            // that can be represented in binary\n                            if (clockwise) {\n                                x0 += 270 / Z;\n                            }\n                        }\n                        else {\n                            // Avoid case draw full circle\n                            if (Math.abs(y0 - cy) < 1e-4) {\n                                if ((clockwise && x0 < cx) || (!clockwise && x0 > cx)) {\n                                    y1 -= 270 / Z;\n                                }\n                                else {\n                                    y1 += 270 / Z;\n                                }\n                            }\n                            else if ((clockwise && y0 < cy) || (!clockwise && y0 > cy)) {\n                                x1 += 270 / Z;\n                            }\n                            else {\n                                x1 -= 270 / Z;\n                            }\n                        }\n                    }\n                    str.push(\n                        type,\n                        round(((cx - rx) * sx + x) * Z - Z2), comma,\n                        round(((cy - ry) * sy + y) * Z - Z2), comma,\n                        round(((cx + rx) * sx + x) * Z - Z2), comma,\n                        round(((cy + ry) * sy + y) * Z - Z2), comma,\n                        round((x0 * sx + x) * Z - Z2), comma,\n                        round((y0 * sy + y) * Z - Z2), comma,\n                        round((x1 * sx + x) * Z - Z2), comma,\n                        round((y1 * sy + y) * Z - Z2)\n                    );\n\n                    xi = x1;\n                    yi = y1;\n                    break;\n                case CMD.R:\n                    var p0 = points[0];\n                    var p1 = points[1];\n                    // x0, y0\n                    p0[0] = data[i++];\n                    p0[1] = data[i++];\n                    // x1, y1\n                    p1[0] = p0[0] + data[i++];\n                    p1[1] = p0[1] + data[i++];\n\n                    if (m) {\n                        applyTransform(p0, p0, m);\n                        applyTransform(p1, p1, m);\n                    }\n\n                    p0[0] = round(p0[0] * Z - Z2);\n                    p1[0] = round(p1[0] * Z - Z2);\n                    p0[1] = round(p0[1] * Z - Z2);\n                    p1[1] = round(p1[1] * Z - Z2);\n                    str.push(\n                        // x0, y0\n                        ' m ', p0[0], comma, p0[1],\n                        // x1, y0\n                        ' l ', p1[0], comma, p0[1],\n                        // x1, y1\n                        ' l ', p1[0], comma, p1[1],\n                        // x0, y1\n                        ' l ', p0[0], comma, p1[1]\n                    );\n                    break;\n                case CMD.Z:\n                    // FIXME Update xi, yi\n                    str.push(' x ');\n            }\n\n            if (nPoint > 0) {\n                str.push(cmdStr);\n                for (var k = 0; k < nPoint; k++) {\n                    var p = points[k];\n\n                    m && applyTransform(p, p, m);\n                    // 不 round 会非常慢\n                    str.push(\n                        round(p[0] * Z - Z2), comma, round(p[1] * Z - Z2),\n                        k < nPoint - 1 ? comma : ''\n                    );\n                }\n            }\n        }\n\n        return str.join('');\n    };\n\n    // Rewrite the original path method\n    Path.prototype.brushVML = function (vmlRoot) {\n        var style = this.style;\n\n        var vmlEl = this._vmlEl;\n        if (!vmlEl) {\n            vmlEl = vmlCore.createNode('shape');\n            initRootElStyle(vmlEl);\n\n            this._vmlEl = vmlEl;\n        }\n\n        updateFillAndStroke(vmlEl, 'fill', style, this);\n        updateFillAndStroke(vmlEl, 'stroke', style, this);\n\n        var m = this.transform;\n        var needTransform = m != null;\n        var strokeEl = vmlEl.getElementsByTagName('stroke')[0];\n        if (strokeEl) {\n            var lineWidth = style.lineWidth;\n            // Get the line scale.\n            // Determinant of this.m_ means how much the area is enlarged by the\n            // transformation. So its square root can be used as a scale factor\n            // for width.\n            if (needTransform && !style.strokeNoScale) {\n                var det = m[0] * m[3] - m[1] * m[2];\n                lineWidth *= sqrt(abs(det));\n            }\n            strokeEl.weight = lineWidth + 'px';\n        }\n\n        var path = this.path || (this.path = new PathProxy());\n        if (this.__dirtyPath) {\n            path.beginPath();\n            path.subPixelOptimize = false;\n            this.buildPath(path, this.shape);\n            path.toStatic();\n            this.__dirtyPath = false;\n        }\n\n        vmlEl.path = pathDataToString(path, this.transform);\n\n        vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);\n\n        // Append to root\n        append(vmlRoot, vmlEl);\n\n        // Text\n        if (style.text != null) {\n            this.drawRectText(vmlRoot, this.getBoundingRect());\n        }\n        else {\n            this.removeRectText(vmlRoot);\n        }\n    };\n\n    Path.prototype.onRemove = function (vmlRoot) {\n        remove(vmlRoot, this._vmlEl);\n        this.removeRectText(vmlRoot);\n    };\n\n    Path.prototype.onAdd = function (vmlRoot) {\n        append(vmlRoot, this._vmlEl);\n        this.appendRectText(vmlRoot);\n    };\n\n    /***************************************************\n     * IMAGE\n     **************************************************/\n    var isImage = function (img) {\n        // FIXME img instanceof Image 如果 img 是一个字符串的时候，IE8 下会报错\n        return (typeof img === 'object') && img.tagName && img.tagName.toUpperCase() === 'IMG';\n        // return img instanceof Image;\n    };\n\n    // Rewrite the original path method\n    ZImage.prototype.brushVML = function (vmlRoot) {\n        var style = this.style;\n        var image = style.image;\n\n        // Image original width, height\n        var ow;\n        var oh;\n\n        if (isImage(image)) {\n            var src = image.src;\n            if (src === this._imageSrc) {\n                ow = this._imageWidth;\n                oh = this._imageHeight;\n            }\n            else {\n                var imageRuntimeStyle = image.runtimeStyle;\n                var oldRuntimeWidth = imageRuntimeStyle.width;\n                var oldRuntimeHeight = imageRuntimeStyle.height;\n                imageRuntimeStyle.width = 'auto';\n                imageRuntimeStyle.height = 'auto';\n\n                // get the original size\n                ow = image.width;\n                oh = image.height;\n\n                // and remove overides\n                imageRuntimeStyle.width = oldRuntimeWidth;\n                imageRuntimeStyle.height = oldRuntimeHeight;\n\n                // Caching image original width, height and src\n                this._imageSrc = src;\n                this._imageWidth = ow;\n                this._imageHeight = oh;\n            }\n            image = src;\n        }\n        else {\n            if (image === this._imageSrc) {\n                ow = this._imageWidth;\n                oh = this._imageHeight;\n            }\n        }\n        if (!image) {\n            return;\n        }\n\n        var x = style.x || 0;\n        var y = style.y || 0;\n\n        var dw = style.width;\n        var dh = style.height;\n\n        var sw = style.sWidth;\n        var sh = style.sHeight;\n        var sx = style.sx || 0;\n        var sy = style.sy || 0;\n\n        var hasCrop = sw && sh;\n\n        var vmlEl = this._vmlEl;\n        if (!vmlEl) {\n            // FIXME 使用 group 在 left, top 都不是 0 的时候就无法显示了。\n            // vmlEl = vmlCore.createNode('group');\n            vmlEl = vmlCore.doc.createElement('div');\n            initRootElStyle(vmlEl);\n\n            this._vmlEl = vmlEl;\n        }\n\n        var vmlElStyle = vmlEl.style;\n        var hasRotation = false;\n        var m;\n        var scaleX = 1;\n        var scaleY = 1;\n        if (this.transform) {\n            m = this.transform;\n            scaleX = sqrt(m[0] * m[0] + m[1] * m[1]);\n            scaleY = sqrt(m[2] * m[2] + m[3] * m[3]);\n\n            hasRotation = m[1] || m[2];\n        }\n        if (hasRotation) {\n            // If filters are necessary (rotation exists), create them\n            // filters are bog-slow, so only create them if abbsolutely necessary\n            // The following check doesn't account for skews (which don't exist\n            // in the canvas spec (yet) anyway.\n            // From excanvas\n            var p0 = [x, y];\n            var p1 = [x + dw, y];\n            var p2 = [x, y + dh];\n            var p3 = [x + dw, y + dh];\n            applyTransform(p0, p0, m);\n            applyTransform(p1, p1, m);\n            applyTransform(p2, p2, m);\n            applyTransform(p3, p3, m);\n\n            var maxX = mathMax(p0[0], p1[0], p2[0], p3[0]);\n            var maxY = mathMax(p0[1], p1[1], p2[1], p3[1]);\n\n            var transformFilter = [];\n            transformFilter.push('M11=', m[0] / scaleX, comma,\n                        'M12=', m[2] / scaleY, comma,\n                        'M21=', m[1] / scaleX, comma,\n                        'M22=', m[3] / scaleY, comma,\n                        'Dx=', round(x * scaleX + m[4]), comma,\n                        'Dy=', round(y * scaleY + m[5]));\n\n            vmlElStyle.padding = '0 ' + round(maxX) + 'px ' + round(maxY) + 'px 0';\n            // FIXME DXImageTransform 在 IE11 的兼容模式下不起作用\n            vmlElStyle.filter = imageTransformPrefix + '.Matrix('\n                + transformFilter.join('') + ', SizingMethod=clip)';\n\n        }\n        else {\n            if (m) {\n                x = x * scaleX + m[4];\n                y = y * scaleY + m[5];\n            }\n            vmlElStyle.filter = '';\n            vmlElStyle.left = round(x) + 'px';\n            vmlElStyle.top = round(y) + 'px';\n        }\n\n        var imageEl = this._imageEl;\n        var cropEl = this._cropEl;\n\n        if (!imageEl) {\n            imageEl = vmlCore.doc.createElement('div');\n            this._imageEl = imageEl;\n        }\n        var imageELStyle = imageEl.style;\n        if (hasCrop) {\n            // Needs know image original width and height\n            if (!(ow && oh)) {\n                var tmpImage = new Image();\n                var self = this;\n                tmpImage.onload = function () {\n                    tmpImage.onload = null;\n                    ow = tmpImage.width;\n                    oh = tmpImage.height;\n                    // Adjust image width and height to fit the ratio destinationSize / sourceSize\n                    imageELStyle.width = round(scaleX * ow * dw / sw) + 'px';\n                    imageELStyle.height = round(scaleY * oh * dh / sh) + 'px';\n\n                    // Caching image original width, height and src\n                    self._imageWidth = ow;\n                    self._imageHeight = oh;\n                    self._imageSrc = image;\n                };\n                tmpImage.src = image;\n            }\n            else {\n                imageELStyle.width = round(scaleX * ow * dw / sw) + 'px';\n                imageELStyle.height = round(scaleY * oh * dh / sh) + 'px';\n            }\n\n            if (!cropEl) {\n                cropEl = vmlCore.doc.createElement('div');\n                cropEl.style.overflow = 'hidden';\n                this._cropEl = cropEl;\n            }\n            var cropElStyle = cropEl.style;\n            cropElStyle.width = round((dw + sx * dw / sw) * scaleX);\n            cropElStyle.height = round((dh + sy * dh / sh) * scaleY);\n            cropElStyle.filter = imageTransformPrefix + '.Matrix(Dx='\n                    + (-sx * dw / sw * scaleX) + ',Dy=' + (-sy * dh / sh * scaleY) + ')';\n\n            if (!cropEl.parentNode) {\n                vmlEl.appendChild(cropEl);\n            }\n            if (imageEl.parentNode !== cropEl) {\n                cropEl.appendChild(imageEl);\n            }\n        }\n        else {\n            imageELStyle.width = round(scaleX * dw) + 'px';\n            imageELStyle.height = round(scaleY * dh) + 'px';\n\n            vmlEl.appendChild(imageEl);\n\n            if (cropEl && cropEl.parentNode) {\n                vmlEl.removeChild(cropEl);\n                this._cropEl = null;\n            }\n        }\n\n        var filterStr = '';\n        var alpha = style.opacity;\n        if (alpha < 1) {\n            filterStr += '.Alpha(opacity=' + round(alpha * 100) + ') ';\n        }\n        filterStr += imageTransformPrefix + '.AlphaImageLoader(src=' + image + ', SizingMethod=scale)';\n\n        imageELStyle.filter = filterStr;\n\n        vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);\n\n        // Append to root\n        append(vmlRoot, vmlEl);\n\n        // Text\n        if (style.text != null) {\n            this.drawRectText(vmlRoot, this.getBoundingRect());\n        }\n    };\n\n    ZImage.prototype.onRemove = function (vmlRoot) {\n        remove(vmlRoot, this._vmlEl);\n\n        this._vmlEl = null;\n        this._cropEl = null;\n        this._imageEl = null;\n\n        this.removeRectText(vmlRoot);\n    };\n\n    ZImage.prototype.onAdd = function (vmlRoot) {\n        append(vmlRoot, this._vmlEl);\n        this.appendRectText(vmlRoot);\n    };\n\n\n    /***************************************************\n     * TEXT\n     **************************************************/\n\n    var DEFAULT_STYLE_NORMAL = 'normal';\n\n    var fontStyleCache = {};\n    var fontStyleCacheCount = 0;\n    var MAX_FONT_CACHE_SIZE = 100;\n    var fontEl = document.createElement('div');\n\n    var getFontStyle = function (fontString) {\n        var fontStyle = fontStyleCache[fontString];\n        if (!fontStyle) {\n            // Clear cache\n            if (fontStyleCacheCount > MAX_FONT_CACHE_SIZE) {\n                fontStyleCacheCount = 0;\n                fontStyleCache = {};\n            }\n\n            var style = fontEl.style;\n            var fontFamily;\n            try {\n                style.font = fontString;\n                fontFamily = style.fontFamily.split(',')[0];\n            }\n            catch (e) {\n            }\n\n            fontStyle = {\n                style: style.fontStyle || DEFAULT_STYLE_NORMAL,\n                variant: style.fontVariant || DEFAULT_STYLE_NORMAL,\n                weight: style.fontWeight || DEFAULT_STYLE_NORMAL,\n                size: parseFloat(style.fontSize || 12) | 0,\n                family: fontFamily || 'Microsoft YaHei'\n            };\n\n            fontStyleCache[fontString] = fontStyle;\n            fontStyleCacheCount++;\n        }\n        return fontStyle;\n    };\n\n    var textMeasureEl;\n    // Overwrite measure text method\n    textContain.$override('measureText', function (text, textFont) {\n        var doc = vmlCore.doc;\n        if (!textMeasureEl) {\n            textMeasureEl = doc.createElement('div');\n            textMeasureEl.style.cssText = 'position:absolute;top:-20000px;left:0;'\n                + 'padding:0;margin:0;border:none;white-space:pre;';\n            vmlCore.doc.body.appendChild(textMeasureEl);\n        }\n\n        try {\n            textMeasureEl.style.font = textFont;\n        }\n        catch (ex) {\n            // Ignore failures to set to invalid font.\n        }\n        textMeasureEl.innerHTML = '';\n        // Don't use innerHTML or innerText because they allow markup/whitespace.\n        textMeasureEl.appendChild(doc.createTextNode(text));\n        return {\n            width: textMeasureEl.offsetWidth\n        };\n    });\n\n    var tmpRect = new BoundingRect();\n\n    var drawRectText = function (vmlRoot, rect, textRect, fromTextEl) {\n\n        var style = this.style;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && textHelper.normalizeTextStyle(style, true);\n\n        var text = style.text;\n        // Convert to string\n        text != null && (text += '');\n        if (!text) {\n            return;\n        }\n\n        // Convert rich text to plain text. Rich text is not supported in\n        // IE8-, but tags in rich text template will be removed.\n        if (style.rich) {\n            var contentBlock = textContain.parseRichText(text, style);\n            text = [];\n            for (var i = 0; i < contentBlock.lines.length; i++) {\n                var tokens = contentBlock.lines[i].tokens;\n                var textLine = [];\n                for (var j = 0; j < tokens.length; j++) {\n                    textLine.push(tokens[j].text);\n                }\n                text.push(textLine.join(''));\n            }\n            text = text.join('\\n');\n        }\n\n        var x;\n        var y;\n        var align = style.textAlign;\n        var verticalAlign = style.textVerticalAlign;\n\n        var fontStyle = getFontStyle(style.font);\n        // FIXME encodeHtmlAttribute ?\n        var font = fontStyle.style + ' ' + fontStyle.variant + ' ' + fontStyle.weight + ' '\n            + fontStyle.size + 'px \"' + fontStyle.family + '\"';\n\n        textRect = textRect || textContain.getBoundingRect(\n            text, font, align, verticalAlign, style.textPadding, style.textLineHeight\n        );\n\n        // Transform rect to view space\n        var m = this.transform;\n        // Ignore transform for text in other element\n        if (m && !fromTextEl) {\n            tmpRect.copy(rect);\n            tmpRect.applyTransform(m);\n            rect = tmpRect;\n        }\n\n        if (!fromTextEl) {\n            var textPosition = style.textPosition;\n            // Text position represented by coord\n            if (textPosition instanceof Array) {\n                x = rect.x + parsePercent(textPosition[0], rect.width);\n                y = rect.y + parsePercent(textPosition[1], rect.height);\n\n                align = align || 'left';\n            }\n            else {\n                var res = this.calculateTextPosition\n                    ? this.calculateTextPosition({}, style, rect)\n                    : textContain.calculateTextPosition({}, style, rect);\n                x = res.x;\n                y = res.y;\n\n                // Default align and baseline when has textPosition\n                align = align || res.textAlign;\n                verticalAlign = verticalAlign || res.textVerticalAlign;\n            }\n        }\n        else {\n            x = rect.x;\n            y = rect.y;\n        }\n\n        x = textContain.adjustTextX(x, textRect.width, align);\n        y = textContain.adjustTextY(y, textRect.height, verticalAlign);\n\n        // Force baseline 'middle'\n        y += textRect.height / 2;\n\n        // var fontSize = fontStyle.size;\n        // 1.75 is an arbitrary number, as there is no info about the text baseline\n        // switch (baseline) {\n            // case 'hanging':\n            // case 'top':\n            //     y += fontSize / 1.75;\n            //     break;\n        //     case 'middle':\n        //         break;\n        //     default:\n        //     // case null:\n        //     // case 'alphabetic':\n        //     // case 'ideographic':\n        //     // case 'bottom':\n        //         y -= fontSize / 2.25;\n        //         break;\n        // }\n\n        // switch (align) {\n        //     case 'left':\n        //         break;\n        //     case 'center':\n        //         x -= textRect.width / 2;\n        //         break;\n        //     case 'right':\n        //         x -= textRect.width;\n        //         break;\n            // case 'end':\n                // align = elementStyle.direction == 'ltr' ? 'right' : 'left';\n                // break;\n            // case 'start':\n                // align = elementStyle.direction == 'rtl' ? 'right' : 'left';\n                // break;\n            // default:\n            //     align = 'left';\n        // }\n\n        var createNode = vmlCore.createNode;\n\n        var textVmlEl = this._textVmlEl;\n        var pathEl;\n        var textPathEl;\n        var skewEl;\n        if (!textVmlEl) {\n            textVmlEl = createNode('line');\n            pathEl = createNode('path');\n            textPathEl = createNode('textpath');\n            skewEl = createNode('skew');\n\n            // FIXME Why here is not cammel case\n            // Align 'center' seems wrong\n            textPathEl.style['v-text-align'] = 'left';\n\n            initRootElStyle(textVmlEl);\n\n            pathEl.textpathok = true;\n            textPathEl.on = true;\n\n            textVmlEl.from = '0 0';\n            textVmlEl.to = '1000 0.05';\n\n            append(textVmlEl, skewEl);\n            append(textVmlEl, pathEl);\n            append(textVmlEl, textPathEl);\n\n            this._textVmlEl = textVmlEl;\n        }\n        else {\n            // 这里是在前面 appendChild 保证顺序的前提下\n            skewEl = textVmlEl.firstChild;\n            pathEl = skewEl.nextSibling;\n            textPathEl = pathEl.nextSibling;\n        }\n\n        var coords = [x, y];\n        var textVmlElStyle = textVmlEl.style;\n        // Ignore transform for text in other element\n        if (m && fromTextEl) {\n            applyTransform(coords, coords, m);\n\n            skewEl.on = true;\n\n            skewEl.matrix = m[0].toFixed(3) + comma + m[2].toFixed(3) + comma\n                            + m[1].toFixed(3) + comma + m[3].toFixed(3) + ',0,0';\n\n            // Text position\n            skewEl.offset = (round(coords[0]) || 0) + ',' + (round(coords[1]) || 0);\n            // Left top point as origin\n            skewEl.origin = '0 0';\n\n            textVmlElStyle.left = '0px';\n            textVmlElStyle.top = '0px';\n        }\n        else {\n            skewEl.on = false;\n            textVmlElStyle.left = round(x) + 'px';\n            textVmlElStyle.top = round(y) + 'px';\n        }\n\n        textPathEl.string = encodeHtmlAttribute(text);\n        // TODO\n        try {\n            textPathEl.style.font = font;\n        }\n        // Error font format\n        catch (e) {}\n\n        updateFillAndStroke(textVmlEl, 'fill', {\n            fill: style.textFill,\n            opacity: style.opacity\n        }, this);\n        updateFillAndStroke(textVmlEl, 'stroke', {\n            stroke: style.textStroke,\n            opacity: style.opacity,\n            lineDash: style.lineDash || null // style.lineDash can be `false`.\n        }, this);\n\n        textVmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);\n\n        // Attached to root\n        append(vmlRoot, textVmlEl);\n    };\n\n    var removeRectText = function (vmlRoot) {\n        remove(vmlRoot, this._textVmlEl);\n        this._textVmlEl = null;\n    };\n\n    var appendRectText = function (vmlRoot) {\n        append(vmlRoot, this._textVmlEl);\n    };\n\n    var list = [RectText, Displayable, ZImage, Path, Text];\n\n    // In case Displayable has been mixed in RectText\n    for (var i = 0; i < list.length; i++) {\n        var proto = list[i].prototype;\n        proto.drawRectText = drawRectText;\n        proto.removeRectText = removeRectText;\n        proto.appendRectText = appendRectText;\n    }\n\n    Text.prototype.brushVML = function (vmlRoot) {\n        var style = this.style;\n        if (style.text != null) {\n            this.drawRectText(vmlRoot, {\n                x: style.x || 0, y: style.y || 0,\n                width: 0, height: 0\n            }, this.getBoundingRect(), true);\n        }\n        else {\n            this.removeRectText(vmlRoot);\n        }\n    };\n\n    Text.prototype.onRemove = function (vmlRoot) {\n        this.removeRectText(vmlRoot);\n    };\n\n    Text.prototype.onAdd = function (vmlRoot) {\n        this.appendRectText(vmlRoot);\n    };\n}","/**\n * VML Painter.\n *\n * @module zrender/vml/Painter\n */\n\nimport logError from '../core/log';\nimport * as vmlCore from './core';\nimport {each} from '../core/util';\n\nfunction parseInt10(val) {\n    return parseInt(val, 10);\n}\n\n/**\n * @alias module:zrender/vml/Painter\n */\nfunction VMLPainter(root, storage) {\n\n    vmlCore.initVML();\n\n    this.root = root;\n\n    this.storage = storage;\n\n    var vmlViewport = document.createElement('div');\n\n    var vmlRoot = document.createElement('div');\n\n    vmlViewport.style.cssText = 'display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;';\n\n    vmlRoot.style.cssText = 'position:absolute;left:0;top:0;';\n\n    root.appendChild(vmlViewport);\n\n    this._vmlRoot = vmlRoot;\n    this._vmlViewport = vmlViewport;\n\n    this.resize();\n\n    // Modify storage\n    var oldDelFromStorage = storage.delFromStorage;\n    var oldAddToStorage = storage.addToStorage;\n    storage.delFromStorage = function (el) {\n        oldDelFromStorage.call(storage, el);\n\n        if (el) {\n            el.onRemove && el.onRemove(vmlRoot);\n        }\n    };\n\n    storage.addToStorage = function (el) {\n        // Displayable already has a vml node\n        el.onAdd && el.onAdd(vmlRoot);\n\n        oldAddToStorage.call(storage, el);\n    };\n\n    this._firstPaint = true;\n}\n\nVMLPainter.prototype = {\n\n    constructor: VMLPainter,\n\n    getType: function () {\n        return 'vml';\n    },\n\n    /**\n     * @return {HTMLDivElement}\n     */\n    getViewportRoot: function () {\n        return this._vmlViewport;\n    },\n\n    getViewportRootOffset: function () {\n        var viewportRoot = this.getViewportRoot();\n        if (viewportRoot) {\n            return {\n                offsetLeft: viewportRoot.offsetLeft || 0,\n                offsetTop: viewportRoot.offsetTop || 0\n            };\n        }\n    },\n\n    /**\n     * 刷新\n     */\n    refresh: function () {\n\n        var list = this.storage.getDisplayList(true, true);\n\n        this._paintList(list);\n    },\n\n    _paintList: function (list) {\n        var vmlRoot = this._vmlRoot;\n        for (var i = 0; i < list.length; i++) {\n            var el = list[i];\n            if (el.invisible || el.ignore) {\n                if (!el.__alreadyNotVisible) {\n                    el.onRemove(vmlRoot);\n                }\n                // Set as already invisible\n                el.__alreadyNotVisible = true;\n            }\n            else {\n                if (el.__alreadyNotVisible) {\n                    el.onAdd(vmlRoot);\n                }\n                el.__alreadyNotVisible = false;\n                if (el.__dirty) {\n                    el.beforeBrush && el.beforeBrush();\n                    (el.brushVML || el.brush).call(el, vmlRoot);\n                    el.afterBrush && el.afterBrush();\n                }\n            }\n            el.__dirty = false;\n        }\n\n        if (this._firstPaint) {\n            // Detached from document at first time\n            // to avoid page refreshing too many times\n\n            // FIXME 如果每次都先 removeChild 可能会导致一些填充和描边的效果改变\n            this._vmlViewport.appendChild(vmlRoot);\n            this._firstPaint = false;\n        }\n    },\n\n    resize: function (width, height) {\n        var width = width == null ? this._getWidth() : width;\n        var height = height == null ? this._getHeight() : height;\n\n        if (this._width !== width || this._height !== height) {\n            this._width = width;\n            this._height = height;\n\n            var vmlViewportStyle = this._vmlViewport.style;\n            vmlViewportStyle.width = width + 'px';\n            vmlViewportStyle.height = height + 'px';\n        }\n    },\n\n    dispose: function () {\n        this.root.innerHTML = '';\n\n        this._vmlRoot =\n        this._vmlViewport =\n        this.storage = null;\n    },\n\n    getWidth: function () {\n        return this._width;\n    },\n\n    getHeight: function () {\n        return this._height;\n    },\n\n    clear: function () {\n        if (this._vmlViewport) {\n            this.root.removeChild(this._vmlViewport);\n        }\n    },\n\n    _getWidth: function () {\n        var root = this.root;\n        var stl = root.currentStyle;\n\n        return ((root.clientWidth || parseInt10(stl.width))\n                - parseInt10(stl.paddingLeft)\n                - parseInt10(stl.paddingRight)) | 0;\n    },\n\n    _getHeight: function () {\n        var root = this.root;\n        var stl = root.currentStyle;\n\n        return ((root.clientHeight || parseInt10(stl.height))\n                - parseInt10(stl.paddingTop)\n                - parseInt10(stl.paddingBottom)) | 0;\n    }\n};\n\n// Not supported methods\nfunction createMethodNotSupport(method) {\n    return function () {\n        logError('In IE8.0 VML mode painter not support method \"' + method + '\"');\n    };\n}\n\n// Unsupported methods\neach([\n    'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers',\n    'modLayer', 'delLayer', 'clearLayer', 'toDataURL', 'pathToImage'\n], function (name) {\n    VMLPainter.prototype[name] = createMethodNotSupport(name);\n});\n\nexport default VMLPainter;","import './graphic';\nimport {registerPainter} from '../zrender';\nimport Painter from './Painter';\n\nregisterPainter('vml', Painter);","\nvar svgURI = 'http://www.w3.org/2000/svg';\n\nexport function createElement(name) {\n    return document.createElementNS(svgURI, name);\n}","// TODO\n// 1. shadow\n// 2. Image: sx, sy, sw, sh\n\nimport {createElement} from './core';\nimport PathProxy from '../core/PathProxy';\nimport BoundingRect from '../core/BoundingRect';\nimport * as matrix from '../core/matrix';\nimport * as textContain from '../contain/text';\nimport * as textHelper from '../graphic/helper/text';\nimport Text from '../graphic/Text';\n\nvar CMD = PathProxy.CMD;\nvar arrayJoin = Array.prototype.join;\n\nvar NONE = 'none';\nvar mathRound = Math.round;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\nvar PI2 = Math.PI * 2;\nvar degree = 180 / PI;\n\nvar EPSILON = 1e-4;\n\nfunction round4(val) {\n    return mathRound(val * 1e4) / 1e4;\n}\n\nfunction isAroundZero(val) {\n    return val < EPSILON && val > -EPSILON;\n}\n\nfunction pathHasFill(style, isText) {\n    var fill = isText ? style.textFill : style.fill;\n    return fill != null && fill !== NONE;\n}\n\nfunction pathHasStroke(style, isText) {\n    var stroke = isText ? style.textStroke : style.stroke;\n    return stroke != null && stroke !== NONE;\n}\n\nfunction setTransform(svgEl, m) {\n    if (m) {\n        attr(svgEl, 'transform', 'matrix(' + arrayJoin.call(m, ',') + ')');\n    }\n}\n\nfunction attr(el, key, val) {\n    if (!val || val.type !== 'linear' && val.type !== 'radial') {\n        // Don't set attribute for gradient, since it need new dom nodes\n        el.setAttribute(key, val);\n    }\n}\n\nfunction attrXLink(el, key, val) {\n    el.setAttributeNS('http://www.w3.org/1999/xlink', key, val);\n}\n\nfunction bindStyle(svgEl, style, isText, el) {\n    if (pathHasFill(style, isText)) {\n        var fill = isText ? style.textFill : style.fill;\n        fill = fill === 'transparent' ? NONE : fill;\n        attr(svgEl, 'fill', fill);\n        attr(svgEl, 'fill-opacity', style.fillOpacity != null ? style.fillOpacity * style.opacity : style.opacity);\n    }\n    else {\n        attr(svgEl, 'fill', NONE);\n    }\n\n    if (pathHasStroke(style, isText)) {\n        var stroke = isText ? style.textStroke : style.stroke;\n        stroke = stroke === 'transparent' ? NONE : stroke;\n        attr(svgEl, 'stroke', stroke);\n        var strokeWidth = isText\n            ? style.textStrokeWidth\n            : style.lineWidth;\n        var strokeScale = !isText && style.strokeNoScale\n            ? el.getLineScale()\n            : 1;\n        attr(svgEl, 'stroke-width', strokeWidth / strokeScale);\n        // stroke then fill for text; fill then stroke for others\n        attr(svgEl, 'paint-order', isText ? 'stroke' : 'fill');\n        attr(svgEl, 'stroke-opacity', style.strokeOpacity != null ? style.strokeOpacity : style.opacity);\n        var lineDash = style.lineDash;\n        if (lineDash) {\n            attr(svgEl, 'stroke-dasharray', style.lineDash.join(','));\n            attr(svgEl, 'stroke-dashoffset', mathRound(style.lineDashOffset || 0));\n        }\n        else {\n            attr(svgEl, 'stroke-dasharray', '');\n        }\n\n        // PENDING\n        style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap);\n        style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin);\n        style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit);\n    }\n    else {\n        attr(svgEl, 'stroke', NONE);\n    }\n}\n\n/***************************************************\n * PATH\n **************************************************/\nfunction pathDataToString(path) {\n    var str = [];\n    var data = path.data;\n    var dataLength = path.len();\n    for (var i = 0; i < dataLength;) {\n        var cmd = data[i++];\n        var cmdStr = '';\n        var nData = 0;\n        switch (cmd) {\n            case CMD.M:\n                cmdStr = 'M';\n                nData = 2;\n                break;\n            case CMD.L:\n                cmdStr = 'L';\n                nData = 2;\n                break;\n            case CMD.Q:\n                cmdStr = 'Q';\n                nData = 4;\n                break;\n            case CMD.C:\n                cmdStr = 'C';\n                nData = 6;\n                break;\n            case CMD.A:\n                var cx = data[i++];\n                var cy = data[i++];\n                var rx = data[i++];\n                var ry = data[i++];\n                var theta = data[i++];\n                var dTheta = data[i++];\n                var psi = data[i++];\n                var clockwise = data[i++];\n\n                var dThetaPositive = Math.abs(dTheta);\n                var isCircle = isAroundZero(dThetaPositive - PI2)\n                    || (clockwise ? dTheta >= PI2 : -dTheta >= PI2);\n\n                // Mapping to 0~2PI\n                var unifiedTheta = dTheta > 0 ? dTheta % PI2 : (dTheta % PI2 + PI2);\n\n                var large = false;\n                if (isCircle) {\n                    large = true;\n                }\n                else if (isAroundZero(dThetaPositive)) {\n                    large = false;\n                }\n                else {\n                    large = (unifiedTheta >= PI) === !!clockwise;\n                }\n\n                var x0 = round4(cx + rx * mathCos(theta));\n                var y0 = round4(cy + ry * mathSin(theta));\n\n                // It will not draw if start point and end point are exactly the same\n                // We need to shift the end point with a small value\n                // FIXME A better way to draw circle ?\n                if (isCircle) {\n                    if (clockwise) {\n                        dTheta = PI2 - 1e-4;\n                    }\n                    else {\n                        dTheta = -PI2 + 1e-4;\n                    }\n\n                    large = true;\n\n                    if (i === 9) {\n                        // Move to (x0, y0) only when CMD.A comes at the\n                        // first position of a shape.\n                        // For instance, when drawing a ring, CMD.A comes\n                        // after CMD.M, so it's unnecessary to move to\n                        // (x0, y0).\n                        str.push('M', x0, y0);\n                    }\n                }\n\n                var x = round4(cx + rx * mathCos(theta + dTheta));\n                var y = round4(cy + ry * mathSin(theta + dTheta));\n\n                // FIXME Ellipse\n                str.push('A', round4(rx), round4(ry),\n                    mathRound(psi * degree), +large, +clockwise, x, y);\n                break;\n            case CMD.Z:\n                cmdStr = 'Z';\n                break;\n            case CMD.R:\n                var x = round4(data[i++]);\n                var y = round4(data[i++]);\n                var w = round4(data[i++]);\n                var h = round4(data[i++]);\n                str.push(\n                    'M', x, y,\n                    'L', x + w, y,\n                    'L', x + w, y + h,\n                    'L', x, y + h,\n                    'L', x, y\n                );\n                break;\n        }\n        cmdStr && str.push(cmdStr);\n        for (var j = 0; j < nData; j++) {\n            // PENDING With scale\n            str.push(round4(data[i++]));\n        }\n    }\n    return str.join(' ');\n}\n\nvar svgPath = {};\nexport {svgPath as path};\n\nsvgPath.brush = function (el) {\n    var style = el.style;\n\n    var svgEl = el.__svgEl;\n    if (!svgEl) {\n        svgEl = createElement('path');\n        el.__svgEl = svgEl;\n    }\n\n    if (!el.path) {\n        el.createPathProxy();\n    }\n    var path = el.path;\n\n    if (el.__dirtyPath) {\n        path.beginPath();\n        path.subPixelOptimize = false;\n        el.buildPath(path, el.shape);\n        el.__dirtyPath = false;\n\n        var pathStr = pathDataToString(path);\n        if (pathStr.indexOf('NaN') < 0) {\n            // Ignore illegal path, which may happen such in out-of-range\n            // data in Calendar series.\n            attr(svgEl, 'd', pathStr);\n        }\n    }\n\n    bindStyle(svgEl, style, false, el);\n    setTransform(svgEl, el.transform);\n\n    if (style.text != null) {\n        svgTextDrawRectText(el, el.getBoundingRect());\n    }\n};\n\n/***************************************************\n * IMAGE\n **************************************************/\nvar svgImage = {};\nexport {svgImage as image};\n\nsvgImage.brush = function (el) {\n    var style = el.style;\n    var image = style.image;\n\n    if (image instanceof HTMLImageElement) {\n        var src = image.src;\n        image = src;\n    }\n    if (!image) {\n        return;\n    }\n\n    var x = style.x || 0;\n    var y = style.y || 0;\n\n    var dw = style.width;\n    var dh = style.height;\n\n    var svgEl = el.__svgEl;\n    if (!svgEl) {\n        svgEl = createElement('image');\n        el.__svgEl = svgEl;\n    }\n\n    if (image !== el.__imageSrc) {\n        attrXLink(svgEl, 'href', image);\n        // Caching image src\n        el.__imageSrc = image;\n    }\n\n    attr(svgEl, 'width', dw);\n    attr(svgEl, 'height', dh);\n\n    attr(svgEl, 'x', x);\n    attr(svgEl, 'y', y);\n\n    setTransform(svgEl, el.transform);\n\n    if (style.text != null) {\n        svgTextDrawRectText(el, el.getBoundingRect());\n    }\n};\n\n/***************************************************\n * TEXT\n **************************************************/\nvar svgText = {};\nexport {svgText as text};\nvar _tmpTextHostRect = new BoundingRect();\nvar _tmpTextBoxPos = {};\nvar _tmpTextTransform = [];\nvar TEXT_ALIGN_TO_ANCHRO = {\n    left: 'start',\n    right: 'end',\n    center: 'middle',\n    middle: 'middle'\n};\n\n/**\n * @param {module:zrender/Element} el\n * @param {Object|boolean} [hostRect] {x, y, width, height}\n *        If set false, rect text is not used.\n */\nvar svgTextDrawRectText = function (el, hostRect) {\n    var style = el.style;\n    var elTransform = el.transform;\n    var needTransformTextByHostEl = el instanceof Text || style.transformText;\n\n    el.__dirty && textHelper.normalizeTextStyle(style, true);\n\n    var text = style.text;\n    // Convert to string\n    text != null && (text += '');\n    if (!textHelper.needDrawText(text, style)) {\n        return;\n    }\n    // render empty text for svg if no text but need draw text.\n    text == null && (text = '');\n\n    // Follow the setting in the canvas renderer, if not transform the\n    // text, transform the hostRect, by which the text is located.\n    if (!needTransformTextByHostEl && elTransform) {\n        _tmpTextHostRect.copy(hostRect);\n        _tmpTextHostRect.applyTransform(elTransform);\n        hostRect = _tmpTextHostRect;\n    }\n\n    var textSvgEl = el.__textSvgEl;\n    if (!textSvgEl) {\n        textSvgEl = createElement('text');\n        el.__textSvgEl = textSvgEl;\n    }\n\n    // style.font has been normalized by `normalizeTextStyle`.\n    var textSvgElStyle = textSvgEl.style;\n    var font = style.font || textContain.DEFAULT_FONT;\n    var computedFont = textSvgEl.__computedFont;\n    if (font !== textSvgEl.__styleFont) {\n        textSvgElStyle.font = textSvgEl.__styleFont = font;\n        // The computedFont might not be the orginal font if it is illegal font.\n        computedFont = textSvgEl.__computedFont = textSvgElStyle.font;\n    }\n\n    var textPadding = style.textPadding;\n    var textLineHeight = style.textLineHeight;\n\n    var contentBlock = el.__textCotentBlock;\n    if (!contentBlock || el.__dirtyText) {\n        contentBlock = el.__textCotentBlock = textContain.parsePlainText(\n            text, computedFont, textPadding, textLineHeight, style.truncate\n        );\n    }\n\n    var outerHeight = contentBlock.outerHeight;\n    var lineHeight = contentBlock.lineHeight;\n\n    textHelper.getBoxPosition(_tmpTextBoxPos, el, style, hostRect);\n    var baseX = _tmpTextBoxPos.baseX;\n    var baseY = _tmpTextBoxPos.baseY;\n    var textAlign = _tmpTextBoxPos.textAlign || 'left';\n    var textVerticalAlign = _tmpTextBoxPos.textVerticalAlign;\n\n    setTextTransform(\n        textSvgEl, needTransformTextByHostEl, elTransform, style, hostRect, baseX, baseY\n    );\n\n    var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n    var textX = baseX;\n    var textY = boxY;\n\n    // TODO needDrawBg\n    if (textPadding) {\n        textX = getTextXForPadding(baseX, textAlign, textPadding);\n        textY += textPadding[0];\n    }\n\n    // `textBaseline` is set as 'middle'.\n    textY += lineHeight / 2;\n\n    bindStyle(textSvgEl, style, true, el);\n\n    // FIXME\n    // Add a <style> to reset all of the text font as inherit?\n    // otherwise the outer <style> may set the unexpected style.\n\n    // Font may affect position of each tspan elements\n    var canCacheByTextString = contentBlock.canCacheByTextString;\n    var tspanList = el.__tspanList || (el.__tspanList = []);\n    var tspanOriginLen = tspanList.length;\n\n    // Optimize for most cases, just compare text string to determine change.\n    if (canCacheByTextString && el.__canCacheByTextString && el.__text === text) {\n        if (el.__dirtyText && tspanOriginLen) {\n            for (var idx = 0; idx < tspanOriginLen; ++idx) {\n                updateTextLocation(tspanList[idx], textAlign, textX, textY + idx * lineHeight);\n            }\n        }\n    }\n    else {\n        el.__text = text;\n        el.__canCacheByTextString = canCacheByTextString;\n        var textLines = contentBlock.lines;\n        var nTextLines = textLines.length;\n\n        var idx = 0;\n        for (; idx < nTextLines; idx++) {\n            // Using cached tspan elements\n            var tspan = tspanList[idx];\n            var singleLineText = textLines[idx];\n\n            if (!tspan) {\n                tspan = tspanList[idx] = createElement('tspan');\n                textSvgEl.appendChild(tspan);\n                tspan.appendChild(document.createTextNode(singleLineText));\n            }\n            else if (tspan.__zrText !== singleLineText) {\n                tspan.innerHTML = '';\n                tspan.appendChild(document.createTextNode(singleLineText));\n            }\n            updateTextLocation(tspan, textAlign, textX, textY + idx * lineHeight);\n        }\n        // Remove unused tspan elements\n        if (tspanOriginLen > nTextLines) {\n            for (; idx < tspanOriginLen; idx++) {\n                textSvgEl.removeChild(tspanList[idx]);\n            }\n            tspanList.length = nTextLines;\n        }\n    }\n};\n\nfunction setTextTransform(textSvgEl, needTransformTextByHostEl, elTransform, style, hostRect, baseX, baseY) {\n    matrix.identity(_tmpTextTransform);\n\n    if (needTransformTextByHostEl && elTransform) {\n        matrix.copy(_tmpTextTransform, elTransform);\n    }\n\n    // textRotation only apply in RectText.\n    var textRotation = style.textRotation;\n    if (hostRect && textRotation) {\n        var origin = style.textOrigin;\n        if (origin === 'center') {\n            baseX = hostRect.width / 2 + hostRect.x;\n            baseY = hostRect.height / 2 + hostRect.y;\n        }\n        else if (origin) {\n            baseX = origin[0] + hostRect.x;\n            baseY = origin[1] + hostRect.y;\n        }\n\n        _tmpTextTransform[4] -= baseX;\n        _tmpTextTransform[5] -= baseY;\n        // Positive: anticlockwise\n        matrix.rotate(_tmpTextTransform, _tmpTextTransform, textRotation);\n        _tmpTextTransform[4] += baseX;\n        _tmpTextTransform[5] += baseY;\n    }\n    // See the definition in `Style.js#textOrigin`, the default\n    // origin is from the result of `getBoxPosition`.\n\n    setTransform(textSvgEl, _tmpTextTransform);\n}\n\n// FIXME merge the same code with `helper/text.js#getTextXForPadding`;\nfunction getTextXForPadding(x, textAlign, textPadding) {\n    return textAlign === 'right'\n        ? (x - textPadding[1])\n        : textAlign === 'center'\n        ? (x + textPadding[3] / 2 - textPadding[1] / 2)\n        : (x + textPadding[3]);\n}\n\nfunction updateTextLocation(tspan, textAlign, x, y) {\n    // Consider different font display differently in vertial align, we always\n    // set vertialAlign as 'middle', and use 'y' to locate text vertically.\n    attr(tspan, 'dominant-baseline', 'middle');\n    attr(tspan, 'text-anchor', TEXT_ALIGN_TO_ANCHRO[textAlign]);\n    attr(tspan, 'x', x);\n    attr(tspan, 'y', y);\n}\n\nsvgText.drawRectText = svgTextDrawRectText;\n\nsvgText.brush = function (el) {\n    var style = el.style;\n    if (style.text != null) {\n        svgTextDrawRectText(el, false);\n    }\n};\n","// Myers' Diff Algorithm\n// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js\n\nfunction Diff() {}\n\nDiff.prototype = {\n    diff: function (oldArr, newArr, equals) {\n        if (!equals) {\n            equals = function (a, b) {\n                return a === b;\n            };\n        }\n        this.equals = equals;\n\n        var self = this;\n\n        oldArr = oldArr.slice();\n        newArr = newArr.slice();\n        // Allow subclasses to massage the input prior to running\n        var newLen = newArr.length;\n        var oldLen = oldArr.length;\n        var editLength = 1;\n        var maxEditLength = newLen + oldLen;\n        var bestPath = [{ newPos: -1, components: [] }];\n\n        // Seed editLength = 0, i.e. the content starts with the same values\n        var oldPos = this.extractCommon(bestPath[0], newArr, oldArr, 0);\n        if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n            var indices = [];\n            for (var i = 0; i < newArr.length; i++) {\n                indices.push(i);\n            }\n            // Identity per the equality and tokenizer\n            return [{\n                indices: indices, count: newArr.length\n            }];\n        }\n\n        // Main worker method. checks all permutations of a given edit length for acceptance.\n        function execEditLength() {\n            for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n                var basePath;\n                var addPath = bestPath[diagonalPath - 1];\n                var removePath = bestPath[diagonalPath + 1];\n                var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n                if (addPath) {\n                    // No one else is going to attempt to use this value, clear it\n                    bestPath[diagonalPath - 1] = undefined;\n                }\n\n                var canAdd = addPath && addPath.newPos + 1 < newLen;\n                var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n                if (!canAdd && !canRemove) {\n                    // If this path is a terminal then prune\n                    bestPath[diagonalPath] = undefined;\n                    continue;\n                }\n\n                // Select the diagonal that we want to branch from. We select the prior\n                // path whose position in the new string is the farthest from the origin\n                // and does not pass the bounds of the diff graph\n                if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n                    basePath = clonePath(removePath);\n                    self.pushComponent(basePath.components, undefined, true);\n                }\n                else {\n                    basePath = addPath;   // No need to clone, we've pulled it from the list\n                    basePath.newPos++;\n                    self.pushComponent(basePath.components, true, undefined);\n                }\n\n                oldPos = self.extractCommon(basePath, newArr, oldArr, diagonalPath);\n\n                // If we have hit the end of both strings, then we are done\n                if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n                    return buildValues(self, basePath.components, newArr, oldArr);\n                }\n                else {\n                    // Otherwise track this path as a potential candidate and continue.\n                    bestPath[diagonalPath] = basePath;\n                }\n            }\n\n            editLength++;\n        }\n\n        while (editLength <= maxEditLength) {\n            var ret = execEditLength();\n            if (ret) {\n                return ret;\n            }\n        }\n    },\n\n    pushComponent: function (components, added, removed) {\n        var last = components[components.length - 1];\n        if (last && last.added === added && last.removed === removed) {\n            // We need to clone here as the component clone operation is just\n            // as shallow array clone\n            components[components.length - 1] = {count: last.count + 1, added: added, removed: removed };\n        }\n        else {\n            components.push({count: 1, added: added, removed: removed });\n        }\n    },\n    extractCommon: function (basePath, newArr, oldArr, diagonalPath) {\n        var newLen = newArr.length;\n        var oldLen = oldArr.length;\n        var newPos = basePath.newPos;\n        var oldPos = newPos - diagonalPath;\n        var commonCount = 0;\n\n        while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newArr[newPos + 1], oldArr[oldPos + 1])) {\n            newPos++;\n            oldPos++;\n            commonCount++;\n        }\n\n        if (commonCount) {\n            basePath.components.push({count: commonCount});\n        }\n\n        basePath.newPos = newPos;\n        return oldPos;\n    },\n    tokenize: function (value) {\n        return value.slice();\n    },\n    join: function (value) {\n        return value.slice();\n    }\n};\n\nfunction buildValues(diff, components, newArr, oldArr) {\n    var componentPos = 0;\n    var componentLen = components.length;\n    var newPos = 0;\n    var oldPos = 0;\n\n    for (; componentPos < componentLen; componentPos++) {\n        var component = components[componentPos];\n        if (!component.removed) {\n            var indices = [];\n            for (var i = newPos; i < newPos + component.count; i++) {\n                indices.push(i);\n            }\n            component.indices = indices;\n            newPos += component.count;\n            // Common case\n            if (!component.added) {\n                oldPos += component.count;\n            }\n        }\n        else {\n            var indices = [];\n            for (var i = oldPos; i < oldPos + component.count; i++) {\n                indices.push(i);\n            }\n            component.indices = indices;\n            oldPos += component.count;\n        }\n    }\n\n    return components;\n}\n\nfunction clonePath(path) {\n    return { newPos: path.newPos, components: path.components.slice(0) };\n}\n\nvar arrayDiff = new Diff();\n\nexport default function (oldArr, newArr, callback) {\n    return arrayDiff.diff(oldArr, newArr, callback);\n}","/**\n * @file Manages elements that can be defined in <defs> in SVG,\n *       e.g., gradients, clip path, etc.\n * @author Zhang Wenli\n */\n\nimport {createElement} from '../core';\nimport * as zrUtil from '../../core/util';\nimport Path from '../../graphic/Path';\nimport ZImage from '../../graphic/Image';\nimport ZText from '../../graphic/Text';\nimport {\n    path as svgPath,\n    image as svgImage,\n    text as svgText\n} from '../graphic';\n\n\nvar MARK_UNUSED = '0';\nvar MARK_USED = '1';\n\n/**\n * Manages elements that can be defined in <defs> in SVG,\n * e.g., gradients, clip path, etc.\n *\n * @class\n * @param {number}          zrId      zrender instance id\n * @param {SVGElement}      svgRoot   root of SVG document\n * @param {string|string[]} tagNames  possible tag names\n * @param {string}          markLabel label name to make if the element\n *                                    is used\n */\nfunction Definable(\n    zrId,\n    svgRoot,\n    tagNames,\n    markLabel,\n    domName\n) {\n    this._zrId = zrId;\n    this._svgRoot = svgRoot;\n    this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames;\n    this._markLabel = markLabel;\n    this._domName = domName || '_dom';\n\n    this.nextId = 0;\n}\n\n\nDefinable.prototype.createElement = createElement;\n\n\n/**\n * Get the <defs> tag for svgRoot; optionally creates one if not exists.\n *\n * @param {boolean} isForceCreating if need to create when not exists\n * @return {SVGDefsElement} SVG <defs> element, null if it doesn't\n * exist and isForceCreating is false\n */\nDefinable.prototype.getDefs = function (isForceCreating) {\n    var svgRoot = this._svgRoot;\n    var defs = this._svgRoot.getElementsByTagName('defs');\n    if (defs.length === 0) {\n        // Not exist\n        if (isForceCreating) {\n            defs = svgRoot.insertBefore(\n                this.createElement('defs'), // Create new tag\n                svgRoot.firstChild // Insert in the front of svg\n            );\n            if (!defs.contains) {\n                // IE doesn't support contains method\n                defs.contains = function (el) {\n                    var children = defs.children;\n                    if (!children) {\n                        return false;\n                    }\n                    for (var i = children.length - 1; i >= 0; --i) {\n                        if (children[i] === el) {\n                            return true;\n                        }\n                    }\n                    return false;\n                };\n            }\n            return defs;\n        }\n        else {\n            return null;\n        }\n    }\n    else {\n        return defs[0];\n    }\n};\n\n\n/**\n * Update DOM element if necessary.\n *\n * @param {Object|string} element style element. e.g., for gradient,\n *                                it may be '#ccc' or {type: 'linear', ...}\n * @param {Function|undefined} onUpdate update callback\n */\nDefinable.prototype.update = function (element, onUpdate) {\n    if (!element) {\n        return;\n    }\n\n    var defs = this.getDefs(false);\n    if (element[this._domName] && defs.contains(element[this._domName])) {\n        // Update DOM\n        if (typeof onUpdate === 'function') {\n            onUpdate(element);\n        }\n    }\n    else {\n        // No previous dom, create new\n        var dom = this.add(element);\n        if (dom) {\n            element[this._domName] = dom;\n        }\n    }\n};\n\n\n/**\n * Add gradient dom to defs\n *\n * @param {SVGElement} dom DOM to be added to <defs>\n */\nDefinable.prototype.addDom = function (dom) {\n    var defs = this.getDefs(true);\n    defs.appendChild(dom);\n};\n\n\n/**\n * Remove DOM of a given element.\n *\n * @param {SVGElement} element element to remove dom\n */\nDefinable.prototype.removeDom = function (element) {\n    var defs = this.getDefs(false);\n    if (defs && element[this._domName]) {\n        defs.removeChild(element[this._domName]);\n        element[this._domName] = null;\n    }\n};\n\n\n/**\n * Get DOMs of this element.\n *\n * @return {HTMLDomElement} doms of this defineable elements in <defs>\n */\nDefinable.prototype.getDoms = function () {\n    var defs = this.getDefs(false);\n    if (!defs) {\n        // No dom when defs is not defined\n        return [];\n    }\n\n    var doms = [];\n    zrUtil.each(this._tagNames, function (tagName) {\n        var tags = defs.getElementsByTagName(tagName);\n        // Note that tags is HTMLCollection, which is array-like\n        // rather than real array.\n        // So `doms.concat(tags)` add tags as one object.\n        doms = doms.concat([].slice.call(tags));\n    });\n\n    return doms;\n};\n\n\n/**\n * Mark DOMs to be unused before painting, and clear unused ones at the end\n * of the painting.\n */\nDefinable.prototype.markAllUnused = function () {\n    var doms = this.getDoms();\n    var that = this;\n    zrUtil.each(doms, function (dom) {\n        dom[that._markLabel] = MARK_UNUSED;\n    });\n};\n\n\n/**\n * Mark a single DOM to be used.\n *\n * @param {SVGElement} dom DOM to mark\n */\nDefinable.prototype.markUsed = function (dom) {\n    if (dom) {\n        dom[this._markLabel] = MARK_USED;\n    }\n};\n\n\n/**\n * Remove unused DOMs defined in <defs>\n */\nDefinable.prototype.removeUnused = function () {\n    var defs = this.getDefs(false);\n    if (!defs) {\n        // Nothing to remove\n        return;\n    }\n\n    var doms = this.getDoms();\n    var that = this;\n    zrUtil.each(doms, function (dom) {\n        if (dom[that._markLabel] !== MARK_USED) {\n            // Remove gradient\n            defs.removeChild(dom);\n        }\n    });\n};\n\n\n/**\n * Get SVG proxy.\n *\n * @param {Displayable} displayable displayable element\n * @return {Path|Image|Text} svg proxy of given element\n */\nDefinable.prototype.getSvgProxy = function (displayable) {\n    if (displayable instanceof Path) {\n        return svgPath;\n    }\n    else if (displayable instanceof ZImage) {\n        return svgImage;\n    }\n    else if (displayable instanceof ZText) {\n        return svgText;\n    }\n    else {\n        return svgPath;\n    }\n};\n\n\n/**\n * Get text SVG element.\n *\n * @param {Displayable} displayable displayable element\n * @return {SVGElement} SVG element of text\n */\nDefinable.prototype.getTextSvgElement = function (displayable) {\n    return displayable.__textSvgEl;\n};\n\n\n/**\n * Get SVG element.\n *\n * @param {Displayable} displayable displayable element\n * @return {SVGElement} SVG element\n */\nDefinable.prototype.getSvgElement = function (displayable) {\n    return displayable.__svgEl;\n};\n\n\nexport default Definable;\n","/**\n * @file Manages SVG gradient elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport logError from '../../core/log';\nimport * as colorTool from '../../tool/color';\n\n/**\n * Manages SVG gradient elements.\n *\n * @class\n * @extends Definable\n * @param   {number}     zrId    zrender instance id\n * @param   {SVGElement} svgRoot root of SVG document\n */\nfunction GradientManager(zrId, svgRoot) {\n    Definable.call(\n        this,\n        zrId,\n        svgRoot,\n        ['linearGradient', 'radialGradient'],\n        '__gradient_in_use__'\n    );\n}\n\n\nzrUtil.inherits(GradientManager, Definable);\n\n\n/**\n * Create new gradient DOM for fill or stroke if not exist,\n * but will not update gradient if exists.\n *\n * @param {SvgElement}  svgElement   SVG element to paint\n * @param {Displayable} displayable  zrender displayable element\n */\nGradientManager.prototype.addWithoutUpdate = function (\n    svgElement,\n    displayable\n) {\n    if (displayable && displayable.style) {\n        var that = this;\n        zrUtil.each(['fill', 'stroke'], function (fillOrStroke) {\n            if (displayable.style[fillOrStroke]\n                && (displayable.style[fillOrStroke].type === 'linear'\n                || displayable.style[fillOrStroke].type === 'radial')\n            ) {\n                var gradient = displayable.style[fillOrStroke];\n                var defs = that.getDefs(true);\n\n                // Create dom in <defs> if not exists\n                var dom;\n                if (gradient._dom) {\n                    // Gradient exists\n                    dom = gradient._dom;\n                    if (!defs.contains(gradient._dom)) {\n                        // _dom is no longer in defs, recreate\n                        that.addDom(dom);\n                    }\n                }\n                else {\n                    // New dom\n                    dom = that.add(gradient);\n                }\n\n                that.markUsed(displayable);\n\n                var id = dom.getAttribute('id');\n                svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n            }\n        });\n    }\n};\n\n\n/**\n * Add a new gradient tag in <defs>\n *\n * @param   {Gradient} gradient zr gradient instance\n * @return {SVGLinearGradientElement | SVGRadialGradientElement}\n *                            created DOM\n */\nGradientManager.prototype.add = function (gradient) {\n    var dom;\n    if (gradient.type === 'linear') {\n        dom = this.createElement('linearGradient');\n    }\n    else if (gradient.type === 'radial') {\n        dom = this.createElement('radialGradient');\n    }\n    else {\n        logError('Illegal gradient type.');\n        return null;\n    }\n\n    // Set dom id with gradient id, since each gradient instance\n    // will have no more than one dom element.\n    // id may exists before for those dirty elements, in which case\n    // id should remain the same, and other attributes should be\n    // updated.\n    gradient.id = gradient.id || this.nextId++;\n    dom.setAttribute('id', 'zr' + this._zrId\n        + '-gradient-' + gradient.id);\n\n    this.updateDom(gradient, dom);\n    this.addDom(dom);\n\n    return dom;\n};\n\n\n/**\n * Update gradient.\n *\n * @param {Gradient} gradient zr gradient instance\n */\nGradientManager.prototype.update = function (gradient) {\n    var that = this;\n    Definable.prototype.update.call(this, gradient, function () {\n        var type = gradient.type;\n        var tagName = gradient._dom.tagName;\n        if (type === 'linear' && tagName === 'linearGradient'\n            || type === 'radial' && tagName === 'radialGradient'\n        ) {\n            // Gradient type is not changed, update gradient\n            that.updateDom(gradient, gradient._dom);\n        }\n        else {\n            // Remove and re-create if type is changed\n            that.removeDom(gradient);\n            that.add(gradient);\n        }\n    });\n};\n\n\n/**\n * Update gradient dom\n *\n * @param {Gradient} gradient zr gradient instance\n * @param {SVGLinearGradientElement | SVGRadialGradientElement} dom\n *                            DOM to update\n */\nGradientManager.prototype.updateDom = function (gradient, dom) {\n    if (gradient.type === 'linear') {\n        dom.setAttribute('x1', gradient.x);\n        dom.setAttribute('y1', gradient.y);\n        dom.setAttribute('x2', gradient.x2);\n        dom.setAttribute('y2', gradient.y2);\n    }\n    else if (gradient.type === 'radial') {\n        dom.setAttribute('cx', gradient.x);\n        dom.setAttribute('cy', gradient.y);\n        dom.setAttribute('r', gradient.r);\n    }\n    else {\n        logError('Illegal gradient type.');\n        return;\n    }\n\n    if (gradient.global) {\n        // x1, x2, y1, y2 in range of 0 to canvas width or height\n        dom.setAttribute('gradientUnits', 'userSpaceOnUse');\n    }\n    else {\n        // x1, x2, y1, y2 in range of 0 to 1\n        dom.setAttribute('gradientUnits', 'objectBoundingBox');\n    }\n\n    // Remove color stops if exists\n    dom.innerHTML = '';\n\n    // Add color stops\n    var colors = gradient.colorStops;\n    for (var i = 0, len = colors.length; i < len; ++i) {\n        var stop = this.createElement('stop');\n        stop.setAttribute('offset', colors[i].offset * 100 + '%');\n\n        var color = colors[i].color;\n        if (color.indexOf('rgba' > -1)) {\n            // Fix Safari bug that stop-color not recognizing alpha #9014\n            var opacity = colorTool.parse(color)[3];\n            var hex = colorTool.toHex(color);\n\n            // stop-color cannot be color, since:\n            // The opacity value used for the gradient calculation is the\n            // *product* of the value of stop-opacity and the opacity of the\n            // value of stop-color.\n            // See https://www.w3.org/TR/SVG2/pservers.html#StopOpacityProperty\n            stop.setAttribute('stop-color', '#' + hex);\n            stop.setAttribute('stop-opacity', opacity);\n        }\n        else {\n            stop.setAttribute('stop-color', colors[i].color);\n        }\n\n        dom.appendChild(stop);\n    }\n\n    // Store dom element in gradient, to avoid creating multiple\n    // dom instances for the same gradient element\n    gradient._dom = dom;\n};\n\n/**\n * Mark a single gradient to be used\n *\n * @param {Displayable} displayable displayable element\n */\nGradientManager.prototype.markUsed = function (displayable) {\n    if (displayable.style) {\n        var gradient = displayable.style.fill;\n        if (gradient && gradient._dom) {\n            Definable.prototype.markUsed.call(this, gradient._dom);\n        }\n\n        gradient = displayable.style.stroke;\n        if (gradient && gradient._dom) {\n            Definable.prototype.markUsed.call(this, gradient._dom);\n        }\n    }\n};\n\n\nexport default GradientManager;\n","/**\n * @file Manages SVG clipPath elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport * as matrix from '../../core/matrix';\n\n/**\n * Manages SVG clipPath elements.\n *\n * @class\n * @extends Definable\n * @param   {number}     zrId    zrender instance id\n * @param   {SVGElement} svgRoot root of SVG document\n */\nfunction ClippathManager(zrId, svgRoot) {\n    Definable.call(this, zrId, svgRoot, 'clipPath', '__clippath_in_use__');\n}\n\n\nzrUtil.inherits(ClippathManager, Definable);\n\n\n/**\n * Update clipPath.\n *\n * @param {Displayable} displayable displayable element\n */\nClippathManager.prototype.update = function (displayable) {\n    var svgEl = this.getSvgElement(displayable);\n    if (svgEl) {\n        this.updateDom(svgEl, displayable.__clipPaths, false);\n    }\n\n    var textEl = this.getTextSvgElement(displayable);\n    if (textEl) {\n        // Make another clipPath for text, since it's transform\n        // matrix is not the same with svgElement\n        this.updateDom(textEl, displayable.__clipPaths, true);\n    }\n\n    this.markUsed(displayable);\n};\n\n\n/**\n * Create an SVGElement of displayable and create a <clipPath> of its\n * clipPath\n *\n * @param {Displayable} parentEl  parent element\n * @param {ClipPath[]}  clipPaths clipPaths of parent element\n * @param {boolean}     isText    if parent element is Text\n */\nClippathManager.prototype.updateDom = function (\n    parentEl,\n    clipPaths,\n    isText\n) {\n    if (clipPaths && clipPaths.length > 0) {\n        // Has clipPath, create <clipPath> with the first clipPath\n        var defs = this.getDefs(true);\n        var clipPath = clipPaths[0];\n        var clipPathEl;\n        var id;\n\n        var dom = isText ? '_textDom' : '_dom';\n\n        if (clipPath[dom]) {\n            // Use a dom that is already in <defs>\n            id = clipPath[dom].getAttribute('id');\n            clipPathEl = clipPath[dom];\n\n            // Use a dom that is already in <defs>\n            if (!defs.contains(clipPathEl)) {\n                // This happens when set old clipPath that has\n                // been previously removed\n                defs.appendChild(clipPathEl);\n            }\n        }\n        else {\n            // New <clipPath>\n            id = 'zr' + this._zrId + '-clip-' + this.nextId;\n            ++this.nextId;\n            clipPathEl = this.createElement('clipPath');\n            clipPathEl.setAttribute('id', id);\n            defs.appendChild(clipPathEl);\n\n            clipPath[dom] = clipPathEl;\n        }\n\n        // Build path and add to <clipPath>\n        var svgProxy = this.getSvgProxy(clipPath);\n        if (clipPath.transform\n            && clipPath.parent.invTransform\n            && !isText\n        ) {\n            /**\n             * If a clipPath has a parent with transform, the transform\n             * of parent should not be considered when setting transform\n             * of clipPath. So we need to transform back from parent's\n             * transform, which is done by multiplying parent's inverse\n             * transform.\n             */\n            // Store old transform\n            var transform = Array.prototype.slice.call(\n                clipPath.transform\n            );\n\n            // Transform back from parent, and brush path\n            matrix.mul(\n                clipPath.transform,\n                clipPath.parent.invTransform,\n                clipPath.transform\n            );\n            svgProxy.brush(clipPath);\n\n            // Set back transform of clipPath\n            clipPath.transform = transform;\n        }\n        else {\n            svgProxy.brush(clipPath);\n        }\n\n        var pathEl = this.getSvgElement(clipPath);\n\n        clipPathEl.innerHTML = '';\n        /**\n         * Use `cloneNode()` here to appendChild to multiple parents,\n         * which may happend when Text and other shapes are using the same\n         * clipPath. Since Text will create an extra clipPath DOM due to\n         * different transform rules.\n         */\n        clipPathEl.appendChild(pathEl.cloneNode());\n\n        parentEl.setAttribute('clip-path', 'url(#' + id + ')');\n\n        if (clipPaths.length > 1) {\n            // Make the other clipPaths recursively\n            this.updateDom(clipPathEl, clipPaths.slice(1), isText);\n        }\n    }\n    else {\n        // No clipPath\n        if (parentEl) {\n            parentEl.setAttribute('clip-path', 'none');\n        }\n    }\n};\n\n/**\n * Mark a single clipPath to be used\n *\n * @param {Displayable} displayable displayable element\n */\nClippathManager.prototype.markUsed = function (displayable) {\n    var that = this;\n    // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n    if (displayable.__clipPaths) {\n        zrUtil.each(displayable.__clipPaths, function (clipPath) {\n            if (clipPath._dom) {\n                Definable.prototype.markUsed.call(that, clipPath._dom);\n            }\n            if (clipPath._textDom) {\n                Definable.prototype.markUsed.call(that, clipPath._textDom);\n            }\n        });\n    }\n};\n\n\nexport default ClippathManager;\n","/**\n * @file Manages SVG shadow elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\n\n/**\n * Manages SVG shadow elements.\n *\n * @class\n * @extends Definable\n * @param   {number}     zrId    zrender instance id\n * @param   {SVGElement} svgRoot root of SVG document\n */\nfunction ShadowManager(zrId, svgRoot) {\n    Definable.call(\n        this,\n        zrId,\n        svgRoot,\n        ['filter'],\n        '__filter_in_use__',\n        '_shadowDom'\n    );\n}\n\n\nzrUtil.inherits(ShadowManager, Definable);\n\n\n/**\n * Create new shadow DOM for fill or stroke if not exist,\n * but will not update shadow if exists.\n *\n * @param {SvgElement}  svgElement   SVG element to paint\n * @param {Displayable} displayable  zrender displayable element\n */\nShadowManager.prototype.addWithoutUpdate = function (\n    svgElement,\n    displayable\n) {\n    if (displayable && hasShadow(displayable.style)) {\n\n        // Create dom in <defs> if not exists\n        var dom;\n        if (displayable._shadowDom) {\n            // Gradient exists\n            dom = displayable._shadowDom;\n\n            var defs = this.getDefs(true);\n            if (!defs.contains(displayable._shadowDom)) {\n                // _shadowDom is no longer in defs, recreate\n                this.addDom(dom);\n            }\n        }\n        else {\n            // New dom\n            dom = this.add(displayable);\n        }\n\n        this.markUsed(displayable);\n\n        var id = dom.getAttribute('id');\n        svgElement.style.filter = 'url(#' + id + ')';\n    }\n};\n\n\n/**\n * Add a new shadow tag in <defs>\n *\n * @param {Displayable} displayable  zrender displayable element\n * @return {SVGFilterElement} created DOM\n */\nShadowManager.prototype.add = function (displayable) {\n    var dom = this.createElement('filter');\n\n    // Set dom id with shadow id, since each shadow instance\n    // will have no more than one dom element.\n    // id may exists before for those dirty elements, in which case\n    // id should remain the same, and other attributes should be\n    // updated.\n    displayable._shadowDomId = displayable._shadowDomId || this.nextId++;\n    dom.setAttribute('id', 'zr' + this._zrId\n        + '-shadow-' + displayable._shadowDomId);\n\n    this.updateDom(displayable, dom);\n    this.addDom(dom);\n\n    return dom;\n};\n\n\n/**\n * Update shadow.\n *\n * @param {Displayable} displayable  zrender displayable element\n */\nShadowManager.prototype.update = function (svgElement, displayable) {\n    var style = displayable.style;\n    if (hasShadow(style)) {\n        var that = this;\n        Definable.prototype.update.call(this, displayable, function () {\n            that.updateDom(displayable, displayable._shadowDom);\n        });\n    }\n    else {\n        // Remove shadow\n        this.remove(svgElement, displayable);\n    }\n};\n\n\n/**\n * Remove DOM and clear parent filter\n */\nShadowManager.prototype.remove = function (svgElement, displayable) {\n    if (displayable._shadowDomId != null) {\n        this.removeDom(svgElement);\n        svgElement.style.filter = '';\n    }\n};\n\n\n/**\n * Update shadow dom\n *\n * @param {Displayable} displayable  zrender displayable element\n * @param {SVGFilterElement} dom DOM to update\n */\nShadowManager.prototype.updateDom = function (displayable, dom) {\n    var domChild = dom.getElementsByTagName('feDropShadow');\n    if (domChild.length === 0) {\n        domChild = this.createElement('feDropShadow');\n    }\n    else {\n        domChild = domChild[0];\n    }\n\n    var style = displayable.style;\n    var scaleX = displayable.scale ? (displayable.scale[0] || 1) : 1;\n    var scaleY = displayable.scale ? (displayable.scale[1] || 1) : 1;\n\n    // TODO: textBoxShadowBlur is not supported yet\n    var offsetX;\n    var offsetY;\n    var blur;\n    var color;\n    if (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY) {\n        offsetX = style.shadowOffsetX || 0;\n        offsetY = style.shadowOffsetY || 0;\n        blur = style.shadowBlur;\n        color = style.shadowColor;\n    }\n    else if (style.textShadowBlur) {\n        offsetX = style.textShadowOffsetX || 0;\n        offsetY = style.textShadowOffsetY || 0;\n        blur = style.textShadowBlur;\n        color = style.textShadowColor;\n    }\n    else {\n        // Remove shadow\n        this.removeDom(dom, style);\n        return;\n    }\n\n    domChild.setAttribute('dx', offsetX / scaleX);\n    domChild.setAttribute('dy', offsetY / scaleY);\n    domChild.setAttribute('flood-color', color);\n\n    // Divide by two here so that it looks the same as in canvas\n    // See: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowblur\n    var stdDx = blur / 2 / scaleX;\n    var stdDy = blur / 2 / scaleY;\n    var stdDeviation = stdDx + ' ' + stdDy;\n    domChild.setAttribute('stdDeviation', stdDeviation);\n\n    // Fix filter clipping problem\n    dom.setAttribute('x', '-100%');\n    dom.setAttribute('y', '-100%');\n    dom.setAttribute('width', Math.ceil(blur / 2 * 200) + '%');\n    dom.setAttribute('height', Math.ceil(blur / 2 * 200) + '%');\n\n    dom.appendChild(domChild);\n\n    // Store dom element in shadow, to avoid creating multiple\n    // dom instances for the same shadow element\n    displayable._shadowDom = dom;\n};\n\n/**\n * Mark a single shadow to be used\n *\n * @param {Displayable} displayable displayable element\n */\nShadowManager.prototype.markUsed = function (displayable) {\n    if (displayable._shadowDom) {\n        Definable.prototype.markUsed.call(this, displayable._shadowDom);\n    }\n};\n\nfunction hasShadow(style) {\n    // TODO: textBoxShadowBlur is not supported yet\n    return style\n        && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY\n            || style.textShadowBlur || style.textShadowOffsetX\n            || style.textShadowOffsetY);\n}\n\n\nexport default ShadowManager;\n","/**\n * SVG Painter\n * @module zrender/svg/Painter\n */\n\nimport {createElement} from './core';\nimport * as util from '../core/util';\nimport logError from '../core/log';\nimport Path from '../graphic/Path';\nimport ZImage from '../graphic/Image';\nimport ZText from '../graphic/Text';\nimport arrayDiff from '../core/arrayDiff2';\nimport GradientManager from './helper/GradientManager';\nimport ClippathManager from './helper/ClippathManager';\nimport ShadowManager from './helper/ShadowManager';\nimport {\n    path as svgPath,\n    image as svgImage,\n    text as svgText\n} from './graphic';\n\nfunction parseInt10(val) {\n    return parseInt(val, 10);\n}\n\nfunction getSvgProxy(el) {\n    if (el instanceof Path) {\n        return svgPath;\n    }\n    else if (el instanceof ZImage) {\n        return svgImage;\n    }\n    else if (el instanceof ZText) {\n        return svgText;\n    }\n    else {\n        return svgPath;\n    }\n}\n\nfunction checkParentAvailable(parent, child) {\n    return child && parent && child.parentNode !== parent;\n}\n\nfunction insertAfter(parent, child, prevSibling) {\n    if (checkParentAvailable(parent, child) && prevSibling) {\n        var nextSibling = prevSibling.nextSibling;\n        nextSibling ? parent.insertBefore(child, nextSibling)\n            : parent.appendChild(child);\n    }\n}\n\nfunction prepend(parent, child) {\n    if (checkParentAvailable(parent, child)) {\n        var firstChild = parent.firstChild;\n        firstChild ? parent.insertBefore(child, firstChild)\n            : parent.appendChild(child);\n    }\n}\n\n// function append(parent, child) {\n//     if (checkParentAvailable(parent, child)) {\n//         parent.appendChild(child);\n//     }\n// }\n\nfunction remove(parent, child) {\n    if (child && parent && child.parentNode === parent) {\n        parent.removeChild(child);\n    }\n}\n\nfunction getTextSvgElement(displayable) {\n    return displayable.__textSvgEl;\n}\n\nfunction getSvgElement(displayable) {\n    return displayable.__svgEl;\n}\n\n/**\n * @alias module:zrender/svg/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\nvar SVGPainter = function (root, storage, opts, zrId) {\n\n    this.root = root;\n    this.storage = storage;\n    this._opts = opts = util.extend({}, opts || {});\n\n    var svgRoot = createElement('svg');\n    svgRoot.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n    svgRoot.setAttribute('version', '1.1');\n    svgRoot.setAttribute('baseProfile', 'full');\n    svgRoot.style.cssText = 'user-select:none;position:absolute;left:0;top:0;';\n\n    this.gradientManager = new GradientManager(zrId, svgRoot);\n    this.clipPathManager = new ClippathManager(zrId, svgRoot);\n    this.shadowManager = new ShadowManager(zrId, svgRoot);\n\n    var viewport = document.createElement('div');\n    viewport.style.cssText = 'overflow:hidden;position:relative';\n\n    this._svgRoot = svgRoot;\n    this._viewport = viewport;\n\n    root.appendChild(viewport);\n    viewport.appendChild(svgRoot);\n\n    this.resize(opts.width, opts.height);\n\n    this._visibleList = [];\n};\n\nSVGPainter.prototype = {\n\n    constructor: SVGPainter,\n\n    getType: function () {\n        return 'svg';\n    },\n\n    getViewportRoot: function () {\n        return this._viewport;\n    },\n\n    getViewportRootOffset: function () {\n        var viewportRoot = this.getViewportRoot();\n        if (viewportRoot) {\n            return {\n                offsetLeft: viewportRoot.offsetLeft || 0,\n                offsetTop: viewportRoot.offsetTop || 0\n            };\n        }\n    },\n\n    refresh: function () {\n\n        var list = this.storage.getDisplayList(true);\n\n        this._paintList(list);\n    },\n\n    setBackgroundColor: function (backgroundColor) {\n        // TODO gradient\n        this._viewport.style.background = backgroundColor;\n    },\n\n    _paintList: function (list) {\n        this.gradientManager.markAllUnused();\n        this.clipPathManager.markAllUnused();\n        this.shadowManager.markAllUnused();\n\n        var svgRoot = this._svgRoot;\n        var visibleList = this._visibleList;\n        var listLen = list.length;\n\n        var newVisibleList = [];\n        var i;\n        for (i = 0; i < listLen; i++) {\n            var displayable = list[i];\n            var svgProxy = getSvgProxy(displayable);\n            var svgElement = getSvgElement(displayable)\n                || getTextSvgElement(displayable);\n            if (!displayable.invisible) {\n                if (displayable.__dirty) {\n                    svgProxy && svgProxy.brush(displayable);\n\n                    // Update clipPath\n                    this.clipPathManager.update(displayable);\n\n                    // Update gradient and shadow\n                    if (displayable.style) {\n                        this.gradientManager\n                            .update(displayable.style.fill);\n                        this.gradientManager\n                            .update(displayable.style.stroke);\n\n                        this.shadowManager\n                            .update(svgElement, displayable);\n                    }\n\n                    displayable.__dirty = false;\n                }\n                newVisibleList.push(displayable);\n            }\n        }\n\n        var diff = arrayDiff(visibleList, newVisibleList);\n        var prevSvgElement;\n\n        // First do remove, in case element moved to the head and do remove\n        // after add\n        for (i = 0; i < diff.length; i++) {\n            var item = diff[i];\n            if (item.removed) {\n                for (var k = 0; k < item.count; k++) {\n                    var displayable = visibleList[item.indices[k]];\n                    var svgElement = getSvgElement(displayable);\n                    var textSvgElement = getTextSvgElement(displayable);\n                    remove(svgRoot, svgElement);\n                    remove(svgRoot, textSvgElement);\n                }\n            }\n        }\n        for (i = 0; i < diff.length; i++) {\n            var item = diff[i];\n            if (item.added) {\n                for (var k = 0; k < item.count; k++) {\n                    var displayable = newVisibleList[item.indices[k]];\n                    var svgElement = getSvgElement(displayable);\n                    var textSvgElement = getTextSvgElement(displayable);\n                    prevSvgElement\n                        ? insertAfter(svgRoot, svgElement, prevSvgElement)\n                        : prepend(svgRoot, svgElement);\n                    if (svgElement) {\n                        insertAfter(svgRoot, textSvgElement, svgElement);\n                    }\n                    else if (prevSvgElement) {\n                        insertAfter(\n                            svgRoot, textSvgElement, prevSvgElement\n                        );\n                    }\n                    else {\n                        prepend(svgRoot, textSvgElement);\n                    }\n                    // Insert text\n                    insertAfter(svgRoot, textSvgElement, svgElement);\n                    prevSvgElement = textSvgElement || svgElement\n                        || prevSvgElement;\n\n                    // zrender.Text only create textSvgElement.\n                    this.gradientManager\n                        .addWithoutUpdate(svgElement || textSvgElement, displayable);\n                    this.shadowManager\n                        .addWithoutUpdate(svgElement || textSvgElement, displayable);\n                    this.clipPathManager.markUsed(displayable);\n                }\n            }\n            else if (!item.removed) {\n                for (var k = 0; k < item.count; k++) {\n                    var displayable = newVisibleList[item.indices[k]];\n                    prevSvgElement = getTextSvgElement(displayable)\n                        || getSvgElement(displayable) || prevSvgElement;\n\n                    var svgElement = getSvgElement(displayable);\n                    var textSvgElement = getTextSvgElement(displayable);\n\n                    this.gradientManager.markUsed(displayable);\n                    this.gradientManager\n                        .addWithoutUpdate(svgElement || textSvgElement, displayable);\n\n                    this.shadowManager.markUsed(displayable);\n                    this.shadowManager\n                        .addWithoutUpdate(svgElement || textSvgElement, displayable);\n\n                    this.clipPathManager.markUsed(displayable);\n                }\n            }\n        }\n\n        this.gradientManager.removeUnused();\n        this.clipPathManager.removeUnused();\n        this.shadowManager.removeUnused();\n\n        this._visibleList = newVisibleList;\n    },\n\n    _getDefs: function (isForceCreating) {\n        var svgRoot = this._svgRoot;\n        var defs = this._svgRoot.getElementsByTagName('defs');\n        if (defs.length === 0) {\n            // Not exist\n            if (isForceCreating) {\n                var defs = svgRoot.insertBefore(\n                    createElement('defs'), // Create new tag\n                    svgRoot.firstChild // Insert in the front of svg\n                );\n                if (!defs.contains) {\n                    // IE doesn't support contains method\n                    defs.contains = function (el) {\n                        var children = defs.children;\n                        if (!children) {\n                            return false;\n                        }\n                        for (var i = children.length - 1; i >= 0; --i) {\n                            if (children[i] === el) {\n                                return true;\n                            }\n                        }\n                        return false;\n                    };\n                }\n                return defs;\n            }\n            else {\n                return null;\n            }\n        }\n        else {\n            return defs[0];\n        }\n    },\n\n    resize: function (width, height) {\n        var viewport = this._viewport;\n        // FIXME Why ?\n        viewport.style.display = 'none';\n\n        // Save input w/h\n        var opts = this._opts;\n        width != null && (opts.width = width);\n        height != null && (opts.height = height);\n\n        width = this._getSize(0);\n        height = this._getSize(1);\n\n        viewport.style.display = '';\n\n        if (this._width !== width || this._height !== height) {\n            this._width = width;\n            this._height = height;\n\n            var viewportStyle = viewport.style;\n            viewportStyle.width = width + 'px';\n            viewportStyle.height = height + 'px';\n\n            var svgRoot = this._svgRoot;\n            // Set width by 'svgRoot.width = width' is invalid\n            svgRoot.setAttribute('width', width);\n            svgRoot.setAttribute('height', height);\n        }\n    },\n\n    /**\n     * 获取绘图区域宽度\n     */\n    getWidth: function () {\n        return this._width;\n    },\n\n    /**\n     * 获取绘图区域高度\n     */\n    getHeight: function () {\n        return this._height;\n    },\n\n    _getSize: function (whIdx) {\n        var opts = this._opts;\n        var wh = ['width', 'height'][whIdx];\n        var cwh = ['clientWidth', 'clientHeight'][whIdx];\n        var plt = ['paddingLeft', 'paddingTop'][whIdx];\n        var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n        if (opts[wh] != null && opts[wh] !== 'auto') {\n            return parseFloat(opts[wh]);\n        }\n\n        var root = this.root;\n        // IE8 does not support getComputedStyle, but it use VML.\n        var stl = document.defaultView.getComputedStyle(root);\n\n        return (\n            (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n            - (parseInt10(stl[plt]) || 0)\n            - (parseInt10(stl[prb]) || 0)\n        ) | 0;\n    },\n\n    dispose: function () {\n        this.root.innerHTML = '';\n\n        this._svgRoot =\n            this._viewport =\n            this.storage =\n            null;\n    },\n\n    clear: function () {\n        if (this._viewport) {\n            this.root.removeChild(this._viewport);\n        }\n    },\n\n    pathToDataUrl: function () {\n        this.refresh();\n        var html = this._svgRoot.outerHTML;\n        return 'data:image/svg+xml;charset=UTF-8,' + html;\n    }\n};\n\n// Not supported methods\nfunction createMethodNotSupport(method) {\n    return function () {\n        logError('In SVG mode painter not support method \"' + method + '\"');\n    };\n}\n\n// Unsuppoted methods\nutil.each([\n    'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer',\n    'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer',\n    'toDataURL', 'pathToImage'\n], function (name) {\n    SVGPainter.prototype[name] = createMethodNotSupport(name);\n});\n\nexport default SVGPainter;","import './graphic';\nimport {registerPainter} from '../zrender';\nimport Painter from './Painter';\n\nregisterPainter('svg', Painter);","/*\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\nexport * from './src/echarts';\nexport * from './src/export';\n\nimport './src/component/dataset';\n\n\n\n// ----------------------------------------------\n// All of the modules that are allowed to be\n// imported are listed below.\n//\n// Users MUST NOT import other modules that are\n// not included in this list.\n// ----------------------------------------------\n\n\n\n// ----------------\n// Charts (series)\n// ----------------\n\n\n\n// All of the series types, for example:\n// chart.setOption({\n//     series: [{\n//         type: 'line' // or 'bar', 'pie', ...\n//     }]\n// });\n\nimport './src/chart/line';\nimport './src/chart/bar';\nimport './src/chart/pie';\nimport './src/chart/scatter';\nimport './src/chart/radar';\nimport './src/chart/map';\nimport './src/chart/tree';\nimport './src/chart/treemap';\nimport './src/chart/graph';\nimport './src/chart/gauge';\nimport './src/chart/funnel';\nimport './src/chart/parallel';\nimport './src/chart/sankey';\nimport './src/chart/boxplot';\nimport './src/chart/candlestick';\nimport './src/chart/effectScatter';\nimport './src/chart/lines';\nimport './src/chart/heatmap';\nimport './src/chart/pictorialBar';\nimport './src/chart/themeRiver';\nimport './src/chart/sunburst';\nimport './src/chart/custom';\n\n\n\n// -------------------\n// Coordinate systems\n// -------------------\n\n\n\n// All of the axis modules have been included in the\n// coordinate system module below, do not need to\n// make extra import.\n\n// `cartesian` coordinate system. For some historical\n// reasons, it is named as grid, for example:\n// chart.setOption({\n//     grid: {...},\n//     xAxis: {...},\n//     yAxis: {...},\n//     series: [{...}]\n// });\nimport './src/component/grid';\n\n// `polar` coordinate system, for example:\n// chart.setOption({\n//     polar: {...},\n//     radiusAxis: {...},\n//     angleAxis: {...},\n//     series: [{\n//         coordinateSystem: 'polar'\n//     }]\n// });\nimport './src/component/polar';\n\n// `geo` coordinate system, for example:\n// chart.setOption({\n//     geo: {...},\n//     series: [{\n//         coordinateSystem: 'geo'\n//     }]\n// });\nimport './src/component/geo';\n\n// `singleAxis` coordinate system (notice, it is a coordinate system\n// with only one axis, work for chart like theme river), for example:\n// chart.setOption({\n//     singleAxis: {...}\n//     series: [{type: 'themeRiver', ...}]\n// });\nimport './src/component/singleAxis';\n\n// `parallel` coordinate system, only work for parallel series, for example:\n// chart.setOption({\n//     parallel: {...},\n//     parallelAxis: [{...}, ...],\n//     series: [{\n//         type: 'parallel'\n//     }]\n// });\nimport './src/component/parallel';\n\n// `calendar` coordinate system. for example,\n// chart.setOptionp({\n//     calendar: {...},\n//     series: [{\n//         coordinateSystem: 'calendar'\n//     }]\n// );\nimport './src/component/calendar';\n\n\n\n// ------------------\n// Other components\n// ------------------\n\n\n\n// `graphic` component, for example:\n// chart.setOption({\n//     graphic: {...}\n// });\nimport './src/component/graphic';\n\n// `toolbox` component, for example:\n// chart.setOption({\n//     toolbox: {...}\n// });\nimport './src/component/toolbox';\n\n// `tooltip` component, for example:\n// chart.setOption({\n//     tooltip: {...}\n// });\nimport './src/component/tooltip';\n\n// `axisPointer` component, for example:\n// chart.setOption({\n//     tooltip: {axisPointer: {...}, ...}\n// });\n// Or\n// chart.setOption({\n//     axisPointer: {...}\n// });\nimport './src/component/axisPointer';\n\n// `brush` component, for example:\n// chart.setOption({\n//     brush: {...}\n// });\n// Or\n// chart.setOption({\n//     tooltip: {feature: {brush: {...}}\n// })\nimport './src/component/brush';\n\n// `title` component, for example:\n// chart.setOption({\n//     title: {...}\n// });\nimport './src/component/title';\n\n// `timeline` component, for example:\n// chart.setOption({\n//     timeline: {...}\n// });\nimport './src/component/timeline';\n\n// `markPoint` component, for example:\n// chart.setOption({\n//     series: [{markPoint: {...}}]\n// });\nimport './src/component/markPoint';\n\n// `markLine` component, for example:\n// chart.setOption({\n//     series: [{markLine: {...}}]\n// });\nimport './src/component/markLine';\n\n// `markArea` component, for example:\n// chart.setOption({\n//     series: [{markArea: {...}}]\n// });\nimport './src/component/markArea';\n\n// `legend` component scrollable, for example:\n// chart.setOption({\n//     legend: {type: 'scroll'}\n// });\nimport './src/component/legendScroll';\n\n// `legend` component not scrollable. for example:\n// chart.setOption({\n//     legend: {...}\n// });\nimport './src/component/legend';\n\n// `dataZoom` component including both `dataZoomInside` and `dataZoomSlider`.\nimport './src/component/dataZoom';\n\n// `dataZoom` component providing drag, pinch, wheel behaviors\n// inside coodinate system, for example:\n// chart.setOption({\n//     dataZoom: {type: 'inside'}\n// });\nimport './src/component/dataZoomInside';\n\n// `dataZoom` component providing a slider bar, for example:\n// chart.setOption({\n//     dataZoom: {type: 'slider'}\n// });\nimport './src/component/dataZoomSlider';\n\n// `dataZoom` component including both `visualMapContinuous` and `visualMapPiecewise`.\nimport './src/component/visualMap';\n\n// `visualMap` component providing continuous bar, for example:\n// chart.setOption({\n//     visualMap: {type: 'continuous'}\n// });\nimport './src/component/visualMapContinuous';\n\n// `visualMap` component providing pieces bar, for example:\n// chart.setOption({\n//     visualMap: {type: 'piecewise'}\n// });\nimport './src/component/visualMapPiecewise';\n\n\n\n// -----------------\n// Render engines\n// -----------------\n\n\n\n// Provide IE 6,7,8 compatibility.\nimport 'zrender/src/vml/vml';\n\n// Render via SVG rather than canvas.\nimport 'zrender/src/svg/svg';\n"],"names":["isObject","each","isFunction","assert","clone","env","eventUtil.clientToLocal","dist","eventTool.stop","util.each","vec2.dist","util.mixin","ArrayCtor","create","copy","mul","scale","matrix.identity","matrix.create","matrix.mul","matrix.copy","matrix.invert","vector.applyTransform","matrix.scale","matrix.rotate","easing","easingFuncs","lerp","color.parse","logError","zrUtil.isObject","zrUtil.mixin","vec2.applyTransform","matrix.translate","zrUtil.indexOf","zrUtil.inherits","timsort","util.indexOf","util.createCanvas","util.isObject","DEFAULT_FONT","methods","$override","imageHelper.findExistImage","imageHelper.isImageReady","textContain.DEFAULT_FONT","textContain.makeFont","textContain.parsePlainText","textContain.adjustTextY","textContain.getWidth","textContain.adjustTextX","textContain.parseRichText","roundRectHelper.buildPath","imageHelper.createOrUpdateImage","textContain.calculateTextPosition","tmpRect","textHelper.normalizeTextStyle","textHelper.needDrawText","textHelper.renderText","util.extend","util.merge","Image","Dispatcher","zrUtil.map","zrUtil.each","zrUtil.bind","instances","version","init","dispose","HandlerProxy","isArray","zrUtil.isArray","zrUtil.createHashMap","zrUtil.assert","map","zrUtil.isString","parseClassType","zrUtil.extend","zrUtil.slice","mathSqrt","EPSILON","v2Create","isNotAroundZero","v2DistSquare","mathMin","mathMax","mathSin","mathCos","vec2.create","min","max","cubicExtrema","curve.cubicExtrema","cubicAt","curve.cubicAt","quadraticExtremum","curve.quadraticExtremum","quadraticAt","curve.quadraticAt","vec2.min","vec2.max","dpr","len","bbox.fromLine","bbox.fromCubic","bbox.fromQuadratic","bbox.fromArc","containStroke","curve.cubicProjectPoint","PI2","CMD","curve.cubicRootAt","curve.quadraticRootAt","line.containStroke","cubic.containStroke","quadratic.containStroke","arc.containStroke","pathContain.containStroke","pathContain.contain","defaults","v2ApplyTransform","mergePath","textContain.getBoundingRect","textHelper.getStroke","distance","v2Distance","v2Min","v2Max","v2Clone","v2Sub","v2Scale","v2Add","buildPath","polyHelper.buildPath","subPixelOptimizeLine","subPixelOptimize","subPixelOptimizeRect","subPixelOptimizeOutputShape","vec2.normalize","Displayble","pathTool.extendFromString","pathTool.createFromString","pathTool.mergePath","subPixelOptimizeUtil.subPixelOptimizeLine","subPixelOptimizeUtil.subPixelOptimizeRect","subPixelOptimizeUtil.subPixelOptimize","colorTool.lift","zrUtil.isFunction","zrUtil.retrieve2","zrUtil.trim","applyTransform","invert","zrUtil.isArrayLike","vector.clone","zrUtil.defaults","graphicUtil.getFont","mixin","zrUtil.merge","zrUtil.clone","parsePercent","round","zrUtil.reduce","normalizeCssArray","zrUtil.normalizeCssArray","numberUtil.parseDate","truncateText","textContain.truncateText","zrUtil.curry","formatUtil.normalizeCssArray","merge","inner","componentUtil.getUID","layout.getLayoutParams","layout.mergeLayoutParam","componentUtil.enableSubTypeDefaulter","componentUtil.enableTopologicalTravel","modelUtil.normalizeToArray","modelUtil.mappingToExists","modelUtil.makeIdAndName","modelUtil.isIdInner","zrUtil.isTypedArray","zrUtil.setAsPrimitive","modelUtil.TEXT_STYLE_OPTIONS","set","modelUtil.makeInner","modelUtil.defaultEmphasis","modelUtil.isNameSpecified","Component","clazzUtil.enableClassExtend","clazzUtil.enableClassManagement","graphicUtil.isHighDownDispatcher","modelUtil.queryDataIndex","graphicUtil.getHighlightDigit","PI","graphic.Rect","graphic.Arc","graphic.Group","ComponentView","theme","zrender.init","zrUtil.createCanvas","graphic.Image","modelUtil.parseFinder","colorTool.parse","colorTool.stringify","ChartView","modelUtil.setAttribute","zrender.version","zrUtil.isDom","modelUtil.getAttribute","CoordinateSystem","zrUtil.$override","zrUtil.noop","darkTheme","proto","roundNumber","numberUtil.round","numberUtil.nice","numberUtil.getPrecisionSafe","helper.getIntervalPrecision","helper.intervalScaleGetTicks","formatUtil.addCommas","helper.intervalScaleNiceTicks","formatUtil.formatTime","scaleHelper.fixExtent","scaleProto","intervalScaleProto","getPrecisionSafe","mathFloor","mathCeil","mathPow","numberUtil.quantity","numberUtil.parsePercent","zrUtil.eqNaN","graphic.extendShape","graphic.Line","graphic.Circle","graphic.makeImage","graphic.makePath","dataStack","axisHelper.createScaleByModel","axisHelper.niceScaleExtent","Model","isAroundEqual","contain","bbox.fromPoints","polygonContain.contain","zrUtil.filter","parseGeoJSON","graphic","graphicUtil","SymbolClz","graphic.updateProps","graphic.initProps","graphic.setLabelStyle","graphic.setHoverStyle","scaleAndAdd","vec2.scaleAndAdd","vec2.copy","vec2.sub","Polyline","Polygon","graphic.Sector","graphic.LinearGradient","zrUtil.mergeAll","formatUtil.truncateText","graphic.Text","graphic.setTextStyle","matrixUtil.identity","matrixUtil.rotate","matrixUtil.mul","curry","echarts.extendComponentView","axisPointerModelHelper.fixValue","axisPointerModelHelper.getAxisPointerModel","layout","zrUtil.retrieve","cartesianAxisHelper.layout","graphic.groupTransition","echarts.registerPreprocessor","echarts.registerVisual","echarts.registerLayout","layoutPoints","echarts.registerProcessor","echarts.PRIORITY","echarts.extendChartView","echarts.extendSeriesModel","dataSelectableMixin","graphic.Polyline","echarts.registerAction","RADIAN","IncrementalDisplayable","echarts.extendComponentModel","axisBuilderAttrs","graphic.Ring","graphic.Polygon","graphic.mergePath","createSymbol","symbolUtil.createSymbol","zrUtil.find","backwardCompat","points","i","parseGeoJson","getBoundingRect","bind","eventTool.isMiddleOrRightButtonOnMouseUpDown","interactionMutex.isTaken","graphic.CompoundPath","roamHelper.updateViewOnPan","roamHelper.updateViewOnZoom","graphic.Z2_EMPHASIS_LIFT","vector.copy","doConvert","layout.getLayoutRect","echarts.registerCoordinateSystem","symbolNeedsDraw","graphic.BezierCurve","separation","sep","layout.positionElement","layout.getAvailableSize","Group","Rect","helper\n            .retrieveTargetInfo","animationUtil.createWrap","helper.aboveViewRoot","noop","helper.retrieveTargetInfo","zrColor.fastLerp","zrColor.stringify","zrColor.modifyHSL","zrColor.modifyAlpha","zrColor.parse","mapVisual","helper.getPathToRoot","sort","vector.sub","vector.normalize","Line","zrUtil.retrieve3","LineGroup","makeSeriesScope","getSymbolSize","curveTool.quadraticAt","vec2.distSquare","mathAbs","quadraticSubdivide","curveTool.quadraticSubdivide","vec2.clone","graphic.modifyLabelStyle","normalize","simpleLayout","circularLayout","forceLayout","vec2.len","vec2.set","getViewRect","labelLayout","restrict","layoutUtil.getLayoutRect","graphic.applyTransform","AxisModel","numberUtil.asc","defaultOption","getAxisType","actionInfo","interactionMutex.take","interactionMutex.release","updateZ","trigger","getTransform","graphic.getTransform","graphic.transformDirection","graphicUtil.clipPointsByRect","AxisView","graphic.BoundingRect","brushHelper.makeRectPanelClipPath","brushHelper.makeRectIsTargetByCursor","brushHelper.makeLinearBrushOtherExtent","throttleUtil.createOrUpdate","opacityAccessPath","nodeOpacityPath","lineOpacityPath","getItemOpacity","fadeOutItem","fadeInItem","createGridClipShape","center","NORMAL_ITEM_STYLE_PATH","EMPHASIS_ITEM_STYLE_PATH","createNormalBox","createLarge","transInit","setLargeStyle","LargeArr","normalizeSymbolSize","matrix.clone","curveUtil.quadraticAt","quadraticDerivativeAt","curveUtil.quadraticDerivativeAt","vec2.lerp","lineContain.containStroke","quadraticContain.containStroke","HeatmapLayer","BAR_BORDER_WIDTH_QUERY","BarView","updateCommon","singleAxisHelper.layout","modelHelper.makeKey","globalListener.register","globalListener.unregister","updateProps","axisPointerModelHelper.getAxisInfo","graphic.createIcon","axisHelper.getAxisRawValue","viewHelper.buildElStyle","viewHelper.buildCartesianSingleLabelElOption","viewHelper.getTransformedPosition","viewHelper.makeLineShape","viewHelper.makeRectShape","axisPointerModelHelper.collect","pointerShapeBuilder","themeRiverLayout","completeTreeValue","ROOT_TO_NODE_ACTION","helper\n                .retrieveTargetInfo","initChildren","dataToCoordSize","CACHED_LABEL_STYLE_PROPERTIES","graphicUtil.CACHED_LABEL_STYLE_PROPERTIES","createOrUpdate","graphicUtil.makePath","graphicUtil.Image","graphicUtil.Text","graphicUtil.Group","graphicUtil.getShapeClass","graphicUtil.initProps","graphicUtil.updateProps","graphicUtil.setElementHoverStyle","graphicUtil.setAsHighDownDispatcher","graphicUtil.setTextStyle","getSeriesStackId","getAxisKey","elementList","selfBuilderAttrs","formatUtil.capitalFirst","viewHelper.buildLabelElOption","viewHelper.makeSectorShape","barPolar","formatUtil.formatTplSimple","createEl","layoutUtil.positionElement","layoutUtil.LOCATION_PARAMS","layoutUtil.mergeLayoutParam","layoutUtil.copyLayoutParams","register","get","featureManager.get","layoutBox","listComponentHelper.layout","listComponentHelper.makeBackground","lang","featureManager.register","trim","eventTool.addEventListener","indexOf","parseFinder","ATTR","clear","eachAxisDim","asc","helper.isCoordSupported","numberUtil.linearMap","numberUtil.getPixelPrecision","helper.eachAxisDim","helper.createLinkedNodesFinder","handlers","history.pop","history.push","history.count","history.clear","toCamelCase","formatUtil.toCamelCase","zrColor.toHex","eventUtil.normalizeEvent","makeDispatchAction","axisPointerViewHelper.getValueLabel","formatUtil.encodeHTML","formatUtil.formatTpl","visualSolution.createVisualMappings","visualSolution.applyVisual","visualSolution.replaceVisualOption","preprocessor","has","modelUtil.getDataItemValue","addCommas","encodeHTML","numberUtil.getPrecision","getAxisInfo","dataFilter","createList","markerHelper.dataTransform","markerHelper.dataFilter","markerHelper.dimValueGetter","markerHelper.getAxisInfo","markerHelper.numCalculate","dimValueGetter","retrieve","isInifinity","ifMarkLineHasOnlyDim","colorUtil.modifyAlpha","layoutUtil.box","mergeAndNormalizeLayoutParams","WH","XY","linearMap","throttle.createOrUpdate","throttle.clear","giveStore","dispatchAction","unregister","roams.generateCoordId","roams.register","roams.unregister","visualSolution.incrementalApplyVisual","helper.getItemAlign","getCursor","modelUtil.compressBatches","helper.makeHighDownBatch","layout.box","abs","Z_BASE","textHelper.parsePercent","length","vmlCore.createNode","vmlCore.doc","textContain.$override","doc","createNode","parseInt10","vmlCore.initVML","Painter","isAroundZero","pathDataToString","textHelper.getBoxPosition","getTextXForPadding","ZText","colorTool.toHex","remove","arrayDiff","createMethodNotSupport"],"mappings":"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AE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;KACrE,CAAC;;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AAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC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"}