{"version":3,"sources":["webpack:///./node_modules/echarts/lib/chart/parallel/ParallelSeries.js","webpack:///./node_modules/echarts/lib/component/visualMap/PiecewiseView.js","webpack:///./node_modules/echarts/lib/component/tooltip.js","webpack:///./node_modules/echarts/lib/chart/funnel/FunnelSeries.js","webpack:///./node_modules/echarts/lib/coord/geo/prepareCustom.js","webpack:///./node_modules/echarts/lib/coord/geo/Geo.js","webpack:///./node_modules/echarts/lib/coord/cartesian/cartesianAxisHelper.js","webpack:///./node_modules/echarts/lib/component/gridSimple.js","webpack:///./node_modules/echarts/lib/component/helper/roamHelper.js","webpack:///./node_modules/echarts/lib/component/dataset.js","webpack:///./node_modules/zrender/lib/core/timsort.js","webpack:///./node_modules/zrender/lib/contain/polygon.js","webpack:///./node_modules/zrender/lib/animation/Animator.js","webpack:///./node_modules/echarts/lib/data/Tree.js","webpack:///./node_modules/echarts/lib/component/visualMap/PiecewiseModel.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipContent.js","webpack:///./node_modules/echarts/lib/chart/gauge.js","webpack:///./node_modules/echarts/lib/chart/parallel.js","webpack:///./node_modules/echarts/lib/chart/candlestick.js","webpack:///./node_modules/echarts/lib/component/timeline/TimelineAxis.js","webpack:///./node_modules/echarts/lib/chart/candlestick/candlestickLayout.js","webpack:///./node_modules/echarts/lib/component/dataZoom.js","webpack:///./node_modules/zrender/lib/core/GestureMgr.js","webpack:///./node_modules/echarts/lib/component/legendScroll.js","webpack:///./node_modules/zrender/lib/core/arrayDiff2.js","webpack:///./node_modules/echarts/lib/component/helper/MapDraw.js","webpack:///./node_modules/zrender/lib/mixin/Transformable.js","webpack:///./src/views/robot/components/CircleBar.vue?adc1","webpack:///./node_modules/zrender/lib/graphic/Image.js","webpack:///./node_modules/echarts/lib/chart/sankey/sankeyVisual.js","webpack:///./node_modules/echarts/lib/component/legend/ScrollableLegendView.js","webpack:///./node_modules/echarts/lib/coord/parallel/ParallelAxis.js","webpack:///./node_modules/echarts/lib/data/helper/sourceHelper.js","webpack:///./node_modules/echarts/lib/chart/helper/EffectLine.js","webpack:///./node_modules/echarts/lib/component/brush/visualEncoding.js","webpack:///./node_modules/echarts/lib/chart/effectScatter.js","webpack:///./node_modules/echarts/lib/component/axisPointer/findPointFromSeries.js","webpack:///./node_modules/echarts/lib/chart/helper/Symbol.js","webpack:///./src/assets/empty.png","webpack:///./node_modules/echarts/lib/chart/radar/RadarView.js","webpack:///./node_modules/echarts/lib/component/axis/RadiusAxisView.js","webpack:///./node_modules/echarts/lib/helper.js","webpack:///./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack:///./node_modules/echarts/lib/chart/scatter.js","webpack:///./node_modules/zrender/lib/core/matrix.js","webpack:///./node_modules/echarts/lib/coord/radar/RadarModel.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/textCoord.js","webpack:///./node_modules/echarts/lib/chart/bar/BarSeries.js","webpack:///./node_modules/core-js/internals/array-for-each.js","webpack:///./node_modules/echarts/lib/component/axisPointer/globalListener.js","webpack:///./node_modules/echarts/lib/scale/Ordinal.js","webpack:///./node_modules/echarts/lib/component/marker/MarkLineModel.js","webpack:///./node_modules/echarts/lib/chart/candlestick/CandlestickView.js","webpack:///./node_modules/zrender/lib/graphic/Displayable.js","webpack:///./node_modules/echarts/lib/chart/pie/PieView.js","webpack:///./node_modules/echarts/lib/chart/graph/simpleLayoutHelper.js","webpack:///./node_modules/echarts/lib/coord/polar/polarCreator.js","webpack:///./node_modules/core-js/modules/es.object.define-properties.js","webpack:///./node_modules/echarts/lib/layout/barPolar.js","webpack:///./node_modules/echarts/lib/chart/gauge/PointerPath.js","webpack:///./node_modules/echarts/lib/coord/geo/GeoModel.js","webpack:///./node_modules/zrender/lib/mixin/Eventful.js","webpack:///./node_modules/echarts/lib/coord/axisModelCommonMixin.js","webpack:///./node_modules/echarts/lib/CoordinateSystem.js","webpack:///./node_modules/zrender/lib/core/PathProxy.js","webpack:///./node_modules/echarts/lib/component/toolbox/featureManager.js","webpack:///./node_modules/echarts/lib/chart/tree/TreeSeries.js","webpack:///./node_modules/echarts/lib/scale/Time.js","webpack:///./node_modules/echarts/lib/chart/line/LineSeries.js","webpack:///./node_modules/echarts/lib/coord/parallel/ParallelModel.js","webpack:///./node_modules/zrender/lib/core/env.js","webpack:///./node_modules/echarts/lib/chart/tree/layoutHelper.js","webpack:///./node_modules/echarts/lib/util/graphic.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SliderZoomView.js","webpack:///./node_modules/echarts/lib/chart/helper/createGraphFromNodeEdge.js","webpack:///./src/views/robot/components/LineChart.vue?64a0","webpack:///./node_modules/echarts/lib/coord/radar/Radar.js","webpack:///./node_modules/echarts/lib/chart/graph.js","webpack:///./node_modules/echarts/lib/component/marker/MarkerModel.js","webpack:///./node_modules/echarts/lib/chart/funnel/funnelLayout.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/ThemeRiverView.js","webpack:///./node_modules/echarts/lib/preprocessor/helper/compatStyle.js","webpack:///./node_modules/echarts/lib/model/mixin/makeStyleMapper.js","webpack:///./node_modules/echarts/lib/chart/pie/pieLayout.js","webpack:///./node_modules/echarts/lib/chart/graph/categoryVisual.js","webpack:///./node_modules/echarts/lib/lang.js","webpack:///./node_modules/echarts/lib/component/visualMapPiecewise.js","webpack:///./node_modules/echarts/lib/data/helper/dataProvider.js","webpack:///./node_modules/zrender/lib/graphic/Style.js","webpack:///./node_modules/echarts/lib/visual/visualSolution.js","webpack:///./node_modules/echarts/lib/component/dataZoom/dataZoomProcessor.js","webpack:///./node_modules/zrender/lib/config.js","webpack:///./node_modules/echarts/lib/component/singleAxis.js","webpack:///./node_modules/echarts/lib/component/brush.js","webpack:///./node_modules/echarts/lib/data/helper/dimensionHelper.js","webpack:///./node_modules/echarts/lib/component/polar.js","webpack:///./node_modules/echarts/lib/chart/boxplot/boxplotVisual.js","webpack:///./node_modules/echarts/lib/chart/bar/BaseBarSeries.js","webpack:///./node_modules/zrender/lib/tool/parseSVG.js","webpack:///./node_modules/echarts/lib/component/visualMap/ContinuousModel.js","webpack:///./node_modules/echarts/lib/coord/single/prepareCustom.js","webpack:///./node_modules/echarts/lib/component/marker/MarkLineView.js","webpack:///./node_modules/zrender/lib/animation/Animation.js","webpack:///./node_modules/echarts/lib/chart/sankey.js","webpack:///./node_modules/echarts/index.js","webpack:///./node_modules/echarts/lib/data/helper/linkList.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/nanhai.js","webpack:///./node_modules/echarts/lib/component/dataZoom/InsideZoomView.js","webpack:///./node_modules/echarts/lib/chart/helper/createListFromArray.js","webpack:///./node_modules/echarts/lib/chart/bar/PictorialBarView.js","webpack:///./src/assets/robot_down.png","webpack:///./node_modules/echarts/lib/chart/sunburst/SunburstView.js","webpack:///./node_modules/zrender/lib/tool/path.js","webpack:///./node_modules/echarts/lib/component/timeline/SliderTimelineView.js","webpack:///./src/views/robot/components/DrawCanvas.vue?8c0b","webpack:///./node_modules/echarts/lib/component/dataZoom/SliderZoomModel.js","webpack:///./node_modules/echarts/lib/util/number.js","webpack:///./node_modules/echarts/lib/model/mixin/dataFormat.js","webpack:///./node_modules/echarts/lib/model/mixin/lineStyle.js","webpack:///./node_modules/zrender/lib/graphic/IncrementalDisplayable.js","webpack:///./node_modules/echarts/lib/component/timeline/timelineAction.js","webpack:///./node_modules/echarts/lib/chart/heatmap/HeatmapSeries.js","webpack:///./node_modules/echarts/lib/component/dataZoom/DataZoomModel.js","webpack:///./node_modules/echarts/lib/component/visualMap/ContinuousView.js","webpack:///./node_modules/echarts/lib/echarts.js","webpack:///./node_modules/zrender/lib/svg/graphic.js","webpack:///./node_modules/zrender/lib/core/vector.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SelectZoomModel.js","webpack:///./node_modules/core-js/modules/es.array.for-each.js","webpack:///./node_modules/zrender/lib/tool/color.js","webpack:///./node_modules/zrender/lib/graphic/Gradient.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipView.js","webpack:///./node_modules/echarts/lib/model/Model.js","webpack:///./node_modules/echarts/lib/coord/single/singleCreator.js","webpack:///./node_modules/echarts/lib/component/marker/MarkAreaModel.js","webpack:///./node_modules/echarts/lib/chart/treemap/treemapAction.js","webpack:///./node_modules/zrender/lib/animation/Clip.js","webpack:///./node_modules/echarts/lib/chart/sunburst/sunburstAction.js","webpack:///./node_modules/echarts/lib/chart/helper/Polyline.js","webpack:///./node_modules/zrender/lib/graphic/shape/Ring.js","webpack:///./node_modules/echarts/lib/component/legend/legendAction.js","webpack:///./node_modules/echarts/lib/coord/calendar/prepareCustom.js","webpack:///./node_modules/echarts/lib/chart/effectScatter/EffectScatterView.js","webpack:///./node_modules/echarts/lib/chart/heatmap/HeatmapView.js","webpack:///./node_modules/echarts/lib/chart/graph/adjustEdge.js","webpack:///./node_modules/zrender/lib/graphic/LinearGradient.js","webpack:///./node_modules/echarts/lib/component/axisPointer/AxisPointerModel.js","webpack:///./node_modules/echarts/lib/coord/cartesian/AxisModel.js","webpack:///./node_modules/zrender/lib/core/log.js","webpack:///./node_modules/echarts/lib/action/geoRoam.js","webpack:///./node_modules/echarts/lib/component/helper/RoamController.js","webpack:///./node_modules/zrender/lib/core/curve.js","webpack:///./node_modules/echarts/lib/component/axisPointer/CartesianAxisPointer.js","webpack:///./node_modules/zrender/lib/graphic/shape/Sector.js","webpack:///./node_modules/zrender/lib/svg/helper/Definable.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SelectZoomView.js","webpack:///./node_modules/echarts/lib/coord/single/Single.js","webpack:///./node_modules/echarts/lib/coord/geo/geoJSONLoader.js","webpack:///./node_modules/echarts/lib/chart/candlestick/candlestickVisual.js","webpack:///./node_modules/echarts/lib/chart/funnel/FunnelView.js","webpack:///./node_modules/echarts/lib/chart/gauge/GaugeSeries.js","webpack:///./node_modules/core-js/modules/es.array.filter.js","webpack:///./node_modules/echarts/lib/config.js","webpack:///./node_modules/echarts/lib/chart/map/MapSeries.js","webpack:///./node_modules/echarts/lib/chart/sunburst/SunburstPiece.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/SaveAsImage.js","webpack:///./node_modules/echarts/lib/model/Series.js","webpack:///./node_modules/zrender/lib/graphic/helper/poly.js","webpack:///./node_modules/echarts/lib/component/dataZoom/helper.js","webpack:///./src/assets/questionTip.png","webpack:///./node_modules/echarts/lib/chart/themeRiver/themeRiverLayout.js","webpack:///./node_modules/echarts/lib/chart/graph/graphHelper.js","webpack:///./node_modules/echarts/lib/component/visualMap.js","webpack:///./node_modules/echarts/lib/chart/map/mapVisual.js","webpack:///./node_modules/echarts/lib/model/mixin/itemStyle.js","webpack:///./node_modules/echarts/lib/component/radar.js","webpack:///./node_modules/echarts/lib/component/dataZoom/roams.js","webpack:///./node_modules/echarts/lib/chart/helper/treeHelper.js","webpack:///./node_modules/echarts/lib/data/DataDimensionInfo.js","webpack:///./node_modules/zrender/lib/graphic/helper/roundRect.js","webpack:///./node_modules/echarts/lib/chart/graph/forceLayout.js","webpack:///./node_modules/echarts/lib/component/axis/axisSplitHelper.js","webpack:///./src/views/robot/components/MarketAnalysis.vue?d012","webpack:///./node_modules/echarts/lib/coord/cartesian/Grid.js","webpack:///./node_modules/echarts/lib/chart/sankey/SankeyView.js","webpack:///./node_modules/echarts/lib/coord/geo/geoSourceManager.js","webpack:///./node_modules/echarts/lib/chart/heatmap.js","webpack:///./node_modules/zrender/lib/Layer.js","webpack:///./node_modules/zrender/lib/graphic/helper/image.js","webpack:///./node_modules/echarts/lib/component/legend/LegendView.js","webpack:///./node_modules/echarts/lib/visual/VisualMapping.js","webpack:///./node_modules/zrender/lib/core/event.js","webpack:///./node_modules/echarts/lib/chart/parallel/ParallelView.js","webpack:///./node_modules/echarts/lib/visual/visualDefault.js","webpack:///./node_modules/echarts/lib/data/List.js","webpack:///./node_modules/zrender/lib/graphic/helper/smoothSpline.js","webpack:///./node_modules/echarts/lib/util/clazz.js","webpack:///./node_modules/echarts/lib/component/title.js","webpack:///./node_modules/echarts/lib/coord/parallel/parallelPreprocessor.js","webpack:///./node_modules/echarts/lib/chart/lines/linesLayout.js","webpack:///./node_modules/zrender/lib/core/dom.js","webpack:///./node_modules/echarts/lib/component/axis/AxisView.js","webpack:///./node_modules/echarts/lib/component/timeline/preprocessor.js","webpack:///./node_modules/echarts/lib/coord/single/SingleAxis.js","webpack:///./node_modules/echarts/lib/chart/graph/categoryFilter.js","webpack:///./node_modules/echarts/lib/chart/map.js","webpack:///./node_modules/echarts/lib/chart/effectScatter/EffectScatterSeries.js","webpack:///./node_modules/echarts/lib/chart/bar/BarView.js","webpack:///./node_modules/zrender/lib/contain/quadratic.js","webpack:///./node_modules/echarts/lib/component/dataZoom/typeDefaulter.js","webpack:///./node_modules/echarts/lib/coord/axisHelper.js","webpack:///./node_modules/zrender/lib/zrender.js","webpack:///./node_modules/echarts/lib/stream/Scheduler.js","webpack:///./node_modules/echarts/lib/chart/helper/EffectPolyline.js","webpack:///./node_modules/echarts/lib/component/axisPointer/PolarAxisPointer.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/geoCoord.js","webpack:///./node_modules/echarts/lib/component/radar/RadarView.js","webpack:///./node_modules/echarts/lib/chart/themeRiver.js","webpack:///./node_modules/echarts/lib/model/Component.js","webpack:///./node_modules/echarts/lib/coord/View.js","webpack:///./node_modules/echarts/lib/chart/tree/TreeView.js","webpack:///./node_modules/zrender/lib/core/util.js","webpack:///./node_modules/echarts/lib/chart/tree/traversalHelper.js","webpack:///./node_modules/echarts/lib/component/dataZoom/history.js","webpack:///./node_modules/echarts/lib/component/helper/selectableMixin.js","webpack:///./node_modules/core-js/internals/inherit-if-required.js","webpack:///./node_modules/echarts/lib/coord/axisDefault.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/themeRiverVisual.js","webpack:///./node_modules/echarts/lib/chart/lines/LinesSeries.js","webpack:///./node_modules/echarts/lib/component/visualMap/VisualMapView.js","webpack:///./src/views/robot/robotAnalysis.vue?8afb","webpack:///./node_modules/echarts/lib/data/Graph.js","webpack:///./node_modules/echarts/lib/chart/helper/LineDraw.js","webpack:///./node_modules/echarts/lib/component/visualMapContinuous.js","webpack:///./node_modules/zrender/lib/animation/easing.js","webpack:///./node_modules/echarts/lib/component/geo/GeoView.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/DataView.js","webpack:///./node_modules/zrender/lib/graphic/Text.js","webpack:///./node_modules/echarts/lib/action/createDataSelectAction.js","webpack:///./node_modules/echarts/lib/coord/radar/IndicatorAxis.js","webpack:///./node_modules/echarts/lib/chart/radar/backwardCompat.js","webpack:///./node_modules/echarts/lib/coord/polar/PolarModel.js","webpack:///./node_modules/echarts/lib/component/helper/listComponent.js","webpack:///./node_modules/echarts/lib/component/radiusAxis.js","webpack:///./node_modules/core-js/modules/es.object.define-property.js","webpack:///./node_modules/echarts/lib/chart/graph/createView.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/DataZoom.js","webpack:///./node_modules/zrender/lib/graphic/helper/fixShadow.js","webpack:///./node_modules/echarts/lib/component/dataZoom/DataZoomView.js","webpack:///./node_modules/echarts/lib/component/markArea.js","webpack:///./node_modules/echarts/lib/chart/helper/Line.js","webpack:///./node_modules/echarts/lib/model/Global.js","webpack:///./node_modules/echarts/lib/component/graphic.js","webpack:///./node_modules/echarts/lib/component/dataZoomInside.js","webpack:///./node_modules/echarts/lib/chart/helper/LinePath.js","webpack:///./node_modules/echarts/lib/visual/symbol.js","webpack:///./node_modules/echarts/lib/data/DataDiffer.js","webpack:///./node_modules/echarts/theme/macarons.js","webpack:///./node_modules/echarts/lib/chart/sankey/sankeyLayout.js","webpack:///./node_modules/zrender/lib/graphic/constant.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipRichContent.js","webpack:///./node_modules/echarts/lib/component/marker/MarkPointView.js","webpack:///./node_modules/echarts/lib/coord/calendar/CalendarModel.js","webpack:///./node_modules/echarts/lib/ExtensionAPI.js","webpack:///./node_modules/echarts/lib/component/axis/parallelAxisAction.js","webpack:///./node_modules/echarts/lib/coord/parallel/parallelCreator.js","webpack:///./node_modules/echarts/lib/coord/Axis.js","webpack:///./node_modules/echarts/lib/component/legend/LegendModel.js","webpack:///./node_modules/zrender/lib/core/fourPointsTransform.js","webpack:///./node_modules/zrender/lib/contain/util.js","webpack:///./node_modules/echarts/lib/data/helper/completeDimensions.js","webpack:///./node_modules/echarts/lib/chart/radar/radarLayout.js","webpack:///./node_modules/zrender/lib/svg/core.js","webpack:///./node_modules/zrender/lib/contain/windingLine.js","webpack:///./node_modules/echarts/lib/chart/graph/GraphSeries.js","webpack:///./node_modules/zrender/lib/graphic/shape/Polygon.js","webpack:///./node_modules/echarts/lib/layout/points.js","webpack:///./node_modules/echarts/lib/util/throttle.js","webpack:///./src/views/robot/components/DrawCanvas.vue?4ee8","webpack:///src/views/robot/components/DrawCanvas.vue","webpack:///./src/views/robot/components/DrawCanvas.vue?e90e","webpack:///./src/views/robot/components/DrawCanvas.vue","webpack:///./node_modules/echarts/lib/component/marker/MarkerView.js","webpack:///./node_modules/echarts/lib/util/component.js","webpack:///./node_modules/echarts/lib/model/globalDefault.js","webpack:///./node_modules/zrender/lib/graphic/helper/fixClipWithShadow.js","webpack:///./node_modules/echarts/lib/scale/Interval.js","webpack:///./node_modules/echarts/lib/model/referHelper.js","webpack:///./node_modules/echarts/lib/scale/Log.js","webpack:///./node_modules/zrender/lib/graphic/shape/Arc.js","webpack:///./src/assets/robot_up.png","webpack:///./node_modules/echarts/lib/chart/radar.js","webpack:///./node_modules/echarts/lib/data/OrdinalMeta.js","webpack:///./node_modules/echarts/lib/component/marker/MarkAreaView.js","webpack:///./node_modules/echarts/lib/component/toolbox/ToolboxModel.js","webpack:///./node_modules/echarts/lib/coord/cartesian/GridModel.js","webpack:///./node_modules/zrender/lib/svg/svg.js","webpack:///./node_modules/echarts/lib/component/legend/legendFilter.js","webpack:///./node_modules/echarts/lib/chart/treemap/treemapVisual.js","webpack:///./node_modules/echarts/lib/component/marker/markerHelper.js","webpack:///./node_modules/echarts/lib/coord/polar/RadiusAxis.js","webpack:///./node_modules/echarts/lib/chart/treemap/TreemapSeries.js","webpack:///./node_modules/echarts/lib/component/timeline/TimelineView.js","webpack:///./node_modules/echarts/lib/component/calendar.js","webpack:///./node_modules/echarts/lib/data/helper/sourceType.js","webpack:///./node_modules/echarts/lib/chart/map/backwardCompat.js","webpack:///./node_modules/echarts/lib/scale/helper.js","webpack:///./node_modules/echarts/lib/chart/bar.js","webpack:///./node_modules/echarts/lib/chart/graph/circularLayoutHelper.js","webpack:///./node_modules/echarts/lib/component/markLine.js","webpack:///./node_modules/zrender/lib/contain/line.js","webpack:///./src/views/robot/components/MemberAnalysis.vue?589f","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/echarts/lib/chart/graph/GraphView.js","webpack:///./src/assets/material_orange.png","webpack:///./node_modules/zrender/lib/core/BoundingRect.js","webpack:///./node_modules/zrender/lib/animation/requestAnimationFrame.js","webpack:///./node_modules/echarts/lib/visual/dataColor.js","webpack:///./node_modules/echarts/lib/loading/default.js","webpack:///./node_modules/echarts/lib/model/mixin/areaStyle.js","webpack:///./node_modules/zrender/lib/graphic/helper/smoothBezier.js","webpack:///./node_modules/echarts/lib/chart/treemap/treemapLayout.js","webpack:///./node_modules/zrender/lib/graphic/helper/subPixelOptimize.js","webpack:///./node_modules/echarts/lib/layout/barGrid.js","webpack:///./node_modules/zrender/lib/graphic/mixin/RectText.js","webpack:///./node_modules/echarts/lib/coord/axisModelCreator.js","webpack:///./node_modules/echarts/lib/component/dataZoom/dataZoomAction.js","webpack:///./node_modules/zrender/lib/contain/arc.js","webpack:///./node_modules/echarts/lib/chart/line/helper.js","webpack:///./node_modules/zrender/lib/svg/helper/ClippathManager.js","webpack:///./node_modules/echarts/lib/chart/radar/RadarSeries.js","webpack:///./node_modules/echarts/lib/component/timeline/typeDefaulter.js","webpack:///./node_modules/echarts/lib/util/symbol.js","webpack:///./node_modules/echarts/lib/component/dataZoom/InsideZoomModel.js","webpack:///./node_modules/echarts/lib/chart/helper/LargeLineDraw.js","webpack:///./node_modules/echarts/lib/chart/funnel.js","webpack:///./node_modules/echarts/lib/component/helper/interactionMutex.js","webpack:///./node_modules/echarts/lib/chart/map/MapView.js","webpack:///./node_modules/zrender/lib/graphic/helper/text.js","webpack:///./node_modules/echarts/lib/chart/gauge/GaugeView.js","webpack:///./node_modules/echarts/lib/chart/lines.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/diaoyuIsland.js","webpack:///./node_modules/zrender/lib/vml/graphic.js","webpack:///./node_modules/echarts/lib/component/brush/selector.js","webpack:///./node_modules/echarts/lib/component/marker/MarkPointModel.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipModel.js","webpack:///./node_modules/echarts/lib/coord/polar/AngleAxis.js","webpack:///./node_modules/core-js/modules/es.number.constructor.js","webpack:///./node_modules/echarts/lib/chart/sunburst/SunburstSeries.js","webpack:///./node_modules/echarts/lib/coord/cartesian/prepareCustom.js","webpack:///./node_modules/echarts/lib/chart/pictorialBar.js","webpack:///./node_modules/echarts/lib/component/visualMap/visualEncoding.js","webpack:///./node_modules/echarts/lib/chart/parallel/parallelVisual.js","webpack:///./node_modules/echarts/lib/chart/scatter/ScatterView.js","webpack:///./node_modules/zrender/lib/graphic/shape/BezierCurve.js","webpack:///./node_modules/echarts/lib/chart/graph/circularLayout.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/ThemeRiverSeries.js","webpack:///./node_modules/echarts/lib/chart/lines/LinesView.js","webpack:///./node_modules/zrender/lib/graphic/shape/Ellipse.js","webpack:///./node_modules/echarts/lib/component/brush/preprocessor.js","webpack:///./node_modules/echarts/lib/component/axis.js","webpack:///./node_modules/zrender/lib/Storage.js","webpack:///./node_modules/echarts/lib/component/axis/ParallelAxisView.js","webpack:///./node_modules/echarts/lib/chart/helper/createClipPathFromCoordSys.js","webpack:///./node_modules/echarts/lib/component/toolbox.js","webpack:///./node_modules/echarts/lib/view/Component.js","webpack:///./node_modules/zrender/lib/svg/helper/GradientManager.js","webpack:///./node_modules/echarts/lib/data/helper/createDimensions.js","webpack:///./node_modules/echarts/lib/component/visualMap/preprocessor.js","webpack:///./node_modules/echarts/lib/chart/treemap/TreemapView.js","webpack:///./node_modules/echarts/lib/component/axis/AngleAxisView.js","webpack:///./node_modules/echarts/lib/chart/bar/barItemStyle.js","webpack:///./node_modules/echarts/lib/export.js","webpack:///./src/views/robot/robotAnalysis.vue?c311","webpack:///./src/views/robot/components/MemberAnalysis.vue?9430","webpack:///./src/views/robot/components/LineChart.vue?6001","webpack:///src/views/robot/components/LineChart.vue","webpack:///./src/views/robot/components/LineChart.vue?ef7e","webpack:///./src/views/robot/components/LineChart.vue","webpack:///./src/views/robot/components/CircleBar.vue?ee25","webpack:///src/views/robot/components/CircleBar.vue","webpack:///./src/views/robot/components/CircleBar.vue?0f8a","webpack:///./src/views/robot/components/CircleBar.vue","webpack:///./node_modules/ssr-window/ssr-window.esm.js","webpack:///./node_modules/dom7/dom7.esm.js","webpack:///./node_modules/swiper/esm/utils/dom.js","webpack:///./node_modules/swiper/esm/utils/get-support.js","webpack:///./node_modules/swiper/esm/utils/get-device.js","webpack:///./node_modules/swiper/esm/utils/get-browser.js","webpack:///./node_modules/swiper/esm/utils/utils.js","webpack:///./node_modules/swiper/esm/modules/resize/resize.js","webpack:///./node_modules/swiper/esm/modules/observer/observer.js","webpack:///./node_modules/swiper/esm/components/core/modular.js","webpack:///./node_modules/swiper/esm/components/core/events-emitter.js","webpack:///./node_modules/swiper/esm/components/core/update/updateSize.js","webpack:///./node_modules/swiper/esm/components/core/update/updateSlides.js","webpack:///./node_modules/swiper/esm/components/core/update/updateAutoHeight.js","webpack:///./node_modules/swiper/esm/components/core/update/updateSlidesOffset.js","webpack:///./node_modules/swiper/esm/components/core/update/updateSlidesProgress.js","webpack:///./node_modules/swiper/esm/components/core/update/updateProgress.js","webpack:///./node_modules/swiper/esm/components/core/update/updateSlidesClasses.js","webpack:///./node_modules/swiper/esm/components/core/update/updateActiveIndex.js","webpack:///./node_modules/swiper/esm/components/core/update/updateClickedSlide.js","webpack:///./node_modules/swiper/esm/components/core/update/index.js","webpack:///./node_modules/swiper/esm/components/core/translate/getTranslate.js","webpack:///./node_modules/swiper/esm/components/core/translate/setTranslate.js","webpack:///./node_modules/swiper/esm/components/core/translate/minTranslate.js","webpack:///./node_modules/swiper/esm/components/core/translate/maxTranslate.js","webpack:///./node_modules/swiper/esm/components/core/translate/translateTo.js","webpack:///./node_modules/swiper/esm/components/core/translate/index.js","webpack:///./node_modules/swiper/esm/components/core/transition/setTransition.js","webpack:///./node_modules/swiper/esm/components/core/transition/transitionStart.js","webpack:///./node_modules/swiper/esm/components/core/transition/transitionEnd.js","webpack:///./node_modules/swiper/esm/components/core/transition/index.js","webpack:///./node_modules/swiper/esm/components/core/slide/slideTo.js","webpack:///./node_modules/swiper/esm/components/core/slide/slideToLoop.js","webpack:///./node_modules/swiper/esm/components/core/slide/slideNext.js","webpack:///./node_modules/swiper/esm/components/core/slide/slidePrev.js","webpack:///./node_modules/swiper/esm/components/core/slide/slideReset.js","webpack:///./node_modules/swiper/esm/components/core/slide/slideToClosest.js","webpack:///./node_modules/swiper/esm/components/core/slide/slideToClickedSlide.js","webpack:///./node_modules/swiper/esm/components/core/slide/index.js","webpack:///./node_modules/swiper/esm/components/core/loop/loopCreate.js","webpack:///./node_modules/swiper/esm/components/core/loop/loopFix.js","webpack:///./node_modules/swiper/esm/components/core/loop/loopDestroy.js","webpack:///./node_modules/swiper/esm/components/core/loop/index.js","webpack:///./node_modules/swiper/esm/components/core/grab-cursor/setGrabCursor.js","webpack:///./node_modules/swiper/esm/components/core/grab-cursor/unsetGrabCursor.js","webpack:///./node_modules/swiper/esm/components/core/grab-cursor/index.js","webpack:///./node_modules/swiper/esm/components/core/manipulation/appendSlide.js","webpack:///./node_modules/swiper/esm/components/core/manipulation/prependSlide.js","webpack:///./node_modules/swiper/esm/components/core/manipulation/addSlide.js","webpack:///./node_modules/swiper/esm/components/core/manipulation/removeSlide.js","webpack:///./node_modules/swiper/esm/components/core/manipulation/removeAllSlides.js","webpack:///./node_modules/swiper/esm/components/core/manipulation/index.js","webpack:///./node_modules/swiper/esm/components/core/events/onTouchStart.js","webpack:///./node_modules/swiper/esm/components/core/events/onTouchMove.js","webpack:///./node_modules/swiper/esm/components/core/events/onTouchEnd.js","webpack:///./node_modules/swiper/esm/components/core/events/onResize.js","webpack:///./node_modules/swiper/esm/components/core/events/onClick.js","webpack:///./node_modules/swiper/esm/components/core/events/onScroll.js","webpack:///./node_modules/swiper/esm/components/core/events/index.js","webpack:///./node_modules/swiper/esm/components/core/breakpoints/setBreakpoint.js","webpack:///./node_modules/swiper/esm/components/core/breakpoints/getBreakpoint.js","webpack:///./node_modules/swiper/esm/components/core/breakpoints/index.js","webpack:///./node_modules/swiper/esm/components/core/classes/addClasses.js","webpack:///./node_modules/swiper/esm/components/core/classes/removeClasses.js","webpack:///./node_modules/swiper/esm/components/core/classes/index.js","webpack:///./node_modules/swiper/esm/components/core/images/loadImage.js","webpack:///./node_modules/swiper/esm/components/core/images/preloadImages.js","webpack:///./node_modules/swiper/esm/components/core/images/index.js","webpack:///./node_modules/swiper/esm/components/core/check-overflow/index.js","webpack:///./node_modules/swiper/esm/components/core/defaults.js","webpack:///./node_modules/swiper/esm/components/core/core-class.js","webpack:///src/views/robot/components/MemberAnalysis.vue","webpack:///./src/views/robot/components/MemberAnalysis.vue?4e71","webpack:///./src/views/robot/components/MemberAnalysis.vue","webpack:///./src/views/robot/components/MarketAnalysis.vue?b617","webpack:///src/views/robot/components/MarketAnalysis.vue","webpack:///./src/views/robot/components/MarketAnalysis.vue?2f4d","webpack:///./src/views/robot/components/MarketAnalysis.vue","webpack:///./src/views/robot/components/RepurchaseAnalysis.vue?4187","webpack:///src/views/robot/components/RepurchaseAnalysis.vue","webpack:///./src/views/robot/components/RepurchaseAnalysis.vue?073f","webpack:///./src/views/robot/components/RepurchaseAnalysis.vue","webpack:///src/views/robot/robotAnalysis.vue","webpack:///./src/views/robot/robotAnalysis.vue?0128","webpack:///./src/views/robot/robotAnalysis.vue","webpack:///./src/assets/material_red.png","webpack:///./node_modules/echarts/lib/visual/aria.js","webpack:///./node_modules/echarts/lib/component/brush/brushAction.js","webpack:///./node_modules/echarts/lib/chart/pie/labelLayout.js","webpack:///./node_modules/echarts/lib/component/visualMap/typeDefaulter.js","webpack:///./src/assets/material_blue.png","webpack:///./node_modules/zrender/lib/svg/helper/ShadowManager.js","webpack:///./node_modules/echarts/lib/component/axis/SingleAxisView.js","webpack:///./node_modules/zrender/lib/mixin/Animatable.js","webpack:///./node_modules/echarts/lib/chart/candlestick/CandlestickSeries.js","webpack:///./node_modules/echarts/lib/component/helper/BrushTargetManager.js","webpack:///./node_modules/echarts/lib/coord/geo/parseGeoJson.js","webpack:///./node_modules/echarts/lib/chart/sankey/sankeyAction.js","webpack:///./node_modules/echarts/lib/chart/tree/treeAction.js","webpack:///./node_modules/echarts/lib/chart/pie.js","webpack:///./node_modules/echarts/lib/util/shape/sausage.js","webpack:///./node_modules/echarts/lib/component/brush/BrushView.js","webpack:///./node_modules/echarts/lib/visual/LegendVisualProvider.js","webpack:///./node_modules/echarts/lib/component/parallelAxis.js","webpack:///./node_modules/echarts/lib/component/helper/cursorHelper.js","webpack:///./node_modules/echarts/lib/theme/light.js","webpack:///./node_modules/echarts/lib/coord/single/AxisModel.js","webpack:///./node_modules/echarts/lib/chart/helper/labelHelper.js","webpack:///./node_modules/zrender/lib/graphic/shape/Rect.js","webpack:///./node_modules/echarts/lib/chart/helper/EffectSymbol.js","webpack:///./node_modules/echarts/lib/coord/geo/geoSVGLoader.js","webpack:///./node_modules/echarts/lib/chart/helper/LargeSymbolDraw.js","webpack:///./node_modules/echarts/lib/chart/tree/treeLayout.js","webpack:///./node_modules/echarts/lib/model/OptionManager.js","webpack:///./node_modules/zrender/lib/graphic/shape/Line.js","webpack:///./node_modules/echarts/lib/chart/scatter/ScatterSeries.js","webpack:///./node_modules/zrender/lib/mixin/Draggable.js","webpack:///./node_modules/echarts/lib/chart/sunburst/sunburstLayout.js","webpack:///./node_modules/echarts/lib/component/axisPointer.js","webpack:///./node_modules/echarts/lib/component/visualMap/helper.js","webpack:///./node_modules/zrender/lib/graphic/Path.js","webpack:///./node_modules/echarts/lib/coord/cartesian/Cartesian2D.js","webpack:///./node_modules/echarts/lib/component/dataZoom/AxisProxy.js","webpack:///./node_modules/echarts/lib/chart/helper/createRenderPlanner.js","webpack:///./node_modules/echarts/lib/component/grid.js","webpack:///./node_modules/echarts/lib/component/axisPointer/modelHelper.js","webpack:///./node_modules/echarts/lib/chart/heatmap/HeatmapLayer.js","webpack:///./node_modules/zrender/lib/dom/HandlerProxy.js","webpack:///./node_modules/echarts/lib/chart/map/mapSymbolLayout.js","webpack:///./node_modules/echarts/lib/coord/cartesian/Cartesian.js","webpack:///./src/assets/robot_arrow_2.png","webpack:///./node_modules/echarts/lib/chart/sankey/SankeySeries.js","webpack:///./node_modules/echarts/lib/component/geo.js","webpack:///./node_modules/echarts/lib/coord/calendar/Calendar.js","webpack:///./node_modules/echarts/lib/processor/dataStack.js","webpack:///./node_modules/echarts/lib/component/legend.js","webpack:///./node_modules/echarts/lib/chart/helper/focusNodeAdjacencyAction.js","webpack:///./node_modules/zrender/lib/Handler.js","webpack:///./node_modules/echarts/lib/chart/graph/simpleLayout.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/MagicType.js","webpack:///./node_modules/zrender/lib/vml/core.js","webpack:///./node_modules/echarts/lib/processor/dataFilter.js","webpack:///./node_modules/zrender/lib/graphic/shape/Polyline.js","webpack:///./node_modules/echarts/lib/component/axisPointer/AxisPointerView.js","webpack:///./node_modules/zrender/lib/graphic/CompoundPath.js","webpack:///./node_modules/echarts/lib/chart/line/poly.js","webpack:///./node_modules/zrender/lib/core/LRU.js","webpack:///./node_modules/zrender/lib/Element.js","webpack:///./node_modules/echarts/lib/chart/bar/PictorialBarSeries.js","webpack:///./node_modules/echarts/lib/component/visualMap/visualMapAction.js","webpack:///./node_modules/echarts/lib/chart/sunburst.js","webpack:///./node_modules/echarts/lib/chart/graph/graphAction.js","webpack:///./src/views/robot/components/RepurchaseAnalysis.vue?e4c3","webpack:///./node_modules/echarts/lib/action/roamHelper.js","webpack:///./node_modules/zrender/lib/contain/path.js","webpack:///./src/views/robot/utils/dataType.js","webpack:///./node_modules/echarts/lib/coord/parallel/Parallel.js","webpack:///./node_modules/echarts/lib/coord/polar/AxisModel.js","webpack:///./node_modules/zrender/lib/graphic/shape/Circle.js","webpack:///./node_modules/echarts/lib/chart/treemap.js","webpack:///./node_modules/echarts/lib/component/markPoint.js","webpack:///./node_modules/echarts/lib/component/toolbox/ToolboxView.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack:///./node_modules/zrender/lib/svg/Painter.js","webpack:///./node_modules/zrender/lib/graphic/Pattern.js","webpack:///./node_modules/echarts/lib/component/axisPointer/BaseAxisPointer.js","webpack:///./node_modules/echarts/lib/chart/boxplot/BoxplotView.js","webpack:///./node_modules/echarts/lib/component/dataZoomSelect.js","webpack:///./node_modules/echarts/lib/component/timeline/SliderTimelineModel.js","webpack:///./node_modules/zrender/lib/graphic/RadialGradient.js","webpack:///./node_modules/zrender/lib/core/guid.js","webpack:///./node_modules/echarts/lib/model/mixin/boxLayout.js","webpack:///./node_modules/echarts/lib/chart/graph/edgeVisual.js","webpack:///./node_modules/echarts/lib/coord/parallel/AxisModel.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/Restore.js","webpack:///./node_modules/echarts/lib/chart/custom.js","webpack:///./node_modules/echarts/lib/coord/axisTickLabelBuilder.js","webpack:///./node_modules/echarts/lib/util/model.js","webpack:///./node_modules/echarts/lib/scale/Scale.js","webpack:///./node_modules/zrender/lib/container/Group.js","webpack:///./node_modules/zrender/lib/core/bbox.js","webpack:///./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack:///./node_modules/echarts/lib/chart/helper/whiskerBoxCommon.js","webpack:///./node_modules/echarts/lib/chart/helper/createListSimply.js","webpack:///./node_modules/echarts/lib/model/mixin/colorPalette.js","webpack:///./node_modules/echarts/lib/component/dataZoomSlider.js","webpack:///./node_modules/echarts/lib/util/animation.js","webpack:///./node_modules/echarts/lib/chart/bar/helper.js","webpack:///./node_modules/zrender/lib/contain/cubic.js","webpack:///./node_modules/zrender/lib/contain/text.js","webpack:///./node_modules/echarts/lib/view/Chart.js","webpack:///./node_modules/zrender/lib/vml/Painter.js","webpack:///./node_modules/echarts/lib/chart/candlestick/preprocessor.js","webpack:///./node_modules/echarts/lib/component/visualMap/VisualMapModel.js","webpack:///./node_modules/echarts/lib/coord/polar/prepareCustom.js","webpack:///./node_modules/echarts/lib/component/axisPointer/axisTrigger.js","webpack:///./src/assets/robot_arrow_1.png","webpack:///./node_modules/echarts/lib/component/legend/scrollableLegendAction.js","webpack:///./node_modules/echarts/lib/coord/cartesian/Axis2D.js","webpack:///./node_modules/echarts/lib/coord/geo/mapDataStorage.js","webpack:///./node_modules/echarts/lib/data/Source.js","webpack:///./node_modules/echarts/lib/chart/boxplot/boxplotLayout.js","webpack:///./node_modules/zrender/lib/Painter.js","webpack:///./node_modules/echarts/lib/util/format.js","webpack:///./node_modules/echarts/lib/component/timeline/TimelineModel.js","webpack:///./node_modules/echarts/lib/coord/single/singleAxisHelper.js","webpack:///./node_modules/echarts/lib/data/helper/dataStackHelper.js","webpack:///./node_modules/echarts/lib/component/calendar/CalendarView.js","webpack:///./node_modules/zrender/lib/tool/transformPath.js","webpack:///./node_modules/echarts/lib/component/timeline.js","webpack:///./node_modules/echarts/lib/chart/lines/linesVisual.js","webpack:///./node_modules/echarts/lib/coord/geo/geoCreator.js","webpack:///./node_modules/echarts/lib/chart/graph/forceHelper.js","webpack:///./node_modules/echarts/lib/component/helper/sliderMove.js","webpack:///./node_modules/echarts/lib/chart/line.js","webpack:///./node_modules/echarts/lib/chart/tree.js","webpack:///./node_modules/echarts/lib/chart/line/lineAnimationDiff.js","webpack:///./node_modules/echarts/lib/component/axisPointer/SingleAxisPointer.js","webpack:///./node_modules/echarts/lib/component/legend/ScrollableLegendModel.js","webpack:///./node_modules/zrender/lib/vml/vml.js","webpack:///./node_modules/echarts/lib/chart/line/LineView.js","webpack:///./node_modules/echarts/lib/theme/dark.js","webpack:///./node_modules/echarts/lib/component/axis/CartesianAxisView.js","webpack:///./node_modules/echarts/lib/coord/geo/Region.js","webpack:///./node_modules/echarts/lib/component/parallel.js","webpack:///./node_modules/echarts/lib/component/brush/BrushModel.js","webpack:///./node_modules/echarts/lib/stream/task.js","webpack:///./node_modules/echarts/lib/component/helper/brushHelper.js","webpack:///./node_modules/echarts/lib/component/angleAxis.js","webpack:///./node_modules/echarts/lib/chart/treemap/Breadcrumb.js","webpack:///./node_modules/echarts/lib/chart/map/mapDataStatistic.js","webpack:///./node_modules/echarts/lib/chart/helper/SymbolDraw.js","webpack:///./node_modules/echarts/lib/chart/pie/PieSeries.js","webpack:///./src/api/robot.js","webpack:///./node_modules/echarts/lib/util/layout.js","webpack:///./node_modules/echarts/lib/chart/boxplot.js","webpack:///./node_modules/echarts/lib/component/axis/AxisBuilder.js","webpack:///./node_modules/echarts/lib/preprocessor/backwardCompat.js","webpack:///./node_modules/echarts/lib/component/helper/BrushController.js","webpack:///./node_modules/echarts/lib/coord/polar/Polar.js","webpack:///./node_modules/echarts/lib/visual/seriesColor.js","webpack:///./node_modules/echarts/lib/processor/dataSample.js","webpack:///./node_modules/echarts/lib/model/mixin/textStyle.js","webpack:///./node_modules/echarts/lib/chart/boxplot/BoxplotSeries.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/Brush.js","webpack:///./node_modules/echarts/lib/component/axisPointer/viewHelper.js"],"names":["_util","each","createHashMap","SeriesModel","createListFromArray","_default","extend","type","dependencies","visualColorAccessPath","getInitialData","option","ecModel","source","this","getSource","setEncodeAndDimensions","getRawIndicesByActiveState","activeState","coordSys","coordinateSystem","data","getData","indices","eachActiveState","theActiveState","dataIndex","push","getRawIndex","defaultOption","zlevel","z","parallelIndex","label","show","inactiveOpacity","activeOpacity","lineStyle","width","opacity","emphasis","progressive","smooth","animationEasing","seriesModel","encodeDefine","parallelModel","getComponent","get","dimensions","axisDim","dataDimIndex","convertDimNameToNumber","set","dimName","replace","module","exports","zrUtil","VisualMapView","graphic","_symbol","createSymbol","layout","helper","PiecewiseVisualMapView","doRender","thisGroup","group","removeAll","visualMapModel","textGap","textStyleModel","textFont","getFont","textFill","getTextColor","itemAlign","_getItemAlign","itemSize","viewData","_getViewData","endsText","showLabel","retrieve","renderItem","item","piece","itemGroup","Group","onclick","bind","_onItemClick","_enableHoverLink","indexInModelPieceList","representValue","getRepresentValue","_createItemSymbol","visualState","getValueState","add","Text","style","x","y","text","textVerticalAlign","textAlign","_renderEndsText","viewPieceList","box","renderBackground","positionGroup","pieceIndex","onHoverLink","method","hoverLink","api","dispatchAction","batch","makeHighDownBatch","findTargetDataIndices","on","modelOption","orient","getItemAlign","align","map","getPieceList","index","inverse","reverse","slice","shapeParam","getControllerVisual","selected","clone","newKey","getSelectedMapKey","selectedMode","o","key","from","uid","visualMapId","id","echarts","registerAction","event","update","createListSimply","_model","defaultEmphasis","_sourceHelper","makeSeriesEncodeForNameBased","LegendVisualProvider","FunnelSeries","extendSeriesModel","init","superApply","arguments","legendVisualProvider","getRawData","_defaultLabelLine","coordDimensions","encodeDefaulter","curry","labelLineNormalOpt","labelLine","labelLineEmphasisOpt","getDataParams","params","superCall","valueDim","mapDimension","sum","getSum","percent","toFixed","$vars","legendHoverLink","left","top","right","bottom","minSize","maxSize","sort","gap","funnelAlign","position","length","itemStyle","borderColor","borderWidth","dataToCoordSize","dataSize","dataItem","dimIdx","val","halfSize","p1","p2","Math","abs","dataToPoint","rect","getBoundingRect","height","zoom","getZoom","coord","size","BoundingRect","View","geoSourceManager","Geo","name","nameMap","invertLongitute","call","load","_nameCoordMap","nameCoordMap","_regionsMap","regionsMap","_invertLongitute","regions","_rect","boundingRect","doConvert","methodName","finder","value","geoModel","getReferringComponents","prototype","constructor","containCoord","i","contain","transformTo","rawTransformable","_rawTransformable","transform","calculateTransform","decomposeTransform","scale","updateTransform","_updateTransform","getRegion","getRegionByCoord","addGeoCoord","geoCoord","getGeoCoord","noRoam","out","convertToPixel","convertFromPixel","mixin","gridModel","axisModel","opt","grid","axis","otherAxisOnZeroOf","getAxesOnZeroOf","rawAxisPosition","axisPosition","dim","getRect","rectBound","idx","onZero","axisOffset","posBound","onZeroCoord","toGlobalCoord","dataToCoord","max","min","rotation","PI","dirMap","labelDirection","tickDirection","nameDirection","labelOffset","labelInside","labelRotate","z2","extendComponentView","render","Rect","shape","defaults","fill","getItemStyle","silent","registerPreprocessor","xAxis","yAxis","updateViewOnPan","controllerHost","dx","dy","target","pos","dirty","updateViewOnZoom","zoomDelta","zoomX","zoomY","zoomLimit","newZoom","zoomMin","zoomMax","Infinity","zoomScale","ComponentModel","ComponentView","detectSourceFormat","_sourceType","SERIES_LAYOUT_BY_COLUMN","seriesLayoutBy","sourceHeader","optionUpdated","DEFAULT_MIN_MERGE","DEFAULT_MIN_GALLOPING","minRunLength","n","r","makeAscendingRun","array","lo","hi","compare","runHi","reverseRun","t","binaryInsertionSort","start","mid","pivot","gallopLeft","hint","lastOffset","maxOffset","offset","tmp","m","gallopRight","TimSort","runStart","runLength","minGallop","stackSize","pushRun","_runStart","_runLength","mergeRuns","mergeAt","forceMergeRuns","start1","length1","start2","length2","k","mergeLow","mergeHigh","cursor1","cursor2","dest","count1","count2","exit","_minGallop","Error","customCursor","customDest","remaining","ts","minRun","force","windingLine","EPSILON","isAroundEqual","a","b","points","w","p","p0","Clip","color","isArrayLike","arraySlice","Array","defaultGetter","defaultSetter","interpolateNumber","interpolateString","interpolateArray","arrDim","len","len2","j","fillArr","arr0","arr1","arr0Len","arr1Len","isPreviousLarger","isNaN","isArraySame","catmullRomInterpolateArray","p3","t2","t3","catmullRomInterpolate","v0","v1","cloneValue","ret","rgba2String","rgba","floor","join","getArrayDim","keyframes","lastValue","createTrackClip","animator","easing","oneTrackDone","propName","forceAnimate","getter","_getter","setter","_setter","useSpline","trackLen","trackMaxTime","firstVal","isValueArray","isValueColor","isValueString","time","kfPercents","kfValues","prevValue","isAllValueEqual","colorArray","parse","_target","lastFrame","lastFramePercent","onframe","frame","range","clip","life","loop","_loop","delay","_delay","ondestroy","Animator","_tracks","_clipCount","_doneList","_onframeList","_clipList","when","props","tracks","hasOwnProperty","during","callback","pause","_paused","resume","isPaused","_doneCallback","doneList","lastClip","self","clipCount","animation","addClip","oldOnFrame","stop","forwardToLast","clipList","removeClip","done","cb","getClips","Model","linkList","List","createDimensions","TreeNode","hostTree","depth","parentNode","children","viewChildren","Tree","hostModel","levelOptions","root","_nodes","levelModels","levelDefine","addChild","child","node","isRemoved","eachNode","options","context","isString","order","suppressVisitSub","attr","updateDepthAndHeight","getNodeById","getId","res","contains","getAncestors","includeSelf","ancestors","getValue","dimension","getDimension","setLayout","merge","setItemLayout","getLayout","getItemLayout","getModel","path","itemModel","getItemModel","levelModel","getLevelModel","setVisual","setItemVisual","getVisual","ignoreParent","getItemVisual","isAncestorOf","parent","isDescendantOf","getNodeByDataIndex","rawIndex","getNodeByName","nodes","count","clearLayouts","clearItemLayouts","createTree","dataRoot","treeOptions","beforeLink","tree","levels","listData","dimMax","buildHierarchy","dataNode","isArray","dimensionsInfo","dimensionsCount","list","initData","mainData","struct","structAttr","_config","__DEV__","VisualMapModel","VisualMapping","visualDefault","_number","reformIntervals","PiecewiseModel","minOpen","maxOpen","itemWidth","itemHeight","itemSymbol","pieceList","categories","splitNumber","itemGap","newOption","isInit","_pieceList","resetExtent","mode","_mode","_determineMode","resetMethods","_resetSelected","resetVisual","mappingOption","state","mappingMethod","dataExtent","getExtent","visual","completeVisualOption","visualTypesInPieces","visualTypes","listVisualTypes","isCategory","has","obj","visualType","isObject","pieces","v","exists","stateList","apply","thisOption","hasSel","setSelected","findPieceIndex","result","eachTargetSeries","dataIndices","getDataDimension","pIdx","seriesId","pieceInterval","interval","getVisualMeta","getColorVisual","stops","outerColors","edge","unshift","curr","setStop","valueState","precision","parseInt","splitStep","close","formatValueText","cate","normalizeReverse","pieceListItem","closeList","infinityList","useMinMax","lg","names","retrieveVisuals","edgeSymbols","zrColor","eventUtil","domUtil","env","formatUtil","toCamelCase","vendors","gCssText","assembleTransition","duration","transitionCurve","transitionText","vendorPrefix","assembleFont","cssText","fontSize","round","assembleCssText","tooltipModel","transitionDuration","backgroundColor","padding","canvasSupported","toHex","borderName","camelCase","normalizeCssArray","makeStyleCoord","zr","appendToBody","zrX","zrY","zrPainter","painter","zrViewportRoot","getViewportRoot","transformLocalCoord","document","body","viewportRootOffset","getViewportRootOffset","offsetLeft","offsetTop","TooltipContent","container","wxa","el","createElement","domBelongToZr","_zr","getZr","_appendToBody","_styleCoord","getWidth","getHeight","appendChild","_container","_show","_hideTimeout","onmouseenter","_enterable","clearTimeout","_inContent","onmousemove","e","window","handler","normalizeEvent","dispatch","onmouseleave","hideLater","_hideDelay","stl","currentStyle","defaultView","getComputedStyle","domStyle","styleCoord","display","innerHTML","pointerEvents","setContent","content","setEnterable","enterable","getSize","clientWidth","clientHeight","moveTo","hide","setTimeout","isShow","dispose","removeChild","getOuterSize","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth","parallelVisual","registerVisual","preprocessor","candlestickVisual","candlestickLayout","registerLayout","Axis","TimelineAxis","coordExtent","axisType","model","getLabelModel","isHorizontal","inherits","_graphic","subPixelOptimize","createRenderPlanner","parsePercent","retrieve2","LargeArr","Float32Array","seriesType","plan","reset","candleWidth","calculateCandleWidth","cDimIdx","vDimIdx","coordDims","cDim","vDims","openDim","closeDim","lowestDim","highestDim","isSimpleBox","progress","pipelineContext","large","largeProgress","normalProgress","next","axisDimVal","openVal","closeVal","lowestVal","highestVal","ocLow","ocHigh","ocLowPoint","getPoint","ocHighPoint","lowestPoint","highestPoint","ends","addBodyEnd","subPixelOptimizePoint","sign","getSign","initBaseline","brushRect","makeBrushRect","NaN","point","point1","point2","pmin","pmax","tmpIn","tmpOut","extent","baseAxis","getBaseAxis","bandWidth","getBandWidth","barMaxWidth","barMinWidth","barWidth","GestureMgr","_track","dist","pointPair","sqrt","center","recognize","_doTrack","_recognize","clear","touches","trackItem","touch","clientToLocal","eventName","recognizers","gestureInfo","pinch","track","pinchEnd","pinchPre","pinchScale","isFinite","pinchCenter","pinchX","pinchY","Diff","buildValues","diff","components","newArr","oldArr","componentPos","componentLen","newPos","oldPos","component","removed","added","clonePath","equals","newLen","oldLen","editLength","maxEditLength","bestPath","extractCommon","execEditLength","diagonalPath","basePath","addPath","removePath","undefined","canAdd","canRemove","pushComponent","last","commonCount","tokenize","arrayDiff","RoamController","roamHelper","_cursorHelper","onIrrelevantElement","_component","getUID","Transformable","getFixedItemStyle","areaColor","updateMapSelectHandler","mapDraw","mapOrGeoModel","regionsGroup","fromView","off","_mouseDownFlag","__regions","action","mainType","region","updateMapSelected","eachChild","otherRegionEl","trigger","isSelected","MapDraw","updateGroup","_controller","_controllerHost","_updateGroup","_mapName","_initialized","_regionsGroup","_backgroundGroup","draw","payload","isGeo","eachComponent","subType","mapSeries","getHostGeoModel","geo","_updateBackground","targetScale","transformInfo","getTransformInfo","isFirstDraw","childAt","roamTransform","updateProps","rawScale","rawPosition","itemStyleAccessPath","hoverItemStyleAccessPath","labelAccessPath","hoverLabelAccessPath","regionGroup","compoundPath","CompoundPath","segmentIgnoreThreshold","paths","dataIdx","regionModel","getRegionModel","itemStyleModel","hoverItemStyleModel","hoverItemStyle","labelModel","hoverLabelModel","indexOfName","visualColor","transformPoint","geometries","geometry","exterior","Polygon","interiors","interior","setStyle","strokeNoScale","culling","hoverShowLabel","isDataNaN","itemLayout","labelFetcher","query","textEl","setLabelStyle","hoverStyle","labelDataIndex","defaultText","useInsideStyle","textScale","setItemGraphicEl","eventData","componentType","componentIndex","geoIndex","groupRegions","highDownSilentOnTouch","setHoverStyle","_updateController","remove","removeGraphic","mapName","makeGraphic","controller","enable","makeActionBase","originX","originY","traverse","setPointerChecker","getViewRectAfterRoam","matrix","vector","mIdentity","identity","isNotAroundZero","opts","origin","transformableProto","needLocalTransform","scaleTmp","parentHasTransform","create","getLocalTransform","mul","copy","globalScaleRatio","getGlobalScale","relX","relY","sx","sy","invTransform","invert","setTransform","ctx","dpr","restoreTransform","tmpTransform","originTransform","setLocalTransform","atan2","transformCoordToLocal","v2","applyTransform","transformCoordToGlobal","rotate","Displayable","imageHelper","ZImage","brush","prevEl","src","image","_image","createOrUpdateImage","onload","isImageReady","aspect","sWidth","sHeight","drawImage","drawRectText","eachSeriesByType","graph","getGraph","minValue","maxValue","nodeValue","mapping","mapValueToColor","mapValueToVisual","customColor","layoutUtil","LegendView","WH","XY","ScrollableLegendView","newlineDisabled","_currentIndex","_containerGroup","getContentGroup","_controllerGroup","_showController","resetInner","removeClipPath","__rectSize","renderInner","legendModel","selector","selectorPosition","me","controllerGroup","pageIconSize","createPageButton","pageTextStyleModel","iconIdx","pageDataIndexName","icon","createIcon","getOrient","_pageGo","font","layoutInner","isFirstRender","selectorGroup","getSelectorGroup","orientIdx","wh","xy","hw","yx","selectorButtonGap","selectorRect","selectorPos","processMaxSize","mainRect","_layoutContentAndController","contentGroup","containerGroup","contentRect","controllerRect","showController","contentPos","containerPos","controllerPos","pageButtonGap","pageButtonPosition","clipShape","setClipPath","invisible","pageInfo","_getPageInfo","pageIndex","contentPosition","_updatePageInfoView","to","scrollDataIndex","legendId","canJump","childOfName","cursor","pageText","pageFormatter","current","total","pageCount","containerRectSize","targetItemIndex","_findTargetItemIndex","targetItem","itemCount","pCount","pagePrevDataIndex","pageNextDataIndex","targetItemInfo","getItemInfo","s","winStartItemInfo","winEndItemInfo","currItemInfo","intersect","itemRect","__legendDataIndex","itemInfo","winStart","targetDataIndex","defaultIndex","legendDataIdx","ParallelAxis","axisIndex","makeInner","getDataItemValue","isTypedArray","Source","assert","SOURCE_FORMAT_ORIGINAL","SOURCE_FORMAT_ARRAY_ROWS","SOURCE_FORMAT_OBJECT_ROWS","SOURCE_FORMAT_KEYED_COLUMNS","SOURCE_FORMAT_UNKNOWN","SOURCE_FORMAT_TYPED_ARRAY","SERIES_LAYOUT_BY_ROW","BE_ORDINAL","Must","Might","Not","inner","datasetModel","sourceFormat","resetSourceDefaulter","datasetMap","prepareSource","seriesOption","fromDataset","dimensionsDefine","getDatasetModel","datasetOption","completeResult","completeBySourceData","startIndex","dimensionsDetectCount","encode","normalizeDimensionsDefine","arrayRowsTravelFirst","objectRowsCollectDimensions","colArr","value0","displayName","exist","maxLoop","firstIndex","makeSeriesEncodeForAxisCoordSys","baseCategoryDimIndex","categoryWayValueDimStart","encodeItemName","encodeSeriesName","coordDimInfo","coordDimIdx","getDataDimCountOnCoordDim","datasetRecord","categoryWayDim","valueWayDim","pushDim","dimIdxArr","idxFrom","idxCount","dimsDef","coordDimName","itemName","seriesName","dimCount","potentialNameDimIndex","idxResult","idxRes0","idxRes1","guessRecords","guessResult","doGuessOrdinal","isPureNumber","fulfilled","nameDimIndex","thisData","datasetIndex","guessOrdinal","dimIndex","dimType","dimDefItem","sample","detectValue","row","beStr","Line","vec2","curveUtil","EffectLine","lineData","seriesScope","createLine","_updateEffectSymbol","effectLineProto","effectModel","symbolType","symbol","_symbolType","setColor","_symbolScale","_updateEffectAnimation","period","constantSpeed","delayExpr","isDelayFunc","ignore","updateAnimationPoints","getLineLength","_period","stopAnimation","__t","animate","updateSymbolPosition","__p1","__cp1","__p2","updateData","cp1","lastPos","quadraticAt","quadraticDerivativeAt","tx","ty","__lastT","scaleY","updateLayout","visualSolution","throttleUtil","BrushTargetManager","STATE_LIST","DISPATCH_METHOD","DISPATCH_FLAG","PRIORITY_BRUSH","PRIORITY","VISUAL","BRUSH","layoutCovers","brushModel","brushTargetManager","setInputRanges","areas","throttleType","throttleDelay","brushSelected","doDispatch","fn","createOrUpdate","isDisposed","checkInRange","selectorsByBrushType","rangeInfoList","area","brushType","selectors","getSelectorsByBrushType","brushSelector","sels","selectorsByElementType","isFunction","bSelector","sel","brushModelNotControll","seriesIndex","seriesIndices","indexOf","bindSelector","selFn","elType","setBrushOption","brushOption","brushIndex","thisBrushSelected","brushId","brushName","brushLink","linkedSeriesMap","selectedDataIndexForLink","rangeInfoBySeries","hasBrushExists","boundingRectBuilders","visualMappings","createVisualMappings","linkOthers","brushed","stepAParallel","hasAxisBrushed","stepAOthers","controlSeries","eachSeries","seriesBrushSelected","applyVisual","lineX","noop","lineY","getBoundingRectFromMinMax","polygon","minMax","rg","visualSymbol","layoutPoints","modelUtil","getSeriesByIndex","queryDataIndex","getItemGraphicEl","getTooltipPosition","getValues","_labelHelper","getDefaultLabel","SymbolClz","symbolProto","getSymbolSize","symbolSize","getScale","driftSymbol","drift","_createSymbol","keepAspect","symbolPath","stopSymbolAnimation","toLastFrame","getSymbolPath","highlight","downplay","setZ","setDraggable","draggable","_updateCommon","fadeIn","initProps","_seriesModel","normalStyleAccessPath","emphasisStyleAccessPath","normalLabelAccessPath","emphasisLabelAccessPath","highDownOnUpdate","fromState","toState","incremental","useHoverLayer","__symbolOriginalScale","ratio","emphasisOpt","animateTo","useStyle","shadowBlur","shadowOffsetX","shadowOffsetY","shadowColor","symbolOffset","hoverAnimation","cursorStyle","hasItemOption","getShallow","elStyle","symbolRotate","symbolInnerColor","liftZ","z2Origin","__z2Origin","useNameLabel","getLabelDefaultText","getName","isRectText","autoColor","isAnimationEnabled","fadeOut","keepLabel","symbolUtil","normalizeSymbolSize","extendChartView","polar","oldData","_data","updateSymbols","oldPoints","newPoints","symbolGroup","__dimIdx","getInitialPoints","pt","cx","cy","polyline","Polyline","newIdx","oldIdx","execute","eachItemGraphicEl","getLineStyle","stroke","areaStyleModel","hoverAreaStyleModel","polygonIgnore","isEmpty","parentModel","hoverPolygonIgnore","getAreaStyle","itemHoverStyle","labelHoverModel","labelDimIndex","AxisBuilder","AxisView","axisBuilderAttrs","selfBuilderAttrs","axisPointerClass","radiusAxisModel","radiusAxis","angleAxis","getAngleAxis","ticksCoords","getTicksCoords","minorTicksCoords","getMinorTicksCoords","axisAngle","radiusExtent","layoutAxis","axisBuilder","getGroup","isBlank","_splitLine","splitLineModel","lineStyleModel","lineColors","lineCount","splitLines","colorIndex","Circle","mergePath","_minorSplitLine","minorSplitLineModel","lines","_splitArea","splitAreaModel","areaColors","splitAreas","prevRadius","Sector","r0","startAngle","endAngle","axisHelper","axisModelCommonMixin","_layout","getLayoutRect","_dataStackHelper","enableDataStack","isDimensionStacked","getStackedDimension","_completeDimensions","completeDimensions","_createDimensions","createList","dataStack","createScale","isInstance","createScaleByModel","setExtent","niceScaleExtent","mixinAxisModelCommonMethods","global","DOMIterables","forEach","createNonEnumerableProperty","COLLECTION_NAME","Collection","CollectionPrototype","error","ArrayCtor","m1","m2","out0","out1","out2","out3","out4","out5","translate","rad","aa","ac","atx","ab","ad","aty","st","sin","ct","cos","vx","vy","det","axisDefault","valueAxisDefault","valueAxis","defaultsShow","RadarModel","extendComponentModel","boundaryGap","axisLine","axisTick","axisLabel","nameTextStyle","showName","nameFormatter","nameGap","triggerEvent","indicatorModels","indicatorOpt","iNameTextStyle","nameLocation","indName","getIndicatorModels","radius","splitLine","splitArea","indicator","coordsOffsetMap","mapType","coordFix","cp","BaseBarSeries","getProgressive","getProgressiveThreshold","progressiveThreshold","largeThreshold","roundCap","showBackground","backgroundStyle","borderType","borderRadius","$forEach","sloppyArrayMethod","callbackfn","register","records","initGlobalListeners","record","useHandler","eventType","dis","makeDispatchAction","dispatchTooltipFinally","pendings","initialized","doEnter","onLeave","actuallyPayload","showLen","showTip","hideLen","hideTip","currTrigger","pendingList","unregister","Scale","OrdinalMeta","scaleProto","OrdinalScale","ordinalMeta","_ordinalMeta","_extent","getOrdinal","rank","normalize","getTicks","ticks","getLabel","unionExtentFromData","unionExtent","getApproximateExtent","getOrdinalMeta","niceTicks","niceExtent","MarkerModel","tooltip","distance","ChartView","Path","_createClipPathFromCoordSys","createClipPath","NORMAL_ITEM_STYLE_PATH","EMPHASIS_ITEM_STYLE_PATH","SKIP_PROPS","CandlestickView","_updateDrawMode","_isLargeDraw","_renderLarge","_renderNormal","incrementalPrepareRender","_clear","incrementalRender","_incrementalRenderLarge","_incrementalRenderNormal","isLargeDraw","needsClip","clipArea","getArea","hasValue","isNormalBoxClipped","createNormalBox","setBoxCommon","createLarge","clipPath","NormalBoxPath","buildPath","__simpleBox","lineTo","closePath","transInit","clipped","normalItemStyleModel","LargeBoxPath","__sign","largePoints","elP","elN","setLargeStyle","suffix","Style","Element","RectText","__clipPaths","__dirty","dragging","rectHover","beforeBrush","afterBrush","rectContain","__dirtyText","__zr","refresh","animateStyle","attrKV","calculateTextPosition","updateDataSelected","hasAnimation","selectedOffset","toggleItemSelected","midAngle","PiePiece","sector","piePieceProto","firstCreate","labelText","sectorShape","animationTypeUpdate","setShape","animationType","lineJoin","withAnimation","_updateLabel","hoverIgnore","normalIgnore","labelLayout","targetLineShape","linePoints","targetTextStyle","labelLineModel","labelLineHoverModel","inside","verticalAlign","PieView","sectorGroup","_sectorGroup","onSectorClick","piePiece","_createClipPath","clockwise","initOrUpdate","containPoint","simpleLayout","simpleLayoutEdge","eachEdge","curveness","node1","node2","Polar","_axisHelper","CoordinateSystem","resizePolar","polarModel","getRadiusAxis","updatePolarScale","onBand","setAxis","polarCreator","polarList","findAxisModel","angleAxisModel","queryComponents","$","DESCRIPTORS","defineProperties","stat","forced","sham","getSeriesStackId","getAxisKey","barLayoutPolar","lastStackCoords","barWidthAndOffset","calRadialBar","filter","getSeriesByType","isSeriesFiltered","axisKey","stackId","columnLayoutInfo","columnOffset","columnWidth","getOtherAxis","barMinHeight","barMinAngle","baseDim","stacked","clampLayout","valueAxisStart","baseValue","baseCoord","radiusSpan","dataToRadius","angle","dataToAngle","angleSpan","barSeries","columnsMap","axisExtent","columnsOnAxis","remainedWidth","autoWidthCount","categoryGap","stacks","maxWidth","barGap","barCategoryGap","coordSysName","barGapPercent","autoWidth","column","stack","lastColumn","widthSum","mathCos","mathSin","selectableMixin","geoCreator","GeoModel","layoutMode","getFilledRegions","_optionModelMap","reduce","optionModelMap","regionOpt","updateSelectedMap","aspectScale","boundingCoords","scaleLimit","getFormattedLabel","status","formatter","setZoom","setCenter","arrySlice","Eventful","eventProcessor","_$handlers","_$eventProcessor","normalizeQuery","host","eventful","isOnce","_h","h","wrap","one","callAtLast","zrEventfulCallAtLast","lastIndex","lastWrap","splice","isSilent","newList","l","args","argLen","hItem","afterTrigger","triggerWithContext","getMin","rangeStart","eqNaN","getMax","rangeEnd","getNeedCrossZero","getCoordSysModel","setRange","resetRange","coordinateSystemCreators","CoordinateSystemManager","_coordinateSystems","coordinateSystems","creater","concat","getCoordinateSystems","coordinateSystemCreator","curve","bbox","devicePixelRatio","CMD","M","L","C","Q","A","Z","R","min2","max2","mathMin","mathMax","mathSqrt","mathAbs","hasTypedArray","PathProxy","notSaveData","_saveData","_ctx","_xi","_yi","_x0","_y0","_ux","_uy","_len","_lineDash","_dashOffset","_dashIdx","_dashSum","setScale","getContext","beginPath","addData","exceedUnit","_needsDash","_dashedLineTo","bezierCurveTo","x1","y1","x2","y2","x3","y3","_dashedBezierTo","quadraticCurveTo","_dashedQuadraticTo","arc","anticlockwise","arcTo","x0","y0","toStatic","setLineDash","lineDash","lineDashSum","setLineDashOffset","setData","appendPath","appendSize","appendPathData","cmd","_expandData","_prevCmd","newData","dash","dashSum","nDash","cubicAt","bezierLen","tmpLen","Number","MAX_VALUE","xi","yi","fromLine","fromCubic","fromQuadratic","rx","ry","fromArc","rebuildPath","d","ux","uy","theta","dTheta","psi","fs","scaleX","isEllipse","features","ctor","_format","encodeHTML","layoutInfo","leaves","leavesModel","nodeData","wrapMethod","isExpand","treeDepth","expandAndCollapse","expandTreeDepth","initialTreeDepth","getRawDataItem","collapsed","formatTooltip","realRoot","edgeShape","edgeForkPosition","roam","nodeScaleRatio","animationDuration","animationDurationUpdate","numberUtil","scaleHelper","IntervalScale","intervalScaleProto","mathCeil","ceil","mathFloor","ONE_SECOND","ONE_MINUTE","ONE_HOUR","ONE_DAY","bisect","TimeScale","stepLvl","_stepLvl","date","Date","formatTime","getSetting","getFullYear","getMonth","getDate","minInterval","maxInterval","_interval","fixMin","fixMax","approxTickNum","span","approxInterval","scaleLevelsLen","scaleLevels","level","yearSpan","yearStep","nice","timezoneOffset","getTimezoneOffset","fixExtent","_niceExtent","parseDate","useUTC","useEncodeDefaulter","step","smoothMonotone","showSymbol","showAllSymbol","connectNulls","sampling","hoverLayerThreshold","Component","parallelAxisIndex","axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandRate","axisExpandDebounce","axisExpandSlideTriggerArea","axisExpandTriggerOn","parallelAxisDefault","mergeOption","_initDimensions","setAxisExpand","axisModels","dependentModels","parallelAxis","wx","getSystemInfoSync","browser","os","svgSupported","touchEventsSupported","domSupported","worker","navigator","detect","userAgent","ua","firefox","match","ie","weChat","test","version","SVGRect","pointerEventsSupported","hierNode","defaultAncestor","ancestor","prelim","modifier","change","shift","thread","pop","firstWalk","separation","siblings","subtreeW","executeShifts","midPoint","apportion","secondWalk","nodeX","defaultSeparation","radialCoordinate","radialCoor","getViewRect","getBoxLayoutParams","subtreeV","nodeOutRight","nodeInRight","nodeOutLeft","nodeInLeft","sumOutRight","sumInRight","sumOutLeft","sumInLeft","nextRight","nextLeft","moveSubtree","nextAncestor","wl","wr","pathTool","colorTool","Image","Ring","BezierCurve","Arc","LinearGradient","RadialGradient","IncrementalDisplayable","subPixelOptimizeUtil","EMPTY_OBJ","Z2_EMPHASIS_LIFT","CACHED_LABEL_STYLE_PROPERTIES","textBorderColor","textBorderWidth","EMPHASIS","NORMAL","_highlightNextDigit","_highlightKeyMap","_customShapeMap","extendShape","extendPath","pathData","extendFromString","registerShape","ShapeClass","getShapeClass","makePath","createFromString","centerGraphic","resizePath","makeImage","imageUrl","img","pathRect","subPixelOptimizeLine","param","subPixelOptimizeRect","hasFillOrStroke","fillOrStroke","liftedColorMap","liftedColorCount","liftColor","liftedColor","lift","cacheElementStl","__hoverStlDirty","__hoverStl","normalStyle","__cachedNormalStl","__cachedNormalZ2","singleEnterEmphasis","hoverStl","__highlighted","isGroup","elTarget","targetStyle","addHover","rollbackDefaultTextStyle","extendFrom","setDefaultHoverFillStroke","applyDefaultTextStyle","prop","singleEnterNormal","highlighted","removeHover","normalStl","normalZ2","traverseUpdate","updater","commonParam","__highDownOnUpdate","setElementHoverStyle","onElementMouseOver","shouldSilent","__highByOuter","onElementMouseOut","onElementEmphasisEvent","highlightDigit","onElementNormalEvent","__highDownSilentOnTouch","zrByTouch","setAsHighDownDispatcher","asDispatcher","disable","__highDownDispatcher","isHighDownDispatcher","getHighlightDigit","highlightKey","emphasisStyle","normalModel","emphasisModel","normalSpecified","emphasisSpecified","baseText","labelProp","showNormal","showEmphasis","normalStyleText","emphasisStyleText","setTextStyle","modifyLabelStyle","normalStyleProps","emphasisStyleProps","textStyle","specifiedTextStyle","isEmphasis","setTextStyleCommon","setText","defaultColor","textPosition","getTextPosition","textOffset","textRotation","textDistance","richResult","globalTextStyle","richItemNames","getRichItemNames","richTextStyle","setTokenTextStyle","rich","forceRich","richItemNameMap","isBlock","getAutoColor","textStroke","textStrokeWidth","insideRollbackOpt","fontStyle","fontWeight","fontFamily","textLineHeight","textWidth","textHeight","textTag","disableBox","textBackgroundColor","textPadding","textBorderRadius","textBoxShadowColor","textBoxShadowBlur","textBoxShadowOffsetX","textBoxShadowOffsetY","textShadowColor","textShadowBlur","textShadowOffsetX","textShadowOffsetY","insideRollback","useInsideStyleCache","useAutoColorCache","gTextStyleModel","trim","animateOrSetProps","isUpdate","animatableModel","animationEnabled","postfix","animationDelay","getAnimationDelayParams","getTransform","mat","transformDirection","direction","hBase","vBase","vertex","groupTransition","g1","g2","elMap1","getElMap","anid","oldEl","newProp","getAnimatableProps","g","elMap","clipPointsByRect","clipRectByRect","targetRect","iconStr","linePolygonIntersect","a1x","a1y","a2x","a2y","lineLineIntersect","b1x","b1y","b2x","b2y","mx","my","nx","ny","nmCrossProduct","crossProduct2d","nearZero","b1a1x","b1a1y","q","eventTool","throttle","DataZoomView","sliderMove","linearMap","asc","DEFAULT_LOCATION_EDGE_GAP","DEFAULT_FRAME_BORDER_WIDTH","DEFAULT_FILLER_SIZE","HORIZONTAL","VERTICAL","LABEL_GAP","SHOW_DATA_SHADOW_SERIES_TYPE","SliderZoomView","_displayables","_orient","_range","_handleEnds","_size","_handleWidth","_handleHeight","_location","_dragging","_dataShadowInfo","dataZoomModel","_buildView","_updateView","_resetLocation","_resetInterval","barGroup","_renderBackground","_renderHandle","_renderDataShadow","_positionGroup","coordRect","_findCoordRect","ecSize","positionInfo","layoutParams","getLayoutParams","layoutRect","location","targetAxisModel","getFirstTargetAxisModel","otherAxisInverse","_getViewExtent","_onClickPanelClick","info","_prepareDataShadowInfo","series","otherDim","getShadowDim","otherDataExtent","getDataExtent","otherOffset","lastIsEmpty","otherShadowExtent","thisShadowExtent","areaPoints","thisCoord","stride","otherCoord","showDataShadow","eachTargetAxis","dimNames","seriesModels","getAxisProxy","getTargetSeriesModels","thisAxis","getOtherDim","thisDim","displaybles","handles","handleLabels","filler","getCursor","_onDragMove","ondragstart","_showDataInfo","ondragend","_onDragEnd","onmouseover","onmouseout","lineWidth","handleIndex","bRect","handleColor","getPercentRange","viewExtent","_updateInterval","delta","handleEnds","viewExtend","minMaxSpan","findRepresentativeAxisProxy","getMinMaxSpan","percentExtent","minSpan","maxSpan","lastRange","nonRealtime","handleInterval","handle","handleHeight","_updateDataInfo","labelTexts","axisProxy","getAxisModel","dataInterval","calculateDataWindow","end","valueWindow","getDataValueWindow","_formatLabel","orderedHandleEnds","setLabel","barTransform","textPoint","labelFormatter","labelPrecision","getPixelPrecision","valueStr","showOrHide","changed","realtime","_dispatchZoomAction","localPoint","offsetX","offsetY","dataZoomId","getTargetCoordInfo","coordInfoList","Graph","edges","directed","addNode","linkNameList","validEdges","linkCount","link","addEdge","coordSysCtor","dimensionNames","edgeData","datas","datasAttr","IndicatorAxis","getScaleExtent","LogScale","Radar","radarModel","_indicatorAxes","indicatorModel","indicatorAxis","resize","getIndicatorAxes","indicatorIndex","coordToPoint","pointToData","closestAxis","radian","minRadianDiff","closestAxisIdx","coordToData","viewWidth","viewHeight","viewSize","indicatorAxes","radarSeries","increaseInterval","exp10","pow","log","LN10","f","rawExtent","fixedMin","fixedMax","getInterval","setInterval","nicedSplitNumber","radarList","radar","categoryFilter","categoryVisual","edgeVisual","circularLayout","forceLayout","createView","registerProcessor","POST_CHART_LAYOUT","registerCoordinateSystem","dataFormatMixin","addCommas","fillLabel","mergeDefaultAndTheme","_mergeOption","hostSeries","__hostSeries","newOpt","createdBySelf","modelPropName","markerOpt","markerModel","getRawValue","formattedValue","html","getSortedIndices","valueArr","mapArray","isAscending","textX","textY","labelPosition","isLabelInside","labelLineLen","viewRect","sizeExtent","getLinePoints","offY","nextIdx","_poly","DataDiffer","_layers","layerSeries","getLayerSeries","keyGetter","dataDiffer","_layersSeries","newLayersGroups","process","oldLayersGroups","points0","points1","textLayout","margin","layerGroup","stackedOnPoints","stackedOnSmooth","smoothConstraint","createGridClipShape","rectEl","POSSIBLE_STYLES","compatEC2ItemStyle","itemStyleOpt","styleName","normalItemStyleOpt","normal","emphasisItemStyleOpt","convertNormalEmphasis","optType","useExtend","normalOpt","removeEC3NormalStatus","compatTextStyle","labelOptSingle","TEXT_STYLE_OPTIONS","compatEC3CommonStyles","processSeries","seriesOpt","markPoint","markLine","markArea","links","mpData","mlData","breadcrumb","toArr","toObj","isTheme","axes","axisName","axisOpt","axisPointer","parallel","parallelOpt","calendar","calendarOpt","radarOpt","geoOpt","regionObj","timeline","timelineOpt","toolbox","toolboxOpt","feature","featureOpt","properties","excludes","includes","PI2","RADIAN","minAngle","validDataCount","unitRadian","roseType","stillShowZeroSum","restAngle","valueSumLargerThanMinAngle","currentAngle","dir","paletteScope","categoriesData","getCategoriesData","categoryNameIdxMap","getColorFromPalette","itemStyleList","category","legend","all","title","keep","dataView","lang","dataZoom","back","magicType","line","bar","tiled","restore","saveAsImage","typeNames","pie","scatter","effectScatter","treemap","boxplot","candlestick","heatmap","sankey","funnel","gauge","pictorialBar","themeRiver","sunburst","aria","general","withTitle","withoutTitle","single","prefix","withName","withoutName","multiple","separator","middle","allData","partialData","isDataItemOption","DefaultDataProvider","dimSize","seriesDataToSource","_source","_offset","_dimSize","methods","providerMethods","providerProto","pure","persistent","getItem","appendData","appendDataSimply","countSimply","getItemSimply","col","dims","newCol","oldCol","clean","rawValueGetters","arrayRows","getRawValueSimply","objectRows","keyedColumns","original","typedArray","defaultDimValueGetters","getDimValueSimply","converDataValue","_dimensionInfos","_rawData","dimInfo","parseAndCollect","retrieveRawValue","getProvider","getDimensionInfo","retrieveRawAttr","fixShadow","_constant","ContextCachedBy","STYLE_COMMON_PROPS","createLinearGradient","canvasGradient","createRadialGradient","fillOpacity","strokeOpacity","lineDashOffset","textRect","transformText","textOrigin","truncate","blend","prevStyle","notCheckCache","__attrCachedBy","STYLE_BIND","fillStyle","strokeStyle","globalAlpha","globalCompositeOperation","hasStroke","getLineScale","hasFill","otherStyle","overwrite","newStyle","getGradient","colorStops","addColorStop","styleProto","hasKeys","supplementVisualOption","mappings","createMappings","visualData","isValidType","__hidden","__alphaForOpacity","Creater","replaceVisualOption","keys","scope","visualTypesMap","eachItem","valueOrIndex","rawDataItem","visualMap","prepareVisualTypes","incrementalApplyVisual","getTargetSeries","seriesModelMap","modifyOutputEnd","overallReset","filterData","percentRange","getDataPercentWindow","valueRange","setCalculatedRange","startValue","endValue","debugMode","OTHER_DIMENSIONS","summarizeDimensions","summary","notExtraCoordDimMap","defaultedLabel","defaultedTooltip","userOutput","dimItem","coordDim","coordDimIndex","getOrCreateEncodeArr","isExtraCoord","mayLabelDimType","defaultTooltip","encodeArr","otherDims","dataDimsOnCoord","encodeFirstDimNotExtra","dimArr","encodeLabel","encodeTooltip","getDimensionTypeByAxis","barPolar","borderColorQuery","globalColors","eachRawSeriesByType","defaulColor","legendSymbol","getMarkerPosition","clampData","offsetIndex","progressiveChunkMode","Ellipse","_path","DILIMITER_REG","parseXML","svg","parser","DOMParser","parseFromString","nodeType","firstChild","nodeName","toLowerCase","nextSibling","SVGParser","_defs","_root","_isDefine","_isText","xml","viewBox","getAttribute","parseFloat","parseAttributes","viewBoxRect","viewBoxTransform","_parseNode","viewBoxArr","split","makeViewBoxTransform","ignoreViewBox","elRoot","ignoreRootClip","xmlNode","parentGroup","defineParsers","def","nodeParsers","_parseText","_textX","_textY","textContent","inheritStyle","circle","ellipse","parsePoints","gradient","_parseGradientColorStops","stopColor","__inheritedStyle","pointsString","attributesMap","defs","onlyInlineStyle","zrStyle","isTextEl","parseTransformAttribute","parseStyleAttribute","svgAttrName","attrValue","elFillProp","elStrokeProp","getPaint","elPropName","textBaseline","urlRegex","str","urlMatch","url","transformRegex","transformOps","console","warn","styleRegex","styleRegResult","styleList","exec","viewBoxScale","viewBoxPosition","parseSVG","DEFAULT_BAR_BOUND","ContinuousModel","calculable","hoverLinkDataSize","hoverLinkOnHandle","_resetRange","resetItemSize","auto","getSelected","oVals","getColorStopValues","iVals","iIdx","oIdx","iLen","oLen","first","stopsLen","stopValues","getAxis","markerHelper","LineDraw","MarkerView","markLineTransform","mlModel","mlType","axisInfo","getAxisInfo","valueDataDim","numCalculate","valueIndex","baseIndex","mlFrom","mlTo","dataTransform","isInifinity","ifMarkLineHasOnlyDim","fromCoord","toCoord","otherDimIndex","containData","markLineFilter","dataFilter","updateSingleMarkerEndLayout","isFrom","xPx","yPx","markLineModel","fromData","__from","toData","__to","markerGroupMap","renderSeries","seriesData","lineDrawMap","lineDraw","updateDataVisualAndLayout","lineColor","dataModel","__keep","coordDimsInfos","optData","dimValueGetter","util","_event","Dispatcher","requestAnimationFrame","Animation","stage","_clips","_running","_time","_pausedTime","_pauseStart","addAnimator","clips","removeAnimator","_update","getTime","deferredEvents","deferredClips","_needsRemove","fire","_startLoop","isFinished","sankeyLayout","sankeyVisual","_echarts","_export","DATAS","MAIN_DATA","main","linkAll","TRANSFERABLE_METHODS","transferInjection","cloneShallowInjection","CHANGABLE_METHODS","changeInjection","dataType","isMainData","linkSingle","cloneShallow","getLinkedData","Region","roams","InsideZoomView","allCoordIds","coordInfo","generateCoordId","coordModel","getRange","roamHandlers","coordId","containsPoint","directionInfo","getDirectionInfo","percentPoint","signal","pixelStart","pixelLength","pixel","pan","makeMover","oldX","oldY","newX","newY","scrollMove","scrollDelta","getPercentDelta","percentDelta","oldPoint","newPoint","angleExtent","pointToCoord","singleAxis","_dimensionHelper","_referHelper","getCoordSysInfoBySeries","coordSysDimDefs","registeredCoordSys","coordSysInfo","coordSysDims","axisMap","getDimensionsInfo","firstCategoryDimIndex","hasNameEncode","dimInfoList","generateCoord","categoryAxisModel","categoryAxisMap","stackCalculationInfo","setCalculationInfo","isNeedCompleteOrdinalData","itemOpt","defaultDimValueGetter","sampleItem","firstDataNotNull","isNumeric","_helper","BAR_BORDER_WIDTH_QUERY","LAYOUT_ATTRS","posDesc","pathForLineWidth","BarView","cartesian","coordSysRect","coordSysExtent","categoryDim","symbolMeta","getSymbolMeta","createBar","updateCommon","newIndex","oldIndex","pictorialShapeStr","getShapeStr","__pictorialShapeStr","updateBar","__pictorialSymbolMeta","removeBar","animationModel","symbolRepeat","symbolClip","symbolPosition","symbolPatternSize","symbolRepeatDirection","prepareBarLength","prepareSymbolSize","boundingLength","pxSign","prepareLineWidth","symbolScale","prepareLayoutInfo","valueLineWidth","repeatCutLength","output","symbolBoundingData","zeroPx","pxSignIdx","symbolBoundingExtent","convertToCoordOnAxis","categorySize","unitLength","pathLen","absBoundingLength","symbolMargin","hasEndGap","lastIndexOf","uLenWithMargin","endFix","repeatSpecified","repeatTimes","toIntTimes","mDiff","sizeFix","pathPosition","bundlePosition","barRectShape","createPath","createOrUpdateRepeatSymbols","bundle","__pictorialBundle","unit","eachPath","__pictorialAnimationIndex","__pictorialRepeatTimes","updateAttr","makeTarget","updateHoverAnimation","onMouseOver","onMouseOut","createOrUpdateSingleSymbol","mainPath","__pictorialMainPath","createOrUpdateBarRect","rectShape","barRect","__pictorialBarRect","createOrUpdateClip","__pictorialClipPath","labelRect","pathes","immediateAttrs","animationAttrs","barRectHoverStyle","barPositionOutside","times","roundedTimes","SunburstPiece","windowOpen","ROOT_TO_NODE_ACTION","SunburstView","that","virtualRoot","newRoot","getViewRoot","renderLabelForZeroData","newChildren","oldChildren","_oldChildren","dualTravel","renderRollUp","highlightPolicy","onEmphasis","unhighlight","virtualPiece","onNormal","getKey","processNode","newId","oldId","newNode","oldNode","doRenderNode","removeNode","viewRoot","_onclickEvent","_rootToNode","_initEvents","targetFound","nodeClick","linkTarget","targetNode","treeRoot","transformPath","vMag","vRatio","u","vAngle","acos","processArc","fa","psiDeg","xp","yp","lambda","cxp","cyp","commandReg","numberReg","createPathProxyFromString","prevCmd","cpx","cpy","subpathX","subpathY","cmdList","cmdText","cmdStr","charAt","pLen","ctlPtx","ctlPty","createPathOptions","pathProxy","pathEls","pathList","pathEl","createPathProxy","__dirtyPath","pathBundle","TimelineView","_axis","_viewRect","_timer","_currentPointer","_mainGroup","_labelGroup","timelineModel","mainGroup","_createGroup","labelGroup","_createAxis","_renderAxisLabel","_position","_doPlayStop","_clearTimer","labelPosOpt","horizontal","vertical","playPosition","prevBtnPosition","nextBtnPosition","labelAlignMap","labelBaselineMap","rotationMap","mainLength","controlModel","showControl","controlSize","controlGap","sizePlusGap","labelRotation","controlPosition","showPlayBtn","showPrevBtn","showNextBtn","xLeft","xRight","labelAlign","labelBaseline","rotateOriginX","rotateOriginY","viewBound","getBound","mainBound","labelBound","mainPosition","labelsPosition","mainBoundIdx","toBound","setOrigin","targetGroup","fromPos","boundIdx","newGroup","_renderAxisLine","lineCap","_renderAxisTick","tickCoord","hoverStyleModel","symbolOpt","_changeTimeline","giveSymbol","labels","getViewLabels","labelItem","tickValue","normalLabelModel","formattedLabel","_renderControl","playState","getPlayState","makeBtn","iconPath","willRotate","btn","makeIcon","_handlePlayClick","_renderCurrentPointer","currentIndex","getCurrentIndex","pointerModel","onCreate","pointer","_handlePointerDrag","_handlePointerDragend","pointerMoveTo","onUpdate","nextState","_pointerChangeTimeline","mousePos","_toAxisCoord","_findNearestTick","handleFrame","trans","axisCoord","nextIndex","objPath","noAnimation","DataZoomModel","SliderZoomModel","dataBackground","areaStyle","fillerColor","handleIcon","handleSize","handleStyle","showDetail","zoomLock","RADIAN_EPSILON","_trim","domain","clamp","subDomain","subRange","returnStr","arr","getPrecision","getPrecisionSafe","toString","eIndex","dotIndex","pixelExtent","dataQuantity","sizeQuantity","getPercentWithPrecision","valueList","acc","digits","votesPerQuota","targetSeats","seats","votes","currentSum","remainder","NEGATIVE_INFINITY","maxId","MAX_SAFE_INTEGER","remRadian","pi2","isRadianAroundZero","TIME_REG","hour","toUpperCase","UTC","quantity","quantityExponent","exp","nf","exponent","quantile","ascArr","H","littleThan","currClose","_dataProvider","getTooltipMarker","formatTpl","getTooltipRenderMode","DIMENSION_LABEL_REG","rawValue","rawDataIndex","renderModeOption","renderMode","isSeries","componentSubType","marker","dimensionIndex","makeStyleMapper","getLineDash","lineType","dotSize","dashSize","Displayble","IncrementalDisplayble","_temporaryDisplayables","_cursor","notClear","clearDisplaybles","addDisplayable","displayable","notPersistent","addDisplayables","displayables","eachPendingDisplayable","childRect","union","localPos","setCurrentIndex","isIndexMax","setPlayState","resetOption","preventIncremental","coordSysCreator","blurSize","pointSize","maxOpacity","minOpacity","AxisProxy","eachAxisDim","xAxisIndex","yAxisIndex","filterMode","minValueSpan","maxValueSpan","rangeMode","_dataIntervalByAxis","_dataInfo","_axisProxies","_autoThrottle","_rangePropMode","inputRawOption","retrieveRawOption","settledOption","doInit","_setDefaultThrottle","updateRangeUse","_resetTarget","_giveAxisProxies","axisProxies","__dzAxisProxy","autoMode","_judgeAutoMode","axisIndexName","normalizeToArray","_autoSetAxisIndex","_autoSetOrient","hasIndexSpecified","autoAxisIndex","singleAxisModel","singleAxisIndex","axisIndices","_isSeriesHasAllAxesTypeOf","axisId","is","seriesAxisIndex","globalOption","firstAxisModel","setRawRange","getValueRange","axisDimName","hostedBy","getRangePropMode","rangePropMode","rangeModeInOption","percentSpecified","valueSpecified","HOVER_LINK_SIZE","HOVER_LINK_OUT","ContinuousView","_shapes","_dataInterval","_useHandle","_hoverLinkDataIndices","_hovering","_renderBar","dataRangeText","_enableHoverLinkToSeries","_enableHoverLinkFromSeries","endsIndex","_applyTransform","shapes","useHandle","_createBarGroup","outOfRange","createPolygon","inRange","_dragHandle","getTextRect","textSize","handleThumbs","handleLabelPoints","_createHandle","_createIndicator","onDrift","onDragEnd","handleThumb","createHandlePoints","handleLabel","handleLabelPoint","indicatorLabel","indicatorLabelPoint","isEnd","_clearHoverLinkToSeries","useHoverLinkOnHandle","_doHoverLinkToSeries","forSketch","outOfRangeHandleEnds","inRangeHandleEnds","visualInRange","_createBarVisual","visualOutOfRange","barColor","barPoints","_updateHandle","forceState","convertOpacityToAlpha","_makeColorGradient","symbolSizes","_createBarPoints","handlesColor","sampleNumber","currValue","_showIndicator","cursorValue","textValue","rangeSymbol","halfHoverLinkSize","createIndicatorPoints","_hoverLinkFromSeriesMouseOver","_hideIndicator","_clearHoverLinkFromSeries","cursorPos","hoverOnBar","getHalfHoverLinkSize","hoverRange","oldBatch","newBatch","resultBatches","compressBatches","_dispatchHighDown","isTargetSeries","element","isRange","extentMax","zrender","timsort","GlobalModel","ExtensionAPI","OptionManager","backwardCompat","_throttle","seriesColor","loadingDefault","Scheduler","lightTheme","darkTheme","mapDataStorage","parseClassType","TEST_FRAME_REMAIN_TIME","PRIORITY_PROCESSOR_FILTER","PRIORITY_PROCESSOR_SERIES_FILTER","PRIORITY_PROCESSOR_DATASTACK","PRIORITY_PROCESSOR_STATISTIC","PRIORITY_VISUAL_LAYOUT","PRIORITY_VISUAL_PROGRESSIVE_LAYOUT","PRIORITY_VISUAL_GLOBAL","PRIORITY_VISUAL_CHART","PRIORITY_VISUAL_POST_CHART_LAYOUT","PRIORITY_VISUAL_COMPONENT","PRIORITY_VISUAL_BRUSH","PROCESSOR","FILTER","SERIES_FILTER","STATISTIC","LAYOUT","PROGRESSIVE_LAYOUT","GLOBAL","CHART","COMPONENT","IN_MAIN_PROCESS","OPTION_UPDATED","ACTION_REG","createRegisterEventWithLowercaseName","ignoreDisposed","_disposed","disposedWarning","MessageCenter","ECharts","dom","theme","themeStorage","_dom","defaultRenderer","renderer","_throttledZrFlush","flush","_theme","_chartsViews","_chartsMap","_componentsViews","_componentsMap","_coordSysMgr","_api","createExtensionAPI","prioritySortFunc","__prio","visualFuncs","dataProcessorFuncs","_scheduler","_ecEventProcessor","EventProcessor","_messageCenter","_pendingActions","_onframe","bindRenderedEvent","setAsPrimitive","echartsProto","doConvertPixel","coordSysList","parseFinder","scheduler","prepare","updateMethods","flushPendingActions","triggerUpdatedEvent","unfinished","remainTime","startTime","performSeriesTasks","performDataProcessorTasks","updateStreamModes","performVisualTasks","getDom","setOption","notMerge","lazyUpdate","optionManager","optionPreprocessorFuncs","setTheme","getOption","getDevicePixelRatio","getRenderedCanvas","pixelRatio","getSvgDataURL","storage","getDisplayList","toDataURL","getDataURL","excludeComponents","excludesComponentViews","view","__viewId","getType","getConnectedDataURL","isSvg","groupId","MAX_NUMBER","connectedGroups","canvasList","instances","chart","canvas","getSvgDom","getBoundingClientRect","targetCanvas","createCanvas","getSvgRoot","connectedBackgroundColor","setBackgroundColor","refreshImmediately","containPixel","models","defaultMainType","dataIndexInside","indexOfRawIndex","getViewOfComponentModel","componentModel","getViewOfSeriesModel","prepareAndUpdate","coordSysMgr","restoreData","clearColorPalette","colorArr","stringify","performPostUpdateFuncs","ecIns","componentDirtyList","componentView","__alive","seriesDirtyMap","chartView","setDirty","dirtyMap","updateView","markUpdateMethod","updateVisual","restorePipelines","prepareStageTasks","prepareView","updateDirectly","condition","excludeSeriesId","callView","__model","chartsMap","doDispatchAction","payloadType","escapeConnect","actionWrap","actions","actionInfo","cptType","updateMethod","payloads","batched","eventObj","eventObjBatch","isHighDown","batchItem","sub","pendingActions","isComponent","viewList","viewMap","doPrepare","viewId","classType","Clazz","getClass","__id","__ecComponentInfo","renderTask","renderComponents","dirtyList","updateZ","updatePayload","perform","getPerformArgs","updateBlend","updateHoverLayerStatus","postUpdateFuncs","func","_loadingFX","optionChanged","showLoading","cfg","hideLoading","loadingEffects","makeActionFromEvent","eventActionMap","MOUSE_EVENT_NAMES","elCount","preventUsingHoverLayer","blendMode","ecInstance","getComponentByElement","modelInfo","eventInfo","eveName","isGlobalOut","targetEl","packedEvent","actionType","setAttribute","DOM_ATTRIBUTE_KEY","cptQuery","dataQuery","otherQuery","condCptType","suffixes","dataKeys","reserved","propSuffix","suffixPos","check","filterForExposedEvent","propOnHost","idBase","groupIdBase","enableConnect","STATUS_PENDING","STATUS_UPDATING","STATUS_UPDATED","STATUS_KEY","updateConnectedChartsStatus","charts","otherChart","otherCharts","existInstance","getInstanceByDom","connect","disConnect","disconnect","getInstanceById","registerTheme","preprocessorFunc","priority","processor","normalizeRegister","registerPostUpdate","postUpdateFunc","getCoordinateSystemDimensions","layoutTask","visualTask","targetList","defaultPriority","stageHandler","wrapStageHandler","__raw","registerLoading","loadingFx","setCanvasCreator","creator","$override","registerMap","geoJson","specialAreas","getMap","retrieveMap","geoJSON","dataTool","___ec_export","_core","textContain","textHelper","arrayJoin","NONE","mathRound","degree","round4","isAroundZero","pathHasFill","isText","pathHasStroke","svgEl","attrXLink","setAttributeNS","bindStyle","strokeWidth","strokeScale","miterLimit","pathDataToString","dataLength","nData","dThetaPositive","isCircle","unifiedTheta","svgPath","__svgEl","pathStr","svgTextDrawRectText","removeOldTextNode","svgImage","HTMLImageElement","dw","dh","__imageSrc","svgText","_tmpTextHostRect","_tmpTextBoxPos","_tmpTextTransform","TEXT_ALIGN_TO_ANCHRO","hostRect","elTransform","needTransformTextByHostEl","normalizeTextStyle","needDrawText","textSvgEl","__textSvgEl","textSvgElStyle","DEFAULT_FONT","computedFont","__computedFont","__styleFont","contentBlock","__textCotentBlock","parsePlainText","outerHeight","lineHeight","getBoxPosition","baseX","baseY","setTextTransform","boxY","adjustTextY","getTextXForPadding","canCacheByTextString","tspanList","__tspanList","tspanOriginLen","__canCacheByTextString","__text","updateTextLocation","textLines","nTextLines","tspan","singleLineText","__zrText","createTextNode","scaleAndAdd","lenSquare","lengthSquare","div","dot","distanceSquare","distSquare","negate","lerp","proto","LRU","kCSSColorTable","clampCssByte","clampCssAngle","clampCssFloat","parseCssInt","parseCssFloat","cssHueToRgb","lerpNumber","setRgba","copyRgba","colorCache","lastRemovedArr","putToCache","colorStr","rgbaArr","put","cached","op","ep","fname","substr","alpha","hsla2rgba","iv","hsla","rgba2hsla","S","G","B","vMin","vMax","deltaR","deltaG","deltaB","fastLerp","normalizedValue","colors","leftIndex","rightIndex","leftColor","rightColor","dv","fastMapToColor","fullOutput","mapToColor","modifyHSL","modifyAlpha","arrColor","Gradient","TooltipRichContent","findPointFromSeries","globalListener","axisPointerViewHelper","proxyRect","tooltipContent","_renderMode","_newLine","_tooltipContent","_tooltipModel","_ecModel","_lastDataByCoordSys","_alwaysShowContent","_initGlobalListener","_keepShow","triggerOn","_tryShow","_hide","_lastX","_lastY","_refreshUpdateTimeout","manuallyShowTip","_ticket","dataByCoordSys","tooltipOption","_manuallyAxisShowTip","pointInfo","findHover","manuallyHideTip","coordSysAxesInfo","buildTooltipModel","_showAxisTooltip","_showSeriesItemTooltip","_showComponentItemTooltip","_showOrMove","_showTimout","globalTooltipModel","singleDefaultHTML","singleParamsList","singleTooltipModel","newLine","markers","itemCoordSys","dataByAxis","axisValue","seriesDefaultHTML","valueLabel","getValueLabel","seriesDataIndices","valueLabelOpt","idxItem","dataParams","getAxisRawValue","axisValueLabel","seriesTooltip","newMarkers","firstLine","positionExpr","_updateContentNotChangedOnAxis","_updatePosition","_showTooltipContent","random","tooltipTrigger","defaultHtml","asyncTicket","tooltipOpt","subTooltipModel","cbTicket","contentSize","vAlign","calcTooltipPosition","refixTooltipPosition","isCenterAlign","confineTooltipPosition","lastCoordSys","contentNotChanged","lastItemCoordSys","indexCoordSys","lastDataByAxis","thisItemCoordSys","thisDataByAxis","lastItem","indexAxis","thisItem","lastIndices","newIndices","lastIdxItem","newIdxItem","modelCascade","resultModel","gapH","gapV","domWidth","domHeight","rectWidth","rectHeight","_clazz","enableClassExtend","enableClassCheck","lineStyleMixin","areaStyleMixin","textStyleMixin","itemStyleMixin","doGet","pathArr","getParent","getParentMethod","parsePath","thisParentModel","Ctor","setReadOnly","customizeGetParent","Single","singles","actionTypes","handleRootToNode","types","targetInfo","retrieveTargetInfo","originViewRoot","aboveViewRoot","resetViewRoot","easingFuncs","_life","onrestart","globalTime","deltaTime","_startTime","easingFunc","schedule","restart","arg","HIGHLIGHT_ACTION","handleHighlight","UNHIGHLIGHT_ACTION","handleUnhighlight","_createPolyline","polylineProto","_updateCommonStl","hoverLineStyle","legendSelectActionHandler","selectedMap","isToggleSelect","legendData","isItemSelected","rangeInfo","getRangeInfo","cellWidth","getCellWidth","cellHeight","getCellHeight","weeks","dayCount","allDay","SymbolDraw","EffectSymbol","pointsLayout","_symbolDraw","effectSymbolDraw","_updateGroupTransform","getRoamTransform","HeatmapLayer","getIsInPiecewiseRange","dataSpan","getIsInContinuousRange","isGeoCoordSys","visualMapOfThisSeries","targetSeries","_incrementalDisplayable","_renderOnCartesianAndCalendar","_renderOnGeo","itemStyleQuery","hoverItemStyleQuery","labelQuery","hoverLabelQuery","coordSysType","dataDims","dataToRect","contentShape","inRangeVisuals","targetVisuals","outOfRangeVisuals","hmLayer","_hmLayer","lng","lat","isInRange","getNormalizer","getColorMapper","curveTool","_graphHelper","v3","v2DistSquare","intersectCurveCircle","curvePoints","radiusSquare","_t","nextDiff","tmp0","quadraticSubdivide","pts","pts2","fromSymbol","toSymbol","__original","originalPoints","globalCoord","AxisPointerModel","snap","triggerTooltip","shadowStyle","axisModelCreator","AxisModel","gridIndex","gridId","getAxisType","extraOption","logError","_roamHelper","updateCenterAndZoom","seriesGroup","interactionMutex","pointerChecker","_opt","mousedownHandler","mousedown","mousemoveHandler","mousemove","mouseupHandler","mouseup","mousewheelHandler","mousewheel","pinchHandler","controlType","zoomOnMouseWheel","moveOnMouseMove","moveOnMouseWheel","preventDefaultMouseMove","isDragging","isPinching","_pinching","isMiddleOrRightButtonOnMouseUpDown","_x","_y","isAvailableBehavior","gestureEvent","isTaken","shouldZoom","shouldMove","wheelDelta","absWheelDeltaDelta","factor","checkPointerAndTrigger","absDelta","behaviorToCheck","contollerEvent","settings","setting","_vector","v2Create","mathPow","EPSILON_NUMERIC","THREE_SQRT","ONE_THIRD","_v0","_v1","_v2","onet","cubicDerivativeAt","cubicRootAt","roots","c","t1","disc","K","discSqrt","Y1","Y2","T","ASqrt","cubicExtrema","extrema","cubicSubdivide","p01","p12","p23","p012","p123","p0123","cubicProjectPoint","prev","d1","d2","quadraticRootAt","quadraticExtremum","divider","quadraticProjectPoint","BaseAxisPointer","viewHelper","cartesianAxisHelper","CartesianAxisPointer","makeElOption","elOption","axisPointerModel","axisPointerType","otherExtent","getCartesian","getGlobalExtent","pixelValue","buildElStyle","pointerOption","pointerShapeBuilder","graphicKey","buildCartesianSingleLabelElOption","getHandleTransform","labelMargin","getTransformedPosition","updateHandleTransform","currPosition","cursorOtherValue","cursorPoint","tooltipOptions","targetShape","makeLineShape","getAxisDimIndex","shadow","makeRectShape","registerAxisPointerClass","fixClipWithShadow","unitX","unitY","ZText","MARK_UNUSED","MARK_USED","Definable","zrId","svgRoot","tagNames","markLabel","domName","_zrId","_svgRoot","_tagNames","_markLabel","_domName","nextId","getDefs","isForceCreating","getElementsByTagName","insertBefore","addDom","removeDom","getDoms","doms","tagName","tags","markAllUnused","markUsed","removeUnused","getSvgProxy","getTextSvgElement","getSvgElement","SingleAxis","_init","axisPointerEnabled","_adjustAxis","_updateAxisTransform","coordBase","extentSum","toLocalCoord","getAxes","getTooltipAxes","baseAxes","parseGeoJson","fixNanhai","fixTextCoord","fixGeoCoord","fixDiaoyuIsland","mapRecord","nameProperty","parsed","message","regionName","specialArea","regionRect","positiveBorderColorQuery","negativeBorderColorQuery","positiveColorQuery","negativeColorQuery","performRawSeries","colorP","getColor","colorN","borderColorP","getBorderColor","borderColorN","isLargeRender","FunnelPiece","funnelPieceProto","opacityAccessPath","FunnelView","funnelPiece","GaugeSeries","offsetCenter","detail","$filter","fails","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","USES_TO_LENGTH","0","it","dev","dataSelectableMixin","MapSeries","needsDrawMap","dataNameMap","selectTargetList","toAppendNames","geoSource","getMapType","appendValues","seriesNames","otherIndex","originalData","showLegendSymbol","dataRangeHoverLink","NodeHighlightPolicy","DESCENDANT","ANCESTOR","SELF","DEFAULT_SECTOR_Z","DEFAULT_TEXT_Z","SunburstPieceProto","getNodeColor","fillDefaultColor","stateStyle","isNodeHighlighted","onHighlight","onDownplay","getLabelAttr","labelMinAngle","labelPadding","rotateType","stateAttr","visualMetaList","getRootId","activeNode","policy","featureManager","saveAsImageLang","SaveAsImage","unusable","MouseEvent","msSaveOrOpenBlob","bstr","atob","u8arr","Uint8Array","charCodeAt","blob","Blob","tab","open","write","$a","download","href","evt","bubbles","cancelable","dispatchEvent","colorPaletteMixin","mergeLayoutParam","_task","createTask","visualBorderColorAccessPath","extraOpt","dataTask","dataTaskCount","dataTaskReset","wrapData","dataBeforeProcessed","autoSeriesName","inputPositionParams","themeSubType","hasClass","getTheme","getDefaultOption","fillDataTextStyle","newSeriesOption","task","getCurrentTask","setOutputEnd","outputData","multipleSeries","isRichText","markerId","formatArrayValue","vertially","setEachItem","markName","dimHead","dimHeadStr","valStr","tooltipDims","formatSingleValue","tooltipDimLen","isValueArr","colorEl","isNameSpecified","requestColorNum","coordDimToDataDim","getAxisTooltipData","pipeTask","getSeriesAutoName","nameArr","dataDim","dataTaskProgress","onDataSelfChange","pipeline","getPipeline","currentTask","agentStubMap","smoothSpline","smoothBezier","controlPoints","cp2","AXIS_DIMS","COORDS","isCoordSupported","coordType","createNameEach","attrs","capitalNames","capitalFirst","capitalAttrs","nameObj","capital","createLinkedNodesFinder","forEachNode","forEachEdgeType","edgeIdGetter","sourceNode","existsLink","edgeType","absorb","processSingleNode","isNodeAbsorded","isLinked","hasLink","edgeId","themeRiverLayout","baseY0","timeDim","layerPoints","singleLayer","base","computeBaseline","baseLine","ky","layerIndex","layerNum","pointNum","sums","temp","getNodeGlobalScale","groupScale","groupZoom","roamZoom","nodeScale","colorList","getBorderLineDash","ATTR","dataZoomInfo","store","giveStore","theDataZoomId","theCoordId","dataZoomInfos","cleanStore","createController","controllerParams","mergeControllerParams","newRecord","typePriority","oneType","validPayloadTypes","targetNodeId","getPathToRoot","viewPath","wrapTreePathInfo","treePathInfo","nodeDataIndex","DataDimensionInfo","r1","r2","r3","r4","_forceHelper","_simpleLayoutHelper","_circularLayoutHelper","graphSeries","preservedPoints","forceModel","initLayout","nodeDataExtent","edgeDataExtent","repulsion","edgeLength","rep","fixed","getEdgeByIndex","edgeModel","n1","n2","ignoreForceLayout","forceInstance","gravity","friction","oldStep","getNodeByIndex","stopped","rectCoordAxisBuildSplitArea","axisView","axisGroup","gridRect","tickModel","areaColorsLen","lastSplitAreaColors","__splitAreaColors","newSplitAreaColors","cIndex","rectCoordAxisHandleRemove","ifAxisCrossZero","estimateLabelUnionRect","Cartesian2D","Axis2D","isAxisUsedInTheGrid","Grid","_coordsMap","_coordsList","_axesMap","_axesList","_initCartesian","gridProto","fixAxisOnZero","axesMap","otherAxisDim","onZeroRecords","otherAxes","onZeroAxisIndex","canOnZeroToAxis","getOnZeroRecordKey","updateAxisTransform","axisExtentSum","_updateScale","ignoreContainLabel","axesList","adjustAxes","labelUnionRect","axesMapOnDim","coordList","getCartesians","_findConvertTarget","xAxisModel","yAxisModel","coordsList","axisPositionUsed","axesCount","createAxisCreator","addAxis","isCartesian2D","axesModels","findAxesModels","otherAxis","axesTypes","grids","nodeOpacityPath","hoverNodeOpacityPath","lineOpacityPath","hoverLineOpacityPath","getItemOpacity","opacityPath","fadeOutItem","opacityRatio","getGraphicEl","fadeInItem","SankeyShape","cpx1","cpy1","cpx2","cpy2","_focusAdjacencyDisabled","sankeyView","curvature","n1Layout","node1Model","dragX1","dragY1","n2Layout","node2Model","dragX2","dragY2","edgeLayout","dragX","dragY","localX","localY","focusNodeAdjHandler","unfocusNodeAdjHandler","_dispatchUnfocus","edgeDataIndex","_unfocusDelayTimer","focusNodeAdjacency","focusNodeAdj","outEdges","inEdges","unfocusNodeAdjacency","geoJSONLoader","geoSVGLoader","loaders","mapRecords","singleSource","makeInvoker","hostKey","results","Pattern","returnFalse","createDom","newDom","newDomStyle","Layer","onselectstart","domBack","ctxBack","config","clearColor","motionBlur","lastFrameAlpha","__used","__drawIndex","__startIndex","__endIndex","getElementCount","initContext","createBackBuffer","clearAll","clearColorGradientOrPattern","haveMotionBLur","clearRect","__canvasGradient","getCanvasPattern","save","fillRect","globalImageCache","findExistImage","newImageOrSrc","cachedImgObj","hostEl","cbPayload","__zrImageSrc","pendingWrap","pending","onerror","imageOnLoad","__cachedImgObj","_listComponent","makeBackground","_contentGroup","_backgroundEl","_selectorGroup","_isFirstRender","viewportSize","legendDrawnMap","selectMode","eachRawSeries","getSeriesByName","legendSymbolType","_createItem","dispatchSelectAction","dispatchHighlightAction","dispatchDownplayAction","provider","containName","newline","_createSelector","createSelectorButton","selectorItem","emphasisLabelModel","inactiveColor","inactiveBorderColor","symbolKeepAspect","legendModelItemStyle","itemIcon","legendGlobalTooltipModel","setSymbolStyle","legendSymbolCenter","hitRect","formatterParams","legendIndex","dataName","CATEGORY_DEFAULT_VISUAL_INDEX","_normalizeData","normalizers","visualHandler","visualHandlers","_doMap","normalizeVisualRange","preprocessForPiecewise","preprocessForSpecifiedCategory","normalized","makeApplyVisual","isNormalized","doMapCategory","returnRGBArray","parsedVisual","linear","piecewise","getSpecifiedVisual","doMapFixed","colorHue","makePartialColorVisualHandler","colorSaturation","colorLightness","colorAlpha","makeDoMap","symbolCfg","doMapToArray","hasSpecialVisual","originIndex","categoryMap","visualArr","setVisualToOption","doNotNeedPair","applyValue","sourceExtent","addVisualHandler","eachVisual","mapVisual","isPrimary","newVisual","newVal","hasVisual","type1","type2","dependsOn","visualType1","visualType2","findClosestWhenOutside","possibleI","pieceValue","updatePossible","newAbs","isCanvasEl","transformCoordWithViewport","isDomLevel2","addEventListener","MOUSE_EVENT_REG","_calcOut","calculate","calculateZrXY","layerX","layerY","ex","clientX","ey","clientY","getNativeEvent","isTouch","targetTouches","changedTouches","zrDelta","button","which","attachEvent","removeEventListener","detachEvent","preventDefault","stopPropagation","cancelBubble","returnValue","notLeftMouse","DEFAULT_SMOOTH","ParallelView","_dataGroup","dataGroup","makeSeriesScope","newDataIndex","addEl","updateElCommon","oldDataIndex","createLinePoints","taskParams","isEmptyValue","active","inactive","UNDEFINED","INDEX_NOT_FOUND","ID_PREFIX","dataCtors","Float64Array","Int32Array","CtorUint32Array","Uint32Array","CtorInt32Array","CtorUint16Array","Uint16Array","getIndicesCtor","_rawCount","cloneChunk","originalChunk","TRANSFERABLE_PROPERTIES","CLONE_PROPERTIES","transferProperties","__wrappedMethods","_calculationInfo","dimensionInfos","invertedIndicesMap","dimensionInfo","dimensionName","createInvertedIndices","_indices","_count","_storage","_nameList","_idList","_optionModels","_visual","_itemVisuals","hasItemVisual","_itemLayouts","_graphicEls","_chunkSize","_chunkCount","_rawExtent","_approximateExtent","_dimensionsSummary","_invertedIndicesMap","listProto","prepareChunks","chunkSize","chunkCount","DataCtor","lastChunkIndex","resizeChunkArray","newStore","prepareInvertedIndex","invertedIndices","getRawValueFromStore","chunkIndex","chunkOffset","chunk","getRawIndexWithoutIndices","getRawIndexWithIndices","_idDimIdx","normalizeDimensions","cloneListForMapAndSample","excludeDimensions","allDimensions","originalStorage","cloneDimStore","getInitialExtent","originalDimStore","newDimStore","getDimensionsOnCoord","dimensionsSummary","nameList","notProvider","_nameRepeatCount","_dimValueGetter","_dimValueGetterArrayRows","_initDataFromProvider","rawData","values","dimLen","originalChunkCount","emptyDataItem","sourceIdx","dimRawExtent","nameDimIdx","dimensionInfoMap","idList","nameRepeatCount","_nameDimIdx","itemId","dimStorage","nameDim","nameDimChunk","getIndices","thisCount","buffer","chunkStore","getByRawIndex","rawIdx","dimStore","_getFast","dimData","initialExtent","dimExtent","currEnd","useRaw","setApproximateExtent","getCalculationInfo","getMedian","dimDataArray","sortedDimDataArray","rawIndexOf","indicesOfNearest","maxDistance","nearestIndices","minDist","minDiff","nearestIndicesLen","contextCompat","filterSelf","dim0","selectRange","originalCount","quickFinished","chunkStorage","dimStorage2","chunkStorage2","val2","dimk","tmpRetValue","dataCount","retValue","rawExtentOnDim","downSample","rate","sampleValue","sampleIndex","targetStorage","frameValues","frameSize","originalChunkIndex","originalChunkOffset","sampleFrameIdx","sampleChunkIndex","sampleChunkOffset","otherList","thisList","itemVisual","clearAllVisual","setItemDataAndSeriesIndex","dimensionInfoList","injectFunction","originalMethod","v2Distance","interpolate","isLoop","segs","w2","w3","TYPE_DELIMITER","IS_CONTAINER","checkClassType","RootClass","mandatoryMethods","$constructor","superClass","ExtendedClass","classBase","Clz","classAttr","enableClassManagement","entity","makeContainer","registerClass","componentMainType","throwWhenNotFound","getClassesByMainType","getAllClassMainTypes","hasSubTypes","registerWhenExtend","originalExtend","ignoreSize","subtext","subtarget","subtextStyle","titleModel","subtextStyleModel","subText","subTextEl","sublink","groupRect","layoutOption","alignStyle","createParallelIfNeeded","mergeAxisOptionFromParallel","hasParallelSeries","axisOption","parallelOption","isPolyline","isLarge","lineCoords","segCount","totalCoordsCount","getLineCoordsCount","getLineCoords","_fourPointsTransform","buildTransformer","EVENT_SAVED_PROP","elFrom","inX","inY","saved","prepareCoordMarkers","transformer","preparePointerTransformer","propLR","propTB","idxLR","idxTB","transformerName","oldSrcCoords","srcCoords","oldCoordTheSame","destCoords","ii","axisPointerModelHelper","_axisPointer","fixValue","updateAxisPointer","disposeAxisPointer","forceRender","getAxisPointerClass","getAxisPointerModel","axisPointerClazz","clazz","compatibleEC2","ec2Types","transferItem","controlStyle","itemStyleEmphasis","labelNormal","excludeLabelAttr","legendModels","findComponents","categoryNames","mapSymbolLayout","mapDataStatistic","createDataSelectAction","effectType","showEffectOn","rippleEffect","barItemStyle","Sausage","_eventPos","getClipArea","coordSysClipArea","expandWidth","coordinateSystemType","isHorizontalOrRadial","drawBackground","backgroundModel","barBorderRadius","bgEls","oldBgEls","_backgroundEls","bgLayout","bgEl","createBackgroundEl","getBarItemStyle","isClipped","elementCreator","updateStyle","createBackgroundShape","removeRect","removeSector","bgGroup","_removeBackground","cartesian2d","coordSysBoundingRect","signWidth","signHeight","animateProperty","animateTarget","isRadial","fixedLineWidth","getLineWidth","signX","signY","isZeroOnPolar","isPolar","labelPositionOutside","rawLayout","LargePath","startPoint","__startPoint","baseDimIdx","__baseDimIdx","largeDataIndices","backgroundStartPoint","__largeDataIndices","__barWidth","setLargeBackgroundStyle","largePathUpdateDataIndex","largePath","largePathFindDataIndex","valueDimIdx","barWidthHalf","startValueVal","pointerBaseVal","pointerValueVal","baseLowerBound","baseUpperBound","barBaseVal","barValueVal","coordLayout","ElementClz","_curve","containStroke","_l","registerSubTypeDefaulter","_barGrid","prepareLayoutBarSeries","makeColumnLayout","retrieveColumnLayout","axisDataLen","scaleType","originalExtent","getCategories","setBlank","isBaseAxisAndHasBarSeries","barSeriesModels","adjustedScale","adjustScaleForOverflow","axisLength","barsOnCurrentAxis","minOverflow","maxOverflow","totalOverFlow","oldRange","oldRangePercentOfNew","overflowBuffer","extentInfo","makeLabelFormatter","categoryTickStart","tpl","tick","realNumberScaleTicks","tickCount","categoryScaleExtent","axisLabelModel","unrotatedSingleRect","singleRect","rotateTextRect","rotateRadians","boundingBox","plain","beforeWidth","beforeHeight","afterWidth","afterHeight","rotatedRect","getOptionCategoryInterval","shouldShowAllLabels","guid","Handler","Storage","Painter","HandlerProxy","useVML","painterCtors","ZRender","getInstance","registerPainter","delInstance","rendererType","vml","handerProxy","_needsRefresh","oldDelFromStorage","delFromStorage","oldAddToStorage","addToStorage","removeSelfFromZr","addSelfToZr","addRoot","delRoot","configLayer","zLevel","_needsRefreshHover","triggerRendered","refreshHoverImmediately","elMirror","refreshHover","clearHover","clearAnimation","pathToImage","setCursorStyle","eventHandler","dataProcessorHandlers","_dataProcessorHandlers","_visualHandlers","_allHandlers","_stageTaskMap","performStageTasks","stageHandlers","needSetDirty","__pipeline","stageHandlerRecord","seriesTaskMap","overallTask","overallNeedDirty","stub","performArgs","block","pipelineId","skip","taskRecord","_pipelineMap","pCtx","progressiveEnabled","progressiveRender","__idxInPipeline","blockIndex","modDataCount","modBy","dataLen","threshold","pipelineMap","head","tail","pipe","stageTaskMap","createSeriesStageTask","createOverallStageTask","__block","getUpstream","seriesTaskPlan","seriesTaskReset","seriesTaskCount","useClearVisual","isVisual","isLayout","createOnAllSeries","removeKey","overallTaskReset","overallProgress","createStub","stubReset","onDirty","stubOnDirty","agent","getSeries","upstreamContext","stubProgress","getDownstream","resetDefines","makeSeriesTaskProgress","singleSeriesTaskProgress","resetDefineIdx","resetDefine","dataEach","detectSeriseType","legacyFunc","ecModelMock","apiMock","mockMethods","cond","EffectPolyline","_lastFrame","_lastFramePercent","effectPolylineProto","_points","accLenArr","_offsets","_length","offsets","PolarAxisPointer","animationThreshold","coordValue","labelPos","getLabelPosition","buildLabelElOption","innerTextLayout","makeSectorShape","geoCoordMap","_buildAxes","_buildSplitLineAndArea","axisBuilders","showSplitLine","showSplitArea","splitLineColors","splitAreaColors","ticksRadius","getColorIndex","realSplitNumber","axesTicksPoints","prevPoints","areaOrLine","areaOrLineColorList","themeRiverVisual","componentUtil","boxLayoutMixin","themeModel","newCptOption","fields","optList","Class","getDependencies","deps","enableSubTypeDefaulter","enableTopologicalTravel","v2ApplyTransform","TransformDummy","_roamTransformable","_center","_zoom","setBoundingRect","setViewRect","rawTransform","centerCoord","_updateCenterAndZoom","getDefaultCenter","rawRect","getCenter","rawTransformMatrix","defaultCenter","roamTransformable","_rawTransform","_layoutHelper","TreeShape","parentPoint","childPoints","forkPosition","childLen","firstChildPos","lastChildPos","forkDim","tmpPoint","_oldTree","_updateViewCoordSys","symbolNeedsDraw","updateNode","symbolEl","_nodeScaleRatio","_updateNodeAndLinkScale","fromPoints","oldMin","_min","oldMax","_max","viewCoordSys","_viewCoordSys","_getNodeGlobalScale","invScale","getTreeNodeStyle","sourceSymbolEl","sourceLayout","sourceOldLayout","rawX","__radialOldRawX","rawY","__radialOldRawY","targetLayout","__radialRawX","__radialRawY","isLeft","rootLayout","labelRotateRadian","drawEdge","__edge","getEdgeShape","childLayout","sourceEdge","radialCoor1","radialCoor2","radialCoor3","radialCoor4","BUILTIN_OBJECT","TYPED_ARRAY","objToString","Object","arrayProto","nativeForEach","nativeFilter","nativeSlice","nativeMap","nativeReduce","typeStr","isPrimitive","isDom","targetProp","sourceProp","isBuiltInObject","mergeAll","targetAndSources","overlay","baseClazz","clazzPrototype","F","memo","find","ownerDocument","value1","retrieve3","value2","Function","primitiveKey","HashMap","isArr","thisMap","visit","concatArray","newArray","eachAfter","eachBefore","newSnapshot","snapshot","_targetList","_selectTargetMap","targetMap","select","unSelect","toggleSelected","setPrototypeOf","$this","dummy","Wrapper","NewTarget","NewTargetPrototype","nameRotate","nameTruncate","ellipsis","placeholder","showMinLabel","showMaxLabel","categoryAxis","deduplication","alignWithLabel","minorTick","minorSplitLine","timeAxis","logAxis","logBase","idxMap","Uint32Arr","Float64Arr","compatEc2","coords","fromName","toName","LinesSeries","_processFlatCoordsArray","_flatCoords","flatCoords","_flatCoordsOffset","flatCoordsOffset","_getCoordsFromItemModel","startOffset","coordsOffsetAndLenStorage","coordsStorage","coordsCursor","offsetCursor","effect","trailLength","autoPositionValues","targetValue","visualCluster","visualObj","controllerVisuals","visualMapping","positionElement","generateNodeKey","_directed","_nodesMap","_edgesMap","graphProto","Node","hostGraph","Edge","isDirected","nodesMap","edgesMap","getEdge","breadthFirstTraverse","startNode","__visited","queue","currentNode","otherNode","inDegree","outDegree","createGraphDataProxyMixin","hostName","LineGroup","_ctor","lineDrawProto","doAdd","lineNeedsDraw","doUpdate","oldLineData","newLineData","itemEl","isEffectObject","animators","isPointNaN","isPersistent","_lineData","incrementalPrepareUpdate","_seriesScope","incrementalUpdate","updateIncrementalAndHover","_clearIncremental","_incremental","quadraticIn","quadraticOut","quadraticInOut","cubicIn","cubicOut","cubicInOut","quarticIn","quarticOut","quarticInOut","quinticIn","quinticOut","quinticInOut","sinusoidalIn","sinusoidalOut","sinusoidalInOut","exponentialIn","exponentialOut","exponentialInOut","circularIn","circularOut","circularInOut","elasticIn","asin","elasticOut","elasticInOut","backIn","backOut","backInOut","bounceIn","bounceOut","bounceInOut","_mapDraw","dataViewLang","BLOCK_SPLITER","ITEM_SPLITER","groupSeries","seriesGroupByCategoryAxis","otherSeries","meta","other","assembleSeriesWithCategoryAxis","tables","valueAxisDim","headers","columns","items","assembleOtherSeries","vals","getContentFromModel","isTSVFormat","itemSplitRegex","RegExp","parseTSVContents","tsv","tsvLines","header","parseListContents","hasName","parseContents","blockMetaList","blocks","blockMeta","DataView","tryMergeDataOption","readOnly","optionToContent","contentToOption","textColor","textareaColor","textareaBorderColor","buttonColor","buttonTextColor","viewMain","textarea","htmlOrDom","buttonContainer","buttonStyle","closeButton","refreshButton","newSeriesOptList","renderText","getStroke","actionInfos","polarOptArr","polarNotRadar","polarOpt","polarIndex","radarIndex","foundAxisModel","layoutBox","boxLayoutParams","objectDefinePropertyModile","defineProperty","positions","bbWidth","bbHeight","BrushController","history","dataZoomLang","DATA_ZOOM_ID_BASE","DataZoom","_brushController","_onBrush","mount","_isZoomActive","featureModel","updateZoomBtnStatus","updateBackBtnStatus","handlers","unmount","nextActive","dataZoomSelectActive","retrieveAxisSetting","setIconStatus","zoomActive","include","setPanels","makePanelOpts","xAxisDeclared","yAxisDeclared","enableBrush","brushStyle","updateCovers","matchOutputRanges","coordRange","setBatch","findDataZoom","found","dzModel","dataZoomOpts","dataZoomOpt","addForAxis","axisIndicesName","givenAxisIndices","forEachComponent","$fromToolbox","SHADOW_PROPS","coordSysLists","coordIndex","LinePath","SYMBOL_CATEGORIES","makeSymbolTypeKey","symbolCategory","setLinePoints","updateSymbolAndLabelBeforeLineUpdate","lineGroup","symbolFrom","symbolTo","pointAt","toPos","tangent","tangentAt","__labelDistance","distanceX","distanceY","halfPercent","__position","__verticalAlign","__textAlign","_createLine","lineProto","beforeUpdate","lineLabelOriginalOpacity","visualOpacity","defaultLabelColor","rawVal","normalText","emphasisText","labelStyle","linePath","globalDefault","OPTION_INNER_KEY","_optionManager","baseOption","mountOption","initBase","timelineOption","getTimelineOption","mediaOptions","getMediaOption","mediaOption","componentsMap","newCptTypes","visitComponent","newCptOptionList","mapResult","mappingToExists","makeIdAndName","keyInfo","determineSubType","getComponentsByTypes","resultItem","ComponentModelClass","createSeriesIndices","componentOption","topologicalTravel","_seriesIndicesMap","_seriesIndices","isIdInner","cpts","isIdArray","cpt","isNameArray","filterBySubType","queryCond","getQueryCond","doFilter","indexAttr","idAttr","nameAttr","queryResult","oneSeries","getSeriesCount","assertSeriesInitialized","rawSeriesIndex","getCurrentSeriesIndices","filterSeries","filteredSeries","componentTypes","isNotTargetSeries","seiresIndex","mergeTheme","notMergeColorLayer","colorLayer","themeItem","existComponent","graphicUtil","_nonShapeGraphicElements","graphicOption","elements","GraphicModel","parentId","_elOptionsToUpdate","existList","flattenedList","_flatten","mappingResult","elOptionsToUpdate","newElOption","setKeyInfoToNewElOption","mergeNewElOptionToExist","setLayoutInfoToExist","$action","optionList","parentOption","useElOptionsToUpdate","els","createEl","targetElParent","graphicType","__ecGraphicId","removeEl","existEl","existElParent","getCleanedElOption","LOCATION_PARAMS","isSetLoc","isSet","existElOption","newElParentOption","newElOptCopy","copyLayoutParams","existItem","hv","setEventData","graphicModel","_elMap","_lastGraphicModel","_updateElements","_relocate","rootGroup","elOptionStyle","elOptionCleaned","__ecGraphicWidthOption","__ecGraphicHeightOption","elOptions","apiWidth","apiHeight","parentEl","isParentRoot","__ecGraphicWidth","__ecGraphicHeight","containerInfo","boundingMode","bounding","straightLineProto","bezierCurveProto","isLine","_buildPathLine","_buildPathCurve","_pointAtLine","_pointAtCurve","_tangentAtCurve","defaultSymbolType","hasSymbolTypeCallback","hasSymbolSizeCallback","hasSymbolRotateCallback","hasCallback","seriesSymbol","seriesSymbolSize","itemSymbolType","itemSymbolSize","itemSymbolRotate","itemSymbolKeepAspect","defaultKeyGetter","oldKeyGetter","newKeyGetter","_old","_new","_oldKeyGetter","_newKeyGetter","initIndexMap","keyArr","keyGetterName","existence","_add","_remove","oldDataIndexMap","newDataIndexMap","oldDataKeyArr","newDataKeyArr","factory","msg","colorPalette","iconStyle","crossStyle","dataBackgroundColor","color0","linkStyle","groupData","nodeWidth","nodeGap","computeNodeValues","filteredNodes","iterations","nodeAlign","layoutSankey","computeNodeBreadths","computeNodeDepths","computeEdgeDepths","getEdgeValue","nodeRawValue","remainEdges","indegreeArr","zeroIndegrees","nextTargetNode","kx","maxNodeDepth","isItemDepth","edgeIdx","indexEdge","nodeIndex","maxDepth","adjustNodeWithNodeAlign","scaleNodeBreadths","isNodeDepth","nextSourceNode","remainNodes","nodeHeight","skNodeHeight","moveSinksRight","nodeDepth","nodesByBreadth","prepareNodesByBreadth","initializeNodeDepth","resolveCollisions","relaxRightToLeft","relaxLeftToRight","keyAttr","groupResult","buckets","minKy","nodeDy","edgeDy","nodeDyAttr","weightedTarget","centerTarget","nodeY","weightedSource","centerSource","PLAIN_TEXT","WILL_BE_RESTORED","markerRich","startId","endId","updateMarkerLayout","markPointModel","mpModel","symbolDrawMap","symbolDraw","isFnSymbol","isFnSymbolSize","dataOpt","sizeCalculable","CalendarModel","cellSize","dayLabel","firstDay","monthLabel","yearLabel","mergeAndNormalizeLayoutParams","raw","hvIdx","echartsAPIList","chartInstance","parallelAxisModel","setActiveIntervals","intervals","Parallel","_axisTickLabelBuilder","createAxisTicks","createAxisLabels","calculateCategoryInterval","NORMALIZED_EXTENT","fixExtentWithBands","nTick","fixOnBandTicksCoords","ticksLen","diffSize","crossLen","ticksItem","getTickModel","minorTickModel","minorTicks","getMinorTicks","minorTicksGroup","getRotate","langSelector","defaultSelectorOption","LegendModel","_updateSelector","_updateData","hasSelected","potentialData","availableNames","isPotential","getAllNames","_availableNames","allSelect","inverseSelect","selectorLabel","selectorItemGap","LN2","determinant","rows","rowStart","rowMask","colMask","detCache","cacheKey","fullRank","colStart","subRowMask","subRowStart","colLocalIdx","colTag","mA","vh","srcPointX","srcPointY","pk","normalizeRadian","sysDims","dataDimNameMap","coordDimNameMap","getDimCount","userDimName","encodeDef","validDataDims","resultDimIdx","applyDim","availDimIdx","sysDimItem","sysDimIndex","sysDimItemDimsDef","sysDimItemOtherDims","sysDimItemDimsDefItem","generateCoordCount","fromZero","extra","genName","optDimCount","isValidPoint","getValueMissingPoint","firstPoint","svgURI","createElementNS","x_","createGraphFromNodeEdge","GraphSeries","_categoriesData","_updateCategoriesData","categoriesModels","_categoriesModels","categoryIdx","categoryModel","edgeLabelModel","fakeSeriesModel","emphasisEdgeLabelModel","emphasisFakeSeriesModel","edgeGetParent","getEdgeData","sourceName","targetName","circular","rotateLabel","layoutAnimation","edgeSymbol","edgeSymbolSize","edgeLabel","polyHelper","stackResultDim","ORIGIN_METHOD","RATE","THROTTLE_TYPE","debounce","currCall","debounceNextCall","lastCall","lastExec","timer","thisDelay","thisDebounce","debounceDelay","fnAttr","originFn","lastThrottleType","lastRate","_vm","$createElement","_c","_self","staticClass","class","className","_v","_s","amount","staticRenderFns","default","String","degrees","sumDegrees","watch","newValue","oldValue","optimizedAmount","move","mounted","drawclock","beforeDestroy","markerModelKey","subTypeDefaulters","defaulter","componentTypeMain","dependencyGetter","makeDepndencyGraph","fullNameList","noEntryList","createDependencyGraphItem","originalDeps","availableDeps","getAvailableDependencies","entryCount","dependentName","predecessor","thatItem","successor","dep","targetNameList","targetNameSet","currComponentType","currVertex","isInTargetNameSet","removeEdgeAndAdd","removeEdge","succComponentType","platform","gradientColor","animationEasingUpdate","shadowTemp","orignalBrush","modified","clipPaths","roundNumber","_intervalPrecision","thisExtent","getIntervalPrecision","expandToNicedExtent","niceTickExtent","intervalPrecision","safeLimit","lastNiceTick","nextTick","prevTick","minorInterval","intervalScaleNiceTicks","expandSize","CoordSysInfo","fetch","fetchers","roundingErrorFix","mathLog","_originalScale","originalScale","powVal","__fixMin","fixRoundingError","__fixMax","err","originalVal","dataColor","radarLayout","_needCollect","needCollect","_deduplication","_map","createByAxisModel","dedplication","getOrCreateMap","colorUtil","markAreaTransform","maModel","lt","rb","ltCoord","rbCoord","markAreaFilter","getSingleMarkerEndPoint","dimPermutations","areaData","markAreaModel","areaGroupMap","polygonGroup","__data","ToolboxModel","featureName","Feature","showTitle","containLabel","_zrender","ITEM_STYLE_NORMAL","seriesItemStyleModel","levelItemStyles","travelTree","designatedVisual","viewRootAncestors","nodeModel","nodeLayout","isInView","thisNodeColor","nodeItemStyleModel","levelItemStyle","visuals","buildVisuals","borderColorSaturation","calculateColor","calculateBorderColor","buildVisualMapping","childVisual","visualName","getValueVisualDefine","rangeVisual","getRangeVisual","visualMin","visualMax","colorMappingBy","__drColorMappingBy","childVisuals","mappingType","mapIdToIndex","hasXOrY","hasXAndY","markerTypeCalculatorWithExtent","otherDataDim","targetDataDim","otherCoordIndex","targetCoordIndex","coordArr","calcDataDim","coordArrValue","markerTypeCalculator","average","baseDataDim","dataDimToCoordDim","RadiusAxis","radiusToData","_treeHelper","_viewRoot","clipWindow","squareRatio","leafDepth","drillDownIcon","zoomToNodeRatio","emptyItemWidth","upperLabel","gapWidth","visualDimension","visibleMin","childrenVisibleMin","completeTreeValue","setDefault","setLayoutInfo","idIndexMap","_idIndexMap","_idIndexMapCount","childValue","thisValue","globalColorList","hasColorDefine","modelColor","level0","mapLocation","largeLayout","_symbolRadiansHalf","basedOn","_layoutNodesBasedOn","x12","y12","unitAngle","radianHalf","sumRadian","symbolRadianHalf","halfRemainRadian","_a","_b","runtime","Op","hasOwn","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","makeInvokeMethod","tryCatch","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","invoke","resolve","reject","Promise","__await","then","unwrapped","previousPromise","enqueue","callInvokeWithMethodAndArg","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","TypeError","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","isGeneratorFunction","genFun","mark","__proto__","awrap","async","iter","object","skipTempReset","rootEntry","rootRecord","rval","exception","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","adjustEdge","FOCUS_ADJACENCY","UNFOCUS_ADJACENCY","opct","_lineDraw","_firstRender","graphView","groupNewProp","_layoutTimeout","_startForceLayoutIteration","warmUp","_layouting","setFixed","setUnfixed","circularRotateLabel","adjacentEdge","lb","rt","maxX","maxY","ax0","ax1","ay0","ay1","bx0","bx1","by0","by1","msRequestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","seiresModelMap","__paletteScope","dataAll","filteredIdx","singleDataColor","singleDataBorderColor","maskColor","showSpinner","spinnerRadius","mask","animateShape","v2Min","v2Max","v2Scale","v2Add","v2Clone","v2Sub","constraint","prevPoint","nextPoint","cps","d0","cp0","retrieveValue","PATH_BORDER_WIDTH","PATH_GAP_WIDTH","PATH_UPPER_LABEL_SHOW","PATH_UPPER_LABEL_HEIGHT","ecWidth","ecHeight","containerWidth","containerHeight","rootRect","viewAbovePath","rootSize","estimateRootSize","viewRootLayout","squarify","upperHeight","calculateRootPosition","prunning","hideChildren","thisLayout","halfGapWidth","upperLabelHeight","getUpperLabelHeight","layoutOffset","layoutOffsetUpper","totalArea","initChildren","rowFixedLength","best","score","worst","orderBy","overLeafDepth","statistic","filterByThreshold","isLeafRoot","orderedChildren","deletePoint","areaMax","areaMin","squareArea","idx0WhenH","idx1WhenH","rowOtherLength","rowLen","wh1","remain","modWH","wh0","currNode","defaultSize","viewArea","currNodeValue","defaultPosition","targetCenter","clipRect","nodeInViewAbovePath","isAboveViewRoot","childClipRect","outputShape","inputShape","originWidth","originHeight","positiveOrNegative","doubledPosition","STACK_PREFIX","LARGE_BAR_MIN_WIDTH","getLayoutOnAxis","widthAndOffsets","doCalBarWidthAndOffset","isOnCartesian","isInLargeMode","getValueAxesMinGaps","axisValues","cnt","axisMinGaps","valuesInAxis","seriesInfoList","minGap","extentSpan","scaleSpan","seriesInfo","minWidth","finalWidth","lastStackCoordsOrigin","isValueAxisH","getValueAxisStart","valueAxisHorizontal","largeBackgroundPoints","valuePair","pointsOffset","idxOffset","backgroundStart","tmpRect","AXIS_TYPES","BaseAxisModelClass","axisTypeDefaulter","extraDefaultOption","__ordinalMeta","linkedNodesFinder","effectedModels","prepareDataCoordInfo","valueOrigin","valueStart","getValueStart","baseAxisDim","baseDataOffset","dataDimsForPoint","stackedOverDimension","getStackedOnPoint","dataCoordInfo","stackedData","ClippathManager","updateDom","clipPathEl","svgProxy","cloneNode","_textDom","RadarSeries","_text","Triangle","Diamond","Pin","tanX","tanY","cpLen","cpLen2","Arrow","symbolCtors","roundRect","square","diamond","pin","arrow","triangle","symbolShapeMakers","symbolBuildProxies","inBundle","proxySymbol","symbolPathSetColor","innerColor","symbolStyle","symbolShape","__isEmptyBrush","disabled","lineContain","quadraticContain","LargeLineShape","findDataIndex","LargeLineDraw","largeLineProto","lineEl","_setCommon","isIncremental","funnelLayout","take","resourceKey","userKey","getStore","release","uKey","HIGH_DOWN_PROP","RECORD_VERSION_PROP","mapModel","_renderSymbols","originalDataIndex","fullData","mainSeries","fullIndex","highDownRecord","recordVersion","onRegionHighDown","enterRegionHighDown","toHighOrDown","__mapOriginalZ2","roundRectHelper","VALID_TEXT_ALIGN","VALID_TEXT_VERTICAL_ALIGN","SHADOW_STYLE_COMMON_PROPS","_tmpTextPositionResult","_tmpBoxPositionResult","normalizeStyle","makeFont","renderRichText","renderPlainText","needDrawBg","needDrawBackground","checkCache","cachedByMe","styleFont","boxPos","applyTextRotation","outerWidth","boxX","adjustTextX","propItem","styleProp","ctxProp","textStrokeWidthPrev","strokeWidthChanged","strokeChanged","getFill","strokeText","fillText","parseRichText","drawRichText","contentWidth","lineTop","token","tokens","tokenCount","usedWidth","lineXLeft","lineXRight","placeToken","tokenStyle","isLineHolder","setCtx","isPlainBg","originalGlobalAlpha","onBgImageLoaded","PointerPath","parsePosition","formatLabel","GaugeView","posInfo","_renderMain","axisLineModel","angleRangeSpan","prevEndAngle","axisLineWidth","showAxis","_renderTicks","_renderPointer","_renderTitle","_renderDetail","minVal","maxVal","subSplitNumber","splitLineLen","tickLen","subStep","splitLineStyle","tickLineStyle","tickLine","valueExtent","detailModel","linesLayout","linesVisual","vmlCore","comma","imageTransformPrefix","Z2","ZLEVEL_BASE","Z_BASE","initRootElStyle","coordsize","coordorigin","encodeHtmlAttribute","rgb2Str","append","getZIndex","setColorAndOpacity","getColorAndAlpha","updateFillNode","zrEl","gradientType","focus","expansion","cs1","cs2","colorAndAlphaList","colorAndAlpha","color1","color2","opacity1","opacity2","focusposition","updateStrokeNode","dashstyle","updateFillAndStroke","vmlEl","isFill","createNode","nPoint","brushVML","vmlRoot","_vmlEl","needTransform","strokeEl","weight","zIndex","removeRectText","onRemove","onAdd","appendRectText","isImage","ow","oh","_imageSrc","_imageWidth","_imageHeight","imageRuntimeStyle","runtimeStyle","oldRuntimeWidth","oldRuntimeHeight","sw","sh","hasCrop","doc","vmlElStyle","hasRotation","transformFilter","imageEl","_imageEl","cropEl","_cropEl","imageELStyle","tmpImage","overflow","cropElStyle","filterStr","textMeasureEl","DEFAULT_STYLE_NORMAL","fontStyleCache","fontStyleCacheCount","MAX_FONT_CACHE_SIZE","fontEl","getFontStyle","fontString","variant","fontVariant","family","offsetWidth","fromTextEl","textLine","textPathEl","skewEl","textVmlEl","_textVmlEl","textpathok","textVmlElStyle","string","polygonContain","getLineSelectors","xyIndex","inLineRange","layoutRange","showContent","alwaysShowContent","displayMode","confine","showDelay","hideDelay","extraCssText","AngleAxis","angleToData","ordinalScale","ordinalExtent","unitSpan","unitH","maxH","cache","lastAutoInterval","lastTickCount","isForced","redefine","classof","inheritIfRequired","toPrimitive","getOwnPropertyNames","getOwnPropertyDescriptor","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","argument","third","radix","maxCode","code","NumberWrapper","valueOf","treeOption","percentPrecision","VISUAL_PRIORITY","resultVisual","visualMeta","concreteDim","opacityMap","itemOpacity","LargeSymbolDraw","_updateSymbolDraw","_getClipShape","_finished","someVectorAt","isTangent","_defineProperty","enumerable","configurable","writable","DATA_NAME_INDEX","ThemeRiverSeries","fixData","rawDataLength","layData","dataList","largestLayer","timeValue","keyIndex","lenCount","indexArr","index1","index2","nestestValue","nearestIdx","theValue","htmlName","htmlValue","_updateLineDraw","getLayer","_lastZlevel","_showEffect","_clearLayer","hasEffect","_hasEffet","_isPolyline","ox","oy","DEFAULT_TOOLBOX_BTNS","isNew","brushComponents","brushComponentSpecifiedBtns","brushOpt","tbs","toolboxFeature","toolboxBrush","brushTypes","removeDuplicate","flag","shapeCompareFunc","_roots","_displayList","_displayListLen","includeIgnore","updateDisplayList","displayList","_updateAndAddDisplayable","afterUpdate","userSetClipPath","currentClipPath","parentClipPath","_children","__storage","addChildrenToStorage","delChildrenFromStorage","_renderList","displayableSortFunc","brushHelper","elementList","fromAxisAreaSelect","oldAxisGroup","_axisGroup","coordSysModel","areaSelectStyle","getAreaSelectStyle","areaWidth","axisLayout","getAxisLayout","builderOpt","strokeContainThreshold","_refreshBrushController","extentLen","enableGlobalPan","panelId","makeRectPanelClipPath","isTargetByCursor","makeRectIsTargetByCursor","getLinearBrushOtherExtent","makeLinearBrushOtherExtent","removeOnClick","getCoverInfoList","coverInfoList","coverInfo","parallelAxisId","activeIntervals","createGridClipPath","createPolarClipPath","sectorArea","clazzUtil","componentProto","GradientManager","addWithoutUpdate","svgElement","hex","splitList","Breadcrumb","animationUtil","DRAG_THRESHOLD","PATH_LABEL_NOAMAL","PATH_LABEL_EMPHASIS","PATH_UPPERLABEL_NORMAL","PATH_UPPERLABEL_EMPHASIS","Z_BG","Z_CONTENT","getItemStyleEmphasis","getItemStyleNormal","createStorage","_breadcrumb","_state","thisStorage","reRoot","rootNodeGroup","nodeGroup","_giveContainerGroup","renderResult","_doRender","renderFinally","_doAnimation","_resetController","_renderBreadcrumb","thisTree","oldTree","lastsForAnimation","oldStorage","willInvisibleEls","renderNode","willDeleteEls","clearStorage","thisViewChildren","oldViewChildren","sameTree","thisNode","storageName","delEls","__tmWillDelete","animationWrap","createWrap","__tmNodeWidth","__tmNodeHeight","targetX","targetY","old","fadein","_onPan","_onZoom","_clearController","mouseX","mouseY","findTarget","_zoomToNode","onSelect","background","thisWidth","thisHeight","thisInvisible","thisRawIndex","oldRawIndex","isParent","itemStyleNormalModel","itemStyleEmphasisModel","giveGraphic","bg","renderContent","useUpperLabel","processInvisible","visualBorderColor","emphasisBorderColor","upperLabelWidth","prepareText","contentHeight","upperLabelRect","addDrillDownIcon","minChar","iconChar","lasts","prepareAnimationWhenHasOld","calculateZ","__tmDepth","__tmStorageName","prepareAnimationWhenNoOld","lastCfg","parentOldX","parentOldY","parentOldBg","zInLevel","zb","getAxisLineShape","rExtent","getRadiusIdx","fixAngleOverlap","firstItem","ticksAngles","minorTickAngles","_axisLine","rId","r0Id","_axisTick","tickAngleItem","_minorTick","tickAngles","_axisLabel","rawCategoryData","commonLabelModel","labelTextAlign","labelTextVerticalAlign","isLabelSilent","makeAxisEventDataBase","targetType","rawLabel","prevAngle","number","format","ecHelper","parseGeoJSON","_List","_Model","_Axis","_env","ecUtil","onClickLeft","$$v","tabActive","expression","ref","showTooltip","$event","switchSourceTpe","activeCard","switchChart","memberData","newMemberTotal","bindMemberTotal","_e","orderTotal","memberMoneyTotal","chartData","_m","legendTitle","curDate","preDate","heightToRem","autoResize","Boolean","required","computed","cardType","deep","setOptions","initChart","__resizeHandler","setMutipleOptions","setSingleOptions","showRMB","xData","dateInterval","$refs","lengendTitle","currentRate","ssrDocument","activeElement","blur","querySelector","querySelectorAll","getElementById","createEvent","initEvent","childNodes","importNode","hash","hostname","pathname","protocol","search","getDocument","ssrWindow","replaceState","pushState","go","CustomEvent","getPropertyValue","screen","matchMedia","cancelAnimationFrame","getWindow","win","_inheritsLoose","subClass","_getPrototypeOf","_setPrototypeOf","_isNativeReflectConstruct","Reflect","construct","Proxy","_construct","Parent","Constructor","instance","_isNativeFunction","_wrapNativeSuper","_cache","Map","_assertThisInitialized","ReferenceError","makeReactive","Dom7","_Array","_this","arrayFlat","arrayFilter","arrayUnique","uniqueArray","qsa","toCreate","tempParent","addClass","classes","_key","classNames","_el$classList","classList","removeClass","_len2","_key2","_el$classList2","toggleClass","_len3","_key3","toggle","_len4","_key4","attrName","removeAttr","removeAttribute","transition","_len5","_key5","targetSelector","listener","capture","handleLiveEvent","dom7EventData","_parents","parents","handleEvent","events","dom7LiveListeners","proxyListener","dom7Listeners","_len6","_key6","dom7proxy","_len9","_key9","transitionEnd","fireCallBack","includeMargins","_styles","styles","_styles2","offsetHeight","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","css","_prop","compareWith","matches","webkitMatchesSelector","msMatchesSelector","previousSibling","eq","returnIndex","newChild","tempDiv","prepend","nextElementSibling","nextAll","nextEls","_next","previousElementSibling","prevAll","prevEls","_prev","_parent","closest","foundElements","noTrigger","shortcut","Methods","deleteProps","now","getTranslate","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","m41","m42","nextSource","keysArray","nextKey","desc","bindModuleMethods","subKey","calcSupport","DocumentTouch","PointerEvent","maxTouchPoints","observer","passiveListener","supportsPassive","gestures","getSupport","calcDevice","_temp","_ref","support","device","ios","android","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","iPadScreens","getDevice","overrides","calcBrowser","isSafari","isEdge","isWebView","getBrowser","swiper","resizeHandler","destroyed","emit","orientationChangeHandler","destroy","_extends","assign","Observer","attach","ObserverFunc","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","observe","attributes","childList","characterData","observers","observeParents","containerParents","$el","observeSlideChildren","$wrapperEl","useParams","instanceParams","modules","moduleName","useModules","modulesParams","moduleParams","moduleEventName","eventsListeners","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventsArray","updateSize","isVertical","updateSlides","swiperSize","rtl","rtlTranslate","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","slidesForMargin","slideEl","slideIndex","cssMode","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","slidesNumberEvenToRows","slideSize","virtualSize","marginLeft","marginTop","marginRight","marginBottom","slidesPerColumn","slidesPerView","slidesPerColumnFill","newSlidesGrid","slidesPerRow","numFullColumns","slide","newSlideOrderIndex","slidesPerGroup","groupIndex","slideIndexInGroup","columnsInGroup","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","paddingTop","paddingBottom","_boxSizing","swiperSlideSize","centeredSlides","slidesPerGroupSkip","setWrapperSize","_i","slidesGridItem","_i2","_slidesGridItem","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","centerInsufficientSlides","_allSlidesSize","allSlidesOffset","snapIndex","watchOverflow","checkOverflow","watchSlidesProgress","watchSlidesVisibility","updateSlidesOffset","updateAutoHeight","speed","activeSlides","newHeight","setTransition","visibleSlides","activeIndex","swiperSlideOffset","updateSlidesProgress","slideVisibleClass","visibleSlidesIndexes","slideProgress","minTranslate","autoHeight","slideBefore","slideAfter","isVisible","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","wasBeginning","wasEnd","updateSlidesClasses","activeSlide","realIndex","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","getSwiperTranslate","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","wrapperEl","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","_wrapperEl$scrollTo","isH","scrollTo","behavior","onTranslateToWrapperTransitionEnd","transitionStart","slideTo","initialSlide","allowSlideNext","allowSlidePrev","scrollWidth","onSlideToWrapperTransitionEnd","slideToLoop","loopedSlides","slideNext","increment","loopPreventsSlide","loopFix","_clientLeft","slidePrev","prevIndex","normalizedTranslate","normalizedSnapGrid","prevSnap","slideReset","slideToClosest","currentSnap","nextSnap","_currentSnap","slidesPerViewDynamic","slideToIndex","loopCreate","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","prependSlides","appendSlides","snapTranslate","slideChanged","_slideChanged","loopDestroy","setGrabCursor","moving","simulateTouch","isLocked","unsetGrabCursor","appendSlide","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","onTouchStart","touchEventsData","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","isTouched","isMoved","noSwiping","noSwipingSelector","noSwipingClass","allowClick","swipeHandler","currentX","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","formElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","onTouchMove","targetTouch","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","touchAngle","touchMoveStopPropagation","nested","startTranslate","allowMomentumBounce","grabCursor","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","freeMode","velocities","onTouchEnd","currentPos","touchEndTime","timeDiff","lastClickTime","freeModeMomentum","lastMoveEvent","velocityEvent","velocity","freeModeMinimumVelocity","freeModeMomentumVelocityRatio","momentumDuration","freeModeMomentumRatio","momentumDistance","newPosition","afterBouncePosition","needsLoopFix","doBounce","bounceAmount","freeModeMomentumBounceRatio","freeModeMomentumBounce","freeModeSticky","moveDistance","currentSlideSize","longSwipesMs","stopIndex","groupSize","_increment","longSwipes","longSwipesRatio","shortSwipes","isNavButtonTarget","navigation","nextEl","onResize","breakpoints","setBreakpoint","autoplay","running","paused","run","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","attachEvents","touchEvents","passiveListeners","passive","cancel","updateOnWindowResize","detachEvents","_swiper$loopedSlides","breakpoint","getBreakpoint","currentBreakpoint","breakpointOnlyParams","paramValue","breakpointParams","originalParams","wasMultiRow","isMultiRow","containerModifierClass","emitContainerClasses","directionChanged","needsReLoop","changeDirection","getBreakpoints","minRatio","innerHeight","_points$i","innerWidth","addClasses","removeClasses","loadImage","srcset","sizes","checkForComplete","onReady","isPicture","preloadImages","imagesLoaded","imagesToLoad","updateOnImagesReady","currentSrc","wasLocked","lastSlidePosition","uniqueNavElements","wrapperClass","_emitClasses","_defineProperties","descriptor","_createClass","protoProps","staticProps","prototypes","modular","eventsEmitter","manipulation","images","extendedDefaults","Swiper","prototypeGroup","protoMethod","moduleParamName","swiperParams","passedParams","swipers","containerEl","newParams","shadowRoot","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","_proto","spv","breakLoop","translated","translateValue","newDirection","needUpdate","currentDirection","deleteInstance","cleanStyles","extendDefaults","newDefaults","installModule","use","LineChart","CircleBar","allMoneyTotal","memberChart","moneyChart","orderChart","bindMemberChart","loading","created","getOrderDataStat","resizeChart","setChartData","showStartTimePicker","showEndTimePicker","endTime","showPromotionPicker","promotionName","doSearch","resultData","reachPer","clickPer","orderPer","clickConRate","orderConRate","qoqRpClass","qoqRpValue","qoqRpSrc","qoqCpClass","qoqCpValue","qoqCpSrc","qoqOpClass","qoqOpValue","qoqOpSrc","qoqOpaClass","qoqOpaValue","qoqOpaSrc","qoqCcrClass","qoqCcrValue","qoqCcrSrc","qoqOcrClass","qoqOcrValue","qoqOcrSrc","lineChartData","showSTPicker","minDate","maxDate","onConfirmStartTime","onCancelStartTime","startDate","showETPicker","minEndDate","onConfirmEndTime","onCancelEndTime","endDate","showPromotPicker","promotionList","onConfirmPromotion","onCancelPromotion","promotionId","getPromotionList","resetPromotionInfo","transClass","transSrc","upSrc","downSrc","transData","validateField","setDate","getMemberMarketDataStat","repurchaseData","repurchaseRate","repurchaseCount","repurchaseAmount","recRateTrend","recPerTrend","recAmountTrend","getRepurchaseDataStat","MemberAnalysis","MarketAnalysis","RepurchaseAnalysis","$nextTick","beforeCreate","repurchaseChart","marketChart","ariaModel","seriesCnt","ariaLabel","maxDataCnt","maxSeriesCnt","displaySeriesCnt","getTitle","getConfig","seriesLabels","seriesCount","seriesLabel","seriesTpl","getSeriesTypeName","displayCnt","dataLabels","keyValues","userConfig","setAreas","adjustSingleSide","viewLeft","viewTop","farthestX","shiftDown","shiftUp","changeX","isDownList","lastDeltaX","labelAlignTo","deltaY","deltaX","lastY","upList","downList","avoidOverlap","labelLayoutList","leftList","rightList","leftmostX","rightmostX","isPositionCenter","targetTextWidth","isAlignToEdge","realTextWidth","labelDistance","bleedMargin","truncateText","hasLabelRotate","minShowLabelRadian","labelLineLen2","ShadowManager","hasShadow","_shadowDom","_shadowDomId","domChild","stdDx","stdDy","stdDeviation","singleAxisHelper","_axisSplitHelper","SingleAxisView","Animatable","animatable","animateToShallow","objShallow","propertyCount","setAttrByPath","animatingShape","pathSplitted","animateFrom","_whiskerBoxCommon","seriesModelMixin","CandlestickSeries","defaultValueDimensions","borderColor0","animationUpdate","COORD_CONVERTS","INCLUDE_FINDER_MAIN_TYPES","targetInfoList","_targetInfoList","foundCpts","targetInfoBuilders","builder","formatMinMax","includeMainTypes","setOutputRanges","coordRanges","coordConvert","__rangeOffset","diffProcessor","xyMinMax","findTargetInfo","coordSyses","rangeOffset","getScales","getDefaultBrushType","getPanelRect","defaultBrushType","areaPanelId","targetInfoMatchers","xAxisModels","yAxisModels","gridModels","gridModelMap","xAxesHas","yAxesHas","cartesians","panelRectBuilder","geoModels","axisConvert","rangeOrCoordRange","xminymin","xmaxymax","axisNameIndex","axisDiffProcessor","refer","scales","xyMinMaxCurr","xyMinMaxOrigin","sizeCurr","sizeOrigin","decode","json","UTF8Encoding","encodeScale","UTF8Scale","coordinates","encodeOffsets","coordinate","decodePolygon","c2","prevX","prevY","featureObj","setNodePosition","pieLayout","dr","rCenter","unitStartX","unitStartY","unitEndX","unitEndY","lessThanCircle","_visualEncoding","updateController","modelId","$from","getDataWithEncodedVisual","dataWithEncodedVisual","IRRELEVANT_EXCLUDES","targetCoordSysModel","topTarget","colorAll","labelDims","_subPixelOptimize","subPixelOptimizeOutputShape","EFFECT_RIPPLE_NUMBER","updateRipplePath","rippleGroup","effectCfg","rippleEffectColor","ripplePath","effectSymbolProto","stopEffectAnimation","startEffectAnimation","effectOffset","rippleScale","updateEffectAnimation","oldEffectCfg","_effectCfg","DIFFICULT_PROPS","_parseSVG","originRoot","buildGraphic","field","rootMap","originRootHostKey","svgXML","svgWidth","svgHeight","BOOST_SIZE_THRESHOLD","LargeSymbolPath","symbolProxy","softClipShape","symbolProxyShape","canBoost","largeSymbolProto","endIndex","byteOffset","extrudeShadow","_traversalHelper","sep","commonLayout","coorX","coorY","finalCoor","QUERY_REG","_timelineOptions","_mediaList","_mediaDefault","_currentMediaIndices","_optionBackup","_newBaseOption","parseRawOption","rawOption","mediaDefault","timelineOptions","mediaList","media","singleMedia","preProcess","applyMediaQuery","realMap","aspectratio","applicatable","matched","operator","realAttr","real","expect","indicesEquals","indices1","indices2","oldOption","newCptOpt","oldCptOpt","oldOptionBackup","newParsedOption","isRecreate","optionBackup","Draggable","_dragStart","_drag","_dragEnd","draggingTarget","_draggingTarget","dispatchToElement","dropTarget","lastDropTarget","_dropTarget","rootDepth","renderRollupNode","rPerLevel","rStart","rEnd","siblingAngle","isAsc","sortOrder","axisTrigger","collect","paramsSet","reals","fakeValue","layoutInput","rParam","pathContain","pathProxyForDraw","hasFillGradient","hasStrokeGradient","hasFillPattern","hasStrokePattern","_fillGradient","_strokeGradient","ctxLineDash","shapeCfg","needsUpdateRect","rectWithStroke","_rectWithStroke","lineScale","dirtyPath","__clipTarget","Sub","defaultShape","thisShape","Cartesian","getAxesByScale","axisX","axisY","xScale","yScale","xAxisExtent","yAxisExtent","xExtent","yExtent","_dimName","_axisIndex","_valueWindow","_percentWindow","_dataExtent","_minMaxSpan","_dataZoomModel","calculateDataExtent","seriesExtent","fixExtentByAxis","isCategoryAxis","setAxisModel","isRestore","percentWindow","useOrigin","setMinMaxSpan","percentSpan","valueSpan","getOtherAxisModel","coordSysIndexName","foundOtherAxisModel","isCartesian","otherAxisModel","hasPropModeValue","boundPercent","boundValue","spans","restrictSet","fromWindow","toWindow","fromExtent","toExtent","toValue","dataWindow","leftOut","rightOut","thisHasValue","thisLeftOut","thisRightOut","isInWindow","originalLarge","originalProgressive","axesInfo","seriesInvolved","coordSysMap","collectAxesInfo","collectSeriesInfo","globalAxisPointerModel","linksOption","linkGroups","coordSysKey","makeKey","axesInfoInCoordSys","baseTooltipModel","saveTooltipAxisInfo","triggerAxis","cross","tooltipAxes","fromTooltip","axisPointerShow","isHandleTrigger","makeAxisPointerModel","involveSeries","getLinkGroupIndex","linkGroup","mapper","tooltipAxisPointerModel","volatileOption","labelOption","tooltipAxisPointerLabelShow","seriesTooltipTrigger","seriesTooltipShow","seriesDataCount","linkOption","checkPropInLink","linkPropValue","axisPropValue","GRADIENT_LEVELS","Heatmap","_gradientPixels","colorFunc","_getBrush","gradientInRange","_getGradient","gradientOutOfRange","imageData","getImageData","pixels","pixelLen","diffOpacity","gradientOffset","putImageData","brushCanvas","_brushCanvas","gradientPixels","pixelsSingleState","Uint8ClampedArray","TOUCH_CLICK_DELAY","globalEventSupported","localNativeListenerNames","mouseHandlerNames","touchHandlerNames","pointerEventNameMap","pointerdown","pointerup","pointermove","pointerout","pointerHandlerNames","nm","mouse","globalNativeListenerNames","eventNameFix","isPointerFromTouch","pointerType","setTouchTimer","touching","touchTimer","markTouch","normalizeGlobalEvent","FakeGlobalEvent","isLocalEl","elTmp","isLocal","painterRoot","currentTarget","fakeGlobalEventProto","localDOMHandlers","_mayPointerCapture","downPoint","togglePointerCapture","mouseout","_pointerCapturing","zrEventControl","toElement","relatedTarget","zrIsToLocalDOM","touchstart","_lastTouchMoment","processGesture","touchmove","touchend","click","globalDOMHandlers","pointerCaptureReleasing","mountLocalDOMEventListeners","domHandlers","nativeEventName","mountSingleDOMEventListener","mountGlobalDOMEventListeners","nativeEventListener","listenerOpts","domTarget","unmountDOMEventListeners","isPointerCapturing","globalHandlerScope","_globalHandlerScope","DOMHandlerScope","HandlerDomProxy","_localHandlerScope","handlerDomProxyProto","setCursor","processedMapType","mapSymbolOffsets","subMapSeries","dimAxisMapper","_axes","_dimList","_dataCoordConvert","input","dimList","SankeySeries","localPosition","rawDataOpt","layoutIterations","makeAction","PROXIMATE_ONE_DAY","Calendar","calendarModel","_rangeInfo","_sw","_sh","getFirstDayOfWeek","_firstDayOfWeek","getDateInfo","day","getDay","formatedDate","getNextNDay","_lineWidth","_getRangeInfo","_initRangeOption","whNames","cellNumbers","cellSizeSpecified","whGlobal","calendarRect","dayInfo","week","nthWeek","pointToDate","tl","tr","br","bl","nthX","nthY","_getDateByWeeksAndDay","setMonth","reversed","startDateNum","endDateNum","dateNum","fweek","lweek","nthDay","calendarList","calendarSeries","stackInfoMap","stackInfoList","stackInfo","stackResultDimension","stackedDimension","stackedByDimension","isStackedByIndex","calculateStack","targetStackInfo","idxInStack","resultVal","resultNaN","targetData","byValue","stackedDataRawIndex","stackedOver","legendFilter","SILENT","makeEventPacket","eveType","stopEvent","EmptyProxy","handlerNames","proxy","_hovered","_gestureMgr","setHandlerProxy","isHover","isOutsideBoundary","handlerInstance","isOutside","lastHovered","lastHoveredTarget","hovered","hoveredTarget","eventControl","eventArgs","eventPacket","eachOtherLayer","layer","exclude","hoverCheckResult","gestureMgr","_downEl","_downPoint","_upEl","magicTypeLang","INNER_STACK_KEYWORD","MagicType","getIcons","availableIcons","icons","seriesOptGenreator","isStack","radioTypes","newTitle","generateNewSeriesTypes","newSeriesOpt","radio","currentType","doCreateNode","urn","vmlInited","namespaces","zrvml","initVML","styleSheets","createStyleSheet","addRule","AxisPointerView","_updatePathDirty","vec2Min","vec2Max","v2Copy","isPointNull","drawSegment","segLen","allLen","smoothMin","smoothMax","drawMono","drawNonMono","prevIdx","prevP","ctrlLen","nextP","ratioNextSeg","lenPrevSeg","lenNextSeg","getBoundingBox","ptMin","ptMax","stackedOnBBox","LinkedList","linkedListProto","insert","Entry","insertEntry","_list","_maxSize","_lastRemovedEntry","LRUProto","leastUsedEntry","PictorialBarSeries","sunburstLayout","previousZoom","fixX","fixY","cubic","quadratic","swapExtrema","windingCubic","nRoots","y0_","y1_","nExtrema","windingQuadratic","y_","windingArc","containPath","isStroke","typeInfo","member","1","2","3","4","5","repurchase","market","6","material_blue","require","material_orange","material_red","materialTheme","imgSrc","_axesLayout","restrict","layoutAxisWithoutExpand","layoutLength","axisCount","axisNameAvailableWidth","axisLabelShow","layoutAxisWithExpand","nameTruncateMaxWidth","axisCollapseWidth","winInnerIndices","axisExpandWindow0Pos","axisExpandWindow","_updateAxesFromSeries","_makeLayoutInfo","axisBase","layoutBase","pixelDimIndex","pAxis","pLayout","_layoutAxes","winSize","layoutExtent","positionTable","rotationTable","axisCoordToPoint","dataDimensions","hasActiveSet","lenj","getActiveState","getSlidedAxisExpandWindow","pointCoord","triggerArea","useJump","PolarAxisModel","polarId","polarAxisDefaultExtendedOption","treemapVisual","treemapLayout","listComponentHelper","toolboxModel","featureOpts","_features","featureNames","_featureNames","processFeature","titleText","__title","needPutOnTop","topOffset","oldName","isUserFeatureName","createIconPaths","iconName","iconPaths","iconStatus","iconStyleModel","iconStyleEmphasisModel","titles","defaultTextPosition","ownKeys","toIndexedObject","getOwnPropertyDescriptorModule","createProperty","getOwnPropertyDescriptors","O","parseInt10","checkParentAvailable","insertAfter","prevSibling","SVGPainter","_opts","svgDom","bgRoot","gradientManager","clipPathManager","shadowManager","viewport","_svgDom","_backgroundRoot","_viewport","_visibleList","createMethodNotSupport","viewportRoot","_paintList","_backgroundNode","bgNode","visibleList","listLen","newVisibleList","prevSvgElement","textSvgElement","_getDefs","_getSize","_width","_height","viewportStyle","whIdx","cwh","plt","prb","encodeURIComponent","outerHTML","repeat","createPattern","moveAnimation","propsEqual","lastProp","lastProps","newProps","updateLabelShowHide","labelEl","getHandleTransProps","updateMandatoryProps","_group","_lastGraphicKey","_handle","_lastValue","_lastStatus","_payloadInfo","_axisModel","_axisPointerModel","_moveAnimation","determineAnimation","doUpdateProps","updatePointerEl","updateLabelEl","createPointerEl","createLabelEl","useSnap","pointerEl","handleModel","onmousedown","_onHandleDragMove","_onHandleDragEnd","includeStyles","_moveHandleToValue","_doDispatchAxisPointer","payloadInfo","doClear","buildLabel","xDimIndex","BoxplotView","constDim","updateNormalBoxData","BoxPath","TimelineModel","SliderTimelineModel","checkpointStyle","playIcon","stopIcon","nextIcon","prevIcon","idStart","colorQuery","opacityQuery","restoreLang","Restore","prepareCartesian2d","prepareGeo","prepareSingleAxis","preparePolar","prepareCalendar","ITEM_STYLE_NORMAL_PATH","ITEM_STYLE_EMPHASIS_PATH","LABEL_NORMAL","LABEL_EMPHASIS","GROUP_DIFF_PREFIX","prepareCustoms","getPathData","__customPathData","__customImagePath","__customText","__customGraphicType","updateEl","isRoot","transitionProps","prepareStyleTransition","targetOpacity","styleEmphasis","oldElStyle","makeRenderItem","customSeries","prepareResult","currDataIndexInside","currItemModel","currLabelNormalModel","currLabelEmphasisModel","currVisualColor","userAPI","barLayout","currentSeriesIndices","userParams","dataInsideLength","wrapEncodeDef","currDirty","updateCache","applyExtraBefore","applyExtraAfter","doCreateOrUpdate","simplyRemove","elOptionType","elOptionShape","hasOwnPathData","mergeChildren","$mergeChildren","byName","diffChildrenByName","diffGroupChildren","processAddUpdate","processRemove","childOption","dummyModel","stylePropName","useTransform","setIncrementalAndHoverLayer","elementName","makeCategoryLabels","makeRealNumberLabels","makeCategoryTicks","makeCategoryLabelsActually","labelCategoryInterval","numericLabelInterval","labelsCache","getListCache","optionLabelInterval","listCacheGet","makeLabelsByCustomizedCategoryInterval","makeAutoCategoryInterval","makeLabelsByNumericCategoryInterval","listCacheSet","tickCategoryInterval","ticksCache","optionTickInterval","labelsResult","autoInterval","fetchAutoCategoryIntervalCalculationParams","axisRotate","unitW","maxW","axisExtend0","axisExtend1","categoryInterval","onlyTick","startTick","showAllLabel","includeMinLabel","includeMaxLabel","addItem","tVal","DUMMY_COMPONENT_NAME_PREFIX","subOpts","subOptName","newCptOptions","cptOption","idMap","existCpt","idNum","batchA","batchB","mapA","mapB","makeMap","mapToArray","sourceBatch","otherMap","otherDataIndices","isData","innerUniqueIndex","hostObj","parsedKey","queryType","queryParam","_setting","_isBlank","childCount","_doAdd","addBefore","includeChildren","tmpMat","extremity","xDim","yDim","nativeGetOwnPropertyDescriptor","FAILS_ON_PRIMITIVES","FORCED","_baseAxisDim","addOrdinal","xAxisType","yAxisType","baseAxisDimIndex","baseAxisType","otherAxisType","newOptionData","newItem","getNearestColorPalette","paletteNum","colorIdx","colorNameMap","scopeFields","defaultColorPalette","layeredColorPalette","doneCallback","elExistsMap","fixPosition","textWidthCache","textWidthCacheCounter","TEXT_CACHE_MAX","STYLE_REG","measureText","getRichTextRect","getPlainTextRect","halfHeight","adjustTextPositionOnRect","dummyStyle","prepareTruncateOptions","truncateSingleLine","maxIterations","cnCharWidth","ascCharWidth","ellipsisWidth","subLength","estimateLength","charCode","getLineHeight","truncOuterHeight","truncOuterWidth","matchedIndex","pushTokens","substring","stlPadding","truncateWidth","truncateHeight","tokenHeight","tokenWidth","tokenWidthNotSpecified","percentWidth","bgImg","paddingW","remianTruncWidth","isEmptyStr","strs","tokensLen","renderPlanner","Chart","renderTaskPlan","renderTaskReset","toggleHighlight","chartProto","elSetState","progressMethodMap","forceFirstProgress","VMLPainter","vmlViewport","_vmlRoot","_vmlViewport","_firstPaint","__alreadyNotVisible","_getWidth","_getHeight","vmlViewportStyle","seriesItem","replacableOptionKeys","dataBound","contentColor","getTargetSeriesIndices","optionSeriesIndex","isMinMax","optDim","listDimensions","isCalculationCoord","completeSingle","defa","completeInactive","stateExist","stateAbsent","optExist","optAbsent","completeController","symbolExists","symbolSizeExists","modelHelper","illegalPoint","isIllegalPoint","inputAxesInfo","shouldHide","outputFinder","showValueMap","updaters","showPointer","coordSysContainsPoint","inputAxisInfo","findInputAxisInfo","processOnAxis","linkTriggers","tarAxisInfo","tarKey","srcAxisInfo","srcKey","srcValItem","makeMapperParam","updateModelActually","dispatchTooltipActually","dispatchHighDownActually","dontSnap","buildPayloadsBySeries","payloadBatch","snapToValue","seriesNestestValue","coordSysItem","coordSysId","coordSysIndex","coordSysMainType","outputAxesInfo","valItem","highDownKey","lastHighlights","newHighlights","toHighlight","toDownplay","setScrollDataIndex","rawGeoJson","rawSpecialAreas","parsers","JSON","groupSeriesByAxis","groupItem","calculateBase","layoutSingleSeries","boxOffsetList","boxWidthList","axisList","boundList","maxDataCount","boxWidthBound","availableWidth","boxGap","boxWidth","halfWidth","median","end1","end2","end4","end5","layEndLine","endCenter","HOVER_LAYER_ZLEVEL","CANVAS_ZLEVEL","EL_AFTER_INCREMENTAL_INC","INCREMENTAL_INC","isLayerValid","__builtin__","isDisplayableCulled","isClipPathChanged","prevClipPaths","doClip","createRoot","domRoot","singleCanvas","_singleCanvas","rootStyle","zlevelList","_zlevelList","layers","_layerConfig","_needsManuallyCompositing","mainLayer","_domRoot","_hoverlayer","_hoverElements","isSingleCanvas","paintAll","_redrawId","_backgroundColor","__hoverMir","hoverElements","hoverLayer","originalEl","_doPaintEl","getHoverLayer","redrawId","_updateLayerStatus","finished","_doPaintList","_compositeManually","eachBuiltinLayer","layerList","zi","useTimer","firstEl","dTime","prevElClipPaths","currentLayer","forcePaint","insertLayer","layersMap","prevLayer","prevDom","eachLayer","getLayers","updatePrevLayer","prevZlevel","incrementalLayerCount","layerConfig","_zlevel","delLayer","_progressiveLayers","clearLayer","imageLayer","renderToCanvas","shadowBlurSize","leftMargin","rightMargin","topMargin","bottomMargin","pathTransform","ImageShape","imgShape","upperCaseFirst","group1","replaceReg","replaceMap","'","TPL_VAR_ALIAS","wrapVar","varName","seriesIdx","paramsList","seriesLen","alias","formatTplSimple","pad","isUTC","utc","getTextBoundingRect","blank","opener","autoPlay","rewind","playInterval","_names","_initData","dataArr","idxArr","positionMap","directionMap","stackedByDimInfo","stackedDimInfo","byIndex","stackedCoordDimension","mayStack","stackedDimCoordDim","stackedDimType","stackedDimCoordIndex","stackedDim","targetDim","MONTH_TEXT","EN","CN","WEEK_TEXT","_tlpoints","_blpoints","_firstDayOfMonth","_firstDayPoints","rangeData","_renderDayRect","_renderLines","_renderYearText","_renderMonthText","_renderWeekText","itemRectStyleModel","addPoints","_getLinePointsOfOneWeek","_drawSplitline","_getEdgesPoints","rs","poyline","tmpD","_formatterLabel","_yearTextPositionControl","aligns","xc","yc","posPoints","yearText","_monthTextPositionControl","isCenter","termPoints","firstDayPoints","yyyy","yy","MM","monthText","_weekTextPositionControl","isStart","firstDayOfWeek","weekText","mathAtan2","resizeGeo","leftTop","rightBottom","boxLayoutOption","useCenterAndSize","setGeoCoords","geoList","mapModelGroupBySeries","nameMapList","singleMapSeries","originRegionArr","regionsArr","pp","initialFriction","v12","nLen","repFact","handleSpan","originalDistSign","getSpanSign","extentMinSpan","realExtent","currDistSign","dataSample","treeLayout","diffData","diffResult","idx1","oldStackedOnPoints","newStackedOnPoints","oldCoordSys","newCoordSys","oldValueOrigin","newValueOrigin","currPoints","nextPoints","currStackedPoints","nextStackedPoints","sortedIndices","rawIndices","newDataOldCoordInfo","oldDataNewCoordInfo","diffItem","pointAdded","currentPt","nextPt","sortedCurrPoints","sortedNextPoints","sortedCurrStackedPoints","sortedNextStackedPoints","sortedStatus","stackedOnCurrent","stackedOnNext","SingleAxisPointer","getPointDimIndex","ScrollableLegendModel","pageButtonItemGap","pageIcons","pageIconColor","pageIconInactiveColor","pageTextStyle","_bbox","lineAnimationDiff","isPointsSame","points2","getBoundingDiff","min1","max1","getSmooth","getStackedOnPoints","turnPointsIntoStep","stepTurnAt","stepPoints","stepPt","stepPt2","getVisualGradient","stopLen","tinyExtent","minCoord","maxCoord","coordSpan","getIsIgnoreFunc","isAuto","canShowAllSymbolForCategory","categoryDataDim","labelMap","availSize","createLineClipPath","_lineGroup","isCoordSysPolar","prevCoordSys","_coordSys","_polyline","_polygon","isAreaChart","isIgnoreFunc","__temp","clipShapeForSymbol","_clipShapeForSymbol","_step","_newPolygon","isIgnore","_stackedOnPoints","_updateAnimation","_newPolyline","stackedOnSeries","_valueOrigin","__points","updatedDataInfo","diffStatus","ptIdx","contrastColor","axisCommon","CartesianAxisView","loopGeo","newRegion","parallelPreprocessor","CLICK_THRESHOLD","_handlers","_throttledDispatchExpand","_dispatchExpand","checkTrigger","_mouseDownPoint","mouseDownPoint","DEFAULT_OUT_OF_BRUSH_COLOR","BrushModel","brushMode","transformable","inBrush","outOfBrush","generateBrushOption","define","Task","_reset","_plan","_onDirty","_dirty","taskProto","planResult","upTask","_upstream","lastModBy","normalizeModBy","_modBy","lastModDataCount","_modDataCount","_dueEnd","_outputDueEnd","_progress","_dueIndex","doProgress","outputDueEnd","_settedOutputEnd","winCount","sStep","sCount","modNext","sequentialNext","taskIns","_callingProgress","downstream","_downstream","downTask","normalizeRect","localPoints","specifiedXYIndex","brushWidth","targetModel","localCursorPoint","TEXT_PADDING","ITEM_GAP","ARRAY_LENGTH","makeItemPoints","packEventData","itemNode","selfType","normalStyleModel","layoutParam","totalWidth","renderList","_prepare","_renderContent","lastX","availableSize","getAvailableSize","dataStatistics","statisticType","mapKey","seriesGroups","hostGeoModel","seriesList","symbolCtor","_symbolCtor","symbolDrawProto","normalizeUpdateOpt","SymbolCtor","enableAnimation","PieSeries","_createSelectableList","minShowLabelAngle","hoverOffset","avoidLabelOverlap","alignTo","distanceToLabelLine","request","getSuggestData","getQrCodePicUrl","HV_NAMES","boxLayout","maxHeight","currentLineMaxSize","nextX","nextY","nextChild","nextChildRect","moveX","moveY","vbox","hbox","containerRect","verticalMargin","horizontalMargin","elPos","targetOption","hResult","vResult","newValueCount","merged","mergedValueCount","enoughParamNumber","hasProp","boxplotVisual","boxplotLayout","matrixUtil","dumbGroup","_transform","_dumbGroup","hasBuilder","builders","pt1","pt2","arrows","arrowSize","arrowOffset","symbolWidth","symbolHeight","axisTickLabel","ticksEls","buildAxisMajorTicks","labelEls","buildAxisLabel","fixMinMaxLabelShow","buildAxisMinorTicks","gapSignal","isNameLocationCenter","nameRotation","endTextLayout","truncateOpt","truncatedText","__fullText","__truncatedText","axisRotation","rotationDiff","textRotate","onLeft","tickEls","firstLabel","nextLabel","lastLabel","prevLabel","firstTick","lastTick","ignoreEl","isTwoLabelOverlapped","firstRect","nextRect","mRotationBack","createTicks","tickTransform","tickEndCoord","aniid","tickEl","minorTickLineStyle","minorTicksEls","itemLabelModel","compatStyle","compatLayoutProperties","LAYOUT_PROPERTIES","COMPATITABLE_COMPONENTS","clipOverflow","clockWise","pointerColor","dataRange","componentName","COVER_Z","UNSELECT_THRESHOLD","MIN_RESIZE_LINE_WIDTH","MUTEX_RESOURCE_KEY","DIRECTION_MAP","CURSOR_MAP","ne","nw","se","DEFAULT_BRUSH_OPT","baseUID","_brushType","_brushOption","_panels","_covers","_creatingCover","_creatingPanel","_enableGlobalPan","_uid","pointerHandlers","doEnableBrush","mountHandlers","doDisableBrush","unmountHandlers","createCover","cover","coverRenderers","__brushOption","endCreating","creatingCover","coverRenderer","getCoverRenderer","updateCoverShape","updateCoverAfterCreation","getPanelByPoint","panel","panels","pn","getPanelByCover","clearCovers","covers","originalLength","shouldShowCover","getTrackEnds","createBaseRectCover","doDrift","edgeNames","makeStyle","updateBaseRect","localRange","xa","ya","x2a","y2a","widtha","heighta","updateRectShape","mainEl","globalDir","getGlobalDirection","pointsToRect","clipByPanel","formatRectRange","localDirection","inverseMap","driftRect","toRectRange","fromRectRange","rectRange","localDelta","toLocalDelta","namePart","ind","driftPolygon","localD","localZero","xmin","ymin","xmax","ymax","resetCursor","isOutsideZrArea","currPanel","rawE","mainShapeContain","updateCoverByMouse","eventParams","thisBrushOption","determineBrushType","coverBrushOption","getCreatingRange","panelOpts","eachCover","brushOptionList","tmpIdPrefix","oldCovers","newCovers","oldGetKey","addOrUpdate","newBrushOption","handleDragEnd","getLineRenderer","localTrack","_radiusAxis","_angleAxis","maxAngle","colorAccessPath","colorCallback","borderColorAccessPath","samplers","nearest","indexSampler","sampler","PATH_COLOR","BoxplotSeries","brushLang","Brush","_brushMode","isBrushed","command","styleModel","paddings","confineInContainer","bgColor","axisDimension"],"mappings":"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","file":"js/chunk-426a7694.ff3f8a6d.js","sourcesContent":["\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar each = _util.each;\nvar createHashMap = _util.createHashMap;\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar createListFromArray = require(\"../helper/createListFromArray\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = SeriesModel.extend({\n type: 'series.parallel',\n dependencies: ['parallel'],\n visualColorAccessPath: 'lineStyle.color',\n getInitialData: function (option, ecModel) {\n var source = this.getSource();\n setEncodeAndDimensions(source, this);\n return createListFromArray(source, this);\n },\n\n /**\n * User can get data raw indices on 'axisAreaSelected' event received.\n *\n * @public\n * @param {string} activeState 'active' or 'inactive' or 'normal'\n * @return {Array.} Raw indices\n */\n getRawIndicesByActiveState: function (activeState) {\n var coordSys = this.coordinateSystem;\n var data = this.getData();\n var indices = [];\n coordSys.eachActiveState(data, function (theActiveState, dataIndex) {\n if (activeState === theActiveState) {\n indices.push(data.getRawIndex(dataIndex));\n }\n });\n return indices;\n },\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 2,\n // 二级层叠\n coordinateSystem: 'parallel',\n parallelIndex: 0,\n label: {\n show: false\n },\n inactiveOpacity: 0.05,\n activeOpacity: 1,\n lineStyle: {\n width: 1,\n opacity: 0.45,\n type: 'solid'\n },\n emphasis: {\n label: {\n show: false\n }\n },\n progressive: 500,\n smooth: false,\n // true | false | number\n animationEasing: 'linear'\n }\n});\n\nfunction setEncodeAndDimensions(source, seriesModel) {\n // The mapping of parallelAxis dimension to data dimension can\n // be specified in parallelAxis.option.dim. For example, if\n // parallelAxis.option.dim is 'dim3', it mapping to the third\n // dimension of data. But `data.encode` has higher priority.\n // Moreover, parallelModel.dimension should not be regarded as data\n // dimensions. Consider dimensions = ['dim4', 'dim2', 'dim6'];\n if (source.encodeDefine) {\n return;\n }\n\n var parallelModel = seriesModel.ecModel.getComponent('parallel', seriesModel.get('parallelIndex'));\n\n if (!parallelModel) {\n return;\n }\n\n var encodeDefine = source.encodeDefine = createHashMap();\n each(parallelModel.dimensions, function (axisDim) {\n var dataDimIndex = convertDimNameToNumber(axisDim);\n encodeDefine.set(axisDim, dataDimIndex);\n });\n}\n\nfunction convertDimNameToNumber(dimName) {\n return +dimName.replace('dim', '');\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar VisualMapView = require(\"./VisualMapView\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar layout = require(\"../../util/layout\");\n\nvar helper = require(\"./helper\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar PiecewiseVisualMapView = VisualMapView.extend({\n type: 'visualMap.piecewise',\n\n /**\n * @protected\n * @override\n */\n doRender: function () {\n var thisGroup = this.group;\n thisGroup.removeAll();\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\n var itemAlign = this._getItemAlign();\n\n var itemSize = visualMapModel.itemSize;\n\n var viewData = this._getViewData();\n\n var endsText = viewData.endsText;\n var showLabel = zrUtil.retrieve(visualMapModel.get('showLabel', true), !endsText);\n endsText && this._renderEndsText(thisGroup, endsText[0], itemSize, showLabel, itemAlign);\n zrUtil.each(viewData.viewPieceList, renderItem, this);\n endsText && this._renderEndsText(thisGroup, endsText[1], itemSize, showLabel, itemAlign);\n layout.box(visualMapModel.get('orient'), thisGroup, visualMapModel.get('itemGap'));\n this.renderBackground(thisGroup);\n this.positionGroup(thisGroup);\n\n function renderItem(item) {\n var piece = item.piece;\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(itemGroup, representValue, [0, 0, itemSize[0], itemSize[1]]);\n\n if (showLabel) {\n var visualState = this.visualMapModel.getValueState(representValue);\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.on('mouseover', zrUtil.bind(onHoverLink, this, 'highlight')).on('mouseout', zrUtil.bind(onHoverLink, this, 'downplay'));\n\n function onHoverLink(method) {\n var visualMapModel = this.visualMapModel;\n visualMapModel.option.hoverLink && this.api.dispatchAction({\n type: method,\n batch: helper.makeHighDownBatch(visualMapModel.findTargetDataIndices(pieceIndex), visualMapModel)\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(visualMapModel, this.api, visualMapModel.itemSize);\n } else {\n // horizontal, most case left unless specifying right.\n var align = modelOption.align;\n\n if (!align || align === 'auto') {\n align = 'left';\n }\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 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 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 var viewPieceList = zrUtil.map(visualMapModel.getPieceList(), function (piece, index) {\n return {\n piece: piece,\n indexInModelPieceList: index\n };\n });\n var endsText = visualMapModel.get('text'); // Consider orient and inverse.\n\n var orient = visualMapModel.get('orient');\n var inverse = visualMapModel.get('inverse'); // Order of model pieceList is always [low, ..., high]\n\n if (orient === 'horizontal' ? inverse : !inverse) {\n viewPieceList.reverse();\n } // Origin order of endsText is [high, low]\n else if (endsText) {\n endsText = endsText.slice().reverse();\n }\n\n return {\n viewPieceList: viewPieceList,\n endsText: endsText\n };\n },\n\n /**\n * @private\n */\n _createItemSymbol: function (group, representValue, shapeParam) {\n group.add(createSymbol(this.getControllerVisual(representValue, 'symbol'), shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3], this.getControllerVisual(representValue, 'color')));\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 } 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});\nvar _default = PiecewiseVisualMapView;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./axisPointer\");\n\nrequire(\"./tooltip/TooltipModel\");\n\nrequire(\"./tooltip/TooltipView\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// FIXME Better way to pack data in graphic element\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 type: 'showTip',\n event: 'showTip',\n update: 'tooltip:manuallyShowTip'\n}, // noop\nfunction () {});\necharts.registerAction({\n type: 'hideTip',\n event: 'hideTip',\n update: 'tooltip:manuallyHideTip'\n}, // noop\nfunction () {});","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar createListSimply = require(\"../helper/createListSimply\");\n\nvar _model = require(\"../../util/model\");\n\nvar defaultEmphasis = _model.defaultEmphasis;\n\nvar _sourceHelper = require(\"../../data/helper/sourceHelper\");\n\nvar makeSeriesEncodeForNameBased = _sourceHelper.makeSeriesEncodeForNameBased;\n\nvar LegendVisualProvider = require(\"../../visual/LegendVisualProvider\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar FunnelSeries = echarts.extendSeriesModel({\n type: 'series.funnel',\n init: function (option) {\n FunnelSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\n this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this)); // Extend labelLine emphasis\n\n this._defaultLabelLine(option);\n },\n getInitialData: function (option, ecModel) {\n return createListSimply(this, {\n coordDimensions: ['value'],\n encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)\n });\n },\n _defaultLabelLine: function (option) {\n // Extend labelLine emphasis\n defaultEmphasis(option, 'labelLine', ['show']);\n var labelLineNormalOpt = option.labelLine;\n var labelLineEmphasisOpt = option.emphasis.labelLine; // Not show label line if `label.normal.show = false`\n\n labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.show;\n labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.emphasis.label.show;\n },\n // 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); // Percent is 0 if sum is 0\n\n params.percent = !sum ? 0 : +(data.get(valueDim, dataIndex) / sum * 100).toFixed(2);\n params.$vars.push('percent');\n return params;\n },\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 2,\n // 二级层叠\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 // min: 0,\n // max: 100,\n minSize: '0%',\n maxSize: '100%',\n sort: 'descending',\n // 'ascending', 'descending'\n gap: 0,\n funnelAlign: 'center',\n label: {\n show: true,\n position: 'outer' // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调\n\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});\nvar _default = FunnelSeries;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction 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\nfunction _default(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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar View = require(\"../View\");\n\nvar geoSourceManager = require(\"./geoSourceManager\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * [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.} [nameMap]\n * Specify name alias\n * @param {boolean} [invertLongitute=true]\n */\nfunction Geo(name, map, nameMap, invertLongitute) {\n View.call(this, name);\n /**\n * Map type\n * @type {string}\n */\n\n this.map = map;\n var source = geoSourceManager.load(map, nameMap);\n this._nameCoordMap = source.nameCoordMap;\n this._regionsMap = source.regionsMap;\n this._invertLongitute = invertLongitute == null ? true : invertLongitute;\n /**\n * @readOnly\n */\n\n this.regions = source.regions;\n /**\n * @type {module:zrender/src/core/BoundingRect}\n */\n\n this._rect = source.boundingRect;\n}\n\nGeo.prototype = {\n constructor: Geo,\n type: 'geo',\n\n /**\n * @param {Array.}\n * @readOnly\n */\n dimensions: ['lng', 'lat'],\n\n /**\n * If contain given lng,lat coord\n * @param {Array.}\n * @readOnly\n */\n containCoord: function (coord) {\n var regions = this.regions;\n\n for (var i = 0; i < regions.length; i++) {\n if (regions[i].contain(coord)) {\n return true;\n }\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 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 rawTransformable.transform = rect.calculateTransform(new BoundingRect(x, y, width, height));\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 getRegionByCoord: function (coord) {\n var regions = this.regions;\n\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.} 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.}\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.} data\n * @param {boolean} noRoam\n * @param {Array.} [out]\n * @return {Array.}\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\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};\nzrUtil.mixin(Geo, View);\n\nfunction doConvert(methodName, ecModel, finder, value) {\n var geoModel = finder.geoModel;\n var seriesModel = finder.seriesModel;\n var coordSys = geoModel ? geoModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem // For map.\n || (seriesModel.getReferringComponents('geo')[0] || {}).coordinateSystem : null;\n return coordSys === this ? coordSys[methodName](value) : null;\n}\n\nvar _default = Geo;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\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 */\nfunction 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 var rawAxisPosition = axis.position;\n var axisPosition = otherAxisOnZeroOf ? 'onZero' : rawAxisPosition;\n var axisDim = axis.dim;\n var rect = grid.getRect();\n var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];\n var idx = {\n left: 0,\n right: 1,\n top: 0,\n bottom: 1,\n onZero: 2\n };\n var axisOffset = axisModel.get('offset') || 0;\n var posBound = axisDim === 'x' ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset] : [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 } // Axis position\n\n\n layout.position = [axisDim === 'y' ? posBound[idx[axisPosition]] : rectBound[0], axisDim === 'x' ? posBound[idx[axisPosition]] : rectBound[3]]; // Axis rotation\n\n layout.rotation = Math.PI / 2 * (axisDim === 'x' ? 0 : 1); // Tick and label direction, x y is axisDim\n\n var dirMap = {\n top: -1,\n bottom: 1,\n left: -1,\n 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\n if (zrUtil.retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {\n layout.labelDirection = -layout.labelDirection;\n } // Special label rotation\n\n\n var labelRotate = axisModel.get('axisLabel.rotate');\n layout.labelRotate = axisPosition === 'top' ? -labelRotate : labelRotate; // Over splitLine and splitArea\n\n layout.z2 = 1;\n return layout;\n}\n\nexports.layout = layout;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../util/graphic\");\n\nrequire(\"../coord/cartesian/Grid\");\n\nrequire(\"./axis\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Grid view\necharts.extendComponentView({\n type: 'grid',\n render: function (gridModel, ecModel) {\n this.group.removeAll();\n\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});\necharts.registerPreprocessor(function (option) {\n // Only create grid when need\n if (option.xAxis && option.yAxis && !option.grid) {\n option.grid = {};\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* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 geo and graph.\n *\n * @param {Object} controllerHost\n * @param {module:zrender/Element} controllerHost.target\n */\nfunction 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 * 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 */\n\n\nfunction 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 var newZoom = controllerHost.zoom = controllerHost.zoom || 1;\n newZoom *= zoomDelta;\n\n if (zoomLimit) {\n var zoomMin = zoomLimit.min || 0;\n var zoomMax = zoomLimit.max || Infinity;\n newZoom = Math.max(Math.min(zoomMax, newZoom), zoomMin);\n }\n\n var zoomScale = newZoom / controllerHost.zoom;\n controllerHost.zoom = newZoom; // Keep the mouse center when scaling\n\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 target.dirty();\n}\n\nexports.updateViewOnPan = updateViewOnPan;\nexports.updateViewOnZoom = updateViewOnZoom;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 ComponentModel = require(\"../model/Component\");\n\nvar ComponentView = require(\"../view/Component\");\n\nvar _sourceHelper = require(\"../data/helper/sourceHelper\");\n\nvar detectSourceFormat = _sourceHelper.detectSourceFormat;\n\nvar _sourceType = require(\"../data/helper/sourceType\");\n\nvar SERIES_LAYOUT_BY_COLUMN = _sourceType.SERIES_LAYOUT_BY_COLUMN;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\nComponentModel.extend({\n type: 'dataset',\n\n /**\n * @protected\n */\n defaultOption: {\n // 'row', 'column'\n seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN,\n // null/'auto': auto detect header, see \"module:echarts/data/helper/sourceHelper\"\n sourceHeader: null,\n dimensions: null,\n source: null\n },\n optionUpdated: function () {\n detectSourceFormat(this);\n }\n});\nComponentView.extend({\n type: 'dataset'\n});","// https://github.com/mziccard/node-timsort\nvar DEFAULT_MIN_MERGE = 32;\nvar DEFAULT_MIN_GALLOPING = 7;\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 } 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 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 } 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\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n 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 } else {\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\n lastOffset++;\n\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 } else {\n offset = m;\n }\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 } 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 } 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 length = array.length;\n\n if (length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n tmpStorageLength = length >>> 1;\n }\n\n var tmp = [];\n stackLength = length < 120 ? 5 : length < 1542 ? 10 : length < 119151 ? 19 : 40;\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 >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1] || n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1]) {\n if (runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n } else if (runLength[n] > runLength[n + 1]) {\n break;\n }\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 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 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 } 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 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\n return;\n }\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\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 } else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n\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\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\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 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\n array[dest + length2] = tmp[cursor1];\n } else if (length1 === 0) {\n throw new Error(); // throw new Error('mergeLow preconditions were not respected');\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 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\n if (--length1 === 0) {\n exit = true;\n break;\n }\n } else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n\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 } else if (length2 === 0) {\n throw new Error(); // throw new Error('mergeHigh preconditions were not respected');\n } else {\n customCursor = dest - (length2 - 1);\n\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\nfunction sort(array, compare, lo, hi) {\n if (!lo) {\n lo = 0;\n }\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 var minRun = minRunLength(remaining);\n\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n\n if (runLength < minRun) {\n var force = remaining;\n\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 remaining -= runLength;\n lo += runLength;\n } while (remaining !== 0);\n\n ts.forceMergeRuns();\n}\n\nmodule.exports = sort;","var windingLine = require(\"./windingLine\");\n\nvar EPSILON = 1e-8;\n\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n}\n\nfunction 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 } // Close polygon\n\n\n var p0 = points[0];\n\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\nexports.contain = contain;","var Clip = require(\"./Clip\");\n\nvar color = require(\"../tool/color\");\n\nvar _util = require(\"../core/util\");\n\nvar isArrayLike = _util.isArrayLike;\n\n/**\n * @module echarts/animation/Animator\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 * @param {number} p0\n * @param {number} p1\n * @param {number} percent\n * @return {number}\n */\n\n\nfunction interpolateNumber(p0, p1, percent) {\n return (p1 - p0) * percent + p0;\n}\n/**\n * @param {string} p0\n * @param {string} p1\n * @param {number} percent\n * @return {string}\n */\n\n\nfunction interpolateString(p0, p1, percent) {\n return percent > 0.5 ? p1 : p0;\n}\n/**\n * @param {Array} p0\n * @param {Array} p1\n * @param {number} percent\n * @param {Array} out\n * @param {number} arrDim\n */\n\n\nfunction interpolateArray(p0, p1, percent, out, arrDim) {\n var len = p0.length;\n\n if (arrDim === 1) {\n for (var i = 0; i < len; i++) {\n out[i] = interpolateNumber(p0[i], p1[i], percent);\n }\n } else {\n var len2 = len && p0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n out[i][j] = interpolateNumber(p0[i][j], p1[i][j], percent);\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\n\n\nfunction fillArr(arr0, arr1, arrDim) {\n var arr0Len = arr0.length;\n var arr1Len = arr1.length;\n\n if (arr0Len !== arr1Len) {\n // FIXME Not work for TypedArray\n var isPreviousLarger = arr0Len > arr1Len;\n\n if (isPreviousLarger) {\n // Cut the previous\n arr0.length = arr1Len;\n } else {\n // Fill the previous\n for (var i = arr0Len; i < arr1Len; i++) {\n arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]));\n }\n }\n } // Handling NaN value\n\n\n var len2 = arr0[0] && arr0[0].length;\n\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 } 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 * @param {Array} arr0\n * @param {Array} arr1\n * @param {number} arrDim\n * @return {boolean}\n */\n\n\nfunction isArraySame(arr0, arr1, arrDim) {\n if (arr0 === arr1) {\n return true;\n }\n\n var len = arr0.length;\n\n if (len !== arr1.length) {\n return false;\n }\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 } else {\n var len2 = arr0[0].length;\n\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\n return true;\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 */\n\n\nfunction catmullRomInterpolateArray(p0, p1, p2, p3, t, t2, t3, out, arrDim) {\n var len = p0.length;\n\n if (arrDim === 1) {\n for (var i = 0; i < len; i++) {\n out[i] = catmullRomInterpolate(p0[i], p1[i], p2[i], p3[i], t, t2, t3);\n }\n } else {\n var len2 = p0[0].length;\n\n for (var i = 0; i < len; i++) {\n for (var j = 0; j < len2; j++) {\n out[i][j] = catmullRomInterpolate(p0[i][j], p1[i][j], p2[i][j], p3[i][j], t, t2, t3);\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 */\n\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 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;\n}\n\nfunction cloneValue(value) {\n if (isArrayLike(value)) {\n var len = value.length;\n\n if (isArrayLike(value[0])) {\n var ret = [];\n\n for (var i = 0; i < len; i++) {\n ret.push(arraySlice.call(value[i]));\n }\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 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 var trackLen = keyframes.length;\n\n if (!trackLen) {\n return;\n } // Guess data type\n\n\n var firstVal = keyframes[0].value;\n var isValueArray = isArrayLike(firstVal);\n var isValueColor = false;\n var isValueString = false; // For vertices morphing\n\n var arrDim = isValueArray ? getArrayDim(keyframes) : 0;\n var trackMaxTime; // Sort keyframe as ascending\n\n keyframes.sort(function (a, b) {\n return a.time - b.time;\n });\n trackMaxTime = keyframes[trackLen - 1].time; // Percents of each keyframe\n\n var kfPercents = []; // Value of each keyframe\n\n var kfValues = [];\n var prevValue = keyframes[0].value;\n var isAllValueEqual = true;\n\n for (var i = 0; i < trackLen; i++) {\n kfPercents.push(keyframes[i].time / trackMaxTime); // Assume value is a color when it is a string\n\n var value = keyframes[i].value; // Check if value is equal, deep check if value is array\n\n if (!(isValueArray && isArraySame(value, prevValue, arrDim) || !isValueArray && value === prevValue)) {\n isAllValueEqual = false;\n }\n\n prevValue = value; // Try converting a string to a color array\n\n if (typeof value === 'string') {\n var colorArray = color.parse(value);\n\n if (colorArray) {\n value = colorArray;\n isValueColor = true;\n } else {\n isValueString = true;\n }\n }\n\n kfValues.push(value);\n }\n\n if (!forceAnimate && isAllValueEqual) {\n return;\n }\n\n var lastValue = kfValues[trackLen - 1]; // Polyfill array and NaN value\n\n for (var i = 0; i < trackLen - 1; i++) {\n if (isValueArray) {\n fillArr(kfValues[i], lastValue, arrDim);\n } else {\n if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) {\n kfValues[i] = lastValue;\n }\n }\n }\n\n isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim); // Cache the key of last frame to speed up when\n // animation playback is sequency\n\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; // In the easing function like elasticOut, percent may less than 0\n\n if (percent < 0) {\n frame = 0;\n } else if (percent < lastFramePercent) {\n // Start from next key\n // PENDING start from lastFrame ?\n start = Math.min(lastFrame + 1, trackLen - 1);\n\n for (frame = start; frame >= 0; frame--) {\n if (kfPercents[frame] <= percent) {\n break;\n }\n } // PENDING really need to do this ?\n\n\n frame = Math.min(frame, trackLen - 2);\n } else {\n for (frame = lastFrame; frame < trackLen; frame++) {\n if (kfPercents[frame] > percent) {\n break;\n }\n }\n\n frame = Math.min(frame - 1, trackLen - 2);\n }\n\n lastFrame = frame;\n lastFramePercent = percent;\n var range = kfPercents[frame + 1] - kfPercents[frame];\n\n if (range === 0) {\n return;\n } else {\n w = (percent - kfPercents[frame]) / range;\n }\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\n if (isValueArray) {\n catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, getter(target, propName), arrDim);\n } else {\n var value;\n\n if (isValueColor) {\n value = catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, rgba, 1);\n value = rgba2String(rgba);\n } else if (isValueString) {\n // String is step(0.5)\n return interpolateString(p1, p2, w);\n } else {\n value = catmullRomInterpolate(p0, p1, p2, p3, w, w * w, w * w * w);\n }\n\n setter(target, propName, value);\n }\n } else {\n if (isValueArray) {\n interpolateArray(kfValues[frame], kfValues[frame + 1], w, getter(target, propName), arrDim);\n } else {\n var value;\n\n if (isValueColor) {\n interpolateArray(kfValues[frame], kfValues[frame + 1], w, rgba, 1);\n value = rgba2String(rgba);\n } else if (isValueString) {\n // String is step(0.5)\n return interpolateString(kfValues[frame], kfValues[frame + 1], w);\n } else {\n value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w);\n }\n\n setter(target, propName, value);\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 * @alias module:zrender/animation/Animator\n * @constructor\n * @param {Object} target\n * @param {boolean} loop\n * @param {Function} getter\n * @param {Function} setter\n */\n\n\nvar Animator = function (target, loop, getter, setter) {\n this._tracks = {};\n this._target = target;\n this._loop = loop || false;\n this._getter = getter || defaultGetter;\n this._setter = setter || defaultSetter;\n this._clipCount = 0;\n this._delay = 0;\n this._doneList = [];\n this._onframeList = [];\n this._clipList = [];\n};\n\nAnimator.prototype = {\n /**\n * Set Animation keyframe\n * @param {number} time 关键帧时间,单位是ms\n * @param {Object} props 关键帧的属性值,key-value表示\n * @return {module:zrender/animation/Animator}\n */\n when: function (time\n /* ms */\n , props) {\n var tracks = this._tracks;\n\n for (var propName in props) {\n if (!props.hasOwnProperty(propName)) {\n continue;\n }\n\n if (!tracks[propName]) {\n tracks[propName] = []; // Invalid value\n\n var value = this._getter(this._target, propName);\n\n if (value == null) {\n // zrLog('Invalid property ' + propName);\n continue;\n } // If time is 0\n // Then props is given initialize value\n // Else\n // Initialize value from current prop value\n\n\n if (time !== 0) {\n tracks[propName].push({\n time: 0,\n value: cloneValue(value)\n });\n }\n }\n\n tracks[propName].push({\n time: time,\n value: props[propName]\n });\n }\n\n return this;\n },\n\n /**\n * 添加动画每一帧的回调函数\n * @param {Function} callback\n * @return {module:zrender/animation/Animator}\n */\n during: function (callback) {\n this._onframeList.push(callback);\n\n return this;\n },\n pause: function () {\n for (var i = 0; i < this._clipList.length; i++) {\n this._clipList[i].pause();\n }\n\n this._paused = true;\n },\n resume: function () {\n for (var i = 0; i < this._clipList.length; i++) {\n this._clipList[i].resume();\n }\n\n this._paused = false;\n },\n isPaused: function () {\n return !!this._paused;\n },\n _doneCallback: function () {\n // Clear all tracks\n this._tracks = {}; // Clear all clips\n\n this._clipList.length = 0;\n var doneList = this._doneList;\n var len = doneList.length;\n\n for (var i = 0; i < len; i++) {\n doneList[i].call(this);\n }\n },\n\n /**\n * Start the animation\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 var self = this;\n var clipCount = 0;\n\n var oneTrackDone = function () {\n clipCount--;\n\n if (!clipCount) {\n self._doneCallback();\n }\n };\n\n var lastClip;\n\n for (var propName in this._tracks) {\n if (!this._tracks.hasOwnProperty(propName)) {\n continue;\n }\n\n var clip = createTrackClip(this, easing, oneTrackDone, this._tracks[propName], propName, forceAnimate);\n\n if (clip) {\n this._clipList.push(clip);\n\n clipCount++; // If start after added to animation\n\n if (this.animation) {\n this.animation.addClip(clip);\n }\n\n lastClip = clip;\n }\n } // Add during callback on the last clip\n\n\n if (lastClip) {\n var oldOnFrame = lastClip.onframe;\n\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 } // 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\n\n if (!clipCount) {\n this._doneCallback();\n }\n\n return this;\n },\n\n /**\n * Stop animation\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\n for (var i = 0; i < clipList.length; i++) {\n var clip = clipList[i];\n\n if (forwardToLast) {\n // Move to last frame before stop\n clip.onframe(this._target, 1);\n }\n\n animation && animation.removeClip(clip);\n }\n\n clipList.length = 0;\n },\n\n /**\n * Set when animation delay starts\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 * Add callback for animation end\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\n return this;\n },\n\n /**\n * @return {Array.}\n */\n getClips: function () {\n return this._clipList;\n }\n};\nvar _default = Animator;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Model = require(\"../model/Model\");\n\nvar linkList = require(\"./helper/linkList\");\n\nvar List = require(\"./List\");\n\nvar createDimensions = require(\"./helper/createDimensions\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\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 * Depth of node\n *\n * @type {number}\n * @readOnly\n */\n\n this.depth = 0;\n /**\n * Height of the subtree rooted at this node.\n * @type {number}\n * @readOnly\n */\n\n this.height = 0;\n /**\n * @type {module:echarts/data/Tree~TreeNode}\n * @readOnly\n */\n\n this.parentNode = null;\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\n this.dataIndex = -1;\n /**\n * @type {Array.}\n * @readOnly\n */\n\n this.children = [];\n /**\n * @type {Array.}\n * @pubilc\n */\n\n this.viewChildren = [];\n /**\n * @type {moduel:echarts/data/Tree}\n * @readOnly\n */\n\n this.hostTree = hostTree;\n};\n\nTreeNode.prototype = {\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\n if (zrUtil.isString(options)) {\n options = {\n order: options\n };\n }\n\n var order = options.order || 'preorder';\n var children = this[options.attr || 'children'];\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\n for (var i = 0; i < this.children.length; i++) {\n var child = this.children[i];\n child.updateDepthAndHeight(depth + 1);\n\n if (child.height > height) {\n height = child.height;\n }\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\n for (var i = 0, children = this.children, len = children.length; i < len; i++) {\n var res = children[i].getNodeById(id);\n\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\n for (var i = 0, children = this.children, len = children.length; i < len; i++) {\n var res = children[i].contains(node);\n\n if (res) {\n return res;\n }\n }\n },\n\n /**\n * @param {boolean} includeSelf Default false.\n * @return {Array.} order: [root, child, grandchild, ...]\n */\n getAncestors: function (includeSelf) {\n var ancestors = [];\n var node = includeSelf ? this : this.parentNode;\n\n while (node) {\n ancestors.push(node);\n node = node.parentNode;\n }\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 && 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\n var hostTree = this.hostTree;\n var itemModel = hostTree.data.getItemModel(this.dataIndex);\n var levelModel = this.getLevelModel(); // FIXME: refactor levelModel to \"beforeLink\", and remove levelModel here.\n\n if (levelModel) {\n return itemModel.getModel(path, levelModel.getModel(path));\n } else {\n return itemModel.getModel(path);\n }\n },\n\n /**\n * @return {module:echarts/model/Model}\n */\n getLevelModel: function () {\n return (this.hostTree.levelModels || [])[this.depth];\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 && 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\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parentNode;\n }\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 * @constructor\n * @alias module:echarts/data/Tree\n * @param {module:echarts/model/Model} hostModel\n * @param {Array.} levelOptions\n */\n\nfunction Tree(hostModel, levelOptions) {\n /**\n * @type {module:echarts/data/Tree~TreeNode}\n * @readOnly\n */\n this.root;\n /**\n * @type {module:echarts/data/List}\n * @readOnly\n */\n\n this.data;\n /**\n * Index of each item is the same as the raw index of coresponding list item.\n * @private\n * @type {Array.} treeOptions.levels\n * @return module:echarts/data/Tree\n */\n\nTree.createTree = function (dataRoot, hostModel, treeOptions, beforeLink) {\n var tree = new Tree(hostModel, treeOptions && treeOptions.levels);\n var listData = [];\n var dimMax = 1;\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 listData.push(dataNode);\n var node = new TreeNode(dataNode.name, tree);\n parentNode ? addChild(node, parentNode) : tree.root = node;\n\n tree._nodes.push(node);\n\n var children = dataNode.children;\n\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 var dimensionsInfo = createDimensions(listData, {\n coordDimensions: ['value'],\n dimensionsCount: dimMax\n });\n var list = new List(dimensionsInfo, hostModel);\n list.initData(listData);\n beforeLink && beforeLink(list);\n linkList({\n mainData: list,\n struct: tree,\n structAttr: 'tree'\n });\n tree.update();\n return tree;\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 */\n\n\nfunction addChild(child, node) {\n var children = node.children;\n\n if (child.parentNode === node) {\n return;\n }\n\n children.push(child);\n child.parentNode = node;\n}\n\nvar _default = Tree;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar VisualMapModel = require(\"./VisualMapModel\");\n\nvar VisualMapping = require(\"../../visual/VisualMapping\");\n\nvar visualDefault = require(\"../../visual/visualDefault\");\n\nvar _number = require(\"../../util/number\");\n\nvar reformIntervals = _number.reformIntervals;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar PiecewiseModel = VisualMapModel.extend({\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,\n // 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 minOpen: false,\n // Whether include values that smaller than `min`.\n maxOpen: false,\n // Whether include values that bigger than `max`.\n align: 'auto',\n // 'auto', 'left', 'right'\n itemWidth: 20,\n // When put the controller vertically, it is the length of\n // horizontal side of each item. Otherwise, vertical side.\n itemHeight: 14,\n // 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,\n // 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,\n // category names, like: ['some1', 'some2', 'some3'].\n // Attr min/max are ignored when categories set. See \"Order Rule\"\n splitNumber: 5,\n // 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',\n // Can be 'multiple' or 'single'.\n itemGap: 10,\n // The gap between two items, in px.\n hoverLink: true,\n // Enable hover highlight.\n showLabel: null // By default, when text is used, label will hide (the logic\n // is remained for compatibility reason)\n\n },\n\n /**\n * @override\n */\n optionUpdated: function (newOption, isInit) {\n PiecewiseModel.superApply(this, 'optionUpdated', arguments);\n /**\n * The order is always [low, ..., high].\n * [{text: string, interval: Array.}, ...]\n * @private\n * @type {Array.}\n */\n\n this._pieceList = [];\n this.resetExtent();\n /**\n * 'pieces', 'categories', 'splitNumber'\n * @type {string}\n */\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 this.resetVisual(function (mappingOption, state) {\n if (mode === 'categories') {\n mappingOption.mappingMethod = 'category';\n mappingOption.categories = zrUtil.clone(categories);\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\n if (state !== 'inRange') {\n // FIXME\n // outOfRange do not support special visual in pieces.\n piece.visual = null;\n }\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 var option = this.option;\n var visualTypesInPieces = {};\n var visualTypes = VisualMapping.listVisualTypes();\n var isCategory = this.isCategory();\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 zrUtil.each(visualTypesInPieces, function (v, visualType) {\n var exists = 0;\n zrUtil.each(this.stateList, function (state) {\n exists |= has(option, state, visualType) || has(option.target, state, visualType);\n }, this);\n !exists && zrUtil.each(this.stateList, function (state) {\n (option[state] || (option[state] = {}))[visualType] = visualDefault.get(visualType, state === 'inRange' ? 'active' : 'inactive', isCategory);\n });\n }, this);\n\n function has(obj, state, visualType) {\n return obj && obj[state] && (zrUtil.isObject(obj[state]) ? obj[state].hasOwnProperty(visualType) : obj[state] === visualType // e.g., inRange: 'symbol'\n );\n }\n\n VisualMapModel.prototype.completeVisualOption.apply(this, arguments);\n },\n _resetSelected: function (newOption, isInit) {\n var thisOption = this.option;\n var pieceList = this._pieceList; // Selected do not merge but all override.\n\n var selected = (isInit ? thisOption : newOption).selected || {};\n thisOption.selected = selected; // Consider 'not specified' means true.\n\n zrUtil.each(pieceList, function (piece, index) {\n var key = this.getSelectedMapKey(piece);\n\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 zrUtil.each(pieceList, function (piece, index) {\n var key = this.getSelectedMapKey(piece);\n\n if (selected[key]) {\n hasSel ? selected[key] = false : hasSel = true;\n }\n }, this);\n } // thisOption.selectedMode === 'multiple', default: all selected.\n\n },\n\n /**\n * @public\n */\n getSelectedMapKey: function (piece) {\n return this._mode === 'categories' ? 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 return option.pieces && option.pieces.length > 0 ? 'pieces' : this.option.categories ? 'categories' : '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 return index != null ? this.option.selected[this.getSelectedMapKey(this._pieceList[index])] ? 'inRange' : 'outOfRange' : 'outOfRange';\n },\n\n /**\n * @public\n * @params {number} pieceIndex piece index in visualMapModel.getPieceList()\n * @return {Array.} [{seriesId, dataIndex: >}, ...]\n */\n findTargetDataIndices: function (pieceIndex) {\n var result = [];\n this.eachTargetSeries(function (seriesModel) {\n var dataIndices = [];\n var data = seriesModel.getData();\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 result.push({\n seriesId: seriesModel.id,\n dataIndex: dataIndices\n });\n }, this);\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\n if (this.isCategory()) {\n representValue = piece.value;\n } else {\n if (piece.value != null) {\n representValue = piece.value;\n } else {\n var pieceInterval = piece.interval || [];\n representValue = pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity ? 0 : (pieceInterval[0] + pieceInterval[1]) / 2;\n }\n }\n\n return representValue;\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({\n interval: interval\n });\n\n if (!valueState) {\n valueState = visualMapModel.getValueState(representValue);\n }\n\n var color = getColorVisual(representValue, valueState);\n\n if (interval[0] === -Infinity) {\n outerColors[0] = color;\n } else if (interval[1] === Infinity) {\n outerColors[1] = color;\n } else {\n stops.push({\n value: interval[0],\n color: color\n }, {\n value: interval[1],\n color: color\n });\n }\n } // Suplement\n\n\n var pieceList = this._pieceList.slice();\n\n if (!pieceList.length) {\n pieceList.push({\n interval: [-Infinity, Infinity]\n });\n } else {\n var edge = pieceList[0].interval[0];\n edge !== -Infinity && pieceList.unshift({\n interval: [-Infinity, edge]\n });\n edge = pieceList[pieceList.length - 1].interval[1];\n edge !== Infinity && pieceList.push({\n interval: [edge, Infinity]\n });\n }\n\n var curr = -Infinity;\n zrUtil.each(pieceList, function (piece) {\n var interval = piece.interval;\n\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 return {\n stops: stops,\n outerColors: outerColors\n };\n }\n});\n/**\n * Key is this._mode\n * @type {Object}\n * @this {module:echarts/component/viusalMap/PiecewiseMode}\n */\n\nvar resetMethods = {\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 var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber; // Precision auto-adaption\n\n while (+splitStep.toFixed(precision) !== splitStep && precision < 5) {\n precision++;\n }\n\n thisOption.precision = precision;\n splitStep = +splitStep.toFixed(precision);\n\n if (thisOption.minOpen) {\n pieceList.push({\n interval: [-Infinity, dataExtent[0]],\n close: [0, 0]\n });\n }\n\n for (var index = 0, curr = dataExtent[0]; index < splitNumber; curr += splitStep, index++) {\n var max = index === splitNumber - 1 ? dataExtent[1] : curr + splitStep;\n pieceList.push({\n interval: [curr, max],\n close: [1, 1]\n });\n }\n\n if (thisOption.maxOpen) {\n pieceList.push({\n interval: [dataExtent[1], Infinity],\n close: [0, 0]\n });\n }\n\n reformIntervals(pieceList);\n zrUtil.each(pieceList, function (piece, index) {\n piece.index = index;\n piece.text = this.formatValueText(piece.interval);\n }, this);\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); // See \"Order Rule\".\n\n normalizeReverse(thisOption, this._pieceList);\n },\n pieces: function () {\n var thisOption = this.option;\n var pieceList = this._pieceList;\n zrUtil.each(thisOption.pieces, function (pieceListItem, index) {\n if (!zrUtil.isObject(pieceListItem)) {\n pieceListItem = {\n value: pieceListItem\n };\n }\n\n var item = {\n text: '',\n index: index\n };\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 } 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 var closeList = [1, 0, 1];\n var infinityList = [-Infinity, Infinity];\n var useMinMax = [];\n\n for (var lg = 0; lg < 2; lg++) {\n var names = [['gte', 'gt', 'min'], ['lte', 'lt', 'max']][lg];\n\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\n interval[lg] == null && (interval[lg] = infinityList[lg]);\n }\n\n useMinMax[0] && interval[1] === Infinity && (close[0] = 0);\n useMinMax[1] && interval[0] === -Infinity && (close[1] = 0);\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 pieceList.push(item);\n }, this); // See \"Order Rule\".\n\n normalizeReverse(thisOption, pieceList); // Only pieces\n\n reformIntervals(pieceList);\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(piece.value != null ? piece.value : piece.interval, false, edgeSymbols);\n }, this);\n }\n};\n\nfunction normalizeReverse(thisOption, pieceList) {\n var inverse = thisOption.inverse;\n\n if (thisOption.orient === 'vertical' ? !inverse : inverse) {\n pieceList.reverse();\n }\n}\n\nvar _default = PiecewiseModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar zrColor = require(\"zrender/lib/tool/color\");\n\nvar eventUtil = require(\"zrender/lib/core/event\");\n\nvar domUtil = require(\"zrender/lib/core/dom\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar formatUtil = require(\"../../util/format\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar each = zrUtil.each;\nvar toCamelCase = formatUtil.toCamelCase;\nvar vendors = ['', '-webkit-', '-moz-', '-o-'];\nvar gCssText = 'position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;';\n/**\n * @param {number} duration\n * @return {string}\n * @inner\n */\n\nfunction assembleTransition(duration) {\n var transitionCurve = 'cubic-bezier(0.23, 1, 0.32, 1)';\n var transitionText = 'left ' + duration + 's ' + transitionCurve + ',' + 'top ' + duration + 's ' + transitionCurve;\n return zrUtil.map(vendors, function (vendorPrefix) {\n return vendorPrefix + 'transition:' + transitionText;\n }).join(';');\n}\n/**\n * @param {Object} textStyle\n * @return {string}\n * @inner\n */\n\n\nfunction assembleFont(textStyleModel) {\n var cssText = [];\n var fontSize = textStyleModel.get('fontSize');\n var color = textStyleModel.getTextColor();\n color && cssText.push('color:' + color);\n cssText.push('font:' + textStyleModel.getFont());\n fontSize && cssText.push('line-height:' + Math.round(fontSize * 3 / 2) + 'px');\n each(['decoration', 'align'], function (name) {\n var val = textStyleModel.get(name);\n val && cssText.push('text-' + name + ':' + val);\n });\n return cssText.join(';');\n}\n/**\n * @param {Object} tooltipModel\n * @return {string}\n * @inner\n */\n\n\nfunction assembleCssText(tooltipModel) {\n var cssText = [];\n var transitionDuration = tooltipModel.get('transitionDuration');\n var backgroundColor = tooltipModel.get('backgroundColor');\n var textStyleModel = tooltipModel.getModel('textStyle');\n var padding = tooltipModel.get('padding'); // Animation transition. Do not animate when transitionDuration is 0.\n\n transitionDuration && cssText.push(assembleTransition(transitionDuration));\n\n if (backgroundColor) {\n if (env.canvasSupported) {\n cssText.push('background-Color:' + backgroundColor);\n } else {\n // for ie\n cssText.push('background-Color:#' + zrColor.toHex(backgroundColor));\n cssText.push('filter:alpha(opacity=70)');\n }\n } // Border style\n\n\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 && cssText.push(borderName + ':' + val + (name === 'color' ? '' : 'px'));\n }); // Text style\n\n cssText.push(assembleFont(textStyleModel)); // Padding\n\n if (padding != null) {\n cssText.push('padding:' + formatUtil.normalizeCssArray(padding).join('px ') + 'px');\n }\n\n return cssText.join(';') + ';';\n} // If not able to make, do not modify the input `out`.\n\n\nfunction makeStyleCoord(out, zr, appendToBody, zrX, zrY) {\n var zrPainter = zr && zr.painter;\n\n if (appendToBody) {\n var zrViewportRoot = zrPainter && zrPainter.getViewportRoot();\n\n if (zrViewportRoot) {\n // Some APPs might use scale on body, so we support CSS transform here.\n domUtil.transformLocalCoord(out, zrViewportRoot, document.body, zrX, zrY);\n }\n } else {\n out[0] = zrX;\n out[1] = zrY; // 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\n var viewportRootOffset = zrPainter && zrPainter.getViewportRootOffset();\n\n if (viewportRootOffset) {\n out[0] += viewportRootOffset.offsetLeft;\n out[1] += viewportRootOffset.offsetTop;\n }\n }\n}\n/**\n * @alias module:echarts/component/tooltip/TooltipContent\n * @param {HTMLElement} container\n * @param {ExtensionAPI} api\n * @param {Object} [opt]\n * @param {boolean} [opt.appendToBody]\n * `false`: the DOM element will be inside the container. Default value.\n * `true`: the DOM element will be appended to HTML body, which avoid\n * some overflow clip but intrude outside of the container.\n * @constructor\n */\n\n\nfunction TooltipContent(container, api, opt) {\n if (env.wxa) {\n return null;\n }\n\n var el = document.createElement('div');\n el.domBelongToZr = true;\n this.el = el;\n var zr = this._zr = api.getZr();\n var appendToBody = this._appendToBody = opt && opt.appendToBody;\n this._styleCoord = [0, 0];\n makeStyleCoord(this._styleCoord, zr, appendToBody, api.getWidth() / 2, api.getHeight() / 2);\n\n if (appendToBody) {\n document.body.appendChild(el);\n } else {\n container.appendChild(el);\n }\n\n this._container = container;\n this._show = false;\n /**\n * @private\n */\n\n this._hideTimeout; // 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\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\n self._inContent = true;\n };\n\n el.onmousemove = function (e) {\n e = e || window.event;\n\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 var zrViewportRoot = zr.painter.getViewportRoot();\n eventUtil.normalizeEvent(zrViewportRoot, e, true);\n handler.dispatch('mousemove', e);\n }\n };\n\n el.onmouseleave = function () {\n if (self._enterable) {\n if (self._show) {\n self.hideLater(self._hideDelay);\n }\n }\n\n self._inContent = false;\n };\n}\n\nTooltipContent.prototype = {\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 || document.defaultView.getComputedStyle(container);\n var domStyle = container.style;\n\n if (domStyle.position !== 'absolute' && stl.position !== 'absolute') {\n domStyle.position = 'relative';\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 var styleCoord = this._styleCoord;\n el.style.cssText = gCssText + assembleCssText(tooltipModel) // 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:' + styleCoord[0] + 'px;top:' + styleCoord[1] + 'px;' + (tooltipModel.get('extraCssText') || '');\n el.style.display = el.innerHTML ? 'block' : 'none'; // 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\n el.style.pointerEvents = this._enterable ? 'auto' : 'none';\n this._show = true;\n },\n setContent: function (content) {\n this.el.innerHTML = content == null ? '' : content;\n },\n setEnterable: function (enterable) {\n this._enterable = enterable;\n },\n getSize: function () {\n var el = this.el;\n return [el.clientWidth, el.clientHeight];\n },\n moveTo: function (zrX, zrY) {\n var styleCoord = this._styleCoord;\n makeStyleCoord(styleCoord, this._zr, this._appendToBody, zrX, zrY);\n var style = this.el.style;\n style.left = styleCoord[0] + 'px';\n style.top = styleCoord[1] + 'px';\n },\n hide: function () {\n this.el.style.display = 'none';\n this._show = false;\n },\n hideLater: function (time) {\n if (this._show && !(this._inContent && this._enterable)) {\n if (time) {\n this._hideDelay = time; // Set show false to avoid invoke hideLater mutiple times\n\n this._show = false;\n this._hideTimeout = setTimeout(zrUtil.bind(this.hide, this), time);\n } else {\n this.hide();\n }\n }\n },\n isShow: function () {\n return this._show;\n },\n dispose: function () {\n this.el.parentNode.removeChild(this.el);\n },\n getOuterSize: function () {\n var width = this.el.clientWidth;\n var height = this.el.clientHeight; // Consider browser compatibility.\n // IE8 does not support getComputedStyle.\n\n if (document.defaultView && document.defaultView.getComputedStyle) {\n var stl = document.defaultView.getComputedStyle(this.el);\n\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 {\n width: width,\n height: height\n };\n }\n};\nvar _default = TooltipContent;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"./gauge/GaugeSeries\");\n\nrequire(\"./gauge/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\nvar echarts = require(\"../echarts\");\n\nrequire(\"../component/parallel\");\n\nrequire(\"./parallel/ParallelSeries\");\n\nrequire(\"./parallel/ParallelView\");\n\nvar parallelVisual = require(\"./parallel/parallelVisual\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerVisual(parallelVisual);","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./candlestick/CandlestickSeries\");\n\nrequire(\"./candlestick/CandlestickView\");\n\nvar preprocessor = require(\"./candlestick/preprocessor\");\n\nvar candlestickVisual = require(\"./candlestick/candlestickVisual\");\n\nvar candlestickLayout = require(\"./candlestick/candlestickLayout\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../../coord/Axis\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * 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.} coordExtent\n * @param {string} axisType\n * @param {string} position\n */\nvar TimelineAxis = function (dim, scale, coordExtent, axisType) {\n Axis.call(this, dim, scale, coordExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = axisType || 'value';\n /**\n * Axis model\n * @param {module:echarts/component/TimelineModel}\n */\n\n this.model = null;\n};\n\nTimelineAxis.prototype = {\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};\nzrUtil.inherits(TimelineAxis, Axis);\nvar _default = TimelineAxis;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _graphic = require(\"../../util/graphic\");\n\nvar subPixelOptimize = _graphic.subPixelOptimize;\n\nvar createRenderPlanner = require(\"../helper/createRenderPlanner\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar retrieve2 = _util.retrieve2;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\nvar LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nvar _default = {\n seriesType: 'candlestick',\n plan: createRenderPlanner(),\n reset: function (seriesModel) {\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 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 ? largeProgress : normalProgress\n };\n\n function normalProgress(params, data) {\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 var ocLow = Math.min(openVal, closeVal);\n var ocHigh = Math.max(openVal, closeVal);\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 var ends = [];\n addBodyEnd(ends, ocHighPoint, 0);\n addBodyEnd(ends, ocLowPoint, 1);\n ends.push(subPixelOptimizePoint(highestPoint), subPixelOptimizePoint(ocHighPoint), subPixelOptimizePoint(lowestPoint), subPixelOptimizePoint(ocLowPoint));\n data.setItemLayout(dataIndex, {\n sign: getSign(data, dataIndex, openVal, closeVal, closeDim),\n initBaseline: openVal > closeVal ? ocHighPoint[vDimIdx] : ocLowPoint[vDimIdx],\n // 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) ? [NaN, NaN] : coordSys.dataToPoint(p);\n }\n\n function addBodyEnd(ends, point, start) {\n var point1 = point.slice();\n var point2 = point.slice();\n point1[cDimIdx] = subPixelOptimize(point1[cDimIdx] + candleWidth / 2, 1, false);\n point2[cDimIdx] = subPixelOptimize(point2[cDimIdx] - candleWidth / 2, 1, true);\n start ? ends.push(point1, point2) : 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 pmin[cDimIdx] -= candleWidth / 2;\n pmax[cDimIdx] -= candleWidth / 2;\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 tmpIn[cDimIdx] = axisDimVal;\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\n if (openVal > closeVal) {\n sign = -1;\n } else if (openVal < closeVal) {\n sign = 1;\n } else {\n sign = dataIndex > 0 // If close === open, compare with close of last record\n ? data.get(closeDim, dataIndex - 1) <= closeVal ? 1 : -1 : // 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 var bandWidth = baseAxis.type === 'category' ? baseAxis.getBandWidth() : (extent = baseAxis.getExtent(), Math.abs(extent[1] - extent[0]) / data.count());\n var barMaxWidth = parsePercent(retrieve2(seriesModel.get('barMaxWidth'), bandWidth), bandWidth);\n var barMinWidth = parsePercent(retrieve2(seriesModel.get('barMinWidth'), 1), bandWidth);\n var barWidth = seriesModel.get('barWidth');\n return barWidth != null ? parsePercent(barWidth, bandWidth) // Put max outer to ensure bar visible in spite of overlap.\n : Math.max(Math.min(bandWidth / 2, barMaxWidth), barMinWidth);\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"./dataZoomSlider\");\n\nrequire(\"./dataZoomInside\");","var eventUtil = require(\"./event\");\n\n/**\n * Only implements needed gestures for mobile.\n */\nvar GestureMgr = function () {\n /**\n * @private\n * @type {Array.}\n */\n this._track = [];\n};\n\nGestureMgr.prototype = {\n constructor: GestureMgr,\n recognize: function (event, target, root) {\n this._doTrack(event, target, root);\n\n return this._recognize(event);\n },\n clear: function () {\n this._track.length = 0;\n return this;\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 _recognize: function (event) {\n for (var eventName in recognizers) {\n if (recognizers.hasOwnProperty(eventName)) {\n var gestureInfo = recognizers[eventName](this._track, event);\n\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 return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction center(pointPair) {\n return [(pointPair[0][0] + pointPair[1][0]) / 2, (pointPair[0][1] + pointPair[1][1]) / 2];\n}\n\nvar recognizers = {\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 && pinchPre.length > 1 && pinchEnd && pinchEnd.length > 1) {\n var pinchScale = dist(pinchEnd) / dist(pinchPre);\n !isFinite(pinchScale) && (pinchScale = 1);\n event.pinchScale = pinchScale;\n var pinchCenter = center(pinchEnd);\n event.pinchX = pinchCenter[0];\n event.pinchY = pinchCenter[1];\n return {\n type: 'pinch',\n target: track[0].target,\n event: event\n };\n }\n } // Only pinch currently.\n\n};\nvar _default = GestureMgr;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"./legend\");\n\nrequire(\"./legend/ScrollableLegendModel\");\n\nrequire(\"./legend/ScrollableLegendView\");\n\nrequire(\"./legend/scrollableLegendAction\");","// Myers' Diff Algorithm\n// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js\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\n this.equals = equals;\n var self = this;\n oldArr = oldArr.slice();\n newArr = newArr.slice(); // Allow subclasses to massage the input prior to running\n\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n var bestPath = [{\n newPos: -1,\n components: []\n }]; // Seed editLength = 0, i.e. the content starts with the same values\n\n var oldPos = this.extractCommon(bestPath[0], newArr, oldArr, 0);\n\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n var indices = [];\n\n for (var i = 0; i < newArr.length; i++) {\n indices.push(i);\n } // Identity per the equality and tokenizer\n\n\n return [{\n indices: indices,\n count: newArr.length\n }];\n } // Main worker method. checks all permutations of a given edit length for acceptance.\n\n\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\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\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\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\n\n if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {\n basePath = clonePath(removePath);\n self.pushComponent(basePath.components, undefined, true);\n } else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n\n basePath.newPos++;\n self.pushComponent(basePath.components, true, undefined);\n }\n\n oldPos = self.extractCommon(basePath, newArr, oldArr, diagonalPath); // If we have hit the end of both strings, then we are done\n\n if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n return buildValues(self, basePath.components, newArr, oldArr);\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\n if (ret) {\n return ret;\n }\n }\n },\n pushComponent: function (components, added, removed) {\n var last = components[components.length - 1];\n\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] = {\n count: last.count + 1,\n added: added,\n removed: removed\n };\n } else {\n components.push({\n count: 1,\n added: added,\n removed: removed\n });\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({\n count: commonCount\n });\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\n if (!component.removed) {\n var indices = [];\n\n for (var i = newPos; i < newPos + component.count; i++) {\n indices.push(i);\n }\n\n component.indices = indices;\n newPos += component.count; // Common case\n\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n var indices = [];\n\n for (var i = oldPos; i < oldPos + component.count; i++) {\n indices.push(i);\n }\n\n component.indices = indices;\n oldPos += component.count;\n }\n }\n\n return components;\n}\n\nfunction clonePath(path) {\n return {\n newPos: path.newPos,\n components: path.components.slice(0)\n };\n}\n\nvar arrayDiff = new Diff();\n\nfunction _default(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar RoamController = require(\"./RoamController\");\n\nvar roamHelper = require(\"../../component/helper/roamHelper\");\n\nvar _cursorHelper = require(\"../../component/helper/cursorHelper\");\n\nvar onIrrelevantElement = _cursorHelper.onIrrelevantElement;\n\nvar graphic = require(\"../../util/graphic\");\n\nvar geoSourceManager = require(\"../../coord/geo/geoSourceManager\");\n\nvar _component = require(\"../../util/component\");\n\nvar getUID = _component.getUID;\n\nvar Transformable = require(\"zrender/lib/mixin/Transformable\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction getFixedItemStyle(model) {\n var itemStyle = model.getItemStyle();\n var areaColor = model.get('areaColor'); // If user want the color not to be changed when hover,\n // they should both set areaColor and color to be null.\n\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 regionsGroup.on('mousedown', function () {\n mapDraw._mouseDownFlag = true;\n });\n regionsGroup.on('click', function (e) {\n if (!mapDraw._mouseDownFlag) {\n return;\n }\n\n mapDraw._mouseDownFlag = false;\n var el = e.target;\n\n while (!el.__regions) {\n el = el.parent;\n }\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 api.dispatchAction(action);\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 * @alias module:echarts/component/helper/MapDraw\n * @param {module:echarts/ExtensionAPI} api\n * @param {boolean} updateGroup\n */\n\n\nfunction MapDraw(api, updateGroup) {\n var group = new graphic.Group();\n /**\n * @type {string}\n * @private\n */\n\n this.uid = getUID('ec_map_draw');\n /**\n * @type {module:echarts/component/helper/RoamController}\n * @private\n */\n\n this._controller = new RoamController(api.getZr());\n /**\n * @type {Object} {target, zoom, zoomLimit}\n * @private\n */\n\n this._controllerHost = {\n target: updateGroup ? group : null\n };\n /**\n * @type {module:zrender/container/Group}\n * @readOnly\n */\n\n this.group = group;\n /**\n * @type {boolean}\n * @private\n */\n\n this._updateGroup = updateGroup;\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\n this._mouseDownFlag;\n /**\n * @type {string}\n */\n\n this._mapName;\n /**\n * @type {boolean}\n */\n\n this._initialized;\n /**\n * @type {module:zrender/container/Group}\n */\n\n group.add(this._regionsGroup = new graphic.Group());\n /**\n * @type {module:zrender/container/Group}\n */\n\n group.add(this._backgroundGroup = new graphic.Group());\n}\n\nMapDraw.prototype = {\n constructor: MapDraw,\n draw: function (mapOrGeoModel, ecModel, api, fromView, payload) {\n var isGeo = mapOrGeoModel.mainType === 'geo'; // 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\n var data = mapOrGeoModel.getData && mapOrGeoModel.getData();\n isGeo && ecModel.eachComponent({\n mainType: 'series',\n subType: 'map'\n }, function (mapSeries) {\n if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) {\n data = mapSeries.getData();\n }\n });\n var geo = mapOrGeoModel.coordinateSystem;\n\n this._updateBackground(geo);\n\n var regionsGroup = this._regionsGroup;\n var group = this.group;\n var transformInfo = geo.getTransformInfo(); // No animation when first draw or in action\n\n var isFirstDraw = !regionsGroup.childAt(0) || payload;\n var targetScale;\n\n if (isFirstDraw) {\n group.transform = transformInfo.roamTransform;\n group.decomposeTransform();\n group.dirty();\n } else {\n var target = new Transformable();\n target.transform = transformInfo.roamTransform;\n target.decomposeTransform();\n var props = {\n scale: target.scale,\n position: target.position\n };\n targetScale = target.scale;\n graphic.updateProps(group, props, mapOrGeoModel);\n }\n\n var scale = transformInfo.rawScale;\n var position = transformInfo.rawPosition;\n regionsGroup.removeAll();\n var itemStyleAccessPath = ['itemStyle'];\n var hoverItemStyleAccessPath = ['emphasis', 'itemStyle'];\n var labelAccessPath = ['label'];\n var hoverLabelAccessPath = ['emphasis', 'label'];\n var nameMap = zrUtil.createHashMap();\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) || nameMap.set(region.name, new graphic.Group());\n var compoundPath = new graphic.CompoundPath({\n segmentIgnoreThreshold: 1,\n shape: {\n paths: []\n }\n });\n regionGroup.add(compoundPath);\n var regionModel = mapOrGeoModel.getRegionModel(region.name) || mapOrGeoModel;\n var itemStyleModel = regionModel.getModel(itemStyleAccessPath);\n var hoverItemStyleModel = regionModel.getModel(hoverItemStyleAccessPath);\n var itemStyle = getFixedItemStyle(itemStyleModel);\n var hoverItemStyle = getFixedItemStyle(hoverItemStyleModel);\n var labelModel = regionModel.getModel(labelAccessPath);\n var hoverLabelModel = regionModel.getModel(hoverLabelAccessPath);\n var dataIdx; // Use the itemStyle in data if has data\n\n if (data) {\n dataIdx = data.indexOfName(region.name); // 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\n var visualColor = data.getItemVisual(dataIdx, 'color', true);\n\n if (visualColor) {\n itemStyle.fill = visualColor;\n }\n }\n\n var transformPoint = function (point) {\n return [point[0] * scale[0] + position[0], point[1] * scale[1] + position[1]];\n };\n\n zrUtil.each(region.geometries, function (geometry) {\n if (geometry.type !== 'polygon') {\n return;\n }\n\n var points = [];\n\n for (var i = 0; i < geometry.exterior.length; ++i) {\n points.push(transformPoint(geometry.exterior[i]));\n }\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\n for (var j = 0; j < interior.length; ++j) {\n points.push(transformPoint(interior[j]));\n }\n\n compoundPath.shape.paths.push(new graphic.Polygon({\n segmentIgnoreThreshold: 1,\n shape: {\n points: points\n }\n }));\n }\n });\n compoundPath.setStyle(itemStyle);\n compoundPath.style.strokeNoScale = true;\n compoundPath.culling = true; // Label\n\n var showLabel = labelModel.get('show');\n var hoverShowLabel = hoverLabelModel.get('show');\n var isDataNaN = data && isNaN(data.get(data.mapDimension('value'), dataIdx));\n var itemLayout = data && data.getItemLayout(dataIdx); // 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\n if (isGeo || isDataNaN && (showLabel || hoverShowLabel) || itemLayout && itemLayout.showLabel) {\n var query = !isGeo ? dataIdx : region.name;\n var labelFetcher; // Consider dataIdx not found.\n\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 graphic.setLabelStyle(textEl.style, textEl.hoverStyle = {}, labelModel, hoverLabelModel, {\n labelFetcher: labelFetcher,\n labelDataIndex: query,\n defaultText: region.name,\n useInsideStyle: false\n }, {\n textAlign: 'center',\n textVerticalAlign: 'middle'\n });\n\n if (!isFirstDraw) {\n // Text animation\n var textScale = [1 / targetScale[0], 1 / targetScale[1]];\n graphic.updateProps(textEl, {\n scale: textScale\n }, mapOrGeoModel);\n }\n\n regionGroup.add(textEl);\n } // setItemGraphicEl, setHoverStyle after all polygons and labels\n // are added to the rigionGroup\n\n\n if (data) {\n data.setItemGraphicEl(dataIdx, regionGroup);\n } else {\n var regionModel = mapOrGeoModel.getRegionModel(region.name); // Package custom mouse event for geo component\n\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 regionGroup.highDownSilentOnTouch = !!mapOrGeoModel.get('selectedMode');\n graphic.setHoverStyle(regionGroup, hoverItemStyle);\n regionsGroup.add(regionGroup);\n });\n\n this._updateController(mapOrGeoModel, ecModel, api);\n\n updateMapSelectHandler(this, mapOrGeoModel, regionsGroup, api, fromView);\n updateMapSelected(mapOrGeoModel, regionsGroup);\n },\n remove: function () {\n this._regionsGroup.removeAll();\n\n this._backgroundGroup.removeAll();\n\n this._controller.dispose();\n\n this._mapName && geoSourceManager.removeGraphic(this._mapName, this.uid);\n this._mapName = null;\n this._controllerHost = {};\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 _updateController: function (mapOrGeoModel, ecModel, api) {\n var geo = mapOrGeoModel.coordinateSystem;\n var controller = this._controller;\n var controllerHost = this._controllerHost;\n controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit');\n controllerHost.zoom = geo.getZoom(); // roamType is will be set default true if it is null\n\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 roamHelper.updateViewOnPan(controllerHost, e.dx, e.dy);\n api.dispatchAction(zrUtil.extend(makeActionBase(), {\n dx: e.dx,\n dy: e.dy\n }));\n }, this);\n controller.off('zoom').on('zoom', function (e) {\n this._mouseDownFlag = false;\n roamHelper.updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);\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\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 controller.setPointerChecker(function (e, x, y) {\n return geo.getViewRectAfterRoam().contain(x, y) && !onIrrelevantElement(e, api, mapOrGeoModel);\n });\n }\n};\nvar _default = MapDraw;\nmodule.exports = _default;","var matrix = require(\"../core/matrix\");\n\nvar vector = require(\"../core/vector\");\n\n/**\n * 提供变换扩展\n * @module zrender/mixin/Transformable\n * @author pissang (https://www.github.com/pissang)\n */\nvar mIdentity = matrix.identity;\nvar EPSILON = 5e-5;\n\nfunction isNotAroundZero(val) {\n return val > EPSILON || val < -EPSILON;\n}\n/**\n * @alias module:zrender/mixin/Transformable\n * @constructor\n */\n\n\nvar Transformable = function (opts) {\n opts = opts || {}; // If there are no given position, rotation, scale\n\n if (!opts.position) {\n /**\n * 平移\n * @type {Array.}\n * @default [0, 0]\n */\n this.position = [0, 0];\n }\n\n if (opts.rotation == null) {\n /**\n * 旋转\n * @type {Array.}\n * @default 0\n */\n this.rotation = 0;\n }\n\n if (!opts.scale) {\n /**\n * 缩放\n * @type {Array.}\n * @default [1, 1]\n */\n this.scale = [1, 1];\n }\n /**\n * 旋转和缩放的原点\n * @type {Array.}\n * @default null\n */\n\n\n this.origin = this.origin || null;\n};\n\nvar transformableProto = Transformable.prototype;\ntransformableProto.transform = null;\n/**\n * 判断是否需要有坐标变换\n * 如果有坐标变换, 则从position, rotation, scale以及父节点的transform计算出自身的transform矩阵\n */\n\ntransformableProto.needLocalTransform = function () {\n return isNotAroundZero(this.rotation) || isNotAroundZero(this.position[0]) || isNotAroundZero(this.position[1]) || isNotAroundZero(this.scale[0] - 1) || isNotAroundZero(this.scale[1] - 1);\n};\n\nvar scaleTmp = [];\n\ntransformableProto.updateTransform = function () {\n var parent = this.parent;\n var parentHasTransform = parent && parent.transform;\n var needLocalTransform = this.needLocalTransform();\n var m = this.transform;\n\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 } else {\n mIdentity(m);\n } // 应用父节点变换\n\n\n if (parentHasTransform) {\n if (needLocalTransform) {\n matrix.mul(m, parent.transform, m);\n } else {\n matrix.copy(m, parent.transform);\n }\n } // 保存这个变换矩阵\n\n\n this.transform = m;\n var globalScaleRatio = this.globalScaleRatio;\n\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 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 * 将自己的transform应用到context上\n * @param {CanvasRenderingContext2D} ctx\n */\n\n\ntransformableProto.setTransform = function (ctx) {\n var m = this.transform;\n var dpr = ctx.dpr || 1;\n\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 } 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\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\n if (isNotAroundZero(sx - 1)) {\n sx = Math.sqrt(sx);\n }\n\n if (isNotAroundZero(sy - 1)) {\n sy = Math.sqrt(sy);\n }\n\n if (m[0] < 0) {\n sx = -sx;\n }\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 */\n\n\ntransformableProto.decomposeTransform = function () {\n if (!this.transform) {\n return;\n }\n\n var parent = this.parent;\n var m = this.transform;\n\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\n var origin = this.origin;\n\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 * Get global scale\n * @return {Array.}\n */\n\n\ntransformableProto.getGlobalScale = function (out) {\n var m = this.transform;\n out = out || [];\n\n if (!m) {\n out[0] = 1;\n out[1] = 1;\n return out;\n }\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\n if (m[0] < 0) {\n out[0] = -out[0];\n }\n\n if (m[3] < 0) {\n out[1] = -out[1];\n }\n\n return out;\n};\n/**\n * 变换坐标位置到 shape 的局部坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.}\n */\n\n\ntransformableProto.transformCoordToLocal = function (x, y) {\n var v2 = [x, y];\n var invTransform = this.invTransform;\n\n if (invTransform) {\n vector.applyTransform(v2, v2, invTransform);\n }\n\n return v2;\n};\n/**\n * 变换局部坐标位置到全局坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.}\n */\n\n\ntransformableProto.transformCoordToGlobal = function (x, y) {\n var v2 = [x, y];\n var transform = this.transform;\n\n if (transform) {\n vector.applyTransform(v2, v2, transform);\n }\n\n return v2;\n};\n/**\n * @static\n * @param {Object} target\n * @param {Array.} target.origin\n * @param {number} target.rotation\n * @param {Array.} target.position\n * @param {Array.} [m]\n */\n\n\nTransformable.getLocalTransform = function (target, m) {\n m = m || [];\n mIdentity(m);\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\n matrix.scale(m, m, scale);\n\n if (rotation) {\n matrix.rotate(m, m, rotation);\n }\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 return m;\n};\n\nvar _default = Transformable;\nmodule.exports = _default;","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CircleBar.vue?vue&type=style&index=0&id=11875d78&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CircleBar.vue?vue&type=style&index=0&id=11875d78&lang=scss&scoped=true&\"","var Displayable = require(\"./Displayable\");\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\nvar zrUtil = require(\"../core/util\");\n\nvar imageHelper = require(\"./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 constructor: ZImage,\n type: 'image',\n brush: function (ctx, prevEl) {\n var style = this.style;\n var src = style.image; // Must bind each time\n\n style.bind(ctx, this, prevEl);\n var image = this._image = imageHelper.createOrUpdateImage(src, this._image, this, this.onload);\n\n if (!image || !imageHelper.isImageReady(image)) {\n return;\n } // 图片已经加载完成\n // if (image.nodeName.toUpperCase() == 'IMG') {\n // if (!image.complete) {\n // return;\n // }\n // }\n // Else is canvas\n\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\n if (width == null && height != null) {\n // Keep image/height ratio\n width = height * aspect;\n } else if (height == null && width != null) {\n height = width / aspect;\n } else if (width == null && height == null) {\n width = image.width;\n height = image.height;\n } // 设置transform\n\n\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(image, sx, sy, style.sWidth, style.sHeight, x, y, width, height);\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(image, sx, sy, sWidth, sHeight, x, y, width, height);\n } else {\n ctx.drawImage(image, x, y, width, height);\n } // Draw rect text\n\n\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 getBoundingRect: function () {\n var style = this.style;\n\n if (!this._rect) {\n this._rect = new BoundingRect(style.x || 0, style.y || 0, style.width || 0, style.height || 0);\n }\n\n return this._rect;\n }\n};\nzrUtil.inherits(ZImage, Displayable);\nvar _default = ZImage;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar VisualMapping = require(\"../../visual/VisualMapping\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(ecModel, payload) {\n ecModel.eachSeriesByType('sankey', function (seriesModel) {\n var graph = seriesModel.getGraph();\n var nodes = graph.nodes;\n\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\n if (nodeValue < minValue) {\n minValue = nodeValue;\n }\n\n if (nodeValue > maxValue) {\n maxValue = nodeValue;\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 var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value);\n var customColor = node.getModel().get('itemStyle.color');\n customColor != null ? node.setVisual('color', customColor) : node.setVisual('color', mapValueToColor);\n });\n }\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar layoutUtil = require(\"../../util/layout\");\n\nvar LegendView = require(\"./LegendView\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\nvar Group = graphic.Group;\nvar WH = ['width', 'height'];\nvar XY = ['x', 'y'];\nvar ScrollableLegendView = LegendView.extend({\n type: 'legend.scroll',\n newlineDisabled: true,\n init: function () {\n ScrollableLegendView.superCall(this, 'init');\n /**\n * @private\n * @type {number} For `scroll`.\n */\n\n this._currentIndex = 0;\n /**\n * @private\n * @type {module:zrender/container/Group}\n */\n\n this.group.add(this._containerGroup = new Group());\n\n this._containerGroup.add(this.getContentGroup());\n /**\n * @private\n * @type {module:zrender/container/Group}\n */\n\n\n this.group.add(this._controllerGroup = new Group());\n /**\n *\n * @private\n */\n\n this._showController;\n },\n\n /**\n * @override\n */\n resetInner: function () {\n ScrollableLegendView.superCall(this, 'resetInner');\n\n this._controllerGroup.removeAll();\n\n this._containerGroup.removeClipPath();\n\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; // Render content items.\n\n ScrollableLegendView.superCall(this, 'renderInner', itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition);\n var controllerGroup = this._controllerGroup; // FIXME: support be 'auto' adapt to size number text length,\n // e.g., '3/12345' should not overlap with the control arrow button.\n\n var pageIconSize = legendModel.get('pageIconSize', true);\n\n if (!zrUtil.isArray(pageIconSize)) {\n pageIconSize = [pageIconSize, pageIconSize];\n }\n\n createPageButton('pagePrev', 0);\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 createPageButton('pageNext', 1);\n\n function createPageButton(name, iconIdx) {\n var pageDataIndexName = name + 'DataIndex';\n var icon = graphic.createIcon(legendModel.get('pageIcons', true)[legendModel.getOrient().name][iconIdx], {\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(me._pageGo, me, pageDataIndexName, legendModel, api)\n }, {\n x: -pageIconSize[0] / 2,\n y: -pageIconSize[1] / 2,\n width: pageIconSize[0],\n height: pageIconSize[1]\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 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 selector && layoutUtil.box( // Buttons in selectorGroup always layout horizontally\n 'horizontal', selectorGroup, legendModel.get('selectorItemGap', true));\n var selectorButtonGap = legendModel.get('selectorButtonGap', true);\n var selectorRect = selectorGroup.getBoundingRect();\n var selectorPos = [-selectorRect.x, -selectorRect.y];\n var processMaxSize = zrUtil.clone(maxSize);\n selector && (processMaxSize[wh] = maxSize[wh] - selectorRect[wh] - selectorButtonGap);\n\n var mainRect = this._layoutContentAndController(legendModel, isFirstRender, processMaxSize, orientIdx, wh, hw, yx);\n\n if (selector) {\n if (selectorPosition === 'end') {\n selectorPos[orientIdx] += mainRect[wh] + selectorButtonGap;\n } else {\n var offset = selectorRect[wh] + selectorButtonGap;\n selectorPos[orientIdx] -= offset;\n mainRect[xy] -= offset;\n }\n\n mainRect[wh] += selectorRect[wh] + selectorButtonGap;\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 selectorGroup.attr('position', selectorPos);\n }\n\n return mainRect;\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; // Place items in contentGroup.\n\n layoutUtil.box(legendModel.get('orient'), contentGroup, legendModel.get('itemGap'), !orientIdx ? null : maxSize.width, orientIdx ? null : maxSize.height);\n layoutUtil.box( // Buttons in controller are layout always horizontally.\n 'horizontal', controllerGroup, legendModel.get('pageButtonItemGap', true));\n var contentRect = contentGroup.getBoundingRect();\n var controllerRect = controllerGroup.getBoundingRect();\n var showController = this._showController = contentRect[wh] > maxSize[wh];\n var contentPos = [-contentRect.x, -contentRect.y]; // 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\n if (!isFirstRender) {\n contentPos[orientIdx] = contentGroup.position[orientIdx];\n } // Layout container group based on 0.\n\n\n var containerPos = [0, 0];\n var controllerPos = [-controllerRect.x, -controllerRect.y];\n var pageButtonGap = zrUtil.retrieve2(legendModel.get('pageButtonGap', true), legendModel.get('itemGap', true)); // Place containerGroup and controllerGroup and contentGroup.\n\n if (showController) {\n var pageButtonPosition = legendModel.get('pageButtonPosition', true); // controller is on the right / bottom.\n\n if (pageButtonPosition === 'end') {\n controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh];\n } // controller is on the left / top.\n else {\n containerPos[orientIdx] += controllerRect[wh] + pageButtonGap;\n }\n } // Always align controller to content as 'middle'.\n\n\n controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2;\n contentGroup.attr('position', contentPos);\n containerGroup.attr('position', containerPos);\n controllerGroup.attr('position', controllerPos); // Calculate `mainRect` and set `clipPath`.\n // mainRect should not be calculated by `this.group.getBoundingRect()`\n // for sake of the overflow.\n\n var mainRect = {\n x: 0,\n y: 0\n }; // Consider content may be overflow (should be clipped).\n\n mainRect[wh] = showController ? maxSize[wh] : contentRect[wh];\n mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]); // `containerRect[yx] + containerPos[1 - orientIdx]` is 0.\n\n mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]);\n containerGroup.__rectSize = maxSize[wh];\n\n if (showController) {\n var clipShape = {\n x: 0,\n y: 0\n };\n clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0);\n clipShape[hw] = mainRect[hw];\n containerGroup.setClipPath(new graphic.Rect({\n shape: clipShape\n })); // Consider content may be larger than container, container rect\n // can not be obtained from `containerGroup.getBoundingRect()`.\n\n containerGroup.__rectSize = clipShape[wh];\n } else {\n // Do not remove or ignore controller. Keep them set as placeholders.\n controllerGroup.eachChild(function (child) {\n child.attr({\n invisible: true,\n silent: true\n });\n });\n } // Content translate animation.\n\n\n var pageInfo = this._getPageInfo(legendModel);\n\n pageInfo.pageIndex != null && graphic.updateProps(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 this._updatePageInfoView(legendModel, pageInfo);\n\n return mainRect;\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 _updatePageInfoView: function (legendModel, pageInfo) {\n var controllerGroup = this._controllerGroup;\n zrUtil.each(['pagePrev', 'pageNext'], function (name) {\n var canJump = pageInfo[name + 'DataIndex'] != null;\n var icon = controllerGroup.childOfName(name);\n\n if (icon) {\n icon.setStyle('fill', canJump ? legendModel.get('pageIconColor', true) : legendModel.get('pageIconInactiveColor', true));\n icon.cursor = canJump ? 'pointer' : 'default';\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 pageText && pageFormatter && pageText.setStyle('text', zrUtil.isString(pageFormatter) ? pageFormatter.replace('{current}', current).replace('{total}', total) : pageFormatter({\n current: current,\n total: total\n }));\n },\n\n /**\n * @param {module:echarts/model/Model} legendModel\n * @return {Object} {\n * contentPosition: Array., 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\n var children = contentGroup.children();\n var targetItem = children[targetItemIndex];\n var itemCount = children.length;\n var pCount = !itemCount ? 0 : 1;\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; // 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, winStartItemInfo = targetItemInfo, winEndItemInfo = targetItemInfo, currItemInfo = null; i <= itemCount; ++i) {\n currItemInfo = getItemInfo(children[i]);\n\n if ( // Half of the last item is out of the window.\n !currItemInfo && winEndItemInfo.e > winStartItemInfo.s + containerRectSize || // 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 if (winEndItemInfo.i > winStartItemInfo.i) {\n winStartItemInfo = winEndItemInfo;\n } else {\n // e.g., when page size is smaller than item size.\n winStartItemInfo = currItemInfo;\n }\n\n if (winStartItemInfo) {\n if (result.pageNextDataIndex == null) {\n result.pageNextDataIndex = winStartItemInfo.i;\n }\n\n ++result.pageCount;\n }\n }\n\n winEndItemInfo = currItemInfo;\n }\n\n for (var i = targetItemIndex - 1, winStartItemInfo = targetItemInfo, winEndItemInfo = targetItemInfo, currItemInfo = null; i >= -1; --i) {\n currItemInfo = getItemInfo(children[i]);\n\n if ( // 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)) && // e.g., when page size is smaller than item size.\n winStartItemInfo.i < winEndItemInfo.i) {\n winEndItemInfo = winStartItemInfo;\n\n if (result.pagePrevDataIndex == null) {\n result.pagePrevDataIndex = winStartItemInfo.i;\n }\n\n ++result.pageCount;\n ++result.pageIndex;\n }\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 _findTargetItemIndex: function (targetDataIndex) {\n if (!this._showController) {\n return 0;\n }\n\n var index;\n var contentGroup = this.getContentGroup();\n var defaultIndex;\n contentGroup.eachChild(function (child, idx) {\n var legendDataIdx = child.__legendDataIndex; // 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\n if (defaultIndex == null && legendDataIdx != null) {\n defaultIndex = idx;\n }\n\n if (legendDataIdx === targetDataIndex) {\n index = idx;\n }\n });\n return index != null ? index : defaultIndex;\n }\n});\nvar _default = ScrollableLegendView;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../Axis\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * @constructor module:echarts/coord/parallel/ParallelAxis\n * @extends {module:echarts/coord/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.} coordExtent\n * @param {string} axisType\n */\nvar ParallelAxis = function (dim, scale, coordExtent, axisType, axisIndex) {\n Axis.call(this, dim, scale, coordExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = axisType || 'value';\n /**\n * @type {number}\n * @readOnly\n */\n\n this.axisIndex = axisIndex;\n};\n\nParallelAxis.prototype = {\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};\nzrUtil.inherits(ParallelAxis, Axis);\nvar _default = ParallelAxis;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar _model = require(\"../../util/model\");\n\nvar makeInner = _model.makeInner;\nvar getDataItemValue = _model.getDataItemValue;\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar createHashMap = _util.createHashMap;\nvar each = _util.each;\nvar map = _util.map;\nvar isArray = _util.isArray;\nvar isString = _util.isString;\nvar isObject = _util.isObject;\nvar isTypedArray = _util.isTypedArray;\nvar isArrayLike = _util.isArrayLike;\nvar extend = _util.extend;\nvar assert = _util.assert;\n\nvar Source = require(\"../Source\");\n\nvar _sourceType = require(\"./sourceType\");\n\nvar SOURCE_FORMAT_ORIGINAL = _sourceType.SOURCE_FORMAT_ORIGINAL;\nvar SOURCE_FORMAT_ARRAY_ROWS = _sourceType.SOURCE_FORMAT_ARRAY_ROWS;\nvar SOURCE_FORMAT_OBJECT_ROWS = _sourceType.SOURCE_FORMAT_OBJECT_ROWS;\nvar SOURCE_FORMAT_KEYED_COLUMNS = _sourceType.SOURCE_FORMAT_KEYED_COLUMNS;\nvar SOURCE_FORMAT_UNKNOWN = _sourceType.SOURCE_FORMAT_UNKNOWN;\nvar SOURCE_FORMAT_TYPED_ARRAY = _sourceType.SOURCE_FORMAT_TYPED_ARRAY;\nvar SERIES_LAYOUT_BY_ROW = _sourceType.SERIES_LAYOUT_BY_ROW;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// The result of `guessOrdinal`.\nvar BE_ORDINAL = {\n Must: 1,\n // Encounter string but not '-' and not number-like.\n Might: 2,\n // Encounter string but number-like.\n Not: 3 // Other cases\n\n};\nvar inner = makeInner();\n/**\n * @see {module:echarts/data/Source}\n * @param {module:echarts/component/dataset/DatasetModel} datasetModel\n * @return {string} sourceFormat\n */\n\nfunction 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 } 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 } else if (isArray(item)) {\n sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;\n break;\n } else if (isObject(item)) {\n sourceFormat = SOURCE_FORMAT_OBJECT_ROWS;\n break;\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 } else if (data != null) {\n throw new Error('Invalid data');\n }\n\n inner(datasetModel).sourceFormat = sourceFormat;\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 */\n\n\nfunction getSource(seriesModel) {\n return inner(seriesModel).source;\n}\n/**\n * MUST be called before mergeOption of all series.\n * @param {module:echarts/model/Global} ecModel\n */\n\n\nfunction resetSourceDefaulter(ecModel) {\n // `datasetMap` is used to make default encode.\n inner(ecModel).datasetMap = createHashMap();\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 */\n\n\nfunction prepareSource(seriesModel) {\n var seriesOption = seriesModel.option;\n var data = seriesOption.data;\n var sourceFormat = isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL;\n var fromDataset = false;\n var seriesLayoutBy = seriesOption.seriesLayoutBy;\n var sourceHeader = seriesOption.sourceHeader;\n var dimensionsDefine = seriesOption.dimensions;\n var datasetModel = getDatasetModel(seriesModel);\n\n if (datasetModel) {\n var datasetOption = datasetModel.option;\n data = datasetOption.source;\n sourceFormat = inner(datasetModel).sourceFormat;\n fromDataset = true; // These settings from series has higher priority.\n\n seriesLayoutBy = seriesLayoutBy || datasetOption.seriesLayoutBy;\n sourceHeader == null && (sourceHeader = datasetOption.sourceHeader);\n dimensionsDefine = dimensionsDefine || datasetOption.dimensions;\n }\n\n var completeResult = completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine);\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 // Note: dataset option does not have `encode`.\n encodeDefine: seriesOption.encode\n });\n} // return {startIndex, dimensionsDefine, dimensionsCount}\n\n\nfunction completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine) {\n if (!data) {\n return {\n dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine)\n };\n }\n\n var dimensionsDetectCount;\n var startIndex;\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 } else {\n startIndex = 0;\n }\n } // 10 is an experience number, avoid long loop.\n\n }, seriesLayoutBy, data, 10);\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 ? dimensionsDefine.length : seriesLayoutBy === SERIES_LAYOUT_BY_ROW ? data.length : data[0] ? data[0].length : null;\n } else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {\n if (!dimensionsDefine) {\n dimensionsDefine = objectRowsCollectDimensions(data);\n }\n } else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {\n if (!dimensionsDefine) {\n dimensionsDefine = [];\n each(data, function (colArr, key) {\n dimensionsDefine.push(key);\n });\n }\n } else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n var value0 = getDataItemValue(data[0]);\n dimensionsDetectCount = isArray(value0) && value0.length || 1;\n } else if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {}\n\n return {\n startIndex: startIndex,\n dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine),\n dimensionsDetectCount: dimensionsDetectCount\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.\n\n\nfunction normalizeDimensionsDefine(dimensionsDefine) {\n if (!dimensionsDefine) {\n // The meaning of null/undefined is different from empty array.\n return;\n }\n\n var nameMap = createHashMap();\n return map(dimensionsDefine, function (item, index) {\n item = extend({}, isObject(item) ? item : {\n name: item\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\n if (item.name == null) {\n return item;\n } // Also consider number form like 2012.\n\n\n item.name += ''; // 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\n if (item.displayName == null) {\n item.displayName = item.name;\n }\n\n var exist = nameMap.get(item.name);\n\n if (!exist) {\n nameMap.set(item.name, {\n 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\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 } else {\n var value0 = data[0] || [];\n\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\n while (firstIndex < data.length && !(obj = data[firstIndex++])) {} // jshint ignore: line\n\n\n if (obj) {\n var dimensions = [];\n each(obj, function (value, key) {\n dimensions.push(key);\n });\n return dimensions;\n }\n}\n/**\n * [The strategy of the arrengment of data dimensions for dataset]:\n * \"value way\": all axes are non-category axes. So series one by one take\n * several (the number is coordSysDims.length) dimensions from dataset.\n * The result of data arrengment of data dimensions like:\n * | ser0_x | ser0_y | ser1_x | ser1_y | ser2_x | ser2_y |\n * \"category way\": at least one axis is category axis. So the the first data\n * dimension is always mapped to the first category axis and shared by\n * all of the series. The other data dimensions are taken by series like\n * \"value way\" does.\n * The result of data arrengment of data dimensions like:\n * | ser_shared_x | ser0_y | ser1_y | ser2_y |\n *\n * @param {Array.} coordDimensions [{name: , type: , dimsDef: }, ...]\n * @param {module:model/Series} seriesModel\n * @param {module:data/Source} source\n * @return {Object} encode Never be `null/undefined`.\n */\n\n\nfunction makeSeriesEncodeForAxisCoordSys(coordDimensions, seriesModel, source) {\n var encode = {};\n var datasetModel = getDatasetModel(seriesModel); // Currently only make default when using dataset, util more reqirements occur.\n\n if (!datasetModel || !coordDimensions) {\n return encode;\n }\n\n var encodeItemName = [];\n var encodeSeriesName = [];\n var ecModel = seriesModel.ecModel;\n var datasetMap = inner(ecModel).datasetMap;\n var key = datasetModel.uid + '_' + source.seriesLayoutBy;\n var baseCategoryDimIndex;\n var categoryWayValueDimStart;\n coordDimensions = coordDimensions.slice();\n each(coordDimensions, function (coordDimInfo, coordDimIdx) {\n !isObject(coordDimInfo) && (coordDimensions[coordDimIdx] = {\n name: coordDimInfo\n });\n\n if (coordDimInfo.type === 'ordinal' && baseCategoryDimIndex == null) {\n baseCategoryDimIndex = coordDimIdx;\n categoryWayValueDimStart = getDataDimCountOnCoordDim(coordDimensions[coordDimIdx]);\n }\n\n encode[coordDimInfo.name] = [];\n });\n var datasetRecord = datasetMap.get(key) || datasetMap.set(key, {\n categoryWayDim: categoryWayValueDimStart,\n valueWayDim: 0\n }); // TODO\n // Auto detect first time axis and do arrangement.\n\n each(coordDimensions, function (coordDimInfo, coordDimIdx) {\n var coordDimName = coordDimInfo.name;\n var count = getDataDimCountOnCoordDim(coordDimInfo); // In value way.\n\n if (baseCategoryDimIndex == null) {\n var start = datasetRecord.valueWayDim;\n pushDim(encode[coordDimName], start, count);\n pushDim(encodeSeriesName, start, count);\n datasetRecord.valueWayDim += count; // ??? 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 } // In category way, the first category axis.\n else if (baseCategoryDimIndex === coordDimIdx) {\n pushDim(encode[coordDimName], 0, count);\n pushDim(encodeItemName, 0, count);\n } // In category way, the other axis.\n else {\n var start = datasetRecord.categoryWayDim;\n pushDim(encode[coordDimName], start, count);\n pushDim(encodeSeriesName, start, count);\n datasetRecord.categoryWayDim += count;\n }\n });\n\n function pushDim(dimIdxArr, idxFrom, idxCount) {\n for (var i = 0; i < idxCount; i++) {\n dimIdxArr.push(idxFrom + i);\n }\n }\n\n function getDataDimCountOnCoordDim(coordDimInfo) {\n var dimsDef = coordDimInfo.dimsDef;\n return dimsDef ? dimsDef.length : 1;\n }\n\n encodeItemName.length && (encode.itemName = encodeItemName);\n encodeSeriesName.length && (encode.seriesName = encodeSeriesName);\n return encode;\n}\n/**\n * Work for data like [{name: ..., value: ...}, ...].\n *\n * @param {module:model/Series} seriesModel\n * @param {module:data/Source} source\n * @return {Object} encode Never be `null/undefined`.\n */\n\n\nfunction makeSeriesEncodeForNameBased(seriesModel, source, dimCount) {\n var encode = {};\n var datasetModel = getDatasetModel(seriesModel); // Currently only make default when using dataset, util more reqirements occur.\n\n if (!datasetModel) {\n return encode;\n }\n\n var sourceFormat = source.sourceFormat;\n var dimensionsDefine = source.dimensionsDefine;\n var potentialNameDimIndex;\n\n if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS || sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {\n each(dimensionsDefine, function (dim, idx) {\n if ((isObject(dim) ? dim.name : dim) === 'name') {\n potentialNameDimIndex = idx;\n }\n });\n } // idxResult: {v, n}.\n\n\n var idxResult = function () {\n var idxRes0 = {};\n var idxRes1 = {};\n var guessRecords = []; // 5 is an experience value.\n\n for (var i = 0, len = Math.min(5, dimCount); i < len; i++) {\n var guessResult = doGuessOrdinal(source.data, sourceFormat, source.seriesLayoutBy, dimensionsDefine, source.startIndex, i);\n guessRecords.push(guessResult);\n var isPureNumber = guessResult === BE_ORDINAL.Not; // [Strategy of idxRes0]: find the first BE_ORDINAL.Not as the value dim,\n // and then find a name dim with the priority:\n // \"BE_ORDINAL.Might|BE_ORDINAL.Must\" > \"other dim\" > \"the value dim itself\".\n\n if (isPureNumber && idxRes0.v == null && i !== potentialNameDimIndex) {\n idxRes0.v = i;\n }\n\n if (idxRes0.n == null || idxRes0.n === idxRes0.v || !isPureNumber && guessRecords[idxRes0.n] === BE_ORDINAL.Not) {\n idxRes0.n = i;\n }\n\n if (fulfilled(idxRes0) && guessRecords[idxRes0.n] !== BE_ORDINAL.Not) {\n return idxRes0;\n } // [Strategy of idxRes1]: if idxRes0 not satisfied (that is, no BE_ORDINAL.Not),\n // find the first BE_ORDINAL.Might as the value dim,\n // and then find a name dim with the priority:\n // \"other dim\" > \"the value dim itself\".\n // That is for backward compat: number-like (e.g., `'3'`, `'55'`) can be\n // treated as number.\n\n\n if (!isPureNumber) {\n if (guessResult === BE_ORDINAL.Might && idxRes1.v == null && i !== potentialNameDimIndex) {\n idxRes1.v = i;\n }\n\n if (idxRes1.n == null || idxRes1.n === idxRes1.v) {\n idxRes1.n = i;\n }\n }\n }\n\n function fulfilled(idxResult) {\n return idxResult.v != null && idxResult.n != null;\n }\n\n return fulfilled(idxRes0) ? idxRes0 : fulfilled(idxRes1) ? idxRes1 : null;\n }();\n\n if (idxResult) {\n encode.value = idxResult.v; // `potentialNameDimIndex` has highest priority.\n\n var nameDimIndex = potentialNameDimIndex != null ? potentialNameDimIndex : idxResult.n; // By default, label use itemName in charts.\n // So we dont set encodeLabel here.\n\n encode.itemName = [nameDimIndex];\n encode.seriesName = [nameDimIndex];\n }\n\n return encode;\n}\n/**\n * If return null/undefined, indicate that should not use datasetModel.\n */\n\n\nfunction getDatasetModel(seriesModel) {\n var option = seriesModel.option; // 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\n var thisData = option.data;\n\n if (!thisData) {\n return seriesModel.ecModel.getComponent('dataset', option.datasetIndex || 0);\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 {BE_ORDINAL} guess result.\n */\n\n\nfunction guessOrdinal(source, dimIndex) {\n return doGuessOrdinal(source.data, source.sourceFormat, source.seriesLayoutBy, source.dimensionsDefine, source.startIndex, dimIndex);\n} // dimIndex may be overflow source data.\n// return {BE_ORDINAL}\n\n\nfunction doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex) {\n var result; // Experience value.\n\n var maxLoop = 5;\n\n if (isTypedArray(data)) {\n return BE_ORDINAL.Not;\n } // When sourceType is 'objectRows' or 'keyedColumns', dimensionsDefine\n // always exists in source.\n\n\n var dimName;\n var dimType;\n\n if (dimensionsDefine) {\n var dimDefItem = dimensionsDefine[dimIndex];\n\n if (isObject(dimDefItem)) {\n dimName = dimDefItem.name;\n dimType = dimDefItem.type;\n } else if (isString(dimDefItem)) {\n dimName = dimDefItem;\n }\n }\n\n if (dimType != null) {\n return dimType === 'ordinal' ? BE_ORDINAL.Must : BE_ORDINAL.Not;\n }\n\n if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {\n if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {\n var sample = data[dimIndex];\n\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 } else {\n for (var i = 0; i < data.length && i < maxLoop; i++) {\n var row = data[startIndex + i];\n\n if (row && (result = detectValue(row[dimIndex])) != null) {\n return result;\n }\n }\n }\n } else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {\n if (!dimName) {\n return BE_ORDINAL.Not;\n }\n\n for (var i = 0; i < data.length && i < maxLoop; i++) {\n var item = data[i];\n\n if (item && (result = detectValue(item[dimName])) != null) {\n return result;\n }\n }\n } else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {\n if (!dimName) {\n return BE_ORDINAL.Not;\n }\n\n var sample = data[dimName];\n\n if (!sample || isTypedArray(sample)) {\n return BE_ORDINAL.Not;\n }\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 } 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\n if (!isArray(val)) {\n return BE_ORDINAL.Not;\n }\n\n if ((result = detectValue(val[dimIndex])) != null) {\n return result;\n }\n }\n }\n\n function detectValue(val) {\n var beStr = isString(val); // Consider usage convenience, '1', '2' will be treated as \"number\".\n // `isFinit('')` get `true`.\n\n if (val != null && isFinite(val) && val !== '') {\n return beStr ? BE_ORDINAL.Might : BE_ORDINAL.Not;\n } else if (beStr && val !== '-') {\n return BE_ORDINAL.Must;\n }\n }\n\n return BE_ORDINAL.Not;\n}\n\nexports.BE_ORDINAL = BE_ORDINAL;\nexports.detectSourceFormat = detectSourceFormat;\nexports.getSource = getSource;\nexports.resetSourceDefaulter = resetSourceDefaulter;\nexports.prepareSource = prepareSource;\nexports.makeSeriesEncodeForAxisCoordSys = makeSeriesEncodeForAxisCoordSys;\nexports.makeSeriesEncodeForNameBased = makeSeriesEncodeForNameBased;\nexports.guessOrdinal = guessOrdinal;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar graphic = require(\"../../util/graphic\");\n\nvar Line = require(\"./Line\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\nvar curveUtil = require(\"zrender/lib/core/curve\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\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 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\n if (!zrUtil.isArray(size)) {\n size = [size, size];\n }\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 symbol = createSymbol(symbolType, -0.5, -0.5, 1, 1, color);\n symbol.z2 = 100;\n symbol.culling = true;\n this.add(symbol);\n } // Symbol may be removed if loop is false\n\n\n if (!symbol) {\n return;\n } // Shadow color is same with color in default\n\n\n symbol.setStyle('shadowColor', color);\n symbol.setStyle(effectModel.getItemStyle(['color']));\n symbol.attr('scale', size);\n symbol.setColor(color);\n symbol.attr('scale', size);\n this._symbolType = symbolType;\n this._symbolScale = size;\n\n this._updateEffectAnimation(lineData, effectModel, idx);\n};\n\neffectLineProto._updateEffectAnimation = function (lineData, effectModel, idx) {\n var symbol = this.childAt(1);\n\n if (!symbol) {\n return;\n }\n\n var self = this;\n var points = lineData.getItemLayout(idx);\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'; // Ignore when updating\n\n symbol.ignore = true;\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 symbol.stopAnimation();\n var delay = delayExpr;\n\n if (isDelayFunc) {\n delay = delayExpr(idx);\n }\n\n if (symbol.__t > 0) {\n delay = -period * symbol.__t;\n }\n\n symbol.__t = 0;\n var animator = symbol.animate('', loop).when(period, {\n __t: 1\n }).delay(delay).during(function () {\n self.updateSymbolPosition(symbol);\n });\n\n if (!loop) {\n animator.done(function () {\n self.remove(symbol);\n });\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) + 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] || [(points[0][0] + points[1][0]) / 2, (points[0][1] + points[1][1]) / 2];\n};\n\neffectLineProto.updateData = function (lineData, idx, seriesScope) {\n this.childAt(0).updateData(lineData, idx, seriesScope);\n\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 lastPos = [pos[0], pos[1]];\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); // Tangent\n\n var tx = quadraticDerivativeAt(p1[0], cp1[0], p2[0], t);\n var ty = quadraticDerivativeAt(p1[1], cp1[1], p2[1], t);\n symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2; // enable continuity trail for 'line', 'rect', 'roundRect' symbolType\n\n if (this._symbolType === 'line' || this._symbolType === 'rect' || this._symbolType === 'roundRect') {\n if (symbol.__lastT !== undefined && symbol.__lastT < symbol.__t) {\n var scaleY = vec2.dist(lastPos, pos) * 1.05;\n symbol.attr('scale', [symbol.scale[0], scaleY]); // make sure the last segment render within endPoint\n\n if (t === 1) {\n pos[0] = lastPos[0] + (pos[0] - lastPos[0]) / 2;\n pos[1] = lastPos[1] + (pos[1] - lastPos[1]) / 2;\n }\n } else if (symbol.__lastT === 1) {\n // After first loop, symbol.__t does NOT start with 0, so connect p1 to pos directly.\n var scaleY = 2 * vec2.dist(p1, pos);\n symbol.attr('scale', [symbol.scale[0], scaleY]);\n } else {\n symbol.attr('scale', this._symbolScale);\n }\n }\n\n symbol.__lastT = symbol.__t;\n symbol.ignore = false;\n};\n\neffectLineProto.updateLayout = function (lineData, idx) {\n this.childAt(0).updateLayout(lineData, idx);\n var effectModel = lineData.getItemModel(idx).getModel('effect');\n\n this._updateEffectAnimation(lineData, effectModel, idx);\n};\n\nzrUtil.inherits(EffectLine, graphic.Group);\nvar _default = EffectLine;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar visualSolution = require(\"../../visual/visualSolution\");\n\nvar selector = require(\"./selector\");\n\nvar throttleUtil = require(\"../../util/throttle\");\n\nvar BrushTargetManager = require(\"../helper/BrushTargetManager\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar STATE_LIST = ['inBrush', 'outOfBrush'];\nvar DISPATCH_METHOD = '__ecBrushSelect';\nvar DISPATCH_FLAG = '__ecInBrushSelectEvent';\nvar PRIORITY_BRUSH = echarts.PRIORITY.VISUAL.BRUSH;\n/**\n * Layout for visual, the priority higher than other layout, and before brush visual.\n */\n\necharts.registerLayout(PRIORITY_BRUSH, function (ecModel, api, payload) {\n ecModel.eachComponent({\n mainType: 'brush'\n }, function (brushModel) {\n payload && payload.type === 'takeGlobalCursor' && brushModel.setBrushOption(payload.key === 'brush' ? payload.brushOption : {\n brushType: false\n });\n });\n layoutCovers(ecModel);\n});\n\nfunction layoutCovers(ecModel) {\n ecModel.eachComponent({\n mainType: 'brush'\n }, function (brushModel) {\n var brushTargetManager = brushModel.brushTargetManager = new BrushTargetManager(brushModel.option, ecModel);\n brushTargetManager.setInputRanges(brushModel.areas, ecModel);\n });\n}\n/**\n * Register the visual encoding if this modules required.\n */\n\n\necharts.registerVisual(PRIORITY_BRUSH, function (ecModel, api, payload) {\n var brushSelected = [];\n var throttleType;\n var throttleDelay;\n ecModel.eachComponent({\n mainType: 'brush'\n }, function (brushModel, brushIndex) {\n var thisBrushSelected = {\n brushId: brushModel.id,\n brushIndex: brushIndex,\n brushName: brushModel.name,\n areas: zrUtil.clone(brushModel.areas),\n selected: []\n }; // Every brush component exists in event params, convenient\n // for user to find by index.\n\n brushSelected.push(thisBrushSelected);\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) {\n // Only the first throttle setting works.\n throttleType = brushOption.throttleType;\n throttleDelay = brushOption.throttleDelay;\n } // Add boundingRect and selectors to range.\n\n\n var areas = zrUtil.map(brushModel.areas, function (area) {\n return bindSelector(zrUtil.defaults({\n boundingRect: boundingRectBuilders[area.brushType](area)\n }, area));\n });\n var visualMappings = visualSolution.createVisualMappings(brushModel.option, STATE_LIST, function (mappingOption) {\n mappingOption.mappingMethod = 'fixed';\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 } // If no supported brush or no brush on the series,\n // all visuals should be in original state.\n\n\n function brushed(rangeInfoList) {\n return !!rangeInfoList.length;\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 // Step A\n\n\n ecModel.eachSeries(function (seriesModel, seriesIndex) {\n var rangeInfoList = rangeInfoBySeries[seriesIndex] = [];\n seriesModel.subType === 'parallel' ? stepAParallel(seriesModel, seriesIndex, rangeInfoList) : stepAOthers(seriesModel, seriesIndex, rangeInfoList);\n });\n\n function stepAParallel(seriesModel, seriesIndex) {\n var coordSys = seriesModel.coordinateSystem;\n hasBrushExists |= coordSys.hasAxisBrushed();\n linkOthers(seriesIndex) && coordSys.eachActiveState(seriesModel.getData(), function (activeState, dataIndex) {\n activeState === 'active' && (selectedDataIndexForLink[dataIndex] = 1);\n });\n }\n\n function stepAOthers(seriesModel, seriesIndex, rangeInfoList) {\n var selectorsByBrushType = getSelectorsByBrushType(seriesModel);\n\n if (!selectorsByBrushType || brushModelNotControll(brushModel, seriesIndex)) {\n return;\n }\n\n zrUtil.each(areas, function (area) {\n selectorsByBrushType[area.brushType] && brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel) && 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 } // Step B\n\n\n ecModel.eachSeries(function (seriesModel, seriesIndex) {\n var seriesBrushSelected = {\n seriesId: seriesModel.id,\n seriesIndex: seriesIndex,\n seriesName: seriesModel.name,\n dataIndex: []\n }; // Every series exists in event params, convenient\n // for user to find series by seriesIndex.\n\n thisBrushSelected.selected.push(seriesBrushSelected);\n var selectorsByBrushType = getSelectorsByBrushType(seriesModel);\n var rangeInfoList = rangeInfoBySeries[seriesIndex];\n var data = seriesModel.getData();\n var getValueState = linkOthers(seriesIndex) ? function (dataIndex) {\n return selectedDataIndexForLink[dataIndex] ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush') : 'outOfBrush';\n } : function (dataIndex) {\n return checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex) ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush') : 'outOfBrush';\n }; // If no supported brush or no brush, all visuals are in original state.\n\n (linkOthers(seriesIndex) ? hasBrushExists : brushed(rangeInfoList)) && visualSolution.applyVisual(STATE_LIST, visualMappings, data, getValueState);\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\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 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\n if (selectorsByBrushType[area.brushType](dataIndex, data, area.selectors, area)) {\n return true;\n }\n }\n}\n\nfunction getSelectorsByBrushType(seriesModel) {\n var brushSelector = seriesModel.brushSelector;\n\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 } 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\n return brushSelector;\n}\n\nfunction brushModelNotControll(brushModel, seriesIndex) {\n var seriesIndices = brushModel.option.seriesIndex;\n return seriesIndices != null && seriesIndices !== 'all' && (zrUtil.isArray(seriesIndices) ? zrUtil.indexOf(seriesIndices, seriesIndex) < 0 : seriesIndex !== seriesIndices);\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 lineX: zrUtil.noop,\n lineY: zrUtil.noop,\n rect: function (area) {\n return getBoundingRectFromMinMax(area.range);\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(minMax[0][0], minMax[1][0], minMax[0][1] - minMax[0][0], minMax[1][1] - minMax[1][0]);\n}\n\nexports.layoutCovers = layoutCovers;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./effectScatter/EffectScatterSeries\");\n\nrequire(\"./effectScatter/EffectScatterView\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar layoutPoints = require(\"../layout/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*/\necharts.registerVisual(visualSymbol('effectScatter', 'circle'));\necharts.registerLayout(layoutPoints('effectScatter'));","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {Object} 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 */\nfunction _default(finder, ecModel) {\n var point = [];\n var seriesIndex = finder.seriesIndex;\n var seriesModel;\n\n if (seriesIndex == null || !(seriesModel = ecModel.getSeriesByIndex(seriesIndex))) {\n return {\n point: []\n };\n }\n\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, finder);\n\n if (dataIndex == null || dataIndex < 0 || zrUtil.isArray(dataIndex)) {\n return {\n point: []\n };\n }\n\n var el = data.getItemGraphicEl(dataIndex);\n var coordSys = seriesModel.coordinateSystem;\n\n if (seriesModel.getTooltipPosition) {\n point = seriesModel.getTooltipPosition(dataIndex) || [];\n } else if (coordSys && coordSys.dataToPoint) {\n point = coordSys.dataToPoint(data.getValues(zrUtil.map(coordSys.dimensions, function (dim) {\n return data.mapDimension(dim);\n }), dataIndex, true)) || [];\n } else if (el) {\n // Use graphic bounding rect\n var rect = el.getBoundingRect().clone();\n rect.applyTransform(el.transform);\n point = [rect.x + rect.width / 2, rect.y + rect.height / 2];\n }\n\n return {\n point: point,\n el: el\n };\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar _labelHelper = require(\"./labelHelper\");\n\nvar getDefaultLabel = _labelHelper.getDefaultLabel;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\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 * @public\n * @static\n * @param {module:echarts/data/List} data\n * @param {number} dataIndex\n * @return {Array.} [width, height]\n */\n\nvar getSymbolSize = SymbolClz.getSymbolSize = function (data, idx) {\n var symbolSize = data.getItemVisual(idx, 'symbolSize');\n return symbolSize instanceof Array ? symbolSize.slice() : [+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 (symbolType, data, idx, symbolSize, keepAspect) {\n // Remove paths created before\n this.removeAll();\n var color = data.getItemVisual(idx, 'color'); // 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\n var symbolPath = createSymbol(symbolType, -1, -1, 2, 2, color, keepAspect);\n symbolPath.attr({\n z2: 100,\n culling: true,\n scale: getScale(symbolSize)\n }); // Rewrite drift method\n\n symbolPath.drift = driftSymbol;\n this._symbolType = symbolType;\n this.add(symbolPath);\n};\n/**\n * Stop animation\n * @param {boolean} toLastFrame\n */\n\n\nsymbolProto.stopSymbolAnimation = function (toLastFrame) {\n this.childAt(0).stopAnimation(toLastFrame);\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 */\n\n\nsymbolProto.getSymbolPath = function () {\n return this.childAt(0);\n};\n/**\n * Get scale(aka, current symbol size).\n * Including the change caused by animation\n */\n\n\nsymbolProto.getScale = function () {\n return this.childAt(0).scale;\n};\n/**\n * Highlight symbol\n */\n\n\nsymbolProto.highlight = function () {\n this.childAt(0).trigger('emphasis');\n};\n/**\n * Downplay symbol\n */\n\n\nsymbolProto.downplay = function () {\n this.childAt(0).trigger('normal');\n};\n/**\n * @param {number} zlevel\n * @param {number} z\n */\n\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 * 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 */\n\n\nsymbolProto.updateData = function (data, idx, seriesScope) {\n this.silent = false;\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\n this._createSymbol(symbolType, data, idx, symbolSize, keepAspect);\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 var target = {\n scale: symbolPath.scale.slice()\n };\n fadeIn && (target.style = {\n opacity: symbolPath.style.opacity\n });\n symbolPath.scale = [0, 0];\n fadeIn && (symbolPath.style.opacity = 0);\n graphic.initProps(symbolPath, target, seriesModel, idx);\n }\n\n this._seriesModel = seriesModel;\n}; // Update common properties\n\n\nvar normalStyleAccessPath = ['itemStyle'];\nvar emphasisStyleAccessPath = ['emphasis', 'itemStyle'];\nvar normalLabelAccessPath = ['label'];\nvar emphasisLabelAccessPath = ['emphasis', 'label'];\n/**\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @param {Array.} symbolSize\n * @param {Object} [seriesScope]\n */\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'); // Reset style\n\n if (symbolPath.type !== 'image') {\n symbolPath.useStyle({\n strokeNoScale: true\n });\n } else {\n symbolPath.setStyle({\n opacity: null,\n shadowBlur: null,\n shadowOffsetX: null,\n shadowOffsetY: null,\n shadowColor: null\n });\n }\n\n var itemStyle = seriesScope && seriesScope.itemStyle;\n var hoverItemStyle = seriesScope && seriesScope.hoverItemStyle;\n var 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 ? seriesScope.itemModel : data.getItemModel(idx); // Color must be excluded.\n // Because symbol provide setColor individually to set fill and stroke\n\n itemStyle = itemModel.getModel(normalStyleAccessPath).getItemStyle(['color']);\n hoverItemStyle = itemModel.getModel(emphasisStyleAccessPath).getItemStyle();\n symbolOffset = itemModel.getShallow('symbolOffset');\n labelModel = itemModel.getModel(normalLabelAccessPath);\n hoverLabelModel = itemModel.getModel(emphasisLabelAccessPath);\n hoverAnimation = itemModel.getShallow('hoverAnimation');\n cursorStyle = itemModel.getShallow('cursor');\n } else {\n hoverItemStyle = zrUtil.extend({}, hoverItemStyle);\n }\n\n var elStyle = symbolPath.style;\n var symbolRotate = data.getItemVisual(idx, 'symbolRotate');\n symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0);\n\n if (symbolOffset) {\n symbolPath.attr('position', [parsePercent(symbolOffset[0], symbolSize[0]), parsePercent(symbolOffset[1], symbolSize[1])]);\n }\n\n cursorStyle && symbolPath.attr('cursor', cursorStyle); // PENDING setColor before setStyle!!!\n\n symbolPath.setColor(color, seriesScope && seriesScope.symbolInnerColor);\n symbolPath.setStyle(itemStyle);\n var opacity = data.getItemVisual(idx, 'opacity');\n\n if (opacity != null) {\n elStyle.opacity = opacity;\n }\n\n var liftZ = data.getItemVisual(idx, 'liftZ');\n var z2Origin = symbolPath.__z2Origin;\n\n if (liftZ != null) {\n if (z2Origin == null) {\n symbolPath.__z2Origin = symbolPath.z2;\n symbolPath.z2 += liftZ;\n }\n } else if (z2Origin != null) {\n symbolPath.z2 = z2Origin;\n symbolPath.__z2Origin = null;\n }\n\n var useNameLabel = seriesScope && seriesScope.useNameLabel;\n graphic.setLabelStyle(elStyle, hoverItemStyle, labelModel, hoverLabelModel, {\n labelFetcher: seriesModel,\n labelDataIndex: idx,\n defaultText: getLabelDefaultText,\n isRectText: true,\n autoColor: color\n }); // Do not execute util needed.\n\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 = hoverAnimation && seriesModel.isAnimationEnabled() ? highDownOnUpdate : null;\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: [Math.max(scale[0] * 1.1, scale[0] + 3), Math.max(scale[1] * 1.1, scale[1] + 3 * ratio)]\n }; // FIXME\n // modify it after support stop specified animation.\n // toState === fromState\n // ? (this.stopAnimation(), this.attr(emphasisOpt))\n\n this.animateTo(emphasisOpt, 400, 'elasticOut');\n } else if (toState === 'normal') {\n this.animateTo({\n scale: this.__symbolOriginalScale\n }, 400, 'elasticOut');\n }\n}\n/**\n * @param {Function} cb\n * @param {Object} [opt]\n * @param {Object} [opt.keepLabel=true]\n */\n\n\nsymbolProto.fadeOut = function (cb, opt) {\n var symbolPath = this.childAt(0); // Avoid mistaken hover when fading out\n\n this.silent = symbolPath.silent = true; // Not show text when animating\n\n !(opt && opt.keepLabel) && (symbolPath.style.text = null);\n graphic.updateProps(symbolPath, {\n style: {\n opacity: 0\n },\n scale: [0, 0]\n }, this._seriesModel, this.dataIndex, cb);\n};\n\nzrUtil.inherits(SymbolClz, graphic.Group);\nvar _default = SymbolClz;\nmodule.exports = _default;","module.exports = __webpack_public_path__ + \"img/empty.f69a01d8.png\";","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar symbolUtil = require(\"../../util/symbol\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction normalizeSymbolSize(symbolSize) {\n if (!zrUtil.isArray(symbolSize)) {\n symbolSize = [+symbolSize, +symbolSize];\n }\n\n return symbolSize;\n}\n\nvar _default = echarts.extendChartView({\n type: 'radar',\n render: function (seriesModel, ecModel, api) {\n var polar = seriesModel.coordinateSystem;\n var group = this.group;\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\n if (symbolType === 'none') {\n return;\n }\n\n var symbolSize = normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize'));\n var symbolPath = symbolUtil.createSymbol(symbolType, -1, -1, 2, 2, color);\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\n for (var i = 0; i < newPoints.length - 1; i++) {\n var symbolPath = createSymbol(data, idx);\n\n if (symbolPath) {\n symbolPath.__dimIdx = i;\n\n if (oldPoints[i]) {\n symbolPath.attr('position', oldPoints[i]);\n graphic[isInit ? 'initProps' : 'updateProps'](symbolPath, {\n position: newPoints[i]\n }, seriesModel, idx);\n } else {\n symbolPath.attr('position', newPoints[i]);\n }\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\n data.diff(oldData).add(function (idx) {\n var points = data.getItemLayout(idx);\n\n if (!points) {\n return;\n }\n\n var polygon = new graphic.Polygon();\n var polyline = new graphic.Polyline();\n var target = {\n shape: {\n points: points\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 var itemGroup = new graphic.Group();\n var symbolGroup = new graphic.Group();\n itemGroup.add(polyline);\n itemGroup.add(polygon);\n itemGroup.add(symbolGroup);\n updateSymbols(polyline.shape.points, points, symbolGroup, data, idx, true);\n data.setItemGraphicEl(idx, itemGroup);\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\n updateSymbols(polyline.shape.points, target.shape.points, symbolGroup, data, newIdx, false);\n graphic.updateProps(polyline, target, seriesModel);\n graphic.updateProps(polygon, target, seriesModel);\n data.setItemGraphicEl(newIdx, itemGroup);\n }).remove(function (idx) {\n group.remove(oldData.getItemGraphicEl(idx));\n }).execute();\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 group.add(itemGroup);\n polyline.useStyle(zrUtil.defaults(itemModel.getModel('lineStyle').getLineStyle(), {\n fill: 'none',\n stroke: color\n }));\n polyline.hoverStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle();\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 hoverPolygonIgnore = hoverPolygonIgnore && polygonIgnore;\n polygon.ignore = polygonIgnore;\n polygon.useStyle(zrUtil.defaults(areaStyleModel.getAreaStyle(), {\n fill: color,\n opacity: 0.7\n }));\n polygon.hoverStyle = hoverAreaStyleModel.getAreaStyle();\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 graphic.setLabelStyle(symbolPath.style, symbolPath.hoverStyle, labelModel, labelHoverModel, {\n labelFetcher: data.hostModel,\n labelDataIndex: idx,\n labelDimIndex: symbolPath.__dimIdx,\n defaultText: defaultText,\n autoColor: color,\n isRectText: true\n });\n });\n\n itemGroup.highDownOnUpdate = function (fromState, toState) {\n polygon.attr('ignore', toState === 'emphasis' ? hoverPolygonIgnore : polygonIgnore);\n };\n\n graphic.setHoverStyle(itemGroup);\n });\n this._data = data;\n },\n remove: function () {\n this.group.removeAll();\n this._data = null;\n },\n dispose: function () {}\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar AxisBuilder = require(\"./AxisBuilder\");\n\nvar AxisView = require(\"./AxisView\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\nvar selfBuilderAttrs = ['splitLine', 'splitArea', 'minorSplitLine'];\n\nvar _default = AxisView.extend({\n type: 'radiusAxis',\n axisPointerClass: 'PolarAxisPointer',\n render: function (radiusAxisModel, ecModel) {\n this.group.removeAll();\n\n if (!radiusAxisModel.get('show')) {\n return;\n }\n\n var radiusAxis = radiusAxisModel.axis;\n var polar = radiusAxis.polar;\n var angleAxis = polar.getAngleAxis();\n var ticksCoords = radiusAxis.getTicksCoords();\n var minorTicksCoords = radiusAxis.getMinorTicksCoords();\n var axisAngle = angleAxis.getExtent()[0];\n var radiusExtent = radiusAxis.getExtent();\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 zrUtil.each(selfBuilderAttrs, function (name) {\n if (radiusAxisModel.get(name + '.show') && !radiusAxis.scale.isBlank()) {\n this['_' + name](radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords, minorTicksCoords);\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 lineColors = lineColors instanceof Array ? lineColors : [lineColors];\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 }));\n } // Simple optimization\n // Batching the lines if color are the same\n\n\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 _minorSplitLine: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords, minorTicksCoords) {\n if (!minorTicksCoords.length) {\n return;\n }\n\n var minorSplitLineModel = radiusAxisModel.getModel('minorSplitLine');\n var lineStyleModel = minorSplitLineModel.getModel('lineStyle');\n var lines = [];\n\n for (var i = 0; i < minorTicksCoords.length; i++) {\n for (var k = 0; k < minorTicksCoords[i].length; k++) {\n lines.push(new graphic.Circle({\n shape: {\n cx: polar.cx,\n cy: polar.cy,\n r: minorTicksCoords[i][k].coord\n }\n }));\n }\n }\n\n this.group.add(graphic.mergePath(lines, {\n style: zrUtil.defaults({\n fill: null\n }, lineStyleModel.getLineStyle()),\n silent: true\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 areaColors = areaColors instanceof Array ? areaColors : [areaColors];\n var splitAreas = [];\n var prevRadius = ticksCoords[0].coord;\n\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 } // Simple optimization\n // Batching the lines if color are the same\n\n\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 * @inner\n */\n\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar createListFromArray = require(\"./chart/helper/createListFromArray\");\n\nvar axisHelper = require(\"./coord/axisHelper\");\n\nvar axisModelCommonMixin = require(\"./coord/axisModelCommonMixin\");\n\nvar Model = require(\"./model/Model\");\n\nvar _layout = require(\"./util/layout\");\n\nvar getLayoutRect = _layout.getLayoutRect;\nexports.getLayoutRect = _layout.getLayoutRect;\n\nvar _dataStackHelper = require(\"./data/helper/dataStackHelper\");\n\nvar enableDataStack = _dataStackHelper.enableDataStack;\nvar isDimensionStacked = _dataStackHelper.isDimensionStacked;\nvar getStackedDimension = _dataStackHelper.getStackedDimension;\n\nvar _completeDimensions = require(\"./data/helper/completeDimensions\");\n\nexports.completeDimensions = _completeDimensions;\n\nvar _createDimensions = require(\"./data/helper/createDimensions\");\n\nexports.createDimensions = _createDimensions;\n\nvar _symbol = require(\"./util/symbol\");\n\nexports.createSymbol = _symbol.createSymbol;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// import createGraphFromNodeEdge from './chart/helper/createGraphFromNodeEdge';\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 */\nfunction createList(seriesModel) {\n return createListFromArray(seriesModel.getSource(), seriesModel);\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\n\nvar dataStack = {\n isDimensionStacked: isDimensionStacked,\n enableDataStack: enableDataStack,\n getStackedDimension: getStackedDimension\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 */\n\n/**\n * Create scale\n * @param {Array.} dataExtent\n * @param {Object|module:echarts/Model} option\n */\nfunction createScale(dataExtent, option) {\n var axisModel = option;\n\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 axisHelper.niceScaleExtent(scale, axisModel);\n return scale;\n}\n/**\n * Mixin common methods to axis model,\n *\n * Inlcude methods\n * `getFormattedLabels() => Array.`\n * `getCategories() => Array.`\n * `getMin(origin: boolean) => number`\n * `getMax(origin: boolean) => number`\n * `getNeedCrossZero() => boolean`\n * `setRange(start: number, end: number)`\n * `resetRange()`\n */\n\n\nfunction mixinAxisModelCommonMethods(Model) {\n zrUtil.mixin(Model, axisModelCommonMixin);\n}\n\nexports.createList = createList;\nexports.dataStack = dataStack;\nexports.createScale = createScale;\nexports.mixinAxisModelCommonMethods = mixinAxisModelCommonMethods;","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\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\nvar echarts = require(\"../echarts\");\n\nrequire(\"./scatter/ScatterSeries\");\n\nrequire(\"./scatter/ScatterView\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar layoutPoints = require(\"../layout/points\");\n\nrequire(\"../component/gridSimple\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// import * as zrUtil from 'zrender/src/core/util';\n// In case developer forget to include grid component\necharts.registerVisual(visualSymbol('scatter', 'circle'));\necharts.registerLayout(layoutPoints('scatter')); // 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// 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// data.selectRange(range);\n// });\n// });","/**\n * 3x2矩阵操作类\n * @exports zrender/tool/matrix\n */\n\n/* global Float32Array */\nvar ArrayCtor = typeof Float32Array === 'undefined' ? Array : Float32Array;\n/**\n * Create a identity matrix.\n * @return {Float32Array|Array.}\n */\n\nfunction create() {\n var out = new ArrayCtor(6);\n identity(out);\n return out;\n}\n/**\n * 设置矩阵为单位矩阵\n * @param {Float32Array|Array.} out\n */\n\n\nfunction 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 * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} m\n */\n\n\nfunction 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 * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} m1\n * @param {Float32Array|Array.} m2\n */\n\n\nfunction 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 * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} a\n * @param {Float32Array|Array.} v\n */\n\n\nfunction 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 * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} a\n * @param {number} rad\n */\n\n\nfunction 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 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 * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} a\n * @param {Float32Array|Array.} v\n */\n\n\nfunction 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 * @param {Float32Array|Array.} out\n * @param {Float32Array|Array.} a\n */\n\n\nfunction invert(out, a) {\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 det = aa * ad - ab * ac;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\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 * Clone a new matrix.\n * @param {Float32Array|Array.} a\n */\n\n\nfunction clone(a) {\n var b = create();\n copy(b, a);\n return b;\n}\n\nexports.create = create;\nexports.identity = identity;\nexports.copy = copy;\nexports.mul = mul;\nexports.translate = translate;\nexports.rotate = rotate;\nexports.scale = scale;\nexports.invert = invert;\nexports.clone = clone;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar axisDefault = require(\"../axisDefault\");\n\nvar Model = require(\"../../model/Model\");\n\nvar axisModelCommonMixin = require(\"../axisModelCommonMixin\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar valueAxisDefault = axisDefault.valueAxis;\n\nfunction defaultsShow(opt, show) {\n return zrUtil.defaults({\n show: show\n }, opt);\n}\n\nvar RadarModel = echarts.extendComponentModel({\n type: 'radar',\n optionUpdated: function () {\n var boundaryGap = this.get('boundaryGap');\n var splitNumber = this.get('splitNumber');\n var scale = this.get('scale');\n var axisLine = this.get('axisLine');\n var axisTick = this.get('axisTick');\n var axisType = this.get('axisType');\n var axisLabel = this.get('axisLabel');\n var nameTextStyle = this.get('name');\n var showName = this.get('name.show');\n var nameFormatter = this.get('name.formatter');\n var nameGap = this.get('nameGap');\n var triggerEvent = this.get('triggerEvent');\n 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 } else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) {\n indicatorOpt.max = 0;\n }\n\n var iNameTextStyle = nameTextStyle;\n\n if (indicatorOpt.color != null) {\n iNameTextStyle = zrUtil.defaults({\n color: indicatorOpt.color\n }, nameTextStyle);\n } // Use same configuration\n\n\n indicatorOpt = zrUtil.merge(zrUtil.clone(indicatorOpt), {\n boundaryGap: boundaryGap,\n splitNumber: splitNumber,\n scale: scale,\n axisLine: axisLine,\n axisTick: axisTick,\n axisType: axisType,\n axisLabel: axisLabel,\n // Compatible with 2 and use text\n name: indicatorOpt.text,\n nameLocation: 'end',\n nameGap: nameGap,\n // min: 0,\n nameTextStyle: iNameTextStyle,\n triggerEvent: triggerEvent\n }, false);\n\n if (!showName) {\n indicatorOpt.name = '';\n }\n\n if (typeof nameFormatter === 'string') {\n var indName = indicatorOpt.name;\n indicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : '');\n } else if (typeof nameFormatter === 'function') {\n indicatorOpt.name = nameFormatter(indicatorOpt.name, indicatorOpt);\n }\n\n var model = zrUtil.extend(new Model(indicatorOpt, null, this.ecModel), axisModelCommonMixin); // For triggerEvent.\n\n model.mainType = 'radar';\n model.componentIndex = this.componentIndex;\n return model;\n }, this);\n\n this.getIndicatorModels = function () {\n return indicatorModels;\n };\n },\n defaultOption: {\n zlevel: 0,\n z: 0,\n center: ['50%', '50%'],\n radius: '75%',\n startAngle: 90,\n name: {\n show: true // formatter: null\n // textStyle: {}\n\n },\n boundaryGap: [0, 0],\n splitNumber: 5,\n nameGap: 15,\n scale: false,\n // Polygon or circle\n shape: 'polygon',\n axisLine: zrUtil.merge({\n lineStyle: {\n color: '#bbb'\n }\n }, valueAxisDefault.axisLine),\n axisLabel: defaultsShow(valueAxisDefault.axisLabel, false),\n axisTick: defaultsShow(valueAxisDefault.axisTick, false),\n axisType: 'interval',\n splitLine: defaultsShow(valueAxisDefault.splitLine, true),\n splitArea: defaultsShow(valueAxisDefault.splitArea, true),\n // {text, min, max}\n indicator: []\n }\n});\nvar _default = RadarModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar coordsOffsetMap = {\n '南海诸岛': [32, 80],\n // 全国\n '广东': [0, -10],\n '香港': [10, 5],\n '澳门': [-10, 10],\n //'北京': [-10, 0],\n '天津': [5, 5]\n};\n\nfunction _default(mapType, region) {\n if (mapType === 'china') {\n var coordFix = coordsOffsetMap[region.name];\n\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar BaseBarSeries = require(\"./BaseBarSeries\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = BaseBarSeries.extend({\n type: 'series.bar',\n dependencies: ['grid', 'polar'],\n brushSelector: 'rect',\n\n /**\n * @override\n */\n getProgressive: function () {\n // Do not support progressive in normal mode.\n return this.get('large') ? this.get('progressive') : 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\n if (largeThreshold > progressiveThreshold) {\n progressiveThreshold = largeThreshold;\n }\n\n return progressiveThreshold;\n },\n defaultOption: {\n // If clipped\n // Only available on cartesian2d\n clip: true,\n // If use caps on two sides of bars\n // Only available on tangential polar bar\n roundCap: false,\n showBackground: false,\n backgroundStyle: {\n color: 'rgba(180, 180, 180, 0.2)',\n borderColor: null,\n borderWidth: 0,\n borderType: 'solid',\n borderRadius: 0,\n shadowBlur: 0,\n shadowColor: null,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n opacity: 1\n }\n }\n});\n\nmodule.exports = _default;","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar sloppyArrayMethod = require('../internals/sloppy-array-method');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\nmodule.exports = sloppyArrayMethod('forEach') ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n} : [].forEach;\n","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar _model = require(\"../../util/model\");\n\nvar makeInner = _model.makeInner;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar inner = makeInner();\nvar each = zrUtil.each;\n/**\n * @param {string} key\n * @param {module:echarts/ExtensionAPI} api\n * @param {Function} handler\n * param: {string} currTrigger\n * param: {Array.} point\n */\n\nfunction 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 initGlobalListeners(zr, api);\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 useHandler('click', zrUtil.curry(doEnter, 'click'));\n useHandler('mousemove', zrUtil.curry(doEnter, 'mousemove')); // useHandler('mouseout', onLeave);\n\n useHandler('globalout', onLeave);\n\n function useHandler(eventType, cb) {\n zr.on(eventType, function (e) {\n var dis = makeDispatchAction(api);\n each(inner(zr).records, function (record) {\n record && cb(record, e, dis.dispatchAction);\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 var actuallyPayload;\n\n if (showLen) {\n actuallyPayload = pendings.showTip[showLen - 1];\n } else if (hideLen) {\n actuallyPayload = pendings.hideTip[hideLen - 1];\n }\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 }; // 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\n var dispatchAction = function (payload) {\n var pendingList = pendings[payload.type];\n\n if (pendingList) {\n pendingList.push(payload);\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 * @param {string} key\n * @param {module:echarts/ExtensionAPI} api\n */\n\n\nfunction unregister(key, api) {\n if (env.node) {\n return;\n }\n\n var zr = api.getZr();\n var record = (inner(zr).records || {})[key];\n\n if (record) {\n inner(zr).records[key] = null;\n }\n}\n\nexports.register = register;\nexports.unregister = unregister;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Scale = require(\"./Scale\");\n\nvar OrdinalMeta = require(\"../data/OrdinalMeta\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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// FIXME only one data\nvar scaleProto = Scale.prototype;\nvar OrdinalScale = Scale.extend({\n type: 'ordinal',\n\n /**\n * @param {module:echarts/data/OrdianlMeta|Array.} 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({\n categories: ordinalMeta\n });\n }\n\n this._ordinalMeta = ordinalMeta;\n this._extent = extent || [0, ordinalMeta.categories.length - 1];\n },\n parse: function (val) {\n return typeof val === 'string' ? this._ordinalMeta.getOrdinal(val) // val might be float.\n : Math.round(val);\n },\n contain: function (rank) {\n rank = this.parse(rank);\n return scaleProto.contain.call(this, rank) && 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 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 getOrdinalMeta: function () {\n return this._ordinalMeta;\n },\n niceTicks: zrUtil.noop,\n niceExtent: zrUtil.noop\n});\n/**\n * @return {module:echarts/scale/Time}\n */\n\nOrdinalScale.create = function () {\n return new OrdinalScale();\n};\n\nvar _default = OrdinalScale;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar MarkerModel = require(\"./MarkerModel\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = MarkerModel.extend({\n type: 'markLine',\n defaultOption: {\n zlevel: 0,\n z: 5,\n symbol: ['circle', 'arrow'],\n symbolSize: [8, 16],\n //symbolRotate: 0,\n precision: 2,\n tooltip: {\n trigger: 'item'\n },\n label: {\n show: true,\n position: 'end',\n distance: 5\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar ChartView = require(\"../../view/Chart\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar Path = require(\"zrender/lib/graphic/Path\");\n\nvar _createClipPathFromCoordSys = require(\"../helper/createClipPathFromCoordSys\");\n\nvar createClipPath = _createClipPathFromCoordSys.createClipPath;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar NORMAL_ITEM_STYLE_PATH = ['itemStyle'];\nvar EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'];\nvar SKIP_PROPS = ['color', 'color0', 'borderColor', 'borderColor0'];\nvar CandlestickView = ChartView.extend({\n type: 'candlestick',\n render: function (seriesModel, ecModel, api) {\n // If there is clipPath created in large mode. Remove it.\n this.group.removeClipPath();\n\n this._updateDrawMode(seriesModel);\n\n this._isLargeDraw ? this._renderLarge(seriesModel) : this._renderNormal(seriesModel);\n },\n incrementalPrepareRender: function (seriesModel, ecModel, api) {\n this._clear();\n\n this._updateDrawMode(seriesModel);\n },\n incrementalRender: function (params, seriesModel, ecModel, api) {\n this._isLargeDraw ? this._incrementalRenderLarge(params, seriesModel) : this._incrementalRenderNormal(params, seriesModel);\n },\n _updateDrawMode: function (seriesModel) {\n var isLargeDraw = seriesModel.pipelineContext.large;\n\n if (this._isLargeDraw == null || isLargeDraw ^ this._isLargeDraw) {\n this._isLargeDraw = isLargeDraw;\n\n this._clear();\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 var needsClip = seriesModel.get('clip', true);\n var coord = seriesModel.coordinateSystem;\n var clipArea = coord.getArea && coord.getArea(); // 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\n if (!this._data) {\n group.removeAll();\n }\n\n data.diff(oldData).add(function (newIdx) {\n if (data.hasValue(newIdx)) {\n var el;\n var itemLayout = data.getItemLayout(newIdx);\n\n if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {\n return;\n }\n\n el = createNormalBox(itemLayout, newIdx, true);\n graphic.initProps(el, {\n shape: {\n points: itemLayout.ends\n }\n }, seriesModel, newIdx);\n setBoxCommon(el, data, newIdx, isSimpleBox);\n group.add(el);\n data.setItemGraphicEl(newIdx, el);\n }\n }).update(function (newIdx, oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx); // Empty data\n\n if (!data.hasValue(newIdx)) {\n group.remove(el);\n return;\n }\n\n var itemLayout = data.getItemLayout(newIdx);\n\n if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {\n group.remove(el);\n return;\n }\n\n if (!el) {\n el = createNormalBox(itemLayout, newIdx);\n } else {\n graphic.updateProps(el, {\n shape: {\n points: itemLayout.ends\n }\n }, seriesModel, newIdx);\n }\n\n setBoxCommon(el, data, newIdx, isSimpleBox);\n group.add(el);\n data.setItemGraphicEl(newIdx, el);\n }).remove(function (oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n el && group.remove(el);\n }).execute();\n this._data = data;\n },\n _renderLarge: function (seriesModel) {\n this._clear();\n\n createLarge(seriesModel, this.group);\n var clipPath = seriesModel.get('clip', true) ? createClipPath(seriesModel.coordinateSystem, false, seriesModel) : null;\n\n if (clipPath) {\n this.group.setClipPath(clipPath);\n } else {\n this.group.removeClipPath();\n }\n },\n _incrementalRenderNormal: function (params, seriesModel) {\n var data = seriesModel.getData();\n var isSimpleBox = data.getLayout('isSimpleBox');\n var dataIndex;\n\n while ((dataIndex = params.next()) != null) {\n var el;\n var itemLayout = data.getItemLayout(dataIndex);\n el = createNormalBox(itemLayout, dataIndex);\n setBoxCommon(el, data, dataIndex, isSimpleBox);\n el.incremental = true;\n this.group.add(el);\n }\n },\n _incrementalRenderLarge: function (params, seriesModel) {\n createLarge(seriesModel, this.group, true);\n },\n remove: function (ecModel) {\n this._clear();\n },\n _clear: function () {\n this.group.removeAll();\n this._data = null;\n },\n dispose: zrUtil.noop\n});\nvar NormalBoxPath = Path.extend({\n type: 'normalCandlestickBox',\n shape: {},\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 } 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 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 ? transInit(ends, itemLayout) : ends\n },\n z2: 100\n });\n}\n\nfunction isNormalBoxClipped(clipArea, itemLayout) {\n var clipped = true;\n\n for (var i = 0; i < itemLayout.ends.length; i++) {\n // If any point are in the region.\n if (clipArea.contain(itemLayout.ends[i][0], itemLayout.ends[i][1])) {\n clipped = false;\n break;\n }\n }\n\n return clipped;\n}\n\nfunction setBoxCommon(el, data, dataIndex, isSimpleBox) {\n var itemModel = data.getItemModel(dataIndex);\n var normalItemStyleModel = itemModel.getModel(NORMAL_ITEM_STYLE_PATH);\n var color = data.getItemVisual(dataIndex, 'color');\n var borderColor = data.getItemVisual(dataIndex, 'borderColor') || color; // Color must be excluded.\n // Because symbol provide setColor individually to set fill and stroke\n\n var itemStyle = normalItemStyleModel.getItemStyle(SKIP_PROPS);\n el.useStyle(itemStyle);\n el.style.strokeNoScale = true;\n el.style.fill = color;\n el.style.stroke = borderColor;\n el.__simpleBox = isSimpleBox;\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\nvar LargeBoxPath = Path.extend({\n type: 'largeCandlestickBox',\n shape: {},\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\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 } 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 var elP = new LargeBoxPath({\n shape: {\n points: largePoints\n },\n __sign: 1\n });\n group.add(elP);\n var elN = new LargeBoxPath({\n shape: {\n points: largePoints\n },\n __sign: -1\n });\n group.add(elN);\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) || data.getVisual('color' + suffix); // Color must be excluded.\n // Because symbol provide setColor individually to set fill and stroke\n\n var itemStyle = seriesModel.getModel(NORMAL_ITEM_STYLE_PATH).getItemStyle(SKIP_PROPS);\n el.useStyle(itemStyle);\n el.style.fill = null;\n el.style.stroke = borderColor; // No different\n // el.style.lineWidth = .5;\n}\n\nvar _default = CandlestickView;\nmodule.exports = _default;","var zrUtil = require(\"../core/util\");\n\nvar Style = require(\"./Style\");\n\nvar Element = require(\"../Element\");\n\nvar RectText = require(\"./mixin/RectText\");\n\n/**\n * Base class of all displayable graphic objects\n * @module zrender/graphic/Displayable\n */\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 opts = opts || {};\n Element.call(this, opts); // Extend properties\n\n for (var name in opts) {\n if (opts.hasOwnProperty(name) && name !== 'style') {\n this[name] = opts[name];\n }\n }\n /**\n * @type {module:zrender/graphic/Style}\n */\n\n\n this.style = new Style(opts.style, this);\n this._rect = null; // 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\n this.__clipPaths = null; // FIXME Stateful must be mixined after style is setted\n // Stateful.call(this, opts);\n}\n\nDisplayable.prototype = {\n constructor: Displayable,\n type: 'displayable',\n\n /**\n * Dirty flag. From which painter will determine if this displayable object needs brush.\n * @name module:zrender/graphic/Displayable#__dirty\n * @type {boolean}\n */\n __dirty: true,\n\n /**\n * Whether the displayable object is visible. when it is true, the displayable object\n * is not drawn, but the mouse event can still trigger the object.\n * @name module:/zrender/graphic/Displayable#invisible\n * @type {boolean}\n * @default false\n */\n invisible: false,\n\n /**\n * @name module:/zrender/graphic/Displayable#z\n * @type {number}\n * @default 0\n */\n z: 0,\n\n /**\n * @name module:/zrender/graphic/Displayable#z\n * @type {number}\n * @default 0\n */\n z2: 0,\n\n /**\n * The z level determines the displayable object can be drawn in which layer canvas.\n * @name module:/zrender/graphic/Displayable#zlevel\n * @type {number}\n * @default 0\n */\n zlevel: 0,\n\n /**\n * Whether it can be dragged.\n * @name module:/zrender/graphic/Displayable#draggable\n * @type {boolean}\n * @default false\n */\n draggable: false,\n\n /**\n * Whether is it dragging.\n * @name module:/zrender/graphic/Displayable#draggable\n * @type {boolean}\n * @default false\n */\n dragging: false,\n\n /**\n * Whether to respond to mouse events.\n * @name module:/zrender/graphic/Displayable#silent\n * @type {boolean}\n * @default false\n */\n silent: false,\n\n /**\n * If enable culling\n * @type {boolean}\n * @default false\n */\n culling: false,\n\n /**\n * Mouse cursor when hovered\n * @name module:/zrender/graphic/Displayable#cursor\n * @type {string}\n */\n cursor: 'pointer',\n\n /**\n * If hover area is bounding rect\n * @name module:/zrender/graphic/Displayable#rectHover\n * @type {string}\n */\n rectHover: false,\n\n /**\n * Render the element progressively when the value >= 0,\n * usefull for large data.\n * @type {boolean}\n */\n progressive: false,\n\n /**\n * @type {boolean}\n */\n incremental: false,\n\n /**\n * Scale ratio for global scale.\n * @type {boolean}\n */\n globalScaleRatio: 1,\n beforeBrush: function (ctx) {},\n afterBrush: function (ctx) {},\n\n /**\n * Graphic drawing method.\n * @param {CanvasRenderingContext2D} ctx\n */\n // Interface\n brush: function (ctx, prevEl) {},\n\n /**\n * Get the minimum bounding box.\n * @return {module:zrender/core/BoundingRect}\n */\n // Interface\n getBoundingRect: function () {},\n\n /**\n * If displayable element contain coord x, y\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\n contain: function (x, y) {\n return this.rectContain(x, y);\n },\n\n /**\n * @param {Function} cb\n * @param {} context\n */\n traverse: function (cb, context) {\n cb.call(context, this);\n },\n\n /**\n * If bounding rect of element contain coord x, y\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\n rectContain: function (x, y) {\n var coord = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n return rect.contain(coord[0], coord[1]);\n },\n\n /**\n * Mark displayable element dirty and refresh next frame\n */\n dirty: function () {\n this.__dirty = this.__dirtyText = true;\n this._rect = null;\n this.__zr && this.__zr.refresh();\n },\n\n /**\n * If displayable object binded any event\n * @return {boolean}\n */\n // TODO, events bound by bind\n // isSilent: function () {\n // return !(\n // this.hoverable || this.draggable\n // || this.onmousemove || this.onmouseover || this.onmouseout\n // || this.onmousedown || this.onmouseup || this.onclick\n // || this.ondragenter || this.ondragover || this.ondragleave\n // || this.ondrop\n // );\n // },\n\n /**\n * Alias for animate('style')\n * @param {boolean} loop\n */\n animateStyle: function (loop) {\n return this.animate('style', loop);\n },\n attrKV: function (key, value) {\n if (key !== 'style') {\n Element.prototype.attrKV.call(this, key, value);\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};\nzrUtil.inherits(Displayable, Element);\nzrUtil.mixin(Displayable, RectText); // zrUtil.mixin(Displayable, Stateful);\n\nvar _default = Displayable;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar ChartView = require(\"../../view/Chart\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {module:echarts/model/Series} seriesModel\n * @param {boolean} hasAnimation\n * @inner\n */\nfunction updateDataSelected(uid, seriesModel, hasAnimation, api) {\n var data = seriesModel.getData();\n var dataIndex = this.dataIndex;\n var name = data.getName(dataIndex);\n var selectedOffset = seriesModel.get('selectedOffset');\n api.dispatchAction({\n type: 'pieToggleSelect',\n from: uid,\n name: name,\n seriesId: seriesModel.id\n });\n data.each(function (idx) {\n toggleItemSelected(data.getItemGraphicEl(idx), data.getItemLayout(idx), seriesModel.isSelected(data.getName(idx)), selectedOffset, hasAnimation);\n });\n}\n/**\n * @param {module:zrender/graphic/Sector} el\n * @param {Object} layout\n * @param {boolean} isSelected\n * @param {number} selectedOffset\n * @param {boolean} hasAnimation\n * @inner\n */\n\n\nfunction toggleItemSelected(el, layout, isSelected, selectedOffset, hasAnimation) {\n var midAngle = (layout.startAngle + layout.endAngle) / 2;\n var dx = Math.cos(midAngle);\n var dy = Math.sin(midAngle);\n var offset = isSelected ? selectedOffset : 0;\n var position = [dx * offset, dy * offset];\n hasAnimation // animateTo will stop revious animation like update transition\n ? el.animate().when(200, {\n position: position\n }).start('bounceOut') : el.attr('position', position);\n}\n/**\n * Piece of pie including Sector, Label, LabelLine\n * @constructor\n * @extends {module:zrender/graphic/Group}\n */\n\n\nfunction PiePiece(data, idx) {\n graphic.Group.call(this);\n var sector = new graphic.Sector({\n z2: 2\n });\n var polyline = new graphic.Polyline();\n var text = new graphic.Text();\n this.add(sector);\n this.add(polyline);\n this.add(text);\n this.updateData(data, idx, true);\n}\n\nvar piePieceProto = PiePiece.prototype;\n\npiePieceProto.updateData = function (data, idx, firstCreate) {\n var sector = this.childAt(0);\n var labelLine = this.childAt(1);\n var labelText = this.childAt(2);\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var layout = data.getItemLayout(idx);\n var sectorShape = zrUtil.extend({}, layout);\n sectorShape.label = null;\n var animationTypeUpdate = seriesModel.getShallow('animationTypeUpdate');\n\n if (firstCreate) {\n sector.setShape(sectorShape);\n var animationType = seriesModel.getShallow('animationType');\n\n if (animationType === 'scale') {\n sector.shape.r = layout.r0;\n graphic.initProps(sector, {\n shape: {\n r: layout.r\n }\n }, seriesModel, idx);\n } // Expansion\n else {\n sector.shape.endAngle = layout.startAngle;\n graphic.updateProps(sector, {\n shape: {\n endAngle: layout.endAngle\n }\n }, seriesModel, idx);\n }\n } else {\n if (animationTypeUpdate === 'expansion') {\n // Sectors are set to be target shape and an overlaying clipPath is used for animation\n sector.setShape(sectorShape);\n } else {\n // Transition animation from the old shape\n graphic.updateProps(sector, {\n shape: sectorShape\n }, seriesModel, idx);\n }\n } // Update common style\n\n\n var visualColor = data.getItemVisual(idx, 'color');\n sector.useStyle(zrUtil.defaults({\n lineJoin: 'bevel',\n fill: visualColor\n }, itemModel.getModel('itemStyle').getItemStyle()));\n sector.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n var cursorStyle = itemModel.getShallow('cursor');\n cursorStyle && sector.attr('cursor', cursorStyle); // Toggle selected\n\n toggleItemSelected(this, data.getItemLayout(idx), seriesModel.isSelected(data.getName(idx)), seriesModel.get('selectedOffset'), seriesModel.get('animation')); // Label and text animation should be applied only for transition type animation when update\n\n var withAnimation = !firstCreate && animationTypeUpdate === 'transition';\n\n this._updateLabel(data, idx, withAnimation);\n\n this.highDownOnUpdate = !seriesModel.get('silent') ? function (fromState, toState) {\n var hasAnimation = seriesModel.isAnimationEnabled() && itemModel.get('hoverAnimation');\n\n if (toState === 'emphasis') {\n labelLine.ignore = labelLine.hoverIgnore;\n labelText.ignore = labelText.hoverIgnore; // Sector may has animation of updating data. Force to move to the last frame\n // Or it may stopped on the wrong shape\n\n if (hasAnimation) {\n sector.stopAnimation(true);\n sector.animateTo({\n shape: {\n r: layout.r + seriesModel.get('hoverOffset')\n }\n }, 300, 'elasticOut');\n }\n } else {\n labelLine.ignore = labelLine.normalIgnore;\n labelText.ignore = labelText.normalIgnore;\n\n if (hasAnimation) {\n sector.stopAnimation(true);\n sector.animateTo({\n shape: {\n r: layout.r\n }\n }, 300, 'elasticOut');\n }\n }\n } : null;\n graphic.setHoverStyle(this);\n};\n\npiePieceProto._updateLabel = function (data, idx, withAnimation) {\n var labelLine = this.childAt(1);\n var labelText = this.childAt(2);\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var layout = data.getItemLayout(idx);\n var labelLayout = layout.label;\n var visualColor = data.getItemVisual(idx, 'color');\n\n if (!labelLayout || isNaN(labelLayout.x) || isNaN(labelLayout.y)) {\n labelText.ignore = labelText.normalIgnore = labelText.hoverIgnore = labelLine.ignore = labelLine.normalIgnore = labelLine.hoverIgnore = true;\n return;\n }\n\n var targetLineShape = {\n points: labelLayout.linePoints || [[labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y]]\n };\n var targetTextStyle = {\n x: labelLayout.x,\n y: labelLayout.y\n };\n\n if (withAnimation) {\n graphic.updateProps(labelLine, {\n shape: targetLineShape\n }, seriesModel, idx);\n graphic.updateProps(labelText, {\n style: targetTextStyle\n }, seriesModel, idx);\n } else {\n labelLine.attr({\n shape: targetLineShape\n });\n labelText.attr({\n style: targetTextStyle\n });\n }\n\n labelText.attr({\n rotation: labelLayout.rotation,\n origin: [labelLayout.x, labelLayout.y],\n z2: 10\n });\n var labelModel = itemModel.getModel('label');\n var labelHoverModel = itemModel.getModel('emphasis.label');\n var labelLineModel = itemModel.getModel('labelLine');\n var labelLineHoverModel = itemModel.getModel('emphasis.labelLine');\n var visualColor = data.getItemVisual(idx, 'color');\n graphic.setLabelStyle(labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel, {\n labelFetcher: data.hostModel,\n labelDataIndex: idx,\n defaultText: labelLayout.text,\n autoColor: visualColor,\n useInsideStyle: !!labelLayout.inside\n }, {\n textAlign: labelLayout.textAlign,\n textVerticalAlign: labelLayout.verticalAlign,\n opacity: data.getItemVisual(idx, 'opacity')\n });\n labelText.ignore = labelText.normalIgnore = !labelModel.get('show');\n labelText.hoverIgnore = !labelHoverModel.get('show');\n labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show');\n labelLine.hoverIgnore = !labelLineHoverModel.get('show'); // Default use item visual color\n\n labelLine.setStyle({\n stroke: visualColor,\n opacity: data.getItemVisual(idx, 'opacity')\n });\n labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle());\n labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();\n var smooth = labelLineModel.get('smooth');\n\n if (smooth && smooth === true) {\n smooth = 0.4;\n }\n\n labelLine.setShape({\n smooth: smooth\n });\n};\n\nzrUtil.inherits(PiePiece, graphic.Group); // Pie view\n\nvar PieView = ChartView.extend({\n type: 'pie',\n init: function () {\n var sectorGroup = new graphic.Group();\n this._sectorGroup = sectorGroup;\n },\n render: function (seriesModel, ecModel, api, payload) {\n if (payload && payload.from === this.uid) {\n return;\n }\n\n var data = seriesModel.getData();\n var oldData = this._data;\n var group = this.group;\n var hasAnimation = ecModel.get('animation');\n var isFirstRender = !oldData;\n var animationType = seriesModel.get('animationType');\n var animationTypeUpdate = seriesModel.get('animationTypeUpdate');\n var onSectorClick = zrUtil.curry(updateDataSelected, this.uid, seriesModel, hasAnimation, api);\n var selectedMode = seriesModel.get('selectedMode');\n data.diff(oldData).add(function (idx) {\n var piePiece = new PiePiece(data, idx); // Default expansion animation\n\n if (isFirstRender && animationType !== 'scale') {\n piePiece.eachChild(function (child) {\n child.stopAnimation(true);\n });\n }\n\n selectedMode && piePiece.on('click', onSectorClick);\n data.setItemGraphicEl(idx, piePiece);\n group.add(piePiece);\n }).update(function (newIdx, oldIdx) {\n var piePiece = oldData.getItemGraphicEl(oldIdx);\n\n if (!isFirstRender && animationTypeUpdate !== 'transition') {\n piePiece.eachChild(function (child) {\n child.stopAnimation(true);\n });\n }\n\n piePiece.updateData(data, newIdx);\n piePiece.off('click');\n selectedMode && piePiece.on('click', onSectorClick);\n group.add(piePiece);\n data.setItemGraphicEl(newIdx, piePiece);\n }).remove(function (idx) {\n var piePiece = oldData.getItemGraphicEl(idx);\n group.remove(piePiece);\n }).execute();\n\n if (hasAnimation && data.count() > 0 && (isFirstRender ? animationType !== 'scale' : animationTypeUpdate !== 'transition')) {\n var shape = data.getItemLayout(0);\n\n for (var s = 1; isNaN(shape.startAngle) && s < data.count(); ++s) {\n shape = data.getItemLayout(s);\n }\n\n var r = Math.max(api.getWidth(), api.getHeight()) / 2;\n var removeClipPath = zrUtil.bind(group.removeClipPath, group);\n group.setClipPath(this._createClipPath(shape.cx, shape.cy, r, shape.startAngle, shape.clockwise, removeClipPath, seriesModel, isFirstRender));\n } else {\n // clipPath is used in first-time animation, so remove it when otherwise. See: #8994\n group.removeClipPath();\n }\n\n this._data = data;\n },\n dispose: function () {},\n _createClipPath: function (cx, cy, r, startAngle, clockwise, cb, seriesModel, isFirstRender) {\n var clipPath = new graphic.Sector({\n shape: {\n cx: cx,\n cy: cy,\n r0: 0,\n r: r,\n startAngle: startAngle,\n endAngle: startAngle,\n clockwise: clockwise\n }\n });\n var initOrUpdate = isFirstRender ? graphic.initProps : graphic.updateProps;\n initOrUpdate(clipPath, {\n shape: {\n endAngle: startAngle + (clockwise ? 1 : -1) * Math.PI * 2\n }\n }, seriesModel, cb);\n return clipPath;\n },\n\n /**\n * @implement\n */\n containPoint: function (point, seriesModel) {\n var data = seriesModel.getData();\n var itemLayout = data.getItemLayout(0);\n\n if (itemLayout) {\n var dx = point[0] - itemLayout.cx;\n var dy = point[1] - itemLayout.cy;\n var radius = Math.sqrt(dx * dx + dy * dy);\n return radius <= itemLayout.r && radius >= itemLayout.r0;\n }\n }\n});\nvar _default = PieView;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 vec2 = require(\"zrender/lib/core/vector\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction simpleLayout(seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.type !== 'view') {\n return;\n }\n\n var graph = seriesModel.getGraph();\n graph.eachNode(function (node) {\n var model = node.getModel();\n node.setLayout([+model.get('x'), +model.get('y')]);\n });\n simpleLayoutEdge(graph);\n}\n\nfunction 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\n if (+curveness) {\n points.push([(p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness, (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * curveness]);\n }\n\n edge.setLayout(points);\n });\n}\n\nexports.simpleLayout = simpleLayout;\nexports.simpleLayoutEdge = simpleLayoutEdge;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Polar = require(\"./Polar\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar _axisHelper = require(\"../../coord/axisHelper\");\n\nvar createScaleByModel = _axisHelper.createScaleByModel;\nvar niceScaleExtent = _axisHelper.niceScaleExtent;\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\nvar _dataStackHelper = require(\"../../data/helper/dataStackHelper\");\n\nvar getStackedDimension = _dataStackHelper.getStackedDimension;\n\nrequire(\"./PolarModel\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO Axis scale\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 polar.cx = parsePercent(center[0], width);\n polar.cy = parsePercent(center[1], height);\n var radiusAxis = polar.getRadiusAxis();\n var size = Math.min(width, height) / 2;\n var radius = polarModel.get('radius');\n\n if (radius == null) {\n radius = [0, '100%'];\n } else if (!zrUtil.isArray(radius)) {\n // r0 = 0\n radius = [0, radius];\n }\n\n radius = [parsePercent(radius[0], size), parsePercent(radius[1], size)];\n radiusAxis.inverse ? radiusAxis.setExtent(radius[1], radius[0]) : radiusAxis.setExtent(radius[0], radius[1]);\n}\n/**\n * Update polar\n */\n\n\nfunction updatePolarScale(ecModel, api) {\n var polar = this;\n var angleAxis = polar.getAngleAxis();\n var radiusAxis = polar.getRadiusAxis(); // Reset scale\n\n angleAxis.scale.setExtent(Infinity, -Infinity);\n radiusAxis.scale.setExtent(Infinity, -Infinity);\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(data, getStackedDimension(data, dim));\n });\n zrUtil.each(data.mapDimension('angle', true), function (dim) {\n angleAxis.scale.unionExtentFromData(data, getStackedDimension(data, dim));\n });\n }\n });\n niceScaleExtent(angleAxis.scale, angleAxis.model);\n niceScaleExtent(radiusAxis.scale, radiusAxis.model); // Fix extent of category angle axis\n\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 * 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 */\n\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 } // Inject axis instance\n\n\n axisModel.axis = axis;\n axis.model = axisModel;\n}\n\nvar polarCreator = {\n dimensions: Polar.prototype.dimensions,\n create: function (ecModel, api) {\n var polarList = [];\n ecModel.eachComponent('polar', function (polarModel, idx) {\n var polar = new Polar(idx); // Inject resize and update method\n\n polar.update = updatePolarScale;\n var radiusAxis = polar.getRadiusAxis();\n var angleAxis = polar.getAngleAxis();\n var radiusAxisModel = polarModel.findAxisModel('radiusAxis');\n var angleAxisModel = polarModel.findAxisModel('angleAxis');\n setAxis(radiusAxis, radiusAxisModel);\n setAxis(angleAxis, angleAxisModel);\n resizePolar(polar, polarModel, api);\n polarList.push(polar);\n polarModel.coordinateSystem = polar;\n polar.model = polarModel;\n }); // Inject coordinateSystem to series\n\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 seriesModel.coordinateSystem = polarModel.coordinateSystem;\n }\n });\n return polarList;\n }\n};\nCoordinateSystem.register('polar', polarCreator);","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineProperties = require('../internals/object-define-properties');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\n$({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {\n defineProperties: defineProperties\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 zrUtil = require(\"zrender/lib/core/util\");\n\nvar _number = require(\"../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar _dataStackHelper = require(\"../data/helper/dataStackHelper\");\n\nvar isDimensionStacked = _dataStackHelper.isDimensionStacked;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction getSeriesStackId(seriesModel) {\n return seriesModel.get('stack') || '__ec_stack_' + seriesModel.seriesIndex;\n}\n\nfunction getAxisKey(polar, axis) {\n return axis.dim + polar.model.componentIndex;\n}\n/**\n * @param {string} seriesType\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\n\n\nfunction barLayoutPolar(seriesType, ecModel, api) {\n var lastStackCoords = {};\n var barWidthAndOffset = calRadialBar(zrUtil.filter(ecModel.getSeriesByType(seriesType), function (seriesModel) {\n return !ecModel.isSeriesFiltered(seriesModel) && seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'polar';\n }));\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\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 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 var cx = seriesModel.coordinateSystem.cx;\n var cy = seriesModel.coordinateSystem.cy;\n var barMinHeight = seriesModel.get('barMinHeight') || 0;\n var barMinAngle = seriesModel.get('barMinAngle') || 0;\n lastStackCoords[stackId] = lastStackCoords[stackId] || [];\n var valueDim = data.mapDimension(valueAxis.dim);\n var baseDim = data.mapDimension(baseAxis.dim);\n var stacked = isDimensionStacked(data, valueDim\n /*, baseDim*/\n );\n var clampLayout = baseAxis.dim !== 'radius' || !seriesModel.get('roundCap', true);\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 var sign = value >= 0 ? 'p' : 'n';\n var baseCoord = valueAxisStart; // Because of the barMinHeight, we can not use the value in\n // stackResultDimension directly.\n // Only ordinal axis can be stacked.\n\n if (stacked) {\n if (!lastStackCoords[stackId][baseValue]) {\n lastStackCoords[stackId][baseValue] = {\n p: valueAxisStart,\n // Positive stack\n n: valueAxisStart // Negative stack\n\n };\n } // Should also consider #4243\n\n\n baseCoord = lastStackCoords[stackId][baseValue][sign];\n }\n\n var r0;\n var r;\n var startAngle;\n var endAngle; // radial sector\n\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 stacked && (lastStackCoords[stackId][baseValue][sign] = r);\n } // tangential sector\n else {\n var angleSpan = valueAxis.dataToAngle(value, clampLayout) - valueAxisStart;\n var radius = baseAxis.dataToRadius(baseValue);\n\n if (Math.abs(angleSpan) < barMinAngle) {\n angleSpan = (angleSpan < 0 ? -1 : 1) * barMinAngle;\n }\n\n r0 = radius + columnOffset;\n r = r0 + columnWidth;\n startAngle = baseCoord;\n endAngle = baseCoord + angleSpan; // 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\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 }, this);\n}\n/**\n * Calculate bar width and offset for radial bar charts\n */\n\n\nfunction calRadialBar(barSeries, api) {\n // Columns info on each category axis. Key is polar name\n var columnsMap = {};\n zrUtil.each(barSeries, function (seriesModel, idx) {\n var data = seriesModel.getData();\n var polar = seriesModel.coordinateSystem;\n var baseAxis = polar.getBaseAxis();\n var axisKey = getAxisKey(polar, baseAxis);\n var axisExtent = baseAxis.getExtent();\n var bandWidth = baseAxis.type === 'category' ? baseAxis.getBandWidth() : Math.abs(axisExtent[1] - axisExtent[0]) / data.count();\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 var stackId = getSeriesStackId(seriesModel);\n\n if (!stacks[stackId]) {\n columnsOnAxis.autoWidthCount++;\n }\n\n stacks[stackId] = stacks[stackId] || {\n width: 0,\n maxWidth: 0\n };\n var barWidth = parsePercent(seriesModel.get('barWidth'), bandWidth);\n var barMaxWidth = parsePercent(seriesModel.get('barMaxWidth'), bandWidth);\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 var result = {};\n zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {\n result[coordSysName] = {};\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 var remainedWidth = columnsOnAxis.remainedWidth;\n var autoWidthCount = columnsOnAxis.autoWidthCount;\n var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0); // Find if any auto calculated bar exceeded maxBarWidth\n\n zrUtil.each(stacks, function (column, stack) {\n var maxWidth = column.maxWidth;\n\n if (maxWidth && maxWidth < autoWidth) {\n maxWidth = Math.min(maxWidth, remainedWidth);\n\n if (column.width) {\n maxWidth = Math.min(maxWidth, column.width);\n }\n\n remainedWidth -= maxWidth;\n column.width = maxWidth;\n autoWidthCount--;\n }\n }); // Recalculate width again\n\n autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0);\n var widthSum = 0;\n var lastColumn;\n zrUtil.each(stacks, function (column, idx) {\n if (!column.width) {\n column.width = autoWidth;\n }\n\n lastColumn = column;\n widthSum += column.width * (1 + barGapPercent);\n });\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 offset += column.width * (1 + barGapPercent);\n });\n });\n return result;\n}\n\nvar _default = barLayoutPolar;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar Path = require(\"zrender/lib/graphic/Path\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = Path.extend({\n type: 'echartsGaugePointer',\n shape: {\n angle: 0,\n width: 10,\n r: 10,\n x: 0,\n y: 0\n },\n buildPath: function (ctx, shape) {\n var mathCos = Math.cos;\n var mathSin = Math.sin;\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 angle = shape.angle - Math.PI / 2;\n ctx.moveTo(x, y);\n ctx.lineTo(shape.x + mathCos(angle) * width, shape.y + mathSin(angle) * width);\n ctx.lineTo(shape.x + mathCos(shape.angle) * r, shape.y + mathSin(shape.angle) * r);\n ctx.lineTo(shape.x - mathCos(angle) * width, shape.y - mathSin(angle) * width);\n ctx.lineTo(x, y);\n return;\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar Model = require(\"../../model/Model\");\n\nvar selectableMixin = require(\"../../component/helper/selectableMixin\");\n\nvar geoCreator = require(\"./geoCreator\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar GeoModel = ComponentModel.extend({\n type: 'geo',\n\n /**\n * @type {module:echarts/coord/geo/Geo}\n */\n coordinateSystem: null,\n layoutMode: 'box',\n init: function (option) {\n ComponentModel.prototype.init.apply(this, arguments); // Default label emphasis `show`\n\n modelUtil.defaultEmphasis(option, 'label', ['show']);\n },\n optionUpdated: function () {\n var option = this.option;\n var self = this;\n option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap);\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\n return optionModelMap;\n }, zrUtil.createHashMap());\n this.updateSelectedMap(option.regions);\n },\n defaultOption: {\n zlevel: 0,\n z: 0,\n show: true,\n left: 'center',\n top: 'center',\n // width:,\n // height:,\n // right\n // bottom\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 ///// 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 silent: false,\n // Map type\n map: '',\n // Define left-top, right-bottom coords to control view\n // For example, [ [180, 90], [-180, -90] ]\n boundingCoords: null,\n // Default on center of map\n center: null,\n zoom: 1,\n scaleLimit: null,\n // selectedMode: false\n label: {\n show: false,\n color: '#000'\n },\n itemStyle: {\n // color: 各异,\n borderWidth: 0.5,\n borderColor: '#444',\n color: '#eee'\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 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('label' + (status === 'normal' ? '.' : status + '.') + 'formatter');\n var params = {\n name: name\n };\n\n if (typeof formatter === 'function') {\n params.status = status;\n return formatter(params);\n } else if (typeof formatter === 'string') {\n return formatter.replace('{a}', name != null ? name : '');\n }\n },\n setZoom: function (zoom) {\n this.option.zoom = zoom;\n },\n setCenter: function (center) {\n this.option.center = center;\n }\n});\nzrUtil.mixin(GeoModel, selectableMixin);\nvar _default = GeoModel;\nmodule.exports = _default;","/**\n * Event Mixin\n * @module zrender/mixin/Eventful\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n * pissang (https://www.github.com/pissang)\n */\nvar arrySlice = Array.prototype.slice;\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] Called after all handlers called.\n * param: {string} eventType\n */\n\nvar Eventful = function (eventProcessor) {\n this._$handlers = {};\n this._$eventProcessor = eventProcessor;\n};\n\nEventful.prototype = {\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 * If no `event` input, \"off\" all listeners.\n * @param {Function} [handler] The event handler.\n * If no `handler` input, \"off\" all listeners of the `event`.\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\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\n _h[event] = newList;\n }\n\n if (_h[event] && _h[event].length === 0) {\n delete _h[event];\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\n for (var i = 0; i < len;) {\n var hItem = _h[i];\n\n if (eventProcessor && eventProcessor.filter && hItem.query != null && !eventProcessor.filter(type, hItem.query)) {\n i++;\n continue;\n } // Optimize advise from backbone\n\n\n switch (argLen) {\n case 1:\n hItem.h.call(hItem.ctx);\n break;\n\n case 2:\n hItem.h.call(hItem.ctx, args[1]);\n break;\n\n case 3:\n hItem.h.call(hItem.ctx, args[1], args[2]);\n break;\n\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\n len--;\n } else {\n i++;\n }\n }\n }\n\n eventProcessor && eventProcessor.afterTrigger && eventProcessor.afterTrigger(type);\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\n var ctx = args[args.length - 1];\n var len = _h.length;\n\n for (var i = 0; i < len;) {\n var hItem = _h[i];\n\n if (eventProcessor && eventProcessor.filter && hItem.query != null && !eventProcessor.filter(type, hItem.query)) {\n i++;\n continue;\n } // Optimize advise from backbone\n\n\n switch (argLen) {\n case 1:\n hItem.h.call(ctx);\n break;\n\n case 2:\n hItem.h.call(ctx, args[1]);\n break;\n\n case 3:\n hItem.h.call(ctx, args[1], args[2]);\n break;\n\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\n len--;\n } else {\n i++;\n }\n }\n }\n\n eventProcessor && eventProcessor.afterTrigger && eventProcessor.afterTrigger(type);\n return this;\n }\n};\n\nfunction normalizeQuery(host, query) {\n var eventProcessor = host._$eventProcessor;\n\n if (query != null && eventProcessor && eventProcessor.normalizeQuery) {\n query = eventProcessor.normalizeQuery(query);\n }\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 var lastIndex = _h[event].length - 1;\n var lastWrap = _h[event][lastIndex];\n lastWrap && lastWrap.callAtLast ? _h[event].splice(lastIndex, 0, wrap) : _h[event].push(wrap);\n return eventful;\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/**\n * @event module:zrender/mixin/Eventful#onmouseover\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmouseout\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmousemove\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmousewheel\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmousedown\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#onmouseup\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondrag\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragstart\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragend\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragenter\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragleave\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondragover\n * @type {Function}\n * @default null\n */\n\n/**\n * @event module:zrender/mixin/Eventful#ondrop\n * @type {Function}\n * @default null\n */\n\n\nvar _default = Eventful;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// import * as axisHelper from './axisHelper';\nvar _default = {\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 ? option.rangeStart : option.min;\n\n if (this.axis && min != null && min !== 'dataMin' && typeof min !== 'function' && !zrUtil.eqNaN(min)) {\n min = this.axis.scale.parse(min);\n }\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 ? option.rangeEnd : option.max;\n\n if (this.axis && max != null && max !== 'dataMax' && typeof max !== 'function' && !zrUtil.eqNaN(max)) {\n max = this.axis.scale.parse(max);\n }\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 ? 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};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar coordinateSystemCreators = {};\n\nfunction CoordinateSystemManager() {\n this._coordinateSystems = [];\n}\n\nCoordinateSystemManager.prototype = {\n constructor: CoordinateSystemManager,\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 this._coordinateSystems = coordinateSystems;\n },\n update: function (ecModel, api) {\n zrUtil.each(this._coordinateSystems, function (coordSys) {\n coordSys.update && coordSys.update(ecModel, api);\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\nvar _default = CoordinateSystemManager;\nmodule.exports = _default;","var curve = require(\"./curve\");\n\nvar vec2 = require(\"./vector\");\n\nvar bbox = require(\"./bbox\");\n\nvar BoundingRect = require(\"./BoundingRect\");\n\nvar _config = require(\"../config\");\n\nvar dpr = _config.devicePixelRatio;\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// TODO getTotalLength, getPointAtLength\n\n/* global Float32Array */\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}; // 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;\nvar hasTypedArray = typeof Float32Array !== 'undefined';\n/**\n * @alias module:zrender/core/PathProxy\n * @constructor\n */\n\nvar PathProxy = function (notSaveData) {\n this._saveData = !(notSaveData || false);\n\n if (this._saveData) {\n /**\n * Path data. Stored as flat array\n * @type {Array.}\n */\n this.data = [];\n }\n\n this._ctx = null;\n};\n/**\n * 快速计算Path包围盒(并不是最小包围盒)\n * @return {Object}\n */\n\n\nPathProxy.prototype = {\n constructor: PathProxy,\n _xi: 0,\n _yi: 0,\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 _len: 0,\n _lineDash: null,\n _dashOffset: 0,\n _dashIdx: 0,\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 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 this._ctx = ctx;\n ctx && ctx.beginPath();\n ctx && (this.dpr = ctx.dpr); // Reset\n\n if (this._saveData) {\n this._len = 0;\n }\n\n if (this._lineDash) {\n this._lineDash = null;\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); // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用\n // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。\n // 有可能在 beginPath 之后直接调用 lineTo,这时候 x0, y0 需要\n // 在 lineTo 方法中记录,这里先不考虑这种情况,dashed line 也只在 IE10- 中不支持\n\n this._x0 = x;\n this._y0 = y;\n this._xi = x;\n this._yi = y;\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 || mathAbs(y - this._yi) > this._uy // Force draw the first segment\n || this._len < 5;\n this.addData(CMD.L, x, y);\n\n if (this._ctx && exceedUnit) {\n this._needsDash() ? this._dashedLineTo(x, y) : this._ctx.lineTo(x, y);\n }\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\n if (this._ctx) {\n this._needsDash() ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3) : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\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\n if (this._ctx) {\n this._needsDash() ? this._dashedQuadraticTo(x1, y1, x2, y2) : this._ctx.quadraticCurveTo(x1, y1, x2, y2);\n }\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(CMD.A, cx, cy, r, r, startAngle, endAngle - startAngle, 0, anticlockwise ? 0 : 1);\n this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n this._xi = mathCos(endAngle) * r + cx;\n this._yi = mathSin(endAngle) * r + cy;\n return this;\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\n return this;\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 var ctx = this._ctx;\n var x0 = this._x0;\n var y0 = this._y0;\n\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 this._dashIdx = 0;\n var lineDashSum = 0;\n\n for (var i = 0; i < lineDash.length; i++) {\n lineDashSum += lineDash[i];\n }\n\n this._dashSum = lineDashSum;\n }\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 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.} path\n */\n appendPath: function (path) {\n if (!(path instanceof Array)) {\n path = [path];\n }\n\n var len = path.length;\n var appendSize = 0;\n var offset = this._len;\n\n for (var i = 0; i < len; i++) {\n appendSize += path[i].len();\n }\n\n if (hasTypedArray && this.data instanceof Float32Array) {\n this.data = new Float32Array(offset + appendSize);\n }\n\n for (var i = 0; i < len; i++) {\n var appendPathData = path[i].data;\n\n for (var k = 0; k < appendPathData.length; k++) {\n this.data[offset++] = appendPathData[k];\n }\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\n if (this._len + arguments.length > data.length) {\n // 因为之前的数组已经转换成静态的 Float32Array\n // 所以不够用时需要扩展一个新的动态数组\n this._expandData();\n\n data = this.data;\n }\n\n for (var i = 0; i < arguments.length; i++) {\n data[this._len++] = arguments[i];\n }\n\n this._prevCmd = cmd;\n },\n _expandData: function () {\n // Only if data is Float32Array\n if (!(this.data instanceof Array)) {\n var newData = [];\n\n for (var i = 0; i < this._len; i++) {\n newData[i] = this.data[i];\n }\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 _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 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\n offset %= dashSum;\n x -= offset * dx;\n y -= offset * dy;\n\n while (dx > 0 && x <= x1 || dx < 0 && x >= x1 || 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; // Skip positive offset\n\n if (dx > 0 && x < x0 || dx < 0 && x > x0 || dy > 0 && y < y0 || dy < 0 && y > y0) {\n continue;\n }\n\n ctx[idx % 2 ? 'moveTo' : 'lineTo'](dx >= 0 ? mathMin(x, x1) : mathMax(x, x1), dy >= 0 ? mathMin(y, y1) : mathMax(y, y1));\n } // Offset for next lineTo\n\n\n dx = x - x1;\n dy = y - y1;\n this._dashOffset = -mathSqrt(dx * dx + dy * dy);\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 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 var x;\n var y;\n var tmpLen = 0;\n\n if (offset < 0) {\n // Convert to positive offset\n offset = dashSum + offset;\n }\n\n offset %= dashSum; // Bezier approx length\n\n for (t = 0; t < 1; t += 0.1) {\n dx = cubicAt(x0, x1, x2, x3, t + 0.1) - cubicAt(x0, x1, x2, x3, t);\n dy = cubicAt(y0, y1, y2, y3, t + 0.1) - cubicAt(y0, y1, y2, y3, t);\n bezierLen += mathSqrt(dx * dx + dy * dy);\n } // Find idx after add offset\n\n\n for (; idx < nDash; idx++) {\n tmpLen += lineDash[idx];\n\n if (tmpLen > offset) {\n break;\n }\n }\n\n t = (tmpLen - offset) / bezierLen;\n\n while (t <= 1) {\n x = cubicAt(x0, x1, x2, x3, t);\n y = cubicAt(y0, y1, y2, y3, t); // Use line to approximate dashed bezier\n // Bad result if dash is long\n\n idx % 2 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);\n t += lineDash[idx] / bezierLen;\n idx = (idx + 1) % nDash;\n } // Finish the last segment and calculate the new offset\n\n\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 _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\n if (data instanceof Array) {\n data.length = this._len;\n\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 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 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\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\n case CMD.C:\n bbox.fromCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n bbox.fromQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var startAngle = data[i++];\n var endAngle = data[i++] + startAngle; // TODO Arc 旋转\n\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(cx, cy, rx, ry, startAngle, endAngle, anticlockwise, min2, max2);\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++]; // Use fromLine\n\n bbox.fromLine(x0, y0, x0 + width, y0 + height, min2, max2);\n break;\n\n case CMD.Z:\n xi = x0;\n yi = y0;\n break;\n } // Union\n\n\n vec2.min(min, min, min2);\n vec2.max(max, max, max2);\n } // No data\n\n\n if (i === 0) {\n min[0] = min[1] = max[0] = max[1] = 0;\n }\n\n return new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\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\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 x0 = xi;\n y0 = yi;\n }\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\n case CMD.L:\n x = d[i++];\n y = d[i++]; // Not draw too small seg between\n\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\n break;\n\n case CMD.C:\n ctx.bezierCurveTo(d[i++], d[i++], d[i++], d[i++], d[i++], d[i++]);\n xi = d[i - 2];\n yi = d[i - 1];\n break;\n\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\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\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 } 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\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n\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\n case CMD.Z:\n ctx.closePath();\n xi = x0;\n yi = y0;\n }\n }\n }\n};\nPathProxy.CMD = CMD;\nvar _default = PathProxy;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar features = {};\n\nfunction register(name, ctor) {\n features[name] = ctor;\n}\n\nfunction get(name) {\n return features[name];\n}\n\nexports.register = register;\nexports.get = get;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 SeriesModel = require(\"../../model/Series\");\n\nvar Tree = require(\"../../data/Tree\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\nvar Model = require(\"../../model/Model\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = SeriesModel.extend({\n type: 'series.tree',\n layoutInfo: null,\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 //create an virtual root\n var root = {\n name: option.name,\n children: option.data\n };\n var leaves = option.leaves || {};\n var leavesModel = new Model(leaves, this, this.ecModel);\n var tree = Tree.createTree(root, this, {}, beforeLink);\n\n function beforeLink(nodeData) {\n nodeData.wrapMethod('getItemModel', function (model, idx) {\n var node = tree.getNodeByDataIndex(idx);\n\n if (!node.children.length || !node.isExpand) {\n model.parentModel = leavesModel;\n }\n\n return model;\n });\n }\n\n var treeDepth = 0;\n tree.eachNode('preorder', function (node) {\n if (node.depth > treeDepth) {\n treeDepth = node.depth;\n }\n });\n var expandAndCollapse = option.expandAndCollapse;\n var expandTreeDepth = expandAndCollapse && option.initialTreeDepth >= 0 ? option.initialTreeDepth : treeDepth;\n tree.root.eachNode('preorder', function (node) {\n var item = node.hostTree.data.getRawDataItem(node.dataIndex); // Add item.collapsed != null, because users can collapse node original in the series.data.\n\n node.isExpand = item && item.collapsed != null ? !item.collapsed : node.depth <= expandTreeDepth;\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\n if (orient === 'horizontal') {\n orient = 'LR';\n } else if (orient === 'vertical') {\n orient = 'TB';\n }\n\n return orient;\n },\n setZoom: function (zoom) {\n this.option.zoom = zoom;\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\n while (node && node !== realRoot) {\n name = node.parentNode.name + '.' + name;\n node = node.parentNode;\n }\n\n return encodeHTML(name + (isNaN(value) || value == null ? '' : ' : ' + value));\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n coordinateSystem: 'view',\n // the position of the whole view\n left: '12%',\n top: '12%',\n right: '12%',\n bottom: '12%',\n // the layout of the tree, two value can be selected, 'orthogonal' or 'radial'\n layout: 'orthogonal',\n // value can be 'polyline'\n edgeShape: 'curve',\n edgeForkPosition: '50%',\n // true | false | 'move' | 'scale', see module:component/helper/RoamController.\n roam: false,\n // Symbol size scale ratio in roam\n nodeScaleRatio: 0.4,\n // Default on center of graph\n center: null,\n zoom: 1,\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 symbol: 'emptyCircle',\n symbolSize: 7,\n expandAndCollapse: true,\n initialTreeDepth: 2,\n lineStyle: {\n color: '#ccc',\n width: 1.5,\n curveness: 0.5\n },\n itemStyle: {\n color: 'lightsteelblue',\n borderColor: '#c23531',\n borderWidth: 1.5\n },\n label: {\n show: true,\n color: '#555'\n },\n leaves: {\n label: {\n show: true\n }\n },\n animationEasing: 'linear',\n animationDuration: 700,\n animationDurationUpdate: 1000\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar numberUtil = require(\"../util/number\");\n\nvar formatUtil = require(\"../util/format\");\n\nvar scaleHelper = require(\"./helper\");\n\nvar IntervalScale = require(\"./Interval\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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* ).\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.\nvar intervalScaleProto = IntervalScale.prototype;\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; // FIXME 公用?\n\nvar bisect = function (a, x, lo, hi) {\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n\n if (a[mid][1] < x) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n return lo;\n};\n/**\n * @alias module:echarts/coord/scale/Time\n * @constructor\n */\n\n\nvar TimeScale = IntervalScale.extend({\n type: 'time',\n\n /**\n * @override\n */\n getLabel: function (val) {\n var stepLvl = this._stepLvl;\n var date = new Date(val);\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; // If extent start and end are same, expand them\n\n if (extent[0] === extent[1]) {\n // Expand extent\n extent[0] -= ONE_DAY;\n extent[1] += ONE_DAY;\n } // If there are no data and extent are [Infinity, -Infinity]\n\n\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); // var extent = this._extent;\n\n var interval = this._interval;\n\n if (!opt.fixMin) {\n extent[0] = numberUtil.round(mathFloor(extent[0] / interval) * interval);\n }\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 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\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 var level = scaleLevels[Math.min(idx, scaleLevelsLen - 1)];\n var interval = level[1]; // Same with interval scale if span is much larger than 1 year\n\n if (level[0] === 'year') {\n var yearSpan = span / interval; // From \"Nice Numbers for Graph Labels\" of Graphic Gems\n // var niceYearSpan = numberUtil.nice(yearSpan, false);\n\n var yearStep = numberUtil.nice(yearSpan / approxTickNum, true);\n interval *= yearStep;\n }\n\n var timezoneOffset = this.getSetting('useUTC') ? 0 : new Date(+extent[0] || +extent[1]).getTimezoneOffset() * 60 * 1000;\n var niceExtent = [Math.round(mathCeil((extent[0] - timezoneOffset) / interval) * interval + timezoneOffset), Math.round(mathFloor((extent[1] - timezoneOffset) / interval) * interval + timezoneOffset)];\n scaleHelper.fixExtent(niceExtent, extent);\n this._stepLvl = level; // Interval will be used in getTicks\n\n this._interval = interval;\n this._niceExtent = niceExtent;\n },\n parse: function (val) {\n // val might be float.\n return +numberUtil.parseDate(val);\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 * This implementation was originally copied from \"d3.js\"\n * \n * with some modifications made for this program.\n * See the license statement at the head of this file.\n */\n\nvar scaleLevels = [// 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 * @param {module:echarts/model/Model}\n * @return {module:echarts/scale/Time}\n */\n\nTimeScale.create = function (model) {\n return new TimeScale({\n useUTC: model.ecModel.get('useUTC')\n });\n};\n\nvar _default = TimeScale;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar createListFromArray = require(\"../helper/createListFromArray\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = SeriesModel.extend({\n type: 'series.line',\n dependencies: ['grid', 'polar'],\n getInitialData: function (option, ecModel) {\n return createListFromArray(this.getSource(), this, {\n useEncodeDefaulter: true\n });\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n hoverAnimation: true,\n // stack: null\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // polarIndex: 0,\n // If clip the overflow value\n clip: true,\n // cursor: null,\n label: {\n position: 'top'\n },\n // itemStyle: {\n // },\n lineStyle: {\n width: 2,\n type: 'solid'\n },\n // areaStyle: {\n // origin of areaStyle. Valid values:\n // `'auto'/null/undefined`: from axisLine to data\n // `'start'`: from min to data\n // `'end'`: from data to max\n // origin: 'auto'\n // },\n // false, 'start', 'end', 'middle'\n step: false,\n // Disabled if step is true\n smooth: false,\n smoothMonotone: null,\n symbol: 'emptyCircle',\n symbolSize: 4,\n symbolRotate: null,\n showSymbol: true,\n // `false`: follow the label interval strategy.\n // `true`: show all symbols.\n // `'auto'`: If possible, show all symbols, otherwise\n // follow the label interval strategy.\n showAllSymbol: 'auto',\n // Whether to connect break point.\n connectNulls: false,\n // Sampling for large data. Can be: 'average', 'max', 'min', 'sum'.\n sampling: 'none',\n animationEasing: 'linear',\n // Disable progressive\n progressive: 0,\n hoverLayerThreshold: Infinity\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Component = require(\"../../model/Component\");\n\nrequire(\"./AxisModel\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = Component.extend({\n type: 'parallel',\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.}\n * @readOnly\n */\n dimensions: null,\n\n /**\n * Coresponding to dimensions.\n * @type {Array.}\n * @readOnly\n */\n parallelAxisIndex: null,\n layoutMode: 'box',\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 layout: 'horizontal',\n // 'horizontal' or 'vertical'\n // FIXME\n // naming?\n axisExpandable: false,\n axisExpandCenter: null,\n axisExpandCount: 0,\n axisExpandWidth: 50,\n // 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',\n // 'mousemove' or 'click'\n parallelAxisDefault: null\n },\n\n /**\n * @override\n */\n init: function () {\n Component.prototype.init.apply(this, arguments);\n this.mergeOption({});\n },\n\n /**\n * @override\n */\n mergeOption: function (newOption) {\n var thisOption = this.option;\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 && ecModel.getComponent('parallel', parallelIndex) === this;\n },\n setAxisExpand: function (opt) {\n zrUtil.each(['axisExpandable', 'axisExpandCenter', 'axisExpandCount', 'axisExpandWidth', 'axisExpandWindow'], function (name) {\n if (opt.hasOwnProperty(name)) {\n this.option[name] = opt[name];\n }\n }, this);\n },\n\n /**\n * @private\n */\n _initDimensions: function () {\n var dimensions = this.dimensions = [];\n var parallelAxisIndex = this.parallelAxisIndex = [];\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 zrUtil.each(axisModels, function (axisModel) {\n dimensions.push('dim' + axisModel.get('dim'));\n parallelAxisIndex.push(axisModel.componentIndex);\n });\n }\n});\n\nmodule.exports = _default;","/**\n * echarts设备环境识别\n *\n * @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。\n * @author firede[firede@firede.us]\n * @desc thanks zepto.\n */\n\n/* global wx */\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,\n // Weixin Application\n canvasSupported: true,\n svgSupported: false,\n touchEventsSupported: true,\n domSupported: false\n };\n} else 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} else 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} else {\n env = detect(navigator.userAgent);\n}\n\nvar _default = env; // 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 = {}; // 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\n var firefox = ua.match(/Firefox\\/([\\d.]+)/); // var safari = webkit && ua.match(/Mobile\\//) && !chrome;\n // var webview = ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome;\n\n var ie = ua.match(/MSIE\\s([\\d.]+)/) // 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); // 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 // if (browser.webkit = !!webkit) browser.version = webkit[1];\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\n if (firefox) {\n browser.firefox = true;\n browser.version = firefox[1];\n } // if (safari && (ua.match(/Safari/) || !!os.ios)) browser.safari = true;\n // if (webview) browser.webview = true;\n\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 } // 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\n\n if (weChat) {\n browser.weChat = true;\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\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 // .\n pointerEventsSupported: // (1) 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 // For example, in iOS 13 Mobile Chromium 78, if the touching behavior starts page\n // scroll, the `pointermove` event can not be fired any more. That will break some\n // features like \"pan horizontally to move something and pan vertically to page scroll\".\n // The horizontal pan probably be interrupted by the casually triggered page scroll.\n // (2) 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 'onpointerdown' in window && (browser.edge || browser.ie && browser.version >= 11),\n // passiveSupported: detectPassiveSupport()\n domSupported: typeof document !== 'undefined'\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar layout = require(\"../../util/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/*\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* ).\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\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 */\nfunction 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 var nodes = [root];\n var node;\n var children;\n\n while (node = nodes.pop()) {\n // jshint ignore:line\n children = node.children;\n\n if (node.isExpand && children.length) {\n var n = children.length;\n\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 * The implementation of this function was originally copied from \"d3.js\"\n * \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 */\n\n\nfunction 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\n if (children.length) {\n executeShifts(node);\n var midPoint = (children[0].hierNode.prelim + children[children.length - 1].hierNode.prelim) / 2;\n\n if (subtreeW) {\n node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW);\n node.hierNode.modifier = node.hierNode.prelim - midPoint;\n } else {\n node.hierNode.prelim = midPoint;\n }\n } else if (subtreeW) {\n node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW);\n }\n\n node.parentNode.hierNode.defaultAncestor = apportion(node, subtreeW, node.parentNode.hierNode.defaultAncestor || siblings[0], separation);\n}\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * \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 */\n\n\nfunction secondWalk(node) {\n var nodeX = node.hierNode.prelim + node.parentNode.hierNode.modifier;\n node.setLayout({\n x: nodeX\n }, true);\n node.hierNode.modifier += node.parentNode.hierNode.modifier;\n}\n\nfunction separation(cb) {\n return arguments.length ? cb : defaultSeparation;\n}\n/**\n * Transform the common coordinate to radial coordinate.\n *\n * @param {number} x\n * @param {number} y\n * @return {Object}\n */\n\n\nfunction 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 * 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 */\n\n\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\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 * \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 */\n\n\nfunction executeShifts(node) {\n var children = node.children;\n var n = children.length;\n var shift = 0;\n var change = 0;\n\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 * The implementation of this function was originally copied from \"d3.js\"\n * \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 */\n\n\nfunction apportion(subtreeV, subtreeW, ancestor, separation) {\n if (subtreeW) {\n var nodeOutRight = subtreeV;\n var nodeInRight = subtreeV;\n var nodeOutLeft = nodeInRight.parentNode.children[0];\n var nodeInLeft = subtreeW;\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 - sumInRight + separation(nodeInLeft, nodeInRight);\n\n if (shift > 0) {\n moveSubtree(nextAncestor(nodeInLeft, subtreeV, ancestor), subtreeV, shift);\n sumInRight += shift;\n sumOutRight += shift;\n }\n\n sumInLeft += nodeInLeft.hierNode.modifier;\n sumInRight += nodeInRight.hierNode.modifier;\n sumOutRight += nodeOutRight.hierNode.modifier;\n sumOutLeft += nodeOutLeft.hierNode.modifier;\n }\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\n return ancestor;\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 */\n\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 * 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 */\n\n\nfunction nextLeft(node) {\n var children = node.children;\n return children.length && node.isExpand ? children[0] : node.hierNode.thread;\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 */\n\n\nfunction nextAncestor(nodeInLeft, node, ancestor) {\n return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode ? nodeInLeft.hierNode.ancestor : ancestor;\n}\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * \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 */\n\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 * The implementation of this function was originally copied from \"d3.js\"\n * \n * with some modifications made for this program.\n * See the license statement at the head of this file.\n */\n\n\nfunction defaultSeparation(node1, node2) {\n return node1.parentNode === node2.parentNode ? 1 : 2;\n}\n\nexports.init = init;\nexports.firstWalk = firstWalk;\nexports.secondWalk = secondWalk;\nexports.separation = separation;\nexports.radialCoordinate = radialCoordinate;\nexports.getViewRect = getViewRect;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar pathTool = require(\"zrender/lib/tool/path\");\n\nvar colorTool = require(\"zrender/lib/tool/color\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar vector = require(\"zrender/lib/core/vector\");\n\nvar Path = require(\"zrender/lib/graphic/Path\");\n\nvar Transformable = require(\"zrender/lib/mixin/Transformable\");\n\nvar ZImage = require(\"zrender/lib/graphic/Image\");\n\nexports.Image = ZImage;\n\nvar Group = require(\"zrender/lib/container/Group\");\n\nexports.Group = Group;\n\nvar Text = require(\"zrender/lib/graphic/Text\");\n\nexports.Text = Text;\n\nvar Circle = require(\"zrender/lib/graphic/shape/Circle\");\n\nexports.Circle = Circle;\n\nvar Sector = require(\"zrender/lib/graphic/shape/Sector\");\n\nexports.Sector = Sector;\n\nvar Ring = require(\"zrender/lib/graphic/shape/Ring\");\n\nexports.Ring = Ring;\n\nvar Polygon = require(\"zrender/lib/graphic/shape/Polygon\");\n\nexports.Polygon = Polygon;\n\nvar Polyline = require(\"zrender/lib/graphic/shape/Polyline\");\n\nexports.Polyline = Polyline;\n\nvar Rect = require(\"zrender/lib/graphic/shape/Rect\");\n\nexports.Rect = Rect;\n\nvar Line = require(\"zrender/lib/graphic/shape/Line\");\n\nexports.Line = Line;\n\nvar BezierCurve = require(\"zrender/lib/graphic/shape/BezierCurve\");\n\nexports.BezierCurve = BezierCurve;\n\nvar Arc = require(\"zrender/lib/graphic/shape/Arc\");\n\nexports.Arc = Arc;\n\nvar CompoundPath = require(\"zrender/lib/graphic/CompoundPath\");\n\nexports.CompoundPath = CompoundPath;\n\nvar LinearGradient = require(\"zrender/lib/graphic/LinearGradient\");\n\nexports.LinearGradient = LinearGradient;\n\nvar RadialGradient = require(\"zrender/lib/graphic/RadialGradient\");\n\nexports.RadialGradient = RadialGradient;\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nexports.BoundingRect = BoundingRect;\n\nvar IncrementalDisplayable = require(\"zrender/lib/graphic/IncrementalDisplayable\");\n\nexports.IncrementalDisplayable = IncrementalDisplayable;\n\nvar subPixelOptimizeUtil = require(\"zrender/lib/graphic/helper/subPixelOptimize\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar EMPTY_OBJ = {};\nvar Z2_EMPHASIS_LIFT = 1; // key: label model property nane, value: style property name.\n\nvar CACHED_LABEL_STYLE_PROPERTIES = {\n color: 'textFill',\n textBorderColor: 'textStroke',\n textBorderWidth: 'textStrokeWidth'\n};\nvar EMPHASIS = 'emphasis';\nvar NORMAL = 'normal'; // Reserve 0 as default.\n\nvar _highlightNextDigit = 1;\nvar _highlightKeyMap = {};\nvar _customShapeMap = {};\n/**\n * Extend shape with parameters\n */\n\nfunction extendShape(opts) {\n return Path.extend(opts);\n}\n/**\n * Extend path\n */\n\n\nfunction extendPath(pathData, opts) {\n return pathTool.extendFromString(pathData, opts);\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 */\n\n\nfunction registerShape(name, ShapeClass) {\n _customShapeMap[name] = ShapeClass;\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 */\n\n\nfunction getShapeClass(name) {\n if (_customShapeMap.hasOwnProperty(name)) {\n return _customShapeMap[name];\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 */\n\n\nfunction makePath(pathData, opts, rect, layout) {\n var path = pathTool.createFromString(pathData, opts);\n\n if (rect) {\n if (layout === 'center') {\n rect = centerGraphic(rect, path.getBoundingRect());\n }\n\n resizePath(path, rect);\n }\n\n return path;\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 */\n\n\nfunction 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 * 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 */\n\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\n if (width <= rect.width) {\n height = rect.height;\n } else {\n width = rect.width;\n height = width / aspect;\n }\n\n var cx = rect.x + rect.width / 2;\n var cy = rect.y + rect.height / 2;\n return {\n x: cx - width / 2,\n y: cy - height / 2,\n width: width,\n height: height\n };\n}\n\nvar mergePath = pathTool.mergePath;\n/**\n * Resize a path to fit the rect\n * @param {module:zrender/graphic/Path} path\n * @param {Object} rect\n */\n\nfunction resizePath(path, rect) {\n if (!path.applyTransform) {\n return;\n }\n\n var pathRect = path.getBoundingRect();\n var m = pathRect.calculateTransform(rect);\n path.applyTransform(m);\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 */\n\n\nfunction subPixelOptimizeLine(param) {\n subPixelOptimizeUtil.subPixelOptimizeLine(param.shape, param.shape, param.style);\n return param;\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 */\n\n\nfunction subPixelOptimizeRect(param) {\n subPixelOptimizeUtil.subPixelOptimizeRect(param.shape, param.shape, param.style);\n return param;\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 */\n\n\nvar subPixelOptimize = subPixelOptimizeUtil.subPixelOptimize;\n\nfunction hasFillOrStroke(fillOrStroke) {\n return fillOrStroke != null && fillOrStroke !== 'none';\n} // Most lifted color are duplicated.\n\n\nvar liftedColorMap = zrUtil.createHashMap();\nvar liftedColorCount = 0;\n\nfunction liftColor(color) {\n if (typeof color !== 'string') {\n return color;\n }\n\n var liftedColor = liftedColorMap.get(color);\n\n if (!liftedColor) {\n liftedColor = colorTool.lift(color, -0.1);\n\n if (liftedColorCount < 10000) {\n liftedColorMap.set(color, liftedColor);\n liftedColorCount++;\n }\n }\n\n return liftedColor;\n}\n\nfunction cacheElementStl(el) {\n if (!el.__hoverStlDirty) {\n return;\n }\n\n el.__hoverStlDirty = false;\n var hoverStyle = el.__hoverStl;\n\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 } // Always cache fill and stroke to normalStyle for lifting color.\n\n\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 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 } // 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\n\n targetStyle.extendFrom(hoverStl);\n setDefaultHoverFillStroke(targetStyle, hoverStl, 'fill');\n setDefaultHoverFillStroke(targetStyle, hoverStl, 'stroke');\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 } else {\n var style = el.style;\n var normalStl = el.__cachedNormalStl;\n\n if (normalStl) {\n rollbackDefaultTextStyle(style);\n el.setStyle(normalStl);\n applyDefaultTextStyle(style);\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\n\n var normalZ2 = el.__cachedNormalZ2;\n\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; // See the rule of `highDownOnUpdate` on `graphic.setAsHighDownDispatcher`.\n\n el.__highlighted && (fromState = EMPHASIS, trigger = true);\n updater(el, commonParam);\n el.__highlighted && (toState = EMPHASIS, trigger = true);\n el.isGroup && el.traverse(function (child) {\n !child.isGroup && updater(child, commonParam);\n });\n trigger && el.__highDownOnUpdate && el.__highDownOnUpdate(fromState, toState);\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 */\n\n\nfunction 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; // 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\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; // 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\n singleEnterNormal(el);\n singleEnterEmphasis(el);\n }\n}\n\nfunction onElementMouseOver(e) {\n !shouldSilent(this, e) // \"emphasis\" event highlight has higher priority than mouse highlight.\n && !this.__highByOuter && traverseUpdate(this, singleEnterEmphasis);\n}\n\nfunction onElementMouseOut(e) {\n !shouldSilent(this, e) // \"emphasis\" event highlight has higher priority than mouse highlight.\n && !this.__highByOuter && 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))) && traverseUpdate(this, singleEnterNormal);\n}\n\nfunction shouldSilent(el, e) {\n return el.__highDownSilentOnTouch && e.zrByTouch;\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 * This method MUST be called after all of the normal styles having been adopted\n * to the `el`.\n * The input `hoverStyle` (that is, \"emphasis style\") MUST be the subset of the\n * \"normal style\" having been set to the el.\n * `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 */\n\n\nfunction setHoverStyle(el, hoverStyle) {\n setAsHighDownDispatcher(el, true);\n traverseUpdate(el, setElementHoverStyle, hoverStyle);\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 */\n\n\nfunction setAsHighDownDispatcher(el, asDispatcher) {\n var disable = asDispatcher === false; // Make `highDownSilentOnTouch` and `highDownOnUpdate` only work after\n // `setAsHighDownDispatcher` called. Avoid it is modified by user unexpectedly.\n\n el.__highDownSilentOnTouch = el.highDownSilentOnTouch;\n el.__highDownOnUpdate = el.highDownOnUpdate; // Simple optimize, since this method might be\n // called for each elements of a group in some cases.\n\n if (!disable || el.__highDownDispatcher) {\n var method = disable ? 'off' : 'on'; // Duplicated function will be auto-ignored, see Eventful.js.\n\n el[method]('mouseover', onElementMouseOver)[method]('mouseout', onElementMouseOut); // Emphasis, normal can be triggered manually by API or other components like hover link.\n\n el[method]('emphasis', onElementEmphasisEvent)[method]('normal', onElementNormalEvent); // Also keep previous record.\n\n el.__highByOuter = el.__highByOuter || 0;\n el.__highDownDispatcher = !disable;\n }\n}\n/**\n * @param {module:zrender/src/Element} el\n * @return {boolean}\n */\n\n\nfunction isHighDownDispatcher(el) {\n return !!(el && el.__highDownDispatcher);\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 */\n\n\nfunction getHighlightDigit(highlightKey) {\n var highlightDigit = _highlightKeyMap[highlightKey];\n\n if (highlightDigit == null && _highlightNextDigit <= 32) {\n highlightDigit = _highlightKeyMap[highlightKey] = _highlightNextDigit++;\n }\n\n return highlightDigit;\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, opt.labelProp)`\n * @param {number} [opt.labelDataIndex] Fetch text by\n * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex, opt.labelProp)`\n * @param {number} [opt.labelDimIndex] Fetch text by\n * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex, opt.labelProp)`\n * @param {string} [opt.labelProp] Fetch text by\n * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex, opt.labelProp)`\n * @param {Object} [normalSpecified]\n * @param {Object} [emphasisSpecified]\n */\n\n\nfunction setLabelStyle(normalStyle, emphasisStyle, normalModel, emphasisModel, opt, normalSpecified, emphasisSpecified) {\n opt = opt || EMPTY_OBJ;\n var labelFetcher = opt.labelFetcher;\n var labelDataIndex = opt.labelDataIndex;\n var labelDimIndex = opt.labelDimIndex;\n var labelProp = opt.labelProp; // 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'); // 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\n var baseText;\n\n if (showNormal || showEmphasis) {\n if (labelFetcher) {\n baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex, labelProp);\n }\n\n if (baseText == null) {\n baseText = zrUtil.isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt) : opt.defaultText;\n }\n }\n\n var normalStyleText = showNormal ? baseText : null;\n var emphasisStyleText = showEmphasis ? zrUtil.retrieve2(labelFetcher ? labelFetcher.getFormattedLabel(labelDataIndex, 'emphasis', null, labelDimIndex, labelProp) : null, baseText) : null; // Optimize: If style.text is null, text will not be drawn.\n\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 * 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 */\n\n\nfunction modifyLabelStyle(el, normalStyleProps, emphasisStyleProps) {\n var elStyle = el.style;\n\n if (normalStyleProps) {\n rollbackDefaultTextStyle(elStyle);\n el.setStyle(normalStyleProps);\n applyDefaultTextStyle(elStyle);\n }\n\n elStyle = el.__hoverStl;\n\n if (emphasisStyleProps && elStyle) {\n rollbackDefaultTextStyle(elStyle);\n zrUtil.extend(elStyle, emphasisStyleProps);\n applyDefaultTextStyle(elStyle);\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 */\n\n\nfunction setTextStyle(textStyle, textStyleModel, specifiedTextStyle, opt, isEmphasis) {\n setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis);\n specifiedTextStyle && zrUtil.extend(textStyle, specifiedTextStyle); // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n\n return textStyle;\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 */\n\n\nfunction setText(textStyle, labelModel, defaultColor) {\n var opt = {\n isRectText: true\n };\n var isEmphasis;\n\n if (defaultColor === false) {\n isEmphasis = true;\n } else {\n // Support setting color as 'auto' to get visual color.\n opt.autoColor = defaultColor;\n }\n\n setTextStyleCommon(textStyle, labelModel, opt, isEmphasis); // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\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 */\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\n if (opt.getTextPosition) {\n textPosition = opt.getTextPosition(textStyleModel, isEmphasis);\n } else {\n textPosition = textStyleModel.getShallow('position') || (isEmphasis ? null : 'inside'); // 'outside' is not a valid zr textPostion value, but used\n // in bar series, and magric type should be considered.\n\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(textStyleModel.getShallow('distance'), isEmphasis ? null : 5);\n }\n\n var ecModel = textStyleModel.ecModel;\n var globalTextStyle = ecModel && ecModel.option.textStyle; // 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\n var richItemNames = getRichItemNames(textStyleModel);\n var richResult;\n\n if (richItemNames) {\n richResult = {};\n\n for (var name in richItemNames) {\n if (richItemNames.hasOwnProperty(name)) {\n // Cascade is supported in rich.\n var richTextStyle = textStyleModel.getModel(['rich', name]); // 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\n setTokenTextStyle(richResult[name] = {}, richTextStyle, globalTextStyle, opt, isEmphasis);\n }\n }\n }\n\n textStyle.rich = richResult;\n setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, true);\n\n if (opt.forceRich && !opt.textStyle) {\n opt.textStyle = {};\n }\n\n return textStyle;\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\n\nfunction getRichItemNames(textStyleModel) {\n // Use object to remove duplicated names.\n var richItemNameMap;\n\n while (textStyleModel && textStyleModel !== textStyleModel.ecModel) {\n var rich = (textStyleModel.option || EMPTY_OBJ).rich;\n\n if (rich) {\n richItemNameMap = richItemNameMap || {};\n\n for (var name in rich) {\n if (rich.hasOwnProperty(name)) {\n richItemNameMap[name] = 1;\n }\n }\n }\n\n textStyleModel = textStyleModel.parentModel;\n }\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 textStyle.textFill = getAutoColor(textStyleModel.getShallow('color'), opt) || globalTextStyle.color;\n textStyle.textStroke = getAutoColor(textStyleModel.getShallow('textBorderColor'), opt) || globalTextStyle.textBorderColor;\n textStyle.textStrokeWidth = zrUtil.retrieve2(textStyleModel.getShallow('textBorderWidth'), globalTextStyle.textBorderWidth);\n\n if (!isEmphasis) {\n if (isBlock) {\n textStyle.insideRollbackOpt = opt;\n applyDefaultTextStyle(textStyle);\n } // Set default finally.\n\n\n if (textStyle.textFill == null) {\n textStyle.textFill = opt.autoColor;\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\n\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 textStyle.textAlign = textStyleModel.getShallow('align');\n textStyle.textVerticalAlign = textStyleModel.getShallow('verticalAlign') || textStyleModel.getShallow('baseline');\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 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') || globalTextStyle.textShadowColor;\n textStyle.textShadowBlur = textStyleModel.getShallow('textShadowBlur') || globalTextStyle.textShadowBlur;\n textStyle.textShadowOffsetX = textStyleModel.getShallow('textShadowOffsetX') || globalTextStyle.textShadowOffsetX;\n textStyle.textShadowOffsetY = textStyleModel.getShallow('textShadowOffsetY') || globalTextStyle.textShadowOffsetY;\n}\n\nfunction getAutoColor(color, opt) {\n return color !== 'auto' ? color : opt && opt.autoColor ? opt.autoColor : null;\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 */\n\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 var useInsideStyleCache = useInsideStyle !== false && (useInsideStyle === true || isRectText && textPosition // textPosition can be [10, 30]\n && typeof textPosition === 'string' && textPosition.indexOf('inside') >= 0);\n var useAutoColorCache = !useInsideStyleCache && autoColor != null; // All of the props declared in `CACHED_LABEL_STYLE_PROPERTIES` are to be cached.\n\n if (useInsideStyleCache || useAutoColorCache) {\n insideRollback = {\n textFill: textStyle.textFill,\n textStroke: textStyle.textStroke,\n textStrokeWidth: textStyle.textStrokeWidth\n };\n }\n\n if (useInsideStyleCache) {\n textStyle.textFill = '#fff'; // Consider text with #fff overflow its container.\n\n if (textStyle.textStroke == null) {\n textStyle.textStroke = autoColor;\n textStyle.textStrokeWidth == null && (textStyle.textStrokeWidth = 2);\n }\n }\n\n if (useAutoColorCache) {\n textStyle.textFill = autoColor;\n }\n } // Always set `insideRollback`, so that the previous one can be cleared.\n\n\n textStyle.insideRollback = insideRollback;\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 */\n\n\nfunction rollbackDefaultTextStyle(style) {\n var insideRollback = style.insideRollback;\n\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\nfunction getFont(opt, ecModel) {\n var gTextStyleModel = ecModel && ecModel.getModel('textStyle');\n return zrUtil.trim([// FIXME in node-canvas fontWeight is before fontStyle\n opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '', opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '', (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px', opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'].join(' '));\n}\n\nfunction animateOrSetProps(isUpdate, el, props, animatableModel, dataIndex, cb) {\n if (typeof dataIndex === 'function') {\n cb = dataIndex;\n dataIndex = null;\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\n\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\n if (typeof animationDelay === 'function') {\n animationDelay = animationDelay(dataIndex, animatableModel.getAnimationDelayParams ? animatableModel.getAnimationDelayParams(el, dataIndex) : null);\n }\n\n if (typeof duration === 'function') {\n duration = duration(dataIndex);\n }\n\n duration > 0 ? el.animateTo(props, duration, animationDelay || 0, animationEasing, cb, !!cb) : (el.stopAnimation(), el.attr(props), cb && cb());\n } else {\n el.stopAnimation();\n el.attr(props);\n cb && cb();\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 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 */\n\n\nfunction updateProps(el, props, animatableModel, dataIndex, cb) {\n animateOrSetProps(true, el, props, animatableModel, dataIndex, cb);\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 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 */\n\n\nfunction initProps(el, props, animatableModel, dataIndex, cb) {\n animateOrSetProps(false, el, props, animatableModel, dataIndex, cb);\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 */\n\n\nfunction 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 * Apply transform to an vertex.\n * @param {Array.} target [x, y]\n * @param {Array.|TypedArray.|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.} [x, y]\n */\n\n\nfunction 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\n return vector.applyTransform([], target, transform);\n}\n/**\n * @param {string} direction 'left' 'right' 'top' 'bottom'\n * @param {Array.} 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 */\n\n\nfunction transformDirection(direction, transform, invert) {\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 ? 1 : Math.abs(2 * transform[4] / transform[0]);\n var vBase = transform[4] === 0 || transform[5] === 0 || transform[2] === 0 ? 1 : Math.abs(2 * transform[4] / transform[2]);\n var vertex = [direction === 'left' ? -hBase : direction === 'right' ? hBase : 0, direction === 'top' ? -vBase : direction === 'bottom' ? vBase : 0];\n vertex = applyTransform(vertex, transform, invert);\n return Math.abs(vertex[0]) > Math.abs(vertex[1]) ? vertex[0] > 0 ? 'right' : 'left' : vertex[1] > 0 ? 'bottom' : 'top';\n}\n/**\n * Apply group transition animation from g1 to g2.\n * If no animatableModel, no animation.\n */\n\n\nfunction 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\n function getAnimatableProps(el) {\n var obj = {\n position: vector.clone(el.position),\n rotation: el.rotation\n };\n\n if (el.shape) {\n obj.shape = zrUtil.extend({}, el.shape);\n }\n\n return obj;\n }\n\n var elMap1 = getElMap(g1);\n g2.traverse(function (el) {\n if (!el.isGroup && el.anid) {\n var oldEl = elMap1[el.anid];\n\n if (oldEl) {\n var newProp = getAnimatableProps(el);\n el.attr(getAnimatableProps(oldEl));\n updateProps(el, newProp, animatableModel, el.dataIndex);\n } // else {\n // if (el.previousProps) {\n // graphic.updateProps\n // }\n // }\n\n }\n });\n}\n/**\n * @param {Array.>} points Like: [[23, 44], [53, 66], ...]\n * @param {Object} rect {x, y, width, height}\n * @return {Array.>} A new clipped points.\n */\n\n\nfunction 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 * @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 */\n\n\nfunction 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); // If the total rect is cliped, nothing, including the border,\n // should be painted. So return undefined.\n\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 * @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 */\n\n\nfunction createIcon(iconStr, opt, rect) {\n opt = zrUtil.extend({\n rectHover: true\n }, opt);\n var style = opt.style = {\n strokeNoScale: true\n };\n rect = rect || {\n x: -1,\n y: -1,\n width: 2,\n height: 2\n };\n\n if (iconStr) {\n return iconStr.indexOf('image://') === 0 ? (style.image = iconStr.slice(8), zrUtil.defaults(style, rect), new ZImage(opt)) : makePath(iconStr.replace('path://', ''), opt, rect, 'center');\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.>} points Points of the polygon.\n * @return {boolean}\n */\n\n\nfunction 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\n if (lineLineIntersect(a1x, a1y, a2x, a2y, p[0], p[1], p2[0], p2[1])) {\n return true;\n }\n\n p2 = p;\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 */\n\n\nfunction 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; // `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\n var nmCrossProduct = crossProduct2d(nx, ny, mx, my);\n\n if (nearZero(nmCrossProduct)) {\n return false;\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\n\n var b1a1x = a1x - b1x;\n var b1a1y = a1y - b1y;\n var q = crossProduct2d(b1a1x, b1a1y, mx, my) / nmCrossProduct;\n\n if (q < 0 || q > 1) {\n return false;\n }\n\n var p = crossProduct2d(b1a1x, b1a1y, nx, ny) / nmCrossProduct;\n\n if (p < 0 || p > 1) {\n return false;\n }\n\n return true;\n}\n/**\n * Cross product of 2-dimension vector.\n */\n\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} // Register built-in shapes. These shapes might be overwirtten\n// by users, although we do not recommend that.\n\n\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);\nexports.Z2_EMPHASIS_LIFT = Z2_EMPHASIS_LIFT;\nexports.CACHED_LABEL_STYLE_PROPERTIES = CACHED_LABEL_STYLE_PROPERTIES;\nexports.extendShape = extendShape;\nexports.extendPath = extendPath;\nexports.registerShape = registerShape;\nexports.getShapeClass = getShapeClass;\nexports.makePath = makePath;\nexports.makeImage = makeImage;\nexports.mergePath = mergePath;\nexports.resizePath = resizePath;\nexports.subPixelOptimizeLine = subPixelOptimizeLine;\nexports.subPixelOptimizeRect = subPixelOptimizeRect;\nexports.subPixelOptimize = subPixelOptimize;\nexports.setElementHoverStyle = setElementHoverStyle;\nexports.setHoverStyle = setHoverStyle;\nexports.setAsHighDownDispatcher = setAsHighDownDispatcher;\nexports.isHighDownDispatcher = isHighDownDispatcher;\nexports.getHighlightDigit = getHighlightDigit;\nexports.setLabelStyle = setLabelStyle;\nexports.modifyLabelStyle = modifyLabelStyle;\nexports.setTextStyle = setTextStyle;\nexports.setText = setText;\nexports.getFont = getFont;\nexports.updateProps = updateProps;\nexports.initProps = initProps;\nexports.getTransform = getTransform;\nexports.applyTransform = applyTransform;\nexports.transformDirection = transformDirection;\nexports.groupTransition = groupTransition;\nexports.clipPointsByRect = clipPointsByRect;\nexports.clipRectByRect = clipRectByRect;\nexports.createIcon = createIcon;\nexports.linePolygonIntersect = linePolygonIntersect;\nexports.lineLineIntersect = lineLineIntersect;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar eventTool = require(\"zrender/lib/core/event\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar throttle = require(\"../../util/throttle\");\n\nvar DataZoomView = require(\"./DataZoomView\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar layout = require(\"../../util/layout\");\n\nvar sliderMove = require(\"../helper/sliderMove\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar Rect = graphic.Rect;\nvar linearMap = numberUtil.linearMap;\nvar asc = numberUtil.asc;\nvar bind = zrUtil.bind;\nvar each = zrUtil.each; // Constants\n\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'];\nvar SliderZoomView = DataZoomView.extend({\n type: 'dataZoom.slider',\n init: function (ecModel, api) {\n /**\n * @private\n * @type {Object}\n */\n this._displayables = {};\n /**\n * @private\n * @type {string}\n */\n\n this._orient;\n /**\n * [0, 100]\n * @private\n */\n\n this._range;\n /**\n * [coord of the first handle, coord of the second handle]\n * @private\n */\n\n this._handleEnds;\n /**\n * [length, thick]\n * @private\n * @type {Array.}\n */\n\n this._size;\n /**\n * @private\n * @type {number}\n */\n\n this._handleWidth;\n /**\n * @private\n * @type {number}\n */\n\n this._handleHeight;\n /**\n * @private\n */\n\n this._location;\n /**\n * @private\n */\n\n this._dragging;\n /**\n * @private\n */\n\n this._dataShadowInfo;\n this.api = api;\n },\n\n /**\n * @override\n */\n render: function (dataZoomModel, ecModel, api, payload) {\n SliderZoomView.superApply(this, 'render', arguments);\n throttle.createOrUpdate(this, '_dispatchZoomAction', this.dataZoomModel.get('throttle'), 'fixRate');\n this._orient = dataZoomModel.get('orient');\n\n if (this.dataZoomModel.get('show') === false) {\n this.group.removeAll();\n return;\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\n\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 _buildView: function () {\n var thisGroup = this.group;\n thisGroup.removeAll();\n\n this._resetLocation();\n\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; // If some of x/y/width/height are not specified,\n // auto-adapt according to target grid.\n\n var coordRect = this._findCoordRect();\n\n var ecSize = {\n width: api.getWidth(),\n height: api.getHeight()\n }; // Default align by coordinate system rect.\n\n var positionInfo = this._orient === HORIZONTAL ? {\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 }; // Do not write back to option and replace value 'ph', because\n // the 'ph' value should be recalculated when resize.\n\n var layoutParams = layout.getLayoutParams(dataZoomModel.option); // Replace the placeholder value.\n\n zrUtil.each(['right', 'top', 'width', 'height'], function (name) {\n if (layoutParams[name] === 'ph') {\n layoutParams[name] = positionInfo[name];\n }\n });\n var layoutRect = layout.getLayoutRect(layoutParams, ecSize, dataZoomModel.padding);\n this._location = {\n x: layoutRect.x,\n y: layoutRect.y\n };\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; // Just use the first axis to determine mapping.\n\n var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel();\n var inverse = targetAxisModel && targetAxisModel.get('inverse');\n var barGroup = this._displayables.barGroup;\n var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse; // Transform barGroup.\n\n barGroup.attr(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],\n rotation: Math.PI / 2 // Dont use Math.PI, considering shadow direction.\n\n } : {\n scale: otherAxisInverse ? [-1, -1] : [-1, 1],\n rotation: Math.PI / 2\n }); // Position barGroup\n\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 _renderBackground: function () {\n var dataZoomModel = this.dataZoomModel;\n var size = this._size;\n var barGroup = this._displayables.barGroup;\n barGroup.add(new Rect({\n silent: true,\n shape: {\n x: 0,\n y: 0,\n width: size[0],\n height: size[1]\n },\n style: {\n fill: dataZoomModel.get('backgroundColor')\n },\n z2: -40\n })); // Click panel, over shadow, below handles.\n\n barGroup.add(new Rect({\n shape: {\n x: 0,\n y: 0,\n width: size[0],\n height: size[1]\n },\n style: {\n fill: 'transparent'\n },\n z2: 0,\n onclick: zrUtil.bind(this._onClickPanelClick, this)\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 var otherDim = seriesModel.getShadowDim ? seriesModel.getShadowDim() // @see candlestick\n : info.otherDim;\n\n if (otherDim == null) {\n return;\n }\n\n var otherDataExtent = data.getDataExtent(otherDim); // Nice extent.\n\n var otherOffset = (otherDataExtent[1] - otherDataExtent[0]) * 0.3;\n otherDataExtent = [otherDataExtent[0] - otherOffset, otherDataExtent[1] + otherOffset];\n var otherShadowExtent = [0, size[1]];\n var thisShadowExtent = [0, size[0]];\n var areaPoints = [[size[0], 0], [0, 0]];\n var linePoints = [];\n var step = thisShadowExtent[1] / (data.count() - 1);\n var thisCoord = 0; // Optimize for large data shadow\n\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 } // FIXME\n // Should consider axis.min/axis.max when drawing dataShadow.\n // FIXME\n // 应该使用统一的空判断?还是在list里进行空判断?\n\n\n var isEmpty = value == null || isNaN(value) || value === ''; // See #4235.\n\n var otherCoord = isEmpty ? 0 : linearMap(value, otherDataExtent, otherShadowExtent, true); // Attempt to draw data shadow precisely when there are empty value.\n\n if (isEmpty && !lastIsEmpty && index) {\n areaPoints.push([areaPoints[areaPoints.length - 1][0], 0]);\n linePoints.push([linePoints[linePoints.length - 1][0], 0]);\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 thisCoord += step;\n lastIsEmpty = isEmpty;\n });\n var dataZoomModel = this.dataZoomModel; // var dataBackgroundModel = dataZoomModel.getModel('dataBackground');\n\n this._displayables.barGroup.add(new graphic.Polygon({\n shape: {\n points: areaPoints\n },\n style: zrUtil.defaults({\n fill: dataZoomModel.get('dataBackgroundColor')\n }, dataZoomModel.getModel('dataBackground.areaStyle').getAreaStyle()),\n silent: true,\n z2: -20\n }));\n\n this._displayables.barGroup.add(new graphic.Polyline({\n shape: {\n points: linePoints\n },\n style: dataZoomModel.getModel('dataBackground.lineStyle').getLineStyle(),\n silent: true,\n z2: -19\n }));\n },\n _prepareDataShadowInfo: function () {\n var dataZoomModel = this.dataZoomModel;\n var showDataShadow = dataZoomModel.get('showDataShadow');\n\n if (showDataShadow === false) {\n return;\n } // Find a representative series.\n\n\n var result;\n var ecModel = this.ecModel;\n dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) {\n var seriesModels = dataZoomModel.getAxisProxy(dimNames.name, axisIndex).getTargetSeriesModels();\n zrUtil.each(seriesModels, function (seriesModel) {\n if (result) {\n return;\n }\n\n if (showDataShadow !== true && zrUtil.indexOf(SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get('type')) < 0) {\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 result = {\n thisAxis: thisAxis,\n series: seriesModel,\n thisDim: dimNames.name,\n otherDim: otherDim,\n otherAxisInverse: otherAxisInverse\n };\n }, this);\n }, this);\n return result;\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 barGroup.add(displaybles.filler = new Rect({\n draggable: true,\n cursor: getCursor(this._orient),\n drift: bind(this._onDragMove, this, 'all'),\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 })); // Frame border.\n\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') || dataZoomModel.get('borderColor'),\n lineWidth: DEFAULT_FRAME_BORDER_WIDTH,\n fill: 'rgba(0,0,0,0)'\n }\n }));\n each([0, 1], function (handleIndex) {\n var path = graphic.createIcon(dataZoomModel.get('handleIcon'), {\n cursor: getCursor(this._orient),\n draggable: true,\n drift: bind(this._onDragMove, this, handleIndex),\n ondragend: bind(this._onDragEnd, this),\n onmouseover: bind(this._showDataInfo, this, true),\n onmouseout: bind(this._showDataInfo, this, false)\n }, {\n x: -1,\n y: 0,\n width: 2,\n height: 2\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 path.setStyle(dataZoomModel.getModel('handleStyle').getItemStyle());\n var handleColor = dataZoomModel.get('handleColor'); // Compatitable with previous version\n\n if (handleColor != null) {\n path.style.fill = handleColor;\n }\n\n barGroup.add(handles[handleIndex] = path);\n var textStyleModel = dataZoomModel.textStyleModel;\n this.group.add(handleLabels[handleIndex] = new graphic.Text({\n silent: true,\n invisible: true,\n style: {\n x: 0,\n y: 0,\n text: '',\n textVerticalAlign: 'middle',\n textAlign: 'center',\n textFill: textStyleModel.getTextColor(),\n textFont: textStyleModel.getFont()\n },\n z2: 10\n }));\n }, this);\n },\n\n /**\n * @private\n */\n _resetInterval: function () {\n var range = this._range = this.dataZoomModel.getPercentRange();\n\n var viewExtent = this._getViewExtent();\n\n this._handleEnds = [linearMap(range[0], [0, 100], viewExtent, true), linearMap(range[1], [0, 100], viewExtent, true)];\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\n var viewExtend = this._getViewExtent();\n\n var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();\n var percentExtent = [0, 100];\n sliderMove(delta, handleEnds, viewExtend, dataZoomModel.get('zoomLock') ? 'all' : handleIndex, minMaxSpan.minSpan != null ? linearMap(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null, minMaxSpan.maxSpan != null ? linearMap(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null);\n var lastRange = this._range;\n var range = this._range = asc([linearMap(handleEnds[0], viewExtend, percentExtent, true), linearMap(handleEnds[1], viewExtend, percentExtent, true)]);\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 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); // Filler\n\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 = ['', '']; // FIXME\n // date型,支持formatter,autoformatter(ec2 date.getAutoFormatter)\n\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 var dataInterval = nonRealtime // See #4434, data and axis are not processed and reset yet in non-realtime mode.\n ? axisProxy.calculateDataWindow({\n start: range[0],\n end: range[1]\n }).valueWindow : axisProxy.getDataValueWindow();\n labelTexts = [this._formatLabel(dataInterval[0], axis), this._formatLabel(dataInterval[1], axis)];\n }\n }\n\n var orderedHandleEnds = asc(this._handleEnds.slice());\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(displaybles.handles[handleIndex].parent, this.group);\n var direction = graphic.transformDirection(handleIndex === 0 ? 'right' : 'left', barTransform);\n var offset = this._handleWidth / 2 + LABEL_GAP;\n var textPoint = graphic.applyTransform([orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset), this._size[1] / 2], barTransform);\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 var labelPrecision = dataZoomModel.get('labelPrecision');\n\n if (labelPrecision == null || labelPrecision === 'auto') {\n labelPrecision = axis.getPixelPrecision();\n }\n\n var valueStr = value == null || isNaN(value) ? '' // FIXME Glue code\n : axis.type === 'category' || axis.type === 'time' ? axis.scale.getLabel(Math.round(value)) // param of toFixed should less then 20.\n : value.toFixed(Math.min(labelPrecision, 20));\n return zrUtil.isFunction(labelFormatter) ? labelFormatter(value, valueStr) : zrUtil.isString(labelFormatter) ? labelFormatter.replace('{value}', valueStr) : 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 var handleLabels = this._displayables.handleLabels;\n handleLabels[0].attr('invisible', !showOrHide);\n handleLabels[1].attr('invisible', !showOrHide);\n },\n _onDragMove: function (handleIndex, dx, dy, event) {\n this._dragging = true; // For mobile device, prevent screen slider on the button.\n\n eventTool.stop(event.event); // Transform dx, dy to bar coordination.\n\n var barTransform = this._displayables.barGroup.getLocalTransform();\n\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); // Avoid dispatch dataZoom repeatly but range not changed,\n // which cause bad visual effect when progressive enabled.\n\n\n changed && realtime && this._dispatchZoomAction();\n },\n _onDragEnd: function () {\n this._dragging = false;\n\n this._showDataInfo(false); // While in realtime mode and stream mode, dispatch action when\n // drag end will cause the whole view rerender, which is unnecessary.\n\n\n var realtime = this.dataZoomModel.get('realtime');\n !realtime && this._dispatchZoomAction();\n },\n _onClickPanelClick: function (e) {\n var size = this._size;\n\n var localPoint = this._displayables.barGroup.transformCoordToLocal(e.offsetX, e.offsetY);\n\n if (localPoint[0] < 0 || localPoint[0] > size[0] || localPoint[1] < 0 || localPoint[1] > size[1]) {\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\n this._updateView();\n\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 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\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\nfunction getOtherDim(thisDim) {\n // FIXME\n // 这个逻辑和getOtherAxis里一致,但是写在这里是否不好\n var map = {\n x: 'y',\n y: 'x',\n radius: 'angle',\n angle: 'radius'\n };\n return map[thisDim];\n}\n\nfunction getCursor(orient) {\n return orient === 'vertical' ? 'ns-resize' : 'ew-resize';\n}\n\nvar _default = SliderZoomView;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar List = require(\"../../data/List\");\n\nvar Graph = require(\"../../data/Graph\");\n\nvar linkList = require(\"../../data/helper/linkList\");\n\nvar createDimensions = require(\"../../data/helper/createDimensions\");\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\nvar createListFromArray = require(\"./createListFromArray\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(nodes, edges, seriesModel, directed, beforeLink) {\n // ??? TODO\n // support dataset?\n var graph = new Graph(directed);\n\n for (var i = 0; i < nodes.length; i++) {\n graph.addNode(zrUtil.retrieve( // Id, name, dataIndex\n nodes[i].id, nodes[i].name, i), i);\n }\n\n var linkNameList = [];\n var validEdges = [];\n var linkCount = 0;\n\n for (var i = 0; i < edges.length; i++) {\n var link = edges[i];\n var source = link.source;\n var target = link.target; // addEdge may fail when source or target not exists\n\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\n if (coordSys === 'cartesian2d' || coordSys === 'polar') {\n nodeData = createListFromArray(nodes, seriesModel);\n } else {\n var coordSysCtor = CoordinateSystem.get(coordSys);\n var coordDimensions = coordSysCtor && coordSysCtor.type !== 'view' ? coordSysCtor.dimensions || [] : []; // 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\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 beforeLink && beforeLink(nodeData, edgeData);\n linkList({\n mainData: nodeData,\n struct: graph,\n structAttr: 'graph',\n datas: {\n node: nodeData,\n edge: edgeData\n },\n datasAttr: {\n node: 'data',\n edge: 'edgeData'\n }\n }); // Update dataIndex of nodes and edges because invalid edge may be removed\n\n graph.update();\n return graph;\n}\n\nmodule.exports = _default;","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LineChart.vue?vue&type=style&index=0&id=c8b1d966&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LineChart.vue?vue&type=style&index=0&id=c8b1d966&lang=scss&scoped=true&\"","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar IndicatorAxis = require(\"./IndicatorAxis\");\n\nvar IntervalScale = require(\"../../scale/Interval\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar _axisHelper = require(\"../axisHelper\");\n\nvar getScaleExtent = _axisHelper.getScaleExtent;\nvar niceScaleExtent = _axisHelper.niceScaleExtent;\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\nvar LogScale = require(\"../../scale/Log\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO clockwise\nfunction Radar(radarModel, ecModel, api) {\n this._model = radarModel;\n /**\n * Radar dimensions\n * @type {Array.}\n */\n\n this.dimensions = [];\n this._indicatorAxes = zrUtil.map(radarModel.getIndicatorModels(), function (indicatorModel, idx) {\n var dim = 'indicator_' + idx;\n var indicatorAxis = new IndicatorAxis(dim, indicatorModel.get('axisType') === 'log' ? new LogScale() : new IntervalScale());\n indicatorAxis.name = indicatorModel.get('name'); // Inject model and axis\n\n indicatorAxis.model = indicatorModel;\n indicatorModel.axis = indicatorAxis;\n this.dimensions.push(dim);\n return indicatorAxis;\n }, this);\n this.resize(radarModel, api);\n /**\n * @type {number}\n * @readOnly\n */\n\n this.cx;\n /**\n * @type {number}\n * @readOnly\n */\n\n this.cy;\n /**\n * @type {number}\n * @readOnly\n */\n\n this.r;\n /**\n * @type {number}\n * @readOnly\n */\n\n this.r0;\n /**\n * @type {number}\n * @readOnly\n */\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 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 var radian = Math.atan2(-dy, dx); // Find the closest angle\n // FIXME index can calculated directly\n\n var minRadianDiff = Infinity;\n var closestAxis;\n var closestAxisIdx = -1;\n\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\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 this.startAngle = radarModel.get('startAngle') * Math.PI / 180; // radius may be single value like `20`, `'80%'`, or array like `[10, '80%']`\n\n var radius = radarModel.get('radius');\n\n if (typeof radius === 'string' || typeof radius === 'number') {\n radius = [0, radius];\n }\n\n this.r0 = numberUtil.parsePercent(radius[0], viewSize);\n this.r = numberUtil.parsePercent(radius[1], viewSize);\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; // Normalize to [-PI, PI]\n\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' || ecModel.getComponent('radar', radarSeries.get('radarIndex')) !== radarModel) {\n return;\n }\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 var splitNumber = radarModel.get('splitNumber');\n\n function increaseInterval(interval) {\n var exp10 = Math.pow(10, Math.floor(Math.log(interval) / Math.LN10)); // Increase interval\n\n var f = interval / exp10;\n\n if (f === 2) {\n f = 5;\n } else {\n // f is 2 or 5\n f *= 2;\n }\n\n return f * exp10;\n } // Force all the axis fixing the maxSplitNumber.\n\n\n zrUtil.each(indicatorAxes, function (indicatorAxis, idx) {\n var rawExtent = getScaleExtent(indicatorAxis.scale, indicatorAxis.model).extent;\n niceScaleExtent(indicatorAxis.scale, indicatorAxis.model);\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((fixedMax - fixedMin) / splitNumber);\n } else if (fixedMin != null) {\n var max; // User set min, expand extent on the other side\n\n do {\n max = fixedMin + interval * splitNumber;\n scale.setExtent(+fixedMin, max); // Interval must been set after extent\n // FIXME\n\n scale.setInterval(interval);\n interval = increaseInterval(interval);\n } while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1]));\n } else if (fixedMax != null) {\n var min; // User set min, expand extent on the other side\n\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 } else {\n var nicedSplitNumber = scale.getTicks().length - 1;\n\n if (nicedSplitNumber > splitNumber) {\n interval = increaseInterval(interval);\n } // TODO\n\n\n var max = Math.ceil(rawExtent[1] / interval) * interval;\n var min = numberUtil.round(max - interval * splitNumber);\n scale.setExtent(min, max);\n scale.setInterval(interval);\n }\n });\n};\n/**\n * Radar dimensions is based on the data\n * @type {Array}\n */\n\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);\nvar _default = Radar;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./graph/GraphSeries\");\n\nrequire(\"./graph/GraphView\");\n\nrequire(\"./graph/graphAction\");\n\nvar categoryFilter = require(\"./graph/categoryFilter\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar categoryVisual = require(\"./graph/categoryVisual\");\n\nvar edgeVisual = require(\"./graph/edgeVisual\");\n\nvar simpleLayout = require(\"./graph/simpleLayout\");\n\nvar circularLayout = require(\"./graph/circularLayout\");\n\nvar forceLayout = require(\"./graph/forceLayout\");\n\nvar createView = require(\"./graph/createView\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerProcessor(categoryFilter);\necharts.registerVisual(visualSymbol('graph', 'circle', null));\necharts.registerVisual(categoryVisual);\necharts.registerVisual(edgeVisual);\necharts.registerLayout(simpleLayout);\necharts.registerLayout(echarts.PRIORITY.VISUAL.POST_CHART_LAYOUT, circularLayout);\necharts.registerLayout(forceLayout); // Graph view coordinate system\n\necharts.registerCoordinateSystem('graphView', {\n create: createView\n});","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar formatUtil = require(\"../../util/format\");\n\nvar dataFormatMixin = require(\"../../model/mixin/dataFormat\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar addCommas = formatUtil.addCommas;\nvar encodeHTML = formatUtil.encodeHTML;\n\nfunction fillLabel(opt) {\n modelUtil.defaultEmphasis(opt, 'label', ['show']);\n}\n\nvar MarkerModel = echarts.extendComponentModel({\n type: 'marker',\n dependencies: ['series', 'grid', 'polar', 'geo'],\n\n /**\n * @overrite\n */\n init: function (option, parentModel, ecModel) {\n this.mergeDefaultAndTheme(option, ecModel);\n\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 _mergeOption: function (newOpt, ecModel, createdBySelf, isInit) {\n var MarkerModel = this.constructor;\n var modelPropName = this.mainType + 'Model';\n\n if (!createdBySelf) {\n ecModel.eachSeries(function (seriesModel) {\n var markerOpt = seriesModel.get(this.mainType, true);\n var markerModel = seriesModel[modelPropName];\n\n if (!markerOpt || !markerOpt.data) {\n seriesModel[modelPropName] = null;\n return;\n }\n\n if (!markerModel) {\n if (isInit) {\n // Default label emphasis `position` and `show`\n fillLabel(markerOpt);\n }\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 } else {\n fillLabel(item);\n }\n });\n markerModel = new MarkerModel(markerOpt, this, ecModel);\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 markerModel.__hostSeries = seriesModel;\n } else {\n markerModel._mergeOption(markerOpt, ecModel, true);\n }\n\n seriesModel[modelPropName] = markerModel;\n }, this);\n }\n },\n formatTooltip: function (dataIndex) {\n var data = this.getData();\n var value = this.getRawValue(dataIndex);\n var formattedValue = zrUtil.isArray(value) ? zrUtil.map(value, addCommas).join(', ') : addCommas(value);\n var name = data.getName(dataIndex);\n var html = encodeHTML(this.name);\n\n if (value != null || name) {\n html += '
';\n }\n\n if (name) {\n html += encodeHTML(name);\n\n if (value != null) {\n html += ' : ';\n }\n }\n\n if (value != null) {\n html += encodeHTML(formattedValue);\n }\n\n return html;\n },\n getData: function () {\n return this._data;\n },\n setData: function (data) {\n this._data = data;\n }\n});\nzrUtil.mixin(MarkerModel, dataFormatMixin);\nvar _default = MarkerModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar layout = require(\"../../util/layout\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar linearMap = _number.linearMap;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\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\n for (var i = 0, len = data.count(); i < len; i++) {\n indices[i] = i;\n } // Add custom sortable function & none sortable opetion by \"options.sort\"\n\n\n if (typeof sort === 'function') {\n indices.sort(sort);\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\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 var labelLineModel = itemModel.getModel('labelLine');\n var layout = data.getItemLayout(idx);\n var points = layout.points;\n var isLabelInside = labelPosition === 'inner' || labelPosition === 'inside' || labelPosition === 'center' || labelPosition === 'insideLeft' || labelPosition === 'insideRight';\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 } 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 } 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\n linePoints = [[textX, textY], [textX, textY]];\n } else {\n var x1;\n var y1;\n var x2;\n var labelLineLen = labelLineModel.get('length');\n\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 } 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 } 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 } 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 } 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 } 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 } 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\n var y2 = y1;\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\nfunction _default(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 var sizeExtent = [parsePercent(seriesModel.get('minSize'), viewRect.width), parsePercent(seriesModel.get('maxSize'), viewRect.width)];\n var dataExtent = data.getDataExtent(valueDim);\n var min = seriesModel.get('min');\n var max = seriesModel.get('max');\n\n if (min == null) {\n min = Math.min(dataExtent[0], 0);\n }\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 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\n switch (funnelAlign) {\n case 'left':\n x0 = viewRect.x;\n break;\n\n case 'center':\n x0 = viewRect.x + (viewRect.width - itemWidth) / 2;\n break;\n\n case 'right':\n x0 = viewRect.x + viewRect.width - itemWidth;\n break;\n }\n\n return [[x0, offY], [x0 + itemWidth, offY]];\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 var itemModel = data.getItemModel(idx);\n var height = itemModel.get('itemStyle.height');\n\n if (height == null) {\n height = itemHeight;\n } else {\n height = parsePercent(height, viewRect.height);\n\n if (sort === 'ascending') {\n height = -height;\n }\n }\n\n var start = getLinePoints(idx, y);\n var end = getLinePoints(nextIdx, y + height);\n y += height + gap;\n data.setItemLayout(idx, {\n points: start.concat(end.slice().reverse())\n });\n }\n\n labelLayout(data);\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar _poly = require(\"../line/poly\");\n\nvar Polygon = _poly.Polygon;\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar bind = _util.bind;\nvar extend = _util.extend;\n\nvar DataDiffer = require(\"../../data/DataDiffer\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = echarts.extendChartView({\n type: 'themeRiver',\n init: function () {\n this._layers = [];\n },\n render: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var group = this.group;\n var layerSeries = seriesModel.getLayerSeries();\n var layoutInfo = data.getLayout('layoutInfo');\n var rect = layoutInfo.rect;\n var boundaryGap = layoutInfo.boundaryGap;\n group.attr('position', [0, rect.y + boundaryGap[0]]);\n\n function keyGetter(item) {\n return item.name;\n }\n\n var dataDiffer = new DataDiffer(this._layersSeries || [], layerSeries, keyGetter, keyGetter);\n var newLayersGroups = {};\n dataDiffer.add(bind(process, this, 'add')).update(bind(process, this, 'update')).remove(bind(process, this, 'remove')).execute();\n\n function process(status, idx, oldIdx) {\n var oldLayersGroups = this._layers;\n\n if (status === 'remove') {\n group.remove(oldLayersGroups[idx]);\n return;\n }\n\n var points0 = [];\n var points1 = [];\n var color;\n var indices = layerSeries[idx].indices;\n\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 points0.push([x, y0]);\n points1.push([x, y0 + y]);\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\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 polygon.setClipPath(createGridClipShape(polygon.getBoundingRect(), seriesModel, function () {\n polygon.removeClipPath();\n }));\n } else {\n var layerGroup = oldLayersGroups[oldIdx];\n polygon = layerGroup.childAt(0);\n text = layerGroup.childAt(1);\n group.add(layerGroup);\n newLayersGroups[idx] = layerGroup;\n graphic.updateProps(polygon, {\n shape: {\n points: points0,\n stackedOnPoints: points1\n }\n }, seriesModel);\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 graphic.setTextStyle(text.style, labelModel, {\n text: labelModel.get('show') ? seriesModel.getFormattedLabel(indices[j - 1], 'normal') || data.getName(indices[j - 1]) : null,\n textVerticalAlign: 'middle'\n });\n polygon.setStyle(extend({\n fill: color\n }, itemStyleModel.getItemStyle(['color'])));\n graphic.setHoverStyle(polygon, hoverItemStyleModel.getItemStyle());\n }\n\n this._layersSeries = layerSeries;\n this._layers = newLayersGroups;\n },\n dispose: function () {}\n}); // add animation to the view\n\n\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 return rectEl;\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\nvar POSSIBLE_STYLES = ['areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle', 'chordStyle', 'label', 'labelLine'];\n\nfunction compatEC2ItemStyle(opt) {\n var itemStyleOpt = opt && opt.itemStyle;\n\n if (!itemStyleOpt) {\n return;\n }\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\n if (normalItemStyleOpt && normalItemStyleOpt[styleName]) {\n opt[styleName] = opt[styleName] || {};\n\n if (!opt[styleName].normal) {\n opt[styleName].normal = normalItemStyleOpt[styleName];\n } else {\n zrUtil.merge(opt[styleName].normal, normalItemStyleOpt[styleName]);\n }\n\n normalItemStyleOpt[styleName] = null;\n }\n\n if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) {\n opt[styleName] = opt[styleName] || {};\n\n if (!opt[styleName].emphasis) {\n opt[styleName].emphasis = emphasisItemStyleOpt[styleName];\n } else {\n zrUtil.merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]);\n }\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 } else {\n opt[optType] = normalOpt;\n }\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'); // treemap\n\n convertNormalEmphasis(opt, 'upperLabel'); // graph\n\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\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\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 compatTextStyle(seriesOpt, 'label'); // treemap\n\n compatTextStyle(seriesOpt, 'upperLabel'); // graph\n\n compatTextStyle(seriesOpt, 'edgeLabel');\n\n if (seriesOpt.emphasis) {\n compatTextStyle(seriesOpt.emphasis, 'label'); // treemap\n\n compatTextStyle(seriesOpt.emphasis, 'upperLabel'); // graph\n\n compatTextStyle(seriesOpt.emphasis, 'edgeLabel');\n }\n\n var markPoint = seriesOpt.markPoint;\n\n if (markPoint) {\n compatEC2ItemStyle(markPoint);\n compatEC3CommonStyles(markPoint);\n }\n\n var markLine = seriesOpt.markLine;\n\n if (markLine) {\n compatEC2ItemStyle(markLine);\n compatEC3CommonStyles(markLine);\n }\n\n var markArea = seriesOpt.markArea;\n\n if (markArea) {\n compatEC3CommonStyles(markArea);\n }\n\n var data = seriesOpt.data; // 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\n if (edgeData && !zrUtil.isTypedArray(edgeData)) {\n for (var i = 0; i < edgeData.length; i++) {\n compatEC3CommonStyles(edgeData[i]);\n }\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 } // mark point data\n\n\n var markPoint = seriesOpt.markPoint;\n\n if (markPoint && markPoint.data) {\n var mpData = markPoint.data;\n\n for (var i = 0; i < mpData.length; i++) {\n compatEC3CommonStyles(mpData[i]);\n }\n } // mark line data\n\n\n var markLine = seriesOpt.markLine;\n\n if (markLine && markLine.data) {\n var mlData = markLine.data;\n\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 } else {\n compatEC3CommonStyles(mlData[i]);\n }\n }\n } // Series\n\n\n if (seriesOpt.type === 'gauge') {\n compatTextStyle(seriesOpt, 'axisLabel');\n compatTextStyle(seriesOpt, 'title');\n compatTextStyle(seriesOpt, 'detail');\n } else if (seriesOpt.type === 'treemap') {\n convertNormalEmphasis(seriesOpt.breadcrumb, 'itemStyle');\n zrUtil.each(seriesOpt.levels, function (opt) {\n removeEC3NormalStatus(opt);\n });\n } else if (seriesOpt.type === 'tree') {\n removeEC3NormalStatus(seriesOpt.leaves);\n } // sunburst starts from ec4, so it does not need to compat levels.\n\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\nfunction _default(option, isTheme) {\n each(toArr(option.series), function (seriesOpt) {\n isObject(seriesOpt) && processSeries(seriesOpt);\n });\n var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar'];\n isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis');\n each(axes, 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 each(toArr(option.parallel), function (parallelOpt) {\n var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault;\n compatTextStyle(parallelAxisDefault, 'axisLabel');\n compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label');\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 }); // radar.name.textStyle\n\n each(toArr(option.radar), function (radarOpt) {\n compatTextStyle(radarOpt, 'name');\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 each(toArr(option.timeline), function (timelineOpt) {\n compatEC3CommonStyles(timelineOpt);\n convertNormalEmphasis(timelineOpt, 'label');\n convertNormalEmphasis(timelineOpt, 'itemStyle');\n convertNormalEmphasis(timelineOpt, 'controlStyle', true);\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 each(toArr(option.toolbox), function (toolboxOpt) {\n convertNormalEmphasis(toolboxOpt, 'iconStyle');\n each(toolboxOpt.feature, function (featureOpt) {\n convertNormalEmphasis(featureOpt, 'iconStyle');\n });\n });\n compatTextStyle(toObj(option.axisPointer), 'label');\n compatTextStyle(toObj(option.tooltip).axisPointer, 'label');\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO Parse shadow style\n// TODO Only shallow path support\nfunction _default(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\n return function (model, excludes, includes) {\n var style = {};\n\n for (var i = 0; i < properties.length; i++) {\n var propName = properties[i][1];\n\n if (excludes && zrUtil.indexOf(excludes, propName) >= 0 || includes && zrUtil.indexOf(includes, propName) < 0) {\n continue;\n }\n\n var val = model.getShallow(propName);\n\n if (val != null) {\n style[properties[i][0]] = val;\n }\n }\n\n return style;\n };\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar linearMap = _number.linearMap;\n\nvar layout = require(\"../../util/layout\");\n\nvar labelLayout = require(\"./labelLayout\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar PI2 = Math.PI * 2;\nvar RADIAN = Math.PI / 180;\n\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n\nfunction _default(seriesType, ecModel, api, payload) {\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var viewRect = getViewRect(seriesModel, api);\n var center = seriesModel.get('center');\n var radius = seriesModel.get('radius');\n\n if (!zrUtil.isArray(radius)) {\n radius = [0, radius];\n }\n\n if (!zrUtil.isArray(center)) {\n center = [center, center];\n }\n\n var width = parsePercent(viewRect.width, api.getWidth());\n var height = parsePercent(viewRect.height, api.getHeight());\n var size = Math.min(width, height);\n var cx = parsePercent(center[0], width) + viewRect.x;\n var cy = parsePercent(center[1], height) + viewRect.y;\n var r0 = parsePercent(radius[0], size / 2);\n var r = parsePercent(radius[1], size / 2);\n var startAngle = -seriesModel.get('startAngle') * RADIAN;\n var minAngle = seriesModel.get('minAngle') * RADIAN;\n var validDataCount = 0;\n data.each(valueDim, function (value) {\n !isNaN(value) && validDataCount++;\n });\n var sum = data.getSum(valueDim); // Sum may be 0\n\n var unitRadian = Math.PI / (sum || validDataCount) * 2;\n var clockwise = seriesModel.get('clockwise');\n var roseType = seriesModel.get('roseType');\n var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); // [0...max]\n\n var extent = data.getDataExtent(valueDim);\n extent[0] = 0; // In the case some sector angle is smaller than minAngle\n\n var restAngle = PI2;\n var valueSumLargerThanMinAngle = 0;\n var currentAngle = startAngle;\n var dir = clockwise ? 1 : -1;\n data.each(valueDim, function (value, idx) {\n var angle;\n\n if (isNaN(value)) {\n data.setItemLayout(idx, {\n angle: NaN,\n startAngle: NaN,\n endAngle: NaN,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? NaN : r,\n viewRect: viewRect\n });\n return;\n } // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样?\n\n\n if (roseType !== 'area') {\n angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian;\n } else {\n angle = PI2 / validDataCount;\n }\n\n if (angle < minAngle) {\n angle = minAngle;\n restAngle -= minAngle;\n } else {\n valueSumLargerThanMinAngle += value;\n }\n\n var endAngle = currentAngle + dir * angle;\n data.setItemLayout(idx, {\n angle: angle,\n startAngle: currentAngle,\n endAngle: endAngle,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? linearMap(value, extent, [r0, r]) : r,\n viewRect: viewRect\n });\n currentAngle = endAngle;\n }); // Some sector is constrained by minAngle\n // Rest sectors needs recalculate angle\n\n if (restAngle < PI2 && validDataCount) {\n // Average the angle if rest angle is not enough after all angles is\n // Constrained by minAngle\n if (restAngle <= 1e-3) {\n var angle = 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 } 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 ? 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, viewRect.width, viewRect.height, viewRect.x, viewRect.y);\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(ecModel) {\n var paletteScope = {};\n ecModel.eachSeriesByType('graph', function (seriesModel) {\n var categoriesData = seriesModel.getCategoriesData();\n var data = seriesModel.getData();\n var categoryNameIdxMap = {};\n categoriesData.each(function (idx) {\n var name = categoriesData.getName(idx); // Add prefix to avoid conflict with Object.prototype.\n\n categoryNameIdxMap['ec-' + name] = idx;\n var itemModel = categoriesData.getItemModel(idx);\n var color = itemModel.get('itemStyle.color') || seriesModel.getColorFromPalette(name, paletteScope);\n categoriesData.setItemVisual(idx, 'color', color);\n var itemStyleList = ['opacity', 'symbol', 'symbolSize', 'symbolKeepAspect'];\n\n for (var i = 0; i < itemStyleList.length; i++) {\n var itemStyle = itemModel.getShallow(itemStyleList[i], true);\n\n if (itemStyle != null) {\n categoriesData.setItemVisual(idx, itemStyleList[i], itemStyle);\n }\n }\n }); // Assign category color to visual\n\n if (categoriesData.count()) {\n data.each(function (idx) {\n var model = data.getItemModel(idx);\n var category = model.getShallow('category');\n\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(idx, itemStyleList[i], categoriesData.getItemVisual(category, itemStyleList[i]));\n }\n }\n }\n });\n }\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\nvar _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};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nvar preprocessor = require(\"./visualMap/preprocessor\");\n\nrequire(\"./visualMap/typeDefaulter\");\n\nrequire(\"./visualMap/visualEncoding\");\n\nrequire(\"./visualMap/PiecewiseModel\");\n\nrequire(\"./visualMap/PiecewiseView\");\n\nrequire(\"./visualMap/visualMapAction\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\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\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar isTypedArray = _util.isTypedArray;\nvar extend = _util.extend;\nvar assert = _util.assert;\nvar each = _util.each;\nvar isObject = _util.isObject;\n\nvar _model = require(\"../../util/model\");\n\nvar getDataItemValue = _model.getDataItemValue;\nvar isDataItemOption = _model.isDataItemOption;\n\nvar _number = require(\"../../util/number\");\n\nvar parseDate = _number.parseDate;\n\nvar Source = require(\"../Source\");\n\nvar _sourceType = require(\"./sourceType\");\n\nvar SOURCE_FORMAT_TYPED_ARRAY = _sourceType.SOURCE_FORMAT_TYPED_ARRAY;\nvar SOURCE_FORMAT_ARRAY_ROWS = _sourceType.SOURCE_FORMAT_ARRAY_ROWS;\nvar SOURCE_FORMAT_ORIGINAL = _sourceType.SOURCE_FORMAT_ORIGINAL;\nvar SOURCE_FORMAT_OBJECT_ROWS = _sourceType.SOURCE_FORMAT_OBJECT_ROWS;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO\n// ??? refactor? check the outer usage of data provider.\n// merge with defaultDimValueGetter?\n\n/**\n * If normal array used, mutable chunk size is supported.\n * If typed array used, chunk size must be fixed.\n */\nfunction DefaultDataProvider(source, dimSize) {\n if (!Source.isInstance(source)) {\n source = Source.seriesDataToSource(source);\n }\n\n this._source = source;\n var data = this._data = source.data;\n var sourceFormat = source.sourceFormat; // Typed array. TODO IE10+?\n\n if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {\n this._offset = 0;\n this._dimSize = dimSize;\n this._data = data;\n }\n\n var methods = providerMethods[sourceFormat === SOURCE_FORMAT_ARRAY_ROWS ? sourceFormat + '_' + source.seriesLayoutBy : sourceFormat];\n extend(this, methods);\n}\n\nvar providerProto = DefaultDataProvider.prototype; // If data is pure without style configuration\n\nproviderProto.pure = false; // If data is persistent and will not be released after use.\n\nproviderProto.persistent = true; // ???! FIXME legacy data provider do not has method getSource\n\nproviderProto.getSource = function () {\n return this._source;\n};\n\nvar providerMethods = {\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 '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\n for (var i = 0; i < data.length; i++) {\n var row = data[i];\n item.push(row ? row[idx] : null);\n }\n\n return item;\n },\n appendData: function () {\n throw new Error('Do not support appendData when set seriesLayoutBy: \"row\".');\n }\n },\n 'objectRows': {\n pure: true,\n count: countSimply,\n getItem: getItemSimply,\n appendData: appendDataSimply\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\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\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\n for (var i = 0; i < (newCol || []).length; i++) {\n oldCol.push(newCol[i]);\n }\n });\n }\n },\n 'original': {\n count: countSimply,\n getItem: getItemSimply,\n appendData: appendDataSimply\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\n for (var i = 0; i < this._dimSize; i++) {\n out[i] = this._data[offset + i];\n }\n\n return out;\n },\n appendData: function (newData) {\n this._data = newData;\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}\n\nfunction getItemSimply(idx) {\n return this._data[idx];\n}\n\nfunction appendDataSimply(newData) {\n for (var i = 0; i < newData.length; i++) {\n this._data.push(newData[i]);\n }\n}\n\nvar rawValueGetters = {\n arrayRows: getRawValueSimply,\n objectRows: function (dataItem, dataIndex, dimIndex, dimName) {\n return dimIndex != null ? dataItem[dimName] : dataItem;\n },\n keyedColumns: getRawValueSimply,\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) ? value : value[dimIndex];\n },\n typedArray: getRawValueSimply\n};\n\nfunction getRawValueSimply(dataItem, dataIndex, dimIndex, dimName) {\n return dimIndex != null ? dataItem[dimIndex] : dataItem;\n}\n\nvar defaultDimValueGetters = {\n arrayRows: getDimValueSimply,\n objectRows: function (dataItem, dimName, dataIndex, dimIndex) {\n return converDataValue(dataItem[dimName], this._dimensionInfos[dimName]);\n },\n keyedColumns: getDimValueSimply,\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); // If any dataItem is like { value: 10 }\n\n if (!this._rawData.pure && isDataItemOption(dataItem)) {\n this.hasItemOption = true;\n }\n\n return converDataValue(value instanceof Array ? value[dimIndex] // If value is a single number or something else not array.\n : value, this._dimensionInfos[dimName]);\n },\n typedArray: function (dataItem, dimName, dataIndex, dimIndex) {\n return dataItem[dimIndex];\n }\n};\n\nfunction getDimValueSimply(dataItem, dimName, dataIndex, dimIndex) {\n return converDataValue(dataItem[dimIndex], this._dimensionInfos[dimName]);\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 */\n\n\nfunction converDataValue(value, dimInfo) {\n // Performance sensitive.\n var dimType = dimInfo && dimInfo.type;\n\n if (dimType === 'ordinal') {\n // If given value is a category string\n var ordinalMeta = dimInfo && dimInfo.ordinalMeta;\n return ordinalMeta ? ordinalMeta.parseAndCollect(value) : value;\n }\n\n if (dimType === 'time' // spead up when using timestamp\n && typeof value !== 'number' && value != null && value !== '-') {\n value = +parseDate(value);\n } // dimType defaults 'number'.\n // If dimType is not ordinal and value is null or undefined or NaN or '-',\n // parse to NaN.\n\n\n return value == null || value === '' ? NaN // If string (like '-'), using '+' parse to NaN\n // If object, also parse to NaN\n : +value;\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/**\n * @param {module:echarts/data/List} data\n * @param {number} dataIndex\n * @param {string|number} [dim] dimName or dimIndex\n * @return {Array.|string|number} can be null/undefined.\n */\n\n\nfunction retrieveRawValue(data, dataIndex, dim) {\n if (!data) {\n return;\n } // Consider data may be not persistent.\n\n\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 var dimInfo = data.getDimensionInfo(dim);\n\n if (dimInfo) {\n dimName = dimInfo.name;\n dimIndex = dimInfo.index;\n }\n\n return rawValueGetters[sourceFormat](dataItem, dataIndex, dimIndex, dimName);\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 */\n\n\nfunction 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 && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS) {\n return;\n }\n\n var dataItem = data.getRawDataItem(dataIndex);\n\n if (sourceFormat === SOURCE_FORMAT_ORIGINAL && !isObject(dataItem)) {\n dataItem = null;\n }\n\n if (dataItem) {\n return dataItem[attr];\n }\n}\n\nexports.DefaultDataProvider = DefaultDataProvider;\nexports.defaultDimValueGetters = defaultDimValueGetters;\nexports.retrieveRawValue = retrieveRawValue;\nexports.retrieveRawAttr = retrieveRawAttr;","var fixShadow = require(\"./helper/fixShadow\");\n\nvar _constant = require(\"./constant\");\n\nvar ContextCachedBy = _constant.ContextCachedBy;\nvar STYLE_COMMON_PROPS = [['shadowBlur', 0], ['shadowOffsetX', 0], ['shadowOffsetY', 0], ['shadowColor', '#000'], ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]]; // 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 } // Fix NaN when rect is Infinity\n\n\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 var canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\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 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\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 return canvasGradient;\n}\n\nStyle.prototype = {\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.|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 // Bounding rect text configuration\n // Not affected by element transform\n\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.}\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.}\n */\n textOffset: null,\n\n /**\n * @type {string}\n */\n textAlign: null,\n\n /**\n * @type {string}\n */\n textVerticalAlign: null,\n\n /**\n * @type {number}\n */\n textDistance: 5,\n\n /**\n * @type {string}\n */\n textShadowColor: 'transparent',\n\n /**\n * @type {number}\n */\n textShadowBlur: 0,\n\n /**\n * @type {number}\n */\n textShadowOffsetX: 0,\n\n /**\n * @type {number}\n */\n textShadowOffsetY: 0,\n\n /**\n * @type {string}\n */\n textBoxShadowColor: 'transparent',\n\n /**\n * @type {number}\n */\n textBoxShadowBlur: 0,\n\n /**\n * @type {number}\n */\n textBoxShadowOffsetX: 0,\n\n /**\n * @type {number}\n */\n textBoxShadowOffsetY: 0,\n\n /**\n * Whether transform text.\n * Only available in Path and Image element,\n * where the text is called as `RectText`.\n * @type {boolean}\n */\n transformText: false,\n\n /**\n * Text rotate around position of Path or Image.\n * The origin of the rotation can be specified by `textOrigin`.\n * Only available in Path and Image element,\n * where the text is called as `RectText`.\n */\n textRotation: 0,\n\n /**\n * Text origin of text rotation.\n * Useful in the case like label rotation of circular symbol.\n * Only available in Path and Image element, where the text is called\n * as `RectText` and the element is called as \"host element\".\n * The value can be:\n * + If specified as a coordinate like `[10, 40]`, it is the `[x, y]`\n * base on the left-top corner of the rect of its host element.\n * + If specified as a string `center`, it is the center of the rect of\n * its host element.\n * + By default, this origin is the `textPosition`.\n * @type {string|Array.}\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.}\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; // If no prevStyle, it means first draw.\n // Only apply cache if the last time cachced by this function.\n\n var notCheckCache = !prevStyle || ctx.__attrCachedBy !== ContextCachedBy.STYLE_BIND;\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] = fixShadow(ctx, styleName, style[styleName] || prop[1]);\n }\n }\n\n if (notCheckCache || style.fill !== prevStyle.fill) {\n ctx.fillStyle = style.fill;\n }\n\n if (notCheckCache || style.stroke !== prevStyle.stroke) {\n ctx.strokeStyle = style.stroke;\n }\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\n if (this.hasStroke()) {\n var lineWidth = style.lineWidth;\n ctx.lineWidth = lineWidth / (this.strokeNoScale && el && el.getLineScale ? el.getLineScale() : 1);\n }\n },\n hasFill: function () {\n var fill = this.fill;\n return fill != null && fill !== 'none';\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) && (overwrite === true || (overwrite === false ? !this.hasOwnProperty(name) : otherStyle[name] != null))) {\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 } 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 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\n for (var i = 0; i < colorStops.length; i++) {\n canvasGradient.addColorStop(colorStops[i].offset, colorStops[i].color);\n }\n\n return canvasGradient;\n }\n};\nvar styleProto = Style.prototype;\n\nfor (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {\n var prop = STYLE_COMMON_PROPS[i];\n\n if (!(prop[0] in styleProto)) {\n styleProto[prop[0]] = prop[1];\n }\n} // Provide for others\n\n\nStyle.getGradient = styleProto.getGradient;\nvar _default = Style;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar VisualMapping = require(\"./VisualMapping\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\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 * @param {Object} option\n * @param {Array.} stateList\n * @param {Function} [supplementVisualOption]\n * @return {Object} visualMappings >\n */\n\n\nfunction createVisualMappings(option, stateList, supplementVisualOption) {\n var visualMappings = {};\n each(stateList, function (state) {\n var mappings = visualMappings[state] = createMappings();\n each(option[state], function (visualData, visualType) {\n if (!VisualMapping.isValidType(visualType)) {\n return;\n }\n\n var mappingOption = {\n type: visualType,\n visual: visualData\n };\n supplementVisualOption && supplementVisualOption(mappingOption, state);\n mappings[visualType] = new VisualMapping(mappingOption); // Prepare a alpha for opacity, for some case that opacity\n // is not supported, such as rendering using gradient color.\n\n if (visualType === 'opacity') {\n mappingOption = zrUtil.clone(mappingOption);\n mappingOption.type = 'colorAlpha';\n mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption);\n }\n });\n });\n return visualMappings;\n\n function createMappings() {\n var Creater = function () {}; // Make sure hidden fields will not be visited by\n // object iteration (with hasOwnProperty checking).\n\n\n Creater.prototype.__hidden = Creater.prototype;\n var obj = new Creater();\n return obj;\n }\n}\n/**\n * @param {Object} thisOption\n * @param {Object} newOption\n * @param {Array.} keys\n */\n\n\nfunction 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 } else {\n delete thisOption[key];\n }\n });\n}\n/**\n * @param {Array.} stateList\n * @param {Object} visualMappings >\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?\n\n\nfunction 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 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 } else {\n data.each([dimension], eachItem);\n }\n\n function eachItem(valueOrIndex, index) {\n dataIndex = dimension == null ? valueOrIndex : index;\n var rawDataItem = data.getRawDataItem(dataIndex); // Consider performance\n\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(valueOrIndex, getVisual, setVisual);\n }\n }\n}\n/**\n * @param {module:echarts/data/List} data\n * @param {Array.} stateList\n * @param {Object} visualMappings >\n * @param {Function} getValueState param: valueOrIndex, return: state.\n * @param {number} [dim] dimension or dimension index.\n */\n\n\nfunction 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\n while ((dataIndex = params.next()) != null) {\n var rawDataItem = data.getRawDataItem(dataIndex); // Consider performance\n\n if (rawDataItem && rawDataItem.visualMap === false) {\n continue;\n }\n\n var value = dim != null ? data.get(dim, dataIndex, true) : dataIndex;\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 {\n progress: progress\n };\n}\n\nexports.createVisualMappings = createVisualMappings;\nexports.replaceVisualOption = replaceVisualOption;\nexports.applyVisual = applyVisual;\nexports.incrementalApplyVisual = incrementalApplyVisual;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar createHashMap = _util.createHashMap;\nvar each = _util.each;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerProcessor({\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 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 return seriesModelMap;\n },\n modifyOutputEnd: true,\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 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 }); // 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\n dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) {\n dataZoomModel.getAxisProxy(dimNames.name, axisIndex).filterData(dataZoomModel, api);\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 dataZoomModel.setCalculatedRange({\n start: percentRange[0],\n end: percentRange[1],\n startValue: valueRange[0],\n endValue: valueRange[1]\n });\n });\n }\n});","var dpr = 1; // If in browser environment\n\nif (typeof window !== 'undefined') {\n dpr = Math.max(window.devicePixelRatio || 1, 1);\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 */\n\n\nvar debugMode = 0; // retina 屏幕优化\n\nvar devicePixelRatio = dpr;\nexports.debugMode = debugMode;\nexports.devicePixelRatio = devicePixelRatio;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"../coord/single/singleCreator\");\n\nrequire(\"./axis/SingleAxisView\");\n\nrequire(\"../coord/single/AxisModel\");\n\nrequire(\"./axisPointer\");\n\nrequire(\"./axisPointer/SingleAxisPointer\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.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\nvar echarts = require(\"../echarts\");\n\nvar preprocessor = require(\"./brush/preprocessor\");\n\nrequire(\"./brush/visualEncoding\");\n\nrequire(\"./brush/BrushModel\");\n\nrequire(\"./brush/BrushView\");\n\nrequire(\"./brush/brushAction\");\n\nrequire(\"./toolbox/feature/Brush\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\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\nvar _util = require(\"zrender/lib/core/util\");\n\nvar each = _util.each;\nvar createHashMap = _util.createHashMap;\nvar assert = _util.assert;\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar OTHER_DIMENSIONS = createHashMap(['tooltip', 'label', 'itemName', 'itemId', 'seriesName']);\n\nfunction summarizeDimensions(data) {\n var summary = {};\n var encode = summary.encode = {};\n var notExtraCoordDimMap = createHashMap();\n var defaultedLabel = [];\n var defaultedTooltip = []; // See the comment of `List.js#userOutput`.\n\n var userOutput = summary.userOutput = {\n dimensionNames: data.dimensions.slice(),\n encode: {}\n };\n each(data.dimensions, function (dimName) {\n var dimItem = data.getDimensionInfo(dimName);\n var coordDim = dimItem.coordDim;\n\n if (coordDim) {\n var coordDimIndex = dimItem.coordDimIndex;\n getOrCreateEncodeArr(encode, coordDim)[coordDimIndex] = dimName;\n\n if (!dimItem.isExtraCoord) {\n notExtraCoordDimMap.set(coordDim, 1); // 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\n if (mayLabelDimType(dimItem.type)) {\n defaultedLabel[0] = dimName;\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\n\n getOrCreateEncodeArr(userOutput.encode, coordDim)[coordDimIndex] = dimItem.index;\n }\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 var dimIndex = dimItem.otherDims[otherDim];\n\n if (dimIndex != null && dimIndex !== false) {\n encodeArr[dimIndex] = dimItem.name;\n }\n });\n });\n var dataDimsOnCoord = [];\n var encodeFirstDimNotExtra = {};\n notExtraCoordDimMap.each(function (v, coordDim) {\n var dimArr = encode[coordDim]; // ??? 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\n encodeFirstDimNotExtra[coordDim] = dimArr[0]; // Not necessary to remove duplicate, because a data\n // dim canot on more than one coordDim.\n\n dataDimsOnCoord = dataDimsOnCoord.concat(dimArr);\n });\n summary.dataDimsOnCoord = dataDimsOnCoord;\n summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra;\n var encodeLabel = encode.label; // 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\n if (encodeLabel && encodeLabel.length) {\n defaultedLabel = encodeLabel.slice();\n }\n\n var encodeTooltip = encode.tooltip;\n\n if (encodeTooltip && encodeTooltip.length) {\n defaultedTooltip = encodeTooltip.slice();\n } else if (!defaultedTooltip.length) {\n defaultedTooltip = defaultedLabel.slice();\n }\n\n encode.defaultedLabel = defaultedLabel;\n encode.defaultedTooltip = defaultedTooltip;\n return summary;\n}\n\nfunction getOrCreateEncodeArr(encode, dim) {\n if (!encode.hasOwnProperty(dim)) {\n encode[dim] = [];\n }\n\n return encode[dim];\n}\n\nfunction getDimensionTypeByAxis(axisType) {\n return axisType === 'category' ? 'ordinal' : axisType === 'time' ? 'time' : '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} // 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\nexports.OTHER_DIMENSIONS = OTHER_DIMENSIONS;\nexports.summarizeDimensions = summarizeDimensions;\nexports.getDimensionTypeByAxis = getDimensionTypeByAxis;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar barPolar = require(\"../layout/barPolar\");\n\nrequire(\"../coord/polar/polarCreator\");\n\nrequire(\"./angleAxis\");\n\nrequire(\"./radiusAxis\");\n\nrequire(\"./axisPointer\");\n\nrequire(\"./axisPointer/PolarAxisPointer\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// For reducing size of echarts.min, barLayoutPolar is required by polar.\necharts.registerLayout(zrUtil.curry(barPolar, 'bar')); // Polar view\n\necharts.extendComponentView({\n type: 'polar'\n});","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar borderColorQuery = ['itemStyle', 'borderColor'];\n\nfunction _default(ecModel, api) {\n var globalColors = ecModel.get('color');\n ecModel.eachRawSeriesByType('boxplot', function (seriesModel) {\n var defaulColor = globalColors[seriesModel.seriesIndex % globalColors.length];\n var data = seriesModel.getData();\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 }); // Only visible series has each data be visual encoded\n\n if (!ecModel.isSeriesFiltered(seriesModel)) {\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n data.setItemVisual(idx, {\n color: itemModel.get(borderColorQuery, true)\n });\n });\n }\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar createListFromArray = require(\"../helper/createListFromArray\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = SeriesModel.extend({\n type: 'series.__base_bar__',\n getInitialData: function (option, ecModel) {\n return createListFromArray(this.getSource(), this, {\n useEncodeDefaulter: true\n });\n },\n getMarkerPosition: function (value) {\n var coordSys = this.coordinateSystem;\n\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\n return [NaN, NaN];\n },\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 2,\n // 二级层叠\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n // stack: null\n // Cartesian coordinate system\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // 最小高度改为0\n barMinHeight: 0,\n // 最小角度为0,仅对极坐标系下的柱状图有效\n barMinAngle: 0,\n // cursor: null,\n large: false,\n largeThreshold: 400,\n progressive: 3e3,\n progressiveChunkMode: 'mod',\n // barMaxWidth: null,\n // In cartesian, the default value is 1. Otherwise null.\n // barMinWidth: 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\nmodule.exports = _default;","var Group = require(\"../container/Group\");\n\nvar ZImage = require(\"../graphic/Image\");\n\nvar Text = require(\"../graphic/Text\");\n\nvar Circle = require(\"../graphic/shape/Circle\");\n\nvar Rect = require(\"../graphic/shape/Rect\");\n\nvar Ellipse = require(\"../graphic/shape/Ellipse\");\n\nvar Line = require(\"../graphic/shape/Line\");\n\nvar Path = require(\"../graphic/Path\");\n\nvar Polygon = require(\"../graphic/shape/Polygon\");\n\nvar Polyline = require(\"../graphic/shape/Polyline\");\n\nvar LinearGradient = require(\"../graphic/LinearGradient\");\n\nvar Style = require(\"../graphic/Style\");\n\nvar matrix = require(\"../core/matrix\");\n\nvar _path = require(\"./path\");\n\nvar createFromString = _path.createFromString;\n\nvar _util = require(\"../core/util\");\n\nvar isString = _util.isString;\nvar extend = _util.extend;\nvar defaults = _util.defaults;\nvar trim = _util.trim;\nvar each = _util.each;\n// import RadialGradient from '../graphic/RadialGradient';\n// import Pattern from '../graphic/Pattern';\n// import * as vector from '../core/vector';\n// Most of the values can be separated by comma and/or white space.\nvar DILIMITER_REG = /[\\s,]+/;\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 */\n\nfunction parseXML(svg) {\n if (isString(svg)) {\n var parser = new DOMParser();\n svg = parser.parseFromString(svg, 'text/xml');\n } // Document node. If using $.get, doc node may be input.\n\n\n if (svg.nodeType === 9) {\n svg = svg.firstChild;\n } // nodeName of is also 'svg'.\n\n\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 this._isDefine = false;\n this._isText = false;\n}\n\nSVGParser.prototype.parse = function (xml, opt) {\n opt = opt || {};\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; // parse view port\n\n var viewBox = svg.getAttribute('viewBox') || ''; // If width/height not specified, means \"100%\" of `opt.width/height`.\n // TODO: Other percent value not supported yet.\n\n var width = parseFloat(svg.getAttribute('width') || opt.width);\n var height = parseFloat(svg.getAttribute('height') || opt.height); // If width/height not specified, set as null for output.\n\n isNaN(width) && (width = null);\n isNaN(height) && (height = null); // Apply inline style on svg element.\n\n parseAttributes(svg, root, null, true);\n var child = svg.firstChild;\n\n while (child) {\n this._parseNode(child, root);\n\n child = child.nextSibling;\n }\n\n var viewBoxRect;\n var viewBoxTransform;\n\n if (viewBox) {\n var viewBoxArr = trim(viewBox).split(DILIMITER_REG); // Some invalid case like viewBox: 'none'.\n\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 } // Some shapes might be overflow the viewport, which should be\n // clipped despite whether the viewBox is used, as the SVG does.\n\n\n if (!opt.ignoreRootClip && width != null && height != null) {\n root.setClipPath(new Rect({\n shape: {\n x: 0,\n y: 0,\n width: width,\n height: height\n }\n }));\n } // Set width/height on group just for output the viewport size.\n\n\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 var nodeName = xmlNode.nodeName.toLowerCase(); // TODO\n // support 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 } else if (nodeName === 'text') {\n this._isText = true;\n }\n\n var el;\n\n if (this._isDefine) {\n var parser = defineParsers[nodeName];\n\n if (parser) {\n var def = parser.call(this, xmlNode);\n var id = xmlNode.getAttribute('id');\n\n if (id) {\n this._defs[id] = def;\n }\n }\n } else {\n var parser = nodeParsers[nodeName];\n\n if (parser) {\n el = parser.call(this, xmlNode, parentGroup);\n parentGroup.add(el);\n }\n }\n\n var child = xmlNode.firstChild;\n\n while (child) {\n if (child.nodeType === 1) {\n this._parseNode(child, el);\n } // Is text\n\n\n if (child.nodeType === 3 && this._isText) {\n this._parseText(child, el);\n }\n\n child = child.nextSibling;\n } // Quit define\n\n\n if (nodeName === 'defs') {\n this._isDefine = false;\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 inheritStyle(parentGroup, text);\n parseAttributes(xmlNode, text, this._defs);\n var fontSize = text.style.fontSize;\n\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 parentGroup.add(text);\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 return g;\n },\n 'rect': function (xmlNode, parentGroup) {\n var rect = new Rect();\n inheritStyle(parentGroup, rect);\n parseAttributes(xmlNode, rect, this._defs);\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 }); // 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 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 return circle;\n },\n 'line': function (xmlNode, parentGroup) {\n var line = new Line();\n inheritStyle(parentGroup, line);\n parseAttributes(xmlNode, line, this._defs);\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 return line;\n },\n 'ellipse': function (xmlNode, parentGroup) {\n var ellipse = new Ellipse();\n inheritStyle(parentGroup, ellipse);\n parseAttributes(xmlNode, ellipse, this._defs);\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\n if (points) {\n points = parsePoints(points);\n }\n\n var polygon = new Polygon({\n shape: {\n points: points || []\n }\n });\n inheritStyle(parentGroup, polygon);\n parseAttributes(xmlNode, polygon, this._defs);\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 var points = xmlNode.getAttribute('points');\n\n if (points) {\n points = parsePoints(points);\n }\n\n var polyline = new Polyline({\n shape: {\n points: points || []\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 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 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 this._textX = parseFloat(x) + parseFloat(dx);\n this._textY = parseFloat(y) + parseFloat(dy);\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n return g;\n },\n 'tspan': function (xmlNode, parentGroup) {\n var x = xmlNode.getAttribute('x');\n var y = xmlNode.getAttribute('y');\n\n if (x != null) {\n // new offset x\n this._textX = parseFloat(x);\n }\n\n if (y != null) {\n // new offset y\n this._textY = parseFloat(y);\n }\n\n var dx = xmlNode.getAttribute('dx') || 0;\n var dy = xmlNode.getAttribute('dy') || 0;\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defs);\n this._textX += dx;\n this._textY += dy;\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') || ''; // Performance sensitive.\n\n var path = createFromString(d);\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defs);\n return path;\n }\n};\nvar defineParsers = {\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 var gradient = new LinearGradient(x1, y1, x2, y2);\n\n _parseGradientColorStops(xmlNode, gradient);\n\n return gradient;\n },\n 'radialgradient': function (xmlNode) {}\n};\n\nfunction _parseGradientColorStops(xmlNode, gradient) {\n var stop = xmlNode.firstChild;\n\n while (stop) {\n if (stop.nodeType === 1) {\n var offset = stop.getAttribute('offset');\n\n if (offset.indexOf('%') > 0) {\n // percentage\n offset = parseInt(offset, 10) / 100;\n } else if (offset) {\n // number from 0 to 1\n offset = parseFloat(offset);\n } else {\n offset = 0;\n }\n\n var stopColor = stop.getAttribute('stop-color') || '#000000';\n gradient.addColorStop(offset, stopColor);\n }\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\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\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 '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'; // TODO Shadow\n\n if (xmlNode.nodeType === 1) {\n parseTransformAttribute(xmlNode, el);\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\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 el.style = el.style || new Style();\n var elStyle = el.style;\n zrStyle.fill != null && elStyle.set(elFillProp, getPaint(zrStyle.fill, defs));\n zrStyle.stroke != null && elStyle.set(elStrokeProp, getPaint(zrStyle.stroke, defs));\n each(['lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'], 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\n if (zrStyle.textBaseline === 'alphabetic') {\n zrStyle.textBaseline = 'bottom';\n }\n\n if (zrStyle.textAlign === 'start') {\n zrStyle.textAlign = 'left';\n }\n\n if (zrStyle.textAlign === 'end') {\n zrStyle.textAlign = 'right';\n }\n\n each(['lineDashOffset', 'lineCap', 'lineJoin', 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign', 'textBaseline'], 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\nvar urlRegex = /url\\(\\s*#(.*?)\\)/;\n\nfunction getPaint(str, defs) {\n // if (str === 'none') {\n // return;\n // }\n var urlMatch = defs && str && str.match(urlRegex);\n\n if (urlMatch) {\n var url = trim(urlMatch[1]);\n var def = defs[url];\n return def;\n }\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\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\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\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\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\n case 'rotate':\n value = trim(value).split(DILIMITER_REG);\n matrix.rotate(m, m, parseFloat(value[0]));\n break;\n\n case 'skew':\n value = trim(value).split(DILIMITER_REG);\n console.warn('Skew transform is not supported yet');\n break;\n\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\n node.setLocalTransform(m);\n }\n} // Value may contain space.\n\n\nvar styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\n\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\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 * @param {Array.} viewBoxRect\n * @param {number} width\n * @param {number} height\n * @return {Object} {scale, position}\n */\n\n\nfunction makeViewBoxTransform(viewBoxRect, width, height) {\n var scaleX = width / viewBoxRect.width;\n var scaleY = height / viewBoxRect.height;\n var scale = Math.min(scaleX, scaleY); // preserveAspectRatio 'xMidYMid'\n\n var viewBoxScale = [scale, scale];\n var viewBoxPosition = [-(viewBoxRect.x + viewBoxRect.width / 2) * scale + width / 2, -(viewBoxRect.y + viewBoxRect.height / 2) * scale + height / 2];\n return {\n scale: viewBoxScale,\n position: viewBoxPosition\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 */\n\n\nfunction parseSVG(xml, opt) {\n var parser = new SVGParser();\n return parser.parse(xml, opt);\n}\n\nexports.parseXML = parseXML;\nexports.makeViewBoxTransform = makeViewBoxTransform;\nexports.parseSVG = parseSVG;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar VisualMapModel = require(\"./VisualMapModel\");\n\nvar numberUtil = require(\"../../util/number\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Constant\nvar DEFAULT_BAR_BOUND = [20, 140];\nvar ContinuousModel = VisualMapModel.extend({\n type: 'visualMap.continuous',\n\n /**\n * @protected\n */\n defaultOption: {\n align: 'auto',\n // 'auto', 'left', 'right', 'top', 'bottom'\n calculable: false,\n // This prop effect default component type determine,\n // See echarts/component/visualMap/typeDefaulter.\n range: null,\n // 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,\n // Whether realtime update.\n itemHeight: null,\n // The length of the range control edge.\n itemWidth: null,\n // The length of the other side.\n hoverLink: true,\n // Enable hover highlight.\n hoverLinkDataSize: null,\n // 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 /**\n * @override\n */\n optionUpdated: function (newOption, isInit) {\n ContinuousModel.superApply(this, 'optionUpdated', arguments);\n this.resetExtent();\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 var itemSize = this.itemSize;\n this._orient === 'horizontal' && itemSize.reverse();\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 } else if (zrUtil.isArray(range)) {\n if (range[0] > range[1]) {\n range.reverse();\n }\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 zrUtil.each(this.stateList, function (state) {\n var symbolSize = this.option.controller[state].symbolSize;\n\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\n this._resetRange();\n },\n\n /**\n * @public\n */\n getSelected: function () {\n var dataExtent = this.getExtent();\n var dataInterval = numberUtil.asc((this.get('range') || []).slice()); // Clamp\n\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 return dataInterval;\n },\n\n /**\n * @override\n */\n getValueState: function (value) {\n var range = this.option.range;\n var dataExtent = this.getExtent(); // When range[0] === dataExtent[0], any value larger than dataExtent[0] maps to 'inRange'.\n // range[1] is processed likewise.\n\n return (range[0] <= dataExtent[0] || range[0] <= value) && (range[1] >= dataExtent[1] || value <= range[1]) ? 'inRange' : 'outOfRange';\n },\n\n /**\n * @params {Array.} range target value: range[0] <= value && value <= range[1]\n * @return {Array.} [{seriesId, dataIndices: >}, ...]\n */\n findTargetDataIndices: function (range) {\n var result = [];\n this.eachTargetSeries(function (seriesModel) {\n var dataIndices = [];\n var data = seriesModel.getData();\n data.each(this.getDataDimension(data), function (value, dataIndex) {\n range[0] <= value && value <= range[1] && dataIndices.push(dataIndex);\n }, this);\n result.push({\n seriesId: seriesModel.id,\n dataIndex: dataIndices\n });\n }, this);\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 } // Format to: outOfRange -- inRange -- outOfRange.\n\n\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\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\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\n setStop(oVals[oIdx], 'outOfRange');\n }\n }\n\n var stopsLen = stops.length;\n return {\n stops: stops,\n outerColors: [stopsLen ? stops[0].color : 'transparent', stopsLen ? stops[stopsLen - 1].color : 'transparent']\n };\n }\n});\n\nfunction getColorStopValues(visualMapModel, valueState, dataExtent) {\n if (dataExtent[0] === dataExtent[1]) {\n return dataExtent.slice();\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\n\n var count = 200;\n var step = (dataExtent[1] - dataExtent[0]) / count;\n var value = dataExtent[0];\n var stopValues = [];\n\n for (var i = 0; i <= count && value < dataExtent[1]; i++) {\n stopValues.push(value);\n value += step;\n }\n\n stopValues.push(dataExtent[1]);\n return stopValues;\n}\n\nvar _default = ContinuousModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction 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' ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));\n}\n\nfunction _default(coordSys) {\n var rect = coordSys.getRect();\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar List = require(\"../../data/List\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar markerHelper = require(\"./markerHelper\");\n\nvar LineDraw = require(\"../../chart/helper/LineDraw\");\n\nvar MarkerView = require(\"./MarkerView\");\n\nvar _dataStackHelper = require(\"../../data/helper/dataStackHelper\");\n\nvar getStackedDimension = _dataStackHelper.getStackedDimension;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar markLineTransform = function (seriesModel, coordSys, mlModel, item) {\n var data = seriesModel.getData(); // Special type markLine like 'min', 'max', 'average', 'median'\n\n var mlType = item.type;\n\n if (!zrUtil.isArray(item) && (mlType === 'min' || mlType === 'max' || mlType === 'average' || mlType === 'median' // In case\n // data: [{\n // yAxis: 10\n // }]\n || item.xAxis != null || item.yAxis != null)) {\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 } 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\n var valueIndex = valueAxis.dim === 'x' ? 0 : 1;\n var baseIndex = 1 - valueIndex;\n var mlFrom = zrUtil.clone(item);\n var mlTo = {};\n mlFrom.type = null;\n mlFrom.coord = [];\n mlTo.coord = [];\n mlFrom.coord[baseIndex] = -Infinity;\n mlTo.coord[baseIndex] = Infinity;\n var precision = mlModel.get('precision');\n\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 item = [mlFrom, mlTo, {\n // 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 = [markerHelper.dataTransform(seriesModel, item[0]), markerHelper.dataTransform(seriesModel, item[1]), zrUtil.extend({}, item[2])]; // Avoid line data type is extended by from(to) data type\n\n item[2].type = item[2].type || ''; // Merge from option and to option into line option\n\n zrUtil.merge(item[2], item[0]);\n zrUtil.merge(item[2], item[1]);\n return item;\n};\n\nfunction isInifinity(val) {\n return !isNaN(val) && !isFinite(val);\n} // If a markLine has one dim\n\n\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]) && 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; // In case\n // {\n // markLine: {\n // data: [{ yAxis: 2 }]\n // }\n // }\n\n if (fromCoord && toCoord && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))) {\n return true;\n }\n }\n\n return markerHelper.dataFilter(coordSys, item[0]) && markerHelper.dataFilter(coordSys, item[1]);\n}\n\nfunction updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var itemModel = data.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\n if (!isNaN(xPx) && !isNaN(yPx)) {\n point = [xPx, yPx];\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(data.getValues(data.dimensions, idx));\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 } // 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\n\n if (coordSys.type === 'cartesian2d') {\n var xAxis = coordSys.getAxis('x');\n var yAxis = coordSys.getAxis('y');\n var dims = coordSys.dimensions;\n\n if (isInifinity(data.get(dims[0], idx))) {\n point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]);\n } else if (isInifinity(data.get(dims[1], idx))) {\n point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]);\n }\n } // Use x, y if has any\n\n\n if (!isNaN(xPx)) {\n point[0] = xPx;\n }\n\n if (!isNaN(yPx)) {\n point[1] = yPx;\n }\n }\n\n data.setItemLayout(idx, point);\n}\n\nvar _default = MarkerView.extend({\n type: 'markLine',\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 // this.markerGroupMap.get(seriesModel.id).updateLayout();\n // }\n // }, this);\n // },\n updateTransform: function (markLineModel, ecModel, api) {\n ecModel.eachSeries(function (seriesModel) {\n var mlModel = seriesModel.markLineModel;\n\n if (mlModel) {\n var mlData = mlModel.getData();\n var fromData = mlModel.__from;\n var toData = mlModel.__to; // Update visual and layout of from symbol and to symbol\n\n fromData.each(function (idx) {\n updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api);\n updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api);\n }); // Update layout of line\n\n mlData.each(function (idx) {\n mlData.setItemLayout(idx, [fromData.getItemLayout(idx), toData.getItemLayout(idx)]);\n });\n this.markerGroupMap.get(seriesModel.id).updateLayout();\n }\n }, this);\n },\n renderSeries: function (seriesModel, mlModel, ecModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var seriesId = seriesModel.id;\n var seriesData = seriesModel.getData();\n var lineDrawMap = this.markerGroupMap;\n var lineDraw = lineDrawMap.get(seriesId) || lineDrawMap.set(seriesId, new LineDraw());\n this.group.add(lineDraw.group);\n var mlData = createList(coordSys, seriesModel, mlModel);\n var fromData = mlData.from;\n var toData = mlData.to;\n var lineData = mlData.line;\n mlModel.__from = fromData;\n mlModel.__to = toData; // Line data for tooltip and formatter\n\n mlModel.setData(lineData);\n var symbolType = mlModel.get('symbol');\n var symbolSize = mlModel.get('symbolSize');\n\n if (!zrUtil.isArray(symbolType)) {\n symbolType = [symbolType, symbolType];\n }\n\n if (typeof symbolSize === 'number') {\n symbolSize = [symbolSize, symbolSize];\n } // Update visual and layout of from symbol and to symbol\n\n\n mlData.from.each(function (idx) {\n updateDataVisualAndLayout(fromData, idx, true);\n updateDataVisualAndLayout(toData, idx, false);\n }); // Update visual and layout of line\n\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, [fromData.getItemLayout(idx), toData.getItemLayout(idx)]);\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 lineDraw.updateData(lineData); // Set host model for tooltip\n // FIXME\n\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 updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api);\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 lineDraw.group.silent = mlModel.get('silent') || seriesModel.get('silent');\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 */\n\n\nfunction createList(coordSys, seriesModel, mlModel) {\n var coordDimsInfos;\n\n if (coordSys) {\n coordDimsInfos = zrUtil.map(coordSys && coordSys.dimensions, function (coordDim) {\n var info = seriesModel.getData().getDimensionInfo(seriesModel.getData().mapDimension(coordDim)) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n\n return zrUtil.defaults({\n name: coordDim\n }, info);\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); // No dimensions\n\n var lineData = new List([], mlModel);\n var optData = zrUtil.map(mlModel.get('data'), zrUtil.curry(markLineTransform, seriesModel, coordSys, mlModel));\n\n if (coordSys) {\n optData = zrUtil.filter(optData, zrUtil.curry(markLineFilter, coordSys));\n }\n\n var dimValueGetter = coordSys ? markerHelper.dimValueGetter : function (item) {\n return item.value;\n };\n fromData.initData(zrUtil.map(optData, function (item) {\n return item[0];\n }), null, dimValueGetter);\n toData.initData(zrUtil.map(optData, function (item) {\n return item[1];\n }), null, dimValueGetter);\n lineData.initData(zrUtil.map(optData, function (item) {\n return item[2];\n }));\n lineData.hasItemOption = true;\n return {\n from: fromData,\n to: toData,\n line: lineData\n };\n}\n\nmodule.exports = _default;","var util = require(\"../core/util\");\n\nvar _event = require(\"../core/event\");\n\nvar Dispatcher = _event.Dispatcher;\n\nvar requestAnimationFrame = require(\"./requestAnimationFrame\");\n\nvar Animator = require(\"./Animator\");\n\n/**\n * Animation main class, dispatch and manage all animation controllers\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\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 options = options || {};\n this.stage = options.stage || {};\n\n this.onframe = options.onframe || function () {}; // private properties\n\n\n this._clips = [];\n this._running = false;\n this._time;\n this._pausedTime;\n this._pauseStart;\n this._paused = false;\n Dispatcher.call(this);\n};\n\nAnimation.prototype = {\n constructor: Animation,\n\n /**\n * Add clip\n * @param {module:zrender/animation/Clip} clip\n */\n addClip: function (clip) {\n this._clips.push(clip);\n },\n\n /**\n * Add animator\n * @param {module:zrender/animation/Animator} animator\n */\n addAnimator: function (animator) {\n animator.animation = this;\n var clips = animator.getClips();\n\n for (var i = 0; i < clips.length; i++) {\n this.addClip(clips[i]);\n }\n },\n\n /**\n * Delete animation clip\n * @param {module:zrender/animation/Clip} clip\n */\n removeClip: function (clip) {\n var idx = util.indexOf(this._clips, clip);\n\n if (idx >= 0) {\n this._clips.splice(idx, 1);\n }\n },\n\n /**\n * Delete animation clip\n * @param {module:zrender/animation/Animator} animator\n */\n removeAnimator: function (animator) {\n var clips = animator.getClips();\n\n for (var i = 0; i < clips.length; i++) {\n this.removeClip(clips[i]);\n }\n\n animator.animation = null;\n },\n _update: function () {\n var time = new Date().getTime() - this._pausedTime;\n\n var delta = time - this._time;\n var clips = this._clips;\n var len = clips.length;\n var deferredEvents = [];\n var deferredClips = [];\n\n for (var i = 0; i < len; i++) {\n var clip = clips[i];\n var e = clip.step(time, delta); // Throw out the events need to be called after\n // stage.update, like destroy\n\n if (e) {\n deferredEvents.push(e);\n deferredClips.push(clip);\n }\n } // Remove the finished clip\n\n\n for (var i = 0; i < len;) {\n if (clips[i]._needsRemove) {\n clips[i] = clips[len - 1];\n clips.pop();\n len--;\n } else {\n i++;\n }\n }\n\n len = deferredEvents.length;\n\n for (var i = 0; i < len; i++) {\n deferredClips[i].fire(deferredEvents[i]);\n }\n\n this._time = time;\n this.onframe(delta); // 'frame' should be triggered before stage, because upper application\n // depends on the sequence (e.g., echarts-stream and finish\n // event judge)\n\n this.trigger('frame', delta);\n\n if (this.stage.update) {\n this.stage.update();\n }\n },\n _startLoop: function () {\n var self = this;\n this._running = true;\n\n function step() {\n if (self._running) {\n requestAnimationFrame(step);\n !self._paused && self._update();\n }\n }\n\n requestAnimationFrame(step);\n },\n\n /**\n * Start animation.\n */\n start: function () {\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 var animator = new Animator(target, options.loop, options.getter, options.setter);\n this.addAnimator(animator);\n return animator;\n }\n};\nutil.mixin(Animation, Dispatcher);\nvar _default = Animation;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./sankey/SankeySeries\");\n\nrequire(\"./sankey/SankeyView\");\n\nrequire(\"./sankey/sankeyAction\");\n\nvar sankeyLayout = require(\"./sankey/sankeyLayout\");\n\nvar sankeyVisual = require(\"./sankey/sankeyVisual\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerLayout(sankeyLayout);\necharts.registerVisual(sankeyVisual);","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _echarts = require(\"./lib/echarts\");\n\n(function () {\n for (var key in _echarts) {\n if (_echarts == null || !_echarts.hasOwnProperty(key) || key === 'default' || key === '__esModule') return;\n exports[key] = _echarts[key];\n }\n})();\n\nvar _export = require(\"./lib/export\");\n\n(function () {\n for (var key in _export) {\n if (_export == null || !_export.hasOwnProperty(key) || key === 'default' || key === '__esModule') return;\n exports[key] = _export[key];\n }\n})();\n\nrequire(\"./lib/component/dataset\");\n\nrequire(\"./lib/chart/line\");\n\nrequire(\"./lib/chart/bar\");\n\nrequire(\"./lib/chart/pie\");\n\nrequire(\"./lib/chart/scatter\");\n\nrequire(\"./lib/chart/radar\");\n\nrequire(\"./lib/chart/map\");\n\nrequire(\"./lib/chart/tree\");\n\nrequire(\"./lib/chart/treemap\");\n\nrequire(\"./lib/chart/graph\");\n\nrequire(\"./lib/chart/gauge\");\n\nrequire(\"./lib/chart/funnel\");\n\nrequire(\"./lib/chart/parallel\");\n\nrequire(\"./lib/chart/sankey\");\n\nrequire(\"./lib/chart/boxplot\");\n\nrequire(\"./lib/chart/candlestick\");\n\nrequire(\"./lib/chart/effectScatter\");\n\nrequire(\"./lib/chart/lines\");\n\nrequire(\"./lib/chart/heatmap\");\n\nrequire(\"./lib/chart/pictorialBar\");\n\nrequire(\"./lib/chart/themeRiver\");\n\nrequire(\"./lib/chart/sunburst\");\n\nrequire(\"./lib/chart/custom\");\n\nrequire(\"./lib/component/grid\");\n\nrequire(\"./lib/component/polar\");\n\nrequire(\"./lib/component/geo\");\n\nrequire(\"./lib/component/singleAxis\");\n\nrequire(\"./lib/component/parallel\");\n\nrequire(\"./lib/component/calendar\");\n\nrequire(\"./lib/component/graphic\");\n\nrequire(\"./lib/component/toolbox\");\n\nrequire(\"./lib/component/tooltip\");\n\nrequire(\"./lib/component/axisPointer\");\n\nrequire(\"./lib/component/brush\");\n\nrequire(\"./lib/component/title\");\n\nrequire(\"./lib/component/timeline\");\n\nrequire(\"./lib/component/markPoint\");\n\nrequire(\"./lib/component/markLine\");\n\nrequire(\"./lib/component/markArea\");\n\nrequire(\"./lib/component/legendScroll\");\n\nrequire(\"./lib/component/legend\");\n\nrequire(\"./lib/component/dataZoom\");\n\nrequire(\"./lib/component/dataZoomInside\");\n\nrequire(\"./lib/component/dataZoomSlider\");\n\nrequire(\"./lib/component/visualMap\");\n\nrequire(\"./lib/component/visualMapContinuous\");\n\nrequire(\"./lib/component/visualMapPiecewise\");\n\nrequire(\"zrender/lib/vml/vml\");\n\nrequire(\"zrender/lib/svg/svg\");","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Link lists and struct (graph or tree)\n */\nvar each = zrUtil.each;\nvar DATAS = '\\0__link_datas';\nvar MAIN_DATA = '\\0__link_mainData'; // 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 */\n\nfunction linkList(opt) {\n var mainData = opt.mainData;\n var datas = opt.datas;\n\n if (!datas) {\n datas = {\n main: mainData\n };\n opt.datasAttr = {\n main: 'data'\n };\n }\n\n opt.datas = opt.mainData = null;\n linkAll(mainData, datas, opt); // Porxy data original methods.\n\n each(datas, function (data) {\n each(mainData.TRANSFERABLE_METHODS, function (methodName) {\n data.wrapMethod(methodName, zrUtil.curry(transferInjection, opt));\n });\n }); // Beyond transfer, additional features should be added to `cloneShallow`.\n\n mainData.wrapMethod('cloneShallow', zrUtil.curry(cloneShallowInjection, opt)); // Only mainData trigger change, because struct.update may trigger\n // another changable methods, which may bring about dead lock.\n\n each(mainData.CHANGABLE_METHODS, function (methodName) {\n mainData.wrapMethod(methodName, zrUtil.curry(changeInjection, opt));\n }); // Make sure datas contains mainData.\n\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 } else {\n // Modify the reference in main data to point newData.\n linkSingle(res, this.dataType, this[MAIN_DATA], opt);\n }\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 * Supplement method to List.\n *\n * @public\n * @param {string} [dataType] If not specified, return mainData.\n * @return {module:echarts/data/List}\n */\n\n\nfunction getLinkedData(dataType) {\n var mainData = this[MAIN_DATA];\n return dataType == null || mainData == null ? mainData : 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 } // Supplement method.\n\n\n data.getLinkedData = getLinkedData;\n}\n\nvar _default = linkList;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Region = require(\"../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// Fix for 南海诸岛\nvar geoCoord = [126, 25];\nvar points = [[[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, 0.7], [52, 0.7], [56, 7.7], [59, 0.7], [64, 0.7], [64, 0], [5, 0], [0, 3.5]], [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]], [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]], [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]], [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]], [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]], [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]], [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]], [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]], [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]], [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]], [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4], [1, 92.4], [1, 3.5], [0, 3.5]]];\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 points[i][k][0] += geoCoord[0];\n points[i][k][1] += geoCoord[1];\n }\n}\n\nfunction _default(mapType, regions) {\n if (mapType === 'china') {\n regions.push(new Region('南海诸岛', zrUtil.map(points, function (exterior) {\n return {\n type: 'polygon',\n exterior: exterior\n };\n }), geoCoord));\n }\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar DataZoomView = require(\"./DataZoomView\");\n\nvar sliderMove = require(\"../helper/sliderMove\");\n\nvar roams = require(\"./roams\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar bind = zrUtil.bind;\nvar InsideZoomView = DataZoomView.extend({\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.}\n */\n this._range;\n },\n\n /**\n * @override\n */\n render: function (dataZoomModel, ecModel, api, payload) {\n InsideZoomView.superApply(this, 'render', arguments); // 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\n this._range = dataZoomModel.getPercentRange(); // Reset controllers.\n\n zrUtil.each(this.getTargetCoordInfo(), function (coordInfoList, coordSysName) {\n var allCoordIds = zrUtil.map(coordInfoList, function (coordInfo) {\n return roams.generateCoordId(coordInfo.model);\n });\n zrUtil.each(coordInfoList, function (coordInfo) {\n var coordModel = coordInfo.model;\n var getRange = {};\n zrUtil.each(['pan', 'zoom', 'scrollMove'], function (eventName) {\n getRange[eventName] = bind(roamHandlers[eventName], this, coordInfo, coordSysName);\n }, this);\n roams.register(api, {\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 }, this);\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});\nvar roamHandlers = {\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(); // Calculate transform by the first axis.\n\n var axisModel = coordInfo.axisModels[0];\n\n if (!axisModel) {\n return;\n }\n\n var directionInfo = getDirectionInfo[coordSysName](null, [e.originX, e.originY], axisModel, controller, coordInfo);\n var percentPoint = (directionInfo.signal > 0 ? directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel : directionInfo.pixel - directionInfo.pixelStart) / directionInfo.pixelLength * (range[1] - range[0]) + range[0];\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; // Restrict range.\n\n var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();\n sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan);\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]([e.oldX, e.oldY], [e.newX, e.newY], axisModel, controller, coordInfo);\n return directionInfo.signal * (range[1] - range[0]) * 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]([0, 0], [e.scrollDelta, e.scrollDelta], axisModel, controller, coordInfo);\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(); // Calculate transform by the first axis.\n\n var axisModel = coordInfo.axisModels[0];\n\n if (!axisModel) {\n return;\n }\n\n var percentDelta = getPercentDelta(range, axisModel, coordInfo, coordSysName, controller, e);\n sliderMove(percentDelta, range, [0, 100], 'all');\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 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 } else {\n // 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 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 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]; // ret.pixelLength = Math.abs(radiusExtent[1] - radiusExtent[0]);\n // ret.pixelStart = Math.min(radiusExtent[0], radiusExtent[1]);\n\n ret.pixelLength = radiusExtent[1] - radiusExtent[0];\n ret.pixelStart = radiusExtent[0];\n ret.signal = axis.inverse ? 1 : -1;\n } else {\n // 'angleAxis'\n ret.pixel = newPoint[1] - oldPoint[1]; // ret.pixelLength = Math.abs(angleExtent[1] - angleExtent[0]);\n // ret.pixelStart = Math.min(angleExtent[0], angleExtent[1]);\n\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 singleAxis: function (oldPoint, newPoint, axisModel, controller, coordInfo) {\n var axis = axisModel.axis;\n var rect = coordInfo.model.coordinateSystem.getRect();\n var ret = {};\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 } else {\n // '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};\nvar _default = InsideZoomView;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar List = require(\"../../data/List\");\n\nvar createDimensions = require(\"../../data/helper/createDimensions\");\n\nvar _sourceType = require(\"../../data/helper/sourceType\");\n\nvar SOURCE_FORMAT_ORIGINAL = _sourceType.SOURCE_FORMAT_ORIGINAL;\n\nvar _dimensionHelper = require(\"../../data/helper/dimensionHelper\");\n\nvar getDimensionTypeByAxis = _dimensionHelper.getDimensionTypeByAxis;\n\nvar _model = require(\"../../util/model\");\n\nvar getDataItemValue = _model.getDataItemValue;\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\nvar _referHelper = require(\"../../model/referHelper\");\n\nvar getCoordSysInfoBySeries = _referHelper.getCoordSysInfoBySeries;\n\nvar Source = require(\"../../data/Source\");\n\nvar _dataStackHelper = require(\"../../data/helper/dataStackHelper\");\n\nvar enableDataStack = _dataStackHelper.enableDataStack;\n\nvar _sourceHelper = require(\"../../data/helper/sourceHelper\");\n\nvar makeSeriesEncodeForAxisCoordSys = _sourceHelper.makeSeriesEncodeForAxisCoordSys;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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/data/Source|Array} source Or raw data.\n * @param {module:echarts/model/Series} seriesModel\n * @param {Object} [opt]\n * @param {string} [opt.generateCoord]\n * @param {boolean} [opt.useEncodeDefaulter]\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 var coordSysInfo = getCoordSysInfoBySeries(seriesModel);\n var coordSysDimDefs;\n\n if (coordSysInfo) {\n coordSysDimDefs = zrUtil.map(coordSysInfo.coordSysDims, function (dim) {\n var dimInfo = {\n name: dim\n };\n var axisModel = coordSysInfo.axisMap.get(dim);\n\n if (axisModel) {\n var axisType = axisModel.get('type');\n dimInfo.type = getDimensionTypeByAxis(axisType); // dimInfo.stackable = isStackable(axisType);\n }\n\n return dimInfo;\n });\n }\n\n if (!coordSysDimDefs) {\n // Get dimensions from registered coordinate system\n coordSysDimDefs = registeredCoordSys && (registeredCoordSys.getDimensionsInfo ? registeredCoordSys.getDimensionsInfo() : registeredCoordSys.dimensions.slice()) || ['x', 'y'];\n }\n\n var dimInfoList = createDimensions(source, {\n coordDimensions: coordSysDimDefs,\n generateCoord: opt.generateCoord,\n encodeDefaulter: opt.useEncodeDefaulter ? zrUtil.curry(makeSeriesEncodeForAxisCoordSys, coordSysDimDefs, seriesModel) : null\n });\n var firstCategoryDimIndex;\n var hasNameEncode;\n coordSysInfo && zrUtil.each(dimInfoList, function (dimInfo, dimIndex) {\n var coordDim = dimInfo.coordDim;\n var categoryAxisModel = coordSysInfo.categoryAxisMap.get(coordDim);\n\n if (categoryAxisModel) {\n if (firstCategoryDimIndex == null) {\n firstCategoryDimIndex = dimIndex;\n }\n\n dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta();\n }\n\n if (dimInfo.otherDims.itemName != null) {\n hasNameEncode = true;\n }\n });\n\n if (!hasNameEncode && firstCategoryDimIndex != null) {\n dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0;\n }\n\n var stackCalculationInfo = enableDataStack(seriesModel, dimInfoList);\n var list = new List(dimInfoList, seriesModel);\n list.setCalculationInfo(stackCalculationInfo);\n var dimValueGetter = firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source) ? function (itemOpt, dimName, dataIndex, dimIndex) {\n // Use dataIndex as ordinal value in categoryAxis\n return dimIndex === firstCategoryDimIndex ? dataIndex : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex);\n } : null;\n list.hasItemOption = false;\n list.initData(source, null, dimValueGetter);\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 && !zrUtil.isArray(getDataItemValue(sampleItem));\n }\n}\n\nfunction firstDataNotNull(data) {\n var i = 0;\n\n while (i < data.length && data[i] == null) {\n i++;\n }\n\n return data[i];\n}\n\nvar _default = createListFromArray;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar isNumeric = _number.isNumeric;\n\nvar _helper = require(\"./helper\");\n\nvar setLabel = _helper.setLabel;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'borderWidth']; // index: +isHorizontal\n\nvar LAYOUT_ATTRS = [{\n xy: 'x',\n wh: 'width',\n index: 0,\n posDesc: ['left', 'right']\n}, {\n xy: 'y',\n wh: 'height',\n index: 1,\n posDesc: ['top', 'bottom']\n}];\nvar pathForLineWidth = new graphic.Circle();\nvar BarView = echarts.extendChartView({\n type: 'pictorialBar',\n render: function (seriesModel, ecModel, api) {\n var group = this.group;\n var data = seriesModel.getData();\n var oldData = this._data;\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var isHorizontal = !!baseAxis.isHorizontal();\n var coordSysRect = cartesian.grid.getRect();\n var opt = {\n ecSize: {\n width: api.getWidth(),\n height: api.getHeight()\n },\n seriesModel: seriesModel,\n coordSys: cartesian,\n coordSysExtent: [[coordSysRect.x, coordSysRect.x + coordSysRect.width], [coordSysRect.y, coordSysRect.y + coordSysRect.height]],\n isHorizontal: isHorizontal,\n valueDim: LAYOUT_ATTRS[+isHorizontal],\n categoryDim: LAYOUT_ATTRS[1 - isHorizontal]\n };\n data.diff(oldData).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 var bar = createBar(data, opt, symbolMeta);\n data.setItemGraphicEl(dataIndex, bar);\n group.add(bar);\n updateCommon(bar, opt, symbolMeta);\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 var pictorialShapeStr = getShapeStr(data, symbolMeta);\n\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 } else {\n bar = createBar(data, opt, symbolMeta, true);\n }\n\n data.setItemGraphicEl(newIndex, bar);\n bar.__pictorialSymbolMeta = symbolMeta; // Add back\n\n group.add(bar);\n updateCommon(bar, opt, symbolMeta);\n }).remove(function (dataIndex) {\n var bar = oldData.getItemGraphicEl(dataIndex);\n bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar);\n }).execute();\n this._data = data;\n return this.group;\n },\n dispose: zrUtil.noop,\n remove: function (ecModel, api) {\n var group = this.group;\n var data = this._data;\n\n if (ecModel.get('animation')) {\n if (data) {\n data.eachItemGraphicEl(function (bar) {\n removeBar(data, bar.dataIndex, ecModel, bar);\n });\n }\n } else {\n group.removeAll();\n }\n }\n}); // Set or calculate default value about symbol, and calculate layout info.\n\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 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 prepareBarLength(itemModel, symbolRepeat, layout, opt, symbolMeta);\n prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, symbolMeta.boundingLength, symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta);\n prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta);\n var symbolSize = symbolMeta.symbolSize;\n var symbolOffset = itemModel.get('symbolOffset');\n\n if (zrUtil.isArray(symbolOffset)) {\n symbolOffset = [parsePercent(symbolOffset[0], symbolSize[0]), parsePercent(symbolOffset[1], symbolSize[1])];\n }\n\n prepareLayoutInfo(itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength, opt, symbolMeta);\n return symbolMeta;\n} // bar length can be negative.\n\n\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 = [convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx, convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx];\n symbolBoundingExtent[1] < symbolBoundingExtent[0] && symbolBoundingExtent.reverse();\n boundingLength = symbolBoundingExtent[pxSignIdx];\n } else if (symbolBoundingData != null) {\n boundingLength = convertToCoordOnAxis(valueAxis, symbolBoundingData) - zeroPx;\n } else if (symbolRepeat) {\n boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx;\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} // Support ['100%', '100%']\n\n\nfunction prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength, pxSign, symbolPatternSize, opt, output) {\n var valueDim = opt.valueDim;\n var categoryDim = opt.categoryDim;\n var categorySize = Math.abs(layout[categoryDim.wh]);\n var symbolSize = data.getItemVisual(dataIndex, 'symbolSize');\n\n if (zrUtil.isArray(symbolSize)) {\n symbolSize = symbolSize.slice();\n } else {\n if (symbolSize == null) {\n symbolSize = '100%';\n }\n\n symbolSize = [symbolSize, symbolSize];\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\n symbolSize[categoryDim.index] = parsePercent(symbolSize[categoryDim.index], categorySize);\n symbolSize[valueDim.index] = parsePercent(symbolSize[valueDim.index], symbolRepeat ? categorySize : Math.abs(boundingLength));\n output.symbolSize = symbolSize; // If x or y is less than zero, show reversed shape.\n\n var symbolScale = output.symbolScale = [symbolSize[0] / symbolPatternSize, symbolSize[1] / symbolPatternSize]; // Follow convention, 'right' and 'top' is the normal scale.\n\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(itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, output) {\n var categoryDim = opt.categoryDim;\n var valueDim = opt.valueDim;\n var pxSign = output.pxSign;\n var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0);\n var pathLen = unitLength; // 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 var symbolMargin = zrUtil.retrieve(itemModel.get('symbolMargin'), '15%') + '';\n var hasEndGap = false;\n\n if (symbolMargin.lastIndexOf('!') === symbolMargin.length - 1) {\n hasEndGap = true;\n symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1);\n }\n\n symbolMargin = parsePercent(symbolMargin, symbolSize[valueDim.index]);\n var uLenWithMargin = Math.max(unitLength + symbolMargin * 2, 0); // 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\n var endFix = hasEndGap ? 0 : symbolMargin * 2; // Both final repeatTimes and final symbolMargin area calculated based on\n // boundingLength.\n\n var repeatSpecified = isNumeric(symbolRepeat);\n var repeatTimes = repeatSpecified ? symbolRepeat : toIntTimes((absBoundingLength + endFix) / uLenWithMargin); // Adjust calculate margin, to ensure each symbol is displayed\n // entirely in the given layout area.\n\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; // Update repeatTimes when not all symbol will be shown.\n\n if (!repeatSpecified && symbolRepeat !== 'fixed') {\n repeatTimes = repeatCutLength ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin) : 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' ? sizeFix : symbolPosition === 'end' ? boundingLength - sizeFix : boundingLength / 2; // 'center'\n\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 var barRectShape = output.barRectShape = zrUtil.extend({}, layout);\n barRectShape[valueDim.wh] = pxSign * Math.max(Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix));\n barRectShape[categoryDim.wh] = layout[categoryDim.wh];\n var clipShape = output.clipShape = {}; // Consider that symbol may be overflow layout rect.\n\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( // Consider texture img, make a big size.\n symbolMeta.symbolType, -symbolPatternSize / 2, -symbolPatternSize / 2, symbolPatternSize, symbolPatternSize, symbolMeta.color);\n path.attr({\n culling: true\n });\n path.type !== 'image' && path.setStyle({\n strokeNoScale: true\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 var index = 0;\n var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2;\n eachPath(bar, function (path) {\n path.__pictorialAnimationIndex = index;\n path.__pictorialRepeatTimes = repeatTimes;\n\n if (index < repeatTimes) {\n updateAttr(path, null, makeTarget(index), symbolMeta, isUpdate);\n } else {\n updateAttr(path, null, {\n scale: [0, 0]\n }, symbolMeta, isUpdate, function () {\n bundle.remove(path);\n });\n }\n\n updateHoverAnimation(path, symbolMeta);\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 var target = makeTarget(index);\n updateAttr(path, {\n position: target.position,\n scale: [0, 0]\n }, {\n scale: target.scale,\n rotation: target.rotation\n }, symbolMeta, isUpdate); // FIXME\n // If all emphasis/normal through action.\n\n path.on('mouseover', onMouseOver).on('mouseout', onMouseOut);\n updateHoverAnimation(path, symbolMeta);\n }\n\n function makeTarget(index) {\n var position = pathPosition.slice(); // (start && pxSign > 0) || (end && pxSign < 0): i = repeatTimes - index\n // Otherwise: i = index;\n\n var pxSign = symbolMeta.pxSign;\n var i = index;\n\n if (symbolMeta.symbolRepeatDirection === 'start' ? pxSign > 0 : pxSign < 0) {\n i = repeatTimes - 1 - index;\n }\n\n position[valueDim.index] = unit * (i - repeatTimes / 2 + 0.5) + pathPosition[valueDim.index];\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 updateAttr(mainPath, {\n position: symbolMeta.pathPosition.slice(),\n scale: [0, 0],\n rotation: symbolMeta.rotation\n }, {\n scale: symbolMeta.symbolScale.slice()\n }, symbolMeta, isUpdate);\n mainPath.on('mouseover', onMouseOver).on('mouseout', onMouseOut);\n } else {\n updateAttr(mainPath, null, {\n position: symbolMeta.pathPosition.slice(),\n scale: symbolMeta.symbolScale.slice(),\n rotation: symbolMeta.rotation\n }, symbolMeta, isUpdate);\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} // bar rect is used for label.\n\n\nfunction createOrUpdateBarRect(bar, symbolMeta, isUpdate) {\n var rectShape = zrUtil.extend({}, symbolMeta.barRectShape);\n var barRect = bar.__pictorialBarRect;\n\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 bar.add(barRect);\n } else {\n updateAttr(barRect, null, {\n shape: rectShape\n }, 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(clipPath, {\n shape: clipShape\n }, animationModel, dataIndex);\n } else {\n clipShape[valueDim.wh] = 0;\n clipPath = new graphic.Rect({\n shape: clipShape\n });\n\n bar.__pictorialBundle.setClipPath(clipPath);\n\n bar.__pictorialClipPath = clipPath;\n var target = {};\n target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh];\n graphic[isUpdate ? 'updateProps' : 'initProps'](clipPath, {\n shape: target\n }, animationModel, dataIndex);\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 var scale = symbolMeta.symbolScale.slice();\n symbolMeta.hoverAnimation && path.on('emphasis', function () {\n this.animateTo({\n scale: [scale[0] * 1.1, scale[1] * 1.1]\n }, 400, 'elasticOut');\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(); // bundle is used for location and clip.\n\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 } else {\n createOrUpdateSingleSymbol(bar, opt, symbolMeta);\n }\n\n createOrUpdateBarRect(bar, symbolMeta, isUpdate);\n createOrUpdateClip(bar, opt, symbolMeta, isUpdate);\n bar.__pictorialShapeStr = getShapeStr(data, symbolMeta);\n bar.__pictorialSymbolMeta = symbolMeta;\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 graphic.updateProps(bundle, {\n position: symbolMeta.bundlePosition.slice()\n }, animationModel, dataIndex);\n\n if (symbolMeta.symbolRepeat) {\n createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true);\n } else {\n createOrUpdateSingleSymbol(bar, opt, symbolMeta, true);\n }\n\n createOrUpdateBarRect(bar, symbolMeta, true);\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 var pathes = [];\n eachPath(bar, function (path) {\n pathes.push(path);\n });\n bar.__pictorialMainPath && pathes.push(bar.__pictorialMainPath); // I do not find proper remove animation for clip yet.\n\n bar.__pictorialClipPath && (animationModel = null);\n zrUtil.each(pathes, function (path) {\n graphic.updateProps(path, {\n scale: [0, 0]\n }, animationModel, dataIndex, function () {\n bar.parent && bar.parent.remove(bar);\n });\n });\n data.setItemGraphicEl(dataIndex, null);\n}\n\nfunction getShapeStr(data, symbolMeta) {\n return [data.getItemVisual(symbolMeta.dataIndex, 'symbol') || 'none', !!symbolMeta.symbolRepeat, !!symbolMeta.symbolClip].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); // when symbolCip used, only clip path has init animation, otherwise it would be weird effect.\n\n if (symbolMeta.symbolClip && !isUpdate) {\n animationAttrs && el.attr(animationAttrs);\n } else {\n animationAttrs && graphic[isUpdate ? 'updateProps' : 'initProps'](el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb);\n }\n}\n\nfunction updateCommon(bar, opt, symbolMeta) {\n var color = symbolMeta.color;\n var dataIndex = symbolMeta.dataIndex;\n var itemModel = symbolMeta.itemModel; // Color must be excluded.\n // Because symbol provide setColor individually to set fill and stroke\n\n var normalStyle = itemModel.getModel('itemStyle').getItemStyle(['color']);\n var hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n var cursorStyle = itemModel.getShallow('cursor');\n eachPath(bar, function (path) {\n // PENDING setColor should be before setStyle!!!\n path.setColor(color);\n path.setStyle(zrUtil.defaults({\n fill: color,\n opacity: symbolMeta.opacity\n }, normalStyle));\n graphic.setHoverStyle(path, hoverStyle);\n cursorStyle && (path.cursor = cursorStyle);\n path.z2 = symbolMeta.z2;\n });\n var barRectHoverStyle = {};\n var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)];\n var barRect = bar.__pictorialBarRect;\n setLabel(barRect.style, barRectHoverStyle, itemModel, color, opt.seriesModel, dataIndex, barPositionOutside);\n graphic.setHoverStyle(barRect, barRectHoverStyle);\n}\n\nfunction toIntTimes(times) {\n var roundedTimes = Math.round(times); // Escapse accurate error\n\n return Math.abs(times - roundedTimes) < 1e-4 ? roundedTimes : Math.ceil(times);\n}\n\nvar _default = BarView;\nmodule.exports = _default;","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAADqADAAQAAAABAAAAEAAAAABiIBAZAAABI0lEQVQoFWNkQAPNB1QW/WdgiIULMzL21NnfLoXzoQwmdAEGRkYdZDHG//9R+DA5TI0wGQL0qEY8AcTYfFjVh+EfgzJczX+G0v8M/6XhfAbGG0xM/2ci+EzHauxunWJh+Pt/DjDCxRES6Kz/Gv/+MfTDRRn/bwWyfZgYGRnDGBgZvsEl8DEYGR4xsbBkg5QwgojWA6qu/xgYNgOdyA7iYwNAC56zsLLZVVpdvQOSByeAaofbuxmYGUKAkr9xaHoNFHeGaYJrBDFqbW9vYWD8HwV0wl8QHwYYGRne/2didK21v30dJgaiUZJcrd2dNf+ZGBKAHgC6HAgYGT+x/Gdyr7O9dRHMRyJQNILE6+zuLGFgZEoH2vSYiZnRu9Lh1mkk9XAmAErfSYfIRfMvAAAAAElFTkSuQmCC\"","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar ChartView = require(\"../../view/Chart\");\n\nvar SunburstPiece = require(\"./SunburstPiece\");\n\nvar DataDiffer = require(\"../../data/DataDiffer\");\n\nvar _format = require(\"../../util/format\");\n\nvar windowOpen = _format.windowOpen;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar ROOT_TO_NODE_ACTION = 'sunburstRootToNode';\nvar SunburstView = ChartView.extend({\n type: 'sunburst',\n init: function () {},\n render: function (seriesModel, ecModel, api, payload) {\n var that = this;\n this.seriesModel = seriesModel;\n this.api = api;\n this.ecModel = ecModel;\n var data = seriesModel.getData();\n var virtualRoot = data.tree.root;\n var newRoot = seriesModel.getViewRoot();\n var group = this.group;\n var renderLabelForZeroData = seriesModel.get('renderLabelForZeroData');\n var newChildren = [];\n newRoot.eachNode(function (node) {\n newChildren.push(node);\n });\n var oldChildren = this._oldChildren || [];\n dualTravel(newChildren, oldChildren);\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 } else if (payload && payload.unhighlight) {\n var piece = this.virtualPiece;\n\n if (!piece && virtualRoot.children.length) {\n piece = virtualRoot.children[0].piece;\n }\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).add(processNode).update(processNode).remove(zrUtil.curry(processNode, null)).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 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(false, newNode, 'normal', seriesModel, ecModel); // For tooltip\n\n data.setItemGraphicEl(newNode.dataIndex, oldNode.piece);\n } else {\n // Remove\n removeNode(oldNode);\n }\n } else if (newNode) {\n // Add\n var piece = new SunburstPiece(newNode, seriesModel, ecModel);\n group.add(piece); // For tooltip\n\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(false, virtualRoot, 'normal', seriesModel, ecModel);\n } else {\n // Add\n that.virtualPiece = new SunburstPiece(virtualRoot, seriesModel, ecModel);\n group.add(that.virtualPiece);\n }\n\n if (viewRoot.piece._onclickEvent) {\n viewRoot.piece.off('click', viewRoot.piece._onclickEvent);\n }\n\n var event = function (e) {\n that._rootToNode(viewRoot.parentNode);\n };\n\n viewRoot.piece._onclickEvent = event;\n that.virtualPiece.on('click', event);\n } else if (that.virtualPiece) {\n // Remove\n group.remove(that.virtualPiece);\n that.virtualPiece = null;\n }\n }\n },\n dispose: function () {},\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 && node.piece && node.piece.childAt(0) === e.target) {\n var nodeClick = node.getModel().get('nodeClick');\n\n if (nodeClick === 'rootToNode') {\n that._rootToNode(node);\n } else if (nodeClick === 'link') {\n var itemModel = node.getModel();\n var link = itemModel.get('link');\n\n if (link) {\n var linkTarget = itemModel.get('target', true) || '_blank';\n windowOpen(link, linkTarget);\n }\n }\n\n targetFound = true;\n }\n });\n };\n\n if (this.group._onclickEvent) {\n this.group.off('click', this.group._onclickEvent);\n }\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\n if (itemLayout) {\n var dx = point[0] - itemLayout.cx;\n var dy = point[1] - itemLayout.cy;\n var radius = Math.sqrt(dx * dx + dy * dy);\n return radius <= itemLayout.r && radius >= itemLayout.r0;\n }\n }\n});\nvar _default = SunburstView;\nmodule.exports = _default;","var Path = require(\"../graphic/Path\");\n\nvar PathProxy = require(\"../core/PathProxy\");\n\nvar transformPath = require(\"./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// ];\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};\n\nvar vRatio = function (u, v) {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n};\n\nvar vAngle = function (u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * 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 + mathSin(psi) * (y1 - y2) / 2.0;\n var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0 + mathCos(psi) * (y1 - y2) / 2.0;\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) * mathSqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) / (rx * rx * (yp * yp) + ry * ry * (xp * xp))) || 0;\n var cxp = f * rx * yp / ry;\n var cyp = f * -ry * xp / rx;\n var cx = (x1 + x2) / 2.0 + mathCos(psi) * cxp - mathSin(psi) * cyp;\n var cy = (y1 + y2) / 2.0 + mathSin(psi) * cxp + mathCos(psi) * cyp;\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\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n\n if (fs === 0 && dTheta > 0) {\n dTheta = dTheta - 2 * PI;\n }\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\nvar commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig; // 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)\n\nvar numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g; // var valueSplitReg = /[\\s,]+/;\n\nfunction createPathProxyFromString(data) {\n if (!data) {\n return new PathProxy();\n } // var data = data.replace(/-/g, ' -')\n // .replace(/ /g, ' ')\n // .replace(/ /g, ',')\n // .replace(/,,/g, ',');\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 // data = data.replace(/-/g, ',-');\n // create array\n // var arr = cs.split('|');\n // init context point\n\n\n var cpx = 0;\n var cpy = 0;\n var subpathX = cpx;\n var subpathY = cpy;\n var prevCmd;\n var path = new PathProxy();\n var CMD = PathProxy.CMD; // 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\n for (var l = 0; l < cmdList.length; l++) {\n var cmdText = cmdList[l];\n var cmdStr = cmdText.charAt(0);\n var cmd; // 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\n for (var i = 0; i < pLen; i++) {\n p[i] = parseFloat(p[i]);\n }\n\n var off = 0;\n\n while (off < pLen) {\n var ctlPtx;\n var ctlPty;\n var rx;\n var ry;\n var psi;\n var fa;\n var fs;\n var x1 = cpx;\n var y1 = cpy; // convert l, H, h, V, and v to L\n\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\n case 'L':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\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\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\n case 'h':\n cpx += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'H':\n cpx = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'v':\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'V':\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n\n case 'C':\n cmd = CMD.C;\n path.addData(cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]);\n cpx = p[off - 2];\n cpy = p[off - 1];\n break;\n\n case 'c':\n cmd = CMD.C;\n path.addData(cmd, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy);\n cpx += p[off - 2];\n cpy += p[off - 1];\n break;\n\n case 'S':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\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\n case 's':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\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\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\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\n case 'T':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n\n case 't':\n ctlPtx = cpx;\n ctlPty = cpy;\n var len = path.len();\n var pathData = path.data;\n\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n\n case 'A':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n x1 = cpx, y1 = cpy;\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.A;\n processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path);\n break;\n\n case 'a':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n x1 = cpx, y1 = cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.A;\n processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path);\n break;\n }\n }\n\n if (cmdStr === 'z' || cmdStr === 'Z') {\n cmd = CMD.Z;\n path.addData(cmd); // z may be in the middle of the path.\n\n cpx = subpathX;\n cpy = subpathY;\n }\n\n prevCmd = cmd;\n }\n\n path.toStatic();\n return path;\n} // TODO Optimize double memory cost problem\n\n\nfunction createPathOptions(str, opts) {\n var pathProxy = createPathProxyFromString(str);\n opts = opts || {};\n\n opts.buildPath = function (path) {\n if (path.setData) {\n path.setData(pathProxy.data); // Svg and vml renderer don't have context\n\n var ctx = path.getContext();\n\n if (ctx) {\n path.rebuildPath(ctx);\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 * 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 */\n\n\nfunction createFromString(str, opts) {\n return new Path(createPathOptions(str, opts));\n}\n/**\n * Create a Path class from path string data\n * @param {string} str\n * @param {Object} opts Other options\n */\n\n\nfunction extendFromString(str, opts) {\n return Path.extend(createPathOptions(str, opts));\n}\n/**\n * Merge multiple paths\n */\n// TODO Apply transform\n// TODO stroke dash\n// TODO Optimize double memory cost problem\n\n\nfunction mergePath(pathEls, opts) {\n var pathList = [];\n var len = pathEls.length;\n\n for (var i = 0; i < len; i++) {\n var pathEl = pathEls[i];\n\n if (!pathEl.path) {\n pathEl.createPathProxy();\n }\n\n if (pathEl.__dirtyPath) {\n pathEl.buildPath(pathEl.path, pathEl.shape, true);\n }\n\n pathList.push(pathEl.path);\n }\n\n var pathBundle = new Path(opts); // Need path proxy.\n\n pathBundle.createPathProxy();\n\n pathBundle.buildPath = function (path) {\n path.appendPath(pathList); // Svg and vml renderer don't have context\n\n var ctx = path.getContext();\n\n if (ctx) {\n path.rebuildPath(ctx);\n }\n };\n\n return pathBundle;\n}\n\nexports.createFromString = createFromString;\nexports.extendFromString = extendFromString;\nexports.mergePath = mergePath;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar layout = require(\"../../util/layout\");\n\nvar TimelineView = require(\"./TimelineView\");\n\nvar TimelineAxis = require(\"./TimelineAxis\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar axisHelper = require(\"../../coord/axisHelper\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar bind = zrUtil.bind;\nvar each = zrUtil.each;\nvar PI = Math.PI;\n\nvar _default = TimelineView.extend({\n type: 'timeline.slider',\n init: function (ecModel, api) {\n this.api = api;\n /**\n * @private\n * @type {module:echarts/component/timeline/TimelineAxis}\n */\n\n this._axis;\n /**\n * @private\n * @type {module:zrender/core/BoundingRect}\n */\n\n this._viewRect;\n /**\n * @type {number}\n */\n\n this._timer;\n /**\n * @type {module:zrender/Element}\n */\n\n this._currentPointer;\n /**\n * @type {module:zrender/container/Group}\n */\n\n this._mainGroup;\n /**\n * @type {module:zrender/container/Group}\n */\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 this.group.removeAll();\n\n if (timelineModel.get('show', true)) {\n var layoutInfo = this._layout(timelineModel, api);\n\n var mainGroup = this._createGroup('mainGroup');\n\n var labelGroup = this._createGroup('labelGroup');\n /**\n * @private\n * @type {module:echarts/component/timeline/TimelineAxis}\n */\n\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(['AxisLine', 'AxisTick', 'Control', 'CurrentPointer'], function (name) {\n this['_render' + name](layoutInfo, mainGroup, axis, timelineModel);\n }, this);\n\n this._renderAxisLabel(layoutInfo, labelGroup, axis, timelineModel);\n\n this._position(layoutInfo, timelineModel);\n }\n\n this._doPlayStop();\n },\n\n /**\n * @override\n */\n remove: function () {\n this._clearTimer();\n\n this.group.removeAll();\n },\n\n /**\n * @override\n */\n dispose: function () {\n this._clearTimer();\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); // Auto label offset.\n\n if (labelPosOpt == null || labelPosOpt === 'auto') {\n labelPosOpt = orient === 'horizontal' ? viewRect.y + viewRect.height / 2 < api.getHeight() / 2 ? '-' : '+' : viewRect.x + viewRect.width / 2 < api.getWidth() / 2 ? '+' : '-';\n } else if (isNaN(labelPosOpt)) {\n labelPosOpt = {\n horizontal: {\n top: '-',\n bottom: '+'\n },\n vertical: {\n left: '-',\n right: '+'\n }\n }[orient][labelPosOpt];\n }\n\n var labelAlignMap = {\n horizontal: 'center',\n vertical: labelPosOpt >= 0 || labelPosOpt === '+' ? 'left' : 'right'\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 }; // Position\n\n var mainLength = orient === 'vertical' ? viewRect.height : viewRect.width;\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; // Special label rotate.\n\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; // position[0] means left, position[1] means middle.\n\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 } else {\n // '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\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 rotation: rotationMap[orient],\n labelRotation: labelRotation,\n labelPosOpt: labelPosOpt,\n labelAlign: timelineModel.get('label.align') || labelAlignMap[orient],\n labelBaseline: timelineModel.get('label.verticalAlign') || timelineModel.get('label.baseline') || labelBaselineMap[orient],\n // Based on mainGroup.\n playPosition: playPosition,\n prevBtnPosition: prevBtnPosition,\n nextBtnPosition: nextBtnPosition,\n axisExtent: axisExtent,\n controlSize: controlSize,\n controlGap: controlGap\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 // 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 var mainGroup = this._mainGroup;\n var labelGroup = this._labelGroup;\n var viewRect = layoutInfo.viewRect;\n\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 var mainPosition = mainGroup.position;\n var labelsPosition = labelGroup.position;\n labelsPosition[0] = mainPosition[0] = viewBound[0][0];\n var labelPosOpt = layoutInfo.labelPosOpt;\n\n if (isNaN(labelPosOpt)) {\n // '+' or '-'\n var mainBoundIdx = labelPosOpt === '+' ? 0 : 1;\n toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);\n toBound(labelsPosition, labelBound, viewBound, 1, 1 - mainBoundIdx);\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 setOrigin(mainGroup);\n setOrigin(labelGroup);\n\n function setOrigin(targetGroup) {\n var pos = targetGroup.position;\n targetGroup.origin = [viewBound[0][0] - pos[0], viewBound[1][0] - pos[1]];\n }\n\n function getBound(rect) {\n // [[xmin, xmax], [ymin, ymax]]\n return [[rect.x, rect.x + rect.width], [rect.y, rect.y + rect.height]];\n }\n\n function toBound(fromPos, from, to, dimIdx, boundIdx) {\n fromPos[dimIdx] += to[dimIdx][boundIdx] - from[dimIdx][boundIdx];\n }\n },\n _createAxis: function (layoutInfo, timelineModel) {\n var data = timelineModel.getData();\n var axisType = timelineModel.get('axisType');\n var scale = axisHelper.createScaleByModel(timelineModel, axisType); // Customize scale. The `tickValue` is `dataIndex`.\n\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 var axis = new TimelineAxis('value', scale, layoutInfo.axisExtent, axisType);\n axis.model = timelineModel;\n return axis;\n },\n _createGroup: function (name) {\n var newGroup = this['_' + name] = new graphic.Group();\n this.group.add(newGroup);\n return newGroup;\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],\n y1: 0,\n x2: axisExtent[1],\n y2: 0\n },\n style: zrUtil.extend({\n lineCap: 'round'\n }, timelineModel.getModel('lineStyle').getLineStyle()),\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(); // Show all ticks, despite ignoring strategy.\n\n var ticks = axis.scale.getTicks(); // The value is dataIndex, see the costomized scale.\n\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 } else {\n el.dataIndex = el.dataModel = null;\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 each(labels, function (labelItem) {\n // The tickValue is dataIndex, see the costomized scale.\n var dataIndex = labelItem.tickValue;\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 group.add(textEl);\n graphic.setHoverStyle(textEl, graphic.setTextStyle({}, hoverLabelModel));\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 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 makeBtn(layoutInfo.nextBtnPosition, 'controlStyle.nextIcon', bind(this._changeTimeline, this, inverse ? '-' : '+'));\n makeBtn(layoutInfo.prevBtnPosition, 'controlStyle.prevIcon', bind(this._changeTimeline, this, inverse ? '+' : '-'));\n makeBtn(layoutInfo.playPosition, 'controlStyle.' + (playState ? 'stopIcon' : 'playIcon'), bind(this._handlePlayClick, this, !playState), true);\n\n function makeBtn(position, iconPath, onclick, willRotate) {\n if (!position) {\n return;\n }\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 _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 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 }; // Reuse when exists, for animation and drag.\n\n this._currentPointer = giveSymbol(pointerModel, pointerModel, this._mainGroup, {}, this._currentPointer, callback);\n },\n _handlePlayClick: function (nextState) {\n this._clearTimer();\n\n this.api.dispatchAction({\n type: 'timelinePlayChange',\n playState: nextState,\n from: this.uid\n });\n },\n _handlePointerDrag: function (dx, dy, e) {\n this._clearTimer();\n\n this._pointerChangeTimeline([e.offsetX, e.offsetY]);\n },\n _handlePointerDragend: function (e) {\n this._pointerChangeTimeline([e.offsetX, e.offsetY], true);\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 toCoord > axisExtent[1] && (toCoord = axisExtent[1]);\n toCoord < axisExtent[0] && (toCoord = axisExtent[0]);\n this._currentPointer.position[0] = toCoord;\n\n this._currentPointer.dirty();\n\n var targetDataIndex = this._findNearestTick(toCoord);\n\n var timelineModel = this.model;\n\n if (trigger || targetDataIndex !== timelineModel.getCurrentIndex() && timelineModel.get('realtime')) {\n this._changeTimeline(targetDataIndex);\n }\n },\n _doPlayStop: function () {\n this._clearTimer();\n\n if (this.model.getPlayState()) {\n this._timer = setTimeout(bind(handleFrame, this), this.model.get('playInterval'));\n }\n\n function handleFrame() {\n // Do not cache\n var timelineModel = this.model;\n\n this._changeTimeline(timelineModel.getCurrentIndex() + (timelineModel.get('rewind', true) ? -1 : 1));\n }\n },\n _toAxisCoord: function (vertex) {\n var trans = this._mainGroup.getLocalTransform();\n\n return graphic.applyTransform(vertex, trans, true);\n },\n _findNearestTick: function (axisCoord) {\n var data = this.model.getData();\n var dist = Infinity;\n var targetDataIndex;\n var axis = this._axis;\n data.each(['value'], function (value, dataIndex) {\n var coord = axis.dataToCoord(value);\n var d = Math.abs(coord - axisCoord);\n\n if (d < dist) {\n dist = d;\n targetDataIndex = dataIndex;\n }\n });\n return targetDataIndex;\n },\n _clearTimer: function () {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n },\n _changeTimeline: function (nextIndex) {\n var currentIndex = this.model.getCurrentIndex();\n\n if (nextIndex === '+') {\n nextIndex = currentIndex + 1;\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\nfunction getViewRect(model, api) {\n return layout.getLayoutRect(model.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n }, model.get('padding'));\n}\n\nfunction makeIcon(timelineModel, objPath, rect, opts) {\n var icon = graphic.makePath(timelineModel.get(objPath).replace(/^path:\\/\\//, ''), zrUtil.clone(opts || {}), new BoundingRect(rect[0], rect[1], rect[2], rect[3]), 'center');\n return icon;\n}\n/**\n * Create symbol or update symbol\n * opt: basic position and event handlers\n */\n\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 } else {\n symbol.setColor(color);\n group.add(symbol); // Group may be new, also need to add.\n\n callback && callback.onUpdate(symbol);\n } // Style\n\n\n var itemStyle = itemStyleModel.getItemStyle(['color', 'symbol', 'symbolSize']);\n symbol.setStyle(itemStyle); // Transform and events.\n\n opt = zrUtil.merge({\n rectHover: true,\n z2: 100\n }, opt, true);\n var symbolSize = hostModel.get('symbolSize');\n symbolSize = symbolSize instanceof Array ? symbolSize.slice() : [+symbolSize, +symbolSize];\n symbolSize[0] /= 2;\n symbolSize[1] /= 2;\n opt.scale = symbolSize;\n var symbolOffset = hostModel.get('symbolOffset');\n\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 symbol.attr(opt); // 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\n symbol.updateTransform();\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({\n position: [toCoord, 0]\n });\n } else {\n pointer.stopAnimation(true);\n pointer.animateTo({\n position: [toCoord, 0]\n }, pointerModel.get('animationDuration', true), pointerModel.get('animationEasing', true));\n }\n}\n\nmodule.exports = _default;","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DrawCanvas.vue?vue&type=style&index=0&id=5170cb2a&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DrawCanvas.vue?vue&type=style&index=0&id=5170cb2a&lang=scss&scoped=true&\"","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 DataZoomModel = require(\"./DataZoomModel\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar SliderZoomModel = DataZoomModel.extend({\n type: 'dataZoom.slider',\n layoutMode: 'box',\n\n /**\n * @protected\n */\n defaultOption: {\n show: true,\n // ph => placeholder. Using placehoder here because\n // deault value can only be drived in view stage.\n right: 'ph',\n // Default align to grid rect.\n top: 'ph',\n // Default align to grid rect.\n width: 'ph',\n // Default align to grid rect.\n height: 'ph',\n // Default align to grid rect.\n left: null,\n // Default align to grid rect.\n bottom: null,\n // Default align to grid rect.\n backgroundColor: 'rgba(47,69,84,0)',\n // 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',\n // border color of the box. For compatibility,\n // if dataBackgroundColor is set, borderColor\n // is ignored.\n fillerColor: 'rgba(167,183,204,0.4)',\n // 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\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\n /* eslint-enable */\n // Percent of the slider height\n handleSize: '100%',\n handleStyle: {\n color: '#a7b7cc'\n },\n labelPrecision: null,\n labelFormatter: null,\n showDetail: true,\n showDataShadow: 'auto',\n // Default auto decision.\n realtime: true,\n zoomLock: false,\n // Whether disable zoom.\n textStyle: {\n color: '#333'\n }\n }\n});\nvar _default = SliderZoomModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\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* ).\n*/\nvar RADIAN_EPSILON = 1e-4;\n\nfunction _trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n}\n/**\n * Linear mapping a value from domain to range\n * @memberOf module:echarts/util/number\n * @param {(number|Array.)} val\n * @param {Array.} domain Domain extent domain[0] can be bigger than domain[1]\n * @param {Array.} range Range extent range[0] can be bigger than range[1]\n * @param {boolean} clamp\n * @return {(number|Array.}\n */\n\n\nfunction 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 ? range[0] : (range[0] + range[1]) / 2;\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\n\n if (clamp) {\n if (subDomain > 0) {\n if (val <= domain[0]) {\n return range[0];\n } else if (val >= domain[1]) {\n return range[1];\n }\n } else {\n if (val >= domain[0]) {\n return range[0];\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\n if (val === domain[1]) {\n return range[1];\n }\n }\n\n return (val - domain[0]) / subDomain * subRange + range[0];\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 */\n\n\nfunction parsePercent(percent, all) {\n switch (percent) {\n case 'center':\n case 'middle':\n percent = '50%';\n break;\n\n case 'left':\n case 'top':\n percent = '0%';\n break;\n\n case 'right':\n case 'bottom':\n percent = '100%';\n break;\n }\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 * (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 */\n\n\nfunction round(x, precision, returnStr) {\n if (precision == null) {\n precision = 10;\n } // Avoid range error\n\n\n precision = Math.min(Math.max(0, precision), 20);\n x = (+x).toFixed(precision);\n return returnStr ? x : +x;\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 */\n\n\nfunction asc(arr) {\n arr.sort(function (a, b) {\n return a - b;\n });\n return arr;\n}\n/**\n * Get precision\n * @param {number} val\n */\n\n\nfunction getPrecision(val) {\n val = +val;\n\n if (isNaN(val)) {\n return 0;\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\n\n var e = 1;\n var count = 0;\n\n while (Math.round(val * e) / e !== val) {\n e *= 10;\n count++;\n }\n\n return count;\n}\n/**\n * @param {string|number} val\n * @return {number}\n */\n\n\nfunction getPrecisionSafe(val) {\n var str = val.toString(); // Consider scientific notation: '3.4e-12' '3.4e+12'\n\n var eIndex = str.indexOf('e');\n\n if (eIndex > 0) {\n var precision = +str.slice(eIndex + 1);\n return precision < 0 ? -precision : 0;\n } else {\n var dotIndex = str.indexOf('.');\n return dotIndex < 0 ? 0 : str.length - 1 - dotIndex;\n }\n}\n/**\n * Minimal dicernible data precisioin according to a single pixel.\n *\n * @param {Array.} dataExtent\n * @param {Array.} pixelExtent\n * @return {number} precision\n */\n\n\nfunction 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); // toFixed() digits argument must be between 0 and 20.\n\n var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20);\n return !isFinite(precision) ? 20 : precision;\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.} 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 */\n\n\nfunction 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\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 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 var remainder = zrUtil.map(votesPerQuota, function (votes, idx) {\n return votes - seats[idx];\n }); // Has remainding votes.\n\n while (currentSum < targetSeats) {\n // Find next largest remainder.\n var max = Number.NEGATIVE_INFINITY;\n var maxId = null;\n\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 } // Add a vote to max remainder.\n\n\n ++seats[maxId];\n remainder[maxId] = 0;\n ++currentSum;\n }\n\n return seats[idx] / digits;\n} // Number.MAX_SAFE_INTEGER, ie do not support.\n\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * To 0 - 2 * PI, considering negative radian.\n * @param {number} radian\n * @return {number}\n */\n\nfunction remRadian(radian) {\n var pi2 = Math.PI * 2;\n return (radian % pi2 + pi2) % pi2;\n}\n/**\n * @param {type} radian\n * @return {boolean}\n */\n\n\nfunction isRadianAroundZero(val) {\n return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;\n}\n/* eslint-disable */\n\n\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\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 ).\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 */\n\nfunction parseDate(value) {\n if (value instanceof Date) {\n return value;\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 } // Use local time when no timezone offset specifed.\n\n\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(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, +match[7] || 0);\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\n if (match[8].toUpperCase() !== 'Z') {\n hour -= match[8].slice(0, 3);\n }\n\n return new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, +match[7] || 0));\n }\n } else if (value == null) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(value));\n}\n/**\n * Quantity of a number. e.g. 0.1, 1, 10, 100\n *\n * @param {number} val\n * @return {number}\n */\n\n\nfunction quantity(val) {\n return Math.pow(10, quantityExponent(val));\n}\n/**\n * Exponent of the quantity of a number\n * e.g., 1234 equals to 1.234*10^3, so quantityExponent(1234) is 3\n *\n * @param {number} val non-negative value\n * @return {number}\n */\n\n\nfunction quantityExponent(val) {\n if (val === 0) {\n return 0;\n }\n\n var exp = Math.floor(Math.log(val) / Math.LN10);\n /**\n * exp is expected to be the rounded-down result of the base-10 log of val.\n * But due to the precision loss with Math.log(val), we need to restore it\n * using 10^exp to make sure we can get val back from exp. #11249\n */\n\n if (val / Math.pow(10, exp) >= 10) {\n exp++;\n }\n\n return exp;\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 */\n\n\nfunction nice(val, round) {\n var exponent = quantityExponent(val);\n var exp10 = Math.pow(10, exponent);\n var f = val / exp10; // 1 <= f < 10\n\n var nf;\n\n if (round) {\n if (f < 1.5) {\n nf = 1;\n } else if (f < 2.5) {\n nf = 2;\n } else if (f < 4) {\n nf = 3;\n } else if (f < 7) {\n nf = 5;\n } else {\n nf = 10;\n }\n } else {\n if (f < 1) {\n nf = 1;\n } else if (f < 2) {\n nf = 2;\n } else if (f < 3) {\n nf = 3;\n } else if (f < 5) {\n nf = 5;\n } else {\n nf = 10;\n }\n }\n\n val = nf * exp10; // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754).\n // 20 is the uppper bound of toFixed.\n\n return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;\n}\n/**\n * This code was copied from \"d3.js\"\n * .\n * See the license statement at the head of this file.\n * @param {Array.} ascArr\n */\n\n\nfunction 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 * 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.} list, where `close` mean open or close\n * of the interval, and Infinity can be used.\n * @return {Array.} The origin list, which has been reformed.\n */\n\n\nfunction reformIntervals(list) {\n list.sort(function (a, b) {\n return littleThan(a, b, 0) ? -1 : 1;\n });\n var curr = -Infinity;\n var currClose = 1;\n\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\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 } else {\n i++;\n }\n }\n\n return list;\n\n function littleThan(a, b, lg) {\n return a.interval[lg] < b.interval[lg] || a.interval[lg] === b.interval[lg] && (a.close[lg] - b.close[lg] === (!lg ? 1 : -1) || !lg && littleThan(a, b, 1));\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 */\n\n\nfunction isNumeric(v) {\n return v - parseFloat(v) >= 0;\n}\n\nexports.linearMap = linearMap;\nexports.parsePercent = parsePercent;\nexports.round = round;\nexports.asc = asc;\nexports.getPrecision = getPrecision;\nexports.getPrecisionSafe = getPrecisionSafe;\nexports.getPixelPrecision = getPixelPrecision;\nexports.getPercentWithPrecision = getPercentWithPrecision;\nexports.MAX_SAFE_INTEGER = MAX_SAFE_INTEGER;\nexports.remRadian = remRadian;\nexports.isRadianAroundZero = isRadianAroundZero;\nexports.parseDate = parseDate;\nexports.quantity = quantity;\nexports.quantityExponent = quantityExponent;\nexports.nice = nice;\nexports.quantile = quantile;\nexports.reformIntervals = reformIntervals;\nexports.isNumeric = isNumeric;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 _dataProvider = require(\"../../data/helper/dataProvider\");\n\nvar retrieveRawValue = _dataProvider.retrieveRawValue;\n\nvar _format = require(\"../../util/format\");\n\nvar getTooltipMarker = _format.getTooltipMarker;\nvar formatTpl = _format.formatTpl;\n\nvar _model = require(\"../../util/model\");\n\nvar getTooltipRenderMode = _model.getTooltipRenderMode;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar DIMENSION_LABEL_REG = /\\{@(.+?)\\}/g; // PENDING A little ugly\n\nvar _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 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 // 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 var params = this.getDataParams(dataIndex, dataType);\n\n if (dimIndex != null && params.value instanceof Array) {\n params.value = params.value[dimIndex];\n }\n\n var formatter = itemModel.get(status === 'normal' ? [labelProp || 'label', 'formatter'] : [status, labelProp || 'label', 'formatter']);\n\n if (typeof formatter === 'function') {\n params.status = status;\n params.dimensionIndex = dimIndex;\n return formatter(params);\n } else if (typeof formatter === 'string') {\n var str = formatTpl(formatter, params); // Support 'aaa{@[3]}bbb{@product}ccc'.\n // Do not support '}' in dim name util have to.\n\n return str.replace(DIMENSION_LABEL_REG, function (origin, dim) {\n var len = dim.length;\n\n if (dim.charAt(0) === '[' && dim.charAt(len - 1) === ']') {\n dim = +dim.slice(1, len - 1); // Also: '[]' => 0\n }\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 () {// Empty function\n }\n};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar makeStyleMapper = require(\"./makeStyleMapper\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar getLineStyle = makeStyleMapper([['lineWidth', 'width'], ['stroke', 'color'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor']]);\nvar _default = {\n getLineStyle: function (excludes) {\n var style = getLineStyle(this, excludes); // Always set lineDash whether dashed, otherwise we can not\n // erase the previous style when assigning to el.style.\n\n style.lineDash = this.getLineDash(style.lineWidth);\n return style;\n },\n getLineDash: function (lineWidth) {\n if (lineWidth == null) {\n lineWidth = 1;\n }\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 ? // 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 : lineType === 'dashed' ? [dashSize, dashSize] : [dotSize, dotSize];\n }\n};\nmodule.exports = _default;","var _util = require(\"../core/util\");\n\nvar inherits = _util.inherits;\n\nvar Displayble = require(\"./Displayable\");\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\n/**\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 */\n// TODO Style override ?\nfunction IncrementalDisplayble(opts) {\n Displayble.call(this, opts);\n this._displayables = [];\n this._temporaryDisplayables = [];\n this._cursor = 0;\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 this.notClear = false;\n};\n\nIncrementalDisplayble.prototype.addDisplayable = function (displayable, notPersistent) {\n if (notPersistent) {\n this._temporaryDisplayables.push(displayable);\n } else {\n this._displayables.push(displayable);\n }\n\n this.dirty();\n};\n\nIncrementalDisplayble.prototype.addDisplayables = function (displayables, notPersistent) {\n notPersistent = notPersistent || false;\n\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\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\n for (var i = this._cursor; i < this._displayables.length; i++) {\n var displayable = this._displayables[i]; // PENDING\n\n displayable.parent = this;\n displayable.update();\n displayable.parent = null;\n }\n\n for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n var displayable = this._temporaryDisplayables[i]; // PENDING\n\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\n this._cursor = i; // Render temporary displayables.\n\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 this.notClear = true;\n};\n\nvar m = [];\n\nIncrementalDisplayble.prototype.getBoundingRect = function () {\n if (!this._rect) {\n var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\n\n for (var i = 0; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n var childRect = displayable.getBoundingRect().clone();\n\n if (displayable.needLocalTransform()) {\n childRect.applyTransform(displayable.getLocalTransform(m));\n }\n\n rect.union(childRect);\n }\n\n this._rect = rect;\n }\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\n if (displayable.contain(x, y)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\ninherits(IncrementalDisplayble, Displayble);\nvar _default = IncrementalDisplayble;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerAction({\n type: 'timelineChange',\n event: 'timelineChanged',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n var timelineModel = ecModel.getComponent('timeline');\n\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 } // Set normalized currentIndex to payload.\n\n\n ecModel.resetOption('timeline');\n return zrUtil.defaults({\n currentIndex: timelineModel.option.currentIndex\n }, payload);\n});\necharts.registerAction({\n type: 'timelinePlayChange',\n event: 'timelinePlayChanged',\n update: 'update'\n}, function (payload, ecModel) {\n var timelineModel = ecModel.getComponent('timeline');\n\n if (timelineModel && payload.playState != null) {\n timelineModel.setPlayState(payload.playState);\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 SeriesModel = require(\"../../model/Series\");\n\nvar createListFromArray = require(\"../helper/createListFromArray\");\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = SeriesModel.extend({\n type: 'series.heatmap',\n getInitialData: function (option, ecModel) {\n return createListFromArray(this.getSource(), this, {\n generateCoord: 'value'\n });\n },\n preventIncremental: function () {\n var coordSysCreator = CoordinateSystem.get(this.get('coordinateSystem'));\n\n if (coordSysCreator && coordSysCreator.dimensions) {\n return coordSysCreator.dimensions[0] === 'lng' && coordSysCreator.dimensions[1] === 'lat';\n }\n },\n defaultOption: {\n // Cartesian2D or geo\n coordinateSystem: 'cartesian2d',\n zlevel: 0,\n z: 2,\n // Cartesian coordinate system\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // Geo coordinate system\n geoIndex: 0,\n blurSize: 30,\n pointSize: 20,\n maxOpacity: 1,\n minOpacity: 0\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar helper = require(\"./helper\");\n\nvar AxisProxy = require(\"./AxisProxy\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar each = zrUtil.each;\nvar eachAxisDim = helper.eachAxisDim;\nvar DataZoomModel = echarts.extendComponentModel({\n type: 'dataZoom',\n dependencies: ['xAxis', 'yAxis', 'zAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'series'],\n\n /**\n * @protected\n */\n defaultOption: {\n zlevel: 0,\n z: 4,\n // Higher than normal component (z: 2).\n orient: null,\n // Default auto by axisIndex. Possible value: 'horizontal', 'vertical'.\n xAxisIndex: null,\n // Default the first horizontal category axis.\n yAxisIndex: null,\n // Default the first vertical category axis.\n filterMode: 'filter',\n // 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 throttle: null,\n // 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,\n // Start percent. 0 ~ 100\n end: 100,\n // End percent. 0 ~ 100\n startValue: null,\n // Start value. If startValue specified, start is ignored.\n endValue: null,\n // End value. If endValue specified, end is ignored.\n minSpan: null,\n // 0 ~ 100\n maxSpan: null,\n // 0 ~ 100\n minValueSpan: null,\n // The range of dataZoom can not be smaller than that.\n maxValueSpan: null,\n // The range of dataZoom can not be larger than that.\n rangeMode: null // Array, can be 'value' or 'percent'.\n\n },\n\n /**\n * @override\n */\n init: function (option, parentModel, ecModel) {\n /**\n * key like x_0, y_1\n * @private\n * @type {Object}\n */\n this._dataIntervalByAxis = {};\n /**\n * @private\n */\n\n this._dataInfo = {};\n /**\n * key like x_0, y_1\n * @private\n */\n\n this._axisProxies = {};\n /**\n * @readOnly\n */\n\n this.textStyleModel;\n /**\n * @private\n */\n\n this._autoThrottle = true;\n /**\n * It is `[rangeModeForMin, rangeModeForMax]`.\n * The optional values for `rangeMode`:\n * + `'value'` mode: the axis extent will always be determined by\n * `dataZoom.startValue` and `dataZoom.endValue`, despite\n * how data like and how `axis.min` and `axis.max` are.\n * + `'percent'` mode: `100` represents 100% of the `[dMin, dMax]`,\n * where `dMin` is `axis.min` if `axis.min` specified, otherwise `data.extent[0]`,\n * and `dMax` is `axis.max` if `axis.max` specified, otherwise `data.extent[1]`.\n * Axis extent will be determined by the result of the percent of `[dMin, dMax]`.\n *\n * For example, when users are using dynamic data (update data periodically via `setOption`),\n * if in `'value`' mode, the window will be kept in a fixed value range despite how\n * data are appended, while if in `'percent'` mode, whe window range will be changed alone with\n * the appended data (suppose `axis.min` and `axis.max` are not specified).\n *\n * @private\n */\n\n this._rangePropMode = ['percent', 'percent'];\n var inputRawOption = retrieveRawOption(option);\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\n this.settledOption = inputRawOption;\n this.mergeDefaultAndTheme(option, ecModel);\n this.doInit(inputRawOption);\n },\n\n /**\n * @override\n */\n mergeOption: function (newOption) {\n var inputRawOption = retrieveRawOption(newOption); //FIX #2591\n\n zrUtil.merge(this.option, newOption, true);\n zrUtil.merge(this.settledOption, inputRawOption, true);\n this.doInit(inputRawOption);\n },\n\n /**\n * @protected\n */\n doInit: function (inputRawOption) {\n var thisOption = this.option; // Disable realtime view update if canvas is not supported.\n\n if (!env.canvasSupported) {\n thisOption.realtime = false;\n }\n\n this._setDefaultThrottle(inputRawOption);\n\n updateRangeUse(this, inputRawOption);\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 } // Otherwise do nothing and use the merge result.\n\n }, this);\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 this.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel, ecModel) {\n var axisModel = this.dependentModels[dimNames.axis][axisIndex]; // If exists, share axisProxy with other dataZoomModels.\n\n var axisProxy = axisModel.__dzAxisProxy || ( // Use the first dataZoomModel as the main model of axisProxy.\n axisModel.__dzAxisProxy = new AxisProxy(dimNames.name, axisIndex, this, ecModel)); // 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(thisOption[axisIndexName]);\n }, this);\n\n if (autoMode === 'axisIndex') {\n this._autoSetAxisIndex();\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 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 var orient = thisOption.orient;\n\n if (orient == null && hasIndexSpecified) {\n return 'orient';\n } else if (!hasIndexSpecified) {\n if (orient == null) {\n thisOption.orient = 'horizontal';\n }\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 } 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\n var axisIndices = [];\n var axisModels = this.dependentModels[dimNames.axis];\n\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\n thisOption[dimNames.axisIndex] = axisIndices;\n\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 // 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 var axisIndex = seriesModel.get(dimNames.axisIndex);\n var axisId = seriesModel.get(dimNames.axisId);\n var axisModel = seriesModel.ecModel.queryComponents({\n mainType: dimNames.axis,\n index: axisIndex,\n id: axisId\n })[0];\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; // Find the first axis\n\n this.eachTargetAxis(function (dimNames) {\n !dim && (dim = dimNames.name);\n }, this);\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 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\n if (this._autoThrottle) {\n var globalOption = this.ecModel.option;\n this.option.throttle = globalOption.animation && globalOption.animationDurationUpdate > 0 ? 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\n if (indices.length) {\n firstAxisModel = this.dependentModels[dimNames.axis][indices[0]];\n }\n }\n }, this);\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(this.get(dimNames.axisIndex), function (axisIndex) {\n callback.call(context, dimNames, axisIndex, this, ecModel);\n }, this);\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 :\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 but not set when calling\n // `dispatchAction`.\n // The pair 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 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.} [startPercent, endPercent]\n */\n getPercentRange: function () {\n var axisProxy = this.findRepresentativeAxisProxy();\n\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.} [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\n if (axisProxy) {\n return axisProxy.getDataValueWindow();\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 } // Find the first hosted axisProxy\n\n\n var axisProxies = this._axisProxies;\n\n for (var key in axisProxies) {\n if (axisProxies.hasOwnProperty(key) && axisProxies[key].hostedBy(this)) {\n return axisProxies[key];\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\n\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.}\n */\n getRangePropMode: function () {\n return this._rangePropMode.slice();\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 */\n\nfunction retrieveRawOption(option) {\n var ret = {};\n each(['start', 'end', 'startValue', 'endValue', 'throttle'], function (name) {\n option.hasOwnProperty(name) && (ret[name] = option[name]);\n });\n return ret;\n}\n\nfunction updateRangeUse(dataZoomModel, inputRawOption) {\n var rangePropMode = dataZoomModel._rangePropMode;\n var rangeModeInOption = dataZoomModel.get('rangeMode');\n each([['start', 'startValue'], ['end', 'endValue']], function (names, index) {\n var percentSpecified = inputRawOption[names[0]] != null;\n var valueSpecified = inputRawOption[names[1]] != null;\n\n if (percentSpecified && !valueSpecified) {\n rangePropMode[index] = 'percent';\n } else if (!percentSpecified && valueSpecified) {\n rangePropMode[index] = 'value';\n } else if (rangeModeInOption) {\n rangePropMode[index] = rangeModeInOption[index];\n } else if (percentSpecified) {\n // percentSpecified && valueSpecified\n rangePropMode[index] = 'percent';\n } // else remain its original setting.\n\n });\n}\n\nvar _default = DataZoomModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar LinearGradient = require(\"zrender/lib/graphic/LinearGradient\");\n\nvar eventTool = require(\"zrender/lib/core/event\");\n\nvar VisualMapView = require(\"./VisualMapView\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar sliderMove = require(\"../helper/sliderMove\");\n\nvar helper = require(\"./helper\");\n\nvar modelUtil = require(\"../../util/model\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar linearMap = numberUtil.linearMap;\nvar each = zrUtil.each;\nvar mathMin = Math.min;\nvar mathMax = Math.max; // Arbitrary value\n\nvar HOVER_LINK_SIZE = 12;\nvar HOVER_LINK_OUT = 6; // 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 type: 'visualMap.continuous',\n\n /**\n * @override\n */\n init: function () {\n ContinuousView.superApply(this, 'init', arguments);\n /**\n * @private\n */\n\n this._shapes = {};\n /**\n * @private\n */\n\n this._dataInterval = [];\n /**\n * @private\n */\n\n this._handleEnds = [];\n /**\n * @private\n */\n\n this._orient;\n /**\n * @private\n */\n\n this._useHandle;\n /**\n * @private\n */\n\n this._hoverLinkDataIndices = [];\n /**\n * @private\n */\n\n this._dragging;\n /**\n * @private\n */\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 var visualMapModel = this.visualMapModel;\n var thisGroup = this.group;\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\n this._renderEndsText(thisGroup, dataRangeText, 0);\n\n this._renderEndsText(thisGroup, dataRangeText, 1); // Do this for background size calculation.\n\n\n this._updateView(true); // After updating view, inner shapes is built completely,\n // and then background can be rendered.\n\n\n this.renderBackground(thisGroup); // Real update view\n\n this._updateView();\n\n this._enableHoverLinkToSeries();\n\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 } // Compatible with ec2, text[0] map to high value, text[1] map low value.\n\n\n var text = dataRangeText[1 - endsIndex];\n text = text != null ? text + '' : '';\n var visualMapModel = this.visualMapModel;\n var textGap = visualMapModel.get('textGap');\n var itemSize = visualMapModel.itemSize;\n var barGroup = this._shapes.barGroup;\n\n var position = this._applyTransform([itemSize[0] / 2, endsIndex === 0 ? -textGap : itemSize[1] + textGap], barGroup);\n\n var align = this._applyTransform(endsIndex === 0 ? 'bottom' : 'top', barGroup);\n\n var orient = this._orient;\n var textStyleModel = this.visualMapModel.textStyleModel;\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\n var barGroup = shapes.barGroup = this._createBarGroup(itemAlign); // Bar\n\n\n barGroup.add(shapes.outOfRange = createPolygon());\n barGroup.add(shapes.inRange = createPolygon(null, useHandle ? getCursor(this._orient) : null, zrUtil.bind(this._dragHandle, this, 'all', false), zrUtil.bind(this._dragHandle, this, 'all', true)));\n var textRect = visualMapModel.textStyleModel.getTextRect('国');\n var textSize = mathMax(textRect.width, textRect.height); // Handle\n\n if (useHandle) {\n shapes.handleThumbs = [];\n shapes.handleLabels = [];\n shapes.handleLabelPoints = [];\n\n this._createHandle(barGroup, 0, itemSize, textSize, orient, itemAlign);\n\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(createHandlePoints(handleIndex, textSize), getCursor(this._orient), onDrift, onDragEnd);\n handleThumb.position[0] = itemSize[0];\n barGroup.add(handleThumb); // 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\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,\n y: 0,\n text: '',\n textFont: textStyleModel.getFont(),\n textFill: textStyleModel.getTextColor()\n }\n });\n this.group.add(handleLabel);\n var handleLabelPoint = [orient === 'horizontal' ? textSize / 2 : textSize * 1.5, orient === 'horizontal' ? handleIndex === 0 ? -(textSize * 1.5) : textSize * 1.5 : handleIndex === 0 ? -textSize / 2 : textSize / 2];\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({\n invisible: true,\n silent: true\n });\n barGroup.add(indicator);\n var textStyleModel = this.visualMapModel.textStyleModel;\n var indicatorLabel = new graphic.Text({\n silent: true,\n invisible: true,\n style: {\n x: 0,\n y: 0,\n text: '',\n textFont: textStyleModel.getFont(),\n textFill: textStyleModel.getTextColor()\n }\n });\n this.group.add(indicatorLabel);\n var indicatorLabelPoint = [orient === 'horizontal' ? textSize / 2 : HOVER_LINK_OUT + 3, 0];\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\n this._updateInterval(handleIndex, vertex[1]); // Considering realtime, update view should be executed\n // before dispatch action.\n\n\n this._updateView();\n } // dragEnd do not dispatch action when realtime.\n\n\n if (isEnd === !this.visualMapModel.get('realtime')) {\n // 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 } 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 var dataInterval = this._dataInterval = visualMapModel.getSelected();\n var dataExtent = visualMapModel.getExtent();\n var sizeExtent = [0, visualMapModel.itemSize[1]];\n this._handleEnds = [linearMap(dataInterval[0], dataExtent, sizeExtent, true), linearMap(dataInterval[1], dataExtent, sizeExtent, true)];\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 sliderMove(delta, handleEnds, sizeExtent, handleIndex, // cross is forbiden\n 0);\n var dataExtent = visualMapModel.getExtent(); // Update data interval.\n\n this._dataInterval = [linearMap(handleEnds[0], sizeExtent, dataExtent, true), linearMap(handleEnds[1], sizeExtent, dataExtent, true)];\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 var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]];\n var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds;\n\n var visualInRange = this._createBarVisual(this._dataInterval, dataExtent, inRangeHandleEnds, 'inRange');\n\n var visualOutOfRange = this._createBarVisual(dataExtent, dataExtent, outOfRangeHandleEnds, 'outOfRange');\n\n shapes.inRange.setStyle({\n fill: visualInRange.barColor,\n opacity: visualInRange.opacity\n }).setShape('points', visualInRange.barPoints);\n shapes.outOfRange.setStyle({\n fill: visualOutOfRange.barColor,\n opacity: visualOutOfRange.opacity\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\n var colorStops = this._makeColorGradient(dataInterval, opts);\n\n var symbolSizes = [this.getControllerVisual(dataInterval[0], 'symbolSize', opts), 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: [colorStops[0].color, colorStops[colorStops.length - 1].color]\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\n var colorStops = [];\n var step = (dataInterval[1] - dataInterval[0]) / sampleNumber;\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\n if (currValue > dataInterval[1]) {\n break;\n }\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 return colorStops;\n },\n\n /**\n * @private\n */\n _createBarPoints: function (handleEnds, symbolSizes) {\n var itemSize = this.visualMapModel.itemSize;\n return [[itemSize[0] - symbolSizes[0], handleEnds[0]], [itemSize[0], handleEnds[0]], [itemSize[0], handleEnds[1]], [itemSize[0] - symbolSizes[1], handleEnds[1]]];\n },\n\n /**\n * @private\n */\n _createBarGroup: function (itemAlign) {\n var orient = this._orient;\n var inverse = this.visualMapModel.get('inverse');\n return new graphic.Group(orient === 'horizontal' && !inverse ? {\n scale: itemAlign === 'bottom' ? [1, 1] : [-1, 1],\n rotation: Math.PI / 2\n } : orient === 'horizontal' && inverse ? {\n scale: itemAlign === 'bottom' ? [-1, 1] : [1, 1],\n rotation: -Math.PI / 2\n } : orient === 'vertical' && !inverse ? {\n scale: itemAlign === 'left' ? [1, -1] : [-1, -1]\n } : {\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 each([0, 1], function (handleIndex) {\n var handleThumb = handleThumbs[handleIndex];\n handleThumb.setStyle('fill', visualInRange.handlesColor[handleIndex]);\n handleThumb.position[1] = handleEnds[handleIndex]; // Update handle label position.\n\n var textPoint = graphic.applyTransform(shapes.handleLabelPoints[handleIndex], graphic.getTransform(handleThumb, this.group));\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(this._orient === 'horizontal' ? handleIndex === 0 ? 'bottom' : 'top' : 'left', shapes.barGroup)\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 var shapes = this._shapes;\n var indicator = shapes.indicator;\n\n if (!indicator) {\n return;\n }\n\n indicator.position[1] = pos;\n indicator.attr('invisible', false);\n indicator.setShape('points', createIndicatorPoints(!!rangeSymbol, halfHoverLinkSize, pos, itemSize[1]));\n var opts = {\n convertOpacityToAlpha: true\n };\n var color = this.getControllerVisual(cursorValue, 'color', opts);\n indicator.setStyle('fill', color); // Update handle label position.\n\n var textPoint = graphic.applyTransform(shapes.indicatorLabelPoint, graphic.getTransform(indicator, this.group));\n var indicatorLabel = shapes.indicatorLabel;\n indicatorLabel.attr('invisible', false);\n\n var align = this._applyTransform('left', shapes.barGroup);\n\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\n this._shapes.barGroup.on('mousemove', function (e) {\n self._hovering = true;\n\n if (!self._dragging) {\n var itemSize = self.visualMapModel.itemSize;\n\n var pos = self._applyTransform([e.offsetX, e.offsetY], self._shapes.barGroup, true, true); // For hover link show when hover handle, which might be\n // below or upper than sizeExtent.\n\n\n pos[1] = mathMin(mathMax(0, pos[1]), itemSize[1]);\n\n self._doHoverLinkToSeries(pos[1], 0 <= pos[0] && pos[0] <= itemSize[0]);\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 } 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(); // For hover link show when hover handle, which might be below or upper than sizeExtent.\n\n cursorPos = mathMin(mathMax(sizeExtent[0], cursorPos), sizeExtent[1]);\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 = [linearMap(hoverRange[0], sizeExtent, dataExtent, true), linearMap(hoverRange[1], sizeExtent, dataExtent, true)]; // Consider data range is out of visualMap range, see test/visualMap-continuous.html,\n // where china and india has very large population.\n\n hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity);\n hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity); // Do not show indicator when mouse is over handle,\n // otherwise labels overlap, especially when dragging.\n\n if (hoverOnBar) {\n if (valueRange[0] === -Infinity) {\n this._showIndicator(cursorValue, valueRange[1], '< ', halfHoverLinkSize);\n } else if (valueRange[1] === Infinity) {\n this._showIndicator(cursorValue, valueRange[0], '> ', halfHoverLinkSize);\n } else {\n this._showIndicator(cursorValue, cursorValue, '≈ ', halfHoverLinkSize);\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\n\n var oldBatch = this._hoverLinkDataIndices;\n var newBatch = [];\n\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\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\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 return graphic[zrUtil.isArray(vertex) ? 'applyTransform' : 'transformDirection'](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\n this._clearHoverLinkToSeries();\n },\n\n /**\n * @override\n */\n remove: function () {\n this._clearHoverLinkFromSeries();\n\n this._clearHoverLinkToSeries();\n }\n});\n\nfunction createPolygon(points, cursor, onDrift, onDragEnd) {\n return new graphic.Polygon({\n shape: {\n points: points\n },\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 ? [[0, 0], [textSize, 0], [textSize, -textSize]] : [[0, 0], [textSize, 0], [textSize, textSize]];\n}\n\nfunction createIndicatorPoints(isRange, halfHoverLinkSize, pos, extentMax) {\n return isRange ? [// indicate range\n [0, -mathMin(halfHoverLinkSize, mathMax(pos, 0))], [HOVER_LINK_OUT, 0], [0, mathMin(halfHoverLinkSize, mathMax(extentMax - pos, 0))]] : [// indicate single value\n [0, 0], [5, -5], [5, 5]];\n}\n\nfunction getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) {\n var halfHoverLinkSize = HOVER_LINK_SIZE / 2;\n var hoverLinkDataSize = visualMapModel.get('hoverLinkDataSize');\n\n if (hoverLinkDataSize) {\n halfHoverLinkSize = linearMap(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2;\n }\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\nvar _default = ContinuousView;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"./config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrender = require(\"zrender/lib/zrender\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar colorTool = require(\"zrender/lib/tool/color\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar timsort = require(\"zrender/lib/core/timsort\");\n\nvar Eventful = require(\"zrender/lib/mixin/Eventful\");\n\nvar GlobalModel = require(\"./model/Global\");\n\nvar ExtensionAPI = require(\"./ExtensionAPI\");\n\nvar CoordinateSystemManager = require(\"./CoordinateSystem\");\n\nvar OptionManager = require(\"./model/OptionManager\");\n\nvar backwardCompat = require(\"./preprocessor/backwardCompat\");\n\nvar dataStack = require(\"./processor/dataStack\");\n\nvar ComponentModel = require(\"./model/Component\");\n\nvar SeriesModel = require(\"./model/Series\");\n\nvar ComponentView = require(\"./view/Component\");\n\nvar ChartView = require(\"./view/Chart\");\n\nvar graphic = require(\"./util/graphic\");\n\nvar modelUtil = require(\"./util/model\");\n\nvar _throttle = require(\"./util/throttle\");\n\nvar throttle = _throttle.throttle;\n\nvar seriesColor = require(\"./visual/seriesColor\");\n\nvar aria = require(\"./visual/aria\");\n\nvar loadingDefault = require(\"./loading/default\");\n\nvar Scheduler = require(\"./stream/Scheduler\");\n\nvar lightTheme = require(\"./theme/light\");\n\nvar darkTheme = require(\"./theme/dark\");\n\nrequire(\"./component/dataset\");\n\nvar mapDataStorage = require(\"./coord/geo/mapDataStorage\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar assert = zrUtil.assert;\nvar each = zrUtil.each;\nvar isFunction = zrUtil.isFunction;\nvar isObject = zrUtil.isObject;\nvar parseClassType = ComponentModel.parseClassType;\nvar version = '4.8.0';\nvar dependencies = {\n zrender: '4.3.1'\n};\nvar TEST_FRAME_REMAIN_TIME = 1;\nvar PRIORITY_PROCESSOR_FILTER = 1000;\nvar PRIORITY_PROCESSOR_SERIES_FILTER = 800;\nvar PRIORITY_PROCESSOR_DATASTACK = 900;\nvar PRIORITY_PROCESSOR_STATISTIC = 5000;\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; // FIXME\n// necessary?\n\nvar PRIORITY_VISUAL_BRUSH = 5000;\nvar 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}; // 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]).\n\nvar IN_MAIN_PROCESS = '__flagInMainProcess';\nvar OPTION_UPDATED = '__optionUpdated';\nvar ACTION_REG = /^[a-zA-Z0-9_]+$/;\n\nfunction createRegisterEventWithLowercaseName(method, ignoreDisposed) {\n return function (eventName, handler, context) {\n if (!ignoreDisposed && this._disposed) {\n disposedWarning(this.id);\n return;\n } // Event name is all lowercase\n\n\n eventName = eventName && eventName.toLowerCase();\n Eventful.prototype[method].call(this, eventName, handler, context);\n };\n}\n/**\n * @module echarts~MessageCenter\n */\n\n\nfunction MessageCenter() {\n Eventful.call(this);\n}\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 * @module echarts~ECharts\n */\n\nfunction ECharts(dom, theme, opts) {\n opts = opts || {}; // Get theme by name\n\n if (typeof theme === 'string') {\n theme = themeStorage[theme];\n }\n /**\n * @type {string}\n */\n\n\n this.id;\n /**\n * Group id\n * @type {string}\n */\n\n this.group;\n /**\n * @type {HTMLElement}\n * @private\n */\n\n this._dom = dom;\n var defaultRenderer = 'canvas';\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 * Expect 60 fps.\n * @type {Function}\n * @private\n */\n\n this._throttledZrFlush = throttle(zrUtil.bind(zr.flush, zr), 17);\n var theme = zrUtil.clone(theme);\n theme && backwardCompat(theme, true);\n /**\n * @type {Object}\n * @private\n */\n\n this._theme = theme;\n /**\n * @type {Array.}\n * @private\n */\n\n this._chartsViews = [];\n /**\n * @type {Object.}\n * @private\n */\n\n this._chartsMap = {};\n /**\n * @type {Array.}\n * @private\n */\n\n this._componentsViews = [];\n /**\n * @type {Object.}\n * @private\n */\n\n this._componentsMap = {};\n /**\n * @type {module:echarts/CoordinateSystem}\n * @private\n */\n\n this._coordSysMgr = new CoordinateSystemManager();\n /**\n * @type {module:echarts/ExtensionAPI}\n * @private\n */\n\n var api = this._api = createExtensionAPI(this); // Sort on demand\n\n function prioritySortFunc(a, b) {\n return a.__prio - b.__prio;\n }\n\n timsort(visualFuncs, prioritySortFunc);\n timsort(dataProcessorFuncs, prioritySortFunc);\n /**\n * @type {module:echarts/stream/Scheduler}\n */\n\n this._scheduler = new Scheduler(this, api, dataProcessorFuncs, visualFuncs);\n Eventful.call(this, this._ecEventProcessor = new EventProcessor());\n /**\n * @type {module:echarts~MessageCenter}\n * @private\n */\n\n this._messageCenter = new MessageCenter(); // Init mouse events\n\n this._initEvents(); // In case some people write `window.onresize = chart.resize`\n\n\n this.resize = zrUtil.bind(this.resize, this); // Can't dispatch action during rendering procedure\n\n this._pendingActions = [];\n zr.animation.on('frame', this._onframe, this);\n bindRenderedEvent(zr, this); // ECharts instance can be used as value.\n\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; // Lazy update\n\n if (this[OPTION_UPDATED]) {\n var silent = this[OPTION_UPDATED].silent;\n this[IN_MAIN_PROCESS] = true;\n prepare(this);\n updateMethods.update.call(this);\n this[IN_MAIN_PROCESS] = false;\n this[OPTION_UPDATED] = false;\n flushPendingActions.call(this, silent);\n triggerUpdatedEvent.call(this, silent);\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\n do {\n var startTime = +new Date();\n scheduler.performSeriesTasks(ecModel); // Currently dataProcessorFuncs do not check threshold.\n\n scheduler.performDataProcessorTasks(ecModel);\n updateStreamModes(this, ecModel); // 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 // console.log('--- ec frame visual ---', remainTime);\n\n scheduler.performVisualTasks(ecModel);\n renderSeries(this, this._model, api, 'remain');\n remainTime -= +new Date() - startTime;\n } while (remainTime > 0 && scheduler.unfinished); // Call flush explicitly for trigger finished event.\n\n\n if (!scheduler.unfinished) {\n this._zr.flush();\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 */\n\n\nechartsProto.getDom = function () {\n return this._dom;\n};\n/**\n * @return {module:zrender~ZRender}\n */\n\n\nechartsProto.getZr = function () {\n return this._zr;\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 */\n\n\nechartsProto.setOption = function (option, notMerge, lazyUpdate) {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n\n var silent;\n\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] = {\n silent: silent\n };\n this[IN_MAIN_PROCESS] = false;\n } else {\n prepare(this);\n updateMethods.update.call(this); // Ensure zr refresh sychronously, and then pixel in canvas can be\n // fetched after `setOption`.\n\n this._zr.flush();\n\n this[OPTION_UPDATED] = false;\n this[IN_MAIN_PROCESS] = false;\n flushPendingActions.call(this, silent);\n triggerUpdatedEvent.call(this, silent);\n }\n};\n/**\n * @DEPRECATED\n */\n\n\nechartsProto.setTheme = function () {\n console.error('ECharts#setTheme() is DEPRECATED in ECharts 3.0');\n};\n/**\n * @return {module:echarts/model/Global}\n */\n\n\nechartsProto.getModel = function () {\n return this._model;\n};\n/**\n * @return {Object}\n */\n\n\nechartsProto.getOption = function () {\n return this._model && this._model.getOption();\n};\n/**\n * @return {number}\n */\n\n\nechartsProto.getWidth = function () {\n return this._zr.getWidth();\n};\n/**\n * @return {number}\n */\n\n\nechartsProto.getHeight = function () {\n return this._zr.getHeight();\n};\n/**\n * @return {number}\n */\n\n\nechartsProto.getDevicePixelRatio = function () {\n return this._zr.painter.dpr || window.devicePixelRatio || 1;\n};\n/**\n * Get canvas which has all thing rendered\n * @param {Object} opts\n * @param {string} [opts.backgroundColor]\n * @return {string}\n */\n\n\nechartsProto.getRenderedCanvas = function (opts) {\n if (!env.canvasSupported) {\n return;\n }\n\n opts = opts || {};\n opts.pixelRatio = opts.pixelRatio || 1;\n opts.backgroundColor = opts.backgroundColor || this._model.get('backgroundColor');\n var zr = this._zr; // 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\n return zr.painter.getRenderedCanvas(opts);\n};\n/**\n * Get svg data url\n * @return {string}\n */\n\n\nechartsProto.getSvgDataURL = function () {\n if (!env.svgSupported) {\n return;\n }\n\n var zr = this._zr;\n var list = zr.storage.getDisplayList(); // Stop animations\n\n zrUtil.each(list, function (el) {\n el.stopAnimation(true);\n });\n return zr.painter.toDataURL();\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 */\n\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 each(excludeComponents, function (componentType) {\n ecModel.eachComponent({\n mainType: componentType\n }, function (component) {\n var view = self._componentsMap[component.__viewId];\n\n if (!view.group.ignore) {\n excludesComponentViews.push(view);\n view.group.ignore = true;\n }\n });\n });\n var url = this._zr.painter.getType() === 'svg' ? this.getSvgDataURL() : this.getRenderedCanvas(opts).toDataURL('image/' + (opts && opts.type || 'png'));\n each(excludesComponentViews, function (view) {\n view.group.ignore = false;\n });\n return url;\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 */\n\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\n var isSvg = opts.type === 'svg';\n var groupId = this.group;\n var mathMin = Math.min;\n var mathMax = Math.max;\n var MAX_NUMBER = Infinity;\n\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 zrUtil.each(instances, function (chart, id) {\n if (chart.group === groupId) {\n var canvas = isSvg ? chart.getZr().painter.getSvgDom().innerHTML : chart.getRenderedCanvas(zrUtil.clone(opts));\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 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 var zr = zrender.init(targetCanvas, {\n renderer: isSvg ? 'svg' : 'canvas'\n });\n zr.resize({\n width: width,\n height: height\n });\n\n if (isSvg) {\n var content = '';\n each(canvasList, function (item) {\n var x = item.left - left;\n var y = item.top - top;\n content += '' + item.dom + '';\n });\n zr.painter.getSvgRoot().innerHTML = content;\n\n if (opts.connectedBackgroundColor) {\n zr.painter.setBackgroundColor(opts.connectedBackgroundColor);\n }\n\n zr.refreshImmediately();\n return zr.painter.toDataURL();\n } else {\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 return targetCanvas.toDataURL('image/' + (opts && opts.type || 'png'));\n }\n } else {\n return this.getDataURL(opts);\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 */\n\n\nechartsProto.convertToPixel = zrUtil.curry(doConvertPixel, 'convertToPixel');\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 */\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\n var coordSysList = this._coordSysMgr.getCoordinateSystems();\n\n var result;\n finder = modelUtil.parseFinder(ecModel, finder);\n\n for (var i = 0; i < coordSysList.length; i++) {\n var coordSys = coordSysList[i];\n\n if (coordSys[methodName] && (result = coordSys[methodName](ecModel, finder, value)) != null) {\n return result;\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 */\n\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 finder = modelUtil.parseFinder(ecModel, finder);\n zrUtil.each(finder, function (models, key) {\n key.indexOf('Models') >= 0 && zrUtil.each(models, function (model) {\n var coordSys = model.coordinateSystem;\n\n if (coordSys && coordSys.containPoint) {\n result |= !!coordSys.containPoint(value);\n } else if (key === 'seriesModels') {\n var view = this._chartsMap[model.__viewId];\n\n if (view && view.containPoint) {\n result |= view.containPoint(value, model);\n } else {}\n } else {}\n }, this);\n }, this);\n return !!result;\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 */\n\n\nechartsProto.getVisual = function (finder, visualType) {\n var ecModel = this._model;\n finder = modelUtil.parseFinder(ecModel, finder, {\n defaultMainType: 'series'\n });\n var seriesModel = finder.seriesModel;\n var data = seriesModel.getData();\n var dataIndexInside = finder.hasOwnProperty('dataIndexInside') ? finder.dataIndexInside : finder.hasOwnProperty('dataIndex') ? data.indexOfRawIndex(finder.dataIndex) : null;\n return dataIndexInside != null ? data.getItemVisual(dataIndexInside, visualType) : data.getVisual(visualType);\n};\n/**\n * Get view of corresponding component model\n * @param {module:echarts/model/Component} componentModel\n * @return {module:echarts/view/Component}\n */\n\n\nechartsProto.getViewOfComponentModel = function (componentModel) {\n return this._componentsMap[componentModel.__viewId];\n};\n/**\n * Get view of corresponding series model\n * @param {module:echarts/model/Series} seriesModel\n * @return {module:echarts/view/Chart}\n */\n\n\nechartsProto.getViewOfSeriesModel = function (seriesModel) {\n return this._chartsMap[seriesModel.__viewId];\n};\n\nvar updateMethods = {\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 var ecModel = this._model;\n var api = this._api;\n var zr = this._zr;\n var coordSysMgr = this._coordSysMgr;\n var scheduler = this._scheduler; // update before setOption\n\n if (!ecModel) {\n return;\n }\n\n scheduler.restoreData(ecModel, payload);\n scheduler.performSeriesTasks(ecModel); // 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 // Create new coordinate system each update\n // In LineView may save the old coordinate system and use it to get the orignal point\n\n coordSysMgr.create(ecModel, api);\n scheduler.performDataProcessorTasks(ecModel, payload); // 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\n updateStreamModes(this, ecModel); // 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\n coordSysMgr.update(ecModel, api);\n clearColorPalette(ecModel);\n scheduler.performVisualTasks(ecModel, payload);\n render(this, ecModel, api, payload); // Set background\n\n var backgroundColor = ecModel.get('backgroundColor') || 'transparent'; // In IE8\n\n if (!env.canvasSupported) {\n var colorArr = colorTool.parse(backgroundColor);\n backgroundColor = colorTool.stringify(colorArr, 'rgb');\n\n if (colorArr[3] === 0) {\n backgroundColor = 'transparent';\n }\n } else {\n zr.setBackgroundColor(backgroundColor);\n }\n\n performPostUpdateFuncs(ecModel, api); // 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; // update before setOption\n\n if (!ecModel) {\n return;\n } // ChartView.markUpdateMethod(payload, 'updateTransform');\n\n\n var componentDirtyList = [];\n ecModel.eachComponent(function (componentType, componentModel) {\n var componentView = ecIns.getViewOfComponentModel(componentModel);\n\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 } else {\n componentDirtyList.push(componentView);\n }\n }\n });\n var seriesDirtyMap = zrUtil.createHashMap();\n ecModel.eachSeries(function (seriesModel) {\n var chartView = ecIns._chartsMap[seriesModel.__viewId];\n\n if (chartView.updateTransform) {\n var result = chartView.updateTransform(seriesModel, ecModel, api, payload);\n result && result.update && seriesDirtyMap.set(seriesModel.uid, 1);\n } else {\n seriesDirtyMap.set(seriesModel.uid, 1);\n }\n });\n clearColorPalette(ecModel); // 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\n this._scheduler.performVisualTasks(ecModel, payload, {\n setDirty: true,\n dirtyMap: seriesDirtyMap\n }); // Currently, not call render of components. Geo render cost a lot.\n // renderComponents(ecIns, ecModel, api, payload, componentDirtyList);\n\n\n renderSeries(ecIns, ecModel, api, payload, seriesDirtyMap);\n performPostUpdateFuncs(ecModel, this._api);\n },\n\n /**\n * @param {Object} payload\n * @private\n */\n updateView: function (payload) {\n var ecModel = this._model; // update before setOption\n\n if (!ecModel) {\n return;\n }\n\n ChartView.markUpdateMethod(payload, 'updateView');\n clearColorPalette(ecModel); // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n\n this._scheduler.performVisualTasks(ecModel, payload, {\n setDirty: true\n });\n\n render(this, this._model, this._api, payload);\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); // var ecModel = this._model;\n // // update before setOption\n // if (!ecModel) {\n // return;\n // }\n // ChartView.markUpdateMethod(payload, 'updateVisual');\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, {visualType: 'visual', setDirty: true});\n // render(this, this._model, this._api, payload);\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); // var ecModel = this._model;\n // // update before setOption\n // if (!ecModel) {\n // return;\n // }\n // ChartView.markUpdateMethod(payload, 'updateLayout');\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 // render(this, this._model, this._api, payload);\n // performPostUpdateFuncs(ecModel, this._api);\n }\n};\n\nfunction prepare(ecIns) {\n var ecModel = ecIns._model;\n var scheduler = ecIns._scheduler;\n scheduler.restorePipelines(ecModel);\n scheduler.prepareStageTasks();\n prepareView(ecIns, 'component', ecModel, scheduler);\n prepareView(ecIns, 'chart', ecModel, scheduler);\n scheduler.plan();\n}\n/**\n * @private\n */\n\n\nfunction updateDirectly(ecIns, method, payload, mainType, subType) {\n var ecModel = ecIns._model; // broadcast\n\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 var condition = {\n mainType: mainType,\n query: query\n };\n subType && (condition.subType = subType); // subType may be '' by parseClassType;\n\n var excludeSeriesId = payload.excludeSeriesId;\n\n if (excludeSeriesId != null) {\n excludeSeriesId = zrUtil.createHashMap(modelUtil.normalizeToArray(excludeSeriesId));\n } // If dispatchAction before setOption, do nothing.\n\n\n ecModel && ecModel.eachComponent(condition, function (model) {\n if (!excludeSeriesId || excludeSeriesId.get(model.id) == null) {\n callView(ecIns[mainType === 'series' ? '_chartsMap' : '_componentsMap'][model.__viewId]);\n }\n }, ecIns);\n\n function callView(view) {\n view && view.__alive && view[method] && view[method](view.__model, ecModel, ecIns._api, payload);\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 */\n\n\nechartsProto.resize = function (opts) {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n\n this._zr.resize(opts);\n\n var ecModel = this._model; // Resize loading effect\n\n this._loadingFX && this._loadingFX.resize();\n\n if (!ecModel) {\n return;\n }\n\n var optionChanged = ecModel.resetOption('media');\n var silent = opts && opts.silent;\n this[IN_MAIN_PROCESS] = true;\n optionChanged && prepare(this);\n updateMethods.update.call(this);\n this[IN_MAIN_PROCESS] = false;\n flushPendingActions.call(this, silent);\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 * Show loading effect\n * @param {string} [name='default']\n * @param {Object} [cfg]\n */\n\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\n name = name || 'default';\n this.hideLoading();\n\n if (!loadingEffects[name]) {\n return;\n }\n\n var el = loadingEffects[name](this._api, cfg);\n var zr = this._zr;\n this._loadingFX = el;\n zr.add(el);\n};\n/**\n * Hide loading effect\n */\n\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 * @param {Object} eventObj\n * @return {Object}\n */\n\n\nechartsProto.makeActionFromEvent = function (eventObj) {\n var payload = zrUtil.extend({}, eventObj);\n payload.type = eventActionMap[eventObj.type];\n return payload;\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 */\n\n\nechartsProto.dispatchAction = function (payload, opt) {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n\n if (!isObject(opt)) {\n opt = {\n silent: !!opt\n };\n }\n\n if (!actions[payload.type]) {\n return;\n } // Avoid dispatch action before setOption. Especially in `connect`.\n\n\n if (!this._model) {\n return;\n } // May dispatchAction in rendering procedure\n\n\n if (this[IN_MAIN_PROCESS]) {\n this._pendingActions.push(payload);\n\n return;\n }\n\n doDispatchAction.call(this, payload, opt.silent);\n\n if (opt.flush) {\n this._zr.flush(true);\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 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 var cptType = (actionInfo.update || 'update').split(':');\n var updateMethod = cptType.pop();\n cptType = cptType[0] != null && parseClassType(cptType[0]);\n this[IN_MAIN_PROCESS] = true;\n var payloads = [payload];\n var batched = false; // Batch action\n\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 each(payloads, function (batchItem) {\n // Action can specify the event by return it.\n eventObj = actionWrap.action(batchItem, this._model, this._api); // Emit event outside\n\n eventObj = eventObj || zrUtil.extend({}, batchItem); // Convert type to eventType\n\n eventObj.type = actionInfo.event || eventObj.type;\n eventObjBatch.push(eventObj); // light update does not perform data process, layout and visual.\n\n if (isHighDown) {\n // method, payload, mainType, subType\n updateDirectly(this, updateMethod, batchItem, 'series');\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 } else {\n updateMethods[updateMethod].call(this, payload);\n }\n } // Follow the rule of action batch\n\n\n if (batched) {\n eventObj = {\n type: actionInfo.event || payloadType,\n escapeConnect: escapeConnect,\n batch: eventObjBatch\n };\n } else {\n eventObj = eventObjBatch[0];\n }\n\n this[IN_MAIN_PROCESS] = false;\n !silent && this._messageCenter.trigger(eventObj.type, eventObj);\n}\n\nfunction flushPendingActions(silent) {\n var pendingActions = this._pendingActions;\n\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 * 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 */\n\n\nfunction bindRenderedEvent(zr, ecIns) {\n zr.on('rendered', function () {\n ecIns.trigger('rendered'); // 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\n if ( // 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() && !ecIns[OPTION_UPDATED] && !ecIns._scheduler.unfinished && !ecIns._pendingActions.length) {\n ecIns.trigger('finished');\n }\n });\n}\n/**\n * @param {Object} params\n * @param {number} params.seriesIndex\n * @param {Array|TypedArray} params.data\n */\n\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 seriesModel.appendData(params); // 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 * Register event\n * @method\n */\n\n\nechartsProto.on = createRegisterEventWithLowercaseName('on', false);\nechartsProto.off = createRegisterEventWithLowercaseName('off', false);\nechartsProto.one = createRegisterEventWithLowercaseName('one', false);\n/**\n * Prepare view instances of charts and components\n * @param {module:echarts/model/Global} ecModel\n * @private\n */\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 ? ecModel.eachComponent(function (componentType, model) {\n componentType !== 'series' && doPrepare(model);\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\n if (!view) {\n var classType = parseClassType(model.type);\n var Clazz = isComponent ? ComponentView.getClass(classType.main, classType.sub) : ChartView.getClass(classType.sub);\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\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 } else {\n i++;\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\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 renderComponents(ecIns, ecModel, api, payload);\n each(ecIns._chartsViews, function (chart) {\n chart.__alive = false;\n });\n renderSeries(ecIns, ecModel, api, payload); // Remove groups of unrendered charts\n\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 updateZ(componentModel, componentView);\n });\n}\n/**\n * Render each chart and component\n * @private\n */\n\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 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 chartView.group.silent = !!seriesModel.get('silent');\n updateZ(seriesModel, chartView);\n updateBlend(seriesModel, chartView);\n });\n scheduler.unfinished |= unfinished; // If use hover layer\n\n updateHoverLayerStatus(ecIns, ecModel); // Add aria\n\n aria(ecIns._zr.dom, ecModel);\n}\n\nfunction performPostUpdateFuncs(ecModel, api) {\n each(postUpdateFuncs, function (func) {\n func(ecModel, api);\n });\n}\n\nvar MOUSE_EVENT_NAMES = ['click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'mouseup', 'globalout', 'contextmenu'];\n/**\n * @private\n */\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'; // no e.target when 'globalout'.\n\n if (isGlobalOut) {\n params = {};\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 } // If element has custom eventData of components\n else if (el && el.eventData) {\n params = zrUtil.extend({}, el.eventData);\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\n if (params) {\n var componentType = params.componentType;\n var componentIndex = params.componentIndex; // 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\n if (componentType === 'markLine' || componentType === 'markPoint' || componentType === 'markArea') {\n componentType = 'series';\n componentIndex = params.seriesIndex;\n }\n\n var model = componentType && componentIndex != null && ecModel.getComponent(componentType, componentIndex);\n var view = model && this[model.mainType === 'series' ? '_chartsMap' : '_componentsMap'][model.__viewId];\n params.event = e;\n params.type = eveName;\n this._ecEventProcessor.eventInfo = {\n targetEl: el,\n packedEvent: params,\n model: model,\n view: view\n };\n this.trigger(eveName, params);\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\n\n handler.zrEventfulCallAtLast = true;\n\n this._zr.on(eveName, handler, this);\n }, this);\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 * @return {boolean}\n */\n\n\nechartsProto.isDisposed = function () {\n return this._disposed;\n};\n/**\n * Clear\n */\n\n\nechartsProto.clear = function () {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n\n this.setOption({\n series: []\n }, true);\n};\n/**\n * Dispose instance\n */\n\n\nechartsProto.dispose = function () {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n\n this._disposed = true;\n modelUtil.setAttribute(this.getDom(), DOM_ATTRIBUTE_KEY, '');\n var api = this._api;\n var ecModel = this._model;\n each(this._componentsViews, function (component) {\n component.dispose(ecModel, api);\n });\n each(this._chartsViews, function (chart) {\n chart.dispose(ecModel, api);\n }); // Dispose after all views disposed\n\n this._zr.dispose();\n\n delete instances[this.id];\n};\n\nzrUtil.mixin(ECharts, Eventful);\n\nfunction disposedWarning(id) {}\n\nfunction updateHoverLayerStatus(ecIns, ecModel) {\n var zr = ecIns._zr;\n var storage = zr.storage;\n var elCount = 0;\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\n var chartView = ecIns._chartsMap[seriesModel.__viewId];\n\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 * 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 */\n\n\nfunction updateBlend(seriesModel, chartView) {\n var blendMode = seriesModel.get('blendMode') || null;\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\n if (el.eachPendingDisplayable) {\n el.eachPendingDisplayable(function (displayable) {\n displayable.setStyle('blend', blendMode);\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 */\n\n\nfunction updateZ(model, view) {\n var z = model.get('z');\n var zlevel = model.get('zlevel'); // Set z and zlevel\n\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(coordSysMgr.getCoordinateSystems, coordSysMgr),\n getComponentByElement: function (el) {\n while (el) {\n var modelInfo = el.__ecComponentInfo;\n\n if (modelInfo != null) {\n return ecInstance._model.getComponent(modelInfo.mainType, modelInfo.index);\n }\n\n el = el.parent;\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 */\n\n\nfunction EventProcessor() {\n // These info required: targetEl, packedEvent, model, view\n this.eventInfo;\n}\n\nEventProcessor.prototype = {\n constructor: EventProcessor,\n normalizeQuery: function (query) {\n var cptQuery = {};\n var dataQuery = {};\n var otherQuery = {}; // `query` is `mainType` or `mainType.subType` of component.\n\n if (zrUtil.isString(query)) {\n var condCptType = parseClassType(query); // `.main` and `.sub` may be ''.\n\n cptQuery.mainType = condCptType.main || null;\n cptQuery.subType = condCptType.sub || null;\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 = {\n name: 1,\n dataIndex: 1,\n dataType: 1\n };\n zrUtil.each(query, function (val, key) {\n var reserved = false;\n\n for (var i = 0; i < suffixes.length; i++) {\n var propSuffix = suffixes[i];\n var suffixPos = key.lastIndexOf(propSuffix);\n\n if (suffixPos > 0 && suffixPos === key.length - propSuffix.length) {\n var mainType = key.slice(0, suffixPos); // Consider `dataIndex`.\n\n if (mainType !== 'data') {\n cptQuery.mainType = mainType;\n cptQuery[propSuffix.toLowerCase()] = val;\n reserved = true;\n }\n }\n }\n\n if (dataKeys.hasOwnProperty(key)) {\n dataQuery[key] = val;\n reserved = true;\n }\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 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; // For event like 'globalout'.\n\n if (!model || !view) {\n return true;\n }\n\n var cptQuery = query.cptQuery;\n var dataQuery = query.dataQuery;\n return check(cptQuery, model, 'mainType') && check(cptQuery, model, 'subType') && check(cptQuery, model, 'index', 'componentIndex') && check(cptQuery, model, 'name') && check(cptQuery, model, 'id') && check(dataQuery, packedEvent, 'name') && check(dataQuery, packedEvent, 'dataIndex') && check(dataQuery, packedEvent, 'dataType') && (!view.filterForExposedEvent || view.filterForExposedEvent(eventType, query.otherQuery, targetEl, packedEvent));\n\n function check(query, host, prop, propOnHost) {\n return query[prop] == null || host[propOnHost || prop] === query[prop];\n }\n },\n afterTrigger: function () {\n // Make sure the eventInfo wont be used in next trigger.\n this.eventInfo = null;\n }\n};\n/**\n * @type {Object} key: actionType.\n * @inner\n */\n\nvar actions = {};\n/**\n * Map eventType to actionType\n * @type {Object}\n */\n\nvar eventActionMap = {};\n/**\n * Data processor functions of each stage\n * @type {Array.>}\n * @inner\n */\n\nvar dataProcessorFuncs = [];\n/**\n * @type {Array.}\n * @inner\n */\n\nvar optionPreprocessorFuncs = [];\n/**\n * @type {Array.}\n * @inner\n */\n\nvar postUpdateFuncs = [];\n/**\n * Visual encoding functions of each stage\n * @type {Array.>}\n */\n\nvar visualFuncs = [];\n/**\n * Theme storage\n * @type {Object.}\n */\n\nvar themeStorage = {};\n/**\n * Loading effects\n */\n\nvar loadingEffects = {};\nvar instances = {};\nvar connectedGroups = {};\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 each(instances, function (otherChart) {\n if (otherChart !== chart && otherChart.group === chart.group) {\n otherCharts.push(otherChart);\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 * @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 */\n\n\nfunction init(dom, theme, opts) {\n var existInstance = getInstanceByDom(dom);\n\n if (existInstance) {\n return existInstance;\n }\n\n var chart = new ECharts(dom, theme, opts);\n chart.id = 'ec_' + idBase++;\n instances[chart.id] = chart;\n modelUtil.setAttribute(dom, DOM_ATTRIBUTE_KEY, chart.id);\n enableConnect(chart);\n return chart;\n}\n/**\n * @return {string|Array.} groupId\n */\n\n\nfunction connect(groupId) {\n // Is array of charts\n if (zrUtil.isArray(groupId)) {\n var charts = groupId;\n groupId = null; // If any chart has group\n\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\n connectedGroups[groupId] = true;\n return groupId;\n}\n/**\n * @DEPRECATED\n * @return {string} groupId\n */\n\n\nfunction disConnect(groupId) {\n connectedGroups[groupId] = false;\n}\n/**\n * @return {string} groupId\n */\n\n\nvar disconnect = disConnect;\n/**\n * Dispose a chart instance\n * @param {module:echarts~ECharts|HTMLDomElement|string} chart\n */\n\nfunction dispose(chart) {\n if (typeof chart === 'string') {\n chart = instances[chart];\n } else if (!(chart instanceof ECharts)) {\n // Try to treat as dom\n chart = getInstanceByDom(chart);\n }\n\n if (chart instanceof ECharts && !chart.isDisposed()) {\n chart.dispose();\n }\n}\n/**\n * @param {HTMLElement} dom\n * @return {echarts~ECharts}\n */\n\n\nfunction getInstanceByDom(dom) {\n return instances[modelUtil.getAttribute(dom, DOM_ATTRIBUTE_KEY)];\n}\n/**\n * @param {string} key\n * @return {echarts~ECharts}\n */\n\n\nfunction getInstanceById(key) {\n return instances[key];\n}\n/**\n * Register theme\n */\n\n\nfunction registerTheme(name, theme) {\n themeStorage[name] = theme;\n}\n/**\n * Register option preprocessor\n * @param {Function} preprocessorFunc\n */\n\n\nfunction registerPreprocessor(preprocessorFunc) {\n optionPreprocessorFuncs.push(preprocessorFunc);\n}\n/**\n * @param {number} [priority=1000]\n * @param {Object|Function} processor\n */\n\n\nfunction registerProcessor(priority, processor) {\n normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_FILTER);\n}\n/**\n * Register postUpdater\n * @param {Function} postUpdateFunc\n */\n\n\nfunction registerPostUpdate(postUpdateFunc) {\n postUpdateFuncs.push(postUpdateFunc);\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 */\n\n\nfunction registerAction(actionInfo, eventName, action) {\n if (typeof eventName === 'function') {\n action = eventName;\n eventName = '';\n }\n\n var actionType = isObject(actionInfo) ? actionInfo.type : [actionInfo, actionInfo = {\n event: eventName\n }][0]; // Event name is all lowercase\n\n actionInfo.event = (actionInfo.event || actionType).toLowerCase();\n eventName = actionInfo.event; // Validate action type and event name.\n\n assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName));\n\n if (!actions[actionType]) {\n actions[actionType] = {\n action: action,\n actionInfo: actionInfo\n };\n }\n\n eventActionMap[eventName] = actionType;\n}\n/**\n * @param {string} type\n * @param {*} CoordinateSystem\n */\n\n\nfunction registerCoordinateSystem(type, CoordinateSystem) {\n CoordinateSystemManager.register(type, CoordinateSystem);\n}\n/**\n * Get dimensions of specified coordinate system.\n * @param {string} type\n * @return {Array.}\n */\n\n\nfunction getCoordinateSystemDimensions(type) {\n var coordSysCreator = CoordinateSystemManager.get(type);\n\n if (coordSysCreator) {\n return coordSysCreator.getDimensionsInfo ? coordSysCreator.getDimensionsInfo() : coordSysCreator.dimensions.slice();\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 */\n\n\nfunction registerLayout(priority, layoutTask) {\n normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, 'layout');\n}\n/**\n * @param {number} [priority=3000]\n * @param {module:echarts/stream/Task} visualTask\n */\n\n\nfunction registerVisual(priority, visualTask) {\n normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, 'visual');\n}\n/**\n * @param {Object|Function} fn: {seriesType, createOnAllSeries, performRawSeries, reset}\n */\n\n\nfunction normalizeRegister(targetList, priority, fn, defaultPriority, visualType) {\n if (isFunction(priority) || isObject(priority)) {\n fn = priority;\n priority = defaultPriority;\n }\n\n var stageHandler = Scheduler.wrapStageHandler(fn, visualType);\n stageHandler.__prio = priority;\n stageHandler.__raw = fn;\n targetList.push(stageHandler);\n return stageHandler;\n}\n/**\n * @param {string} name\n */\n\n\nfunction registerLoading(name, loadingFx) {\n loadingEffects[name] = loadingFx;\n}\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\n\n\nfunction extendComponentModel(opts\n/*, superClass*/\n) {\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 * @param {Object} opts\n * @param {string} [superClass]\n */\n\n\nfunction extendComponentView(opts\n/*, superClass*/\n) {\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 * @param {Object} opts\n * @param {string} [superClass]\n */\n\n\nfunction extendSeriesModel(opts\n/*, superClass*/\n) {\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 * @param {Object} opts\n * @param {string} [superClass]\n */\n\n\nfunction extendChartView(opts\n/*, superClass*/\n) {\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 * 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 */\n\n\nfunction setCanvasCreator(creator) {\n zrUtil.$override('createCanvas', creator);\n}\n/**\n * @param {string} mapName\n * @param {Array.|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 */\n\n\nfunction registerMap(mapName, geoJson, specialAreas) {\n mapDataStorage.registerMap(mapName, geoJson, specialAreas);\n}\n/**\n * @param {string} mapName\n * @return {Object}\n */\n\n\nfunction 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); // Default actions\n\nregisterAction({\n type: 'highlight',\n event: 'highlight',\n update: 'highlight'\n}, zrUtil.noop);\nregisterAction({\n type: 'downplay',\n event: 'downplay',\n update: 'downplay'\n}, zrUtil.noop); // Default theme\n\nregisterTheme('light', lightTheme);\nregisterTheme('dark', darkTheme); // For backward compatibility, where the namespace `dataTool` will\n// be mounted on `echarts` is the extension `dataTool` is imported.\n\nvar dataTool = {};\nexports.version = version;\nexports.dependencies = dependencies;\nexports.PRIORITY = PRIORITY;\nexports.init = init;\nexports.connect = connect;\nexports.disConnect = disConnect;\nexports.disconnect = disconnect;\nexports.dispose = dispose;\nexports.getInstanceByDom = getInstanceByDom;\nexports.getInstanceById = getInstanceById;\nexports.registerTheme = registerTheme;\nexports.registerPreprocessor = registerPreprocessor;\nexports.registerProcessor = registerProcessor;\nexports.registerPostUpdate = registerPostUpdate;\nexports.registerAction = registerAction;\nexports.registerCoordinateSystem = registerCoordinateSystem;\nexports.getCoordinateSystemDimensions = getCoordinateSystemDimensions;\nexports.registerLayout = registerLayout;\nexports.registerVisual = registerVisual;\nexports.registerLoading = registerLoading;\nexports.extendComponentModel = extendComponentModel;\nexports.extendComponentView = extendComponentView;\nexports.extendSeriesModel = extendSeriesModel;\nexports.extendChartView = extendChartView;\nexports.setCanvasCreator = setCanvasCreator;\nexports.registerMap = registerMap;\nexports.getMap = getMap;\nexports.dataTool = dataTool;\nvar ___ec_export = require(\"./export\");\n(function () {\n for (var key in ___ec_export) {\n if (___ec_export.hasOwnProperty(key)) {\n exports[key] = ___ec_export[key];\n }\n }\n})();","var _core = require(\"./core\");\n\nvar createElement = _core.createElement;\n\nvar PathProxy = require(\"../core/PathProxy\");\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\nvar matrix = require(\"../core/matrix\");\n\nvar textContain = require(\"../contain/text\");\n\nvar textHelper = require(\"../graphic/helper/text\");\n\nvar Text = require(\"../graphic/Text\");\n\n// TODO\n// 1. shadow\n// 2. Image: sx, sy, sw, sh\nvar CMD = PathProxy.CMD;\nvar arrayJoin = Array.prototype.join;\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;\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 } 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 ? style.textStrokeWidth : style.lineWidth;\n var strokeScale = !isText && style.strokeNoScale ? el.getLineScale() : 1;\n attr(svgEl, 'stroke-width', strokeWidth / strokeScale); // stroke then fill for text; fill then stroke for others\n\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\n if (lineDash) {\n attr(svgEl, 'stroke-dasharray', style.lineDash.join(','));\n attr(svgEl, 'stroke-dashoffset', mathRound(style.lineDashOffset || 0));\n } else {\n attr(svgEl, 'stroke-dasharray', '');\n } // PENDING\n\n\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 } else {\n attr(svgEl, 'stroke', NONE);\n }\n}\n/***************************************************\n * PATH\n **************************************************/\n\n\nfunction pathDataToString(path) {\n var str = [];\n var data = path.data;\n var dataLength = path.len();\n\n for (var i = 0; i < dataLength;) {\n var cmd = data[i++];\n var cmdStr = '';\n var nData = 0;\n\n switch (cmd) {\n case CMD.M:\n cmdStr = 'M';\n nData = 2;\n break;\n\n case CMD.L:\n cmdStr = 'L';\n nData = 2;\n break;\n\n case CMD.Q:\n cmdStr = 'Q';\n nData = 4;\n break;\n\n case CMD.C:\n cmdStr = 'C';\n nData = 6;\n break;\n\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 var dThetaPositive = Math.abs(dTheta);\n var isCircle = isAroundZero(dThetaPositive - PI2) || (clockwise ? dTheta >= PI2 : -dTheta >= PI2); // Mapping to 0~2PI\n\n var unifiedTheta = dTheta > 0 ? dTheta % PI2 : dTheta % PI2 + PI2;\n var large = false;\n\n if (isCircle) {\n large = true;\n } else if (isAroundZero(dThetaPositive)) {\n large = false;\n } else {\n large = unifiedTheta >= PI === !!clockwise;\n }\n\n var x0 = round4(cx + rx * mathCos(theta));\n var y0 = round4(cy + ry * mathSin(theta)); // 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\n if (isCircle) {\n if (clockwise) {\n dTheta = PI2 - 1e-4;\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)); // FIXME Ellipse\n\n str.push('A', round4(rx), round4(ry), mathRound(psi * degree), +large, +clockwise, x, y);\n break;\n\n case CMD.Z:\n cmdStr = 'Z';\n break;\n\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('M', x, y, 'L', x + w, y, 'L', x + w, y + h, 'L', x, y + h, 'L', x, y);\n break;\n }\n\n cmdStr && str.push(cmdStr);\n\n for (var j = 0; j < nData; j++) {\n // PENDING With scale\n str.push(round4(data[i++]));\n }\n }\n\n return str.join(' ');\n}\n\nvar svgPath = {};\n\nsvgPath.brush = function (el) {\n var style = el.style;\n var svgEl = el.__svgEl;\n\n if (!svgEl) {\n svgEl = createElement('path');\n el.__svgEl = svgEl;\n }\n\n if (!el.path) {\n el.createPathProxy();\n }\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 var pathStr = pathDataToString(path);\n\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 } else {\n removeOldTextNode(el);\n }\n};\n/***************************************************\n * IMAGE\n **************************************************/\n\n\nvar svgImage = {};\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\n if (!image) {\n return;\n }\n\n var x = style.x || 0;\n var y = style.y || 0;\n var dw = style.width;\n var dh = style.height;\n var svgEl = el.__svgEl;\n\n if (!svgEl) {\n svgEl = createElement('image');\n el.__svgEl = svgEl;\n }\n\n if (image !== el.__imageSrc) {\n attrXLink(svgEl, 'href', image); // Caching image src\n\n el.__imageSrc = image;\n }\n\n attr(svgEl, 'width', dw);\n attr(svgEl, 'height', dh);\n attr(svgEl, 'x', x);\n attr(svgEl, 'y', y);\n setTransform(svgEl, el.transform);\n\n if (style.text != null) {\n svgTextDrawRectText(el, el.getBoundingRect());\n } else {\n removeOldTextNode(el);\n }\n};\n/***************************************************\n * TEXT\n **************************************************/\n\n\nvar svgText = {};\n\nvar _tmpTextHostRect = new BoundingRect();\n\nvar _tmpTextBoxPos = {};\nvar _tmpTextTransform = [];\nvar TEXT_ALIGN_TO_ANCHRO = {\n left: 'start',\n right: 'end',\n center: 'middle',\n middle: 'middle'\n};\n/**\n * @param {module:zrender/Element} el\n * @param {Object|boolean} [hostRect] {x, y, width, height}\n * If set false, rect text is not used.\n */\n\nvar svgTextDrawRectText = function (el, hostRect) {\n var style = el.style;\n var elTransform = el.transform;\n var needTransformTextByHostEl = el instanceof Text || style.transformText;\n el.__dirty && textHelper.normalizeTextStyle(style, true);\n var text = style.text; // Convert to string\n\n text != null && (text += '');\n\n if (!textHelper.needDrawText(text, style)) {\n return;\n } // render empty text for svg if no text but need draw text.\n\n\n text == null && (text = ''); // Follow the setting in the canvas renderer, if not transform the\n // text, transform the hostRect, by which the text is located.\n\n if (!needTransformTextByHostEl && elTransform) {\n _tmpTextHostRect.copy(hostRect);\n\n _tmpTextHostRect.applyTransform(elTransform);\n\n hostRect = _tmpTextHostRect;\n }\n\n var textSvgEl = el.__textSvgEl;\n\n if (!textSvgEl) {\n textSvgEl = createElement('text');\n el.__textSvgEl = textSvgEl;\n } // style.font has been normalized by `normalizeTextStyle`.\n\n\n var textSvgElStyle = textSvgEl.style;\n var font = style.font || textContain.DEFAULT_FONT;\n var computedFont = textSvgEl.__computedFont;\n\n if (font !== textSvgEl.__styleFont) {\n textSvgElStyle.font = textSvgEl.__styleFont = font; // The computedFont might not be the orginal font if it is illegal font.\n\n computedFont = textSvgEl.__computedFont = textSvgElStyle.font;\n }\n\n var textPadding = style.textPadding;\n var textLineHeight = style.textLineHeight;\n var contentBlock = el.__textCotentBlock;\n\n if (!contentBlock || el.__dirtyText) {\n contentBlock = el.__textCotentBlock = textContain.parsePlainText(text, computedFont, textPadding, textLineHeight, style.truncate);\n }\n\n var outerHeight = contentBlock.outerHeight;\n var lineHeight = contentBlock.lineHeight;\n textHelper.getBoxPosition(_tmpTextBoxPos, el, style, hostRect);\n var baseX = _tmpTextBoxPos.baseX;\n var baseY = _tmpTextBoxPos.baseY;\n var textAlign = _tmpTextBoxPos.textAlign || 'left';\n var textVerticalAlign = _tmpTextBoxPos.textVerticalAlign;\n setTextTransform(textSvgEl, needTransformTextByHostEl, elTransform, style, hostRect, baseX, baseY);\n var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n var textX = baseX;\n var textY = boxY; // TODO needDrawBg\n\n if (textPadding) {\n textX = getTextXForPadding(baseX, textAlign, textPadding);\n textY += textPadding[0];\n } // `textBaseline` is set as 'middle'.\n\n\n textY += lineHeight / 2;\n bindStyle(textSvgEl, style, true, el); // FIXME\n // Add a \n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DrawCanvas.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DrawCanvas.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DrawCanvas.vue?vue&type=template&id=5170cb2a&scoped=true&\"\nimport script from \"./DrawCanvas.vue?vue&type=script&lang=js&\"\nexport * from \"./DrawCanvas.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DrawCanvas.vue?vue&type=style&index=0&id=5170cb2a&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5170cb2a\",\n null\n \n)\n\nexport default component.exports","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = echarts.extendComponentView({\n type: 'marker',\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 render: function (markerModel, ecModel, api) {\n var markerGroupMap = this.markerGroupMap;\n markerGroupMap.each(function (item) {\n item.__keep = false;\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 markerGroupMap.each(function (item) {\n !item.__keep && this.group.remove(item.group);\n }, this);\n },\n renderSeries: function () {}\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _clazz = require(\"./clazz\");\n\nvar parseClassType = _clazz.parseClassType;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar base = 0;\n/**\n * @public\n * @param {string} type\n * @return {string}\n */\n\nfunction 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 * @inner\n */\n\n\nfunction enableSubTypeDefaulter(entity) {\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\n if (!type) {\n var componentTypeMain = parseClassType(componentType).main;\n\n if (entity.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) {\n type = subTypeDefaulters[componentTypeMain](option);\n }\n }\n\n return type;\n };\n\n return entity;\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 */\n\n\nfunction enableTopologicalTravel(entity, dependencyGetter) {\n /**\n * @public\n * @param {Array.} targetNameList Target Component type list.\n * Can be ['aa', 'bb', 'aa.xx']\n * @param {Array.} 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 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\n if (isInTargetNameSet) {\n callback.call(context, currComponentType, currVertex.originalDeps.slice());\n delete targetNameSet[currComponentType];\n }\n\n zrUtil.each(currVertex.successor, isInTargetNameSet ? removeEdgeAndAdd : removeEdge);\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\n if (graph[succComponentType].entryCount === 0) {\n stack.push(succComponentType);\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\n\n function removeEdgeAndAdd(succComponentType) {\n targetNameSet[succComponentType] = true;\n removeEdge(succComponentType);\n }\n };\n /**\n * DepndencyGraph: {Object}\n * key: conponentType,\n * value: {\n * successor: [conponentTypes...],\n * originalDeps: [conponentTypes...],\n * entryCount: {number}\n * }\n */\n\n\n function makeDepndencyGraph(fullNameList) {\n var graph = {};\n var noEntryList = [];\n zrUtil.each(fullNameList, function (name) {\n var thisItem = createDependencyGraphItem(graph, name);\n var originalDeps = thisItem.originalDeps = dependencyGetter(name);\n var availableDeps = getAvailableDependencies(originalDeps, fullNameList);\n thisItem.entryCount = availableDeps.length;\n\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\n var thatItem = createDependencyGraphItem(graph, dependentName);\n\n if (zrUtil.indexOf(thatItem.successor, dependentName) < 0) {\n thatItem.successor.push(name);\n }\n });\n });\n return {\n graph: graph,\n noEntryList: noEntryList\n };\n }\n\n function createDependencyGraphItem(graph, name) {\n if (!graph[name]) {\n graph[name] = {\n predecessor: [],\n successor: []\n };\n }\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\nexports.getUID = getUID;\nexports.enableSubTypeDefaulter = enableSubTypeDefaulter;\nexports.enableTopologicalTravel = enableTopologicalTravel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar platform = ''; // Navigator not exists in node\n\nif (typeof navigator !== 'undefined') {\n platform = navigator.platform || '';\n}\n\nvar _default = {\n // backgroundColor: 'rgba(0,0,0,0)',\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: ['#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83', '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'],\n gradientColor: ['#f6efa6', '#d88273', '#bf444c'],\n // If xAxis and yAxis declared, grid is created by default.\n // grid: {},\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 // 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 animation: 'auto',\n animationDuration: 1000,\n animationDurationUpdate: 300,\n animationEasing: 'exponentialOut',\n animationEasingUpdate: 'cubicOut',\n animationThreshold: 2000,\n // Configuration for progressive/incremental rendering\n progressiveThreshold: 3000,\n progressive: 400,\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 .\n hoverLayerThreshold: 3000,\n // See: module:echarts/scale/Time\n useUTC: false\n};\nmodule.exports = _default;","var env = require(\"../../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// )\nvar shadowTemp = [['shadowBlur', 0], ['shadowColor', '#000'], ['shadowOffsetX', 0], ['shadowOffsetY', 0]];\n\nfunction _default(orignalBrush) {\n // version string can be: '11.0'\n return env.browser.ie && env.browser.version >= 11 ? 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 && (type === 'sector' && shape.startAngle === shape.endAngle || type === 'rect' && (!shape.width || !shape.height))) {\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\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 } : orignalBrush;\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar numberUtil = require(\"../util/number\");\n\nvar formatUtil = require(\"../util/format\");\n\nvar Scale = require(\"./Scale\");\n\nvar helper = require(\"./helper\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\nvar roundNumber = numberUtil.round;\n/**\n * @alias module:echarts/coord/scale/Interval\n * @constructor\n */\n\nvar IntervalScale = Scale.extend({\n type: 'interval',\n _interval: 0,\n _intervalPrecision: 2,\n setExtent: function (start, end) {\n var thisExtent = this._extent; //start,end may be a Number like '25',so...\n\n if (!isNaN(start)) {\n thisExtent[0] = parseFloat(start);\n }\n\n if (!isNaN(end)) {\n thisExtent[1] = parseFloat(end);\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]); // unionExtent may called by it's sub classes\n\n IntervalScale.prototype.setExtent.call(this, extent[0], extent[1]);\n },\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; // 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\n this._niceExtent = this._extent.slice();\n this._intervalPrecision = helper.getIntervalPrecision(interval);\n },\n\n /**\n * @param {boolean} [expandToNicedExtent=false] If expand the ticks to niced extent.\n * @return {Array.}\n */\n getTicks: function (expandToNicedExtent) {\n var interval = this._interval;\n var extent = this._extent;\n var niceTickExtent = this._niceExtent;\n var intervalPrecision = this._intervalPrecision;\n var ticks = []; // If interval is 0, return [];\n\n if (!interval) {\n return ticks;\n } // Consider this case: using dataZoom toolbox, zoom and zoom.\n\n\n var safeLimit = 10000;\n\n if (extent[0] < niceTickExtent[0]) {\n if (expandToNicedExtent) {\n ticks.push(roundNumber(niceTickExtent[0] - interval, intervalPrecision));\n } else {\n ticks.push(extent[0]);\n }\n }\n\n var tick = niceTickExtent[0];\n\n while (tick <= niceTickExtent[1]) {\n ticks.push(tick); // Avoid rounding error\n\n tick = roundNumber(tick + interval, intervalPrecision);\n\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\n if (ticks.length > safeLimit) {\n return [];\n }\n } // Consider this case: the last item of ticks is smaller\n // than niceTickExtent[1] and niceTickExtent[1] === extent[1].\n\n\n var lastNiceTick = ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1];\n\n if (extent[1] > lastNiceTick) {\n if (expandToNicedExtent) {\n ticks.push(roundNumber(lastNiceTick + interval, intervalPrecision));\n } else {\n ticks.push(extent[1]);\n }\n }\n\n return ticks;\n },\n\n /**\n * @param {number} [splitNumber=5]\n * @return {Array.>}\n */\n getMinorTicks: function (splitNumber) {\n var ticks = this.getTicks(true);\n var minorTicks = [];\n var extent = this.getExtent();\n\n for (var i = 1; i < ticks.length; i++) {\n var nextTick = ticks[i];\n var prevTick = ticks[i - 1];\n var count = 0;\n var minorTicksGroup = [];\n var interval = nextTick - prevTick;\n var minorInterval = interval / splitNumber;\n\n while (count < splitNumber - 1) {\n var minorTick = numberUtil.round(prevTick + (count + 1) * minorInterval); // For the first and last interval. The count may be less than splitNumber.\n\n if (minorTick > extent[0] && minorTick < extent[1]) {\n minorTicksGroup.push(minorTick);\n }\n\n count++;\n }\n\n minorTicks.push(minorTicksGroup);\n }\n\n return minorTicks;\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 } else if (precision === 'auto') {\n // Should be more precise then tick.\n precision = this._intervalPrecision;\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\n\n data = roundNumber(data, precision, true);\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\n if (!isFinite(span)) {\n return;\n } // User may set axis min 0 and data are all negative\n // FIXME If it needs to reverse ?\n\n\n if (span < 0) {\n span = -span;\n extent.reverse();\n }\n\n var result = helper.intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval);\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; // If extent start and end are same, expand them\n\n if (extent[0] === extent[1]) {\n if (extent[0] !== 0) {\n // Expand extent\n var expandSize = extent[0]; // 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\n if (!opt.fixMax) {\n extent[1] += expandSize / 2;\n extent[0] -= expandSize / 2;\n } else {\n extent[0] -= expandSize / 2;\n }\n } else {\n extent[1] = 1;\n }\n }\n\n var span = extent[1] - extent[0]; // If there are no data and extent are [Infinity, -Infinity]\n\n if (!isFinite(span)) {\n extent[0] = 0;\n extent[1] = 1;\n }\n\n this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); // var extent = this._extent;\n\n var interval = this._interval;\n\n if (!opt.fixMin) {\n extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval);\n }\n\n if (!opt.fixMax) {\n extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval);\n }\n }\n});\n/**\n * @return {module:echarts/scale/Time}\n */\n\nIntervalScale.create = function () {\n return new IntervalScale();\n};\n\nvar _default = IntervalScale;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar createHashMap = _util.createHashMap;\nvar retrieve = _util.retrieve;\nvar each = _util.each;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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// TODO\n// merge relevant logic to this file?\n// check: \"modelHelper\" of tooltip and \"BrushTargetManager\".\n\n/**\n * @class\n * 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 * // The index of the first category axis in `coordSysDims`.\n * // `null/undefined` means no category axis exists.\n * firstCategoryDimIndex: 1,\n * // To replace user specified encode.\n * }\n */\nfunction CoordSysInfo(coordSysName) {\n /**\n * @type {string}\n */\n this.coordSysName = coordSysName;\n /**\n * @type {Array.}\n */\n\n this.coordSysDims = [];\n /**\n * @type {module:zrender/core/util#HashMap}\n */\n\n this.axisMap = createHashMap();\n /**\n * @type {module:zrender/core/util#HashMap}\n */\n\n this.categoryAxisMap = createHashMap();\n /**\n * @type {number}\n */\n\n this.firstCategoryDimIndex = null;\n}\n/**\n * @return {module:model/referHelper#CoordSysInfo}\n */\n\n\nfunction getCoordSysInfoBySeries(seriesModel) {\n var coordSysName = seriesModel.get('coordinateSystem');\n var result = new CoordSysInfo(coordSysName);\n var fetch = fetchers[coordSysName];\n\n if (fetch) {\n fetch(seriesModel, result, result.axisMap, result.categoryAxisMap);\n return result;\n }\n}\n\nvar fetchers = {\n cartesian2d: function (seriesModel, result, axisMap, categoryAxisMap) {\n var xAxisModel = seriesModel.getReferringComponents('xAxis')[0];\n var yAxisModel = seriesModel.getReferringComponents('yAxis')[0];\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\n if (isCategory(yAxisModel)) {\n categoryAxisMap.set('y', yAxisModel);\n result.firstCategoryDimIndex == null & (result.firstCategoryDimIndex = 1);\n }\n },\n singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) {\n var singleAxisModel = seriesModel.getReferringComponents('singleAxis')[0];\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 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 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\n if (isCategory(angleAxisModel)) {\n categoryAxisMap.set('angle', angleAxisModel);\n result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);\n }\n },\n geo: function (seriesModel, result, axisMap, categoryAxisMap) {\n result.coordSysDims = ['lng', 'lat'];\n },\n parallel: function (seriesModel, result, axisMap, categoryAxisMap) {\n var ecModel = seriesModel.ecModel;\n var parallelModel = ecModel.getComponent('parallel', seriesModel.get('parallelIndex'));\n var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice();\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\nexports.getCoordSysInfoBySeries = getCoordSysInfoBySeries;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Scale = require(\"./Scale\");\n\nvar numberUtil = require(\"../util/number\");\n\nvar IntervalScale = require(\"./Interval\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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// Use some method of IntervalScale\nvar scaleProto = Scale.prototype;\nvar intervalScaleProto = IntervalScale.prototype;\nvar getPrecisionSafe = numberUtil.getPrecisionSafe;\nvar roundingErrorFix = numberUtil.round;\nvar mathFloor = Math.floor;\nvar mathCeil = Math.ceil;\nvar mathPow = Math.pow;\nvar mathLog = Math.log;\nvar LogScale = Scale.extend({\n type: 'log',\n base: 10,\n $constructor: function () {\n Scale.apply(this, arguments);\n this._originalScale = new IntervalScale();\n },\n\n /**\n * @param {boolean} [expandToNicedExtent=false] If expand the ticks to niced extent.\n * @return {Array.}\n */\n getTicks: function (expandToNicedExtent) {\n var originalScale = this._originalScale;\n var extent = this._extent;\n var originalExtent = originalScale.getExtent();\n return zrUtil.map(intervalScaleProto.getTicks.call(this, expandToNicedExtent), function (val) {\n var powVal = numberUtil.round(mathPow(this.base, val)); // Fix #4158\n\n powVal = val === extent[0] && originalScale.__fixMin ? fixRoundingError(powVal, originalExtent[0]) : powVal;\n powVal = val === extent[1] && originalScale.__fixMax ? fixRoundingError(powVal, originalExtent[1]) : powVal;\n return powVal;\n }, this);\n },\n\n /**\n * @param {number} splitNumber\n * @return {Array.>}\n */\n getMinorTicks: intervalScaleProto.getMinorTicks,\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]); // Fix #4158\n\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 return extent;\n },\n\n /**\n * @param {Array.} 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\n if (span === Infinity || span <= 0) {\n return;\n }\n\n var interval = numberUtil.quantity(span);\n var err = approxTickNum / span * interval; // Filter ticks to get closer to the desired count.\n\n if (err <= 0.5) {\n interval *= 10;\n } // Interval should be integer\n\n\n while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) {\n interval *= 10;\n }\n\n var niceExtent = [numberUtil.round(mathCeil(extent[0] / interval) * interval), numberUtil.round(mathFloor(extent[1] / interval) * interval)];\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 var originalScale = this._originalScale;\n originalScale.__fixMin = opt.fixMin;\n originalScale.__fixMax = opt.fixMax;\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\nvar _default = LogScale;\nmodule.exports = _default;","var Path = require(\"../Path\");\n\n/**\n * 圆弧\n * @module zrender/graphic/shape/Arc\n */\nvar _default = Path.extend({\n type: 'arc',\n shape: {\n cx: 0,\n cy: 0,\n r: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n clockwise: true\n },\n style: {\n stroke: '#000',\n fill: null\n },\n buildPath: function (ctx, shape) {\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 var unitX = Math.cos(startAngle);\n var unitY = Math.sin(startAngle);\n ctx.moveTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n }\n});\n\nmodule.exports = _default;","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAADqADAAQAAAABAAAAEAAAAABiIBAZAAABCUlEQVQoFe1QsUoDQRScuY0IVklawcYvsJeIoIVgaSt4ml/wUywElSvFwsZCv8BGEARBCxvTWISQYO+Nb0/f4a1BtHeb92ZnZve9AaYc5d2+8s5Au53lKXR1xZTQXnsbJQoJGcFXIFtjMbpJdQ2j/bQFlacCggtNMEaGVZ5M7vwu1tpoo20COrefZr4KKhExRAgrPBo9OFcZtdNdB8sLM806kVYb+wWh1ePx8Kl6zHbqoeSlpLlUnGIzDxBk5slzZkGc/cYUHxG0gDcexL5la/YJLUbwcbhvgvkagY+W76FjkNexr8NxQnn71nZdcmzjXbEYbzj2mnnz1/pv/CGx7+GI9w090cSf5DuwCE1Orhtp0wAAAABJRU5ErkJggg==\"","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"../component/radar\");\n\nrequire(\"./radar/RadarSeries\");\n\nrequire(\"./radar/RadarView\");\n\nvar dataColor = require(\"../visual/dataColor\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar radarLayout = require(\"./radar/radarLayout\");\n\nvar dataFilter = require(\"../processor/dataFilter\");\n\nvar backwardCompat = require(\"./radar/backwardCompat\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Must use radar component\necharts.registerVisual(dataColor('radar'));\necharts.registerVisual(visualSymbol('radar', 'circle'));\necharts.registerLayout(radarLayout);\necharts.registerProcessor(dataFilter('radar'));\necharts.registerPreprocessor(backwardCompat);","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar createHashMap = _util.createHashMap;\nvar isObject = _util.isObject;\nvar map = _util.map;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @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 * @readOnly\n * @type {Array.}\n */\n this.categories = opt.categories || [];\n /**\n * @private\n * @type {boolean}\n */\n\n this._needCollect = opt.needCollect;\n /**\n * @private\n * @type {boolean}\n */\n\n this._deduplication = opt.deduplication;\n /**\n * @private\n * @type {boolean}\n */\n\n this._map;\n}\n/**\n * @param {module:echarts/model/Model} axisModel\n * @return {module:echarts/data/OrdinalMeta}\n */\n\n\nOrdinalMeta.createByAxisModel = function (axisModel) {\n var option = axisModel.option;\n var data = option.data;\n var categories = data && map(data, getName);\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 * @param {string} category\n * @return {number} ordinal\n */\n\nproto.getOrdinal = function (category) {\n return getOrCreateMap(this).get(category);\n};\n/**\n * @param {*} category\n * @return {number} The ordinal. If not found, return NaN.\n */\n\n\nproto.parseAndCollect = function (category) {\n var index;\n var needCollect = this._needCollect; // 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\n if (typeof category !== 'string' && !needCollect) {\n return category;\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\n\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 } else {\n index = NaN;\n }\n }\n\n return index;\n}; // Consider big data, do not create map until needed.\n\n\nfunction getOrCreateMap(ordinalMeta) {\n return ordinalMeta._map || (ordinalMeta._map = createHashMap(ordinalMeta.categories));\n}\n\nfunction getName(obj) {\n if (isObject(obj) && obj.value != null) {\n return obj.value;\n } else {\n return obj + '';\n }\n}\n\nvar _default = OrdinalMeta;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar colorUtil = require(\"zrender/lib/tool/color\");\n\nvar List = require(\"../../data/List\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar markerHelper = require(\"./markerHelper\");\n\nvar MarkerView = require(\"./MarkerView\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO Better on polar\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; // FIXME make sure lt is less than rb\n\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 rbCoord[0] = retrieve(rbCoord[0], Infinity);\n rbCoord[1] = retrieve(rbCoord[1], Infinity); // Merge option into one\n\n var result = zrUtil.mergeAll([{}, lt, rb]);\n result.coord = [lt.coord, rb.coord];\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} // If a markArea has one dim\n\n\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\n if (coordSys.type === 'cartesian2d') {\n // In case\n // {\n // markArea: {\n // data: [{ yAxis: 2 }]\n // }\n // }\n if (fromCoord && toCoord && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))) {\n return true;\n }\n }\n\n return markerHelper.dataFilter(coordSys, {\n coord: fromCoord,\n x: item.x0,\n y: item.y0\n }) || markerHelper.dataFilter(coordSys, {\n coord: toCoord,\n x: item.x1,\n y: item.y1\n });\n} // dims can be ['x0', 'y0'], ['x1', 'y1'], ['x0', 'y1'], ['x1', 'y0']\n\n\nfunction getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var itemModel = data.getItemModel(idx);\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\n if (!isNaN(xPx) && !isNaN(yPx)) {\n point = [xPx, yPx];\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(data.getValues(dims, idx));\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\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\n if (isInifinity(x)) {\n point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === 'x0' ? 0 : 1]);\n } else if (isInifinity(y)) {\n point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === 'y0' ? 0 : 1]);\n }\n } // Use x, y if has any\n\n\n if (!isNaN(xPx)) {\n point[0] = xPx;\n }\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']];\nMarkerView.extend({\n type: 'markArea',\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 updateTransform: function (markAreaModel, ecModel, api) {\n ecModel.eachSeries(function (seriesModel) {\n var maModel = seriesModel.markAreaModel;\n\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 }); // Layout\n\n areaData.setItemLayout(idx, points);\n var el = areaData.getItemGraphicEl(idx);\n el.setShape('points', points);\n });\n }\n }, this);\n },\n renderSeries: function (seriesModel, maModel, ecModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var seriesId = seriesModel.id;\n var seriesData = seriesModel.getData();\n var areaGroupMap = this.markerGroupMap;\n var polygonGroup = areaGroupMap.get(seriesId) || areaGroupMap.set(seriesId, {\n group: new graphic.Group()\n });\n this.group.add(polygonGroup.group);\n polygonGroup.__keep = true;\n var areaData = createList(coordSys, seriesModel, maModel); // Line data for tooltip and formatter\n\n maModel.setData(areaData); // Update visual and layout of line\n\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 })); // Visual\n\n areaData.setItemVisual(idx, {\n color: seriesData.getVisual('color')\n });\n });\n areaData.diff(polygonGroup.__data).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 }).update(function (newIdx, oldIdx) {\n var polygon = polygonGroup.__data.getItemGraphicEl(oldIdx);\n\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 }).remove(function (idx) {\n var polygon = polygonGroup.__data.getItemGraphicEl(idx);\n\n polygonGroup.group.remove(polygon);\n }).execute();\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(zrUtil.defaults(itemModel.getModel('itemStyle').getItemStyle(), {\n fill: colorUtil.modifyAlpha(color, 0.4),\n stroke: color\n }));\n polygon.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n graphic.setLabelStyle(polygon.style, polygon.hoverStyle, labelModel, labelHoverModel, {\n labelFetcher: maModel,\n labelDataIndex: idx,\n defaultText: areaData.getName(idx) || '',\n isRectText: true,\n autoColor: color\n });\n graphic.setHoverStyle(polygon, {});\n polygon.dataModel = maModel;\n });\n polygonGroup.__data = areaData;\n polygonGroup.group.silent = maModel.get('silent') || seriesModel.get('silent');\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 */\n\nfunction createList(coordSys, seriesModel, maModel) {\n var coordDimsInfos;\n var areaData;\n var dims = ['x0', 'y0', 'x1', 'y1'];\n\n if (coordSys) {\n coordDimsInfos = zrUtil.map(coordSys && coordSys.dimensions, function (coordDim) {\n var data = seriesModel.getData();\n var info = data.getDimensionInfo(data.mapDimension(coordDim)) || {}; // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n\n return zrUtil.defaults({\n name: coordDim\n }, 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 } 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(markAreaTransform, seriesModel, coordSys, maModel));\n\n if (coordSys) {\n optData = zrUtil.filter(optData, zrUtil.curry(markAreaFilter, coordSys));\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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar featureManager = require(\"./featureManager\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar ToolboxModel = echarts.extendComponentModel({\n type: 'toolbox',\n layoutMode: {\n type: 'box',\n ignoreSize: true\n },\n optionUpdated: function () {\n ToolboxModel.superApply(this, 'optionUpdated', arguments);\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 defaultOption: {\n show: true,\n z: 6,\n zlevel: 0,\n orient: 'horizontal',\n left: 'right',\n top: 'top',\n // right\n // bottom\n backgroundColor: 'transparent',\n borderColor: '#ccc',\n borderRadius: 0,\n borderWidth: 0,\n padding: 5,\n itemSize: 15,\n itemGap: 8,\n showTitle: true,\n iconStyle: {\n borderColor: '#666',\n color: 'none'\n },\n emphasis: {\n iconStyle: {\n borderColor: '#3E98C5'\n }\n },\n // textStyle: {},\n // feature\n tooltip: {\n show: false\n }\n }\n});\nvar _default = ToolboxModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"./AxisModel\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Grid 是在有直角坐标系的时候必须要存在的\n// 所以这里也要被 Cartesian2D 依赖\nvar _default = ComponentModel.extend({\n type: 'grid',\n dependencies: ['xAxis', 'yAxis'],\n layoutMode: 'box',\n\n /**\n * @type {module:echarts/coord/cartesian/Grid}\n */\n coordinateSystem: null,\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\nmodule.exports = _default;","require(\"./graphic\");\n\nvar _zrender = require(\"../zrender\");\n\nvar registerPainter = _zrender.registerPainter;\n\nvar Painter = require(\"./Painter\");\n\nregisterPainter('svg', Painter);","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(ecModel) {\n var legendModels = ecModel.findComponents({\n mainType: 'legend'\n });\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\n return true;\n });\n }\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar VisualMapping = require(\"../../visual/VisualMapping\");\n\nvar zrColor = require(\"zrender/lib/tool/color\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar isArray = zrUtil.isArray;\nvar ITEM_STYLE_NORMAL = 'itemStyle';\nvar _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 travelTree(root, // Visual should calculate from tree root but not view root.\n {}, levelItemStyles, seriesItemStyleModel, seriesModel.getViewRoot().getAncestors(), seriesModel);\n }\n};\n\nfunction travelTree(node, designatedVisual, levelItemStyles, seriesItemStyleModel, viewRootAncestors, seriesModel) {\n var nodeModel = node.getModel();\n var nodeLayout = node.getLayout(); // Optimize\n\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(nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel); // calculate border color\n\n var borderColor = nodeItemStyleModel.get('borderColor');\n var borderColorSaturation = nodeItemStyleModel.get('borderColorSaturation');\n var thisNodeColor;\n\n if (borderColorSaturation != null) {\n // For performance, do not always execute 'calculateColor'.\n thisNodeColor = calculateColor(visuals, node);\n borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor);\n }\n\n node.setVisual('borderColor', borderColor);\n var viewChildren = node.viewChildren;\n\n if (!viewChildren || !viewChildren.length) {\n thisNodeColor = calculateColor(visuals, node); // Apply visual to this node.\n\n node.setVisual('color', thisNodeColor);\n } else {\n var mapping = buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren); // Designate visual to children.\n\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 || child === viewRootAncestors[child.depth]) {\n var childVisual = mapVisual(nodeModel, visuals, child, index, mapping, seriesModel);\n travelTree(child, childVisual, levelItemStyles, seriesItemStyleModel, viewRootAncestors, seriesModel);\n }\n });\n }\n}\n\nfunction buildVisuals(nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel) {\n var visuals = zrUtil.extend({}, designatedVisual);\n zrUtil.each(['color', 'colorAlpha', 'colorSaturation'], function (visualName) {\n // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel\n var val = nodeItemStyleModel.get(visualName, true); // Ignore parent\n\n val == null && levelItemStyle && (val = levelItemStyle[visualName]);\n val == null && (val = designatedVisual[visualName]);\n val == null && (val = seriesItemStyleModel.get(visualName));\n val != null && (visuals[visualName] = val);\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\n if (colorSaturation) {\n color = zrColor.modifyHSL(color, null, null, colorSaturation);\n }\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 ? zrColor.modifyHSL(thisNodeColor, null, null, borderColorSaturation) : null;\n}\n\nfunction getValueVisualDefine(visuals, name) {\n var value = visuals[name];\n\n if (value != null && value !== 'none') {\n return value;\n }\n}\n\nfunction buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren) {\n if (!viewChildren || !viewChildren.length) {\n return;\n }\n\n var rangeVisual = getRangeVisual(nodeModel, 'color') || visuals.color != null && visuals.color !== 'none' && (getRangeVisual(nodeModel, 'colorAlpha') || getRangeVisual(nodeModel, 'colorSaturation'));\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 var colorMappingBy = nodeModel.get('colorMappingBy');\n var opt = {\n type: rangeVisual.name,\n dataExtent: dataExtent,\n visual: rangeVisual.range\n };\n\n if (opt.type === 'color' && (colorMappingBy === 'index' || colorMappingBy === 'id')) {\n opt.mappingMethod = 'category';\n opt.loop = true; // categories is ordinal, so do not set opt.categories.\n } else {\n opt.mappingMethod = 'linear';\n }\n\n var mapping = new VisualMapping(opt);\n mapping.__drColorMappingBy = colorMappingBy;\n return mapping;\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.\n\n\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 ? {\n name: name,\n range: range\n } : 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' ? index : colorMappingBy === 'id' ? seriesModel.mapIdToIndex(child.getId()) : child.getValue(nodeModel.get('visualDimension'));\n childVisuals[mappingType] = mapping.mapValueToVisual(value);\n }\n\n return childVisuals;\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar _dataStackHelper = require(\"../../data/helper/dataStackHelper\");\n\nvar isDimensionStacked = _dataStackHelper.isDimensionStacked;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar 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} // 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// return precision;\n// }\n\n\nfunction markerTypeCalculatorWithExtent(mlType, data, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex) {\n var coordArr = [];\n var stacked = isDimensionStacked(data, targetDataDim\n /*, otherDataDim*/\n );\n var calcDataDim = stacked ? data.getCalculationInfo('stackResultDimension') : targetDataDim;\n var value = numCalculate(data, calcDataDim, mlType);\n var dataIndex = data.indicesOfNearest(calcDataDim, value)[0];\n coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex);\n coordArr[targetCoordIndex] = data.get(calcDataDim, dataIndex);\n var coordArrValue = data.get(targetDataDim, dataIndex); // Make it simple, do not visit all stacked value to count precision.\n\n var precision = numberUtil.getPrecision(data.get(targetDataDim, dataIndex));\n precision = Math.min(precision, 20);\n\n if (precision >= 0) {\n coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision);\n }\n\n return [coordArr, coordArrValue];\n}\n\nvar curry = zrUtil.curry; // TODO Specified percent\n\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 /**\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 * 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 */\n\nfunction dataTransform(seriesModel, item) {\n var data = seriesModel.getData();\n var coordSys = seriesModel.coordinateSystem; // 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 // parseFloat first because item.x and item.y can be percent string like '20%'\n\n if (item && !hasXAndY(item) && !zrUtil.isArray(item.coord) && coordSys) {\n var dims = coordSys.dimensions;\n var axisInfo = getAxisInfo(item, data, coordSys, seriesModel); // Clone the option\n // Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value\n\n item = zrUtil.clone(item);\n\n if (item.type && markerTypeCalculator[item.type] && axisInfo.baseAxis && axisInfo.valueAxis) {\n var otherCoordIndex = indexOf(dims, axisInfo.baseAxis.dim);\n var targetCoordIndex = indexOf(dims, axisInfo.valueAxis.dim);\n var coordInfo = markerTypeCalculator[item.type](data, axisInfo.baseDataDim, axisInfo.valueDataDim, otherCoordIndex, targetCoordIndex);\n item.coord = coordInfo[0]; // Force to use the value of calculated value.\n // let item use the value without stack.\n\n item.value = coordInfo[1];\n } else {\n // FIXME Only has one of xAxis and yAxis.\n var coord = [item.xAxis != null ? item.xAxis : item.radiusAxis, item.yAxis != null ? item.yAxis : item.angleAxis]; // Each coord support max, min, average\n\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\n item.coord = coord;\n }\n }\n\n return item;\n}\n\nfunction getAxisInfo(item, data, coordSys, seriesModel) {\n var ret = {};\n\n if (item.valueIndex != null || item.valueDim != null) {\n ret.valueDataDim = item.valueIndex != null ? 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 } 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\n for (var i = 0; i < dimensions.length; i++) {\n var dimItem = data.getDimensionInfo(dimensions[i]);\n\n if (dimItem.name === dataDim) {\n return dimItem.coordDim;\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 */\n\n\nfunction dataFilter(coordSys, item) {\n // Alwalys return true if there is no coordSys\n return coordSys && coordSys.containData && item.coord && !hasXOrY(item) ? coordSys.containData(item.coord) : true;\n}\n\nfunction dimValueGetter(item, dimName, dataIndex, dimIndex) {\n // x, y, radius, angle\n if (dimIndex < 2) {\n return item.coord && item.coord[dimIndex];\n }\n\n return item.value;\n}\n\nfunction 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 } else if (type === 'median') {\n return data.getMedian(valueDataDim);\n } else {\n // max & min\n return data.getDataExtent(valueDataDim, true)[type === 'max' ? 1 : 0];\n }\n}\n\nexports.dataTransform = dataTransform;\nexports.getAxisInfo = getAxisInfo;\nexports.dataFilter = dataFilter;\nexports.dimValueGetter = dimValueGetter;\nexports.numCalculate = numCalculate;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../Axis\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction RadiusAxis(scale, radiusExtent) {\n Axis.call(this, 'radius', scale, radiusExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = 'category';\n}\n\nRadiusAxis.prototype = {\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 dataToRadius: Axis.prototype.dataToCoord,\n radiusToData: Axis.prototype.coordToData\n};\nzrUtil.inherits(RadiusAxis, Axis);\nvar _default = RadiusAxis;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar Tree = require(\"../../data/Tree\");\n\nvar Model = require(\"../../model/Model\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\nvar addCommas = _format.addCommas;\n\nvar _treeHelper = require(\"../helper/treeHelper\");\n\nvar wrapTreePathInfo = _treeHelper.wrapTreePathInfo;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = SeriesModel.extend({\n type: 'series.treemap',\n layoutMode: 'box',\n dependencies: ['grid', 'polar'],\n preventUsingHoverLayer: true,\n\n /**\n * @type {module:echarts/data/Tree~Node}\n */\n _viewRoot: null,\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,\n // Can be null or false or true\n // (order by desc default, asc not supported yet (strange effect))\n clipWindow: 'origin',\n // Size of clipped window when zooming. 'origin' or 'fullscreen'\n squareRatio: 0.5 * (1 + Math.sqrt(5)),\n // golden ratio\n leafDepth: null,\n // Nodes on depth from root are regarded as leaves.\n // Count from zero (zero represents only view root).\n drillDownIcon: '▶',\n // Use html character temporarily because it is complicated\n // to align specialized icon. ▷▶❒❐▼✚\n zoomToNodeRatio: 0.32 * 0.32,\n // Be effective when using zoomToNode. Specify the proportion of the\n // target node area in the view area.\n roam: true,\n // true, false, 'scale' or 'zoom', 'move'.\n nodeClick: 'zoomToNode',\n // 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,\n // Width of empty node.\n itemStyle: {\n color: 'rgba(0,0,0,0.7)',\n //'#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',\n // Can be [5, '5%'] or position stirng like 'insideTopLeft', ...\n // formatter: null,\n color: '#fff',\n ellipsis: true // align\n // verticalAlign\n\n },\n upperLabel: {\n // 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,\n // Can be 'none' if not necessary.\n colorAlpha: null,\n // Can be 'none' if not necessary.\n colorSaturation: null,\n // 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 },\n emphasis: {\n upperLabel: {\n show: true,\n position: [0, '50%'],\n color: '#fff',\n ellipsis: true,\n verticalAlign: 'middle'\n }\n },\n visualDimension: 0,\n // Can be 0, 1, 2, 3.\n visualMin: null,\n visualMax: null,\n color: [],\n // + 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,\n // Array. Specify color alpha range of each level, like [0.2, 0.8]\n colorSaturation: null,\n // Array. Specify color saturation of each level, like [0.2, 0.5]\n colorMappingBy: 'index',\n // 'value' or 'index' or 'id'.\n visibleMin: 10,\n // 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,\n // 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 /**\n * @override\n */\n getInitialData: function (option, ecModel) {\n // Create a virtual root.\n var root = {\n name: option.name,\n children: option.data\n };\n completeTreeValue(root);\n var levels = option.levels || [];\n levels = option.levels = setDefault(levels, ecModel);\n var levelModels = zrUtil.map(levels || [], function (levelDefine) {\n return new Model(levelDefine, this, ecModel);\n }, this); // 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\n var tree = Tree.createTree(root, this, null, beforeLink);\n\n function beforeLink(nodeData) {\n nodeData.wrapMethod('getItemModel', function (model, idx) {\n var node = tree.getNodeByDataIndex(idx);\n var levelModel = levelModels[node.depth];\n levelModel && (model.parentModel = levelModel);\n return model;\n });\n }\n\n return tree.data;\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) ? addCommas(value[0]) : addCommas(value);\n var name = data.getName(dataIndex);\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 var node = this.getData().tree.getNodeByDataIndex(dataIndex);\n params.treePathInfo = wrapTreePathInfo(node, this);\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\n this._idIndexMapCount = 0;\n }\n\n var index = idIndexMap.get(id);\n\n if (index == null) {\n idIndexMap.set(id, index = this._idIndexMapCount++);\n }\n\n return index;\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 ? this._viewRoot = viewRoot : viewRoot = this._viewRoot;\n var root = this.getRawData().tree.root;\n\n if (!viewRoot || viewRoot !== root && !root.contains(viewRoot)) {\n this._viewRoot = root;\n }\n }\n});\n/**\n * @param {Object} dataNode\n */\n\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 zrUtil.each(dataNode.children, function (child) {\n completeTreeValue(child);\n var childValue = child.value;\n zrUtil.isArray(childValue) && (childValue = childValue[0]);\n sum += childValue;\n });\n var thisValue = dataNode.value;\n\n if (zrUtil.isArray(thisValue)) {\n thisValue = thisValue[0];\n }\n\n if (thisValue == null || isNaN(thisValue)) {\n thisValue = sum;\n } // Value should not less than 0.\n\n\n if (thisValue < 0) {\n thisValue = 0;\n }\n\n zrUtil.isArray(dataNode.value) ? dataNode.value[0] = thisValue : dataNode.value = thisValue;\n}\n/**\n * set default to level configuration\n */\n\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') || modelColor && modelColor !== 'none') {\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar ComponentView = require(\"../../view/Component\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = ComponentView.extend({\n type: 'timeline'\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"../coord/calendar/Calendar\");\n\nrequire(\"../coord/calendar/CalendarModel\");\n\nrequire(\"./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\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Avoid typo.\nvar SOURCE_FORMAT_ORIGINAL = 'original';\nvar SOURCE_FORMAT_ARRAY_ROWS = 'arrayRows';\nvar SOURCE_FORMAT_OBJECT_ROWS = 'objectRows';\nvar SOURCE_FORMAT_KEYED_COLUMNS = 'keyedColumns';\nvar SOURCE_FORMAT_UNKNOWN = 'unknown'; // ??? CHANGE A NAME\n\nvar SOURCE_FORMAT_TYPED_ARRAY = 'typedArray';\nvar SERIES_LAYOUT_BY_COLUMN = 'column';\nvar SERIES_LAYOUT_BY_ROW = 'row';\nexports.SOURCE_FORMAT_ORIGINAL = SOURCE_FORMAT_ORIGINAL;\nexports.SOURCE_FORMAT_ARRAY_ROWS = SOURCE_FORMAT_ARRAY_ROWS;\nexports.SOURCE_FORMAT_OBJECT_ROWS = SOURCE_FORMAT_OBJECT_ROWS;\nexports.SOURCE_FORMAT_KEYED_COLUMNS = SOURCE_FORMAT_KEYED_COLUMNS;\nexports.SOURCE_FORMAT_UNKNOWN = SOURCE_FORMAT_UNKNOWN;\nexports.SOURCE_FORMAT_TYPED_ARRAY = SOURCE_FORMAT_TYPED_ARRAY;\nexports.SERIES_LAYOUT_BY_COLUMN = SERIES_LAYOUT_BY_COLUMN;\nexports.SERIES_LAYOUT_BY_ROW = SERIES_LAYOUT_BY_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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(option) {\n // Save geoCoord\n var mapSeries = [];\n zrUtil.each(option.series, function (seriesOpt) {\n if (seriesOpt && seriesOpt.type === 'map') {\n mapSeries.push(seriesOpt);\n seriesOpt.map = seriesOpt.map || seriesOpt.mapType; // Put x, y, width, height, x2, y2 in the top level\n\n zrUtil.defaults(seriesOpt, seriesOpt.mapLocation);\n }\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar numberUtil = require(\"../util/number\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\nvar roundNumber = numberUtil.round;\n/**\n * @param {Array.} 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 */\n\nfunction intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) {\n var result = {};\n var span = extent[1] - extent[0];\n var interval = result.interval = numberUtil.nice(span / splitNumber, true);\n\n if (minInterval != null && interval < minInterval) {\n interval = result.interval = minInterval;\n }\n\n if (maxInterval != null && interval > maxInterval) {\n interval = result.interval = maxInterval;\n } // Tow more digital for tick.\n\n\n var precision = result.intervalPrecision = getIntervalPrecision(interval); // Niced extent inside original extent\n\n var niceTickExtent = result.niceTickExtent = [roundNumber(Math.ceil(extent[0] / interval) * interval, precision), roundNumber(Math.floor(extent[1] / interval) * interval, precision)];\n fixExtent(niceTickExtent, extent);\n return result;\n}\n/**\n * @param {number} interval\n * @return {number} interval precision\n */\n\n\nfunction 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} // In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent.\n\n\nfunction 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\n if (niceTickExtent[0] > niceTickExtent[1]) {\n niceTickExtent[0] = niceTickExtent[1];\n }\n}\n\nexports.intervalScaleNiceTicks = intervalScaleNiceTicks;\nexports.getIntervalPrecision = getIntervalPrecision;\nexports.fixExtent = fixExtent;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _barGrid = require(\"../layout/barGrid\");\n\nvar layout = _barGrid.layout;\nvar largeLayout = _barGrid.largeLayout;\n\nrequire(\"../coord/cartesian/Grid\");\n\nrequire(\"./bar/BarSeries\");\n\nrequire(\"./bar/BarView\");\n\nrequire(\"../component/gridSimple\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// In case developer forget to include grid component\necharts.registerLayout(echarts.PRIORITY.VISUAL.LAYOUT, zrUtil.curry(layout, 'bar')); // 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`.\n\necharts.registerLayout(echarts.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, largeLayout);\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\nvar vec2 = require(\"zrender/lib/core/vector\");\n\nvar _graphHelper = require(\"./graphHelper\");\n\nvar getSymbolSize = _graphHelper.getSymbolSize;\nvar getNodeGlobalScale = _graphHelper.getNodeGlobalScale;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar PI = Math.PI;\nvar _symbolRadiansHalf = [];\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 */\n\nfunction circularLayout(seriesModel, basedOn) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.type !== 'view') {\n return;\n }\n\n var rect = coordSys.getBoundingRect();\n var nodeData = seriesModel.getData();\n var graph = nodeData.graph;\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 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\n if (+curveness) {\n curveness *= 3;\n cp1 = [cx * curveness + x12 * (1 - curveness), cy * curveness + y12 * (1 - curveness)];\n }\n\n edge.setLayout([p1, p2, cp1]);\n });\n}\n\nvar _layoutNodesBasedOn = {\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 graph.eachNode(function (node) {\n var value = node.getValue('value');\n var radianHalf = unitAngle * (sum ? value : 1) / 2;\n angle += radianHalf;\n node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]);\n angle += radianHalf;\n });\n },\n symbolSize: function (seriesModel, coordSys, graph, nodeData, r, cx, cy, count) {\n var sumRadian = 0;\n _symbolRadiansHalf.length = count;\n var nodeScale = getNodeGlobalScale(seriesModel);\n graph.eachNode(function (node) {\n var symbolSize = getSymbolSize(node); // Normally this case will not happen, but we still add\n // some the defensive code (2px is an arbitrary value).\n\n isNaN(symbolSize) && (symbolSize = 2);\n symbolSize < 0 && (symbolSize = 0);\n symbolSize *= nodeScale;\n var symbolRadianHalf = Math.asin(symbolSize / 2 / r); // when `symbolSize / 2` is bigger than `r`.\n\n isNaN(symbolRadianHalf) && (symbolRadianHalf = PI / 2);\n _symbolRadiansHalf[node.dataIndex] = symbolRadianHalf;\n sumRadian += symbolRadianHalf * 2;\n });\n var halfRemainRadian = (2 * PI - sumRadian) / count / 2;\n var angle = 0;\n graph.eachNode(function (node) {\n var radianHalf = halfRemainRadian + _symbolRadiansHalf[node.dataIndex];\n angle += radianHalf;\n node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]);\n angle += radianHalf;\n });\n }\n};\nexports.circularLayout = circularLayout;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./marker/MarkLineModel\");\n\nrequire(\"./marker/MarkLineView\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerPreprocessor(function (opt) {\n // Make sure markLine component is enabled\n opt.markLine = opt.markLine || {};\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 */\nfunction containStroke(x0, y0, x1, y1, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth;\n var _a = 0;\n var _b = x0; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l || y < y0 - _l && y < y1 - _l || x > x0 + _l && x > x1 + _l || x < x0 - _l && x < x1 - _l) {\n return false;\n }\n\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n } else {\n return Math.abs(x - x0) <= _l / 2;\n }\n\n var tmp = _a * x - y + _b;\n\n var _s = tmp * tmp / (_a * _a + 1);\n\n return _s <= _l / 2 * _l / 2;\n}\n\nexports.containStroke = containStroke;","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MemberAnalysis.vue?vue&type=style&index=0&id=ec29c824&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MemberAnalysis.vue?vue&type=style&index=0&id=ec29c824&lang=less&scoped=true&\"","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\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 echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar SymbolDraw = require(\"../helper/SymbolDraw\");\n\nvar LineDraw = require(\"../helper/LineDraw\");\n\nvar RoamController = require(\"../../component/helper/RoamController\");\n\nvar roamHelper = require(\"../../component/helper/roamHelper\");\n\nvar _cursorHelper = require(\"../../component/helper/cursorHelper\");\n\nvar onIrrelevantElement = _cursorHelper.onIrrelevantElement;\n\nvar graphic = require(\"../../util/graphic\");\n\nvar adjustEdge = require(\"./adjustEdge\");\n\nvar _graphHelper = require(\"./graphHelper\");\n\nvar getNodeGlobalScale = _graphHelper.getNodeGlobalScale;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar FOCUS_ADJACENCY = '__focusNodeAdjacency';\nvar UNFOCUS_ADJACENCY = '__unfocusNodeAdjacency';\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\n if (opct == null || opacityRatio != null) {\n opct = opacity;\n }\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(); // Should go back to normal opacity first, consider hoverLayer,\n // where current state is copied to elMirror, and support\n // emphasis opacity here.\n\n el.traverse(function (child) {\n !child.isGroup && child.setStyle('opacity', opacity);\n });\n el.highlight && el.highlight();\n}\n\nvar _default = echarts.extendChartView({\n type: 'graph',\n init: function (ecModel, api) {\n var symbolDraw = new SymbolDraw();\n var lineDraw = new LineDraw();\n var group = this.group;\n this._controller = new RoamController(api.getZr());\n this._controllerHost = {\n target: group\n };\n group.add(symbolDraw.group);\n group.add(lineDraw.group);\n this._symbolDraw = symbolDraw;\n this._lineDraw = lineDraw;\n this._firstRender = true;\n },\n render: function (seriesModel, ecModel, api) {\n var graphView = this;\n var coordSys = seriesModel.coordinateSystem;\n this._model = seriesModel;\n var symbolDraw = this._symbolDraw;\n var lineDraw = this._lineDraw;\n var group = this.group;\n\n if (coordSys.type === 'view') {\n var groupNewProp = {\n position: coordSys.position,\n scale: coordSys.scale\n };\n\n if (this._firstRender) {\n group.attr(groupNewProp);\n } else {\n graphic.updateProps(group, groupNewProp, seriesModel);\n }\n } // Fix edge contact point with node\n\n\n adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));\n var data = seriesModel.getData();\n symbolDraw.updateData(data);\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\n if (forceLayout) {\n this._startForceLayoutIteration(forceLayout, layoutAnimation);\n }\n\n data.eachItemGraphicEl(function (el, idx) {\n var itemModel = data.getItemModel(idx); // Update draggable\n\n el.off('drag').off('dragend');\n var draggable = itemModel.get('draggable');\n\n if (draggable) {\n el.on('drag', function () {\n if (forceLayout) {\n forceLayout.warmUp();\n !this._layouting && this._startForceLayoutIteration(forceLayout, layoutAnimation);\n forceLayout.setFixed(idx); // Write position back to layout\n\n data.setItemLayout(idx, el.position);\n }\n }, this).on('dragend', function () {\n if (forceLayout) {\n forceLayout.setUnfixed(idx);\n }\n }, this);\n }\n\n el.setDraggable(draggable && forceLayout);\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 graphView._clearTimer();\n\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 graphView._dispatchUnfocus(api);\n });\n }\n }, this);\n data.graph.eachEdge(function (edge) {\n var el = edge.getGraphicEl();\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 graphView._clearTimer();\n\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 graphView._dispatchUnfocus(api);\n });\n }\n });\n var circularRotateLabel = seriesModel.get('layout') === 'circular' && 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\n if (circularRotateLabel) {\n var pos = data.getItemLayout(idx);\n var rad = Math.atan2(pos[1] - cy, pos[0] - cx);\n\n if (rad < 0) {\n rad = Math.PI * 2 + rad;\n }\n\n var isLeft = pos[0] < cx;\n\n if (isLeft) {\n rad = rad - Math.PI;\n }\n\n var textPosition = isLeft ? 'left' : 'right';\n graphic.modifyLabelStyle(symbolPath, {\n textRotation: -rad,\n textPosition: textPosition,\n textOrigin: 'center'\n }, {\n textPosition: textPosition\n });\n } else {\n graphic.modifyLabelStyle(symbolPath, {\n textRotation: labelRotate *= Math.PI / 180\n });\n }\n });\n this._firstRender = false;\n },\n dispose: function () {\n this._controller && this._controller.dispose();\n this._controllerHost = {};\n\n this._clearTimer();\n },\n _dispatchUnfocus: function (api, opt) {\n var self = this;\n\n this._clearTimer();\n\n this._unfocusDelayTimer = setTimeout(function () {\n self._unfocusDelayTimer = null;\n api.dispatchAction({\n type: 'unfocusNodeAdjacency',\n seriesId: self._model.id\n });\n }, 500);\n },\n _clearTimer: function () {\n if (this._unfocusDelayTimer) {\n clearTimeout(this._unfocusDelayTimer);\n this._unfocusDelayTimer = null;\n }\n },\n focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var graph = data.graph;\n var dataIndex = payload.dataIndex;\n var edgeDataIndex = payload.edgeDataIndex;\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\n fadeInItem(adjacentEdge, lineOpacityPath);\n fadeInItem(adjacentEdge.node1, nodeOpacityPath);\n fadeInItem(adjacentEdge.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 unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n var graph = seriesModel.getData().graph;\n graph.eachNode(function (node) {\n fadeOutItem(node, nodeOpacityPath);\n });\n graph.eachEdge(function (edge) {\n fadeOutItem(edge, lineOpacityPath);\n });\n },\n _startForceLayoutIteration: function (forceLayout, layoutAnimation) {\n var self = this;\n\n (function step() {\n forceLayout.step(function (stopped) {\n self.updateLayout(self._model);\n (self._layouting = !stopped) && (layoutAnimation ? self._layoutTimeout = setTimeout(step, 16) : step());\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 controller.setPointerChecker(function (e, x, y) {\n var rect = group.getBoundingRect();\n rect.applyTransform(group.transform);\n return rect.contain(x, y) && !onIrrelevantElement(e, api, seriesModel);\n });\n\n if (seriesModel.coordinateSystem.type !== 'view') {\n controller.disable();\n return;\n }\n\n controller.enable(seriesModel.get('roam'));\n controllerHost.zoomLimit = seriesModel.get('scaleLimit');\n controllerHost.zoom = seriesModel.coordinateSystem.getZoom();\n controller.off('pan').off('zoom').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 }).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\n this._updateNodeAndLinkScale();\n\n adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));\n\n this._lineDraw.updateLayout();\n }, this);\n },\n _updateNodeAndLinkScale: function () {\n var seriesModel = this._model;\n var data = seriesModel.getData();\n var nodeScale = getNodeGlobalScale(seriesModel);\n var invScale = [nodeScale, nodeScale];\n data.eachItemGraphicEl(function (el, idx) {\n el.attr('scale', invScale);\n });\n },\n updateLayout: function (seriesModel) {\n adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));\n\n this._symbolDraw.updateLayout();\n\n this._lineDraw.updateLayout();\n },\n remove: function (ecModel, api) {\n this._symbolDraw && this._symbolDraw.remove();\n this._lineDraw && this._lineDraw.remove();\n }\n});\n\nmodule.exports = _default;","module.exports = __webpack_public_path__ + \"img/material_orange.c8fe4570.png\";","var vec2 = require(\"./vector\");\n\nvar matrix = require(\"./matrix\");\n\n/**\n * @module echarts/core/BoundingRect\n */\nvar v2ApplyTransform = vec2.applyTransform;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\n/**\n * @alias module:echarts/core/BoundingRect\n */\n\nfunction BoundingRect(x, y, width, height) {\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n /**\n * @type {number}\n */\n\n\n this.x = x;\n /**\n * @type {number}\n */\n\n this.y = y;\n /**\n * @type {number}\n */\n\n this.width = width;\n /**\n * @type {number}\n */\n\n this.height = height;\n}\n\nBoundingRect.prototype = {\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 this.width = mathMax(other.x + other.width, this.x + this.width) - x;\n this.height = mathMax(other.y + other.height, this.y + this.height) - y;\n this.x = x;\n this.y = y;\n },\n\n /**\n * @param {Array.} 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\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 v2ApplyTransform(lt, lt, m);\n v2ApplyTransform(rb, rb, m);\n v2ApplyTransform(lb, lb, m);\n v2ApplyTransform(rt, rt, m);\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.}\n */\n calculateTransform: function (b) {\n var a = this;\n var sx = b.width / a.width;\n var sy = b.height / a.height;\n var m = matrix.create(); // 矩阵右乘\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 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 var bx0 = b.x;\n var bx1 = b.x + b.width;\n var by0 = b.y;\n var by1 = b.y + b.height;\n return !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n },\n contain: function (x, y) {\n var rect = this;\n return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && 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 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 * @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 */\n\nBoundingRect.create = function (rect) {\n return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n};\n\nvar _default = BoundingRect;\nmodule.exports = _default;","var _default = typeof window !== 'undefined' && (window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809\nwindow.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window) || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame) || function (func) {\n setTimeout(func, 16);\n};\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar createHashMap = _util.createHashMap;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\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).\nfunction _default(seriesType) {\n return {\n getTargetSeries: function (ecModel) {\n // Pie and funnel may use diferrent scope\n var paletteScope = {};\n var seiresModelMap = createHashMap();\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n seriesModel.__paletteScope = paletteScope;\n seiresModelMap.set(seriesModel.uid, seriesModel);\n });\n return seiresModelMap;\n },\n reset: function (seriesModel, ecModel) {\n var dataAll = seriesModel.getRawData();\n var idxMap = {};\n var data = seriesModel.getData();\n data.each(function (idx) {\n var rawIdx = data.getRawIndex(idx);\n idxMap[rawIdx] = idx;\n });\n dataAll.each(function (rawIdx) {\n var filteredIdx = idxMap[rawIdx]; // If series.itemStyle.normal.color is a function. itemVisual may be encoded\n\n var singleDataColor = filteredIdx != null && data.getItemVisual(filteredIdx, 'color', true);\n var singleDataBorderColor = filteredIdx != null && data.getItemVisual(filteredIdx, 'borderColor', true);\n var itemModel;\n\n if (!singleDataColor || !singleDataBorderColor) {\n // FIXME Performance\n itemModel = dataAll.getItemModel(rawIdx);\n }\n\n if (!singleDataColor) {\n var color = itemModel.get('itemStyle.color') || seriesModel.getColorFromPalette(dataAll.getName(rawIdx) || rawIdx + '', seriesModel.__paletteScope, dataAll.count()); // Data is not filtered\n\n if (filteredIdx != null) {\n data.setItemVisual(filteredIdx, 'color', color);\n }\n }\n\n if (!singleDataBorderColor) {\n var borderColor = itemModel.get('itemStyle.borderColor'); // Data is not filtered\n\n if (filteredIdx != null) {\n data.setItemVisual(filteredIdx, 'borderColor', borderColor);\n }\n }\n });\n }\n };\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../util/graphic\");\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar PI = Math.PI;\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 */\n\nfunction _default(api, opts) {\n opts = opts || {};\n zrUtil.defaults(opts, {\n text: 'loading',\n textColor: '#000',\n fontSize: '12px',\n maskColor: 'rgba(255, 255, 255, 0.8)',\n showSpinner: true,\n color: '#c23531',\n spinnerRadius: 10,\n lineWidth: 5,\n zlevel: 0\n });\n var group = new graphic.Group();\n var mask = new graphic.Rect({\n style: {\n fill: opts.maskColor\n },\n zlevel: opts.zlevel,\n z: 10000\n });\n group.add(mask);\n var font = opts.fontSize + ' sans-serif';\n var labelRect = new graphic.Rect({\n style: {\n fill: 'none',\n text: opts.text,\n font: font,\n textPosition: 'right',\n textDistance: 10,\n textFill: opts.textColor\n },\n zlevel: opts.zlevel,\n z: 10001\n });\n group.add(labelRect);\n\n if (opts.showSpinner) {\n var arc = new graphic.Arc({\n shape: {\n startAngle: -PI / 2,\n endAngle: -PI / 2 + 0.1,\n r: opts.spinnerRadius\n },\n style: {\n stroke: opts.color,\n lineCap: 'round',\n lineWidth: opts.lineWidth\n },\n zlevel: opts.zlevel,\n z: 10001\n });\n arc.animateShape(true).when(1000, {\n endAngle: PI * 3 / 2\n }).start('circularInOut');\n arc.animateShape(true).when(1000, {\n startAngle: PI * 3 / 2\n }).delay(300).start('circularInOut');\n group.add(arc);\n } // Inject resize\n\n\n group.resize = function () {\n var textWidth = textContain.getWidth(opts.text, font);\n var r = opts.showSpinner ? opts.spinnerRadius : 0; // cx = (containerWidth - arcDiameter - textDistance - textWidth) / 2\n // textDistance needs to be calculated when both animation and text exist\n\n var cx = (api.getWidth() - r * 2 - (opts.showSpinner && textWidth ? 10 : 0) - textWidth) / 2 // only show the text\n - (opts.showSpinner ? 0 : textWidth / 2);\n var cy = api.getHeight() / 2;\n opts.showSpinner && arc.setShape({\n cx: cx,\n cy: cy\n });\n labelRect.setShape({\n x: cx - r,\n y: cy - r,\n width: r * 2,\n height: r * 2\n });\n mask.setShape({\n x: 0,\n y: 0,\n width: api.getWidth(),\n height: api.getHeight()\n });\n };\n\n group.resize();\n return group;\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar makeStyleMapper = require(\"./makeStyleMapper\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar getAreaStyle = makeStyleMapper([['fill', 'color'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['opacity'], ['shadowColor']]);\nvar _default = {\n getAreaStyle: function (excludes, includes) {\n return getAreaStyle(this, excludes, includes);\n }\n};\nmodule.exports = _default;","var _vector = require(\"../../core/vector\");\n\nvar v2Min = _vector.min;\nvar v2Max = _vector.max;\nvar v2Scale = _vector.scale;\nvar v2Distance = _vector.distance;\nvar v2Add = _vector.add;\nvar v2Clone = _vector.clone;\nvar v2Sub = _vector.sub;\n\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\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 */\nfunction _default(points, smooth, isLoop, constraint) {\n var cps = [];\n var v = [];\n var v1 = [];\n var v2 = [];\n var prevPoint;\n var nextPoint;\n var min;\n var max;\n\n if (constraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n\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\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 } else {\n if (i === 0 || i === len - 1) {\n cps.push(v2Clone(points[i]));\n continue;\n } else {\n prevPoint = points[i - 1];\n nextPoint = points[i + 1];\n }\n }\n\n v2Sub(v, nextPoint, prevPoint); // use degree to scale the handle length\n\n v2Scale(v, v, smooth);\n var d0 = v2Distance(point, prevPoint);\n var d1 = v2Distance(point, nextPoint);\n var sum = d0 + d1;\n\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\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\n cps.push(cp0);\n cps.push(cp1);\n }\n\n if (isLoop) {\n cps.push(cps.shift());\n }\n\n return cps;\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar MAX_SAFE_INTEGER = _number.MAX_SAFE_INTEGER;\n\nvar layout = require(\"../../util/layout\");\n\nvar helper = require(\"../helper/treeHelper\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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* ).\n*/\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar retrieveValue = zrUtil.retrieve;\nvar each = zrUtil.each;\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 * @public\n */\n\nvar _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 var layoutInfo = layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n var size = seriesOption.size || []; // Compatible with ec2.\n\n var containerWidth = parsePercent(retrieveValue(layoutInfo.width, size[0]), ecWidth);\n var containerHeight = parsePercent(retrieveValue(layoutInfo.height, size[1]), ecHeight); // Fetch payload info.\n\n var payloadType = payload && payload.type;\n var types = ['treemapZoomToNode', 'treemapRootToNode'];\n var targetInfo = helper.retrieveTargetInfo(payload, types, seriesModel);\n var rootRect = payloadType === 'treemapRender' || payloadType === 'treemapMove' ? payload.rootRect : null;\n var viewRoot = seriesModel.getViewRoot();\n var viewAbovePath = helper.getPathToRoot(viewRoot);\n\n if (payloadType !== 'treemapMove') {\n var rootSize = payloadType === 'treemapZoomToNode' ? estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) : rootRect ? [rootRect.width, rootRect.height] : [containerWidth, containerHeight];\n var sort = seriesOption.sort;\n\n if (sort && sort !== 'asc' && sort !== 'desc') {\n sort = 'desc';\n }\n\n var options = {\n squareRatio: seriesOption.squareRatio,\n sort: sort,\n leafDepth: seriesOption.leafDepth\n }; // layout should be cleared because using updateView but not update.\n\n viewRoot.hostTree.clearLayouts(); // 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,\n y: 0,\n width: rootSize[0],\n height: rootSize[1],\n area: rootSize[0] * rootSize[1]\n };\n viewRoot.setLayout(viewRootLayout);\n squarify(viewRoot, options, false, 0); // Supplement layout.\n\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],\n borderWidth: 0,\n upperHeight: 0\n }, viewRootLayout));\n });\n }\n\n var treeRoot = seriesModel.getData().tree.root;\n treeRoot.setLayout(calculateRootPosition(layoutInfo, rootRect, targetInfo), true);\n seriesModel.setLayoutInfo(layoutInfo); // FIXME\n // 现在没有clip功能,暂时取ec高宽。\n\n prunning(treeRoot, // Transform to base element coordinate system.\n new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight), viewAbovePath, viewRoot, 0);\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 * .\n * The implementation of this algorithm was originally copied from \"d3.js\"\n * \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 */\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; // Considering border and gap\n\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 node.setLayout({\n borderWidth: borderWidth,\n upperHeight: upperHeight,\n upperLabelHeight: upperLabelHeight\n }, true);\n width = mathMax(width - 2 * layoutOffset, 0);\n height = mathMax(height - layoutOffset - layoutOffsetUpper, 0);\n var totalArea = width * height;\n var viewChildren = initChildren(node, nodeModel, totalArea, options, hideChildren, depth);\n\n if (!viewChildren.length) {\n return;\n }\n\n var rect = {\n x: layoutOffset,\n y: layoutOffsetUpper,\n width: width,\n height: height\n };\n var rowFixedLength = mathMin(width, height);\n var best = Infinity; // the best row score so far\n\n var row = [];\n row.area = 0;\n\n for (var i = 0, len = viewChildren.length; i < len;) {\n var child = viewChildren[i];\n row.push(child);\n row.area += child.getLayout().area;\n var score = worst(row, rowFixedLength, options.squareRatio); // continue with this orientation\n\n if (score <= best) {\n i++;\n best = score;\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\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 * Set area to each child, and calculate data extent for visual coding.\n */\n\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 var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth; // leafDepth has higher priority.\n\n if (hideChildren && !overLeafDepth) {\n return node.viewChildren = [];\n } // Sort children, order by desc.\n\n\n viewChildren = zrUtil.filter(viewChildren, function (child) {\n return !child.isRemoved();\n });\n sort(viewChildren, orderBy);\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 } // Set area to each child.\n\n\n for (var i = 0, len = viewChildren.length; i < len; i++) {\n var area = viewChildren[i].getValue() / info.sum * totalArea; // Do not use setLayout({...}, true), because it is needed to clear last layout.\n\n viewChildren[i].setLayout({\n area: area\n });\n }\n\n if (overLeafDepth) {\n viewChildren.length && node.setLayout({\n isLeafRoot: true\n }, true);\n viewChildren.length = 0;\n }\n\n node.viewChildren = viewChildren;\n node.setLayout({\n dataExtent: info.dataExtent\n }, true);\n return viewChildren;\n}\n/**\n * Consider 'visibleMin'. Modify viewChildren and get new sum.\n */\n\n\nfunction filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) {\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; // Always travel from little value to big value.\n\n for (var i = len - 1; i >= 0; i--) {\n var value = orderedChildren[orderBy === 'asc' ? len - i - 1 : i].getValue();\n\n if (value / sum * totalArea < visibleMin) {\n deletePoint = i;\n sum -= value;\n }\n }\n\n orderBy === 'asc' ? orderedChildren.splice(0, len - deletePoint) : orderedChildren.splice(deletePoint, len - deletePoint);\n return sum;\n}\n/**\n * Sort\n */\n\n\nfunction sort(viewChildren, orderBy) {\n if (orderBy) {\n viewChildren.sort(function (a, b) {\n var diff = orderBy === 'asc' ? a.getValue() - b.getValue() : b.getValue() - a.getValue();\n return diff === 0 ? orderBy === 'asc' ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex : diff;\n });\n }\n\n return viewChildren;\n}\n/**\n * Statistic\n */\n\n\nfunction statistic(nodeModel, children, orderBy) {\n // Calculate sum.\n var sum = 0;\n\n for (var i = 0, len = children.length; i < len; i++) {\n sum += children[i].getValue();\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\n var dimension = nodeModel.get('visualDimension');\n var dataExtent; // The same as area dimension.\n\n if (!children || !children.length) {\n dataExtent = [NaN, NaN];\n } else if (dimension === 'value' && orderBy) {\n dataExtent = [children[children.length - 1].getValue(), children[0].getValue()];\n orderBy === 'asc' && dataExtent.reverse();\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 {\n sum: sum,\n dataExtent: dataExtent\n };\n}\n/**\n * Computes the score for the specified row,\n * as the worst aspect ratio.\n */\n\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\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 return squareArea ? mathMax(f * areaMax / squareArea, squareArea / (f * areaMin)) : Infinity;\n}\n/**\n * Positions the specified row of nodes. Modifies `rect`.\n */\n\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 // 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 var last = rect[xy[idx0WhenH]];\n var rowOtherLength = rowFixedLength ? row.area / rowFixedLength : 0;\n\n if (flush || rowOtherLength > rect[wh[idx1WhenH]]) {\n rowOtherLength = rect[wh[idx1WhenH]]; // over+underflow\n }\n\n for (var i = 0, rowLen = row.length; i < rowLen; i++) {\n var node = row[i];\n var nodeLayout = {};\n var step = rowOtherLength ? node.getLayout().area / rowOtherLength : 0;\n var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax(rowOtherLength - 2 * halfGapWidth, 0); // We use Math.max/min to avoid negative width/height when considering gap width.\n\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 nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin(halfGapWidth, wh1 / 2);\n nodeLayout[xy[idx0WhenH]] = last + mathMin(halfGapWidth, wh0 / 2);\n last += modWH;\n node.setLayout(nodeLayout, true);\n }\n\n rect[xy[idx1WhenH]] += rowOtherLength;\n rect[wh[idx1WhenH]] -= rowOtherLength;\n} // Return [containerWidth, containerHeight] as defualt.\n\n\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) {\n // 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\n var currNodeValue = currNode.getValue();\n\n if (currNodeValue === 0) {\n return defaultSize;\n }\n\n area *= sum / currNodeValue; // Considering border, suppose aspect ratio is 1.\n\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 + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5);\n area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER);\n currNode = parent;\n }\n\n area < viewArea && (area = viewArea);\n var scale = Math.pow(area / viewArea, 0.5);\n return [containerWidth * scale, containerHeight * scale];\n} // Root postion base on coord of containerGroup\n\n\nfunction calculateRootPosition(layoutInfo, rootRect, targetInfo) {\n if (rootRect) {\n return {\n x: rootRect.x,\n y: rootRect.y\n };\n }\n\n var defaultPosition = {\n x: 0,\n y: 0\n };\n\n if (!targetInfo) {\n return defaultPosition;\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\n var targetNode = targetInfo.node;\n var layout = targetNode.getLayout();\n\n if (!layout) {\n return defaultPosition;\n } // Transform coord from local to container.\n\n\n var targetCenter = [layout.width / 2, layout.height / 2];\n var node = targetNode;\n\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} // 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.\n\n\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 (nodeInViewAbovePath && !isAboveViewRoot || depth === viewAbovePath.length && node !== viewRoot) {\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); // Transform to child coordinate.\n\n var childClipRect = new BoundingRect(clipRect.x - nodeLayout.x, clipRect.y - nodeLayout.y, clipRect.width, clipRect.height);\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\nmodule.exports = _default;","/**\n * Sub-pixel optimize for canvas rendering, prevent from blur\n * when rendering a thin vertical/horizontal line.\n */\nvar round = Math.round;\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] If `null`/`undefined`/`0`, do not optimize.\n */\n\nfunction subPixelOptimizeLine(outputShape, inputShape, style) {\n if (!inputShape) {\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 outputShape.x1 = x1;\n outputShape.x2 = x2;\n outputShape.y1 = y1;\n outputShape.y2 = y2;\n var lineWidth = style && style.lineWidth;\n\n if (!lineWidth) {\n return;\n }\n\n if (round(x1 * 2) === round(x2 * 2)) {\n outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true);\n }\n\n if (round(y1 * 2) === round(y2 * 2)) {\n outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true);\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] If `null`/`undefined`/`0`, do not optimize.\n */\n\n\nfunction subPixelOptimizeRect(outputShape, inputShape, style) {\n if (!inputShape) {\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 outputShape.x = originX;\n outputShape.y = originY;\n outputShape.width = originWidth;\n outputShape.height = originHeight;\n var lineWidth = style && style.lineWidth;\n\n if (!lineWidth) {\n return;\n }\n\n outputShape.x = subPixelOptimize(originX, lineWidth, true);\n outputShape.y = subPixelOptimize(originY, lineWidth, true);\n outputShape.width = Math.max(subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x, originWidth === 0 ? 0 : 1);\n outputShape.height = Math.max(subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y, originHeight === 0 ? 0 : 1);\n}\n/**\n * Sub pixel optimize for canvas\n *\n * @param {number} position Coordinate, such as x, y\n * @param {number} lineWidth If `null`/`undefined`/`0`, do not optimize.\n * @param {boolean=} positiveOrNegative Default false (negative).\n * @return {number} Optimized position.\n */\n\n\nfunction subPixelOptimize(position, lineWidth, positiveOrNegative) {\n if (!lineWidth) {\n return position;\n } // Assure that (position + lineWidth / 2) is near integer edge,\n // otherwise line will be fuzzy in canvas.\n\n\n var doubledPosition = round(position * 2);\n return (doubledPosition + round(lineWidth)) % 2 === 0 ? doubledPosition / 2 : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;\n}\n\nexports.subPixelOptimizeLine = subPixelOptimizeLine;\nexports.subPixelOptimizeRect = subPixelOptimizeRect;\nexports.subPixelOptimize = subPixelOptimize;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _number = require(\"../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar _dataStackHelper = require(\"../data/helper/dataStackHelper\");\n\nvar isDimensionStacked = _dataStackHelper.isDimensionStacked;\n\nvar createRenderPlanner = require(\"../chart/helper/createRenderPlanner\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\nvar STACK_PREFIX = '__ec_stack_';\nvar LARGE_BAR_MIN_WIDTH = 0.5;\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 * @param {Object} opt\n * @param {module:echarts/coord/Axis} opt.axis Only support category axis currently.\n * @param {number} opt.count Positive interger.\n * @param {number} [opt.barWidth]\n * @param {number} [opt.barMaxWidth]\n * @param {number} [opt.barMinWidth]\n * @param {number} [opt.barGap]\n * @param {number} [opt.barCategoryGap]\n * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined.\n */\n\n\nfunction getLayoutOnAxis(opt) {\n var params = [];\n var baseAxis = opt.axis;\n var axisKey = 'axis0';\n\n if (baseAxis.type !== 'category') {\n return;\n }\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\n var widthAndOffsets = doCalBarWidthAndOffset(params);\n var result = [];\n\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\nfunction prepareLayoutBarSeries(seriesType, ecModel) {\n var seriesModels = [];\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n // Check series coordinate, do layout for cartesian2d only\n if (isOnCartesian(seriesModel) && !isInLargeMode(seriesModel)) {\n seriesModels.push(seriesModel);\n }\n });\n return seriesModels;\n}\n/**\n * Map from (baseAxis.dim + '_' + baseAxis.index) to min gap of two adjacent\n * values.\n * This works for time axes, value axes, and log axes.\n * For a single time axis, return value is in the form like\n * {'x_0': [1000000]}.\n * The value of 1000000 is in milliseconds.\n */\n\n\nfunction getValueAxesMinGaps(barSeries) {\n /**\n * Map from axis.index to values.\n * For a single time axis, axisValues is in the form like\n * {'x_0': [1495555200000, 1495641600000, 1495728000000]}.\n * Items in axisValues[x], e.g. 1495555200000, are time values of all\n * series.\n */\n var axisValues = {};\n zrUtil.each(barSeries, function (seriesModel) {\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n\n if (baseAxis.type !== 'time' && baseAxis.type !== 'value') {\n return;\n }\n\n var data = seriesModel.getData();\n var key = baseAxis.dim + '_' + baseAxis.index;\n var dim = data.mapDimension(baseAxis.dim);\n\n for (var i = 0, cnt = data.count(); i < cnt; ++i) {\n var value = data.get(dim, i);\n\n if (!axisValues[key]) {\n // No previous data for the axis\n axisValues[key] = [value];\n } else {\n // No value in previous series\n axisValues[key].push(value);\n } // Ignore duplicated time values in the same axis\n\n }\n });\n var axisMinGaps = [];\n\n for (var key in axisValues) {\n if (axisValues.hasOwnProperty(key)) {\n var valuesInAxis = axisValues[key];\n\n if (valuesInAxis) {\n // Sort axis values into ascending order to calculate gaps\n valuesInAxis.sort(function (a, b) {\n return a - b;\n });\n var min = null;\n\n for (var j = 1; j < valuesInAxis.length; ++j) {\n var delta = valuesInAxis[j] - valuesInAxis[j - 1];\n\n if (delta > 0) {\n // Ignore 0 delta because they are of the same axis value\n min = min === null ? delta : Math.min(min, delta);\n }\n } // Set to null if only have one data\n\n\n axisMinGaps[key] = min;\n }\n }\n }\n\n return axisMinGaps;\n}\n\nfunction makeColumnLayout(barSeries) {\n var axisMinGaps = getValueAxesMinGaps(barSeries);\n var seriesInfoList = [];\n zrUtil.each(barSeries, function (seriesModel) {\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var axisExtent = baseAxis.getExtent();\n var bandWidth;\n\n if (baseAxis.type === 'category') {\n bandWidth = baseAxis.getBandWidth();\n } else if (baseAxis.type === 'value' || baseAxis.type === 'time') {\n var key = baseAxis.dim + '_' + baseAxis.index;\n var minGap = axisMinGaps[key];\n var extentSpan = Math.abs(axisExtent[1] - axisExtent[0]);\n var scale = baseAxis.scale.getExtent();\n var scaleSpan = Math.abs(scale[1] - scale[0]);\n bandWidth = minGap ? extentSpan / scaleSpan * minGap : extentSpan; // When there is only one data value\n } else {\n var data = seriesModel.getData();\n bandWidth = Math.abs(axisExtent[1] - axisExtent[0]) / data.count();\n }\n\n var barWidth = parsePercent(seriesModel.get('barWidth'), bandWidth);\n var barMaxWidth = parsePercent(seriesModel.get('barMaxWidth'), bandWidth);\n var barMinWidth = parsePercent( // barMinWidth by default is 1 in cartesian. Because in value axis,\n // the auto-calculated bar width might be less than 1.\n seriesModel.get('barMinWidth') || 1, bandWidth);\n var barGap = seriesModel.get('barGap');\n var barCategoryGap = seriesModel.get('barCategoryGap');\n seriesInfoList.push({\n bandWidth: bandWidth,\n barWidth: barWidth,\n barMaxWidth: barMaxWidth,\n barMinWidth: barMinWidth,\n barGap: barGap,\n barCategoryGap: barCategoryGap,\n axisKey: getAxisKey(baseAxis),\n stackId: getSeriesStackId(seriesModel)\n });\n });\n return doCalBarWidthAndOffset(seriesInfoList);\n}\n\nfunction doCalBarWidthAndOffset(seriesInfoList) {\n // Columns info on each category axis. Key is cartesian name\n var columnsMap = {};\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 var stackId = seriesInfo.stackId;\n\n if (!stacks[stackId]) {\n columnsOnAxis.autoWidthCount++;\n }\n\n stacks[stackId] = stacks[stackId] || {\n width: 0,\n maxWidth: 0\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 var barWidth = seriesInfo.barWidth;\n\n if (barWidth && !stacks[stackId].width) {\n // See #6312, do not restrict width.\n stacks[stackId].width = barWidth;\n barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n columnsOnAxis.remainedWidth -= barWidth;\n }\n\n var barMaxWidth = seriesInfo.barMaxWidth;\n barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n var barMinWidth = seriesInfo.barMinWidth;\n barMinWidth && (stacks[stackId].minWidth = barMinWidth);\n var barGap = seriesInfo.barGap;\n barGap != null && (columnsOnAxis.gap = barGap);\n var barCategoryGap = seriesInfo.barCategoryGap;\n barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap);\n });\n var result = {};\n zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {\n result[coordSysName] = {};\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 var remainedWidth = columnsOnAxis.remainedWidth;\n var autoWidthCount = columnsOnAxis.autoWidthCount;\n var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0); // Find if any auto calculated bar exceeded maxBarWidth\n\n zrUtil.each(stacks, function (column) {\n var maxWidth = column.maxWidth;\n var minWidth = column.minWidth;\n\n if (!column.width) {\n var finalWidth = autoWidth;\n\n if (maxWidth && maxWidth < finalWidth) {\n finalWidth = Math.min(maxWidth, remainedWidth);\n } // `minWidth` has higher priority. `minWidth` decide that wheter the\n // bar is able to be visible. So `minWidth` should not be restricted\n // by `maxWidth` or `remainedWidth` (which is from `bandWidth`). In\n // the extreme cases for `value` axis, bars are allowed to overlap\n // with each other if `minWidth` specified.\n\n\n if (minWidth && minWidth > finalWidth) {\n finalWidth = minWidth;\n }\n\n if (finalWidth !== autoWidth) {\n column.width = finalWidth;\n remainedWidth -= finalWidth + barGapPercent * finalWidth;\n autoWidthCount--;\n }\n } else {\n // `barMinWidth/barMaxWidth` has higher priority than `barWidth`, as\n // CSS does. Becuase barWidth can be a percent value, where\n // `barMaxWidth` can be used to restrict the final width.\n var finalWidth = column.width;\n\n if (maxWidth) {\n finalWidth = Math.min(finalWidth, maxWidth);\n } // `minWidth` has higher priority, as described above\n\n\n if (minWidth) {\n finalWidth = Math.max(finalWidth, minWidth);\n }\n\n column.width = finalWidth;\n remainedWidth -= finalWidth + barGapPercent * finalWidth;\n autoWidthCount--;\n }\n }); // Recalculate width again\n\n autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0);\n var widthSum = 0;\n var lastColumn;\n zrUtil.each(stacks, function (column, idx) {\n if (!column.width) {\n column.width = autoWidth;\n }\n\n lastColumn = column;\n widthSum += column.width * (1 + barGapPercent);\n });\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 offset += column.width * (1 + barGapPercent);\n });\n });\n return result;\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 */\n\n\nfunction retrieveColumnLayout(barWidthAndOffset, axis, seriesModel) {\n if (barWidthAndOffset && axis) {\n var result = barWidthAndOffset[getAxisKey(axis)];\n\n if (result != null && seriesModel != null) {\n result = result[getSeriesStackId(seriesModel)];\n }\n\n return result;\n }\n}\n/**\n * @param {string} seriesType\n * @param {module:echarts/model/Global} ecModel\n */\n\n\nfunction layout(seriesType, ecModel) {\n var seriesModels = prepareLayoutBarSeries(seriesType, ecModel);\n var barWidthAndOffset = makeColumnLayout(seriesModels);\n var lastStackCoords = {};\n var lastStackCoordsOrigin = {};\n zrUtil.each(seriesModels, function (seriesModel) {\n var data = seriesModel.getData();\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\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 var barMinHeight = seriesModel.get('barMinHeight') || 0;\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 var valueDim = data.mapDimension(valueAxis.dim);\n var baseDim = data.mapDimension(baseAxis.dim);\n var stacked = isDimensionStacked(data, valueDim\n /*, baseDim*/\n );\n var isValueAxisH = valueAxis.isHorizontal();\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 var sign = value >= 0 ? 'p' : 'n';\n var baseCoord = valueAxisStart; // Because of the barMinHeight, we can not use the value in\n // stackResultDimension directly.\n\n if (stacked) {\n // Only ordinal axis can be stacked.\n if (!lastStackCoords[stackId][baseValue]) {\n lastStackCoords[stackId][baseValue] = {\n p: valueAxisStart,\n // Positive stack\n n: valueAxisStart // Negative stack\n\n };\n } // Should also consider #4243\n\n\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 } // Ignore stack from NaN value\n\n\n if (!isNaN(width)) {\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 } // Ignore stack from NaN value\n\n\n if (!isNaN(height)) {\n stacked && (lastStackCoords[stackId][baseValue][sign] += height);\n }\n }\n\n data.setItemLayout(idx, {\n x: x,\n y: y,\n width: width,\n height: height\n });\n }\n }, this);\n} // TODO: Do not support stack in large mode yet.\n\n\nvar largeLayout = {\n seriesType: 'bar',\n plan: createRenderPlanner(),\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 coordLayout = cartesian.grid.getRect();\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 var barWidth = retrieveColumnLayout(makeColumnLayout([seriesModel]), baseAxis, seriesModel).width;\n\n if (!(barWidth > LARGE_BAR_MIN_WIDTH)) {\n // jshint ignore:line\n barWidth = LARGE_BAR_MIN_WIDTH;\n }\n\n return {\n progress: progress\n };\n\n function progress(params, data) {\n var count = params.count;\n var largePoints = new LargeArr(count * 2);\n var largeBackgroundPoints = 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 coord = cartesian.dataToPoint(valuePair, null, coord); // Data index might not be in order, depends on `progressiveChunkMode`.\n\n largeBackgroundPoints[pointsOffset] = valueAxisHorizontal ? coordLayout.x + coordLayout.width : coord[0];\n largePoints[pointsOffset++] = coord[0];\n largeBackgroundPoints[pointsOffset] = valueAxisHorizontal ? coord[1] : coordLayout.y + coordLayout.height;\n largePoints[pointsOffset++] = coord[1];\n largeDataIndices[idxOffset++] = dataIndex;\n }\n\n data.setLayout({\n largePoints: largePoints,\n largeDataIndices: largeDataIndices,\n largeBackgroundPoints: largeBackgroundPoints,\n barWidth: barWidth,\n valueAxisStart: getValueAxisStart(baseAxis, valueAxis, false),\n backgroundStart: valueAxisHorizontal ? coordLayout.x : coordLayout.y,\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} // See cases in `test/bar-start.html` and `#7412`, `#8747`.\n\n\nfunction getValueAxisStart(baseAxis, valueAxis, stacked) {\n return valueAxis.toGlobalCoord(valueAxis.dataToCoord(valueAxis.type === 'log' ? 1 : 0));\n}\n\nexports.getLayoutOnAxis = getLayoutOnAxis;\nexports.prepareLayoutBarSeries = prepareLayoutBarSeries;\nexports.makeColumnLayout = makeColumnLayout;\nexports.retrieveColumnLayout = retrieveColumnLayout;\nexports.layout = layout;\nexports.largeLayout = largeLayout;","var textHelper = require(\"../helper/text\");\n\nvar BoundingRect = require(\"../../core/BoundingRect\");\n\nvar _constant = require(\"../constant\");\n\nvar WILL_BE_RESTORED = _constant.WILL_BE_RESTORED;\n\n/**\n * Mixin for drawing text in a element bounding rect\n * @module zrender/mixin/RectText\n */\nvar tmpRect = new BoundingRect();\n\nvar RectText = function () {};\n\nRectText.prototype = {\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 rect = style.textRect || rect; // Optimize, avoid normalize every time.\n\n this.__dirty && textHelper.normalizeTextStyle(style, true);\n var text = style.text; // Convert to string\n\n text != null && (text += '');\n\n if (!textHelper.needDrawText(text, style)) {\n return;\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\n\n ctx.save(); // Transform rect to view space\n\n var transform = this.transform;\n\n if (!style.transformText) {\n if (transform) {\n tmpRect.copy(rect);\n tmpRect.applyTransform(transform);\n rect = tmpRect;\n }\n } else {\n this.setTransform(ctx);\n } // transformText and textRotation can not be used at the same time.\n\n\n textHelper.renderText(this, ctx, text, style, rect, WILL_BE_RESTORED);\n ctx.restore();\n }\n};\nvar _default = RectText;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar axisDefault = require(\"./axisDefault\");\n\nvar ComponentModel = require(\"../model/Component\");\n\nvar _layout = require(\"../util/layout\");\n\nvar getLayoutParams = _layout.getLayoutParams;\nvar mergeLayoutParam = _layout.mergeLayoutParam;\n\nvar OrdinalMeta = require(\"../data/OrdinalMeta\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// FIXME axisType is fixed ?\nvar AXIS_TYPES = ['value', 'category', 'time', 'log'];\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 */\n\nfunction _default(axisName, BaseAxisModelClass, axisTypeDefaulter, extraDefaultOption) {\n zrUtil.each(AXIS_TYPES, function (axisType) {\n BaseAxisModelClass.extend({\n /**\n * @readOnly\n */\n type: axisName + 'Axis.' + axisType,\n mergeDefaultAndTheme: function (option, ecModel) {\n var layoutMode = this.layoutMode;\n var inputPositionParams = layoutMode ? getLayoutParams(option) : {};\n var themeModel = ecModel.getTheme();\n zrUtil.merge(option, themeModel.get(axisType + 'Axis'));\n zrUtil.merge(option, this.getDefaultOption());\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\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; // FIXME\n // warning if called before all of 'getInitailData' finished.\n\n if (option.type === 'category') {\n if (rawData) {\n return option.data;\n }\n\n return this.__ordinalMeta.categories;\n }\n },\n getOrdinalMeta: function () {\n return this.__ordinalMeta;\n },\n defaultOption: zrUtil.mergeAll([{}, axisDefault[axisType + 'Axis'], extraDefaultOption], true)\n });\n });\n ComponentModel.registerSubTypeDefaulter(axisName + 'Axis', zrUtil.curry(axisTypeDefaulter, axisName));\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar helper = require(\"./helper\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerAction('dataZoom', function (payload, ecModel) {\n var linkedNodesFinder = helper.createLinkedNodesFinder(zrUtil.bind(ecModel.eachComponent, ecModel, 'dataZoom'), helper.eachAxisDim, function (model, dimNames) {\n return model.get(dimNames.axisIndex);\n });\n var effectedModels = [];\n ecModel.eachComponent({\n mainType: 'dataZoom',\n query: payload\n }, function (model, index) {\n effectedModels.push.apply(effectedModels, linkedNodesFinder(model).nodes);\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});","var _util = require(\"./util\");\n\nvar normalizeRadian = _util.normalizeRadian;\nvar PI2 = Math.PI * 2;\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 */\n\nfunction containStroke(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth;\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\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n return true;\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var angle = Math.atan2(y, x);\n\n if (angle < 0) {\n angle += PI2;\n }\n\n return angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle;\n}\n\nexports.containStroke = containStroke;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _dataStackHelper = require(\"../../data/helper/dataStackHelper\");\n\nvar isDimensionStacked = _dataStackHelper.isDimensionStacked;\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar map = _util.map;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {Object} coordSys\n * @param {module:echarts/data/List} data\n * @param {string} valueOrigin lineSeries.option.areaStyle.origin\n */\nfunction prepareDataCoordInfo(coordSys, data, valueOrigin) {\n var baseAxis = coordSys.getBaseAxis();\n var valueAxis = coordSys.getOtherAxis(baseAxis);\n var valueStart = getValueStart(valueAxis, valueOrigin);\n var baseAxisDim = baseAxis.dim;\n var valueAxisDim = valueAxis.dim;\n var valueDim = data.mapDimension(valueAxisDim);\n var baseDim = data.mapDimension(baseAxisDim);\n var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0;\n var dims = map(coordSys.dimensions, function (coordDim) {\n return data.mapDimension(coordDim);\n });\n var stacked;\n var stackResultDim = data.getCalculationInfo('stackResultDimension');\n\n if (stacked |= isDimensionStacked(data, dims[0]\n /*, dims[1]*/\n )) {\n // jshint ignore:line\n dims[0] = stackResultDim;\n }\n\n if (stacked |= isDimensionStacked(data, dims[1]\n /*, dims[0]*/\n )) {\n // jshint ignore:line\n dims[1] = stackResultDim;\n }\n\n return {\n dataDimsForPoint: dims,\n valueStart: valueStart,\n valueAxisDim: valueAxisDim,\n baseAxisDim: baseAxisDim,\n stacked: !!stacked,\n valueDim: valueDim,\n baseDim: baseDim,\n baseDataOffset: baseDataOffset,\n stackedOverDimension: data.getCalculationInfo('stackedOverDimension')\n };\n}\n\nfunction getValueStart(valueAxis, valueOrigin) {\n var valueStart = 0;\n var extent = valueAxis.scale.getExtent();\n\n if (valueOrigin === 'start') {\n valueStart = extent[0];\n } else if (valueOrigin === 'end') {\n valueStart = extent[1];\n } // auto\n else {\n // Both positive\n if (extent[0] > 0) {\n valueStart = extent[0];\n } // Both negative\n else if (extent[1] < 0) {\n valueStart = extent[1];\n } // If is one positive, and one negative, onZero shall be true\n\n }\n\n return valueStart;\n}\n\nfunction getStackedOnPoint(dataCoordInfo, coordSys, data, idx) {\n var value = NaN;\n\n if (dataCoordInfo.stacked) {\n value = data.get(data.getCalculationInfo('stackedOverDimension'), idx);\n }\n\n if (isNaN(value)) {\n value = dataCoordInfo.valueStart;\n }\n\n var baseDataOffset = dataCoordInfo.baseDataOffset;\n var stackedData = [];\n stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx);\n stackedData[1 - baseDataOffset] = value;\n return coordSys.dataToPoint(stackedData);\n}\n\nexports.prepareDataCoordInfo = prepareDataCoordInfo;\nexports.getStackedOnPoint = getStackedOnPoint;","var Definable = require(\"./Definable\");\n\nvar zrUtil = require(\"../../core/util\");\n\nvar matrix = require(\"../../core/matrix\");\n\n/**\n * @file Manages SVG clipPath elements.\n * @author Zhang Wenli\n */\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\nzrUtil.inherits(ClippathManager, Definable);\n/**\n * Update clipPath.\n *\n * @param {Displayable} displayable displayable element\n */\n\nClippathManager.prototype.update = function (displayable) {\n var svgEl = this.getSvgElement(displayable);\n\n if (svgEl) {\n this.updateDom(svgEl, displayable.__clipPaths, false);\n }\n\n var textEl = this.getTextSvgElement(displayable);\n\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 * Create an SVGElement of displayable and create a 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 */\n\n\nClippathManager.prototype.updateDom = function (parentEl, clipPaths, isText) {\n if (clipPaths && clipPaths.length > 0) {\n // Has clipPath, create with the first clipPath\n var defs = this.getDefs(true);\n var clipPath = clipPaths[0];\n var clipPathEl;\n var id;\n var dom = isText ? '_textDom' : '_dom';\n\n if (clipPath[dom]) {\n // Use a dom that is already in \n id = clipPath[dom].getAttribute('id');\n clipPathEl = clipPath[dom]; // Use a dom that is already in \n\n if (!defs.contains(clipPathEl)) {\n // This happens when set old clipPath that has\n // been previously removed\n defs.appendChild(clipPathEl);\n }\n } else {\n // New \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 clipPath[dom] = clipPathEl;\n } // Build path and add to \n\n\n var svgProxy = this.getSvgProxy(clipPath);\n\n if (clipPath.transform && clipPath.parent.invTransform && !isText) {\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(clipPath.transform); // Transform back from parent, and brush path\n\n matrix.mul(clipPath.transform, clipPath.parent.invTransform, clipPath.transform);\n svgProxy.brush(clipPath); // Set back transform of clipPath\n\n clipPath.transform = transform;\n } else {\n svgProxy.brush(clipPath);\n }\n\n var pathEl = this.getSvgElement(clipPath);\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\n clipPathEl.appendChild(pathEl.cloneNode());\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 } else {\n // No clipPath\n if (parentEl) {\n parentEl.setAttribute('clip-path', 'none');\n }\n }\n};\n/**\n * Mark a single clipPath to be used\n *\n * @param {Displayable} displayable displayable element\n */\n\n\nClippathManager.prototype.markUsed = function (displayable) {\n var that = this; // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n\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\n if (clipPath._textDom) {\n Definable.prototype.markUsed.call(that, clipPath._textDom);\n }\n });\n }\n};\n\nvar _default = ClippathManager;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar createListSimply = require(\"../helper/createListSimply\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\nvar LegendVisualProvider = require(\"../../visual/LegendVisualProvider\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar RadarSeries = SeriesModel.extend({\n type: 'series.radar',\n dependencies: ['radar'],\n // Overwrite\n init: function (option) {\n RadarSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\n this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));\n },\n getInitialData: function (option, ecModel) {\n return createListSimply(this, {\n generateCoord: 'indicator_',\n generateCoordCount: Infinity\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) + '
' + zrUtil.map(indicatorAxes, function (axis, idx) {\n var val = data.get(data.mapDimension(axis.dim), dataIndex);\n return encodeHTML(axis.name + ' : ' + val);\n }).join('
');\n },\n\n /**\n * @implement\n */\n getTooltipPosition: function (dataIndex) {\n if (dataIndex != null) {\n var data = this.getData();\n var coordSys = this.coordinateSystem;\n var values = data.getValues(zrUtil.map(coordSys.dimensions, function (dim) {\n return data.mapDimension(dim);\n }), dataIndex, true);\n\n for (var i = 0, len = values.length; i < len; i++) {\n if (!isNaN(values[i])) {\n var indicatorAxes = coordSys.getIndicatorAxes();\n return coordSys.coordToPoint(indicatorAxes[i].dataToCoord(values[i]), i);\n }\n }\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 // symbolRotate: null\n\n }\n});\nvar _default = RadarSeries;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar Component = require(\"../../model/Component\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"./graphic\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _text = require(\"zrender/lib/contain/text\");\n\nvar calculateTextPosition = _text.calculateTextPosition;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Symbol factory\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 * Diamond shape\n * @inner\n */\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 * Pin shape\n * @inner\n */\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 buildPath: function (path, shape) {\n var x = shape.x;\n var y = shape.y;\n var w = shape.width / 5 * 3; // Height must be larger than width\n\n var h = Math.max(w, shape.height);\n var r = w / 2; // Dist on y with tangent point and circle center\n\n var dy = r * r / (h - r);\n var cy = y - h + r + dy;\n var angle = Math.asin(dy / r); // Dist on x with tangent point and circle center\n\n var dx = Math.cos(angle) * r;\n var tanX = Math.sin(angle);\n var tanY = Math.cos(angle);\n var cpLen = r * 0.6;\n var cpLen2 = r * 0.7;\n path.moveTo(x - dx, cy + dy);\n path.arc(x, cy, r, Math.PI - angle, Math.PI * 2 + angle);\n path.bezierCurveTo(x + dx - tanX * cpLen, cy + dy + tanY * cpLen, x, y - cpLen2, x, y);\n path.bezierCurveTo(x, y - cpLen2, x - dx + tanX * cpLen, cy + dy + tanY * cpLen, x - dx, cy + dy);\n path.closePath();\n }\n});\n/**\n * Arrow shape\n * @inner\n */\n\nvar Arrow = graphic.extendShape({\n type: 'arrow',\n shape: {\n x: 0,\n y: 0,\n width: 0,\n height: 0\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 * Map of path contructors\n * @type {Object.}\n */\n\nvar symbolCtors = {\n line: graphic.Line,\n rect: graphic.Rect,\n roundRect: graphic.Rect,\n square: graphic.Rect,\n circle: graphic.Circle,\n diamond: Diamond,\n pin: Pin,\n arrow: Arrow,\n triangle: Triangle\n};\nvar symbolShapeMakers = {\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 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 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 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 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 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 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 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 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};\nvar symbolBuildProxies = {};\nzrUtil.each(symbolCtors, function (Ctor, name) {\n symbolBuildProxies[name] = new Ctor();\n});\nvar SymbolClz = graphic.extendShape({\n type: 'symbol',\n shape: {\n symbolType: '',\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n calculateTextPosition: function (out, style, rect) {\n var res = calculateTextPosition(out, style, rect);\n var shape = this.shape;\n\n if (shape && shape.symbolType === 'pin' && style.textPosition === 'inside') {\n res.y = rect.y + rect.height * 0.4;\n }\n\n return res;\n },\n buildPath: function (ctx, shape, inBundle) {\n var symbolType = shape.symbolType;\n\n if (symbolType !== 'none') {\n var proxySymbol = symbolBuildProxies[symbolType];\n\n if (!proxySymbol) {\n // Default rect\n symbolType = 'rect';\n proxySymbol = symbolBuildProxies[symbolType];\n }\n\n symbolShapeMakers[symbolType](shape.x, shape.y, shape.width, shape.height, proxySymbol.shape);\n proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle);\n }\n }\n}); // Provide setColor helper method to avoid determine if set the fill or stroke outside\n\nfunction symbolPathSetColor(color, innerColor) {\n if (this.type !== 'image') {\n var symbolStyle = this.style;\n var symbolShape = this.shape;\n\n if (symbolShape && symbolShape.symbolType === 'line') {\n symbolStyle.stroke = color;\n } else if (this.__isEmptyBrush) {\n symbolStyle.stroke = color;\n symbolStyle.fill = innerColor || '#fff';\n } else {\n // FIXME 判断图形默认是填充还是描边,使用 onlyStroke ?\n symbolStyle.fill && (symbolStyle.fill = color);\n symbolStyle.stroke && (symbolStyle.stroke = color);\n }\n\n this.dirty(false);\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 */\n\n\nfunction createSymbol(symbolType, x, y, w, h, color, keepAspect) {\n // TODO Support image object, DynamicImage.\n var isEmpty = symbolType.indexOf('empty') === 0;\n\n if (isEmpty) {\n symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6);\n }\n\n var symbolPath;\n\n if (symbolType.indexOf('image://') === 0) {\n symbolPath = graphic.makeImage(symbolType.slice(8), new BoundingRect(x, y, w, h), keepAspect ? 'center' : 'cover');\n } else if (symbolType.indexOf('path://') === 0) {\n symbolPath = graphic.makePath(symbolType.slice(7), {}, new BoundingRect(x, y, w, h), keepAspect ? 'center' : 'cover');\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 symbolPath.setColor = symbolPathSetColor;\n symbolPath.setColor(color);\n return symbolPath;\n}\n\nexports.createSymbol = createSymbol;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 DataZoomModel = require(\"./DataZoomModel\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = DataZoomModel.extend({\n type: 'dataZoom.inside',\n\n /**\n * @protected\n */\n defaultOption: {\n disabled: false,\n // Whether disable this inside zoom.\n zoomLock: false,\n // Whether disable zoom but only pan.\n zoomOnMouseWheel: true,\n // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n moveOnMouseMove: true,\n // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n moveOnMouseWheel: false,\n // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n preventDefaultMouseMove: true\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar graphic = require(\"../../util/graphic\");\n\nvar IncrementalDisplayable = require(\"zrender/lib/graphic/IncrementalDisplayable\");\n\nvar lineContain = require(\"zrender/lib/contain/line\");\n\nvar quadraticContain = require(\"zrender/lib/contain/quadratic\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO Batch by color\nvar LargeLineShape = graphic.extendShape({\n shape: {\n polyline: false,\n curveness: 0,\n segs: []\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\n if (count > 0) {\n path.moveTo(segs[i++], segs[i++]);\n\n for (var k = 1; k < count; k++) {\n path.lineTo(segs[i++], segs[i++]);\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\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 } else {\n path.lineTo(x1, y1);\n }\n }\n }\n },\n findDataIndex: function (x, y) {\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\n for (var i = 0; i < segs.length;) {\n var count = segs[i++];\n\n if (count > 0) {\n var x0 = segs[i++];\n var y0 = segs[i++];\n\n for (var k = 1; k < count; k++) {\n var x1 = segs[i++];\n var y1 = segs[i++];\n\n if (lineContain.containStroke(x0, y0, x1, y1)) {\n return dataIndex;\n }\n }\n }\n\n dataIndex++;\n }\n } else {\n var dataIndex = 0;\n\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\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 } 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 * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n */\n\n\nlargeLineProto.updateData = function (data) {\n this.group.removeAll();\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); // Add back\n\n\n this.group.add(lineEl);\n this._incremental = null;\n};\n/**\n * @override\n */\n\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\n this.group.add(this._incremental);\n } else {\n this._incremental = null;\n }\n};\n/**\n * @override\n */\n\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 } else {\n this._incremental.addDisplayable(lineEl, true);\n }\n};\n/**\n * @override\n */\n\n\nlargeLineProto.remove = function () {\n this._clearIncremental();\n\n this._incremental = null;\n this.group.removeAll();\n};\n\nlargeLineProto._setCommon = function (lineEl, data, isIncremental) {\n var hostModel = data.hostModel;\n lineEl.setShape({\n polyline: hostModel.get('polyline'),\n curveness: hostModel.get('lineStyle.curveness')\n });\n lineEl.useStyle(hostModel.getModel('lineStyle').getLineStyle());\n lineEl.style.strokeNoScale = true;\n var visualColor = data.getVisual('color');\n\n if (visualColor) {\n lineEl.setStyle('stroke', visualColor);\n }\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\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\n if (incremental) {\n incremental.clearDisplaybles();\n }\n};\n\nvar _default = LargeLineDraw;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./funnel/FunnelSeries\");\n\nrequire(\"./funnel/FunnelView\");\n\nvar dataColor = require(\"../visual/dataColor\");\n\nvar funnelLayout = require(\"./funnel/funnelLayout\");\n\nvar dataFilter = require(\"../processor/dataFilter\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerVisual(dataColor('funnel'));\necharts.registerLayout(funnelLayout);\necharts.registerProcessor(dataFilter('funnel'));","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar ATTR = '\\0_ec_interaction_mutex';\n\nfunction take(zr, resourceKey, userKey) {\n var store = getStore(zr);\n store[resourceKey] = userKey;\n}\n\nfunction 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\nfunction isTaken(zr, resourceKey) {\n return !!getStore(zr)[resourceKey];\n}\n\nfunction getStore(zr) {\n return zr[ATTR] || (zr[ATTR] = {});\n}\n/**\n * payload: {\n * type: 'takeGlobalCursor',\n * key: 'dataZoomSelect', or 'brush', or ...,\n * If no userKey, release global cursor.\n * }\n */\n\n\necharts.registerAction({\n type: 'takeGlobalCursor',\n event: 'globalCursorTaken',\n update: 'update'\n}, function () {});\nexports.take = take;\nexports.release = release;\nexports.isTaken = isTaken;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar MapDraw = require(\"../../component/helper/MapDraw\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar HIGH_DOWN_PROP = '__seriesMapHighDown';\nvar RECORD_VERSION_PROP = '__seriesMapCallKey';\n\nvar _default = echarts.extendChartView({\n type: 'map',\n render: function (mapModel, ecModel, api, payload) {\n // Not render if it is an toggleSelect action from self\n if (payload && payload.type === 'mapToggleSelect' && payload.from === this.uid) {\n return;\n }\n\n var group = this.group;\n group.removeAll();\n\n if (mapModel.getHostGeoModel()) {\n return;\n } // Not update map if it is an roam action from self\n\n\n if (!(payload && payload.type === 'geoRoam' && payload.componentType === 'series' && payload.seriesId === mapModel.id)) {\n if (mapModel.needsDrawMap) {\n var mapDraw = this._mapDraw || new MapDraw(api, true);\n group.add(mapDraw.group);\n mapDraw.draw(mapModel, ecModel, api, this, payload);\n this._mapDraw = mapDraw;\n } else {\n // Remove drawed map\n this._mapDraw && this._mapDraw.remove();\n this._mapDraw = null;\n }\n } else {\n var mapDraw = this._mapDraw;\n mapDraw && group.add(mapDraw.group);\n }\n\n mapModel.get('showLegendSymbol') && ecModel.getComponent('legend') && this._renderSymbols(mapModel, ecModel, api);\n },\n remove: function () {\n this._mapDraw && this._mapDraw.remove();\n this._mapDraw = null;\n this.group.removeAll();\n },\n dispose: function () {\n this._mapDraw && this._mapDraw.remove();\n this._mapDraw = null;\n },\n _renderSymbols: function (mapModel, ecModel, api) {\n var originalData = mapModel.originalData;\n var group = this.group;\n originalData.each(originalData.mapDimension('value'), function (value, originalDataIndex) {\n if (isNaN(value)) {\n return;\n }\n\n var layout = originalData.getItemLayout(originalDataIndex);\n\n if (!layout || !layout.point) {\n // Not exists in map\n return;\n }\n\n var point = layout.point;\n var offset = layout.offset;\n var circle = new graphic.Circle({\n style: {\n // Because the special of map draw.\n // Which needs statistic of multiple series and draw on one map.\n // And each series also need a symbol with legend color\n //\n // Layout and visual are put one the different data\n fill: mapModel.getData().getVisual('color')\n },\n shape: {\n cx: point[0] + offset * 9,\n cy: point[1],\n r: 3\n },\n silent: true,\n // Do not overlap the first series, on which labels are displayed.\n z2: 8 + (!offset ? graphic.Z2_EMPHASIS_LIFT + 1 : 0)\n }); // Only the series that has the first value on the same region is in charge of rendering the label.\n // But consider the case:\n // series: [\n // {id: 'X', type: 'map', map: 'm', {data: [{name: 'A', value: 11}, {name: 'B', {value: 22}]},\n // {id: 'Y', type: 'map', map: 'm', {data: [{name: 'A', value: 21}, {name: 'C', {value: 33}]}\n // ]\n // The offset `0` of item `A` is at series `X`, but of item `C` is at series `Y`.\n // For backward compatibility, we follow the rule that render label `A` by the\n // settings on series `X` but render label `C` by the settings on series `Y`.\n\n if (!offset) {\n var fullData = mapModel.mainSeries.getData();\n var name = originalData.getName(originalDataIndex);\n var fullIndex = fullData.indexOfName(name);\n var itemModel = originalData.getItemModel(originalDataIndex);\n var labelModel = itemModel.getModel('label');\n var hoverLabelModel = itemModel.getModel('emphasis.label');\n var regionGroup = fullData.getItemGraphicEl(fullIndex); // `getFormattedLabel` needs to use `getData` inside. Here\n // `mapModel.getData()` is shallow cloned from `mainSeries.getData()`.\n // FIXME\n // If this is not the `mainSeries`, the item model (like label formatter)\n // set on original data item will never get. But it has been working\n // like that from the begining, and this scenario is rarely encountered.\n // So it won't be fixed until have to.\n\n var normalText = zrUtil.retrieve2(mapModel.getFormattedLabel(fullIndex, 'normal'), name);\n var emphasisText = zrUtil.retrieve2(mapModel.getFormattedLabel(fullIndex, 'emphasis'), normalText);\n var highDownRecord = regionGroup[HIGH_DOWN_PROP];\n var recordVersion = Math.random(); // Prevent from register listeners duplicatedly when roaming.\n\n if (!highDownRecord) {\n highDownRecord = regionGroup[HIGH_DOWN_PROP] = {};\n var onEmphasis = zrUtil.curry(onRegionHighDown, true);\n var onNormal = zrUtil.curry(onRegionHighDown, false);\n regionGroup.on('mouseover', onEmphasis).on('mouseout', onNormal).on('emphasis', onEmphasis).on('normal', onNormal);\n } // Prevent removed regions effect current grapics.\n\n\n regionGroup[RECORD_VERSION_PROP] = recordVersion;\n zrUtil.extend(highDownRecord, {\n recordVersion: recordVersion,\n circle: circle,\n labelModel: labelModel,\n hoverLabelModel: hoverLabelModel,\n emphasisText: emphasisText,\n normalText: normalText\n }); // FIXME\n // Consider set option when emphasis.\n\n enterRegionHighDown(highDownRecord, false);\n }\n\n group.add(circle);\n });\n }\n});\n\nfunction onRegionHighDown(toHighOrDown) {\n var highDownRecord = this[HIGH_DOWN_PROP];\n\n if (highDownRecord && highDownRecord.recordVersion === this[RECORD_VERSION_PROP]) {\n enterRegionHighDown(highDownRecord, toHighOrDown);\n }\n}\n\nfunction enterRegionHighDown(highDownRecord, toHighOrDown) {\n var circle = highDownRecord.circle;\n var labelModel = highDownRecord.labelModel;\n var hoverLabelModel = highDownRecord.hoverLabelModel;\n var emphasisText = highDownRecord.emphasisText;\n var normalText = highDownRecord.normalText;\n\n if (toHighOrDown) {\n circle.style.extendFrom(graphic.setTextStyle({}, hoverLabelModel, {\n text: hoverLabelModel.get('show') ? emphasisText : null\n }, {\n isRectText: true,\n useInsideStyle: false\n }, true)); // Make label upper than others if overlaps.\n\n circle.__mapOriginalZ2 = circle.z2;\n circle.z2 += graphic.Z2_EMPHASIS_LIFT;\n } else {\n graphic.setTextStyle(circle.style, labelModel, {\n text: labelModel.get('show') ? normalText : null,\n textPosition: labelModel.getShallow('position') || 'bottom'\n }, {\n isRectText: true,\n useInsideStyle: false\n }); // Trigger normalize style like padding.\n\n circle.dirty(false);\n\n if (circle.__mapOriginalZ2 != null) {\n circle.z2 = circle.__mapOriginalZ2;\n circle.__mapOriginalZ2 = null;\n }\n }\n}\n\nmodule.exports = _default;","var _util = require(\"../../core/util\");\n\nvar retrieve2 = _util.retrieve2;\nvar retrieve3 = _util.retrieve3;\nvar each = _util.each;\nvar normalizeCssArray = _util.normalizeCssArray;\nvar isString = _util.isString;\nvar isObject = _util.isObject;\n\nvar textContain = require(\"../../contain/text\");\n\nvar roundRectHelper = require(\"./roundRect\");\n\nvar imageHelper = require(\"./image\");\n\nvar fixShadow = require(\"./fixShadow\");\n\nvar _constant = require(\"../constant\");\n\nvar ContextCachedBy = _constant.ContextCachedBy;\nvar WILL_BE_RESTORED = _constant.WILL_BE_RESTORED;\nvar DEFAULT_FONT = textContain.DEFAULT_FONT; // TODO: Have not support 'start', 'end' yet.\n\nvar VALID_TEXT_ALIGN = {\n left: 1,\n right: 1,\n center: 1\n};\nvar VALID_TEXT_VERTICAL_ALIGN = {\n top: 1,\n bottom: 1,\n middle: 1\n}; // Different from `STYLE_COMMON_PROPS` of `graphic/Style`,\n// the default value of shadowColor is `'transparent'`.\n\nvar SHADOW_STYLE_COMMON_PROPS = [['textShadowBlur', 'shadowBlur', 0], ['textShadowOffsetX', 'shadowOffsetX', 0], ['textShadowOffsetY', 'shadowOffsetY', 0], ['textShadowColor', 'shadowColor', 'transparent']];\nvar _tmpTextPositionResult = {};\nvar _tmpBoxPositionResult = {};\n/**\n * @param {module:zrender/graphic/Style} style\n * @return {module:zrender/graphic/Style} The input style.\n */\n\nfunction normalizeTextStyle(style) {\n normalizeStyle(style);\n each(style.rich, normalizeStyle);\n return style;\n}\n\nfunction normalizeStyle(style) {\n if (style) {\n style.font = textContain.makeFont(style);\n var textAlign = style.textAlign;\n textAlign === 'middle' && (textAlign = 'center');\n style.textAlign = textAlign == null || VALID_TEXT_ALIGN[textAlign] ? textAlign : 'left'; // Compatible with textBaseline.\n\n var textVerticalAlign = style.textVerticalAlign || style.textBaseline;\n textVerticalAlign === 'center' && (textVerticalAlign = 'middle');\n style.textVerticalAlign = textVerticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[textVerticalAlign] ? textVerticalAlign : 'top';\n var textPadding = style.textPadding;\n\n if (textPadding) {\n style.textPadding = normalizeCssArray(style.textPadding);\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 */\n\n\nfunction renderText(hostEl, ctx, text, style, rect, prevEl) {\n style.rich ? renderRichText(hostEl, ctx, text, style, rect, prevEl) : renderPlainText(hostEl, ctx, text, style, rect, prevEl);\n} // Avoid setting to ctx according to prevEl if possible for\n// performance in scenarios of large amount text.\n\n\nfunction renderPlainText(hostEl, ctx, text, style, rect, prevEl) {\n 'use strict';\n\n var needDrawBg = needDrawBackground(style);\n var prevStyle;\n var checkCache = false;\n var cachedByMe = ctx.__attrCachedBy === ContextCachedBy.PLAIN_TEXT; // Only take and check cache for `Text` el, but not RectText.\n\n if (prevEl !== WILL_BE_RESTORED) {\n if (prevEl) {\n prevStyle = prevEl.style;\n checkCache = !needDrawBg && cachedByMe && prevStyle;\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\n\n ctx.__attrCachedBy = needDrawBg ? ContextCachedBy.NONE : ContextCachedBy.PLAIN_TEXT;\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; // 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\n if (!checkCache || styleFont !== (prevStyle.font || DEFAULT_FONT)) {\n ctx.font = styleFont;\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\n\n var computedFont = hostEl.__computedFont;\n\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 var contentBlock = hostEl.__textCotentBlock;\n\n if (!contentBlock || hostEl.__dirtyText) {\n contentBlock = hostEl.__textCotentBlock = textContain.parsePlainText(text, computedFont, textPadding, textLineHeight, style.truncate);\n }\n\n var outerHeight = contentBlock.outerHeight;\n var textLines = contentBlock.lines;\n var lineHeight = contentBlock.lineHeight;\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; // Origin of textRotation should be the base point of text drawing.\n\n applyTextRotation(ctx, style, rect, baseX, baseY);\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 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 } // 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\n\n ctx.textAlign = textAlign; // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n\n ctx.textBaseline = 'middle'; // Set text opacity\n\n ctx.globalAlpha = style.opacity || 1; // Always set shadowBlur and shadowOffset to avoid leak from displayable.\n\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\n if (!checkCache || val !== prevStyle[styleProp]) {\n ctx[ctxProp] = fixShadow(ctx, ctxProp, val || propItem[2]);\n }\n } // `textBaseline` is set as 'middle'.\n\n\n textY += lineHeight / 2;\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\n if (strokeChanged) {\n ctx.strokeStyle = textStroke;\n }\n }\n\n if (textFill) {\n if (!checkCache || style.textFill !== prevStyle.textFill) {\n ctx.fillStyle = textFill;\n }\n } // Optimize simply, in most cases only one line exists.\n\n\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 } 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 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; // Origin of textRotation should be the base point of text drawing.\n\n applyTextRotation(ctx, style, rect, baseX, baseY);\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\n if (textPadding) {\n xLeft += textPadding[3];\n lineTop += textPadding[0];\n }\n\n var xRight = xLeft + contentWidth;\n needDrawBackground(style) && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight);\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 var leftIndex = 0;\n var lineXLeft = xLeft;\n var lineXRight = xRight;\n var rightIndex = tokenCount - 1;\n var token;\n\n while (leftIndex < tokenCount && (token = tokens[leftIndex], !token.textAlign || token.textAlign === 'left')) {\n placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft, 'left');\n usedWidth -= token.width;\n lineXLeft += token.width;\n leftIndex++;\n }\n\n while (rightIndex >= 0 && (token = tokens[rightIndex], token.textAlign === 'right')) {\n placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXRight, 'right');\n usedWidth -= token.width;\n lineXRight -= token.width;\n rightIndex--;\n } // The other tokens are placed as textAlign 'center' if there is enough space.\n\n\n lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - usedWidth) / 2;\n\n while (leftIndex <= rightIndex) {\n token = tokens[leftIndex]; // Consider width specified by user, use 'center' rather than 'left'.\n\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\n if (origin === 'center') {\n x = rect.width / 2 + rect.x;\n y = rect.height / 2 + rect.y;\n } else if (origin) {\n x = origin[0] + rect.x;\n y = origin[1] + rect.y;\n }\n\n ctx.translate(x, y); // Positive: anticlockwise\n\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; // 'ctx.textBaseline' is always set as 'middle', for sake of\n // the bias of \"Microsoft YaHei\".\n\n var textVerticalAlign = token.textVerticalAlign;\n var y = lineTop + lineHeight / 2;\n\n if (textVerticalAlign === 'top') {\n y = lineTop + token.height / 2;\n } else if (textVerticalAlign === 'bottom') {\n y = lineTop + lineHeight - token.height / 2;\n }\n\n !token.isLineHolder && needDrawBackground(tokenStyle) && drawBackground(hostEl, ctx, tokenStyle, textAlign === 'right' ? x - token.width : textAlign === 'center' ? x - token.width / 2 : x, y - token.height / 2, token.width, token.height);\n var textPadding = token.textPadding;\n\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 setCtx(ctx, 'textAlign', textAlign); // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n\n setCtx(ctx, 'textBaseline', 'middle');\n setCtx(ctx, 'font', token.font || DEFAULT_FONT);\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); // Fill after stroke so the outline will not cover the main part.\n\n if (textStroke) {\n setCtx(ctx, 'lineWidth', textStrokeWidth);\n setCtx(ctx, 'strokeStyle', textStroke);\n ctx.strokeText(token.text, x, y);\n }\n\n if (textFill) {\n setCtx(ctx, 'fillStyle', textFill);\n ctx.fillText(token.text, x, y);\n }\n}\n\nfunction needDrawBackground(style) {\n return !!(style.textBackgroundColor || style.textBorderWidth && style.textBorderColor);\n} // style: {textBackgroundColor, textBorderWidth, textBorderColor, textBorderRadius, text}\n// shape: {x, y, width, height}\n\n\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 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\n if (!textBorderRadius) {\n ctx.rect(x, y, width, height);\n } else {\n roundRectHelper.buildPath(ctx, {\n x: x,\n y: y,\n width: width,\n height: height,\n r: textBorderRadius\n });\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 } else {\n ctx.fill();\n }\n } else if (isObject(textBackgroundColor)) {\n var image = textBackgroundColor.image;\n image = imageHelper.createOrUpdateImage(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 } 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; // Text position represented by coord\n\n if (rect) {\n var textPosition = style.textPosition;\n\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 } else {\n var res = hostEl && hostEl.calculateTextPosition ? hostEl.calculateTextPosition(_tmpTextPositionResult, style, rect) : textContain.calculateTextPosition(_tmpTextPositionResult, style, rect);\n baseX = res.x;\n baseY = res.y; // Default align and baseline when has textPosition\n\n textAlign = textAlign || res.textAlign;\n textVerticalAlign = textVerticalAlign || res.textVerticalAlign;\n } // textOffset is only support in RectText, otherwise\n // we have to adjust boundingRect for textOffset.\n\n\n var textOffset = style.textOffset;\n\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 return out;\n}\n\nfunction setCtx(ctx, prop, value) {\n ctx[prop] = fixShadow(ctx, prop, value);\n return ctx[prop];\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 */\n\n\nfunction getStroke(stroke, lineWidth) {\n return stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none' ? null // TODO pattern and gradient?\n : stroke.image || stroke.colorStops ? '#000' : stroke;\n}\n\nfunction getFill(fill) {\n return fill == null || fill === 'none' ? null // TODO pattern and gradient?\n : fill.image || fill.colorStops ? '#000' : fill;\n}\n\nfunction parsePercent(value, maxValue) {\n if (typeof value === 'string') {\n if (value.lastIndexOf('%') >= 0) {\n return parseFloat(value) / 100 * maxValue;\n }\n\n return parseFloat(value);\n }\n\n return value;\n}\n\nfunction getTextXForPadding(x, textAlign, textPadding) {\n return textAlign === 'right' ? x - textPadding[1] : textAlign === 'center' ? x + textPadding[3] / 2 - textPadding[1] / 2 : x + textPadding[3];\n}\n/**\n * @param {string} text\n * @param {module:zrender/Style} style\n * @return {boolean}\n */\n\n\nfunction needDrawText(text, style) {\n return text != null && (text || style.textBackgroundColor || style.textBorderWidth && style.textBorderColor || style.textPadding);\n}\n\nexports.normalizeTextStyle = normalizeTextStyle;\nexports.renderText = renderText;\nexports.getBoxPosition = getBoxPosition;\nexports.getStroke = getStroke;\nexports.getFill = getFill;\nexports.parsePercent = parsePercent;\nexports.needDrawText = needDrawText;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 PointerPath = require(\"./PointerPath\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar ChartView = require(\"../../view/Chart\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\nvar round = _number.round;\nvar linearMap = _number.linearMap;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction 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 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 } else if (typeof labelFormatter === 'function') {\n label = labelFormatter(label);\n }\n }\n\n return label;\n}\n\nvar PI2 = Math.PI * 2;\nvar GaugeView = ChartView.extend({\n type: 'gauge',\n render: function (seriesModel, ecModel, api) {\n this.group.removeAll();\n var colorList = seriesModel.get('axisLine.lineStyle.color');\n var posInfo = parsePosition(seriesModel, api);\n\n this._renderMain(seriesModel, ecModel, api, colorList, posInfo);\n },\n dispose: function () {},\n _renderMain: function (seriesModel, ecModel, api, colorList, posInfo) {\n var group = this.group;\n var axisLineModel = seriesModel.getModel('axisLine');\n var lineStyleModel = axisLineModel.getModel('lineStyle');\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 var angleRangeSpan = (endAngle - startAngle) % PI2;\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 sector.setStyle({\n fill: colorList[i][1]\n });\n sector.setStyle(lineStyleModel.getLineStyle( // Because we use sector to simulate arc\n // so the properties for stroking are useless\n ['color', 'borderWidth', 'borderColor']));\n group.add(sector);\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\n for (var i = 0; i < colorList.length; i++) {\n if (colorList[i][0] >= percent && (i === 0 ? 0 : colorList[i - 1][0]) < percent) {\n return colorList[i][1];\n }\n } // More than 1\n\n\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(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise);\n\n this._renderPointer(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise);\n\n this._renderTitle(seriesModel, ecModel, api, getColor, posInfo);\n\n this._renderDetail(seriesModel, ecModel, api, getColor, posInfo);\n },\n _renderTicks: function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise) {\n var group = this.group;\n var cx = posInfo.cx;\n var cy = posInfo.cy;\n var r = posInfo.r;\n var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n var splitLineModel = seriesModel.getModel('splitLine');\n var tickModel = seriesModel.getModel('axisTick');\n var labelModel = seriesModel.getModel('axisLabel');\n var splitNumber = seriesModel.get('splitNumber');\n var subSplitNumber = tickModel.get('splitNumber');\n var splitLineLen = parsePercent(splitLineModel.get('length'), r);\n var tickLen = parsePercent(tickModel.get('length'), r);\n var angle = startAngle;\n var step = (endAngle - startAngle) / splitNumber;\n var subStep = step / subSplitNumber;\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); // Split line\n\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\n if (splitLineStyle.stroke === 'auto') {\n splitLine.setStyle({\n stroke: getColor(i / splitNumber)\n });\n }\n\n group.add(splitLine);\n } // Label\n\n\n if (labelModel.get('show')) {\n var label = formatLabel(round(i / splitNumber * (maxVal - minVal) + minVal), labelModel.get('formatter'));\n var distance = labelModel.get('distance');\n var autoColor = getColor(i / splitNumber);\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 }, {\n autoColor: autoColor\n }),\n silent: true\n }));\n } // Axis tick\n\n\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\n angle -= subStep;\n } else {\n angle += step;\n }\n }\n },\n _renderPointer: function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise) {\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 var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n data.diff(oldData).add(function (idx) {\n var pointer = new PointerPath({\n shape: {\n angle: startAngle\n }\n });\n graphic.initProps(pointer, {\n shape: {\n angle: linearMap(data.get(valueDim, idx), valueExtent, angleExtent, true)\n }\n }, seriesModel);\n group.add(pointer);\n data.setItemGraphicEl(idx, pointer);\n }).update(function (newIdx, oldIdx) {\n var pointer = oldData.getItemGraphicEl(oldIdx);\n graphic.updateProps(pointer, {\n shape: {\n angle: linearMap(data.get(valueDim, newIdx), valueExtent, angleExtent, true)\n }\n }, seriesModel);\n group.add(pointer);\n data.setItemGraphicEl(newIdx, pointer);\n }).remove(function (idx) {\n var pointer = oldData.getItemGraphicEl(idx);\n group.remove(pointer);\n }).execute();\n data.eachItemGraphicEl(function (pointer, idx) {\n var itemModel = data.getItemModel(idx);\n var pointerModel = itemModel.getModel('pointer');\n pointer.setShape({\n x: posInfo.cx,\n y: posInfo.cy,\n width: parsePercent(pointerModel.get('width'), posInfo.r),\n r: parsePercent(pointerModel.get('length'), posInfo.r)\n });\n pointer.useStyle(itemModel.getModel('itemStyle').getItemStyle());\n\n if (pointer.style.fill === 'auto') {\n pointer.setStyle('fill', getColor(linearMap(data.get(valueDim, idx), valueExtent, [0, 1], true)));\n }\n\n graphic.setHoverStyle(pointer, itemModel.getModel('emphasis.itemStyle').getItemStyle());\n });\n this._data = data;\n },\n _renderTitle: function (seriesModel, ecModel, api, getColor, posInfo) {\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var titleModel = seriesModel.getModel('title');\n\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 var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n var value = seriesModel.getData().get(valueDim, 0);\n var autoColor = getColor(linearMap(value, [minVal, maxVal], [0, 1], true));\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 }, {\n autoColor: autoColor,\n forceRich: true\n })\n }));\n }\n },\n _renderDetail: function (seriesModel, ecModel, api, getColor, posInfo) {\n var detailModel = seriesModel.getModel('detail');\n var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n\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(linearMap(value, [minVal, maxVal], [0, 1], true));\n this.group.add(new graphic.Text({\n silent: true,\n style: graphic.setTextStyle({}, detailModel, {\n x: x,\n y: y,\n text: formatLabel( // FIXME First data name ?\n value, detailModel.get('formatter')),\n textWidth: isNaN(width) ? null : width,\n textHeight: isNaN(height) ? null : height,\n textAlign: 'center',\n textVerticalAlign: 'middle'\n }, {\n autoColor: autoColor,\n forceRich: true\n })\n }));\n }\n }\n});\nvar _default = GaugeView;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./lines/LinesSeries\");\n\nrequire(\"./lines/LinesView\");\n\nvar linesLayout = require(\"./lines/linesLayout\");\n\nvar linesVisual = require(\"./lines/linesVisual\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerLayout(linesLayout);\necharts.registerVisual(linesVisual);","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Fix for 钓鱼岛\n// var Region = require('../Region');\n// var zrUtil = require('zrender/src/core/util');\n// var geoCoord = [126, 25];\nvar points = [[[123.45165252685547, 25.73527164402261], [123.49731445312499, 25.73527164402261], [123.49731445312499, 25.750734064600884], [123.45165252685547, 25.750734064600884], [123.45165252685547, 25.73527164402261]]];\n\nfunction _default(mapType, region) {\n if (mapType === 'china' && region.name === '台湾') {\n region.geometries.push({\n type: 'polygon',\n exterior: points[0]\n });\n }\n}\n\nmodule.exports = _default;","var env = require(\"../core/env\");\n\nvar _vector = require(\"../core/vector\");\n\nvar applyTransform = _vector.applyTransform;\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\nvar colorTool = require(\"../tool/color\");\n\nvar textContain = require(\"../contain/text\");\n\nvar textHelper = require(\"../graphic/helper/text\");\n\nvar RectText = require(\"../graphic/mixin/RectText\");\n\nvar Displayable = require(\"../graphic/Displayable\");\n\nvar ZImage = require(\"../graphic/Image\");\n\nvar Text = require(\"../graphic/Text\");\n\nvar Path = require(\"../graphic/Path\");\n\nvar PathProxy = require(\"../core/PathProxy\");\n\nvar Gradient = require(\"../graphic/Gradient\");\n\nvar vmlCore = require(\"./core\");\n\n// http://www.w3.org/TR/NOTE-VML\n// TODO Use proxy like svg instead of overwrite brush methods\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 var comma = ',';\n var imageTransformPrefix = 'progid:DXImageTransform.Microsoft';\n var Z = 21600;\n var Z2 = Z / 2;\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, '&').replace(/\"/g, '"');\n };\n\n var rgb2Str = function (r, g, b) {\n return 'rgb(' + [r, g, b].join(',') + ')';\n };\n\n var append = function (parent, child) {\n if (child && parent && child.parentNode !== parent) {\n parent.appendChild(child);\n }\n };\n\n var remove = function (parent, child) {\n if (child && parent && child.parentNode === parent) {\n parent.removeChild(child);\n }\n };\n\n var getZIndex = function (zlevel, z, z2) {\n // z 的取值范围为 [0, 1000]\n return (parseFloat(zlevel) || 0) * ZLEVEL_BASE + (parseFloat(z) || 0) * Z_BASE + z2;\n };\n\n var parsePercent = textHelper.parsePercent;\n /***************************************************\n * PATH\n **************************************************/\n\n var setColorAndOpacity = function (el, color, opacity) {\n var colorArr = colorTool.parse(color);\n opacity = +opacity;\n\n if (isNaN(opacity)) {\n opacity = 1;\n }\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 [rgb2Str(colorArr[0], colorArr[1], colorArr[2]), colorArr[3]];\n };\n\n var updateFillNode = function (el, style, zrEl) {\n // TODO pattern\n var fill = style.fill;\n\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]; // additional offset\n\n var shift = 0; // scale factor for offset\n\n var expansion = 1;\n var rect = zrEl.getBoundingRect();\n var rectWidth = rect.width;\n var rectHeight = rect.height;\n\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\n if (transform) {\n applyTransform(p0, p0, transform);\n applyTransform(p1, p1, transform);\n }\n\n var dx = p1[0] - p0[0];\n var dy = p1[1] - p0[1];\n angle = Math.atan2(dx, dy) * 180 / Math.PI; // The angle should be a non-negative number.\n\n if (angle < 0) {\n angle += 360;\n } // Very small angles produce an unexpected result because they are\n // converted to a scientific notation string.\n\n\n if (angle < 1e-6) {\n angle = 0;\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 = [// Percent in bounding rect\n (p0[0] - rect.x) / width, (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 } // We need to sort the color stops in ascending order by offset,\n // otherwise IE won't interpret it correctly.\n\n\n var stops = fill.colorStops.slice();\n stops.sort(function (cs1, cs2) {\n return cs1.offset - cs2.offset;\n });\n var length = stops.length; // Color and alpha list of first and last stop\n\n var colorAndAlphaList = [];\n var colors = [];\n\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\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 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(','); // When colors attribute is used, the meanings of opacity and o:opacity2\n // are reversed.\n\n el.opacity = opacity2; // FIXME g_o_:opacity ?\n\n el.opacity2 = opacity1;\n }\n\n if (gradientType === 'radial') {\n el.focusposition = focus.join(',');\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\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]; // Stroke must have lineWidth\n\n if (style[type] != null && style[type] !== 'none' && (isFill || !isFill && style.lineWidth)) {\n vmlEl[isFill ? 'filled' : 'stroked'] = 'true'; // FIXME Remove before updating, or set `colors` will throw error\n\n if (style[type] instanceof Gradient) {\n remove(vmlEl, el);\n }\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 } else {\n vmlEl[isFill ? 'filled' : 'stroked'] = 'false';\n remove(vmlEl, el);\n }\n };\n\n var points = [[], [], []];\n\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 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\n for (i = 0; i < dataLength;) {\n cmd = data[i++];\n cmdStr = '';\n nPoint = 0;\n\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\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\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\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 } else {\n x3 = data[i++];\n y3 = data[i++];\n }\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 xi = x3;\n yi = y3;\n break;\n\n case A:\n var x = 0;\n var y = 0;\n var sx = 1;\n var sy = 1;\n var angle = 0;\n\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; // FIXME\n // var psi = data[i++];\n\n i++;\n var clockwise = data[i++];\n var x0 = cx + cos(startAngle) * rx;\n var y0 = cy + sin(startAngle) * ry;\n var x1 = cx + cos(endAngle) * rx;\n var y1 = cy + sin(endAngle) * ry;\n var type = clockwise ? ' wa ' : ' at ';\n\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 } 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 } else {\n y1 += 270 / Z;\n }\n } else if (clockwise && y0 < cy || !clockwise && y0 > cy) {\n x1 += 270 / Z;\n } else {\n x1 -= 270 / Z;\n }\n }\n }\n\n str.push(type, round(((cx - rx) * sx + x) * Z - Z2), comma, round(((cy - ry) * sy + y) * Z - Z2), comma, round(((cx + rx) * sx + x) * Z - Z2), comma, round(((cy + ry) * sy + y) * Z - Z2), comma, round((x0 * sx + x) * Z - Z2), comma, round((y0 * sy + y) * Z - Z2), comma, round((x1 * sx + x) * Z - Z2), comma, round((y1 * sy + y) * Z - Z2));\n xi = x1;\n yi = y1;\n break;\n\n case CMD.R:\n var p0 = points[0];\n var p1 = points[1]; // x0, y0\n\n p0[0] = data[i++];\n p0[1] = data[i++]; // x1, y1\n\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( // x0, y0\n ' m ', p0[0], comma, p0[1], // x1, y0\n ' l ', p1[0], comma, p0[1], // x1, y1\n ' l ', p1[0], comma, p1[1], // x0, y1\n ' l ', p0[0], comma, p1[1]);\n break;\n\n case CMD.Z:\n // FIXME Update xi, yi\n str.push(' x ');\n }\n\n if (nPoint > 0) {\n str.push(cmdStr);\n\n for (var k = 0; k < nPoint; k++) {\n var p = points[k];\n m && applyTransform(p, p, m); // 不 round 会非常慢\n\n str.push(round(p[0] * Z - Z2), comma, round(p[1] * Z - Z2), k < nPoint - 1 ? comma : '');\n }\n }\n }\n\n return str.join('');\n }; // Rewrite the original path method\n\n\n Path.prototype.brushVML = function (vmlRoot) {\n var style = this.style;\n var vmlEl = this._vmlEl;\n\n if (!vmlEl) {\n vmlEl = vmlCore.createNode('shape');\n initRootElStyle(vmlEl);\n this._vmlEl = vmlEl;\n }\n\n updateFillAndStroke(vmlEl, 'fill', style, this);\n updateFillAndStroke(vmlEl, 'stroke', style, this);\n var m = this.transform;\n var needTransform = m != null;\n var strokeEl = vmlEl.getElementsByTagName('stroke')[0];\n\n if (strokeEl) {\n var lineWidth = style.lineWidth; // 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\n if (needTransform && !style.strokeNoScale) {\n var det = m[0] * m[3] - m[1] * m[2];\n lineWidth *= sqrt(abs(det));\n }\n\n strokeEl.weight = lineWidth + 'px';\n }\n\n var path = this.path || (this.path = new PathProxy());\n\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 vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); // Append to root\n\n append(vmlRoot, vmlEl); // Text\n\n if (style.text != null) {\n this.drawRectText(vmlRoot, this.getBoundingRect());\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 * IMAGE\n **************************************************/\n\n\n var isImage = function (img) {\n // FIXME img instanceof Image 如果 img 是一个字符串的时候,IE8 下会报错\n return typeof img === 'object' && img.tagName && img.tagName.toUpperCase() === 'IMG'; // return img instanceof Image;\n }; // Rewrite the original path method\n\n\n ZImage.prototype.brushVML = function (vmlRoot) {\n var style = this.style;\n var image = style.image; // Image original width, height\n\n var ow;\n var oh;\n\n if (isImage(image)) {\n var src = image.src;\n\n if (src === this._imageSrc) {\n ow = this._imageWidth;\n oh = this._imageHeight;\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'; // get the original size\n\n ow = image.width;\n oh = image.height; // and remove overides\n\n imageRuntimeStyle.width = oldRuntimeWidth;\n imageRuntimeStyle.height = oldRuntimeHeight; // Caching image original width, height and src\n\n this._imageSrc = src;\n this._imageWidth = ow;\n this._imageHeight = oh;\n }\n\n image = src;\n } else {\n if (image === this._imageSrc) {\n ow = this._imageWidth;\n oh = this._imageHeight;\n }\n }\n\n if (!image) {\n return;\n }\n\n var x = style.x || 0;\n var y = style.y || 0;\n var dw = style.width;\n var dh = style.height;\n var sw = style.sWidth;\n var sh = style.sHeight;\n var sx = style.sx || 0;\n var sy = style.sy || 0;\n var hasCrop = sw && sh;\n var vmlEl = this._vmlEl;\n\n if (!vmlEl) {\n // FIXME 使用 group 在 left, top 都不是 0 的时候就无法显示了。\n // vmlEl = vmlCore.createNode('group');\n vmlEl = vmlCore.doc.createElement('div');\n initRootElStyle(vmlEl);\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\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 hasRotation = m[1] || m[2];\n }\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 var maxX = mathMax(p0[0], p1[0], p2[0], p3[0]);\n var maxY = mathMax(p0[1], p1[1], p2[1], p3[1]);\n var transformFilter = [];\n transformFilter.push('M11=', m[0] / scaleX, comma, 'M12=', m[2] / scaleY, comma, 'M21=', m[1] / scaleX, comma, 'M22=', m[3] / scaleY, comma, 'Dx=', round(x * scaleX + m[4]), comma, 'Dy=', round(y * scaleY + m[5]));\n vmlElStyle.padding = '0 ' + round(maxX) + 'px ' + round(maxY) + 'px 0'; // FIXME DXImageTransform 在 IE11 的兼容模式下不起作用\n\n vmlElStyle.filter = imageTransformPrefix + '.Matrix(' + transformFilter.join('') + ', SizingMethod=clip)';\n } else {\n if (m) {\n x = x * scaleX + m[4];\n y = y * scaleY + m[5];\n }\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\n var imageELStyle = imageEl.style;\n\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\n tmpImage.onload = function () {\n tmpImage.onload = null;\n ow = tmpImage.width;\n oh = tmpImage.height; // Adjust image width and height to fit the ratio destinationSize / sourceSize\n\n imageELStyle.width = round(scaleX * ow * dw / sw) + 'px';\n imageELStyle.height = round(scaleY * oh * dh / sh) + 'px'; // Caching image original width, height and src\n\n self._imageWidth = ow;\n self._imageHeight = oh;\n self._imageSrc = image;\n };\n\n tmpImage.src = image;\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\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=' + -sx * dw / sw * scaleX + ',Dy=' + -sy * dh / sh * scaleY + ')';\n\n if (!cropEl.parentNode) {\n vmlEl.appendChild(cropEl);\n }\n\n if (imageEl.parentNode !== cropEl) {\n cropEl.appendChild(imageEl);\n }\n } else {\n imageELStyle.width = round(scaleX * dw) + 'px';\n imageELStyle.height = round(scaleY * dh) + 'px';\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\n if (alpha < 1) {\n filterStr += '.Alpha(opacity=' + round(alpha * 100) + ') ';\n }\n\n filterStr += imageTransformPrefix + '.AlphaImageLoader(src=' + image + ', SizingMethod=scale)';\n imageELStyle.filter = filterStr;\n vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); // Append to root\n\n append(vmlRoot, vmlEl); // Text\n\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 this._vmlEl = null;\n this._cropEl = null;\n this._imageEl = null;\n this.removeRectText(vmlRoot);\n };\n\n ZImage.prototype.onAdd = function (vmlRoot) {\n append(vmlRoot, this._vmlEl);\n this.appendRectText(vmlRoot);\n };\n /***************************************************\n * TEXT\n **************************************************/\n\n\n var DEFAULT_STYLE_NORMAL = 'normal';\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\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\n try {\n style.font = fontString;\n fontFamily = style.fontFamily.split(',')[0];\n } catch (e) {}\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 fontStyleCache[fontString] = fontStyle;\n fontStyleCacheCount++;\n }\n\n return fontStyle;\n };\n\n var textMeasureEl; // Overwrite measure text method\n\n textContain.$override('measureText', function (text, textFont) {\n var doc = vmlCore.doc;\n\n if (!textMeasureEl) {\n textMeasureEl = doc.createElement('div');\n textMeasureEl.style.cssText = 'position:absolute;top:-20000px;left:0;' + '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 } catch (ex) {// Ignore failures to set to invalid font.\n }\n\n textMeasureEl.innerHTML = ''; // Don't use innerHTML or innerText because they allow markup/whitespace.\n\n textMeasureEl.appendChild(doc.createTextNode(text));\n return {\n width: textMeasureEl.offsetWidth\n };\n });\n var tmpRect = new BoundingRect();\n\n var drawRectText = function (vmlRoot, rect, textRect, fromTextEl) {\n var style = this.style; // Optimize, avoid normalize every time.\n\n this.__dirty && textHelper.normalizeTextStyle(style, true);\n var text = style.text; // Convert to string\n\n text != null && (text += '');\n\n if (!text) {\n return;\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\n\n if (style.rich) {\n var contentBlock = textContain.parseRichText(text, style);\n text = [];\n\n for (var i = 0; i < contentBlock.lines.length; i++) {\n var tokens = contentBlock.lines[i].tokens;\n var textLine = [];\n\n for (var j = 0; j < tokens.length; j++) {\n textLine.push(tokens[j].text);\n }\n\n text.push(textLine.join(''));\n }\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 var fontStyle = getFontStyle(style.font); // FIXME encodeHtmlAttribute ?\n\n var font = fontStyle.style + ' ' + fontStyle.variant + ' ' + fontStyle.weight + ' ' + fontStyle.size + 'px \"' + fontStyle.family + '\"';\n textRect = textRect || textContain.getBoundingRect(text, font, align, verticalAlign, style.textPadding, style.textLineHeight); // Transform rect to view space\n\n var m = this.transform; // Ignore transform for text in other element\n\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; // Text position represented by coord\n\n if (textPosition instanceof Array) {\n x = rect.x + parsePercent(textPosition[0], rect.width);\n y = rect.y + parsePercent(textPosition[1], rect.height);\n align = align || 'left';\n } else {\n var res = this.calculateTextPosition ? this.calculateTextPosition({}, style, rect) : textContain.calculateTextPosition({}, style, rect);\n x = res.x;\n y = res.y; // Default align and baseline when has textPosition\n\n align = align || res.textAlign;\n verticalAlign = verticalAlign || res.textVerticalAlign;\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); // Force baseline 'middle'\n\n y += textRect.height / 2; // 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 // 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 var textVmlEl = this._textVmlEl;\n var pathEl;\n var textPathEl;\n var skewEl;\n\n if (!textVmlEl) {\n textVmlEl = createNode('line');\n pathEl = createNode('path');\n textPathEl = createNode('textpath');\n skewEl = createNode('skew'); // FIXME Why here is not cammel case\n // Align 'center' seems wrong\n\n textPathEl.style['v-text-align'] = 'left';\n initRootElStyle(textVmlEl);\n pathEl.textpathok = true;\n textPathEl.on = true;\n textVmlEl.from = '0 0';\n textVmlEl.to = '1000 0.05';\n append(textVmlEl, skewEl);\n append(textVmlEl, pathEl);\n append(textVmlEl, textPathEl);\n this._textVmlEl = textVmlEl;\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; // Ignore transform for text in other element\n\n if (m && fromTextEl) {\n applyTransform(coords, coords, m);\n skewEl.on = true;\n skewEl.matrix = m[0].toFixed(3) + comma + m[2].toFixed(3) + comma + m[1].toFixed(3) + comma + m[3].toFixed(3) + ',0,0'; // Text position\n\n skewEl.offset = (round(coords[0]) || 0) + ',' + (round(coords[1]) || 0); // Left top point as origin\n\n skewEl.origin = '0 0';\n textVmlElStyle.left = '0px';\n textVmlElStyle.top = '0px';\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); // TODO\n\n try {\n textPathEl.style.font = font;\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\n }, this);\n textVmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2); // Attached to root\n\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]; // In case Displayable has been mixed in RectText\n\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\n if (style.text != null) {\n this.drawRectText(vmlRoot, {\n x: style.x || 0,\n y: style.y || 0,\n width: 0,\n height: 0\n }, this.getBoundingRect(), true);\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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 polygonContain = require(\"zrender/lib/contain/polygon\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _graphic = require(\"../../util/graphic\");\n\nvar linePolygonIntersect = _graphic.linePolygonIntersect;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\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 && area.boundingRect.contain(itemLayout[0], itemLayout[1]) && 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) || polygonContain.contain(points, x + width, y) || polygonContain.contain(points, x, y + height) || polygonContain.contain(points, x + width, y + height) || BoundingRect.create(itemLayout).contain(p[0], p[1]) || linePolygonIntersect(x, y, x + width, y, points) || linePolygonIntersect(x, y, x, y + height, points) || linePolygonIntersect(x + width, y, x + width, y + height, points) || linePolygonIntersect(x, y + height, x + width, y + height, points)) {\n return true;\n }\n }\n }\n};\n\nfunction getLineSelectors(xyIndex) {\n var xy = ['x', 'y'];\n var wh = ['width', 'height'];\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 = [itemLayout[xy[xyIndex]], itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]]];\n layoutRange[1] < layoutRange[0] && layoutRange.reverse();\n return inLineRange(layoutRange[0], range) || inLineRange(layoutRange[1], range) || inLineRange(range[0], layoutRange) || inLineRange(range[1], layoutRange);\n }\n }\n };\n}\n\nfunction inLineRange(p, range) {\n return range[0] <= p && p <= range[1];\n}\n\nvar _default = selector;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar MarkerModel = require(\"./MarkerModel\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = MarkerModel.extend({\n type: 'markPoint',\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = echarts.extendComponentModel({\n type: 'tooltip',\n dependencies: ['axisPointer'],\n defaultOption: {\n zlevel: 0,\n z: 60,\n show: true,\n // tooltip主体内容\n showContent: true,\n // 'trigger' only works on coordinate system.\n // 'item' | 'axis' | 'none'\n trigger: 'item',\n // 'click' | 'mousemove' | 'none'\n triggerOn: 'mousemove|click',\n alwaysShowContent: false,\n displayMode: 'single',\n // 'single' | 'multipleByCoordSys'\n renderMode: 'auto',\n // '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 // 位置 {Array} | {Function}\n // position: null\n // Consider triggered from axisPointer handle, verticalAlign should be 'middle'\n // align: null,\n // verticalAlign: null,\n // 是否约束 content 在 viewRect 中。默认 false 是为了兼容以前版本。\n confine: false,\n // 内容格式器:{string}(Template) ¦ {Function}\n // formatter: null\n showDelay: 0,\n // 隐藏延迟,单位ms\n hideDelay: 100,\n // 动画变换时间,单位s\n transitionDuration: 0.4,\n enterable: false,\n // 提示背景颜色,默认为透明度为0.7的黑色\n backgroundColor: 'rgba(50,50,50,0.7)',\n // 提示边框颜色\n borderColor: '#333',\n // 提示边框圆角,单位px,默认为4\n borderRadius: 4,\n // 提示边框线宽,单位px,默认为0(无边框)\n borderWidth: 0,\n // 提示内边距,单位px,默认各方向内边距为5,\n // 接受数组分别设定上右下左边距,同css\n padding: 5,\n // Extra css text\n extraCssText: '',\n // 坐标轴指示器,坐标轴触发有效\n axisPointer: {\n // 默认为直线\n // 可选为:'line' | 'shadow' | 'cross'\n type: 'line',\n // type 为 line 的时候有效,指定 tooltip line 所在的轴,可选\n // 可选 'x' | 'y' | 'angle' | 'radius' | 'auto'\n // 默认 'auto',会选择类型为 category 的轴,对于双数值轴,笛卡尔坐标系会默认选择 x 轴\n // 极坐标系会默认选择 angle 轴\n axis: 'auto',\n animation: 'auto',\n animationDurationUpdate: 200,\n animationEasingUpdate: 'exponentialOut',\n crossStyle: {\n color: '#999',\n width: 1,\n type: 'dashed',\n // TODO formatter\n textStyle: {} // lineStyle and shadowStyle should not be specified here,\n // otherwise it will always override those styles on option.axisPointer.\n\n }\n },\n textStyle: {\n color: '#fff',\n fontSize: 14\n }\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar Axis = require(\"../Axis\");\n\nvar _model = require(\"../../util/model\");\n\nvar makeInner = _model.makeInner;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar inner = makeInner();\n\nfunction AngleAxis(scale, angleExtent) {\n angleExtent = angleExtent || [0, 360];\n Axis.call(this, 'angle', scale, angleExtent);\n /**\n * Axis type\n * - 'category'\n * - 'value'\n * - 'time'\n * - 'log'\n * @type {string}\n */\n\n this.type = 'category';\n}\n\nAngleAxis.prototype = {\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 dataToAngle: Axis.prototype.dataToCoord,\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 var ordinalScale = axis.scale;\n var ordinalExtent = ordinalScale.getExtent(); // Providing this method is for optimization:\n // avoid generating a long array by `getTicks`\n // in large category data case.\n\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); // Not precise, just use height as text width\n // and each distance from axis line yet.\n\n var rect = textContain.getBoundingRect(tickValue, labelModel.getFont(), 'center', 'top');\n var maxH = Math.max(rect.height, 7);\n var dh = maxH / unitH; // 0/0 is NaN, 1/0 is Infinity.\n\n isNaN(dh) && (dh = Infinity);\n var interval = Math.max(0, Math.floor(dh));\n var cache = inner(axis.model);\n var lastAutoInterval = cache.lastAutoInterval;\n var lastTickCount = cache.lastTickCount; // 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\n if (lastAutoInterval != null && lastTickCount != null && Math.abs(lastAutoInterval - interval) <= 1 && Math.abs(lastTickCount - tickCount) <= 1 // Always choose the bigger one, otherwise the critical\n // point is not the same when zooming in or zooming out.\n && lastAutoInterval > interval) {\n interval = lastAutoInterval;\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};\nzrUtil.inherits(AngleAxis, Axis);\nvar _default = AngleAxis;\nmodule.exports = _default;","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof-raw');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\n\n// Opera ~12 has broken Object#toString\nvar BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;\n\n// `ToNumber` abstract operation\n// https://tc39.github.io/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n var first, third, radix, maxCode, digits, length, index, code;\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = it.charCodeAt(0);\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = it.slice(2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = digits.charCodeAt(index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.github.io/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var dummy = this;\n return dummy instanceof NumberWrapper\n // check on 1..constructor(foo) case\n && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)\n ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\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 zrUtil = require(\"zrender/lib/core/util\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar Tree = require(\"../../data/Tree\");\n\nvar _treeHelper = require(\"../helper/treeHelper\");\n\nvar wrapTreePathInfo = _treeHelper.wrapTreePathInfo;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = SeriesModel.extend({\n type: 'series.sunburst',\n\n /**\n * @type {module:echarts/data/Tree~Node}\n */\n _viewRoot: null,\n getInitialData: function (option, ecModel) {\n // Create a virtual root.\n var root = {\n name: option.name,\n children: option.data\n };\n completeTreeValue(root);\n var levels = option.levels || []; // levels = option.levels = setDefault(levels, ecModel);\n\n var treeOption = {};\n treeOption.levels = levels; // 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\n return Tree.createTree(root, this, treeOption).data;\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 var node = this.getData().tree.getNodeByDataIndex(dataIndex);\n params.treePathInfo = wrapTreePathInfo(node, this);\n return params;\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n // 默认全局居中\n center: ['50%', '50%'],\n radius: [0, '75%'],\n // 默认顺时针\n clockwise: true,\n startAngle: 90,\n // 最小角度改为0\n minAngle: 0,\n percentPrecision: 2,\n // If still show when all data zero.\n stillShowZeroSum: true,\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 // 'rootToNode', 'link', or false\n nodeClick: 'rootToNode',\n renderLabelForZeroData: false,\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 },\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 },\n highlight: {\n itemStyle: {\n opacity: 1\n }\n },\n downplay: {\n itemStyle: {\n opacity: 0.5\n },\n label: {\n opacity: 0.6\n }\n },\n // Animation type canbe expansion, scale\n animationType: 'expansion',\n animationDuration: 1000,\n animationDurationUpdate: 500,\n animationEasing: 'cubicOut',\n data: [],\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 getViewRoot: function () {\n return this._viewRoot;\n },\n\n /**\n * @param {module:echarts/data/Tree~Node} [viewRoot]\n */\n resetViewRoot: function (viewRoot) {\n viewRoot ? this._viewRoot = viewRoot : viewRoot = this._viewRoot;\n var root = this.getRawData().tree.root;\n\n if (!viewRoot || viewRoot !== root && !root.contains(viewRoot)) {\n this._viewRoot = root;\n }\n }\n});\n/**\n * @param {Object} dataNode\n */\n\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 zrUtil.each(dataNode.children, function (child) {\n completeTreeValue(child);\n var childValue = child.value;\n zrUtil.isArray(childValue) && (childValue = childValue[0]);\n sum += childValue;\n });\n var thisValue = dataNode.value;\n\n if (zrUtil.isArray(thisValue)) {\n thisValue = thisValue[0];\n }\n\n if (thisValue == null || isNaN(thisValue)) {\n thisValue = sum;\n } // Value should not less than 0.\n\n\n if (thisValue < 0) {\n thisValue = 0;\n }\n\n zrUtil.isArray(dataNode.value) ? dataNode.value[0] = thisValue : dataNode.value = thisValue;\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction 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' ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));\n }, this);\n}\n\nfunction _default(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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"../coord/cartesian/Grid\");\n\nrequire(\"./bar/PictorialBarSeries\");\n\nrequire(\"./bar/PictorialBarView\");\n\nvar _barGrid = require(\"../layout/barGrid\");\n\nvar layout = _barGrid.layout;\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nrequire(\"../component/gridSimple\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// In case developer forget to include grid component\necharts.registerLayout(zrUtil.curry(layout, 'pictorialBar'));\necharts.registerVisual(visualSymbol('pictorialBar', 'roundRect'));","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar visualSolution = require(\"../../visual/visualSolution\");\n\nvar VisualMapping = require(\"../../visual/VisualMapping\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar VISUAL_PRIORITY = echarts.PRIORITY.VISUAL.COMPONENT;\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\n if (!visualMapModel.isTargetSeries(seriesModel) || pipelineContext && pipelineContext.large) {\n return;\n }\n\n resetDefines.push(visualSolution.incrementalApplyVisual(visualMapModel.stateList, visualMapModel.targetVisuals, zrUtil.bind(visualMapModel.getValueState, visualMapModel), visualMapModel.getDataDimension(seriesModel.getData())));\n });\n return resetDefines;\n }\n}); // Only support color.\n\necharts.registerVisual(VISUAL_PRIORITY, {\n createOnAllSeries: true,\n reset: function (seriesModel, ecModel) {\n var data = seriesModel.getData();\n var visualMetaList = [];\n ecModel.eachComponent('visualMap', function (visualMapModel) {\n if (visualMapModel.isTargetSeries(seriesModel)) {\n var visualMeta = visualMapModel.getVisualMeta(zrUtil.bind(getColorVisual, null, seriesModel, visualMapModel)) || {\n stops: [],\n outerColors: []\n };\n var concreteDim = visualMapModel.getDataDimension(data);\n var dimInfo = data.getDimensionInfo(concreteDim);\n\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 }); // console.log(JSON.stringify(visualMetaList.map(a => a.stops)));\n\n seriesModel.getData().setVisual('visualMeta', visualMetaList);\n }\n}); // FIXME\n// performance and export for heatmap?\n// value can be Infinity or -Infinity\n\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\n for (var i = 0, len = visualTypes.length; i < len; i++) {\n var type = visualTypes[i];\n var mapping = mappings[type === 'opacity' ? '__alphaForOpacity' : type];\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* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar opacityAccessPath = ['lineStyle', 'normal', 'opacity'];\nvar _default = {\n seriesType: 'parallel',\n reset: function (seriesModel, ecModel, api) {\n var itemStyleModel = seriesModel.getModel('itemStyle');\n var lineStyleModel = seriesModel.getModel('lineStyle');\n var globalColors = ecModel.get('color');\n var color = lineStyleModel.get('color') || itemStyleModel.get('color') || globalColors[seriesModel.seriesIndex % globalColors.length];\n var inactiveOpacity = seriesModel.get('inactiveOpacity');\n var activeOpacity = seriesModel.get('activeOpacity');\n var lineStyle = seriesModel.getModel('lineStyle').getLineStyle();\n var coordSys = seriesModel.coordinateSystem;\n var data = seriesModel.getData();\n var opacityMap = {\n normal: lineStyle.opacity,\n active: activeOpacity,\n inactive: inactiveOpacity\n };\n data.setVisual('color', color);\n\n function progress(params, data) {\n coordSys.eachActiveState(data, function (activeState, dataIndex) {\n var opacity = opacityMap[activeState];\n\n if (activeState === 'normal' && data.hasItemOption) {\n var itemOpacity = data.getItemModel(dataIndex).get(opacityAccessPath, true);\n itemOpacity != null && (opacity = itemOpacity);\n }\n\n data.setItemVisual(dataIndex, 'opacity', opacity);\n }, params.start, params.end);\n }\n\n return {\n progress: progress\n };\n }\n};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar SymbolDraw = require(\"../helper/SymbolDraw\");\n\nvar LargeSymbolDraw = require(\"../helper/LargeSymbolDraw\");\n\nvar pointsLayout = require(\"../../layout/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*/\necharts.extendChartView({\n type: 'scatter',\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 this._finished = true;\n },\n incrementalPrepareRender: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n\n var symbolDraw = this._updateSymbolDraw(data, seriesModel);\n\n symbolDraw.incrementalPrepareUpdate(data);\n this._finished = false;\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 updateTransform: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData(); // Must mark group dirty and make sure the incremental layer will be cleared\n // PENDING\n\n this.group.dirty();\n\n if (!this._finished || data.count() > 1e4 || !this._symbolDraw.isPersistent()) {\n return {\n update: true\n };\n } else {\n var res = pointsLayout().reset(seriesModel);\n\n if (res.progress) {\n res.progress({\n start: 0,\n end: data.count()\n }, data);\n }\n\n this._symbolDraw.updateLayout(data);\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 _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 ? new LargeSymbolDraw() : new SymbolDraw();\n this._isLargeDraw = isLargeDraw;\n this.group.removeAll();\n }\n\n this.group.add(symbolDraw.group);\n return symbolDraw;\n },\n remove: function (ecModel, api) {\n this._symbolDraw && this._symbolDraw.remove(true);\n this._symbolDraw = null;\n },\n dispose: function () {}\n});","var Path = require(\"../Path\");\n\nvar vec2 = require(\"../../core/vector\");\n\nvar _curve = require(\"../../core/curve\");\n\nvar quadraticSubdivide = _curve.quadraticSubdivide;\nvar cubicSubdivide = _curve.cubicSubdivide;\nvar quadraticAt = _curve.quadraticAt;\nvar cubicAt = _curve.cubicAt;\nvar quadraticDerivativeAt = _curve.quadraticDerivativeAt;\nvar cubicDerivativeAt = _curve.cubicDerivativeAt;\n\n/**\n * 贝塞尔曲线\n * @module zrender/shape/BezierCurve\n */\nvar out = [];\n\nfunction someVectorAt(shape, t, isTangent) {\n var cpx2 = shape.cpx2;\n var cpy2 = shape.cpy2;\n\n if (cpx2 === null || cpy2 === null) {\n return [(isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t), (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)];\n } else {\n return [(isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t), (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)];\n }\n}\n\nvar _default = Path.extend({\n type: 'bezier-curve',\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 // Curve show percent, for animating\n percent: 1\n },\n style: {\n stroke: '#000',\n fill: null\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\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(x1, cpx1, x2, percent, out);\n cpx1 = out[1];\n x2 = out[2];\n quadraticSubdivide(y1, cpy1, y2, percent, out);\n cpy1 = out[1];\n y2 = out[2];\n }\n\n ctx.quadraticCurveTo(cpx1, cpy1, x2, y2);\n } else {\n if (percent < 1) {\n cubicSubdivide(x1, cpx1, cpx2, x2, percent, out);\n cpx1 = out[1];\n cpx2 = out[2];\n x2 = out[3];\n cubicSubdivide(y1, cpy1, cpy2, y2, percent, out);\n cpy1 = out[1];\n cpy2 = out[2];\n y2 = out[3];\n }\n\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n }\n },\n\n /**\n * Get point at percent\n * @param {number} t\n * @return {Array.}\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.}\n */\n tangentAt: function (t) {\n var p = someVectorAt(this.shape, t, true);\n return vec2.normalize(p, p);\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _circularLayoutHelper = require(\"./circularLayoutHelper\");\n\nvar circularLayout = _circularLayoutHelper.circularLayout;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(ecModel) {\n ecModel.eachSeriesByType('graph', function (seriesModel) {\n if (seriesModel.get('layout') === 'circular') {\n circularLayout(seriesModel, 'symbolSize');\n }\n });\n}\n\nmodule.exports = _default;","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 SeriesModel = require(\"../../model/Series\");\n\nvar createDimensions = require(\"../../data/helper/createDimensions\");\n\nvar _dimensionHelper = require(\"../../data/helper/dimensionHelper\");\n\nvar getDimensionTypeByAxis = _dimensionHelper.getDimensionTypeByAxis;\n\nvar List = require(\"../../data/List\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _model = require(\"../../util/model\");\n\nvar groupData = _model.groupData;\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\nvar LegendVisualProvider = require(\"../../visual/LegendVisualProvider\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar DATA_NAME_INDEX = 2;\nvar ThemeRiverSeries = SeriesModel.extend({\n type: 'series.themeRiver',\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); // 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\n this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));\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; // grouped data by name\n\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({\n name: key,\n dataList: items\n });\n });\n var layerNum = layData.length;\n var largestLayer = -1;\n var index = -1;\n\n for (var i = 0; i < layerNum; ++i) {\n var len = layData[i].dataList.length;\n\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\n var name = layData[k].name;\n\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\n for (var l = 0; l < length; ++l) {\n var value = layData[k].dataList[l][0];\n\n if (value === timeValue) {\n keyIndex = l;\n break;\n }\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 var singleAxisModel = ecModel.queryComponents({\n mainType: 'singleAxis',\n index: this.get('singleAxisIndex'),\n id: this.get('singleAxisId')\n })[0];\n var axisType = singleAxisModel.get('type'); // filter the data item with the value of label is undefined\n\n var filterData = zrUtil.filter(option.data, function (dataItem) {\n return dataItem[2] !== undefined;\n }); // ??? TODO design a stage to transfer data for themeRiver and lines?\n\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\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 name: 'time',\n type: getDimensionTypeByAxis(axisType)\n }, {\n name: 'value',\n type: 'float'\n }, {\n name: 'name',\n type: 'ordinal'\n }],\n encodeDefine: {\n single: 0,\n value: 1,\n itemName: 2\n }\n });\n var list = new List(dimensionsInfo, this);\n list.initData(data);\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.>}\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'); // data group by name\n\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({\n name: key,\n indices: items\n });\n });\n return layerSeries;\n },\n\n /**\n * Get data indices for show tooltip content\n * @param {Array.|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\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\n if (dist <= minDist) {\n nestestValue = theValue;\n minDist = dist;\n nearestIdx = layerSeries[i].indices[j];\n }\n }\n\n indices.push(nearestIdx);\n }\n\n return {\n dataIndices: indices,\n nestestValue: nestestValue\n };\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\n if (isNaN(htmlValue) || htmlValue == null) {\n htmlValue = '-';\n }\n\n return encodeHTML(htmlName + ' : ' + htmlValue);\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n coordinateSystem: 'singleAxis',\n // gap in axis's orthogonal orientation\n boundaryGap: ['10%', '10%'],\n // legendHoverLink: true,\n singleAxisIndex: 0,\n animationEasing: 'linear',\n label: {\n margin: 4,\n show: true,\n position: 'left',\n color: '#000',\n fontSize: 11\n },\n emphasis: {\n label: {\n show: true\n }\n }\n }\n});\nvar _default = ThemeRiverSeries;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar LineDraw = require(\"../helper/LineDraw\");\n\nvar EffectLine = require(\"../helper/EffectLine\");\n\nvar Line = require(\"../helper/Line\");\n\nvar Polyline = require(\"../helper/Polyline\");\n\nvar EffectPolyline = require(\"../helper/EffectPolyline\");\n\nvar LargeLineDraw = require(\"../helper/LargeLineDraw\");\n\nvar linesLayout = require(\"./linesLayout\");\n\nvar _createClipPathFromCoordSys = require(\"../helper/createClipPathFromCoordSys\");\n\nvar createClipPath = _createClipPathFromCoordSys.createClipPath;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = echarts.extendChartView({\n type: 'lines',\n init: function () {},\n render: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n\n var lineDraw = this._updateLineDraw(data, seriesModel);\n\n var zlevel = seriesModel.get('zlevel');\n var trailLength = seriesModel.get('effect.trailLength');\n var zr = api.getZr(); // Avoid the drag cause ghost shadow\n // FIXME Better way ?\n // SVG doesn't support\n\n var isSvg = zr.painter.getType() === 'svg';\n\n if (!isSvg) {\n zr.painter.getLayer(zlevel).clear(true);\n } // Config layer with motion blur\n\n\n if (this._lastZlevel != null && !isSvg) {\n zr.configLayer(this._lastZlevel, {\n motionBlur: false\n });\n }\n\n if (this._showEffect(seriesModel) && trailLength) {\n if (!isSvg) {\n zr.configLayer(zlevel, {\n motionBlur: true,\n lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0)\n });\n }\n }\n\n lineDraw.updateData(data);\n var clipPath = seriesModel.get('clip', true) && createClipPath(seriesModel.coordinateSystem, false, seriesModel);\n\n if (clipPath) {\n this.group.setClipPath(clipPath);\n } else {\n this.group.removeClipPath();\n }\n\n this._lastZlevel = zlevel;\n this._finished = true;\n },\n incrementalPrepareRender: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n\n var lineDraw = this._updateLineDraw(data, seriesModel);\n\n lineDraw.incrementalPrepareUpdate(data);\n\n this._clearLayer(api);\n\n this._finished = false;\n },\n incrementalRender: function (taskParams, seriesModel, ecModel) {\n this._lineDraw.incrementalUpdate(taskParams, seriesModel.getData());\n\n this._finished = taskParams.end === seriesModel.getData().count();\n },\n updateTransform: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var pipelineContext = seriesModel.pipelineContext;\n\n if (!this._finished || pipelineContext.large || pipelineContext.progressiveRender) {\n // TODO Don't have to do update in large mode. Only do it when there are millions of data.\n return {\n update: true\n };\n } else {\n // TODO Use same logic with ScatterView.\n // Manually update layout\n var res = linesLayout.reset(seriesModel);\n\n if (res.progress) {\n res.progress({\n start: 0,\n end: data.count()\n }, data);\n }\n\n this._lineDraw.updateLayout();\n\n this._clearLayer(api);\n }\n },\n _updateLineDraw: function (data, seriesModel) {\n var lineDraw = this._lineDraw;\n\n var hasEffect = this._showEffect(seriesModel);\n\n var isPolyline = !!seriesModel.get('polyline');\n var pipelineContext = seriesModel.pipelineContext;\n var isLargeDraw = pipelineContext.large;\n\n if (!lineDraw || hasEffect !== this._hasEffet || isPolyline !== this._isPolyline || isLargeDraw !== this._isLargeDraw) {\n if (lineDraw) {\n lineDraw.remove();\n }\n\n lineDraw = this._lineDraw = isLargeDraw ? new LargeLineDraw() : new LineDraw(isPolyline ? hasEffect ? EffectPolyline : Polyline : hasEffect ? EffectLine : Line);\n this._hasEffet = hasEffect;\n this._isPolyline = isPolyline;\n this._isLargeDraw = isLargeDraw;\n this.group.removeAll();\n }\n\n this.group.add(lineDraw.group);\n return lineDraw;\n },\n _showEffect: function (seriesModel) {\n return !!seriesModel.get('effect.show');\n },\n _clearLayer: function (api) {\n // Not use motion when dragging or zooming\n var zr = api.getZr();\n var isSvg = zr.painter.getType() === 'svg';\n\n if (!isSvg && this._lastZlevel != null) {\n zr.painter.getLayer(this._lastZlevel).clear(true);\n }\n },\n remove: function (ecModel, api) {\n this._lineDraw && this._lineDraw.remove();\n this._lineDraw = null; // Clear motion when lineDraw is removed\n\n this._clearLayer(api);\n },\n dispose: function () {}\n});\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\n/**\n * 椭圆形状\n * @module zrender/graphic/shape/Ellipse\n */\nvar _default = Path.extend({\n type: 'ellipse',\n shape: {\n cx: 0,\n cy: 0,\n rx: 0,\n ry: 0\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\n var oy = b * k; // 垂直控制点偏移量\n // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线\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});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar DEFAULT_TOOLBOX_BTNS = ['rect', 'polygon', 'keep', 'clear'];\n\nfunction _default(option, isNew) {\n var brushComponents = option && option.brush;\n\n if (!zrUtil.isArray(brushComponents)) {\n brushComponents = brushComponents ? [brushComponents] : [];\n }\n\n if (!brushComponents.length) {\n return;\n }\n\n var brushComponentSpecifiedBtns = [];\n zrUtil.each(brushComponents, function (brushOpt) {\n var tbs = brushOpt.hasOwnProperty('toolbox') ? brushOpt.toolbox : [];\n\n if (tbs instanceof Array) {\n brushComponentSpecifiedBtns = brushComponentSpecifiedBtns.concat(tbs);\n }\n });\n var toolbox = option && option.toolbox;\n\n if (zrUtil.isArray(toolbox)) {\n toolbox = toolbox[0];\n }\n\n if (!toolbox) {\n toolbox = {\n feature: {}\n };\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 brushTypes.push.apply(brushTypes, brushComponentSpecifiedBtns);\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"../coord/cartesian/AxisModel\");\n\nrequire(\"./axis/CartesianAxisView\");","var util = require(\"./core/util\");\n\nvar env = require(\"./core/env\");\n\nvar Group = require(\"./container/Group\");\n\nvar timsort = require(\"./core/timsort\");\n\n// Use timsort because in most case elements are partially sorted\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\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\n return a.z - b.z;\n }\n\n return a.zlevel - b.zlevel;\n}\n/**\n * 内容仓库 (M)\n * @alias module:zrender/Storage\n * @constructor\n */\n\n\nvar Storage = function () {\n // jshint ignore:line\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n};\n\nStorage.prototype = {\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.}\n */\n getDisplayList: function (update, includeIgnore) {\n includeIgnore = includeIgnore || false;\n\n if (update) {\n this.updateDisplayList(includeIgnore);\n }\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 var roots = this._roots;\n var displayList = this._displayList;\n\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 env.canvasSupported && timsort(displayList, shapeCompareFunc);\n },\n _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) {\n if (el.ignore && !includeIgnore) {\n return;\n }\n\n el.beforeUpdate();\n\n if (el.__dirty) {\n el.update();\n }\n\n el.afterUpdate();\n var userSetClipPath = el.clipPath;\n\n if (userSetClipPath) {\n // FIXME 效率影响\n if (clipPaths) {\n clipPaths = clipPaths.slice();\n } else {\n clipPaths = [];\n }\n\n var currentClipPath = userSetClipPath;\n var parentClipPath = el; // Recursively add clip path\n\n while (currentClipPath) {\n // clipPath 的变换是基于使用这个 clipPath 的元素\n currentClipPath.parent = parentClipPath;\n currentClipPath.updateTransform();\n clipPaths.push(currentClipPath);\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]; // Force to mark as dirty if group is dirty\n // FIXME __dirtyPath ?\n\n if (el.__dirty) {\n child.__dirty = true;\n }\n\n this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n } // Mark group clean here\n\n\n el.__dirty = false;\n } else {\n el.__clipPaths = clipPaths;\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\n this._roots.push(el);\n },\n\n /**\n * 删除指定的图形(Shape)或者组(Group)\n * @param {string|Array.} [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\n if (root instanceof Group) {\n root.delChildrenFromStorage(this);\n }\n }\n\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\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\n return;\n }\n\n var idx = util.indexOf(this._roots, el);\n\n if (idx >= 0) {\n this.delFromStorage(el);\n\n this._roots.splice(idx, 1);\n\n if (el instanceof Group) {\n el.delChildrenFromStorage(this);\n }\n }\n },\n addToStorage: function (el) {\n if (el) {\n el.__storage = this;\n el.dirty(false);\n }\n\n return this;\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 = this._roots = null;\n },\n displayableSortFunc: shapeCompareFunc\n};\nvar _default = Storage;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar AxisBuilder = require(\"./AxisBuilder\");\n\nvar BrushController = require(\"../helper/BrushController\");\n\nvar brushHelper = require(\"../helper/brushHelper\");\n\nvar graphic = require(\"../../util/graphic\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar elementList = ['axisLine', 'axisTickLabel', 'axisName'];\nvar AxisView = echarts.extendComponentView({\n type: 'parallelAxis',\n\n /**\n * @override\n */\n init: function (ecModel, api) {\n AxisView.superApply(this, 'init', arguments);\n /**\n * @type {module:echarts/component/helper/BrushController}\n */\n\n (this._brushController = new BrushController(api.getZr())).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 this.group.removeAll();\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 var areaSelectStyle = axisModel.getAreaSelectStyle();\n var areaWidth = areaSelectStyle.width;\n var dim = axisModel.axis.dim;\n var axisLayout = coordSys.getAxisLayout(dim);\n var builderOpt = zrUtil.extend({\n strokeContainThreshold: areaWidth\n }, axisLayout);\n var axisBuilder = new AxisBuilder(axisModel, builderOpt);\n zrUtil.each(elementList, axisBuilder.add, axisBuilder);\n\n this._axisGroup.add(axisBuilder.getGroup());\n\n this._refreshBrushController(builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api);\n\n var animationModel = payload && payload.animation === false ? null : axisModel;\n graphic.groupTransition(oldAxisGroup, this._axisGroup, animationModel);\n },\n // /**\n // * @override\n // */\n // updateVisual: function (axisModel, ecModel, api, payload) {\n // this._brushController && this._brushController\n // .updateCovers(getCoverInfoList(axisModel));\n // },\n _refreshBrushController: function (builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api) {\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 // width/height might be negative, which will be\n // normalized in BoundingRect.\n\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.mount({\n enableGlobalPan: true,\n rotation: builderOpt.rotation,\n position: builderOpt.position\n }).setPanels([{\n panelId: 'pl',\n clipPath: brushHelper.makeRectPanelClipPath(rect),\n isTargetByCursor: brushHelper.makeRectIsTargetByCursor(rect, api, coordSysModel),\n getLinearBrushOtherExtent: brushHelper.makeLinearBrushOtherExtent(rect, 0)\n }]).enableBrush({\n brushType: 'lineX',\n brushStyle: areaSelectStyle,\n removeOnClick: true\n }).updateCovers(getCoverInfoList(axisModel));\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 [axis.coordToData(coverInfo.range[0], true), axis.coordToData(coverInfo.range[1], true)];\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\n if (!axisModel.option.realtime === opt.isEnd || opt.removeOnClick) {\n // 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 && payload.type === 'axisAreaSelect' && ecModel.findComponents({\n mainType: 'parallelAxis',\n 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: [axis.dataToCoord(interval[0], true), axis.dataToCoord(interval[1], true)]\n };\n });\n}\n\nfunction getCoordSysModel(axisModel, ecModel) {\n return ecModel.getComponent('parallel', axisModel.get('parallelIndex'));\n}\n\nvar _default = AxisView;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _number = require(\"../../util/number\");\n\nvar round = _number.round;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction createGridClipPath(cartesian, hasAnimation, seriesModel) {\n var rect = cartesian.getArea();\n var isHorizontal = cartesian.getBaseAxis().isHorizontal();\n var x = rect.x;\n var y = rect.y;\n var width = rect.width;\n var height = rect.height;\n var lineWidth = seriesModel.get('lineStyle.width') || 2; // Expand the clip path a bit to avoid the border is clipped and looks thinner\n\n x -= lineWidth / 2;\n y -= lineWidth / 2;\n width += lineWidth;\n height += lineWidth; // fix: https://github.com/apache/incubator-echarts/issues/11369\n\n x = Math.floor(x);\n width = Math.round(width);\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(); // 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\n return clipPath;\n}\n\nfunction createClipPath(coordSys, hasAnimation, seriesModel) {\n if (!coordSys) {\n return null;\n } else if (coordSys.type === 'polar') {\n return createPolarClipPath(coordSys, hasAnimation, seriesModel);\n } else if (coordSys.type === 'cartesian2d') {\n return createGridClipPath(coordSys, hasAnimation, seriesModel);\n }\n\n return null;\n}\n\nexports.createGridClipPath = createGridClipPath;\nexports.createPolarClipPath = createPolarClipPath;\nexports.createClipPath = createClipPath;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"./toolbox/ToolboxModel\");\n\nrequire(\"./toolbox/ToolboxView\");\n\nrequire(\"./toolbox/feature/SaveAsImage\");\n\nrequire(\"./toolbox/feature/MagicType\");\n\nrequire(\"./toolbox/feature/DataView\");\n\nrequire(\"./toolbox/feature/DataZoom\");\n\nrequire(\"./toolbox/feature/Restore\");","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 Group = require(\"zrender/lib/container/Group\");\n\nvar componentUtil = require(\"../util/component\");\n\nvar clazzUtil = require(\"../util/clazz\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar Component = function () {\n /**\n * @type {module:zrender/container/Group}\n * @readOnly\n */\n this.group = new Group();\n /**\n * @type {string}\n * @readOnly\n */\n\n this.uid = componentUtil.getUID('viewComponent');\n};\n\nComponent.prototype = {\n constructor: Component,\n init: function (ecModel, api) {},\n render: function (componentModel, ecModel, api, payload) {},\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};\nvar componentProto = Component.prototype;\n\ncomponentProto.updateView = componentProto.updateLayout = componentProto.updateVisual = function (seriesModel, ecModel, api, payload) {// Do nothing;\n}; // Enable Component.extend.\n\n\nclazzUtil.enableClassExtend(Component); // Enable capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\n\nclazzUtil.enableClassManagement(Component, {\n registerWhenExtend: true\n});\nvar _default = Component;\nmodule.exports = _default;","var Definable = require(\"./Definable\");\n\nvar zrUtil = require(\"../../core/util\");\n\nvar logError = require(\"../../core/log\");\n\nvar colorTool = require(\"../../tool/color\");\n\n/**\n * @file Manages SVG gradient elements.\n * @author Zhang Wenli\n */\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(this, zrId, svgRoot, ['linearGradient', 'radialGradient'], '__gradient_in_use__');\n}\n\nzrUtil.inherits(GradientManager, Definable);\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 */\n\nGradientManager.prototype.addWithoutUpdate = function (svgElement, displayable) {\n if (displayable && displayable.style) {\n var that = this;\n zrUtil.each(['fill', 'stroke'], function (fillOrStroke) {\n if (displayable.style[fillOrStroke] && (displayable.style[fillOrStroke].type === 'linear' || displayable.style[fillOrStroke].type === 'radial')) {\n var gradient = displayable.style[fillOrStroke];\n var defs = that.getDefs(true); // Create dom in if not exists\n\n var dom;\n\n if (gradient._dom) {\n // Gradient exists\n dom = gradient._dom;\n\n if (!defs.contains(gradient._dom)) {\n // _dom is no longer in defs, recreate\n that.addDom(dom);\n }\n } else {\n // New dom\n dom = that.add(gradient);\n }\n\n that.markUsed(displayable);\n var id = dom.getAttribute('id');\n svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n }\n });\n }\n};\n/**\n * Add a new gradient tag in \n *\n * @param {Gradient} gradient zr gradient instance\n * @return {SVGLinearGradientElement | SVGRadialGradientElement}\n * created DOM\n */\n\n\nGradientManager.prototype.add = function (gradient) {\n var dom;\n\n if (gradient.type === 'linear') {\n dom = this.createElement('linearGradient');\n } else if (gradient.type === 'radial') {\n dom = this.createElement('radialGradient');\n } else {\n logError('Illegal gradient type.');\n return null;\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\n\n gradient.id = gradient.id || this.nextId++;\n dom.setAttribute('id', 'zr' + this._zrId + '-gradient-' + gradient.id);\n this.updateDom(gradient, dom);\n this.addDom(dom);\n return dom;\n};\n/**\n * Update gradient.\n *\n * @param {Gradient} gradient zr gradient instance\n */\n\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\n if (type === 'linear' && tagName === 'linearGradient' || type === 'radial' && tagName === 'radialGradient') {\n // Gradient type is not changed, update gradient\n that.updateDom(gradient, gradient._dom);\n } else {\n // Remove and re-create if type is changed\n that.removeDom(gradient);\n that.add(gradient);\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 */\n\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 } else if (gradient.type === 'radial') {\n dom.setAttribute('cx', gradient.x);\n dom.setAttribute('cy', gradient.y);\n dom.setAttribute('r', gradient.r);\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 } else {\n // x1, x2, y1, y2 in range of 0 to 1\n dom.setAttribute('gradientUnits', 'objectBoundingBox');\n } // Remove color stops if exists\n\n\n dom.innerHTML = ''; // Add color stops\n\n var colors = gradient.colorStops;\n\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 var color = colors[i].color;\n\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); // 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\n stop.setAttribute('stop-color', '#' + hex);\n stop.setAttribute('stop-opacity', opacity);\n } else {\n stop.setAttribute('stop-color', colors[i].color);\n }\n\n dom.appendChild(stop);\n } // Store dom element in gradient, to avoid creating multiple\n // dom instances for the same gradient element\n\n\n gradient._dom = dom;\n};\n/**\n * Mark a single gradient to be used\n *\n * @param {Displayable} displayable displayable element\n */\n\n\nGradientManager.prototype.markUsed = function (displayable) {\n if (displayable.style) {\n var gradient = displayable.style.fill;\n\n if (gradient && gradient._dom) {\n Definable.prototype.markUsed.call(this, gradient._dom);\n }\n\n gradient = displayable.style.stroke;\n\n if (gradient && gradient._dom) {\n Definable.prototype.markUsed.call(this, gradient._dom);\n }\n }\n};\n\nvar _default = GradientManager;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar completeDimensions = require(\"./completeDimensions\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\n\n/**\n * @param {module:echarts/data/Source|module:echarts/data/List} source or data.\n * @param {Object|Array} [opt]\n * @param {Array.} [opt.coordDimensions=[]]\n * @param {number} [opt.dimensionsCount]\n * @param {string} [opt.generateCoord]\n * @param {string} [opt.generateCoordCount]\n * @param {Array.} [opt.dimensionsDefine=source.dimensionsDefine] Overwrite source define.\n * @param {Object|HashMap} [opt.encodeDefine=source.encodeDefine] Overwrite source define.\n * @param {Function} [opt.encodeDefaulter] Make default encode if user not specified.\n * @return {Array.} dimensionsInfo\n */\nfunction _default(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 encodeDefaulter: opt.encodeDefaulter,\n generateCoord: opt.generateCoord,\n generateCoordCount: opt.generateCoordCount\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar each = zrUtil.each;\n\nfunction _default(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 } // rename splitList to pieces\n\n\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\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\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar DataDiffer = require(\"../../data/DataDiffer\");\n\nvar helper = require(\"../helper/treeHelper\");\n\nvar Breadcrumb = require(\"./Breadcrumb\");\n\nvar RoamController = require(\"../../component/helper/RoamController\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar animationUtil = require(\"../../util/animation\");\n\nvar makeStyleMapper = require(\"../../model/mixin/makeStyleMapper\");\n\nvar _format = require(\"../../util/format\");\n\nvar windowOpen = _format.windowOpen;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar bind = zrUtil.bind;\nvar Group = graphic.Group;\nvar Rect = graphic.Rect;\nvar each = zrUtil.each;\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.\n\nvar Z_BG = 1;\nvar Z_CONTENT = 2;\nvar getItemStyleEmphasis = makeStyleMapper([['fill', 'color'], // `borderColor` and `borderWidth` has been occupied,\n// so use `stroke` to indicate the stroke of the rect.\n['stroke', 'strokeColor'], ['lineWidth', 'strokeWidth'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor']]);\n\nvar getItemStyleNormal = function (model) {\n // Normal style props should include emphasis style props.\n var itemStyle = getItemStyleEmphasis(model); // Clear styles set by emphasis.\n\n itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null;\n return itemStyle;\n};\n\nvar _default = echarts.extendChartView({\n type: 'treemap',\n\n /**\n * @override\n */\n init: function (o, api) {\n /**\n * @private\n * @type {module:zrender/container/Group}\n */\n this._containerGroup;\n /**\n * @private\n * @type {Object.>}\n */\n\n this._storage = createStorage();\n /**\n * @private\n * @type {module:echarts/data/Tree}\n */\n\n this._oldTree;\n /**\n * @private\n * @type {module:echarts/chart/treemap/Breadcrumb}\n */\n\n this._breadcrumb;\n /**\n * @private\n * @type {module:echarts/component/helper/RoamController}\n */\n\n this._controller;\n /**\n * 'ready', 'animating'\n * @private\n */\n\n this._state = 'ready';\n },\n\n /**\n * @override\n */\n render: function (seriesModel, ecModel, api, payload) {\n var models = ecModel.findComponents({\n mainType: 'series',\n subType: 'treemap',\n query: payload\n });\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 var types = ['treemapZoomToNode', 'treemapRootToNode'];\n var targetInfo = helper.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; // Mark new root when action is treemapRootToNode.\n\n var reRoot = payloadType === 'treemapRootToNode' && targetInfo && thisStorage ? {\n rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()],\n direction: payload.direction\n } : null;\n\n var containerGroup = this._giveContainerGroup(layoutInfo);\n\n var renderResult = this._doRender(containerGroup, seriesModel, reRoot);\n\n !isInit && (!payloadType || payloadType === 'treemapZoomToNode' || payloadType === 'treemapRootToNode') ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot) : 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\n if (!containerGroup) {\n // FIXME\n // 加一层containerGroup是为了clip,但是现在clip功能并没有实现。\n containerGroup = this._containerGroup = new Group();\n\n this._initEvents(containerGroup);\n\n this.group.add(containerGroup);\n }\n\n containerGroup.attr('position', [layoutInfo.x, layoutInfo.y]);\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; // Clear last shape records.\n\n var lastsForAnimation = createStorage();\n var thisStorage = createStorage();\n var oldStorage = this._storage;\n var willInvisibleEls = [];\n var doRenderNode = zrUtil.curry(renderNode, seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls); // 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(thisTree.root ? [thisTree.root] : [], oldTree && oldTree.root ? [oldTree.root] : [], containerGroup, thisTree === oldTree || !oldTree, 0); // Process all removing.\n\n var willDeleteEls = clearStorage(oldStorage);\n this._oldTree = thisTree;\n this._storage = thisStorage;\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 } // 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).add(processNode).update(processNode).remove(zrUtil.curry(processNode, null)).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 var group = doRenderNode(thisNode, oldNode, parentGroup, depth);\n group && dualTravel(thisNode && thisNode.viewChildren || [], oldNode && oldNode.viewChildren || [], group, sameTree, depth + 1);\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; // Setting invisible is for optimizing, so no need to set dirty,\n // just mark as invisible.\n\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(); // Make delete animations.\n\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\n var target;\n\n if (reRoot && reRoot.direction === 'drillDown') {\n target = parent === reRoot.rootNodeGroup // 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 } // Others.\n\n } : {\n style: {\n opacity: 0\n }\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],\n style: {\n opacity: 0\n }\n } : {\n shape: {\n x: targetX,\n y: targetY,\n width: 0,\n height: 0\n },\n style: {\n opacity: 0\n }\n };\n }\n\n target && animationWrap.add(el, target, duration, easing);\n });\n }); // Make other animations\n\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 } 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 = {\n 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 = {\n opacity: 1\n };\n }\n }\n\n animationWrap.add(el, target, duration, easing);\n });\n }, this);\n this._state = 'animating';\n animationWrap.done(bind(function () {\n this._state = 'ready';\n renderResult.renderFinally();\n }, this)).start();\n },\n\n /**\n * @private\n */\n _resetController: function (api) {\n var controller = this._controller; // Init controller.\n\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\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' && (Math.abs(e.dx) > DRAG_THRESHOLD || Math.abs(e.dy) > DRAG_THRESHOLD)) {\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,\n y: rootLayout.y + e.dy,\n width: rootLayout.width,\n 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(rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height);\n var layoutInfo = this.seriesModel.layoutInfo; // Transform mouse coord from global to containerGroup.\n\n mouseX -= layoutInfo.x;\n mouseY -= layoutInfo.y; // Scale root bounding rect.\n\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 rect.applyTransform(m);\n this.api.dispatchAction({\n type: 'treemapRender',\n from: this.uid,\n seriesId: this.seriesModel.id,\n rootRect: {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n 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\n if (node.getLayout().isLeafRoot) {\n this._rootToNode(targetInfo);\n } else {\n if (nodeClick === 'zoomToNode') {\n this._zoomToNode(targetInfo);\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 && windowOpen(link, linkTarget);\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() // FIXME\n // better way?\n // Find breadcrumb tail on center of containerGroup.\n\n } : this.findTarget(api.getWidth() / 2, api.getHeight() / 2);\n\n if (!targetInfo) {\n targetInfo = {\n node: seriesModel.getData().tree.root\n };\n }\n }\n\n (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group))).render(seriesModel, api, targetInfo.node, bind(onSelect, this));\n\n function onSelect(node) {\n if (this._state !== 'animating') {\n helper.aboveViewRoot(seriesModel.getViewRoot(), node) ? this._rootToNode({\n node: node\n }) : this._zoomToNode({\n node: node\n });\n }\n }\n },\n\n /**\n * @override\n */\n remove: function () {\n this._clearController();\n\n this._containerGroup && this._containerGroup.removeAll();\n this._storage = createStorage();\n this._state = 'ready';\n this._breadcrumb && this._breadcrumb.remove();\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 viewRoot.eachNode({\n attr: 'viewChildren',\n order: 'preorder'\n }, function (node) {\n var bgEl = this._storage.background[node.getRawIndex()]; // If invisible, there might be no element.\n\n\n if (bgEl) {\n var point = bgEl.transformCoordToLocal(x, y);\n var shape = bgEl.shape; // For performance consideration, dont use 'getBoundingRect'.\n\n if (shape.x <= point[0] && point[0] <= shape.x + shape.width && shape.y <= point[1] && point[1] <= shape.y + shape.height) {\n targetInfo = {\n node: node,\n offsetX: point[0],\n offsetY: point[1]\n };\n } else {\n return false; // Suppress visit subtree.\n }\n }\n }, this);\n return targetInfo;\n }\n});\n/**\n * @inner\n */\n\n\nfunction createStorage() {\n return {\n nodeGroup: [],\n background: [],\n content: []\n };\n}\n/**\n * @inner\n * @return Return undefined means do not travel further.\n */\n\n\nfunction renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth) {\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 // Start of closure variables available in \"Procedures in renderNode\".\n\n\n var thisLayout = thisNode.getLayout();\n var data = seriesModel.getData(); // Only for enabling highlight/downplay. Clear firstly.\n // Because some node will not be rendered.\n\n data.setItemGraphicEl(thisNode.dataIndex, null);\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 var thisRawIndex = thisNode.getRawIndex();\n var oldRawIndex = oldNode && oldNode.getRawIndex();\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'); // End of closure ariables available in \"Procedures in renderNode\".\n // -----------------------------------------------------------------\n // Node group\n\n var group = giveGraphic('nodeGroup', Group);\n\n if (!group) {\n return;\n }\n\n parentGroup.add(group); // x,y are not set when el is above view root.\n\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 var nodeModel = thisNode.getModel(); // Background\n\n var bg = giveGraphic('background', Rect, depth, Z_BG);\n bg && renderBackground(group, bg, isParent && thisLayout.upperLabelHeight); // No children, render content.\n\n if (isParent) {\n // Because of the implementation about \"traverse\" in graphic hover style, we\n // can not set hover listener on the \"group\" of non-leaf node. Otherwise the\n // hover event from the descendents will be listenered.\n if (graphic.isHighDownDispatcher(group)) {\n graphic.setAsHighDownDispatcher(group, false);\n }\n\n if (bg) {\n graphic.setAsHighDownDispatcher(bg, true); // Only for enabling highlight/downplay.\n\n data.setItemGraphicEl(thisNode.dataIndex, bg);\n }\n } else {\n var content = giveGraphic('content', Rect, depth, Z_CONTENT);\n content && renderContent(group, content);\n\n if (bg && graphic.isHighDownDispatcher(bg)) {\n graphic.setAsHighDownDispatcher(bg, false);\n }\n\n graphic.setAsHighDownDispatcher(group, true); // Only for enabling highlight/downplay.\n\n data.setItemGraphicEl(thisNode.dataIndex, group);\n }\n\n return group; // ----------------------------\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 bg.setShape({\n x: 0,\n y: 0,\n width: thisWidth,\n height: thisHeight\n });\n\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 processInvisible(bg);\n } else {\n bg.invisible = false;\n var visualBorderColor = thisNode.getVisual('borderColor', true);\n var emphasisBorderColor = itemStyleEmphasisModel.get('borderColor');\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 prepareText(normalStyle, emphasisStyle, visualBorderColor, upperLabelWidth, upperHeight, {\n x: borderWidth,\n y: 0,\n width: upperLabelWidth,\n height: upperHeight\n });\n } // For old bg.\n else {\n normalStyle.text = emphasisStyle.text = null;\n }\n\n bg.setStyle(normalStyle);\n graphic.setElementHoverStyle(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 var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0);\n var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0);\n content.culling = true;\n content.setShape({\n x: borderWidth,\n y: borderWidth,\n width: contentWidth,\n height: contentHeight\n });\n\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 processInvisible(content);\n } else {\n content.invisible = false;\n var visualColor = thisNode.getVisual('color', true);\n var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n normalStyle.fill = visualColor;\n var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel);\n prepareText(normalStyle, emphasisStyle, visualColor, contentWidth, contentHeight);\n content.setStyle(normalStyle);\n graphic.setElementHoverStyle(content, emphasisStyle);\n }\n\n group.add(content);\n }\n\n function processInvisible(element) {\n // Delay invisible setting utill animation finished,\n // avoid element vanish suddenly before animation.\n !element.invisible && willInvisibleEls.push(element);\n }\n\n function prepareText(normalStyle, emphasisStyle, visualColor, width, height, upperLabelRect) {\n var defaultText = nodeModel.get('name');\n var normalLabelModel = nodeModel.getModel(upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL);\n var emphasisLabelModel = nodeModel.getModel(upperLabelRect ? PATH_UPPERLABEL_EMPHASIS : PATH_LABEL_EMPHASIS);\n var isShow = normalLabelModel.getShallow('show');\n graphic.setLabelStyle(normalStyle, emphasisStyle, normalLabelModel, emphasisLabelModel, {\n defaultText: isShow ? defaultText : null,\n autoColor: visualColor,\n isRectText: true,\n labelFetcher: seriesModel,\n labelDataIndex: thisNode.dataIndex,\n labelProp: upperLabelRect ? 'upperLabel' : 'label'\n });\n addDrillDownIcon(normalStyle, upperLabelRect, thisLayout);\n addDrillDownIcon(emphasisStyle, upperLabelRect, thisLayout);\n upperLabelRect && (normalStyle.textRect = zrUtil.clone(upperLabelRect));\n normalStyle.truncate = isShow && normalLabelModel.get('ellipsis') ? {\n outerWidth: width,\n outerHeight: height,\n minChar: 2\n } : null;\n }\n\n function addDrillDownIcon(style, upperLabelRect, thisLayout) {\n var text = style.text;\n\n if (!upperLabelRect && thisLayout.isLeafRoot && text != null) {\n var iconChar = seriesModel.get('drillDownIcon', true);\n style.text = iconChar ? iconChar + ' ' + text : text;\n }\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 } // If invisible and no old element, do not create new element (for optimizing).\n else if (!thisInvisible) {\n element = new Ctor({\n z: calculateZ(depth, z)\n });\n element.__tmDepth = depth;\n element.__tmStorageName = storageName;\n prepareAnimationWhenNoOld(lasts, element, storageName);\n } // Set to thisStorage\n\n\n return thisStorage[storageName][thisRawIndex] = element;\n }\n\n function prepareAnimationWhenHasOld(lasts, element, storageName) {\n var lastCfg = lasts[thisRawIndex] = {};\n lastCfg.old = storageName === 'nodeGroup' ? element.position.slice() : zrUtil.extend({}, element.shape);\n } // If a element is new, we need to find the animation start point carefully,\n // otherwise it will looks strange when 'zoomToNode'.\n\n\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; // New nodes appear from right-bottom corner in 'zoomToNode' animation.\n // For convenience, get old bounding rect from background.\n\n var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()];\n\n if (!reRoot && parentOldBg && parentOldBg.old) {\n parentOldX = parentOldBg.old.width;\n parentOldY = parentOldBg.old.height;\n } // When no parent old shape found, its parent is new too,\n // so we can just use {x:0, y:0}.\n\n\n lastCfg.old = storageName === 'nodeGroup' ? [0, parentOldY] : {\n x: parentOldX,\n y: parentOldY,\n width: 0,\n height: 0\n };\n } // Fade in, user can be aware that these nodes are new.\n\n\n lastCfg.fadein = storageName !== 'nodeGroup';\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.\n\n\nfunction calculateZ(depth, zInLevel) {\n var zb = depth * Z_BASE + zInLevel;\n return (zb - 1) / zb;\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar Model = require(\"../../model/Model\");\n\nvar AxisView = require(\"./AxisView\");\n\nvar AxisBuilder = require(\"./AxisBuilder\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar elementList = ['axisLine', 'axisLabel', 'axisTick', 'minorTick', 'splitLine', 'minorSplitLine', '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 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} // Remove the last tick which will overlap the first tick\n\n\nfunction fixAngleOverlap(list) {\n var firstItem = list[0];\n var lastItem = list[list.length - 1];\n\n if (firstItem && lastItem && Math.abs(Math.abs(firstItem.coord - lastItem.coord) - 360) < 1e-4) {\n list.pop();\n }\n}\n\nvar _default = AxisView.extend({\n type: 'angleAxis',\n axisPointerClass: 'PolarAxisPointer',\n render: function (angleAxisModel, ecModel) {\n this.group.removeAll();\n\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 var ticksAngles = angleAxis.getTicksCoords();\n var minorTickAngles = angleAxis.getMinorTicksCoords();\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 fixAngleOverlap(labels);\n fixAngleOverlap(ticksAngles);\n zrUtil.each(elementList, function (name) {\n if (angleAxisModel.get(name + '.show') && (!angleAxis.scale.isBlank() || name === 'axisLine')) {\n this['_' + name](angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels);\n }\n }, this);\n },\n\n /**\n * @private\n */\n _axisLine: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {\n var lineStyleModel = angleAxisModel.getModel('axisLine.lineStyle'); // extent id of the axis radius (r0 and r)\n\n var rId = getRadiusIdx(polar);\n var r0Id = rId ? 0 : 1;\n var shape;\n\n if (radiusExtent[r0Id] === 0) {\n shape = new graphic.Circle({\n shape: {\n cx: polar.cx,\n cy: polar.cy,\n r: radiusExtent[rId]\n },\n style: lineStyleModel.getLineStyle(),\n z2: 1,\n silent: true\n });\n } else {\n shape = new graphic.Ring({\n shape: {\n cx: polar.cx,\n cy: polar.cy,\n r: radiusExtent[rId],\n r0: radiusExtent[r0Id]\n },\n style: lineStyleModel.getLineStyle(),\n z2: 1,\n silent: true\n });\n }\n\n shape.style.fill = null;\n this.group.add(shape);\n },\n\n /**\n * @private\n */\n _axisTick: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {\n var tickModel = angleAxisModel.getModel('axisTick');\n var tickLen = (tickModel.get('inside') ? -1 : 1) * tickModel.get('length');\n var radius = radiusExtent[getRadiusIdx(polar)];\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(lines, {\n style: zrUtil.defaults(tickModel.getModel('lineStyle').getLineStyle(), {\n stroke: angleAxisModel.get('axisLine.lineStyle.color')\n })\n }));\n },\n\n /**\n * @private\n */\n _minorTick: function (angleAxisModel, polar, tickAngles, minorTickAngles, radiusExtent) {\n if (!minorTickAngles.length) {\n return;\n }\n\n var tickModel = angleAxisModel.getModel('axisTick');\n var minorTickModel = angleAxisModel.getModel('minorTick');\n var tickLen = (tickModel.get('inside') ? -1 : 1) * minorTickModel.get('length');\n var radius = radiusExtent[getRadiusIdx(polar)];\n var lines = [];\n\n for (var i = 0; i < minorTickAngles.length; i++) {\n for (var k = 0; k < minorTickAngles[i].length; k++) {\n lines.push(new graphic.Line({\n shape: getAxisLineShape(polar, [radius, radius + tickLen], minorTickAngles[i][k].coord)\n }));\n }\n }\n\n this.group.add(graphic.mergePath(lines, {\n style: zrUtil.defaults(minorTickModel.getModel('lineStyle').getLineStyle(), zrUtil.defaults(tickModel.getLineStyle(), {\n stroke: angleAxisModel.get('axisLine.lineStyle.color')\n }))\n }));\n },\n\n /**\n * @private\n */\n _axisLabel: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels) {\n var rawCategoryData = angleAxisModel.getCategories(true);\n var commonLabelModel = angleAxisModel.getModel('axisLabel');\n var labelMargin = commonLabelModel.get('margin');\n var triggerEvent = angleAxisModel.get('triggerEvent'); // Use length of ticksAngles because it may remove the last tick to avoid overlapping\n\n zrUtil.each(labels, function (labelItem, idx) {\n var labelModel = commonLabelModel;\n var tickValue = labelItem.tickValue;\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 var labelTextAlign = Math.abs(p[0] - cx) / r < 0.3 ? 'center' : p[0] > cx ? 'left' : 'right';\n var labelTextVerticalAlign = Math.abs(p[1] - cy) / r < 0.3 ? 'middle' : p[1] > cy ? 'top' : 'bottom';\n\n if (rawCategoryData && rawCategoryData[tickValue] && rawCategoryData[tickValue].textStyle) {\n labelModel = new Model(rawCategoryData[tickValue].textStyle, commonLabelModel, commonLabelModel.ecModel);\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 }); // Pack data for mouse event\n\n if (triggerEvent) {\n textEl.eventData = AxisBuilder.makeAxisEventDataBase(angleAxisModel);\n textEl.eventData.targetType = 'axisLabel';\n textEl.eventData.value = labelItem.rawLabel;\n }\n }, this);\n },\n\n /**\n * @private\n */\n _splitLine: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {\n var splitLineModel = angleAxisModel.getModel('splitLine');\n var lineStyleModel = splitLineModel.getModel('lineStyle');\n var lineColors = lineStyleModel.get('color');\n var lineCount = 0;\n lineColors = lineColors instanceof Array ? lineColors : [lineColors];\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 } // Simple optimization\n // Batching the lines if color are the same\n\n\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 _minorSplitLine: function (angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent) {\n if (!minorTickAngles.length) {\n return;\n }\n\n var minorSplitLineModel = angleAxisModel.getModel('minorSplitLine');\n var lineStyleModel = minorSplitLineModel.getModel('lineStyle');\n var lines = [];\n\n for (var i = 0; i < minorTickAngles.length; i++) {\n for (var k = 0; k < minorTickAngles[i].length; k++) {\n lines.push(new graphic.Line({\n shape: getAxisLineShape(polar, radiusExtent, minorTickAngles[i][k].coord)\n }));\n }\n }\n\n this.group.add(graphic.mergePath(lines, {\n style: lineStyleModel.getLineStyle(),\n silent: true,\n z: angleAxisModel.get('z')\n }));\n },\n\n /**\n * @private\n */\n _splitArea: function (angleAxisModel, polar, ticksAngles, minorTickAngles, 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 areaColors = areaColors instanceof Array ? areaColors : [areaColors];\n var splitAreas = [];\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 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 } // Simple optimization\n // Batching the lines if color are the same\n\n\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar makeStyleMapper = require(\"../../model/mixin/makeStyleMapper\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar getBarItemStyle = makeStyleMapper([['fill', 'color'], ['stroke', 'borderColor'], ['lineWidth', 'borderWidth'], // Compatitable with 2\n['stroke', 'barBorderColor'], ['lineWidth', 'barBorderWidth'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor']]);\nvar _default = {\n getBarItemStyle: function (excludes) {\n var style = getBarItemStyle(this, excludes);\n\n if (this.getBorderLineDash) {\n var lineDash = this.getBorderLineDash();\n lineDash && (style.lineDash = lineDash);\n }\n\n return style;\n }\n};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrender = require(\"zrender/lib/zrender\");\n\nexports.zrender = zrender;\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nexports.matrix = matrix;\n\nvar vector = require(\"zrender/lib/core/vector\");\n\nexports.vector = vector;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar colorTool = require(\"zrender/lib/tool/color\");\n\nexports.color = colorTool;\n\nvar graphicUtil = require(\"./util/graphic\");\n\nvar numberUtil = require(\"./util/number\");\n\nexports.number = numberUtil;\n\nvar formatUtil = require(\"./util/format\");\n\nexports.format = formatUtil;\n\nvar _throttle = require(\"./util/throttle\");\n\nvar throttle = _throttle.throttle;\nexports.throttle = _throttle.throttle;\n\nvar ecHelper = require(\"./helper\");\n\nexports.helper = ecHelper;\n\nvar parseGeoJSON = require(\"./coord/geo/parseGeoJson\");\n\nexports.parseGeoJSON = parseGeoJSON;\n\nvar _List = require(\"./data/List\");\n\nexports.List = _List;\n\nvar _Model = require(\"./model/Model\");\n\nexports.Model = _Model;\n\nvar _Axis = require(\"./coord/Axis\");\n\nexports.Axis = _Axis;\n\nvar _env = require(\"zrender/lib/core/env\");\n\nexports.env = _env;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\nvar parseGeoJson = parseGeoJSON;\nvar ecUtil = {};\nzrUtil.each(['map', 'each', 'filter', 'indexOf', 'inherits', 'reduce', 'filter', 'bind', 'curry', 'isArray', 'isString', 'isObject', 'isFunction', 'extend', 'defaults', 'clone', 'merge'], function (name) {\n ecUtil[name] = zrUtil[name];\n});\nvar graphic = {};\nzrUtil.each(['extendShape', 'extendPath', 'makePath', 'makeImage', 'mergePath', 'resizePath', 'createIcon', 'setHoverStyle', 'setLabelStyle', 'setTextStyle', 'setText', 'getFont', 'updateProps', 'initProps', 'getTransform', 'clipPointsByRect', 'clipRectByRect', 'registerShape', 'getShapeClass', 'Group', 'Image', 'Text', 'Circle', 'Sector', 'Ring', 'Polygon', 'Polyline', 'Rect', 'Line', 'BezierCurve', 'Arc', 'IncrementalDisplayable', 'CompoundPath', 'LinearGradient', 'RadialGradient', 'BoundingRect'], function (name) {\n graphic[name] = graphicUtil[name];\n});\nexports.parseGeoJson = parseGeoJson;\nexports.util = ecUtil;\nexports.graphic = graphic;","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"robot-analysis\"},[_c('div',{staticClass:\"analysis-nav-bar\"},[_c('van-nav-bar',{attrs:{\"title\":\"效果分析\",\"left-arrow\":\"\"},on:{\"click-left\":_vm.onClickLeft}})],1),_c('div',{staticClass:\"header-bg\"}),_c('van-tabs',{staticClass:\"robot-tabs\",attrs:{\"color\":\"#FFFFFF\",\"line-width\":\"30px\"},model:{value:(_vm.tabActive),callback:function ($$v) {_vm.tabActive=$$v},expression:\"tabActive\"}},[_c('van-tab',{attrs:{\"title\":\"会员分析\"}},[_c('member-analysis',{ref:\"memberChart\"})],1),_c('van-tab',{attrs:{\"title\":\"复购分析\"}},[_c('repurchase-analysis',{ref:\"repurchaseChart\"})],1),_c('van-tab',{attrs:{\"title\":\"营销分析\"}},[_c('market-analysis',{ref:\"marketChart\"})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"member-analysis\"},[_c('div',{staticClass:\"header-ctn\"},[_c('div',{staticClass:\"title-ctn\"},[_c('span',{staticClass:\"title\"},[_vm._v(\"会员分析\")]),_c('img',{attrs:{\"src\":require(\"@/assets/questionTip.png\")},on:{\"click\":_vm.showTooltip}})]),_c('span',{staticClass:\"header-right\"},[_vm._v(\"近30天\")])]),_c('div',{staticClass:\"desc\"},[_vm._v(\"统计时间内,各渠道新增会员概况分析。其中,\\\"全部\\\"不包含期初导入数据\")]),_c('div',{staticClass:\"hr\"}),_c('div',{staticClass:\"btn-group\"},[_c('span',{class:_vm.source === -1 ? 'active' : '',on:{\"click\":function($event){return _vm.switchSourceTpe(-1)}}},[_vm._v(\"全部\")]),_c('span',{class:_vm.source === 2 ? 'active' : '',on:{\"click\":function($event){return _vm.switchSourceTpe(2)}}},[_vm._v(\"POS端\")]),_c('span',{class:_vm.source === 1 ? 'active' : '',on:{\"click\":function($event){return _vm.switchSourceTpe(1)}}},[_vm._v(\"管理端\")]),_c('span',{class:_vm.source === 7 ? 'active' : '',on:{\"click\":function($event){return _vm.switchSourceTpe(7)}}},[_vm._v(\"小智会员\")])]),_c('div',{staticClass:\"swiper-container card-panel-list\"},[_c('div',{staticClass:\"swiper-wrapper\"},[_c('div',{staticClass:\"card-panel swiper-slide\",class:_vm.activeCard === 1 ? 'selected' : '',on:{\"click\":function($event){return _vm.switchChart(1)}}},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"新增会员数\")]),_c('div',{staticClass:\"num\"},[_vm._v(_vm._s(_vm.memberData.newMemberTotal))])])]),(_vm.source === 7 || _vm.source === -1)?_c('div',{staticClass:\"card-panel swiper-slide\",class:_vm.activeCard === 5 ? 'selected' : '',on:{\"click\":function($event){return _vm.switchChart(5)}}},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"绑定会员数\")]),_c('div',{staticClass:\"num\"},[_vm._v(_vm._s(_vm.memberData.bindMemberTotal))])])]):_vm._e(),_c('div',{staticClass:\"card-panel swiper-slide\",class:_vm.activeCard === 2 ? 'selected' : '',on:{\"click\":function($event){return _vm.switchChart(2)}}},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"会员订单数\")]),_c('div',{staticClass:\"num\"},[_vm._v(_vm._s(_vm.memberData.orderTotal))])])]),_c('div',{staticClass:\"card-panel swiper-slide\",class:_vm.activeCard === 3 ? 'selected' : '',on:{\"click\":function($event){return _vm.switchChart(3)}}},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"会员销售额\")]),_c('div',{staticClass:\"num\"},[_vm._v(\"¥\"+_vm._s(_vm.memberData.memberMoneyTotal))])])]),_c('div',{staticClass:\"card-panel swiper-slide\",class:_vm.activeCard === 4 ? 'selected' : '',on:{\"click\":function($event){return _vm.switchChart(4)}}},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"会员销售额占比\")]),_c('div',{staticClass:\"num\"},[_vm._v(_vm._s(_vm.memberData.rate)+\"%\")])])])])]),_c('div',{staticClass:\"member-chart\"},[(_vm.loading)?_c('van-loading',{attrs:{\"type\":\"spinner\"}}):_vm._e(),(_vm.activeCard !== 4)?[(_vm.chartData.data)?[_c('line-chart',{ref:\"chart\",attrs:{\"chart-data\":_vm.chartData}})]:[_vm._m(0)]]:[_c('circle-bar',{attrs:{\"rate\":_vm.rate,\"lengend-title\":'会员销售额占比'}})]],2),_c('van-popup',{style:({ height: '40%' }),attrs:{\"round\":\"\",\"position\":\"bottom\"},model:{value:(_vm.showTip),callback:function ($$v) {_vm.showTip=$$v},expression:\"showTip\"}},[_c('div',{staticClass:\"tip-container\"},[_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"新增会员数:\")]),_vm._v(\"统计时间内,新增会员的数量\")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"绑定会员数:\")]),_vm._v(\"统计时间内,通过小智会员绑定会员卡的会员数量\")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"会员订单数:\")]),_vm._v(\"统计时间内,新增会员的订单数\")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"会员销售额:\")]),_vm._v(\"统计时间内,新增会员带来的销售额同pos端传入的订单【实收金额】合计,扣去已经退款的金额\")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"会员销售额占比:\")]),_vm._v(\"统计时间内,会员销售额在店铺销售额的占比\")])])])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"empty-ctn\"},[_c('div',{staticClass:\"empty-img\"},[_c('img',{attrs:{\"src\":require(\"@/assets/empty.png\")}})]),_c('div',{staticClass:\"no-text\"},[_vm._v(\"暂无数据\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"line-chart\"},[(_vm.lineType === 'single')?_c('div',{staticClass:\"legend-container\"},[_c('div',{staticClass:\"legend\"},[_vm._v(_vm._s(_vm.legendTitle))])]):_c('div',{staticClass:\"muti-legend-container\"},[_c('div',{staticClass:\"legend-item\"},[_c('div',{staticClass:\"legend\"},[_vm._v(\"当期\"+_vm._s(_vm.legendTitle))]),_c('div',{staticClass:\"date\"},[_vm._v(_vm._s(_vm.chartData.curDate))])]),_c('div',{staticClass:\"legend-item\"},[_c('div',{staticClass:\"legend pink\"},[_vm._v(\"上期\"+_vm._s(_vm.legendTitle))]),_c('div',{staticClass:\"date\"},[_vm._v(_vm._s(_vm.chartData.preDate))])])]),_c('div',{ref:\"chart\",staticClass:\"chart\",style:({ height: _vm.heightToRem, width: _vm.width })})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LineChart.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LineChart.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LineChart.vue?vue&type=template&id=c8b1d966&scoped=true&\"\nimport script from \"./LineChart.vue?vue&type=script&lang=js&\"\nexport * from \"./LineChart.vue?vue&type=script&lang=js&\"\nimport style0 from \"./LineChart.vue?vue&type=style&index=0&id=c8b1d966&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c8b1d966\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"circle-bar\"},[_c('div',{staticClass:\"circle-legend\"},[_c('span',{staticClass:\"icon\"}),_c('span',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.lengendTitle))])]),_c('van-circle',{attrs:{\"layer-color\":\"#ebedf0\",\"rate\":_vm.rate,\"speed\":100,\"stroke-width\":60,\"text\":_vm.text},model:{value:(_vm.currentRate),callback:function ($$v) {_vm.currentRate=$$v},expression:\"currentRate\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CircleBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CircleBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CircleBar.vue?vue&type=template&id=11875d78&scoped=true&\"\nimport script from \"./CircleBar.vue?vue&type=script&lang=js&\"\nexport * from \"./CircleBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CircleBar.vue?vue&type=style&index=0&id=11875d78&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"11875d78\",\n null\n \n)\n\nexport default component.exports","/**\n * SSR Window 3.0.0-alpha.4\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: May 20, 2020\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target, src) {\n if (target === void 0) { target = {}; }\n if (src === void 0) { src = {}; }\n Object.keys(src).forEach(function (key) {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nvar ssrDocument = {\n body: {},\n addEventListener: function () { },\n removeEventListener: function () { },\n activeElement: {\n blur: function () { },\n nodeName: '',\n },\n querySelector: function () {\n return null;\n },\n querySelectorAll: function () {\n return [];\n },\n getElementById: function () {\n return null;\n },\n createEvent: function () {\n return {\n initEvent: function () { },\n };\n },\n createElement: function () {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute: function () { },\n getElementsByTagName: function () {\n return [];\n },\n };\n },\n createElementNS: function () {\n return {};\n },\n importNode: function () {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n var doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nvar ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState: function () { },\n pushState: function () { },\n go: function () { },\n back: function () { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener: function () { },\n removeEventListener: function () { },\n getComputedStyle: function () {\n return {\n getPropertyValue: function () {\n return '';\n },\n };\n },\n Image: function () { },\n Date: function () { },\n screen: {},\n setTimeout: function () { },\n clearTimeout: function () { },\n matchMedia: function () {\n return {};\n },\n requestAnimationFrame: function (callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame: function (id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n var win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 3.0.0-alpha.7\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: July 14, 2020\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n var proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get: function get() {\n return proto;\n },\n set: function set(value) {\n proto.__proto__ = value;\n }\n });\n}\n\nvar Dom7 = /*#__PURE__*/function (_Array) {\n _inheritsLoose(Dom7, _Array);\n\n function Dom7(items) {\n var _this;\n\n _this = _Array.call.apply(_Array, [this].concat(items)) || this;\n makeReactive(_assertThisInitialized(_this));\n return _this;\n }\n\n return Dom7;\n}( /*#__PURE__*/_wrapNativeSuper(Array));\n\nfunction arrayFlat(arr) {\n if (arr === void 0) {\n arr = [];\n }\n\n var res = [];\n arr.forEach(function (el) {\n if (Array.isArray(el)) {\n res.push.apply(res, arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n var uniqueArray = [];\n\n for (var i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, function (match, group) {\n return group.toUpperCase();\n });\n}\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n var a = [];\n var res = context.querySelectorAll(selector);\n\n for (var i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n var window = getWindow();\n var document = getDocument();\n var arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n var html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf(' 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (var i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (var attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (var i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (var propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n var el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n var dataKey = el.getAttribute(\"data-\" + key);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (var i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n var el = this[0];\n if (!el) return undefined;\n var dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (var dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (var i = 0; i < el.attributes.length; i += 1) {\n var _attr = el.attributes[i];\n\n if (_attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(_attr.name.split('data-')[1])] = _attr.value;\n }\n }\n }\n\n for (var key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n var el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n var values = [];\n\n for (var i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (var _i = 0; _i < this.length; _i += 1) {\n var _el = this[_i];\n\n if (Array.isArray(value) && _el.multiple && _el.nodeName.toLowerCase() === 'select') {\n for (var j = 0; j < _el.options.length; j += 1) {\n _el.options[j].selected = value.indexOf(_el.options[j].value) >= 0;\n }\n } else {\n _el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].style.transition = typeof duration !== 'string' ? duration + \"ms\" : duration;\n }\n\n return this;\n}\n\nfunction on() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n var eventType = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventType = args[0];\n listener = args[1];\n capture = args[2];\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n var target = e.target;\n if (!target) return;\n var eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n var _parents = $(target).parents(); // eslint-disable-line\n\n\n for (var k = 0; k < _parents.length; k += 1) {\n if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n var events = eventType.split(' ');\n var j;\n\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n var event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener: listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n var _event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];\n\n el.dom7LiveListeners[_event].push({\n listener: listener,\n proxyListener: handleLiveEvent\n });\n\n el.addEventListener(_event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n var eventType = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventType = args[0];\n listener = args[1];\n capture = args[2];\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n var events = eventType.split(' ');\n\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var handlers = void 0;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (var k = handlers.length - 1; k >= 0; k -= 1) {\n var handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once() {\n var dom = this;\n\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n var eventName = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventName = args[0];\n listener = args[1];\n capture = args[2];\n targetSelector = undefined;\n }\n\n function onceHandler() {\n for (var _len8 = arguments.length, eventArgs = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n eventArgs[_key8] = arguments[_key8];\n }\n\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger() {\n var window = getWindow();\n\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n var events = args[0].split(' ');\n var eventData = args[1];\n\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n\n if (window.CustomEvent) {\n var evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter(function (data, dataIndex) {\n return dataIndex > 0;\n });\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n var dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n var dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n var window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n var _styles = this.styles();\n\n return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n var window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n var _styles2 = this.styles();\n\n return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n var window = getWindow();\n var document = getDocument();\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = document.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = el === window ? window.scrollY : el.scrollTop;\n var scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (var i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n var window = getWindow();\n\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n var window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n var window = getWindow();\n var i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (var _prop in props) {\n this[i].style[_prop] = props[_prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach(function (el, index) {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n var result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n var window = getWindow();\n var document = getDocument();\n var el = this[0];\n var compareWith;\n var i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n var child = this[0];\n var i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n var length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n var returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append() {\n var newChild;\n var document = getDocument();\n\n for (var k = 0; k < arguments.length; k += 1) {\n newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];\n\n for (var i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (var j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n var document = getDocument();\n var i;\n var j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n var before = $(selector);\n\n for (var i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (var j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n var after = $(selector);\n\n for (var i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (var j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n var _next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(_next).is(selector)) nextEls.push(_next);\n } else nextEls.push(_next);\n\n el = _next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n var el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n var _prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(_prev).is(selector)) prevEls.push(_prev);\n } else prevEls.push(_prev);\n\n el = _prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n var parents = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n var parents = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n var _parent = this[i].parentNode; // eslint-disable-line\n\n while (_parent) {\n if (selector) {\n if ($(_parent).is(selector)) parents.push(_parent);\n } else {\n parents.push(_parent);\n }\n\n _parent = _parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n var closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n var foundElements = [];\n\n for (var i = 0; i < this.length; i += 1) {\n var found = this[i].querySelectorAll(selector);\n\n for (var j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n var children = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n var childNodes = this[i].children;\n\n for (var j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add() {\n var dom = this;\n var i;\n var j;\n\n for (var _len10 = arguments.length, els = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n els[_key10] = arguments[_key10];\n }\n\n for (i = 0; i < els.length; i += 1) {\n var toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (el.nodeType === 1) {\n for (var j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\nfunction scrollTo() {\n var window = getWindow();\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var left = args[0],\n top = args[1],\n duration = args[2],\n easing = args[3],\n callback = args[4];\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n left = args[0];\n top = args[1];\n duration = args[2];\n callback = args[3];\n easing = args[4];\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n var el = this;\n var currentTop;\n var currentLeft;\n var maxTop;\n var maxLeft;\n var newTop;\n var newLeft;\n var scrollTop; // eslint-disable-line\n\n var scrollLeft; // eslint-disable-line\n\n var animateTop = top > 0 || top === 0;\n var animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n var startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time) {\n if (time === void 0) {\n time = new Date().getTime();\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n var progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n var easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n var done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var top = args[0],\n duration = args[1],\n easing = args[2],\n callback = args[3];\n\n if (args.length === 3 && typeof easing === 'function') {\n top = args[0];\n duration = args[1];\n callback = args[2];\n easing = args[3];\n }\n\n var dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n var left = args[0],\n duration = args[1],\n easing = args[2],\n callback = args[3];\n\n if (args.length === 3 && typeof easing === 'function') {\n left = args[0];\n duration = args[1];\n callback = args[2];\n easing = args[3];\n }\n\n var dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n var window = getWindow();\n var els = this;\n var a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n easingProgress: function easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n stop: function stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(function (el) {\n var element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n done: function done(complete) {\n a.animating = false;\n a.elements.each(function (el) {\n var element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n var que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n animate: function animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n var elements = []; // Define & Cache Initials & Units\n\n a.elements.each(function (el, index) {\n var initialFullValue;\n var initialValue;\n var unit;\n var finalValue;\n var finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(function (prop) {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue: initialFullValue,\n initialValue: initialValue,\n unit: unit,\n finalValue: finalValue,\n finalFullValue: finalFullValue,\n currentValue: initialValue\n };\n });\n });\n var startTime = null;\n var time;\n var elementsDone = 0;\n var propsDone = 0;\n var done;\n var began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n var progress;\n var easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(function (element) {\n var el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(function (prop) {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n var _el$prop = el[prop],\n initialValue = _el$prop.initialValue,\n finalValue = _el$prop.finalValue,\n unit = _el$prop.unit;\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n var currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n var animateInstance;\n\n for (var i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n var els = this;\n\n for (var i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nvar noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (typeof args[0] === 'undefined') {\n for (var i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on.apply(this, [name].concat(args));\n }\n\n return eventHandler;\n}\n\nvar click = shortcut('click');\nvar blur = shortcut('blur');\nvar focus = shortcut('focus');\nvar focusin = shortcut('focusin');\nvar focusout = shortcut('focusout');\nvar keyup = shortcut('keyup');\nvar keydown = shortcut('keydown');\nvar keypress = shortcut('keypress');\nvar submit = shortcut('submit');\nvar change = shortcut('change');\nvar mousedown = shortcut('mousedown');\nvar mousemove = shortcut('mousemove');\nvar mouseup = shortcut('mouseup');\nvar mouseenter = shortcut('mouseenter');\nvar mouseleave = shortcut('mouseleave');\nvar mouseout = shortcut('mouseout');\nvar mouseover = shortcut('mouseover');\nvar touchstart = shortcut('touchstart');\nvar touchend = shortcut('touchend');\nvar touchmove = shortcut('touchmove');\nvar resize = shortcut('resize');\nvar scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nvar Methods = {\n addClass: addClass,\n removeClass: removeClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n attr: attr,\n removeAttr: removeAttr,\n transform: transform,\n transition: transition,\n on: on,\n off: off,\n trigger: trigger,\n transitionEnd: transitionEnd,\n outerWidth: outerWidth,\n outerHeight: outerHeight,\n styles: styles,\n offset: offset,\n css: css,\n each: each,\n html: html,\n text: text,\n is: is,\n index: index,\n eq: eq,\n append: append,\n prepend: prepend,\n next: next,\n nextAll: nextAll,\n prev: prev,\n prevAll: prevAll,\n parent: parent,\n parents: parents,\n closest: closest,\n find: find,\n children: children,\n filter: filter,\n remove: remove\n};\nObject.keys(Methods).forEach(function (methodName) {\n $.fn[methodName] = Methods[methodName];\n});\nexport default $;","import { getWindow, getDocument } from 'ssr-window';\nvar support;\n\nfunction calcSupport() {\n var window = getWindow();\n var document = getDocument();\n return {\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n pointerEvents: !!window.PointerEvent && 'maxTouchPoints' in window.navigator && window.navigator.maxTouchPoints >= 0,\n observer: function checkObserver() {\n return 'MutationObserver' in window || 'WebkitMutationObserver' in window;\n }(),\n passiveListener: function checkPassiveListener() {\n var supportsPassive = false;\n\n try {\n var opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get: function get() {\n supportsPassive = true;\n }\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support';\nvar device;\n\nfunction calcDevice(_temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n userAgent = _ref.userAgent;\n\n var support = getSupport();\n var window = getWindow();\n var platform = window.navigator.platform;\n var ua = userAgent || window.navigator.userAgent;\n var device = {\n ios: false,\n android: false\n };\n var screenWidth = window.screen.width;\n var screenHeight = window.screen.height;\n var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n\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|iOS)\\s([\\d_]+)/);\n var windows = platform === 'Win32';\n var macos = platform === 'MacIntel'; // iPadOs 13 fix\n\n var iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768'];\n\n if (!ipad && macos && support.touch && iPadScreens.indexOf(screenWidth + \"x\" + screenHeight) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides) {\n if (overrides === void 0) {\n overrides = {};\n }\n\n if (!device) {\n device = calcDevice(overrides);\n }\n\n return device;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nvar browser;\n\nfunction calcBrowser() {\n var window = getWindow();\n\n function isSafari() {\n var ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n\n return {\n isEdge: !!window.navigator.userAgent.match(/Edge/g),\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n var object = obj;\n Object.keys(object).forEach(function (key) {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay) {\n if (delay === void 0) {\n delay = 0;\n }\n\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getTranslate(el, axis) {\n if (axis === void 0) {\n axis = 'x';\n }\n\n var window = getWindow();\n var matrix;\n var curTransform;\n var transformMatrix;\n var curStyle = window.getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(function (a) {\n return a.replace(',', '.');\n }).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object;\n}\n\nfunction extend() {\n var to = Object(arguments.length <= 0 ? undefined : arguments[0]);\n\n for (var i = 1; i < arguments.length; i += 1) {\n var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];\n\n if (nextSource !== undefined && nextSource !== null) {\n var keysArray = Object.keys(Object(nextSource));\n\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n extend(to[nextKey], nextSource[nextKey]);\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n extend(to[nextKey], nextSource[nextKey]);\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n\n return to;\n}\n\nfunction bindModuleMethods(instance, obj) {\n Object.keys(obj).forEach(function (key) {\n if (isObject(obj[key])) {\n Object.keys(obj[key]).forEach(function (subKey) {\n if (typeof obj[key][subKey] === 'function') {\n obj[key][subKey] = obj[key][subKey].bind(instance);\n }\n });\n }\n\n instance[key] = obj[key];\n });\n}\n\nexport { deleteProps, nextTick, now, getTranslate, isObject, extend, bindModuleMethods };","import { getWindow } from 'ssr-window';\nimport { extend } from '../../utils/utils';\nexport default {\n name: 'resize',\n create: function create() {\n var swiper = this;\n extend(swiper, {\n resize: {\n resizeHandler: function resizeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('beforeResize');\n swiper.emit('resize');\n },\n orientationChangeHandler: function orientationChangeHandler() {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n swiper.emit('orientationchange');\n }\n }\n });\n },\n on: {\n init: function init(swiper) {\n var window = getWindow(); // Emit resize\n\n window.addEventListener('resize', swiper.resize.resizeHandler); // Emit orientationchange\n\n window.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n },\n destroy: function destroy(swiper) {\n var window = getWindow();\n window.removeEventListener('resize', swiper.resize.resizeHandler);\n window.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);\n }\n }\n};","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport { getWindow } from 'ssr-window';\nimport { bindModuleMethods } from '../../utils/utils';\nvar Observer = {\n attach: function attach(target, options) {\n if (options === void 0) {\n options = {};\n }\n\n var window = getWindow();\n var swiper = this;\n var ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n var observer = new ObserverFunc(function (mutations) {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n swiper.emit('observerUpdate', mutations[0]);\n return;\n }\n\n var observerUpdate = function observerUpdate() {\n swiper.emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n swiper.observer.observers.push(observer);\n },\n init: function init() {\n var swiper = this;\n if (!swiper.support.observer || !swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n var containerParents = swiper.$el.parents();\n\n for (var i = 0; i < containerParents.length; i += 1) {\n swiper.observer.attach(containerParents[i]);\n }\n } // Observe container\n\n\n swiper.observer.attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n swiper.observer.attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n },\n destroy: function destroy() {\n var swiper = this;\n swiper.observer.observers.forEach(function (observer) {\n observer.disconnect();\n });\n swiper.observer.observers = [];\n }\n};\nexport default {\n name: 'observer',\n params: {\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n },\n create: function create() {\n var swiper = this;\n bindModuleMethods(swiper, {\n observer: _extends(_extends({}, Observer), {}, {\n observers: []\n })\n });\n },\n on: {\n init: function init(swiper) {\n swiper.observer.init();\n },\n destroy: function destroy(swiper) {\n swiper.observer.destroy();\n }\n }\n};","import { extend } from '../../utils/utils';\nexport default {\n useParams: function useParams(instanceParams) {\n var instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach(function (moduleName) {\n var module = instance.modules[moduleName]; // Extend params\n\n if (module.params) {\n extend(instanceParams, module.params);\n }\n });\n },\n useModules: function useModules(modulesParams) {\n if (modulesParams === void 0) {\n modulesParams = {};\n }\n\n var instance = this;\n if (!instance.modules) return;\n Object.keys(instance.modules).forEach(function (moduleName) {\n var module = instance.modules[moduleName];\n var moduleParams = modulesParams[moduleName] || {}; // Add event listeners\n\n if (module.on && instance.on) {\n Object.keys(module.on).forEach(function (moduleEventName) {\n instance.on(moduleEventName, module.on[moduleEventName]);\n });\n } // Module create callback\n\n\n if (module.create) {\n module.create.bind(instance)(moduleParams);\n }\n });\n }\n};","/* eslint-disable no-underscore-dangle */\nexport default {\n on: function on(events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') return self;\n var method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(function (event) {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once: function once(events, handler, priority) {\n var self = this;\n if (typeof handler !== 'function') return self;\n\n function onceHandler() {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny: function onAny(handler, priority) {\n var self = this;\n if (typeof handler !== 'function') return self;\n var method = priority ? 'unshift' : 'push';\n\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\n offAny: function offAny(handler) {\n var self = this;\n if (!self.eventsAnyListeners) return self;\n var index = self.eventsAnyListeners.indexOf(handler);\n\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\n off: function off(events, handler) {\n var self = this;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(function (event) {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(function (eventHandler, index) {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit: function emit() {\n var self = this;\n if (!self.eventsListeners) return self;\n var events;\n var data;\n var context;\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n\n data.unshift(context);\n var eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(function (event) {\n if (self.eventsListeners && self.eventsListeners[event]) {\n var handlers = [];\n self.eventsListeners[event].forEach(function (eventHandler) {\n handlers.push(eventHandler);\n });\n handlers.forEach(function (eventHandler) {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};","import { extend } from '../../../utils/utils';\nexport default function updateSize() {\n var swiper = this;\n var width;\n var height;\n var $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.width !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n extend(swiper, {\n width: width,\n height: height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { getWindow } from 'ssr-window';\nimport { extend } from '../../../utils/utils';\nexport default function updateSlides() {\n var swiper = this;\n var window = getWindow();\n var params = swiper.params;\n var $wrapperEl = swiper.$wrapperEl,\n swiperSize = swiper.size,\n rtl = swiper.rtlTranslate,\n wrongRTL = swiper.wrongRTL;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n var slides = $wrapperEl.children(\".\" + swiper.params.slideClass);\n var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n var snapGrid = [];\n var slidesGrid = [];\n var slidesSizesGrid = [];\n\n function slidesForMargin(slideEl, slideIndex) {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }\n\n var offsetBefore = params.slidesOffsetBefore;\n\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n var offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n var previousSnapGridLength = swiper.snapGrid.length;\n var previousSlidesGridLength = swiper.snapGrid.length;\n var spaceBetween = params.spaceBetween;\n var slidePosition = -offsetBefore;\n var prevSlideSize = 0;\n var index = 0;\n\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: ''\n });\n var slidesNumberEvenToRows;\n\n if (params.slidesPerColumn > 1) {\n if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;\n }\n\n if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);\n }\n } // Calc slides\n\n\n var slideSize;\n var slidesPerColumn = params.slidesPerColumn;\n var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;\n var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);\n\n for (var i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n var slide = slides.eq(i);\n\n if (params.slidesPerColumn > 1) {\n // Set slides order\n var newSlideOrderIndex = void 0;\n var column = void 0;\n var row = void 0;\n\n if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {\n var groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn));\n var slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex;\n var columnsInGroup = groupIndex === 0 ? params.slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * params.slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;\n slide.css({\n '-webkit-box-ordinal-group': newSlideOrderIndex,\n '-moz-box-ordinal-group': newSlideOrderIndex,\n '-ms-flex-order': newSlideOrderIndex,\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex\n });\n } else if (params.slidesPerColumnFill === 'column') {\n column = Math.floor(i / slidesPerColumn);\n row = i - column * slidesPerColumn;\n\n if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {\n row += 1;\n\n if (row >= slidesPerColumn) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n\n slide.css(\"margin-\" + (swiper.isHorizontal() ? 'top' : 'left'), row !== 0 && params.spaceBetween && params.spaceBetween + \"px\");\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n var slideStyles = window.getComputedStyle(slide[0], null);\n var currentTransform = slide[0].style.transform;\n var currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n if (swiper.isHorizontal()) {\n var width = parseFloat(slideStyles.getPropertyValue('width') || 0);\n var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left') || 0);\n var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right') || 0);\n var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left') || 0);\n var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right') || 0);\n var boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;\n }\n } else {\n var height = parseFloat(slideStyles.getPropertyValue('height') || 0);\n var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top') || 0);\n var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom') || 0);\n var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top') || 0);\n var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom') || 0);\n\n var _boxSizing = slideStyles.getPropertyValue('box-sizing');\n\n if (_boxSizing && _boxSizing === 'border-box') {\n slideSize = height + marginTop + marginBottom;\n } else {\n slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;\n }\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n if (swiper.isHorizontal()) {\n slides[i].style.width = slideSize + \"px\";\n } else {\n slides[i].style.height = slideSize + \"px\";\n }\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n var newSlidesGrid;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: swiper.virtualSize + params.spaceBetween + \"px\"\n });\n }\n\n if (params.setWrapperSize) {\n if (swiper.isHorizontal()) $wrapperEl.css({\n width: swiper.virtualSize + params.spaceBetween + \"px\"\n });else $wrapperEl.css({\n height: swiper.virtualSize + params.spaceBetween + \"px\"\n });\n }\n\n if (params.slidesPerColumn > 1) {\n swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;\n if (swiper.isHorizontal()) $wrapperEl.css({\n width: swiper.virtualSize + params.spaceBetween + \"px\"\n });else $wrapperEl.css({\n height: swiper.virtualSize + params.spaceBetween + \"px\"\n });\n\n if (params.centeredSlides) {\n newSlidesGrid = [];\n\n for (var _i = 0; _i < snapGrid.length; _i += 1) {\n var slidesGridItem = snapGrid[_i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n\n snapGrid = newSlidesGrid;\n }\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n newSlidesGrid = [];\n\n for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {\n var _slidesGridItem = snapGrid[_i2];\n if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem);\n\n if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(_slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n if (swiper.isHorizontal()) {\n if (rtl) slides.filter(slidesForMargin).css({\n marginLeft: spaceBetween + \"px\"\n });else slides.filter(slidesForMargin).css({\n marginRight: spaceBetween + \"px\"\n });\n } else slides.filter(slidesForMargin).css({\n marginBottom: spaceBetween + \"px\"\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n var allSlidesSize = 0;\n slidesSizesGrid.forEach(function (slideSizeValue) {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n var maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(function (snap) {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n var _allSlidesSize = 0;\n slidesSizesGrid.forEach(function (slideSizeValue) {\n _allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n _allSlidesSize -= params.spaceBetween;\n\n if (_allSlidesSize < swiperSize) {\n var allSlidesOffset = (swiperSize - _allSlidesSize) / 2;\n snapGrid.forEach(function (snap, snapIndex) {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach(function (snap, snapIndex) {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n extend(swiper, {\n slides: slides,\n snapGrid: snapGrid,\n slidesGrid: slidesGrid,\n slidesSizesGrid: slidesSizesGrid\n });\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateSlidesOffset();\n }\n}","export default function updateAutoHeight(speed) {\n var swiper = this;\n var activeSlides = [];\n var newHeight = 0;\n var i;\n\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n } // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n swiper.visibleSlides.each(function (slide) {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n var index = swiper.activeIndex + i;\n if (index > swiper.slides.length) break;\n activeSlides.push(swiper.slides.eq(index)[0]);\n }\n }\n } else {\n activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);\n } // Find new height from highest slide in view\n\n\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n var height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n } // Update Height\n\n\n if (newHeight) swiper.$wrapperEl.css('height', newHeight + \"px\");\n}","export default function updateSlidesOffset() {\n var swiper = this;\n var slides = swiper.slides;\n\n for (var i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../../utils/dom';\nexport default function updateSlidesProgress(translate) {\n if (translate === void 0) {\n translate = this && this.translate || 0;\n }\n\n var swiper = this;\n var params = swiper.params;\n var slides = swiper.slides,\n rtl = swiper.rtlTranslate;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n var offsetCenter = -translate;\n if (rtl) offsetCenter = translate; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (var i = 0; i < slides.length; i += 1) {\n var slide = slides[i];\n var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n\n if (params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) {\n var slideBefore = -(offsetCenter - slide.swiperSlideOffset);\n var slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","import { extend } from '../../../utils/utils';\nexport default function updateProgress(translate) {\n var swiper = this;\n\n if (typeof translate === 'undefined') {\n var multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n var params = swiper.params;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n var progress = swiper.progress,\n isBeginning = swiper.isBeginning,\n isEnd = swiper.isEnd;\n var wasBeginning = isBeginning;\n var wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n extend(swiper, {\n progress: progress,\n isBeginning: isBeginning,\n isEnd: isEnd\n });\n if (params.watchSlidesProgress || params.watchSlidesVisibility || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n var swiper = this;\n var slides = swiper.slides,\n params = swiper.params,\n $wrapperEl = swiper.$wrapperEl,\n activeIndex = swiper.activeIndex,\n realIndex = swiper.realIndex;\n var isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(params.slideActiveClass + \" \" + params.slideNextClass + \" \" + params.slidePrevClass + \" \" + params.slideDuplicateActiveClass + \" \" + params.slideDuplicateNextClass + \" \" + params.slideDuplicatePrevClass);\n var activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(\".\" + params.slideClass + \"[data-swiper-slide-index=\\\"\" + activeIndex + \"\\\"]\");\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(\".\" + params.slideClass + \":not(.\" + params.slideDuplicateClass + \")[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\").addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]\").addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n var nextSlide = activeSlide.nextAll(\".\" + params.slideClass).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n var prevSlide = activeSlide.prevAll(\".\" + params.slideClass).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(\".\" + params.slideClass + \":not(.\" + params.slideDuplicateClass + \")[data-swiper-slide-index=\\\"\" + nextSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + nextSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(\".\" + params.slideClass + \":not(.\" + params.slideDuplicateClass + \")[data-swiper-slide-index=\\\"\" + prevSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \"[data-swiper-slide-index=\\\"\" + prevSlide.attr('data-swiper-slide-index') + \"\\\"]\").addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","import { extend } from '../../../utils/utils';\nexport default function updateActiveIndex(newActiveIndex) {\n var swiper = this;\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n var slidesGrid = swiper.slidesGrid,\n snapGrid = swiper.snapGrid,\n params = swiper.params,\n previousIndex = swiper.activeIndex,\n previousRealIndex = swiper.realIndex,\n previousSnapIndex = swiper.snapIndex;\n var activeIndex = newActiveIndex;\n var snapIndex;\n\n if (typeof activeIndex === 'undefined') {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n var skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n extend(swiper, {\n snapIndex: snapIndex,\n realIndex: realIndex,\n previousIndex: previousIndex,\n activeIndex: activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../../utils/dom';\nexport default function updateClickedSlide(e) {\n var swiper = this;\n var params = swiper.params;\n var slide = $(e.target).closest(\".\" + params.slideClass)[0];\n var slideFound = false;\n\n if (slide) {\n for (var i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) slideFound = true;\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = $(slide).index();\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","import updateSize from './updateSize';\nimport updateSlides from './updateSlides';\nimport updateAutoHeight from './updateAutoHeight';\nimport updateSlidesOffset from './updateSlidesOffset';\nimport updateSlidesProgress from './updateSlidesProgress';\nimport updateProgress from './updateProgress';\nimport updateSlidesClasses from './updateSlidesClasses';\nimport updateActiveIndex from './updateActiveIndex';\nimport updateClickedSlide from './updateClickedSlide';\nexport default {\n updateSize: updateSize,\n updateSlides: updateSlides,\n updateAutoHeight: updateAutoHeight,\n updateSlidesOffset: updateSlidesOffset,\n updateSlidesProgress: updateSlidesProgress,\n updateProgress: updateProgress,\n updateSlidesClasses: updateSlidesClasses,\n updateActiveIndex: updateActiveIndex,\n updateClickedSlide: updateClickedSlide\n};","import { getTranslate } from '../../../utils/utils';\nexport default function getSwiperTranslate(axis) {\n if (axis === void 0) {\n axis = this.isHorizontal() ? 'x' : 'y';\n }\n\n var swiper = this;\n var params = swiper.params,\n rtl = swiper.rtlTranslate,\n translate = swiper.translate,\n $wrapperEl = swiper.$wrapperEl;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n var currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n var swiper = this;\n var rtl = swiper.rtlTranslate,\n params = swiper.params,\n $wrapperEl = swiper.$wrapperEl,\n wrapperEl = swiper.wrapperEl,\n progress = swiper.progress;\n var x = 0;\n var y = 0;\n var z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(\"translate3d(\" + x + \"px, \" + y + \"px, \" + z + \"px)\");\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n var newProgress;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","export default function translateTo(translate, speed, runCallbacks, translateBounds, internal) {\n if (translate === void 0) {\n translate = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (translateBounds === void 0) {\n translateBounds = true;\n }\n\n var swiper = this;\n var params = swiper.params,\n wrapperEl = swiper.wrapperEl;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n var minTranslate = swiper.minTranslate();\n var maxTranslate = swiper.maxTranslate();\n var newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n var isH = swiper.isHorizontal();\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n // eslint-disable-next-line\n if (wrapperEl.scrollTo) {\n var _wrapperEl$scrollTo;\n\n wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = -newTranslate, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n }\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","import getTranslate from './getTranslate';\nimport setTranslate from './setTranslate';\nimport minTranslate from './minTranslate';\nimport maxTranslate from './maxTranslate';\nimport translateTo from './translateTo';\nexport default {\n getTranslate: getTranslate,\n setTranslate: setTranslate,\n minTranslate: minTranslate,\n maxTranslate: maxTranslate,\n translateTo: translateTo\n};","export default function setTransition(duration, byController) {\n var swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}","export default function transitionStart(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n var swiper = this;\n var activeIndex = swiper.activeIndex,\n params = swiper.params,\n previousIndex = swiper.previousIndex;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n var dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit('transitionStart');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionStart');\n return;\n }\n\n swiper.emit('slideChangeTransitionStart');\n\n if (dir === 'next') {\n swiper.emit('slideNextTransitionStart');\n } else {\n swiper.emit('slidePrevTransitionStart');\n }\n }\n}","export default function transitionEnd(runCallbacks, direction) {\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n var swiper = this;\n var activeIndex = swiper.activeIndex,\n previousIndex = swiper.previousIndex,\n params = swiper.params;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n var dir = direction;\n\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit('transitionEnd');\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit('slideResetTransitionEnd');\n return;\n }\n\n swiper.emit('slideChangeTransitionEnd');\n\n if (dir === 'next') {\n swiper.emit('slideNextTransitionEnd');\n } else {\n swiper.emit('slidePrevTransitionEnd');\n }\n }\n}","import setTransition from './setTransition';\nimport transitionStart from './transitionStart';\nimport transitionEnd from './transitionEnd';\nexport default {\n setTransition: setTransition,\n transitionStart: transitionStart,\n transitionEnd: transitionEnd\n};","export default function slideTo(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n var swiper = this;\n var slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n var params = swiper.params,\n snapGrid = swiper.snapGrid,\n slidesGrid = swiper.slidesGrid,\n previousIndex = swiper.previousIndex,\n activeIndex = swiper.activeIndex,\n rtl = swiper.rtlTranslate,\n wrapperEl = swiper.wrapperEl;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n var skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n var snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n var translate = -snapGrid[snapIndex]; // Update progress\n\n swiper.updateProgress(translate); // Normalize slideIndex\n\n if (params.normalizeSlideIndex) {\n for (var i = 0; i < slidesGrid.length; i += 1) {\n if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {\n slideIndex = i;\n }\n }\n } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n var direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n var isH = swiper.isHorizontal();\n var t = -translate;\n\n if (rtl) {\n t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t;\n }\n\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n } else {\n // eslint-disable-next-line\n if (wrapperEl.scrollTo) {\n var _wrapperEl$scrollTo;\n\n wrapperEl.scrollTo((_wrapperEl$scrollTo = {}, _wrapperEl$scrollTo[isH ? 'left' : 'top'] = t, _wrapperEl$scrollTo.behavior = 'smooth', _wrapperEl$scrollTo));\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (!swiper.animating) {\n swiper.animating = true;\n\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n }\n\n return true;\n}","export default function slideToLoop(index, speed, runCallbacks, internal) {\n if (index === void 0) {\n index = 0;\n }\n\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n var swiper = this;\n var newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n var swiper = this;\n var params = swiper.params,\n animating = swiper.animating;\n var increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n var swiper = this;\n var params = swiper.params,\n animating = swiper.animating,\n snapGrid = swiper.snapGrid,\n slidesGrid = swiper.slidesGrid,\n rtlTranslate = swiper.rtlTranslate;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n var translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n var normalizedTranslate = normalize(translate);\n var normalizedSnapGrid = snapGrid.map(function (val) {\n return normalize(val);\n });\n var currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];\n var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n snapGrid.forEach(function (snap) {\n if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap;\n });\n }\n\n var prevIndex;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n }\n\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed, runCallbacks, internal) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n var swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed, runCallbacks, internal, threshold) {\n if (speed === void 0) {\n speed = this.params.speed;\n }\n\n if (runCallbacks === void 0) {\n runCallbacks = true;\n }\n\n if (threshold === void 0) {\n threshold = 0.5;\n }\n\n var swiper = this;\n var index = swiper.activeIndex;\n var skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n var snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n var currentSnap = swiper.snapGrid[snapIndex];\n var nextSnap = swiper.snapGrid[snapIndex + 1];\n\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n var prevSnap = swiper.snapGrid[snapIndex - 1];\n var _currentSnap = swiper.snapGrid[snapIndex];\n\n if (translate - prevSnap <= (_currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","import $ from '../../../utils/dom';\nimport { nextTick } from '../../../utils/utils';\nexport default function slideToClickedSlide() {\n var swiper = this;\n var params = swiper.params,\n $wrapperEl = swiper.$wrapperEl;\n var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n var slideToIndex = swiper.clickedIndex;\n var realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(\".\" + params.slideClass + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + params.slideDuplicateClass + \")\").eq(0).index();\n nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(\".\" + params.slideClass + \"[data-swiper-slide-index=\\\"\" + realIndex + \"\\\"]:not(.\" + params.slideDuplicateClass + \")\").eq(0).index();\n nextTick(function () {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","import slideTo from './slideTo';\nimport slideToLoop from './slideToLoop';\nimport slideNext from './slideNext';\nimport slidePrev from './slidePrev';\nimport slideReset from './slideReset';\nimport slideToClosest from './slideToClosest';\nimport slideToClickedSlide from './slideToClickedSlide';\nexport default {\n slideTo: slideTo,\n slideToLoop: slideToLoop,\n slideNext: slideNext,\n slidePrev: slidePrev,\n slideReset: slideReset,\n slideToClosest: slideToClosest,\n slideToClickedSlide: slideToClickedSlide\n};","import { getDocument } from 'ssr-window';\nimport $ from '../../../utils/dom';\nexport default function loopCreate() {\n var swiper = this;\n var document = getDocument();\n var params = swiper.params,\n $wrapperEl = swiper.$wrapperEl; // Remove duplicated slides\n\n $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass).remove();\n var slides = $wrapperEl.children(\".\" + params.slideClass);\n\n if (params.loopFillGroupWithBlank) {\n var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (var i = 0; i < blankSlidesNum; i += 1) {\n var blankNode = $(document.createElement('div')).addClass(params.slideClass + \" \" + params.slideBlankClass);\n $wrapperEl.append(blankNode);\n }\n\n slides = $wrapperEl.children(\".\" + params.slideClass);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length) {\n swiper.loopedSlides = slides.length;\n }\n\n var prependSlides = [];\n var appendSlides = [];\n slides.each(function (el, index) {\n var slide = $(el);\n\n if (index < swiper.loopedSlides) {\n appendSlides.push(el);\n }\n\n if (index < slides.length && index >= slides.length - swiper.loopedSlides) {\n prependSlides.push(el);\n }\n\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (var _i = 0; _i < appendSlides.length; _i += 1) {\n $wrapperEl.append($(appendSlides[_i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (var _i2 = prependSlides.length - 1; _i2 >= 0; _i2 -= 1) {\n $wrapperEl.prepend($(prependSlides[_i2].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n var swiper = this;\n swiper.emit('beforeLoopFix');\n var activeIndex = swiper.activeIndex,\n slides = swiper.slides,\n loopedSlides = swiper.loopedSlides,\n allowSlidePrev = swiper.allowSlidePrev,\n allowSlideNext = swiper.allowSlideNext,\n snapGrid = swiper.snapGrid,\n rtl = swiper.rtlTranslate;\n var newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n var snapTranslate = -snapGrid[activeIndex];\n var diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n var slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n\n var _slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (_slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl,\n params = swiper.params,\n slides = swiper.slides;\n $wrapperEl.children(\".\" + params.slideClass + \".\" + params.slideDuplicateClass + \",.\" + params.slideClass + \".\" + params.slideBlankClass).remove();\n slides.removeAttr('data-swiper-slide-index');\n}","import loopCreate from './loopCreate';\nimport loopFix from './loopFix';\nimport loopDestroy from './loopDestroy';\nexport default {\n loopCreate: loopCreate,\n loopFix: loopFix,\n loopDestroy: loopDestroy\n};","export default function setGrabCursor(moving) {\n var swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n var el = swiper.el;\n el.style.cursor = 'move';\n el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';\n el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n var swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper.el.style.cursor = '';\n}","import setGrabCursor from './setGrabCursor';\nimport unsetGrabCursor from './unsetGrabCursor';\nexport default {\n setGrabCursor: setGrabCursor,\n unsetGrabCursor: unsetGrabCursor\n};","export default function appendSlide(slides) {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl,\n params = swiper.params;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && swiper.support.observer)) {\n swiper.update();\n }\n}","export default function prependSlide(slides) {\n var swiper = this;\n var params = swiper.params,\n $wrapperEl = swiper.$wrapperEl,\n activeIndex = swiper.activeIndex;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n var newActiveIndex = activeIndex + 1;\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (var i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && swiper.support.observer)) {\n swiper.update();\n }\n\n swiper.slideTo(newActiveIndex, 0, false);\n}","export default function addSlide(index, slides) {\n var swiper = this;\n var $wrapperEl = swiper.$wrapperEl,\n params = swiper.params,\n activeIndex = swiper.activeIndex;\n var activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(\".\" + params.slideClass);\n }\n\n var baseLength = swiper.slides.length;\n\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n\n var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n var slidesBuffer = [];\n\n for (var i = baseLength - 1; i >= index; i -= 1) {\n var currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (var _i = 0; _i < slides.length; _i += 1) {\n if (slides[_i]) $wrapperEl.append(slides[_i]);\n }\n\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (var _i2 = 0; _i2 < slidesBuffer.length; _i2 += 1) {\n $wrapperEl.append(slidesBuffer[_i2]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && swiper.support.observer)) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}","export default function removeSlide(slidesIndexes) {\n var swiper = this;\n var params = swiper.params,\n $wrapperEl = swiper.$wrapperEl,\n activeIndex = swiper.activeIndex;\n var activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(\".\" + params.slideClass);\n }\n\n var newActiveIndex = activeIndexBuffer;\n var indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (var i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!(params.observer && swiper.support.observer)) {\n swiper.update();\n }\n\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}","export default function removeAllSlides() {\n var swiper = this;\n var slidesIndexes = [];\n\n for (var i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n\n swiper.removeSlide(slidesIndexes);\n}","import appendSlide from './appendSlide';\nimport prependSlide from './prependSlide';\nimport addSlide from './addSlide';\nimport removeSlide from './removeSlide';\nimport removeAllSlides from './removeAllSlides';\nexport default {\n appendSlide: appendSlide,\n prependSlide: prependSlide,\n addSlide: addSlide,\n removeSlide: removeSlide,\n removeAllSlides: removeAllSlides\n};","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport { extend, now } from '../../../utils/utils';\nexport default function onTouchStart(event) {\n var swiper = this;\n var document = getDocument();\n var window = getWindow();\n var data = swiper.touchEventsData;\n var params = swiper.params,\n touches = swiper.touches;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n var e = event;\n if (e.originalEvent) e = e.originalEvent;\n var $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : \".\" + params.noSwipingClass)[0]) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n var startX = touches.currentX;\n var startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.screen.width - edgeSwipeThreshold)) {\n return;\n }\n\n extend(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n\n if (e.type !== 'touchstart') {\n var preventDefault = true;\n if ($targetEl.is(data.formElements)) preventDefault = false;\n\n if (document.activeElement && $(document.activeElement).is(data.formElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if (params.touchStartForcePreventDefault || shouldPreventDefault) {\n e.preventDefault();\n }\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../../utils/dom';\nimport { extend, now } from '../../../utils/utils';\nexport default function onTouchMove(event) {\n var document = getDocument();\n var swiper = this;\n var data = swiper.touchEventsData;\n var params = swiper.params,\n touches = swiper.touches,\n rtl = swiper.rtlTranslate;\n var e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n var targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n var pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n var pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n // isMoved = true;\n swiper.allowClick = false;\n\n if (data.isTouched) {\n extend(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.formElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n var diffX = touches.currentX - touches.startX;\n var diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return;\n\n if (typeof data.isScrolling === 'undefined') {\n var touchAngle;\n\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n var diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n var disableParentSwiper = true;\n var resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio);\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio);\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (params.freeMode) {\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../../utils/utils';\nexport default function onTouchEnd(event) {\n var swiper = this;\n var data = swiper.touchEventsData;\n var params = swiper.params,\n touches = swiper.touches,\n rtl = swiper.rtlTranslate,\n $wrapperEl = swiper.$wrapperEl,\n slidesGrid = swiper.slidesGrid,\n snapGrid = swiper.snapGrid;\n var e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n var touchEndTime = now();\n var timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\n if (swiper.allowClick) {\n swiper.updateClickedSlide(e);\n swiper.emit('tap click', e);\n\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(function () {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n var currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (params.freeMode) {\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n\n return;\n }\n\n if (params.freeModeMomentum) {\n if (data.velocities.length > 1) {\n var lastMoveEvent = data.velocities.pop();\n var velocityEvent = data.velocities.pop();\n var distance = lastMoveEvent.position - velocityEvent.position;\n var time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n\n if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {\n swiper.velocity = 0;\n } // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n\n\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n\n swiper.velocity *= params.freeModeMomentumVelocityRatio;\n data.velocities.length = 0;\n var momentumDuration = 1000 * params.freeModeMomentumRatio;\n var momentumDistance = swiper.velocity * momentumDuration;\n var newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n var doBounce = false;\n var afterBouncePosition;\n var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;\n var needsLoopFix;\n\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeModeMomentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeModeSticky) {\n var nextSlide;\n\n for (var j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n\n newPosition = -newPosition;\n }\n\n if (needsLoopFix) {\n swiper.once('transitionEnd', function () {\n swiper.loopFix();\n });\n } // Fix duration\n\n\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n\n if (params.freeModeSticky) {\n // If freeModeSticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n var moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n var currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeModeMomentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n swiper.emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(function () {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(function () {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeModeSticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n return;\n } // Find current slide\n\n\n var stopIndex = 0;\n var groupSize = swiper.slidesSizesGrid[0];\n\n for (var i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n var _increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (typeof slidesGrid[i + _increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + _increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + _increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n } // Find current slide size\n\n\n var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n var increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n\n var isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(stopIndex + increment);\n }\n\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","export default function onResize() {\n var swiper = this;\n var params = swiper.params,\n el = swiper.el;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n var allowSlideNext = swiper.allowSlideNext,\n allowSlidePrev = swiper.allowSlidePrev,\n snapGrid = swiper.snapGrid; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n var swiper = this;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","export default function onScroll() {\n var swiper = this;\n var wrapperEl = swiper.wrapperEl,\n rtlTranslate = swiper.rtlTranslate;\n swiper.previousTranslate = swiper.translate;\n\n if (swiper.isHorizontal()) {\n if (rtlTranslate) {\n swiper.translate = wrapperEl.scrollWidth - wrapperEl.offsetWidth - wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollLeft;\n }\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\n if (swiper.translate === -0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n var newProgress;\n var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart';\nimport onTouchMove from './onTouchMove';\nimport onTouchEnd from './onTouchEnd';\nimport onResize from './onResize';\nimport onClick from './onClick';\nimport onScroll from './onScroll';\nvar dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nfunction attachEvents() {\n var swiper = this;\n var document = getDocument();\n var params = swiper.params,\n touchEvents = swiper.touchEvents,\n el = swiper.el,\n wrapperEl = swiper.wrapperEl,\n device = swiper.device,\n support = swiper.support;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n var capture = !!params.nested; // Touch Events\n\n if (!support.touch && support.pointerEvents) {\n el.addEventListener(touchEvents.start, swiper.onTouchStart, false);\n document.addEventListener(touchEvents.move, swiper.onTouchMove, capture);\n document.addEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (support.touch) {\n var passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n el.addEventListener(touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture: capture\n } : capture);\n el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n }\n\n if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {\n el.addEventListener('mousedown', swiper.onTouchStart, false);\n document.addEventListener('mousemove', swiper.onTouchMove, capture);\n document.addEventListener('mouseup', swiper.onTouchEnd, false);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el.addEventListener('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl.addEventListener('scroll', swiper.onScroll);\n } // Resize handler\n\n\n if (params.updateOnWindowResize) {\n swiper.on(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper.on('observerUpdate', onResize, true);\n }\n}\n\nfunction detachEvents() {\n var swiper = this;\n var document = getDocument();\n var params = swiper.params,\n touchEvents = swiper.touchEvents,\n el = swiper.el,\n wrapperEl = swiper.wrapperEl,\n device = swiper.device,\n support = swiper.support;\n var capture = !!params.nested; // Touch Events\n\n if (!support.touch && support.pointerEvents) {\n el.removeEventListener(touchEvents.start, swiper.onTouchStart, false);\n document.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n document.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);\n } else {\n if (support.touch) {\n var passiveListener = touchEvents.start === 'onTouchStart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);\n el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);\n el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n }\n\n if (params.simulateTouch && !device.ios && !device.android || params.simulateTouch && !support.touch && device.ios) {\n el.removeEventListener('mousedown', swiper.onTouchStart, false);\n document.removeEventListener('mousemove', swiper.onTouchMove, capture);\n document.removeEventListener('mouseup', swiper.onTouchEnd, false);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el.removeEventListener('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl.removeEventListener('scroll', swiper.onScroll);\n } // Resize handler\n\n\n swiper.off(device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize);\n}\n\nexport default {\n attachEvents: attachEvents,\n detachEvents: detachEvents\n};","import { extend } from '../../../utils/utils';\nexport default function setBreakpoint() {\n var swiper = this;\n var activeIndex = swiper.activeIndex,\n initialized = swiper.initialized,\n _swiper$loopedSlides = swiper.loopedSlides,\n loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides,\n params = swiper.params,\n $el = swiper.$el;\n var breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\n var breakpoint = swiper.getBreakpoint(breakpoints);\n\n if (breakpoint && swiper.currentBreakpoint !== breakpoint) {\n var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n\n if (breakpointOnlyParams) {\n ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach(function (param) {\n var paramValue = breakpointOnlyParams[param];\n if (typeof paramValue === 'undefined') return;\n\n if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {\n breakpointOnlyParams[param] = 'auto';\n } else if (param === 'slidesPerView') {\n breakpointOnlyParams[param] = parseFloat(paramValue);\n } else {\n breakpointOnlyParams[param] = parseInt(paramValue, 10);\n }\n });\n }\n\n var breakpointParams = breakpointOnlyParams || swiper.originalParams;\n var wasMultiRow = params.slidesPerColumn > 1;\n var isMultiRow = breakpointParams.slidesPerColumn > 1;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(params.containerModifierClass + \"multirow \" + params.containerModifierClass + \"multirow-column\");\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(params.containerModifierClass + \"multirow\");\n\n if (breakpointParams.slidesPerColumnFill === 'column') {\n $el.addClass(params.containerModifierClass + \"multirow-column\");\n }\n\n swiper.emitContainerClasses();\n }\n\n var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n\n extend(swiper.params, breakpointParams);\n extend(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n swiper.currentBreakpoint = breakpoint;\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n }\n}","import { getWindow } from 'ssr-window';\nexport default function getBreakpoints(breakpoints) {\n var window = getWindow(); // Get breakpoint for window width\n\n if (!breakpoints) return undefined;\n var breakpoint = false;\n var points = Object.keys(breakpoints).map(function (point) {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n var minRatio = parseFloat(point.substr(1));\n var value = window.innerHeight * minRatio;\n return {\n value: value,\n point: point\n };\n }\n\n return {\n value: point,\n point: point\n };\n });\n points.sort(function (a, b) {\n return parseInt(a.value, 10) - parseInt(b.value, 10);\n });\n\n for (var i = 0; i < points.length; i += 1) {\n var _points$i = points[i],\n point = _points$i.point,\n value = _points$i.value;\n\n if (value <= window.innerWidth) {\n breakpoint = point;\n }\n }\n\n return breakpoint || 'max';\n}","import setBreakpoint from './setBreakpoint';\nimport getBreakpoint from './getBreakpoint';\nexport default {\n setBreakpoint: setBreakpoint,\n getBreakpoint: getBreakpoint\n};","export default function addClasses() {\n var swiper = this;\n var classNames = swiper.classNames,\n params = swiper.params,\n rtl = swiper.rtl,\n $el = swiper.$el,\n device = swiper.device;\n var suffixes = [];\n suffixes.push('initialized');\n suffixes.push(params.direction);\n\n if (params.freeMode) {\n suffixes.push('free-mode');\n }\n\n if (params.autoHeight) {\n suffixes.push('autoheight');\n }\n\n if (rtl) {\n suffixes.push('rtl');\n }\n\n if (params.slidesPerColumn > 1) {\n suffixes.push('multirow');\n\n if (params.slidesPerColumnFill === 'column') {\n suffixes.push('multirow-column');\n }\n }\n\n if (device.android) {\n suffixes.push('android');\n }\n\n if (device.ios) {\n suffixes.push('ios');\n }\n\n if (params.cssMode) {\n suffixes.push('css-mode');\n }\n\n suffixes.forEach(function (suffix) {\n classNames.push(params.containerModifierClass + suffix);\n });\n $el.addClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n var swiper = this;\n var $el = swiper.$el,\n classNames = swiper.classNames;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","import addClasses from './addClasses';\nimport removeClasses from './removeClasses';\nexport default {\n addClasses: addClasses,\n removeClasses: removeClasses\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../../utils/dom';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n var window = getWindow();\n var image;\n\n function onReady() {\n if (callback) callback();\n }\n\n var isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n var swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {\n var imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import loadImage from './loadImage';\nimport preloadImages from './preloadImages';\nexport default {\n loadImage: loadImage,\n preloadImages: preloadImages\n};","function checkOverflow() {\n var swiper = this;\n var params = swiper.params;\n var wasLocked = swiper.isLocked;\n var lastSlidePosition = swiper.slides.length > 0 && params.slidesOffsetBefore + params.spaceBetween * (swiper.slides.length - 1) + swiper.slides[0].offsetWidth * swiper.slides.length;\n\n if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) {\n swiper.isLocked = lastSlidePosition <= swiper.size;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n\n swiper.allowSlideNext = !swiper.isLocked;\n swiper.allowSlidePrev = !swiper.isLocked; // events\n\n if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n if (swiper.navigation) swiper.navigation.update();\n }\n}\n\nexport default {\n checkOverflow: checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'container',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Free mode\n freeMode: false,\n freeModeMomentum: true,\n freeModeMomentumRatio: 1,\n freeModeMomentumBounce: true,\n freeModeMomentumBounceRatio: 1,\n freeModeMomentumVelocityRatio: 1,\n freeModeSticky: false,\n freeModeMinimumVelocity: 0.02,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n // Breakpoints\n breakpoints: undefined,\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerColumn: 1,\n slidesPerColumnFill: 'column',\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: false,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n watchSlidesVisibility: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n // NS\n containerModifierClass: 'swiper-container-',\n // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\n/* eslint no-param-reassign: \"off\" */\nimport $ from '../../utils/dom';\nimport { extend, now, deleteProps } from '../../utils/utils';\nimport { getSupport } from '../../utils/get-support';\nimport { getDevice } from '../../utils/get-device';\nimport { getBrowser } from '../../utils/get-browser';\nimport Resize from '../../modules/resize/resize';\nimport Observer from '../../modules/observer/observer';\nimport modular from './modular';\nimport eventsEmitter from './events-emitter';\nimport update from './update/index';\nimport translate from './translate/index';\nimport transition from './transition/index';\nimport slide from './slide/index';\nimport loop from './loop/index';\nimport grabCursor from './grab-cursor/index';\nimport manipulation from './manipulation/index';\nimport events from './events/index';\nimport breakpoints from './breakpoints/index';\nimport classes from './classes/index';\nimport images from './images/index';\nimport checkOverflow from './check-overflow/index';\nimport defaults from './defaults';\nvar prototypes = {\n modular: modular,\n eventsEmitter: eventsEmitter,\n update: update,\n translate: translate,\n transition: transition,\n slide: slide,\n loop: loop,\n grabCursor: grabCursor,\n manipulation: manipulation,\n events: events,\n breakpoints: breakpoints,\n checkOverflow: checkOverflow,\n classes: classes,\n images: images\n};\nvar extendedDefaults = {};\n\nvar Swiper = /*#__PURE__*/function () {\n function Swiper() {\n var el;\n var params;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {\n params = args[0];\n } else {\n el = args[0];\n params = args[1];\n }\n\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el; // Swiper Instance\n\n var swiper = this;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n Object.keys(prototypes).forEach(function (prototypeGroup) {\n Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {\n if (!Swiper.prototype[protoMethod]) {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n }\n });\n });\n\n if (typeof swiper.modules === 'undefined') {\n swiper.modules = {};\n }\n\n Object.keys(swiper.modules).forEach(function (moduleName) {\n var module = swiper.modules[moduleName];\n\n if (module.params) {\n var moduleParamName = Object.keys(module.params)[0];\n var moduleParams = module.params[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) return;\n if (!(moduleParamName in params && 'enabled' in moduleParams)) return;\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n }\n }); // Extend defaults with modules params\n\n var swiperParams = extend({}, defaults);\n swiper.useParams(swiperParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(function (eventName) {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n } // Save Dom lib\n\n\n swiper.$ = $; // Find el\n\n var $el = $(swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return undefined;\n }\n\n if ($el.length > 1) {\n var swipers = [];\n $el.each(function (containerEl) {\n var newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n return swipers;\n }\n\n el.swiper = swiper; // Find Wrapper\n\n var $wrapperEl;\n\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n $wrapperEl = $(el.shadowRoot.querySelector(\".\" + swiper.params.wrapperClass)); // Children needs to return slot items\n\n $wrapperEl.children = function (options) {\n return $el.children(options);\n };\n } else {\n $wrapperEl = $el.children(\".\" + swiper.params.wrapperClass);\n } // Extend Swiper\n\n\n extend(swiper, {\n $el: $el,\n el: el,\n $wrapperEl: $wrapperEl,\n wrapperEl: $wrapperEl[0],\n // Classes\n classNames: [],\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal: function isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical: function isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n var touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n var desktop = ['mousedown', 'mousemove', 'mouseup'];\n\n if (swiper.support.pointerEvents) {\n desktop = ['pointerdown', 'pointermove', 'pointerup'];\n }\n\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n formElements: 'input, select, option, textarea, button, video, label',\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n }); // Install Modules\n\n swiper.useModules();\n swiper.emit('_swiper'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n\n\n return swiper;\n }\n\n var _proto = Swiper.prototype;\n\n _proto.emitContainerClasses = function emitContainerClasses() {\n var swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n var classes = swiper.el.className.split(' ').filter(function (className) {\n return className.indexOf('swiper-container') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', classes.join(' '));\n };\n\n _proto.emitSlidesClasses = function emitSlidesClasses() {\n var swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n swiper.slides.each(function (slideEl) {\n var classes = slideEl.className.split(' ').filter(function (className) {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n });\n swiper.emit('_slideClass', slideEl, classes.join(' '));\n });\n };\n\n _proto.slidesPerViewDynamic = function slidesPerViewDynamic() {\n var swiper = this;\n var params = swiper.params,\n slides = swiper.slides,\n slidesGrid = swiper.slidesGrid,\n swiperSize = swiper.size,\n activeIndex = swiper.activeIndex;\n var spv = 1;\n\n if (params.centeredSlides) {\n var slideSize = slides[activeIndex].swiperSlideSize;\n var breakLoop;\n\n for (var i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n\n for (var _i = activeIndex - 1; _i >= 0; _i -= 1) {\n if (slides[_i] && !breakLoop) {\n slideSize += slides[_i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n for (var _i2 = activeIndex + 1; _i2 < slides.length; _i2 += 1) {\n if (slidesGrid[_i2] - slidesGrid[activeIndex] < swiperSize) {\n spv += 1;\n }\n }\n }\n\n return spv;\n };\n\n _proto.update = function update() {\n var swiper = this;\n if (!swiper || swiper.destroyed) return;\n var snapGrid = swiper.snapGrid,\n params = swiper.params; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n var translated;\n\n if (swiper.params.freeMode) {\n setTranslate();\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n };\n\n _proto.changeDirection = function changeDirection(newDirection, needUpdate) {\n if (needUpdate === void 0) {\n needUpdate = true;\n }\n\n var swiper = this;\n var currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(\"\" + swiper.params.containerModifierClass + currentDirection).addClass(\"\" + swiper.params.containerModifierClass + newDirection);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(function (slideEl) {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n };\n\n _proto.init = function init() {\n var swiper = this;\n if (swiper.initialized) return;\n swiper.emit('beforeInit'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n };\n\n _proto.destroy = function destroy(deleteInstance, cleanStyles) {\n if (deleteInstance === void 0) {\n deleteInstance = true;\n }\n\n if (cleanStyles === void 0) {\n cleanStyles = true;\n }\n\n var swiper = this;\n var params = swiper.params,\n $el = swiper.$el,\n $wrapperEl = swiper.$wrapperEl,\n slides = swiper.slides;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(function (eventName) {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n };\n\n Swiper.extendDefaults = function extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n };\n\n Swiper.installModule = function installModule(module) {\n if (!Swiper.prototype.modules) Swiper.prototype.modules = {};\n var name = module.name || Object.keys(Swiper.prototype.modules).length + \"_\" + now();\n Swiper.prototype.modules[name] = module;\n };\n\n Swiper.use = function use(module) {\n if (Array.isArray(module)) {\n module.forEach(function (m) {\n return Swiper.installModule(m);\n });\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n };\n\n _createClass(Swiper, null, [{\n key: \"extendedDefaults\",\n get: function get() {\n return extendedDefaults;\n }\n }, {\n key: \"defaults\",\n get: function get() {\n return defaults;\n }\n }]);\n\n return Swiper;\n}();\n\nSwiper.use([Resize, Observer]);\nexport default Swiper;","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MemberAnalysis.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MemberAnalysis.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MemberAnalysis.vue?vue&type=template&id=ec29c824&scoped=true&\"\nimport script from \"./MemberAnalysis.vue?vue&type=script&lang=js&\"\nexport * from \"./MemberAnalysis.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MemberAnalysis.vue?vue&type=style&index=0&id=ec29c824&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"ec29c824\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"market-analysis\"},[_c('div',{staticClass:\"header-ctn\"},[_c('div',{staticClass:\"title-ctn\"},[_c('span',{staticClass:\"title\"},[_vm._v(\"营销分析-小智会员\")]),_c('img',{attrs:{\"src\":require(\"@/assets/questionTip.png\")},on:{\"click\":_vm.showTooltip}})])]),_c('div',{staticClass:\"desc\"},[_vm._v(\"活动时间内,小智会员服务号发布营销活动的效果统计\")]),_c('div',{staticClass:\"search-ctn\"},[_c('div',{staticClass:\"field-group\"},[_c('van-field',{attrs:{\"label\":\"发布开始时间\",\"input-align\":\"right\",\"readonly\":\"\",\"placeholder\":\"请选择开始时间\"},on:{\"click\":_vm.showStartTimePicker},model:{value:(_vm.startTime),callback:function ($$v) {_vm.startTime=$$v},expression:\"startTime\"}}),_c('van-field',{attrs:{\"label\":\"发布结束时间\",\"input-align\":\"right\",\"readonly\":\"\",\"placeholder\":\"请选择结束时间\"},on:{\"click\":_vm.showEndTimePicker},model:{value:(_vm.endTime),callback:function ($$v) {_vm.endTime=$$v},expression:\"endTime\"}}),_c('van-field',{attrs:{\"rows\":\"1\",\"autosize\":\"\",\"type\":\"textarea\",\"label\":\"活动名称\",\"input-align\":\"right\",\"readonly\":\"\",\"placeholder\":\"请选择活动名称\"},on:{\"click\":_vm.showPromotionPicker},model:{value:(_vm.promotionName),callback:function ($$v) {_vm.promotionName=$$v},expression:\"promotionName\"}})],1),_c('div',{staticClass:\"btn\",on:{\"click\":_vm.doSearch}},[_vm._v(\"查询\")])]),_c('div',{staticClass:\"rect-chart\"},[_c('div',{staticClass:\"rect-list\"},[_c('div',{staticClass:\"trapezoid t1\"},[_c('div',{staticClass:\"row-text\"},[_c('div',{staticClass:\"action\"},[_vm._v(\"触达\")]),_c('div',{staticClass:\"action-num\"},[_vm._v(_vm._s(_vm.resultData.reachPer))]),_c('div',{staticClass:\"action-unit\"},[_vm._v(\"/人\")])])]),_c('div',{staticClass:\"trapezoid t2\"},[_c('div',{staticClass:\"row-text\"},[_c('div',{staticClass:\"action\"},[_vm._v(\"点击\")]),_c('div',{staticClass:\"action-num\"},[_vm._v(_vm._s(_vm.resultData.clickPer))]),_c('div',{staticClass:\"action-unit\"},[_vm._v(\"/人\")])])]),_c('div',{staticClass:\"trapezoid t3\"},[_c('div',{staticClass:\"row-text\"},[_c('div',{staticClass:\"action\"},[_vm._v(\"下单\")]),_c('div',{staticClass:\"action-num\"},[_vm._v(_vm._s(_vm.resultData.orderPer))]),_c('div',{staticClass:\"action-unit\"},[_vm._v(\"/人\")])])])]),_vm._m(0),_c('div',{staticClass:\"num-container\"},[_c('div',{staticClass:\"num-li\"},[_c('div',{staticClass:\"num\"},[_c('span',[_vm._v(_vm._s(_vm.resultData.clickConRate))]),_c('span',{staticClass:\"percent\"},[_vm._v(\"%\")])]),_c('div',{staticClass:\"txt\"},[_vm._v(\"点击转化率\")])]),_c('div',{staticClass:\"num-li\"},[_c('div',{staticClass:\"num\"},[_c('span',[_vm._v(_vm._s(_vm.resultData.orderConRate))]),_c('span',{staticClass:\"percent\"},[_vm._v(\"%\")])]),_c('div',{staticClass:\"txt\"},[_vm._v(\"下单转化率\")])])])]),_c('div',{staticClass:\"swiper-container card-panel-list\"},[_c('div',{staticClass:\"swiper-wrapper\"},[_c('div',{staticClass:\"swiper-slide card-panel\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"触达人数\")]),_c('div',{staticClass:\"raw-data\"},[_c('span',{staticClass:\"raw-data-txt\"},[_vm._v(\"环比\")]),_c('span',{staticClass:\"raw-data-num\",class:_vm.resultData.qoqRpClass},[_vm._v(_vm._s(_vm.resultData.qoqRpValue))]),(_vm.resultData.qoqRpSrc)?_c('img',{attrs:{\"src\":_vm.resultData.qoqRpSrc}}):_vm._e()])])]),_c('div',{staticClass:\"swiper-slide card-panel\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"点击人数\")]),_c('div',{staticClass:\"raw-data\"},[_c('span',{staticClass:\"raw-data-txt\"},[_vm._v(\"环比\")]),_c('span',{staticClass:\"raw-data-num\",class:_vm.resultData.qoqCpClass},[_vm._v(_vm._s(_vm.resultData.qoqCpValue))]),(_vm.resultData.qoqCpSrc)?_c('img',{attrs:{\"src\":_vm.resultData.qoqCpSrc}}):_vm._e()])])]),_c('div',{staticClass:\"swiper-slide card-panel\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"下单人数\")]),_c('div',{staticClass:\"raw-data\"},[_c('span',{staticClass:\"raw-data-txt\"},[_vm._v(\"环比\")]),_c('span',{staticClass:\"raw-data-num\",class:_vm.resultData.qoqOpClass},[_vm._v(_vm._s(_vm.resultData.qoqOpValue))]),(_vm.resultData.qoqOpSrc)?_c('img',{attrs:{\"src\":_vm.resultData.qoqOpSrc}}):_vm._e()])])]),_c('div',{staticClass:\"swiper-slide card-panel\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"下单金额\")]),_c('div',{staticClass:\"raw-data\"},[_c('span',{staticClass:\"raw-data-txt\"},[_vm._v(\"环比\")]),_c('span',{staticClass:\"raw-data-num\",class:_vm.resultData.qoqOpaClass},[_vm._v(_vm._s(_vm.resultData.qoqOpaValue))]),(_vm.resultData.qoqOpaSrc)?_c('img',{attrs:{\"src\":_vm.resultData.qoqOpaSrc}}):_vm._e()])])]),_c('div',{staticClass:\"swiper-slide card-panel\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"点击转化率\")]),_c('div',{staticClass:\"raw-data\"},[_c('span',{staticClass:\"raw-data-txt\"},[_vm._v(\"环比\")]),_c('span',{staticClass:\"raw-data-num\",class:_vm.resultData.qoqCcrClass},[_vm._v(_vm._s(_vm.resultData.qoqCcrValue))]),(_vm.resultData.qoqCcrSrc)?_c('img',{attrs:{\"src\":_vm.resultData.qoqCcrSrc}}):_vm._e()])])]),_c('div',{staticClass:\"swiper-slide card-panel\"},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"下单转化率\")]),_c('div',{staticClass:\"raw-data\"},[_c('span',{staticClass:\"raw-data-txt\"},[_vm._v(\"环比\")]),_c('span',{staticClass:\"raw-data-num\",class:_vm.resultData.qoqOcrClass},[_vm._v(_vm._s(_vm.resultData.qoqOcrValue))]),(_vm.resultData.qoqOcrSrc)?_c('img',{attrs:{\"src\":_vm.resultData.qoqOcrSrc}}):_vm._e()])])])])]),_c('div',{staticClass:\"market-chart\"},[(_vm.loading)?_c('van-loading',{attrs:{\"type\":\"spinner\"}}):_vm._e(),(_vm.lineChartData.data)?[_c('line-chart',{ref:\"chart\",attrs:{\"chart-data\":_vm.lineChartData,\"line-type\":'mutiple'}})]:[_vm._m(1)]],2),_c('van-popup',{attrs:{\"round\":\"\",\"position\":\"bottom\"},model:{value:(_vm.showSTPicker),callback:function ($$v) {_vm.showSTPicker=$$v},expression:\"showSTPicker\"}},[_c('van-datetime-picker',{attrs:{\"type\":\"date\",\"title\":\"发布开始时间\",\"min-date\":_vm.minDate,\"max-date\":_vm.maxDate},on:{\"confirm\":_vm.onConfirmStartTime,\"cancel\":_vm.onCancelStartTime},model:{value:(_vm.startDate),callback:function ($$v) {_vm.startDate=$$v},expression:\"startDate\"}})],1),_c('van-popup',{attrs:{\"round\":\"\",\"position\":\"bottom\"},model:{value:(_vm.showETPicker),callback:function ($$v) {_vm.showETPicker=$$v},expression:\"showETPicker\"}},[_c('van-datetime-picker',{attrs:{\"type\":\"date\",\"title\":\"发布结束日期\",\"min-date\":_vm.minEndDate,\"max-date\":_vm.maxDate},on:{\"confirm\":_vm.onConfirmEndTime,\"cancel\":_vm.onCancelEndTime},model:{value:(_vm.endDate),callback:function ($$v) {_vm.endDate=$$v},expression:\"endDate\"}})],1),_c('van-popup',{attrs:{\"round\":\"\",\"position\":\"bottom\"},model:{value:(_vm.showPromotPicker),callback:function ($$v) {_vm.showPromotPicker=$$v},expression:\"showPromotPicker\"}},[_c('van-picker',{attrs:{\"title\":\"活动名称\",\"show-toolbar\":\"\",\"columns\":_vm.promotionList},on:{\"confirm\":_vm.onConfirmPromotion,\"cancel\":_vm.onCancelPromotion}})],1),_c('van-popup',{style:({ height: '50%' }),attrs:{\"round\":\"\",\"position\":\"bottom\"},model:{value:(_vm.showTip),callback:function ($$v) {_vm.showTip=$$v},expression:\"showTip\"}},[_c('div',{staticClass:\"tip-container\"},[_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"触达人数:\")]),_vm._v(\"统计时间内,看到活动推送的人数 \")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"点击人数:\")]),_vm._v(\"统计时间内,点击活动推送的人数 \")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"下单人数:\")]),_vm._v(\"统计时间内,下单的顾客数 \")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"下单金额:\")]),_vm._v(\"统计时间内,下单的金额 \")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"点击转化率:\")]),_vm._v(\"统计时间内,看到活动的顾客中,点击活动的顾客占比 \")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"下单转化率:\")]),_vm._v(\"统计时间内,点击活动的顾客中,下单的顾客占比 \")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"环比:\")]),_vm._v(\"指连续2个统计周期内的量的变化比,如当期为2020/5/1—2020/5/31,则上期数为2020/4/1—2020/4/30 \")])])])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"img-container\"},[_c('img',{attrs:{\"src\":require(\"@/assets/robot_arrow_1.png\")}}),_c('img',{attrs:{\"src\":require(\"@/assets/robot_arrow_2.png\")}})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"empty-ctn\"},[_c('div',{staticClass:\"empty-img\"},[_c('img',{attrs:{\"src\":require(\"@/assets/empty.png\")}})]),_c('div',{staticClass:\"no-text\"},[_vm._v(\"暂无数据\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MarketAnalysis.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./MarketAnalysis.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./MarketAnalysis.vue?vue&type=template&id=545093ec&scoped=true&\"\nimport script from \"./MarketAnalysis.vue?vue&type=script&lang=js&\"\nexport * from \"./MarketAnalysis.vue?vue&type=script&lang=js&\"\nimport style0 from \"./MarketAnalysis.vue?vue&type=style&index=0&id=545093ec&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"545093ec\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"repurchase-analysis\"},[_c('div',{staticClass:\"header-ctn\"},[_c('div',{staticClass:\"title-ctn\"},[_c('span',{staticClass:\"title\"},[_vm._v(\"复购分析\")]),_c('img',{attrs:{\"src\":require(\"@/assets/questionTip.png\")},on:{\"click\":_vm.showTooltip}})]),_c('span',{staticClass:\"header-right\"},[_vm._v(\"每月累计\")])]),_c('div',{staticClass:\"desc\"},[_vm._v(\"统计时间内,所有下单的顾客中,在本店下单两次及以上的顾客占比\")]),_c('div',{staticClass:\"hr\"}),_c('div',{staticClass:\"card-panel-list\"},[_c('div',{staticClass:\"card-panel\",class:_vm.activeCard === 1 ? 'selected' : '',on:{\"click\":function($event){return _vm.switchChart(1)}}},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"复购率\")]),_c('div',{staticClass:\"num\"},[_vm._v(_vm._s(_vm.repurchaseData.repurchaseRate || 0)+\"%\")])])]),_c('div',{staticClass:\"card-panel\",class:_vm.activeCard === 2 ? 'selected' : '',on:{\"click\":function($event){return _vm.switchChart(2)}}},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"复购人数\")]),_c('div',{staticClass:\"num\"},[_vm._v(_vm._s(_vm.repurchaseData.repurchaseCount || 0))])])]),_c('div',{staticClass:\"card-panel\",class:_vm.activeCard === 3 ? 'selected' : '',on:{\"click\":function($event){return _vm.switchChart(3)}}},[_c('div',{staticClass:\"content\"},[_c('div',{staticClass:\"title\"},[_vm._v(\"复购销售额\")]),_c('div',{staticClass:\"num\"},[_vm._v(\"¥\"+_vm._s(_vm.repurchaseData.repurchaseAmount || 0))])])])]),_c('div',{staticClass:\"repurchase-chart\"},[(_vm.chartData.data)?[_c('line-chart',{ref:\"chart\",attrs:{\"chart-data\":_vm.chartData}})]:[_vm._m(0)]],2),_c('van-popup',{style:({ height: '40%' }),attrs:{\"round\":\"\",\"position\":\"bottom\"},model:{value:(_vm.showTip),callback:function ($$v) {_vm.showTip=$$v},expression:\"showTip\"}},[_c('div',{staticClass:\"tip-container\"},[_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"复购率:\")]),_vm._v(\"统计时间内,所有下单的顾客中,在本店下单两次及以上的顾客占比\")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"复购人数:\")]),_vm._v(\"统计时间内,在本店下单两次以上的顾客数\")]),_c('p',{staticClass:\"tip\"},[_c('span',[_vm._v(\"复购销售额:\")]),_vm._v(\"统计时间内,在本店下单两次以上的顾客带来的的销售额同pos端传入的订单【实收金额】合计,扣去已经退款的金额\")])])])],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"empty-ctn\"},[_c('div',{staticClass:\"empty-img\"},[_c('img',{attrs:{\"src\":require(\"@/assets/empty.png\")}})]),_c('div',{staticClass:\"no-text\"},[_vm._v(\"暂无数据\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RepurchaseAnalysis.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RepurchaseAnalysis.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RepurchaseAnalysis.vue?vue&type=template&id=0b587850&scoped=true&\"\nimport script from \"./RepurchaseAnalysis.vue?vue&type=script&lang=js&\"\nexport * from \"./RepurchaseAnalysis.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RepurchaseAnalysis.vue?vue&type=style&index=0&id=0b587850&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0b587850\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./robotAnalysis.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./robotAnalysis.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./robotAnalysis.vue?vue&type=template&id=add74dfa&scoped=true&\"\nimport script from \"./robotAnalysis.vue?vue&type=script&lang=js&\"\nexport * from \"./robotAnalysis.vue?vue&type=script&lang=js&\"\nimport style0 from \"./robotAnalysis.vue?vue&type=style&index=0&id=add74dfa&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"add74dfa\",\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/material_red.b56fcba1.png\";","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar lang = require(\"../lang\");\n\nvar _dataProvider = require(\"../data/helper/dataProvider\");\n\nvar retrieveRawValue = _dataProvider.retrieveRawValue;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(dom, ecModel) {\n var ariaModel = ecModel.getModel('aria');\n\n if (!ariaModel.get('show')) {\n return;\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 var maxDataCnt = ariaModel.get('data.maxCount') || 10;\n var maxSeriesCnt = ariaModel.get('series.maxCount') || 10;\n var displaySeriesCnt = Math.min(seriesCnt, maxSeriesCnt);\n var ariaLabel;\n\n if (seriesCnt < 1) {\n // No series, no aria label\n return;\n } else {\n var title = getTitle();\n\n if (title) {\n ariaLabel = replace(getConfig('general.withTitle'), {\n title: title\n });\n } else {\n ariaLabel = getConfig('general.withoutTitle');\n }\n\n var seriesLabels = [];\n var prefix = seriesCnt > 1 ? 'series.multiple.prefix' : 'series.single.prefix';\n ariaLabel += replace(getConfig(prefix), {\n seriesCount: seriesCnt\n });\n ecModel.eachSeries(function (seriesModel, idx) {\n if (idx < displaySeriesCnt) {\n var seriesLabel;\n var seriesName = seriesModel.get('name');\n var seriesTpl = 'series.' + (seriesCnt > 1 ? 'multiple' : 'single') + '.';\n seriesLabel = getConfig(seriesName ? seriesTpl + 'withName' : seriesTpl + 'withoutName');\n seriesLabel = replace(seriesLabel, {\n seriesId: seriesModel.seriesIndex,\n seriesName: seriesModel.get('name'),\n seriesType: getSeriesTypeName(seriesModel.subType)\n });\n var data = seriesModel.getData();\n window.data = data;\n\n if (data.count() > maxDataCnt) {\n // Show part of data\n seriesLabel += replace(getConfig('data.partialData'), {\n displayCnt: maxDataCnt\n });\n } else {\n seriesLabel += getConfig('data.allData');\n }\n\n var dataLabels = [];\n\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(replace(name ? getConfig('data.withName') : getConfig('data.withoutName'), {\n name: name,\n value: value\n }));\n }\n }\n\n seriesLabel += dataLabels.join(getConfig('data.separator.middle')) + getConfig('data.separator.end');\n seriesLabels.push(seriesLabel);\n }\n });\n ariaLabel += seriesLabels.join(getConfig('series.multiple.separator.middle')) + getConfig('series.multiple.separator.end');\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(new RegExp('\\\\{\\\\s*' + key + '\\\\s*\\\\}', 'g'), value);\n });\n return result;\n }\n\n function getConfig(path) {\n var userConfig = ariaModel.get(path);\n\n if (userConfig == null) {\n var pathArr = path.split('.');\n var result = lang.aria;\n\n for (var i = 0; i < pathArr.length; ++i) {\n result = result[pathArr[i]];\n }\n\n return result;\n } else {\n return userConfig;\n }\n }\n\n function getTitle() {\n var title = ecModel.getModel('title').option;\n\n if (title && title.length) {\n title = title[0];\n }\n\n return title && title.text;\n }\n\n function getSeriesTypeName(type) {\n return lang.series.typeNames[type] || '自定义图';\n }\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * payload: {\n * brushIndex: number, or,\n * brushId: string, or,\n * brushName: string,\n * globalRanges: Array\n * }\n */\necharts.registerAction({\n type: 'brush',\n event: 'brush'\n /*, update: 'updateView' */\n\n}, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'brush',\n query: payload\n }, function (brushModel) {\n brushModel.setAreas(payload.areas);\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 */\n\necharts.registerAction({\n type: 'brushSelect',\n event: 'brushSelected',\n update: 'none'\n}, function () {});\necharts.registerAction({\n type: 'brushEnd',\n event: 'brushEnd',\n 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\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// FIXME emphasis label position is not same with normal label position\nvar RADIAN = Math.PI / 180;\n\nfunction adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft, viewTop, farthestX) {\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 if (list[j].y + delta > viewTop + viewHeight) {\n break;\n }\n\n list[j].y += delta;\n\n if (j > start && j + 1 < end && list[j + 1].y > list[j].y + list[j].height) {\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 if (list[j].y - delta < viewTop) {\n break;\n }\n\n list[j].y -= delta;\n\n if (j > 0 && list[j].y > list[j - 1].y + list[j - 1].height) {\n break;\n }\n }\n }\n\n function changeX(list, isDownList, cx, cy, r, dir) {\n var lastDeltaX = dir > 0 ? 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 if (list[i].labelAlignTo !== 'none') {\n continue;\n }\n\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 ? Math.sqrt((r + length + length2) * (r + length + length2) - deltaY * deltaY) : Math.abs(list[i].x - cx);\n\n if (isDownList && deltaX >= lastDeltaX) {\n // right-down, left-down\n deltaX = lastDeltaX - 10;\n }\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\n for (var i = 0; i < len; i++) {\n if (list[i].position === 'outer' && list[i].labelAlignTo === 'labelLine') {\n var dx = list[i].x - farthestX;\n list[i].linePoints[1][0] += dx;\n list[i].x = farthestX;\n }\n\n delta = list[i].y - lastY;\n\n if (delta < 0) {\n shiftDown(i, len, -delta, dir);\n }\n\n lastY = list[i].y + list[i].height;\n }\n\n if (viewHeight - lastY < 0) {\n shiftUp(len - 1, lastY - viewHeight);\n }\n\n for (var i = 0; i < len; i++) {\n if (list[i].y >= cy) {\n downList.push(list[i]);\n } else {\n upList.push(list[i]);\n }\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, viewLeft, viewTop) {\n var leftList = [];\n var rightList = [];\n var leftmostX = Number.MAX_VALUE;\n var rightmostX = -Number.MAX_VALUE;\n\n for (var i = 0; i < labelLayoutList.length; i++) {\n if (isPositionCenter(labelLayoutList[i])) {\n continue;\n }\n\n if (labelLayoutList[i].x < cx) {\n leftmostX = Math.min(leftmostX, labelLayoutList[i].x);\n leftList.push(labelLayoutList[i]);\n } else {\n rightmostX = Math.max(rightmostX, labelLayoutList[i].x);\n rightList.push(labelLayoutList[i]);\n }\n }\n\n adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight, viewLeft, viewTop, rightmostX);\n adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight, viewLeft, viewTop, leftmostX);\n\n for (var i = 0; i < labelLayoutList.length; i++) {\n var layout = labelLayoutList[i];\n\n if (isPositionCenter(layout)) {\n continue;\n }\n\n var linePoints = layout.linePoints;\n\n if (linePoints) {\n var isAlignToEdge = layout.labelAlignTo === 'edge';\n var realTextWidth = layout.textRect.width;\n var targetTextWidth;\n\n if (isAlignToEdge) {\n if (layout.x < cx) {\n targetTextWidth = linePoints[2][0] - layout.labelDistance - viewLeft - layout.labelMargin;\n } else {\n targetTextWidth = viewLeft + viewWidth - layout.labelMargin - linePoints[2][0] - layout.labelDistance;\n }\n } else {\n if (layout.x < cx) {\n targetTextWidth = layout.x - viewLeft - layout.bleedMargin;\n } else {\n targetTextWidth = viewLeft + viewWidth - layout.x - layout.bleedMargin;\n }\n }\n\n if (targetTextWidth < layout.textRect.width) {\n layout.text = textContain.truncateText(layout.text, targetTextWidth, layout.font);\n\n if (layout.labelAlignTo === 'edge') {\n realTextWidth = textContain.getWidth(layout.text, layout.font);\n }\n }\n\n var dist = linePoints[1][0] - linePoints[2][0];\n\n if (isAlignToEdge) {\n if (layout.x < cx) {\n linePoints[2][0] = viewLeft + layout.labelMargin + realTextWidth + layout.labelDistance;\n } else {\n linePoints[2][0] = viewLeft + viewWidth - layout.labelMargin - realTextWidth - layout.labelDistance;\n }\n } else {\n if (layout.x < cx) {\n linePoints[2][0] = layout.x + layout.labelDistance;\n } else {\n linePoints[2][0] = layout.x - layout.labelDistance;\n }\n\n linePoints[1][0] = linePoints[2][0] + dist;\n }\n\n linePoints[1][1] = linePoints[2][1] = layout.y;\n }\n }\n}\n\nfunction isPositionCenter(layout) {\n // Not change x for center label\n return layout.position === 'center';\n}\n\nfunction _default(seriesModel, r, viewWidth, viewHeight, viewLeft, viewTop) {\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 data.each(function (idx) {\n var layout = data.getItemLayout(idx);\n var itemModel = data.getItemModel(idx);\n var labelModel = itemModel.getModel('label'); // Use position in normal or emphasis\n\n var labelPosition = labelModel.get('position') || itemModel.get('emphasis.label.position');\n var labelDistance = labelModel.get('distanceToLabelLine');\n var labelAlignTo = labelModel.get('alignTo');\n var labelMargin = parsePercent(labelModel.get('margin'), viewWidth);\n var bleedMargin = labelModel.get('bleedMargin');\n var font = labelModel.getFont();\n var labelLineModel = itemModel.getModel('labelLine');\n var labelLineLen = labelLineModel.get('length');\n labelLineLen = parsePercent(labelLineLen, viewWidth);\n var labelLineLen2 = labelLineModel.get('length2');\n labelLineLen2 = parsePercent(labelLineLen2, viewWidth);\n\n if (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 var textX;\n var textY;\n var linePoints;\n var textAlign;\n cx = layout.cx;\n cy = layout.cy;\n var text = seriesModel.getFormattedLabel(idx, 'normal') || data.getName(idx);\n var textRect = textContain.getBoundingRect(text, font, textAlign, 'top');\n var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';\n\n if (labelPosition === 'center') {\n textX = layout.cx;\n textY = layout.cy;\n textAlign = 'center';\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 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 if (labelAlignTo === 'edge') {\n // Adjust textX because text align of edge is opposite\n textX = dx < 0 ? viewLeft + labelMargin : viewLeft + viewWidth - labelMargin;\n } else {\n textX = x3 + (dx < 0 ? -labelDistance : labelDistance);\n }\n\n textY = y3;\n linePoints = [[x1, y1], [x2, y2], [x3, y3]];\n }\n\n textAlign = isLabelInside ? 'center' : labelAlignTo === 'edge' ? dx > 0 ? 'right' : 'left' : dx > 0 ? 'left' : 'right';\n }\n\n var labelRotate;\n var rotate = labelModel.get('rotate');\n\n if (typeof rotate === 'number') {\n labelRotate = rotate * (Math.PI / 180);\n } else {\n labelRotate = rotate ? dx < 0 ? -midAngle + Math.PI : -midAngle : 0;\n }\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 labelDistance: labelDistance,\n labelAlignTo: labelAlignTo,\n labelMargin: labelMargin,\n bleedMargin: bleedMargin,\n textRect: textRect,\n text: text,\n font: font\n }; // Not layout the inside label\n\n if (!isLabelInside) {\n labelLayoutList.push(layout.label);\n }\n });\n\n if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) {\n avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop);\n }\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar Component = require(\"../../model/Component\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nComponent.registerSubTypeDefaulter('visualMap', function (option) {\n // Compatible with ec2, when splitNumber === 0, continuous visualMap will be used.\n return !option.categories && (!(option.pieces ? option.pieces.length > 0 : option.splitNumber > 0) || option.calculable) ? 'continuous' : 'piecewise';\n});","module.exports = __webpack_public_path__ + \"img/material_blue.66db75fe.png\";","var Definable = require(\"./Definable\");\n\nvar zrUtil = require(\"../../core/util\");\n\n/**\n * @file Manages SVG shadow elements.\n * @author Zhang Wenli\n */\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(this, zrId, svgRoot, ['filter'], '__filter_in_use__', '_shadowDom');\n}\n\nzrUtil.inherits(ShadowManager, Definable);\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 */\n\nShadowManager.prototype.addWithoutUpdate = function (svgElement, displayable) {\n if (displayable && hasShadow(displayable.style)) {\n // Create dom in if not exists\n var dom;\n\n if (displayable._shadowDom) {\n // Gradient exists\n dom = displayable._shadowDom;\n var defs = this.getDefs(true);\n\n if (!defs.contains(displayable._shadowDom)) {\n // _shadowDom is no longer in defs, recreate\n this.addDom(dom);\n }\n } else {\n // New dom\n dom = this.add(displayable);\n }\n\n this.markUsed(displayable);\n var id = dom.getAttribute('id');\n svgElement.style.filter = 'url(#' + id + ')';\n }\n};\n/**\n * Add a new shadow tag in \n *\n * @param {Displayable} displayable zrender displayable element\n * @return {SVGFilterElement} created DOM\n */\n\n\nShadowManager.prototype.add = function (displayable) {\n var dom = this.createElement('filter'); // 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\n displayable._shadowDomId = displayable._shadowDomId || this.nextId++;\n dom.setAttribute('id', 'zr' + this._zrId + '-shadow-' + displayable._shadowDomId);\n this.updateDom(displayable, dom);\n this.addDom(dom);\n return dom;\n};\n/**\n * Update shadow.\n *\n * @param {Displayable} displayable zrender displayable element\n */\n\n\nShadowManager.prototype.update = function (svgElement, displayable) {\n var style = displayable.style;\n\n if (hasShadow(style)) {\n var that = this;\n Definable.prototype.update.call(this, displayable, function () {\n that.updateDom(displayable, displayable._shadowDom);\n });\n } else {\n // Remove shadow\n this.remove(svgElement, displayable);\n }\n};\n/**\n * Remove DOM and clear parent filter\n */\n\n\nShadowManager.prototype.remove = function (svgElement, displayable) {\n if (displayable._shadowDomId != null) {\n this.removeDom(svgElement);\n svgElement.style.filter = '';\n }\n};\n/**\n * Update shadow dom\n *\n * @param {Displayable} displayable zrender displayable element\n * @param {SVGFilterElement} dom DOM to update\n */\n\n\nShadowManager.prototype.updateDom = function (displayable, dom) {\n var domChild = dom.getElementsByTagName('feDropShadow');\n\n if (domChild.length === 0) {\n domChild = this.createElement('feDropShadow');\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; // TODO: textBoxShadowBlur is not supported yet\n\n var offsetX;\n var offsetY;\n var blur;\n var color;\n\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 } else if (style.textShadowBlur) {\n offsetX = style.textShadowOffsetX || 0;\n offsetY = style.textShadowOffsetY || 0;\n blur = style.textShadowBlur;\n color = style.textShadowColor;\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); // 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\n var stdDx = blur / 2 / scaleX;\n var stdDy = blur / 2 / scaleY;\n var stdDeviation = stdDx + ' ' + stdDy;\n domChild.setAttribute('stdDeviation', stdDeviation); // Fix filter clipping problem\n\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 dom.appendChild(domChild); // Store dom element in shadow, to avoid creating multiple\n // dom instances for the same shadow element\n\n displayable._shadowDom = dom;\n};\n/**\n * Mark a single shadow to be used\n *\n * @param {Displayable} displayable displayable element\n */\n\n\nShadowManager.prototype.markUsed = function (displayable) {\n if (displayable._shadowDom) {\n Definable.prototype.markUsed.call(this, displayable._shadowDom);\n }\n};\n\nfunction hasShadow(style) {\n // TODO: textBoxShadowBlur is not supported yet\n return style && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY || style.textShadowBlur || style.textShadowOffsetX || style.textShadowOffsetY);\n}\n\nvar _default = ShadowManager;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar AxisBuilder = require(\"./AxisBuilder\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar singleAxisHelper = require(\"../../coord/single/singleAxisHelper\");\n\nvar AxisView = require(\"./AxisView\");\n\nvar _axisSplitHelper = require(\"./axisSplitHelper\");\n\nvar rectCoordAxisBuildSplitArea = _axisSplitHelper.rectCoordAxisBuildSplitArea;\nvar rectCoordAxisHandleRemove = _axisSplitHelper.rectCoordAxisHandleRemove;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\nvar selfBuilderAttrs = ['splitArea', 'splitLine'];\nvar SingleAxisView = AxisView.extend({\n type: 'singleAxis',\n axisPointerClass: 'SingleAxisPointer',\n render: function (axisModel, ecModel, api, payload) {\n var group = this.group;\n group.removeAll();\n var oldAxisGroup = this._axisGroup;\n this._axisGroup = new graphic.Group();\n var layout = singleAxisHelper.layout(axisModel);\n var axisBuilder = new AxisBuilder(axisModel, layout);\n zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n group.add(this._axisGroup);\n group.add(axisBuilder.getGroup());\n zrUtil.each(selfBuilderAttrs, function (name) {\n if (axisModel.get(name + '.show')) {\n this['_' + name](axisModel);\n }\n }, this);\n graphic.groupTransition(oldAxisGroup, this._axisGroup, axisModel);\n SingleAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);\n },\n remove: function () {\n rectCoordAxisHandleRemove(this);\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 lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n var gridRect = axisModel.coordinateSystem.getRect();\n var isHorizontal = axis.isHorizontal();\n var splitLines = [];\n var lineCount = 0;\n var ticksCoords = axis.getTicksCoords({\n tickModel: splitLineModel\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\n if (isHorizontal) {\n p1[0] = tickCoord;\n p1[1] = gridRect.y;\n p2[0] = tickCoord;\n p2[1] = gridRect.y + gridRect.height;\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 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 _splitArea: function (axisModel) {\n rectCoordAxisBuildSplitArea(this, this._axisGroup, axisModel, axisModel);\n }\n});\nvar _default = SingleAxisView;\nmodule.exports = _default;","var Animator = require(\"../animation/Animator\");\n\nvar logError = require(\"../core/log\");\n\nvar _util = require(\"../core/util\");\n\nvar isString = _util.isString;\nvar isFunction = _util.isFunction;\nvar isObject = _util.isObject;\nvar isArrayLike = _util.isArrayLike;\nvar indexOf = _util.indexOf;\n\n/**\n * @alias module:zrender/mixin/Animatable\n * @constructor\n */\nvar Animatable = function () {\n /**\n * @type {Array.}\n * @readOnly\n */\n this.animators = [];\n};\n\nAnimatable.prototype = {\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\n if (path) {\n var pathSplitted = path.split('.');\n var prop = el; // If animating shape\n\n animatingShape = pathSplitted[0] === 'shape';\n\n for (var i = 0, l = pathSplitted.length; i < l; i++) {\n if (!prop) {\n continue;\n }\n\n prop = prop[pathSplitted[i]];\n }\n\n if (prop) {\n target = prop;\n }\n } else {\n target = el;\n }\n\n if (!target) {\n logError('Property \"' + path + '\" is not existed in element ' + el.id);\n return;\n }\n\n var animators = el.animators;\n var animator = new Animator(target, loop);\n animator.during(function (target) {\n el.dirty(animatingShape);\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 animators.push(animator); // If animate after added to the zrender\n\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\n for (var i = 0; i < len; i++) {\n animators[i].stop(forwardToLast);\n }\n\n animators.length = 0;\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 } // animateTo(target, time, delay, callback);\n else if (isFunction(easing)) {\n callback = easing;\n easing = 'linear';\n delay = 0;\n } // animateTo(target, time, callback);\n else if (isFunction(delay)) {\n callback = delay;\n delay = 0;\n } // animateTo(target, callback)\n else if (isFunction(time)) {\n callback = time;\n time = 500;\n } // animateTo(target)\n else if (!time) {\n time = 500;\n } // Stop all previous animations\n\n\n animatable.stopAnimation();\n animateToShallow(animatable, '', animatable, target, time, delay, reverse); // Animators may be removed immediately after start\n // if there is nothing to animate\n\n var animators = animatable.animators.slice();\n var count = animators.length;\n\n function done() {\n count--;\n\n if (!count) {\n callback && callback();\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\n\n if (!count) {\n callback && callback();\n } // Start after all animators created\n // Incase any animator is done immediately when all animation properties are not changed\n\n\n for (var i = 0; i < animators.length; i++) {\n animators[i].done(done).start(easing, forceAnimate);\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 */\n\n\nfunction animateToShallow(animatable, path, source, target, time, delay, reverse) {\n var objShallow = {};\n var propertyCount = 0;\n\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(animatable, path ? path + '.' + name : name, source[name], target[name], time, delay, reverse);\n } else {\n if (reverse) {\n objShallow[name] = source[name];\n setAttrByPath(animatable, path, name, target[name]);\n } else {\n objShallow[name] = target[name];\n }\n\n propertyCount++;\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).when(time == null ? 500 : time, objShallow).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 } 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\nvar _default = Animatable;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar _whiskerBoxCommon = require(\"../helper/whiskerBoxCommon\");\n\nvar seriesModelMixin = _whiskerBoxCommon.seriesModelMixin;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar CandlestickSeries = SeriesModel.extend({\n type: 'series.candlestick',\n dependencies: ['xAxis', 'yAxis', 'grid'],\n\n /**\n * @readOnly\n */\n defaultValueDimensions: [{\n name: 'open',\n defaultTooltip: true\n }, {\n name: 'close',\n defaultTooltip: true\n }, {\n name: 'lowest',\n defaultTooltip: true\n }, {\n name: 'highest',\n defaultTooltip: true\n }],\n\n /**\n * @type {Array.}\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 hoverAnimation: true,\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n layout: null,\n // 'horizontal' or 'vertical'\n clip: true,\n itemStyle: {\n color: '#c23531',\n // 阳线 positive\n color0: '#314656',\n // 阴线 negative '#c23531', '#314656'\n borderWidth: 1,\n // FIXME\n // ec2中使用的是lineStyle.color 和 lineStyle.color0\n borderColor: '#c23531',\n borderColor0: '#314656'\n },\n emphasis: {\n itemStyle: {\n borderWidth: 2\n }\n },\n barMaxWidth: null,\n barMinWidth: null,\n barWidth: null,\n large: true,\n largeThreshold: 600,\n progressive: 3e3,\n progressiveThreshold: 1e4,\n progressiveChunkMode: 'mod',\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 brushSelector: function (dataIndex, data, selectors) {\n var itemLayout = data.getItemLayout(dataIndex);\n return itemLayout && selectors.rect(itemLayout.brushRect);\n }\n});\nzrUtil.mixin(CandlestickSeries, seriesModelMixin, true);\nvar _default = CandlestickSeries;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar brushHelper = require(\"./brushHelper\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar each = zrUtil.each;\nvar indexOf = zrUtil.indexOf;\nvar curry = zrUtil.curry;\nvar COORD_CONVERTS = ['dataToPoint', 'pointToData']; // FIXME\n// how to genarialize to more coordinate systems.\n\nvar INCLUDE_FINDER_MAIN_TYPES = ['grid', 'xAxis', 'yAxis', 'geo', 'graph', 'polar', 'radiusAxis', 'angleAxis', 'bmap'];\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: ,\n * coordSyses: all cartesians.\n * gridModel: \n * xAxes: correspond to coordSyses on index\n * yAxes: correspond to coordSyses on index\n * }\n * or {\n * panelId: ...,\n * coordSys: \n * coordSyses: []\n * geoModel: \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: 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.}. like: {xAxisIndex: [3, 4]}\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} [opt]\n * @param {Array.} [opt.include] include coordinate system types.\n */\n\nfunction BrushTargetManager(option, ecModel, opt) {\n /**\n * @private\n * @type {Array.}\n */\n var targetInfoList = this._targetInfoList = [];\n var info = {};\n var foundCpts = parseFinder(ecModel, option);\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); // area.coordRange is the first of area.coordRanges\n\n if (!area.coordRange) {\n area.coordRange = coordRange; // 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\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(targetInfo.coordSyses, function (coordSys) {\n var result = coordConvert[area.brushType](1, coordSys, area.range);\n cb(area, result.values, coordSys, ecModel);\n });\n }\n }, this);\n};\n\nproto.setInputRanges = function (areas, ecModel) {\n each(areas, function (area) {\n var targetInfo = this.findTargetInfo(area, ecModel);\n area.range = area.range || []; // convert coordRange to global range and set panelId.\n\n if (targetInfo && targetInfo !== true) {\n area.panelId = targetInfo.panelId; // (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\n var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange);\n var rangeOffset = area.__rangeOffset;\n area.range = rangeOffset ? diffProcessor[area.brushType](result.values, rangeOffset.offset, getScales(result.xyMinMax, rangeOffset.xyMinMax)) : 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(rect, api, targetInfo.coordSysModel),\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 || targetInfo && indexOf(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0;\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 */\n\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\n if (areaPanelId) {\n if (targetInfo.panelId === areaPanelId) {\n return targetInfo;\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(ecModel, option, {\n includeMainTypes: INCLUDE_FINDER_MAIN_TYPES\n });\n}\n\nvar targetInfoBuilders = {\n grid: function (foundCpts, targetInfoList) {\n var xAxisModels = foundCpts.xAxisModels;\n var yAxisModels = foundCpts.yAxisModels;\n var gridModels = foundCpts.gridModels; // Remove duplicated.\n\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 gridModelMap.each(function (gridModel) {\n var grid = gridModel.coordinateSystem;\n var cartesians = [];\n each(grid.getCartesians(), function (cartesian, index) {\n if (indexOf(xAxisModels, cartesian.getAxis('x').model) >= 0 || indexOf(yAxisModels, cartesian.getAxis('y').model) >= 0) {\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 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};\nvar targetInfoMatchers = [// grid\nfunction (foundCpts, targetInfo) {\n var xAxisModel = foundCpts.xAxisModel;\n var yAxisModel = foundCpts.yAxisModel;\n var gridModel = foundCpts.gridModel;\n !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model);\n !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model);\n return gridModel && gridModel === targetInfo.gridModel;\n}, // geo\nfunction (foundCpts, targetInfo) {\n var geoModel = foundCpts.geoModel;\n return geoModel && geoModel === targetInfo.geoModel;\n}];\nvar panelRectBuilder = {\n grid: function () {\n // grid is not Transformable.\n return this.coordSys.grid.getRect().clone();\n },\n geo: function () {\n var coordSys = this.coordSys;\n var rect = coordSys.getBoundingRect().clone(); // geo roam and zoom transform\n\n rect.applyTransform(graphic.getTransform(coordSys));\n return rect;\n }\n};\nvar coordConvert = {\n lineX: curry(axisConvert, 0),\n lineY: curry(axisConvert, 1),\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 = [formatMinMax([xminymin[0], xmaxymax[0]]), formatMinMax([xminymin[1], xmaxymax[1]])];\n return {\n values: values,\n 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 {\n values: values,\n xyMinMax: xyMinMax\n };\n }\n};\n\nfunction axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) {\n var axis = coordSys.getAxis(['x', 'y'][axisNameIndex]);\n var values = formatMinMax(zrUtil.map([0, 1], function (i) {\n return to ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i])) : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i]));\n }));\n var xyMinMax = [];\n xyMinMax[axisNameIndex] = values;\n xyMinMax[1 - axisNameIndex] = [NaN, NaN];\n return {\n values: values,\n xyMinMax: xyMinMax\n };\n}\n\nvar diffProcessor = {\n lineX: curry(axisDiffProcessor, 0),\n lineY: curry(axisDiffProcessor, 1),\n rect: function (values, refer, scales) {\n return [[values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]], [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]]];\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 [values[0] - scales[axisNameIndex] * refer[0], values[1] - scales[axisNameIndex] * refer[1]];\n} // We have to process scale caused by dataZoom manually,\n// although it might be not accurate.\n\n\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 ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]] : [NaN, NaN];\n}\n\nvar _default = BrushTargetManager;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Region = require(\"./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\n/**\n * Parse and decode geo json\n * @module echarts/coord/geo/parseGeoJson\n */\nfunction decode(json) {\n if (!json.UTF8Encoding) {\n return json;\n }\n\n var encodeScale = json.UTF8Scale;\n\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(coordinate, encodeOffsets[c], encodeScale);\n } else if (geometry.type === 'MultiPolygon') {\n for (var c2 = 0; c2 < coordinate.length; c2++) {\n var polygon = coordinate[c2];\n coordinate[c2] = decodePolygon(polygon, encodeOffsets[c][c2], encodeScale);\n }\n }\n }\n } // Has been decoded\n\n\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; // ZigZag decoding\n\n x = x >> 1 ^ -(x & 1);\n y = y >> 1 ^ -(y & 1); // Delta deocding\n\n x += prevX;\n y += prevY;\n prevX = x;\n prevY = y; // Dequantize\n\n result.push([x / encodeScale, y / encodeScale]);\n }\n\n return result;\n}\n/**\n * @alias module:echarts/coord/geo/parseGeoJson\n * @param {Object} geoJson\n * @param {string} nameProperty\n * @return {module:zrender/container/Group}\n */\n\n\nfunction _default(geoJson, nameProperty) {\n decode(geoJson);\n return zrUtil.map(zrUtil.filter(geoJson.features, function (featureObj) {\n // Output of mapshaper may have geometry null\n return featureObj.geometry && featureObj.properties && featureObj.geometry.coordinates.length > 0;\n }), function (featureObj) {\n var properties = featureObj.properties;\n var geo = featureObj.geometry;\n var coordinates = geo.coordinates;\n var geometries = [];\n\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\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(properties[nameProperty || 'name'], geometries, properties.cp);\n region.properties = properties;\n return region;\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nrequire(\"../helper/focusNodeAdjacencyAction\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.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({\n mainType: 'series',\n subType: 'sankey',\n query: payload\n }, 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\nvar echarts = require(\"../../echarts\");\n\nvar _roamHelper = require(\"../../action/roamHelper\");\n\nvar updateCenterAndZoom = _roamHelper.updateCenterAndZoom;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerAction({\n type: 'treeExpandAndCollapse',\n event: 'treeExpandAndCollapse',\n update: 'update'\n}, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'series',\n subType: 'tree',\n query: payload\n }, 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});\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({\n mainType: 'series',\n subType: 'tree',\n query: payload\n }, function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n var res = updateCenterAndZoom(coordSys, payload);\n seriesModel.setCenter && seriesModel.setCenter(res.center);\n seriesModel.setZoom && 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\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"./pie/PieSeries\");\n\nrequire(\"./pie/PieView\");\n\nvar createDataSelectAction = require(\"../action/createDataSelectAction\");\n\nvar dataColor = require(\"../visual/dataColor\");\n\nvar pieLayout = require(\"./pie/pieLayout\");\n\nvar dataFilter = require(\"../processor/dataFilter\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\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}]);\necharts.registerVisual(dataColor('pie'));\necharts.registerLayout(zrUtil.curry(pieLayout, 'pie'));\necharts.registerProcessor(dataFilter('pie'));","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _graphic = require(\"../graphic\");\n\nvar extendShape = _graphic.extendShape;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * Sausage: similar to sector, but have half circle on both sides\n * @public\n */\nvar _default = extendShape({\n type: 'sausage',\n shape: {\n cx: 0,\n cy: 0,\n r0: 0,\n r: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n clockwise: true\n },\n buildPath: function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var r0 = Math.max(shape.r0 || 0, 0);\n var r = Math.max(shape.r, 0);\n var dr = (r - r0) * 0.5;\n var rCenter = r0 + dr;\n var startAngle = shape.startAngle;\n var endAngle = shape.endAngle;\n var clockwise = shape.clockwise;\n var unitStartX = Math.cos(startAngle);\n var unitStartY = Math.sin(startAngle);\n var unitEndX = Math.cos(endAngle);\n var unitEndY = Math.sin(endAngle);\n var lessThanCircle = clockwise ? endAngle - startAngle < Math.PI * 2 : startAngle - endAngle < Math.PI * 2;\n\n if (lessThanCircle) {\n ctx.moveTo(unitStartX * r0 + x, unitStartY * r0 + y);\n ctx.arc(unitStartX * rCenter + x, unitStartY * rCenter + y, dr, -Math.PI + startAngle, startAngle, !clockwise);\n }\n\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n ctx.moveTo(unitEndX * r + x, unitEndY * r + y);\n ctx.arc(unitEndX * rCenter + x, unitEndY * rCenter + y, dr, endAngle - Math.PI * 2, endAngle - Math.PI, !clockwise);\n\n if (r0 !== 0) {\n ctx.arc(x, y, r0, endAngle, startAngle, clockwise);\n ctx.moveTo(unitStartX * r0 + x, unitEndY * r0 + y);\n }\n\n ctx.closePath();\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BrushController = require(\"../helper/BrushController\");\n\nvar _visualEncoding = require(\"./visualEncoding\");\n\nvar layoutCovers = _visualEncoding.layoutCovers;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = echarts.extendComponentView({\n type: 'brush',\n init: function (ecModel, api) {\n /**\n * @readOnly\n * @type {module:echarts/model/Global}\n */\n this.ecModel = ecModel;\n /**\n * @readOnly\n * @type {module:echarts/ExtensionAPI}\n */\n\n this.api = api;\n /**\n * @readOnly\n * @type {module:echarts/component/brush/BrushModel}\n */\n\n this.model;\n /**\n * @private\n * @type {module:echarts/component/helper/BrushController}\n */\n\n (this._brushController = new BrushController(api.getZr())).on('brush', zrUtil.bind(this._onBrush, this)).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: function (brushModel, ecModel) {\n // PENDING: `updateTransform` is a little tricky, whose layout need\n // to be calculate mandatorily and other stages will not be performed.\n // Take care the correctness of the logic. See #11754 .\n layoutCovers(ecModel);\n return updateController.apply(this, arguments);\n },\n\n /**\n * @override\n */\n updateView: updateController,\n // /**\n // * @override\n // */\n // updateLayout: updateController,\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 this.model.brushTargetManager.setOutputRanges(areas, this.ecModel); // 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\n (!opt.isEnd || opt.removeOnClick) && this.api.dispatchAction({\n type: 'brush',\n brushId: modelId,\n areas: zrUtil.clone(areas),\n $from: modelId\n });\n opt.isEnd && this.api.dispatchAction({\n type: 'brushEnd',\n brushId: modelId,\n areas: zrUtil.clone(areas),\n $from: modelId\n });\n }\n});\n\nfunction updateController(brushModel, ecModel, api, payload) {\n // Do not update controller when drawing.\n (!payload || payload.$from !== brushModel.id) && this._brushController.setPanels(brushModel.brushTargetManager.makePanelOpts(api)).enableBrush(brushModel.brushOption).updateCovers(brushModel.areas.slice());\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * LegendVisualProvider is an bridge that pick encoded color from data and\n * provide to the legend component.\n * @param {Function} getDataWithEncodedVisual Function to get data after filtered. It stores all the encoding info\n * @param {Function} getRawData Function to get raw data before filtered.\n */\nfunction LegendVisualProvider(getDataWithEncodedVisual, getRawData) {\n this.getAllNames = function () {\n var rawData = getRawData(); // We find the name from the raw data. In case it's filtered by the legend component.\n // Normally, the name can be found in rawData, but can't be found in filtered data will display as gray.\n\n return rawData.mapArray(rawData.getName);\n };\n\n this.containName = function (name) {\n var rawData = getRawData();\n return rawData.indexOfName(name) >= 0;\n };\n\n this.indexOfName = function (name) {\n // Only get data when necessary.\n // Because LegendVisualProvider constructor may be new in the stage that data is not prepared yet.\n // Invoking Series#getData immediately will throw an error.\n var dataWithEncodedVisual = getDataWithEncodedVisual();\n return dataWithEncodedVisual.indexOfName(name);\n };\n\n this.getItemVisual = function (dataIndex, key) {\n // Get encoded visual properties from final filtered data.\n var dataWithEncodedVisual = getDataWithEncodedVisual();\n return dataWithEncodedVisual.getItemVisual(dataIndex, key);\n };\n}\n\nvar _default = LegendVisualProvider;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"../coord/parallel/parallelCreator\");\n\nrequire(\"./axis/parallelAxisAction\");\n\nrequire(\"./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\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar IRRELEVANT_EXCLUDES = {\n 'axisPointer': 1,\n 'tooltip': 1,\n 'brush': 1\n};\n/**\n * Avoid that: mouse click on a elements that is over geo or graph,\n * but roam is triggered.\n */\n\nfunction onIrrelevantElement(e, api, targetCoordSysModel) {\n var model = api.getComponentByElement(e.topTarget); // If model is axisModel, it works only if it is injected with coordinateSystem.\n\n var coordSys = model && model.coordinateSystem;\n return model && model !== targetCoordSysModel && !IRRELEVANT_EXCLUDES[model.mainType] && coordSys && coordSys.model !== targetCoordSysModel;\n}\n\nexports.onIrrelevantElement = onIrrelevantElement;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar colorAll = ['#37A2DA', '#32C5E9', '#67E0E3', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#E062AE', '#E690D1', '#e7bcf3', '#9d96f5', '#8378EA', '#96BFFF'];\nvar _default = {\n color: colorAll,\n colorLayer: [['#37A2DA', '#ffd85c', '#fd7b5f'], ['#37A2DA', '#67E0E3', '#FFDB5C', '#ff9f7f', '#E062AE', '#9d96f5'], ['#37A2DA', '#32C5E9', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#e7bcf3', '#8378EA', '#96BFFF'], colorAll]\n};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar axisModelCreator = require(\"../axisModelCreator\");\n\nvar axisModelCommonMixin = require(\"../axisModelCommonMixin\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar AxisModel = ComponentModel.extend({\n type: 'singleAxis',\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});\nvar defaultOption = {\n left: '5%',\n top: '5%',\n right: '5%',\n bottom: '5%',\n type: 'value',\n position: 'bottom',\n orient: 'horizontal',\n axisLine: {\n show: true,\n lineStyle: {\n width: 1,\n type: 'solid'\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 axisTick: {\n show: true,\n length: 6,\n lineStyle: {\n width: 1\n }\n },\n axisLabel: {\n show: true,\n interval: 'auto'\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);\naxisModelCreator('single', AxisModel, getAxisType, defaultOption);\nvar _default = AxisModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _dataProvider = require(\"../../data/helper/dataProvider\");\n\nvar retrieveRawValue = _dataProvider.retrieveRawValue;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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/data/List} data\n * @param {number} dataIndex\n * @return {string} label string. Not null/undefined\n */\nfunction getDefaultLabel(data, dataIndex) {\n var labelDims = data.mapDimension('defaultedLabel', true);\n var len = labelDims.length; // Simple optimization (in lots of cases, label dims length is 1)\n\n if (len === 1) {\n return retrieveRawValue(data, dataIndex, labelDims[0]);\n } else if (len) {\n var vals = [];\n\n for (var i = 0; i < labelDims.length; i++) {\n var val = retrieveRawValue(data, dataIndex, labelDims[i]);\n vals.push(val);\n }\n\n return vals.join(' ');\n }\n}\n\nexports.getDefaultLabel = getDefaultLabel;","var Path = require(\"../Path\");\n\nvar roundRectHelper = require(\"../helper/roundRect\");\n\nvar _subPixelOptimize = require(\"../helper/subPixelOptimize\");\n\nvar subPixelOptimizeRect = _subPixelOptimize.subPixelOptimizeRect;\n\n/**\n * 矩形\n * @module zrender/graphic/shape/Rect\n */\n// Avoid create repeatly.\nvar subPixelOptimizeOutputShape = {};\n\nvar _default = Path.extend({\n type: 'rect',\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 x: 0,\n y: 0,\n width: 0,\n height: 0\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 } 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 } else {\n roundRectHelper.buildPath(ctx, shape);\n }\n\n ctx.closePath();\n return;\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar _graphic = require(\"../../util/graphic\");\n\nvar Group = _graphic.Group;\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar SymbolClz = require(\"./Symbol\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\nvar EFFECT_RIPPLE_NUMBER = 3;\n\nfunction normalizeSymbolSize(symbolSize) {\n if (!zrUtil.isArray(symbolSize)) {\n symbolSize = [+symbolSize, +symbolSize];\n }\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 */\n\n\nfunction EffectSymbol(data, idx) {\n Group.call(this);\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\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(symbolType, -1, -1, 2, 2, color);\n ripplePath.attr({\n style: {\n strokeNoScale: true\n },\n z2: 99,\n silent: true,\n scale: [0.5, 0.5]\n });\n var delay = -i / EFFECT_RIPPLE_NUMBER * effectCfg.period + effectCfg.effectOffset; // TODO Configurable effectCfg.period\n\n ripplePath.animate('', true).when(effectCfg.period, {\n scale: [effectCfg.rippleScale / 2, effectCfg.rippleScale / 2]\n }).delay(delay).start();\n ripplePath.animateStyle(true).when(effectCfg.period, {\n opacity: 0\n }).delay(delay).start();\n rippleGroup.add(ripplePath);\n }\n\n updateRipplePath(rippleGroup, effectCfg);\n};\n/**\n * Update effect symbol\n */\n\n\neffectSymbolProto.updateEffectAnimation = function (effectCfg) {\n var oldEffectCfg = this._effectCfg;\n var rippleGroup = this.childAt(1); // Must reinitialize effect if following configuration changed\n\n var DIFFICULT_PROPS = ['symbolType', 'period', 'rippleScale'];\n\n for (var i = 0; i < DIFFICULT_PROPS.length; i++) {\n var propName = DIFFICULT_PROPS[i];\n\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 * Highlight symbol\n */\n\n\neffectSymbolProto.highlight = function () {\n this.trigger('emphasis');\n};\n/**\n * Downplay symbol\n */\n\n\neffectSymbolProto.downplay = function () {\n this.trigger('normal');\n};\n/**\n * Update symbol properties\n * @param {module:echarts/data/List} data\n * @param {number} idx\n */\n\n\neffectSymbolProto.updateData = function (data, idx) {\n var seriesModel = data.hostModel;\n this.childAt(0).updateData(data, idx);\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 rippleGroup.attr('scale', symbolSize);\n rippleGroup.traverse(function (ripplePath) {\n ripplePath.attr({\n fill: color\n });\n });\n var symbolOffset = itemModel.getShallow('symbolOffset');\n\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\n var symbolRotate = data.getItemVisual(idx, 'symbolRotate');\n rippleGroup.rotation = (symbolRotate || 0) * Math.PI / 180 || 0;\n var effectCfg = {};\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 this.off('mouseover').off('mouseout').off('emphasis').off('normal');\n\n if (effectCfg.showEffectOn === 'render') {\n this._effectCfg ? this.updateEffectAnimation(effectCfg) : this.startEffectAnimation(effectCfg);\n this._effectCfg = effectCfg;\n } else {\n // Not keep old effect config\n this._effectCfg = null;\n this.stopEffectAnimation();\n var symbol = this.childAt(0);\n\n var onEmphasis = function () {\n symbol.highlight();\n\n if (effectCfg.showEffectOn !== 'render') {\n this.startEffectAnimation(effectCfg);\n }\n };\n\n var onNormal = function () {\n symbol.downplay();\n\n if (effectCfg.showEffectOn !== 'render') {\n this.stopEffectAnimation();\n }\n };\n\n this.on('mouseover', onEmphasis, this).on('mouseout', onNormal, this).on('emphasis', onEmphasis, this).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);\nvar _default = EffectSymbol;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _parseSVG = require(\"zrender/lib/tool/parseSVG\");\n\nvar parseSVG = _parseSVG.parseSVG;\nvar makeViewBoxTransform = _parseSVG.makeViewBoxTransform;\n\nvar Group = require(\"zrender/lib/container/Group\");\n\nvar Rect = require(\"zrender/lib/graphic/shape/Rect\");\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar assert = _util.assert;\nvar createHashMap = _util.createHashMap;\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _model = require(\"../../util/model\");\n\nvar makeInner = _model.makeInner;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar inner = makeInner();\nvar _default = {\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\n if (originRoot) {\n return {\n root: originRoot,\n boundingRect: inner(mapRecord).boundingRect\n };\n }\n\n var graphic = buildGraphic(mapRecord);\n inner(mapRecord).originRoot = graphic.root;\n inner(mapRecord).boundingRect = graphic.boundingRect;\n return graphic;\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 var root = rootMap.get(hostKey);\n\n if (root) {\n return root;\n }\n\n var originRoot = field.originRoot;\n var boundingRect = field.boundingRect; // For performance, if originRoot is not used by a view,\n // assign it to a view, but not reproduce graphic elements.\n\n if (!field.originRootHostKey) {\n field.originRootHostKey = hostKey;\n root = originRoot;\n } else {\n root = buildGraphic(mapRecord, boundingRect).root;\n }\n\n return rootMap.set(hostKey, root);\n },\n removeGraphic: function (mapName, mapRecord, hostKey) {\n var field = inner(mapRecord);\n var rootMap = field.rootMap;\n rootMap && rootMap.removeKey(hostKey);\n\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 } 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 ? // If svg width / height not specified, calculate\n // bounding rect as the width / height\n root.getBoundingRect() : new BoundingRect(0, 0, 0, 0);\n\n if (svgWidth != null) {\n boundingRect.width = svgWidth;\n }\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 return {\n root: root,\n boundingRect: boundingRect\n };\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar IncrementalDisplayable = require(\"zrender/lib/graphic/IncrementalDisplayable\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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// TODO Batch by color\nvar BOOST_SIZE_THRESHOLD = 4;\nvar LargeSymbolPath = graphic.extendShape({\n shape: {\n points: null\n },\n symbolProxy: null,\n softClipShape: null,\n buildPath: function (path, shape) {\n var points = shape.points;\n var size = shape.size;\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; // Do draw in afterBrush.\n\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\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 symbolProxy.buildPath(path, symbolProxyShape, true);\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); // PENDING If style or other canvas status changed?\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\n if (this.softClipShape && !this.softClipShape.contain(x, y)) {\n continue;\n } // fillRect is faster than building a rect path and draw.\n // And it support light globalCompositeOperation.\n\n\n ctx.fillRect(x - size[0] / 2, y - size[1] / 2, size[0], size[1]);\n }\n\n this.restoreTransform(ctx);\n },\n findDataIndex: function (x, y) {\n // TODO ???\n // Consider transform\n var shape = this.shape;\n var points = shape.points;\n var size = shape.size;\n var w = Math.max(size[0], 4);\n var h = Math.max(size[1], 4); // Not consider transform\n // Treat each element as a rect\n // top down traverse\n\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\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 * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n * @param {Object} opt\n * @param {Object} [opt.clipShape]\n */\n\n\nlargeSymbolProto.updateData = function (data, opt) {\n this.group.removeAll();\n var symbolEl = new LargeSymbolPath({\n rectHover: true,\n cursor: 'default'\n });\n symbolEl.setShape({\n points: data.getLayout('symbolPoints')\n });\n\n this._setCommon(symbolEl, data, false, opt);\n\n this.group.add(symbolEl);\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\n child.setShape('points', points);\n });\n};\n\nlargeSymbolProto.incrementalPrepareUpdate = function (data) {\n this.group.removeAll();\n\n this._clearIncremental(); // Only use incremental displayables when data amount is larger than 2 million.\n // PENDING Incremental data?\n\n\n if (data.count() > 2e6) {\n if (!this._incremental) {\n this._incremental = new IncrementalDisplayable({\n silent: true\n });\n }\n\n this.group.add(this._incremental);\n } else {\n this._incremental = null;\n }\n};\n\nlargeSymbolProto.incrementalUpdate = function (taskParams, data, opt) {\n var symbolEl;\n\n if (this._incremental) {\n symbolEl = new LargeSymbolPath();\n\n this._incremental.addDisplayable(symbolEl, true);\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\n this._setCommon(symbolEl, data, !!this._incremental, opt);\n};\n\nlargeSymbolProto._setCommon = function (symbolEl, data, isIncremental, opt) {\n var hostModel = data.hostModel;\n opt = opt || {}; // 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\n var size = data.getVisual('symbolSize');\n symbolEl.setShape('size', size instanceof Array ? size : [size, size]); // }\n\n symbolEl.softClipShape = opt.clipShape || null; // Create symbolProxy to build path for each data\n\n symbolEl.symbolProxy = createSymbol(data.getVisual('symbol'), 0, 0, 0, 0); // Use symbolProxy setColor method\n\n symbolEl.setColor = symbolEl.symbolProxy.setColor;\n var extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD;\n symbolEl.useStyle( // Draw shadow when doing fillRect is extremely slow.\n hostModel.getModel('itemStyle').getItemStyle(extrudeShadow ? ['color', 'shadowBlur', 'shadowColor'] : ['color']));\n var visualColor = data.getVisual('color');\n\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\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\n this._incremental = null;\n this.group.removeAll();\n};\n\nlargeSymbolProto._clearIncremental = function () {\n var incremental = this._incremental;\n\n if (incremental) {\n incremental.clearDisplaybles();\n }\n};\n\nvar _default = LargeSymbolDraw;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _traversalHelper = require(\"./traversalHelper\");\n\nvar eachAfter = _traversalHelper.eachAfter;\nvar eachBefore = _traversalHelper.eachBefore;\n\nvar _layoutHelper = require(\"./layoutHelper\");\n\nvar init = _layoutHelper.init;\nvar firstWalk = _layoutHelper.firstWalk;\nvar secondWalk = _layoutHelper.secondWalk;\nvar sep = _layoutHelper.separation;\nvar radialCoordinate = _layoutHelper.radialCoordinate;\nvar getViewRect = _layoutHelper.getViewRect;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(ecModel, 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 } 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 var left = realRoot;\n var right = realRoot;\n var bottom = realRoot;\n eachBefore(realRoot, function (node) {\n var x = node.getLayout().x;\n\n if (x < left.getLayout().x) {\n left = node;\n }\n\n if (x > right.getLayout().x) {\n right = node;\n }\n\n if (node.depth > bottom.depth) {\n bottom = node;\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\n if (layout === 'radial') {\n kx = width / (right.getLayout().x + delta + tx); // here we use (node.depth - 1), bucause the real root's depth is 1\n\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({\n x: finalCoor.x,\n y: finalCoor.y,\n rawX: coorX,\n rawY: coorY\n }, true);\n });\n } else {\n var orient = seriesModel.getOrient();\n\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' ? (node.depth - 1) * kx : width - (node.depth - 1) * kx;\n node.setLayout({\n x: coorX,\n y: coorY\n }, true);\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' ? (node.depth - 1) * ky : height - (node.depth - 1) * ky;\n node.setLayout({\n x: coorX,\n y: coorY\n }, true);\n });\n }\n }\n }\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../util/model\");\n\nvar ComponentModel = require(\"./Component\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\nvar each = zrUtil.each;\nvar clone = zrUtil.clone;\nvar map = zrUtil.map;\nvar merge = zrUtil.merge;\nvar QUERY_REG = /^(min|max)?(.+)$/;\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 */\n\nfunction OptionManager(api) {\n /**\n * @private\n * @type {module:echarts/ExtensionAPI}\n */\n this._api = api;\n /**\n * @private\n * @type {Array.}\n */\n\n this._timelineOptions = [];\n /**\n * @private\n * @type {Array.}\n */\n\n this._mediaList = [];\n /**\n * @private\n * @type {Object}\n */\n\n this._mediaDefault;\n /**\n * -1, means default.\n * empty means no media.\n * @private\n * @type {Array.}\n */\n\n this._currentMediaIndices = [];\n /**\n * @private\n * @type {Object}\n */\n\n this._optionBackup;\n /**\n * @private\n * @type {Object}\n */\n\n this._newBaseOption;\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\n\nOptionManager.prototype = {\n constructor: OptionManager,\n\n /**\n * @public\n * @param {Object} rawOption Raw option.\n * @param {module:echarts/model/Global} ecModel\n * @param {Array.} 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 } // 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\n\n rawOption = clone(rawOption); // FIXME\n // 如果 timeline options 或者 media 中设置了某个属性,而baseOption中没有设置,则进行警告。\n\n var oldOptionBackup = this._optionBackup;\n var newParsedOption = parseRawOption.call(this, rawOption, optionPreprocessorFuncs, !oldOptionBackup);\n this._newBaseOption = newParsedOption.baseOption; // For setOption at second time (using merge mode);\n\n if (oldOptionBackup) {\n // Only baseOption can be merged.\n mergeOption(oldOptionBackup.baseOption, newParsedOption.baseOption); // 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\n if (newParsedOption.timelineOptions.length) {\n oldOptionBackup.timelineOptions = newParsedOption.timelineOptions;\n }\n\n if (newParsedOption.mediaList.length) {\n oldOptionBackup.mediaList = newParsedOption.mediaList;\n }\n\n if (newParsedOption.mediaDefault) {\n oldOptionBackup.mediaDefault = newParsedOption.mediaDefault;\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; // 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 return clone(isRecreate // 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 * @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\n if (timelineModel) {\n option = clone(timelineOptions[timelineModel.getCurrentIndex()], true);\n }\n }\n\n return option;\n },\n\n /**\n * @param {module:echarts/model/Global} ecModel\n * @return {Array.}\n */\n getMediaOption: function (ecModel) {\n var ecWidth = this._api.getWidth();\n\n var ecHeight = this._api.getHeight();\n\n var mediaList = this._mediaList;\n var mediaDefault = this._mediaDefault;\n var indices = [];\n var result = []; // No media defined.\n\n if (!mediaList.length && !mediaDefault) {\n return result;\n } // Multi media may be applied, the latter defined media has higher priority.\n\n\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 } // FIXME\n // 是否mediaDefault应该强制用户设置,否则可能修改不能回归。\n\n\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(index === -1 ? mediaDefault.option : mediaList[index].option);\n });\n } // Otherwise return nothing.\n\n\n this._currentMediaIndices = indices;\n return result;\n }\n};\n\nfunction parseRawOption(rawOption, optionPreprocessorFuncs, isNew) {\n var timelineOptions = [];\n var mediaList = [];\n var mediaDefault;\n var baseOption; // Compatible with ec2.\n\n var timelineOpt = rawOption.timeline;\n\n if (rawOption.baseOption) {\n baseOption = rawOption.baseOption;\n } // For timeline\n\n\n if (timelineOpt || rawOption.options) {\n baseOption = baseOption || {};\n timelineOptions = (rawOption.options || []).slice();\n } // For media query\n\n\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 } else if (!mediaDefault) {\n // Use the first media default.\n mediaDefault = singleMedia;\n }\n }\n });\n } // For normal option\n\n\n if (!baseOption) {\n baseOption = rawOption;\n } // Set timelineOpt to baseOption in ec3,\n // which is convenient for merge option.\n\n\n if (!baseOption.timeline) {\n baseOption.timeline = timelineOpt;\n } // Preprocess.\n\n\n each([baseOption].concat(timelineOptions).concat(zrUtil.map(mediaList, function (media) {\n return media.option;\n })), function (option) {\n each(optionPreprocessorFuncs, function (preProcess) {\n preProcess(option, isNew);\n });\n });\n return {\n baseOption: baseOption,\n timelineOptions: timelineOptions,\n mediaDefault: mediaDefault,\n mediaList: mediaList\n };\n}\n/**\n * @see \n * Support: width, height, aspectRatio\n * Can use max or min as prefix.\n */\n\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 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 return applicatable;\n}\n\nfunction compare(real, expect, operator) {\n if (operator === 'min') {\n return real >= expect;\n } else if (operator === 'max') {\n return real <= expect;\n } else {\n // 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 * 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 */\n\n\nfunction mergeOption(oldOption, newOption) {\n newOption = newOption || {};\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 } else {\n newCptOpt = modelUtil.normalizeToArray(newCptOpt);\n oldCptOpt = modelUtil.normalizeToArray(oldCptOpt);\n var mapResult = modelUtil.mappingToExists(oldCptOpt, newCptOpt);\n oldOption[mainType] = map(mapResult, function (item) {\n return item.option && item.exist ? merge(item.exist, item.option, true) : item.exist || item.option;\n });\n }\n });\n}\n\nvar _default = OptionManager;\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar _subPixelOptimize = require(\"../helper/subPixelOptimize\");\n\nvar subPixelOptimizeLine = _subPixelOptimize.subPixelOptimizeLine;\n\n/**\n * 直线\n * @module zrender/graphic/shape/Line\n */\n// Avoid create repeatly.\nvar subPixelOptimizeOutputShape = {};\n\nvar _default = Path.extend({\n type: 'line',\n shape: {\n // Start point\n x1: 0,\n y1: 0,\n // End point\n x2: 0,\n y2: 0,\n percent: 1\n },\n style: {\n stroke: '#000',\n fill: null\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 } 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\n ctx.lineTo(x2, y2);\n },\n\n /**\n * Get point at percent\n * @param {number} percent\n * @return {Array.}\n */\n pointAt: function (p) {\n var shape = this.shape;\n return [shape.x1 * (1 - p) + shape.x2 * p, shape.y1 * (1 - p) + shape.y2 * p];\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar createListFromArray = require(\"../helper/createListFromArray\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = SeriesModel.extend({\n type: 'series.scatter',\n dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],\n getInitialData: function (option, ecModel) {\n return createListFromArray(this.getSource(), this, {\n useEncodeDefaulter: true\n });\n },\n brushSelector: 'point',\n getProgressive: function () {\n var progressive = this.option.progressive;\n\n if (progressive == null) {\n // PENDING\n return this.option.large ? 5e3 : this.get('progressive');\n }\n\n return progressive;\n },\n getProgressiveThreshold: function () {\n var progressiveThreshold = this.option.progressiveThreshold;\n\n if (progressiveThreshold == null) {\n // PENDING\n return this.option.large ? 1e4 : this.get('progressiveThreshold');\n }\n\n return progressiveThreshold;\n },\n defaultOption: {\n coordinateSystem: 'cartesian2d',\n zlevel: 0,\n z: 2,\n legendHoverLink: true,\n hoverAnimation: true,\n // Cartesian coordinate system\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // Polar coordinate system\n // polarIndex: 0,\n // Geo coordinate system\n // geoIndex: 0,\n // symbol: null, // 图形类型\n symbolSize: 10,\n // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2\n // symbolRotate: null, // 图形旋转控制\n large: false,\n // Available when large is true\n largeThreshold: 2000,\n // cursor: null,\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 // color: 各异\n\n },\n // If clip the overflow graphics\n // Works on cartesian / polar series\n clip: true // progressive: null\n\n }\n});\n\nmodule.exports = _default;","// TODO Draggable for group\n// FIXME Draggable on element which has parent rotation or scale\nfunction Draggable() {\n this.on('mousedown', this._dragStart, this);\n this.on('mousemove', this._drag, this);\n this.on('mouseup', this._dragEnd, this); // `mosuemove` and `mouseup` can be continue to fire when dragging.\n // See [Drag outside] in `Handler.js`. So we do not need to trigger\n // `_dragEnd` when globalout. That would brings better user experience.\n // this.on('globalout', this._dragEnd, this);\n // this._dropTarget = null;\n // this._draggingTarget = null;\n // this._x = 0;\n // this._y = 0;\n}\n\nDraggable.prototype = {\n constructor: Draggable,\n _dragStart: function (e) {\n var draggingTarget = e.target; // Find if there is draggable in the ancestor\n\n while (draggingTarget && !draggingTarget.draggable) {\n draggingTarget = draggingTarget.parent;\n }\n\n if (draggingTarget) {\n this._draggingTarget = draggingTarget;\n draggingTarget.dragging = true;\n this._x = e.offsetX;\n this._y = e.offsetY;\n this.dispatchToElement(param(draggingTarget, e), 'dragstart', e.event);\n }\n },\n _drag: function (e) {\n var draggingTarget = this._draggingTarget;\n\n if (draggingTarget) {\n var x = e.offsetX;\n var y = e.offsetY;\n var dx = x - this._x;\n var dy = y - this._y;\n this._x = x;\n this._y = y;\n draggingTarget.drift(dx, dy, e);\n this.dispatchToElement(param(draggingTarget, e), 'drag', e.event);\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\n if (dropTarget && dropTarget !== lastDropTarget) {\n this.dispatchToElement(param(dropTarget, e), 'dragenter', e.event);\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\nfunction param(target, e) {\n return {\n target: target,\n topTarget: e && e.topTarget\n };\n}\n\nvar _default = Draggable;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// var PI2 = Math.PI * 2;\nvar RADIAN = Math.PI / 180;\n\nfunction _default(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\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 var startAngle = -seriesModel.get('startAngle') * RADIAN;\n var minAngle = seriesModel.get('minAngle') * RADIAN;\n var virtualRoot = seriesModel.getData().tree.root;\n var treeRoot = seriesModel.getViewRoot();\n var rootDepth = treeRoot.depth;\n var sort = seriesModel.get('sort');\n\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 var sum = treeRoot.getValue(); // Sum may be 0\n\n var unitRadian = Math.PI / (sum || validDataCount) * 2;\n var renderRollupNode = treeRoot.depth > 0;\n var levels = treeRoot.height - (renderRollupNode ? -1 : 1);\n var rPerLevel = (r - r0) / (levels || 1);\n var clockwise = seriesModel.get('clockwise');\n var stillShowZeroSum = seriesModel.get('stillShowZeroSum'); // 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 * Render a tree\n * @return increased angle\n */\n\n var renderNode = function (node, startAngle) {\n if (!node) {\n return;\n }\n\n var endAngle = startAngle; // Render self\n\n if (node !== virtualRoot) {\n // Tree node is virtual, so it doesn't need to be drawn\n var value = node.getValue();\n var angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian;\n\n if (angle < minAngle) {\n angle = minAngle; // restAngle -= minAngle;\n } // else {\n // valueSumLargerThanMinAngle += value;\n // }\n\n\n endAngle = startAngle + dir * angle;\n var depth = node.depth - rootDepth - (renderRollupNode ? -1 : 1);\n var rStart = r0 + rPerLevel * depth;\n var rEnd = r0 + rPerLevel * (depth + 1);\n var itemModel = node.getModel();\n\n if (itemModel.get('r0') != null) {\n rStart = parsePercent(itemModel.get('r0'), size / 2);\n }\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 } // Render children\n\n\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 }; // Virtual root node for roll up\n\n\n if (renderRollupNode) {\n var rStart = r0;\n var rEnd = r0 + rPerLevel;\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 * 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 */\n\n\nfunction initChildren(node, isAsc) {\n var children = node.children || [];\n node.children = sort(children, isAsc); // Init children recursively\n\n if (children.length) {\n zrUtil.each(node.children, function (child) {\n initChildren(child, isAsc);\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 */\n\n\nfunction sort(children, sortOrder) {\n if (typeof sortOrder === 'function') {\n return children.sort(sortOrder);\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 ? (a.dataIndex - b.dataIndex) * (isAsc ? -1 : 1) : diff;\n });\n }\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar axisPointerModelHelper = require(\"./axisPointer/modelHelper\");\n\nvar axisTrigger = require(\"./axisPointer/axisTrigger\");\n\nrequire(\"./axisPointer/AxisPointerModel\");\n\nrequire(\"./axisPointer/AxisPointerView\");\n\nrequire(\"./axisPointer/CartesianAxisPointer\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\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.\necharts.registerPreprocessor(function (option) {\n // Always has a global axisPointerModel for default setting.\n if (option) {\n (!option.axisPointer || option.axisPointer.length === 0) && (option.axisPointer = {});\n var link = option.axisPointer.link; // 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\n if (link && !zrUtil.isArray(link)) {\n option.axisPointer.link = [link];\n }\n }\n}); // This process should proformed after coordinate systems created\n// and series data processed. So put it on statistic processing stage.\n\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 = axisPointerModelHelper.collect(ecModel, api);\n}); // Broadcast to all views.\n\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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _layout = require(\"../../util/layout\");\n\nvar getLayoutRect = _layout.getLayoutRect;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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/component/visualMap/VisualMapModel} visualMapModel\\\n * @param {module:echarts/ExtensionAPI} api\n * @param {Array.} itemSize always [short, long]\n * @return {string} 'left' or 'right' or 'top' or 'bottom'\n */\nfunction 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 } // Auto decision align.\n\n\n var ecSize = {\n width: api.getWidth(),\n height: api.getHeight()\n };\n var realIndex = modelOption.orient === 'horizontal' ? 1 : 0;\n var paramsSet = [['left', 'right', 'width'], ['top', 'bottom', 'height']];\n var reals = paramsSet[realIndex];\n var fakeValue = [0, null, 10];\n var layoutInput = {};\n\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 return reals[(rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5 < ecSize[rParam[1]] * 0.5 ? 0 : 1];\n}\n/**\n * Prepare dataIndex for outside usage, where dataIndex means rawIndex, and\n * dataIndexInside means filtered index.\n */\n\n\nfunction 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\n batchItem.highlightKey = 'visualMap' + (visualMapModel ? visualMapModel.componentIndex : '');\n });\n return batch;\n}\n\nexports.getItemAlign = getItemAlign;\nexports.makeHighDownBatch = makeHighDownBatch;","var Displayable = require(\"./Displayable\");\n\nvar zrUtil = require(\"../core/util\");\n\nvar PathProxy = require(\"../core/PathProxy\");\n\nvar pathContain = require(\"../contain/path\");\n\nvar Pattern = require(\"./Pattern\");\n\nvar getCanvasPattern = Pattern.prototype.getCanvasPattern;\nvar abs = Math.abs;\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 */\n\nfunction Path(opts) {\n Displayable.call(this, opts);\n /**\n * @type {module:zrender/core/PathProxy}\n * @readOnly\n */\n\n this.path = null;\n}\n\nPath.prototype = {\n constructor: Path,\n type: 'path',\n __dirtyPath: true,\n strokeContainThreshold: 5,\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 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 style.bind(ctx, this, prevEl);\n this.setTransform(ctx);\n\n if (this.__dirty) {\n var rect; // Update gradient because bounding rect may changed\n\n if (hasFillGradient) {\n rect = rect || this.getBoundingRect();\n this._fillGradient = style.getGradient(ctx, fill, rect);\n }\n\n if (hasStrokeGradient) {\n rect = rect || this.getBoundingRect();\n this._strokeGradient = style.getGradient(ctx, stroke, rect);\n }\n } // Use the gradient or pattern\n\n\n if (hasFillGradient) {\n // PENDING If may have affect the state\n ctx.fillStyle = this._fillGradient;\n } else if (hasFillPattern) {\n ctx.fillStyle = getCanvasPattern.call(fill, ctx);\n }\n\n if (hasStrokeGradient) {\n ctx.strokeStyle = this._strokeGradient;\n } else if (hasStrokePattern) {\n ctx.strokeStyle = getCanvasPattern.call(stroke, ctx);\n }\n\n var lineDash = style.lineDash;\n var lineDashOffset = style.lineDashOffset;\n var ctxLineDash = !!ctx.setLineDash; // Update path sx, sy\n\n var scale = this.getGlobalScale();\n path.setScale(scale[0], scale[1], this.segmentIgnoreThreshold); // 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\n if (this.__dirtyPath || lineDash && !ctxLineDash && hasStroke) {\n path.beginPath(ctx); // Setting line dash before build path\n\n if (lineDash && !ctxLineDash) {\n path.setLineDash(lineDash);\n path.setLineDashOffset(lineDashOffset);\n }\n\n this.buildPath(path, this.shape, false); // Clear path dirty flag\n\n if (this.path) {\n this.__dirtyPath = false;\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 } 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 } else {\n path.stroke(ctx);\n }\n }\n\n if (lineDash && ctxLineDash) {\n // PENDING\n // Remove lineDash\n ctx.setLineDash([]);\n } // Draw rect text\n\n\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 // 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 createPathProxy: function () {\n this.path = new PathProxy();\n },\n getBoundingRect: function () {\n var rect = this._rect;\n var style = this.style;\n var needsUpdateRect = !rect;\n\n if (needsUpdateRect) {\n var path = this.path;\n\n if (!path) {\n // Create path on demand.\n path = this.path = new PathProxy();\n }\n\n if (this.__dirtyPath) {\n path.beginPath();\n this.buildPath(path, this.shape, false);\n }\n\n rect = path.getBoundingRect();\n }\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\n if (this.__dirty || needsUpdateRect) {\n rectWithStroke.copy(rect); // FIXME Must after updateTransform\n\n var w = style.lineWidth; // PENDING, Min line width is needed when line is horizontal or vertical\n\n var lineScale = style.strokeNoScale ? this.getLineScale() : 1; // Only add extra hover lineWidth when there are no fill\n\n if (!style.hasFill()) {\n w = Math.max(w, this.strokeContainThreshold || 4);\n } // Consider line width\n // Line scale can't be 0;\n\n\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 } // Return rect with stroke\n\n\n return rectWithStroke;\n }\n\n return rect;\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\n if (style.hasStroke()) {\n var lineWidth = style.lineWidth;\n var lineScale = style.strokeNoScale ? this.getLineScale() : 1; // Line scale can't be 0;\n\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\n if (pathContain.containStroke(pathData, lineWidth / lineScale, x, y)) {\n return true;\n }\n }\n }\n\n if (style.hasFill()) {\n return pathContain.contain(pathData, x, y);\n }\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 } // Only mark dirty, not mark clean\n\n\n if (dirtyPath) {\n this.__dirtyPath = dirtyPath;\n this._rect = null;\n }\n\n this.__dirty = this.__dirtyText = true;\n this.__zr && this.__zr.refresh(); // Used as a clipping path\n\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 // 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 } 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; // Path from string may not have shape\n\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 } else {\n shape[key] = value;\n }\n\n this.dirty(true);\n }\n\n return this;\n },\n getLineScale: function () {\n var m = this.transform; // 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\n return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10 ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1])) : 1;\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 */\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 } // Extend default shape\n\n\n var defaultShape = defaults.shape;\n\n if (defaultShape) {\n this.shape = this.shape || {};\n var thisShape = this.shape;\n\n for (var name in defaultShape) {\n if (!thisShape.hasOwnProperty(name) && defaultShape.hasOwnProperty(name)) {\n thisShape[name] = defaultShape[name];\n }\n }\n }\n\n defaults.init && defaults.init.call(this, opts);\n };\n\n zrUtil.inherits(Sub, Path); // FIXME 不能 extend position, rotation 等引用对象\n\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);\nvar _default = Path;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar Cartesian = require(\"./Cartesian\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction Cartesian2D(name) {\n Cartesian.call(this, name);\n}\n\nCartesian2D.prototype = {\n constructor: Cartesian2D,\n type: 'cartesian2d',\n\n /**\n * @type {Array.}\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] || this.getAxesByScale('time')[0] || this.getAxis('x');\n },\n\n /**\n * If contain point\n * @param {Array.} 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])) && axisY.contain(axisY.toLocalCoord(point[1]));\n },\n\n /**\n * If contain data\n * @param {Array.} data\n * @return {boolean}\n */\n containData: function (data) {\n return this.getAxis('x').containData(data[0]) && this.getAxis('y').containData(data[1]);\n },\n\n /**\n * @param {Array.} data\n * @param {Array.} out\n * @return {Array.}\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.} data\n * @param {Array.} out\n * @return {Array.}\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(Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x), Math.max(xAxisExtent[0], xAxisExtent[1]));\n out[1] = Math.min(Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y), Math.max(yAxisExtent[0], yAxisExtent[1]));\n return out;\n },\n\n /**\n * @param {Array.} point\n * @param {Array.} out\n * @return {Array.}\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 var rect = new BoundingRect(x, y, width, height);\n return rect;\n }\n};\nzrUtil.inherits(Cartesian2D, Cartesian);\nvar _default = Cartesian2D;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar helper = require(\"./helper\");\n\nvar sliderMove = require(\"../helper/sliderMove\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar each = zrUtil.each;\nvar asc = numberUtil.asc;\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 */\n\nvar AxisProxy = function (dimName, axisIndex, dataZoomModel, ecModel) {\n /**\n * @private\n * @type {string}\n */\n this._dimName = dimName;\n /**\n * @private\n */\n\n this._axisIndex = axisIndex;\n /**\n * @private\n * @type {Array.}\n */\n\n this._valueWindow;\n /**\n * @private\n * @type {Array.}\n */\n\n this._percentWindow;\n /**\n * @private\n * @type {Array.}\n */\n\n this._dataExtent;\n /**\n * {minSpan, maxSpan, minValueSpan, maxValueSpan}\n * @private\n * @type {Object}\n */\n\n this._minMaxSpan;\n /**\n * @readOnly\n * @type {module: echarts/model/Global}\n */\n\n this.ecModel = ecModel;\n /**\n * @private\n * @type {module: echarts/component/dataZoom/DataZoomModel}\n */\n\n this._dataZoomModel = dataZoomModel; // /**\n // * @readOnly\n // * @private\n // */\n // this.hasSeriesStacked;\n};\n\nAxisProxy.prototype = {\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.} Value can only be NaN or finite value.\n */\n getDataValueWindow: function () {\n return this._valueWindow.slice();\n },\n\n /**\n * @return {Array.}\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 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\n if (this._axisIndex === (axisModel && axisModel.componentIndex)) {\n seriesModels.push(seriesModel);\n }\n }\n }, this);\n return seriesModels;\n },\n getAxisModel: function () {\n return this.ecModel.getComponent(this._dimName + 'Axis', this._axisIndex);\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\n if (isCartesian) {\n coordSysIndexName = 'gridIndex';\n otherAxisDim = axisDim === 'x' ? 'y' : 'x';\n } else {\n coordSysIndexName = 'polarIndex';\n otherAxisDim = axisDim === 'angle' ? 'radius' : 'angle';\n }\n\n var foundOtherAxisModel;\n ecModel.eachComponent(otherAxisDim + 'Axis', function (otherAxisModel) {\n if ((otherAxisModel.get(coordSysIndexName) || 0) === (axisModel.get(coordSysIndexName) || 0)) {\n foundOtherAxisModel = otherAxisModel;\n }\n });\n return foundOtherAxisModel;\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\n var rangePropMode = this._dataZoomModel.getRangePropMode();\n\n var percentExtent = [0, 100];\n var percentWindow = [];\n var valueWindow = [];\n var hasPropModeValue;\n each(['start', 'end'], function (prop, idx) {\n var boundPercent = opt[prop];\n var boundValue = opt[prop + 'Value']; // 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]); // Use scale.parse to math round for category or time axis.\n\n boundValue = scale.parse(numberUtil.linearMap(boundPercent, percentExtent, dataExtent));\n } else {\n hasPropModeValue = true;\n boundValue = boundValue == null ? dataExtent[idx] : scale.parse(boundValue); // 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\n boundPercent = numberUtil.linearMap(boundValue, dataExtent, percentExtent);\n } // valueWindow[idx] = round(boundValue);\n // percentWindow[idx] = round(boundPercent);\n\n\n valueWindow[idx] = boundValue;\n percentWindow[idx] = boundPercent;\n });\n asc(valueWindow);\n asc(percentWindow); // 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\n var spans = this._minMaxSpan;\n hasPropModeValue ? restrictSet(valueWindow, percentWindow, dataExtent, percentExtent, false) : 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\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(); // Culculate data window and data extent, and record them.\n\n this._dataExtent = calculateDataExtent(this, this._dimName, targetSeries); // 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 // `calculateDataWindow` uses min/maxSpan.\n\n setMinMaxSpan(this);\n var dataWindow = this.calculateDataWindow(dataZoomModel.settledOption);\n this._valueWindow = dataWindow.valueWindow;\n this._percentWindow = dataWindow.percentWindow; // Update axis setting then.\n\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 } // 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 // TODO\n // filterMode 'weakFilter' and 'empty' is not optimized for huge data yet.\n\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\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\n if (thisHasValue && !thisLeftOut && !thisRightOut) {\n return true;\n }\n\n thisHasValue && (hasValue = true);\n thisLeftOut && (leftOut = true);\n thisRightOut && (rightOut = true);\n } // If both left out and right out, do not filter.\n\n\n return hasValue && leftOut && rightOut;\n });\n } else {\n each(dataDims, function (dim) {\n if (filterMode === 'empty') {\n seriesModel.setData(seriesData = seriesData.map(dim, function (value) {\n return !isInWindow(value) ? NaN : value;\n }));\n } else {\n var range = {};\n range[dim] = valueWindow; // console.time('select');\n\n seriesData.selectRange(range); // 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 each(seriesModels, function (seriesModel) {\n var seriesData = seriesModel.getData();\n\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 } // 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\n\n fixExtentByAxis(axisProxy, dataExtent);\n return dataExtent;\n}\n\nfunction fixExtentByAxis(axisProxy, dataExtent) {\n var axisModel = axisProxy.getAxisModel();\n var min = axisModel.getMin(true); // For category axis, if min/max/scale are not set, extent is determined\n // by axis.data by default.\n\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 } else if (isCategoryAxis) {\n dataExtent[0] = axisDataLen > 0 ? 0 : NaN;\n }\n\n var max = axisModel.getMax(true);\n\n if (max != null && max !== 'dataMax' && typeof max !== 'function') {\n dataExtent[1] = max;\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 } // 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\n return dataExtent;\n}\n\nfunction setAxisModel(axisProxy, isRestore) {\n var axisModel = axisProxy.getAxisModel();\n var percentWindow = axisProxy._percentWindow;\n var valueWindow = axisProxy._valueWindow;\n\n if (!percentWindow) {\n return;\n } // [0, 500]: arbitrary value, guess axis extent.\n\n\n var precision = numberUtil.getPixelPrecision(valueWindow, [0, 500]);\n precision = Math.min(precision, 20); // isRestore or isFull\n\n var useOrigin = isRestore || percentWindow[0] === 0 && percentWindow[1] === 100;\n axisModel.setRange(useOrigin ? null : +valueWindow[0].toFixed(precision), useOrigin ? null : +valueWindow[1].toFixed(precision));\n}\n\nfunction setMinMaxSpan(axisProxy) {\n var minMaxSpan = axisProxy._minMaxSpan = {};\n var dataZoomModel = axisProxy._dataZoomModel;\n var dataExtent = axisProxy._dataExtent;\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)); // minValueSpan and maxValueSpan has higher priority than minSpan and maxSpan\n\n if (valueSpan != null) {\n percentSpan = numberUtil.linearMap(dataExtent[0] + valueSpan, dataExtent, [0, 100], true);\n } else if (percentSpan != null) {\n valueSpan = numberUtil.linearMap(percentSpan, [0, 100], dataExtent, true) - dataExtent[0];\n }\n\n minMaxSpan[minMax + 'Span'] = percentSpan;\n minMaxSpan[minMax + 'ValueSpan'] = valueSpan;\n });\n}\n\nvar _default = AxisProxy;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _model = require(\"../../util/model\");\n\nvar makeInner = _model.makeInner;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * @return {string} If large mode changed, return string 'reset';\n */\nfunction _default() {\n var inner = makeInner();\n return function (seriesModel) {\n var fields = inner(seriesModel);\n var pipelineContext = seriesModel.pipelineContext;\n var originalLarge = fields.large;\n var originalProgressive = fields.progressiveRender; // FIXME: if the planner works on a filtered series, `pipelineContext` does not\n // exists. See #11611 . Probably we need to modify this structure, see the comment\n // on `performRawSeries` in `Schedular.js`.\n\n var large = fields.large = pipelineContext && pipelineContext.large;\n var progressive = fields.progressiveRender = pipelineContext && pipelineContext.progressiveRender;\n return !!(originalLarge ^ large || originalProgressive ^ progressive) && 'reset';\n };\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"./gridSimple\");\n\nrequire(\"./axisPointer/CartesianAxisPointer\");\n\nrequire(\"./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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Model = require(\"../../model/Model\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar each = zrUtil.each;\nvar curry = zrUtil.curry; // Build axisPointerModel, mergin tooltip.axisPointer model for each axis.\n// allAxesInfo should be updated when setOption performed.\n\nfunction 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 /**\n * key: makeKey(coordSys.model)\n * value: Object: key makeKey(axis.model), value: axisInfo\n */\n coordSysAxesInfo: {},\n coordSysMap: {}\n };\n collectAxesInfo(result, ecModel, api); // Check seriesInvolved for performance, in case too many series in some chart.\n\n result.seriesInvolved && collectSeriesInfo(result, ecModel);\n return result;\n}\n\nfunction collectAxesInfo(result, ecModel, api) {\n var globalTooltipModel = ecModel.getComponent('tooltip');\n var globalAxisPointerModel = ecModel.getComponent('axisPointer'); // links can only be set on global.\n\n var linksOption = globalAxisPointerModel.get('link', true) || [];\n var linkGroups = []; // Collect axes info.\n\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; // Set tooltip (like 'cross') is a convienent way to show axisPointer\n // for user. So we enable seting tooltip on coordSys model.\n\n var coordSysModel = coordSys.model;\n var baseTooltipModel = coordSysModel.getModel('tooltip', globalTooltipModel);\n each(coordSys.getAxes(), curry(saveTooltipAxisInfo, false, null)); // If axis tooltip used, choose tooltip axis for each coordSys.\n // Notice this case: coordSys is `grid` but not `cartesian2D` here.\n\n if (coordSys.getTooltipAxes && globalTooltipModel // If tooltip.showContent is set as false, tooltip will not\n // show but axisPointer will show as normal.\n && baseTooltipModel.get('show')) {\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\n if (triggerAxis || cross) {\n each(tooltipAxes.baseAxes, curry(saveTooltipAxisInfo, cross ? 'cross' : true, triggerAxis));\n }\n\n if (cross) {\n each(tooltipAxes.otherAxes, curry(saveTooltipAxisInfo, 'cross', false));\n }\n } // fromTooltip: true | false | 'cross'\n // triggerTooltip: true | false | null\n\n\n function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) {\n var axisPointerModel = axis.model.getModel('axisPointer', globalAxisPointerModel);\n var axisPointerShow = axisPointerModel.get('show');\n\n if (!axisPointerShow || axisPointerShow === 'auto' && !fromTooltip && !isHandleTrigger(axisPointerModel)) {\n return;\n }\n\n if (triggerTooltip == null) {\n triggerTooltip = axisPointerModel.get('triggerTooltip');\n }\n\n axisPointerModel = fromTooltip ? makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) : axisPointerModel;\n var snap = axisPointerModel.get('snap');\n var key = makeKey(axis.model);\n var involveSeries = triggerTooltip || snap || axis.type === 'category'; // If result.axesInfo[key] exist, override it (tooltip has higher priority).\n\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 var groupIndex = getLinkGroupIndex(linksOption, axis);\n\n if (groupIndex != null) {\n var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = {\n axesInfo: {}\n });\n linkGroup.axesInfo[key] = axisInfo;\n linkGroup.mapper = linksOption[groupIndex].mapper;\n axisInfo.linkGroup = linkGroup;\n }\n }\n });\n}\n\nfunction makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) {\n var tooltipAxisPointerModel = baseTooltipModel.getModel('axisPointer');\n var volatileOption = {};\n each(['type', 'snap', 'lineStyle', 'shadowStyle', 'label', 'animation', 'animationDurationUpdate', 'animationEasingUpdate', 'z'], function (field) {\n volatileOption[field] = zrUtil.clone(tooltipAxisPointerModel.get(field));\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\n volatileOption.snap = axis.type !== 'category' && !!triggerTooltip; // Compatibel with previous behavior, tooltip axis do not show label by default.\n // Only these properties can be overrided from tooltip to axisPointer.\n\n if (tooltipAxisPointerModel.get('type') === 'cross') {\n volatileOption.type = 'line';\n }\n\n var labelOption = volatileOption.label || (volatileOption.label = {}); // Follow the convention, do not show label when triggered by tooltip by default.\n\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; // If triggerTooltip, this is a base axis, which should better not use cross style\n // (cross style is dashed by default)\n\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('axisPointer', new Model(volatileOption, globalAxisPointerModel, ecModel));\n}\n\nfunction collectSeriesInfo(result, ecModel) {\n // Prepare data for axis trigger\n ecModel.eachSeries(function (seriesModel) {\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\n if (!coordSys || seriesTooltipTrigger === 'none' || seriesTooltipTrigger === false || seriesTooltipTrigger === 'item' || seriesTooltipShow === false || seriesModel.get('axisPointer.show', true) === false) {\n return;\n }\n\n each(result.coordSysAxesInfo[makeKey(coordSys.model)], function (axisInfo) {\n var axis = axisInfo.axis;\n\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 }, this);\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 */\n\n\nfunction getLinkGroupIndex(linksOption, axis) {\n var axisModel = axis.model;\n var dim = axis.dim;\n\n for (var i = 0; i < linksOption.length; i++) {\n var linkOption = linksOption[i] || {};\n\n if (checkPropInLink(linkOption[dim + 'AxisId'], axisModel.id) || checkPropInLink(linkOption[dim + 'AxisIndex'], axisModel.componentIndex) || checkPropInLink(linkOption[dim + 'AxisName'], axisModel.name)) {\n return i;\n }\n }\n}\n\nfunction checkPropInLink(linkPropValue, axisPropValue) {\n return linkPropValue === 'all' || zrUtil.isArray(linkPropValue) && zrUtil.indexOf(linkPropValue, axisPropValue) >= 0 || linkPropValue === axisPropValue;\n}\n\nfunction fixValue(axisModel) {\n var axisInfo = getAxisInfo(axisModel);\n\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'); // Parse init value for category and time axis.\n\n if (value != null) {\n value = scale.parse(value);\n }\n\n var useHandle = isHandleTrigger(axisPointerModel); // If `handle` used, `axisPointer` will always be displayed, so value\n // and status should be initialized.\n\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 // 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 // Make handle displayed on the end of the axis when init, which looks better.\n value = extent[1];\n }\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\nfunction getAxisInfo(axisModel) {\n var coordSysAxesInfo = (axisModel.ecModel.getComponent('axisPointer') || {}).coordSysAxesInfo;\n return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)];\n}\n\nfunction 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 * @param {module:echarts/model/Model} model\n * @return {string} unique key\n */\n\n\nfunction makeKey(model) {\n return model.type + '||' + model.id;\n}\n\nexports.collect = collect;\nexports.fixValue = fixValue;\nexports.getAxisInfo = getAxisInfo;\nexports.getAxisPointerModel = getAxisPointerModel;\nexports.makeKey = makeKey;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Uint8ClampedArray */\nvar GRADIENT_LEVELS = 256;\n/**\n * Heatmap Chart\n *\n * @class\n */\n\nfunction Heatmap() {\n var canvas = zrUtil.createCanvas();\n this.canvas = canvas;\n this.blurSize = 30;\n this.pointSize = 20;\n this.maxOpacity = 1;\n this.minOpacity = 0;\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\n var gradientInRange = this._getGradient(data, colorFunc, 'inRange');\n\n var gradientOutOfRange = this._getGradient(data, colorFunc, 'outOfRange');\n\n var r = this.pointSize + this.blurSize;\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\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]; // calculate alpha using value\n\n var alpha = normalize(value); // draw with the circle brush with alpha\n\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 } // colorize the canvas using alpha value and set with gradient\n\n\n var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\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; // Simple optimize to ignore the empty data\n\n if (alpha > 0) {\n var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange; // Any alpha > 0 will be mapped to [minOpacity, maxOpacity]\n\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 } else {\n offset += 4;\n }\n }\n\n ctx.putImageData(imageData, 0, 0);\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()); // set brush size\n\n var r = this.pointSize + this.blurSize;\n var d = r * 2;\n brushCanvas.width = d;\n brushCanvas.height = d;\n var ctx = brushCanvas.getContext('2d');\n ctx.clearRect(0, 0, d, d); // 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\n ctx.shadowOffsetX = d;\n ctx.shadowBlur = this.blurSize; // draw the shadow in black, and use alpha and shadow blur to generate\n // color in color map\n\n ctx.shadowColor = '#000'; // draw circle in the left to the canvas\n\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\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\n return pixelsSingleState;\n }\n};\nvar _default = Heatmap;\nmodule.exports = _default;","var _event = require(\"../core/event\");\n\nvar addEventListener = _event.addEventListener;\nvar removeEventListener = _event.removeEventListener;\nvar normalizeEvent = _event.normalizeEvent;\nvar getNativeEvent = _event.getNativeEvent;\n\nvar zrUtil = require(\"../core/util\");\n\nvar Eventful = require(\"../mixin/Eventful\");\n\nvar env = require(\"../core/env\");\n\n/* global document */\nvar TOUCH_CLICK_DELAY = 300;\nvar globalEventSupported = env.domSupported;\n\nvar localNativeListenerNames = function () {\n var mouseHandlerNames = ['click', 'dblclick', 'mousewheel', 'mouseout', 'mouseup', 'mousedown', 'mousemove', 'contextmenu'];\n var touchHandlerNames = ['touchstart', 'touchend', 'touchmove'];\n var pointerEventNameMap = {\n pointerdown: 1,\n pointerup: 1,\n pointermove: 1,\n pointerout: 1\n };\n var pointerHandlerNames = zrUtil.map(mouseHandlerNames, function (name) {\n var nm = name.replace('mouse', 'pointer');\n return pointerEventNameMap.hasOwnProperty(nm) ? nm : name;\n });\n return {\n mouse: mouseHandlerNames,\n touch: touchHandlerNames,\n pointer: pointerHandlerNames\n };\n}();\n\nvar globalNativeListenerNames = {\n mouse: ['mousemove', 'mouseup'],\n pointer: ['pointermove', 'pointerup']\n};\n\nfunction eventNameFix(name) {\n return name === 'mousewheel' && env.browser.firefox ? 'DOMMouseScroll' : name;\n}\n\nfunction isPointerFromTouch(event) {\n var pointerType = event.pointerType;\n return pointerType === 'pen' || pointerType === 'touch';\n} // function useMSGuesture(handlerProxy, event) {\n// return isPointerFromTouch(event) && !!handlerProxy._msGesture;\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 \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 *\n * @param {DOMHandlerScope} scope\n */\n\n\nfunction setTouchTimer(scope) {\n scope.touching = true;\n\n if (scope.touchTimer != null) {\n clearTimeout(scope.touchTimer);\n scope.touchTimer = null;\n }\n\n scope.touchTimer = setTimeout(function () {\n scope.touching = false;\n scope.touchTimer = null;\n }, 700);\n} // Mark touch, which is useful in distinguish touch and\n// mouse event in upper applicatoin.\n\n\nfunction markTouch(event) {\n event && (event.zrByTouch = true);\n} // function markTriggeredFromLocal(event) {\n// event && (event.__zrIsFromLocal = true);\n// }\n// function isTriggeredFromLocal(instance, event) {\n// return !!(event && event.__zrIsFromLocal);\n// }\n\n\nfunction normalizeGlobalEvent(instance, event) {\n // offsetX, offsetY still need to be calculated. They are necessary in the event\n // handlers of the upper applications. Set `true` to force calculate them.\n return normalizeEvent(instance.dom, new FakeGlobalEvent(instance, event), true);\n}\n/**\n * Detect whether the given el is in `painterRoot`.\n */\n\n\nfunction isLocalEl(instance, el) {\n var elTmp = el;\n var isLocal = false;\n\n while (elTmp && elTmp.nodeType !== 9 && !(isLocal = elTmp.domBelongToZr || elTmp !== el && elTmp === instance.painterRoot)) {\n elTmp = elTmp.parentNode;\n }\n\n return isLocal;\n}\n/**\n * Make a fake event but not change the original event,\n * becuase the global event probably be used by other\n * listeners not belonging to zrender.\n * @class\n */\n\n\nfunction FakeGlobalEvent(instance, event) {\n this.type = event.type;\n this.target = this.currentTarget = instance.dom;\n this.pointerType = event.pointerType; // Necessray for the force calculation of zrX, zrY\n\n this.clientX = event.clientX;\n this.clientY = event.clientY; // Because we do not mount global listeners to touch events,\n // we do not copy `targetTouches` and `changedTouches` here.\n}\n\nvar fakeGlobalEventProto = FakeGlobalEvent.prototype; // we make the default methods on the event do nothing,\n// otherwise it is dangerous. See more details in\n// [Drag outside] in `Handler.js`.\n\nfakeGlobalEventProto.stopPropagation = fakeGlobalEventProto.stopImmediatePropagation = fakeGlobalEventProto.preventDefault = zrUtil.noop;\n/**\n * Local DOM Handlers\n * @this {HandlerProxy}\n */\n\nvar localDOMHandlers = {\n mousedown: function (event) {\n event = normalizeEvent(this.dom, event);\n this._mayPointerCapture = [event.zrX, event.zrY];\n this.trigger('mousedown', event);\n },\n mousemove: function (event) {\n event = normalizeEvent(this.dom, event);\n var downPoint = this._mayPointerCapture;\n\n if (downPoint && (event.zrX !== downPoint[0] || event.zrY !== downPoint[1])) {\n togglePointerCapture(this, true);\n }\n\n this.trigger('mousemove', event);\n },\n mouseup: function (event) {\n event = normalizeEvent(this.dom, event);\n togglePointerCapture(this, false);\n this.trigger('mouseup', event);\n },\n mouseout: function (event) {\n event = normalizeEvent(this.dom, event); // Similarly to the browser did on `document` and touch event,\n // `globalout` will be delayed to final pointer cature release.\n\n if (this._pointerCapturing) {\n event.zrEventControl = 'no_globalout';\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\n\n var element = event.toElement || event.relatedTarget;\n event.zrIsToLocalDOM = isLocalEl(this, element);\n this.trigger('mouseout', 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 markTouch(event);\n this._lastTouchMoment = new Date();\n this.handler.processGesture(event, 'start'); // For consistent event listener for both touch device and mouse device,\n // we simulate \"mouseover-->mousedown\" in touch device. So we trigger\n // `mousemove` here (to trigger `mouseover` inside), and then trigger\n // `mousedown`.\n\n localDOMHandlers.mousemove.call(this, event);\n localDOMHandlers.mousedown.call(this, event);\n },\n touchmove: function (event) {\n event = normalizeEvent(this.dom, event);\n markTouch(event);\n this.handler.processGesture(event, 'change'); // 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\n localDOMHandlers.mousemove.call(this, event);\n },\n touchend: function (event) {\n event = normalizeEvent(this.dom, event);\n markTouch(event);\n this.handler.processGesture(event, 'end');\n localDOMHandlers.mouseup.call(this, event); // 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 // click event should always be triggered no matter whether\n // there is gestrue event. System click can not be prevented.\n\n if (+new Date() - this._lastTouchMoment < TOUCH_CLICK_DELAY) {\n localDOMHandlers.click.call(this, event);\n }\n },\n pointerdown: function (event) {\n localDOMHandlers.mousedown.call(this, event); // if (useMSGuesture(this, event)) {\n // this._msGesture.addPointer(event.pointerId);\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 localDOMHandlers.mousemove.call(this, event);\n }\n },\n pointerup: function (event) {\n localDOMHandlers.mouseup.call(this, event);\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 localDOMHandlers.touchend for detailed explanation)\n if (!isPointerFromTouch(event)) {\n localDOMHandlers.mouseout.call(this, event);\n }\n }\n};\n/**\n * Othere DOM UI Event handlers for zr dom.\n * @this {HandlerProxy}\n */\n\nzrUtil.each(['click', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n localDOMHandlers[name] = function (event) {\n event = normalizeEvent(this.dom, event);\n this.trigger(name, event);\n };\n});\n/**\n * DOM UI Event handlers for global page.\n *\n * [Caution]:\n * those handlers should both support in capture phase and bubble phase!\n *\n * @this {HandlerProxy}\n */\n\nvar globalDOMHandlers = {\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 globalDOMHandlers.mousemove.call(this, event);\n }\n },\n pointerup: function (event) {\n globalDOMHandlers.mouseup.call(this, event);\n },\n mousemove: function (event) {\n this.trigger('mousemove', event);\n },\n mouseup: function (event) {\n var pointerCaptureReleasing = this._pointerCapturing;\n togglePointerCapture(this, false);\n this.trigger('mouseup', event);\n\n if (pointerCaptureReleasing) {\n event.zrEventControl = 'only_globalout';\n this.trigger('mouseout', event);\n }\n }\n};\n/**\n * @param {HandlerProxy} instance\n * @param {DOMHandlerScope} scope\n */\n\nfunction mountLocalDOMEventListeners(instance, scope) {\n var domHandlers = scope.domHandlers;\n\n if (env.pointerEventsSupported) {\n // 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 zrUtil.each(localNativeListenerNames.pointer, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n // markTriggeredFromLocal(event);\n domHandlers[nativeEventName].call(instance, event);\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 // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+.\n // We dont support touch on IE on win7.\n // See \n // if (typeof MSGesture === 'function') {\n // (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line\n // dom.addEventListener('MSGestureChange', onMSGestureChange);\n // }\n } else {\n if (env.touchEventsSupported) {\n zrUtil.each(localNativeListenerNames.touch, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n // markTriggeredFromLocal(event);\n domHandlers[nativeEventName].call(instance, event);\n setTouchTimer(scope);\n });\n }); // Handler of 'mouseout' event is needed in touch mode, which will be mounted below.\n // addEventListener(root, 'mouseout', this._mouseoutHandler);\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\n\n zrUtil.each(localNativeListenerNames.mouse, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n event = getNativeEvent(event);\n\n if (!scope.touching) {\n // markTriggeredFromLocal(event);\n domHandlers[nativeEventName].call(instance, event);\n }\n });\n });\n }\n}\n/**\n * @param {HandlerProxy} instance\n * @param {DOMHandlerScope} scope\n */\n\n\nfunction mountGlobalDOMEventListeners(instance, scope) {\n // Only IE11+/Edge. See the comment in `mountLocalDOMEventListeners`.\n if (env.pointerEventsSupported) {\n zrUtil.each(globalNativeListenerNames.pointer, mount);\n } // Touch event has implemented \"drag outside\" so we do not mount global listener for touch event.\n // (see https://www.w3.org/TR/touch-events/#the-touchmove-event)\n // We do not consider \"both-support-touch-and-mouse device\" for this feature (see the comment of\n // `mountLocalDOMEventListeners`) to avoid bugs util some requirements come.\n else if (!env.touchEventsSupported) {\n zrUtil.each(globalNativeListenerNames.mouse, mount);\n }\n\n function mount(nativeEventName) {\n function nativeEventListener(event) {\n event = getNativeEvent(event); // See the reason in [Drag outside] in `Handler.js`\n // This checking supports both `useCapture` or not.\n // PENDING: if there is performance issue in some devices,\n // we probably can not use `useCapture` and change a easier\n // to judes whether local (mark).\n\n if (!isLocalEl(instance, event.target)) {\n event = normalizeGlobalEvent(instance, event);\n scope.domHandlers[nativeEventName].call(instance, event);\n }\n }\n\n mountSingleDOMEventListener(scope, nativeEventName, nativeEventListener, {\n capture: true\n } // See [Drag Outside] in `Handler.js`\n );\n }\n}\n\nfunction mountSingleDOMEventListener(scope, nativeEventName, listener, opt) {\n scope.mounted[nativeEventName] = listener;\n scope.listenerOpts[nativeEventName] = opt;\n addEventListener(scope.domTarget, eventNameFix(nativeEventName), listener, opt);\n}\n\nfunction unmountDOMEventListeners(scope) {\n var mounted = scope.mounted;\n\n for (var nativeEventName in mounted) {\n if (mounted.hasOwnProperty(nativeEventName)) {\n removeEventListener(scope.domTarget, eventNameFix(nativeEventName), mounted[nativeEventName], scope.listenerOpts[nativeEventName]);\n }\n }\n\n scope.mounted = {};\n}\n/**\n * See [Drag Outside] in `Handler.js`.\n * @implement\n * @param {boolean} isPointerCapturing Should never be `null`/`undefined`.\n * `true`: start to capture pointer if it is not capturing.\n * `false`: end the capture if it is capturing.\n */\n\n\nfunction togglePointerCapture(instance, isPointerCapturing) {\n instance._mayPointerCapture = null;\n\n if (globalEventSupported && instance._pointerCapturing ^ isPointerCapturing) {\n instance._pointerCapturing = isPointerCapturing;\n var globalHandlerScope = instance._globalHandlerScope;\n isPointerCapturing ? mountGlobalDOMEventListeners(instance, globalHandlerScope) : unmountDOMEventListeners(globalHandlerScope);\n }\n}\n/**\n * @inner\n * @class\n */\n\n\nfunction DOMHandlerScope(domTarget, domHandlers) {\n this.domTarget = domTarget;\n this.domHandlers = domHandlers; // Key: eventName, value: mounted handler funcitons.\n // Used for unmount.\n\n this.mounted = {};\n this.listenerOpts = {};\n this.touchTimer = null;\n this.touching = false;\n}\n/**\n * @public\n * @class\n */\n\n\nfunction HandlerDomProxy(dom, painterRoot) {\n Eventful.call(this);\n this.dom = dom;\n this.painterRoot = painterRoot;\n this._localHandlerScope = new DOMHandlerScope(dom, localDOMHandlers);\n\n if (globalEventSupported) {\n this._globalHandlerScope = new DOMHandlerScope(document, globalDOMHandlers);\n }\n /**\n * @type {boolean}\n */\n\n\n this._pointerCapturing = false;\n /**\n * @type {Array.} [x, y] or null.\n */\n\n this._mayPointerCapture = null;\n mountLocalDOMEventListeners(this, this._localHandlerScope);\n}\n\nvar handlerDomProxyProto = HandlerDomProxy.prototype;\n\nhandlerDomProxyProto.dispose = function () {\n unmountDOMEventListeners(this._localHandlerScope);\n\n if (globalEventSupported) {\n unmountDOMEventListeners(this._globalHandlerScope);\n }\n};\n\nhandlerDomProxyProto.setCursor = function (cursorStyle) {\n this.dom.style && (this.dom.style.cursor = cursorStyle || 'default');\n};\n\nzrUtil.mixin(HandlerDomProxy, Eventful);\nvar _default = HandlerDomProxy;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(ecModel) {\n var processedMapType = {};\n ecModel.eachSeriesByType('map', function (mapSeries) {\n var mapType = mapSeries.getMapType();\n\n if (mapSeries.getHostGeoModel() || processedMapType[mapType]) {\n return;\n }\n\n var mapSymbolOffsets = {};\n zrUtil.each(mapSeries.seriesGroup, function (subMapSeries) {\n var geo = subMapSeries.coordinateSystem;\n var data = subMapSeries.originalData;\n\n if (subMapSeries.get('showLegendSymbol') && ecModel.getComponent('legend')) {\n data.each(data.mapDimension('value'), function (value, idx) {\n var name = data.getName(idx);\n var region = geo.getRegion(name); // If input series.data is [11, 22, '-'/null/undefined, 44],\n // it will be filled with NaN: [11, 22, NaN, 44] and NaN will\n // not be drawn. So here must validate if value is NaN.\n\n if (!region || isNaN(value)) {\n return;\n }\n\n var offset = mapSymbolOffsets[name] || 0;\n var point = geo.dataToPoint(region.center);\n mapSymbolOffsets[name] = offset + 1;\n data.setItemLayout(idx, {\n point: point,\n offset: offset\n });\n });\n }\n }); // Show label of those region not has legendSymbol(which is offset 0)\n\n var data = mapSeries.getData();\n data.each(function (idx) {\n var name = data.getName(idx);\n var layout = data.getItemLayout(idx) || {};\n layout.showLabel = !mapSymbolOffsets[name];\n data.setItemLayout(idx, layout);\n });\n processedMapType[mapType] = true;\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Cartesian coordinate system\n * @module echarts/coord/Cartesian\n *\n */\nfunction dimAxisMapper(dim) {\n return this._axes[dim];\n}\n/**\n * @alias module:echarts/coord/Cartesian\n * @constructor\n */\n\n\nvar Cartesian = function (name) {\n this._axes = {};\n this._dimList = [];\n /**\n * @type {string}\n */\n\n this.name = name || '';\n};\n\nCartesian.prototype = {\n constructor: Cartesian,\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.}\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(this.getAxes(), function (axis) {\n return axis.scale.type === scaleType;\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 this._axes[dim] = axis;\n\n this._dimList.push(dim);\n },\n\n /**\n * Convert data to coord in nd space\n * @param {Array.|Object.} val\n * @return {Array.|Object.}\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.|Object.} val\n * @return {Array.|Object.}\n */\n coordToData: function (val) {\n return this._dataCoordConvert(val, 'coordToData');\n },\n _dataCoordConvert: function (input, method) {\n var dimList = this._dimList;\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 output[dim] = axis[method](input[dim]);\n }\n\n return output;\n }\n};\nvar _default = Cartesian;\nmodule.exports = _default;","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABUCAYAAAACoiByAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAWqADAAQAAAABAAAAVAAAAAD2TDXWAAACY0lEQVR4Ae3dsW7aUABG4RhlIWOWDt14O9YMGSpF6tA1U94PkIiQGJoNMhCg15UcpYQS/4cmFfHxYgz32NxPxmK7Z2duHyJQfchVDlxkOp1+Xa1W9weGnPxHVVU99E5+Ficygf9+R5+IE/qa5dd6WX6tP72jER+LfHQwt7gSOiZjgdDMLa6EjslYIDRziyuhYzIWCM3c4kromIwFQjO3uBI6JmOB0MwtroSOyVggNHOLK6FjMhYIzdziSuiYjAVCM7e4EjomY4HQzC2uhI7JWCA0c4sroWMyFgjN3OJK6JiMBUIzt7gSOiZjgdDMLa6EjslYIDRziyuhYzIWCM3c4kromIwFQjO3uBI6JmOB0MwtroSOyVggNHOLK6FjMhYIzdziSuiYjAVCM7e4EjomY4HQzC2uhI7JWCA0c4sroWMyFgjN3OJK6JiMBUIzt7gSOiZjgdDMLa6EjslYIDRziyuhYzIWCM3c4kromIwFQjO3uBI6JmOB0MwtroSOyVggNHOLK6FjMhYIzdziSuiYjAUIej6ff2GX624VQdfAo9HodrlcjrtLxmZ+3iargReLxXUBHpbx/e122yZzzAuBg9ACv5A68uVeaIGPVN2T/wEt8B6hf/TW73VYGuCyXsiwPH/7Lc9903Jcl4fVlt/qdViq8Xh8XQ6+B8BdhkNzr6HPy3a3Xq+fCnQN3vr/ca/X+4Gu2s3o8XkJp7LcUL+ADzebTSvwwWDw3HbTLpv1K6y24EIfCd3kb4EL3Ui127+6o3ezv4ELvSt1+PhN6CbfBRe6kXmn/Ww2u5hMJlfvdPpPe9pfaN6ipfVpjPMAAAAASUVORK5CYII=\"","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 SeriesModel = require(\"../../model/Series\");\n\nvar createGraphFromNodeEdge = require(\"../helper/createGraphFromNodeEdge\");\n\nvar _format = require(\"../../util/format\");\n\nvar encodeHTML = _format.encodeHTML;\n\nvar Model = require(\"../../model/Model\");\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar SankeySeries = SeriesModel.extend({\n type: 'series.sankey',\n layoutInfo: null,\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 } else {}\n }\n\n if (nodes && links) {\n var graph = createGraphFromNodeEdge(nodes, links, this, true, beforeLink);\n return graph.data;\n }\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 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 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\n if (params.value) {\n html += ' : ' + params.value;\n }\n\n return encodeHTML(html);\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\n if (value) {\n var html = name + ' : ' + value;\n }\n\n return encodeHTML(html);\n }\n\n return SankeySeries.superCall(this, 'formatTooltip', dataIndex, multipleSeries);\n },\n optionUpdated: function () {\n var option = this.option;\n\n if (option.focusNodeAdjacency === true) {\n option.focusNodeAdjacency = 'allEdges';\n }\n },\n // Override Series.getDataParams()\n getDataParams: function (dataIndex, dataType) {\n var params = SankeySeries.superCall(this, 'getDataParams', dataIndex, dataType);\n\n if (params.value == null && dataType === 'node') {\n var node = this.getGraph().getNodeByIndex(dataIndex);\n var nodeValue = node.getLayout().value;\n params.value = nodeValue;\n }\n\n return params;\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n coordinateSystem: 'view',\n layout: null,\n // The position of the whole view\n left: '5%',\n top: '5%',\n right: '20%',\n bottom: '5%',\n // Value can be 'vertical'\n orient: 'horizontal',\n // The dx of the node\n nodeWidth: 20,\n // The vertical distance between two nodes\n nodeGap: 8,\n // Control if the node can move or not\n draggable: true,\n // Value can be 'inEdges', 'outEdges', 'allEdges', true (the same as 'allEdges').\n focusNodeAdjacency: false,\n // The number of iterations to change the position of the node\n layoutIterations: 32,\n label: {\n show: true,\n position: 'right',\n color: '#000',\n fontSize: 12\n },\n levels: [],\n // Value can be 'left' or 'right'\n nodeAlign: 'justify',\n itemStyle: {\n borderWidth: 1,\n borderColor: '#333'\n },\n lineStyle: {\n color: '#314656',\n opacity: 0.2,\n curveness: 0.5\n },\n emphasis: {\n label: {\n show: true\n },\n lineStyle: {\n opacity: 0.5\n }\n },\n animationEasing: 'linear',\n animationDuration: 1000\n }\n});\nvar _default = SankeySeries;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"../coord/geo/GeoModel\");\n\nrequire(\"../coord/geo/geoCreator\");\n\nrequire(\"./geo/GeoView\");\n\nrequire(\"../action/geoRoam\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction makeAction(method, actionInfo) {\n actionInfo.update = 'updateView';\n echarts.registerAction(actionInfo, function (payload, ecModel) {\n var selected = {};\n ecModel.eachComponent({\n mainType: 'geo',\n 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 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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar layout = require(\"../../util/layout\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar CoordinateSystem = require(\"../../CoordinateSystem\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// (24*60*60*1000)\nvar PROXIMATE_ONE_DAY = 86400000;\n/**\n * Calendar\n *\n * @constructor\n *\n * @param {Object} calendarModel calendarModel\n * @param {Object} ecModel ecModel\n * @param {Object} api api\n */\n\nfunction Calendar(calendarModel, ecModel, api) {\n this._model = calendarModel;\n}\n\nCalendar.prototype = {\n constructor: Calendar,\n type: 'calendar',\n dimensions: ['time', 'value'],\n // Required in createListFromData\n getDimensionsInfo: function () {\n return [{\n name: 'time',\n type: 'time'\n }, 'value'];\n },\n getRangeInfo: function () {\n return this._rangeInfo;\n },\n getModel: function () {\n return this._model;\n },\n getRect: function () {\n return this._rect;\n },\n getCellWidth: function () {\n return this._sw;\n },\n getCellHeight: function () {\n return this._sh;\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 date = numberUtil.parseDate(date);\n var y = date.getFullYear();\n var m = date.getMonth() + 1;\n m = m < 10 ? '0' + m : m;\n var d = date.getDate();\n d = d < 10 ? '0' + d : d;\n var day = date.getDay();\n day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7);\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 getNextNDay: function (date, n) {\n n = n || 0;\n\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 return this.getDateInfo(date);\n },\n update: function (ecModel, api) {\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 this._rangeInfo = this._getRangeInfo(this._initRangeOption());\n var weeks = this._rangeInfo.weeks || 1;\n var whNames = ['width', 'height'];\n\n var cellSize = this._model.get('cellSize').slice();\n\n var layoutParams = this._model.getBoxLayoutParams();\n\n var cellNumbers = this._orient === 'horizontal' ? [weeks, 7] : [7, weeks];\n zrUtil.each([0, 1], function (idx) {\n if (cellSizeSpecified(cellSize, idx)) {\n layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx];\n }\n });\n var whGlobal = {\n width: api.getWidth(),\n height: api.getHeight()\n };\n var calendarRect = this._rect = layout.getLayoutRect(layoutParams, whGlobal);\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 * 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 var dayInfo = this.getDateInfo(data);\n var range = this._rangeInfo;\n var date = dayInfo.formatedDate; // if not in range return [NaN, NaN]\n\n if (clamp && !(dayInfo.time >= range.start.time && dayInfo.time < range.end.time + PROXIMATE_ONE_DAY)) {\n return [NaN, NaN];\n }\n\n var week = dayInfo.day;\n\n var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek;\n\n if (this._orient === 'vertical') {\n return [this._rect.x + week * this._sw + this._sw / 2, this._rect.y + nthWeek * this._sh + this._sh / 2];\n }\n\n return [this._rect.x + nthWeek * this._sw + this._sw / 2, this._rect.y + week * this._sh + this._sh / 2];\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 var date = this.pointToDate(point);\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 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 center: point,\n tl: [point[0] - this._sw / 2, point[1] - this._sh / 2],\n tr: [point[0] + this._sw / 2, point[1] - this._sh / 2],\n br: [point[0] + this._sw / 2, point[1] + this._sh / 2],\n bl: [point[0] - this._sw / 2, point[1] + this._sh / 2]\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 var start = this.getDateInfo(rg);\n var firstDay = start.date;\n firstDay.setMonth(firstDay.getMonth() + 1);\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 = [this.getDateInfo(range[0]), this.getDateInfo(range[1])];\n var reversed;\n\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) - Math.floor(range[0].time / PROXIMATE_ONE_DAY) + 1; // Consider case1 (#11677 #10430):\n // Set the system timezone as \"UK\", set the range to `['2016-07-01', '2016-12-31']`\n // Consider case2:\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\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); // The bias can not over a month, so just compare date.\n\n var dateNum = date.getDate();\n\n if (dateNum !== endDateNum) {\n var sign = date.getTime() - range[1].time > 0 ? 1 : -1;\n\n while ((dateNum = date.getDate()) !== endDateNum && (date.getTime() - range[1].time) * sign > 0) {\n allDay -= sign;\n date.setDate(dateNum - sign);\n }\n }\n\n var weeks = Math.floor((allDay + range[0].day + 6) / 7);\n var nthWeek = reversed ? -weeks + 1 : weeks - 1;\n reversed && range.reverse();\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 || nthWeek === 0 && day < rangeInfo.fweek || nthWeek === rangeInfo.weeks && day > rangeInfo.lweek) {\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 return this.getDateInfo(date);\n }\n};\nCalendar.dimensions = Calendar.prototype.dimensions;\nCalendar.getDimensionsInfo = Calendar.prototype.getDimensionsInfo;\n\nCalendar.create = function (ecModel, api) {\n var calendarList = [];\n ecModel.eachComponent('calendar', function (calendarModel) {\n var calendar = new Calendar(calendarModel, ecModel, api);\n calendarList.push(calendar);\n calendarModel.coordinateSystem = calendar;\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 var coordSys = calendarModel ? calendarModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem : null;\n return coordSys === this ? coordSys[methodName](value) : null;\n}\n\nCoordinateSystem.register('calendar', Calendar);\nvar _default = Calendar;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar createHashMap = _util.createHashMap;\nvar each = _util.each;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// (1) [Caution]: the logic is correct based on the premises:\n// data processing stage is blocked in stream.\n// See \n// (2) Only register once when import repeatly.\n// Should be executed after series filtered and before stack calculation.\nfunction _default(ecModel) {\n var stackInfoMap = createHashMap();\n ecModel.eachSeries(function (seriesModel) {\n var stack = seriesModel.get('stack'); // Compatibal: when `stack` is set as '', do not stack.\n\n if (stack) {\n var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []);\n var data = seriesModel.getData();\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 }; // If stacked on axis that do not support data stack.\n\n if (!stackInfo.stackedDimension || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension)) {\n return;\n }\n\n stackInfoList.length && data.setCalculationInfo('stackedOnSeries', stackInfoList[stackInfoList.length - 1].seriesModel);\n stackInfoList.push(stackInfo);\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; // Should not write on raw data, because stack series model list changes\n // depending on legend selection.\n\n var newData = targetData.map(dims, function (v0, v1, dataIndex) {\n var sum = targetData.get(targetStackInfo.stackedDimension, dataIndex); // Consider `connectNulls` of line area, if value is NaN, stackedOver\n // should also be NaN, to draw a appropriate belt area.\n\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 } else {\n byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex);\n } // If stackOver is NaN, chart view will render point on value start.\n\n\n var stackedOver = NaN;\n\n for (var j = idxInStack - 1; j >= 0; j--) {\n var stackInfo = stackInfoList[j]; // Has been optimized by inverted indices on `stackedByDimension`.\n\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); // Considering positive stack, negative stack and empty data\n\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 return resultVal;\n });\n targetData.hostModel.setData(newData); // Update for consequent calculation\n\n targetStackInfo.data = newData;\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./legend/LegendModel\");\n\nrequire(\"./legend/legendAction\");\n\nrequire(\"./legend/LegendView\");\n\nvar legendFilter = require(\"./legend/legendFilter\");\n\nvar Component = require(\"../model/Component\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Do not contain scrollable legend, for sake of file size.\n// Series Filter\necharts.registerProcessor(echarts.PRIORITY.PROCESSOR.SERIES_FILTER, legendFilter);\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\nvar echarts = require(\"../../echarts\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * @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 * @payload\n * @property {number} [seriesIndex]\n * @property {string} [seriesId]\n * @property {string} [seriesName]\n */\n\necharts.registerAction({\n type: 'unfocusNodeAdjacency',\n event: 'unfocusNodeAdjacency',\n update: 'series:unfocusNodeAdjacency'\n}, function () {});","var util = require(\"./core/util\");\n\nvar vec2 = require(\"./core/vector\");\n\nvar Draggable = require(\"./mixin/Draggable\");\n\nvar Eventful = require(\"./mixin/Eventful\");\n\nvar eventTool = require(\"./core/event\");\n\nvar GestureMgr = require(\"./core/GestureMgr\");\n\n/**\n * [The interface between `Handler` and `HandlerProxy`]:\n *\n * The default `HandlerProxy` only support the common standard web environment\n * (e.g., standalone browser, headless browser, embed browser in mobild APP, ...).\n * But `HandlerProxy` can be replaced to support more non-standard environment\n * (e.g., mini app), or to support more feature that the default `HandlerProxy`\n * not provided (like echarts-gl did).\n * So the interface between `Handler` and `HandlerProxy` should be stable. Do not\n * make break changes util inevitable. The interface include the public methods\n * of `Handler` and the events listed in `handlerNames` below, by which `HandlerProxy`\n * drives `Handler`.\n */\n\n/**\n * [Drag outside]:\n *\n * That is, triggering `mousemove` and `mouseup` event when the pointer is out of the\n * zrender area when dragging. That is important for the improvement of the user experience\n * when dragging something near the boundary without being terminated unexpectedly.\n *\n * We originally consider to introduce new events like `pagemovemove` and `pagemouseup`\n * to resolve this issue. But some drawbacks of it is described in\n * https://github.com/ecomfe/zrender/pull/536#issuecomment-560286899\n *\n * Instead, we referenced the specifications:\n * https://www.w3.org/TR/touch-events/#the-touchmove-event\n * https://www.w3.org/TR/2014/WD-DOM-Level-3-Events-20140925/#event-type-mousemove\n * where the the mousemove/touchmove can be continue to fire if the user began a drag\n * operation and the pointer has left the boundary. (for the mouse event, browsers\n * only do it on `document` and when the pointer has left the boundary of the browser.)\n *\n * So the default `HandlerProxy` supports this feature similarly: if it is in the dragging\n * state (see `pointerCapture` in `HandlerProxy`), the `mousemove` and `mouseup` continue\n * to fire until release the pointer. That is implemented by listen to those event on\n * `document`.\n * If we implement some other `HandlerProxy` only for touch device, that would be easier.\n * The touch event support this feature by default.\n *\n * Note:\n * There might be some cases that the mouse event can not be\n * received on `document`. For example,\n * (A) `useCapture` is not supported and some user defined event listeners on the ancestor\n * of zr dom throw Error .\n * (B) `useCapture` is not supported Some user defined event listeners on the ancestor of\n * zr dom call `stopPropagation`.\n * In these cases, the `mousemove` event might be keep triggered event\n * if the mouse is released. We try to reduce the side-effect in those cases.\n * That is, do nothing (especially, `findHover`) in those cases. See `isOutsideBoundary`.\n *\n * Note:\n * If `HandlerProxy` listens to `document` with `useCapture`, `HandlerProxy` needs to\n * make sure `stopPropagation` and `preventDefault` doing nothing if and only if the event\n * target is not zrender dom. Becuase it is dangerous to enable users to call them in\n * `document` capture phase to prevent the propagation to any listener of the webpage.\n * But they are needed to work when the pointer inside the zrender dom.\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() {\n eventTool.stop(this.event);\n}\n\nfunction EmptyProxy() {}\n\nEmptyProxy.prototype.dispose = function () {};\n\nvar handlerNames = ['click', 'dblclick', 'mousewheel', 'mouseout', 'mouseup', 'mousedown', 'mousemove', 'contextmenu'];\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 */\n\nvar Handler = function (storage, painter, proxy, painterRoot) {\n Eventful.call(this);\n this.storage = storage;\n this.painter = painter;\n this.painterRoot = painterRoot;\n proxy = proxy || new EmptyProxy();\n /**\n * Proxy of event. can be Dom, WebGLSurface, etc.\n */\n\n this.proxy = null;\n /**\n * {target, topTarget, x, y}\n * @private\n * @type {Object}\n */\n\n this._hovered = {};\n /**\n * @private\n * @type {Date}\n */\n\n this._lastTouchMoment;\n /**\n * @private\n * @type {number}\n */\n\n this._lastX;\n /**\n * @private\n * @type {number}\n */\n\n this._lastY;\n /**\n * @private\n * @type {module:zrender/core/GestureMgr}\n */\n\n this._gestureMgr;\n Draggable.call(this);\n this.setHandlerProxy(proxy);\n};\n\nHandler.prototype = {\n constructor: Handler,\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); // Attach handler\n\n proxy.handler = this;\n }\n\n this.proxy = proxy;\n },\n mousemove: function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var isOutside = isOutsideBoundary(this, x, y);\n var lastHovered = this._hovered;\n var lastHoveredTarget = lastHovered.target; // 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\n if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n lastHoveredTarget = lastHovered.target;\n }\n\n var hovered = this._hovered = isOutside ? {\n x: x,\n y: y\n } : this.findHover(x, y);\n var hoveredTarget = hovered.target;\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default'); // Mouse out on previous hovered element\n\n if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(lastHovered, 'mouseout', event);\n } // Mouse moving on one element\n\n\n this.dispatchToElement(hovered, 'mousemove', event); // Mouse over on a new element\n\n if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(hovered, 'mouseover', event);\n }\n },\n mouseout: function (event) {\n var eventControl = event.zrEventControl;\n var zrIsToLocalDOM = event.zrIsToLocalDOM;\n\n if (eventControl !== 'only_globalout') {\n this.dispatchToElement(this._hovered, 'mouseout', event);\n }\n\n if (eventControl !== 'no_globalout') {\n // FIXME: if the pointer moving from the extra doms to realy \"outside\",\n // the `globalout` should have been triggered. But currently not.\n !zrIsToLocalDOM && this.trigger('globalout', {\n type: 'globalout',\n event: event\n });\n }\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 this.proxy.dispose();\n this.storage = this.proxy = 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\n if (el && el.silent) {\n return;\n }\n\n var eventHandler = 'on' + eventName;\n var eventPacket = makeEventPacket(eventName, targetInfo, event);\n\n while (el) {\n el[eventHandler] && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket));\n el.trigger(eventName, eventPacket);\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 // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在\n\n this.painter && this.painter.eachOtherLayer(function (layer) {\n if (typeof layer[eventHandler] === 'function') {\n layer[eventHandler].call(layer, eventPacket);\n }\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 = {\n x: x,\n y: y\n };\n\n for (var i = list.length - 1; i >= 0; i--) {\n var hoverCheckResult;\n\n if (list[i] !== exclude // getDisplayList may include ignored item in VML mode\n && !list[i].ignore && (hoverCheckResult = isHover(list[i], x, y))) {\n !out.topTarget && (out.topTarget = list[i]);\n\n if (hoverCheckResult !== SILENT) {\n out.target = list[i];\n break;\n }\n }\n }\n\n return out;\n },\n processGesture: function (event, stage) {\n if (!this._gestureMgr) {\n this._gestureMgr = new GestureMgr();\n }\n\n var gestureMgr = this._gestureMgr;\n stage === 'start' && gestureMgr.clear();\n var gestureInfo = gestureMgr.recognize(event, this.findHover(event.zrX, event.zrY, null).target, this.proxy.dom);\n stage === 'end' && gestureMgr.clear(); // Do not do any preventDefault here. Upper application do that if necessary.\n\n if (gestureInfo) {\n var type = gestureInfo.type;\n event.gestureEvent = type;\n this.dispatchToElement({\n target: gestureInfo.target\n }, type, gestureInfo.event);\n }\n }\n}; // Common handlers\n\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n Handler.prototype[name] = function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var isOutside = isOutsideBoundary(this, x, y);\n var hovered;\n var hoveredTarget;\n\n if (name !== 'mouseup' || !isOutside) {\n // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover\n hovered = this.findHover(x, y);\n hoveredTarget = hovered.target;\n }\n\n if (name === 'mousedown') {\n this._downEl = hoveredTarget;\n this._downPoint = [event.zrX, event.zrY]; // In case click triggered before mouseup\n\n this._upEl = hoveredTarget;\n } else if (name === 'mouseup') {\n this._upEl = hoveredTarget;\n } else if (name === 'click') {\n if (this._downEl !== this._upEl // 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 // Arbitrary value\n || vec2.dist(this._downPoint, [event.zrX, event.zrY]) > 4) {\n return;\n }\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\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\n if (el.silent) {\n isSilent = true;\n }\n\n el = el.parent;\n }\n\n return isSilent ? SILENT : true;\n }\n\n return false;\n}\n/**\n * See [Drag outside].\n */\n\n\nfunction isOutsideBoundary(handlerInstance, x, y) {\n var painter = handlerInstance.painter;\n return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight();\n}\n\nutil.mixin(Handler, Eventful);\nutil.mixin(Handler, Draggable);\nvar _default = Handler;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar each = _util.each;\n\nvar _simpleLayoutHelper = require(\"./simpleLayoutHelper\");\n\nvar simpleLayout = _simpleLayoutHelper.simpleLayout;\nvar simpleLayoutEdge = _simpleLayoutHelper.simpleLayoutEdge;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(ecModel, api) {\n ecModel.eachSeriesByType('graph', function (seriesModel) {\n var layout = seriesModel.get('layout');\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.type !== 'view') {\n var data = seriesModel.getData();\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\n for (var i = 0; i < dimensions.length; i++) {\n var val = data.get(dimensions[i], dataIndex);\n\n if (!isNaN(val)) {\n hasValue = true;\n }\n\n value.push(val);\n }\n\n if (hasValue) {\n data.setItemLayout(dataIndex, coordSys.dataToPoint(value));\n } else {\n // Also {Array.}, not undefined to avoid if...else... statement\n data.setItemLayout(dataIndex, [NaN, NaN]);\n }\n }\n\n simpleLayoutEdge(data.graph);\n } else if (!layout || layout === 'none') {\n simpleLayout(seriesModel);\n }\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar lang = require(\"../../../lang\");\n\nvar featureManager = require(\"../featureManager\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar magicTypeLang = lang.toolbox.magicType;\nvar INNER_STACK_KEYWORD = '__ec_magicType_stack__';\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\n /* eslint-enable */\n\n },\n // `line`, `bar`, `stack`, `tiled`\n title: zrUtil.clone(magicTypeLang.title),\n option: {},\n seriesIndex: {}\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 var isStack = seriesModel.get('stack') === INNER_STACK_KEYWORD;\n\n if (seriesType === 'line' || seriesType === 'bar') {\n model.setIconStatus('stack', isStack ? 'normal' : 'emphasis');\n return zrUtil.merge({\n id: seriesId,\n stack: isStack ? '' : INNER_STACK_KEYWORD\n }, model.get('option.stack') || {}, true);\n }\n }\n};\nvar radioTypes = [['line', 'bar'], ['stack']];\n\nproto.onclick = function (ecModel, api, type) {\n var model = this.model;\n var seriesIndex = model.get('seriesIndex.' + type); // Not supported magicType\n\n if (!seriesOptGenreator[type]) {\n return;\n }\n\n var newOption = {\n series: []\n };\n\n var generateNewSeriesTypes = function (seriesModel) {\n var seriesType = seriesModel.subType;\n var seriesId = seriesModel.id;\n var newSeriesOpt = seriesOptGenreator[type](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 } // Modify boundaryGap\n\n\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) {\n var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n\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 newOption[axisType] = newOption[axisType] || [];\n\n for (var i = 0; i <= axisIndex; i++) {\n newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {};\n }\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 model.setIconStatus(type, 'emphasis');\n ecModel.eachComponent({\n mainType: 'series',\n query: seriesIndex == null ? null : {\n seriesIndex: seriesIndex\n }\n }, generateNewSeriesTypes);\n var newTitle; // Change title of stack\n\n if (type === 'stack') {\n var isStack = newOption.series && newOption.series[0] && newOption.series[0].stack === INNER_STACK_KEYWORD;\n newTitle = isStack ? zrUtil.merge({\n stack: magicTypeLang.title.tiled\n }, magicTypeLang.title) : zrUtil.clone(magicTypeLang.title);\n }\n\n api.dispatchAction({\n type: 'changeMagicType',\n currentType: type,\n newOption: newOption,\n newTitle: newTitle,\n featureName: 'magicType'\n });\n};\n\necharts.registerAction({\n type: 'changeMagicType',\n event: 'magicTypeChanged',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n ecModel.mergeOption(payload.newOption);\n});\nfeatureManager.register('magicType', MagicType);\nvar _default = MagicType;\nmodule.exports = _default;","var env = require(\"../core/env\");\n\nvar urn = 'urn:schemas-microsoft-com:vml';\nvar win = typeof window === 'undefined' ? null : window;\nvar vmlInited = false;\nvar doc = win && win.document;\n\nfunction createNode(tagName) {\n return doCreateNode(tagName);\n} // Avoid assign to an exported variable, for transforming to cjs.\n\n\nvar doCreateNode;\n\nif (doc && !env.canvasSupported) {\n try {\n !doc.namespaces.zrvml && doc.namespaces.add('zrvml', urn);\n\n doCreateNode = function (tagName) {\n return doc.createElement('');\n };\n } catch (e) {\n doCreateNode = function (tagName) {\n return doc.createElement('<' + tagName + ' xmlns=\"' + urn + '\" class=\"zrvml\">');\n };\n }\n} // From raphael\n\n\nfunction initVML() {\n if (vmlInited || !doc) {\n return;\n }\n\n vmlInited = true;\n var styleSheets = doc.styleSheets;\n\n if (styleSheets.length < 31) {\n doc.createStyleSheet().addRule('.zrvml', 'behavior:url(#default#VML)');\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\nexports.doc = doc;\nexports.createNode = createNode;\nexports.initVML = initVML;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(seriesType) {\n return {\n seriesType: seriesType,\n reset: function (seriesModel, ecModel) {\n var legendModels = ecModel.findComponents({\n mainType: 'legend'\n });\n\n if (!legendModels || !legendModels.length) {\n return;\n }\n\n var data = seriesModel.getData();\n data.filterSelf(function (idx) {\n var name = data.getName(idx); // If in any legend component the status is not selected.\n\n for (var i = 0; i < legendModels.length; i++) {\n if (!legendModels[i].isSelected(name)) {\n return false;\n }\n }\n\n return true;\n });\n }\n };\n}\n\nmodule.exports = _default;","var Path = require(\"../Path\");\n\nvar polyHelper = require(\"../helper/poly\");\n\n/**\n * @module zrender/graphic/shape/Polyline\n */\nvar _default = Path.extend({\n type: 'polyline',\n shape: {\n points: null,\n smooth: false,\n smoothConstraint: null\n },\n style: {\n stroke: '#000',\n fill: null\n },\n buildPath: function (ctx, shape) {\n polyHelper.buildPath(ctx, shape, false);\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar globalListener = require(\"./globalListener\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar AxisPointerView = echarts.extendComponentView({\n type: 'axisPointer',\n render: function (globalAxisPointerModel, ecModel, api) {\n var globalTooltipModel = ecModel.getComponent('tooltip');\n var triggerOn = globalAxisPointerModel.get('triggerOn') || globalTooltipModel && globalTooltipModel.get('triggerOn') || 'mousemove|click'; // Register global listener in AxisPointerView to enable\n // AxisPointerView to be independent to Tooltip.\n\n globalListener.register('axisPointer', api, function (currTrigger, e, dispatchAction) {\n // If 'none', it is not controlled by mouse totally.\n if (triggerOn !== 'none' && (currTrigger === 'leave' || triggerOn.indexOf(currTrigger) >= 0)) {\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 * @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});\nvar _default = AxisPointerView;\nmodule.exports = _default;","var Path = require(\"./Path\");\n\n// CompoundPath to improve performance\nvar _default = Path.extend({\n type: 'compound',\n shape: {\n paths: null\n },\n _updatePathDirty: function () {\n var dirtyPath = this.__dirtyPath;\n var paths = this.shape.paths;\n\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\n this.__dirtyPath = dirtyPath;\n this.__dirty = this.__dirty || dirtyPath;\n },\n beforeBrush: function () {\n this._updatePathDirty();\n\n var paths = this.shape.paths || [];\n var scale = this.getGlobalScale(); // Update path scale\n\n for (var i = 0; i < paths.length; i++) {\n if (!paths[i].path) {\n paths[i].createPathProxy();\n }\n\n paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);\n }\n },\n buildPath: function (ctx, shape) {\n var paths = shape.paths || [];\n\n for (var i = 0; i < paths.length; i++) {\n paths[i].buildPath(ctx, paths[i].shape, true);\n }\n },\n afterBrush: function () {\n var paths = this.shape.paths || [];\n\n for (var i = 0; i < paths.length; i++) {\n paths[i].__dirtyPath = false;\n }\n },\n getBoundingRect: function () {\n this._updatePathDirty();\n\n return Path.prototype.getBoundingRect.call(this);\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar Path = require(\"zrender/lib/graphic/Path\");\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\nvar fixClipWithShadow = require(\"zrender/lib/graphic/helper/fixClipWithShadow\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Poly path support NaN point\nvar vec2Min = vec2.min;\nvar vec2Max = vec2.max;\nvar scaleAndAdd = vec2.scaleAndAdd;\nvar v2Copy = vec2.copy; // Temporary variable\n\nvar v = [];\nvar cp0 = [];\nvar cp1 = [];\n\nfunction isPointNull(p) {\n return isNaN(p[0]) || isNaN(p[1]);\n}\n\nfunction drawSegment(ctx, points, start, segLen, allLen, dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls) {\n // if (smoothMonotone == null) {\n // if (isMono(points, 'x')) {\n // return drawMono(ctx, points, start, segLen, allLen,\n // dir, smoothMin, smoothMax, smooth, 'x', connectNulls);\n // }\n // else if (isMono(points, 'y')) {\n // return drawMono(ctx, points, start, segLen, allLen,\n // dir, smoothMin, smoothMax, smooth, 'y', connectNulls);\n // }\n // else {\n // return drawNonMono.apply(this, arguments);\n // }\n // }\n // else if (smoothMonotone !== 'none' && isMono(points, smoothMonotone)) {\n // return drawMono.apply(this, arguments);\n // }\n // else {\n // return drawNonMono.apply(this, arguments);\n // }\n if (smoothMonotone === 'none' || !smoothMonotone) {\n return drawNonMono.apply(this, arguments);\n } else {\n return drawMono.apply(this, arguments);\n }\n}\n/**\n * Check if points is in monotone.\n *\n * @param {number[][]} points Array of points which is in [x, y] form\n * @param {string} smoothMonotone 'x', 'y', or 'none', stating for which\n * dimension that is checking.\n * If is 'none', `drawNonMono` should be\n * called.\n * If is undefined, either being monotone\n * in 'x' or 'y' will call `drawMono`.\n */\n// function isMono(points, smoothMonotone) {\n// if (points.length <= 1) {\n// return true;\n// }\n// var dim = smoothMonotone === 'x' ? 0 : 1;\n// var last = points[0][dim];\n// var lastDiff = 0;\n// for (var i = 1; i < points.length; ++i) {\n// var diff = points[i][dim] - last;\n// if (!isNaN(diff) && !isNaN(lastDiff)\n// && diff !== 0 && lastDiff !== 0\n// && ((diff >= 0) !== (lastDiff >= 0))\n// ) {\n// return false;\n// }\n// if (!isNaN(diff) && diff !== 0) {\n// lastDiff = diff;\n// last = points[i][dim];\n// }\n// }\n// return true;\n// }\n\n/**\n * Draw smoothed line in monotone, in which only vertical or horizontal bezier\n * control points will be used. This should be used when points are monotone\n * either in x or y dimension.\n */\n\n\nfunction drawMono(ctx, points, start, segLen, allLen, dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls) {\n var prevIdx = 0;\n var idx = start;\n\n for (var k = 0; k < segLen; k++) {\n var p = points[idx];\n\n if (idx >= allLen || idx < 0) {\n break;\n }\n\n if (isPointNull(p)) {\n if (connectNulls) {\n idx += dir;\n continue;\n }\n\n break;\n }\n\n if (idx === start) {\n ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);\n } else {\n if (smooth > 0) {\n var prevP = points[prevIdx];\n var dim = smoothMonotone === 'y' ? 1 : 0; // Length of control point to p, either in x or y, but not both\n\n var ctrlLen = (p[dim] - prevP[dim]) * smooth;\n v2Copy(cp0, prevP);\n cp0[dim] = prevP[dim] + ctrlLen;\n v2Copy(cp1, p);\n cp1[dim] = p[dim] - ctrlLen;\n ctx.bezierCurveTo(cp0[0], cp0[1], cp1[0], cp1[1], p[0], p[1]);\n } else {\n ctx.lineTo(p[0], p[1]);\n }\n }\n\n prevIdx = idx;\n idx += dir;\n }\n\n return k;\n}\n/**\n * Draw smoothed line in non-monotone, in may cause undesired curve in extreme\n * situations. This should be used when points are non-monotone neither in x or\n * y dimension.\n */\n\n\nfunction drawNonMono(ctx, points, start, segLen, allLen, dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls) {\n var prevIdx = 0;\n var idx = start;\n\n for (var k = 0; k < segLen; k++) {\n var p = points[idx];\n\n if (idx >= allLen || idx < 0) {\n break;\n }\n\n if (isPointNull(p)) {\n if (connectNulls) {\n idx += dir;\n continue;\n }\n\n break;\n }\n\n if (idx === start) {\n ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);\n v2Copy(cp0, p);\n } else {\n if (smooth > 0) {\n var nextIdx = idx + dir;\n var nextP = points[nextIdx];\n\n if (connectNulls) {\n // Find next point not null\n while (nextP && isPointNull(points[nextIdx])) {\n nextIdx += dir;\n nextP = points[nextIdx];\n }\n }\n\n var ratioNextSeg = 0.5;\n var prevP = points[prevIdx];\n var nextP = points[nextIdx]; // Last point\n\n if (!nextP || isPointNull(nextP)) {\n v2Copy(cp1, p);\n } else {\n // If next data is null in not connect case\n if (isPointNull(nextP) && !connectNulls) {\n nextP = p;\n }\n\n vec2.sub(v, nextP, prevP);\n var lenPrevSeg;\n var lenNextSeg;\n\n if (smoothMonotone === 'x' || smoothMonotone === 'y') {\n var dim = smoothMonotone === 'x' ? 0 : 1;\n lenPrevSeg = Math.abs(p[dim] - prevP[dim]);\n lenNextSeg = Math.abs(p[dim] - nextP[dim]);\n } else {\n lenPrevSeg = vec2.dist(p, prevP);\n lenNextSeg = vec2.dist(p, nextP);\n } // Use ratio of seg length\n\n\n ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg);\n scaleAndAdd(cp1, p, v, -smooth * (1 - ratioNextSeg));\n } // Smooth constraint\n\n\n vec2Min(cp0, cp0, smoothMax);\n vec2Max(cp0, cp0, smoothMin);\n vec2Min(cp1, cp1, smoothMax);\n vec2Max(cp1, cp1, smoothMin);\n ctx.bezierCurveTo(cp0[0], cp0[1], cp1[0], cp1[1], p[0], p[1]); // cp0 of next segment\n\n scaleAndAdd(cp0, p, v, smooth * ratioNextSeg);\n } else {\n ctx.lineTo(p[0], p[1]);\n }\n }\n\n prevIdx = idx;\n idx += dir;\n }\n\n return k;\n}\n\nfunction getBoundingBox(points, smoothConstraint) {\n var ptMin = [Infinity, Infinity];\n var ptMax = [-Infinity, -Infinity];\n\n if (smoothConstraint) {\n for (var i = 0; i < points.length; i++) {\n var pt = points[i];\n\n if (pt[0] < ptMin[0]) {\n ptMin[0] = pt[0];\n }\n\n if (pt[1] < ptMin[1]) {\n ptMin[1] = pt[1];\n }\n\n if (pt[0] > ptMax[0]) {\n ptMax[0] = pt[0];\n }\n\n if (pt[1] > ptMax[1]) {\n ptMax[1] = pt[1];\n }\n }\n }\n\n return {\n min: smoothConstraint ? ptMin : ptMax,\n max: smoothConstraint ? ptMax : ptMin\n };\n}\n\nvar Polyline = Path.extend({\n type: 'ec-polyline',\n shape: {\n points: [],\n smooth: 0,\n smoothConstraint: true,\n smoothMonotone: null,\n connectNulls: false\n },\n style: {\n fill: null,\n stroke: '#000'\n },\n brush: fixClipWithShadow(Path.prototype.brush),\n buildPath: function (ctx, shape) {\n var points = shape.points;\n var i = 0;\n var len = points.length;\n var result = getBoundingBox(points, shape.smoothConstraint);\n\n if (shape.connectNulls) {\n // Must remove first and last null values avoid draw error in polygon\n for (; len > 0; len--) {\n if (!isPointNull(points[len - 1])) {\n break;\n }\n }\n\n for (; i < len; i++) {\n if (!isPointNull(points[i])) {\n break;\n }\n }\n }\n\n while (i < len) {\n i += drawSegment(ctx, points, i, len, len, 1, result.min, result.max, shape.smooth, shape.smoothMonotone, shape.connectNulls) + 1;\n }\n }\n});\nvar Polygon = Path.extend({\n type: 'ec-polygon',\n shape: {\n points: [],\n // Offset between stacked base points and points\n stackedOnPoints: [],\n smooth: 0,\n stackedOnSmooth: 0,\n smoothConstraint: true,\n smoothMonotone: null,\n connectNulls: false\n },\n brush: fixClipWithShadow(Path.prototype.brush),\n buildPath: function (ctx, shape) {\n var points = shape.points;\n var stackedOnPoints = shape.stackedOnPoints;\n var i = 0;\n var len = points.length;\n var smoothMonotone = shape.smoothMonotone;\n var bbox = getBoundingBox(points, shape.smoothConstraint);\n var stackedOnBBox = getBoundingBox(stackedOnPoints, shape.smoothConstraint);\n\n if (shape.connectNulls) {\n // Must remove first and last null values avoid draw error in polygon\n for (; len > 0; len--) {\n if (!isPointNull(points[len - 1])) {\n break;\n }\n }\n\n for (; i < len; i++) {\n if (!isPointNull(points[i])) {\n break;\n }\n }\n }\n\n while (i < len) {\n var k = drawSegment(ctx, points, i, len, len, 1, bbox.min, bbox.max, shape.smooth, smoothMonotone, shape.connectNulls);\n drawSegment(ctx, stackedOnPoints, i + k - 1, k, len, -1, stackedOnBBox.min, stackedOnBBox.max, shape.stackedOnSmooth, smoothMonotone, shape.connectNulls);\n i += k + 1;\n ctx.closePath();\n }\n }\n});\nexports.Polyline = Polyline;\nexports.Polygon = Polygon;","// 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 * @type {module:zrender/core/LRU~Entry}\n */\n this.head = null;\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n\n this.tail = null;\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 */\n\nlinkedListProto.insert = function (val) {\n var entry = new Entry(val);\n this.insertEntry(entry);\n return entry;\n};\n/**\n * Insert an entry at the tail\n * @param {module:zrender/core/LRU~Entry} entry\n */\n\n\nlinkedListProto.insertEntry = function (entry) {\n if (!this.head) {\n this.head = this.tail = entry;\n } else {\n this.tail.next = entry;\n entry.prev = this.tail;\n entry.next = null;\n this.tail = entry;\n }\n\n this._len++;\n};\n/**\n * Remove entry.\n * @param {module:zrender/core/LRU~Entry} entry\n */\n\n\nlinkedListProto.remove = function (entry) {\n var prev = entry.prev;\n var next = entry.next;\n\n if (prev) {\n prev.next = next;\n } else {\n // Is head\n this.head = next;\n }\n\n if (next) {\n next.prev = prev;\n } else {\n // Is tail\n this.tail = prev;\n }\n\n entry.next = entry.prev = null;\n this._len--;\n};\n/**\n * @return {number}\n */\n\n\nlinkedListProto.len = function () {\n return this._len;\n};\n/**\n * Clear list\n */\n\n\nlinkedListProto.clear = function () {\n this.head = this.tail = null;\n this._len = 0;\n};\n/**\n * @constructor\n * @param {} val\n */\n\n\nvar Entry = function (val) {\n /**\n * @type {}\n */\n this.value = val;\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n\n this.next;\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n\n this.prev;\n};\n/**\n * LRU Cache\n * @constructor\n * @alias module:zrender/core/LRU\n */\n\n\nvar LRU = function (maxSize) {\n this._list = new LinkedList();\n this._map = {};\n this._maxSize = maxSize || 10;\n this._lastRemovedEntry = null;\n};\n\nvar LRUProto = LRU.prototype;\n/**\n * @param {string} key\n * @param {} value\n * @return {} Removed value\n */\n\nLRUProto.put = function (key, value) {\n var list = this._list;\n var map = this._map;\n var removed = null;\n\n if (map[key] == null) {\n var len = list.len(); // Reuse last removed entry\n\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 removed = leastUsedEntry.value;\n this._lastRemovedEntry = leastUsedEntry;\n }\n\n if (entry) {\n entry.value = value;\n } else {\n entry = new Entry(value);\n }\n\n entry.key = key;\n list.insertEntry(entry);\n map[key] = entry;\n }\n\n return removed;\n};\n/**\n * @param {string} key\n * @return {}\n */\n\n\nLRUProto.get = function (key) {\n var entry = this._map[key];\n var list = this._list;\n\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 * Clear the cache\n */\n\n\nLRUProto.clear = function () {\n this._list.clear();\n\n this._map = {};\n};\n\nvar _default = LRU;\nmodule.exports = _default;","var guid = require(\"./core/guid\");\n\nvar Eventful = require(\"./mixin/Eventful\");\n\nvar Transformable = require(\"./mixin/Transformable\");\n\nvar Animatable = require(\"./mixin/Animatable\");\n\nvar zrUtil = require(\"./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) {\n // jshint ignore:line\n Transformable.call(this, opts);\n Eventful.call(this, opts);\n Animatable.call(this, opts);\n /**\n * 画布元素ID\n * @type {string}\n */\n\n this.id = opts.id || guid();\n};\n\nElement.prototype = {\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\n case 'vertical':\n dx = 0;\n break;\n }\n\n var m = this.transform;\n\n if (!m) {\n m = this.transform = [1, 0, 0, 1, 0, 0];\n }\n\n m[4] += dx;\n m[5] += dy;\n this.decomposeTransform();\n this.dirty(false);\n },\n\n /**\n * Hook before update\n */\n beforeUpdate: function () {},\n\n /**\n * Hook after update\n */\n afterUpdate: function () {},\n\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\n if (!target) {\n target = this[key] = [];\n }\n\n target[0] = value[0];\n target[1] = value[1];\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 } 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 return this;\n },\n\n /**\n * @param {module:zrender/graphic/Path} clipPath\n */\n setClipPath: function (clipPath) {\n var zr = this.__zr;\n\n if (zr) {\n clipPath.addSelfToZr(zr);\n } // Remove previous clip path\n\n\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 this.dirty(false);\n },\n\n /**\n */\n removeClipPath: function () {\n var clipPath = this.clipPath;\n\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 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\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\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};\nzrUtil.mixin(Element, Animatable);\nzrUtil.mixin(Element, Transformable);\nzrUtil.mixin(Element, Eventful);\nvar _default = Element;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar BaseBarSeries = require(\"./BaseBarSeries\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar PictorialBarSeries = BaseBarSeries.extend({\n type: 'series.pictorialBar',\n dependencies: ['grid'],\n defaultOption: {\n symbol: 'circle',\n // Customized bar shape\n symbolSize: null,\n // Can be ['100%', '100%'], null means auto.\n symbolRotate: null,\n symbolPosition: null,\n // 'start' or 'end' or 'center', null means auto.\n symbolOffset: null,\n symbolMargin: null,\n // start margin and end margin. Can be a number or a percent string.\n // Auto margin by defualt.\n symbolRepeat: false,\n // 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',\n // 'end' means from 'start' to 'end'.\n symbolClip: false,\n symbolBoundingData: null,\n // Can be 60 or -40 or [-40, 60]\n symbolPatternSize: 400,\n // 400 * 400 px\n barGap: '-100%',\n // In most case, overlap is needed.\n // z can be set in data item, which is z2 actually.\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});\nvar _default = PictorialBarSeries;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar actionInfo = {\n type: 'selectDataRange',\n event: 'dataRangeSelected',\n // FIXME use updateView appears wrong\n update: 'update'\n};\necharts.registerAction(actionInfo, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'visualMap',\n query: payload\n }, function (model) {\n model.setSelected(payload.selected);\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 echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nrequire(\"./sunburst/SunburstSeries\");\n\nrequire(\"./sunburst/SunburstView\");\n\nrequire(\"./sunburst/sunburstAction\");\n\nvar dataColor = require(\"../visual/dataColor\");\n\nvar sunburstLayout = require(\"./sunburst/sunburstLayout\");\n\nvar dataFilter = require(\"../processor/dataFilter\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerVisual(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\nvar echarts = require(\"../../echarts\");\n\nvar _roamHelper = require(\"../../action/roamHelper\");\n\nvar updateCenterAndZoom = _roamHelper.updateCenterAndZoom;\n\nrequire(\"../helper/focusNodeAdjacencyAction\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar actionInfo = {\n type: 'graphRoam',\n event: 'graphRoam',\n update: 'none'\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 */\n\necharts.registerAction(actionInfo, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'series',\n query: payload\n }, function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n var res = updateCenterAndZoom(coordSys, payload);\n seriesModel.setCenter && seriesModel.setCenter(res.center);\n seriesModel.setZoom && seriesModel.setZoom(res.zoom);\n });\n});","import mod from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RepurchaseAnalysis.vue?vue&type=style&index=0&id=0b587850&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--10-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--10-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--10-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--10-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RepurchaseAnalysis.vue?vue&type=style&index=0&id=0b587850&lang=less&scoped=true&\"","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {module:echarts/coord/View} view\n * @param {Object} payload\n * @param {Object} [zoomLimit]\n */\nfunction updateCenterAndZoom(view, payload, zoomLimit) {\n var previousZoom = view.getZoom();\n var center = view.getCenter();\n var zoom = payload.zoom;\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 var center = view.pointToData(point);\n view.setCenter(center);\n }\n\n if (zoom != null) {\n if (zoomLimit) {\n var zoomMin = zoomLimit.min || 0;\n var zoomMax = zoomLimit.max || Infinity;\n zoom = Math.max(Math.min(previousZoom * zoom, zoomMax), zoomMin) / previousZoom;\n } // Zoom on given point(originX, originY)\n\n\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 position[0] -= fixX;\n position[1] -= fixY;\n view.updateTransform(); // Get the new center\n\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\nexports.updateCenterAndZoom = updateCenterAndZoom;","var PathProxy = require(\"../core/PathProxy\");\n\nvar line = require(\"./line\");\n\nvar cubic = require(\"./cubic\");\n\nvar quadratic = require(\"./quadratic\");\n\nvar arc = require(\"./arc\");\n\nvar _util = require(\"./util\");\n\nvar normalizeRadian = _util.normalizeRadian;\n\nvar curve = require(\"../core/curve\");\n\nvar windingLine = require(\"./windingLine\");\n\nvar CMD = PathProxy.CMD;\nvar PI2 = Math.PI * 2;\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 (y > y0 && y > y1 && y > y2 && y > y3 || y < y0 && y < y1 && y < y2 && y < y3) {\n return 0;\n }\n\n var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\n\n if (nRoots === 0) {\n return 0;\n } else {\n var w = 0;\n var nExtrema = -1;\n var y0_;\n var y1_;\n\n for (var i = 0; i < nRoots; i++) {\n var t = roots[i]; // Avoid winding error when intersection point is the connect point of two line of polygon\n\n var unit = t === 0 || t === 1 ? 0.5 : 1;\n var x_ = curve.cubicAt(x0, x1, x2, x3, t);\n\n if (x_ < x) {\n // Quick reject\n continue;\n }\n\n if (nExtrema < 0) {\n nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);\n\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n\n y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);\n\n if (nExtrema > 1) {\n y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n\n if (nExtrema === 2) {\n // 分成三段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n } else {\n w += y3 < y1_ ? unit : -unit;\n }\n } else {\n // 分成两段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n\n return w;\n }\n}\n\nfunction windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {\n // Quick reject\n if (y > y0 && y > y1 && y > y2 || y < y0 && y < y1 && y < y2) {\n return 0;\n }\n\n var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\n\n if (nRoots === 0) {\n return 0;\n } else {\n var t = curve.quadraticExtremum(y0, y1, y2);\n\n if (t >= 0 && t <= 1) {\n var w = 0;\n var y_ = curve.quadraticAt(y0, y1, y2, t);\n\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 var x_ = curve.quadraticAt(x0, x1, x2, roots[i]);\n\n if (x_ < x) {\n // Quick reject\n continue;\n }\n\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n } else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n\n return w;\n } else {\n // Remove one endpoint.\n var unit = roots[0] === 0 || roots[0] === 1 ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[0]);\n\n if (x_ < x) {\n // Quick reject\n return 0;\n }\n\n return y2 < y0 ? unit : -unit;\n }\n }\n} // TODO\n// Arc 旋转\n\n\nfunction windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) {\n y -= cy;\n\n if (y > r || y < -r) {\n return 0;\n }\n\n var tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n var diff = Math.abs(startAngle - endAngle);\n\n if (diff < 1e-4) {\n return 0;\n }\n\n if (diff % PI2 < 1e-4) {\n // Is a circle\n startAngle = 0;\n endAngle = PI2;\n var dir = anticlockwise ? 1 : -1;\n\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n } else {\n return 0;\n }\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var w = 0;\n\n for (var i = 0; i < 2; i++) {\n var x_ = roots[i];\n\n if (x_ + cx > x) {\n var angle = Math.atan2(y, x_);\n var dir = anticlockwise ? 1 : -1;\n\n if (angle < 0) {\n angle = PI2 + angle;\n }\n\n if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {\n if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\n dir = -dir;\n }\n\n w += dir;\n }\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++]; // Begin a new subpath\n\n if (cmd === CMD.M && i > 1) {\n // Close previous subpath\n if (!isStroke) {\n w += windingLine(xi, yi, x0, y0, x, y);\n } // 如果被任何一个 subpath 包含\n // if (w !== 0) {\n // return true;\n // }\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 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\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 } else {\n // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n if (isStroke) {\n if (cubic.containStroke(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n if (isStroke) {\n if (quadratic.containStroke(xi, yi, data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++]; // TODO Arc 旋转\n\n i += 1;\n var anticlockwise = 1 - data[i++];\n var x1 = Math.cos(theta) * rx + cx;\n var y1 = Math.sin(theta) * ry + cy; // 不是直接使用 arc 命令\n\n if (i > 1) {\n w += windingLine(xi, yi, x1, y1, x, y);\n } else {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n } // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n\n\n var _x = (x - cx) * ry / rx + cx;\n\n if (isStroke) {\n if (arc.containStroke(cx, cy, ry, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) {\n return true;\n }\n } else {\n w += windingArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y);\n }\n\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n var x1 = x0 + width;\n var y1 = y0 + height;\n\n if (isStroke) {\n if (line.containStroke(x0, y0, x1, y0, lineWidth, x, y) || line.containStroke(x1, y0, x1, y1, lineWidth, x, y) || line.containStroke(x1, y1, x0, y1, lineWidth, x, y) || line.containStroke(x0, y1, x0, y0, lineWidth, x, y)) {\n return true;\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\n break;\n\n case CMD.Z:\n if (isStroke) {\n if (line.containStroke(xi, yi, x0, y0, lineWidth, x, y)) {\n return true;\n }\n } else {\n // Close a subpath\n w += windingLine(xi, yi, x0, y0, x, y); // 如果被任何一个 subpath 包含\n // FIXME subpaths may overlap\n // if (w !== 0) {\n // return true;\n // }\n }\n\n xi = x0;\n yi = y0;\n break;\n }\n }\n\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += windingLine(xi, yi, x0, y0, x, y) || 0;\n }\n\n return w !== 0;\n}\n\nfunction contain(pathData, x, y) {\n return containPath(pathData, 0, false, x, y);\n}\n\nfunction containStroke(pathData, lineWidth, x, y) {\n return containPath(pathData, lineWidth, true, x, y);\n}\n\nexports.contain = contain;\nexports.containStroke = containStroke;","export const ALL_URL = {\n WECHATSCAN: 'https://h5.ebdan.net/ls/UnHWBLye' // 申请专属物料\n}\n\nexport const TEXT_PAGE = {\n WECHATSCAN: '申请专属物料'\n}\n\nexport const ResultData = {\n unusedWechat: false, // 未使用微信扫描会员, true:未使用, false:已使用,\n purchaseAdvice: []\n}\n\nexport const MemberAdviceItems = [\n {\n title: '未使用微信扫码办会员',\n titleUsed: '已申请物料',\n name: 'unusedWechat',\n description: '免费申请专属物料,高效触达客户,复购率提升50%',\n descriptionUsed: '您的专属物料已寄出,可点击查询快递单号',\n btnName: '免费申请',\n btnNameUsed: '快递查询',\n key: 'WECHATSCAN',\n pageUrl: 'https://h5.ebdan.net/ls/UnHWBLye',\n modeType: -1,\n modeTypeText: '免费申请-扫码办会员',\n iconName: 'robot_scan',\n hidden: false,\n navTitle: '小智会员专属物料领取'\n }\n]\n\nexport const typeInfo = {\n member: {\n 1: '新增会员数',\n 2: '会员订单数',\n 3: '会员销售额',\n 4: '会员销售额占比',\n 5: '绑定会员数'\n },\n repurchase: {\n 1: '复购率',\n 2: '复购人数',\n 3: '复购销售额'\n },\n market: {\n 1: '触达人数',\n 2: '点击人数',\n 3: '下单人数',\n 4: '下单金额',\n 5: '点击转化率',\n 6: '下单转化率'\n }\n}\nconst material_blue = require('@/assets/material_blue.png')\nconst material_orange = require('@/assets/material_orange.png')\nconst material_red = require('@/assets/material_red.png')\nexport const materialTheme = [\n {\n id: 1,\n name: '基础',\n imgSrc: ''\n },\n {\n id: 2,\n name: '丹阳橙',\n imgSrc: material_orange\n },\n {\n id: 3,\n name: '天晴蓝',\n imgSrc: material_blue\n },\n {\n id: 4,\n name: '嫣然红',\n imgSrc: material_red\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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar layoutUtil = require(\"../../util/layout\");\n\nvar axisHelper = require(\"../../coord/axisHelper\");\n\nvar ParallelAxis = require(\"./ParallelAxis\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar sliderMove = require(\"../../component/helper/sliderMove\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * \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;\nvar PI = Math.PI;\n\nfunction Parallel(parallelModel, ecModel, api) {\n /**\n * key: dimension\n * @type {Object.}\n * @private\n */\n this._axesMap = zrUtil.createHashMap();\n /**\n * key: dimension\n * value: {position: [], rotation, }\n * @type {Object.}\n * @private\n */\n\n this._axesLayout = {};\n /**\n * Always follow axis order.\n * @type {Array.}\n * @readOnly\n */\n\n this.dimensions = parallelModel.dimensions;\n /**\n * @type {module:zrender/core/BoundingRect}\n */\n\n this._rect;\n /**\n * @type {module:echarts/coord/parallel/ParallelModel}\n */\n\n this._model = parallelModel;\n\n this._init(parallelModel, ecModel, api);\n}\n\nParallel.prototype = {\n type: 'parallel',\n constructor: Parallel,\n\n /**\n * Initialize cartesian coordinate systems\n * @private\n */\n _init: function (parallelModel, ecModel, api) {\n var dimensions = parallelModel.dimensions;\n var parallelAxisIndex = parallelModel.parallelAxisIndex;\n each(dimensions, function (dim, idx) {\n var axisIndex = parallelAxisIndex[idx];\n var axisModel = ecModel.getComponent('parallelAxis', axisIndex);\n\n var axis = this._axesMap.set(dim, new ParallelAxis(dim, axisHelper.createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisIndex));\n\n var isCategory = axis.type === 'category';\n axis.onBand = isCategory && axisModel.get('boundaryGap');\n axis.inverse = axisModel.get('inverse'); // Injection\n\n axisModel.axis = axis;\n axis.model = axisModel;\n axis.coordinateSystem = axisModel.coordinateSystem = this;\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\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 return pAxis >= axisBase && pAxis <= axisBase + layoutInfo.axisLength && pLayout >= layoutBase && pLayout <= layoutBase + layoutInfo.layoutLength;\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 if (!parallelModel.contains(seriesModel, ecModel)) {\n return;\n }\n\n var data = seriesModel.getData();\n each(this.dimensions, function (dim) {\n var axis = this._axesMap.get(dim);\n\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(parallelModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\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 var axisExpandWidth = restrict(parallelModel.get('axisExpandWidth'), layoutExtent);\n var axisExpandCount = restrict(parallelModel.get('axisExpandCount') || 0, [0, axisCount]);\n var axisExpandable = parallelModel.get('axisExpandable') && axisCount > 3 && axisCount > axisExpandCount && axisExpandCount > 1 && axisExpandWidth > 0 && layoutLength > 0; // `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\n var axisExpandWindow = parallelModel.get('axisExpandWindow');\n var winSize;\n\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 } else {\n winSize = restrict(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent);\n axisExpandWindow[1] = axisExpandWindow[0] + winSize;\n }\n\n var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount); // Avoid axisCollapseWidth is too small.\n\n axisCollapseWidth < 3 && (axisCollapseWidth = 0); // Find the first and last indices > ewin[0] and < ewin[1].\n\n var winInnerIndices = [mathFloor(round(axisExpandWindow[0] / axisExpandWidth, 1)) + 1, mathCeil(round(axisExpandWindow[1] / axisExpandWidth, 1)) - 1]; // Pos in ec coordinates.\n\n var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0];\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\n var layoutInfo = this._makeLayoutInfo();\n\n var layout = layoutInfo.layout;\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 each(dimensions, function (dim, idx) {\n var posInfo = (layoutInfo.axisExpandable ? layoutAxisWithExpand : layoutAxisWithoutExpand)(idx, layoutInfo);\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 var position = [positionTable[layout].x + rect.x, positionTable[layout].y + rect.y];\n var rotation = rotationTable[layout];\n var transform = matrix.create();\n matrix.rotate(transform, transform, rotation);\n matrix.translate(transform, transform, position); // TODO\n // tick等排布信息。\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(this._axesMap.get(dim).dataToCoord(value), dim);\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 var axesMap = this._axesMap;\n var dimensions = this.dimensions;\n var dataDimensions = [];\n var axisModels = [];\n zrUtil.each(dimensions, function (axisDim) {\n dataDimensions.push(data.mapDimension(axisDim));\n axisModels.push(axesMap.get(axisDim).model);\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 } else {\n activeState = 'active';\n var values = data.getValues(dataDimensions, dataIndex);\n\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.} coords\n * @param {string} dim\n * @return {Array.}\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.} point\n * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}.\n */\n getSlidedAxisExpandWindow: function (point) {\n var layoutInfo = this._makeLayoutInfo();\n\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)]; // Out of the area of coordinate system.\n\n if (!this.containPoint(point)) {\n return {\n behavior: 'none',\n axisExpandWindow: axisExpandWindow\n };\n } // Conver the point from global to expand coordinates.\n\n\n var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos; // For dragging operation convenience, the window should not be\n // slided when mouse is the center area of the window.\n\n var delta;\n var behavior = 'slide';\n var axisCollapseWidth = layoutInfo.axisCollapseWidth;\n\n var triggerArea = this._model.get('axisExpandSlideTriggerArea'); // But consider touch device, jump is necessary.\n\n\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 } else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) {\n behavior = 'jump';\n delta = pointCoord - winSize * (1 - triggerArea[2]);\n } else {\n (delta = pointCoord - winSize * triggerArea[1]) >= 0 && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0 && (delta = 0);\n }\n\n delta *= layoutInfo.axisExpandWidth / axisCollapseWidth;\n delta ? sliderMove(delta, axisExpandWindow, extent, 'all') // Avoid nonsense triger on mousemove.\n : behavior = 'none';\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 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 } else if (axisIndex <= winInnerIndices[1]) {\n position = layoutInfo.axisExpandWindow0Pos + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0];\n axisNameAvailableWidth = axisExpandWidth;\n axisLabelShow = true;\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\nvar _default = Parallel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar axisModelCreator = require(\"../axisModelCreator\");\n\nvar axisModelCommonMixin = require(\"../axisModelCommonMixin\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar PolarAxisModel = ComponentModel.extend({\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});\nzrUtil.merge(PolarAxisModel.prototype, axisModelCommonMixin);\nvar polarAxisDefaultExtendedOption = {\n angle: {\n // polarIndex: 0,\n // polarId: '',\n startAngle: 90,\n clockwise: true,\n splitNumber: 12,\n axisLabel: {\n rotate: false\n }\n },\n radius: {\n // polarIndex: 0,\n // polarId: '',\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);","var Path = require(\"../Path\");\n\n/**\n * 圆形\n * @module zrender/shape/Circle\n */\nvar _default = Path.extend({\n type: 'circle',\n shape: {\n cx: 0,\n cy: 0,\n r: 0\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 } // 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\n\n ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2, true);\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./treemap/TreemapSeries\");\n\nrequire(\"./treemap/TreemapView\");\n\nrequire(\"./treemap/treemapAction\");\n\nvar treemapVisual = require(\"./treemap/treemapVisual\");\n\nvar treemapLayout = require(\"./treemap/treemapLayout\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerVisual(treemapVisual);\necharts.registerLayout(treemapLayout);","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./marker/MarkPointModel\");\n\nrequire(\"./marker/MarkPointView\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// HINT Markpoint can't be used too much\necharts.registerPreprocessor(function (opt) {\n // Make sure markPoint component is enabled\n opt.markPoint = opt.markPoint || {};\n});","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar featureManager = require(\"./featureManager\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar Model = require(\"../../model/Model\");\n\nvar DataDiffer = require(\"../../data/DataDiffer\");\n\nvar listComponentHelper = require(\"../helper/listComponent\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = echarts.extendComponentView({\n type: 'toolbox',\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 var featureNames = [];\n zrUtil.each(featureOpts, function (opt, name) {\n featureNames.push(name);\n });\n new DataDiffer(this._featureNames || [], featureNames).add(processFeature).update(processFeature).remove(zrUtil.curry(processFeature, null)).execute(); // Keep for diff.\n\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; // FIX#11236, merge feature title from MagicType newOption. TODO: consider seriesIndex ?\n\n if (payload && payload.newTitle != null && payload.featureName === featureName) {\n featureOpt.title = payload.newTitle;\n }\n\n if (featureName && !oldName) {\n // Create\n if (isUserFeatureName(featureName)) {\n feature = {\n model: featureModel,\n onclick: featureModel.option.onclick,\n featureName: featureName\n };\n } else {\n var Feature = featureManager.get(featureName);\n\n if (!Feature) {\n return;\n }\n\n feature = new Feature(featureModel, ecModel, api);\n }\n\n features[featureName] = feature;\n } else {\n feature = features[oldName]; // If feature does not exsit.\n\n if (!feature) {\n return;\n }\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; // FIXME\n\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'); // 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\n var icons = feature.getIcons ? feature.getIcons() : featureModel.get('icon');\n var titles = featureModel.get('title') || {};\n\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\n var iconPaths = featureModel.iconPaths = {};\n zrUtil.each(icons, function (iconStr, iconName) {\n var path = graphic.createIcon(iconStr, {}, {\n x: -itemSize / 2,\n y: -itemSize / 2,\n width: itemSize,\n height: itemSize\n });\n path.setStyle(iconStyleModel.getItemStyle());\n path.hoverStyle = iconStyleEmphasisModel.getItemStyle(); // Text position calculation\n\n path.setStyle({\n text: titles[iconName],\n textAlign: iconStyleEmphasisModel.get('textAlign'),\n textBorderRadius: iconStyleEmphasisModel.get('textBorderRadius'),\n textPadding: iconStyleEmphasisModel.get('textPadding'),\n textFill: null\n });\n var tooltipModel = toolboxModel.getModel('tooltip');\n\n if (tooltipModel && tooltipModel.get('show')) {\n path.attr('tooltip', zrUtil.extend({\n content: titles[iconName],\n formatter: tooltipModel.get('formatter', true) || function () {\n return titles[iconName];\n },\n formatterParams: {\n componentType: 'toolbox',\n name: iconName,\n title: titles[iconName],\n $vars: ['name', 'title']\n },\n position: tooltipModel.get('position', true) || 'bottom'\n }, tooltipModel.option));\n }\n\n graphic.setHoverStyle(path);\n\n if (toolboxModel.get('showTitle')) {\n path.__title = titles[iconName];\n path.on('mouseover', function () {\n // Should not reuse above hoverStyle, which might be modified.\n var hoverStyle = iconStyleEmphasisModel.getItemStyle();\n var defaultTextPosition = toolboxModel.get('orient') === 'vertical' ? toolboxModel.get('right') == null ? 'right' : 'left' : toolboxModel.get('bottom') == null ? 'bottom' : 'top';\n path.setStyle({\n textFill: iconStyleEmphasisModel.get('textFill') || hoverStyle.fill || hoverStyle.stroke || '#000',\n textBackgroundColor: iconStyleEmphasisModel.get('textBackgroundColor'),\n textPosition: iconStyleEmphasisModel.get('textPosition') || defaultTextPosition\n });\n }).on('mouseout', function () {\n path.setStyle({\n textFill: null,\n textBackgroundColor: null\n });\n });\n }\n\n path.trigger(featureModel.get('iconStatus.' + iconName) || 'normal');\n group.add(path);\n path.on('click', zrUtil.bind(feature.onclick, feature, ecModel, api, iconName));\n iconPaths[iconName] = path;\n });\n }\n\n listComponentHelper.layout(group, toolboxModel, api); // Render background after group is layout\n // FIXME\n\n group.add(listComponentHelper.makeBackground(group.getBoundingRect(), toolboxModel)); // Adjust icon title positions to avoid them out of screen\n\n group.eachChild(function (icon) {\n var titleText = icon.__title;\n var hoverStyle = icon.hoverStyle; // May be background element\n\n if (hoverStyle && titleText) {\n var rect = textContain.getBoundingRect(titleText, textContain.makeFont(hoverStyle));\n var offsetX = icon.position[0] + group.position[0];\n var offsetY = icon.position[1] + group.position[1] + itemSize;\n var needPutOnTop = false;\n\n if (offsetY + rect.height > api.getHeight()) {\n hoverStyle.textPosition = 'top';\n needPutOnTop = true;\n }\n\n var topOffset = needPutOnTop ? -5 - rect.height : itemSize + 8;\n\n if (offsetX + rect.width / 2 > api.getWidth()) {\n hoverStyle.textPosition = ['100%', topOffset];\n hoverStyle.textAlign = 'right';\n } else if (offsetX - rect.width / 2 < 0) {\n hoverStyle.textPosition = [0, topOffset];\n hoverStyle.textAlign = 'left';\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 // 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 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 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\nmodule.exports = _default;","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","var _core = require(\"./core\");\n\nvar createElement = _core.createElement;\n\nvar util = require(\"../core/util\");\n\nvar logError = require(\"../core/log\");\n\nvar Path = require(\"../graphic/Path\");\n\nvar ZImage = require(\"../graphic/Image\");\n\nvar ZText = require(\"../graphic/Text\");\n\nvar arrayDiff = require(\"../core/arrayDiff2\");\n\nvar GradientManager = require(\"./helper/GradientManager\");\n\nvar ClippathManager = require(\"./helper/ClippathManager\");\n\nvar ShadowManager = require(\"./helper/ShadowManager\");\n\nvar _graphic = require(\"./graphic\");\n\nvar svgPath = _graphic.path;\nvar svgImage = _graphic.image;\nvar svgText = _graphic.text;\n\n/**\n * SVG Painter\n * @module zrender/svg/Painter\n */\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\n\nfunction getSvgProxy(el) {\n if (el instanceof Path) {\n return svgPath;\n } else if (el instanceof ZImage) {\n return svgImage;\n } else if (el instanceof ZText) {\n return svgText;\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) : 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) : parent.appendChild(child);\n }\n} // function append(parent, child) {\n// if (checkParentAvailable(parent, child)) {\n// parent.appendChild(child);\n// }\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 * @alias module:zrender/svg/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\n\n\nvar SVGPainter = function (root, storage, opts, zrId) {\n this.root = root;\n this.storage = storage;\n this._opts = opts = util.extend({}, opts || {});\n var svgDom = createElement('svg');\n svgDom.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n svgDom.setAttribute('version', '1.1');\n svgDom.setAttribute('baseProfile', 'full');\n svgDom.style.cssText = 'user-select:none;position:absolute;left:0;top:0;';\n var bgRoot = createElement('g');\n svgDom.appendChild(bgRoot);\n var svgRoot = createElement('g');\n svgDom.appendChild(svgRoot);\n this.gradientManager = new GradientManager(zrId, svgRoot);\n this.clipPathManager = new ClippathManager(zrId, svgRoot);\n this.shadowManager = new ShadowManager(zrId, svgRoot);\n var viewport = document.createElement('div');\n viewport.style.cssText = 'overflow:hidden;position:relative';\n this._svgDom = svgDom;\n this._svgRoot = svgRoot;\n this._backgroundRoot = bgRoot;\n this._viewport = viewport;\n root.appendChild(viewport);\n viewport.appendChild(svgDom);\n this.resize(opts.width, opts.height);\n this._visibleList = [];\n};\n\nSVGPainter.prototype = {\n constructor: SVGPainter,\n getType: function () {\n return 'svg';\n },\n getViewportRoot: function () {\n return this._viewport;\n },\n getSvgDom: function () {\n return this._svgDom;\n },\n getSvgRoot: function () {\n return this._svgRoot;\n },\n getViewportRootOffset: function () {\n var viewportRoot = this.getViewportRoot();\n\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n },\n refresh: function () {\n var list = this.storage.getDisplayList(true);\n\n this._paintList(list);\n },\n setBackgroundColor: function (backgroundColor) {\n // TODO gradient\n // Insert a bg rect instead of setting background to viewport.\n // Otherwise, the exported SVG don't have background.\n if (this._backgroundRoot && this._backgroundNode) {\n this._backgroundRoot.removeChild(this._backgroundNode);\n }\n\n var bgNode = createElement('rect');\n bgNode.setAttribute('width', this.getWidth());\n bgNode.setAttribute('height', this.getHeight());\n bgNode.setAttribute('x', 0);\n bgNode.setAttribute('y', 0);\n bgNode.setAttribute('id', 0);\n bgNode.style.fill = backgroundColor;\n\n this._backgroundRoot.appendChild(bgNode);\n\n this._backgroundNode = bgNode;\n },\n _paintList: function (list) {\n this.gradientManager.markAllUnused();\n this.clipPathManager.markAllUnused();\n this.shadowManager.markAllUnused();\n var svgRoot = this._svgRoot;\n var visibleList = this._visibleList;\n var listLen = list.length;\n var newVisibleList = [];\n var i;\n\n for (i = 0; i < listLen; i++) {\n var displayable = list[i];\n var svgProxy = getSvgProxy(displayable);\n var svgElement = getSvgElement(displayable) || getTextSvgElement(displayable);\n\n if (!displayable.invisible) {\n if (displayable.__dirty) {\n svgProxy && svgProxy.brush(displayable); // Update clipPath\n\n this.clipPathManager.update(displayable); // Update gradient and shadow\n\n if (displayable.style) {\n this.gradientManager.update(displayable.style.fill);\n this.gradientManager.update(displayable.style.stroke);\n this.shadowManager.update(svgElement, displayable);\n }\n\n displayable.__dirty = false;\n }\n\n newVisibleList.push(displayable);\n }\n }\n\n var diff = arrayDiff(visibleList, newVisibleList);\n var prevSvgElement; // First do remove, in case element moved to the head and do remove\n // after add\n\n for (i = 0; i < diff.length; i++) {\n var item = diff[i];\n\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\n for (i = 0; i < diff.length; i++) {\n var item = diff[i];\n\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 ? insertAfter(svgRoot, svgElement, prevSvgElement) : prepend(svgRoot, svgElement);\n\n if (svgElement) {\n insertAfter(svgRoot, textSvgElement, svgElement);\n } else if (prevSvgElement) {\n insertAfter(svgRoot, textSvgElement, prevSvgElement);\n } else {\n prepend(svgRoot, textSvgElement);\n } // Insert text\n\n\n insertAfter(svgRoot, textSvgElement, svgElement);\n prevSvgElement = textSvgElement || svgElement || prevSvgElement; // zrender.Text only create textSvgElement.\n\n this.gradientManager.addWithoutUpdate(svgElement || textSvgElement, displayable);\n this.shadowManager.addWithoutUpdate(svgElement || textSvgElement, displayable);\n this.clipPathManager.markUsed(displayable);\n }\n } else if (!item.removed) {\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 var svgElement = getSvgElement(displayable);\n var textSvgElement = getTextSvgElement(displayable);\n this.gradientManager.markUsed(displayable);\n this.gradientManager.addWithoutUpdate(svgElement || textSvgElement, displayable);\n this.shadowManager.markUsed(displayable);\n this.shadowManager.addWithoutUpdate(svgElement || textSvgElement, displayable);\n this.clipPathManager.markUsed(displayable);\n\n if (textSvgElement) {\n // Insert text.\n insertAfter(svgRoot, textSvgElement, svgElement);\n }\n\n prevSvgElement = svgElement || textSvgElement || prevSvgElement;\n }\n }\n }\n\n this.gradientManager.removeUnused();\n this.clipPathManager.removeUnused();\n this.shadowManager.removeUnused();\n this._visibleList = newVisibleList;\n },\n _getDefs: function (isForceCreating) {\n var svgRoot = this._svgDom;\n var defs = svgRoot.getElementsByTagName('defs');\n\n if (defs.length === 0) {\n // Not exist\n if (isForceCreating) {\n var defs = svgRoot.insertBefore(createElement('defs'), // Create new tag\n svgRoot.firstChild // Insert in the front of svg\n );\n\n if (!defs.contains) {\n // IE doesn't support contains method\n defs.contains = function (el) {\n var children = defs.children;\n\n if (!children) {\n return false;\n }\n\n for (var i = children.length - 1; i >= 0; --i) {\n if (children[i] === el) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n return defs;\n } else {\n return null;\n }\n } else {\n return defs[0];\n }\n },\n resize: function (width, height) {\n var viewport = this._viewport; // FIXME Why ?\n\n viewport.style.display = 'none'; // Save input w/h\n\n var opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n width = this._getSize(0);\n height = this._getSize(1);\n viewport.style.display = '';\n\n if (this._width !== width || this._height !== height) {\n this._width = width;\n this._height = height;\n var viewportStyle = viewport.style;\n viewportStyle.width = width + 'px';\n viewportStyle.height = height + 'px';\n var svgRoot = this._svgDom; // Set width by 'svgRoot.width = width' is invalid\n\n svgRoot.setAttribute('width', width);\n svgRoot.setAttribute('height', height);\n }\n\n if (this._backgroundNode) {\n this._backgroundNode.setAttribute('width', width);\n\n this._backgroundNode.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 _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; // IE8 does not support getComputedStyle, but it use VML.\n\n var stl = document.defaultView.getComputedStyle(root);\n return (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) - (parseInt10(stl[plt]) || 0) - (parseInt10(stl[prb]) || 0) | 0;\n },\n dispose: function () {\n this.root.innerHTML = '';\n this._svgRoot = this._backgroundRoot = this._svgDom = this._backgroundNode = this._viewport = this.storage = null;\n },\n clear: function () {\n if (this._viewport) {\n this.root.removeChild(this._viewport);\n }\n },\n toDataURL: function () {\n this.refresh();\n var html = encodeURIComponent(this._svgDom.outerHTML.replace(/>\\n\\r<'));\n return 'data:image/svg+xml;charset=UTF-8,' + html;\n }\n}; // Not supported methods\n\nfunction createMethodNotSupport(method) {\n return function () {\n logError('In SVG mode painter not support method \"' + method + '\"');\n };\n} // Unsuppoted methods\n\n\nutil.each(['getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer', 'pathToImage'], function (name) {\n SVGPainter.prototype[name] = createMethodNotSupport(name);\n});\nvar _default = SVGPainter;\nmodule.exports = _default;","var 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 this.image = image;\n this.repeat = repeat; // Can be cloned\n\n this.type = 'pattern';\n};\n\nPattern.prototype.getCanvasPattern = function (ctx) {\n return ctx.createPattern(this.image, this.repeat || 'repeat');\n};\n\nvar _default = Pattern;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar clazzUtil = require(\"../../util/clazz\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar axisPointerModelHelper = require(\"./modelHelper\");\n\nvar eventTool = require(\"zrender/lib/core/event\");\n\nvar throttleUtil = require(\"../../util/throttle\");\n\nvar _model = require(\"../../util/model\");\n\nvar makeInner = _model.makeInner;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar inner = makeInner();\nvar clone = zrUtil.clone;\nvar bind = zrUtil.bind;\n/**\n * Base axis pointer class in 2D.\n * Implemenents {module:echarts/component/axis/IAxisPointer}.\n */\n\nfunction BaseAxisPointer() {}\n\nBaseAxisPointer.prototype = {\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'); // Bind them to `this`, not in closure, otherwise they will not\n // be replaced when user calling setOption in not merge mode.\n\n this._axisModel = axisModel;\n this._axisPointerModel = axisPointerModel;\n this._api = api; // 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\n if (!forceRender && this._lastValue === value && this._lastStatus === status) {\n return;\n }\n\n this._lastValue = value;\n this._lastStatus = status;\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\n group && group.show();\n handle && handle.show(); // Otherwise status is 'show'\n\n var elOption = {};\n this.makeElOption(elOption, value, axisModel, axisPointerModel, api); // Enable change axis pointer type.\n\n var graphicKey = elOption.graphicKey;\n\n if (graphicKey !== this._lastGraphicKey) {\n this.clear(api);\n }\n\n this._lastGraphicKey = graphicKey;\n var moveAnimation = this._moveAnimation = 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 } 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'); // Value axis without snap always do not snap.\n\n if (!useSnap && !isCategoryAxis) {\n return false;\n }\n\n if (animation === 'auto' || animation == null) {\n var animationThreshold = this.animationThreshold;\n\n if (isCategoryAxis && axis.getBandWidth() > animationThreshold) {\n return true;\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\n\n if (useSnap) {\n var seriesDataCount = axisPointerModelHelper.getAxisInfo(axisModel).seriesDataCount;\n var axisExtent = axis.getExtent(); // Approximate band width\n\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) {// 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\n if (pointerOption) {\n var pointerEl = inner(group).pointerEl = new graphic[pointerOption.type](clone(elOption.pointer));\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(clone(elOption.label));\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\n if (pointerEl && elOption.pointer) {\n pointerEl.setStyle(elOption.pointer.style);\n updateProps(pointerEl, {\n shape: elOption.pointer.shape\n });\n }\n },\n\n /**\n * @protected\n */\n updateLabelEl: function (group, elOption, updateProps, axisPointerModel) {\n var labelEl = inner(group).labelEl;\n\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 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\n var zr = this._api.getZr();\n\n var handle = this._handle;\n var handleModel = axisPointerModel.getModel('handle');\n var status = axisPointerModel.get('status');\n\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\n if (!this._handle) {\n isInit = true;\n handle = this._handle = graphic.createIcon(handleModel.get('icon'), {\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 zr.add(handle);\n }\n\n updateMandatoryProps(handle, axisPointerModel, false); // update style\n\n var includeStyles = ['color', 'borderColor', 'borderWidth', 'opacity', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'];\n handle.setStyle(handleModel.getItemStyle(null, includeStyles)); // update position\n\n var handleSize = handleModel.get('size');\n\n if (!zrUtil.isArray(handleSize)) {\n handleSize = [handleSize, handleSize];\n }\n\n handle.attr('scale', [handleSize[0] / 2, handleSize[1] / 2]);\n throttleUtil.createOrUpdate(this, '_doDispatchAxisPointer', handleModel.get('throttle') || 0, 'fixRate');\n\n this._moveHandleToValue(value, isInit);\n },\n\n /**\n * @private\n */\n _moveHandleToValue: function (value, isInit) {\n updateProps(this._axisPointerModel, !isInit && this._moveAnimation, this._handle, getHandleTransProps(this.getHandleTransform(value, this._axisModel, this._axisPointerModel)));\n },\n\n /**\n * @private\n */\n _onHandleDragMove: function (dx, dy) {\n var handle = this._handle;\n\n if (!handle) {\n return;\n }\n\n this._dragging = true; // Persistent for throttle.\n\n var trans = this.updateHandleTransform(getHandleTransProps(handle), [dx, dy], this._axisModel, this._axisPointerModel);\n this._payloadInfo = trans;\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\n if (!handle) {\n return;\n }\n\n var payloadInfo = this._payloadInfo;\n var axisModel = this._axisModel;\n\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\n if (!handle) {\n return;\n }\n\n var value = this._axisPointerModel.get('value'); // 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\n\n this._moveHandleToValue(value); // For the effect: tooltip will be shown when finger holding on handle\n // button, and will be hidden after finger left handle button.\n\n\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.} 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 var zr = api.getZr();\n var group = this._group;\n var handle = this._handle;\n\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 () {// Implemented by sub-class if necessary.\n },\n\n /**\n * @protected\n * @param {Array.} xy\n * @param {Array.} 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};\nBaseAxisPointer.prototype.constructor = BaseAxisPointer;\n\nfunction updateProps(animationModel, moveAnimation, el, props) {\n // Animation optimize.\n if (!propsEqual(inner(el).lastProp, props)) {\n inner(el).lastProp = props;\n moveAnimation ? graphic.updateProps(el, props, animationModel) : (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 } 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 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);\nvar _default = BaseAxisPointer;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar ChartView = require(\"../../view/Chart\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar Path = require(\"zrender/lib/graphic/Path\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Update common properties\nvar NORMAL_ITEM_STYLE_PATH = ['itemStyle'];\nvar EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'];\nvar BoxplotView = ChartView.extend({\n type: 'boxplot',\n render: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var group = this.group;\n var oldData = this._data; // 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\n if (!this._data) {\n group.removeAll();\n }\n\n var constDim = seriesModel.get('layout') === 'horizontal' ? 1 : 0;\n data.diff(oldData).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 }).update(function (newIdx, oldIdx) {\n var symbolEl = oldData.getItemGraphicEl(oldIdx); // Empty data\n\n if (!data.hasValue(newIdx)) {\n group.remove(symbolEl);\n return;\n }\n\n var itemLayout = data.getItemLayout(newIdx);\n\n if (!symbolEl) {\n symbolEl = createNormalBox(itemLayout, data, newIdx, constDim);\n } else {\n updateNormalBoxData(itemLayout, symbolEl, data, newIdx);\n }\n\n group.add(symbolEl);\n data.setItemGraphicEl(newIdx, symbolEl);\n }).remove(function (oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n el && group.remove(el);\n }).execute();\n this._data = data;\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 dispose: zrUtil.noop\n});\nvar BoxPath = Path.extend({\n type: 'boxplotBoxPath',\n shape: {},\n buildPath: function (ctx, shape) {\n var ends = shape.points;\n var i = 0;\n ctx.moveTo(ends[i][0], ends[i][1]);\n i++;\n\n for (; i < 4; i++) {\n ctx.lineTo(ends[i][0], ends[i][1]);\n }\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\nfunction createNormalBox(itemLayout, data, dataIndex, constDim, isInit) {\n var ends = itemLayout.ends;\n var el = new BoxPath({\n shape: {\n points: isInit ? transInit(ends, constDim, itemLayout) : ends\n }\n });\n updateNormalBoxData(itemLayout, el, data, dataIndex, isInit);\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 updateMethod(el, {\n shape: {\n points: itemLayout.ends\n }\n }, seriesModel, dataIndex);\n var itemModel = data.getItemModel(dataIndex);\n var normalItemStyleModel = itemModel.getModel(NORMAL_ITEM_STYLE_PATH);\n var borderColor = data.getItemVisual(dataIndex, 'color'); // Exclude borderColor.\n\n var itemStyle = normalItemStyleModel.getItemStyle(['borderColor']);\n itemStyle.stroke = borderColor;\n itemStyle.strokeNoScale = true;\n el.useStyle(itemStyle);\n el.z2 = 100;\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\nvar _default = BoxplotView;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"./dataZoom/typeDefaulter\");\n\nrequire(\"./dataZoom/DataZoomModel\");\n\nrequire(\"./dataZoom/DataZoomView\");\n\nrequire(\"./dataZoom/SelectZoomModel\");\n\nrequire(\"./dataZoom/SelectZoomView\");\n\nrequire(\"./dataZoom/dataZoomProcessor\");\n\nrequire(\"./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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar TimelineModel = require(\"./TimelineModel\");\n\nvar dataFormatMixin = require(\"../../model/mixin/dataFormat\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar SliderTimelineModel = TimelineModel.extend({\n type: 'timeline.slider',\n\n /**\n * @protected\n */\n defaultOption: {\n backgroundColor: 'rgba(0,0,0,0)',\n // 时间轴背景颜色\n borderColor: '#ccc',\n // 时间轴边框颜色\n borderWidth: 0,\n // 时间轴边框线宽,单位px,默认为0(无边框)\n orient: 'horizontal',\n // 'vertical'\n inverse: false,\n tooltip: {\n // boolean or Object\n trigger: 'item' // data item may also have tootip attr.\n\n },\n symbol: 'emptyCircle',\n symbolSize: 10,\n lineStyle: {\n show: true,\n width: 2,\n color: '#304654'\n },\n label: {\n // 文本标签\n position: 'auto',\n // 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 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 controlStyle: {\n show: true,\n showPlayBtn: true,\n showPrevBtn: true,\n showNextBtn: true,\n itemSize: 22,\n itemGap: 12,\n position: 'left',\n // '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',\n // 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',\n // 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',\n // 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',\n // jshint ignore:line\n color: '#304654',\n borderColor: '#304654',\n borderWidth: 1\n },\n emphasis: {\n label: {\n show: true,\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n color: '#c23531'\n },\n itemStyle: {\n color: '#c23531'\n },\n controlStyle: {\n color: '#c23531',\n borderColor: '#c23531',\n borderWidth: 2\n }\n },\n data: []\n }\n});\nzrUtil.mixin(SliderTimelineModel, dataFormatMixin);\nvar _default = SliderTimelineModel;\nmodule.exports = _default;","var zrUtil = require(\"../core/util\");\n\nvar Gradient = require(\"./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.} [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 this.x = x == null ? 0.5 : x;\n this.y = y == null ? 0.5 : y;\n this.r = r == null ? 0.5 : r; // Can be cloned\n\n this.type = 'radial'; // If use global coord\n\n this.global = globalCoord || false;\n Gradient.call(this, colorStops);\n};\n\nRadialGradient.prototype = {\n constructor: RadialGradient\n};\nzrUtil.inherits(RadialGradient, Gradient);\nvar _default = RadialGradient;\nmodule.exports = _default;","/**\n * zrender: 生成唯一id\n *\n * @author errorrik (errorrik@gmail.com)\n */\nvar idStart = 0x0907;\n\nfunction _default() {\n return idStart++;\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _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};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction normalize(a) {\n if (!(a instanceof Array)) {\n a = [a, a];\n }\n\n return a;\n}\n\nfunction _default(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 var colorQuery = 'lineStyle.color'.split('.');\n var opacityQuery = 'lineStyle.opacity'.split('.');\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 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)); // Edge visual must after node visual\n\n var color = itemModel.get(colorQuery);\n var opacity = itemModel.get(opacityQuery);\n\n switch (color) {\n case 'source':\n color = edge.node1.getVisual('color');\n break;\n\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 edge.setVisual('color', color);\n edge.setVisual('opacity', opacity);\n });\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar makeStyleMapper = require(\"../../model/mixin/makeStyleMapper\");\n\nvar axisModelCreator = require(\"../axisModelCreator\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar axisModelCommonMixin = require(\"../axisModelCommonMixin\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar AxisModel = ComponentModel.extend({\n type: 'baseParallelAxis',\n\n /**\n * @type {module:echarts/coord/parallel/Axis}\n */\n axis: null,\n\n /**\n * @type {Array.}\n * @readOnly\n */\n activeIntervals: [],\n\n /**\n * @return {Object}\n */\n getAreaSelectStyle: function () {\n return makeStyleMapper([['fill', 'color'], ['lineWidth', 'borderWidth'], ['stroke', 'borderColor'], ['width', 'width'], ['opacity', 'opacity']])(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.>} intervals interval.length === 0\n * means set all active.\n * @public\n */\n setActiveIntervals: function (intervals) {\n var activeIntervals = this.activeIntervals = zrUtil.clone(intervals); // Normalize\n\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 } // Simple optimization\n\n\n if (activeIntervals.length === 1) {\n var interval = activeIntervals[0];\n\n if (interval[0] <= value && value <= interval[1]) {\n return 'active';\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});\nvar defaultOption = {\n type: 'value',\n\n /**\n * @type {Array.}\n */\n dim: null,\n // 0, 1, 2, ...\n // parallelIndex: null,\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 realtime: true,\n // Whether realtime update view when select.\n z: 10\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);\nvar _default = AxisModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../../echarts\");\n\nvar history = require(\"../../dataZoom/history\");\n\nvar lang = require(\"../../../lang\");\n\nvar featureManager = require(\"../featureManager\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar restoreLang = lang.toolbox.restore;\n\nfunction Restore(model) {\n this.model = model;\n}\n\nRestore.defaultOption = {\n show: true,\n\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\n /* eslint-enable */\n title: restoreLang.title\n};\nvar proto = Restore.prototype;\n\nproto.onclick = function (ecModel, api, type) {\n history.clear(ecModel);\n api.dispatchAction({\n type: 'restore',\n from: this.uid\n });\n};\n\nfeatureManager.register('restore', Restore);\necharts.registerAction({\n type: 'restore',\n event: 'restore',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n ecModel.resetOption('recreate');\n});\nvar _default = Restore;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphicUtil = require(\"../util/graphic\");\n\nvar _labelHelper = require(\"./helper/labelHelper\");\n\nvar getDefaultLabel = _labelHelper.getDefaultLabel;\n\nvar createListFromArray = require(\"./helper/createListFromArray\");\n\nvar _barGrid = require(\"../layout/barGrid\");\n\nvar getLayoutOnAxis = _barGrid.getLayoutOnAxis;\n\nvar DataDiffer = require(\"../data/DataDiffer\");\n\nvar SeriesModel = require(\"../model/Series\");\n\nvar Model = require(\"../model/Model\");\n\nvar ChartView = require(\"../view/Chart\");\n\nvar _createClipPathFromCoordSys = require(\"./helper/createClipPathFromCoordSys\");\n\nvar createClipPath = _createClipPathFromCoordSys.createClipPath;\n\nvar prepareCartesian2d = require(\"../coord/cartesian/prepareCustom\");\n\nvar prepareGeo = require(\"../coord/geo/prepareCustom\");\n\nvar prepareSingleAxis = require(\"../coord/single/prepareCustom\");\n\nvar preparePolar = require(\"../coord/polar/prepareCustom\");\n\nvar prepareCalendar = require(\"../coord/calendar/prepareCustom\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar 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']; // Use prefix to avoid index to be the same as el.name,\n// which will cause weird udpate animation.\n\nvar GROUP_DIFF_PREFIX = 'e\\0\\0';\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 */\n\nvar prepareCustoms = {\n cartesian2d: prepareCartesian2d,\n geo: prepareGeo,\n singleAxis: prepareSingleAxis,\n polar: preparePolar,\n calendar: prepareCalendar\n}; // ------\n// Model\n// ------\n\nSeriesModel.extend({\n type: 'series.custom',\n dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],\n defaultOption: {\n coordinateSystem: 'cartesian2d',\n // Can be set as 'none'\n zlevel: 0,\n z: 2,\n legendHoverLink: true,\n useTransform: true,\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 // Cartesian coordinate system\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // Polar coordinate system\n // polarIndex: 0,\n // Geo coordinate system\n // geoIndex: 0,\n // label: {}\n // itemStyle: {}\n\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// View\n// -----\n\nChartView.extend({\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); // 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\n data.diff(oldData).add(function (newIdx) {\n createOrUpdate(null, newIdx, renderItem(newIdx, payload), customSeries, group, data);\n }).update(function (newIdx, oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n createOrUpdate(el, newIdx, renderItem(newIdx, payload), customSeries, group, data);\n }).remove(function (oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n el && group.remove(el);\n }).execute(); // Do clipping\n\n var clipPath = customSeries.get('clip', true) ? createClipPath(customSeries.coordinateSystem, false, customSeries) : null;\n\n if (clipPath) {\n group.setClipPath(clipPath);\n } else {\n group.removeClipPath();\n }\n\n this._data = data;\n },\n incrementalPrepareRender: function (customSeries, ecModel, api) {\n this.group.removeAll();\n this._data = null;\n },\n incrementalRender: function (params, customSeries, ecModel, api, payload) {\n var data = customSeries.getData();\n var renderItem = makeRenderItem(customSeries, data, ecModel, api);\n\n function setIncrementalAndHoverLayer(el) {\n if (!el.isGroup) {\n el.incremental = true;\n el.useHoverLayer = true;\n }\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\n if (elementName == null || targetEl.name === elementName) {\n return true;\n } // Enable to give a name on a group made by `renderItem`, and listen\n // events that triggerd by its descendents.\n\n\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\nfunction createEl(elOption) {\n var graphicType = elOption.type;\n var el; // Those graphic elements are not shapes. They should not be\n // overwritten by users, so do them first.\n\n if (graphicType === 'path') {\n var shape = elOption.shape; // Using pathRect brings convenience to users sacle svg path.\n\n var pathRect = shape.width != null && shape.height != null ? {\n x: shape.x || 0,\n y: shape.y || 0,\n width: shape.width,\n height: shape.height\n } : null;\n var pathData = getPathData(shape); // Path is also used for icon, so layout 'center' by default.\n\n el = graphicUtil.makePath(pathData, null, pathRect, shape.layout || 'center');\n el.__customPathData = pathData;\n } else if (graphicType === 'image') {\n el = new graphicUtil.Image({});\n el.__customImagePath = elOption.style.image;\n } else if (graphicType === 'text') {\n el = new graphicUtil.Text({});\n el.__customText = elOption.style.text;\n } else if (graphicType === 'group') {\n el = new graphicUtil.Group();\n } else if (graphicType === 'compoundPath') {\n throw new Error('\"compoundPath\" is not supported yet.');\n } else {\n var Clz = graphicUtil.getShapeClass(graphicType);\n el = new Clz();\n }\n\n el.__customGraphicType = graphicType;\n el.name = elOption.name;\n return el;\n}\n\nfunction updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot) {\n var transitionProps = {};\n var elOptionStyle = elOption.style || {};\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 }); // Compatible with previous: both support\n // textFill and fill, textStroke and stroke in 'text' element.\n\n !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && (elOptionStyle.textFill = elOptionStyle.fill);\n !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && (elOptionStyle.textStroke = elOptionStyle.stroke);\n }\n\n if (el.type !== 'group') {\n el.useStyle(elOptionStyle); // Init animation.\n\n if (isInit) {\n el.style.opacity = 0;\n var targetOpacity = elOptionStyle.opacity;\n targetOpacity == null && (targetOpacity = 1);\n graphicUtil.initProps(el, {\n style: {\n opacity: targetOpacity\n }\n }, animatableModel, dataIndex);\n }\n }\n\n if (isInit) {\n el.attr(transitionProps);\n } else {\n graphicUtil.updateProps(el, transitionProps, animatableModel, dataIndex);\n } // Merge by default.\n // z2 must not be null/undefined, otherwise sort error may occur.\n\n\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); // `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\n elOption.hasOwnProperty('info') && el.attr('info', elOption.info); // If `elOption.styleEmphasis` is `false`, remove hover style. The\n // logic is ensured by `graphicUtil.setElementHoverStyle`.\n\n var styleEmphasis = elOption.styleEmphasis; // hoverStyle should always be set here, because if the hover style\n // may already be changed, where the inner cache should be reset.\n\n graphicUtil.setElementHoverStyle(el, styleEmphasis);\n\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 prepareResult = coordSys.prepareCustoms ? coordSys.prepareCustoms() : 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 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 }; // Do not support call `api` asynchronously without dataIndexInside input.\n\n var currDataIndexInside;\n var currDirty = true;\n var currItemModel;\n var currLabelNormalModel;\n var currLabelEmphasisModel;\n var currVisualColor;\n return function (dataIndexInside, payload) {\n currDataIndexInside = dataIndexInside;\n currDirty = true;\n return renderItem && renderItem(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), userAPI);\n }; // Do not update cache until api called.\n\n function updateCache(dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n\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 currDirty = false;\n }\n }\n /**\n * @public\n * @param {number|string} dim\n * @param {number} [dataIndexInside=currDataIndexInside]\n * @return {number|string} value\n */\n\n\n function value(dim, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n return data.get(data.getDimension(dim || 0), dataIndexInside);\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\n\n function style(extra, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n updateCache(dataIndexInside);\n var itemStyle = currItemModel.getModel(ITEM_STYLE_NORMAL_PATH).getItemStyle();\n currVisualColor != null && (itemStyle.fill = currVisualColor);\n var opacity = data.getItemVisual(dataIndexInside, 'opacity');\n opacity != null && (itemStyle.opacity = opacity);\n var labelModel = extra ? applyExtraBefore(extra, currLabelNormalModel) : currLabelNormalModel;\n graphicUtil.setTextStyle(itemStyle, labelModel, null, {\n autoColor: currVisualColor,\n isRectText: true\n });\n itemStyle.text = labelModel.getShallow('show') ? zrUtil.retrieve2(customSeries.getFormattedLabel(dataIndexInside, 'normal'), getDefaultLabel(data, dataIndexInside)) : null;\n extra && applyExtraAfter(itemStyle, extra);\n return itemStyle;\n }\n /**\n * @public\n * @param {Object} [extra]\n * @param {number} [dataIndexInside=currDataIndexInside]\n */\n\n\n function styleEmphasis(extra, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n updateCache(dataIndexInside);\n var itemStyle = currItemModel.getModel(ITEM_STYLE_EMPHASIS_PATH).getItemStyle();\n var labelModel = extra ? applyExtraBefore(extra, currLabelEmphasisModel) : currLabelEmphasisModel;\n graphicUtil.setTextStyle(itemStyle, labelModel, null, {\n isRectText: true\n }, true);\n itemStyle.text = labelModel.getShallow('show') ? zrUtil.retrieve3(customSeries.getFormattedLabel(dataIndexInside, 'emphasis'), customSeries.getFormattedLabel(dataIndexInside, 'normal'), getDefaultLabel(data, dataIndexInside)) : null;\n extra && applyExtraAfter(itemStyle, extra);\n return itemStyle;\n }\n /**\n * @public\n * @param {string} visualType\n * @param {number} [dataIndexInside=currDataIndexInside]\n */\n\n\n function visual(visualType, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n return data.getItemVisual(dataIndexInside, visualType);\n }\n /**\n * @public\n * @param {number} opt.count Positive interger.\n * @param {number} [opt.barWidth]\n * @param {number} [opt.barMaxWidth]\n * @param {number} [opt.barMinWidth]\n * @param {number} [opt.barGap]\n * @param {number} [opt.barCategoryGap]\n * @return {Object} {width, offset, offsetCenter} is not support, return undefined.\n */\n\n\n function barLayout(opt) {\n if (coordSys.getBaseAxis) {\n var baseAxis = coordSys.getBaseAxis();\n return getLayoutOnAxis(zrUtil.defaults({\n axis: baseAxis\n }, opt), api);\n }\n }\n /**\n * @public\n * @return {Array.}\n */\n\n\n function currentSeriesIndices() {\n return ecModel.getCurrentSeriesIndices();\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\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\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 return el;\n}\n\nfunction doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data, isRoot) {\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 var simplyRemove = !elOption; // `null`/`undefined`/`false`\n\n elOption = elOption || {};\n var elOptionType = elOption.type;\n var elOptionShape = elOption.shape;\n var elOptionStyle = elOption.style;\n\n if (el && (simplyRemove // || elOption.$merge === false\n // If `elOptionType` is `null`, follow the merge principle.\n || elOptionType != null && elOptionType !== el.__customGraphicType || elOptionType === 'path' && hasOwnPathData(elOptionShape) && getPathData(elOptionShape) !== el.__customPathData || elOptionType === 'image' && hasOwn(elOptionStyle, 'image') && elOptionStyle.image !== el.__customImagePath // FIXME test and remove this restriction?\n || elOptionType === 'text' && hasOwn(elOptionShape, 'text') && elOptionStyle.text !== el.__customText)) {\n group.remove(el);\n el = null;\n } // `elOption.type` is undefined when `renderItem` returns nothing.\n\n\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 } // Always add whatever already added to ensure sequence.\n\n\n group.add(el);\n return el;\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.\n\n\nfunction mergeChildren(el, dataIndex, elOption, animatableModel, data) {\n var newChildren = elOption.children;\n var newLen = newChildren ? newChildren.length : 0;\n var mergeChildren = elOption.$mergeChildren; // `diffChildrenByName` has been deprecated.\n\n var byName = mergeChildren === 'byName' || elOption.diffChildrenByName;\n var notMerge = mergeChildren === false; // For better performance on roam update, only enter if necessary.\n\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(); // Mapping children of a group simply by index, which\n // might be better performance.\n\n var index = 0;\n\n for (; index < newLen; index++) {\n newChildren[index] && doCreateOrUpdate(el.childAt(index), dataIndex, newChildren[index], animatableModel, el, data);\n }\n}\n\nfunction diffGroupChildren(context) {\n new DataDiffer(context.oldChildren, context.newChildren, getKey, getKey, context).add(processAddUpdate).update(processAddUpdate).remove(processRemove).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 doCreateOrUpdate(child, context.dataIndex, childOption, context.animatableModel, context.group, context.data);\n} // `graphic#applyDefaultTextStyle` will cache\n// textFill, textStroke, textStrokeWidth.\n// We have to do this trick.\n\n\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) || !CACHED_LABEL_STYLE_PROPERTIES.hasOwnProperty(key)) {\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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar _model = require(\"../util/model\");\n\nvar makeInner = _model.makeInner;\n\nvar _axisHelper = require(\"./axisHelper\");\n\nvar makeLabelFormatter = _axisHelper.makeLabelFormatter;\nvar getOptionCategoryInterval = _axisHelper.getOptionCategoryInterval;\nvar shouldShowAllLabels = _axisHelper.shouldShowAllLabels;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar inner = makeInner();\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 */\n\nfunction createAxisLabels(axis) {\n // Only ordinal scale support tick interval\n return axis.type === 'category' ? makeCategoryLabels(axis) : makeRealNumberLabels(axis);\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.\n * tickCategoryInterval: number\n * }\n */\n\n\nfunction createAxisTicks(axis, tickModel) {\n // Only ordinal scale support tick interval\n return axis.type === 'category' ? makeCategoryTicks(axis, tickModel) : {\n ticks: axis.scale.getTicks()\n };\n}\n\nfunction makeCategoryLabels(axis) {\n var labelModel = axis.getLabelModel();\n var result = makeCategoryLabelsActually(axis, labelModel);\n return !labelModel.get('show') || axis.scale.isBlank() ? {\n labels: [],\n 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 } else {\n numericLabelInterval = optionLabelInterval === 'auto' ? makeAutoCategoryInterval(axis) : optionLabelInterval;\n labels = makeLabelsByNumericCategoryInterval(axis, numericLabelInterval);\n } // Cache to avoid calling interval function repeatly.\n\n\n return listCacheSet(labelsCache, optionLabelInterval, {\n labels: labels,\n 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; // Optimize for the case that large category data and no label displayed,\n // we should not return all ticks.\n\n if (!tickModel.get('show') || axis.scale.isBlank()) {\n ticks = [];\n }\n\n if (zrUtil.isFunction(optionTickInterval)) {\n ticks = makeLabelsByCustomizedCategoryInterval(axis, optionTickInterval, true);\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 } else {\n tickCategoryInterval = optionTickInterval;\n ticks = makeLabelsByNumericCategoryInterval(axis, tickCategoryInterval, true);\n } // Cache to avoid calling interval function repeatly.\n\n\n return listCacheSet(ticksCache, optionTickInterval, {\n ticks: ticks,\n 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} // 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.\n\n\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({\n key: key,\n value: value\n });\n return value;\n}\n\nfunction makeAutoCategoryInterval(axis) {\n var result = inner(axis).autoInterval;\n return result != null ? result : inner(axis).autoInterval = axis.calculateCategoryInterval();\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 */\n\n\nfunction calculateCategoryInterval(axis) {\n var params = fetchAutoCategoryIntervalCalculationParams(axis);\n var labelFormatter = makeLabelFormatter(axis);\n var rotation = (params.axisRotate - params.labelRotate) / 180 * Math.PI;\n var ordinalScale = axis.scale;\n var ordinalExtent = ordinalScale.getExtent(); // Providing this method is for optimization:\n // avoid generating a long array by `getTicks`\n // in large category data case.\n\n var tickCount = ordinalScale.count();\n\n if (ordinalExtent[1] - ordinalExtent[0] < 1) {\n return 0;\n }\n\n var step = 1; // Simple optimization. Empirical value: tick count should less than 40.\n\n if (tickCount > 40) {\n step = Math.max(1, Math.floor(tickCount / 40));\n }\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 var maxW = 0;\n var maxH = 0; // Caution: Performance sensitive for large category data.\n // Consider dataZoom, we should make appropriate step to avoid O(n) loop.\n\n for (; tickValue <= ordinalExtent[1]; tickValue += step) {\n var width = 0;\n var height = 0; // Not precise, do not consider align and vertical align\n // and each distance from axis line yet.\n\n var rect = textContain.getBoundingRect(labelFormatter(tickValue), params.font, 'center', 'top'); // Magic number\n\n width = rect.width * 1.3;\n height = rect.height * 1.3; // Min size, void long loop.\n\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; // 0/0 is NaN, 1/0 is Infinity.\n\n isNaN(dw) && (dw = Infinity);\n isNaN(dh) && (dh = Infinity);\n var interval = Math.max(0, Math.floor(Math.min(dw, dh)));\n var cache = inner(axis.model);\n var axisExtent = axis.getExtent();\n var lastAutoInterval = cache.lastAutoInterval;\n var lastTickCount = cache.lastTickCount; // Use cache to keep interval stable while moving zoom window,\n // otherwise the calculated interval might jitter when the zoom\n // window size is close to the interval-changing size.\n // For example, if all of the axis labels are `a, b, c, d, e, f, g`.\n // The jitter will cause that sometimes the displayed labels are\n // `a, d, g` (interval: 2) sometimes `a, c, e`(interval: 1).\n\n if (lastAutoInterval != null && lastTickCount != null && Math.abs(lastAutoInterval - interval) <= 1 && Math.abs(lastTickCount - tickCount) <= 1 // Always choose the bigger one, otherwise the critical\n // point is not the same when zooming in or zooming out.\n && lastAutoInterval > interval // If the axis change is caused by chart resize, the cache should not\n // be used. Otherwise some hiden labels might not be shown again.\n && cache.axisExtend0 === axisExtent[0] && cache.axisExtend1 === axisExtent[1]) {\n interval = lastAutoInterval;\n } // Only update cache if cache not used, otherwise the\n // changing of interval is too insensitive.\n else {\n cache.lastTickCount = tickCount;\n cache.lastAutoInterval = interval;\n cache.axisExtend0 = axisExtent[0];\n cache.axisExtend1 = axisExtent[1];\n }\n\n return interval;\n}\n\nfunction fetchAutoCategoryIntervalCalculationParams(axis) {\n var labelModel = axis.getLabelModel();\n return {\n axisRotate: axis.getRotate ? axis.getRotate() : axis.isHorizontal && !axis.isHorizontal() ? 90 : 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 = []; // 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(); // 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\n if (startTick !== 0 && step > 1 && tickCount / step > 2) {\n startTick = Math.round(Math.ceil(startTick / step) * step);\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\n\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 } // Optimize: avoid generating large array by `ordinalScale.getTicks()`.\n\n\n var tickValue = startTick;\n\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 ? tVal : {\n formattedLabel: labelFormatter(tVal),\n rawLabel: ordinalScale.getLabel(tVal),\n tickValue: tVal\n });\n }\n\n return result;\n} // When interval is function, the result `false` means ignore the tick.\n// It is time consuming for large category data.\n\n\nfunction makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick) {\n var ordinalScale = axis.scale;\n var labelFormatter = makeLabelFormatter(axis);\n var result = [];\n zrUtil.each(ordinalScale.getTicks(), function (tickValue) {\n var rawLabel = ordinalScale.getLabel(tickValue);\n\n if (categoryInterval(tickValue, rawLabel)) {\n result.push(onlyTick ? tickValue : {\n formattedLabel: labelFormatter(tickValue),\n rawLabel: rawLabel,\n tickValue: tickValue\n });\n }\n });\n return result;\n}\n\nexports.createAxisLabels = createAxisLabels;\nexports.createAxisTicks = createAxisTicks;\nexports.calculateCategoryInterval = calculateCategoryInterval;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\nvar isArray = zrUtil.isArray;\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 */\n\nvar DUMMY_COMPONENT_NAME_PREFIX = 'series\\0';\n/**\n * If value is not array, then translate it to array.\n * @param {*} value\n * @return {Array} [value] or value\n */\n\nfunction normalizeToArray(value) {\n return value instanceof Array ? value : value == null ? [] : [value];\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.} subOpts\n */\n\n\nfunction 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] || {}; // Default emphasis option from normal\n\n for (var i = 0, len = subOpts.length; i < len; i++) {\n var subOptName = subOpts[i];\n\n if (!opt.emphasis[key].hasOwnProperty(subOptName) && opt[key].hasOwnProperty(subOptName)) {\n opt.emphasis[key][subOptName] = opt[key][subOptName];\n }\n }\n }\n}\n\nvar TEXT_STYLE_OPTIONS = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'rich', 'tag', 'color', 'textBorderColor', 'textBorderWidth', 'width', 'height', 'lineHeight', 'align', 'verticalAlign', 'baseline', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY', 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY', 'backgroundColor', 'borderColor', 'borderWidth', 'borderRadius', 'padding']; // 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.}\n */\n\nfunction getDataItemValue(dataItem) {\n return isObject(dataItem) && !isArray(dataItem) && !(dataItem instanceof Date) ? dataItem.value : dataItem;\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 */\n\n\nfunction isDataItemOption(dataItem) {\n return isObject(dataItem) && !(dataItem instanceof Array); // // markLine data can be array\n // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array));\n}\n/**\n * Mapping to exists for merge.\n *\n * @public\n * @param {Array.|Array.} exists\n * @param {Object|Array.} newCptOptions\n * @return {Array.} Result, like [{exist: ..., option: ...}, {}],\n * index of which is the same as exists.\n */\n\n\nfunction 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 var result = zrUtil.map(exists || [], function (obj, index) {\n return {\n exist: obj\n };\n }); // Mapping by id or name if specified.\n\n each(newCptOptions, function (cptOption, index) {\n if (!isObject(cptOption)) {\n return;\n } // id has highest priority.\n\n\n for (var i = 0; i < result.length; i++) {\n if (!result[i].option // Consider name: two map to one.\n && cptOption.id != null && result[i].exist.id === cptOption.id + '') {\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\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) && cptOption.name != null && !isIdInner(cptOption) && !isIdInner(exist) && exist.name === cptOption.name + '') {\n result[i].option = cptOption;\n newCptOptions[index] = null;\n return;\n }\n }\n }); // Otherwise mapping by index.\n\n each(newCptOptions, function (cptOption, index) {\n if (!isObject(cptOption)) {\n return;\n }\n\n var i = 0;\n\n for (; i < result.length; i++) {\n var exist = result[i].exist;\n\n if (!result[i].option // 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) // 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 result[i].option = cptOption;\n break;\n }\n }\n\n if (i >= result.length) {\n result.push({\n option: cptOption\n });\n }\n });\n return result;\n}\n/**\n * Make id and name for mapping result (result of mappingToExists)\n * into `keyInfo` field.\n *\n * @public\n * @param {Array.} Result, like [{exist: ..., option: ...}, {}],\n * which order is the same as exists.\n * @return {Array.} The input.\n */\n\n\nfunction 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 // 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 // name can be duplicated among components, which is convenient\n // to specify multi components (like series) by one name.\n // Ensure that each id is distinct.\n var idMap = zrUtil.createHashMap();\n each(mapResult, function (item, index) {\n var existCpt = item.exist;\n existCpt && idMap.set(existCpt.id, item);\n });\n each(mapResult, function (item, index) {\n var opt = item.option;\n zrUtil.assert(!opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item, 'id duplicates: ' + (opt && opt.id));\n opt && opt.id != null && idMap.set(opt.id, item);\n !item.keyInfo && (item.keyInfo = {});\n }); // Make name and id.\n\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 } // 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\n\n keyInfo.name = opt.name != null ? opt.name + '' : existCpt ? existCpt.name // 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 } else if (opt.id != null) {\n keyInfo.id = opt.id + '';\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\n do {\n keyInfo.id = '\\0' + keyInfo.name + '\\0' + idNum++;\n } while (idMap.get(keyInfo.id));\n }\n\n idMap.set(keyInfo.id, item);\n });\n}\n\nfunction isNameSpecified(componentModel) {\n var name = componentModel.name; // Is specified when `indexOf` get -1 or > 0.\n\n return !!(name && name.indexOf(DUMMY_COMPONENT_NAME_PREFIX));\n}\n/**\n * @public\n * @param {Object} cptOption\n * @return {boolean}\n */\n\n\nfunction isIdInner(cptOption) {\n return isObject(cptOption) && cptOption.id && (cptOption.id + '').indexOf('\\0_ec_\\0') === 0;\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.} batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @param {Array.} batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @return {Array., Array.>} result: [resultBatchA, resultBatchB]\n */\n\n\nfunction compressBatches(batchA, batchB) {\n var mapA = {};\n var mapB = {};\n makeMap(batchA || [], mapA);\n makeMap(batchB || [], mapB, mapA);\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 } else {\n (map[seriesId] || (map[seriesId] = {}))[dataIndex] = 1;\n }\n }\n }\n }\n\n function mapToArray(map, isData) {\n var result = [];\n\n for (var i in map) {\n if (map.hasOwnProperty(i) && map[i] != null) {\n if (isData) {\n result.push(+i);\n } else {\n var dataIndices = mapToArray(map[i], true);\n dataIndices.length && result.push({\n seriesId: i,\n dataIndex: dataIndices\n });\n }\n }\n }\n\n return result;\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.} dataIndex If not found, return undefined/null.\n */\n\n\nfunction queryDataIndex(data, payload) {\n if (payload.dataIndexInside != null) {\n return payload.dataIndexInside;\n } else if (payload.dataIndex != null) {\n return zrUtil.isArray(payload.dataIndex) ? zrUtil.map(payload.dataIndex, function (value) {\n return data.indexOfRawIndex(value);\n }) : data.indexOfRawIndex(payload.dataIndex);\n } else if (payload.name != null) {\n return zrUtil.isArray(payload.name) ? zrUtil.map(payload.name, function (value) {\n return data.indexOfName(value);\n }) : data.indexOfName(payload.name);\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 */\n\n\nfunction 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}\n\nvar innerUniqueIndex = 0;\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.|Array.\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.} [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 */\n\nfunction 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\n if (defaultMainType && !has(finder, defaultMainType + 'Index') && !has(finder, defaultMainType + 'Id') && !has(finder, defaultMainType + 'Name')) {\n finder[defaultMainType + 'Index'] = 0;\n }\n\n var result = {};\n each(finder, function (value, key) {\n var value = finder[key]; // Exclude 'dataIndex' and other illgal keys.\n\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 || !queryType || value == null || queryType === 'index' && value === 'none' || opt && opt.includeMainTypes && zrUtil.indexOf(opt.includeMainTypes, mainType) < 0) {\n return;\n }\n\n var queryParam = {\n mainType: mainType\n };\n\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 return result;\n}\n\nfunction has(obj, prop) {\n return obj && obj.hasOwnProperty(prop);\n}\n\nfunction setAttribute(dom, key, value) {\n dom.setAttribute ? dom.setAttribute(key, value) : dom[key] = value;\n}\n\nfunction getAttribute(dom, key) {\n return dom.getAttribute ? dom.getAttribute(key) : dom[key];\n}\n\nfunction getTooltipRenderMode(renderModeOption) {\n if (renderModeOption === 'auto') {\n // Using html when `document` exists, use richText otherwise\n return env.domSupported ? 'html' : 'richText';\n } else {\n return renderModeOption || 'html';\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 */\n\n\nfunction groupData(array, getKey) {\n var buckets = zrUtil.createHashMap();\n var keys = [];\n zrUtil.each(array, function (item) {\n var key = getKey(item);\n (buckets.get(key) || (keys.push(key), buckets.set(key, []))).push(item);\n });\n return {\n keys: keys,\n buckets: buckets\n };\n}\n\nexports.normalizeToArray = normalizeToArray;\nexports.defaultEmphasis = defaultEmphasis;\nexports.TEXT_STYLE_OPTIONS = TEXT_STYLE_OPTIONS;\nexports.getDataItemValue = getDataItemValue;\nexports.isDataItemOption = isDataItemOption;\nexports.mappingToExists = mappingToExists;\nexports.makeIdAndName = makeIdAndName;\nexports.isNameSpecified = isNameSpecified;\nexports.isIdInner = isIdInner;\nexports.compressBatches = compressBatches;\nexports.queryDataIndex = queryDataIndex;\nexports.makeInner = makeInner;\nexports.parseFinder = parseFinder;\nexports.setAttribute = setAttribute;\nexports.getAttribute = getAttribute;\nexports.getTooltipRenderMode = getTooltipRenderMode;\nexports.groupData = groupData;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 clazzUtil = require(\"../util/clazz\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\n/**\n * @param {Object} [setting]\n */\nfunction Scale(setting) {\n this._setting = setting || {};\n /**\n * Extent\n * @type {Array.}\n * @protected\n */\n\n this._extent = [Infinity, -Infinity];\n /**\n * Step is calculated in adjustExtent\n * @type {Array.}\n * @protected\n */\n\n this._interval = 0;\n this.init && this.init.apply(this, arguments);\n}\n/**\n * Parse input val to valid inner number.\n * @param {*} val\n * @return {number}\n */\n\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 * Normalize value to linear [0, 1], return 0.5 if extent span is 0\n * @param {number} val\n * @return {number}\n */\n\n\nScale.prototype.normalize = function (val) {\n var extent = this._extent;\n\n if (extent[1] === extent[0]) {\n return 0.5;\n }\n\n return (val - extent[0]) / (extent[1] - extent[0]);\n};\n/**\n * Scale normalized value\n * @param {number} val\n * @return {number}\n */\n\n\nScale.prototype.scale = function (val) {\n var extent = this._extent;\n return val * (extent[1] - extent[0]) + extent[0];\n};\n/**\n * Set extent from data\n * @param {Array.} other\n */\n\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]); // not setExtent because in log axis it may transformed to power\n // this.setExtent(extent[0], extent[1]);\n};\n/**\n * Set extent from data\n * @param {module:echarts/data/List} data\n * @param {string} dim\n */\n\n\nScale.prototype.unionExtentFromData = function (data, dim) {\n this.unionExtent(data.getApproximateExtent(dim));\n};\n/**\n * Get extent\n * @return {Array.}\n */\n\n\nScale.prototype.getExtent = function () {\n return this._extent.slice();\n};\n/**\n * Set extent\n * @param {number} start\n * @param {number} end\n */\n\n\nScale.prototype.setExtent = function (start, end) {\n var thisExtent = this._extent;\n\n if (!isNaN(start)) {\n thisExtent[0] = start;\n }\n\n if (!isNaN(end)) {\n thisExtent[1] = end;\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 */\n\n\nScale.prototype.isBlank = function () {\n return this._isBlank;\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 * @abstract\n * @param {*} tick\n * @return {string} label of the tick.\n */\n\nScale.prototype.getLabel = null;\nclazzUtil.enableClassExtend(Scale);\nclazzUtil.enableClassManagement(Scale, {\n registerWhenExtend: true\n});\nvar _default = Scale;\nmodule.exports = _default;","var zrUtil = require(\"../core/util\");\n\nvar Element = require(\"../Element\");\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\n/**\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\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 opts = opts || {};\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 this.__storage = null;\n this.__dirty = true;\n};\n\nGroup.prototype = {\n constructor: Group,\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.}\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\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 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 && nextSibling && nextSibling.parent === this) {\n var children = this._children;\n var idx = children.indexOf(nextSibling);\n\n if (idx >= 0) {\n children.splice(idx, 0, child);\n\n this._doAdd(child);\n }\n }\n\n return this;\n },\n _doAdd: function (child) {\n if (child.parent) {\n child.parent.remove(child);\n }\n\n child.parent = this;\n var storage = this.__storage;\n var zr = this.__zr;\n\n if (storage && storage !== child.__storage) {\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 var idx = zrUtil.indexOf(children, child);\n\n if (idx < 0) {\n return this;\n }\n\n children.splice(idx, 1);\n child.parent = null;\n\n if (storage) {\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n\n zr && zr.refresh();\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\n for (i = 0; i < children.length; i++) {\n child = children[i];\n\n if (storage) {\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n\n child.parent = null;\n }\n\n children.length = 0;\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\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n cb.call(context, child, i);\n }\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\n return this;\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\n if (child instanceof Group) {\n child.addChildrenToStorage(storage);\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\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\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\n if (child.ignore || child.invisible) {\n continue;\n }\n\n var childRect = child.getBoundingRect();\n var transform = child.getLocalTransform(tmpMat); // 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\n if (transform) {\n tmpRect.copy(childRect);\n tmpRect.applyTransform(transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n } else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n\n return rect || tmpRect;\n }\n};\nzrUtil.inherits(Group, Element);\nvar _default = Group;\nmodule.exports = _default;","var vec2 = require(\"./vector\");\n\nvar curve = require(\"./curve\");\n\n/**\n * @author Yi Shen(https://github.com/pissang)\n */\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI2 = Math.PI * 2;\nvar start = vec2.create();\nvar end = vec2.create();\nvar extremity = vec2.create();\n/**\n * 从顶点数组中计算出最小包围盒,写入`min`和`max`中\n * @module zrender/core/bbox\n * @param {Array} points 顶点数组\n * @param {number} min\n * @param {number} max\n */\n\nfunction fromPoints(points, min, max) {\n if (points.length === 0) {\n return;\n }\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 * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {Array.} min\n * @param {Array.} max\n */\n\n\nfunction 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.} min\n * @param {Array.} max\n */\n\nfunction fromCubic(x0, y0, x1, y1, x2, y2, x3, y3, min, max) {\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 n = cubicExtrema(y0, y1, y2, y3, yDim);\n\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 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 * 从二阶贝塞尔曲线(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.} min\n * @param {Array.} max\n */\n\n\nfunction fromQuadratic(x0, y0, x1, y1, x2, y2, min, max) {\n var quadraticExtremum = curve.quadraticExtremum;\n var quadraticAt = curve.quadraticAt; // Find extremities, where derivative in x dim or y dim is zero\n\n var tx = mathMax(mathMin(quadraticExtremum(x0, x1, x2), 1), 0);\n var ty = mathMax(mathMin(quadraticExtremum(y0, y1, y2), 1), 0);\n var x = quadraticAt(x0, x1, x2, tx);\n var y = quadraticAt(y0, y1, y2, ty);\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 * 从圆弧中计算出最小包围盒,写入`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.} min\n * @param {Array.} max\n */\n\n\nfunction fromArc(x, y, rx, ry, startAngle, endAngle, anticlockwise, min, max) {\n var vec2Min = vec2.min;\n var vec2Max = vec2.max;\n var diff = Math.abs(startAngle - endAngle);\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 end[0] = mathCos(endAngle) * rx + x;\n end[1] = mathSin(endAngle) * ry + y;\n vec2Min(min, start, end);\n vec2Max(max, start, end); // Thresh to [0, Math.PI * 2]\n\n startAngle = startAngle % PI2;\n\n if (startAngle < 0) {\n startAngle = startAngle + PI2;\n }\n\n endAngle = endAngle % PI2;\n\n if (endAngle < 0) {\n endAngle = endAngle + PI2;\n }\n\n if (startAngle > endAngle && !anticlockwise) {\n endAngle += PI2;\n } else if (startAngle < endAngle && anticlockwise) {\n startAngle += PI2;\n }\n\n if (anticlockwise) {\n var tmp = endAngle;\n endAngle = startAngle;\n startAngle = tmp;\n } // var number = 0;\n // var step = (anticlockwise ? -Math.PI : Math.PI) / 2;\n\n\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 vec2Min(min, extremity, min);\n vec2Max(max, extremity, max);\n }\n }\n}\n\nexports.fromPoints = fromPoints;\nexports.fromLine = fromLine;\nexports.fromCubic = fromCubic;\nexports.fromQuadratic = fromQuadratic;\nexports.fromArc = fromArc;","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\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\nvar createListSimply = require(\"../helper/createListSimply\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _dimensionHelper = require(\"../../data/helper/dimensionHelper\");\n\nvar getDimensionTypeByAxis = _dimensionHelper.getDimensionTypeByAxis;\n\nvar _sourceHelper = require(\"../../data/helper/sourceHelper\");\n\nvar makeSeriesEncodeForAxisCoordSys = _sourceHelper.makeSeriesEncodeForAxisCoordSys;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar seriesModelMixin = {\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 var ordinalMeta;\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; // FIXME\n // Consider time axis.\n\n if (xAxisType === 'category') {\n option.layout = 'horizontal';\n ordinalMeta = xAxisModel.getOrdinalMeta();\n addOrdinal = true;\n } else if (yAxisType === 'category') {\n option.layout = 'vertical';\n ordinalMeta = yAxisModel.getOrdinalMeta();\n addOrdinal = true;\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; // ??? FIXME make a stage to perform data transfrom.\n // MUST create a new data, consider setOption({}) again.\n\n if (data && addOrdinal) {\n var newOptionData = [];\n zrUtil.each(data, function (item, index) {\n var newItem;\n\n if (item.value && zrUtil.isArray(item.value)) {\n newItem = item.value.slice();\n item.value.unshift(index);\n } else if (zrUtil.isArray(item)) {\n newItem = item.slice();\n item.unshift(index);\n } else {\n newItem = item;\n }\n\n newOptionData.push(newItem);\n });\n option.data = newOptionData;\n }\n\n var defaultValueDimensions = this.defaultValueDimensions;\n var 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 return createListSimply(this, {\n coordDimensions: coordDimensions,\n dimensionsCount: defaultValueDimensions.length + 1,\n encodeDefaulter: zrUtil.curry(makeSeriesEncodeForAxisCoordSys, coordDimensions, this)\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};\nexports.seriesModelMixin = seriesModelMixin;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 createDimensions = require(\"../../data/helper/createDimensions\");\n\nvar List = require(\"../../data/List\");\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar extend = _util.extend;\nvar isArray = _util.isArray;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * [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.} opt opt or coordDimensions\n * The options in opt, see `echarts/data/helper/createDimensions`\n * @param {Array.} [nameList]\n * @return {module:echarts/data/List}\n */\nfunction _default(seriesModel, opt, nameList) {\n opt = isArray(opt) && {\n coordDimensions: opt\n } || extend({}, opt);\n var source = seriesModel.getSource();\n var dimensionsInfo = createDimensions(source, opt);\n var list = new List(dimensionsInfo, seriesModel);\n list.initData(source, nameList);\n return list;\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _model = require(\"../../util/model\");\n\nvar makeInner = _model.makeInner;\nvar normalizeToArray = _model.normalizeToArray;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar inner = makeInner();\n\nfunction getNearestColorPalette(colors, requestColorNum) {\n var paletteNum = colors.length; // TODO colors must be in order\n\n for (var i = 0; i < paletteNum; i++) {\n if (colors[i].length > requestColorNum) {\n return colors[i];\n }\n }\n\n return colors[paletteNum - 1];\n}\n\nvar _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 || {}; // Use `hasOwnProperty` to avoid conflict with Object.prototype.\n\n if (colorNameMap.hasOwnProperty(name)) {\n return colorNameMap[name];\n }\n\n var defaultColorPalette = normalizeToArray(this.get('color', true));\n var layeredColorPalette = this.get('colorLayer', true);\n var colorPalette = requestColorNum == null || !layeredColorPalette ? defaultColorPalette : getNearestColorPalette(layeredColorPalette, requestColorNum); // In case can't find in layered color palette.\n\n colorPalette = colorPalette || defaultColorPalette;\n\n if (!colorPalette || !colorPalette.length) {\n return;\n }\n\n var color = colorPalette[colorIdx];\n\n if (name) {\n colorNameMap[name] = color;\n }\n\n scopeFields.colorIdx = (colorIdx + 1) % colorPalette.length;\n return color;\n }\n};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"./dataZoom/typeDefaulter\");\n\nrequire(\"./dataZoom/DataZoomModel\");\n\nrequire(\"./dataZoom/DataZoomView\");\n\nrequire(\"./dataZoom/SliderZoomModel\");\n\nrequire(\"./dataZoom/SliderZoomView\");\n\nrequire(\"./dataZoom/dataZoomProcessor\");\n\nrequire(\"./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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\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 */\nfunction createWrap() {\n var storage = [];\n var elExistsMap = {};\n var doneCallback;\n return {\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\n elExistsMap[el.id] = 1;\n storage.push({\n el: el,\n target: target,\n time: time,\n delay: delay,\n easing: easing\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\n if (!count) {\n storage.length = 0;\n elExistsMap = {};\n doneCallback && doneCallback();\n }\n }\n }\n };\n}\n\nexports.createWrap = createWrap;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar graphic = require(\"../../util/graphic\");\n\nvar _labelHelper = require(\"../helper/labelHelper\");\n\nvar getDefaultLabel = _labelHelper.getDefaultLabel;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction setLabel(normalStyle, hoverStyle, itemModel, color, seriesModel, dataIndex, labelPositionOutside) {\n var labelModel = itemModel.getModel('label');\n var hoverLabelModel = itemModel.getModel('emphasis.label');\n graphic.setLabelStyle(normalStyle, hoverStyle, labelModel, hoverLabelModel, {\n labelFetcher: seriesModel,\n labelDataIndex: dataIndex,\n defaultText: getDefaultLabel(seriesModel.getData(), dataIndex),\n isRectText: true,\n autoColor: color\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\nexports.setLabel = setLabel;","var curve = require(\"../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 */\nfunction containStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l) {\n return false;\n }\n\n var d = curve.cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);\n return d <= _l / 2;\n}\n\nexports.containStroke = containStroke;","var BoundingRect = require(\"../core/BoundingRect\");\n\nvar imageHelper = require(\"../graphic/helper/image\");\n\nvar _util = require(\"../core/util\");\n\nvar getContext = _util.getContext;\nvar extend = _util.extend;\nvar retrieve2 = _util.retrieve2;\nvar retrieve3 = _util.retrieve3;\nvar trim = _util.trim;\nvar textWidthCache = {};\nvar textWidthCacheCounter = 0;\nvar TEXT_CACHE_MAX = 5000;\nvar STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\nvar DEFAULT_FONT = '12px sans-serif'; // Avoid assign to an exported variable, for transforming to cjs.\n\nvar methods = {};\n\nfunction $override(name, fn) {\n methods[name] = fn;\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {number} width\n */\n\n\nfunction getWidth(text, font) {\n font = font || DEFAULT_FONT;\n var key = text + ':' + font;\n\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\n textWidthCacheCounter++;\n textWidthCache[key] = width;\n return width;\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.} [textPadding]\n * @param {Object} [rich]\n * @param {Object} [truncate]\n * @return {Object} {x, y, width, height, lineHeight}\n */\n\n\nfunction getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) {\n return rich ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) : 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\n if (textPadding) {\n outerWidth += textPadding[1] + textPadding[3];\n }\n\n var outerHeight = contentBlock.outerHeight;\n var x = adjustTextX(0, outerWidth, textAlign);\n var y = adjustTextY(0, outerHeight, textVerticalAlign);\n var rect = new BoundingRect(x, y, outerWidth, outerHeight);\n rect.lineHeight = contentBlock.lineHeight;\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 var x = adjustTextX(0, outerWidth, textAlign);\n var y = adjustTextY(0, outerHeight, textVerticalAlign);\n return new BoundingRect(x, y, outerWidth, outerHeight);\n}\n/**\n * @public\n * @param {number} x\n * @param {number} width\n * @param {string} [textAlign='left']\n * @return {number} Adjusted x.\n */\n\n\nfunction adjustTextX(x, width, textAlign) {\n // FIXME Right to left language\n if (textAlign === 'right') {\n x -= width;\n } else if (textAlign === 'center') {\n x -= width / 2;\n }\n\n return x;\n}\n/**\n * @public\n * @param {number} y\n * @param {number} height\n * @param {string} [textVerticalAlign='top']\n * @return {number} Adjusted y.\n */\n\n\nfunction adjustTextY(y, height, textVerticalAlign) {\n if (textVerticalAlign === 'middle') {\n y -= height / 2;\n } else if (textVerticalAlign === 'bottom') {\n y -= height;\n }\n\n return y;\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 */\n\n\nfunction calculateTextPosition(out, style, rect) {\n var textPosition = style.textPosition;\n var distance = style.textDistance;\n var x = rect.x;\n var y = rect.y;\n distance = distance || 0;\n var height = rect.height;\n var width = rect.width;\n var halfHeight = height / 2;\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\n case 'right':\n x += distance + width;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n\n case 'top':\n x += width / 2;\n y -= distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'bottom':\n x += width / 2;\n y += height + distance;\n textAlign = 'center';\n break;\n\n case 'inside':\n x += width / 2;\n y += halfHeight;\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideLeft':\n x += distance;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n\n case 'insideRight':\n x += width - distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideTop':\n x += width / 2;\n y += distance;\n textAlign = 'center';\n break;\n\n case 'insideBottom':\n x += width / 2;\n y += height - distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideTopLeft':\n x += distance;\n y += distance;\n break;\n\n case 'insideTopRight':\n x += width - distance;\n y += distance;\n textAlign = 'right';\n break;\n\n case 'insideBottomLeft':\n x += distance;\n y += height - distance;\n textVerticalAlign = 'bottom';\n break;\n\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 return out;\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 */\n\n\nfunction adjustTextPositionOnRect(textPosition, rect, distance) {\n var dummyStyle = {\n textPosition: textPosition,\n textDistance: distance\n };\n return calculateTextPosition({}, dummyStyle, rect);\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 */\n\n\nfunction 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); // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n\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 options.font = font;\n var ellipsis = retrieve2(ellipsis, '...');\n options.maxIterations = retrieve2(options.maxIterations, 2);\n var minChar = options.minChar = retrieve2(options.minChar, 0); // FIXME\n // Other languages?\n\n options.cnCharWidth = getWidth('国', font); // FIXME\n // Consider proportional font?\n\n var ascCharWidth = options.ascCharWidth = getWidth('a', font);\n options.placeholder = retrieve2(options.placeholder, ''); // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.\n // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.\n\n var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n\n for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n contentWidth -= ascCharWidth;\n }\n\n var ellipsisWidth = getWidth(ellipsis, font);\n\n if (ellipsisWidth > contentWidth) {\n ellipsis = '';\n ellipsisWidth = 0;\n }\n\n contentWidth = containerWidth - ellipsisWidth;\n options.ellipsis = ellipsis;\n options.ellipsisWidth = ellipsisWidth;\n options.contentWidth = contentWidth;\n options.containerWidth = containerWidth;\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 ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth) : lineWidth > 0 ? Math.floor(textLine.length * contentWidth / lineWidth) : 0;\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\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\n return i;\n}\n/**\n * @public\n * @param {string} font\n * @return {number} line height\n */\n\n\nfunction getLineHeight(font) {\n // FIXME A rough approach.\n return getWidth('国', font);\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {Object} width\n */\n\n\nfunction measureText(text, font) {\n return methods.measureText(text, font);\n} // Avoid assign to an exported variable, for transforming to cjs.\n\n\nmethods.measureText = function (text, font) {\n var ctx = getContext();\n ctx.font = font || DEFAULT_FONT;\n return ctx.measureText(text);\n};\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {Object} [truncate]\n * @return {Object} block: {lineHeight, lines, height, outerHeight, canCacheByTextString}\n * Notice: for performance, do not calculate outerWidth util needed.\n * `canCacheByTextString` means the result `lines` is only determined by the input `text`.\n * Thus we can simply comparing the `input` text to determin whether the result changed,\n * without travel the result `lines`.\n */\n\n\nfunction parsePlainText(text, font, padding, textLineHeight, truncate) {\n text != null && (text += '');\n var lineHeight = retrieve2(textLineHeight, getLineHeight(font));\n var lines = text ? text.split('\\n') : [];\n var height = lines.length * lineHeight;\n var outerHeight = height;\n var canCacheByTextString = true;\n\n if (padding) {\n outerHeight += padding[0] + padding[2];\n }\n\n if (text && truncate) {\n canCacheByTextString = false;\n var truncOuterHeight = truncate.outerHeight;\n var truncOuterWidth = truncate.outerWidth;\n\n if (truncOuterHeight != null && outerHeight > truncOuterHeight) {\n text = '';\n lines = [];\n } else if (truncOuterWidth != null) {\n var options = prepareTruncateOptions(truncOuterWidth - (padding ? padding[1] + padding[3] : 0), font, truncate.ellipsis, {\n minChar: truncate.minChar,\n placeholder: truncate.placeholder\n }); // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n\n for (var i = 0, len = lines.length; i < len; i++) {\n lines[i] = truncateSingleLine(lines[i], options);\n }\n }\n }\n\n return {\n lines: lines,\n height: height,\n outerHeight: outerHeight,\n lineHeight: lineHeight,\n canCacheByTextString: canCacheByTextString\n };\n}\n/**\n * 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 */\n\n\nfunction parseRichText(text, style) {\n var contentBlock = {\n lines: [],\n width: 0,\n height: 0\n };\n text != null && (text += '');\n\n if (!text) {\n return contentBlock;\n }\n\n var lastIndex = STYLE_REG.lastIndex = 0;\n var result;\n\n while ((result = STYLE_REG.exec(text)) != null) {\n var matchedIndex = result.index;\n\n if (matchedIndex > lastIndex) {\n pushTokens(contentBlock, text.substring(lastIndex, matchedIndex));\n }\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; // For `textWidth: 100%`\n\n var pendingList = [];\n var stlPadding = style.textPadding;\n var truncate = style.truncate;\n var truncateWidth = truncate && truncate.outerWidth;\n var truncateHeight = truncate && truncate.outerHeight;\n\n if (stlPadding) {\n truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]);\n truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]);\n } // Calculate layout info of tokens.\n\n\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] || {}; // textPadding should not inherit from style.\n\n var textPadding = token.textPadding = tokenStyle.textPadding; // textFont has been asigned to font by `normalizeStyle`.\n\n var font = token.font = tokenStyle.font || style.font; // textHeight can be used when textVerticalAlign is specified in token.\n\n var tokenHeight = token.textHeight = retrieve2( // textHeight should not be inherited, consider it can be specified\n // as box height of the block.\n tokenStyle.textHeight, getLineHeight(font));\n textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n token.height = tokenHeight;\n token.lineHeight = retrieve3(tokenStyle.textLineHeight, style.textLineHeight, tokenHeight);\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 {\n lines: [],\n width: 0,\n height: 0\n };\n }\n\n token.textWidth = getWidth(token.text, font);\n var tokenWidth = tokenStyle.textWidth;\n var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === 'auto'; // Percent width, can be `100%`, can be used in drawing separate\n // line when box width is needed to be auto.\n\n if (typeof tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') {\n token.percentWidth = tokenWidth;\n pendingList.push(token);\n tokenWidth = 0; // Do not truncate in this case, because there is no user case\n // and it is too complicated.\n } else {\n if (tokenWidthNotSpecified) {\n tokenWidth = token.textWidth; // FIXME: If image is not loaded and textWidth is not specified, calling\n // `getBoundingRect()` will not get correct result.\n\n var textBackgroundColor = tokenStyle.textBackgroundColor;\n var bgImg = textBackgroundColor && textBackgroundColor.image; // 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\n if (bgImg) {\n bgImg = imageHelper.findExistImage(bgImg);\n\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 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 } else {\n token.text = truncateText(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; // Should not base on outerWidth, because token can not be placed out of padding.\n\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 }; // The first token should be appended to the last line.\n\n if (!i) {\n var tokens = (lines[lines.length - 1] || (lines[0] = {\n tokens: []\n })).tokens; // 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\n var tokensLen = tokens.length;\n tokensLen === 1 && tokens[0].isLineHolder ? tokens[0] = token : // 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 } // Other tokens always start a new line.\n else {\n // If there is '', insert it as a placeholder.\n lines.push({\n tokens: [token]\n });\n }\n }\n}\n\nfunction 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) && [style.fontStyle, style.fontWeight, (style.fontSize || 12) + 'px', // If font properties are defined, `fontFamily` should not be ignored.\n style.fontFamily || 'sans-serif'].join(' ');\n return font && trim(font) || style.textFont || style.font;\n}\n\nexports.DEFAULT_FONT = DEFAULT_FONT;\nexports.$override = $override;\nexports.getWidth = getWidth;\nexports.getBoundingRect = getBoundingRect;\nexports.adjustTextX = adjustTextX;\nexports.adjustTextY = adjustTextY;\nexports.calculateTextPosition = calculateTextPosition;\nexports.adjustTextPositionOnRect = adjustTextPositionOnRect;\nexports.truncateText = truncateText;\nexports.getLineHeight = getLineHeight;\nexports.measureText = measureText;\nexports.parsePlainText = parsePlainText;\nexports.parseRichText = parseRichText;\nexports.makeFont = makeFont;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar each = _util.each;\n\nvar Group = require(\"zrender/lib/container/Group\");\n\nvar componentUtil = require(\"../util/component\");\n\nvar clazzUtil = require(\"../util/clazz\");\n\nvar modelUtil = require(\"../util/model\");\n\nvar graphicUtil = require(\"../util/graphic\");\n\nvar _task = require(\"../stream/task\");\n\nvar createTask = _task.createTask;\n\nvar createRenderPlanner = require(\"../chart/helper/createRenderPlanner\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar inner = modelUtil.makeInner();\nvar renderPlanner = createRenderPlanner();\n\nfunction Chart() {\n /**\n * @type {module:zrender/container/Group}\n * @readOnly\n */\n this.group = new Group();\n /**\n * @type {string}\n * @readOnly\n */\n\n this.uid = componentUtil.getUID('viewChart');\n this.renderTask = createTask({\n plan: renderTaskPlan,\n reset: renderTaskReset\n });\n this.renderTask.context = {\n view: this\n };\n}\n\nChart.prototype = {\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.} 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};\nvar chartProto = Chart.prototype;\n\nchartProto.updateView = chartProto.updateLayout = chartProto.updateVisual = function (seriesModel, ecModel, api, payload) {\n this.render(seriesModel, ecModel, api, payload);\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 */\n\n\nfunction elSetState(el, state, highlightDigit) {\n if (el) {\n el.trigger(state, highlightDigit);\n\n if (el.isGroup // Simple optimize.\n && !graphicUtil.isHighDownDispatcher(el)) {\n for (var i = 0, len = el.childCount(); i < len; i++) {\n elSetState(el.childAt(i), state, highlightDigit);\n }\n }\n }\n}\n/**\n * @param {module:echarts/data/List} data\n * @param {Object} payload\n * @param {string} state 'normal'|'emphasis'\n */\n\n\nfunction toggleHighlight(data, payload, state) {\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n var highlightDigit = payload && payload.highlightKey != null ? graphicUtil.getHighlightDigit(payload.highlightKey) : null;\n\n if (dataIndex != null) {\n each(modelUtil.normalizeToArray(dataIndex), function (dataIdx) {\n elSetState(data.getItemGraphicEl(dataIdx), state, highlightDigit);\n });\n } else {\n data.eachItemGraphicEl(function (el) {\n elSetState(el, state, highlightDigit);\n });\n }\n} // Enable Chart.extend.\n\n\nclazzUtil.enableClassExtend(Chart, ['dispose']); // Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\n\nclazzUtil.enableClassManagement(Chart, {\n registerWhenExtend: true\n});\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; // ???! remove updateView updateVisual\n\n var progressiveRender = seriesModel.pipelineContext.progressiveRender;\n var view = context.view;\n var updateMethod = payload && inner(payload).updateMethod;\n var methodName = progressiveRender ? 'incrementalPrepareRender' : updateMethod && view[updateMethod] ? updateMethod // `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(params, context.model, context.ecModel, context.api, context.payload);\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(context.model, context.ecModel, context.api, context.payload);\n }\n }\n};\nvar _default = Chart;\nmodule.exports = _default;","var logError = require(\"../core/log\");\n\nvar vmlCore = require(\"./core\");\n\nvar _util = require(\"../core/util\");\n\nvar each = _util.each;\n\n/**\n * VML Painter.\n *\n * @module zrender/vml/Painter\n */\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\n/**\n * @alias module:zrender/vml/Painter\n */\n\n\nfunction VMLPainter(root, storage) {\n vmlCore.initVML();\n this.root = root;\n this.storage = storage;\n var vmlViewport = document.createElement('div');\n var vmlRoot = document.createElement('div');\n vmlViewport.style.cssText = 'display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;';\n vmlRoot.style.cssText = 'position:absolute;left:0;top:0;';\n root.appendChild(vmlViewport);\n this._vmlRoot = vmlRoot;\n this._vmlViewport = vmlViewport;\n this.resize(); // Modify storage\n\n var oldDelFromStorage = storage.delFromStorage;\n var oldAddToStorage = storage.addToStorage;\n\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 oldAddToStorage.call(storage, el);\n };\n\n this._firstPaint = true;\n}\n\nVMLPainter.prototype = {\n constructor: VMLPainter,\n getType: function () {\n return 'vml';\n },\n\n /**\n * @return {HTMLDivElement}\n */\n getViewportRoot: function () {\n return this._vmlViewport;\n },\n getViewportRootOffset: function () {\n var viewportRoot = this.getViewportRoot();\n\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 var list = this.storage.getDisplayList(true, true);\n\n this._paintList(list);\n },\n _paintList: function (list) {\n var vmlRoot = this._vmlRoot;\n\n for (var i = 0; i < list.length; i++) {\n var el = list[i];\n\n if (el.invisible || el.ignore) {\n if (!el.__alreadyNotVisible) {\n el.onRemove(vmlRoot);\n } // Set as already invisible\n\n\n el.__alreadyNotVisible = true;\n } else {\n if (el.__alreadyNotVisible) {\n el.onAdd(vmlRoot);\n }\n\n el.__alreadyNotVisible = false;\n\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\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 // FIXME 如果每次都先 removeChild 可能会导致一些填充和描边的效果改变\n this._vmlViewport.appendChild(vmlRoot);\n\n this._firstPaint = false;\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 var vmlViewportStyle = this._vmlViewport.style;\n vmlViewportStyle.width = width + 'px';\n vmlViewportStyle.height = height + 'px';\n }\n },\n dispose: function () {\n this.root.innerHTML = '';\n this._vmlRoot = this._vmlViewport = this.storage = null;\n },\n getWidth: function () {\n return this._width;\n },\n getHeight: function () {\n return this._height;\n },\n clear: function () {\n if (this._vmlViewport) {\n this.root.removeChild(this._vmlViewport);\n }\n },\n _getWidth: function () {\n var root = this.root;\n var stl = root.currentStyle;\n return (root.clientWidth || parseInt10(stl.width)) - parseInt10(stl.paddingLeft) - parseInt10(stl.paddingRight) | 0;\n },\n _getHeight: function () {\n var root = this.root;\n var stl = root.currentStyle;\n return (root.clientHeight || parseInt10(stl.height)) - parseInt10(stl.paddingTop) - parseInt10(stl.paddingBottom) | 0;\n }\n}; // Not supported methods\n\nfunction createMethodNotSupport(method) {\n return function () {\n logError('In IE8.0 VML mode painter not support method \"' + method + '\"');\n };\n} // Unsupported methods\n\n\neach(['getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer', 'toDataURL', 'pathToImage'], function (name) {\n VMLPainter.prototype[name] = createMethodNotSupport(name);\n});\nvar _default = VMLPainter;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction _default(option) {\n if (!option || !zrUtil.isArray(option.series)) {\n return;\n } // Translate 'k' to 'candlestick'.\n\n\n zrUtil.each(option.series, function (seriesItem) {\n if (zrUtil.isObject(seriesItem) && seriesItem.type === 'k') {\n seriesItem.type = 'candlestick';\n }\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\nvar visualDefault = require(\"../../visual/visualDefault\");\n\nvar VisualMapping = require(\"../../visual/VisualMapping\");\n\nvar visualSolution = require(\"../../visual/visualSolution\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar numberUtil = require(\"../../util/number\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar 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;\nvar VisualMapModel = echarts.extendComponentModel({\n type: 'visualMap',\n dependencies: ['series'],\n\n /**\n * @readOnly\n * @type {Array.}\n */\n stateList: ['inRange', 'outOfRange'],\n\n /**\n * @readOnly\n * @type {Array.}\n */\n replacableOptionKeys: ['inRange', 'outOfRange', 'target', 'controller', 'color'],\n\n /**\n * [lowerBound, upperBound]\n *\n * @readOnly\n * @type {Array.}\n */\n dataBound: [-Infinity, Infinity],\n\n /**\n * @readOnly\n * @type {string|Object}\n */\n layoutMode: {\n type: 'box',\n ignoreSize: true\n },\n\n /**\n * @protected\n */\n defaultOption: {\n show: true,\n zlevel: 0,\n z: 4,\n seriesIndex: 'all',\n // 'all' or null/undefined: all series.\n // A number or an array of number: the specified series.\n // set min: 0, max: 200, only for campatible with ec2.\n // In fact min max should not have default value.\n min: 0,\n // min value, must specified if pieces is not specified.\n max: 200,\n // max value, must specified if pieces is not specified.\n dimension: null,\n inRange: null,\n // 'color', 'colorHue', 'colorSaturation', 'colorLightness', 'colorAlpha',\n // 'symbol', 'symbolSize'\n outOfRange: null,\n // 'color', 'colorHue', 'colorSaturation',\n // 'colorLightness', 'colorAlpha',\n // 'symbol', 'symbolSize'\n left: 0,\n // 'center' ¦ 'left' ¦ 'right' ¦ {number} (px)\n right: null,\n // The same as left.\n top: null,\n // 'top' ¦ 'bottom' ¦ 'center' ¦ {number} (px)\n bottom: 0,\n // The same as top.\n itemWidth: null,\n itemHeight: null,\n inverse: false,\n orient: 'vertical',\n // 'horizontal' ¦ 'vertical'\n backgroundColor: 'rgba(0,0,0,0)',\n borderColor: '#ccc',\n // 值域边框颜色\n contentColor: '#5793f3',\n inactiveColor: '#aaa',\n borderWidth: 0,\n // 值域边框线宽,单位px,默认为0(无边框)\n padding: 5,\n // 值域内边距,单位px,默认各方向内边距为5,\n // 接受数组分别设定上右下左边距,同css\n textGap: 10,\n //\n precision: 0,\n // 小数精度,默认为0,无小数点\n color: null,\n //颜色(deprecated,兼容ec2,顺序同pieces,不同于inRange/outOfRange)\n formatter: null,\n text: null,\n // 文本,如['高', '低'],兼容ec2,text[0]对应高值,text[1]对应低值\n textStyle: {\n color: '#333' // 值域文字颜色\n\n }\n },\n\n /**\n * @protected\n */\n init: function (option, parentModel, ecModel) {\n /**\n * @private\n * @type {Array.}\n */\n this._dataExtent;\n /**\n * @readOnly\n */\n\n this.targetVisuals = {};\n /**\n * @readOnly\n */\n\n this.controllerVisuals = {};\n /**\n * @readOnly\n */\n\n this.textStyleModel;\n /**\n * [width, height]\n * @readOnly\n * @type {Array.}\n */\n\n this.itemSize;\n this.mergeDefaultAndTheme(option, ecModel);\n },\n\n /**\n * @protected\n */\n optionUpdated: function (newOption, isInit) {\n var thisOption = this.option; // FIXME\n // necessary?\n // Disable realtime view update if canvas is not supported.\n\n if (!env.canvasSupported) {\n thisOption.realtime = false;\n }\n\n !isInit && visualSolution.replaceVisualOption(thisOption, newOption, this.replacableOptionKeys);\n this.textStyleModel = this.getModel('textStyle');\n this.resetItemSize();\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 this.controllerVisuals = visualSolution.createVisualMappings(this.option.controller, stateList, supplementVisualOption);\n this.targetVisuals = visualSolution.createVisualMappings(this.option.target, stateList, supplementVisualOption);\n },\n\n /**\n * @protected\n * @return {Array.} 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 } 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.} value Real value, or this.dataBound[0 or 1].\n * @param {boolean} [isCategory=false] Only available when value is number.\n * @param {Array.} 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 ? value : isMinMax ? [toFixed(value[0]), toFixed(value[1])] : toFixed(value);\n\n if (zrUtil.isString(formatter)) {\n return formatter.replace('{value}', isMinMax ? textValue[0] : textValue).replace('{value2}', isMinMax ? textValue[1] : textValue);\n } else if (zrUtil.isFunction(formatter)) {\n return isMinMax ? formatter(value[0], value[1]) : formatter(value);\n }\n\n if (isMinMax) {\n if (value[0] === dataBound[0]) {\n return edgeSymbols[0] + ' ' + textValue[1];\n } else if (value[1] === dataBound[1]) {\n return edgeSymbols[1] + ' ' + textValue[0];\n } else {\n return textValue[0] + ' - ' + textValue[1];\n }\n } else {\n // Format single value (includes category case).\n return textValue;\n }\n\n function toFixed(val) {\n return val === dataBound[0] ? 'min' : val === dataBound[1] ? 'max' : (+val).toFixed(Math.min(precision, 20));\n }\n },\n\n /**\n * @protected\n */\n resetExtent: function () {\n var thisOption = this.option; // 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 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\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\n for (var i = dimNames.length - 1; i >= 0; i--) {\n var dimName = dimNames[i];\n var dimInfo = list.getDimensionInfo(dimName);\n\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 = {\n inRange: thisOption.inRange,\n outOfRange: thisOption.outOfRange\n };\n var target = thisOption.target || (thisOption.target = {});\n var controller = thisOption.controller || (thisOption.controller = {});\n zrUtil.merge(target, base); // Do not override\n\n zrUtil.merge(controller, base); // Do not override\n\n var isCategory = this.isCategory();\n completeSingle.call(this, target);\n completeSingle.call(this, controller);\n completeInactive.call(this, target, 'inRange', 'outOfRange'); // completeInactive.call(this, target, 'outOfRange', 'inRange');\n\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) // If there has been inRange: {symbol: ...}, adding color is a mistake.\n // So adding color only when no inRange defined.\n && !base.inRange) {\n base.inRange = {\n color: thisOption.color.slice().reverse()\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\n\n base.inRange = base.inRange || {\n color: ecModel.get('gradientColor')\n }; // If using shortcut like: {inRange: 'symbol'}, complete default value.\n\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\n if (defa) {\n base[state] = {};\n base[state][visualType] = defa;\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; // Compatibable with ec2:\n // Only inactive color to rgba(0,0,0,0) can not\n // make label transparent, so use opacity also.\n\n if (visualType === 'color' && !optAbsent.hasOwnProperty('opacity') && !optAbsent.hasOwnProperty('colorAlpha')) {\n optAbsent.opacity = [0, 0];\n }\n }\n });\n }\n }\n\n function completeController(controller) {\n var symbolExists = (controller.inRange || {}).symbol || (controller.outOfRange || {}).symbol;\n var symbolSizeExists = (controller.inRange || {}).symbolSize || (controller.outOfRange || {}).symbolSize;\n var inactiveColor = this.get('inactiveColor');\n each(this.stateList, function (state) {\n var itemSize = this.itemSize;\n var visuals = controller[state]; // Set inactive color for controller if no other color\n // attr (like colorAlpha) specified.\n\n if (!visuals) {\n visuals = controller[state] = {\n color: isCategory ? inactiveColor : [inactiveColor]\n };\n } // Consistent symbol and symbolSize if not specified.\n\n\n if (visuals.symbol == null) {\n visuals.symbol = symbolExists && zrUtil.clone(symbolExists) || (isCategory ? 'roundRect' : ['roundRect']);\n }\n\n if (visuals.symbolSize == null) {\n visuals.symbolSize = symbolSizeExists && zrUtil.clone(symbolSizeExists) || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]);\n } // Filter square and none.\n\n\n visuals.symbol = mapVisual(visuals.symbol, function (symbol) {\n return symbol === 'none' || symbol === 'square' ? 'roundRect' : symbol;\n }); // Normalize symbolSize\n\n var symbolSize = visuals.symbolSize;\n\n if (symbolSize != null) {\n var max = -Infinity; // symbolSize can be object when categories defined.\n\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 }, this);\n }\n },\n\n /**\n * @protected\n */\n resetItemSize: function () {\n this.itemSize = [parseFloat(this.get('itemWidth')), parseFloat(this.get('itemHeight'))];\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});\nvar _default = VisualMapModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction 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 var result = axis.type === 'category' ? axis.getBandWidth() : 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 }, this);\n}\n\nfunction _default(coordSys) {\n var radiusAxis = coordSys.getRadiusAxis();\n var angleAxis = coordSys.getAngleAxis();\n var radius = radiusAxis.getExtent();\n radius[0] > radius[1] && radius.reverse();\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\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _model = require(\"../../util/model\");\n\nvar makeInner = _model.makeInner;\n\nvar modelHelper = require(\"./modelHelper\");\n\nvar findPointFromSeries = require(\"./findPointFromSeries\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar each = zrUtil.each;\nvar curry = zrUtil.curry;\nvar inner = makeInner();\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.} [payload.x] x and y, which are mandatory, specify a point to\n * trigger axisPointer and tooltip.\n * @param {Array.} [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.|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 */\n\nfunction _default(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; // Pending\n // See #6121. But we are not able to reproduce it yet.\n\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\n var isIllegalPoint = illegalPoint(point); // 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\n var inputAxesInfo = finder.axesInfo;\n var axesInfo = coordSysAxesInfo.axesInfo;\n var shouldHide = currTrigger === 'leave' || illegalPoint(point);\n var outputFinder = {};\n var showValueMap = {};\n var dataByCoordSys = {\n list: [],\n map: {}\n };\n var updaters = {\n showPointer: curry(showPointer, showValueMap),\n showTooltip: curry(showTooltip, dataByCoordSys)\n }; // Process for triggered axes.\n\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 each(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function (axisInfo, key) {\n var axis = axisInfo.axis;\n var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo); // If no inputAxesInfo, no axis is restricted.\n\n if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) {\n var val = inputAxisInfo && inputAxisInfo.value;\n\n if (val == null && !isIllegalPoint) {\n val = axis.pointToData(point);\n }\n\n val != null && processOnAxis(axisInfo, val, updaters, false, outputFinder);\n }\n });\n }); // Process for linked axes.\n\n var linkTriggers = {};\n each(axesInfo, function (tarAxisInfo, tarKey) {\n var linkGroup = tarAxisInfo.linkGroup; // If axis has been triggered in the previous stage, it should not be triggered by link.\n\n if (linkGroup && !showValueMap[tarKey]) {\n each(linkGroup.axesInfo, function (srcAxisInfo, srcKey) {\n var srcValItem = showValueMap[srcKey]; // If srcValItem exist, source axis is triggered, so link to target axis.\n\n if (srcAxisInfo !== tarAxisInfo && srcValItem) {\n var val = srcValItem.value;\n linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper(val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo))));\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 updateModelActually(showValueMap, axesInfo, outputFinder);\n dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction);\n dispatchHighDownActually(axesInfo, dispatchAction, api);\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 } // Heavy calculation. So put it after axis.containData checking.\n\n\n var payloadInfo = buildPayloadsBySeries(newValue, axisInfo);\n var payloadBatch = payloadInfo.payloadBatch;\n var snapToValue = payloadInfo.snapToValue; // Fill content of event obj for echarts.connect.\n // By defualt use the first involved series data as a sample to connect.\n\n if (payloadBatch[0] && outputFinder.seriesIndex == null) {\n zrUtil.extend(outputFinder, payloadBatch[0]);\n } // If no linkSource input, this process is for collecting link\n // target, where snap should not be accepted.\n\n\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); // Tooltip should always be snapToValue, otherwise there will be\n // incorrect \"axis value ~ series value\" mapping displayed in tooltip.\n\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 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 } else {\n dataIndices = series.getData().indicesOfNearest(dataDim[0], value, // 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\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); // Consider category case\n\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\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 return {\n payloadBatch: payloadBatch,\n snapToValue: snapToValue\n };\n}\n\nfunction showPointer(showValueMap, axisInfo, value, payloadBatch) {\n showValueMap[axisInfo.key] = {\n value: value,\n payloadBatch: payloadBatch\n };\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; // If no data, do not create anything in dataByCoordSys,\n // whose length will be used to judge whether dispatch action.\n\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\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 = []; // Basic logic: If no 'show' required, 'hide' this axisPointer.\n\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; // For label formatter param and highlight.\n\n option.seriesDataIndices = (valItem.payloadBatch || []).slice();\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 } // If status is 'hide', should be no info in payload.\n\n\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({\n type: 'hideTip'\n });\n return;\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\n\n var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};\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 var zr = api.getZr();\n var highDownKey = 'axisPointerLastHighlights';\n var lastHighlights = inner(zr)[highDownKey] || {};\n var newHighlights = inner(zr)[highDownKey] = {}; // Update highlight/downplay status according to axisPointer model.\n // Build hash map and remove duplicate incidentally.\n\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 }); // Diff.\n\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 toDownplay.length && api.dispatchAction({\n type: 'downplay',\n escapeConnect: true,\n batch: toDownplay\n });\n toHighlight.length && api.dispatchAction({\n type: 'highlight',\n escapeConnect: true,\n batch: toHighlight\n });\n}\n\nfunction findInputAxisInfo(inputAxesInfo, axisInfo) {\n for (var i = 0; i < (inputAxesInfo || []).length; i++) {\n var inputAxisInfo = inputAxesInfo[i];\n\n if (axisInfo.axis.dim === inputAxisInfo.axisDim && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex) {\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\nmodule.exports = _default;","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAABUCAYAAADAkmT2AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAMqADAAQAAAABAAAAVAAAAABjuS1GAAABvklEQVR4Ae2bMU+EQBSED3INljYWdvw7WosrTEwsbK38f0CCIblCO7BAwLcme42ns1swOXBoyGV2mTfzbXLV7nYbeZLYHE3T3A7D8Bq7b8n1SZK8p0saML8dTYQ5HPKy03Ftp+NtU0Q2c7QUBJ1fti4i7MaRn4ighti6iLAbR34ighpi6yLCbhz5iQhqiK2LCLtx5CciqCG2LiLsxpGfiKCG2LqIsBtHfiKCGmLrIsJuHPmJCGqIrYsIu3HkJyKoIbYuIuzGkZ+IoIbYuoiwG0d+IoIaYusiwm4c+YkIaoitiwi7ceQnIqghti4i7MaRn4ighti6iLAbR34ighpi6yLCbhz5iQhqiK3/byLH4/GG3TjyiyLiApRl+dz3fYU+zNb3IYYuQNd1BwtQ2PpsnueQbdQ1fwZZQwDf1tkgawpwNsgaA/gg3/cQfQC7z1fY+c+8CN4PQGfIbtZ7dw8xqarqYD8eIwIwBozycEH29ryM4/hpQVyg4P+HNE2fotyWXfxxuuJq10UzC1RM0xQUKM/z095lZwz7+o9hQgNdfBCfHwVaTRAUaHVBfgt0aUH8nMHvtm2v6rq+C95AWvgFd0KipcJ231MAAAAASUVORK5CYII=\"","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * @event legendScroll\n * @type {Object}\n * @property {string} type 'legendScroll'\n * @property {string} scrollDataIndex\n */\necharts.registerAction('legendScroll', 'legendscroll', function (payload, ecModel) {\n var scrollDataIndex = payload.scrollDataIndex;\n scrollDataIndex != null && ecModel.eachComponent({\n mainType: 'legend',\n subType: 'scroll',\n query: payload\n }, function (legendModel) {\n legendModel.setScrollDataIndex(scrollDataIndex);\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 zrUtil = require(\"zrender/lib/core/util\");\n\nvar Axis = require(\"../Axis\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * 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.} 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\n this.type = axisType || 'value';\n /**\n * Axis position\n * - 'top'\n * - 'bottom'\n * - 'left'\n * - 'right'\n */\n\n this.position = position || 'bottom';\n};\n\nAxis2D.prototype = {\n constructor: Axis2D,\n\n /**\n * Index of axis, can be used as key\n */\n index: 0,\n\n /**\n * Implemented in .\n * @return {Array.}\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 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.}\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 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};\nzrUtil.inherits(Axis2D, Axis);\nvar _default = Axis2D;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar createHashMap = _util.createHashMap;\nvar isString = _util.isString;\nvar isArray = _util.isArray;\nvar each = _util.each;\nvar assert = _util.assert;\n\nvar _parseSVG = require(\"zrender/lib/tool/parseSVG\");\n\nvar parseXML = _parseSVG.parseXML;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar storage = createHashMap(); // For minimize the code size of common echarts package,\n// do not put too much logic in this module.\n\nvar _default = {\n // The format of record: see `echarts.registerMap`.\n // Compatible with previous `echarts.registerMap`.\n registerMap: function (mapName, rawGeoJson, rawSpecialAreas) {\n var records;\n\n if (isArray(rawGeoJson)) {\n records = rawGeoJson;\n } else if (rawGeoJson.svg) {\n records = [{\n type: 'svg',\n source: rawGeoJson.svg,\n specialAreas: rawGeoJson.specialAreas\n }];\n } else {\n // Backward compatibility.\n if (rawGeoJson.geoJson && !rawGeoJson.features) {\n rawSpecialAreas = rawGeoJson.specialAreas;\n rawGeoJson = rawGeoJson.geoJson;\n }\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 var parse = parsers[type];\n parse(record);\n });\n return storage.set(mapName, records);\n },\n retrieveMap: function (mapName) {\n return storage.get(mapName);\n }\n};\nvar parsers = {\n geoJSON: function (record) {\n var source = record.source;\n record.geoJSON = !isString(source) ? source : typeof JSON !== 'undefined' && JSON.parse ? JSON.parse(source) : new Function('return (' + source + ');')();\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};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar createHashMap = _util.createHashMap;\nvar isTypedArray = _util.isTypedArray;\n\nvar _clazz = require(\"../util/clazz\");\n\nvar enableClassCheck = _clazz.enableClassCheck;\n\nvar _sourceType = require(\"./helper/sourceType\");\n\nvar SOURCE_FORMAT_ORIGINAL = _sourceType.SOURCE_FORMAT_ORIGINAL;\nvar SERIES_LAYOUT_BY_COLUMN = _sourceType.SERIES_LAYOUT_BY_COLUMN;\nvar SOURCE_FORMAT_UNKNOWN = _sourceType.SOURCE_FORMAT_UNKNOWN;\nvar SOURCE_FORMAT_TYPED_ARRAY = _sourceType.SOURCE_FORMAT_TYPED_ARRAY;\nvar SOURCE_FORMAT_KEYED_COLUMNS = _sourceType.SOURCE_FORMAT_KEYED_COLUMNS;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * [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.} [dimensionsDefine]\n * @param {Objet|HashMap} [encodeDefine]\n * @param {number} [startIndex=0]\n * @param {number} [dimensionsDetectCount]\n */\nfunction Source(fields) {\n /**\n * @type {boolean}\n */\n this.fromDataset = fields.fromDataset;\n /**\n * Not null/undefined.\n * @type {Array|Object}\n */\n\n this.data = fields.data || (fields.sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS ? {} : []);\n /**\n * See also \"detectSourceFormat\".\n * Not null/undefined.\n * @type {string}\n */\n\n this.sourceFormat = fields.sourceFormat || SOURCE_FORMAT_UNKNOWN;\n /**\n * 'row' or 'column'\n * Not null/undefined.\n * @type {string} seriesLayoutBy\n */\n\n this.seriesLayoutBy = fields.seriesLayoutBy || SERIES_LAYOUT_BY_COLUMN;\n /**\n * dimensions definition in option.\n * can be null/undefined.\n * @type {Array.}\n */\n\n this.dimensionsDefine = fields.dimensionsDefine;\n /**\n * encode definition in option.\n * can be null/undefined.\n * @type {Objet|HashMap}\n */\n\n this.encodeDefine = fields.encodeDefine && createHashMap(fields.encodeDefine);\n /**\n * Not null/undefined, uint.\n * @type {number}\n */\n\n this.startIndex = fields.startIndex || 0;\n /**\n * Can be null/undefined (when unknown), uint.\n * @type {number}\n */\n\n this.dimensionsDetectCount = fields.dimensionsDetectCount;\n}\n/**\n * Wrap original series data for some compatibility cases.\n */\n\n\nSource.seriesDataToSource = function (data) {\n return new Source({\n data: data,\n sourceFormat: isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL,\n fromDataset: false\n });\n};\n\nenableClassCheck(Source);\nvar _default = Source;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _number = require(\"../../util/number\");\n\nvar parsePercent = _number.parsePercent;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar each = zrUtil.each;\n\nfunction _default(ecModel) {\n var groupResult = groupSeriesByAxis(ecModel);\n each(groupResult, function (groupItem) {\n var seriesModels = groupItem.seriesModels;\n\n if (!seriesModels.length) {\n return;\n }\n\n calculateBase(groupItem);\n each(seriesModels, function (seriesModel, idx) {\n layoutSingleSeries(seriesModel, groupItem.boxOffsetList[idx], groupItem.boxWidthList[idx]);\n });\n });\n}\n/**\n * Group series by axis.\n */\n\n\nfunction groupSeriesByAxis(ecModel) {\n var result = [];\n var axisList = [];\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] = {\n axis: baseAxis,\n seriesModels: []\n };\n }\n\n result[idx].seriesModels.push(seriesModel);\n });\n return result;\n}\n/**\n * Calculate offset and box width for each series.\n */\n\n\nfunction calculateBase(groupItem) {\n var extent;\n var baseAxis = groupItem.axis;\n var seriesModels = groupItem.seriesModels;\n var seriesCount = seriesModels.length;\n var boxWidthList = groupItem.boxWidthList = [];\n var boxOffsetList = groupItem.boxOffsetList = [];\n var boundList = [];\n var bandWidth;\n\n if (baseAxis.type === 'category') {\n bandWidth = baseAxis.getBandWidth();\n } else {\n var maxDataCount = 0;\n each(seriesModels, function (seriesModel) {\n maxDataCount = Math.max(maxDataCount, seriesModel.getData().count());\n });\n extent = baseAxis.getExtent(), Math.abs(extent[1] - extent[0]) / maxDataCount;\n }\n\n each(seriesModels, function (seriesModel) {\n var boxWidthBound = seriesModel.get('boxWidth');\n\n if (!zrUtil.isArray(boxWidthBound)) {\n boxWidthBound = [boxWidthBound, boxWidthBound];\n }\n\n boundList.push([parsePercent(boxWidthBound[0], bandWidth) || 0, parsePercent(boxWidthBound[1], bandWidth) || 0]);\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 each(seriesModels, function (seriesModel, idx) {\n boxOffsetList.push(base);\n base += boxGap + boxWidth;\n boxWidthList.push(Math.min(Math.max(boxWidth, boundList[idx][0]), boundList[idx][1]));\n });\n}\n/**\n * Calculate points location for each series.\n */\n\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 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 var ends = [];\n addBodyEnd(ends, end2, 0);\n addBodyEnd(ends, end4, 1);\n ends.push(end1, end2, end5, end4);\n layEndLine(ends, end1);\n layEndLine(ends, end5);\n layEndLine(ends, median);\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\n if (isNaN(axisDimVal) || isNaN(val)) {\n point = [NaN, NaN];\n } else {\n point = coordSys.dataToPoint(p);\n point[cDimIdx] += offset;\n }\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 ? ends.push(point1, point2) : 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\nmodule.exports = _default;","var _config = require(\"./config\");\n\nvar devicePixelRatio = _config.devicePixelRatio;\n\nvar util = require(\"./core/util\");\n\nvar logError = require(\"./core/log\");\n\nvar BoundingRect = require(\"./core/BoundingRect\");\n\nvar timsort = require(\"./core/timsort\");\n\nvar Layer = require(\"./Layer\");\n\nvar requestAnimationFrame = require(\"./animation/requestAnimationFrame\");\n\nvar Image = require(\"./graphic/Image\");\n\nvar env = require(\"./core/env\");\n\nvar HOVER_LAYER_ZLEVEL = 1e5;\nvar CANVAS_ZLEVEL = 314159;\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' || typeof layer.refresh !== 'function') {\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);\n\nfunction isDisplayableCulled(el, width, height) {\n tmpRect.copy(el.getBoundingRect());\n\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\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\n if (!clipPaths || !prevClipPaths || clipPaths.length !== prevClipPaths.length) {\n return true;\n }\n\n for (var i = 0; i < clipPaths.length; i++) {\n if (clipPaths[i] !== prevClipPaths[i]) {\n return true;\n }\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 clipPath.setTransform(ctx);\n ctx.beginPath();\n clipPath.buildPath(ctx, clipPath.shape);\n ctx.clip(); // Transform back\n\n clipPath.restoreTransform(ctx);\n }\n}\n\nfunction createRoot(width, height) {\n var domRoot = document.createElement('div'); // domRoot.onselectstart = returnFalse; // Avoid page selected\n\n domRoot.style.cssText = ['position:relative', // IOS13 safari probably has a compositing bug (z order of the canvas and the consequent\n // dom does not act as expected) when some of the parent dom has\n // `-webkit-overflow-scrolling: touch;` and the webpage is longer than one screen and\n // the canvas is not at the top part of the page.\n // Check `https://bugs.webkit.org/show_bug.cgi?id=203681` for more details. We remove\n // this `overflow:hidden` to avoid the bug.\n // 'overflow:hidden',\n 'width:' + width + 'px', 'height:' + height + 'px', 'padding:0', 'margin:0', 'border-width:0'].join(';') + ';';\n return domRoot;\n}\n/**\n * @alias module:zrender/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\n\n\nvar Painter = function (root, storage, opts) {\n this.type = 'canvas'; // In node environment using node-canvas\n\n var singleCanvas = !root.nodeName // In node ?\n || root.nodeName.toUpperCase() === 'CANVAS';\n this._opts = opts = util.extend({}, opts || {});\n /**\n * @type {number}\n */\n\n this.dpr = opts.devicePixelRatio || devicePixelRatio;\n /**\n * @type {boolean}\n * @private\n */\n\n this._singleCanvas = singleCanvas;\n /**\n * 绘图容器\n * @type {HTMLElement}\n */\n\n this.root = root;\n var rootStyle = root.style;\n\n if (rootStyle) {\n rootStyle['-webkit-tap-highlight-color'] = 'transparent';\n rootStyle['-webkit-user-select'] = rootStyle['user-select'] = rootStyle['-webkit-touch-callout'] = 'none';\n root.innerHTML = '';\n }\n /**\n * @type {module:zrender/Storage}\n */\n\n\n this.storage = storage;\n /**\n * @type {Array.}\n * @private\n */\n\n var zlevelList = this._zlevelList = [];\n /**\n * @type {Object.}\n * @private\n */\n\n var layers = this._layers = {};\n /**\n * @type {Object.}\n * @private\n */\n\n this._layerConfig = {};\n /**\n * zrender will do compositing when root is a canvas and have multiple zlevels.\n */\n\n this._needsManuallyCompositing = false;\n\n if (!singleCanvas) {\n this._width = this._getSize(0);\n this._height = this._getSize(1);\n var domRoot = this._domRoot = createRoot(this._width, this._height);\n root.appendChild(domRoot);\n } else {\n var width = root.width;\n var height = root.height;\n\n if (opts.width != null) {\n width = opts.width;\n }\n\n if (opts.height != null) {\n height = opts.height;\n }\n\n this.dpr = opts.devicePixelRatio || 1; // Use canvas width and height directly\n\n root.width = width * this.dpr;\n root.height = height * this.dpr;\n this._width = width;\n this._height = height; // Create layer if only one given canvas\n // Device can be specified to create a high dpi image.\n\n var mainLayer = new Layer(root, this, this.dpr);\n mainLayer.__builtin__ = true;\n mainLayer.initContext(); // FIXME Use canvas width and height\n // mainLayer.resize(width, height);\n\n layers[CANVAS_ZLEVEL] = mainLayer;\n mainLayer.zlevel = CANVAS_ZLEVEL; // Not use common zlevel.\n\n zlevelList.push(CANVAS_ZLEVEL);\n this._domRoot = root;\n }\n /**\n * @type {module:zrender/Layer}\n * @private\n */\n\n\n this._hoverlayer = null;\n this._hoverElements = [];\n};\n\nPainter.prototype = {\n constructor: Painter,\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 /**\n * @return {HTMLDivElement}\n */\n getViewportRoot: function () {\n return this._domRoot;\n },\n getViewportRootOffset: function () {\n var viewportRoot = this.getViewportRoot();\n\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 var list = this.storage.getDisplayList(true);\n var zlevelList = this._zlevelList;\n this._redrawId = Math.random();\n\n this._paintList(list, paintAll, this._redrawId); // Paint custum layers\n\n\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n\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 return this;\n },\n addHover: function (el, hoverStyle) {\n if (el.__hoverMir) {\n return;\n }\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\n this._hoverElements.push(elMirror);\n\n return elMirror;\n },\n removeHover: function (el) {\n var elMirror = el.__hoverMir;\n var hoverElements = this._hoverElements;\n var idx = util.indexOf(hoverElements, elMirror);\n\n if (idx >= 0) {\n hoverElements.splice(idx, 1);\n }\n\n el.__hoverMir = null;\n },\n clearHover: function (el) {\n var hoverElements = this._hoverElements;\n\n for (var i = 0; i < hoverElements.length; i++) {\n var from = hoverElements[i].__from;\n\n if (from) {\n from.__hoverMir = null;\n }\n }\n\n hoverElements.length = 0;\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\n timsort(hoverElements, this.storage.displayableSortFunc); // Use a extream large zlevel\n // FIXME?\n\n if (!hoverLayer) {\n hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n\n var scope = {};\n hoverLayer.ctx.save();\n\n for (var i = 0; i < len;) {\n var el = hoverElements[i];\n var originalEl = el.__from; // Original el is removed\n // PENDING\n\n if (!(originalEl && originalEl.__zr)) {\n hoverElements.splice(i, 1);\n originalEl.__hoverMir = null;\n len--;\n continue;\n }\n\n i++; // Use transform\n // FIXME style and shape ?\n\n if (!originalEl.invisible) {\n el.transform = originalEl.transform;\n el.invTransform = originalEl.invTransform;\n el.__clipPaths = originalEl.__clipPaths; // el.\n\n this._doPaintEl(el, hoverLayer, true, scope);\n }\n }\n\n hoverLayer.ctx.restore();\n },\n getHoverLayer: function () {\n return this.getLayer(HOVER_LAYER_ZLEVEL);\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 _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); // PENDING, If only builtin layer?\n\n this.eachBuiltinLayer(function (layer) {\n if (layer.virtual) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n });\n },\n _doPaintList: function (list, paintAll) {\n var layerList = [];\n\n for (var zi = 0; zi < this._zlevelList.length; zi++) {\n var zlevel = this._zlevelList[zi];\n var layer = this._layers[zlevel];\n\n if (layer.__builtin__ && layer !== this._hoverlayer && (layer.__dirty || paintAll)) {\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 var start = paintAll ? layer.__startIndex : layer.__drawIndex;\n var useTimer = !paintAll && layer.incremental && Date.now;\n var startTime = useTimer && Date.now();\n var clearColor = layer.zlevel === this._zlevelList[0] ? this._backgroundColor : null; // All elements in this layer are cleared.\n\n if (layer.__startIndex === layer.__endIndex) {\n layer.clear(false, clearColor);\n } else if (start === layer.__startIndex) {\n var firstEl = list[start];\n\n if (!firstEl.incremental || !firstEl.notClear || paintAll) {\n layer.clear(false, clearColor);\n }\n }\n\n if (start === -1) {\n console.error('For some unknown reason. drawIndex is -1');\n start = layer.__startIndex;\n }\n\n for (var i = start; i < layer.__endIndex; i++) {\n var el = list[i];\n\n this._doPaintEl(el, layer, paintAll, scope);\n\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; // Give 15 millisecond to draw.\n // The rest elements will be drawn in the next frame.\n\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 _doPaintEl: function (el, currentLayer, forcePaint, scope) {\n var ctx = currentLayer.ctx;\n var m = el.transform;\n\n if ((currentLayer.__dirty || forcePaint) && // Ignore invisible element\n !el.invisible // Ignore transparent element\n && el.style.opacity !== 0 // 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]) // Ignore culled element\n && !(el.culling && isDisplayableCulled(el, this._width, this._height))) {\n var clipPaths = el.__clipPaths;\n var prevElClipPaths = scope.prevElClipPaths; // Optimize when clipping on group with several elements\n\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; // Reset prevEl since context has been restored\n\n scope.prevEl = null;\n } // New clipping state\n\n\n if (clipPaths) {\n ctx.save();\n doClip(clipPaths, ctx);\n scope.prevElClipPaths = clipPaths;\n }\n }\n\n el.beforeBrush && el.beforeBrush(ctx);\n el.brush(ctx, scope.prevEl || null);\n scope.prevEl = el;\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\n var layer = this._layers[zlevel];\n\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 } // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) {\n util.merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true);\n }\n\n if (virtual) {\n layer.virtual = virtual;\n }\n\n this.insertLayer(zlevel, layer); // Context is created after dom inserted to document\n // Or excanvas will get 0px clientWidth and clientHeight\n\n layer.initContext();\n }\n\n return layer;\n },\n insertLayer: function (zlevel, layer) {\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 } // Check if is a valid layer\n\n\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 (zlevelList[i] < zlevel && zlevelList[i + 1] > zlevel) {\n break;\n }\n }\n\n prevLayer = layersMap[zlevelList[i]];\n }\n\n zlevelList.splice(i + 1, 0, zlevel);\n layersMap[zlevel] = layer; // 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\n if (!layer.virtual) {\n if (prevLayer) {\n var prevDom = prevLayer.dom;\n\n if (prevDom.nextSibling) {\n domRoot.insertBefore(layer.dom, prevDom.nextSibling);\n } else {\n domRoot.appendChild(layer.dom);\n }\n } else {\n if (domRoot.firstChild) {\n domRoot.insertBefore(layer.dom, domRoot.firstChild);\n } else {\n domRoot.appendChild(layer.dom);\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\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n cb.call(context, this._layers[z], z);\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\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n layer = this._layers[z];\n\n if (layer.__builtin__) {\n cb.call(context, layer, z);\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\n for (i = 0; i < zlevelList.length; i++) {\n z = zlevelList[i];\n layer = this._layers[z];\n\n if (!layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n },\n\n /**\n * 获取所有已创建的层\n * @param {Array.} [prevLayer]\n */\n getLayers: function () {\n return this._layers;\n },\n _updateLayerStatus: function (list) {\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\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\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 var prevZlevel;\n\n for (var i = 0; i < list.length; i++) {\n var el = list[i];\n var zlevel = el.zlevel;\n var layer;\n\n if (prevZlevel !== zlevel) {\n prevZlevel = zlevel;\n incrementalLayerCount = 0;\n } // TODO Not use magic number on zlevel.\n // Each layer with increment element can be separated to 3 layers.\n // (Other Element drawn after incremental element)\n // -----------------zlevel + EL_AFTER_INCREMENTAL_INC--------------------\n // (Incremental element)\n // ----------------------zlevel + INCREMENTAL_INC------------------------\n // (Element drawn before incremental element)\n // --------------------------------zlevel--------------------------------\n\n\n if (el.incremental) {\n layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n layer.incremental = true;\n incrementalLayerCount = 1;\n } else {\n layer = this.getLayer(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing);\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\n if (layer.__startIndex !== i) {\n layer.__dirty = true;\n }\n\n layer.__startIndex = i;\n\n if (!layer.incremental) {\n layer.__drawIndex = i;\n } else {\n // Mark layer draw index needs to update.\n layer.__drawIndex = -1;\n }\n\n updatePrevLayer(i);\n prevLayer = layer;\n }\n\n if (el.__dirty) {\n layer.__dirty = true;\n\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 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 } // For incremental layer. In case start index changed and no elements are dirty.\n\n\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 _clearLayer: function (layer) {\n layer.clear();\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\n if (!layerConfig[zlevel]) {\n layerConfig[zlevel] = config;\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]; // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n\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\n if (!layer) {\n return;\n }\n\n layer.dom.parentNode.removeChild(layer.dom);\n delete layers[zlevel];\n zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n },\n\n /**\n * 区域大小变化后重绘\n */\n resize: function (width, height) {\n if (!this._domRoot.style) {\n // Maybe in node or worker\n if (width == null || height == null) {\n return;\n }\n\n this._width = width;\n this._height = height;\n this.getLayer(CANVAS_ZLEVEL).resize(width, height);\n } else {\n var domRoot = this._domRoot; // FIXME Why ?\n\n domRoot.style.display = 'none'; // Save input w/h\n\n var opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n width = this._getSize(0);\n height = this._getSize(1);\n domRoot.style.display = ''; // 优化没有实际改变的resize\n\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\n util.each(this._progressiveLayers, function (layer) {\n layer.resize(width, height);\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\n if (layer) {\n layer.clear();\n }\n },\n\n /**\n * 释放\n */\n dispose: function () {\n this.root.innerHTML = '';\n this.root = this.storage = this._domRoot = 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\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 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 } else if (layer.renderToCanvas) {\n imageLayer.ctx.save();\n layer.renderToCanvas(imageLayer.ctx);\n imageLayer.ctx.restore();\n }\n });\n } else {\n // PENDING, echarts-gl and incremental rendering.\n var scope = {};\n var displayList = this.storage.getDisplayList(true);\n\n for (var i = 0; i < displayList.length; i++) {\n var el = displayList[i];\n\n this._doPaintEl(el, imageLayer, true, scope);\n }\n }\n\n return imageLayer.dom;\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 _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; // IE8 does not support getComputedStyle, but it use VML.\n\n var stl = document.defaultView.getComputedStyle(root);\n return (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh])) - (parseInt10(stl[plt]) || 0) - (parseInt10(stl[prb]) || 0) | 0;\n },\n pathToImage: function (path, dpr) {\n dpr = dpr || this.dpr;\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 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 canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, width, height);\n ctx.dpr = dpr;\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\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};\nvar _default = Painter;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar numberUtil = require(\"./number\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// import Text from 'zrender/src/graphic/Text';\n\n/**\n * add commas after every three numbers\n * @param {string|number} x\n * @return {string}\n */\nfunction addCommas(x) {\n if (isNaN(x)) {\n return '-';\n }\n\n x = (x + '').split('.');\n return x[0].replace(/(\\d{1,3})(?=(?:\\d{3})+(?!\\d))/g, '$1,') + (x.length > 1 ? '.' + x[1] : '');\n}\n/**\n * @param {string} str\n * @param {boolean} [upperCaseFirst=false]\n * @return {string} str\n */\n\n\nfunction 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\nvar normalizeCssArray = zrUtil.normalizeCssArray;\nvar replaceReg = /([&<>\"'])/g;\nvar replaceMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': '''\n};\n\nfunction encodeHTML(source) {\n return source == null ? '' : (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 * Template formatter\n * @param {string} tpl\n * @param {Array.|Object} paramsList\n * @param {boolean} [encode=false]\n * @return {string}\n */\n\n\nfunction formatTpl(tpl, paramsList, encode) {\n if (!zrUtil.isArray(paramsList)) {\n paramsList = [paramsList];\n }\n\n var seriesLen = paramsList.length;\n\n if (!seriesLen) {\n return '';\n }\n\n var $vars = paramsList[0].$vars || [];\n\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\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(wrapVar(TPL_VAR_ALIAS[k], seriesIdx), encode ? encodeHTML(val) : val);\n }\n }\n\n return tpl;\n}\n/**\n * simple Template formatter\n *\n * @param {string} tpl\n * @param {Object} param\n * @param {boolean} [encode=false]\n * @return {string}\n */\n\n\nfunction formatTplSimple(tpl, param, encode) {\n zrUtil.each(param, function (value, key) {\n tpl = tpl.replace('{' + key + '}', encode ? encodeHTML(value) : value);\n });\n return tpl;\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 */\n\n\nfunction getTooltipMarker(opt, extraCssText) {\n opt = zrUtil.isString(opt) ? {\n color: opt,\n extraCssText: extraCssText\n } : 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 } 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 * 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 */\n\n\nfunction formatTime(tpl, value, isUTC) {\n if (tpl === 'week' || tpl === 'month' || tpl === 'quarter' || tpl === 'half-year' || tpl === 'year') {\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 tpl = tpl.replace('MM', pad(M, 2)).replace('M', M).replace('yyyy', y).replace('yy', y % 100).replace('dd', pad(d, 2)).replace('d', d).replace('hh', pad(h, 2)).replace('h', h).replace('mm', pad(m, 2)).replace('m', m).replace('ss', pad(s, 2)).replace('s', s).replace('SSS', pad(S, 3));\n return tpl;\n}\n/**\n * Capital first\n * @param {string} str\n * @return {string}\n */\n\n\nfunction capitalFirst(str) {\n return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;\n}\n\nvar truncateText = textContain.truncateText;\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.} [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 */\n\nfunction getTextBoundingRect(opt) {\n return textContain.getBoundingRect(opt.text, opt.font, opt.textAlign, opt.textVerticalAlign, opt.textPadding, opt.textLineHeight, opt.rich, opt.truncate);\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 */\n\n\nfunction getTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate, textLineHeight) {\n return textContain.getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate);\n}\n/**\n * open new tab\n * @param {string} link url\n * @param {string} target blank or self\n */\n\n\nfunction windowOpen(link, target) {\n if (target === '_blank' || target === 'blank') {\n var blank = window.open();\n blank.opener = null;\n blank.location = link;\n } else {\n window.open(link, target);\n }\n}\n\nexports.addCommas = addCommas;\nexports.toCamelCase = toCamelCase;\nexports.normalizeCssArray = normalizeCssArray;\nexports.encodeHTML = encodeHTML;\nexports.formatTpl = formatTpl;\nexports.formatTplSimple = formatTplSimple;\nexports.getTooltipMarker = getTooltipMarker;\nexports.formatTime = formatTime;\nexports.capitalFirst = capitalFirst;\nexports.truncateText = truncateText;\nexports.getTextBoundingRect = getTextBoundingRect;\nexports.getTextRect = getTextRect;\nexports.windowOpen = windowOpen;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar ComponentModel = require(\"../../model/Component\");\n\nvar List = require(\"../../data/List\");\n\nvar modelUtil = require(\"../../util/model\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar TimelineModel = ComponentModel.extend({\n type: 'timeline',\n layoutMode: 'box',\n\n /**\n * @protected\n */\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 4,\n // 二级层叠\n show: true,\n axisType: 'time',\n // 模式是时间类型,支持 value, category\n realtime: true,\n left: '20%',\n top: null,\n right: '20%',\n bottom: 0,\n width: null,\n height: 40,\n padding: 5,\n controlPosition: 'left',\n // 'left' 'right' 'top' 'bottom' 'none'\n autoPlay: false,\n rewind: false,\n // 反向播放\n loop: true,\n playInterval: 2000,\n // 播放时间间隔,单位ms\n currentIndex: 0,\n itemStyle: {},\n label: {\n color: '#000'\n },\n data: []\n },\n\n /**\n * @override\n */\n init: function (option, parentModel, ecModel) {\n /**\n * @private\n * @type {module:echarts/data/List}\n */\n this._data;\n /**\n * @private\n * @type {Array.}\n */\n\n this._names;\n this.mergeDefaultAndTheme(option, ecModel);\n\n this._initData();\n },\n\n /**\n * @override\n */\n mergeOption: function (option) {\n TimelineModel.superApply(this, 'mergeOption', arguments);\n\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\n var count = this._data.count();\n\n if (this.option.loop) {\n currentIndex = (currentIndex % count + count) % count;\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 } 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 = {\n category: 'ordinal',\n time: 'time'\n }[axisType] || 'number';\n var data = this._data = new List([{\n name: 'value',\n type: dimType\n }], this);\n data.initData(dataArr, names);\n },\n getData: function () {\n return this._data;\n },\n\n /**\n * @public\n * @return {Array.} categoreis\n */\n getCategories: function () {\n if (this.get('axisType') === 'category') {\n return this._names.slice();\n }\n }\n});\nvar _default = TimelineModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {Object} opt {labelInside}\n * @return {Object} {\n * position, rotation, labelDirection, labelOffset,\n * tickDirection, labelRotate, z2\n * }\n */\nfunction layout(axisModel, opt) {\n opt = opt || {};\n var single = axisModel.coordinateSystem;\n var axis = axisModel.axis;\n var layout = {};\n var axisPosition = axis.position;\n var orient = axis.orient;\n var rect = single.getRect();\n var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];\n var positionMap = {\n horizontal: {\n top: rectBound[2],\n bottom: rectBound[3]\n },\n vertical: {\n left: rectBound[0],\n right: rectBound[1]\n }\n };\n layout.position = [orient === 'vertical' ? positionMap.vertical[axisPosition] : rectBound[0], orient === 'horizontal' ? positionMap.horizontal[axisPosition] : rectBound[3]];\n var r = {\n horizontal: 0,\n vertical: 1\n };\n layout.rotation = Math.PI / 2 * r[orient];\n var directionMap = {\n top: -1,\n bottom: 1,\n right: 1,\n left: -1\n };\n layout.labelDirection = layout.tickDirection = 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 layout.z2 = 1;\n return layout;\n}\n\nexports.layout = layout;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar each = _util.each;\nvar isString = _util.isString;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * 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.} dimensionInfoList The same as the input of .\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 */\nfunction enableDataStack(seriesModel, dimensionInfoList, opt) {\n opt = opt || {};\n var byIndex = opt.byIndex;\n var stackedCoordDimension = opt.stackedCoordDimension; // Compatibal: when `stack` is set as '', do not stack.\n\n var mayStack = !!(seriesModel && seriesModel.get('stack'));\n var stackedByDimInfo;\n var stackedDimInfo;\n var stackResultDimension;\n var stackedOverDimension;\n each(dimensionInfoList, function (dimensionInfo, index) {\n if (isString(dimensionInfo)) {\n dimensionInfoList[index] = dimensionInfo = {\n name: dimensionInfo\n };\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 } // Find the first stackable dimension as the stackedDimInfo.\n\n\n if (!stackedDimInfo && dimensionInfo.type !== 'ordinal' && dimensionInfo.type !== 'time' && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim)) {\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 } // 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\n\n if (stackedDimInfo) {\n // Use a weird name that not duplicated with other names.\n stackResultDimension = '__\\0ecstackresult';\n stackedOverDimension = '__\\0ecstackedover'; // Create inverted index to fast query index by value.\n\n if (stackedByDimInfo) {\n stackedByDimInfo.createInvertedIndices = true;\n }\n\n var stackedDimCoordDim = stackedDimInfo.coordDim;\n var stackedDimType = stackedDimInfo.type;\n var stackedDimCoordIndex = 0;\n each(dimensionInfoList, function (dimensionInfo) {\n if (dimensionInfo.coordDim === stackedDimCoordDim) {\n stackedDimCoordIndex++;\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 stackedDimCoordIndex++;\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 * @param {module:echarts/data/List} data\n * @param {string} stackedDim\n */\n\n\nfunction isDimensionStacked(data, stackedDim\n/*, stackedByDim*/\n) {\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 // stackedByDim != null\n // ? stackedByDim === data.getCalculationInfo('stackedByDimension')\n // : data.getCalculationInfo('isStackedByIndex')\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 */\n\n\nfunction getStackedDimension(data, targetDim) {\n return isDimensionStacked(data, targetDim) ? data.getCalculationInfo('stackResultDimension') : targetDim;\n}\n\nexports.enableDataStack = enableDataStack;\nexports.isDimensionStacked = isDimensionStacked;\nexports.getStackedDimension = getStackedDimension;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar formatUtil = require(\"../../util/format\");\n\nvar numberUtil = require(\"../../util/number\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar MONTH_TEXT = {\n EN: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n CN: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']\n};\nvar WEEK_TEXT = {\n EN: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n CN: ['日', '一', '二', '三', '四', '五', '六']\n};\n\nvar _default = echarts.extendComponentView({\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 render: function (calendarModel, ecModel, api) {\n var group = this.group;\n group.removeAll();\n var coordSys = calendarModel.coordinateSystem; // range info\n\n var rangeData = coordSys.getRangeInfo();\n var orient = coordSys.getOrient();\n\n this._renderDayRect(calendarModel, rangeData, group); // _renderLines must be called prior to following function\n\n\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 // 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; i <= rangeData.end.time; i = coordSys.getNextNDay(i, 1).time) {\n var point = coordSys.dataToRect([i], false).tl; // every rect\n\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 group.add(rect);\n }\n },\n // render separate line\n _renderLines: function (calendarModel, rangeData, orient, group) {\n var self = this;\n var coordSys = calendarModel.coordinateSystem;\n var lineStyleModel = calendarModel.getModel('splitLine.lineStyle').getLineStyle();\n var show = calendarModel.get('splitLine.show');\n var lineWidth = lineStyleModel.lineWidth;\n this._tlpoints = [];\n this._blpoints = [];\n this._firstDayOfMonth = [];\n this._firstDayPoints = [];\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 self._firstDayOfMonth.push(coordSys.getDateInfo(date));\n\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\n self._blpoints.push(points[points.length - 1]);\n\n show && self._drawSplitline(points, lineStyleModel, group);\n } // render top/left line\n\n\n show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group); // render bottom/right line\n\n show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group);\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; // both ends of the line are extend half lineWidth\n\n rs[0][idx] = rs[0][idx] - lineWidth / 2;\n rs[1][idx] = rs[1][idx] + lineWidth / 2;\n return rs;\n },\n // render split line\n _drawSplitline: function (points, lineStyleModel, group) {\n var poyline = new graphic.Polyline({\n z2: 20,\n shape: {\n points: points\n },\n style: lineStyleModel\n });\n group.add(poyline);\n },\n // render month line of one week points\n _getLinePointsOfOneWeek: function (calendarModel, date, orient) {\n var coordSys = calendarModel.coordinateSystem;\n date = coordSys.getDateInfo(date);\n var points = [];\n\n for (var i = 0; i < 7; i++) {\n var tmpD = coordSys.getNextNDay(date.time, i);\n var point = coordSys.dataToRect([tmpD.time], false);\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 _formatterLabel: function (formatter, params) {\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 _yearTextPositionControl: function (textEl, point, orient, position, margin) {\n point = point.slice();\n var aligns = ['center', 'bottom'];\n\n if (position === 'bottom') {\n point[1] += margin;\n aligns = ['center', 'top'];\n } else if (position === 'left') {\n point[0] -= margin;\n } else if (position === 'right') {\n point[0] += margin;\n aligns = ['center', 'top'];\n } else {\n // top\n point[1] -= margin;\n }\n\n var rotate = 0;\n\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 // 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 var idx = orient === 'horizontal' ? 0 : 1;\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 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 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({\n z2: 30\n });\n graphic.setTextStyle(yearText.style, yearLabel, {\n text: content\n }), yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin));\n group.add(yearText);\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 } 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 // 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 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 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({\n z2: 30\n });\n zrUtil.extend(graphic.setTextStyle(monthText.style, monthLabel, {\n text: content\n }), this._monthTextPositionControl(tmp, isCenter, orient, pos, margin));\n group.add(monthText);\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 } 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 // 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(rangeData.end.time, 7 - rangeData.lweek).time;\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(rangeData.start.time, -(7 + rangeData.fweek)).time;\n margin = -margin;\n }\n\n for (var i = 0; i < 7; i++) {\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({\n z2: 30\n });\n zrUtil.extend(graphic.setTextStyle(weekText.style, dayLabel, {\n text: nameMap[day]\n }), this._weekTextPositionControl(point, orient, pos, margin, cellSize));\n group.add(weekText);\n }\n }\n});\n\nmodule.exports = _default;","var PathProxy = require(\"../core/PathProxy\");\n\nvar _vector = require(\"../core/vector\");\n\nvar v2ApplyTransform = _vector.applyTransform;\nvar CMD = PathProxy.CMD;\nvar points = [[], [], []];\nvar mathSqrt = Math.sqrt;\nvar mathAtan2 = Math.atan2;\n\nfunction _default(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 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\n case L:\n nPoint = 1;\n break;\n\n case C:\n nPoint = 3;\n break;\n\n case Q:\n nPoint = 2;\n break;\n\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); // cx\n\n data[i] *= sx;\n data[i++] += x; // cy\n\n data[i] *= sy;\n data[i++] += y; // Scale rx and ry\n // FIXME Assume psi is 0 here\n\n data[i++] *= sx;\n data[i++] *= sy; // Start angle\n\n data[i++] += angle; // end angle\n\n data[i++] += angle; // FIXME psi\n\n i += 2;\n j = i;\n break;\n\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]; // x1, y1\n\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 v2ApplyTransform(p, p, m); // Write back\n\n data[j++] = p[0];\n data[j++] = p[1];\n }\n }\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nvar preprocessor = require(\"./timeline/preprocessor\");\n\nrequire(\"./timeline/typeDefaulter\");\n\nrequire(\"./timeline/timelineAction\");\n\nrequire(\"./timeline/SliderTimelineModel\");\n\nrequire(\"./timeline/SliderTimelineView\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 */\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* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction normalize(a) {\n if (!(a instanceof Array)) {\n a = [a, a];\n }\n\n return a;\n}\n\nvar opacityQuery = 'lineStyle.opacity'.split('.');\nvar _default = {\n seriesType: 'lines',\n reset: function (seriesModel, ecModel, api) {\n var symbolType = normalize(seriesModel.get('symbol'));\n var symbolSize = normalize(seriesModel.get('symbolSize'));\n var data = seriesModel.getData();\n data.setVisual('fromSymbol', symbolType && symbolType[0]);\n data.setVisual('toSymbol', symbolType && symbolType[1]);\n data.setVisual('fromSymbolSize', symbolSize && symbolSize[0]);\n data.setVisual('toSymbolSize', symbolSize && symbolSize[1]);\n data.setVisual('opacity', seriesModel.get(opacityQuery));\n\n function dataEach(data, idx) {\n var itemModel = data.getItemModel(idx);\n var symbolType = normalize(itemModel.getShallow('symbol', true));\n var symbolSize = normalize(itemModel.getShallow('symbolSize', true));\n var opacity = itemModel.get(opacityQuery);\n symbolType[0] && data.setItemVisual(idx, 'fromSymbol', symbolType[0]);\n symbolType[1] && data.setItemVisual(idx, 'toSymbol', symbolType[1]);\n symbolSize[0] && data.setItemVisual(idx, 'fromSymbolSize', symbolSize[0]);\n symbolSize[1] && data.setItemVisual(idx, 'toSymbolSize', symbolSize[1]);\n data.setItemVisual(idx, 'opacity', opacity);\n }\n\n return {\n dataEach: data.hasItemOption ? dataEach : null\n };\n }\n};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Geo = require(\"./Geo\");\n\nvar layout = require(\"../../util/layout\");\n\nvar numberUtil = require(\"../../util/number\");\n\nvar geoSourceManager = require(\"./geoSourceManager\");\n\nvar mapDataStorage = require(\"./mapDataStorage\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 * 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 var boundingCoords = geoModel.get('boundingCoords');\n\n if (boundingCoords != null) {\n var leftTop = boundingCoords[0];\n var rightBottom = boundingCoords[1];\n\n if (isNaN(leftTop[0]) || isNaN(leftTop[1]) || isNaN(rightBottom[0]) || isNaN(rightBottom[1])) {} 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 var boxLayoutOption;\n var center = geoModel.get('layoutCenter');\n var size = geoModel.get('layoutSize');\n var viewWidth = api.getWidth();\n var viewHeight = api.getHeight();\n var aspect = rect.width / rect.height * this.aspectScale;\n var useCenterAndSize = false;\n\n if (center && size) {\n center = [numberUtil.parsePercent(center[0], viewWidth), numberUtil.parsePercent(center[1], viewHeight)];\n size = numberUtil.parsePercent(size, Math.min(viewWidth, viewHeight));\n\n if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) {\n useCenterAndSize = true;\n } else {}\n }\n\n var viewRect;\n\n if (useCenterAndSize) {\n var viewRect = {};\n\n if (aspect > 1) {\n // Width is same with size\n viewRect.width = size;\n viewRect.height = size / aspect;\n } else {\n viewRect.height = size;\n viewRect.width = size * aspect;\n }\n\n viewRect.y = center[1] - viewRect.height / 2;\n viewRect.x = center[0] - viewRect.width / 2;\n } else {\n // Use left/top/width/height\n boxLayoutOption = geoModel.getBoxLayoutParams(); // 0.75 rate\n\n boxLayoutOption.aspect = aspect;\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 this.setCenter(geoModel.get('center'));\n this.setZoom(geoModel.get('zoom'));\n}\n/**\n * @param {module:echarts/coord/Geo} geo\n * @param {module:echarts/model/Model} model\n * @inner\n */\n\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 // For deciding which dimensions to use when creating list data\n dimensions: Geo.prototype.dimensions,\n create: function (ecModel, api) {\n var geoList = []; // FIXME Create each time may be slow\n\n ecModel.eachComponent('geo', function (geoModel, idx) {\n var name = geoModel.get('map');\n var aspectScale = geoModel.get('aspectScale');\n var invertLongitute = true;\n var mapRecords = mapDataStorage.retrieveMap(name);\n\n if (mapRecords && mapRecords[0] && mapRecords[0].type === 'svg') {\n aspectScale == null && (aspectScale = 1);\n invertLongitute = false;\n } else {\n aspectScale == null && (aspectScale = 0.75);\n }\n\n var geo = new Geo(name + idx, name, geoModel.get('nameMap'), invertLongitute);\n geo.aspectScale = aspectScale;\n geo.zoomLimit = geoModel.get('scaleLimit');\n geoList.push(geo);\n setGeoCoords(geo, geoModel);\n geoModel.coordinateSystem = geo;\n geo.model = geoModel; // Inject resize method\n\n geo.resize = resizeGeo;\n geo.resize(geoModel, api);\n });\n ecModel.eachSeries(function (seriesModel) {\n var coordSys = seriesModel.get('coordinateSystem');\n\n if (coordSys === 'geo') {\n var geoIndex = seriesModel.get('geoIndex') || 0;\n seriesModel.coordinateSystem = geoList[geoIndex];\n }\n }); // If has map series\n\n var mapModelGroupBySeries = {};\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 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 geo.zoomLimit = zrUtil.retrieve.apply(null, zrUtil.map(mapSeries, function (singleMapSeries) {\n return singleMapSeries.get('scaleLimit');\n }));\n geoList.push(geo); // Inject resize method\n\n geo.resize = resizeGeo;\n geo.aspectScale = mapSeries[0].get('aspectScale');\n geo.resize(mapSeries[0], api);\n zrUtil.each(mapSeries, function (singleMapSeries) {\n singleMapSeries.coordinateSystem = geo;\n setGeoCoords(geo, singleMapSeries);\n });\n });\n return geoList;\n },\n\n /**\n * Fill given regions array\n * @param {Array.} 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 var dataNameMap = zrUtil.createHashMap();\n\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({\n name: name\n });\n });\n return regionsArr;\n }\n};\necharts.registerCoordinateSystem('geo', geoCreator);\nvar _default = geoCreator;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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* ).\n*/\nvar scaleAndAdd = vec2.scaleAndAdd; // function adjacentNode(n, e) {\n// return e.n1 === n ? e.n2 : e.n1;\n// }\n\nfunction 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]; // var scale = opts.scale || 1;\n\n var gravity = opts.gravity == null ? 0.1 : opts.gravity; // 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\n for (var i = 0; i < nodes.length; i++) {\n var n = nodes[i];\n\n if (!n.p) {\n n.p = vec2.create(width * (Math.random() - 0.5) + center[0], height * (Math.random() - 0.5) + center[1]);\n }\n\n n.pp = vec2.clone(n.p);\n n.edges = null;\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\n var initialFriction = opts.friction == null ? 0.6 : opts.friction;\n var friction = initialFriction;\n return {\n warmUp: function () {\n friction = initialFriction * 0.8;\n },\n setFixed: function (idx) {\n nodes[idx].fixed = true;\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\n for (var i = 0; i < edges.length; i++) {\n var e = edges[i];\n\n if (e.ignoreForceLayout) {\n continue;\n }\n\n var n1 = e.n1;\n var n2 = e.n2;\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 !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 } // Gravity\n\n\n for (var i = 0; i < nLen; i++) {\n var n = nodes[i];\n\n if (!n.fixed) {\n vec2.sub(v12, center, n.p); // var d = vec2.len(v12);\n // vec2.scale(v12, v12, 1 / d);\n // var gravityFactor = gravity;\n\n scaleAndAdd(n.p, n.p, v12, gravity * friction);\n }\n } // Repulsive\n // PENDING\n\n\n for (var i = 0; i < nLen; i++) {\n var n1 = nodes[i];\n\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\n if (d === 0) {\n // Random repulse\n vec2.set(v12, Math.random() - 0.5, Math.random() - 0.5);\n d = 1;\n }\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\n var v = [];\n\n for (var i = 0; i < nLen; i++) {\n var n = nodes[i];\n\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 cb && cb(nodes, edges, friction < 0.01);\n }\n };\n}\n\nexports.forceLayout = forceLayout;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\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.} handleEnds handleEnds[0] can be bigger then handleEnds[1].\n * handleEnds will be modified in this method.\n * @param {Array.} 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.} The input handleEnds.\n */\nfunction _default(delta, handleEnds, extent, handleIndex, minSpan, maxSpan) {\n delta = delta || 0;\n var extentSpan = extent[1] - extent[0]; // Notice maxSpan and minSpan can be null/undefined.\n\n if (minSpan != null) {\n minSpan = restrict(minSpan, [0, extentSpan]);\n }\n\n if (maxSpan != null) {\n maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0);\n }\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 var originalDistSign = getSpanSign(handleEnds, handleIndex);\n handleEnds[handleIndex] += delta; // Restrict in extent.\n\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); // Expand span.\n\n var currDistSign = getSpanSign(handleEnds, handleIndex);\n\n if (minSpan != null && (currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan)) {\n // If minSpan exists, 'cross' is forbidden.\n handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan;\n } // Shrink span.\n\n\n var currDistSign = getSpanSign(handleEnds, handleIndex);\n\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]; // If `handleEnds[0] === handleEnds[1]`, always believe that handleEnd[0]\n // is at left of handleEnds[1] for non-cross case.\n\n return {\n span: Math.abs(dist),\n sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1\n };\n}\n\nfunction restrict(value, extend) {\n return Math.min(extend[1] != null ? extend[1] : Infinity, Math.max(extend[0] != null ? extend[0] : -Infinity, value));\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./line/LineSeries\");\n\nrequire(\"./line/LineView\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar layoutPoints = require(\"../layout/points\");\n\nvar dataSample = require(\"../processor/dataSample\");\n\nrequire(\"../component/gridSimple\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// In case developer forget to include grid component\necharts.registerVisual(visualSymbol('line', 'circle', 'line'));\necharts.registerLayout(layoutPoints('line')); // Down sample after filter\n\necharts.registerProcessor(echarts.PRIORITY.PROCESSOR.STATISTIC, dataSample('line'));","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./tree/TreeSeries\");\n\nrequire(\"./tree/TreeView\");\n\nrequire(\"./tree/treeAction\");\n\nvar visualSymbol = require(\"../visual/symbol\");\n\nvar treeLayout = require(\"./tree/treeLayout\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerVisual(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\nvar _helper = require(\"./helper\");\n\nvar prepareDataCoordInfo = _helper.prepareDataCoordInfo;\nvar getStackedOnPoint = _helper.getStackedOnPoint;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// var arrayDiff = require('zrender/src/core/arrayDiff');\n// 'zrender/src/core/arrayDiff' has been used before, but it did\n// not do well in performance when roam with fixed dataZoom window.\n// function convertToIntId(newIdList, oldIdList) {\n// // Generate int id instead of string id.\n// // Compare string maybe slow in score function of arrDiff\n// // Assume id in idList are all unique\n// var idIndicesMap = {};\n// var idx = 0;\n// for (var i = 0; i < newIdList.length; i++) {\n// idIndicesMap[newIdList[i]] = idx;\n// newIdList[i] = idx++;\n// }\n// for (var i = 0; i < oldIdList.length; i++) {\n// var oldId = oldIdList[i];\n// // Same with newIdList\n// if (idIndicesMap[oldId]) {\n// oldIdList[i] = idIndicesMap[oldId];\n// }\n// else {\n// oldIdList[i] = idx++;\n// }\n// }\n// }\nfunction diffData(oldData, newData) {\n var diffResult = [];\n newData.diff(oldData).add(function (idx) {\n diffResult.push({\n cmd: '+',\n idx: idx\n });\n }).update(function (newIdx, oldIdx) {\n diffResult.push({\n cmd: '=',\n idx: oldIdx,\n idx1: newIdx\n });\n }).remove(function (idx) {\n diffResult.push({\n cmd: '-',\n idx: idx\n });\n }).execute();\n return diffResult;\n}\n\nfunction _default(oldData, newData, oldStackedOnPoints, newStackedOnPoints, oldCoordSys, newCoordSys, oldValueOrigin, newValueOrigin) {\n var diff = diffData(oldData, newData); // var newIdList = newData.mapArray(newData.getId);\n // var oldIdList = oldData.mapArray(oldData.getId);\n // convertToIntId(newIdList, oldIdList);\n // // FIXME One data ?\n // diff = arrayDiff(oldIdList, newIdList);\n\n var currPoints = [];\n var nextPoints = []; // Points for stacking base line\n\n var currStackedPoints = [];\n var nextStackedPoints = [];\n var status = [];\n var sortedIndices = [];\n var rawIndices = [];\n var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin);\n var oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin);\n\n for (var i = 0; i < diff.length; i++) {\n var diffItem = diff[i];\n var pointAdded = true; // FIXME, animation is not so perfect when dataZoom window moves fast\n // Which is in case remvoing or add more than one data in the tail or head\n\n switch (diffItem.cmd) {\n case '=':\n var currentPt = oldData.getItemLayout(diffItem.idx);\n var nextPt = newData.getItemLayout(diffItem.idx1); // If previous data is NaN, use next point directly\n\n if (isNaN(currentPt[0]) || isNaN(currentPt[1])) {\n currentPt = nextPt.slice();\n }\n\n currPoints.push(currentPt);\n nextPoints.push(nextPt);\n currStackedPoints.push(oldStackedOnPoints[diffItem.idx]);\n nextStackedPoints.push(newStackedOnPoints[diffItem.idx1]);\n rawIndices.push(newData.getRawIndex(diffItem.idx1));\n break;\n\n case '+':\n var idx = diffItem.idx;\n currPoints.push(oldCoordSys.dataToPoint([newData.get(newDataOldCoordInfo.dataDimsForPoint[0], idx), newData.get(newDataOldCoordInfo.dataDimsForPoint[1], idx)]));\n nextPoints.push(newData.getItemLayout(idx).slice());\n currStackedPoints.push(getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, idx));\n nextStackedPoints.push(newStackedOnPoints[idx]);\n rawIndices.push(newData.getRawIndex(idx));\n break;\n\n case '-':\n var idx = diffItem.idx;\n var rawIndex = oldData.getRawIndex(idx); // Data is replaced. In the case of dynamic data queue\n // FIXME FIXME FIXME\n\n if (rawIndex !== idx) {\n currPoints.push(oldData.getItemLayout(idx));\n nextPoints.push(newCoordSys.dataToPoint([oldData.get(oldDataNewCoordInfo.dataDimsForPoint[0], idx), oldData.get(oldDataNewCoordInfo.dataDimsForPoint[1], idx)]));\n currStackedPoints.push(oldStackedOnPoints[idx]);\n nextStackedPoints.push(getStackedOnPoint(oldDataNewCoordInfo, newCoordSys, oldData, idx));\n rawIndices.push(rawIndex);\n } else {\n pointAdded = false;\n }\n\n } // Original indices\n\n\n if (pointAdded) {\n status.push(diffItem);\n sortedIndices.push(sortedIndices.length);\n }\n } // Diff result may be crossed if all items are changed\n // Sort by data index\n\n\n sortedIndices.sort(function (a, b) {\n return rawIndices[a] - rawIndices[b];\n });\n var sortedCurrPoints = [];\n var sortedNextPoints = [];\n var sortedCurrStackedPoints = [];\n var sortedNextStackedPoints = [];\n var sortedStatus = [];\n\n for (var i = 0; i < sortedIndices.length; i++) {\n var idx = sortedIndices[i];\n sortedCurrPoints[i] = currPoints[idx];\n sortedNextPoints[i] = nextPoints[idx];\n sortedCurrStackedPoints[i] = currStackedPoints[idx];\n sortedNextStackedPoints[i] = nextStackedPoints[idx];\n sortedStatus[i] = status[idx];\n }\n\n return {\n current: sortedCurrPoints,\n next: sortedNextPoints,\n stackedOnCurrent: sortedCurrStackedPoints,\n stackedOnNext: sortedNextStackedPoints,\n status: sortedStatus\n };\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar BaseAxisPointer = require(\"./BaseAxisPointer\");\n\nvar viewHelper = require(\"./viewHelper\");\n\nvar singleAxisHelper = require(\"../../coord/single/singleAxisHelper\");\n\nvar AxisView = require(\"../axis/AxisView\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar XY = ['x', 'y'];\nvar WH = ['width', 'height'];\nvar SingleAxisPointer = BaseAxisPointer.extend({\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 var axisPointerType = axisPointerModel.get('type');\n\n if (axisPointerType && axisPointerType !== 'none') {\n var elStyle = viewHelper.buildElStyle(axisPointerModel);\n var pointerOption = pointerShapeBuilder[axisPointerType](axis, pixelValue, otherExtent);\n pointerOption.style = elStyle;\n elOption.graphicKey = pointerOption.type;\n elOption.pointer = pointerOption;\n }\n\n var layoutInfo = singleAxisHelper.layout(axisModel);\n viewHelper.buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api);\n },\n\n /**\n * @override\n */\n getHandleTransform: function (value, axisModel, axisPointerModel) {\n var layoutInfo = singleAxisHelper.layout(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 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 return {\n position: currPosition,\n rotation: transform.rotation,\n cursorPoint: cursorPoint,\n tooltipOption: {\n verticalAlign: 'middle'\n }\n };\n }\n});\nvar pointerShapeBuilder = {\n line: function (axis, pixelValue, otherExtent) {\n var targetShape = viewHelper.makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getPointDimIndex(axis));\n return {\n type: 'Line',\n subPixelOptimize: true,\n shape: targetShape\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([pixelValue - bandWidth / 2, otherExtent[0]], [bandWidth, span], getPointDimIndex(axis))\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);\nvar _default = SingleAxisPointer;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar LegendModel = require(\"./LegendModel\");\n\nvar _layout = require(\"../../util/layout\");\n\nvar mergeLayoutParam = _layout.mergeLayoutParam;\nvar getLayoutParams = _layout.getLayoutParams;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar ScrollableLegendModel = LegendModel.extend({\n type: 'legend.scroll',\n\n /**\n * @param {number} scrollDataIndex\n */\n setScrollDataIndex: function (scrollDataIndex) {\n this.option.scrollDataIndex = scrollDataIndex;\n },\n defaultOption: {\n scrollDataIndex: 0,\n pageButtonItemGap: 5,\n pageButtonGap: null,\n pageButtonPosition: 'end',\n // 'start' or 'end'\n pageFormatter: '{current}/{total}',\n // 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,\n // Can be [10, 3], which represents [width, height]\n pageTextStyle: {\n color: '#333'\n },\n animationDurationUpdate: 800\n },\n\n /**\n * @override\n */\n init: function (option, parentModel, ecModel, extraOpt) {\n var inputPositionParams = getLayoutParams(option);\n ScrollableLegendModel.superCall(this, 'init', option, parentModel, ecModel, extraOpt);\n mergeAndNormalizeLayoutParams(this, option, inputPositionParams);\n },\n\n /**\n * @override\n */\n mergeOption: function (option, extraOpt) {\n ScrollableLegendModel.superCall(this, 'mergeOption', option, extraOpt);\n mergeAndNormalizeLayoutParams(this, this.option, option);\n }\n}); // Do not `ignoreSize` to enable setting {left: 10, right: 10}.\n\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',\n ignoreSize: ignoreSize\n });\n}\n\nvar _default = ScrollableLegendModel;\nmodule.exports = _default;","require(\"./graphic\");\n\nvar _zrender = require(\"../zrender\");\n\nvar registerPainter = _zrender.registerPainter;\n\nvar Painter = require(\"./Painter\");\n\nregisterPainter('vml', Painter);","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _bbox = require(\"zrender/lib/core/bbox\");\n\nvar fromPoints = _bbox.fromPoints;\n\nvar SymbolDraw = require(\"../helper/SymbolDraw\");\n\nvar SymbolClz = require(\"../helper/Symbol\");\n\nvar lineAnimationDiff = require(\"./lineAnimationDiff\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar _poly = require(\"./poly\");\n\nvar Polyline = _poly.Polyline;\nvar Polygon = _poly.Polygon;\n\nvar ChartView = require(\"../../view/Chart\");\n\nvar _helper = require(\"./helper\");\n\nvar prepareDataCoordInfo = _helper.prepareDataCoordInfo;\nvar getStackedOnPoint = _helper.getStackedOnPoint;\n\nvar _createClipPathFromCoordSys = require(\"../helper/createClipPathFromCoordSys\");\n\nvar createGridClipPath = _createClipPathFromCoordSys.createGridClipPath;\nvar createPolarClipPath = _createClipPathFromCoordSys.createPolarClipPath;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// FIXME step not support polar\nfunction isPointsSame(points1, points2) {\n if (points1.length !== points2.length) {\n return;\n }\n\n for (var i = 0; i < points1.length; i++) {\n var p1 = points1[i];\n var p2 = points2[i];\n\n if (p1[0] !== p2[0] || p1[1] !== p2[1]) {\n return;\n }\n }\n\n return true;\n}\n\nfunction getBoundingDiff(points1, points2) {\n var min1 = [];\n var max1 = [];\n var min2 = [];\n var max2 = [];\n fromPoints(points1, min1, max1);\n fromPoints(points2, min2, max2); // Get a max value from each corner of two boundings.\n\n return Math.max(Math.abs(min1[0] - min2[0]), Math.abs(min1[1] - min2[1]), Math.abs(max1[0] - max2[0]), Math.abs(max1[1] - max2[1]));\n}\n\nfunction getSmooth(smooth) {\n return typeof smooth === 'number' ? smooth : smooth ? 0.5 : 0;\n}\n/**\n * @param {module:echarts/coord/cartesian/Cartesian2D|module:echarts/coord/polar/Polar} coordSys\n * @param {module:echarts/data/List} data\n * @param {Object} dataCoordInfo\n * @param {Array.>} points\n */\n\n\nfunction getStackedOnPoints(coordSys, data, dataCoordInfo) {\n if (!dataCoordInfo.valueDim) {\n return [];\n }\n\n var points = [];\n\n for (var idx = 0, len = data.count(); idx < len; idx++) {\n points.push(getStackedOnPoint(dataCoordInfo, coordSys, data, idx));\n }\n\n return points;\n}\n\nfunction turnPointsIntoStep(points, coordSys, stepTurnAt) {\n var baseAxis = coordSys.getBaseAxis();\n var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1;\n var stepPoints = [];\n\n for (var i = 0; i < points.length - 1; i++) {\n var nextPt = points[i + 1];\n var pt = points[i];\n stepPoints.push(pt);\n var stepPt = [];\n\n switch (stepTurnAt) {\n case 'end':\n stepPt[baseIndex] = nextPt[baseIndex];\n stepPt[1 - baseIndex] = pt[1 - baseIndex]; // default is start\n\n stepPoints.push(stepPt);\n break;\n\n case 'middle':\n // default is start\n var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2;\n var stepPt2 = [];\n stepPt[baseIndex] = stepPt2[baseIndex] = middle;\n stepPt[1 - baseIndex] = pt[1 - baseIndex];\n stepPt2[1 - baseIndex] = nextPt[1 - baseIndex];\n stepPoints.push(stepPt);\n stepPoints.push(stepPt2);\n break;\n\n default:\n stepPt[baseIndex] = pt[baseIndex];\n stepPt[1 - baseIndex] = nextPt[1 - baseIndex]; // default is start\n\n stepPoints.push(stepPt);\n }\n } // Last points\n\n\n points[i] && stepPoints.push(points[i]);\n return stepPoints;\n}\n\nfunction getVisualGradient(data, coordSys) {\n var visualMetaList = data.getVisual('visualMeta');\n\n if (!visualMetaList || !visualMetaList.length || !data.count()) {\n // When data.count() is 0, gradient range can not be calculated.\n return;\n }\n\n if (coordSys.type !== 'cartesian2d') {\n return;\n }\n\n var coordDim;\n var visualMeta;\n\n for (var i = visualMetaList.length - 1; i >= 0; i--) {\n var dimIndex = visualMetaList[i].dimension;\n var dimName = data.dimensions[dimIndex];\n var dimInfo = data.getDimensionInfo(dimName);\n coordDim = dimInfo && dimInfo.coordDim; // Can only be x or y\n\n if (coordDim === 'x' || coordDim === 'y') {\n visualMeta = visualMetaList[i];\n break;\n }\n }\n\n if (!visualMeta) {\n return;\n } // If the area to be rendered is bigger than area defined by LinearGradient,\n // the canvas spec prescribes that the color of the first stop and the last\n // stop should be used. But if two stops are added at offset 0, in effect\n // browsers use the color of the second stop to render area outside\n // LinearGradient. So we can only infinitesimally extend area defined in\n // LinearGradient to render `outerColors`.\n\n\n var axis = coordSys.getAxis(coordDim); // dataToCoor mapping may not be linear, but must be monotonic.\n\n var colorStops = zrUtil.map(visualMeta.stops, function (stop) {\n return {\n coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)),\n color: stop.color\n };\n });\n var stopLen = colorStops.length;\n var outerColors = visualMeta.outerColors.slice();\n\n if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) {\n colorStops.reverse();\n outerColors.reverse();\n }\n\n var tinyExtent = 10; // Arbitrary value: 10px\n\n var minCoord = colorStops[0].coord - tinyExtent;\n var maxCoord = colorStops[stopLen - 1].coord + tinyExtent;\n var coordSpan = maxCoord - minCoord;\n\n if (coordSpan < 1e-3) {\n return 'transparent';\n }\n\n zrUtil.each(colorStops, function (stop) {\n stop.offset = (stop.coord - minCoord) / coordSpan;\n });\n colorStops.push({\n offset: stopLen ? colorStops[stopLen - 1].offset : 0.5,\n color: outerColors[1] || 'transparent'\n });\n colorStops.unshift({\n // notice colorStops.length have been changed.\n offset: stopLen ? colorStops[0].offset : 0.5,\n color: outerColors[0] || 'transparent'\n }); // zrUtil.each(colorStops, function (colorStop) {\n // // Make sure each offset has rounded px to avoid not sharp edge\n // colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start);\n // });\n\n var gradient = new graphic.LinearGradient(0, 0, 0, 0, colorStops, true);\n gradient[coordDim] = minCoord;\n gradient[coordDim + '2'] = maxCoord;\n return gradient;\n}\n\nfunction getIsIgnoreFunc(seriesModel, data, coordSys) {\n var showAllSymbol = seriesModel.get('showAllSymbol');\n var isAuto = showAllSymbol === 'auto';\n\n if (showAllSymbol && !isAuto) {\n return;\n }\n\n var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n\n if (!categoryAxis) {\n return;\n } // Note that category label interval strategy might bring some weird effect\n // in some scenario: users may wonder why some of the symbols are not\n // displayed. So we show all symbols as possible as we can.\n\n\n if (isAuto // Simplify the logic, do not determine label overlap here.\n && canShowAllSymbolForCategory(categoryAxis, data)) {\n return;\n } // Otherwise follow the label interval strategy on category axis.\n\n\n var categoryDataDim = data.mapDimension(categoryAxis.dim);\n var labelMap = {};\n zrUtil.each(categoryAxis.getViewLabels(), function (labelItem) {\n labelMap[labelItem.tickValue] = 1;\n });\n return function (dataIndex) {\n return !labelMap.hasOwnProperty(data.get(categoryDataDim, dataIndex));\n };\n}\n\nfunction canShowAllSymbolForCategory(categoryAxis, data) {\n // In mose cases, line is monotonous on category axis, and the label size\n // is close with each other. So we check the symbol size and some of the\n // label size alone with the category axis to estimate whether all symbol\n // can be shown without overlap.\n var axisExtent = categoryAxis.getExtent();\n var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / categoryAxis.scale.count();\n isNaN(availSize) && (availSize = 0); // 0/0 is NaN.\n // Sampling some points, max 5.\n\n var dataLen = data.count();\n var step = Math.max(1, Math.round(dataLen / 5));\n\n for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) {\n if (SymbolClz.getSymbolSize(data, dataIndex // Only for cartesian, where `isHorizontal` exists.\n )[categoryAxis.isHorizontal() ? 1 : 0] // Empirical number\n * 1.5 > availSize) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction createLineClipPath(coordSys, hasAnimation, seriesModel) {\n if (coordSys.type === 'cartesian2d') {\n var isHorizontal = coordSys.getBaseAxis().isHorizontal();\n var clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel); // Expand clip shape to avoid clipping when line value exceeds axis\n\n if (!seriesModel.get('clip', true)) {\n var rectShape = clipPath.shape;\n var expandSize = Math.max(rectShape.width, rectShape.height);\n\n if (isHorizontal) {\n rectShape.y -= expandSize;\n rectShape.height += expandSize * 2;\n } else {\n rectShape.x -= expandSize;\n rectShape.width += expandSize * 2;\n }\n }\n\n return clipPath;\n } else {\n return createPolarClipPath(coordSys, hasAnimation, seriesModel);\n }\n}\n\nvar _default = ChartView.extend({\n type: 'line',\n init: function () {\n var lineGroup = new graphic.Group();\n var symbolDraw = new SymbolDraw();\n this.group.add(symbolDraw.group);\n this._symbolDraw = symbolDraw;\n this._lineGroup = lineGroup;\n },\n render: function (seriesModel, ecModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var group = this.group;\n var data = seriesModel.getData();\n var lineStyleModel = seriesModel.getModel('lineStyle');\n var areaStyleModel = seriesModel.getModel('areaStyle');\n var points = data.mapArray(data.getItemLayout);\n var isCoordSysPolar = coordSys.type === 'polar';\n var prevCoordSys = this._coordSys;\n var symbolDraw = this._symbolDraw;\n var polyline = this._polyline;\n var polygon = this._polygon;\n var lineGroup = this._lineGroup;\n var hasAnimation = seriesModel.get('animation');\n var isAreaChart = !areaStyleModel.isEmpty();\n var valueOrigin = areaStyleModel.get('origin');\n var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin);\n var stackedOnPoints = getStackedOnPoints(coordSys, data, dataCoordInfo);\n var showSymbol = seriesModel.get('showSymbol');\n var isIgnoreFunc = showSymbol && !isCoordSysPolar && getIsIgnoreFunc(seriesModel, data, coordSys); // Remove temporary symbols\n\n var oldData = this._data;\n oldData && oldData.eachItemGraphicEl(function (el, idx) {\n if (el.__temp) {\n group.remove(el);\n oldData.setItemGraphicEl(idx, null);\n }\n }); // Remove previous created symbols if showSymbol changed to false\n\n if (!showSymbol) {\n symbolDraw.remove();\n }\n\n group.add(lineGroup); // FIXME step not support polar\n\n var step = !isCoordSysPolar && seriesModel.get('step');\n var clipShapeForSymbol;\n\n if (coordSys && coordSys.getArea && seriesModel.get('clip', true)) {\n clipShapeForSymbol = coordSys.getArea(); // Avoid float number rounding error for symbol on the edge of axis extent.\n // See #7913 and `test/dataZoom-clip.html`.\n\n if (clipShapeForSymbol.width != null) {\n clipShapeForSymbol.x -= 0.1;\n clipShapeForSymbol.y -= 0.1;\n clipShapeForSymbol.width += 0.2;\n clipShapeForSymbol.height += 0.2;\n } else if (clipShapeForSymbol.r0) {\n clipShapeForSymbol.r0 -= 0.5;\n clipShapeForSymbol.r1 += 0.5;\n }\n }\n\n this._clipShapeForSymbol = clipShapeForSymbol; // Initialization animation or coordinate system changed\n\n if (!(polyline && prevCoordSys.type === coordSys.type && step === this._step)) {\n showSymbol && symbolDraw.updateData(data, {\n isIgnore: isIgnoreFunc,\n clipShape: clipShapeForSymbol\n });\n\n if (step) {\n // TODO If stacked series is not step\n points = turnPointsIntoStep(points, coordSys, step);\n stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);\n }\n\n polyline = this._newPolyline(points, coordSys, hasAnimation);\n\n if (isAreaChart) {\n polygon = this._newPolygon(points, stackedOnPoints, coordSys, hasAnimation);\n }\n\n lineGroup.setClipPath(createLineClipPath(coordSys, true, seriesModel));\n } else {\n if (isAreaChart && !polygon) {\n // If areaStyle is added\n polygon = this._newPolygon(points, stackedOnPoints, coordSys, hasAnimation);\n } else if (polygon && !isAreaChart) {\n // If areaStyle is removed\n lineGroup.remove(polygon);\n polygon = this._polygon = null;\n } // Update clipPath\n\n\n lineGroup.setClipPath(createLineClipPath(coordSys, false, seriesModel)); // Always update, or it is wrong in the case turning on legend\n // because points are not changed\n\n showSymbol && symbolDraw.updateData(data, {\n isIgnore: isIgnoreFunc,\n clipShape: clipShapeForSymbol\n }); // Stop symbol animation and sync with line points\n // FIXME performance?\n\n data.eachItemGraphicEl(function (el) {\n el.stopAnimation(true);\n }); // In the case data zoom triggerred refreshing frequently\n // Data may not change if line has a category axis. So it should animate nothing\n\n if (!isPointsSame(this._stackedOnPoints, stackedOnPoints) || !isPointsSame(this._points, points)) {\n if (hasAnimation) {\n this._updateAnimation(data, stackedOnPoints, coordSys, api, step, valueOrigin);\n } else {\n // Not do it in update with animation\n if (step) {\n // TODO If stacked series is not step\n points = turnPointsIntoStep(points, coordSys, step);\n stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);\n }\n\n polyline.setShape({\n points: points\n });\n polygon && polygon.setShape({\n points: points,\n stackedOnPoints: stackedOnPoints\n });\n }\n }\n }\n\n var visualColor = getVisualGradient(data, coordSys) || data.getVisual('color');\n polyline.useStyle(zrUtil.defaults( // Use color in lineStyle first\n lineStyleModel.getLineStyle(), {\n fill: 'none',\n stroke: visualColor,\n lineJoin: 'bevel'\n }));\n var smooth = seriesModel.get('smooth');\n smooth = getSmooth(seriesModel.get('smooth'));\n polyline.setShape({\n smooth: smooth,\n smoothMonotone: seriesModel.get('smoothMonotone'),\n connectNulls: seriesModel.get('connectNulls')\n });\n\n if (polygon) {\n var stackedOnSeries = data.getCalculationInfo('stackedOnSeries');\n var stackedOnSmooth = 0;\n polygon.useStyle(zrUtil.defaults(areaStyleModel.getAreaStyle(), {\n fill: visualColor,\n opacity: 0.7,\n lineJoin: 'bevel'\n }));\n\n if (stackedOnSeries) {\n stackedOnSmooth = getSmooth(stackedOnSeries.get('smooth'));\n }\n\n polygon.setShape({\n smooth: smooth,\n stackedOnSmooth: stackedOnSmooth,\n smoothMonotone: seriesModel.get('smoothMonotone'),\n connectNulls: seriesModel.get('connectNulls')\n });\n }\n\n this._data = data; // Save the coordinate system for transition animation when data changed\n\n this._coordSys = coordSys;\n this._stackedOnPoints = stackedOnPoints;\n this._points = points;\n this._step = step;\n this._valueOrigin = valueOrigin;\n },\n dispose: function () {},\n highlight: function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n\n if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) {\n var symbol = data.getItemGraphicEl(dataIndex);\n\n if (!symbol) {\n // Create a temporary symbol if it is not exists\n var pt = data.getItemLayout(dataIndex);\n\n if (!pt) {\n // Null data\n return;\n } // fix #11360: should't draw symbol outside clipShapeForSymbol\n\n\n if (this._clipShapeForSymbol && !this._clipShapeForSymbol.contain(pt[0], pt[1])) {\n return;\n }\n\n symbol = new SymbolClz(data, dataIndex);\n symbol.position = pt;\n symbol.setZ(seriesModel.get('zlevel'), seriesModel.get('z'));\n symbol.ignore = isNaN(pt[0]) || isNaN(pt[1]);\n symbol.__temp = true;\n data.setItemGraphicEl(dataIndex, symbol); // Stop scale animation\n\n symbol.stopSymbolAnimation(true);\n this.group.add(symbol);\n }\n\n symbol.highlight();\n } else {\n // Highlight whole series\n ChartView.prototype.highlight.call(this, seriesModel, ecModel, api, payload);\n }\n },\n downplay: function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n\n if (dataIndex != null && dataIndex >= 0) {\n var symbol = data.getItemGraphicEl(dataIndex);\n\n if (symbol) {\n if (symbol.__temp) {\n data.setItemGraphicEl(dataIndex, null);\n this.group.remove(symbol);\n } else {\n symbol.downplay();\n }\n }\n } else {\n // FIXME\n // can not downplay completely.\n // Downplay whole series\n ChartView.prototype.downplay.call(this, seriesModel, ecModel, api, payload);\n }\n },\n\n /**\n * @param {module:zrender/container/Group} group\n * @param {Array.>} points\n * @private\n */\n _newPolyline: function (points) {\n var polyline = this._polyline; // Remove previous created polyline\n\n if (polyline) {\n this._lineGroup.remove(polyline);\n }\n\n polyline = new Polyline({\n shape: {\n points: points\n },\n silent: true,\n z2: 10\n });\n\n this._lineGroup.add(polyline);\n\n this._polyline = polyline;\n return polyline;\n },\n\n /**\n * @param {module:zrender/container/Group} group\n * @param {Array.>} stackedOnPoints\n * @param {Array.>} points\n * @private\n */\n _newPolygon: function (points, stackedOnPoints) {\n var polygon = this._polygon; // Remove previous created polygon\n\n if (polygon) {\n this._lineGroup.remove(polygon);\n }\n\n polygon = new Polygon({\n shape: {\n points: points,\n stackedOnPoints: stackedOnPoints\n },\n silent: true\n });\n\n this._lineGroup.add(polygon);\n\n this._polygon = polygon;\n return polygon;\n },\n\n /**\n * @private\n */\n // FIXME Two value axis\n _updateAnimation: function (data, stackedOnPoints, coordSys, api, step, valueOrigin) {\n var polyline = this._polyline;\n var polygon = this._polygon;\n var seriesModel = data.hostModel;\n var diff = lineAnimationDiff(this._data, data, this._stackedOnPoints, stackedOnPoints, this._coordSys, coordSys, this._valueOrigin, valueOrigin);\n var current = diff.current;\n var stackedOnCurrent = diff.stackedOnCurrent;\n var next = diff.next;\n var stackedOnNext = diff.stackedOnNext;\n\n if (step) {\n // TODO If stacked series is not step\n current = turnPointsIntoStep(diff.current, coordSys, step);\n stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step);\n next = turnPointsIntoStep(diff.next, coordSys, step);\n stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step);\n } // Don't apply animation if diff is large.\n // For better result and avoid memory explosion problems like\n // https://github.com/apache/incubator-echarts/issues/12229\n\n\n if (getBoundingDiff(current, next) > 3000 || polygon && getBoundingDiff(stackedOnCurrent, stackedOnNext) > 3000) {\n polyline.setShape({\n points: next\n });\n\n if (polygon) {\n polygon.setShape({\n points: next,\n stackedOnPoints: stackedOnNext\n });\n }\n\n return;\n } // `diff.current` is subset of `current` (which should be ensured by\n // turnPointsIntoStep), so points in `__points` can be updated when\n // points in `current` are update during animation.\n\n\n polyline.shape.__points = diff.current;\n polyline.shape.points = current;\n graphic.updateProps(polyline, {\n shape: {\n points: next\n }\n }, seriesModel);\n\n if (polygon) {\n polygon.setShape({\n points: current,\n stackedOnPoints: stackedOnCurrent\n });\n graphic.updateProps(polygon, {\n shape: {\n points: next,\n stackedOnPoints: stackedOnNext\n }\n }, seriesModel);\n }\n\n var updatedDataInfo = [];\n var diffStatus = diff.status;\n\n for (var i = 0; i < diffStatus.length; i++) {\n var cmd = diffStatus[i].cmd;\n\n if (cmd === '=') {\n var el = data.getItemGraphicEl(diffStatus[i].idx1);\n\n if (el) {\n updatedDataInfo.push({\n el: el,\n ptIdx: i // Index of points\n\n });\n }\n }\n }\n\n if (polyline.animators && polyline.animators.length) {\n polyline.animators[0].during(function () {\n for (var i = 0; i < updatedDataInfo.length; i++) {\n var el = updatedDataInfo[i].el;\n el.attr('position', polyline.shape.__points[updatedDataInfo[i].ptIdx]);\n }\n });\n }\n },\n remove: function (ecModel) {\n var group = this.group;\n var oldData = this._data;\n\n this._lineGroup.removeAll();\n\n this._symbolDraw.remove(true); // Remove temporary created elements when highlighting\n\n\n oldData && oldData.eachItemGraphicEl(function (el, idx) {\n if (el.__temp) {\n group.remove(el);\n oldData.setItemGraphicEl(idx, null);\n }\n });\n this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._data = null;\n }\n});\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar contrastColor = '#eee';\n\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 = ['#dd6b66', '#759aa0', '#e69d87', '#8dc1a9', '#ea7e53', '#eedd78', '#73a373', '#73b9bc', '#7289ab', '#91ca8c', '#f49f42'];\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 label: {\n color: '#000'\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 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;\nvar _default = theme;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar AxisBuilder = require(\"./AxisBuilder\");\n\nvar AxisView = require(\"./AxisView\");\n\nvar cartesianAxisHelper = require(\"../../coord/cartesian/cartesianAxisHelper\");\n\nvar _axisSplitHelper = require(\"./axisSplitHelper\");\n\nvar rectCoordAxisBuildSplitArea = _axisSplitHelper.rectCoordAxisBuildSplitArea;\nvar rectCoordAxisHandleRemove = _axisSplitHelper.rectCoordAxisHandleRemove;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\nvar selfBuilderAttrs = ['splitArea', 'splitLine', 'minorSplitLine'];\nvar CartesianAxisView = AxisView.extend({\n type: 'cartesianAxis',\n axisPointerClass: 'CartesianAxisPointer',\n\n /**\n * @override\n */\n render: function (axisModel, ecModel, api, payload) {\n this.group.removeAll();\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 gridModel = axisModel.getCoordSysModel();\n var layout = cartesianAxisHelper.layout(gridModel, axisModel);\n var axisBuilder = new AxisBuilder(axisModel, layout);\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 graphic.groupTransition(oldAxisGroup, this._axisGroup, axisModel);\n CartesianAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);\n },\n remove: function () {\n rectCoordAxisHandleRemove(this);\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 lineColors = zrUtil.isArray(lineColors) ? lineColors : [lineColors];\n var gridRect = gridModel.coordinateSystem.getRect();\n var isHorizontal = axis.isHorizontal();\n var lineCount = 0;\n var ticksCoords = axis.getTicksCoords({\n tickModel: splitLineModel\n });\n var p1 = [];\n var p2 = [];\n var lineStyle = lineStyleModel.getLineStyle();\n\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 } 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\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 _minorSplitLine: function (axisModel, gridModel) {\n var axis = axisModel.axis;\n var minorSplitLineModel = axisModel.getModel('minorSplitLine');\n var lineStyleModel = minorSplitLineModel.getModel('lineStyle');\n var gridRect = gridModel.coordinateSystem.getRect();\n var isHorizontal = axis.isHorizontal();\n var minorTicksCoords = axis.getMinorTicksCoords();\n\n if (!minorTicksCoords.length) {\n return;\n }\n\n var p1 = [];\n var p2 = [];\n var lineStyle = lineStyleModel.getLineStyle();\n\n for (var i = 0; i < minorTicksCoords.length; i++) {\n for (var k = 0; k < minorTicksCoords[i].length; k++) {\n var tickCoord = axis.toGlobalCoord(minorTicksCoords[i][k].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 } else {\n p1[0] = gridRect.x;\n p1[1] = tickCoord;\n p2[0] = gridRect.x + gridRect.width;\n p2[1] = tickCoord;\n }\n\n this._axisGroup.add(new graphic.Line({\n anid: 'minor_line_' + minorTicksCoords[i][k].tickValue,\n subPixelOptimize: true,\n shape: {\n x1: p1[0],\n y1: p1[1],\n x2: p2[0],\n y2: p2[1]\n },\n style: lineStyle,\n silent: true\n }));\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 rectCoordAxisBuildSplitArea(this, this._axisGroup, axisModel, gridModel);\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\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar bbox = require(\"zrender/lib/core/bbox\");\n\nvar vec2 = require(\"zrender/lib/core/vector\");\n\nvar polygonContain = require(\"zrender/lib/contain/polygon\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\n/**\n * @param {string|Region} name\n * @param {Array} geometries\n * @param {Array.} cp\n */\nfunction Region(name, geometries, cp) {\n /**\n * @type {string}\n * @readOnly\n */\n this.name = name;\n /**\n * @type {Array.}\n * @readOnly\n */\n\n this.geometries = geometries;\n\n if (!cp) {\n var rect = this.getBoundingRect();\n cp = [rect.x + rect.width / 2, rect.y + rect.height / 2];\n } else {\n cp = [cp[0], cp[1]];\n }\n /**\n * @type {Array.}\n */\n\n\n this.center = cp;\n}\n\nRegion.prototype = {\n constructor: Region,\n properties: null,\n\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n getBoundingRect: function () {\n var rect = this._rect;\n\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\n for (var i = 0; i < geometries.length; i++) {\n // Only support polygon\n if (geometries[i].type !== 'polygon') {\n continue;\n } // Doesn't consider hole\n\n\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 } // No data\n\n\n if (i === 0) {\n min[0] = min[1] = max[0] = max[1] = 0;\n }\n\n return this._rect = new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n },\n\n /**\n * @param {} coord\n * @return {boolean}\n */\n contain: function (coord) {\n var rect = this.getBoundingRect();\n var geometries = this.geometries;\n\n if (!rect.contain(coord[0], coord[1])) {\n return false;\n }\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\n var exterior = geometries[i].exterior;\n var interiors = geometries[i].interiors;\n\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\n return true;\n }\n }\n\n return false;\n },\n transformTo: function (x, y, width, height) {\n var rect = this.getBoundingRect();\n var aspect = rect.width / rect.height;\n\n if (!width) {\n width = aspect * height;\n } else if (!height) {\n height = width / aspect;\n }\n\n var target = new BoundingRect(x, y, width, height);\n var transform = rect.calculateTransform(target);\n var geometries = this.geometries;\n\n for (var i = 0; i < geometries.length; i++) {\n // Only support polygon.\n if (geometries[i].type !== 'polygon') {\n continue;\n }\n\n var exterior = geometries[i].exterior;\n var interiors = geometries[i].interiors;\n\n for (var p = 0; p < exterior.length; p++) {\n vec2.applyTransform(exterior[p], exterior[p], transform);\n }\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\n rect = this._rect;\n rect.copy(target); // Update center\n\n this.center = [rect.x + rect.width / 2, rect.y + rect.height / 2];\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\n return newRegion;\n }\n};\nvar _default = Region;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar throttleUtil = require(\"../util/throttle\");\n\nvar parallelPreprocessor = require(\"../coord/parallel/parallelPreprocessor\");\n\nrequire(\"../coord/parallel/parallelCreator\");\n\nrequire(\"../coord/parallel/ParallelModel\");\n\nrequire(\"./parallelAxis\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar CLICK_THRESHOLD = 5; // > 4\n// Parallel view\n\necharts.extendComponentView({\n type: 'parallel',\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(this, '_throttledDispatchExpand', parallelModel.get('axisExpandRate'), 'fixRate');\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 _dispatchExpand: function (opt) {\n opt && this._api.dispatchAction(zrUtil.extend({\n type: 'parallelAxisExpand'\n }, opt));\n }\n});\nvar handlers = {\n mousedown: function (e) {\n if (checkTrigger(this, 'click')) {\n this._mouseDownPoint = [e.offsetX, e.offsetY];\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) + Math.pow(mouseDownPoint[1] - point[1], 2);\n\n if (dist > CLICK_THRESHOLD) {\n return;\n }\n\n var result = this._model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]);\n\n result.behavior !== 'none' && this._dispatchExpand({\n axisExpandWindow: result.axisExpandWindow\n });\n }\n\n this._mouseDownPoint = null;\n },\n mousemove: function (e) {\n // Should do nothing when brushing.\n if (this._mouseDownPoint || !checkTrigger(this, 'mousemove')) {\n return;\n }\n\n var model = this._model;\n var result = model.coordinateSystem.getSlidedAxisExpandWindow([e.offsetX, e.offsetY]);\n var behavior = result.behavior;\n behavior === 'jump' && this._throttledDispatchExpand.debounceNextCall(model.get('axisExpandDebounce'));\n\n this._throttledDispatchExpand(behavior === 'none' ? 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\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\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar echarts = require(\"../../echarts\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar visualSolution = require(\"../../visual/visualSolution\");\n\nvar Model = require(\"../../model/Model\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar DEFAULT_OUT_OF_BRUSH_COLOR = ['#ddd'];\nvar BrushModel = echarts.extendComponentModel({\n type: 'brush',\n dependencies: ['geo', 'grid', 'xAxis', 'yAxis', 'parallel', 'series'],\n\n /**\n * @protected\n */\n defaultOption: {\n // inBrush: null,\n // outOfBrush: null,\n toolbox: null,\n // Default value see preprocessor.\n brushLink: null,\n // Series indices array, broadcast using dataIndex.\n // or 'all', which means all series. 'none' or null means no series.\n seriesIndex: 'all',\n // seriesIndex array, specify series controlled by this brush component.\n geoIndex: null,\n //\n xAxisIndex: null,\n yAxisIndex: null,\n brushType: 'rect',\n // Default brushType, see BrushController.\n brushMode: 'single',\n // Default brushMode, 'single' or 'multiple'\n transformable: true,\n // Default transformable.\n brushStyle: {\n // Default brushStyle\n borderWidth: 1,\n color: 'rgba(120,140,180,0.3)',\n borderColor: 'rgba(120,140,180,0.8)'\n },\n throttleType: 'fixRate',\n // Throttle in brushSelected event. 'fixRate' or 'debounce'.\n // If null, no throttle. Valid only in the first brush component\n throttleDelay: 0,\n // Unit: ms, 0 means every event will be triggered.\n // FIXME\n // 试验效果\n removeOnClick: true,\n z: 10000\n },\n\n /**\n * @readOnly\n * @type {Array.}\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.}\n */\n coordInfoList: [],\n optionUpdated: function (newOption, isInit) {\n var thisOption = this.option;\n !isInit && visualSolution.replaceVisualOption(thisOption, newOption, ['inBrush', 'outOfBrush']);\n var inBrush = thisOption.inBrush = thisOption.inBrush || {}; // Always give default visual, consider setOption at the second time.\n\n thisOption.outOfBrush = thisOption.outOfBrush || {\n color: DEFAULT_OUT_OF_BRUSH_COLOR\n };\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.} [ranges]\n */\n setAreas: function (areas) {\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\nfunction generateBrushOption(option, brushOption) {\n return zrUtil.merge({\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 }, brushOption, true);\n}\n\nvar _default = BrushModel;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar assert = _util.assert;\nvar isArray = _util.isArray;\n\nvar _config = require(\"../config\");\n\nvar __DEV__ = _config.__DEV__;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {Object} define\n * @return See the return of `createTask`.\n */\nfunction createTask(define) {\n return new Task(define);\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 */\n\n\nfunction Task(define) {\n define = define || {};\n this._reset = define.reset;\n this._plan = define.plan;\n this._count = define.count;\n this._onDirty = define.onDirty;\n this._dirty = true; // Context must be specified implicitly, to\n // avoid miss update context when model changed.\n\n this.context;\n}\n\nvar taskProto = Task.prototype;\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 */\n\ntaskProto.perform = function (performArgs) {\n var upTask = this._upstream;\n var skip = performArgs && performArgs.skip; // TODO some refactor.\n // Pull data. Must pull data each time, because context.data\n // may be updated by Series.setData.\n\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\n if (this._plan && !skip) {\n planResult = this._plan(this.context);\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\n\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\n if (lastModBy !== modBy || lastModDataCount !== modDataCount) {\n planResult = 'reset';\n }\n\n function normalizeModBy(val) {\n !(val >= 1) && (val = 1); // jshint ignore:line\n\n return val;\n }\n\n var forceFirstProgress;\n\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 var step = performArgs && performArgs.step;\n\n if (upTask) {\n this._dueEnd = upTask._outputDueEnd;\n } // DataTask or overallTask\n else {\n this._dueEnd = this._count ? this._count(this.context) : Infinity;\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\n\n if (this._progress) {\n var start = this._dueIndex;\n var end = Math.min(step != null ? this._dueIndex + step : Infinity, this._dueEnd);\n\n if (!skip && (forceFirstProgress || start < end)) {\n var progress = this._progress;\n\n if (isArray(progress)) {\n for (var i = 0; i < progress.length; i++) {\n doProgress(this, progress[i], start, end, modBy, modDataCount);\n }\n } else {\n doProgress(this, progress, start, end, modBy, modDataCount);\n }\n }\n\n this._dueIndex = end; // If no `outputDueEnd`, assume that output data and\n // input data is the same, so use `dueIndex` as `outputDueEnd`.\n\n var outputDueEnd = this._settedOutputEnd != null ? this._settedOutputEnd : end;\n this._outputDueEnd = outputDueEnd;\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 ? this._settedOutputEnd : this._dueEnd;\n }\n\n return this.unfinished();\n};\n\nvar iterator = function () {\n var end;\n var current;\n var modBy;\n var modDataCount;\n var winCount;\n var it = {\n reset: function (s, e, sStep, sCount) {\n current = s;\n end = e;\n modBy = sStep;\n modDataCount = sCount;\n winCount = Math.ceil(modDataCount / modBy);\n it.next = modBy > 1 && modDataCount > 0 ? modNext : sequentialNext;\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 ? null : dataIndex < modDataCount ? dataIndex // 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\n taskIns._callingProgress({\n start: start,\n end: end,\n count: end - start,\n 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 var progress;\n var forceFirstProgress;\n\n if (!skip && taskIns._reset) {\n progress = taskIns._reset(taskIns.context);\n\n if (progress && progress.progress) {\n forceFirstProgress = progress.forceFirstProgress;\n progress = progress.progress;\n } // To simplify no progress checking, array must has item.\n\n\n if (isArray(progress) && !progress.length) {\n progress = null;\n }\n }\n\n taskIns._progress = progress;\n taskIns._modBy = taskIns._modDataCount = null;\n var downstream = taskIns._downstream;\n downstream && downstream.dirty();\n return forceFirstProgress;\n}\n/**\n * @return {boolean}\n */\n\n\ntaskProto.unfinished = function () {\n return this._progress && this._dueIndex < this._dueEnd;\n};\n/**\n * @param {Object} downTask The downstream task.\n * @return {Object} The downstream task.\n */\n\n\ntaskProto.pipe = function (downTask) {\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 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// 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\nexports.createTask = createTask;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _cursorHelper = require(\"./cursorHelper\");\n\nvar onIrrelevantElement = _cursorHelper.onIrrelevantElement;\n\nvar graphicUtil = require(\"../../util/graphic\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction makeRectPanelClipPath(rect) {\n rect = normalizeRect(rect);\n return function (localPoints, transform) {\n return graphicUtil.clipPointsByRect(localPoints, rect);\n };\n}\n\nfunction 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\nfunction makeRectIsTargetByCursor(rect, api, targetModel) {\n rect = normalizeRect(rect);\n return function (e, localCursorPoint, transform) {\n return rect.contain(localCursorPoint[0], localCursorPoint[1]) && !onIrrelevantElement(e, api, targetModel);\n };\n} // Consider width/height is negative.\n\n\nfunction normalizeRect(rect) {\n return BoundingRect.create(rect);\n}\n\nexports.makeRectPanelClipPath = makeRectPanelClipPath;\nexports.makeLinearBrushOtherExtent = makeLinearBrushOtherExtent;\nexports.makeRectIsTargetByCursor = makeRectIsTargetByCursor;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nrequire(\"../coord/polar/polarCreator\");\n\nrequire(\"./axis/AngleAxisView\");","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar graphic = require(\"../../util/graphic\");\n\nvar layout = require(\"../../util/layout\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar _treeHelper = require(\"../helper/treeHelper\");\n\nvar wrapTreePathInfo = _treeHelper.wrapTreePathInfo;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar 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 containerGroup.add(this.group);\n}\n\nBreadcrumb.prototype = {\n constructor: Breadcrumb,\n render: function (seriesModel, api, targetNode, onSelect) {\n var model = seriesModel.getModel('breadcrumb');\n var thisGroup = this.group;\n thisGroup.removeAll();\n\n if (!model.get('show') || !targetNode) {\n return;\n }\n\n var normalStyleModel = model.getModel('itemStyle'); // var emphasisStyleModel = model.getModel('emphasis.itemStyle');\n\n var textStyleModel = normalStyleModel.getModel('textStyle');\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\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(textRect.width + TEXT_PADDING * 2, layoutParam.emptyItemWidth);\n layoutParam.totalWidth += itemWidth + ITEM_GAP;\n layoutParam.renderList.push({\n node: node,\n text: text,\n width: itemWidth\n });\n }\n },\n\n /**\n * @private\n */\n _renderContent: function (seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect) {\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; // Hdie text and shorten width if necessary.\n\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(lastX, 0, itemWidth, height, i === renderList.length - 1, i === 0)\n },\n style: zrUtil.defaults(normalStyleModel.getItemStyle(), {\n lineJoin: 'bevel',\n text: text,\n textFill: textStyleModel.getTextColor(),\n textFont: textStyleModel.getFont()\n }),\n z: 10,\n onclick: zrUtil.curry(onSelect, itemNode)\n });\n this.group.add(el);\n packEventData(el, seriesModel, itemNode);\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 = [[head ? x : x - ARRAY_LENGTH, y], [x + itemWidth, y], [x + itemWidth, y + itemHeight], [head ? x : x - ARRAY_LENGTH, y + itemHeight]];\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} // Package custom mouse event.\n\n\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',\n // 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\nvar _default = Breadcrumb;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// FIXME 公用?\n\n/**\n * @param {Array.} datas\n * @param {string} statisticType 'average' 'sum'\n * @inner\n */\nfunction dataStatistics(datas, statisticType) {\n var dataNameMap = {};\n zrUtil.each(datas, function (data) {\n data.each(data.mapDimension('value'), function (value, idx) {\n // Add prefix to avoid conflict with Object.prototype.\n var mapKey = 'ec-' + data.getName(idx);\n dataNameMap[mapKey] = dataNameMap[mapKey] || [];\n\n if (!isNaN(value)) {\n dataNameMap[mapKey].push(value);\n }\n });\n });\n return datas[0].map(datas[0].mapDimension('value'), function (value, idx) {\n var mapKey = 'ec-' + datas[0].getName(idx);\n var sum = 0;\n var min = Infinity;\n var max = -Infinity;\n var len = dataNameMap[mapKey].length;\n\n for (var i = 0; i < len; i++) {\n min = Math.min(min, dataNameMap[mapKey][i]);\n max = Math.max(max, dataNameMap[mapKey][i]);\n sum += dataNameMap[mapKey][i];\n }\n\n var result;\n\n if (statisticType === 'min') {\n result = min;\n } else if (statisticType === 'max') {\n result = max;\n } else if (statisticType === 'average') {\n result = sum / len;\n } else {\n result = sum;\n }\n\n return len === 0 ? NaN : result;\n });\n}\n\nfunction _default(ecModel) {\n var seriesGroups = {};\n ecModel.eachSeriesByType('map', function (seriesModel) {\n var hostGeoModel = seriesModel.getHostGeoModel();\n var key = hostGeoModel ? 'o' + hostGeoModel.id : 'i' + seriesModel.getMapType();\n (seriesGroups[key] = seriesGroups[key] || []).push(seriesModel);\n });\n zrUtil.each(seriesGroups, function (seriesList, key) {\n var data = dataStatistics(zrUtil.map(seriesList, function (seriesModel) {\n return seriesModel.getData();\n }), seriesList[0].get('mapValueCalculation'));\n\n for (var i = 0; i < seriesList.length; i++) {\n seriesList[i].originalData = seriesList[i].getData();\n } // FIXME Put where?\n\n\n for (var i = 0; i < seriesList.length; i++) {\n seriesList[i].seriesGroup = seriesList;\n seriesList[i].needsDrawMap = i === 0 && !seriesList[i].getHostGeoModel();\n seriesList[i].setData(data.cloneShallow());\n seriesList[i].mainSeries = seriesList[0];\n }\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar graphic = require(\"../../util/graphic\");\n\nvar SymbolClz = require(\"./Symbol\");\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar isObject = _util.isObject;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\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 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]) && !(opt.isIgnore && opt.isIgnore(idx)) // 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])) && data.getItemVisual(idx, 'symbol') !== 'none';\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 */\n\n\nsymbolDrawProto.updateData = function (data, opt) {\n opt = normalizeUpdateOpt(opt);\n var group = this.group;\n var seriesModel = data.hostModel;\n var oldData = this._data;\n var SymbolCtor = this._symbolCtor;\n var seriesScope = makeSeriesScope(data); // There is no oldLineData only when first rendering or switching from\n // stream mode to normal mode, where previous elements should be removed.\n\n if (!oldData) {\n group.removeAll();\n }\n\n data.diff(oldData).add(function (newIdx) {\n var point = data.getItemLayout(newIdx);\n\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 }).update(function (newIdx, oldIdx) {\n var symbolEl = oldData.getItemGraphicEl(oldIdx);\n var point = data.getItemLayout(newIdx);\n\n if (!symbolNeedsDraw(data, point, newIdx, opt)) {\n group.remove(symbolEl);\n return;\n }\n\n if (!symbolEl) {\n symbolEl = new SymbolCtor(data, newIdx);\n symbolEl.attr('position', point);\n } else {\n symbolEl.updateData(data, newIdx, seriesScope);\n graphic.updateProps(symbolEl, {\n position: point\n }, seriesModel);\n } // Add back\n\n\n group.add(symbolEl);\n data.setItemGraphicEl(newIdx, symbolEl);\n }).remove(function (oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n el && el.fadeOut(function () {\n group.remove(el);\n });\n }).execute();\n this._data = data;\n};\n\nsymbolDrawProto.isPersistent = function () {\n return true;\n};\n\nsymbolDrawProto.updateLayout = function () {\n var data = this._data;\n\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 * 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 */\n\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\n for (var idx = taskParams.start; idx < taskParams.end; idx++) {\n var point = data.getItemLayout(idx);\n\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 = {\n isIgnore: opt\n };\n }\n\n return opt || {};\n}\n\nsymbolDrawProto.remove = function (enableAnimation) {\n var group = this.group;\n var data = this._data; // Incremental model do not have this._data.\n\n if (data && enableAnimation) {\n data.eachItemGraphicEl(function (el) {\n el.fadeOut(function () {\n group.remove(el);\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\nvar _default = SymbolDraw;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../../echarts\");\n\nvar createListSimply = require(\"../helper/createListSimply\");\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar modelUtil = require(\"../../util/model\");\n\nvar _number = require(\"../../util/number\");\n\nvar getPercentWithPrecision = _number.getPercentWithPrecision;\n\nvar dataSelectableMixin = require(\"../../component/helper/selectableMixin\");\n\nvar _dataProvider = require(\"../../data/helper/dataProvider\");\n\nvar retrieveRawAttr = _dataProvider.retrieveRawAttr;\n\nvar _sourceHelper = require(\"../../data/helper/sourceHelper\");\n\nvar makeSeriesEncodeForNameBased = _sourceHelper.makeSeriesEncodeForNameBased;\n\nvar LegendVisualProvider = require(\"../../visual/LegendVisualProvider\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar PieSeries = echarts.extendSeriesModel({\n type: 'series.pie',\n // Overwrite\n init: function (option) {\n PieSeries.superApply(this, 'init', arguments); // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\n this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));\n this.updateSelectedMap(this._createSelectableList());\n\n this._defaultLabelLine(option);\n },\n // Overwrite\n mergeOption: function (newOption) {\n PieSeries.superCall(this, 'mergeOption', newOption);\n this.updateSelectedMap(this._createSelectableList());\n },\n getInitialData: function (option, ecModel) {\n return createListSimply(this, {\n coordDimensions: ['value'],\n encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)\n });\n },\n _createSelectableList: function () {\n var data = this.getRawData();\n var valueDim = data.mapDimension('value');\n var targetList = [];\n\n for (var i = 0, len = data.count(); i < len; i++) {\n targetList.push({\n name: data.getName(i),\n value: data.get(valueDim, i),\n selected: retrieveRawAttr(data, i, 'selected')\n });\n }\n\n return targetList;\n },\n // Overwrite\n getDataParams: function (dataIndex) {\n var data = this.getData();\n var params = PieSeries.superCall(this, 'getDataParams', dataIndex); // FIXME toFixed?\n\n var valueList = [];\n data.each(data.mapDimension('value'), function (value) {\n valueList.push(value);\n });\n params.percent = getPercentWithPrecision(valueList, dataIndex, data.hostModel.get('percentPrecision'));\n params.$vars.push('percent');\n return params;\n },\n _defaultLabelLine: function (option) {\n // Extend labelLine emphasis\n modelUtil.defaultEmphasis(option, 'labelLine', ['show']);\n var labelLineNormalOpt = option.labelLine;\n var labelLineEmphasisOpt = option.emphasis.labelLine; // Not show label line if `label.normal.show = false`\n\n labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.show;\n labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.emphasis.label.show;\n },\n defaultOption: {\n zlevel: 0,\n z: 2,\n legendHoverLink: true,\n hoverAnimation: true,\n // 默认全局居中\n center: ['50%', '50%'],\n radius: [0, '75%'],\n // 默认顺时针\n clockwise: true,\n startAngle: 90,\n // 最小角度改为0\n minAngle: 0,\n // If the angle of a sector less than `minShowLabelAngle`,\n // the label will not be displayed.\n minShowLabelAngle: 0,\n // 选中时扇区偏移量\n selectedOffset: 10,\n // 高亮扇区偏移量\n hoverOffset: 10,\n // If use strategy to avoid label overlapping\n avoidLabelOverlap: true,\n // 选择模式,默认关闭,可选single,multiple\n // selectedMode: false,\n // 南丁格尔玫瑰图模式,'radius'(半径) | 'area'(面积)\n // roseType: null,\n percentPrecision: 2,\n // If still show when all data zero.\n stillShowZeroSum: true,\n // cursor: null,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n width: null,\n height: null,\n label: {\n // If rotate around circle\n rotate: false,\n show: true,\n // 'outer', 'inside', 'center'\n position: 'outer',\n // 'none', 'labelLine', 'edge'. Works only when position is 'outer'\n alignTo: 'none',\n // Closest distance between label and chart edge.\n // Works only position is 'outer' and alignTo is 'edge'.\n margin: '25%',\n // Works only position is 'outer' and alignTo is not 'edge'.\n bleedMargin: 10,\n // Distance between text and label line.\n distanceToLabelLine: 5 // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调\n // 默认使用全局文本样式,详见TEXTSTYLE\n // distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数\n\n },\n // Enabled when label.normal.position is 'outer'\n labelLine: {\n show: true,\n // 引导线两段中的第一段长度\n length: 15,\n // 引导线两段中的第二段长度\n length2: 15,\n smooth: false,\n lineStyle: {\n // color: 各异,\n width: 1,\n type: 'solid'\n }\n },\n itemStyle: {\n borderWidth: 1\n },\n // Animation type. Valid values: expansion, scale\n animationType: 'expansion',\n // Animation type when update. Valid values: transition, expansion\n animationTypeUpdate: 'transition',\n animationEasing: 'cubicOut'\n }\n});\nzrUtil.mixin(PieSeries, dataSelectableMixin);\nvar _default = PieSeries;\nmodule.exports = _default;","import request from '@/utils/request'\n\n// 智能决策机器人\nexport function getRobotData(data) {\n return request({\n url: '/promotion/smart/getDataStat',\n method: 'post',\n data\n }).then(res => res.data.result || {})\n}\n// 拉新分析接口\nexport function getOrderDataStat(data) {\n return request({\n url: '/promotion/smart/getOrderDataStat',\n method: 'post',\n data\n }).then(res => res.data.result || {})\n}\n\n// 复购接口\nexport function getRepurchaseDataStat(data) {\n return request({\n url: '/promotion/smart/getRepurchaseDataStat',\n method: 'post',\n data\n }).then(res => res.data.result || {})\n}\n\n// 查询活动列表接口\nexport function getPromotionList(data) {\n return request({\n url: '/promotion/smart/getPromotionList',\n method: 'post',\n data\n }).then(res => res.data.result || {})\n}\n\n// 会员营销分析接口\nexport function getMemberMarketDataStat(data) {\n return request({\n url: '/promotion/smart/getMemberMarketDataStat',\n method: 'post',\n data\n }).then(res => res.data.result || {})\n}\n\n// 建议查询接口\nexport function getSuggestData(data) {\n return request({\n url: '/promotion/smart/querySaasSuggestByType',\n method: 'post',\n data\n }).then(res => res.data.result || {})\n}\n\n// 获取物料二维码地址\nexport function getQrCodePicUrl(data) {\n return request({\n url: '/promotion/smart/getQrCodePicUrl',\n method: 'post',\n data\n }).then(res => res.data.result || {})\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 zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _number = require(\"./number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar formatUtil = require(\"./format\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Layout helpers for each component positioning\nvar each = zrUtil.each;\n/**\n * @public\n */\n\nvar LOCATION_PARAMS = ['left', 'right', 'top', 'bottom', 'width', 'height'];\n/**\n * @public\n */\n\nvar HV_NAMES = [['width', 'left', 'right'], ['height', 'top', 'bottom']];\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\n if (maxHeight == null) {\n maxHeight = Infinity;\n }\n\n var currentLineMaxSize = 0;\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; // Wrap when width exceeds maxWidth or meet a `newline` group\n // FIXME compare before adding gap?\n\n if (nextX > maxWidth || child.newline) {\n x = 0;\n nextX = moveX;\n y += currentLineMaxSize + gap;\n currentLineMaxSize = rect.height;\n } else {\n // FIXME: consider rect.y is not `0`?\n currentLineMaxSize = Math.max(currentLineMaxSize, rect.height);\n }\n } else {\n var moveY = rect.height + (nextChildRect ? -nextChildRect.y + rect.y : 0);\n nextY = y + moveY; // Wrap when width exceeds maxHeight or meet a `newline` group\n\n if (nextY > maxHeight || child.newline) {\n x += currentLineMaxSize + gap;\n y = 0;\n nextY = moveY;\n currentLineMaxSize = rect.width;\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 orient === 'horizontal' ? x = nextX + gap : y = nextY + gap;\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 */\n\n\nvar box = boxLayout;\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 */\n\nvar vbox = zrUtil.curry(boxLayout, 'vertical');\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 */\n\nvar hbox = zrUtil.curry(boxLayout, 'horizontal');\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 */\n\nfunction getAvailableSize(positionInfo, containerRect, margin) {\n var containerWidth = containerRect.width;\n var containerHeight = containerRect.height;\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 (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 margin = formatUtil.normalizeCssArray(margin || 0);\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 * 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 */\n\n\nfunction getLayoutRect(positionInfo, containerRect, margin) {\n margin = formatUtil.normalizeCssArray(margin || 0);\n var containerWidth = containerRect.width;\n var containerHeight = containerRect.height;\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 var verticalMargin = margin[2] + margin[0];\n var horizontalMargin = margin[1] + margin[3];\n var aspect = positionInfo.aspect; // If width is not specified, calculate width from left and right\n\n if (isNaN(width)) {\n width = containerWidth - right - horizontalMargin - left;\n }\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 } else {\n height = containerHeight * 0.8;\n }\n } // Calculate width or height with given aspect\n\n\n if (isNaN(width)) {\n width = aspect * height;\n }\n\n if (isNaN(height)) {\n height = width / aspect;\n }\n } // If left is not specified, calculate left from right and width\n\n\n if (isNaN(left)) {\n left = containerWidth - right - width - horizontalMargin;\n }\n\n if (isNaN(top)) {\n top = containerHeight - bottom - height - verticalMargin;\n } // Align left and top\n\n\n switch (positionInfo.left || positionInfo.right) {\n case 'center':\n left = containerWidth / 2 - width / 2 - margin[3];\n break;\n\n case 'right':\n left = containerWidth - width - horizontalMargin;\n break;\n }\n\n switch (positionInfo.top || positionInfo.bottom) {\n case 'middle':\n case 'center':\n top = containerHeight / 2 - height / 2 - margin[0];\n break;\n\n case 'bottom':\n top = containerHeight - height - verticalMargin;\n break;\n } // If something is wrong and left, top, width, height are calculated as NaN\n\n\n left = left || 0;\n top = top || 0;\n\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\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 * 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.} [opt.hv=[1,1]] Only horizontal or only vertical.\n * @param {Array.} [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 */\n\n\nfunction 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\n if (boundingMode === 'raw') {\n rect = el.type === 'group' ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0) : el.getBoundingRect();\n } else {\n rect = el.getBoundingRect();\n\n if (el.needLocalTransform()) {\n var transform = el.getLocalTransform(); // Notice: raw rect may be inner object of el,\n // which should not be modified.\n\n rect = rect.clone();\n rect.applyTransform(transform);\n }\n } // The real width and height can not be specified but calculated by the given el.\n\n\n positionInfo = getLayoutRect(zrUtil.defaults({\n width: rect.width,\n height: rect.height\n }, positionInfo), containerRect, margin); // 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\n var elPos = el.position;\n var dx = h ? positionInfo.x - rect.x : 0;\n var dy = v ? positionInfo.y - rect.y : 0;\n el.attr('position', boundingMode === 'raw' ? [dx, dy] : [elPos[0] + dx, elPos[1] + dy]);\n}\n/**\n * @param {Object} option Contains some of the properties in HV_NAMES.\n * @param {number} hvIdx 0: horizontal; 1: vertical.\n */\n\n\nfunction sizeCalculable(option, hvIdx) {\n return option[HV_NAMES[hvIdx][0]] != null || option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null;\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.} [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 */\n\n\nfunction mergeLayoutParam(targetOption, newOption, opt) {\n !zrUtil.isObject(opt) && (opt = {});\n var ignoreSize = opt.ignoreSize;\n !zrUtil.isArray(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]);\n var hResult = merge(HV_NAMES[0], 0);\n var vResult = merge(HV_NAMES[1], 1);\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 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 } else if (hasValue(newOption, names[2])) {\n merged[names[1]] = null;\n }\n\n return merged;\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\n\n if (mergedValueCount === enoughParamNumber || !newValueCount) {\n return merged;\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 } else {\n // Chose another param from targetOption by priority.\n for (var i = 0; i < names.length; i++) {\n var name = names[i];\n\n if (!hasProp(newParams, name) && hasProp(targetOption, name)) {\n newParams[name] = targetOption[name];\n break;\n }\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 * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n * @param {Object} source\n * @return {Object} Result contains those props.\n */\n\n\nfunction getLayoutParams(source) {\n return copyLayoutParams({}, source);\n}\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n * @param {Object} source\n * @return {Object} Result contains those props.\n */\n\n\nfunction 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\nexports.LOCATION_PARAMS = LOCATION_PARAMS;\nexports.HV_NAMES = HV_NAMES;\nexports.box = box;\nexports.vbox = vbox;\nexports.hbox = hbox;\nexports.getAvailableSize = getAvailableSize;\nexports.getLayoutRect = getLayoutRect;\nexports.positionElement = positionElement;\nexports.sizeCalculable = sizeCalculable;\nexports.mergeLayoutParam = mergeLayoutParam;\nexports.getLayoutParams = getLayoutParams;\nexports.copyLayoutParams = copyLayoutParams;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echarts = require(\"../echarts\");\n\nrequire(\"./boxplot/BoxplotSeries\");\n\nrequire(\"./boxplot/BoxplotView\");\n\nvar boxplotVisual = require(\"./boxplot/boxplotVisual\");\n\nvar boxplotLayout = require(\"./boxplot/boxplotLayout\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\necharts.registerVisual(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\nvar _util = require(\"zrender/lib/core/util\");\n\nvar retrieve = _util.retrieve;\nvar defaults = _util.defaults;\nvar extend = _util.extend;\nvar each = _util.each;\n\nvar formatUtil = require(\"../../util/format\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar Model = require(\"../../model/Model\");\n\nvar _number = require(\"../../util/number\");\n\nvar isRadianAroundZero = _number.isRadianAroundZero;\nvar remRadian = _number.remRadian;\n\nvar _symbol = require(\"../../util/symbol\");\n\nvar createSymbol = _symbol.createSymbol;\n\nvar matrixUtil = require(\"zrender/lib/core/matrix\");\n\nvar _vector = require(\"zrender/lib/core/vector\");\n\nvar v2ApplyTransform = _vector.applyTransform;\n\nvar _axisHelper = require(\"../../coord/axisHelper\");\n\nvar shouldShowAllLabels = _axisHelper.shouldShowAllLabels;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar PI = Math.PI;\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.} 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 */\n\nvar AxisBuilder = function (axisModel, opt) {\n /**\n * @readOnly\n */\n this.opt = opt;\n /**\n * @readOnly\n */\n\n this.axisModel = axisModel; // Default value\n\n defaults(opt, {\n labelOffset: 0,\n nameDirection: 1,\n tickDirection: 1,\n labelDirection: 1,\n silent: true\n });\n /**\n * @readOnly\n */\n\n this.group = new graphic.Group(); // FIXME Not use a seperate text group?\n\n var dumbGroup = new graphic.Group({\n position: opt.position.slice(),\n rotation: opt.rotation\n }); // this.group.add(dumbGroup);\n // this._dumbGroup = dumbGroup;\n\n dumbGroup.updateTransform();\n this._transform = dumbGroup.transform;\n this._dumbGroup = dumbGroup;\n};\n\nAxisBuilder.prototype = {\n constructor: AxisBuilder,\n hasBuilder: function (name) {\n return !!builders[name];\n },\n add: function (name) {\n builders[name].call(this);\n },\n getGroup: function () {\n return this.group;\n }\n};\nvar builders = {\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 var matrix = this._transform;\n var pt1 = [extent[0], 0];\n var pt2 = [extent[1], 0];\n\n if (matrix) {\n v2ApplyTransform(pt1, pt1, matrix);\n v2ApplyTransform(pt2, pt2, matrix);\n }\n\n var lineStyle = extend({\n lineCap: 'round'\n }, axisModel.getModel('axisLine.lineStyle').getLineStyle());\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 var arrows = axisModel.get('axisLine.symbol');\n var arrowSize = axisModel.get('axisLine.symbolSize');\n var arrowOffset = axisModel.get('axisLine.symbolOffset') || 0;\n\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\n if (typeof arrowSize === 'string' || typeof arrowSize === 'number') {\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 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]) + (pt1[1] - pt2[1]) * (pt1[1] - pt2[1]))\n }], function (point, index) {\n if (arrows[index] !== 'none' && arrows[index] != null) {\n var symbol = createSymbol(arrows[index], -symbolWidth / 2, -symbolHeight / 2, symbolWidth, symbolHeight, lineStyle.stroke, true); // Calculate arrow position with offset\n\n var r = point.r + point.offset;\n var pos = [pt1[0] + r * Math.cos(opt.rotation), pt1[1] - r * Math.sin(opt.rotation)];\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 var ticksEls = buildAxisMajorTicks(this, axisModel, opt);\n var labelEls = buildAxisLabel(this, axisModel, opt);\n fixMinMaxLabelShow(axisModel, labelEls, ticksEls);\n buildAxisMinorTicks(this, axisModel, opt);\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 var extent = this.axisModel.axis.getExtent();\n var gapSignal = extent[0] > extent[1] ? -1 : 1;\n var pos = [nameLocation === 'start' ? extent[0] - gapSignal * gap : nameLocation === 'end' ? extent[1] + gapSignal * gap : (extent[0] + extent[1]) / 2, // 'middle'\n // Reuse labelOffset.\n isNameLocationCenter(nameLocation) ? opt.labelOffset + nameDirection * gap : 0];\n var labelLayout;\n var nameRotation = axisModel.get('nameRotate');\n\n if (nameRotation != null) {\n nameRotation = nameRotation * PI / 180; // To radian.\n }\n\n var axisNameAvailableWidth;\n\n if (isNameLocationCenter(nameLocation)) {\n labelLayout = innerTextLayout(opt.rotation, nameRotation != null ? nameRotation : opt.rotation, // Adapt to axis.\n nameDirection);\n } else {\n labelLayout = endTextLayout(opt, nameLocation, nameRotation || 0, extent);\n axisNameAvailableWidth = opt.axisNameAvailableWidth;\n\n if (axisNameAvailableWidth != null) {\n axisNameAvailableWidth = Math.abs(axisNameAvailableWidth / Math.sin(labelLayout.rotation));\n !isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null);\n }\n }\n\n var textFont = textStyleModel.getFont();\n var truncateOpt = axisModel.get('nameTruncate', true) || {};\n var ellipsis = truncateOpt.ellipsis;\n var maxWidth = retrieve(opt.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth); // FIXME\n // truncate rich text? (consider performance)\n\n var truncatedText = ellipsis != null && maxWidth != null ? formatUtil.truncateText(name, maxWidth, textFont, ellipsis, {\n minChar: 2,\n placeholder: truncateOpt.placeholder\n }) : name;\n var tooltipOpt = axisModel.get('tooltip', true);\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 var textEl = new graphic.Text({\n // Id for animation\n anid: 'name',\n __fullText: name,\n __truncatedText: truncatedText,\n position: pos,\n rotation: labelLayout.rotation,\n silent: isLabelSilent(axisModel),\n z2: 1,\n tooltip: tooltipOpt && tooltipOpt.show ? extend({\n content: name,\n formatter: function () {\n return name;\n },\n formatterParams: formatterParams\n }, tooltipOpt) : null\n });\n graphic.setTextStyle(textEl.style, textStyleModel, {\n text: truncatedText,\n textFont: textFont,\n textFill: textStyleModel.getTextColor() || axisModel.get('axisLine.lineStyle.color'),\n textAlign: textStyleModel.get('align') || labelLayout.textAlign,\n textVerticalAlign: textStyleModel.get('verticalAlign') || 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 } // FIXME\n\n\n this._dumbGroup.add(textEl);\n\n textEl.updateTransform();\n this.group.add(textEl);\n textEl.decomposeTransform();\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 * @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 */\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)) {\n // Label is parallel with axis line.\n textVerticalAlign = direction > 0 ? 'top' : 'bottom';\n textAlign = 'center';\n } else if (isRadianAroundZero(rotationDiff - PI)) {\n // Label is inverse parallel with axis line.\n textVerticalAlign = direction > 0 ? 'bottom' : 'top';\n textAlign = 'center';\n } else {\n textVerticalAlign = 'middle';\n\n if (rotationDiff > 0 && rotationDiff < PI) {\n textAlign = direction > 0 ? 'right' : 'left';\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 || textPosition !== 'start' && inverse;\n\n if (isRadianAroundZero(rotationDiff - PI / 2)) {\n textVerticalAlign = onLeft ? 'bottom' : 'top';\n textAlign = 'center';\n } else if (isRadianAroundZero(rotationDiff - PI * 1.5)) {\n textVerticalAlign = onLeft ? 'top' : 'bottom';\n textAlign = 'center';\n } else {\n textVerticalAlign = 'middle';\n\n if (rotationDiff < PI * 1.5 && rotationDiff > PI / 2) {\n textAlign = onLeft ? 'left' : 'right';\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') // Consider mouse cursor, add these restrictions.\n || !(axisModel.get('triggerEvent') || tooltipOpt && tooltipOpt.show);\n};\n\nfunction fixMinMaxLabelShow(axisModel, labelEls, tickEls) {\n if (shouldShowAllLabels(axisModel.axis)) {\n return;\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\n\n var showMinLabel = axisModel.get('axisLabel.showMinLabel');\n var showMaxLabel = axisModel.get('axisLabel.showMaxLabel'); // FIXME\n // Have not consider onBand yet, where tick els is more than label els.\n\n labelEls = labelEls || [];\n tickEls = tickEls || [];\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 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 } else if (isTwoLabelOverlapped(firstLabel, nextLabel)) {\n if (showMinLabel) {\n ignoreEl(nextLabel);\n ignoreEl(nextTick);\n } else {\n ignoreEl(firstLabel);\n ignoreEl(firstTick);\n }\n }\n\n if (showMaxLabel === false) {\n ignoreEl(lastLabel);\n ignoreEl(lastTick);\n } else if (isTwoLabelOverlapped(prevLabel, lastLabel)) {\n if (showMaxLabel) {\n ignoreEl(prevLabel);\n ignoreEl(prevTick);\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 } // When checking intersect of two rotated labels, we use mRotationBack\n // to avoid that boundingRect is enlarge when using `boundingRect.applyTransform`.\n\n\n var mRotationBack = matrixUtil.identity([]);\n matrixUtil.rotate(mRotationBack, mRotationBack, -current.rotation);\n firstRect.applyTransform(matrixUtil.mul([], mRotationBack, current.getLocalTransform()));\n nextRect.applyTransform(matrixUtil.mul([], mRotationBack, next.getLocalTransform()));\n return firstRect.intersect(nextRect);\n}\n\nfunction isNameLocationCenter(nameLocation) {\n return nameLocation === 'middle' || nameLocation === 'center';\n}\n\nfunction createTicks(ticksCoords, tickTransform, tickEndCoord, tickLineStyle, aniid) {\n var tickEls = [];\n var pt1 = [];\n var pt2 = [];\n\n for (var i = 0; i < ticksCoords.length; i++) {\n var tickCoord = ticksCoords[i].coord;\n pt1[0] = tickCoord;\n pt1[1] = 0;\n pt2[0] = tickCoord;\n pt2[1] = tickEndCoord;\n\n if (tickTransform) {\n v2ApplyTransform(pt1, pt1, tickTransform);\n v2ApplyTransform(pt2, pt2, tickTransform);\n } // Tick line, Not use group transform to have better line draw\n\n\n var tickEl = new graphic.Line({\n // Id for animation\n anid: aniid + '_' + 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: tickLineStyle,\n z2: 2,\n silent: true\n });\n tickEls.push(tickEl);\n }\n\n return tickEls;\n}\n\nfunction buildAxisMajorTicks(axisBuilder, axisModel, opt) {\n var axis = axisModel.axis;\n var tickModel = axisModel.getModel('axisTick');\n\n if (!tickModel.get('show') || axis.scale.isBlank()) {\n return;\n }\n\n var lineStyleModel = tickModel.getModel('lineStyle');\n var tickEndCoord = opt.tickDirection * tickModel.get('length');\n var ticksCoords = axis.getTicksCoords();\n var ticksEls = createTicks(ticksCoords, axisBuilder._transform, tickEndCoord, defaults(lineStyleModel.getLineStyle(), {\n stroke: axisModel.get('axisLine.lineStyle.color')\n }), 'ticks');\n\n for (var i = 0; i < ticksEls.length; i++) {\n axisBuilder.group.add(ticksEls[i]);\n }\n\n return ticksEls;\n}\n\nfunction buildAxisMinorTicks(axisBuilder, axisModel, opt) {\n var axis = axisModel.axis;\n var minorTickModel = axisModel.getModel('minorTick');\n\n if (!minorTickModel.get('show') || axis.scale.isBlank()) {\n return;\n }\n\n var minorTicksCoords = axis.getMinorTicksCoords();\n\n if (!minorTicksCoords.length) {\n return;\n }\n\n var lineStyleModel = minorTickModel.getModel('lineStyle');\n var tickEndCoord = opt.tickDirection * minorTickModel.get('length');\n var minorTickLineStyle = defaults(lineStyleModel.getLineStyle(), defaults(axisModel.getModel('axisTick').getLineStyle(), {\n stroke: axisModel.get('axisLine.lineStyle.color')\n }));\n\n for (var i = 0; i < minorTicksCoords.length; i++) {\n var minorTicksEls = createTicks(minorTicksCoords[i], axisBuilder._transform, tickEndCoord, minorTickLineStyle, 'minorticks_' + i);\n\n for (var k = 0; k < minorTicksEls.length; k++) {\n axisBuilder.group.add(minorTicksEls[k]);\n }\n }\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(); // Special label rotate.\n\n var labelRotation = (retrieve(opt.labelRotate, labelModel.get('rotate')) || 0) * PI / 180;\n var labelLayout = innerTextLayout(opt.rotation, labelRotation, opt.labelDirection);\n var rawCategoryData = axisModel.getCategories && axisModel.getCategories(true);\n var labelEls = [];\n var silent = isLabelSilent(axisModel);\n var triggerEvent = axisModel.get('triggerEvent');\n each(labels, function (labelItem, index) {\n var tickValue = labelItem.tickValue;\n var formattedLabel = labelItem.formattedLabel;\n var rawLabel = labelItem.rawLabel;\n var itemLabelModel = labelModel;\n\n if (rawCategoryData && rawCategoryData[tickValue] && rawCategoryData[tickValue].textStyle) {\n itemLabelModel = new Model(rawCategoryData[tickValue].textStyle, labelModel, axisModel.ecModel);\n }\n\n var textColor = itemLabelModel.getTextColor() || axisModel.get('axisLine.lineStyle.color');\n var tickCoord = axis.dataToCoord(tickValue);\n var pos = [tickCoord, opt.labelOffset + opt.labelDirection * labelMargin];\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 graphic.setTextStyle(textEl.style, itemLabelModel, {\n text: formattedLabel,\n textAlign: itemLabelModel.getShallow('align', true) || labelLayout.textAlign,\n textVerticalAlign: itemLabelModel.getShallow('verticalAlign', true) || itemLabelModel.getShallow('baseline', true) || labelLayout.textVerticalAlign,\n textFill: typeof textColor === 'function' ? textColor( // (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' ? rawLabel : axis.type === 'value' ? tickValue + '' : tickValue, index) : textColor\n }); // Pack data for mouse event\n\n if (triggerEvent) {\n textEl.eventData = makeAxisEventDataBase(axisModel);\n textEl.eventData.targetType = 'axisLabel';\n textEl.eventData.value = rawLabel;\n } // FIXME\n\n\n axisBuilder._dumbGroup.add(textEl);\n\n textEl.updateTransform();\n labelEls.push(textEl);\n axisBuilder.group.add(textEl);\n textEl.decomposeTransform();\n });\n return labelEls;\n}\n\nvar _default = AxisBuilder;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar each = _util.each;\nvar isArray = _util.isArray;\nvar isObject = _util.isObject;\n\nvar compatStyle = require(\"./helper/compatStyle\");\n\nvar _model = require(\"../util/model\");\n\nvar normalizeToArray = _model.normalizeToArray;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Compatitable with 2.0\nfunction get(opt, path) {\n path = path.split(',');\n var obj = opt;\n\n for (var i = 0; i < path.length; i++) {\n obj = obj && obj[path[i]];\n\n if (obj == null) {\n break;\n }\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\n for (var i = 0; i < path.length - 1; i++) {\n key = path[i];\n\n if (obj[key] == null) {\n obj[key] = {};\n }\n\n obj = obj[key];\n }\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 = [['x', 'left'], ['y', 'top'], ['x2', 'right'], ['y2', 'bottom']];\nvar COMPATITABLE_COMPONENTS = ['grid', 'geo', 'parallel', 'legend', 'toolbox', 'title', 'visualMap', 'dataZoom', 'timeline'];\n\nfunction _default(option, isTheme) {\n compatStyle(option, isTheme); // Make sure series array for model initialization.\n\n option.series = normalizeToArray(option.series);\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 } else if (seriesType === 'pie' || seriesType === 'gauge') {\n if (seriesOpt.clockWise != null) {\n seriesOpt.clockwise = seriesOpt.clockWise;\n }\n } else if (seriesType === 'gauge') {\n var pointerColor = get(seriesOpt, 'pointer.color');\n pointerColor != null && set(seriesOpt, 'itemStyle.color', pointerColor);\n }\n\n compatLayoutProperties(seriesOpt);\n }); // dataRange has changed to visualMap\n\n if (option.dataRange) {\n option.visualMap = option.dataRange;\n }\n\n each(COMPATITABLE_COMPONENTS, function (componentName) {\n var options = option[componentName];\n\n if (options) {\n if (!isArray(options)) {\n options = [options];\n }\n\n each(options, function (option) {\n compatLayoutProperties(option);\n });\n }\n });\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _config = require(\"../../config\");\n\nvar __DEV__ = _config.__DEV__;\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar Eventful = require(\"zrender/lib/mixin/Eventful\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar interactionMutex = require(\"./interactionMutex\");\n\nvar DataDiffer = require(\"../../data/DataDiffer\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar curry = zrUtil.curry;\nvar each = zrUtil.each;\nvar map = zrUtil.map;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathPow = Math.pow;\nvar COVER_Z = 10000;\nvar UNSELECT_THRESHOLD = 6;\nvar MIN_RESIZE_LINE_WIDTH = 6;\nvar MUTEX_RESOURCE_KEY = 'globalPan';\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};\nvar baseUID = 0;\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., 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 */\n\nfunction BrushController(zr) {\n Eventful.call(this);\n /**\n * @type {module:zrender/zrender~ZRender}\n * @private\n */\n\n this._zr = zr;\n /**\n * @type {module:zrender/container/Group}\n * @readOnly\n */\n\n this.group = new graphic.Group();\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\n this._brushType;\n /**\n * Only for drawing (after enabledBrush).\n *\n * @private\n * @type {Object}\n */\n\n this._brushOption;\n /**\n * @private\n * @type {Object}\n */\n\n this._panels;\n /**\n * @private\n * @type {Array.}\n */\n\n this._track = [];\n /**\n * @private\n * @type {boolean}\n */\n\n this._dragging;\n /**\n * @private\n * @type {Array}\n */\n\n this._covers = [];\n /**\n * @private\n * @type {moudule:zrender/container/Group}\n */\n\n this._creatingCover;\n /**\n * `true` means global panel\n * @private\n * @type {module:zrender/container/Group|boolean}\n */\n\n this._creatingPanel;\n /**\n * @private\n * @type {boolean}\n */\n\n this._enableGlobalPan;\n /**\n * @private\n * @type {boolean}\n */\n\n /**\n * @private\n * @type {string}\n */\n this._uid = 'brushController_' + baseUID++;\n /**\n * @private\n * @type {Object}\n */\n\n this._handlers = {};\n each(pointerHandlers, function (handler, eventName) {\n this._handlers[eventName] = zrUtil.bind(handler, this);\n }, this);\n}\n\nBrushController.prototype = {\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 this._brushType && doDisableBrush(this);\n brushOption.brushType && doEnableBrush(this, brushOption);\n return this;\n },\n\n /**\n * @param {Array.} 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 } else {\n this._panels = null;\n }\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 this._enableGlobalPan = opt.enableGlobalPan;\n var thisGroup = this.group;\n\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 return this;\n },\n eachCover: function (cb, context) {\n each(this._covers, cb, context);\n },\n\n /**\n * Update covers.\n * @param {Array.} 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 brushOptionList = zrUtil.map(brushOptionList, function (brushOption) {\n return zrUtil.merge(zrUtil.clone(DEFAULT_BRUSH_OPT), brushOption, true);\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 new DataDiffer(oldCovers, brushOptionList, oldGetKey, getKey).add(addOrUpdate).update(addOrUpdate).remove(remove).execute();\n return this;\n\n function getKey(brushOption, index) {\n return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index) + '-' + 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]; // Consider setOption in event listener of brushSelect,\n // where updating cover when creating should be forbiden.\n\n if (oldIndex != null && oldCovers[oldIndex] === creatingCover) {\n newCovers[newIndex] = oldCovers[oldIndex];\n } else {\n var cover = newCovers[newIndex] = oldIndex != null ? (oldCovers[oldIndex].__brushOption = newBrushOption, oldCovers[oldIndex]) : 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 unmount: function () {\n this.enableBrush(false); // container may 'removeAll' outside.\n\n clearCovers(this);\n\n this._zr.remove(this.group);\n\n return this;\n },\n dispose: function () {\n this.unmount();\n this.off();\n }\n};\nzrUtil.mixin(BrushController, Eventful);\n\nfunction doEnableBrush(controller, brushOption) {\n var zr = controller._zr; // Consider roam, which takes globalPan too.\n\n if (!controller._enableGlobalPan) {\n interactionMutex.take(zr, MUTEX_RESOURCE_KEY, controller._uid);\n }\n\n mountHandlers(zr, controller._handlers);\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 interactionMutex.release(zr, MUTEX_RESOURCE_KEY, controller._uid);\n unmountHandlers(zr, controller._handlers);\n controller._brushType = controller._brushOption = null;\n}\n\nfunction mountHandlers(zr, handlers) {\n each(handlers, function (handler, eventName) {\n zr.on(eventName, handler);\n });\n}\n\nfunction unmountHandlers(zr, handlers) {\n each(handlers, function (handler, eventName) {\n zr.off(eventName, handler);\n });\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\n if (coverRenderer.endCreating) {\n coverRenderer.endCreating(controller, creatingCover);\n updateZ(creatingCover, creatingCover.__brushOption);\n }\n\n return creatingCover;\n}\n\nfunction updateCoverShape(controller, cover) {\n var brushOption = cover.__brushOption;\n getCoverRenderer(cover).updateCoverShape(controller, cover, brushOption.range, brushOption);\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} // return target panel or `true` (means global panel)\n\n\nfunction getPanelByPoint(controller, e, localCursorPoint) {\n var panels = controller._panels;\n\n if (!panels) {\n return true; // Global panel\n }\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} // Return a panel or true\n\n\nfunction getPanelByCover(controller, cover) {\n var panels = controller._panels;\n\n if (!panels) {\n return true; // Global panel\n }\n\n var panelId = cover.__brushOption.panelId; // User may give cover without coord sys info,\n // which is then treated as global panel.\n\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 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 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 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 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, {\n isEnd: true\n })\n }));\n each(edgeNames, function (name) {\n cover.add(new graphic.Rect({\n name: name,\n style: {\n opacity: 0\n },\n draggable: true,\n silent: true,\n invisible: true,\n drift: curry(doDrift, controller, cover, name),\n ondragend: curry(trigger, controller, {\n isEnd: true\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 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 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 var mainEl = cover.childAt(0);\n mainEl.useStyle(makeStyle(brushOption));\n mainEl.attr({\n silent: !transformable,\n cursor: transformable ? 'move' : 'default'\n });\n each(['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw'], function (name) {\n var el = cover.childOfName(name);\n var globalDir = getGlobalDirection(controller, name);\n el && el.attr({\n silent: !transformable,\n invisible: !transformable,\n cursor: transformable ? CURSOR_MAP[globalDir] + '-resize' : null\n });\n });\n}\n\nfunction updateRectShape(controller, cover, name, x, y, w, h) {\n var el = cover.childOfName(name);\n el && el.setShape(pointsToRect(clipByPanel(controller, cover, [[x, y], [x + w, y + h]])));\n}\n\nfunction makeStyle(brushOption) {\n return zrUtil.defaults({\n strokeNoScale: true\n }, 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 return [[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 = [getGlobalDirection(controller, localDirection[0]), getGlobalDirection(controller, localDirection[1])];\n (globalDir[0] === 'e' || globalDir[0] === 'w') && globalDir.reverse();\n return globalDir.join('');\n } else {\n var map = {\n w: 'left',\n e: 'right',\n n: 'top',\n s: 'bottom'\n };\n var inverseMap = {\n left: 'w',\n right: 'e',\n top: 'n',\n bottom: 's'\n };\n var globalDir = graphic.transformDirection(map[localDirection], getTransform(controller));\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 each(name.split(''), function (namePart) {\n var ind = DIRECTION_MAP[namePart];\n rectRange[ind[0]][ind[1]] += localDelta[ind[0]];\n });\n brushOption.range = fromRectRange(formatRectRange(rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1]));\n updateCoverAfterCreation(controller, cover);\n trigger(controller, {\n isEnd: false\n });\n}\n\nfunction driftPolygon(controller, cover, dx, dy, e) {\n var range = cover.__brushOption.range;\n var localDelta = toLocalDelta(controller, dx, dy);\n each(range, function (point) {\n point[0] += localDelta[0];\n point[1] += localDelta[1];\n });\n updateCoverAfterCreation(controller, cover);\n trigger(controller, {\n isEnd: false\n });\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 return [localD[0] - localZero[0], localD[1] - localZero[1]];\n}\n\nfunction clipByPanel(controller, cover, data) {\n var panel = getPanelByCover(controller, cover);\n return panel && panel !== true ? panel.clipPath(data, controller._transform) : 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 return {\n x: xmin,\n y: ymin,\n width: xmax - xmin,\n height: ymax - ymin\n };\n}\n\nfunction resetCursor(controller, e, localCursorPoint) {\n if ( // Check active\n !controller._brushType // resetCursor should be always called when mouse is in zr area,\n // but not called when mouse is out of zr area to avoid bad influence\n // if `mousemove`, `mouseup` are triggered from `document` event.\n || isOutsideZrArea(controller, e)) {\n return;\n }\n\n var zr = controller._zr;\n var covers = controller._covers;\n var currPanel = getPanelByPoint(controller, e, localCursorPoint); // Check whether in covers.\n\n if (!controller._dragging) {\n for (var i = 0; i < covers.length; i++) {\n var brushOption = covers[i].__brushOption;\n\n if (currPanel && (currPanel === true || brushOption.panelId === currPanel.panelId) && coverRenderers[brushOption.brushType].contain(covers[i], localCursorPoint[0], localCursorPoint[1])) {\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 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\n controller._covers.push(creatingCover);\n }\n\n if (creatingCover) {\n var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)];\n var coverBrushOption = creatingCover.__brushOption;\n coverBrushOption.range = coverRenderer.getCreatingRange(clipByPanel(controller, creatingCover, controller._track));\n\n if (isEnd) {\n endCreating(controller, creatingCover);\n coverRenderer.updateCommon(controller, creatingCover);\n }\n\n updateCoverShape(controller, creatingCover);\n eventParams = {\n isEnd: isEnd\n };\n }\n } else if (isEnd && thisBrushOption.brushMode === 'single' && thisBrushOption.removeOnClick) {\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 = {\n isEnd: isEnd,\n removeOnClick: true\n };\n }\n }\n\n return eventParams;\n}\n\nfunction determineBrushType(brushType, panel) {\n if (brushType === 'auto') {\n return panel.defaultBrushType;\n }\n\n return brushType;\n}\n\nvar pointerHandlers = {\n mousedown: function (e) {\n if (this._dragging) {\n // In case some browser do not support globalOut,\n // and release mose out side the browser.\n handleDragEnd(this, e);\n } else if (!e.target || !e.target.draggable) {\n preventDefault(e);\n var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\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 mousemove: function (e) {\n var x = e.offsetX;\n var y = e.offsetY;\n var localCursorPoint = this.group.transformCoordToLocal(x, y);\n resetCursor(this, e, localCursorPoint);\n\n if (this._dragging) {\n preventDefault(e);\n var eventParams = updateCoverByMouse(this, e, localCursorPoint, false);\n eventParams && trigger(this, eventParams);\n }\n },\n mouseup: function (e) {\n handleDragEnd(this, e);\n }\n};\n\nfunction handleDragEnd(controller, e) {\n if (controller._dragging) {\n preventDefault(e);\n var x = e.offsetX;\n var y = e.offsetY;\n var localCursorPoint = controller.group.transformCoordToLocal(x, y);\n var eventParams = updateCoverByMouse(controller, e, localCursorPoint, true);\n controller._dragging = false;\n controller._track = [];\n controller._creatingCover = null; // trigger event shoule be at final, after procedure will be nested.\n\n eventParams && trigger(controller, eventParams);\n }\n}\n\nfunction isOutsideZrArea(controller, x, y) {\n var zr = controller._zr;\n return x < 0 || x > zr.getWidth() || y < 0 || y > zr.getHeight();\n}\n/**\n * key: brushType\n * @type {Object}\n */\n\n\nvar coverRenderers = {\n lineX: getLineRenderer(0),\n lineY: getLineRenderer(1),\n rect: {\n createCover: function (controller, brushOption) {\n return createBaseRectCover(curry(driftRect, function (range) {\n return range;\n }, function (range) {\n return range;\n }), controller, brushOption, ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw']);\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 polygon: {\n createCover: function (controller, brushOption) {\n var cover = new graphic.Group(); // 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\n cover.add(new graphic.Polyline({\n name: 'main',\n style: makeStyle(brushOption),\n silent: true\n }));\n return cover;\n },\n getCreatingRange: function (localTrack) {\n return localTrack;\n },\n endCreating: function (controller, cover) {\n cover.remove(cover.childAt(0)); // Use graphic.Polygon close the shape.\n\n cover.add(new graphic.Polygon({\n name: 'main',\n draggable: true,\n drift: curry(driftPolygon, controller, cover),\n ondragend: curry(trigger, controller, {\n isEnd: true\n })\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(curry(driftRect, function (range) {\n var rectRange = [range, [0, 100]];\n xyIndex && rectRange.reverse();\n return rectRange;\n }, function (rectRange) {\n return rectRange[xyIndex];\n }), controller, brushOption, [['w', 'e'], ['n', 's']][xyIndex]);\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 return [min, max];\n },\n updateCoverShape: function (controller, cover, localRange, brushOption) {\n var otherExtent; // If brushWidth not specified, fit the panel.\n\n var panel = getPanelByCover(controller, cover);\n\n if (panel !== true && panel.getLinearBrushOtherExtent) {\n otherExtent = panel.getLinearBrushOtherExtent(xyIndex, controller._transform);\n } else {\n var zr = controller._zr;\n otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]];\n }\n\n var rectRange = [localRange, otherExtent];\n xyIndex && rectRange.reverse();\n updateBaseRect(controller, cover, rectRange, brushOption);\n },\n updateCommon: updateCommon,\n contain: mainShapeContain\n };\n}\n\nvar _default = BrushController;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar RadiusAxis = require(\"./RadiusAxis\");\n\nvar AngleAxis = require(\"./AngleAxis\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\n/**\n * @alias {module:echarts/coord/polar/Polar}\n * @constructor\n * @param {string} name\n */\nvar Polar = function (name) {\n /**\n * @type {string}\n */\n this.name = name || '';\n /**\n * x of polar center\n * @type {number}\n */\n\n this.cx = 0;\n /**\n * y of polar center\n * @type {number}\n */\n\n this.cy = 0;\n /**\n * @type {module:echarts/coord/polar/RadiusAxis}\n * @private\n */\n\n this._radiusAxis = new RadiusAxis();\n /**\n * @type {module:echarts/coord/polar/AngleAxis}\n * @private\n */\n\n this._angleAxis = new AngleAxis();\n this._radiusAxis.polar = this._angleAxis.polar = this;\n};\n\nPolar.prototype = {\n type: 'polar',\n axisPointerEnabled: true,\n constructor: Polar,\n\n /**\n * @param {Array.}\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.} point\n * @return {boolean}\n */\n containPoint: function (point) {\n var coord = this.pointToCoord(point);\n return this._radiusAxis.contain(coord[0]) && this._angleAxis.contain(coord[1]);\n },\n\n /**\n * If contain data\n * @param {Array.} data\n * @return {boolean}\n */\n containData: function (data) {\n return this._radiusAxis.containData(data[0]) && 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.}\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 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] || this.getAxesByScale('time')[0] || 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' ? 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.} data\n * @param {boolean} [clamp=false]\n * @return {Array.}\n */\n dataToPoint: function (data, clamp) {\n return this.coordToPoint([this._radiusAxis.dataToRadius(data[0], clamp), this._angleAxis.dataToAngle(data[1], clamp)]);\n },\n\n /**\n * Convert a (x, y) point to data\n * @param {Array.} point\n * @param {boolean} [clamp=false]\n * @return {Array.}\n */\n pointToData: function (point, clamp) {\n var coord = this.pointToCoord(point);\n return [this._radiusAxis.radiusToData(coord[0], clamp), this._angleAxis.angleToData(coord[1], clamp)];\n },\n\n /**\n * Convert a (x, y) point to (radius, angle) coord\n * @param {Array.} point\n * @return {Array.}\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]); // Fix fixed extent in polarCreator\n // FIXME\n\n angleAxis.inverse ? minAngle = maxAngle - 360 : maxAngle = minAngle + 360;\n var radius = Math.sqrt(dx * dx + dy * dy);\n dx /= radius;\n dy /= radius;\n var radian = Math.atan2(-dy, dx) / Math.PI * 180; // move to angleExtent\n\n var dir = radian < minAngle ? 1 : -1;\n\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.} coord\n * @return {Array.}\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; // Inverse the y\n\n var y = -Math.sin(radian) * radius + this.cy;\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 var angleAxis = this.getAngleAxis();\n var radiusAxis = this.getRadiusAxis();\n var radiusExtent = radiusAxis.getExtent().slice();\n radiusExtent[0] > radiusExtent[1] && radiusExtent.reverse();\n var angleExtent = angleAxis.getExtent();\n var RADIAN = Math.PI / 180;\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 return d2 <= r * r && d2 >= r0 * r0;\n }\n };\n }\n};\nvar _default = Polar;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar Gradient = require(\"zrender/lib/graphic/Gradient\");\n\nvar _util = require(\"zrender/lib/core/util\");\n\nvar isFunction = _util.isFunction;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _default = {\n createOnAllSeries: true,\n performRawSeries: true,\n reset: function (seriesModel, ecModel) {\n var data = seriesModel.getData();\n var colorAccessPath = (seriesModel.visualColorAccessPath || 'itemStyle.color').split('.'); // Set in itemStyle\n\n var color = seriesModel.get(colorAccessPath);\n var colorCallback = isFunction(color) && !(color instanceof Gradient) ? color : null; // Default color\n\n if (!color || colorCallback) {\n color = seriesModel.getColorFromPalette( // TODO series count changed.\n seriesModel.name, null, ecModel.getSeriesCount());\n }\n\n data.setVisual('color', color);\n var borderColorAccessPath = (seriesModel.visualBorderColorAccessPath || 'itemStyle.borderColor').split('.');\n var borderColor = seriesModel.get(borderColorAccessPath);\n data.setVisual('borderColor', borderColor); // Only visible series has each data be visual encoded\n\n if (!ecModel.isSeriesFiltered(seriesModel)) {\n if (colorCallback) {\n data.each(function (idx) {\n data.setItemVisual(idx, 'color', colorCallback(seriesModel.getDataParams(idx)));\n });\n } // itemStyle in each data item\n\n\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\n if (color != null) {\n data.setItemVisual(idx, 'color', color);\n }\n\n if (borderColor != null) {\n data.setItemVisual(idx, 'borderColor', borderColor);\n }\n };\n\n return {\n dataEach: data.hasItemOption ? dataEach : null\n };\n }\n }\n};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar samplers = {\n average: function (frame) {\n var sum = 0;\n var count = 0;\n\n for (var i = 0; i < frame.length; i++) {\n if (!isNaN(frame[i])) {\n sum += frame[i];\n count++;\n }\n } // Return NaN if count is 0\n\n\n return count === 0 ? NaN : sum / count;\n },\n sum: function (frame) {\n var sum = 0;\n\n for (var i = 0; i < frame.length; i++) {\n // Ignore NaN\n sum += frame[i] || 0;\n }\n\n return sum;\n },\n max: function (frame) {\n var max = -Infinity;\n\n for (var i = 0; i < frame.length; i++) {\n frame[i] > max && (max = frame[i]);\n } // NaN will cause illegal axis extent.\n\n\n return isFinite(max) ? max : NaN;\n },\n min: function (frame) {\n var min = Infinity;\n\n for (var i = 0; i < frame.length; i++) {\n frame[i] < min && (min = frame[i]);\n } // NaN will cause illegal axis extent.\n\n\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\nfunction _default(seriesType) {\n return {\n seriesType: seriesType,\n modifyOutputEnd: true,\n reset: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var sampling = seriesModel.get('sampling');\n var coordSys = seriesModel.coordinateSystem; // Only cartesian2d support down sampling\n\n if (coordSys.type === 'cartesian2d' && sampling) {\n var baseAxis = coordSys.getBaseAxis();\n var valueAxis = coordSys.getOtherAxis(baseAxis);\n var extent = baseAxis.getExtent(); // Coordinste system has been resized\n\n var size = extent[1] - extent[0];\n var rate = Math.round(data.count() / size);\n\n if (rate > 1) {\n var sampler;\n\n if (typeof sampling === 'string') {\n sampler = samplers[sampling];\n } else if (typeof sampling === 'function') {\n sampler = sampling;\n }\n\n if (sampler) {\n // Only support sample the first dim mapped from value axis.\n seriesModel.setData(data.downSample(data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler));\n }\n }\n }\n }\n };\n}\n\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar graphicUtil = require(\"../../util/graphic\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar PATH_COLOR = ['textStyle', 'color'];\nvar _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') || (!isEmphasis && ecModel ? ecModel.get(PATH_COLOR) : null);\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 getTextRect: function (text) {\n return textContain.getBoundingRect(text, this.getFont(), this.getShallow('align'), this.getShallow('verticalAlign') || this.getShallow('baseline'), this.getShallow('padding'), this.getShallow('lineHeight'), this.getShallow('rich'), this.getShallow('truncateText'));\n }\n};\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar SeriesModel = require(\"../../model/Series\");\n\nvar _whiskerBoxCommon = require(\"../helper/whiskerBoxCommon\");\n\nvar seriesModelMixin = _whiskerBoxCommon.seriesModelMixin;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar BoxplotSeries = SeriesModel.extend({\n type: 'series.boxplot',\n dependencies: ['xAxis', 'yAxis', 'grid'],\n // TODO\n // box width represents group size, so dimension should have 'size'.\n\n /**\n * @see \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',\n defaultTooltip: true\n }, {\n name: 'Q1',\n defaultTooltip: true\n }, {\n name: 'median',\n defaultTooltip: true\n }, {\n name: 'Q3',\n defaultTooltip: true\n }, {\n name: 'max',\n defaultTooltip: true\n }],\n\n /**\n * @type {Array.}\n * @readOnly\n */\n dimensions: null,\n\n /**\n * @override\n */\n defaultOption: {\n zlevel: 0,\n // 一级层叠\n z: 2,\n // 二级层叠\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n hoverAnimation: true,\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n layout: null,\n // 'horizontal' or 'vertical'\n boxWidth: [7, 50],\n // [min, max] can be percent of band width.\n itemStyle: {\n color: '#fff',\n borderWidth: 1\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 animationEasing: 'elasticOut',\n animationDuration: 800\n }\n});\nzrUtil.mixin(BoxplotSeries, seriesModelMixin, true);\nvar _default = BoxplotSeries;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar featureManager = require(\"../featureManager\");\n\nvar lang = require(\"../../../lang\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar brushLang = lang.toolbox.brush;\n\nfunction Brush(model, ecModel, api) {\n this.model = model;\n this.ecModel = ecModel;\n this.api = api;\n /**\n * @private\n * @type {string}\n */\n\n this._brushType;\n /**\n * @private\n * @type {string}\n */\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',\n // 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',\n // 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',\n // 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',\n // 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',\n // 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\n /* eslint-enable */\n\n },\n // `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear`\n title: zrUtil.clone(brushLang.title)\n};\nvar proto = Brush.prototype; // proto.updateLayout = function (featureModel, ecModel, api) {\n\n/* eslint-disable */\n\nproto.render =\n/* eslint-enable */\nproto.updateView = function (featureModel, ecModel, api) {\n var brushType;\n var brushMode;\n var isBrushed;\n ecModel.eachComponent({\n mainType: 'brush'\n }, 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 zrUtil.each(featureModel.get('type', true), function (type) {\n featureModel.setIconStatus(type, (type === 'keep' ? brushMode === 'multiple' : type === 'clear' ? isBrushed : type === brushType) ? 'emphasis' : 'normal');\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 api.dispatchAction({\n type: 'brush',\n command: 'clear',\n // Clear all areas of all brush components.\n areas: []\n });\n } else {\n api.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'brush',\n brushOption: {\n brushType: type === 'keep' ? brushType : brushType === type ? false : type,\n brushMode: type === 'keep' ? brushMode === 'multiple' ? 'single' : 'multiple' : brushMode\n }\n });\n }\n};\n\nfeatureManager.register('brush', Brush);\nvar _default = Brush;\nmodule.exports = _default;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar graphic = require(\"../../util/graphic\");\n\nvar textContain = require(\"zrender/lib/contain/text\");\n\nvar formatUtil = require(\"../../util/format\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar axisHelper = require(\"../../coord/axisHelper\");\n\nvar AxisBuilder = require(\"../axis/AxisBuilder\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {module:echarts/model/Model} axisPointerModel\n */\nfunction buildElStyle(axisPointerModel) {\n var axisPointerType = axisPointerModel.get('type');\n var styleModel = axisPointerModel.getModel(axisPointerType + 'Style');\n var style;\n\n if (axisPointerType === 'line') {\n style = styleModel.getLineStyle();\n style.fill = null;\n } else if (axisPointerType === 'shadow') {\n style = styleModel.getAreaStyle();\n style.stroke = null;\n }\n\n return style;\n}\n/**\n * @param {Function} labelPos {align, verticalAlign, position}\n */\n\n\nfunction buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos) {\n var value = axisPointerModel.get('value');\n var text = getValueLabel(value, axisModel.axis, axisModel.ecModel, axisPointerModel.get('seriesDataIndices'), {\n precision: axisPointerModel.get('label.precision'),\n formatter: axisPointerModel.get('label.formatter')\n });\n var labelModel = axisPointerModel.getModel('label');\n var paddings = formatUtil.normalizeCssArray(labelModel.get('padding') || 0);\n var font = labelModel.getFont();\n var textRect = textContain.getBoundingRect(text, font);\n var position = labelPos.position;\n var width = textRect.width + paddings[1] + paddings[3];\n var height = textRect.height + paddings[0] + paddings[2]; // Adjust by align.\n\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); // Not overflow ec container\n\n confineInContainer(position, width, height, api);\n var bgColor = labelModel.get('backgroundColor');\n\n if (!bgColor || bgColor === 'auto') {\n bgColor = axisModel.get('axisLine.lineStyle.color');\n }\n\n elOption.label = {\n shape: {\n x: 0,\n y: 0,\n width: width,\n height: height,\n r: labelModel.get('borderRadius')\n },\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} // Do not overflow ec container\n\n\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 * @param {number} value\n * @param {module:echarts/coord/Axis} axis\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} opt\n * @param {Array.} seriesDataIndices\n * @param {number|string} opt.precision 'auto' or a number\n * @param {string|Function} opt.formatter label formatter\n */\n\n\nfunction getValueLabel(value, axis, ecModel, seriesDataIndices, opt) {\n value = axis.scale.parse(value);\n var text = axis.scale.getLabel( // If `precision` is set, width can be fixed (like '12.00500'), which\n // helps to debounce when when moving label.\n value, {\n 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 } else if (zrUtil.isFunction(formatter)) {\n text = formatter(params);\n }\n }\n\n return text;\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 */\n\n\nfunction getTransformedPosition(axis, value, layoutInfo) {\n var transform = matrix.create();\n matrix.rotate(transform, transform, layoutInfo.rotation);\n matrix.translate(transform, transform, layoutInfo.position);\n return graphic.applyTransform([axis.dataToCoord(value), (layoutInfo.labelOffset || 0) + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0)], transform);\n}\n\nfunction buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api) {\n var textLayout = AxisBuilder.innerTextLayout(layoutInfo.rotation, 0, layoutInfo.labelDirection);\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 * @param {Array.} p1\n * @param {Array.} p2\n * @param {number} [xDimIndex=0] or 1\n */\n\n\nfunction 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 * @param {Array.} xy\n * @param {Array.} wh\n * @param {number} [xDimIndex=0] or 1\n */\n\n\nfunction 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\nfunction 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\nexports.buildElStyle = buildElStyle;\nexports.buildLabelElOption = buildLabelElOption;\nexports.getValueLabel = getValueLabel;\nexports.getTransformedPosition = getTransformedPosition;\nexports.buildCartesianSingleLabelElOption = buildCartesianSingleLabelElOption;\nexports.makeLineShape = makeLineShape;\nexports.makeRectShape = makeRectShape;\nexports.makeSectorShape = makeSectorShape;"],"sourceRoot":""}