{"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/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 useful in Path and Image element\n     * @type {boolean}\n     */\n    transformText: false,\n\n    /**\n     * Text rotate around position of Path or Image\n     * Only useful in Path and Image element and transformText is false.\n     */\n    textRotation: 0,\n\n    /**\n     * Text origin of text rotation, like [10, 40].\n     * Based on x, y of rect.\n     * Useful in label rotation of circular symbol.\n     * By default, this origin is textPosition.\n     * Can be 'center'.\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\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}\n *  Notice: for performance, do not calculate outerWidth util needed.\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\n    if (padding) {\n        outerHeight += padding[0] + padding[2];\n    }\n\n    if (text && truncate) {\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    };\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\nfunction 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 * 可绘制的图形基类\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     * Displayable 是否为脏，Painter 中会根据该标记判断是否需要是否需要重新绘制\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     * 图形是否可见，为true时不绘制图形，但是仍能触发鼠标事件\n     * If ignore drawing of the displayable object. Mouse event will still be triggered\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     * z层level，决定绘画在哪层canvas中\n     * @name module:/zrender/graphic/Displayable#zlevel\n     * @type {number}\n     * @default 0\n     */\n    zlevel: 0,\n\n    /**\n     * 是否可拖拽\n     * @name module:/zrender/graphic/Displayable#draggable\n     * @type {boolean}\n     * @default false\n     */\n    draggable: false,\n\n    /**\n     * 是否正在拖拽\n     * @name module:/zrender/graphic/Displayable#draggable\n     * @type {boolean}\n     * @default false\n     */\n    dragging: false,\n\n    /**\n     * 是否相应鼠标事件\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     * 图形绘制方法\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    // Interface\n    brush: function (ctx, prevEl) {},\n\n    /**\n     * 获取最小包围盒\n     * @return {module:zrender/core/BoundingRect}\n     */\n    // Interface\n    getBoundingRect: function () {},\n\n    /**\n     * 判断坐标 x, y 是否在图形上\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     * 判断坐标 x, y 是否在图形的包围盒上\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     * 标记图形元素为脏，并且在下一帧重绘\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     * 图形是否会触发事件\n     * If displayable object binded any event\n     * @return {boolean}\n     */\n    // TODO, 通过 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; // 避免页面选中的尴尬\n    domRoot.style.cssText = [\n        'position:relative',\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(this, 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(this, 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(this, 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.1';\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\nfunction quantityExponent(val) {\n    return Math.floor(Math.log(val) / Math.LN10);\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 instanceof 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.4.0';\n\nexport var dependencies = {\n    zrender: '4.1.1'\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        // Travel by inverted order to make sure order consistency\n        // when duplicate keys exists (consider newDataIndex.pop() below).\n        // For performance consideration, these code below do not look neat.\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.unshift();\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 (!this._indices) {\n        return rawIndex;\n    }\n\n    if (rawIndex >= this._rawCount || rawIndex < 0) {\n        return -1;\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.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\nexport function makeColumnLayout(barSeries) {\n    var seriesInfoList = [];\n    zrUtil.each(barSeries, function (seriesModel) {\n        var data = seriesModel.getData();\n        var cartesian = seriesModel.coordinateSystem;\n        var baseAxis = cartesian.getBaseAxis();\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 barWidth = parsePercent(\n            seriesModel.get('barWidth'), bandWidth\n        );\n        var barMaxWidth = parsePercent(\n            seriesModel.get('barMaxWidth'), 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            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 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, 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                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\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(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 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\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} 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\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        fixOnBandTicksCoords(\n            this, ticksCoords, result.tickCategoryInterval, 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, tickCategoryInterval, 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    if (ticksLen === 1) {\n        ticksCoords[0].coord = axisExtent[0];\n        last = ticksCoords[1] = {coord: axisExtent[0]};\n    }\n    else {\n        var shift = (ticksCoords[1].coord - ticksCoords[0].coord);\n        each(ticksCoords, function (ticksItem) {\n            ticksItem.coord -= shift / 2;\n            var tickCategoryInterval = tickCategoryInterval || 0;\n            // Avoid split a single data item when odd interval.\n            if (tickCategoryInterval % 2 > 0) {\n                ticksItem.coord -= shift / ((tickCategoryInterval + 1) * 2);\n            }\n        });\n        last = {coord: ticksCoords[ticksLen - 1].coord + shift};\n        ticksCoords.push(last);\n    }\n\n    var inverse = axisExtent[0] > axisExtent[1];\n\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        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\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 {createGridClipPath, createPolarClipPath, createClipPath};","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\n// A helper function to calculate extent of axis.\nfunction getAxisExtentWithGap(axis) {\n    var extent = axis.getGlobalExtent();\n    if (axis.onBand) {\n        // Remove extra 1px to avoid line miter in clipped edge\n        var halfBandWidth = axis.getBandWidth() / 2 - 1;\n        var dir = extent[1] > extent[0] ? 1 : -1;\n        extent[0] += dir * halfBandWidth;\n        extent[1] -= dir * halfBandWidth;\n    }\n    return extent;\n}\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        // 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});\n","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* 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 {__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';\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        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                    data, dataIndex, itemModel, layout, isHorizontalOrRadial, animationModel\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                        data, newIndex, itemModel, layout, isHorizontalOrRadial, animationModel, true\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        data, dataIndex, itemModel, 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        data, dataIndex, itemModel, layout, isRadial,\n        animationModel, isUpdate\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        var sector = new graphic.Sector({\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';\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, 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 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                axisLabel: axisLabel,\n                // Competitable 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        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* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* 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        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        fixNanhai(mapName, regions);\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        symbolPath.setStyle({\n            textPosition: textPosition,\n            textRotation: -rad,\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* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* 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* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* 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\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 friction = 0.6;\n\n    return {\n        warmUp: function () {\n            friction = 0.5;\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                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* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* 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                return {\n                    n1: nodes[edge.node1.dataIndex],\n                    n2: nodes[edge.node2.dataIndex],\n                    d: d,\n                    curveness: edge.getModel().get('lineStyle.curveness') || 0\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            });\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* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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        var dataOpt = option.data || [];\n        if (!zrUtil.isArray(dataOpt)) {\n            dataOpt = [dataOpt];\n        }\n        option.data = dataOpt;\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 {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.call(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 localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\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: handleDragEnd //,\n\n    // FIXME\n    // in tooltip, globalout should not be triggered.\n    // globalout: handleDragEnd\n};\n\nfunction handleDragEnd(e) {\n    if (this._dragging) {\n\n        preventDefault(e);\n\n        var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\n        var eventParams = updateCoverByMouse(this, e, localCursorPoint, true);\n\n        this._dragging = false;\n        this._track = [];\n        this._creatingCover = null;\n\n        // trigger event shoule be at final, after procedure will be nested.\n        eventParams && trigger(this, 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        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';\n\nvar NORMAL_ITEM_STYLE_PATH = ['itemStyle'];\nvar EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'];\nvar SKIP_PROPS = ['color', 'color0', 'borderColor', 'borderColor0'];\n\n\nvar CandlestickView = ChartView.extend({\n\n    type: 'candlestick',\n\n    render: function (seriesModel, ecModel, api) {\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        // 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                    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                    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 (!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        createLarge(seriesModel, this.group);\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\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 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.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\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                // angleAxis must be clamped.\n                var angleSpan = valueAxis.dataToAngle(value, true) - 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    var radius = parsePercent(polarModel.get('radius'), size);\n    radiusAxis.inverse\n        ? radiusAxis.setExtent(radius, 0)\n        : radiusAxis.setExtent(0, radius);\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        var circle = new graphic.Circle({\n            shape: {\n                cx: polar.cx,\n                cy: polar.cy,\n                r: radiusExtent[getRadiusIdx(polar)]\n            },\n            style: lineStyleModel.getLineStyle(),\n            z2: 1,\n            silent: true\n        });\n        circle.style.fill = null;\n\n        this.group.add(circle);\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                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                            path.setStyle({\n                                text: titles[iconName],\n                                textPosition: iconStyleEmphasisModel.get('textPosition') || 'bottom',\n                                textFill: iconStyleEmphasisModel.get('textFill')\n                                    || hoverStyle.fill || hoverStyle.stroke || '#000',\n                                textAlign: iconStyleEmphasisModel.get('textAlign') || 'center',\n                                textBackgroundColor: iconStyleEmphasisModel.get('textBackgroundColor'),\n                                textBorderRadius: iconStyleEmphasisModel.get('textBorderRadius'),\n                                textPadding: iconStyleEmphasisModel.get('textPadding')\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         * 'percent' or 'value'\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    }\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* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  You may obtain a copy of the License at\n*\n*   http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* 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 = function (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\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                    && !isAroundZero(dThetaPositive);\n\n                var large = false;\n                if (dThetaPositive >= PI2) {\n                    large = true;\n                }\n                else if (isAroundZero(dThetaPositive)) {\n                    large = false;\n                }\n                else {\n                    large = (dTheta > -PI && dTheta < 0 || dTheta > PI)\n                        === !!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 tmpRect = new BoundingRect();\nvar tmpTextPositionResult = {};\n\nvar svgTextDrawRectText = function (el, rect, textRect) {\n    var style = el.style;\n\n    el.__dirty && textHelper.normalizeTextStyle(style, true);\n\n    var text = style.text;\n    // Convert to string\n    if (text == null) {\n        // Draw no text only when text is set to null, but not ''\n        return;\n    }\n    else {\n        text += '';\n    }\n\n    var textSvgEl = el.__textSvgEl;\n    if (!textSvgEl) {\n        textSvgEl = createElement('text');\n        el.__textSvgEl = textSvgEl;\n    }\n\n    var x;\n    var y;\n    var textPosition = style.textPosition;\n    var align = style.textAlign || 'left';\n\n    if (typeof style.fontSize === 'number') {\n        style.fontSize += 'px';\n    }\n    var font = style.font\n        || [\n            style.fontStyle || '',\n            style.fontWeight || '',\n            style.fontSize || '',\n            style.fontFamily || ''\n        ].join(' ')\n        || textContain.DEFAULT_FONT;\n\n    var verticalAlign = style.textVerticalAlign;\n\n    textRect = textContain.getBoundingRect(\n        text, font, align,\n        verticalAlign, style.textPadding, style.textLineHeight,\n        false, style.truncate\n    );\n\n    var lineHeight = textRect.lineHeight;\n    // Text position represented by coord\n    if (textPosition instanceof Array) {\n        x = rect.x + textHelper.parsePercent(textPosition[0], rect.width);\n        y = rect.y + textHelper.parsePercent(textPosition[1], rect.height);\n    }\n    else {\n        var newPos = el.calculateTextPosition\n            ? el.calculateTextPosition(tmpTextPositionResult, style, rect)\n            : textContain.calculateTextPosition(tmpTextPositionResult, style, rect);\n        x = newPos.x;\n        y = newPos.y;\n        verticalAlign = newPos.textVerticalAlign;\n        align = newPos.textAlign;\n    }\n\n    setVerticalAlign(textSvgEl, verticalAlign);\n\n    if (font) {\n        textSvgEl.style.font = font;\n    }\n\n    var textPadding = style.textPadding;\n\n    // Make baseline top\n    attr(textSvgEl, 'x', x);\n    attr(textSvgEl, 'y', y);\n\n    bindStyle(textSvgEl, style, true, el);\n    if (el instanceof Text || el.style.transformText) {\n        // Transform text with element\n        setTransform(textSvgEl, el.transform);\n    }\n    else {\n        if (el.transform) {\n            tmpRect.copy(rect);\n            tmpRect.applyTransform(el.transform);\n            rect = tmpRect;\n        }\n        else {\n            var pos = el.transformCoordToGlobal(rect.x, rect.y);\n            rect.x = pos[0];\n            rect.y = pos[1];\n            el.transform = matrix.identity(matrix.create());\n        }\n\n        // Text rotation, but no element transform\n        var origin = style.textOrigin;\n        if (origin === 'center') {\n            x = textRect.width / 2 + x;\n            y = textRect.height / 2 + y;\n        }\n        else if (origin) {\n            x = origin[0] + x;\n            y = origin[1] + y;\n        }\n        var rotate = -style.textRotation || 0;\n        var transform = matrix.create();\n        // Apply textRotate to element matrix\n        matrix.rotate(transform, transform, rotate);\n\n        var pos = [el.transform[4], el.transform[5]];\n        matrix.translate(transform, transform, pos);\n        setTransform(textSvgEl, transform);\n    }\n\n    var contentBlock = textContain.parsePlainText(\n        text, font, textPadding, lineHeight, style.truncate);\n\n    var textLines = contentBlock.lines;\n    var nTextLines = textLines.length;\n    var textAnchor = align;\n    // PENDING\n    if (textAnchor === 'left') {\n        textAnchor = 'start';\n        textPadding && (x += textPadding[3]);\n    }\n    else if (textAnchor === 'right') {\n        textAnchor = 'end';\n        textPadding && (x -= textPadding[1]);\n    }\n    else if (textAnchor === 'center') {\n        textAnchor = 'middle';\n        textPadding && (x += (textPadding[3] - textPadding[1]) / 2);\n    }\n\n    var dy = 0;\n    if (verticalAlign === 'bottom') {\n        dy = -textRect.height + lineHeight;\n        textPadding && (dy -= textPadding[2]);\n    }\n    else if (verticalAlign === 'middle') {\n        dy = (-textRect.height + lineHeight) / 2;\n        textPadding && (y += (textPadding[0] - textPadding[2]) / 2);\n    }\n    else {\n        textPadding && (dy += textPadding[0]);\n    }\n\n    // Font may affect position of each tspan elements\n    if (el.__text !== text || el.__textFont !== font) {\n        var tspanList = el.__tspanList || [];\n        el.__tspanList = tspanList;\n        for (var i = 0; i < nTextLines; i++) {\n            // Using cached tspan elements\n            var tspan = tspanList[i];\n            if (!tspan) {\n                tspan = tspanList[i] = createElement('tspan');\n                textSvgEl.appendChild(tspan);\n                setVerticalAlign(tspan, verticalAlign);\n                attr(tspan, 'text-anchor', textAnchor);\n            }\n            else {\n                tspan.innerHTML = '';\n            }\n            attr(tspan, 'x', x);\n            attr(tspan, 'y', y + i * lineHeight + dy);\n            tspan.appendChild(document.createTextNode(textLines[i]));\n        }\n        // Remove unsed tspan elements\n        for (; i < tspanList.length; i++) {\n            textSvgEl.removeChild(tspanList[i]);\n        }\n        tspanList.length = nTextLines;\n\n        el.__text = text;\n        el.__textFont = font;\n    }\n    else if (el.__tspanList.length) {\n        // Update span x and y\n        var len = el.__tspanList.length;\n        for (var i = 0; i < len; ++i) {\n            var tspan = el.__tspanList[i];\n            if (tspan) {\n                attr(tspan, 'x', x);\n                attr(tspan, 'y', y + i * lineHeight + dy);\n            }\n        }\n    }\n};\n\nfunction setVerticalAlign(textSvgEl, verticalAlign) {\n    switch (verticalAlign) {\n        case 'middle':\n            attr(textSvgEl, 'dominant-baseline', 'middle');\n            attr(textSvgEl, 'alignment-baseline', 'middle');\n            break;\n\n        case 'bottom':\n            attr(textSvgEl, 'dominant-baseline', 'ideographic');\n            attr(textSvgEl, 'alignment-baseline', 'ideographic');\n            break;\n\n        default:\n            attr(textSvgEl, 'dominant-baseline', 'hanging');\n            attr(textSvgEl, 'alignment-baseline', 'hanging');\n    }\n}\n\nsvgText.drawRectText = svgTextDrawRectText;\n\nsvgText.brush = function (el) {\n    var style = el.style;\n    if (style.text != null) {\n        // 强制设置 textPosition\n        style.textPosition = [0, 0];\n        svgTextDrawRectText(el, {\n            x: style.x || 0, y: style.y || 0,\n            width: 0, height: 0\n        }, el.getBoundingRect());\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        var style = displayable.style;\n\n        // Create dom in <defs> if not exists\n        var dom;\n        if (style._shadowDom) {\n            // Gradient exists\n            dom = style._shadowDom;\n\n            var defs = this.getDefs(true);\n            if (!defs.contains(style._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    var style = displayable.style;\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    style._shadowDomId = style._shadowDomId || this.nextId++;\n    dom.setAttribute('id', 'zr' + this._zrId\n        + '-shadow-' + style._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 (style) {\n            that.updateDom(displayable, style._shadowDom);\n        });\n    }\n    else {\n        // Remove shadow\n        this.remove(svgElement, style);\n    }\n};\n\n\n/**\n * Remove DOM and clear parent filter\n */\nShadowManager.prototype.remove = function (svgElement, style) {\n    if (style._shadowDomId != null) {\n        this.removeDom(style);\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    style._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    var style = displayable.style;\n    if (style && style._shadowDom) {\n        Definable.prototype.markUsed.call(this, style._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                    this.gradientManager\n                        .addWithoutUpdate(svgElement, displayable);\n                    this.shadowManager\n                        .addWithoutUpdate(prevSvgElement, 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 =\n                        svgElement =\n                        getTextSvgElement(displayable)\n                        || getSvgElement(displayable)\n                        || prevSvgElement;\n\n                    this.gradientManager.markUsed(displayable);\n                    this.gradientManager\n                        .addWithoutUpdate(svgElement, displayable);\n\n                    this.shadowManager.markUsed(displayable);\n                    this.shadowManager\n                        .addWithoutUpdate(svgElement, 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// `grapchic` 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","length","vmlCore.createNode","vmlCore.doc","textContain.$override","doc","createNode","parseInt10","vmlCore.initVML","Painter","isAroundZero","pathDataToString","textHelper.parsePercent","rotate","ZText","colorTool.toHex","remove","arrayDiff","createMethodNotSupport"],"mappings":";;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,IAAI,GAAG,CAAC;;;AAGR,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC/B,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;CACxB;;KAEI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACpC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;CACxB;;AAED,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;IAC5B,GAAG,GAAG,IAAI,CAAC;CACd;;AAED,AAAO,IAAI,OAAO,GAAG,GAAG;;ACxCxB;;;;;;AAMA,IAAI,OAAO,GAAG,MAAM,CAAC;;AAErB,WAAe,YAAY;IACvB,OAAO,OAAO,EAAE,CAAC;;;ACTrB;;;;;;;;;;AAUA,IAAI,GAAG,GAAG,EAAE,CAAC;;AAEb,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,CAAC,iBAAiB,KAAK,UAAU,EAAE;;IAEtE,GAAG,GAAG;QACF,OAAO,EAAE,EAAE;QACX,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,IAAI;QACT,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,KAAK;QACnB,oBAAoB,EAAE,IAAI;QAC1B,YAAY,EAAE,KAAK;KACtB,CAAC;CACL;KACI,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;;IAErE,GAAG,GAAG;QACF,OAAO,EAAE,EAAE;QACX,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,IAAI;QACZ,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,KAAK;KACtB,CAAC;CACL;KACI,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;;IAEvC,GAAG,GAAG;QACF,OAAO,EAAE,EAAE;QACX,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,IAAI;QACV,MAAM,EAAE,KAAK;;QAEb,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,IAAI;QAClB,YAAY,EAAE,KAAK;KACtB,CAAC;CACL;KACI;IACD,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;CACrC;;AAED,YAAe,GAAG,CAAC;;;;;;AAMnB,SAAS,MAAM,CAAC,EAAE,EAAE;IAChB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,IAAI,OAAO,GAAG,EAAE,CAAC;;;;;;;;;;;;;;;IAejB,IAAI,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;;;IAG5C,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC;;WAE5B,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC7C,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;;IAEtC,IAAI,MAAM,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;IAwB1C,IAAI,OAAO,EAAE;QACT,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;KAChC;;;;IAID,IAAI,EAAE,EAAE;QACJ,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC;QAClB,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;KAC3B;;IAED,IAAI,IAAI,EAAE;QACN,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACpB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;KAC7B;;;;IAID,IAAI,MAAM,EAAE;QACR,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;KACzB;;;;;;;;IAQD,OAAO;QACH,OAAO,EAAE,OAAO;QAChB,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,KAAK;;;QAGX,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,UAAU;QAC9D,YAAY,EAAE,OAAO,OAAO,KAAK,WAAW;;;;QAI5C,oBAAoB,EAAE,cAAc,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;;QAE9E,sBAAsB,EAAE,eAAe,IAAI,MAAM;;;;;gBAKzC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;;QAE9D,YAAY,EAAE,OAAO,QAAQ,KAAK,WAAW;KAChD,CAAC;CACL;;;;;;;;;;;;;;;;IAgBG;;AC/KJ;;;;;AAKA,IAAI,cAAc,GAAG;IACjB,mBAAmB,EAAE,CAAC;IACtB,iBAAiB,EAAE,CAAC;IACpB,eAAe,EAAE,CAAC;IAClB,gBAAgB,EAAE,CAAC;IACnB,yBAAyB,EAAE,CAAC;IAC5B,wBAAwB,EAAE,CAAC;;IAE3B,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,EAAE,CAAC;CACvB,CAAC;;AAEF,IAAI,WAAW,GAAG;IACd,oBAAoB,EAAE,CAAC;IACvB,qBAAqB,EAAE,CAAC;IACxB,4BAA4B,EAAE,CAAC;IAC/B,qBAAqB,EAAE,CAAC;IACxB,sBAAsB,EAAE,CAAC;IACzB,qBAAqB,EAAE,CAAC;IACxB,sBAAsB,EAAE,CAAC;IACzB,uBAAuB,EAAE,CAAC;IAC1B,uBAAuB,EAAE,CAAC;CAC7B,CAAC;;AAEF,IAAI,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;;AAE5C,IAAI,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC;AACjC,IAAI,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC;AACvC,IAAI,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;AACrC,IAAI,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC;AACnC,IAAI,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC;AAC/B,IAAI,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC;;;AAGrC,IAAI,OAAO,GAAG,EAAE,CAAC;;AAEjB,AAAO,SAAS,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE;;IAEhC,IAAI,IAAI,KAAK,cAAc,EAAE;QACzB,IAAI,GAAG,IAAI,CAAC;KACf;;IAED,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;CACtB;;;;;;;;;;;;;;;;;;AAkBD,AAAO,SAAS,KAAK,CAAC,MAAM,EAAE;IAC1B,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;QAC9C,OAAO,MAAM,CAAC;KACjB;;IAED,IAAI,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;IAEvC,IAAI,OAAO,KAAK,gBAAgB,EAAE;QAC9B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;YACtB,MAAM,GAAG,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC/C,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAChC;SACJ;KACJ;SACI,IAAI,WAAW,CAAC,OAAO,CAAC,EAAE;QAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;YACtB,IAAI,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;YAC9B,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;gBACzB,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC9B;iBACI;gBACD,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC/C,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;iBAChC;aACJ;SACJ;KACJ;SACI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACzE,MAAM,GAAG,EAAE,CAAC;QACZ,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;YACpB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;aACpC;SACJ;KACJ;;IAED,OAAO,MAAM,CAAC;CACjB;;;;;;;;AAQD,AAAO,SAAS,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;;;IAG7C,IAAI,CAACA,UAAQ,CAAC,MAAM,CAAC,IAAI,CAACA,UAAQ,CAAC,MAAM,CAAC,EAAE;QACxC,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;KAC7C;;IAED,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;QACpB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YAC5B,IAAI,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;;YAE7B,IAAIA,UAAQ,CAAC,UAAU,CAAC;mBACjBA,UAAQ,CAAC,UAAU,CAAC;mBACpB,CAAC,OAAO,CAAC,UAAU,CAAC;mBACpB,CAAC,OAAO,CAAC,UAAU,CAAC;mBACpB,CAAC,KAAK,CAAC,UAAU,CAAC;mBAClB,CAAC,KAAK,CAAC,UAAU,CAAC;mBAClB,CAAC,eAAe,CAAC,UAAU,CAAC;mBAC5B,CAAC,eAAe,CAAC,UAAU,CAAC;mBAC5B,CAAC,WAAW,CAAC,UAAU,CAAC;mBACxB,CAAC,WAAW,CAAC,UAAU,CAAC;cAC7B;;gBAEE,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;aAC5C;iBACI,IAAI,SAAS,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE;;;gBAGpC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;aAC1C;SACJ;KACJ;;IAED,OAAO,MAAM,CAAC;CACjB;;;;;;;AAOD,AAAO,SAAS,QAAQ,CAAC,gBAAgB,EAAE,SAAS,EAAE;IAClD,IAAI,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QACzD,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;KAC1D;IACD,OAAO,MAAM,CAAC;CACjB;;;;;;;AAOD,AAAO,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE;IACnC,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;QACpB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SAC7B;KACJ;IACD,OAAO,MAAM,CAAC;CACjB;;;;;;;;AAQD,AAAO,SAAS,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAC9C,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE;QACpB,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC;gBACtB,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;UAC1D;YACE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;SAC7B;KACJ;IACD,OAAO,MAAM,CAAC;CACjB;;AAED,AAAO,IAAI,YAAY,GAAG,YAAY;IAClC,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;CACjC,CAAC;;AAEF,OAAO,CAAC,YAAY,GAAG,YAAY;IAC/B,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;CAC3C,CAAC;;;AAGF,IAAI,IAAI,CAAC;;AAET,AAAO,SAAS,UAAU,GAAG;IACzB,IAAI,CAAC,IAAI,EAAE;;;QAGP,IAAI,GAAG,YAAY,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KAC1C;IACD,OAAO,IAAI,CAAC;CACf;;;;;;AAMD,AAAO,SAAS,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE;IAClC,IAAI,KAAK,EAAE;QACP,IAAI,KAAK,CAAC,OAAO,EAAE;YACf,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;SAC/B;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC9C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;gBACpB,OAAO,CAAC,CAAC;aACZ;SACJ;KACJ;IACD,OAAO,CAAC,CAAC,CAAC;CACb;;;;;;;;;AASD,AAAO,SAAS,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE;IACvC,IAAI,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE;IACf,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IAClC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;;IAE1B,KAAK,IAAI,IAAI,IAAI,cAAc,EAAE;QAC7B,IAAI,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACrC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;SAChD;KACJ;IACD,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,KAAK,CAAC;IACpC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;CAChC;;;;;;;;AAQD,AAAO,SAAS,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;IAC3C,MAAM,GAAG,WAAW,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;IAC3D,MAAM,GAAG,WAAW,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;;IAE3D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;;;;;;AAMD,AAAO,SAAS,WAAW,CAAC,IAAI,EAAE;IAC9B,IAAI,CAAC,IAAI,EAAE;QACP,OAAO;KACV;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,OAAO,KAAK,CAAC;KAChB;IACD,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;CAC1C;;;;;;;;;AASD,AAAO,SAASC,MAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE;IACnC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;QACd,OAAO;KACV;IACD,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,aAAa,EAAE;QAC9C,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;KAC5B;SACI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5C,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;SACpC;KACJ;SACI;QACD,KAAK,IAAI,GAAG,IAAI,GAAG,EAAE;YACjB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBACzB,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;aACxC;SACJ;KACJ;CACJ;;;;;;;;;;AAUD,AAAO,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE;IAClC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;QACd,OAAO;KACV;IACD,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE;QAClC,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;KAC/B;SACI;QACD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SACjD;QACD,OAAO,MAAM,CAAC;KACjB;CACJ;;;;;;;;;;AAUD,AAAO,SAAS,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;IAC3C,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;QACd,OAAO;KACV;IACD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE;QAC3C,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;KACxC;SACI;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;SACjD;QACD,OAAO,IAAI,CAAC;KACf;CACJ;;;;;;;;;;AAUD,AAAO,SAAS,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE;IACrC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;QACd,OAAO;KACV;IACD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE;QAC3C,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;KAClC;SACI;QACD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;gBAClC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACvB;SACJ;QACD,OAAO,MAAM,CAAC;KACjB;CACJ;;;;;;;;;;AAUD,AAAO,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE;IACnC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE;QACd,OAAO;KACV;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC5C,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;YAClC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;SACjB;KACJ;CACJ;;;;;;;;AAQD,AAAO,SAAS,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE;IAChC,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO,YAAY;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KACxE,CAAC;CACL;;;;;;;AAOD,AAAO,SAAS,KAAK,CAAC,IAAI,EAAE;IACxB,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO,YAAY;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KACrE,CAAC;CACL;;;;;;;AAOD,AAAO,SAAS,OAAO,CAAC,KAAK,EAAE;IAC3B,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAC;CACvD;;;;;;;AAOD,AAAO,SAASC,YAAU,CAAC,KAAK,EAAE;IAC9B,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;CACtC;;;;;;;AAOD,AAAO,SAAS,QAAQ,CAAC,KAAK,EAAE;IAC5B,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;CACxD;;;;;;;AAOD,AAAO,SAASF,UAAQ,CAAC,KAAK,EAAE;;;IAG5B,IAAI,IAAI,GAAG,OAAO,KAAK,CAAC;IACxB,OAAO,IAAI,KAAK,UAAU,KAAK,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC;CAChE;;;;;;;AAOD,AAAO,SAAS,eAAe,CAAC,KAAK,EAAE;IACnC,OAAO,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CACpD;;;;;;;AAOD,AAAO,SAAS,YAAY,CAAC,KAAK,EAAE;IAChC,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CACjD;;;;;;;AAOD,AAAO,SAAS,KAAK,CAAC,KAAK,EAAE;IACzB,OAAO,OAAO,KAAK,KAAK,QAAQ;WACzB,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ;WAClC,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,CAAC;CAClD;;;;;;;AAOD,AAAO,SAAS,KAAK,CAAC,KAAK,EAAE;;IAEzB,OAAO,KAAK,KAAK,KAAK,CAAC;CAC1B;;;;;;;;AAQD,AAAO,SAAS,QAAQ,CAAC,MAAM,EAAE;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAClD,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;YACtB,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;SACvB;KACJ;CACJ;;AAED,AAAO,SAAS,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE;IACtC,OAAO,MAAM,IAAI,IAAI;UACf,MAAM;UACN,MAAM,CAAC;CAChB;;AAED,AAAO,SAAS,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;IAC9C,OAAO,MAAM,IAAI,IAAI;UACf,MAAM;UACN,MAAM,IAAI,IAAI;UACd,MAAM;UACN,MAAM,CAAC;CAChB;;;;;;;;;AASD,AAAO,SAAS,KAAK,GAAG;IACpB,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;CACtD;;;;;;;;;;;AAWD,AAAO,SAAS,iBAAiB,CAAC,GAAG,EAAE;IACnC,IAAI,QAAQ,GAAG,CAAC,KAAK,QAAQ,EAAE;QAC3B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;KAC/B;IACD,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,IAAI,GAAG,KAAK,CAAC,EAAE;;QAEX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;SACI,IAAI,GAAG,KAAK,CAAC,EAAE;;QAEhB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C;IACD,OAAO,GAAG,CAAC;CACd;;;;;;;AAOD,AAAO,SAASG,QAAM,CAAC,SAAS,EAAE,OAAO,EAAE;IACvC,IAAI,CAAC,SAAS,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;KAC5B;CACJ;;;;;;;AAOD,AAAO,SAAS,IAAI,CAAC,GAAG,EAAE;IACtB,IAAI,GAAG,IAAI,IAAI,EAAE;QACb,OAAO,IAAI,CAAC;KACf;SACI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE;QACrC,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;KACrB;SACI;QACD,OAAO,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;KAChE;CACJ;;AAED,IAAI,YAAY,GAAG,kBAAkB,CAAC;;;;AAItC,AAAO,SAAS,cAAc,CAAC,GAAG,EAAE;IAChC,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;CAC5B;;AAED,AAAO,SAAS,WAAW,CAAC,GAAG,EAAE;IAC7B,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;CAC5B;;;;;;AAMD,SAAS,OAAO,CAAC,GAAG,EAAE;IAClB,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;;;IAGzB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACf,IAAI,OAAO,GAAG,IAAI,CAAC;;IAEnB,CAAC,GAAG,YAAY,OAAO;UACjB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;WACd,GAAG,IAAIF,MAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;;IAEhC,SAAS,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE;QACvB,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KAC7D;CACJ;;AAED,OAAO,CAAC,SAAS,GAAG;IAChB,WAAW,EAAE,OAAO;;;;IAIpB,GAAG,EAAE,UAAU,GAAG,EAAE;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KAChE;IACD,GAAG,EAAE,UAAU,GAAG,EAAE,KAAK,EAAE;;;QAGvB,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE;KACnC;;;IAGD,IAAI,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE;QACzB,OAAO,KAAK,KAAK,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;;QAE/C,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;SAC5D;;KAEJ;;IAED,SAAS,EAAE,UAAU,GAAG,EAAE;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACzB;CACJ,CAAC;;AAEF,AAAO,SAAS,aAAa,CAAC,GAAG,EAAE;IAC/B,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;CAC3B;;AAED,AAAO,SAAS,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE;IAC9B,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KACtB;IACD,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC3B,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/B;IACD,OAAO,QAAQ,CAAC;CACnB;;;AAGD,AAAO,SAAS,IAAI,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnqBzB;;AAEA,IAAI,SAAS,GAAG,OAAO,YAAY,KAAK,WAAW;MAC7C,KAAK;MACL,YAAY,CAAC;;;;;;;;AAQnB,AAAO,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE;IACzB,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,CAAC,IAAI,IAAI,EAAE;QACX,CAAC,GAAG,CAAC,CAAC;KACT;IACD,IAAI,CAAC,IAAI,IAAI,EAAE;QACX,CAAC,GAAG,CAAC,CAAC;KACT;IACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,OAAO,GAAG,CAAC;CACd;;;;;;;;AAQD,AAAO,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;IACzB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACd,OAAO,GAAG,CAAC;CACd;;;;;;;AAOD,AAAO,SAASG,OAAK,CAAC,CAAC,EAAE;IACrB,IAAI,GAAG,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACd,OAAO,GAAG,CAAC;CACd;;;;;;;;;AASD,AAAO,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;IAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,OAAO,GAAG,CAAC;CACd;;;;;;;;AAQD,AAAO,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;CACd;;;;;;;;;AASD,AAAO,SAAS,WAAW,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;IACxC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC;CACd;;;;;;;;AAQD,AAAO,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;CACd;;;;;;;AAOD,AAAO,SAAS,GAAG,CAAC,CAAC,EAAE;IACnB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;CAClC;AACD,AAAO,IAAI,MAAM,GAAG,GAAG,CAAC;;;;;;;AAOxB,AAAO,SAAS,SAAS,CAAC,CAAC,EAAE;IACzB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;CACpC;AACD,AAAO,IAAI,YAAY,GAAG,SAAS,CAAC;;;;;;;;AAQpC,AAAO,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;CACd;;;;;;;;AAQD,AAAO,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;CACd;;;;;;;;AAQD,AAAO,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE;IACxB,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;CACxC;;;;;;;;AAQD,AAAO,SAAS,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClB,OAAO,GAAG,CAAC;CACd;;;;;;;AAOD,AAAO,SAAS,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE;IAC9B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACf,IAAI,CAAC,KAAK,CAAC,EAAE;QACT,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACd;SACI;QACD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACrB;IACD,OAAO,GAAG,CAAC;CACd;;;;;;;;AAQD,AAAO,SAAS,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE;IAC7B,OAAO,IAAI,CAAC,IAAI;QACZ,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;UAC/B,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;KACtC,CAAC;CACL;AACD,AAAO,IAAI,IAAI,GAAG,QAAQ,CAAC;;;;;;;;AAQ3B,AAAO,SAAS,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE;IACnC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;UAClC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3C;AACD,AAAO,IAAI,UAAU,GAAG,cAAc,CAAC;;;;;;;AAOvC,AAAO,SAAS,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE;IAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,GAAG,CAAC;CACd;;;;;;;;;AASD,AAAO,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC;CACd;;;;;;;;AAQD,AAAO,SAAS,cAAc,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;IACtC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACb,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC;CACd;;;;;;;;AAQD,AAAO,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,OAAO,GAAG,CAAC;CACd;;;;;;;;AAQD,AAAO,SAAS,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,OAAO,GAAG,CAAC;CACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7QD;;AAEA,SAAS,SAAS,GAAG;;IAEjB,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;;;;;;CAM7C;;AAED,SAAS,CAAC,SAAS,GAAG;;IAElB,WAAW,EAAE,SAAS;;IAEtB,UAAU,EAAE,UAAU,CAAC,EAAE;QACrB,IAAI,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;QAC9B,IAAI,cAAc,IAAI,cAAc,CAAC,SAAS,EAAE;YAC5C,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;YACtC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;YACpB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;;YAEpB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;SAC1E;KACJ;;IAED,KAAK,EAAE,UAAU,CAAC,EAAE;QAChB,IAAI,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;QAC1C,IAAI,cAAc,EAAE;;YAEhB,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;;YAElB,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;;YAEZ,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;;YAElE,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,MAAM,CAAC;YAC7D,IAAI,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;;YAE9B,IAAI,cAAc,KAAK,UAAU,EAAE;gBAC/B,IAAI,cAAc,IAAI,UAAU,KAAK,cAAc,EAAE;oBACjD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;iBAC1E;gBACD,IAAI,UAAU,IAAI,UAAU,KAAK,cAAc,EAAE;oBAC7C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;iBACtE;aACJ;SACJ;KACJ;;IAED,QAAQ,EAAE,UAAU,CAAC,EAAE;QACnB,IAAI,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC;;QAE1C,IAAI,cAAc,EAAE;YAChB,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC;SACnC;;QAED,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;;QAErE,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;SACvE;;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KAC3B;;CAEJ,CAAC;;AAEF,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;IACtB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;CACxD;;AClFD;;;;;;;AAOA,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;AAoBtC,IAAI,QAAQ,GAAG,UAAU,cAAc,EAAE;IACrC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACrB,IAAI,CAAC,gBAAgB,GAAG,cAAc,CAAC;CAC1C,CAAC;;AAEF,QAAQ,CAAC,SAAS,GAAG;;IAEjB,WAAW,EAAE,QAAQ;;;;;;;;;;IAUrB,GAAG,EAAE,UAAU,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;QAC3C,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;KACzD;;;;;;;;;;IAUD,EAAE,EAAE,UAAU,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE;QAC1C,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;KAC1D;;;;;;;;IAQD,QAAQ,EAAE,UAAU,KAAK,EAAE;QACvB,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QACzB,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;KAC1C;;;;;;;;IAQD,GAAG,EAAE,UAAU,KAAK,EAAE,OAAO,EAAE;QAC3B,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;;QAEzB,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;SACf;;QAED,IAAI,OAAO,EAAE;YACT,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE;gBACX,IAAI,OAAO,GAAG,EAAE,CAAC;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC9C,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;wBAC5B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC9B;iBACJ;gBACD,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;aACvB;;YAED,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;gBACrC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;aACpB;SACJ;aACI;YACD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;SACpB;;QAED,OAAO,IAAI,CAAC;KACf;;;;;;;IAOD,OAAO,EAAE,UAAU,IAAI,EAAE;QACrB,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC;;QAE3C,IAAI,EAAE,EAAE;YACJ,IAAI,IAAI,GAAG,SAAS,CAAC;YACrB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;;YAEzB,IAAI,MAAM,GAAG,CAAC,EAAE;gBACZ,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;aAClC;;YAED,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;gBACtB,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,cAAc;uBACX,cAAc,CAAC,MAAM;uBACrB,KAAK,CAAC,KAAK,IAAI,IAAI;uBACnB,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;kBAC9C;oBACE,CAAC,EAAE,CAAC;oBACJ,SAAS;iBACZ;;;gBAGD,QAAQ,MAAM;oBACV,KAAK,CAAC;wBACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACxB,MAAM;oBACV,KAAK,CAAC;wBACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjC,MAAM;oBACV,KAAK,CAAC;wBACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1C,MAAM;oBACV;;wBAEI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;wBAC/B,MAAM;iBACb;;gBAED,IAAI,KAAK,CAAC,GAAG,EAAE;oBACX,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAChB,GAAG,EAAE,CAAC;iBACT;qBACI;oBACD,CAAC,EAAE,CAAC;iBACP;aACJ;SACJ;;QAED,cAAc,IAAI,cAAc,CAAC,YAAY;eACtC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;;QAEzC,OAAO,IAAI,CAAC;KACf;;;;;;;IAOD,kBAAkB,EAAE,UAAU,IAAI,EAAE;QAChC,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC;;QAE3C,IAAI,EAAE,EAAE;YACJ,IAAI,IAAI,GAAG,SAAS,CAAC;YACrB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;;YAEzB,IAAI,MAAM,GAAG,CAAC,EAAE;gBACZ,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;aACnD;YACD,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;YAEhC,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG;gBACtB,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,cAAc;uBACX,cAAc,CAAC,MAAM;uBACrB,KAAK,CAAC,KAAK,IAAI,IAAI;uBACnB,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC;kBAC9C;oBACE,CAAC,EAAE,CAAC;oBACJ,SAAS;iBACZ;;;gBAGD,QAAQ,MAAM;oBACV,KAAK,CAAC;wBACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAClB,MAAM;oBACV,KAAK,CAAC;wBACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC3B,MAAM;oBACV,KAAK,CAAC;wBACF,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpC,MAAM;oBACV;;wBAEI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;wBACzB,MAAM;iBACb;;gBAED,IAAI,KAAK,CAAC,GAAG,EAAE;oBACX,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAChB,GAAG,EAAE,CAAC;iBACT;qBACI;oBACD,CAAC,EAAE,CAAC;iBACP;aACJ;SACJ;;QAED,cAAc,IAAI,cAAc,CAAC,YAAY;eACtC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;;QAEzC,OAAO,IAAI,CAAC;KACf;CACJ,CAAC;;AAEF,SAAS,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;IACjC,IAAI,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAC3C,IAAI,KAAK,IAAI,IAAI,IAAI,cAAc,IAAI,cAAc,CAAC,cAAc,EAAE;QAClE,KAAK,GAAG,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KAChD;IACD,OAAO,KAAK,CAAC;CAChB;;AAED,SAAS,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;IAC1D,IAAI,EAAE,GAAG,QAAQ,CAAC,UAAU,CAAC;;IAE7B,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE;QAC7B,OAAO,GAAG,OAAO,CAAC;QAClB,OAAO,GAAG,KAAK,CAAC;QAChB,KAAK,GAAG,IAAI,CAAC;KAChB;;IAED,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;QACpB,OAAO,QAAQ,CAAC;KACnB;;IAED,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;;IAExC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;QACZ,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;KAClB;;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;YAC5B,OAAO,QAAQ,CAAC;SACnB;KACJ;;IAED,IAAI,IAAI,GAAG;QACP,CAAC,EAAE,OAAO;QACV,GAAG,EAAE,MAAM;QACX,KAAK,EAAE,KAAK;QACZ,GAAG,EAAE,OAAO,IAAI,QAAQ;;;QAGxB,UAAU,EAAE,OAAO,CAAC,oBAAoB;KAC3C,CAAC;;IAEF,IAAI,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACrC,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC,QAAQ,IAAI,QAAQ,CAAC,UAAU;UAC1B,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC;UACpC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;IAE3B,OAAO,QAAQ,CAAC;CACnB;;AC3RD;;;;;;;;AAQA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;AAEtB,SAAS,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE;IACnE,IAAI,QAAQ,GAAG,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC;IACvC,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;;IAE3B,IAAI,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;QACnC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;KAC7B;;IAED,IAAI,IAAI,KAAK,CAAC,EAAE;;QAEZ,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;KACnC;;IAED,IAAI,UAAU,GAAG,OAAO,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC;IAC3C,IAAI,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC/B,OAAO,OAAO,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE;QACjC,WAAW,EAAE,CAAC;KACjB;;IAED,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE;QAChD,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE;YACrB,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;kBAE/C,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAC;YACvF,WAAW,EAAE,CAAC;SACjB;KACJ;;IAED,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;;IAEzB,OAAO,GAAG,CAAC;CACd;;;;;;;;;;;;;;;;;;;AAmBD,AAAO,SAAS,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE;IACxC,IAAI,EAAE,GAAG;QACL,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;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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;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,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,C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"}