{"version":3,"sources":["webpack:///./src/components/Clock.vue?1100","webpack:///src/components/Clock.vue","webpack:///./src/components/Clock.vue?caf2","webpack:///./src/components/Clock.vue","webpack:///./src/components/CourseItem.vue?2a42","webpack:///./src/assets/smalllogo.png","webpack:///./src/views/home/Home.vue?ddf2","webpack:///./node_modules/core-js/internals/whitespaces.js","webpack:///./node_modules/core-js/internals/string-trim.js","webpack:///./src/components/BreadCrumb.vue?6bf6","webpack:///./src/assets/expo1.png","webpack:///./node_modules/core-js/internals/inherit-if-required.js","webpack:///./src/assets/ran.png","webpack:///./src/components/HomeRightSide.vue?69dc","webpack:///./src/components/HomeChart.vue?6041","webpack:///./src/components/HomeIntro.vue?61fc","webpack:///./node_modules/core-js/modules/es.number.constructor.js","webpack:///./src/views/home/Home.vue?5e07","webpack:///./src/components/BreadCrumb.vue?7f1e","webpack:///src/components/BreadCrumb.vue","webpack:///./src/components/BreadCrumb.vue?794e","webpack:///./src/components/BreadCrumb.vue","webpack:///./src/components/HomeChart.vue?310e","webpack:///./node_modules/echarts/lib/label/labelGuideHelper.js","webpack:///./node_modules/echarts/lib/label/LabelManager.js","webpack:///./node_modules/echarts/lib/label/installLabelLayout.js","webpack:///./node_modules/echarts/lib/export/core.js","webpack:///./node_modules/zrender/lib/svg/SVGPathRebuilder.js","webpack:///./node_modules/zrender/lib/svg/mapStyleToAttrs.js","webpack:///./node_modules/zrender/lib/svg/core.js","webpack:///./node_modules/zrender/lib/svg/cssAnimation.js","webpack:///./node_modules/zrender/lib/svg/graphic.js","webpack:///./node_modules/zrender/lib/svg/domapi.js","webpack:///./node_modules/zrender/lib/svg/patch.js","webpack:///./node_modules/zrender/lib/svg/Painter.js","webpack:///./node_modules/echarts/lib/renderer/installSVGRenderer.js","webpack:///./node_modules/echarts/lib/chart/pie/pieLayout.js","webpack:///./node_modules/echarts/lib/processor/dataFilter.js","webpack:///./node_modules/echarts/lib/chart/pie/labelLayout.js","webpack:///./node_modules/echarts/lib/chart/helper/pieHelper.js","webpack:///./node_modules/echarts/lib/chart/pie/PieView.js","webpack:///./node_modules/echarts/lib/chart/helper/createSeriesDataSimply.js","webpack:///./node_modules/echarts/lib/visual/LegendVisualProvider.js","webpack:///./node_modules/echarts/lib/chart/pie/PieSeries.js","webpack:///./node_modules/echarts/lib/processor/negativeDataFilter.js","webpack:///./node_modules/echarts/lib/chart/pie/install.js","webpack:///./node_modules/echarts/lib/chart/scatter/ScatterSeries.js","webpack:///./node_modules/echarts/lib/chart/helper/LargeSymbolDraw.js","webpack:///./node_modules/echarts/lib/chart/scatter/ScatterView.js","webpack:///./node_modules/echarts/lib/chart/scatter/install.js","webpack:///./node_modules/echarts/lib/chart/radar/radarLayout.js","webpack:///./node_modules/echarts/lib/chart/radar/backwardCompat.js","webpack:///./node_modules/echarts/lib/chart/radar/RadarView.js","webpack:///./node_modules/echarts/lib/chart/radar/RadarSeries.js","webpack:///./node_modules/echarts/lib/coord/radar/RadarModel.js","webpack:///./node_modules/echarts/lib/component/radar/RadarView.js","webpack:///./node_modules/echarts/lib/coord/radar/IndicatorAxis.js","webpack:///./node_modules/echarts/lib/coord/radar/Radar.js","webpack:///./node_modules/echarts/lib/component/radar/install.js","webpack:///./node_modules/echarts/lib/chart/radar/install.js","webpack:///./node_modules/echarts/lib/component/helper/RoamController.js","webpack:///./node_modules/echarts/lib/component/helper/roamHelper.js","webpack:///./node_modules/zrender/lib/tool/parseSVG.js","webpack:///./node_modules/zrender/lib/tool/parseXML.js","webpack:///./node_modules/zrender/lib/contain/polygon.js","webpack:///./node_modules/echarts/lib/coord/geo/Region.js","webpack:///./node_modules/echarts/lib/coord/geo/GeoSVGResource.js","webpack:///./node_modules/echarts/lib/coord/geo/parseGeoJson.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/nanhai.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/textCoord.js","webpack:///./node_modules/echarts/lib/coord/geo/fix/diaoyuIsland.js","webpack:///./node_modules/echarts/lib/coord/geo/GeoJSONResource.js","webpack:///./node_modules/echarts/lib/coord/geo/geoSourceManager.js","webpack:///./node_modules/echarts/lib/component/helper/MapDraw.js","webpack:///./node_modules/echarts/lib/chart/map/MapView.js","webpack:///./node_modules/echarts/lib/chart/map/MapSeries.js","webpack:///./node_modules/echarts/lib/chart/map/mapDataStatistic.js","webpack:///./node_modules/echarts/lib/chart/map/mapSymbolLayout.js","webpack:///./node_modules/echarts/lib/coord/View.js","webpack:///./node_modules/echarts/lib/coord/geo/Geo.js","webpack:///./node_modules/echarts/lib/coord/geo/geoCreator.js","webpack:///./node_modules/echarts/lib/coord/geo/GeoModel.js","webpack:///./node_modules/echarts/lib/action/roamHelper.js","webpack:///./node_modules/echarts/lib/component/geo/GeoView.js","webpack:///./node_modules/echarts/lib/component/geo/install.js","webpack:///./node_modules/echarts/lib/chart/map/install.js","webpack:///./node_modules/echarts/lib/chart/tree/layoutHelper.js","webpack:///./node_modules/echarts/lib/chart/tree/TreeView.js","webpack:///./node_modules/echarts/lib/data/helper/linkSeriesData.js","webpack:///./node_modules/echarts/lib/data/Tree.js","webpack:///./node_modules/echarts/lib/chart/helper/treeHelper.js","webpack:///./node_modules/echarts/lib/chart/tree/TreeSeries.js","webpack:///./node_modules/echarts/lib/chart/tree/traversalHelper.js","webpack:///./node_modules/echarts/lib/chart/tree/treeLayout.js","webpack:///./node_modules/echarts/lib/chart/tree/treeVisual.js","webpack:///./node_modules/echarts/lib/chart/tree/treeAction.js","webpack:///./node_modules/echarts/lib/chart/tree/install.js","webpack:///./node_modules/echarts/lib/chart/treemap/treemapAction.js","webpack:///./node_modules/echarts/lib/chart/helper/enableAriaDecalForTree.js","webpack:///./node_modules/echarts/lib/chart/treemap/TreemapSeries.js","webpack:///./node_modules/echarts/lib/chart/treemap/Breadcrumb.js","webpack:///./node_modules/echarts/lib/util/animation.js","webpack:///./node_modules/echarts/lib/chart/treemap/TreemapView.js","webpack:///./node_modules/echarts/lib/visual/VisualMapping.js","webpack:///./node_modules/echarts/lib/chart/treemap/treemapVisual.js","webpack:///./node_modules/echarts/lib/chart/treemap/treemapLayout.js","webpack:///./node_modules/echarts/lib/chart/treemap/install.js","webpack:///./node_modules/echarts/lib/chart/graph/categoryFilter.js","webpack:///./node_modules/echarts/lib/chart/graph/categoryVisual.js","webpack:///./node_modules/echarts/lib/chart/graph/edgeVisual.js","webpack:///./node_modules/echarts/lib/chart/helper/multipleGraphEdgeHelper.js","webpack:///./node_modules/echarts/lib/chart/graph/simpleLayoutHelper.js","webpack:///./node_modules/echarts/lib/chart/graph/simpleLayout.js","webpack:///./node_modules/echarts/lib/chart/graph/graphHelper.js","webpack:///./node_modules/echarts/lib/chart/graph/circularLayoutHelper.js","webpack:///./node_modules/echarts/lib/chart/graph/circularLayout.js","webpack:///./node_modules/echarts/lib/chart/graph/forceHelper.js","webpack:///./node_modules/echarts/lib/chart/graph/forceLayout.js","webpack:///./node_modules/echarts/lib/chart/graph/createView.js","webpack:///./node_modules/echarts/lib/chart/helper/LinePath.js","webpack:///./node_modules/echarts/lib/chart/helper/Line.js","webpack:///./node_modules/echarts/lib/chart/helper/LineDraw.js","webpack:///./node_modules/echarts/lib/chart/graph/adjustEdge.js","webpack:///./node_modules/echarts/lib/chart/graph/GraphView.js","webpack:///./node_modules/echarts/lib/data/Graph.js","webpack:///./node_modules/echarts/lib/chart/helper/createGraphFromNodeEdge.js","webpack:///./node_modules/echarts/lib/chart/graph/GraphSeries.js","webpack:///./node_modules/echarts/lib/chart/graph/install.js","webpack:///./node_modules/echarts/lib/chart/gauge/PointerPath.js","webpack:///./node_modules/echarts/lib/chart/gauge/GaugeView.js","webpack:///./node_modules/echarts/lib/chart/gauge/GaugeSeries.js","webpack:///./node_modules/echarts/lib/chart/gauge/install.js","webpack:///./node_modules/echarts/lib/chart/funnel/FunnelView.js","webpack:///./node_modules/echarts/lib/chart/funnel/FunnelSeries.js","webpack:///./node_modules/echarts/lib/chart/funnel/funnelLayout.js","webpack:///./node_modules/echarts/lib/chart/funnel/install.js","webpack:///./node_modules/echarts/lib/chart/parallel/ParallelView.js","webpack:///./node_modules/echarts/lib/chart/parallel/ParallelSeries.js","webpack:///./node_modules/echarts/lib/chart/parallel/parallelVisual.js","webpack:///./node_modules/echarts/lib/coord/parallel/parallelPreprocessor.js","webpack:///./node_modules/echarts/lib/component/parallel/ParallelView.js","webpack:///./node_modules/echarts/lib/coord/parallel/ParallelModel.js","webpack:///./node_modules/echarts/lib/coord/parallel/ParallelAxis.js","webpack:///./node_modules/echarts/lib/coord/parallel/Parallel.js","webpack:///./node_modules/echarts/lib/coord/parallel/parallelCreator.js","webpack:///./node_modules/echarts/lib/coord/parallel/AxisModel.js","webpack:///./node_modules/echarts/lib/component/axis/ParallelAxisView.js","webpack:///./node_modules/echarts/lib/component/axis/parallelAxisAction.js","webpack:///./node_modules/echarts/lib/component/parallel/install.js","webpack:///./node_modules/echarts/lib/chart/parallel/install.js","webpack:///./node_modules/echarts/lib/chart/sankey/SankeyView.js","webpack:///./node_modules/echarts/lib/chart/sankey/SankeySeries.js","webpack:///./node_modules/echarts/lib/chart/sankey/sankeyLayout.js","webpack:///./node_modules/echarts/lib/chart/sankey/sankeyVisual.js","webpack:///./node_modules/echarts/lib/chart/sankey/install.js","webpack:///./node_modules/echarts/lib/chart/helper/whiskerBoxCommon.js","webpack:///./node_modules/echarts/lib/chart/boxplot/BoxplotSeries.js","webpack:///./node_modules/echarts/lib/chart/boxplot/BoxplotView.js","webpack:///./node_modules/echarts/lib/chart/boxplot/boxplotLayout.js","webpack:///./node_modules/echarts/lib/chart/boxplot/prepareBoxplotData.js","webpack:///./node_modules/echarts/lib/chart/boxplot/boxplotTransform.js","webpack:///./node_modules/echarts/lib/chart/boxplot/install.js","webpack:///./node_modules/echarts/lib/chart/candlestick/CandlestickView.js","webpack:///./node_modules/echarts/lib/chart/candlestick/CandlestickSeries.js","webpack:///./node_modules/echarts/lib/chart/candlestick/preprocessor.js","webpack:///./node_modules/echarts/lib/chart/candlestick/candlestickVisual.js","webpack:///./node_modules/echarts/lib/chart/candlestick/candlestickLayout.js","webpack:///./node_modules/echarts/lib/chart/candlestick/install.js","webpack:///./node_modules/echarts/lib/chart/helper/EffectSymbol.js","webpack:///./node_modules/echarts/lib/chart/effectScatter/EffectScatterView.js","webpack:///./node_modules/echarts/lib/chart/effectScatter/EffectScatterSeries.js","webpack:///./node_modules/echarts/lib/chart/effectScatter/install.js","webpack:///./node_modules/echarts/lib/chart/helper/EffectLine.js","webpack:///./node_modules/echarts/lib/chart/helper/Polyline.js","webpack:///./node_modules/echarts/lib/chart/helper/EffectPolyline.js","webpack:///./node_modules/echarts/lib/chart/helper/LargeLineDraw.js","webpack:///./node_modules/echarts/lib/chart/lines/linesLayout.js","webpack:///./node_modules/echarts/lib/chart/lines/LinesView.js","webpack:///./node_modules/echarts/lib/chart/lines/LinesSeries.js","webpack:///./node_modules/echarts/lib/chart/lines/linesVisual.js","webpack:///./node_modules/echarts/lib/chart/lines/install.js","webpack:///./node_modules/echarts/lib/chart/heatmap/HeatmapLayer.js","webpack:///./node_modules/echarts/lib/chart/heatmap/HeatmapView.js","webpack:///./node_modules/echarts/lib/chart/heatmap/HeatmapSeries.js","webpack:///./node_modules/echarts/lib/chart/heatmap/install.js","webpack:///./node_modules/echarts/lib/chart/bar/PictorialBarView.js","webpack:///./node_modules/echarts/lib/chart/bar/PictorialBarSeries.js","webpack:///./node_modules/echarts/lib/chart/bar/installPictorialBar.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/ThemeRiverView.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/ThemeRiverSeries.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/themeRiverLayout.js","webpack:///./node_modules/echarts/lib/chart/themeRiver/install.js","webpack:///./node_modules/echarts/lib/chart/sunburst/SunburstPiece.js","webpack:///./node_modules/echarts/lib/chart/sunburst/sunburstAction.js","webpack:///./node_modules/echarts/lib/chart/sunburst/SunburstView.js","webpack:///./node_modules/echarts/lib/chart/sunburst/SunburstSeries.js","webpack:///./node_modules/echarts/lib/chart/sunburst/sunburstLayout.js","webpack:///./node_modules/echarts/lib/chart/sunburst/sunburstVisual.js","webpack:///./node_modules/echarts/lib/chart/sunburst/install.js","webpack:///./node_modules/echarts/lib/chart/custom/CustomSeries.js","webpack:///./node_modules/echarts/lib/coord/cartesian/prepareCustom.js","webpack:///./node_modules/echarts/lib/coord/geo/prepareCustom.js","webpack:///./node_modules/echarts/lib/coord/single/prepareCustom.js","webpack:///./node_modules/echarts/lib/coord/polar/prepareCustom.js","webpack:///./node_modules/echarts/lib/coord/calendar/prepareCustom.js","webpack:///./node_modules/echarts/lib/util/styleCompat.js","webpack:///./node_modules/echarts/lib/animation/customGraphicTransition.js","webpack:///./node_modules/echarts/lib/animation/customGraphicKeyframeAnimation.js","webpack:///./node_modules/echarts/lib/chart/custom/CustomView.js","webpack:///./node_modules/echarts/lib/chart/custom/install.js","webpack:///./node_modules/echarts/lib/component/axisPointer/PolarAxisPointer.js","webpack:///./node_modules/echarts/lib/coord/polar/PolarModel.js","webpack:///./node_modules/echarts/lib/coord/polar/AxisModel.js","webpack:///./node_modules/echarts/lib/coord/polar/RadiusAxis.js","webpack:///./node_modules/echarts/lib/coord/polar/AngleAxis.js","webpack:///./node_modules/echarts/lib/coord/polar/Polar.js","webpack:///./node_modules/echarts/lib/coord/polar/polarCreator.js","webpack:///./node_modules/echarts/lib/component/axis/AngleAxisView.js","webpack:///./node_modules/echarts/lib/component/axis/RadiusAxisView.js","webpack:///./node_modules/echarts/lib/layout/barPolar.js","webpack:///./node_modules/echarts/lib/component/polar/install.js","webpack:///./node_modules/echarts/lib/coord/single/singleAxisHelper.js","webpack:///./node_modules/echarts/lib/component/axis/SingleAxisView.js","webpack:///./node_modules/echarts/lib/coord/single/AxisModel.js","webpack:///./node_modules/echarts/lib/coord/single/SingleAxis.js","webpack:///./node_modules/echarts/lib/coord/single/Single.js","webpack:///./node_modules/echarts/lib/coord/single/singleCreator.js","webpack:///./node_modules/echarts/lib/component/axisPointer/SingleAxisPointer.js","webpack:///./node_modules/echarts/lib/component/singleAxis/install.js","webpack:///./node_modules/echarts/lib/coord/calendar/CalendarModel.js","webpack:///./node_modules/echarts/lib/component/calendar/CalendarView.js","webpack:///./node_modules/echarts/lib/coord/calendar/Calendar.js","webpack:///./node_modules/echarts/lib/component/calendar/install.js","webpack:///./node_modules/echarts/lib/component/graphic/GraphicModel.js","webpack:///./node_modules/echarts/lib/component/graphic/GraphicView.js","webpack:///./node_modules/echarts/lib/component/graphic/install.js","webpack:///./node_modules/echarts/lib/component/brush/preprocessor.js","webpack:///./node_modules/echarts/lib/visual/visualSolution.js","webpack:///./node_modules/echarts/lib/component/brush/selector.js","webpack:///./node_modules/echarts/lib/component/brush/visualEncoding.js","webpack:///./node_modules/echarts/lib/component/brush/BrushView.js","webpack:///./node_modules/echarts/lib/component/brush/BrushModel.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/Brush.js","webpack:///./node_modules/echarts/lib/component/brush/install.js","webpack:///./node_modules/echarts/lib/component/title/install.js","webpack:///./node_modules/echarts/lib/component/timeline/TimelineModel.js","webpack:///./node_modules/echarts/lib/component/timeline/SliderTimelineModel.js","webpack:///./node_modules/echarts/lib/component/timeline/TimelineView.js","webpack:///./node_modules/echarts/lib/component/timeline/TimelineAxis.js","webpack:///./node_modules/echarts/lib/component/timeline/SliderTimelineView.js","webpack:///./node_modules/echarts/lib/component/timeline/timelineAction.js","webpack:///./node_modules/echarts/lib/component/timeline/preprocessor.js","webpack:///./node_modules/echarts/lib/component/timeline/install.js","webpack:///./node_modules/echarts/lib/component/marker/checkMarkerInSeries.js","webpack:///./node_modules/echarts/lib/component/marker/MarkerModel.js","webpack:///./node_modules/echarts/lib/component/marker/MarkPointModel.js","webpack:///./node_modules/echarts/lib/component/marker/markerHelper.js","webpack:///./node_modules/echarts/lib/component/marker/MarkerView.js","webpack:///./node_modules/echarts/lib/component/marker/MarkPointView.js","webpack:///./node_modules/echarts/lib/component/marker/installMarkPoint.js","webpack:///./node_modules/echarts/lib/component/marker/MarkLineModel.js","webpack:///./node_modules/echarts/lib/component/marker/MarkLineView.js","webpack:///./node_modules/echarts/lib/component/marker/installMarkLine.js","webpack:///./node_modules/echarts/lib/component/marker/MarkAreaModel.js","webpack:///./node_modules/echarts/lib/component/marker/MarkAreaView.js","webpack:///./node_modules/echarts/lib/component/marker/installMarkArea.js","webpack:///./node_modules/echarts/lib/component/dataZoom/InsideZoomModel.js","webpack:///./node_modules/echarts/lib/component/dataZoom/roams.js","webpack:///./node_modules/echarts/lib/component/dataZoom/InsideZoomView.js","webpack:///./node_modules/echarts/lib/component/dataZoom/installDataZoomInside.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SliderZoomModel.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SliderZoomView.js","webpack:///./node_modules/echarts/lib/component/dataZoom/installDataZoomSlider.js","webpack:///./node_modules/echarts/lib/component/dataZoom/install.js","webpack:///./node_modules/echarts/lib/visual/visualDefault.js","webpack:///./node_modules/echarts/lib/component/visualMap/VisualMapModel.js","webpack:///./node_modules/echarts/lib/component/visualMap/ContinuousModel.js","webpack:///./node_modules/echarts/lib/component/visualMap/VisualMapView.js","webpack:///./node_modules/echarts/lib/component/visualMap/helper.js","webpack:///./node_modules/echarts/lib/component/visualMap/ContinuousView.js","webpack:///./node_modules/echarts/lib/component/visualMap/visualMapAction.js","webpack:///./node_modules/echarts/lib/component/visualMap/visualEncoding.js","webpack:///./node_modules/echarts/lib/component/visualMap/preprocessor.js","webpack:///./node_modules/echarts/lib/component/visualMap/installCommon.js","webpack:///./node_modules/echarts/lib/component/visualMap/installVisualMapContinuous.js","webpack:///./node_modules/echarts/lib/component/visualMap/PiecewiseModel.js","webpack:///./node_modules/echarts/lib/component/visualMap/PiecewiseView.js","webpack:///./node_modules/echarts/lib/component/visualMap/installVisualMapPiecewise.js","webpack:///./node_modules/echarts/lib/component/visualMap/install.js","webpack:///./node_modules/echarts/lib/visual/aria.js","webpack:///./node_modules/echarts/lib/component/aria/preprocessor.js","webpack:///./node_modules/echarts/lib/component/aria/install.js","webpack:///./node_modules/echarts/lib/util/conditionalExpression.js","webpack:///./node_modules/echarts/lib/component/transform/filterTransform.js","webpack:///./node_modules/echarts/lib/component/transform/sortTransform.js","webpack:///./node_modules/echarts/lib/component/transform/install.js","webpack:///./node_modules/echarts/lib/component/dataset/install.js","webpack:///./node_modules/echarts/index.js","webpack:///src/components/HomeChart.vue","webpack:///./src/components/HomeChart.vue?4ced","webpack:///./src/components/HomeChart.vue","webpack:///./src/components/HomeIntro.vue?dde4","webpack:///src/components/HomeIntro.vue","webpack:///./src/components/HomeIntro.vue?b48b","webpack:///./src/components/HomeIntro.vue","webpack:///./src/components/HomeRightSide.vue?127d","webpack:///src/components/HomeRightSide.vue","webpack:///./src/components/HomeRightSide.vue?0411","webpack:///./src/components/HomeRightSide.vue","webpack:///src/views/home/Home.vue","webpack:///./src/views/home/Home.vue?05d6","webpack:///./src/views/home/Home.vue","webpack:///./src/components/CourseItem.vue?504e","webpack:///src/components/CourseItem.vue","webpack:///./src/components/CourseItem.vue?5dc9","webpack:///./src/components/CourseItem.vue","webpack:///./src/components/Clock.vue?6614"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","_v","_s","time","staticRenderFns","component","module","exports","requireObjectCoercible","whitespaces","whitespace","ltrim","RegExp","rtrim","createMethod","TYPE","$this","string","String","replace","start","end","trim","isObject","setPrototypeOf","dummy","Wrapper","NewTarget","NewTargetPrototype","constructor","prototype","DESCRIPTORS","global","isForced","redefine","has","classof","inheritIfRequired","toPrimitive","fails","create","getOwnPropertyNames","f","getOwnPropertyDescriptor","defineProperty","NUMBER","NativeNumber","NumberPrototype","BROKEN_CLASSOF","toNumber","argument","first","third","radix","maxCode","digits","length","index","code","it","charCodeAt","NaN","slice","parseInt","key","NumberWrapper","value","arguments","valueOf","call","keys","split","j","ref","style","width","homeLeftWidth","attrs","infoData","statistics","staticStyle","_l","item","on","$event","navigateToDetail","title","linkToCharts","PI2","Math","PI","CMD","PathProxy","DEFAULT_SEARCH_SPACE","getCandidateAnchor","pos","distance","rect","outPt","outDir","height","set","x","y","projectPointToArc","cx","cy","r","startAngle","endAngle","anticlockwise","out","d","sqrt","ox","oy","abs","tmp","angle","atan2","x1","cos","y1","sin","x2","y2","d1","d2","projectPointToLine","limitToEnds","dx","dy","dx1","dy1","lineLen","projectedLen","t","min","max","projectPointToRect","tmpPt","nearestPointOnRect","pt","dist","nearestPointOnPath","path","xi","yi","x0","y0","minDist","Infinity","data","i","cmd","M","L","C","Q","A","rx","ry","theta","dTheta","_x","R","Z","pt0","Point","pt1","pt2","dir2","updateLabelLinePoints","target","labelLineModel","labelLine","getTextGuideLine","label","getTextContent","labelGuideConfig","textGuideLineConfig","points","searchSpace","candidates","labelRect","getBoundingRect","clone","applyTransform","getComputedTransform","anchorPoint","anchor","targetTransform","targetInversedTransform","len","get","copy","candidate","scaleAndAdd","transform","boundingRect","Path","toArray","limitTurnAngle","setShape","tmpArr","tmpProjPoint","linePoints","minTurnAngle","fromArray","sub","len1","len2","scale","angleCos","dot","minTurnAngleCos","tan","isNaN","limitSurfaceAngle","surfaceNormal","maxSurfaceAngle","maxSurfaceAngleCos","HALF_PI","angle2","acos","newAngle","setLabelLineState","ignore","stateName","stateModel","isNormal","stateObj","ensureState","smooth","shape","styleObj","getModel","getLineStyle","useStyle","buildLabelLinePath","moveTo","vector","lineTo","moveLen","midPoint0","midPoint2","midPoint1","bezierCurveTo","setLabelLineStyle","targetEl","statesModels","defaultStyle","normalModel","normal","showNormal","labelIgnoreNormal","stateShow","isLabelIgnored","states","setTextGuideLine","stateProxy","fill","showAbove","labelLineConfig","buildPath","removeTextGuideLine","getLabelLineStatesModels","itemModel","labelLineName","cloneArr","newPoints","push","prepareLayoutCallbackParams","labelItem","hostEl","dataIndex","dataType","seriesIndex","seriesModel","text","hostRect","align","verticalAlign","labelLinePoints","LABEL_OPTION_TO_STYLE_KEYS","Transformable","labelLayoutInnerStore","labelLineAnimationStore","extendWithKeys","source","LABEL_LAYOUT_PROPS","LabelManager","_labelList","_chartViewList","clearLabels","_addLabel","layoutOption","labelStyle","__hostTarget","textConfig","labelTransform","plain","BoundingRect","setLocalTransform","rotation","originX","originY","scaleX","scaleY","host","labelGuide","computedLayoutOption","priority","defaultAttr","labelGuideIgnore","fontSize","cursor","attachedPos","position","attachedRot","addLabelsOfSeries","chartView","_this","__model","group","traverse","child","textEl","ecData","disableLabelLayout","updateLayoutConfig","api","getWidth","getHeight","createDragHandler","el","defaultLabelAttr","degreeToRadian","setTextConfig","local","rotate","offset","needsUpdateLabelLine","setStyle","guideLine","labelLayoutStore","k","draggable","hostModel","getData","getItemModel","off","layout","labelList","labelsNeedsAdjustOnX","moveOverlap","labelsNeedsAdjustOnY","labelsNeedsHideOverlap","hideOverlap","processLabelsOverall","ignoreLabelLineUpdate","animationEnabled","isAnimationEnabled","forceLabelAnimation","_updateLabelLine","_animateLabels","visualStyle","getItemVisual","visualType","getVisual","stroke","invisible","disableLabelAnimation","layoutStore","oldLayout","newProps","attr","prevStates","oldLayoutSelect","oldLayoutEmphasis","valueAnimation","oldOpacity","opacity","select","layoutSelect","emphasis","layoutEmphasis","newLayout","strokePercent","getLabelManager","installLabelLayout","registers","registerUpdateLifecycle","ecModel","params","labelManager","updatedSeries","forEach","series","getViewOfSeriesModel","mathSin","mathCos","degree","SVGPathRebuilder","reset","precision","_start","_d","_str","_p","pow","_add","x3","y3","quadraticCurveTo","arc","ellipse","psi","clockwise","dThetaPositive","isCircle","unifiedTheta","large","xRot","round","p","dTheta_1","w","h","closePath","a","b","c","e","g","vals","val","_invalid","join","generateStr","getStr","NONE","mathRound","pathHasFill","pathHasStroke","strokeProps","svgStrokeProps","prop","toLowerCase","mapStyleToAttrs","updateAttr","forceUpdate","color","fillOpacity","strokeScale","strokeNoScale","getLineScale","strokeWidth","lineWidth","strokeOpacity","strokeFirst","lineDash","_a","lineDashOffset","propName","SVGNS","XLINKNS","XMLNS","XML_NAMESPACE","createElement","name","document","createElementNS","createVNode","tag","children","createElementOpen","attrsStr","part","createElementClose","vNodeToString","opts","S","newline","convertElToString","getCssString","selectorNodes","animationNodes","bracketBegin","bracketEnd","selectors","className","attrName","animations","animationName","percent","createBrushScope","zrId","shadowCache","patternCache","gradientCache","clipPathCache","defs","cssNodes","cssAnims","cssClassIdx","cssAnimIdx","shadowIdx","gradientIdx","patternIdx","clipPathIdx","createSVGVNode","useViewBox","EASING_MAP","cubicIn","cubicOut","cubicInOut","quadraticIn","quadraticOut","quadraticInOut","quarticIn","quarticOut","quarticInOut","quinticIn","quinticOut","quinticInOut","sinusoidalIn","sinusoidalOut","sinusoidalInOut","exponentialIn","exponentialOut","exponentialInOut","circularIn","circularOut","circularInOut","transformOriginKey","buildPathString","kfShape","svgPathBuilder","rebuildPath","setTransformOrigin","ANIMATE_STYLE_MAP","addAnimation","cssAnim","scope","createCompoundPathCSSAnimation","cssAnimationCfg","cssAnimationName","paths","composedAnim","subScope","animation","createCSSAnimation","animNames","lastAnim","kf","indexOf","getEasingFunc","easing","onlyShape","animators","cssAnimations","CompoundPath","animationCfg","groupAnimators","animator","cfgArr","getMaxTime","getClip","delay","getDelay","getLoop","cfg","createSingleCSSAnimation","groupAnimator","transformKfs","shapeKfs","finalKfs","animationTimingFunctionAttrName","saveAnimatorTrackToCssKfs","cssKfs","toCssAttrName","tracks","getTracks","maxTime","track","needsAnimate","kfs","keyframes","kfEasing","rawValue","targetProp","targetName","str","timingFunction","canAnimateShape","isFirst","len_1","newLen","transformOrigin","percents","allTransformOriginSame","p0","p1","isImageLike","src","isCanvasLike","toDataURL","setStyleAttrs","isFillStroke","setGradient","setPattern","setShadow","noRotateScale","m","noTranslate","setTransform","compress","mul","convertPolyShape","strArr","validatePolyShape","createAttrsConvert","desc","normalizedDesc","builtinShapesDef","circle","polyline","polygon","hasShapeAnimation","brushSVGPath","builtinShpDef","type","svgElType","willUpdate","needBuildPath","shapeChanged","createPathProxy","beginPath","pathUpdated","pathVersion","getVersion","elExt","__svgPathBuilder","__svgPathVersion","__svgPathStrokePercent","id","brushSVGImage","image","dw","dh","href","brushSVGTSpan","font","textBaseline","textAlign","separatedFontStr","fontStyle","parseFloat","fontFamily","fontWeight","match","undefined","brush","TSpan","shadowKey","shadowId","globalScale","getGlobalScale","offsetX","shadowOffsetX","offsetY","shadowOffsetY","blur_1","shadowBlur","shadowColor","stdDx","stdDy","stdDeviation","filter","gradientTag","gradientAttrs","colors","colorStops","stopColor","stopsAttrs","gradientVNode","gradientKey","gradientId","patternAttrs","repeat","noRepeat","repeatX","repeatY","imageWidth_1","imageWidth","imageHeight_1","imageHeight","imageSrc","patternImage","Image","errMsg","setSizeToVNode_1","vNode","img","svgEl","elm","setAttribute","createdImage","patternVNode","svgElement","svgWidth","svgHeight","patternWidth","patternHeight","patternUnits","patternTransform","patternKey","patternId","setClipPath","clipPath","clipPathId","clipPathAttrs","createTextNode","insertBefore","parentNode","newNode","referenceNode","removeChild","node","appendChild","nextSibling","setTextContent","textContent","colonChar","xChar","emptyNode","isUndef","s","isDef","createKeyToOldIdx","beginIdx","endIdx","map","sameVnode","vnode1","vnode2","isSameKey","isSameTag","createElm","vnode","updateAttrs","ch","addVnodes","parentElm","before","vnodes","startIdx","removeVnodes","parent_1","oldVnode","oldAttrs","cur","old","removeAttribute","setAttributeNS","updateChildren","oldCh","newCh","oldKeyToIdx","idxInOld","elmToMove","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","patchVnode","patch","parent_2","svgId","SVGPainter","root","storage","refreshHover","createMethodNotSupport","configLayer","_opts","_id","_oldVNode","ssr","viewport","_viewport","cssText","svgDom","_svgDom","resize","getType","getViewportRoot","getViewportRootOffset","viewportRoot","offsetLeft","offsetTop","getSvgDom","refresh","renderToVNode","renderOneToVNode","list","getDisplayList","_width","_height","bgVNode","_bgVNode","createBackgroundVNode","_backgroundColor","mainVNode","_mainVNode","_paintList","animationCssStr","styleNode","renderToString","cssAnimation","setBackgroundColor","backgroundColor","getSvgRoot","currentClipPathGroup","prevClipPaths","listLen","clipPathsGroupsStack","clipPathsGroupsStackDepth","clipGroupNodeIdx","displayable","clipPaths","__clipPaths","prevLen","lca","i_1","i_2","groupAttrs","ret","display","viewportStyle","bgEl","dispose","innerHTML","clear","base64","prefix","encodeURIComponent","method","dirty","install","registerPainter","getViewRect","getBoxLayoutParams","getBasicPieLayout","viewRect","center","radius","size","r0","coordSys","coordinateSystem","point","dataToPoint","pieLayout","seriesType","eachSeriesByType","valueDim","mapDimension","minAngle","validDataCount","each","sum","getSum","unitRadian","roseType","stillShowZeroSum","extent","getDataExtent","restAngle","valueSumLargerThanMinAngle","currentAngle","dir","setLayout","idx","setItemLayout","angle_1","layout_1","getItemLayout","layout_2","dataFilter","legendModels","findComponents","mainType","filterSelf","getName","isSelected","adjustSingleSide","viewWidth","viewHeight","viewLeft","viewTop","farthestX","labelAlignTo","recalculateX","recalculateXOnSemiToAlignOnEllipseCurve","semi","rB","rB2","rA","rA2","newX","deltaX","newTargetWidth","targetTextWidth","constrainTextWidth","items","topSemi","maxY","bottomSemi","avoidOverlap","labelLayoutList","leftList","rightList","leftmostX","Number","MAX_VALUE","rightmostX","isPositionCenter","labelStyleWidth","labelDistance","edgeDistance","bleedMargin","isAlignToEdge","padding","paddingH","extraPaddingH","realTextWidth","availableWidth","forceRecalculate","textRect","bgColor","overflow","oldOuterWidth","oldHeight","innerRect","ceil","availableInnerWidth","newWidth","unconstrainedWidth","newRect","margin","sectorShape","pieLabelLayout","hasLabelRotate","minShowLabelRadian","getLayout","setNotShow","isLabelShown","sector","getItemGraphicEl","labelModel","labelPosition","labelLineLen","labelLineLen2","textX","textY","midAngle","nx","ny","isLabelInside","labelRotate","radialAngle","rad","isDown","selectState","inside","notShowLabel","getSectorCornerRadius","model","zeroIfNull","cornerRadius","dr","cr","_super","PiePiece","z2","updateData","firstCreate","emphasisModel","animationType","getShallow","isFrom","cursorStyle","_updateLabel","labelText","visualColor","visualOpacity","labelFetcher","labelDataIndex","inheritColor","defaultOpacity","defaultText","getFormattedLabel","PieView","apply","payload","oldData","_data","count","_emptyCircleSector","remove","getItemStyle","add","diff","piePiece","setItemGraphicEl","update","newIdx","oldIdx","execute","containPoint","itemLayout","Chart","createSeriesDataSimply","opt","nameList","coordDimensions","encodeDefine","getEncode","getSource","dimensions","SeriesData","initData","LegendVisualProvider","getDataWithEncodedVisual","getRawData","_getDataWithEncodedVisual","_getRawData","getAllNames","rawData","mapArray","containName","indexOfName","dataWithEncodedVisual","innerData","PieSeriesModel","init","option","legendVisualProvider","_defaultLabelLine","mergeOption","getInitialData","encodeDefaulter","getDataParams","dataInner","seats","valueList_1","$vars","labelLineNormalOpt","labelLineEmphasisOpt","show","defaultOption","z","legendHoverLink","colorBy","minShowLabelAngle","selectedOffset","percentPrecision","left","top","right","bottom","alignTo","distanceToLabelLine","length2","lineStyle","itemStyle","borderWidth","borderJoin","showEmptyCircle","emptyCircleStyle","labelLayout","scaleSize","avoidLabelOverlap","animationDuration","animationTypeUpdate","animationEasingUpdate","animationDurationUpdate","animationEasing","Series","PieSeries","negativeDataFilter","curValue","registerChartView","registerSeriesModel","registerAction","registerLayout","registerProcessor","ScatterSeriesModel","hasSymbolVisual","createSeriesData","useEncodeDefaulter","getProgressive","progressive","getProgressiveThreshold","progressiveThreshold","brushSelector","getZLevelKey","dependencies","symbolSize","largeThreshold","clip","borderColor","universalTransition","divideShape","ScatterSeries","BOOST_SIZE_THRESHOLD","LargeSymbolPathShape","LargeSymbolPath","_off","hoverDataIdx","getDefaultShape","notClear","symbolProxy","symbolProxyShape","ctx","getContext","canBoost","softClipShape","_ctx","contain","incremental","afterBrush","fillRect","findDataIndex","localPos","transformCoordToLocal","dataIdx","_rect","minX","minY","maxX","LargeSymbolDraw","_clear","symbolEl","_create","_setCommon","updateLayout","eachChild","startIndex","endIndex","byteOffset","Float32Array","buffer","incrementalPrepareUpdate","incrementalUpdate","taskParams","lastAdded","_newAdded","oldPoints","oldLen","eachRendered","cb","ignoreCoarsePointer","Array","clipShape","setColor","extrudeShadow","globalStyle","removeAll","ScatterView","symbolDraw","_updateSymbolDraw","_getClipShape","_finished","incrementalPrepareRender","incrementalRender","_symbolDraw","updateTransform","res","progress","clipArea","getArea","pipelineContext","isLargeDraw","_isLargeDraw","SymbolDraw","radarLayout","axes","getIndicatorAxes","axis","axisIndex","dim","isValidPoint","getValueMissingPoint","firstPoint","radarBackwardCompat","polarOptArr","polar","polarNotRadar_1","polarOpt","indicator","radar","seriesOpt","polarIndex","radarIndex","RadarView","createSymbol","symbolType","symbolPath","symbolRotate","updateSymbols","symbolGroup","isInit","__dimIdx","setPosition","graphic","getInitialPoints","itemGroup","childAt","eachItemGraphicEl","areaStyleModel","polygonIgnore","isEmpty","parentModel","stateIgnore","getAreaStyle","decal","itemHoverStyle","pathStyle","pathEmphasisState","getStore","getDimensionIndex","labelDimIndex","RadarSeriesModel","generateCoord","generateCoordCount","formatTooltip","multipleSeries","indicatorAxes","nameToDisplay","markerColor","header","sortBlocks","blocks","markerType","sortParam","getTooltipPosition","data_1","values","getValues","coordToPoint","dataToCoord","RadarSeries","valueAxisDefault","axisDefault","defaultsShow","RadarModel","optionUpdated","boundaryGap","splitNumber","axisLine","axisTick","axisLabel","nameTextStyle","showName","nameFormatter","nameGap","triggerEvent","indicatorModels","indicatorOpt","iNameTextStyle","innerIndicatorOpt","nameLocation","indName","Model","componentIndex","_indicatorModels","getIndicatorModels","axisName","axisNameGap","splitLine","splitArea","Component","axisBuilderAttrs","radarModel","_buildAxes","_buildSplitLineAndArea","axisBuilders","indicatorAxis","axisBuilder","AxisBuilder","labelDirection","tickDirection","nameDirection","getGroup","splitLineModel","splitAreaModel","lineStyleModel","showSplitLine","showSplitArea","splitLineColors","splitAreaColors","splitLineColorsArr","splitAreaColorsArr","splitLines","splitAreas","ticksRadius","getTicksCoords","colorIndex","getColorIndex","coord","realSplitNumber_1","axesTicksPoints","ticksCoords","tickCoord","prevPoints","concat","reverse","areaStyle","silent","areaOrLine","areaOrLineColorList","IndicatorAxis","radiusExtent","Axis","Radar","_model","_indicatorAxes","indicatorModel","Interval","indicatorIndex","pointToData","closestAxis","radian","minRadianDiff","closestAxisIdx","coordToData","viewSize","number","setExtent","radarSeries","getComponent","unionExtentFromData","dummyScale","setInterval","convertToPixel","finder","console","warn","convertFromPixel","pixel","radarList","eachComponent","registerCoordinateSystem","registerComponentModel","registerComponentView","registerVisual","setItemVisual","setVisual","registerPreprocessor","RoamController","zr","_zr","mousedownHandler","_mousedownHandler","mousemoveHandler","_mousemoveHandler","mouseupHandler","_mouseupHandler","mousewheelHandler","_mousewheelHandler","pinchHandler","_pinchHandler","enable","controlType","disable","_opt","zoomOnMouseWheel","moveOnMouseMove","moveOnMouseWheel","preventDefaultMouseMove","isDragging","_dragging","isPinching","_pinching","setPointerChecker","pointerChecker","parent","_y","isAvailableBehavior","gestureEvent","interactionMutex","oldX","oldY","event","newY","shouldZoom","shouldMove","wheelDelta","absWheelDeltaDelta","factor","checkPointerAndTrigger","absDelta","scrollDelta","pinchScale","pinchX","pinchY","Eventful","controller","eventName","behaviorToCheck","contollerEvent","trigger","settings","setting","updateViewOnPan","controllerHost","updateViewOnZoom","zoomDelta","zoomX","zoomY","zoomLimit","newZoom","zoom","zoomMin","zoomMax","zoomScale","nodeParsers","parseXML","svg","parser","DOMParser","parseFromString","svgNode","nodeType","firstChild","nodeName","INHERITABLE_STYLE_ATTRIBUTES_MAP","INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS","SELF_STYLE_ATTRIBUTES_MAP","SELF_STYLE_ATTRIBUTES_MAP_KEYS","SVGParser","_defs","_root","parse","xml","_defsUsePending","Group","named","viewBox","getAttribute","parseAttributes","viewBoxRect","viewBoxTransform","_parseNode","applyDefs","viewBoxArr","splitNumberSequence","makeViewBoxTransform","ignoreViewBox","elRoot","ignoreRootClip","Rect","xmlNode","parentGroup","namedFrom","isInDefs","isInText","namedFromForSub","parser_1","nameAttr","newNamed","svgNodeTagLower","paintServerParsers","def","isGroup","_parseText","_textX","_textY","inheritStyle","applyTextAlignment","textStyle","internalField","Circle","line","Ellipse","pointsArr","pointsStr","parsePoints","Polygon","gradient","LinearGradient","parsePaintServerUnit","parseGradientColorStops","RadialGradient","gradientUnits","stop","toLocaleLowerCase","offsetStr","styleVals","parseInlineStyle","__inheritedStyle","pointsString","defsUsePending","onlyInlineStyle","isTextGroup","disp","inheritedStyle","selfStyle","parseTransformAttribute","parseAttributeStyle","getFillStrokeStyle","__selfStyle","visibility","parentSelfStyle","zrTextBaseline","parentInheritedStyle","zrTextAlign","urlRegex","urlMatch","url","numberReg","rawStr","transformRegex","DEGREE_TO_ANGLE","transformOps_1","mt","valueArr","matrix","sx","sy","styleRegex","inheritableStyleResult","selfStyleResult","styleRegResult","lastIndex","exec","svgStlAttr","zrInheritableStlAttr","zrSelfStlAttr","svgAttrName","attrValue","parseSVG","EPSILON","isAroundEqual","p2","windingLine","TMP_TRANSFORM","transformPoints","updateBBoxFromPoints","projection","project","isFinite","centroid","signedArea","Region","setCenter","_center","getCenter","calcCenter","GeoJSONPolygonGeometry","exterior","interiors","GeoJSONLineStringGeometry","GeoJSONRegion","geometries","cp","largestGeo","largestGeoSize","geo","loopGeo","transformTo","aspect","calculateTransform","interior","cloneShallow","newRegion","GeoSVGRegion","elOnlyForCalculate","_elOnlyForCalculate","mat","isGeoSVGGraphicRoot","getLocalTransform","REGION_AVAILABLE_SVG_TAG_MAP","GeoSVGResource","mapName","_usedGraphicMap","_freedGraphics","_mapName","_parsedXML","load","firstGraphic","_firstGraphic","_buildGraphic","_boundingRect","createRegions","regions","regionsMap","_regions","_regionsMap","svgXML","result","rootFromParse","Error","message","bRectX","bRectY","bRectWidth","bRectHeight","calculatedBoundingRect","namedItem","setSilent","useGraphic","hostKey","usedRootMap","svgGraphic","pop","freeGraphic","removeKey","region","decode","json","UTF8Encoding","jsonCompressed","encodeScale","UTF8Scale","features","feature","geometry","encodeOffsets","coordinates","decodeRing","decodeRings","rings","coordinate","prevX","prevY","parseGeoJSON","geoJson","nameProperty","featureObj","properties","geoCoord","nanhaiName","fixNanhai","mapType","coordsOffsetMap","fixTextCoords","coordFix","fixDiaoyuIsland","DEFAULT_NAME_PROPERTY","GeoJSONResource","geoJSON","specialAreas","_parsedMap","_specialAreas","_geoJSON","parseInput","nameMap","parsed","rawRegions","_parseToRegions","calculateBoundingRect","finalRegions","regionName","specialArea","getMapForUser","regionRect","union","JSON","Function","registerMap","rawDef","rawSpecialAreas","resource","getGeoResource","OPTION_STYLE_ENABLED_TAGS","OPTION_STYLE_ENABLED_TAG_MAP","STATE_TRIGGER_TAG_MAP","LABEL_HOST_MAP","mapLabelRaw","getFixedItemStyle","areaColor","fixLineStyle","styleHost","MapDraw","uid","_controller","getZr","_controllerHost","_regionsGroup","_svgGroup","draw","mapOrGeoModel","fromView","isGeo","subType","mapSeries","getHostGeoModel","regionsGroup","transformInfo","getTransformInfo","transformInfoRaw","raw","transformInfoRoam","roam","isFirstDraw","isVisualEncodedByVisualMap","viewBuildCtx","resourceType","_buildGeoJSON","_buildSVG","_updateController","_updateMapSelectHandler","regionsGroupByName","_regionsGroupByName","regionsInfoByName","projectionStream","stream","transformPoint","transformPolygonPoints","inPoints","outPoints","newPt","getPolyShape","regionGroup","regionModel","getRegionModel","polygonSubpaths","polylineSubpaths","polys","projectPolys","poly","centerPt","createCompoundPath","subpaths","isLine","compoundPath","culling","segmentIgnoreThreshold","applyOptionStyleForRegion","resetLabelForRegion","resetEventTriggerForRegion","resetTooltipForRegion","resetStateTriggerForRegion","_svgResourceChanged","_freeSVG","_useSVG","svgDispatcherMap","_svgDispatcherMap","focusSelf","_svgGraphicRecord","Displayable","z2EmphasisLift","focus_1","els","_enableBlurEntireSVG","blurStyle","opacity_1","findHighDownDispatchers","geoModel","_svgMapName","geoSourceManager","getZoom","makeActionBase","action","componentType","_mouseDownFlag","dispatchAction","duration","resetForLabelLayout","mapDraw","normalStyleModel","emphasisStyleModel","blurStyleModel","selectStyleModel","normalStyle","emphasisStyle","selectStyle","labelXY","isDataNaN","showLabel","query","specifiedTextOpt","layoutRect","removeTextContent","removeTextConfig","eventTrigger","eventData","geoIndex","componentModel","itemName","itemTooltipOption","highDownSilentOnTouch","focus","createStream","curPoly","polygons","startPolygon","endPolygon","polygonStart","polygonEnd","lineStart","lineEnd","sphere","ring","MapView","mapModel","from","_mapDraw","seriesId","needsDrawMap","_renderSymbols","originalData","originalDataIndex","fullData","mainSeries","name_1","fullIndex_1","state","onHoverStateChange","toState","MapSeries","seriesGroup","getRegion","dataNameMap","toAppendNames","name_2","geoSource","getMapType","appendValues","getRawValue","seriesNames","otherIndex","noHeader","setZoom","getLegendIcon","iconType","icon","itemWidth","itemHeight","layoutMode","aspectScale","showLegendSymbol","boundingCoords","scaleLimit","selectedMode","dataStatistics","datas","statisticType","mapKey","mapDataStatistic","seriesGroups","hostGeoModel","seriesList","setData","mapSymbolLayout","processedMapType","mapSymbolOffsets","subMapSeries","v2ApplyTransform","View","_roamTransformable","_rawTransformable","setBoundingRect","setViewRect","_transformTo","_viewRect","rawTransform","rawParent","decomposeTransform","_updateTransform","centerCoord","_updateCenterAndZoom","_zoom","getDefaultCenter","rawRect","getRoamTransform","rawTransformMatrix","roamTransform","defaultCenter","roamTransformable","rawTransformable","_rawTransform","invTransform","dummyTransformable","getViewRectAfterRoam","noRoam","getCoordSys","GEO_DEFAULT_PARAMS","invertLongitute","geo2DDimensions","Geo","_nameCoordMap","defaultParams","_invertLongitute","getRegionByCoord","addGeoCoord","getGeoCoord","projectedToPoint","unproject","pointToProjected","projected","getReferringComponents","models","resizeGeo","leftTop_1","rightBottom_1","projection_1","xMin","yMin","xMax","yMax","sampleLine","centerOption","sizeOption","useCenterAndSize","boxLayoutOption","setGeoCoords","GeoCreator","geoList","getCommonGeoProperties","eachSeries","mapModelGroupBySeries","nameMapList","singleMapSeries","getFilledRegions","originRegionArr","regionsArr","geoCreator","GeoModel","mergeDefaultAndTheme","selectedMap","_optionModelMap","optionModelMap","regionOpt","selected","status","formatter","unSelect","toggleSelected","getCenterCoord","view","updateCenterAndZoom","previousZoom","fixX","fixY","GeoView","focusBlurEnabled","_api","_handleRegionClick","updateSelectStatus","current","geoId","enterSelect","leaveSelect","makeAction","actionInfo","allSelected","names","v","registerImpl","PRIORITY","PROCESSOR","STATISTIC","inRoot","hierNode","defaultAncestor","ancestor","prelim","modifier","change","shift","thread","nodes","isExpand","n","firstWalk","separation","siblings","subtreeW","executeShifts","midPoint","apportion","secondWalk","nodeX","defaultSeparation","radialCoordinate","subtreeV","nodeOutRight","nodeInRight","nodeOutLeft","nodeInLeft","sumOutRight","sumInRight","sumOutLeft","sumInLeft","nextRight","nextLeft","moveSubtree","nextAncestor","wl","wr","node1","node2","TreeEdgeShape","parentPoint","childPoints","TreePath","getDefaultStyle","childLen","firstChildPos","lastChildPos","orient","forkDim","otherDim","forkPosition","tmpPoint","TreeView","_mainGroup","layoutInfo","_updateViewCoordSys","symbolNeedsDraw","updateNode","_nodeScaleRatio","_updateNodeAndLinkScale","bbox","oldMin","_min","oldMax","_max","viewCoordSys","updateLabelLayout","nodeScale","_getNodeGlobalScale","setSymbolScale","nodeScaleRatio","groupZoom","roamZoom","tree","getNodeByDataIndex","symbolInnerColor","virtualRoot","sourceSymbolEl","sourceLayout","sourceOldLayout","__oldX","__oldY","rawX","__radialOldRawX","rawY","__radialOldRawY","targetLayout","Symbol","useNameLabel","__radialRawX","__radialRawY","getSymbolPath","realRoot","rootLayout","length_1","isLeft","textPosition","normalLabelModel","labelRotateRadian","origin","focusDataIndices","getAncestorsIndices","getDescendantIndices","drawEdge","__edge","parentEl","hoverState","edgeShape","getOrient","curvature","edgeForkPosition","edge","getEdgeShape","childLayout","removeNodeEdge","removeAnimationOpt","getSourceNode","sourceEdge","layoutOpt","removeOpt","fadeOut","fadeLabel","childNode","cpx1","cpy1","cpx2","cpy2","radialCoor1","radialCoor2","radialCoor3","radialCoor4","inner","linkSeriesData","mainData","main","datasAttr","linkAll","TRANSFERABLE_METHODS","methodName","wrapMethod","transferInjection","cloneShallowInjection","CHANGABLE_METHODS","changeInjection","isMainData","linkSingle","struct","getLinkedData","getLinkedDataAll","structAttr","TreeNode","hostTree","depth","viewChildren","isRemoved","eachNode","options","context","order","suppressVisitSub","updateDepthAndHeight","getNodeById","getId","contains","getAncestors","includeSelf","ancestors","indices","currNode","getValue","dimension","merge","getLevelModel","levelModels","getRawIndex","getChildIndex","isAncestorOf","isDescendantOf","Tree","_nodes","rawIndex","clearLayouts","clearItemLayouts","createTree","dataRoot","beforeLink","listData","dimMax","buildHierarchy","dataNode","addChild","dimensionsCount","retrieveTargetInfo","validPayloadTypes","targetNode","targetNodeId","getPathToRoot","aboveViewRoot","viewRoot","viewPath","wrapTreePathInfo","treePathInfo","nodeDataIndex","TreeSeriesModel","ignoreStyleOnData","leaves","leavesModel","nodeData","treeDepth","expandAndCollapse","expandTreeDepth","initialTreeDepth","getRawDataItem","collapsed","noValue","treeAncestors","symbol","curveness","TreeSeries","eachAfter","callback","next","eachBefore","treeLayout","commonLayout","left_1","right_1","bottom_1","delta","tx_1","kx_1","ky_1","coorX_1","coorY_1","finalCoor","orient_1","treeVisual","existsStyle","ensureUniqueItemVisual","installTreeAction","actionTypes","installTreemapAction","handleRootToNode","types","targetInfo","originViewRoot","getViewRoot","direction","resetViewRoot","enableAriaDecalForTree","decalPaletteScope","TreemapSeriesModel","preventUsingHoverLayer","completeTreeValue","levels","designatedVisualItemStyle","designatedVisualModel","setDefault","levelDefine","levelModel","setLayoutInfo","mapIdToIndex","idIndexMap","_idIndexMap","_idIndexMapCount","_viewRoot","enableAriaDecal","sort","clipWindow","squareRatio","leafDepth","drillDownIcon","zoomToNodeRatio","nodeClick","breadcrumb","emptyItemWidth","upperLabel","colorAlpha","colorSaturation","gapWidth","borderColorSaturation","visualDimension","visualMin","visualMax","colorMappingBy","visibleMin","childrenVisibleMin","childValue","thisValue","globalColorList","globalDecalList","hasColorDefine","hasDecalDefine","modelColor","modelDecal","level0","TreemapSeries","TEXT_PADDING","ITEM_GAP","ARRAY_LENGTH","Breadcrumb","containerGroup","onSelect","thisGroup","textStyleModel","emphasisTextStyleModel","layoutParam","box","totalWidth","renderList","_prepare","_renderContent","getTextRect","lastX","availableSize","emphasisItemStyle","itemNode","makeItemPoints","lineJoin","onclick","packEventData","head","tail","splice","componentSubType","seriesName","selfType","AnimationWrap","_storage","_elExistsMap","finished","_finishedCallback","checkTerminate","animateTo","setToFinal","done","aborted","createWrap","DRAG_THRESHOLD","PATH_LABEL_NOAMAL","PATH_UPPERLABEL_NORMAL","Z2_BASE","Z2_BG","Z2_CONTENT","getStateItemStyle","makeStyleMapper","getItemStyleNormal","TreemapView","_state","createStorage","payloadType","_oldTree","thisStorage","reRoot","rootNodeGroup","nodeGroup","_giveContainerGroup","hasAnimation","renderResult","_doRender","renderFinally","_doAnimation","_resetController","_renderBreadcrumb","_containerGroup","_initEvents","thisTree","oldTree","lastsForAnimation","oldStorage","willInvisibleEls","doRenderNode","thisNode","oldNode","dualTravel","willDeleteEls","clearStorage","thisViewChildren","oldViewChildren","sameTree","getKey","processNode","newIndex","oldIndex","DataDiffer","store","storageName","delEls","willDelete","durationOption","easingOption","animationWrap","innerStore","nodeWidth","nodeHeight","targetX","targetY","last","oldShape","fadein","_onPan","_onZoom","_clearController","rootRect","mouseX","mouseY","findTarget","isLeafRoot","_rootToNode","_zoomToNode","link","linkTarget","_breadcrumb","background","content","thisLayout","nodeModel","isInView","thisWidth","thisHeight","thisInvisible","thisRawIndex","oldRawIndex","upperHeight","isParent","itemStyleNormalModel","itemStyleEmphasisModel","itemStyleBlurModel","itemStyleSelectModel","borderRadius","giveGraphic","markRedraw","isAboveViewRoot","bg","renderBackground","upperLabelHeight","blurScope","isDisabled","focusOrIndices","renderContent","disableMorphing","useUpperLabel","processInvisible","visualBorderColor","upperLabelWidth","prepareText","contentWidth","contentHeight","nodeStyle","element","rectEl","upperLabelRect","isShow","textPadding","beforeUpdate","truncateMinChar","lineOverflow","addDrillDownIcon","textEmphasisState","getState","iconChar","Ctor","lasts","prepareAnimationWhenHasOld","calculateZ2","prepareAnimationWhenNoOld","lastCfg","parentOldX","parentOldY","parentOldBg","z2InLevel","CATEGORY_DEFAULT_VISUAL_INDEX","VisualMapping","mappingMethod","thisOption","_normalizeData","normalizers","visualHandler","visualHandlers","applyVisual","getColorMapper","_normalizedToVisual","normalizeVisualRange","preprocessForPiecewise","categories","preprocessForSpecifiedCategory","dataExtent","mapValueToVisual","normalized","getNormalizer","listVisualTypes","isValidType","hasOwnProperty","eachVisual","visual","mapVisual","isPrimary","newVisual","newVal","retrieveVisuals","obj","hasVisual","prepareVisualTypes","visualTypes","types_1","type1","type2","dependsOn","visualType1","visualType2","findPieceIndex","pieceList","findClosestWhenOutside","possibleI","pieceValue","updatePossible","piece","interval","close_1","close","littleThan","newAbs","makeApplyVisual","isNormalized","doMapCategory","returnRGBArray","parsedVisual","linear","category","piecewise","getSpecifiedVisual","fixed","doMapFixed","colorHue","makePartialColorVisualHandler","colorLightness","createNormalizedToNumericVisual","liftZ","getter","setter","symbolCfg","doMapToArray","hasSpecialVisual","originIndex","categoryMap","cate","visualArr_1","setVisualToOption","isCategory","visualArr","doNotNeedPair","applyValue","colorChannel","loop","sourceExtent","pieceIndex","ITEM_STYLE_NORMAL","travelTree","designatedVisual","viewRootAncestors","nodeLayout","thisNodeColor","nodeItemStyleModel","visuals","buildVisuals","calculateColor","calculateBorderColor","mapping_1","buildVisualMapping","childVisual","visualName","getValueVisualDefine","rangeVisual","getRangeVisual","range","mapping","drColorMappingBy","childVisuals","mappingType","mathMax","mathMin","retrieveValue","PATH_BORDER_WIDTH","PATH_GAP_WIDTH","PATH_UPPER_LABEL_SHOW","PATH_UPPER_LABEL_HEIGHT","ecWidth","ecHeight","seriesOption","containerWidth","containerHeight","viewAbovePath","rootSize","estimateRootSize","sort_1","viewRootLayout_1","area","squarify","treeRoot","calculateRootPosition","prunning","hideChildren","halfGapWidth","getUpperLabelHeight","layoutOffset","layoutOffsetUpper","totalArea","initChildren","rowFixedLength","best","row","score","worst","orderBy","overLeafDepth","info","statistic","filterByThreshold","orderedChildren","deletePoint","ratio","areaMax","areaMin","squareArea","flush","idx0WhenH","idx1WhenH","xy","wh","rowOtherLength","rowLen","step","wh1","remain","modWH","wh0","defaultSize","viewArea","currNodeValue","defaultPosition","targetCenter","clipRect","nodeInViewAbovePath","intersect","childClipRect","treemapVisual","treemapLayout","categoryFilter","graphSeries","categoriesData","getCategoriesData","graph","getGraph","categoryNames","categoryVisual","paletteScope","categoryNameIdxMap","getColorFromPalette","symbolVisualList","symbolVisual","categoryIdx","categoryStyle","visualList","normalize","graphEdgeVisual","edgeData","getEdgeData","getEdgeByIndex","KEY_DELIMITER","getAutoCurvenessParams","createCurveness","appendLength","autoCurvenessParmas","curvenessList","__curvenessList","getKeyOfEdges","n1","n2","getOppositeKey","getEdgeFromMap","__edgeMap","getTotalLengthBetweenNodes","getEdgeMapLengthWithKey","lenV","edgeMap","initCurvenessList","createEdgeMapForCurveness","oppositeEdges","isForward","getCurvenessForEdge","needReverse","autoCurvenessParams","isArrayParam","edgeArray","edgeIndex","totalLen","curKey","parityCorrection","oppositeKey","resValue","simpleLayout","simpleLayoutEdge","eachEdge","graphSimpleLayout","dimensions_1","coordDim","mapDimensionsAll","hasValue","getNodeGlobalScale","getSymbolSize","_symbolRadiansHalf","circularLayout","basedOn","draggingNode","pointer","tempX","tempY","circularRotateLabel","rotateNodeLabel","_layoutNodesBasedOn","cp1","x12","y12","unitAngle","radianHalf","sumRadian","symbolRadianHalf","asin","halfRemainRadian","getGraphicEl","emphasisState","graphCircularLayout","inNodes","inEdges","edges","gravity","random","pp","beforeStepCallback","afterStepCallback","initialFriction","friction","warmUp","setFixed","setUnfixed","beforeStep","afterStep","v12","nLen","ignoreForceLayout","repFact","rep","graphForceLayout","preservedPoints_1","preservedPoints","graph_1","nodeData_1","forceModel","initLayout","nodeDataExtent_1","edgeDataExtent_1","repulsion","edgeLength","repulsionArr_1","edgeLengthArr_1","nodes_1","edgeModel","forceInstance","l","getNodeByIndex","stopped","forceLayout","createViewCoordSys","viewList","coordSysType","positions","bbWidth","bbHeight","straightLineProto","bezierCurveProto","StraightLineShape","CurveShape","isStraightLine","ECLinePath","pointAt","tangentAt","SYMBOL_CATEGORIES","makeSymbolTypeKey","symbolCategory","lineData","symbolOffset","symbolKeepAspect","symbolSizeArr","symbolOffsetArr","__specifiedRotation","createLine","subPixelOptimize","setLinePoints","targetShape","Line","seriesScope","_createLine","_updateCommonStl","childOfName","getLinePath","emphasisLineStyle","blurLineStyle","selectLineStyle","labelStatesModels","emphasisDisabled","hasItemOption","lineState","lineStateStyle","stateStyle","__isEmptyBrush","rawVal","labelNormalModel","__align","__verticalAlign","__position","__labelDistance","highlight","downplay","linePath","lineGroup","symbolFrom","symbolTo","invScale","__dirty","fromPos","toPos","setSymbolRotation","textVerticalAlign","distanceX","distanceY","halfPercent","tangent","specifiedRotation","LineDraw","LineCtor","_LineCtor","_progressiveEls","lineDraw","oldLineData","_lineData","makeSeriesScope","_doAdd","_doUpdate","_seriesScope","updateIncrementalAndHover","isEffectObject","hoverLayer","lineNeedsDraw","newLineData","itemEl","isPointNaN","pts","v1","v2","v3","v2DistSquare","mathAbs","intersectCurveCircle","curvePoints","radiusSquare","_t","nextDiff","adjustEdge","tmp0","quadraticSubdivide","pts2","fromSymbol","toSymbol","__original","originalPoints","isViewCoordSys","GraphView","_lineDraw","_firstRender","groupNewProp","clearTimeout","_layoutTimeout","layoutAnimation","_startForceLayoutIteration","_layouting","setDraggable","getAdjacentDataIndices","self","setTimeout","generateNodeKey","Graph","directed","_nodesMap","_edgesMap","_directed","isDirected","addNode","nodesMap","GraphNode","hostGraph","rawIdx","addEdge","edgesMap","GraphEdge","outEdges","getEdge","breadthFirstTraverse","startNode","edgeType","__visited","queue","currentNode","otherNode","inDegree","outDegree","dataIndices","adjacentEdge","createGraphDataProxyMixin","hostName","dataName","createGraphFromNodeEdge","linkNameList","validEdges","linkCount","coordSysCtor","CoordinateSystem","GraphSeriesModel","_categoriesData","fillDataTextStyle","links","_updateCategoriesData","categoriesModels","_categoriesModels","categoryModel","oldGetModel","newGetModel","resolveParentPath","pathArr","newPathArr","sourceName","nameArr","nodeMarkup","circular","rotateLabel","force","edgeSymbol","edgeSymbolSize","edgeLabel","GraphSeries","VISUAL","POST_CHART_LAYOUT","PointerShape","PointerPath","parsePosition","formatLabel","labelFormatter","GaugeView","colorList","posInfo","_renderMain","axisLineModel","roundCap","MainPath","showAxis","axisLineWidth","angles","angleRangeSpan","prevEndAngle","sectors","getColor","_renderTicks","_renderTitleAndDetail","_renderAnchor","_renderPointer","unitX","unitY","minVal","maxVal","tickModel","subSplitNumber","splitLineLen","tickLen","subStep","splitLineStyle","tickLineStyle","splitLineDistance","autoColor","textStyleX","textStyleY","rotateType","tickLine","oldProgressData","_progressEls","progressList","showPointer","progressModel","showProgress","valueExtent","angleExtent","createPointer","pointerModel","pointerWidth","pointerLength","pointerStr","pointerOffset","pointerOffsetX","pointerOffsetY","pointerKeepAspect","createProgress","ProgressPath","isOverlap","progressWidth","isClip","previousPointer","previousRotate","previousProgress","previousEndAngle","symbolStyle","anchorModel","showAnchor","anchorSize","anchorType","offsetCenter","anchorKeepAspect","contentGroup","newTitleEls","newDetailEls","showPointerAbove","_titleEls","_detailEls","itemTitleModel","titleOffsetCenter","titleX","titleY","labelEl","itemDetailModel","detailOffsetCenter","detailX","detailY","detailColor","formatter_1","fmt","extendParams","interpolatedValue","GaugeSeriesModel","visualStyleAccessPath","overlap","keepAspect","detail","lineHeight","GaugeSeries","opacityAccessPath","FunnelPiece","insideStroke","outsideFill","FunnelView","funnelPiece","FunnelSeriesModel","toFixed","minSize","maxSize","gap","funnelAlign","FunnelSeries","getSortedIndices","isAscending","funnelLayout","sizeExtent","itemSize","getLinePoints","val_1","nextIdx","DEFAULT_SMOOTH","ParallelView","_dataGroup","_initialized","dataGroup","newDataIndex","addEl","updateElCommon","oldDataIndex","createLinePoints","createGridClipShape","removeClipPath","progressiveEls","parallelModel","getRect","dimName","isEmptyValue","getAxis","axisType","ParallelSeriesModel","visualDrawType","makeDefaultEncode","getRawIndicesByActiveState","activeState","eachActiveState","theActiveState","parallelIndex","inactiveOpacity","activeOpacity","axisDim","dataDimIndex","convertDimNameToNumber","ParallelSeries","parallelVisual","opacityMap","active","inactive","itemOpacity","parallelPreprocessor","createParallelIfNeeded","mergeAxisOptionFromParallel","parallel","hasParallelSeries","parallelAxis","axisOption","parallelOption","parallelAxisDefault","CLICK_THRESHOLD","_handlers","handlers","handler","_throttledDispatchExpand","_dispatchExpand","mousedown","checkTrigger","_mouseDownPoint","mouseup","mouseDownPoint","getSlidedAxisExpandWindow","behavior","axisExpandWindow","mousemove","debounceNextCall","triggerOn","ParallelModel","newOption","_initDimensions","setAxisExpand","parallelAxisIndex","axisModels","queryComponents","axisModel","axisExpandable","axisExpandCenter","axisExpandCount","axisExpandWidth","axisExpandRate","axisExpandDebounce","axisExpandSlideTriggerArea","axisExpandTriggerOn","ParallelAxis","coordExtent","isHorizontal","mathFloor","floor","mathCeil","Parallel","_axesMap","_axesLayout","_init","axisHelper","onBand","inverse","_updateAxesFromSeries","_makeLayoutInfo","axisBase","layoutBase","pixelDimIndex","pAxis","pLayout","axisLength","layoutLength","_layoutAxes","winSize","layoutExtent","axisCount","restrict","axisCollapseWidth","winInnerIndices","axisExpandWindow0Pos","axisExtent","layoutAxisWithExpand","layoutAxisWithoutExpand","positionTable","horizontal","vertical","rotationTable","axisNameAvailableWidth","axisLabelShow","nameTruncateMaxWidth","axisCoordToPoint","axesMap","dataDimensions","hasActiveSet","hasAxisBrushed","lenj","getActiveState","axisLayout","getAxisLayout","pointCoord","triggerArea","useJump","sliderMove","winSize2","createParallelCoordSys","coordSysList","parallelCoordSysCreator","ParallelAxisModel","activeIntervals","getAreaSelectStyle","setActiveIntervals","intervals","elementList","ParallelAxisView","_brushController","BrushController","_onBrush","fromAxisAreaSelect","oldAxisGroup","_axisGroup","coordSysModel","getCoordSysModel","areaSelectStyle","areaWidth","builderOpt","strokeContainThreshold","_refreshBrushController","getExtent","extentLen","extra","mount","enableGlobalPan","setPanels","panelId","brushHelper","isTargetByCursor","getLinearBrushOtherExtent","enableBrush","brushType","brushStyle","removeOnClick","updateCovers","getCoverInfoList","eventParam","coverInfoList","areas","coverInfo","realtime","isEnd","parallelAxisId","installParallelActions","parallelAxisModel","defaultAxisOption","axisModelCreator","BRUSH","SankeyPathShape","SankeyPath","SankeyView","_focusAdjacencyDisabled","sankeyView","curve","n1Layout","node1Model","dragX1","dragY1","n2Layout","node2Model","dragX2","dragY2","edgeLayout","ty","sourceColor","targetColor","dragX","dragY","drift","localX","localY","ondragend","SankeySeriesModel","nodeDepth","setNodePosition","localPosition","dataItem","rawDataOpt","edgeValue","edgeName","nodeValue","nodeGap","layoutIterations","nodeAlign","SankeySeries","sankeyLayout","computeNodeValues","filteredNodes","iterations","layoutSankey","computeNodeBreadths","computeNodeDepths","computeEdgeDepths","value1","getEdgeValue","value2","nodeRawValue","remainEdges","indegreeArr","zeroIndegrees","nextTargetNode","maxNodeDepth","isItemDepth","edgeIdx","indexEdge","nodeIndex","maxDepth","adjustNodeWithNodeAlign","kx","scaleNodeBreadths","isNodeDepth","nextSourceNode","remainNodes","skNodeHeight","moveSinksRight","nodesByBreadth","prepareNodesByBreadth","initializeNodeDepth","resolveCollisions","alpha","relaxRightToLeft","relaxLeftToRight","keyAttr","groupResult","buckets","minKy","ky","nodeDy","edgeDy","nodeDyAttr","weightedTarget","centerTarget","nodeY","weightedSource","centerSource","array","sankeyVisual","minValue_1","maxValue_1","mapValueToColor","customColor","edgeStyle","WhiskerBoxCommonMixin","ordinalMeta","addOrdinal","xAxisModel","yAxisModel","xAxisType","yAxisType","getOrdinalMeta","coordDims","baseAxisDimIndex","baseAxisDim","_baseAxisDim","otherAxisDim","baseAxisType","otherAxisType","newOptionData_1","newItem","unshift","defaultValueDimensions","otherDims","tooltip","dimsDef","getBaseAxis","BoxplotSeriesModel","defaultTooltip","boxWidth","BoxplotSeries","BoxplotView","constDim","createNormalBox","updateNormalBoxData","BoxPathShape","BoxPath","ends","transInit","updateMethod","initBaseline","boxplotLayout","groupSeriesByAxis","groupItem","seriesModels","calculateBase","layoutSingleSeries","boxOffsetList","boxWidthList","axisList","baseAxis","bandWidth","seriesCount","boundList","getBandWidth","maxDataCount_1","boxWidthBound","boxGap","base","halfWidth","cDimIdx","vDimIdx","cDim","vDims","axisDimVal","median","getPoint","end1","end2","end4","end5","addBodyEnd","layEndLine","point1","point2","endCenter","to","prepareBoxplotData","boxData","outliers","boundIQR","useExtreme","ascList","Q1","Q2","Q3","bound","low","high","itemNameFormatter","outlier","boxplotTransform","upstream","sourceFormat","config","registerTransform","SKIP_PROPS","CandlestickView","_updateDrawMode","_renderLarge","_renderNormal","_incrementalRenderLarge","_incrementalRenderNormal","isSimpleBox","needsClip","isNormalBoxClipped","setBoxCommon","createLarge","NormalBoxPathShape","NormalBoxPath","__simpleBox","clipped","LargeBoxPathShape","LargeBoxPath","__sign","largePoints","elP","elN","elDoji","setLargeStyle","sign","CandlestickSeriesModel","getShadowDim","brushRect","color0","borderColor0","borderColorDoji","barMaxWidth","barMinWidth","barWidth","progressiveChunkMode","CandlestickSeries","candlestickPreprocessor","seriesItem","positiveBorderColorQuery","negativeBorderColorQuery","dojiBorderColorQuery","positiveColorQuery","negativeColorQuery","candlestickVisual","plan","createRenderPlanner","performRawSeries","getBorderColor","isSeriesFiltered","isLargeRender","candlestickLayout","candleWidth","calculateCandleWidth","cDimI","vDimsI","openDimI","closeDimI","lowestDimI","highestDimI","largeProgress","normalProgress","openVal","closeVal","lowestVal","highestVal","ocLow","ocHigh","ocLowPoint","ocHighPoint","lowestPoint","highestPoint","subPixelOptimizePoint","hasDojiColor","getSign","makeBrushRect","pmin","pmax","tmpIn","tmpOut","updateRipplePath","rippleGroup","effectCfg","rippleEffectColor","ripplePath","zlevel","EffectSymbol","stopEffectAnimation","startEffectAnimation","rippleNumber","period","effectOffset","animate","when","rippleScale","animateStyle","updateEffectAnimation","oldEffectCfg","_effectCfg","DIFFICULT_PROPS","getSymbolType","setScale","showEffectOn","EffectScatterView","effectSymbolDraw","_updateGroupTransform","EffectScatterSeriesModel","effectType","rippleEffect","EffectScatterSeries","EffectLine","_updateEffectSymbol","effectModel","_symbolType","_symbolScale","_updateEffectAnimation","roundTrip","constantSpeed","delayExpr","_updateAnimationPoints","_getLineLength","_period","_loop","_roundTrip","stopAnimation","delayNum","__t","_animateSymbol","self_1","during","_updateSymbolPosition","__p1","__cp1","__p2","lastPos","quadraticAt","quadraticDerivativeAt","tx","__lastT","Polyline","_createPolyline","lineEmphasisState","EffectPolyline","_lastFrame","_lastFramePercent","_points","accLenArr","_offsets","_length","offsets","frame","lastFrame","LargeLinesPathShape","segs","LargeLinesPath","quadratic","LargeLineDraw","lineEl","oldSegs","newSegs","__startIndex","isIncremental","linesLayout","isPolyline","isLarge","lineCoords","segCount","totalCoordsCount","getLineCoordsCount","getLineCoords","LinesView","_updateLineDraw","trailLength","isSvg","painter","getLayer","_lastZlevel","motionBlur","_showEffect","lastFrameAlpha","_clearLayer","progressiveRender","hasEffect","_hasEffet","_isPolyline","Uint32Arr","Uint32Array","Float64Arr","Float64Array","compatEc2","itemOpt","coords","fromName","toName","LinesSeriesModel","_processFlatCoordsArray","_flatCoords","flatCoords","_flatCoordsOffset","flatCoordsOffset","appendData","_getCoordsFromItemModel","startOffset","coordsOffsetAndLenStorage","coordsStorage","coordsCursor","offsetCursor","dataCount","dimIndex","preventIncremental","xAxisIndex","yAxisIndex","effect","LinesSeries","linesVisual","dataEach","GRADIENT_LEVELS","HeatmapLayer","blurSize","pointSize","maxOpacity","minOpacity","_gradientPixels","inRange","outOfRange","canvas","platform","createCanvas","colorFunc","isInRange","_getBrush","gradientInRange","_getGradient","gradientOutOfRange","globalAlpha","drawImage","imageData","getImageData","pixels","pixelLen","diffOpacity","gradientOffset","putImageData","brushCanvas","_brushCanvas","clearRect","gradientPixels","pixelsSingleState","Uint8ClampedArray","getIsInPiecewiseRange","dataSpan","getIsInContinuousRange","isGeoCoordSys","HeatmapView","visualMapOfThisSeries","visualMap","eachTargetSeries","targetSeries","_renderOnCartesianAndCalendar","_renderOnGeo","xAxisExtent","yAxisExtent","isCartesian2d","xAxis","yAxis","dataDims","dataDimX","dataDimY","dataToRect","contentShape","emphasisModel_1","visualMapModel","inRangeVisuals","targetVisuals","outOfRangeVisuals","hmLayer","_hmLayer","dims","lng","lat","getPieceList","HeatmapSeriesModel","coordSysCreator","HeatmapSeries","BAR_BORDER_WIDTH_QUERY","LAYOUT_ATTRS","posDesc","pathForLineWidth","PictorialBarView","cartesian","coordSysRect","master","ecSize","coordSysExtent","categoryDim","symbolMeta","getSymbolMeta","bar","createBar","updateCommon","pictorialShapeStr","getShapeStr","__pictorialShapeStr","updateBar","__pictorialSymbolMeta","removeBar","animationModel","symbolRepeat","symbolClip","symbolPosition","symbolPatternSize","symbolRepeatDirection","hoverScale","prepareBarLength","prepareSymbolSize","boundingLength","pxSign","prepareLineWidth","symbolScale","prepareLayoutInfo","valueLineWidth","repeatCutLength","outputSymbolMeta","symbolBoundingData","valueAxis","getOtherAxis","zeroPx","toGlobalCoord","pxSignIdx","symbolBoundingExtent","convertToCoordOnAxis","parsedSymbolSize","categorySize","unitLength","pathLen","absBoundingLength","symbolMargin","hasEndGap","lastIndexOf","symbolMarginNumeric","uLenWithMargin","endFix","repeatSpecified","repeatTimes","toIntTimes","mDiff","sizeFix","pathPosition","bundlePosition","barRectShape","createPath","createOrUpdateRepeatSymbols","isUpdate","bundle","__pictorialBundle","unit","eachPath","__pictorialAnimationIndex","__pictorialRepeatTimes","makeTarget","createOrUpdateSingleSymbol","mainPath","__pictorialMainPath","createOrUpdateBarRect","rectShape","barRect","__pictorialBarRect","createOrUpdateClip","__pictorialClipPath","getAnimationDelayParams","immediateAttrs","animationAttrs","barPositionOutside","defaultOutsidePosition","times","roundedTimes","PictorialBarSeriesModel","defaultSymbol","stack","BaseBarSeries","barGap","PictorialBarSeries","LAYOUT","PROGRESSIVE_LAYOUT","ThemeRiverView","_layers","layersSeries","getLayerSeries","keyGetter","dataDiffer","_layersSeries","newLayersGroups","process","oldLayersGroups","points0","points1","textLayout","layerGroup","stackedOnPoints","stackedOnSmooth","smoothConstraint","DATA_NAME_INDEX","ThemeRiverSeriesModel","fixData","rawDataLength","timeValueKeys","layerData","dataList","layerNum","timeValue","singleAxisModel","filterData","dimensionsDefine","single","lenCount","indexArr","timeDim","layerSeries","index1","index2","getAxisTooltipData","nestestValue","nearestIdx","pointNum","theValue","singleAxisIndex","ThemeRiverSeries","themeRiverLayout","doThemeRiverLayout","baseY0","layerPoints","singleLayer","computeBaseline","baseLine","layerIndex","sums","temp","DEFAULT_SECTOR_Z","DEFAULT_TEXT_Z","SunburstPiece","_seriesModel","_ecModel","itemStyleModel","labelMinAngle","isNormalShown","getLabelAttr","stateAttr","labelStateModel","isShown","sectorState","labelColor","labelPadding","dirtyStyle","ROOT_TO_NODE_ACTION","HIGHLIGHT_ACTION","UNHIGHLIGHT_ACTION","installSunburstAction","handleHighlight","SunburstView","newRoot","renderLabelForZeroData","newChildren","oldChildren","_oldChildren","removeNode","renderRollUp","virtualPiece","targetFound","SunburstSeriesModel","_levelModels","borderType","blur","SunburstSeries","sunburstLayout","rootDepth","renderRollupNode","rPerLevel","renderNode","rStart","rEnd","r0_1","r_1","radius_1","siblingAngle_1","sortOrder","sortTargets","isAsc_1","sunburstVisual","pickColor","treeHeight","STYLE_VISUAL_TYPE","NON_STYLE_VISUAL_PROPS","legendIcon","visualMeta","customInnerStore","CustomSeriesModel","currentZLevel","currentZ","CustomSeries","dataToCoordSize","dataSize","dimIdx","halfSize","cartesianPrepareCustom","geoPrepareCustom","singlePrepareCustom","getterName","polarPrepareCustom","radiusAxis","getRadiusAxis","angleAxis","getAngleAxis","dataToRadius","dataToAngle","calendarPrepareCustom","rangeInfo","getRangeInfo","cellWidth","getCellWidth","cellHeight","getCellHeight","weeks","dayCount","allDay","clamp","isEC4CompatibleStyle","elType","hasOwnTextContentOption","hasOwnTextConfig","legacy","convertFromEC4CompatibleStyle","hostStyle","textContentStyle","srcStyle","rich","textFill","textStroke","hasOwnPos","textOffset","textRotation","textDistance","convertEC4CompatibleRichItem","richItem","textFont","textStrokeWidth","textLineHeight","textWidth","textHeight","textBackgroundColor","textBorderColor","textBorderWidth","textBorderRadius","textBoxShadowColor","textBoxShadowBlur","textBoxShadowOffsetX","textBoxShadowOffsetY","convertToEC4StyleForCustomSerise","itemStl","txStl","txCfg","isInside","hostFill","convertToEC4RichItem","textFillNotSet","insideFill","outsideStroke","textShadowColor","textShadowBlur","textShadowOffsetX","textShadowOffsetY","LEGACY_TRANSFORM_PROPS_MAP","LEGACY_TRANSFORM_PROPS","ELEMENT_ANIMATABLE_PROPS","transitionInnerStore","getElementAnimationConfig","elOption","animationProp","userDuring","duringCall","applyUpdateTransition","animatableModel","clearStyle","styleOpt","transFromProps","propsToSet","prepareTransformAllPropsFinal","prepareShapeOrExtraAllPropsFinal","prepareTransformTransitionFrom","prepareShapeOrExtraTransitionFrom","prepareStyleTransitionFrom","applyPropsDirectly","applyMiscProps","enterFromProps_1","enterFrom","animateFrom","applyPropsTransition","updateLeaveTo","leaveToProps","leaveTo","applyLeaveTransition","onRemove","isTransitionAll","transition","allPropsFinal","changeTarget","autoBatch","tmpDuringScope","transitionDuringAPI","getTransform","dirtyShape","getShape","getStyle","setExtra","getExtra","latestUserDuring","scopeUserDuring","mainAttr","fromEl","attrOpt","transFromPropsInAttr","elPropsInAttr","attrTransition","transitionKeys","elVal","elPropsInAttrKeys","isNonStyleTransitionEnabled","allProps","allPropsInAttr","keysInAttr","legacyName","xyName","legacyArr","transFromStyleProps","fromElStyle","styleTransition","elTransition","getAnimationStyleProps","animationProps","animationStyleProps","styleKeys","optVal","getStateToRestore","KEYFRAME_EXCLUDE_KEYS","stopPreviousKeyframeAnimationAndRestore","applyKeyframeAnimation","animationOpts","singleAnimationOpts","stateToRestore","targetPropName","kfValues","propKeys","stopTracks","savedTarget","whenWithKeys","EMPHASIS","NORMAL","BLUR","SELECT","STATES","PATH_ITEM_STYLE","PATH_LABEL","DEFAULT_TRANSITION","GROUP_DIFF_PREFIX","attachedTxInfoTmp","prepareCustoms","cartesian2d","calendar","isPath","isDisplayable","copyElement","sourceEl","copyTransform","CustomChartView","customSeries","renderItem","makeRenderItem","createOrUpdateItem","oldEl","setIncrementalAndHoverLayer","filterForExposedEvent","eventType","packedEvent","elementName","createEl","graphicType","pathRect","pathData","getPathData","customPathData","customImagePath","Clz","customGraphicType","z2SelectLift","updateElNormal","attachedTxInfo","txCfgOpt","textOptionStyle","decalPattern","decalObj","__decalPattern","keyframeAnimation","updateElOnState","elStateOpt","elDisplayable","existingEmphasisState","updateZ","optZ2","updateZForEachState","retrieveStateOption","prepareResult","currDataIndexInside","currItemModel","userAPI","getDevicePixelRatio","ordinalRawValue","styleEmphasis","barLayout","currentSeriesIndices","userParams","dataInsideLength","encode","wrapEncodeDef","currItemStyleModels","currLabelModels","seriesItemStyleModels","seriesLabelModels","dataIndexInside","getItemStyleModel","getLabelModel","actionType","dimInfo","getDimensionInfo","userProps","preFetchFromExtra","applyUserPropsAfter","style_1","getCurrentSeriesIndices","encodeDef","isExtraCoord","coordDimIndex","existsEl","doCreateOrUpdateEl","toBeReplacedIdx","doesElNeedRecreate","childrenRef","clearStates","morph","conOpt","isLegacy","doCreateOrUpdateAttachedTx","doCreateOrUpdateClipPath","otherStateOpt","otherStyleOpt","retrieveStyleOptionOnState","mergeChildren","replaceAt","elInner","elOptionType","elOptionShape","elOptionStyle","isUniversalTransitionEnabled","hasOwnPathData","clipPathOpt","getClipPath","processTxInfo","txConOptNormal","txConOptEmphasis","txConOptBlur","txConOptSelect","txConStlOptNormal","txConOptOtherState","stateOpt","txConOpt","convertResult","txConOptNormal_1","stateOptionNormal","stateOption","$mergeChildren","byName","diffChildrenByName","notMerge","diffGroupChildren","newChild","oldChild","childCount","removeChildFromGroup","processAddUpdate","processRemove","childOption","PolarAxisPointer","makeElOption","axisPointerModel","animationThreshold","otherAxis","otherExtent","coordValue","axisPointerType","elStyle","viewHelper","pointerOption","pointerShapeBuilder","graphicKey","labelMargin","labelPos","getLabelPosition","BaseAxisPointer","axisAngle","labelRotation","innerTextLayout","shadow","PolarModel","findAxisModel","foundAxisModel","PolarAxisModel","AngleAxisModel","RadiusAxisModel","RadiusAxis","radiusToData","AngleAxis","calculateCategoryInterval","ordinalScale","ordinalExtent","tickCount","tickValue","unitSpan","unitH","getFont","maxH","cache","lastAutoInterval","lastTickCount","angleToData","polarDimensions","Polar","_radiusAxis","_angleAxis","axisPointerEnabled","pointToCoord","containData","getAxes","getAxesByScale","scaleType","getTooltipAxes","baseAxes","otherAxes","maxAngle","RADIAN","polarModel","resizePolar","parsedRadius","updatePolarScale","isAngleAxisModel","setAxis","polarCreator","polarList","radiusAxisModel","angleAxisModel","getAxisLineShape","rExtent","getRadiusIdx","fixAngleOverlap","firstItem","lastItem","AngleAxisView","axisPointerClass","ticksAngles","minorTickAngles","getMinorTicksCoords","labels","getViewLabels","getRawOrdinalNumber","isBlank","angelAxisElementsBuilders","AxisView","rId","r0Id","lines","tickAngleItem","minorTick","tickAngles","minorTickModel","rawCategoryData","getCategories","commonLabelModel","labelTextAlign","labelTextVerticalAlign","rawCategoryItem","isLabelSilent","getTextColor","formattedLabel","makeAxisEventDataBase","targetType","rawLabel","lineColors","lineCount","minorSplitLine","minorSplitLineModel","areaColors","prevAngle","r1","selfBuilderAttrs","RadiusAxisView","newAxisGroup","minorTicksCoords","layoutAxis","axisElementBuilders","prevRadius","getSeriesStackId","getAxisKey","barLayoutPolar","lastStackCoords","barWidthAndOffset","calRadialBar","getSeriesByType","axisKey","stackId","columnLayoutInfo","columnOffset","columnWidth","barMinHeight","barMinAngle","baseDim","stacked","clampLayout","valueAxisStart","baseValue","baseCoord","radiusSpan","angleSpan","barSeries","columnsMap","columnsOnAxis","remainedWidth","autoWidthCount","categoryGap","stacks","maxWidth","barCategoryGap","coordSysName","barGapPercent","autoWidth","column","lastColumn","widthSum","angleAxisExtraOption","radiusAxisExtraOption","PolarView","registerAxisPointerClass","axisPosition","rectBound","positionMap","directionMap","labelInside","SingleAxisView","axisView","axisGroup","gridRect","SingleAxisModel","SingleAxis","singleDimensions","Single","_axis","_adjustAxis","_updateAxisTransform","coordBase","extentSum","toLocalCoord","singleModel","singles","singleCreator","XY","WH","SingleAxisPointer","getGlobalExtent","getPointDimIndex","pixelValue","getHandleTransform","updateHandleTransform","currPosition","cursorOtherValue","cursorPoint","tooltipOption","span","SingleView","CalendarModel","inputPositionParams","mergeAndNormalizeLayoutParams","getCellSize","cellSize","dayLabel","firstDay","monthLabel","yearLabel","cellSizeArr","ignoreSize","hvIdx","CalendarView","calendarModel","rangeData","localeModel","getLocaleModel","_renderDayRect","_renderLines","_renderYearText","_renderMonthText","_renderWeekText","itemRectStyleModel","sw","sh","getNextNDay","tl","_tlpoints","_blpoints","_firstDayOfMonth","_firstDayPoints","addPoints","formatedDate","getDateInfo","date","setMonth","getMonth","_getLinePointsOfOneWeek","_drawSplitline","_getEdgesPoints","rs","poyline","parsedDate","tmpD","day","_formatterLabel","format","_yearTextPositionControl","aligns","xc","yc","posPoints","yearText","_monthTextPositionControl","isCenter","vAlign","termPoints","firstDayPoints","yyyy","yy","MM","monthText","_weekTextPositionControl","isStart","firstDayOfWeek","getFirstDayOfWeek","dayOfWeekShort","lweek","fweek","weekText","PROXIMATE_ONE_DAY","Calendar","getDimensionsInfo","_rangeInfo","_sw","_sh","_orient","_firstDayOfWeek","getFullYear","mStr","getDate","dStr","getDay","getTime","Date","setDate","_lineWidth","_getRangeInfo","_initRangeOption","whNames","layoutParams","cellNumbers","cellSizeSpecified","whGlobal","calendarRect","dayInfo","week","nthWeek","pointToDate","tr","br","bl","nthX","nthY","_getDateByWeeksAndDay","normalizedRange","rangeStr","toString","test","reversed","parsedRange","startDateNum","endDateNum","dateNum","nthDay","calendarList","calendarSeries","setKeyInfoToNewElOption","resultItem","newElOption","existElOption","existing","keyInfo","parentId","newElParentOption","parentOption","isSetLoc","props","isSet","mergeNewElOptionToExist","existList","newElOptCopy","$action","copyTransitionInfo","TRANSITION_PROPS_TO_COPY","ROOT_TRANSITION_PROPS_TO_COPY","setLayoutInfoToExist","existItem","hv","existingGroupOpt","newGroupOpt","GraphicComponentModel","preventAutoZ","elements","newList","flattenedList","_flatten","mappingResult","elOptionsToUpdate","_elOptionsToUpdate","optionList","useElOptionsToUpdate","nonShapeGraphicElements","GraphicComponentView","_elMap","graphicModel","_lastGraphicModel","_updateElements","_relocate","elMap","rootGroup","globalZ","globalZLevel","elExisting","targetElParent","textContentOption","elOptionCleaned","getCleanedElOption","isMerge","isReplace","el_1","isNew","updateCommonAttrs","removeEl","el_2","textContentExisting","clipPathOption","clipPathType","oldClipPath","newEl","setEventData","elOptions","apiWidth","apiHeight","isParentRoot","parentElInner","containerInfo","layoutPos","layouted","boundingMode","bounding","animatePos","existElParent","defaultZ","defaultZlevel","graphicOption","DEFAULT_TOOLBOX_BTNS","brushPreprocessor","brushComponents","brushComponentSpecifiedBtns","brushOpt","tbs","toolbox","toolboxFeature","toolboxBrush","brushTypes","removeDuplicate","arr","flag","hasKeys","createVisualMappings","stateList","supplementVisualOption","visualMappings","mappings","createMappings","visualData","mappingOption","__hidden","__alphaForOpacity","Creater","replaceVisualOption","getValueState","visualTypesMap","eachItem","valueOrIndex","rawDataItem","valueState","incrementalApplyVisual","makeBrushCommonSelectorForSeries","selector","lineX","getLineSelectors","lineY","xyIndex","inLineRange","layoutRange","STATE_LIST","DISPATCH_METHOD","DISPATCH_FLAG","layoutCovers","brushModel","brushTargetManager","BrushTargetManager","setInputRanges","brushVisual","throttleType","throttleDelay","brushSelected","setBrushOption","brushOption","brushIndex","thisBrushSelected","brushId","brushName","brushLink","linkedSeriesMap","selectedDataIndexForLink","rangeInfoBySeries","hasBrushExists","builder","boundingRectBuilders","selectableArea","linkOthers","brushed","rangeInfoList","stepAParallel","stepAOthers","brushModelNotControll","controlSeries","checkInRange","seriesBrushSelected","doDispatch","fn","throttle","isDisposed","batch","seriesIndices","getBoundingRectFromMinMax","minMax","rg","BrushView","updateVisual","updateView","$from","makePanelOpts","modelId","setOutputRanges","DEFAULT_OUT_OF_BRUSH_COLOR","BrushModel","inBrush","outOfBrush","setAreas","generateBrushOption","brushMode","transformable","ICON_TYPES","BrushFeature","featureModel","isBrushed","_brushType","_brushMode","setIconStatus","getIcons","availableIcons","icons","command","getDefaultOption","keep","Brush","TitleModel","subtext","subtarget","itemGap","subtextStyle","TitleView","titleModel","subtextStyleModel","disableBox","subText","subTextEl","sublink","groupRect","alignStyle","TimelineModel","_initData","setCurrentIndex","currentIndex","getCurrentIndex","isIndexMax","setPlayState","autoPlay","getPlayState","processedDataArr","dataArr","_names","dimType","controlPosition","rewind","playInterval","SliderTimelineModel","checkpointStyle","controlStyle","showPlayBtn","showPrevBtn","showNextBtn","playIcon","stopIcon","nextIcon","prevIcon","prevBtnSize","nextBtnSize","TimelineView","TimelineAxis","labelDataIndexStore","SliderTimelineView","timelineModel","layoutInfo_1","_layout","mainGroup_1","_createGroup","labelGroup","axis_1","_createAxis","getLabel","noName","_renderAxisLabel","_position","_doPlayStop","_updateTicksStatus","_clearTimer","parsedLabelPos","labelPosOpt","playPosition","prevBtnPosition","nextBtnPosition","labelAlignMap","labelBaselineMap","rotationMap","mainLength","controlModel","showControl","controlSize","controlGap","sizePlusGap","xLeft","xRight","labelAlign","labelBaseline","mainGroup","_labelGroup","rotateOriginX","rotateOriginY","viewBound","getBound","mainBound","labelBound","mainPosition","labelsPosition","mainBoundIdx","toBound","setOrigin","targetGroup","boundIdx","createScaleByModel","getTicks","calcNiceTicks","newGroup","_renderAxisLine","lineCap","progressLine","_progressLine","_currentPointer","_renderAxisTick","ticks","_tickSymbols","tick","hoverStyleModel","progressStyleModel","symbolOpt","_changeTimeline","giveSymbol","dataModel","_tickLabels","hoverLabelModel","progressLabelModel","_renderControl","hoverStyle","playState","makeBtn","iconName","willRotate","iconSize","btn","makeControlIcon","rectHover","_handlePlayClick","_renderCurrentPointer","me","onCreate","_handlePointerDrag","_handlePointerDragend","pointerMoveTo","onUpdate","nextState","_pointerChangeTimeline","mousePos","toCoord","_toAxisCoord","targetDataIndex","_findNearestTick","_timer","vertex","trans","axisCoord","nextIndex","tickSymbols","tickLabels","toggleState","Ordinal","Time","locale","useUTC","objPath","noAnimation","dragging","installTimelineAction","resetOption","replaceMerge","timelinePreprocessor","timelineOpt","timeline","compatibleEC2","ec2Types","transferItem","itemStyleEmphasis","labelNormal","excludeLabelAttr","registerSubTypeDefaulter","checkMarkerInSeries","seriesOpts","seriesOptArr","fillLabel","MarkerModel","createdBySelf","_mergeOption","env","hostSeries","__hostSeries","newOpt","markerOpt","markerModel","createMarkerModelFromSeries","getMarkerModelFromSeries","MarkPointModel","masterMarkerModel","hasXOrY","hasXAndY","markerTypeCalculatorWithExtent","otherDataDim","targetDataDim","otherCoordIndex","targetCoordIndex","coordArr","calcDataDim","getCalculationInfo","numCalculate","indicesOfNearest","coordArrValue","markerTypeCalculator","average","dataTransform","axisInfo","getAxisInfo","coordInfo","baseDataDim","valueDataDim","valueIndex","getDimension","dataDimToCoordDim","dataDim","dimItem","zoneFilter","item1","item2","containZone","createMarkerDimValueGetter","inCoordSys","sum_1","count_1","getMedian","MarkerView","markerGroupMap","renderSeries","markKeep","drawGroup","toggleBlurSeries","seriesModelList","isBlur","updateMarkerLayout","mpData","xPx","yPx","getMarkerPosition","MarkPointView","markPointModel","mpModel","seriesData","symbolDrawMap","createData","dataParams","coordDimsInfos","dataOpt","dimValueGetter","markPoint","MarkLineModel","markLineTransform","mlModel","itemArray","mlType","baseIndex","mlFrom","mlTo","normalizedItem","isInfinity","ifMarkLineHasOnlyDim","fromCoord","otherDimIndex","markLineFilter","updateSingleMarkerEndLayout","MarkLineView","markLineModel","mlData_1","fromData_1","toData_1","lineDrawMap","mlData","createList","fromData","toData","updateDataVisualAndLayout","fromSymbolKeepAspect","fromSymbolOffset","fromSymbolRotate","fromSymbolSize","toSymbolKeepAspect","toSymbolOffset","toSymbolRotate","toSymbolSize","optData","markLine","MarkAreaModel","markAreaTransform","maModel","item0","lt","rb","ltCoord","rbCoord","ifMarkAreaHasOnlyDim","markAreaFilter","getSingleMarkerEndPoint","pointValue0","pointValue1","clampPointValue0","clampData","clampPointValue1","pointValue","dimPermutations","MarkAreaView","markAreaModel","areaData_1","areaGroupMap","polygonGroup","areaData","xAxisScale","yAxisScale","xPointExtent","yPointExtent","overlapped","allClipped","coordDimsInfos_1","markArea","InsideZoomModel","DataZoomModel","disabled","zoomLock","setViewInfoToCoordSysRecord","dataZoomModel","getRange","coordSysRecordMap","coordSysRecord","dzInfo","dataZoomInfoMap","disposeCoordSysRecordIfNeeded","coordSysKeyArr","coordSysKey","dzUid","disposeCoordSysRecord","createCoordSysRecord","containsPoint","dzReferCoordSysInfo","dataZoomId","mergeControllerParams","typePriority","dataZoomInfo","oneType","installDataZoomRoamProcessor","FILTER","apiInner","dzReferCoordSysWrap","infoList","dzCoordSysInfo","coordSysUid","firstDzInfo","firstDzKey","controllerParams","InsideZoomView","noTarget","getPercentRange","pan","getRangeHandlers","scrollMove","DataZoomView","coordSysInfo","coordSysMainType","lastRange","directionInfo","getDirectionInfo","percentPoint","signal","pixelStart","pixelLength","minMaxSpan","findRepresentativeAxisProxy","getMinMaxSpan","minSpan","maxSpan","makeMover","getPercentDelta","percentDelta","grid","oldPoint","newPoint","singleAxis","installCommon","SliderZoomModel","dataBackground","selectedDataBackground","fillerColor","handleIcon","handleSize","handleStyle","moveHandleSize","moveHandleIcon","moveHandleStyle","showDetail","showDataShadow","brushSelect","DEFAULT_LOCATION_EDGE_GAP","DEFAULT_FRAME_BORDER_WIDTH","DEFAULT_FILLER_SIZE","DEFAULT_MOVE_HANDLE_SIZE","HORIZONTAL","VERTICAL","LABEL_GAP","SHOW_DATA_SHADOW_SERIES_TYPE","REALTIME_ANIMATION_CONFIG","SliderZoomView","_displayables","_onBrushEnd","_buildView","_updateView","_brushing","_resetLocation","_resetInterval","barGroup","sliderGroup","_renderBackground","_renderHandle","_renderDataShadow","_positionGroup","showMoveHandle","coordRect","_findCoordRect","positionInfo","_location","_size","location","targetAxisModel","getFirstTargetAxisModel","otherAxisInverse","_dataShadowInfo","_getViewExtent","clickPanel","_onClickPanel","_onBrushStart","_prepareDataShadowInfo","dataShadowSegs","oldSize","_shadowSize","candlestickDim","polygonPts","_shadowPolygonPts","polylinePts","_shadowPolylinePts","_shadowData","_shadowDim","otherDataExtent_1","otherOffset","lastIsEmpty_1","otherShadowExtent_1","thisShadowExtent","areaPoints_1","linePoints_1","step_1","thisCoord_1","stride_1","otherCoord","createDataShadowGroup","isSelectedArea","eachTargetAxis","getAxisProxy","getTargetSeriesModels","thisAxis","getOtherDim","thisDim","displayables","handles","handleLabels","filler","handleIndex","iconStr","getCursor","_onDragMove","_onDragEnd","onmouseover","_showDataInfo","onmouseout","bRect","_handleHeight","_handleWidth","handleColor","actualMoveZone","moveHandleHeight","moveHandle_1","moveHandle","moveZoneExpandSize","moveZone","enterEmphasis","leaveEmphasis","ondragstart","_range","viewExtent","_handleEnds","_updateInterval","handleEnds","viewExtend","percentExtent","nonRealtime","displaybles","handleInterval","handle","handleHeight","segIntervals","segGroup","_updateDataInfo","labelTexts","axisProxy","getAxisModel","dataInterval","calculateDataWindow","valueWindow","getDataValueWindow","_formatLabel","orderedHandleEnds","setLabel","barTransform","textPoint","labelPrecision","getPixelPrecision","valueStr","showOrHide","changed","_dispatchZoomAction","localPoint","_brushStart","_brushStartTime","brushShape","brushEndTime","_updateBrushRect","brushStart","endPoint","startPoint","coordSysInfoList","visualDefault","isArray","asc","linearMap","VisualMapModel","replacableOptionKeys","dataBound","controllerVisuals","resetItemSize","completeVisualOption","resetVisual","getItemSymbol","getTargetSeriesIndices","optionSeriesIndex","getSeriesByIndex","isTargetSeries","is","formatValueText","edgeSymbols","isMinMax","textValue","resetExtent","_dataExtent","getDataDimensionIndex","optDim","dimNames","isCalculationCoord","storeDimIndex","completeSingle","completeInactive","stateExist","stateAbsent","optExist","optAbsent","defa","completeController","symbolExists","symbolSizeExists","inactiveColor","itemSymbol","max_1","setSelected","getSelected","getVisualMeta","getColorVisual","contentColor","textGap","DEFAULT_BAR_BOUND","ContinuousModel","_resetRange","auto","findTargetDataIndices","oVals","getColorStopValues","iVals","stops","setStop","iIdx","oIdx","iLen","oLen","stopsLen","outerColors","calculable","hoverLink","indicatorIcon","indicatorSize","indicatorStyle","stopValues","VisualMapView","autoPositionValues","doRender","getControllerVisual","targetValue","visualCluster","forceState","visualObj","defaultColor","visualMapping","convertOpacityToAlpha","positionGroup","paramsSet","getItemAlign","modelOption","itemAlign","realIndex","reals","fakeValue","layoutInput","rParam","makeHighDownBatch","batchItem","highlightKey","HOVER_LINK_SIZE","HOVER_LINK_OUT","ContinuousView","_shapes","_dataInterval","_hoverLinkDataIndices","_useHandle","_renderBar","dataRangeText","_renderEndsText","_enableHoverLinkToSeries","_enableHoverLinkFromSeries","endsIndex","_applyTransform","shapes","useHandle","_createBarGroup","gradientBarGroup","createPolygon","_dragHandle","textSize","handleThumbs","handleLabelPoints","_createHandle","_createIndicator","onDrift","onDragEnd","handleThumb","onmousemove","handleLabel","stateTransition","handleLabelPoint","indicatorLabel","indicatorLabelPoint","_firstShowIndicator","_hideIndicator","visualMapId","_hovering","_clearHoverLinkToSeries","useHoverLinkOnHandle","_doHoverLinkToSeries","forSketch","outOfRangeHandleEnds","inRangeHandleEnds","visualInRange","_createBarVisual","visualOutOfRange","barColor","barPoints","_updateHandle","_makeColorGradient","symbolSizes","_createBarPoints","handlesColor","sampleNumber","currValue","_showIndicator","cursorValue","rangeSymbol","halfHoverLinkSize","oldIndicatorPos","indicatorNewProps","labelNewProps","additive","enterBlur","_hoverLinkFromSeriesMouseOver","_clearHoverLinkFromSeries","cursorPos","hoverOnBar","getHalfHoverLinkSize","hoverRange","valueRange","oldBatch","newBatch","resultBatches","_dispatchHighDown","currECData","leaveBlur","hoverLinkDataSize","hoverLinkOnHandle","visualMapActionInfo","visualMapActionHander","visualMapEncodingHandlers","createOnAllSeries","resetDefines","visualMetaList","resultVisual","visualMapPreprocessor","pieces","splitList","installed","COMPONENT","PiecewiseModel","_pieceList","mode","_mode","_determineMode","resetMethods","_resetSelected","visualTypesInPieces","exists","getSelectedMapKey","hasSel_1","pIdx","getRepresentValue","representValue","pieceInterval","curr","minOpen","maxOpen","outPieceList","splitStep","normalizeReverse","pieceListItem","closeList","infinityList","useMinMax","lg","PiecewiseVisualMapView","_getItemAlign","viewData","_getViewData","endsText","viewPieceList","_onItemClick","_enableHoverLink","indexInModelPieceList","_createItemSymbol","visualState","onHoverLink","shapeParam","newKey","o","PiecewiseView","DEFAULT_OPTION","enabled","ariaVisual","ariaModel","setDecal","decalModel","useDecal","paletteScopeGroupByType_1","isColorBySeries","decalScope","eachRawSeries","paletteDecal","getSeriesCount","specifiedDecal","mergeDecal","dataAll_1","idxMap_1","decalScope_1","dataCount_1","resultDecal","labelLocale","dom","ariaLabel","seriesCnt","maxDataCnt","maxSeriesCnt","displaySeriesCnt","getTitle","withTitle","seriesLabels_1","seriesLabel","withName","getSeriesTypeName","partialLabel","displayCnt","middleSeparator_1","endSeparator_1","dataLabels","dataLabel","separatorModel","middleSeparator","endSeparator","keyValues","ariaPreprocessor","aria","ARIA","RELATIONAL_EXPRESSION_OP_ALIAS_MAP","RegExpEvaluator","rVal","condValue","_condVal","evaluate","lVal","ConstConditionInternal","AndConditionInternal","OrConditionInternal","NotConditionInternal","RelationalConditionInternal","needParse","valueParser","tarValRaw","valueGetterParam","tarValParsed","subCondList","parseOption","exprOption","getters","cond","isObjectNotArray","and","parseAndOrOption","or","not","parseNotOption","parseRelationalOption","op","subOptionArr","subOption","prepareGetValue","exprKeys","parserName","keyRaw","valueGetterAttrMap","condValueRaw","condValueParsed","evaluator","ConditionalExpressionParsed","_cond","parseConditionalExpression","filterTransform","rawItem","condition","dimLoose","param","retrieveValueFromItem","resultData","sortTransform","orderExprList","orderDefList","orderExpr","incomparable","errMsg_1","errMsg_2","comparator","orderDef","val0","val1","DatasetModel","_sourceManager","getSourceManager","seriesLayoutBy","DatasetView","default","chart","mounted","watch","xAxisData","echarts","immediate","deep","methods","initChartOption","setOption","$router","_m","headImg","teacherName","schoolName","teach","total","favorite","downCount","what2Do","Object","teacherId","footPointList","components","BreadCrumb","Clock","HomeRightSide","HomeIntro","HomeChart","CourseItem","hallTop2","resetWidth","window","onresize","requestInfo","myIndexData","Type","TeachTime","DownCount","_e","showDown","Boolean","$emit"],"mappings":"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","file":"js/chunk-0f496478.4f5c9e63.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"clock\"},[_c('span',[_vm._v(_vm._s(_vm.time))])])}\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!./Clock.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!./Clock.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Clock.vue?vue&type=template&id=9a477606&\"\nimport script from \"./Clock.vue?vue&type=script&lang=js&\"\nexport * from \"./Clock.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Clock.vue?vue&type=style&index=0&lang=less&\"\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 null,\n null\n \n)\n\nexport default component.exports","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!./CourseItem.vue?vue&type=style&index=0&lang=less&\"","module.exports = __webpack_public_path__ + \"img/smalllogo.421995b4.png\";","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!./Home.vue?vue&type=style&index=0&lang=less&\"","// a string of all valid unicode whitespaces\n// eslint-disable-next-line max-len\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var requireObjectCoercible = require('../internals/require-object-coercible');\nvar whitespaces = require('../internals/whitespaces');\n\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = String(requireObjectCoercible($this));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.github.io/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","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!./BreadCrumb.vue?vue&type=style&index=0&lang=less&\"","module.exports = __webpack_public_path__ + \"img/expo1.5dc6868b.png\";","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","module.exports = \"data:image/png;base64,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\"","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!./HomeRightSide.vue?vue&type=style&index=0&lang=less&\"","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!./HomeChart.vue?vue&type=style&index=0&lang=less&\"","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!./HomeIntro.vue?vue&type=style&index=0&lang=less&\"","'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 // ESNext\n 'fromString,range'\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","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"home\",staticClass:\"home\"},[_c('div',{staticClass:\"home-left\",style:({ width: _vm.homeLeftWidth })},[_c('bread-crumb',{attrs:{\"title\":\"首页\"}}),_c('div',{staticClass:\"clock-warp\"},[_c('clock')],1),_c('home-intro'),_c('home-chart',{attrs:{\"list\":_vm.infoData.statistics}}),_c('br'),_c('h3',{staticStyle:{\"margin\":\"0\"}},[_vm._v(\"最近使用\")]),_c('ul',{staticClass:\"courses\"},_vm._l((_vm.infoData.hallTop2),function(item,index){return _c('course-item',{key:index,staticClass:\"course-item\",attrs:{\"index\":index,\"item\":item},on:{\"navigateToDetail\":function($event){return _vm.navigateToDetail(item)}}})}),1)],1),_c('div',{staticClass:\"home-right\"},[_c('div',{staticClass:\"right-radius\"}),_c('div',{staticClass:\"right-info\"},[_c('home-right-side',{attrs:{\"model\":_vm.infoData}})],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:\"bread-crunmb\"},[_c('span',{staticClass:\"big-title\"},[_vm._v(_vm._s(_vm.title))])])}\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!./BreadCrumb.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!./BreadCrumb.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BreadCrumb.vue?vue&type=template&id=749aaccc&\"\nimport script from \"./BreadCrumb.vue?vue&type=script&lang=js&\"\nexport * from \"./BreadCrumb.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BreadCrumb.vue?vue&type=style&index=0&lang=less&\"\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 null,\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:\"home-chart\"},[_c('p',{staticClass:\"home-chart-title\"},[_vm._v(\"一周使用统计 \"),_c('a',{staticClass:\"total-bt\",on:{\"click\":_vm.linkToCharts}},[_vm._v(\"查看其他统计\")])]),_c('div',{ref:\"homeChart\",attrs:{\"id\":\"home-chart-content\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { Point, Path, Polyline } from '../util/graphic.js';\nimport PathProxy from 'zrender/lib/core/PathProxy.js';\nimport { normalizeRadian } from 'zrender/lib/contain/util.js';\nimport { cubicProjectPoint, quadraticProjectPoint } from 'zrender/lib/core/curve.js';\nimport { defaults, retrieve2 } from 'zrender/lib/core/util.js';\nimport { invert } from 'zrender/lib/core/matrix.js';\nimport * as vector from 'zrender/lib/core/vector.js';\nimport { DISPLAY_STATES, SPECIAL_STATES } from '../util/states.js';\nvar PI2 = Math.PI * 2;\nvar CMD = PathProxy.CMD;\nvar DEFAULT_SEARCH_SPACE = ['top', 'right', 'bottom', 'left'];\n\nfunction getCandidateAnchor(pos, distance, rect, outPt, outDir) {\n var width = rect.width;\n var height = rect.height;\n\n switch (pos) {\n case 'top':\n outPt.set(rect.x + width / 2, rect.y - distance);\n outDir.set(0, -1);\n break;\n\n case 'bottom':\n outPt.set(rect.x + width / 2, rect.y + height + distance);\n outDir.set(0, 1);\n break;\n\n case 'left':\n outPt.set(rect.x - distance, rect.y + height / 2);\n outDir.set(-1, 0);\n break;\n\n case 'right':\n outPt.set(rect.x + width + distance, rect.y + height / 2);\n outDir.set(1, 0);\n break;\n }\n}\n\nfunction projectPointToArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y, out) {\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n x /= d;\n y /= d; // Intersect point.\n\n var ox = x * r + cx;\n var oy = y * r + cy;\n\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n out[0] = ox;\n out[1] = oy;\n return d - r;\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 if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {\n // Project point is on the arc.\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n\n var x1 = r * Math.cos(startAngle) + cx;\n var y1 = r * Math.sin(startAngle) + cy;\n var x2 = r * Math.cos(endAngle) + cx;\n var y2 = r * Math.sin(endAngle) + cy;\n var d1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y);\n var d2 = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y);\n\n if (d1 < d2) {\n out[0] = x1;\n out[1] = y1;\n return Math.sqrt(d1);\n } else {\n out[0] = x2;\n out[1] = y2;\n return Math.sqrt(d2);\n }\n}\n\nfunction projectPointToLine(x1, y1, x2, y2, x, y, out, limitToEnds) {\n var dx = x - x1;\n var dy = y - y1;\n var dx1 = x2 - x1;\n var dy1 = y2 - y1;\n var lineLen = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n dx1 /= lineLen;\n dy1 /= lineLen; // dot product\n\n var projectedLen = dx * dx1 + dy * dy1;\n var t = projectedLen / lineLen;\n\n if (limitToEnds) {\n t = Math.min(Math.max(t, 0), 1);\n }\n\n t *= lineLen;\n var ox = out[0] = x1 + t * dx1;\n var oy = out[1] = y1 + t * dy1;\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\n\nfunction projectPointToRect(x1, y1, width, height, x, y, out) {\n if (width < 0) {\n x1 = x1 + width;\n width = -width;\n }\n\n if (height < 0) {\n y1 = y1 + height;\n height = -height;\n }\n\n var x2 = x1 + width;\n var y2 = y1 + height;\n var ox = out[0] = Math.min(Math.max(x, x1), x2);\n var oy = out[1] = Math.min(Math.max(y, y1), y2);\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\n\nvar tmpPt = [];\n\nfunction nearestPointOnRect(pt, rect, out) {\n var dist = projectPointToRect(rect.x, rect.y, rect.width, rect.height, pt.x, pt.y, tmpPt);\n out.set(tmpPt[0], tmpPt[1]);\n return dist;\n}\n/**\n * Calculate min distance corresponding point.\n * This method won't evaluate if point is in the path.\n */\n\n\nfunction nearestPointOnPath(pt, path, out) {\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n var x1;\n var y1;\n var minDist = Infinity;\n var data = path.data;\n var x = pt.x;\n var y = pt.y;\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++];\n\n if (i === 1) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n var d = minDist;\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 d = projectPointToLine(xi, yi, data[i], data[i + 1], x, y, tmpPt, true);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n d = cubicProjectPoint(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n d = quadraticProjectPoint(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\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 x1 = Math.cos(theta) * rx + cx;\n y1 = Math.sin(theta) * ry + cy; // 不是直接使用 arc 命令\n\n if (i <= 1) {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n } // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n\n\n var _x = (x - cx) * ry / rx + cx;\n\n d = projectPointToArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y, tmpPt);\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 d = projectPointToRect(x0, y0, width, height, x, y, tmpPt);\n break;\n\n case CMD.Z:\n d = projectPointToLine(xi, yi, x0, y0, x, y, tmpPt, true);\n xi = x0;\n yi = y0;\n break;\n }\n\n if (d < minDist) {\n minDist = d;\n out.set(tmpPt[0], tmpPt[1]);\n }\n }\n\n return minDist;\n} // Temporal variable for intermediate usage.\n\n\nvar pt0 = new Point();\nvar pt1 = new Point();\nvar pt2 = new Point();\nvar dir = new Point();\nvar dir2 = new Point();\n/**\n * Calculate a proper guide line based on the label position and graphic element definition\n * @param label\n * @param labelRect\n * @param target\n * @param targetRect\n */\n\nexport function updateLabelLinePoints(target, labelLineModel) {\n if (!target) {\n return;\n }\n\n var labelLine = target.getTextGuideLine();\n var label = target.getTextContent(); // Needs to create text guide in each charts.\n\n if (!(label && labelLine)) {\n return;\n }\n\n var labelGuideConfig = target.textGuideLineConfig || {};\n var points = [[0, 0], [0, 0], [0, 0]];\n var searchSpace = labelGuideConfig.candidates || DEFAULT_SEARCH_SPACE;\n var labelRect = label.getBoundingRect().clone();\n labelRect.applyTransform(label.getComputedTransform());\n var minDist = Infinity;\n var anchorPoint = labelGuideConfig.anchor;\n var targetTransform = target.getComputedTransform();\n var targetInversedTransform = targetTransform && invert([], targetTransform);\n var len = labelLineModel.get('length2') || 0;\n\n if (anchorPoint) {\n pt2.copy(anchorPoint);\n }\n\n for (var i = 0; i < searchSpace.length; i++) {\n var candidate = searchSpace[i];\n getCandidateAnchor(candidate, 0, labelRect, pt0, dir);\n Point.scaleAndAdd(pt1, pt0, dir, len); // Transform to target coord space.\n\n pt1.transform(targetInversedTransform); // Note: getBoundingRect will ensure the `path` being created.\n\n var boundingRect = target.getBoundingRect();\n var dist = anchorPoint ? anchorPoint.distance(pt1) : target instanceof Path ? nearestPointOnPath(pt1, target.path, pt2) : nearestPointOnRect(pt1, boundingRect, pt2); // TODO pt2 is in the path\n\n if (dist < minDist) {\n minDist = dist; // Transform back to global space.\n\n pt1.transform(targetTransform);\n pt2.transform(targetTransform);\n pt2.toArray(points[0]);\n pt1.toArray(points[1]);\n pt0.toArray(points[2]);\n }\n }\n\n limitTurnAngle(points, labelLineModel.get('minTurnAngle'));\n labelLine.setShape({\n points: points\n });\n} // Temporal variable for the limitTurnAngle function\n\nvar tmpArr = [];\nvar tmpProjPoint = new Point();\n/**\n * Reduce the line segment attached to the label to limit the turn angle between two segments.\n * @param linePoints\n * @param minTurnAngle Radian of minimum turn angle. 0 - 180\n */\n\nexport function limitTurnAngle(linePoints, minTurnAngle) {\n if (!(minTurnAngle <= 180 && minTurnAngle > 0)) {\n return;\n }\n\n minTurnAngle = minTurnAngle / 180 * Math.PI; // The line points can be\n // /pt1----pt2 (label)\n // /\n // pt0/\n\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt0, pt1);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(dir2);\n var minTurnAngleCos = Math.cos(minTurnAngle);\n\n if (minTurnAngleCos < angleCos) {\n // Smaller than minTurnAngle\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr); // Calculate new projected length with limited minTurnAngle and get the new connect point\n\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle)); // Limit the new calculated connect point between pt1 and pt2.\n\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n\n if (isNaN(t)) {\n return;\n }\n\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n/**\n * Limit the angle of line and the surface\n * @param maxSurfaceAngle Radian of minimum turn angle. 0 - 180. 0 is same direction to normal. 180 is opposite\n */\n\nexport function limitSurfaceAngle(linePoints, surfaceNormal, maxSurfaceAngle) {\n if (!(maxSurfaceAngle <= 180 && maxSurfaceAngle > 0)) {\n return;\n }\n\n maxSurfaceAngle = maxSurfaceAngle / 180 * Math.PI;\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt1, pt0);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(surfaceNormal);\n var maxSurfaceAngleCos = Math.cos(maxSurfaceAngle);\n\n if (angleCos < maxSurfaceAngleCos) {\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr);\n var HALF_PI = Math.PI / 2;\n var angle2 = Math.acos(dir2.dot(surfaceNormal));\n var newAngle = HALF_PI + angle2 - maxSurfaceAngle;\n\n if (newAngle >= HALF_PI) {\n // parallel\n Point.copy(tmpProjPoint, pt2);\n } else {\n // Calculate new projected length with limited minTurnAngle and get the new connect point\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI / 2 - newAngle)); // Limit the new calculated connect point between pt1 and pt2.\n\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n\n if (isNaN(t)) {\n return;\n }\n\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n }\n\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n\nfunction setLabelLineState(labelLine, ignore, stateName, stateModel) {\n var isNormal = stateName === 'normal';\n var stateObj = isNormal ? labelLine : labelLine.ensureState(stateName); // Make sure display.\n\n stateObj.ignore = ignore; // Set smooth\n\n var smooth = stateModel.get('smooth');\n\n if (smooth && smooth === true) {\n smooth = 0.3;\n }\n\n stateObj.shape = stateObj.shape || {};\n\n if (smooth > 0) {\n stateObj.shape.smooth = smooth;\n }\n\n var styleObj = stateModel.getModel('lineStyle').getLineStyle();\n isNormal ? labelLine.useStyle(styleObj) : stateObj.style = styleObj;\n}\n\nfunction buildLabelLinePath(path, shape) {\n var smooth = shape.smooth;\n var points = shape.points;\n\n if (!points) {\n return;\n }\n\n path.moveTo(points[0][0], points[0][1]);\n\n if (smooth > 0 && points.length >= 3) {\n var len1 = vector.dist(points[0], points[1]);\n var len2 = vector.dist(points[1], points[2]);\n\n if (!len1 || !len2) {\n path.lineTo(points[1][0], points[1][1]);\n path.lineTo(points[2][0], points[2][1]);\n return;\n }\n\n var moveLen = Math.min(len1, len2) * smooth;\n var midPoint0 = vector.lerp([], points[1], points[0], moveLen / len1);\n var midPoint2 = vector.lerp([], points[1], points[2], moveLen / len2);\n var midPoint1 = vector.lerp([], midPoint0, midPoint2, 0.5);\n path.bezierCurveTo(midPoint0[0], midPoint0[1], midPoint0[0], midPoint0[1], midPoint1[0], midPoint1[1]);\n path.bezierCurveTo(midPoint2[0], midPoint2[1], midPoint2[0], midPoint2[1], points[2][0], points[2][1]);\n } else {\n for (var i = 1; i < points.length; i++) {\n path.lineTo(points[i][0], points[i][1]);\n }\n }\n}\n/**\n * Create a label line if necessary and set it's style.\n */\n\n\nexport function setLabelLineStyle(targetEl, statesModels, defaultStyle) {\n var labelLine = targetEl.getTextGuideLine();\n var label = targetEl.getTextContent();\n\n if (!label) {\n // Not show label line if there is no label.\n if (labelLine) {\n targetEl.removeTextGuideLine();\n }\n\n return;\n }\n\n var normalModel = statesModels.normal;\n var showNormal = normalModel.get('show');\n var labelIgnoreNormal = label.ignore;\n\n for (var i = 0; i < DISPLAY_STATES.length; i++) {\n var stateName = DISPLAY_STATES[i];\n var stateModel = statesModels[stateName];\n var isNormal = stateName === 'normal';\n\n if (stateModel) {\n var stateShow = stateModel.get('show');\n var isLabelIgnored = isNormal ? labelIgnoreNormal : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal);\n\n if (isLabelIgnored // Not show when label is not shown in this state.\n || !retrieve2(stateShow, showNormal) // Use normal state by default if not set.\n ) {\n var stateObj = isNormal ? labelLine : labelLine && labelLine.states[stateName];\n\n if (stateObj) {\n stateObj.ignore = true;\n }\n\n continue;\n } // Create labelLine if not exists\n\n\n if (!labelLine) {\n labelLine = new Polyline();\n targetEl.setTextGuideLine(labelLine); // Reset state of normal because it's new created.\n // NOTE: NORMAL should always been the first!\n\n if (!isNormal && (labelIgnoreNormal || !showNormal)) {\n setLabelLineState(labelLine, true, 'normal', statesModels.normal);\n } // Use same state proxy.\n\n\n if (targetEl.stateProxy) {\n labelLine.stateProxy = targetEl.stateProxy;\n }\n }\n\n setLabelLineState(labelLine, false, stateName, stateModel);\n }\n }\n\n if (labelLine) {\n defaults(labelLine.style, defaultStyle); // Not fill.\n\n labelLine.style.fill = null;\n var showAbove = normalModel.get('showAbove');\n var labelLineConfig = targetEl.textGuideLineConfig = targetEl.textGuideLineConfig || {};\n labelLineConfig.showAbove = showAbove || false; // Custom the buildPath.\n\n labelLine.buildPath = buildLabelLinePath;\n }\n}\nexport function getLabelLineStatesModels(itemModel, labelLineName) {\n labelLineName = labelLineName || 'labelLine';\n var statesModels = {\n normal: itemModel.getModel(labelLineName)\n };\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n statesModels[stateName] = itemModel.getModel([stateName, labelLineName]);\n }\n\n return statesModels;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO: move labels out of viewport.\nimport { BoundingRect, updateProps, initProps, isElementRemoved } from '../util/graphic.js';\nimport { getECData } from '../util/innerStore.js';\nimport { parsePercent } from '../util/number.js';\nimport Transformable from 'zrender/lib/core/Transformable.js';\nimport { updateLabelLinePoints, setLabelLineStyle, getLabelLineStatesModels } from './labelGuideHelper.js';\nimport { makeInner } from '../util/model.js';\nimport { retrieve2, each, keys, isFunction, filter, indexOf } from 'zrender/lib/core/util.js';\nimport { prepareLayoutList, hideOverlap, shiftLayoutOnX, shiftLayoutOnY } from './labelLayoutHelper.js';\nimport { labelInner, animateLabelValue } from './labelStyle.js';\n\nfunction cloneArr(points) {\n if (points) {\n var newPoints = [];\n\n for (var i = 0; i < points.length; i++) {\n newPoints.push(points[i].slice());\n }\n\n return newPoints;\n }\n}\n\nfunction prepareLayoutCallbackParams(labelItem, hostEl) {\n var label = labelItem.label;\n var labelLine = hostEl && hostEl.getTextGuideLine();\n return {\n dataIndex: labelItem.dataIndex,\n dataType: labelItem.dataType,\n seriesIndex: labelItem.seriesModel.seriesIndex,\n text: labelItem.label.style.text,\n rect: labelItem.hostRect,\n labelRect: labelItem.rect,\n // x: labelAttr.x,\n // y: labelAttr.y,\n align: label.style.align,\n verticalAlign: label.style.verticalAlign,\n labelLinePoints: cloneArr(labelLine && labelLine.shape.points)\n };\n}\n\nvar LABEL_OPTION_TO_STYLE_KEYS = ['align', 'verticalAlign', 'width', 'height', 'fontSize'];\nvar dummyTransformable = new Transformable();\nvar labelLayoutInnerStore = makeInner();\nvar labelLineAnimationStore = makeInner();\n\nfunction extendWithKeys(target, source, keys) {\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (source[key] != null) {\n target[key] = source[key];\n }\n }\n}\n\nvar LABEL_LAYOUT_PROPS = ['x', 'y', 'rotation'];\n\nvar LabelManager =\n/** @class */\nfunction () {\n function LabelManager() {\n this._labelList = [];\n this._chartViewList = [];\n }\n\n LabelManager.prototype.clearLabels = function () {\n this._labelList = [];\n this._chartViewList = [];\n };\n /**\n * Add label to manager\n */\n\n\n LabelManager.prototype._addLabel = function (dataIndex, dataType, seriesModel, label, layoutOption) {\n var labelStyle = label.style;\n var hostEl = label.__hostTarget;\n var textConfig = hostEl.textConfig || {}; // TODO: If label is in other state.\n\n var labelTransform = label.getComputedTransform();\n var labelRect = label.getBoundingRect().plain();\n BoundingRect.applyTransform(labelRect, labelRect, labelTransform);\n\n if (labelTransform) {\n dummyTransformable.setLocalTransform(labelTransform);\n } else {\n // Identity transform.\n dummyTransformable.x = dummyTransformable.y = dummyTransformable.rotation = dummyTransformable.originX = dummyTransformable.originY = 0;\n dummyTransformable.scaleX = dummyTransformable.scaleY = 1;\n }\n\n var host = label.__hostTarget;\n var hostRect;\n\n if (host) {\n hostRect = host.getBoundingRect().plain();\n var transform = host.getComputedTransform();\n BoundingRect.applyTransform(hostRect, hostRect, transform);\n }\n\n var labelGuide = hostRect && host.getTextGuideLine();\n\n this._labelList.push({\n label: label,\n labelLine: labelGuide,\n seriesModel: seriesModel,\n dataIndex: dataIndex,\n dataType: dataType,\n layoutOption: layoutOption,\n computedLayoutOption: null,\n rect: labelRect,\n hostRect: hostRect,\n // Label with lower priority will be hidden when overlapped\n // Use rect size as default priority\n priority: hostRect ? hostRect.width * hostRect.height : 0,\n // Save default label attributes.\n // For restore if developers want get back to default value in callback.\n defaultAttr: {\n ignore: label.ignore,\n labelGuideIgnore: labelGuide && labelGuide.ignore,\n x: dummyTransformable.x,\n y: dummyTransformable.y,\n scaleX: dummyTransformable.scaleX,\n scaleY: dummyTransformable.scaleY,\n rotation: dummyTransformable.rotation,\n style: {\n x: labelStyle.x,\n y: labelStyle.y,\n align: labelStyle.align,\n verticalAlign: labelStyle.verticalAlign,\n width: labelStyle.width,\n height: labelStyle.height,\n fontSize: labelStyle.fontSize\n },\n cursor: label.cursor,\n attachedPos: textConfig.position,\n attachedRot: textConfig.rotation\n }\n });\n };\n\n LabelManager.prototype.addLabelsOfSeries = function (chartView) {\n var _this = this;\n\n this._chartViewList.push(chartView);\n\n var seriesModel = chartView.__model;\n var layoutOption = seriesModel.get('labelLayout');\n /**\n * Ignore layouting if it's not specified anything.\n */\n\n if (!(isFunction(layoutOption) || keys(layoutOption).length)) {\n return;\n }\n\n chartView.group.traverse(function (child) {\n if (child.ignore) {\n return true; // Stop traverse descendants.\n } // Only support label being hosted on graphic elements.\n\n\n var textEl = child.getTextContent();\n var ecData = getECData(child); // Can only attach the text on the element with dataIndex\n\n if (textEl && !textEl.disableLabelLayout) {\n _this._addLabel(ecData.dataIndex, ecData.dataType, seriesModel, textEl, layoutOption);\n }\n });\n };\n\n LabelManager.prototype.updateLayoutConfig = function (api) {\n var width = api.getWidth();\n var height = api.getHeight();\n\n function createDragHandler(el, labelLineModel) {\n return function () {\n updateLabelLinePoints(el, labelLineModel);\n };\n }\n\n for (var i = 0; i < this._labelList.length; i++) {\n var labelItem = this._labelList[i];\n var label = labelItem.label;\n var hostEl = label.__hostTarget;\n var defaultLabelAttr = labelItem.defaultAttr;\n var layoutOption = void 0; // TODO A global layout option?\n\n if (isFunction(labelItem.layoutOption)) {\n layoutOption = labelItem.layoutOption(prepareLayoutCallbackParams(labelItem, hostEl));\n } else {\n layoutOption = labelItem.layoutOption;\n }\n\n layoutOption = layoutOption || {};\n labelItem.computedLayoutOption = layoutOption;\n var degreeToRadian = Math.PI / 180; // TODO hostEl should always exists.\n // Or label should not have parent because the x, y is all in global space.\n\n if (hostEl) {\n hostEl.setTextConfig({\n // Force to set local false.\n local: false,\n // Ignore position and rotation config on the host el if x or y is changed.\n position: layoutOption.x != null || layoutOption.y != null ? null : defaultLabelAttr.attachedPos,\n // Ignore rotation config on the host el if rotation is changed.\n rotation: layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.attachedRot,\n offset: [layoutOption.dx || 0, layoutOption.dy || 0]\n });\n }\n\n var needsUpdateLabelLine = false;\n\n if (layoutOption.x != null) {\n // TODO width of chart view.\n label.x = parsePercent(layoutOption.x, width);\n label.setStyle('x', 0); // Ignore movement in style. TODO: origin.\n\n needsUpdateLabelLine = true;\n } else {\n label.x = defaultLabelAttr.x;\n label.setStyle('x', defaultLabelAttr.style.x);\n }\n\n if (layoutOption.y != null) {\n // TODO height of chart view.\n label.y = parsePercent(layoutOption.y, height);\n label.setStyle('y', 0); // Ignore movement in style.\n\n needsUpdateLabelLine = true;\n } else {\n label.y = defaultLabelAttr.y;\n label.setStyle('y', defaultLabelAttr.style.y);\n }\n\n if (layoutOption.labelLinePoints) {\n var guideLine = hostEl.getTextGuideLine();\n\n if (guideLine) {\n guideLine.setShape({\n points: layoutOption.labelLinePoints\n }); // Not update\n\n needsUpdateLabelLine = false;\n }\n }\n\n var labelLayoutStore = labelLayoutInnerStore(label);\n labelLayoutStore.needsUpdateLabelLine = needsUpdateLabelLine;\n label.rotation = layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.rotation;\n label.scaleX = defaultLabelAttr.scaleX;\n label.scaleY = defaultLabelAttr.scaleY;\n\n for (var k = 0; k < LABEL_OPTION_TO_STYLE_KEYS.length; k++) {\n var key = LABEL_OPTION_TO_STYLE_KEYS[k];\n label.setStyle(key, layoutOption[key] != null ? layoutOption[key] : defaultLabelAttr.style[key]);\n }\n\n if (layoutOption.draggable) {\n label.draggable = true;\n label.cursor = 'move';\n\n if (hostEl) {\n var hostModel = labelItem.seriesModel;\n\n if (labelItem.dataIndex != null) {\n var data = labelItem.seriesModel.getData(labelItem.dataType);\n hostModel = data.getItemModel(labelItem.dataIndex);\n }\n\n label.on('drag', createDragHandler(hostEl, hostModel.getModel('labelLine')));\n }\n } else {\n // TODO Other drag functions?\n label.off('drag');\n label.cursor = defaultLabelAttr.cursor;\n }\n }\n };\n\n LabelManager.prototype.layout = function (api) {\n var width = api.getWidth();\n var height = api.getHeight();\n var labelList = prepareLayoutList(this._labelList);\n var labelsNeedsAdjustOnX = filter(labelList, function (item) {\n return item.layoutOption.moveOverlap === 'shiftX';\n });\n var labelsNeedsAdjustOnY = filter(labelList, function (item) {\n return item.layoutOption.moveOverlap === 'shiftY';\n });\n shiftLayoutOnX(labelsNeedsAdjustOnX, 0, width);\n shiftLayoutOnY(labelsNeedsAdjustOnY, 0, height);\n var labelsNeedsHideOverlap = filter(labelList, function (item) {\n return item.layoutOption.hideOverlap;\n });\n hideOverlap(labelsNeedsHideOverlap);\n };\n /**\n * Process all labels. Not only labels with layoutOption.\n */\n\n\n LabelManager.prototype.processLabelsOverall = function () {\n var _this = this;\n\n each(this._chartViewList, function (chartView) {\n var seriesModel = chartView.__model;\n var ignoreLabelLineUpdate = chartView.ignoreLabelLineUpdate;\n var animationEnabled = seriesModel.isAnimationEnabled();\n chartView.group.traverse(function (child) {\n if (child.ignore && !child.forceLabelAnimation) {\n return true; // Stop traverse descendants.\n }\n\n var needsUpdateLabelLine = !ignoreLabelLineUpdate;\n var label = child.getTextContent();\n\n if (!needsUpdateLabelLine && label) {\n needsUpdateLabelLine = labelLayoutInnerStore(label).needsUpdateLabelLine;\n }\n\n if (needsUpdateLabelLine) {\n _this._updateLabelLine(child, seriesModel);\n }\n\n if (animationEnabled) {\n _this._animateLabels(child, seriesModel);\n }\n });\n });\n };\n\n LabelManager.prototype._updateLabelLine = function (el, seriesModel) {\n // Only support label being hosted on graphic elements.\n var textEl = el.getTextContent(); // Update label line style.\n\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex; // Only support labelLine on the labels represent data.\n\n if (textEl && dataIndex != null) {\n var data = seriesModel.getData(ecData.dataType);\n var itemModel = data.getItemModel(dataIndex);\n var defaultStyle = {};\n var visualStyle = data.getItemVisual(dataIndex, 'style');\n var visualType = data.getVisual('drawType'); // Default to be same with main color\n\n defaultStyle.stroke = visualStyle[visualType];\n var labelLineModel = itemModel.getModel('labelLine');\n setLabelLineStyle(el, getLabelLineStatesModels(itemModel), defaultStyle);\n updateLabelLinePoints(el, labelLineModel);\n }\n };\n\n LabelManager.prototype._animateLabels = function (el, seriesModel) {\n var textEl = el.getTextContent();\n var guideLine = el.getTextGuideLine(); // Animate\n\n if (textEl // `forceLabelAnimation` has the highest priority\n && (el.forceLabelAnimation || !textEl.ignore && !textEl.invisible && !el.disableLabelAnimation && !isElementRemoved(el))) {\n var layoutStore = labelLayoutInnerStore(textEl);\n var oldLayout = layoutStore.oldLayout;\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex;\n var newProps = {\n x: textEl.x,\n y: textEl.y,\n rotation: textEl.rotation\n };\n var data = seriesModel.getData(ecData.dataType);\n\n if (!oldLayout) {\n textEl.attr(newProps); // Disable fade in animation if value animation is enabled.\n\n if (!labelInner(textEl).valueAnimation) {\n var oldOpacity = retrieve2(textEl.style.opacity, 1); // Fade in animation\n\n textEl.style.opacity = 0;\n initProps(textEl, {\n style: {\n opacity: oldOpacity\n }\n }, seriesModel, dataIndex);\n }\n } else {\n textEl.attr(oldLayout); // Make sure the animation from is in the right status.\n\n var prevStates = el.prevStates;\n\n if (prevStates) {\n if (indexOf(prevStates, 'select') >= 0) {\n textEl.attr(layoutStore.oldLayoutSelect);\n }\n\n if (indexOf(prevStates, 'emphasis') >= 0) {\n textEl.attr(layoutStore.oldLayoutEmphasis);\n }\n }\n\n updateProps(textEl, newProps, seriesModel, dataIndex);\n }\n\n layoutStore.oldLayout = newProps;\n\n if (textEl.states.select) {\n var layoutSelect = layoutStore.oldLayoutSelect = {};\n extendWithKeys(layoutSelect, newProps, LABEL_LAYOUT_PROPS);\n extendWithKeys(layoutSelect, textEl.states.select, LABEL_LAYOUT_PROPS);\n }\n\n if (textEl.states.emphasis) {\n var layoutEmphasis = layoutStore.oldLayoutEmphasis = {};\n extendWithKeys(layoutEmphasis, newProps, LABEL_LAYOUT_PROPS);\n extendWithKeys(layoutEmphasis, textEl.states.emphasis, LABEL_LAYOUT_PROPS);\n }\n\n animateLabelValue(textEl, dataIndex, data, seriesModel, seriesModel);\n }\n\n if (guideLine && !guideLine.ignore && !guideLine.invisible) {\n var layoutStore = labelLineAnimationStore(guideLine);\n var oldLayout = layoutStore.oldLayout;\n var newLayout = {\n points: guideLine.shape.points\n };\n\n if (!oldLayout) {\n guideLine.setShape(newLayout);\n guideLine.style.strokePercent = 0;\n initProps(guideLine, {\n style: {\n strokePercent: 1\n }\n }, seriesModel);\n } else {\n guideLine.attr({\n shape: oldLayout\n });\n updateProps(guideLine, {\n shape: newLayout\n }, seriesModel);\n }\n\n layoutStore.oldLayout = newLayout;\n }\n };\n\n return LabelManager;\n}();\n\nexport default LabelManager;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { makeInner } from '../util/model.js';\nimport LabelManager from './LabelManager.js';\nvar getLabelManager = makeInner();\nexport function installLabelLayout(registers) {\n registers.registerUpdateLifecycle('series:beforeupdate', function (ecModel, api, params) {\n // TODO api provide an namespace that can save stuff per instance\n var labelManager = getLabelManager(api).labelManager;\n\n if (!labelManager) {\n labelManager = getLabelManager(api).labelManager = new LabelManager();\n }\n\n labelManager.clearLabels();\n });\n registers.registerUpdateLifecycle('series:layoutlabels', function (ecModel, api, params) {\n var labelManager = getLabelManager(api).labelManager;\n params.updatedSeries.forEach(function (series) {\n labelManager.addLabelsOfSeries(api.getViewOfSeriesModel(series));\n });\n labelManager.updateLayoutConfig(api);\n labelManager.layout(api);\n labelManager.processLabelsOverall();\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Core API from echarts/src/echarts\nexport * from '../core/echarts.js';\nexport * from './api.js';\nimport { use } from '../extension.js'; // Import label layout by default.\n// TODO will be treeshaked.\n\nimport { installLabelLayout } from '../label/installLabelLayout.js';\nuse(installLabelLayout);","import { isAroundZero } from './helper.js';\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\nvar PI2 = Math.PI * 2;\nvar degree = 180 / PI;\nvar SVGPathRebuilder = (function () {\n function SVGPathRebuilder() {\n }\n SVGPathRebuilder.prototype.reset = function (precision) {\n this._start = true;\n this._d = [];\n this._str = '';\n this._p = Math.pow(10, precision || 4);\n };\n SVGPathRebuilder.prototype.moveTo = function (x, y) {\n this._add('M', x, y);\n };\n SVGPathRebuilder.prototype.lineTo = function (x, y) {\n this._add('L', x, y);\n };\n SVGPathRebuilder.prototype.bezierCurveTo = function (x, y, x2, y2, x3, y3) {\n this._add('C', x, y, x2, y2, x3, y3);\n };\n SVGPathRebuilder.prototype.quadraticCurveTo = function (x, y, x2, y2) {\n this._add('Q', x, y, x2, y2);\n };\n SVGPathRebuilder.prototype.arc = function (cx, cy, r, startAngle, endAngle, anticlockwise) {\n this.ellipse(cx, cy, r, r, 0, startAngle, endAngle, anticlockwise);\n };\n SVGPathRebuilder.prototype.ellipse = function (cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise) {\n var dTheta = endAngle - startAngle;\n var clockwise = !anticlockwise;\n var dThetaPositive = Math.abs(dTheta);\n var isCircle = isAroundZero(dThetaPositive - PI2)\n || (clockwise ? dTheta >= PI2 : -dTheta >= PI2);\n var unifiedTheta = dTheta > 0 ? dTheta % PI2 : (dTheta % PI2 + PI2);\n var large = false;\n if (isCircle) {\n large = true;\n }\n else if (isAroundZero(dThetaPositive)) {\n large = false;\n }\n else {\n large = (unifiedTheta >= PI) === !!clockwise;\n }\n var x0 = cx + rx * mathCos(startAngle);\n var y0 = cy + ry * mathSin(startAngle);\n if (this._start) {\n this._add('M', x0, y0);\n }\n var xRot = Math.round(psi * degree);\n if (isCircle) {\n var p = 1 / this._p;\n var dTheta_1 = (clockwise ? 1 : -1) * (PI2 - p);\n this._add('A', rx, ry, xRot, 1, +clockwise, cx + rx * mathCos(startAngle + dTheta_1), cy + ry * mathSin(startAngle + dTheta_1));\n if (p > 1e-2) {\n this._add('A', rx, ry, xRot, 0, +clockwise, x0, y0);\n }\n }\n else {\n var x = cx + rx * mathCos(endAngle);\n var y = cy + ry * mathSin(endAngle);\n this._add('A', rx, ry, xRot, +large, +clockwise, x, y);\n }\n };\n SVGPathRebuilder.prototype.rect = function (x, y, w, h) {\n this._add('M', x, y);\n this._add('l', w, 0);\n this._add('l', 0, h);\n this._add('l', -w, 0);\n this._add('Z');\n };\n SVGPathRebuilder.prototype.closePath = function () {\n if (this._d.length > 0) {\n this._add('Z');\n }\n };\n SVGPathRebuilder.prototype._add = function (cmd, a, b, c, d, e, f, g, h) {\n var vals = [];\n var p = this._p;\n for (var i = 1; i < arguments.length; i++) {\n var val = arguments[i];\n if (isNaN(val)) {\n this._invalid = true;\n return;\n }\n vals.push(Math.round(val * p) / p);\n }\n this._d.push(cmd + vals.join(' '));\n this._start = cmd === 'Z';\n };\n SVGPathRebuilder.prototype.generateStr = function () {\n this._str = this._invalid ? '' : this._d.join('');\n this._d = [];\n };\n SVGPathRebuilder.prototype.getStr = function () {\n return this._str;\n };\n return SVGPathRebuilder;\n}());\nexport default SVGPathRebuilder;\n","import { DEFAULT_PATH_STYLE } from '../graphic/Path.js';\nimport ZRImage from '../graphic/Image.js';\nimport { getLineDash } from '../canvas/dashStyle.js';\nimport { map } from '../core/util.js';\nimport { normalizeColor } from './helper.js';\nvar NONE = 'none';\nvar mathRound = Math.round;\nfunction pathHasFill(style) {\n var fill = style.fill;\n return fill != null && fill !== NONE;\n}\nfunction pathHasStroke(style) {\n var stroke = style.stroke;\n return stroke != null && stroke !== NONE;\n}\nvar strokeProps = ['lineCap', 'miterLimit', 'lineJoin'];\nvar svgStrokeProps = map(strokeProps, function (prop) { return \"stroke-\" + prop.toLowerCase(); });\nexport default function mapStyleToAttrs(updateAttr, style, el, forceUpdate) {\n var opacity = style.opacity == null ? 1 : style.opacity;\n if (el instanceof ZRImage) {\n updateAttr('opacity', opacity);\n return;\n }\n if (pathHasFill(style)) {\n var fill = normalizeColor(style.fill);\n updateAttr('fill', fill.color);\n var fillOpacity = style.fillOpacity != null\n ? style.fillOpacity * fill.opacity * opacity\n : fill.opacity * opacity;\n if (forceUpdate || fillOpacity < 1) {\n updateAttr('fill-opacity', fillOpacity);\n }\n }\n else {\n updateAttr('fill', NONE);\n }\n if (pathHasStroke(style)) {\n var stroke = normalizeColor(style.stroke);\n updateAttr('stroke', stroke.color);\n var strokeScale = style.strokeNoScale\n ? el.getLineScale()\n : 1;\n var strokeWidth = (strokeScale ? (style.lineWidth || 0) / strokeScale : 0);\n var strokeOpacity = style.strokeOpacity != null\n ? style.strokeOpacity * stroke.opacity * opacity\n : stroke.opacity * opacity;\n var strokeFirst = style.strokeFirst;\n if (forceUpdate || strokeWidth !== 1) {\n updateAttr('stroke-width', strokeWidth);\n }\n if (forceUpdate || strokeFirst) {\n updateAttr('paint-order', strokeFirst ? 'stroke' : 'fill');\n }\n if (forceUpdate || strokeOpacity < 1) {\n updateAttr('stroke-opacity', strokeOpacity);\n }\n if (style.lineDash) {\n var _a = getLineDash(el), lineDash = _a[0], lineDashOffset = _a[1];\n if (lineDash) {\n lineDashOffset = mathRound(lineDashOffset || 0);\n updateAttr('stroke-dasharray', lineDash.join(','));\n if (lineDashOffset || forceUpdate) {\n updateAttr('stroke-dashoffset', lineDashOffset);\n }\n }\n }\n else if (forceUpdate) {\n updateAttr('stroke-dasharray', NONE);\n }\n for (var i = 0; i < strokeProps.length; i++) {\n var propName = strokeProps[i];\n if (forceUpdate || style[propName] !== DEFAULT_PATH_STYLE[propName]) {\n var val = style[propName] || DEFAULT_PATH_STYLE[propName];\n val && updateAttr(svgStrokeProps[i], val);\n }\n }\n }\n else if (forceUpdate) {\n updateAttr('stroke', NONE);\n }\n}\n","import { keys, map } from '../core/util.js';\nimport { encodeHTML } from '../core/dom.js';\nexport var SVGNS = 'http://www.w3.org/2000/svg';\nexport var XLINKNS = 'http://www.w3.org/1999/xlink';\nexport var XMLNS = 'http://www.w3.org/2000/xmlns/';\nexport var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace';\nexport function createElement(name) {\n return document.createElementNS(SVGNS, name);\n}\n;\nexport function createVNode(tag, key, attrs, children, text) {\n return {\n tag: tag,\n attrs: attrs || {},\n children: children,\n text: text,\n key: key\n };\n}\nfunction createElementOpen(name, attrs) {\n var attrsStr = [];\n if (attrs) {\n for (var key in attrs) {\n var val = attrs[key];\n var part = key;\n if (val === false) {\n continue;\n }\n else if (val !== true && val != null) {\n part += \"=\\\"\" + val + \"\\\"\";\n }\n attrsStr.push(part);\n }\n }\n return \"<\" + name + \" \" + attrsStr.join(' ') + \">\";\n}\nfunction createElementClose(name) {\n return \"\";\n}\nexport function vNodeToString(el, opts) {\n opts = opts || {};\n var S = opts.newline ? '\\n' : '';\n function convertElToString(el) {\n var children = el.children, tag = el.tag, attrs = el.attrs;\n return createElementOpen(tag, attrs)\n + encodeHTML(el.text)\n + (children ? \"\" + S + map(children, function (child) { return convertElToString(child); }).join(S) + S : '')\n + createElementClose(tag);\n }\n return convertElToString(el);\n}\nexport function getCssString(selectorNodes, animationNodes, opts) {\n opts = opts || {};\n var S = opts.newline ? '\\n' : '';\n var bracketBegin = \" {\" + S;\n var bracketEnd = S + \"}\";\n var selectors = map(keys(selectorNodes), function (className) {\n return className + bracketBegin + map(keys(selectorNodes[className]), function (attrName) {\n return attrName + \":\" + selectorNodes[className][attrName] + \";\";\n }).join(S) + bracketEnd;\n }).join(S);\n var animations = map(keys(animationNodes), function (animationName) {\n return \"@keyframes \" + animationName + bracketBegin + map(keys(animationNodes[animationName]), function (percent) {\n return percent + bracketBegin + map(keys(animationNodes[animationName][percent]), function (attrName) {\n var val = animationNodes[animationName][percent][attrName];\n if (attrName === 'd') {\n val = \"path(\\\"\" + val + \"\\\")\";\n }\n return attrName + \":\" + val + \";\";\n }).join(S) + bracketEnd;\n }).join(S) + bracketEnd;\n }).join(S);\n if (!selectors && !animations) {\n return '';\n }\n return [''].join(S);\n}\nexport function createBrushScope(zrId) {\n return {\n zrId: zrId,\n shadowCache: {},\n patternCache: {},\n gradientCache: {},\n clipPathCache: {},\n defs: {},\n cssNodes: {},\n cssAnims: {},\n cssClassIdx: 0,\n cssAnimIdx: 0,\n shadowIdx: 0,\n gradientIdx: 0,\n patternIdx: 0,\n clipPathIdx: 0\n };\n}\nexport function createSVGVNode(width, height, children, useViewBox) {\n return createVNode('svg', 'root', {\n 'width': width,\n 'height': height,\n 'xmlns': SVGNS,\n 'xmlns:xlink': XLINKNS,\n 'version': '1.1',\n 'baseProfile': 'full',\n 'viewBox': useViewBox ? \"0 0 \" + width + \" \" + height : false\n }, children);\n}\n","import { copyTransform } from '../core/Transformable.js';\nimport { createBrushScope } from './core.js';\nimport SVGPathRebuilder from './SVGPathRebuilder.js';\nimport PathProxy from '../core/PathProxy.js';\nimport { getPathPrecision, getSRTTransformString } from './helper.js';\nimport { each, extend, filter, isNumber, isString, keys } from '../core/util.js';\nimport CompoundPath from '../graphic/CompoundPath.js';\nimport { createCubicEasingFunc } from '../animation/cubicEasing.js';\nexport var EASING_MAP = {\n cubicIn: '0.32,0,0.67,0',\n cubicOut: '0.33,1,0.68,1',\n cubicInOut: '0.65,0,0.35,1',\n quadraticIn: '0.11,0,0.5,0',\n quadraticOut: '0.5,1,0.89,1',\n quadraticInOut: '0.45,0,0.55,1',\n quarticIn: '0.5,0,0.75,0',\n quarticOut: '0.25,1,0.5,1',\n quarticInOut: '0.76,0,0.24,1',\n quinticIn: '0.64,0,0.78,0',\n quinticOut: '0.22,1,0.36,1',\n quinticInOut: '0.83,0,0.17,1',\n sinusoidalIn: '0.12,0,0.39,0',\n sinusoidalOut: '0.61,1,0.88,1',\n sinusoidalInOut: '0.37,0,0.63,1',\n exponentialIn: '0.7,0,0.84,0',\n exponentialOut: '0.16,1,0.3,1',\n exponentialInOut: '0.87,0,0.13,1',\n circularIn: '0.55,0,1,0.45',\n circularOut: '0,0.55,0.45,1',\n circularInOut: '0.85,0,0.15,1'\n};\nvar transformOriginKey = 'transform-origin';\nfunction buildPathString(el, kfShape, path) {\n var shape = extend({}, el.shape);\n extend(shape, kfShape);\n el.buildPath(path, shape);\n var svgPathBuilder = new SVGPathRebuilder();\n svgPathBuilder.reset(getPathPrecision(el));\n path.rebuildPath(svgPathBuilder, 1);\n svgPathBuilder.generateStr();\n return svgPathBuilder.getStr();\n}\nfunction setTransformOrigin(target, transform) {\n var originX = transform.originX, originY = transform.originY;\n if (originX || originY) {\n target[transformOriginKey] = originX + \"px \" + originY + \"px\";\n }\n}\nexport var ANIMATE_STYLE_MAP = {\n fill: 'fill',\n opacity: 'opacity',\n lineWidth: 'stroke-width',\n lineDashOffset: 'stroke-dashoffset'\n};\nfunction addAnimation(cssAnim, scope) {\n var animationName = scope.zrId + '-ani-' + scope.cssAnimIdx++;\n scope.cssAnims[animationName] = cssAnim;\n return animationName;\n}\nfunction createCompoundPathCSSAnimation(el, attrs, scope) {\n var paths = el.shape.paths;\n var composedAnim = {};\n var cssAnimationCfg;\n var cssAnimationName;\n each(paths, function (path) {\n var subScope = createBrushScope(scope.zrId);\n subScope.animation = true;\n createCSSAnimation(path, {}, subScope, true);\n var cssAnims = subScope.cssAnims;\n var cssNodes = subScope.cssNodes;\n var animNames = keys(cssAnims);\n var len = animNames.length;\n if (!len) {\n return;\n }\n cssAnimationName = animNames[len - 1];\n var lastAnim = cssAnims[cssAnimationName];\n for (var percent in lastAnim) {\n var kf = lastAnim[percent];\n composedAnim[percent] = composedAnim[percent] || { d: '' };\n composedAnim[percent].d += kf.d || '';\n }\n for (var className in cssNodes) {\n var val = cssNodes[className].animation;\n if (val.indexOf(cssAnimationName) >= 0) {\n cssAnimationCfg = val;\n }\n }\n });\n if (!cssAnimationCfg) {\n return;\n }\n attrs.d = false;\n var animationName = addAnimation(composedAnim, scope);\n return cssAnimationCfg.replace(cssAnimationName, animationName);\n}\nfunction getEasingFunc(easing) {\n return isString(easing)\n ? EASING_MAP[easing]\n ? \"cubic-bezier(\" + EASING_MAP[easing] + \")\"\n : createCubicEasingFunc(easing) ? easing : ''\n : '';\n}\nexport function createCSSAnimation(el, attrs, scope, onlyShape) {\n var animators = el.animators;\n var len = animators.length;\n var cssAnimations = [];\n if (el instanceof CompoundPath) {\n var animationCfg = createCompoundPathCSSAnimation(el, attrs, scope);\n if (animationCfg) {\n cssAnimations.push(animationCfg);\n }\n else if (!len) {\n return;\n }\n }\n else if (!len) {\n return;\n }\n var groupAnimators = {};\n for (var i = 0; i < len; i++) {\n var animator = animators[i];\n var cfgArr = [animator.getMaxTime() / 1000 + 's'];\n var easing = getEasingFunc(animator.getClip().easing);\n var delay = animator.getDelay();\n if (easing) {\n cfgArr.push(easing);\n }\n else {\n cfgArr.push('linear');\n }\n if (delay) {\n cfgArr.push(delay / 1000 + 's');\n }\n if (animator.getLoop()) {\n cfgArr.push('infinite');\n }\n var cfg = cfgArr.join(' ');\n groupAnimators[cfg] = groupAnimators[cfg] || [cfg, []];\n groupAnimators[cfg][1].push(animator);\n }\n function createSingleCSSAnimation(groupAnimator) {\n var animators = groupAnimator[1];\n var len = animators.length;\n var transformKfs = {};\n var shapeKfs = {};\n var finalKfs = {};\n var animationTimingFunctionAttrName = 'animation-timing-function';\n function saveAnimatorTrackToCssKfs(animator, cssKfs, toCssAttrName) {\n var tracks = animator.getTracks();\n var maxTime = animator.getMaxTime();\n for (var k = 0; k < tracks.length; k++) {\n var track = tracks[k];\n if (track.needsAnimate()) {\n var kfs = track.keyframes;\n var attrName = track.propName;\n toCssAttrName && (attrName = toCssAttrName(attrName));\n if (attrName) {\n for (var i = 0; i < kfs.length; i++) {\n var kf = kfs[i];\n var percent = Math.round(kf.time / maxTime * 100) + '%';\n var kfEasing = getEasingFunc(kf.easing);\n var rawValue = kf.rawValue;\n if (isString(rawValue) || isNumber(rawValue)) {\n cssKfs[percent] = cssKfs[percent] || {};\n cssKfs[percent][attrName] = kf.rawValue;\n if (kfEasing) {\n cssKfs[percent][animationTimingFunctionAttrName] = kfEasing;\n }\n }\n }\n }\n }\n }\n }\n for (var i = 0; i < len; i++) {\n var animator = animators[i];\n var targetProp = animator.targetName;\n if (!targetProp) {\n !onlyShape && saveAnimatorTrackToCssKfs(animator, transformKfs);\n }\n else if (targetProp === 'shape') {\n saveAnimatorTrackToCssKfs(animator, shapeKfs);\n }\n }\n for (var percent in transformKfs) {\n var transform = {};\n copyTransform(transform, el);\n extend(transform, transformKfs[percent]);\n var str = getSRTTransformString(transform);\n var timingFunction = transformKfs[percent][animationTimingFunctionAttrName];\n finalKfs[percent] = str ? {\n transform: str\n } : {};\n setTransformOrigin(finalKfs[percent], transform);\n if (timingFunction) {\n finalKfs[percent][animationTimingFunctionAttrName] = timingFunction;\n }\n }\n ;\n var path;\n var canAnimateShape = true;\n for (var percent in shapeKfs) {\n finalKfs[percent] = finalKfs[percent] || {};\n var isFirst = !path;\n var timingFunction = shapeKfs[percent][animationTimingFunctionAttrName];\n if (isFirst) {\n path = new PathProxy();\n }\n var len_1 = path.len();\n path.reset();\n finalKfs[percent].d = buildPathString(el, shapeKfs[percent], path);\n var newLen = path.len();\n if (!isFirst && len_1 !== newLen) {\n canAnimateShape = false;\n break;\n }\n if (timingFunction) {\n finalKfs[percent][animationTimingFunctionAttrName] = timingFunction;\n }\n }\n ;\n if (!canAnimateShape) {\n for (var percent in finalKfs) {\n delete finalKfs[percent].d;\n }\n }\n if (!onlyShape) {\n for (var i = 0; i < len; i++) {\n var animator = animators[i];\n var targetProp = animator.targetName;\n if (targetProp === 'style') {\n saveAnimatorTrackToCssKfs(animator, finalKfs, function (propName) { return ANIMATE_STYLE_MAP[propName]; });\n }\n }\n }\n var percents = keys(finalKfs);\n var allTransformOriginSame = true;\n var transformOrigin;\n for (var i = 1; i < percents.length; i++) {\n var p0 = percents[i - 1];\n var p1 = percents[i];\n if (finalKfs[p0][transformOriginKey] !== finalKfs[p1][transformOriginKey]) {\n allTransformOriginSame = false;\n break;\n }\n transformOrigin = finalKfs[p0][transformOriginKey];\n }\n if (allTransformOriginSame && transformOrigin) {\n for (var percent in finalKfs) {\n if (finalKfs[percent][transformOriginKey]) {\n delete finalKfs[percent][transformOriginKey];\n }\n }\n attrs[transformOriginKey] = transformOrigin;\n }\n if (filter(percents, function (percent) { return keys(finalKfs[percent]).length > 0; }).length) {\n var animationName = addAnimation(finalKfs, scope);\n return animationName + \" \" + groupAnimator[0] + \" both\";\n }\n }\n for (var key in groupAnimators) {\n var animationCfg = createSingleCSSAnimation(groupAnimators[key]);\n if (animationCfg) {\n cssAnimations.push(animationCfg);\n }\n }\n if (cssAnimations.length) {\n var className = scope.zrId + '-cls-' + scope.cssClassIdx++;\n scope.cssNodes['.' + className] = {\n animation: cssAnimations.join(',')\n };\n attrs[\"class\"] = className;\n }\n}\n","import { adjustTextY, getIdURL, getMatrixStr, getPathPrecision, getShadowKey, getSRTTransformString, hasShadow, isAroundZero, isGradient, isImagePattern, isLinearGradient, isPattern, isRadialGradient, normalizeColor, round4, TEXT_ALIGN_TO_ANCHOR } from './helper.js';\nimport Path from '../graphic/Path.js';\nimport ZRImage from '../graphic/Image.js';\nimport { getLineHeight } from '../contain/text.js';\nimport TSpan from '../graphic/TSpan.js';\nimport SVGPathRebuilder from './SVGPathRebuilder.js';\nimport mapStyleToAttrs from './mapStyleToAttrs.js';\nimport { createVNode, vNodeToString } from './core.js';\nimport { assert, clone, isFunction, isString, logError, map, retrieve2 } from '../core/util.js';\nimport { createOrUpdateImage } from '../graphic/helper/image.js';\nimport { createCSSAnimation } from './cssAnimation.js';\nimport { hasSeparateFont, parseFontSize } from '../graphic/Text.js';\nimport { DEFAULT_FONT, DEFAULT_FONT_FAMILY } from '../core/platform.js';\nvar round = Math.round;\nfunction isImageLike(val) {\n return val && isString(val.src);\n}\nfunction isCanvasLike(val) {\n return val && isFunction(val.toDataURL);\n}\nfunction setStyleAttrs(attrs, style, el, scope) {\n mapStyleToAttrs(function (key, val) {\n var isFillStroke = key === 'fill' || key === 'stroke';\n if (isFillStroke && isGradient(val)) {\n setGradient(style, attrs, key, scope);\n }\n else if (isFillStroke && isPattern(val)) {\n setPattern(el, attrs, key, scope);\n }\n else {\n attrs[key] = val;\n }\n }, style, el, false);\n setShadow(el, attrs, scope);\n}\nfunction noRotateScale(m) {\n return isAroundZero(m[0] - 1)\n && isAroundZero(m[1])\n && isAroundZero(m[2])\n && isAroundZero(m[3] - 1);\n}\nfunction noTranslate(m) {\n return isAroundZero(m[4]) && isAroundZero(m[5]);\n}\nfunction setTransform(attrs, m, compress) {\n if (m && !(noTranslate(m) && noRotateScale(m))) {\n var mul = compress ? 10 : 1e4;\n attrs.transform = noRotateScale(m)\n ? \"translate(\" + round(m[4] * mul) / mul + \" \" + round(m[5] * mul) / mul + \")\" : getMatrixStr(m);\n }\n}\nfunction convertPolyShape(shape, attrs, mul) {\n var points = shape.points;\n var strArr = [];\n for (var i = 0; i < points.length; i++) {\n strArr.push(round(points[i][0] * mul) / mul);\n strArr.push(round(points[i][1] * mul) / mul);\n }\n attrs.points = strArr.join(' ');\n}\nfunction validatePolyShape(shape) {\n return !shape.smooth;\n}\nfunction createAttrsConvert(desc) {\n var normalizedDesc = map(desc, function (item) {\n return (typeof item === 'string' ? [item, item] : item);\n });\n return function (shape, attrs, mul) {\n for (var i = 0; i < normalizedDesc.length; i++) {\n var item = normalizedDesc[i];\n var val = shape[item[0]];\n if (val != null) {\n attrs[item[1]] = round(val * mul) / mul;\n }\n }\n };\n}\nvar builtinShapesDef = {\n circle: [createAttrsConvert(['cx', 'cy', 'r'])],\n polyline: [convertPolyShape, validatePolyShape],\n polygon: [convertPolyShape, validatePolyShape]\n};\nfunction hasShapeAnimation(el) {\n var animators = el.animators;\n for (var i = 0; i < animators.length; i++) {\n if (animators[i].targetName === 'shape') {\n return true;\n }\n }\n return false;\n}\nexport function brushSVGPath(el, scope) {\n var style = el.style;\n var shape = el.shape;\n var builtinShpDef = builtinShapesDef[el.type];\n var attrs = {};\n var needsAnimate = scope.animation;\n var svgElType = 'path';\n var strokePercent = el.style.strokePercent;\n var precision = (scope.compress && getPathPrecision(el)) || 4;\n if (builtinShpDef\n && !scope.willUpdate\n && !(builtinShpDef[1] && !builtinShpDef[1](shape))\n && !(needsAnimate && hasShapeAnimation(el))\n && !(strokePercent < 1)) {\n svgElType = el.type;\n var mul = Math.pow(10, precision);\n builtinShpDef[0](shape, attrs, mul);\n }\n else {\n var needBuildPath = !el.path || el.shapeChanged();\n if (!el.path) {\n el.createPathProxy();\n }\n var path = el.path;\n if (needBuildPath) {\n path.beginPath();\n el.buildPath(path, el.shape);\n el.pathUpdated();\n }\n var pathVersion = path.getVersion();\n var elExt = el;\n var svgPathBuilder = elExt.__svgPathBuilder;\n if (elExt.__svgPathVersion !== pathVersion\n || !svgPathBuilder\n || strokePercent !== elExt.__svgPathStrokePercent) {\n if (!svgPathBuilder) {\n svgPathBuilder = elExt.__svgPathBuilder = new SVGPathRebuilder();\n }\n svgPathBuilder.reset(precision);\n path.rebuildPath(svgPathBuilder, strokePercent);\n svgPathBuilder.generateStr();\n elExt.__svgPathVersion = pathVersion;\n elExt.__svgPathStrokePercent = strokePercent;\n }\n attrs.d = svgPathBuilder.getStr();\n }\n setTransform(attrs, el.transform);\n setStyleAttrs(attrs, style, el, scope);\n scope.animation && createCSSAnimation(el, attrs, scope);\n return createVNode(svgElType, el.id + '', attrs);\n}\nexport function brushSVGImage(el, scope) {\n var style = el.style;\n var image = style.image;\n if (image && !isString(image)) {\n if (isImageLike(image)) {\n image = image.src;\n }\n else if (isCanvasLike(image)) {\n image = image.toDataURL();\n }\n }\n if (!image) {\n return;\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 attrs = {\n href: image,\n width: dw,\n height: dh\n };\n if (x) {\n attrs.x = x;\n }\n if (y) {\n attrs.y = y;\n }\n setTransform(attrs, el.transform);\n setStyleAttrs(attrs, style, el, scope);\n scope.animation && createCSSAnimation(el, attrs, scope);\n return createVNode('image', el.id + '', attrs);\n}\n;\nexport function brushSVGTSpan(el, scope) {\n var style = el.style;\n var text = style.text;\n text != null && (text += '');\n if (!text || isNaN(style.x) || isNaN(style.y)) {\n return;\n }\n var font = style.font || DEFAULT_FONT;\n var x = style.x || 0;\n var y = adjustTextY(style.y || 0, getLineHeight(font), style.textBaseline);\n var textAlign = TEXT_ALIGN_TO_ANCHOR[style.textAlign]\n || style.textAlign;\n var attrs = {\n 'dominant-baseline': 'central',\n 'text-anchor': textAlign\n };\n if (hasSeparateFont(style)) {\n var separatedFontStr = '';\n var fontStyle = style.fontStyle;\n var fontSize = parseFontSize(style.fontSize);\n if (!parseFloat(fontSize)) {\n return;\n }\n var fontFamily = style.fontFamily || DEFAULT_FONT_FAMILY;\n var fontWeight = style.fontWeight;\n separatedFontStr += \"font-size:\" + fontSize + \";font-family:\" + fontFamily + \";\";\n if (fontStyle && fontStyle !== 'normal') {\n separatedFontStr += \"font-style:\" + fontStyle + \";\";\n }\n if (fontWeight && fontWeight !== 'normal') {\n separatedFontStr += \"font-weight:\" + fontWeight + \";\";\n }\n attrs.style = separatedFontStr;\n }\n else {\n attrs.style = \"font: \" + font;\n }\n if (text.match(/\\s/)) {\n attrs['xml:space'] = 'preserve';\n }\n if (x) {\n attrs.x = x;\n }\n if (y) {\n attrs.y = y;\n }\n setTransform(attrs, el.transform);\n setStyleAttrs(attrs, style, el, scope);\n scope.animation && createCSSAnimation(el, attrs, scope);\n return createVNode('text', el.id + '', attrs, undefined, text);\n}\nexport function brush(el, scope) {\n if (el instanceof Path) {\n return brushSVGPath(el, scope);\n }\n else if (el instanceof ZRImage) {\n return brushSVGImage(el, scope);\n }\n else if (el instanceof TSpan) {\n return brushSVGTSpan(el, scope);\n }\n}\nfunction setShadow(el, attrs, scope) {\n var style = el.style;\n if (hasShadow(style)) {\n var shadowKey = getShadowKey(el);\n var shadowCache = scope.shadowCache;\n var shadowId = shadowCache[shadowKey];\n if (!shadowId) {\n var globalScale = el.getGlobalScale();\n var scaleX = globalScale[0];\n var scaleY = globalScale[1];\n if (!scaleX || !scaleY) {\n return;\n }\n var offsetX = style.shadowOffsetX || 0;\n var offsetY = style.shadowOffsetY || 0;\n var blur_1 = style.shadowBlur;\n var _a = normalizeColor(style.shadowColor), opacity = _a.opacity, color = _a.color;\n var stdDx = blur_1 / 2 / scaleX;\n var stdDy = blur_1 / 2 / scaleY;\n var stdDeviation = stdDx + ' ' + stdDy;\n shadowId = scope.zrId + '-s' + scope.shadowIdx++;\n scope.defs[shadowId] = createVNode('filter', shadowId, {\n 'id': shadowId,\n 'x': '-100%',\n 'y': '-100%',\n 'width': '300%',\n 'height': '300%'\n }, [\n createVNode('feDropShadow', '', {\n 'dx': offsetX / scaleX,\n 'dy': offsetY / scaleY,\n 'stdDeviation': stdDeviation,\n 'flood-color': color,\n 'flood-opacity': opacity\n })\n ]);\n shadowCache[shadowKey] = shadowId;\n }\n attrs.filter = getIdURL(shadowId);\n }\n}\nexport function setGradient(style, attrs, target, scope) {\n var val = style[target];\n var gradientTag;\n var gradientAttrs = {\n 'gradientUnits': val.global\n ? 'userSpaceOnUse'\n : 'objectBoundingBox'\n };\n if (isLinearGradient(val)) {\n gradientTag = 'linearGradient';\n gradientAttrs.x1 = val.x;\n gradientAttrs.y1 = val.y;\n gradientAttrs.x2 = val.x2;\n gradientAttrs.y2 = val.y2;\n }\n else if (isRadialGradient(val)) {\n gradientTag = 'radialGradient';\n gradientAttrs.cx = retrieve2(val.x, 0.5);\n gradientAttrs.cy = retrieve2(val.y, 0.5);\n gradientAttrs.r = retrieve2(val.r, 0.5);\n }\n else {\n if (process.env.NODE_ENV !== 'production') {\n logError('Illegal gradient type.');\n }\n return;\n }\n var colors = val.colorStops;\n var colorStops = [];\n for (var i = 0, len = colors.length; i < len; ++i) {\n var offset = round4(colors[i].offset) * 100 + '%';\n var stopColor = colors[i].color;\n var _a = normalizeColor(stopColor), color = _a.color, opacity = _a.opacity;\n var stopsAttrs = {\n 'offset': offset\n };\n stopsAttrs['stop-color'] = color;\n if (opacity < 1) {\n stopsAttrs['stop-opacity'] = opacity;\n }\n colorStops.push(createVNode('stop', i + '', stopsAttrs));\n }\n var gradientVNode = createVNode(gradientTag, '', gradientAttrs, colorStops);\n var gradientKey = vNodeToString(gradientVNode);\n var gradientCache = scope.gradientCache;\n var gradientId = gradientCache[gradientKey];\n if (!gradientId) {\n gradientId = scope.zrId + '-g' + scope.gradientIdx++;\n gradientCache[gradientKey] = gradientId;\n gradientAttrs.id = gradientId;\n scope.defs[gradientId] = createVNode(gradientTag, gradientId, gradientAttrs, colorStops);\n }\n attrs[target] = getIdURL(gradientId);\n}\nexport function setPattern(el, attrs, target, scope) {\n var val = el.style[target];\n var boundingRect = el.getBoundingRect();\n var patternAttrs = {};\n var repeat = val.repeat;\n var noRepeat = repeat === 'no-repeat';\n var repeatX = repeat === 'repeat-x';\n var repeatY = repeat === 'repeat-y';\n var child;\n if (isImagePattern(val)) {\n var imageWidth_1 = val.imageWidth;\n var imageHeight_1 = val.imageHeight;\n var imageSrc = void 0;\n var patternImage = val.image;\n if (isString(patternImage)) {\n imageSrc = patternImage;\n }\n else if (isImageLike(patternImage)) {\n imageSrc = patternImage.src;\n }\n else if (isCanvasLike(patternImage)) {\n imageSrc = patternImage.toDataURL();\n }\n if (typeof Image === 'undefined') {\n var errMsg = 'Image width/height must been given explictly in svg-ssr renderer.';\n assert(imageWidth_1, errMsg);\n assert(imageHeight_1, errMsg);\n }\n else if (imageWidth_1 == null || imageHeight_1 == null) {\n var setSizeToVNode_1 = function (vNode, img) {\n if (vNode) {\n var svgEl = vNode.elm;\n var width = imageWidth_1 || img.width;\n var height = imageHeight_1 || img.height;\n if (vNode.tag === 'pattern') {\n if (repeatX) {\n height = 1;\n width /= boundingRect.width;\n }\n else if (repeatY) {\n width = 1;\n height /= boundingRect.height;\n }\n }\n vNode.attrs.width = width;\n vNode.attrs.height = height;\n if (svgEl) {\n svgEl.setAttribute('width', width);\n svgEl.setAttribute('height', height);\n }\n }\n };\n var createdImage = createOrUpdateImage(imageSrc, null, el, function (img) {\n noRepeat || setSizeToVNode_1(patternVNode, img);\n setSizeToVNode_1(child, img);\n });\n if (createdImage && createdImage.width && createdImage.height) {\n imageWidth_1 = imageWidth_1 || createdImage.width;\n imageHeight_1 = imageHeight_1 || createdImage.height;\n }\n }\n child = createVNode('image', 'img', {\n href: imageSrc,\n width: imageWidth_1,\n height: imageHeight_1\n });\n patternAttrs.width = imageWidth_1;\n patternAttrs.height = imageHeight_1;\n }\n else if (val.svgElement) {\n child = clone(val.svgElement);\n patternAttrs.width = val.svgWidth;\n patternAttrs.height = val.svgHeight;\n }\n if (!child) {\n return;\n }\n var patternWidth;\n var patternHeight;\n if (noRepeat) {\n patternWidth = patternHeight = 1;\n }\n else if (repeatX) {\n patternHeight = 1;\n patternWidth = patternAttrs.width / boundingRect.width;\n }\n else if (repeatY) {\n patternWidth = 1;\n patternHeight = patternAttrs.height / boundingRect.height;\n }\n else {\n patternAttrs.patternUnits = 'userSpaceOnUse';\n }\n if (patternWidth != null && !isNaN(patternWidth)) {\n patternAttrs.width = patternWidth;\n }\n if (patternHeight != null && !isNaN(patternHeight)) {\n patternAttrs.height = patternHeight;\n }\n var patternTransform = getSRTTransformString(val);\n patternTransform && (patternAttrs.patternTransform = patternTransform);\n var patternVNode = createVNode('pattern', '', patternAttrs, [child]);\n var patternKey = vNodeToString(patternVNode);\n var patternCache = scope.patternCache;\n var patternId = patternCache[patternKey];\n if (!patternId) {\n patternId = scope.zrId + '-p' + scope.patternIdx++;\n patternCache[patternKey] = patternId;\n patternAttrs.id = patternId;\n patternVNode = scope.defs[patternId] = createVNode('pattern', patternId, patternAttrs, [child]);\n }\n attrs[target] = getIdURL(patternId);\n}\nexport function setClipPath(clipPath, attrs, scope) {\n var clipPathCache = scope.clipPathCache, defs = scope.defs;\n var clipPathId = clipPathCache[clipPath.id];\n if (!clipPathId) {\n clipPathId = scope.zrId + '-c' + scope.clipPathIdx++;\n var clipPathAttrs = {\n id: clipPathId\n };\n clipPathCache[clipPath.id] = clipPathId;\n defs[clipPathId] = createVNode('clipPath', clipPathId, clipPathAttrs, [brushSVGPath(clipPath, scope)]);\n }\n attrs['clip-path'] = getIdURL(clipPathId);\n}\n","export function createTextNode(text) {\n return document.createTextNode(text);\n}\nexport function createComment(text) {\n return document.createComment(text);\n}\nexport function insertBefore(parentNode, newNode, referenceNode) {\n parentNode.insertBefore(newNode, referenceNode);\n}\nexport function removeChild(node, child) {\n node.removeChild(child);\n}\nexport function appendChild(node, child) {\n node.appendChild(child);\n}\nexport function parentNode(node) {\n return node.parentNode;\n}\nexport function nextSibling(node) {\n return node.nextSibling;\n}\nexport function tagName(elm) {\n return elm.tagName;\n}\nexport function setTextContent(node, text) {\n node.textContent = text;\n}\nexport function getTextContent(node) {\n return node.textContent;\n}\nexport function isElement(node) {\n return node.nodeType === 1;\n}\nexport function isText(node) {\n return node.nodeType === 3;\n}\nexport function isComment(node) {\n return node.nodeType === 8;\n}\n","import { isArray, isObject } from '../core/util.js';\nimport { createElement, createVNode, XMLNS, XML_NAMESPACE, XLINKNS } from './core.js';\nimport * as api from './domapi.js';\nvar colonChar = 58;\nvar xChar = 120;\nvar emptyNode = createVNode('', '');\nfunction isUndef(s) {\n return s === undefined;\n}\nfunction isDef(s) {\n return s !== undefined;\n}\nfunction createKeyToOldIdx(children, beginIdx, endIdx) {\n var map = {};\n for (var i = beginIdx; i <= endIdx; ++i) {\n var key = children[i].key;\n if (key !== undefined) {\n if (process.env.NODE_ENV !== 'production') {\n if (map[key] != null) {\n console.error(\"Duplicate key \" + key);\n }\n }\n map[key] = i;\n }\n }\n return map;\n}\nfunction sameVnode(vnode1, vnode2) {\n var isSameKey = vnode1.key === vnode2.key;\n var isSameTag = vnode1.tag === vnode2.tag;\n return isSameTag && isSameKey;\n}\nfunction createElm(vnode) {\n var i;\n var children = vnode.children;\n var tag = vnode.tag;\n if (isDef(tag)) {\n var elm = (vnode.elm = createElement(tag));\n updateAttrs(emptyNode, vnode);\n if (isArray(children)) {\n for (i = 0; i < children.length; ++i) {\n var ch = children[i];\n if (ch != null) {\n api.appendChild(elm, createElm(ch));\n }\n }\n }\n else if (isDef(vnode.text) && !isObject(vnode.text)) {\n api.appendChild(elm, api.createTextNode(vnode.text));\n }\n }\n else {\n vnode.elm = api.createTextNode(vnode.text);\n }\n return vnode.elm;\n}\nfunction addVnodes(parentElm, before, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (ch != null) {\n api.insertBefore(parentElm, createElm(ch), before);\n }\n }\n}\nfunction removeVnodes(parentElm, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (ch != null) {\n if (isDef(ch.tag)) {\n var parent_1 = api.parentNode(ch.elm);\n api.removeChild(parent_1, ch.elm);\n }\n else {\n api.removeChild(parentElm, ch.elm);\n }\n }\n }\n}\nexport function updateAttrs(oldVnode, vnode) {\n var key;\n var elm = vnode.elm;\n var oldAttrs = oldVnode && oldVnode.attrs || {};\n var attrs = vnode.attrs || {};\n if (oldAttrs === attrs) {\n return;\n }\n for (key in attrs) {\n var cur = attrs[key];\n var old = oldAttrs[key];\n if (old !== cur) {\n if (cur === true) {\n elm.setAttribute(key, '');\n }\n else if (cur === false) {\n elm.removeAttribute(key);\n }\n else {\n if (key.charCodeAt(0) !== xChar) {\n elm.setAttribute(key, cur);\n }\n else if (key === 'xmlns:xlink' || key === 'xmlns') {\n elm.setAttributeNS(XMLNS, key, cur);\n }\n else if (key.charCodeAt(3) === colonChar) {\n elm.setAttributeNS(XML_NAMESPACE, key, cur);\n }\n else if (key.charCodeAt(5) === colonChar) {\n elm.setAttributeNS(XLINKNS, key, cur);\n }\n else {\n elm.setAttribute(key, cur);\n }\n }\n }\n }\n for (key in oldAttrs) {\n if (!(key in attrs)) {\n elm.removeAttribute(key);\n }\n }\n}\nfunction updateChildren(parentElm, oldCh, newCh) {\n var oldStartIdx = 0;\n var newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var oldKeyToIdx;\n var idxInOld;\n var elmToMove;\n var before;\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (oldStartVnode == null) {\n oldStartVnode = oldCh[++oldStartIdx];\n }\n else if (oldEndVnode == null) {\n oldEndVnode = oldCh[--oldEndIdx];\n }\n else if (newStartVnode == null) {\n newStartVnode = newCh[++newStartIdx];\n }\n else if (newEndVnode == null) {\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldStartVnode, newStartVnode)) {\n patchVnode(oldStartVnode, newStartVnode);\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n }\n else if (sameVnode(oldEndVnode, newEndVnode)) {\n patchVnode(oldEndVnode, newEndVnode);\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldStartVnode, newEndVnode)) {\n patchVnode(oldStartVnode, newEndVnode);\n api.insertBefore(parentElm, oldStartVnode.elm, api.nextSibling(oldEndVnode.elm));\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n }\n else if (sameVnode(oldEndVnode, newStartVnode)) {\n patchVnode(oldEndVnode, newStartVnode);\n api.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n }\n else {\n if (isUndef(oldKeyToIdx)) {\n oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);\n }\n idxInOld = oldKeyToIdx[newStartVnode.key];\n if (isUndef(idxInOld)) {\n api.insertBefore(parentElm, createElm(newStartVnode), oldStartVnode.elm);\n }\n else {\n elmToMove = oldCh[idxInOld];\n if (elmToMove.tag !== newStartVnode.tag) {\n api.insertBefore(parentElm, createElm(newStartVnode), oldStartVnode.elm);\n }\n else {\n patchVnode(elmToMove, newStartVnode);\n oldCh[idxInOld] = undefined;\n api.insertBefore(parentElm, elmToMove.elm, oldStartVnode.elm);\n }\n }\n newStartVnode = newCh[++newStartIdx];\n }\n }\n if (oldStartIdx <= oldEndIdx || newStartIdx <= newEndIdx) {\n if (oldStartIdx > oldEndIdx) {\n before = newCh[newEndIdx + 1] == null ? null : newCh[newEndIdx + 1].elm;\n addVnodes(parentElm, before, newCh, newStartIdx, newEndIdx);\n }\n else {\n removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n }\n }\n}\nfunction patchVnode(oldVnode, vnode) {\n var elm = (vnode.elm = oldVnode.elm);\n var oldCh = oldVnode.children;\n var ch = vnode.children;\n if (oldVnode === vnode) {\n return;\n }\n updateAttrs(oldVnode, vnode);\n if (isUndef(vnode.text)) {\n if (isDef(oldCh) && isDef(ch)) {\n if (oldCh !== ch) {\n updateChildren(elm, oldCh, ch);\n }\n }\n else if (isDef(ch)) {\n if (isDef(oldVnode.text)) {\n api.setTextContent(elm, '');\n }\n addVnodes(elm, null, ch, 0, ch.length - 1);\n }\n else if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n }\n else if (isDef(oldVnode.text)) {\n api.setTextContent(elm, '');\n }\n }\n else if (oldVnode.text !== vnode.text) {\n if (isDef(oldCh)) {\n removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n }\n api.setTextContent(elm, vnode.text);\n }\n}\nexport default function patch(oldVnode, vnode) {\n if (sameVnode(oldVnode, vnode)) {\n patchVnode(oldVnode, vnode);\n }\n else {\n var elm = oldVnode.elm;\n var parent_2 = api.parentNode(elm);\n createElm(vnode);\n if (parent_2 !== null) {\n api.insertBefore(parent_2, vnode.elm, api.nextSibling(elm));\n removeVnodes(parent_2, [oldVnode], 0, 0);\n }\n }\n return vnode;\n}\n","import { brush, setClipPath, setGradient, setPattern } from './graphic.js';\nimport { createElement, createVNode, vNodeToString, getCssString, createBrushScope, createSVGVNode } from './core.js';\nimport { normalizeColor, encodeBase64, isGradient, isPattern } from './helper.js';\nimport { extend, keys, logError, map, noop, retrieve2 } from '../core/util.js';\nimport patch, { updateAttrs } from './patch.js';\nimport { getSize } from '../canvas/helper.js';\nvar svgId = 0;\nvar SVGPainter = (function () {\n function SVGPainter(root, storage, opts) {\n this.type = 'svg';\n this.refreshHover = createMethodNotSupport('refreshHover');\n this.configLayer = createMethodNotSupport('configLayer');\n this.storage = storage;\n this._opts = opts = extend({}, opts);\n this.root = root;\n this._id = 'zr' + svgId++;\n this._oldVNode = createSVGVNode(opts.width, opts.height);\n if (root && !opts.ssr) {\n var viewport = this._viewport = document.createElement('div');\n viewport.style.cssText = 'position:relative;overflow:hidden';\n var svgDom = this._svgDom = this._oldVNode.elm = createElement('svg');\n updateAttrs(null, this._oldVNode);\n viewport.appendChild(svgDom);\n root.appendChild(viewport);\n }\n this.resize(opts.width, opts.height);\n }\n SVGPainter.prototype.getType = function () {\n return this.type;\n };\n SVGPainter.prototype.getViewportRoot = function () {\n return this._viewport;\n };\n SVGPainter.prototype.getViewportRootOffset = function () {\n var viewportRoot = this.getViewportRoot();\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n };\n SVGPainter.prototype.getSvgDom = function () {\n return this._svgDom;\n };\n SVGPainter.prototype.refresh = function () {\n if (this.root) {\n var vnode = this.renderToVNode({\n willUpdate: true\n });\n vnode.attrs.style = 'position:absolute;left:0;top:0;user-select:none';\n patch(this._oldVNode, vnode);\n this._oldVNode = vnode;\n }\n };\n SVGPainter.prototype.renderOneToVNode = function (el) {\n return brush(el, createBrushScope(this._id));\n };\n SVGPainter.prototype.renderToVNode = function (opts) {\n opts = opts || {};\n var list = this.storage.getDisplayList(true);\n var width = this._width;\n var height = this._height;\n var scope = createBrushScope(this._id);\n scope.animation = opts.animation;\n scope.willUpdate = opts.willUpdate;\n scope.compress = opts.compress;\n var children = [];\n var bgVNode = this._bgVNode = createBackgroundVNode(width, height, this._backgroundColor, scope);\n bgVNode && children.push(bgVNode);\n var mainVNode = !opts.compress\n ? (this._mainVNode = createVNode('g', 'main', {}, [])) : null;\n this._paintList(list, scope, mainVNode ? mainVNode.children : children);\n mainVNode && children.push(mainVNode);\n var defs = map(keys(scope.defs), function (id) { return scope.defs[id]; });\n if (defs.length) {\n children.push(createVNode('defs', 'defs', {}, defs));\n }\n if (opts.animation) {\n var animationCssStr = getCssString(scope.cssNodes, scope.cssAnims, { newline: true });\n if (animationCssStr) {\n var styleNode = createVNode('style', 'stl', {}, [], animationCssStr);\n children.push(styleNode);\n }\n }\n return createSVGVNode(width, height, children, opts.useViewBox);\n };\n SVGPainter.prototype.renderToString = function (opts) {\n opts = opts || {};\n return vNodeToString(this.renderToVNode({\n animation: retrieve2(opts.cssAnimation, true),\n willUpdate: false,\n compress: true,\n useViewBox: retrieve2(opts.useViewBox, true)\n }), { newline: true });\n };\n SVGPainter.prototype.setBackgroundColor = function (backgroundColor) {\n this._backgroundColor = backgroundColor;\n };\n SVGPainter.prototype.getSvgRoot = function () {\n return this._mainVNode && this._mainVNode.elm;\n };\n SVGPainter.prototype._paintList = function (list, scope, out) {\n var listLen = list.length;\n var clipPathsGroupsStack = [];\n var clipPathsGroupsStackDepth = 0;\n var currentClipPathGroup;\n var prevClipPaths;\n var clipGroupNodeIdx = 0;\n for (var i = 0; i < listLen; i++) {\n var displayable = list[i];\n if (!displayable.invisible) {\n var clipPaths = displayable.__clipPaths;\n var len = clipPaths && clipPaths.length || 0;\n var prevLen = prevClipPaths && prevClipPaths.length || 0;\n var lca = void 0;\n for (lca = Math.max(len - 1, prevLen - 1); lca >= 0; lca--) {\n if (clipPaths && prevClipPaths\n && clipPaths[lca] === prevClipPaths[lca]) {\n break;\n }\n }\n for (var i_1 = prevLen - 1; i_1 > lca; i_1--) {\n clipPathsGroupsStackDepth--;\n currentClipPathGroup = clipPathsGroupsStack[clipPathsGroupsStackDepth - 1];\n }\n for (var i_2 = lca + 1; i_2 < len; i_2++) {\n var groupAttrs = {};\n setClipPath(clipPaths[i_2], groupAttrs, scope);\n var g = createVNode('g', 'clip-g-' + clipGroupNodeIdx++, groupAttrs, []);\n (currentClipPathGroup ? currentClipPathGroup.children : out).push(g);\n clipPathsGroupsStack[clipPathsGroupsStackDepth++] = g;\n currentClipPathGroup = g;\n }\n prevClipPaths = clipPaths;\n var ret = brush(displayable, scope);\n if (ret) {\n (currentClipPathGroup ? currentClipPathGroup.children : out).push(ret);\n }\n }\n }\n };\n SVGPainter.prototype.resize = function (width, height) {\n var opts = this._opts;\n var root = this.root;\n var viewport = this._viewport;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n if (root && viewport) {\n viewport.style.display = 'none';\n width = getSize(root, 0, opts);\n height = getSize(root, 1, opts);\n viewport.style.display = '';\n }\n if (this._width !== width || this._height !== height) {\n this._width = width;\n this._height = height;\n if (viewport) {\n var viewportStyle = viewport.style;\n viewportStyle.width = width + 'px';\n viewportStyle.height = height + 'px';\n }\n if (!isPattern(this._backgroundColor)) {\n var svgDom = this._svgDom;\n if (svgDom) {\n svgDom.setAttribute('width', width);\n svgDom.setAttribute('height', height);\n }\n var bgEl = this._bgVNode && this._bgVNode.elm;\n if (bgEl) {\n bgEl.setAttribute('width', width);\n bgEl.setAttribute('height', height);\n }\n }\n else {\n this.refresh();\n }\n }\n };\n SVGPainter.prototype.getWidth = function () {\n return this._width;\n };\n SVGPainter.prototype.getHeight = function () {\n return this._height;\n };\n SVGPainter.prototype.dispose = function () {\n if (this.root) {\n this.root.innerHTML = '';\n }\n this._svgDom =\n this._viewport =\n this.storage =\n this._oldVNode =\n this._bgVNode =\n this._mainVNode = null;\n };\n SVGPainter.prototype.clear = function () {\n if (this._svgDom) {\n this._svgDom.innerHTML = null;\n }\n this._oldVNode = null;\n };\n SVGPainter.prototype.toDataURL = function (base64) {\n var str = this.renderToString();\n var prefix = 'data:image/svg+xml;';\n if (base64) {\n str = encodeBase64(str);\n return str && prefix + 'base64,' + str;\n }\n return prefix + 'charset=UTF-8,' + encodeURIComponent(str);\n };\n return SVGPainter;\n}());\nfunction createMethodNotSupport(method) {\n return function () {\n if (process.env.NODE_ENV !== 'production') {\n logError('In SVG mode painter not support method \"' + method + '\"');\n }\n };\n}\nfunction createBackgroundVNode(width, height, backgroundColor, scope) {\n var bgVNode;\n if (backgroundColor && backgroundColor !== 'none') {\n bgVNode = createVNode('rect', 'bg', {\n width: width,\n height: height,\n x: '0',\n y: '0',\n id: '0'\n });\n if (isGradient(backgroundColor)) {\n setGradient({ fill: backgroundColor }, bgVNode.attrs, 'fill', scope);\n }\n else if (isPattern(backgroundColor)) {\n setPattern({\n style: {\n fill: backgroundColor\n },\n dirty: noop,\n getBoundingRect: function () { return ({ width: width, height: height }); }\n }, bgVNode.attrs, 'fill', scope);\n }\n else {\n var _a = normalizeColor(backgroundColor), color = _a.color, opacity = _a.opacity;\n bgVNode.attrs.fill = color;\n opacity < 1 && (bgVNode.attrs['fill-opacity'] = opacity);\n }\n }\n return bgVNode;\n}\nexport default SVGPainter;\n","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport SVGPainter from 'zrender/lib/svg/Painter.js';\nexport function install(registers) {\n registers.registerPainter('svg', SVGPainter);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { parsePercent, linearMap } from '../../util/number.js';\nimport * as layout from '../../util/layout.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\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\nexport function getBasicPieLayout(seriesModel, api) {\n var viewRect = getViewRect(seriesModel, api); // center can be string or number when coordinateSystem is specified\n\n var center = seriesModel.get('center');\n var radius = seriesModel.get('radius');\n\n if (!zrUtil.isArray(radius)) {\n radius = [0, radius];\n }\n\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 r0 = parsePercent(radius[0], size / 2);\n var r = parsePercent(radius[1], size / 2);\n var cx;\n var cy;\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys) {\n // percentage is not allowed when coordinate system is specified\n var point = coordSys.dataToPoint(center);\n cx = point[0] || 0;\n cy = point[1] || 0;\n } else {\n if (!zrUtil.isArray(center)) {\n center = [center, center];\n }\n\n cx = parsePercent(center[0], width) + viewRect.x;\n cy = parsePercent(center[1], height) + viewRect.y;\n }\n\n return {\n cx: cx,\n cy: cy,\n r0: r0,\n r: r\n };\n}\nexport default function pieLayout(seriesType, ecModel, api) {\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var viewRect = getViewRect(seriesModel, api);\n\n var _a = getBasicPieLayout(seriesModel, api),\n cx = _a.cx,\n cy = _a.cy,\n r = _a.r,\n r0 = _a.r0;\n\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.setLayout({\n viewRect: viewRect,\n r: r\n });\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 });\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 });\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_1 = PI2 / validDataCount;\n data.each(valueDim, function (value, idx) {\n if (!isNaN(value)) {\n var layout_1 = data.getItemLayout(idx);\n layout_1.angle = angle_1;\n layout_1.startAngle = startAngle + dir * idx * angle_1;\n layout_1.endAngle = startAngle + dir * (idx + 1) * angle_1;\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_2 = data.getItemLayout(idx);\n var angle = layout_2.angle === minAngle ? minAngle : value * unitRadian;\n layout_2.startAngle = currentAngle;\n layout_2.endAngle = currentAngle + dir * angle;\n currentAngle += dir * angle;\n }\n });\n }\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport default function dataFilter(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 // @ts-ignore FIXME: LegendModel\n if (!legendModels[i].isSelected(name)) {\n return false;\n }\n }\n\n return true;\n });\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// FIXME emphasis label position is not same with normal label position\nimport { parsePercent } from '../../util/number.js';\nimport { Point } from '../../util/graphic.js';\nimport { each, isNumber } from 'zrender/lib/core/util.js';\nimport { limitTurnAngle, limitSurfaceAngle } from '../../label/labelGuideHelper.js';\nimport { shiftLayoutOnY } from '../../label/labelLayoutHelper.js';\nvar RADIAN = Math.PI / 180;\n\nfunction adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft, viewTop, farthestX) {\n if (list.length < 2) {\n return;\n }\n\n ;\n\n function recalculateXOnSemiToAlignOnEllipseCurve(semi) {\n var rB = semi.rB;\n var rB2 = rB * rB;\n\n for (var i = 0; i < semi.list.length; i++) {\n var item = semi.list[i];\n var dy = Math.abs(item.label.y - cy); // horizontal r is always same with original r because x is not changed.\n\n var rA = r + item.len;\n var rA2 = rA * rA; // Use ellipse implicit function to calculate x\n\n var dx = Math.sqrt((1 - Math.abs(dy * dy / rB2)) * rA2);\n var newX = cx + (dx + item.len2) * dir;\n var deltaX = newX - item.label.x;\n var newTargetWidth = item.targetTextWidth - deltaX * dir; // text x is changed, so need to recalculate width.\n\n constrainTextWidth(item, newTargetWidth, true);\n item.label.x = newX;\n }\n } // Adjust X based on the shifted y. Make tight labels aligned on an ellipse curve.\n\n\n function recalculateX(items) {\n // Extremes of\n var topSemi = {\n list: [],\n maxY: 0\n };\n var bottomSemi = {\n list: [],\n maxY: 0\n };\n\n for (var i = 0; i < items.length; i++) {\n if (items[i].labelAlignTo !== 'none') {\n continue;\n }\n\n var item = items[i];\n var semi = item.label.y > cy ? bottomSemi : topSemi;\n var dy = Math.abs(item.label.y - cy);\n\n if (dy >= semi.maxY) {\n var dx = item.label.x - cx - item.len2 * dir; // horizontal r is always same with original r because x is not changed.\n\n var rA = r + item.len; // Canculate rB based on the topest / bottemest label.\n\n var rB = Math.abs(dx) < rA ? Math.sqrt(dy * dy / (1 - dx * dx / rA / rA)) : rA;\n semi.rB = rB;\n semi.maxY = dy;\n }\n\n semi.list.push(item);\n }\n\n recalculateXOnSemiToAlignOnEllipseCurve(topSemi);\n recalculateXOnSemiToAlignOnEllipseCurve(bottomSemi);\n }\n\n var len = list.length;\n\n for (var i = 0; i < len; i++) {\n if (list[i].position === 'outer' && list[i].labelAlignTo === 'labelLine') {\n var dx = list[i].label.x - farthestX;\n list[i].linePoints[1][0] += dx;\n list[i].label.x = farthestX;\n }\n }\n\n if (shiftLayoutOnY(list, viewTop, viewTop + viewHeight)) {\n recalculateX(list);\n }\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 var label = labelLayoutList[i].label;\n\n if (isPositionCenter(labelLayoutList[i])) {\n continue;\n }\n\n if (label.x < cx) {\n leftmostX = Math.min(leftmostX, label.x);\n leftList.push(labelLayoutList[i]);\n } else {\n rightmostX = Math.max(rightmostX, label.x);\n rightList.push(labelLayoutList[i]);\n }\n }\n\n for (var i = 0; i < labelLayoutList.length; i++) {\n var layout = labelLayoutList[i];\n\n if (!isPositionCenter(layout) && layout.linePoints) {\n if (layout.labelStyleWidth != null) {\n continue;\n }\n\n var label = layout.label;\n var linePoints = layout.linePoints;\n var targetTextWidth = void 0;\n\n if (layout.labelAlignTo === 'edge') {\n if (label.x < cx) {\n targetTextWidth = linePoints[2][0] - layout.labelDistance - viewLeft - layout.edgeDistance;\n } else {\n targetTextWidth = viewLeft + viewWidth - layout.edgeDistance - linePoints[2][0] - layout.labelDistance;\n }\n } else if (layout.labelAlignTo === 'labelLine') {\n if (label.x < cx) {\n targetTextWidth = leftmostX - viewLeft - layout.bleedMargin;\n } else {\n targetTextWidth = viewLeft + viewWidth - rightmostX - layout.bleedMargin;\n }\n } else {\n if (label.x < cx) {\n targetTextWidth = label.x - viewLeft - layout.bleedMargin;\n } else {\n targetTextWidth = viewLeft + viewWidth - label.x - layout.bleedMargin;\n }\n }\n\n layout.targetTextWidth = targetTextWidth;\n constrainTextWidth(layout, targetTextWidth);\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) && layout.linePoints) {\n var label = layout.label;\n var linePoints = layout.linePoints;\n var isAlignToEdge = layout.labelAlignTo === 'edge';\n var padding = label.style.padding;\n var paddingH = padding ? padding[1] + padding[3] : 0; // textRect.width already contains paddingH if bgColor is set\n\n var extraPaddingH = label.style.backgroundColor ? 0 : paddingH;\n var realTextWidth = layout.rect.width + extraPaddingH;\n var dist = linePoints[1][0] - linePoints[2][0];\n\n if (isAlignToEdge) {\n if (label.x < cx) {\n linePoints[2][0] = viewLeft + layout.edgeDistance + realTextWidth + layout.labelDistance;\n } else {\n linePoints[2][0] = viewLeft + viewWidth - layout.edgeDistance - realTextWidth - layout.labelDistance;\n }\n } else {\n if (label.x < cx) {\n linePoints[2][0] = label.x + layout.labelDistance;\n } else {\n linePoints[2][0] = label.x - layout.labelDistance;\n }\n\n linePoints[1][0] = linePoints[2][0] + dist;\n }\n\n linePoints[1][1] = linePoints[2][1] = label.y;\n }\n }\n}\n/**\n * Set max width of each label, and then wrap each label to the max width.\n *\n * @param layout label layout\n * @param availableWidth max width for the label to display\n * @param forceRecalculate recaculate the text layout even if the current width\n * is smaller than `availableWidth`. This is useful when the text was previously\n * wrapped by calling `constrainTextWidth` but now `availableWidth` changed, in\n * which case, previous wrapping should be redo.\n */\n\n\nfunction constrainTextWidth(layout, availableWidth, forceRecalculate) {\n if (forceRecalculate === void 0) {\n forceRecalculate = false;\n }\n\n if (layout.labelStyleWidth != null) {\n // User-defined style.width has the highest priority.\n return;\n }\n\n var label = layout.label;\n var style = label.style;\n var textRect = layout.rect;\n var bgColor = style.backgroundColor;\n var padding = style.padding;\n var paddingH = padding ? padding[1] + padding[3] : 0;\n var overflow = style.overflow; // textRect.width already contains paddingH if bgColor is set\n\n var oldOuterWidth = textRect.width + (bgColor ? 0 : paddingH);\n\n if (availableWidth < oldOuterWidth || forceRecalculate) {\n var oldHeight = textRect.height;\n\n if (overflow && overflow.match('break')) {\n // Temporarily set background to be null to calculate\n // the bounding box without background.\n label.setStyle('backgroundColor', null); // Set constraining width\n\n label.setStyle('width', availableWidth - paddingH); // This is the real bounding box of the text without padding.\n\n var innerRect = label.getBoundingRect();\n label.setStyle('width', Math.ceil(innerRect.width));\n label.setStyle('backgroundColor', bgColor);\n } else {\n var availableInnerWidth = availableWidth - paddingH;\n var newWidth = availableWidth < oldOuterWidth // Current text is too wide, use `availableWidth` as max width.\n ? availableInnerWidth : // Current available width is enough, but the text may have\n // already been wrapped with a smaller available width.\n forceRecalculate ? availableInnerWidth > layout.unconstrainedWidth // Current available is larger than text width,\n // so don't constrain width (otherwise it may have\n // empty space in the background).\n ? null // Current available is smaller than text width, so\n // use the current available width as constraining\n // width.\n : availableInnerWidth : // Current available width is enough, so no need to\n // constrain.\n null;\n label.setStyle('width', newWidth);\n }\n\n var newRect = label.getBoundingRect();\n textRect.width = newRect.width;\n var margin = (label.style.margin || 0) + 2.1;\n textRect.height = newRect.height + margin;\n textRect.y -= (textRect.height - oldHeight) / 2;\n }\n}\n\nfunction isPositionCenter(sectorShape) {\n // Not change x for center label\n return sectorShape.position === 'center';\n}\n\nexport default function pieLabelLayout(seriesModel) {\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 var viewRect = data.getLayout('viewRect');\n var r = data.getLayout('r');\n var viewWidth = viewRect.width;\n var viewLeft = viewRect.x;\n var viewTop = viewRect.y;\n var viewHeight = viewRect.height;\n\n function setNotShow(el) {\n el.ignore = true;\n }\n\n function isLabelShown(label) {\n if (!label.ignore) {\n return true;\n }\n\n for (var key in label.states) {\n if (label.states[key].ignore === false) {\n return true;\n }\n }\n\n return false;\n }\n\n data.each(function (idx) {\n var sector = data.getItemGraphicEl(idx);\n var sectorShape = sector.shape;\n var label = sector.getTextContent();\n var labelLine = sector.getTextGuideLine();\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 edgeDistance = parsePercent(labelModel.get('edgeDistance'), viewWidth);\n var bleedMargin = labelModel.get('bleedMargin');\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 (Math.abs(sectorShape.endAngle - sectorShape.startAngle) < minShowLabelRadian) {\n each(label.states, setNotShow);\n label.ignore = true;\n\n if (labelLine) {\n each(labelLine.states, setNotShow);\n labelLine.ignore = true;\n }\n\n return;\n }\n\n if (!isLabelShown(label)) {\n return;\n }\n\n var midAngle = (sectorShape.startAngle + sectorShape.endAngle) / 2;\n var nx = Math.cos(midAngle);\n var ny = Math.sin(midAngle);\n var textX;\n var textY;\n var linePoints;\n var textAlign;\n cx = sectorShape.cx;\n cy = sectorShape.cy;\n var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';\n\n if (labelPosition === 'center') {\n textX = sectorShape.cx;\n textY = sectorShape.cy;\n textAlign = 'center';\n } else {\n var x1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * nx : sectorShape.r * nx) + cx;\n var y1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * ny : sectorShape.r * ny) + cy;\n textX = x1 + nx * 3;\n textY = y1 + ny * 3;\n\n if (!isLabelInside) {\n // For roseType\n var x2 = x1 + nx * (labelLineLen + r - sectorShape.r);\n var y2 = y1 + ny * (labelLineLen + r - sectorShape.r);\n var x3 = x2 + (nx < 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 = nx < 0 ? viewLeft + edgeDistance : viewLeft + viewWidth - edgeDistance;\n } else {\n textX = x3 + (nx < 0 ? -labelDistance : labelDistance);\n }\n\n textY = y3;\n linePoints = [[x1, y1], [x2, y2], [x3, y3]];\n }\n\n textAlign = isLabelInside ? 'center' : labelAlignTo === 'edge' ? nx > 0 ? 'right' : 'left' : nx > 0 ? 'left' : 'right';\n }\n\n var PI = Math.PI;\n var labelRotate = 0;\n var rotate = labelModel.get('rotate');\n\n if (isNumber(rotate)) {\n labelRotate = rotate * (PI / 180);\n } else if (labelPosition === 'center') {\n labelRotate = 0;\n } else if (rotate === 'radial' || rotate === true) {\n var radialAngle = nx < 0 ? -midAngle + PI : -midAngle;\n labelRotate = radialAngle;\n } else if (rotate === 'tangential' && labelPosition !== 'outside' && labelPosition !== 'outer') {\n var rad = Math.atan2(nx, ny);\n\n if (rad < 0) {\n rad = PI * 2 + rad;\n }\n\n var isDown = ny > 0;\n\n if (isDown) {\n rad = PI + rad;\n }\n\n labelRotate = rad - PI;\n }\n\n hasLabelRotate = !!labelRotate;\n label.x = textX;\n label.y = textY;\n label.rotation = labelRotate;\n label.setStyle({\n verticalAlign: 'middle'\n }); // Not sectorShape the inside label\n\n if (!isLabelInside) {\n var textRect = label.getBoundingRect().clone();\n textRect.applyTransform(label.getComputedTransform()); // Text has a default 1px stroke. Exclude this.\n\n var margin = (label.style.margin || 0) + 2.1;\n textRect.y -= margin / 2;\n textRect.height += margin;\n labelLayoutList.push({\n label: label,\n labelLine: labelLine,\n position: labelPosition,\n len: labelLineLen,\n len2: labelLineLen2,\n minTurnAngle: labelLineModel.get('minTurnAngle'),\n maxSurfaceAngle: labelLineModel.get('maxSurfaceAngle'),\n surfaceNormal: new Point(nx, ny),\n linePoints: linePoints,\n textAlign: textAlign,\n labelDistance: labelDistance,\n labelAlignTo: labelAlignTo,\n edgeDistance: edgeDistance,\n bleedMargin: bleedMargin,\n rect: textRect,\n unconstrainedWidth: textRect.width,\n labelStyleWidth: label.style.width\n });\n } else {\n label.setStyle({\n align: textAlign\n });\n var selectState = label.states.select;\n\n if (selectState) {\n selectState.x += label.x;\n selectState.y += label.y;\n }\n }\n\n sector.setTextConfig({\n inside: isLabelInside\n });\n });\n\n if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) {\n avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop);\n }\n\n for (var i = 0; i < labelLayoutList.length; i++) {\n var layout = labelLayoutList[i];\n var label = layout.label;\n var labelLine = layout.labelLine;\n var notShowLabel = isNaN(label.x) || isNaN(label.y);\n\n if (label) {\n label.setStyle({\n align: layout.textAlign\n });\n\n if (notShowLabel) {\n each(label.states, setNotShow);\n label.ignore = true;\n }\n\n var selectState = label.states.select;\n\n if (selectState) {\n selectState.x += label.x;\n selectState.y += label.y;\n }\n }\n\n if (labelLine) {\n var linePoints = layout.linePoints;\n\n if (notShowLabel || !linePoints) {\n each(labelLine.states, setNotShow);\n labelLine.ignore = true;\n } else {\n limitTurnAngle(linePoints, layout.minTurnAngle);\n limitSurfaceAngle(linePoints, layout.surfaceNormal, layout.maxSurfaceAngle);\n labelLine.setShape({\n points: linePoints\n }); // Set the anchor to the midpoint of sector\n\n label.__hostTarget.textGuideLineConfig = {\n anchor: new Point(linePoints[0][0], linePoints[0][1])\n };\n }\n }\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isArray, map } from 'zrender/lib/core/util.js';\nimport { parsePercent } from 'zrender/lib/contain/text.js';\nexport function getSectorCornerRadius(model, shape, zeroIfNull) {\n var cornerRadius = model.get('borderRadius');\n\n if (cornerRadius == null) {\n return zeroIfNull ? {\n cornerRadius: 0\n } : null;\n }\n\n if (!isArray(cornerRadius)) {\n cornerRadius = [cornerRadius, cornerRadius, cornerRadius, cornerRadius];\n }\n\n var dr = Math.abs(shape.r || 0 - shape.r0 || 0);\n return {\n cornerRadius: map(cornerRadius, function (cr) {\n return parsePercent(cr, dr);\n })\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { extend, retrieve3 } from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';\nimport ChartView from '../../view/Chart.js';\nimport labelLayout from './labelLayout.js';\nimport { setLabelLineStyle, getLabelLineStatesModels } from '../../label/labelGuideHelper.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { getSectorCornerRadius } from '../helper/pieHelper.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\nimport { getBasicPieLayout } from './pieLayout.js';\n/**\n * Piece of pie including Sector, Label, LabelLine\n */\n\nvar PiePiece =\n/** @class */\nfunction (_super) {\n __extends(PiePiece, _super);\n\n function PiePiece(data, idx, startAngle) {\n var _this = _super.call(this) || this;\n\n _this.z2 = 2;\n var text = new graphic.Text();\n\n _this.setTextContent(text);\n\n _this.updateData(data, idx, startAngle, true);\n\n return _this;\n }\n\n PiePiece.prototype.updateData = function (data, idx, startAngle, firstCreate) {\n var sector = this;\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var emphasisModel = itemModel.getModel('emphasis');\n var layout = data.getItemLayout(idx); // cornerRadius & innerCornerRadius doesn't exist in the item layout. Use `0` if null value is specified.\n // see `setItemLayout` in `pieLayout.ts`.\n\n var sectorShape = extend(getSectorCornerRadius(itemModel.getModel('itemStyle'), layout, true), layout); // Ignore NaN data.\n\n if (isNaN(sectorShape.startAngle)) {\n // Use NaN shape to avoid drawing shape.\n sector.setShape(sectorShape);\n return;\n }\n\n if (firstCreate) {\n sector.setShape(sectorShape);\n var animationType = seriesModel.getShallow('animationType');\n\n if (seriesModel.ecModel.ssr) {\n // Use scale animation in SSR mode(opacity?)\n // Because CSS SVG animation doesn't support very customized shape animation.\n graphic.initProps(sector, {\n scaleX: 0,\n scaleY: 0\n }, seriesModel, {\n dataIndex: idx,\n isFrom: true\n });\n sector.originX = sectorShape.cx;\n sector.originY = sectorShape.cy;\n } else 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 if (startAngle != null) {\n sector.setShape({\n startAngle: startAngle,\n endAngle: startAngle\n });\n graphic.initProps(sector, {\n shape: {\n startAngle: layout.startAngle,\n endAngle: layout.endAngle\n }\n }, seriesModel, idx);\n } else {\n sector.shape.endAngle = layout.startAngle;\n graphic.updateProps(sector, {\n shape: {\n endAngle: layout.endAngle\n }\n }, seriesModel, idx);\n }\n }\n } else {\n saveOldStyle(sector); // Transition animation from the old shape\n\n graphic.updateProps(sector, {\n shape: sectorShape\n }, seriesModel, idx);\n }\n\n sector.useStyle(data.getItemVisual(idx, 'style'));\n setStatesStylesFromModel(sector, itemModel);\n var midAngle = (layout.startAngle + layout.endAngle) / 2;\n var offset = seriesModel.get('selectedOffset');\n var dx = Math.cos(midAngle) * offset;\n var dy = Math.sin(midAngle) * offset;\n var cursorStyle = itemModel.getShallow('cursor');\n cursorStyle && sector.attr('cursor', cursorStyle);\n\n this._updateLabel(seriesModel, data, idx);\n\n sector.ensureState('emphasis').shape = extend({\n r: layout.r + (emphasisModel.get('scale') ? emphasisModel.get('scaleSize') || 0 : 0)\n }, getSectorCornerRadius(emphasisModel.getModel('itemStyle'), layout));\n extend(sector.ensureState('select'), {\n x: dx,\n y: dy,\n shape: getSectorCornerRadius(itemModel.getModel(['select', 'itemStyle']), layout)\n });\n extend(sector.ensureState('blur'), {\n shape: getSectorCornerRadius(itemModel.getModel(['blur', 'itemStyle']), layout)\n });\n var labelLine = sector.getTextGuideLine();\n var labelText = sector.getTextContent();\n labelLine && extend(labelLine.ensureState('select'), {\n x: dx,\n y: dy\n }); // TODO: needs dx, dy in zrender?\n\n extend(labelText.ensureState('select'), {\n x: dx,\n y: dy\n });\n toggleHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n };\n\n PiePiece.prototype._updateLabel = function (seriesModel, data, idx) {\n var sector = this;\n var itemModel = data.getItemModel(idx);\n var labelLineModel = itemModel.getModel('labelLine');\n var style = data.getItemVisual(idx, 'style');\n var visualColor = style && style.fill;\n var visualOpacity = style && style.opacity;\n setLabelStyle(sector, getLabelStatesModels(itemModel), {\n labelFetcher: data.hostModel,\n labelDataIndex: idx,\n inheritColor: visualColor,\n defaultOpacity: visualOpacity,\n defaultText: seriesModel.getFormattedLabel(idx, 'normal') || data.getName(idx)\n });\n var labelText = sector.getTextContent(); // Set textConfig on sector.\n\n sector.setTextConfig({\n // reset position, rotation\n position: null,\n rotation: null\n }); // Make sure update style on labelText after setLabelStyle.\n // Because setLabelStyle will replace a new style on it.\n\n labelText.attr({\n z2: 10\n });\n var labelPosition = seriesModel.get(['label', 'position']);\n\n if (labelPosition !== 'outside' && labelPosition !== 'outer') {\n sector.removeTextGuideLine();\n } else {\n var polyline = this.getTextGuideLine();\n\n if (!polyline) {\n polyline = new graphic.Polyline();\n this.setTextGuideLine(polyline);\n } // Default use item visual color\n\n\n setLabelLineStyle(this, getLabelLineStatesModels(itemModel), {\n stroke: visualColor,\n opacity: retrieve3(labelLineModel.get(['lineStyle', 'opacity']), visualOpacity, 1)\n });\n }\n };\n\n return PiePiece;\n}(graphic.Sector); // Pie view\n\n\nvar PieView =\n/** @class */\nfunction (_super) {\n __extends(PieView, _super);\n\n function PieView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.ignoreLabelLineUpdate = true;\n return _this;\n }\n\n PieView.prototype.render = function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var oldData = this._data;\n var group = this.group;\n var startAngle; // First render\n\n if (!oldData && data.count() > 0) {\n var shape = data.getItemLayout(0);\n\n for (var s = 1; isNaN(shape && shape.startAngle) && s < data.count(); ++s) {\n shape = data.getItemLayout(s);\n }\n\n if (shape) {\n startAngle = shape.startAngle;\n }\n } // remove empty-circle if it exists\n\n\n if (this._emptyCircleSector) {\n group.remove(this._emptyCircleSector);\n } // when all data are filtered, show lightgray empty circle\n\n\n if (data.count() === 0 && seriesModel.get('showEmptyCircle')) {\n var sector = new graphic.Sector({\n shape: getBasicPieLayout(seriesModel, api)\n });\n sector.useStyle(seriesModel.getModel('emptyCircleStyle').getItemStyle());\n this._emptyCircleSector = sector;\n group.add(sector);\n }\n\n data.diff(oldData).add(function (idx) {\n var piePiece = new PiePiece(data, idx, startAngle);\n data.setItemGraphicEl(idx, piePiece);\n group.add(piePiece);\n }).update(function (newIdx, oldIdx) {\n var piePiece = oldData.getItemGraphicEl(oldIdx);\n piePiece.updateData(data, newIdx, startAngle);\n piePiece.off('click');\n group.add(piePiece);\n data.setItemGraphicEl(newIdx, piePiece);\n }).remove(function (idx) {\n var piePiece = oldData.getItemGraphicEl(idx);\n graphic.removeElementWithFadeOut(piePiece, seriesModel, idx);\n }).execute();\n labelLayout(seriesModel); // Always use initial animation.\n\n if (seriesModel.get('animationTypeUpdate') !== 'expansion') {\n this._data = data;\n }\n };\n\n PieView.prototype.dispose = function () {};\n\n PieView.prototype.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\n PieView.type = 'pie';\n return PieView;\n}(ChartView);\n\nexport default PieView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport prepareSeriesDataSchema from '../../data/helper/createDimensions.js';\nimport SeriesData from '../../data/SeriesData.js';\nimport { extend, isArray } from 'zrender/lib/core/util.js';\n/**\n * [Usage]:\n * (1)\n * createListSimply(seriesModel, ['value']);\n * (2)\n * createListSimply(seriesModel, {\n * coordDimensions: ['value'],\n * dimensionsCount: 5\n * });\n */\n\nexport default function createSeriesDataSimply(seriesModel, opt, nameList) {\n opt = isArray(opt) && {\n coordDimensions: opt\n } || extend({\n encodeDefine: seriesModel.getEncode()\n }, opt);\n var source = seriesModel.getSource();\n var dimensions = prepareSeriesDataSchema(source, opt).dimensions;\n var list = new SeriesData(dimensions, seriesModel);\n list.initData(source, nameList);\n return list;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * LegendVisualProvider is an bridge that pick encoded color from data and\n * provide to the legend component.\n */\nvar LegendVisualProvider =\n/** @class */\nfunction () {\n function LegendVisualProvider( // Function to get data after filtered. It stores all the encoding info\n getDataWithEncodedVisual, // Function to get raw data before filtered.\n getRawData) {\n this._getDataWithEncodedVisual = getDataWithEncodedVisual;\n this._getRawData = getRawData;\n }\n\n LegendVisualProvider.prototype.getAllNames = function () {\n var rawData = this._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\n return rawData.mapArray(rawData.getName);\n };\n\n LegendVisualProvider.prototype.containName = function (name) {\n var rawData = this._getRawData();\n\n return rawData.indexOfName(name) >= 0;\n };\n\n LegendVisualProvider.prototype.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 = this._getDataWithEncodedVisual();\n\n return dataWithEncodedVisual.indexOfName(name);\n };\n\n LegendVisualProvider.prototype.getItemVisual = function (dataIndex, key) {\n // Get encoded visual properties from final filtered data.\n var dataWithEncodedVisual = this._getDataWithEncodedVisual();\n\n return dataWithEncodedVisual.getItemVisual(dataIndex, key);\n };\n\n return LegendVisualProvider;\n}();\n\nexport default LegendVisualProvider;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as modelUtil from '../../util/model.js';\nimport { getPercentSeats } from '../../util/number.js';\nimport { makeSeriesEncodeForNameBased } from '../../data/helper/sourceHelper.js';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider.js';\nimport SeriesModel from '../../model/Series.js';\nvar innerData = modelUtil.makeInner();\n\nvar PieSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(PieSeriesModel, _super);\n\n function PieSeriesModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @overwrite\n */\n\n\n PieSeriesModel.prototype.init = function (option) {\n _super.prototype.init.apply(this, arguments); // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\n\n this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));\n\n this._defaultLabelLine(option);\n };\n /**\n * @overwrite\n */\n\n\n PieSeriesModel.prototype.mergeOption = function () {\n _super.prototype.mergeOption.apply(this, arguments);\n };\n /**\n * @overwrite\n */\n\n\n PieSeriesModel.prototype.getInitialData = function () {\n return createSeriesDataSimply(this, {\n coordDimensions: ['value'],\n encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)\n });\n };\n /**\n * @overwrite\n */\n\n\n PieSeriesModel.prototype.getDataParams = function (dataIndex) {\n var data = this.getData(); // update seats when data is changed\n\n var dataInner = innerData(data);\n var seats = dataInner.seats;\n\n if (!seats) {\n var valueList_1 = [];\n data.each(data.mapDimension('value'), function (value) {\n valueList_1.push(value);\n });\n seats = dataInner.seats = getPercentSeats(valueList_1, data.hostModel.get('percentPrecision'));\n }\n\n var params = _super.prototype.getDataParams.call(this, dataIndex); // seats may be empty when sum is 0\n\n\n params.percent = seats[dataIndex] || 0;\n params.$vars.push('percent');\n return params;\n };\n\n PieSeriesModel.prototype._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\n PieSeriesModel.type = 'series.pie';\n PieSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n legendHoverLink: true,\n colorBy: 'data',\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 // 选择模式,默认关闭,可选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 // color: 'inherit',\n // If rotate around circle\n rotate: 0,\n show: true,\n overflow: 'truncate',\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 edgeDistance: '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 minTurnAngle: 90,\n maxSurfaceAngle: 90,\n lineStyle: {\n // color: 各异,\n width: 1,\n type: 'solid'\n }\n },\n itemStyle: {\n borderWidth: 1,\n borderJoin: 'round'\n },\n showEmptyCircle: true,\n emptyCircleStyle: {\n color: 'lightgray',\n opacity: 1\n },\n labelLayout: {\n // Hide the overlapped label.\n hideOverlap: true\n },\n emphasis: {\n scale: true,\n scaleSize: 5\n },\n // If use strategy to avoid label overlapping\n avoidLabelOverlap: true,\n // Animation type. Valid values: expansion, scale\n animationType: 'expansion',\n animationDuration: 1000,\n // Animation type when update. Valid values: transition, expansion\n animationTypeUpdate: 'transition',\n animationEasingUpdate: 'cubicInOut',\n animationDurationUpdate: 500,\n animationEasing: 'cubicInOut'\n };\n return PieSeriesModel;\n}(SeriesModel);\n\nexport default PieSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isNumber } from 'zrender/lib/core/util.js';\nexport default function negativeDataFilter(seriesType) {\n return {\n seriesType: seriesType,\n reset: function (seriesModel, ecModel) {\n var data = seriesModel.getData();\n data.filterSelf(function (idx) {\n // handle negative value condition\n var valueDim = data.mapDimension('value');\n var curValue = data.get(valueDim, idx);\n\n if (isNumber(curValue) && !isNaN(curValue) && curValue < 0) {\n return false;\n }\n\n return true;\n });\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createLegacyDataSelectAction } from '../../legacy/dataSelectAction.js';\nimport pieLayout from '../pie/pieLayout.js';\nimport dataFilter from '../../processor/dataFilter.js';\nimport { curry } from 'zrender/lib/core/util.js';\nimport PieView from './PieView.js';\nimport PieSeriesModel from './PieSeries.js';\nimport negativeDataFilter from '../../processor/negativeDataFilter.js';\nexport function install(registers) {\n registers.registerChartView(PieView);\n registers.registerSeriesModel(PieSeriesModel);\n createLegacyDataSelectAction('pie', registers.registerAction);\n registers.registerLayout(curry(pieLayout, 'pie'));\n registers.registerProcessor(dataFilter('pie'));\n registers.registerProcessor(negativeDataFilter('pie'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport createSeriesData from '../helper/createSeriesData.js';\nimport SeriesModel from '../../model/Series.js';\n\nvar ScatterSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(ScatterSeriesModel, _super);\n\n function ScatterSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ScatterSeriesModel.type;\n _this.hasSymbolVisual = true;\n return _this;\n }\n\n ScatterSeriesModel.prototype.getInitialData = function (option, ecModel) {\n return createSeriesData(null, this, {\n useEncodeDefaulter: true\n });\n };\n\n ScatterSeriesModel.prototype.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\n ScatterSeriesModel.prototype.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\n ScatterSeriesModel.prototype.brushSelector = function (dataIndex, data, selectors) {\n return selectors.point(data.getItemLayout(dataIndex));\n };\n\n ScatterSeriesModel.prototype.getZLevelKey = function () {\n // Each progressive series has individual key.\n return this.getData().count() > this.getProgressiveThreshold() ? this.id : '';\n };\n\n ScatterSeriesModel.type = 'series.scatter';\n ScatterSeriesModel.dependencies = ['grid', 'polar', 'geo', 'singleAxis', 'calendar'];\n ScatterSeriesModel.defaultOption = {\n coordinateSystem: 'cartesian2d',\n // zlevel: 0,\n z: 2,\n legendHoverLink: true,\n symbolSize: 10,\n // symbolRotate: null, // 图形旋转控制\n large: false,\n // Available when large is true\n largeThreshold: 2000,\n // cursor: null,\n itemStyle: {\n opacity: 0.8 // color: 各异\n\n },\n emphasis: {\n scale: true\n },\n // If clip the overflow graphics\n // Works on cartesian / polar series\n clip: true,\n select: {\n itemStyle: {\n borderColor: '#212121'\n }\n },\n universalTransition: {\n divideShape: 'clone'\n } // progressive: null\n\n };\n return ScatterSeriesModel;\n}(SeriesModel);\n\nexport default ScatterSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/* global Float32Array */\n// TODO Batch by color\n\nimport * as graphic from '../../util/graphic.js';\nimport { createSymbol } from '../../util/symbol.js';\nimport { getECData } from '../../util/innerStore.js';\nvar BOOST_SIZE_THRESHOLD = 4;\n\nvar LargeSymbolPathShape =\n/** @class */\nfunction () {\n function LargeSymbolPathShape() {}\n\n return LargeSymbolPathShape;\n}();\n\nvar LargeSymbolPath =\n/** @class */\nfunction (_super) {\n __extends(LargeSymbolPath, _super);\n\n function LargeSymbolPath(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this._off = 0;\n _this.hoverDataIdx = -1;\n return _this;\n }\n\n LargeSymbolPath.prototype.getDefaultShape = function () {\n return new LargeSymbolPathShape();\n };\n\n LargeSymbolPath.prototype.reset = function () {\n this.notClear = false;\n this._off = 0;\n };\n\n LargeSymbolPath.prototype.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;\n var softClipShape = this.softClipShape;\n var i; // Do draw in afterBrush.\n\n if (canBoost) {\n this._ctx = ctx;\n return;\n }\n\n this._ctx = null;\n\n for (i = this._off; 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 (softClipShape && !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 if (this.incremental) {\n this._off = i;\n this.notClear = true;\n }\n };\n\n LargeSymbolPath.prototype.afterBrush = function () {\n var shape = this.shape;\n var points = shape.points;\n var size = shape.size;\n var ctx = this._ctx;\n var softClipShape = this.softClipShape;\n var i;\n\n if (!ctx) {\n return;\n } // PENDING If style or other canvas status changed?\n\n\n for (i = this._off; 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 (softClipShape && !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 if (this.incremental) {\n this._off = i;\n this.notClear = true;\n }\n };\n\n LargeSymbolPath.prototype.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 LargeSymbolPath.prototype.contain = function (x, y) {\n var localPos = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n x = localPos[0];\n y = localPos[1];\n\n if (rect.contain(x, y)) {\n // Cache found data index.\n var dataIdx = this.hoverDataIdx = this.findDataIndex(x, y);\n return dataIdx >= 0;\n }\n\n this.hoverDataIdx = -1;\n return false;\n };\n\n LargeSymbolPath.prototype.getBoundingRect = function () {\n // Ignore stroke for large symbol draw.\n var rect = this._rect;\n\n if (!rect) {\n var shape = this.shape;\n var points = shape.points;\n var size = shape.size;\n var w = size[0];\n var h = size[1];\n var minX = Infinity;\n var minY = Infinity;\n var maxX = -Infinity;\n var maxY = -Infinity;\n\n for (var i = 0; i < points.length;) {\n var x = points[i++];\n var y = points[i++];\n minX = Math.min(x, minX);\n maxX = Math.max(x, maxX);\n minY = Math.min(y, minY);\n maxY = Math.max(y, maxY);\n }\n\n rect = this._rect = new graphic.BoundingRect(minX - w / 2, minY - h / 2, maxX - minX + w, maxY - minY + h);\n }\n\n return rect;\n };\n\n return LargeSymbolPath;\n}(graphic.Path);\n\nvar LargeSymbolDraw =\n/** @class */\nfunction () {\n function LargeSymbolDraw() {\n this.group = new graphic.Group();\n }\n /**\n * Update symbols draw by new data\n */\n\n\n LargeSymbolDraw.prototype.updateData = function (data, opt) {\n this._clear();\n\n var symbolEl = this._create();\n\n symbolEl.setShape({\n points: data.getLayout('points')\n });\n\n this._setCommon(symbolEl, data, opt);\n };\n\n LargeSymbolDraw.prototype.updateLayout = function (data) {\n var points = data.getLayout('points');\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); // Reset draw cursor.\n\n child.reset();\n });\n };\n\n LargeSymbolDraw.prototype.incrementalPrepareUpdate = function (data) {\n this._clear();\n };\n\n LargeSymbolDraw.prototype.incrementalUpdate = function (taskParams, data, opt) {\n var lastAdded = this._newAdded[0];\n var points = data.getLayout('points');\n var oldPoints = lastAdded && lastAdded.shape.points; // Merging the exists. Each element has 1e4 points.\n // Consider the performance balance between too much elements and too much points in one shape(may affect hover optimization)\n\n if (oldPoints && oldPoints.length < 2e4) {\n var oldLen = oldPoints.length;\n var newPoints = new Float32Array(oldLen + points.length); // Concat two array\n\n newPoints.set(oldPoints);\n newPoints.set(points, oldLen); // Update endIndex\n\n lastAdded.endIndex = taskParams.end;\n lastAdded.setShape({\n points: newPoints\n });\n } else {\n // Clear\n this._newAdded = [];\n\n var symbolEl = this._create();\n\n symbolEl.startIndex = taskParams.start;\n symbolEl.endIndex = taskParams.end;\n symbolEl.incremental = true;\n symbolEl.setShape({\n points: points\n });\n\n this._setCommon(symbolEl, data, opt);\n }\n };\n\n LargeSymbolDraw.prototype.eachRendered = function (cb) {\n this._newAdded[0] && cb(this._newAdded[0]);\n };\n\n LargeSymbolDraw.prototype._create = function () {\n var symbolEl = new LargeSymbolPath({\n cursor: 'default'\n });\n symbolEl.ignoreCoarsePointer = true;\n this.group.add(symbolEl);\n\n this._newAdded.push(symbolEl);\n\n return symbolEl;\n };\n\n LargeSymbolDraw.prototype._setCommon = function (symbolEl, data, opt) {\n var hostModel = data.hostModel;\n opt = opt || {};\n var size = data.getVisual('symbolSize');\n symbolEl.setShape('size', size instanceof Array ? size : [size, size]);\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 globalStyle = data.getVisual('style');\n var visualColor = globalStyle && globalStyle.fill;\n\n if (visualColor) {\n symbolEl.setColor(visualColor);\n }\n\n var ecData = getECData(symbolEl); // Enable tooltip\n // PENDING May have performance issue when path is extremely large\n\n ecData.seriesIndex = hostModel.seriesIndex;\n symbolEl.on('mousemove', function (e) {\n ecData.dataIndex = null;\n var dataIndex = symbolEl.hoverDataIdx;\n\n if (dataIndex >= 0) {\n // Provide dataIndex for tooltip\n ecData.dataIndex = dataIndex + (symbolEl.startIndex || 0);\n }\n });\n };\n\n LargeSymbolDraw.prototype.remove = function () {\n this._clear();\n };\n\n LargeSymbolDraw.prototype._clear = function () {\n this._newAdded = [];\n this.group.removeAll();\n };\n\n return LargeSymbolDraw;\n}();\n\nexport default LargeSymbolDraw;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SymbolDraw from '../helper/SymbolDraw.js';\nimport LargeSymbolDraw from '../helper/LargeSymbolDraw.js';\nimport pointsLayout from '../../layout/points.js';\nimport ChartView from '../../view/Chart.js';\n\nvar ScatterView =\n/** @class */\nfunction (_super) {\n __extends(ScatterView, _super);\n\n function ScatterView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ScatterView.type;\n return _this;\n }\n\n ScatterView.prototype.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\n ScatterView.prototype.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\n ScatterView.prototype.incrementalRender = function (taskParams, seriesModel, ecModel) {\n this._symbolDraw.incrementalUpdate(taskParams, seriesModel.getData(), {\n clipShape: this._getClipShape(seriesModel)\n });\n\n this._finished = taskParams.end === seriesModel.getData().count();\n };\n\n ScatterView.prototype.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) {\n return {\n update: true\n };\n } else {\n var res = pointsLayout('').reset(seriesModel, ecModel, api);\n\n if (res.progress) {\n res.progress({\n start: 0,\n end: data.count(),\n count: data.count()\n }, data);\n }\n\n this._symbolDraw.updateLayout(data);\n }\n };\n\n ScatterView.prototype.eachRendered = function (cb) {\n this._symbolDraw && this._symbolDraw.eachRendered(cb);\n };\n\n ScatterView.prototype._getClipShape = function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n var clipArea = coordSys && coordSys.getArea && coordSys.getArea();\n return seriesModel.get('clip', true) ? clipArea : null;\n };\n\n ScatterView.prototype._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\n ScatterView.prototype.remove = function (ecModel, api) {\n this._symbolDraw && this._symbolDraw.remove(true);\n this._symbolDraw = null;\n };\n\n ScatterView.prototype.dispose = function () {};\n\n ScatterView.type = 'scatter';\n return ScatterView;\n}(ChartView);\n\nexport default ScatterView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension.js';\nimport ScatterSeriesModel from './ScatterSeries.js';\nimport ScatterView from './ScatterView.js';\nimport { install as installGridSimple } from '../../component/grid/installSimple.js';\nimport layoutPoints from '../../layout/points.js';\nexport function install(registers) {\n // In case developer forget to include grid component\n use(installGridSimple);\n registers.registerSeriesModel(ScatterSeriesModel);\n registers.registerChartView(ScatterView);\n registers.registerLayout(layoutPoints('scatter'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nexport default function radarLayout(ecModel) {\n ecModel.eachSeriesByType('radar', function (seriesModel) {\n var data = seriesModel.getData();\n var points = [];\n var coordSys = seriesModel.coordinateSystem;\n\n if (!coordSys) {\n return;\n }\n\n var axes = coordSys.getIndicatorAxes();\n zrUtil.each(axes, function (axis, axisIndex) {\n data.each(data.mapDimension(axes[axisIndex].dim), function (val, dataIndex) {\n points[dataIndex] = points[dataIndex] || [];\n var point = coordSys.dataToPoint(val, axisIndex);\n points[dataIndex][axisIndex] = isValidPoint(point) ? point : getValueMissingPoint(coordSys);\n });\n }); // Close polygon\n\n data.each(function (idx) {\n // TODO\n // Is it appropriate to connect to the next data when some data is missing?\n // Or, should trade it like `connectNull` in line chart?\n var firstPoint = zrUtil.find(points[idx], function (point) {\n return isValidPoint(point);\n }) || getValueMissingPoint(coordSys); // Copy the first actual point to the end of the array\n\n points[idx].push(firstPoint.slice());\n data.setItemLayout(idx, points[idx]);\n });\n });\n}\n\nfunction isValidPoint(point) {\n return !isNaN(point[0]) && !isNaN(point[1]);\n}\n\nfunction getValueMissingPoint(coordSys) {\n // It is error-prone to input [NaN, NaN] into polygon, polygon.\n // (probably cause problem when refreshing or animating)\n return [coordSys.cx, coordSys.cy];\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// @ts-nocheck\n// Backward compat for radar chart in 2\nimport * as zrUtil from 'zrender/lib/core/util.js';\nexport default function radarBackwardCompat(option) {\n var polarOptArr = option.polar;\n\n if (polarOptArr) {\n if (!zrUtil.isArray(polarOptArr)) {\n polarOptArr = [polarOptArr];\n }\n\n var polarNotRadar_1 = [];\n zrUtil.each(polarOptArr, function (polarOpt, idx) {\n if (polarOpt.indicator) {\n if (polarOpt.type && !polarOpt.shape) {\n polarOpt.shape = polarOpt.type;\n }\n\n option.radar = option.radar || [];\n\n if (!zrUtil.isArray(option.radar)) {\n option.radar = [option.radar];\n }\n\n option.radar.push(polarOpt);\n } else {\n polarNotRadar_1.push(polarOpt);\n }\n });\n option.polar = polarNotRadar_1;\n }\n\n zrUtil.each(option.series, function (seriesOpt) {\n if (seriesOpt && seriesOpt.type === 'radar' && seriesOpt.polarIndex) {\n seriesOpt.radarIndex = seriesOpt.polarIndex;\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as graphic from '../../util/graphic.js';\nimport { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as symbolUtil from '../../util/symbol.js';\nimport ChartView from '../../view/Chart.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport ZRImage from 'zrender/lib/graphic/Image.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\n\nvar RadarView =\n/** @class */\nfunction (_super) {\n __extends(RadarView, _super);\n\n function RadarView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = RadarView.type;\n return _this;\n }\n\n RadarView.prototype.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\n if (symbolType === 'none') {\n return;\n }\n\n var symbolSize = symbolUtil.normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize'));\n var symbolPath = symbolUtil.createSymbol(symbolType, -1, -1, 2, 2);\n var symbolRotate = data.getItemVisual(idx, 'symbolRotate') || 0;\n symbolPath.attr({\n style: {\n strokeNoScale: true\n },\n z2: 100,\n scaleX: symbolSize[0] / 2,\n scaleY: symbolSize[1] / 2,\n rotation: symbolRotate * Math.PI / 180 || 0\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.setPosition(oldPoints[i]);\n graphic[isInit ? 'initProps' : 'updateProps'](symbolPath, {\n x: newPoints[i][0],\n y: newPoints[i][1]\n }, seriesModel, idx);\n } else {\n symbolPath.setPosition(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 saveOldStyle(polygon);\n saveOldStyle(polyline);\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); // Radar uses the visual encoded from itemStyle.\n\n var itemStyle = data.getItemVisual(idx, 'style');\n var color = itemStyle.fill;\n group.add(itemGroup);\n polyline.useStyle(zrUtil.defaults(itemModel.getModel('lineStyle').getLineStyle(), {\n fill: 'none',\n stroke: color\n }));\n setStatesStylesFromModel(polyline, itemModel, 'lineStyle');\n setStatesStylesFromModel(polygon, itemModel, 'areaStyle');\n var areaStyleModel = itemModel.getModel('areaStyle');\n var polygonIgnore = areaStyleModel.isEmpty() && areaStyleModel.parentModel.isEmpty();\n polygon.ignore = polygonIgnore;\n zrUtil.each(['emphasis', 'select', 'blur'], function (stateName) {\n var stateModel = itemModel.getModel([stateName, 'areaStyle']);\n var stateIgnore = stateModel.isEmpty() && stateModel.parentModel.isEmpty(); // Won't be ignore if normal state is not ignore.\n\n polygon.ensureState(stateName).ignore = stateIgnore && polygonIgnore;\n });\n polygon.useStyle(zrUtil.defaults(areaStyleModel.getAreaStyle(), {\n fill: color,\n opacity: 0.7,\n decal: itemStyle.decal\n }));\n var emphasisModel = itemModel.getModel('emphasis');\n var itemHoverStyle = emphasisModel.getModel('itemStyle').getItemStyle();\n symbolGroup.eachChild(function (symbolPath) {\n if (symbolPath instanceof ZRImage) {\n var pathStyle = symbolPath.style;\n symbolPath.useStyle(zrUtil.extend({\n // TODO other properties like x, y ?\n image: pathStyle.image,\n x: pathStyle.x,\n y: pathStyle.y,\n width: pathStyle.width,\n height: pathStyle.height\n }, itemStyle));\n } else {\n symbolPath.useStyle(itemStyle);\n symbolPath.setColor(color);\n symbolPath.style.strokeNoScale = true;\n }\n\n var pathEmphasisState = symbolPath.ensureState('emphasis');\n pathEmphasisState.style = zrUtil.clone(itemHoverStyle);\n var defaultText = data.getStore().get(data.getDimensionIndex(symbolPath.__dimIdx), idx);\n (defaultText == null || isNaN(defaultText)) && (defaultText = '');\n setLabelStyle(symbolPath, getLabelStatesModels(itemModel), {\n labelFetcher: data.hostModel,\n labelDataIndex: idx,\n labelDimIndex: symbolPath.__dimIdx,\n defaultText: defaultText,\n inheritColor: color,\n defaultOpacity: itemStyle.opacity\n });\n });\n toggleHoverEmphasis(itemGroup, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n });\n this._data = data;\n };\n\n RadarView.prototype.remove = function () {\n this.group.removeAll();\n this._data = null;\n };\n\n RadarView.type = 'radar';\n return RadarView;\n}(ChartView);\n\nexport default RadarView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SeriesModel from '../../model/Series.js';\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider.js';\nimport { createTooltipMarkup, retrieveVisualColorForTooltipMarker } from '../../component/tooltip/tooltipMarkup.js';\n\nvar RadarSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(RadarSeriesModel, _super);\n\n function RadarSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = RadarSeriesModel.type;\n _this.hasSymbolVisual = true;\n return _this;\n } // Overwrite\n\n\n RadarSeriesModel.prototype.init = function (option) {\n _super.prototype.init.apply(this, arguments); // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\n\n this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));\n };\n\n RadarSeriesModel.prototype.getInitialData = function (option, ecModel) {\n return createSeriesDataSimply(this, {\n generateCoord: 'indicator_',\n generateCoordCount: Infinity\n });\n };\n\n RadarSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n var data = this.getData();\n var coordSys = this.coordinateSystem;\n var indicatorAxes = coordSys.getIndicatorAxes();\n var name = this.getData().getName(dataIndex);\n var nameToDisplay = name === '' ? this.name : name;\n var markerColor = retrieveVisualColorForTooltipMarker(this, dataIndex);\n return createTooltipMarkup('section', {\n header: nameToDisplay,\n sortBlocks: true,\n blocks: zrUtil.map(indicatorAxes, function (axis) {\n var val = data.get(data.mapDimension(axis.dim), dataIndex);\n return createTooltipMarkup('nameValue', {\n markerType: 'subItem',\n markerColor: markerColor,\n name: axis.name,\n value: val,\n sortParam: val\n });\n })\n });\n };\n\n RadarSeriesModel.prototype.getTooltipPosition = function (dataIndex) {\n if (dataIndex != null) {\n var data_1 = this.getData();\n var coordSys = this.coordinateSystem;\n var values = data_1.getValues(zrUtil.map(coordSys.dimensions, function (dim) {\n return data_1.mapDimension(dim);\n }), dataIndex);\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\n RadarSeriesModel.type = 'series.radar';\n RadarSeriesModel.dependencies = ['radar'];\n RadarSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n colorBy: 'data',\n coordinateSystem: 'radar',\n legendHoverLink: true,\n radarIndex: 0,\n lineStyle: {\n width: 2,\n type: 'solid',\n join: 'round'\n },\n label: {\n position: 'top'\n },\n // areaStyle: {\n // },\n // itemStyle: {}\n symbolSize: 8 // symbolRotate: null\n\n };\n return RadarSeriesModel;\n}(SeriesModel);\n\nexport default RadarSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport axisDefault from '../axisDefault.js';\nimport Model from '../../model/Model.js';\nimport { AxisModelCommonMixin } from '../axisModelCommonMixin.js';\nimport ComponentModel from '../../model/Component.js';\nvar valueAxisDefault = axisDefault.value;\n\nfunction defaultsShow(opt, show) {\n return zrUtil.defaults({\n show: show\n }, opt);\n}\n\nvar RadarModel =\n/** @class */\nfunction (_super) {\n __extends(RadarModel, _super);\n\n function RadarModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = RadarModel.type;\n return _this;\n }\n\n RadarModel.prototype.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'); // let axisType = this.get('axisType');\n\n var axisLabel = this.get('axisLabel');\n var nameTextStyle = this.get('axisName');\n var showName = this.get(['axisName', 'show']);\n var nameFormatter = this.get(['axisName', 'formatter']);\n var nameGap = this.get('axisNameGap');\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 var innerIndicatorOpt = 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 showName: showName,\n nameLocation: 'end',\n nameGap: nameGap,\n // min: 0,\n nameTextStyle: iNameTextStyle,\n triggerEvent: triggerEvent\n }, false);\n\n if (zrUtil.isString(nameFormatter)) {\n var indName = innerIndicatorOpt.name;\n innerIndicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : '');\n } else if (zrUtil.isFunction(nameFormatter)) {\n innerIndicatorOpt.name = nameFormatter(innerIndicatorOpt.name, innerIndicatorOpt);\n }\n\n var model = new Model(innerIndicatorOpt, null, this.ecModel);\n zrUtil.mixin(model, AxisModelCommonMixin.prototype); // For triggerEvent.\n\n model.mainType = 'radar';\n model.componentIndex = this.componentIndex;\n return model;\n }, this);\n this._indicatorModels = indicatorModels;\n };\n\n RadarModel.prototype.getIndicatorModels = function () {\n return this._indicatorModels;\n };\n\n RadarModel.type = 'radar';\n RadarModel.defaultOption = {\n // zlevel: 0,\n z: 0,\n center: ['50%', '50%'],\n radius: '75%',\n startAngle: 90,\n axisName: {\n show: true // formatter: null\n // textStyle: {}\n\n },\n boundaryGap: [0, 0],\n splitNumber: 5,\n axisNameGap: 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: 'value',\n splitLine: defaultsShow(valueAxisDefault.splitLine, true),\n splitArea: defaultsShow(valueAxisDefault.splitArea, true),\n // {text, min, max}\n indicator: []\n };\n return RadarModel;\n}(ComponentModel);\n\nexport default RadarModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport AxisBuilder from '../axis/AxisBuilder.js';\nimport * as graphic from '../../util/graphic.js';\nimport ComponentView from '../../view/Component.js';\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\n\nvar RadarView =\n/** @class */\nfunction (_super) {\n __extends(RadarView, _super);\n\n function RadarView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = RadarView.type;\n return _this;\n }\n\n RadarView.prototype.render = function (radarModel, ecModel, api) {\n var group = this.group;\n group.removeAll();\n\n this._buildAxes(radarModel);\n\n this._buildSplitLineAndArea(radarModel);\n };\n\n RadarView.prototype._buildAxes = function (radarModel) {\n var radar = radarModel.coordinateSystem;\n var indicatorAxes = radar.getIndicatorAxes();\n var axisBuilders = zrUtil.map(indicatorAxes, function (indicatorAxis) {\n var axisName = indicatorAxis.model.get('showName') ? indicatorAxis.name : ''; // hide name\n\n var axisBuilder = new AxisBuilder(indicatorAxis.model, {\n axisName: axisName,\n position: [radar.cx, radar.cy],\n rotation: indicatorAxis.angle,\n labelDirection: -1,\n tickDirection: -1,\n nameDirection: 1\n });\n return axisBuilder;\n });\n zrUtil.each(axisBuilders, function (axisBuilder) {\n zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n this.group.add(axisBuilder.getGroup());\n }, this);\n };\n\n RadarView.prototype._buildSplitLineAndArea = function (radarModel) {\n var radar = radarModel.coordinateSystem;\n var indicatorAxes = radar.getIndicatorAxes();\n\n if (!indicatorAxes.length) {\n return;\n }\n\n var shape = radarModel.get('shape');\n var splitLineModel = radarModel.getModel('splitLine');\n var splitAreaModel = radarModel.getModel('splitArea');\n var lineStyleModel = splitLineModel.getModel('lineStyle');\n var areaStyleModel = splitAreaModel.getModel('areaStyle');\n var showSplitLine = splitLineModel.get('show');\n var showSplitArea = splitAreaModel.get('show');\n var splitLineColors = lineStyleModel.get('color');\n var splitAreaColors = areaStyleModel.get('color');\n var splitLineColorsArr = zrUtil.isArray(splitLineColors) ? splitLineColors : [splitLineColors];\n var splitAreaColorsArr = zrUtil.isArray(splitAreaColors) ? splitAreaColors : [splitAreaColors];\n var splitLines = [];\n var splitAreas = [];\n\n function getColorIndex(areaOrLine, areaOrLineColorList, idx) {\n var colorIndex = idx % areaOrLineColorList.length;\n areaOrLine[colorIndex] = areaOrLine[colorIndex] || [];\n return colorIndex;\n }\n\n if (shape === 'circle') {\n var ticksRadius = indicatorAxes[0].getTicksCoords();\n var cx = radar.cx;\n var cy = radar.cy;\n\n for (var i = 0; i < ticksRadius.length; i++) {\n if (showSplitLine) {\n var colorIndex = getColorIndex(splitLines, splitLineColorsArr, i);\n splitLines[colorIndex].push(new graphic.Circle({\n shape: {\n cx: cx,\n cy: cy,\n r: ticksRadius[i].coord\n }\n }));\n }\n\n if (showSplitArea && i < ticksRadius.length - 1) {\n var colorIndex = getColorIndex(splitAreas, splitAreaColorsArr, i);\n splitAreas[colorIndex].push(new graphic.Ring({\n shape: {\n cx: cx,\n cy: cy,\n r0: ticksRadius[i].coord,\n r: ticksRadius[i + 1].coord\n }\n }));\n }\n }\n } // Polyyon\n else {\n var realSplitNumber_1;\n var axesTicksPoints = zrUtil.map(indicatorAxes, function (indicatorAxis, idx) {\n var ticksCoords = indicatorAxis.getTicksCoords();\n realSplitNumber_1 = realSplitNumber_1 == null ? ticksCoords.length - 1 : Math.min(ticksCoords.length - 1, realSplitNumber_1);\n return zrUtil.map(ticksCoords, function (tickCoord) {\n return radar.coordToPoint(tickCoord.coord, idx);\n });\n });\n var prevPoints = [];\n\n for (var i = 0; i <= realSplitNumber_1; i++) {\n var points = [];\n\n for (var j = 0; j < indicatorAxes.length; j++) {\n points.push(axesTicksPoints[j][i]);\n } // Close\n\n\n if (points[0]) {\n points.push(points[0].slice());\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.error('Can\\'t draw value axis ' + i);\n }\n }\n\n if (showSplitLine) {\n var colorIndex = getColorIndex(splitLines, splitLineColorsArr, i);\n splitLines[colorIndex].push(new graphic.Polyline({\n shape: {\n points: points\n }\n }));\n }\n\n if (showSplitArea && prevPoints) {\n var colorIndex = getColorIndex(splitAreas, splitAreaColorsArr, i - 1);\n splitAreas[colorIndex].push(new graphic.Polygon({\n shape: {\n points: points.concat(prevPoints)\n }\n }));\n }\n\n prevPoints = points.slice().reverse();\n }\n }\n\n var lineStyle = lineStyleModel.getLineStyle();\n var areaStyle = areaStyleModel.getAreaStyle(); // Add splitArea before splitLine\n\n zrUtil.each(splitAreas, function (splitAreas, idx) {\n this.group.add(graphic.mergePath(splitAreas, {\n style: zrUtil.defaults({\n stroke: 'none',\n fill: splitAreaColorsArr[idx % splitAreaColorsArr.length]\n }, areaStyle),\n silent: true\n }));\n }, this);\n zrUtil.each(splitLines, function (splitLines, idx) {\n this.group.add(graphic.mergePath(splitLines, {\n style: zrUtil.defaults({\n fill: 'none',\n stroke: splitLineColorsArr[idx % splitLineColorsArr.length]\n }, lineStyle),\n silent: true\n }));\n }, this);\n };\n\n RadarView.type = 'radar';\n return RadarView;\n}(ComponentView);\n\nexport default RadarView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Axis from '../Axis.js';\n\nvar IndicatorAxis =\n/** @class */\nfunction (_super) {\n __extends(IndicatorAxis, _super);\n\n function IndicatorAxis(dim, scale, radiusExtent) {\n var _this = _super.call(this, dim, scale, radiusExtent) || this;\n\n _this.type = 'value';\n _this.angle = 0;\n _this.name = '';\n return _this;\n }\n\n return IndicatorAxis;\n}(Axis);\n\nexport default IndicatorAxis;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO clockwise\nimport IndicatorAxis from './IndicatorAxis.js';\nimport IntervalScale from '../../scale/Interval.js';\nimport * as numberUtil from '../../util/number.js';\nimport { map, each, isString, isNumber } from 'zrender/lib/core/util.js';\nimport { alignScaleTicks } from '../axisAlignTicks.js';\n\nvar Radar =\n/** @class */\nfunction () {\n function Radar(radarModel, ecModel, api) {\n /**\n *\n * Radar dimensions\n */\n this.dimensions = [];\n this._model = radarModel;\n this._indicatorAxes = map(radarModel.getIndicatorModels(), function (indicatorModel, idx) {\n var dim = 'indicator_' + idx;\n var indicatorAxis = new IndicatorAxis(dim, new IntervalScale() // (indicatorModel.get('axisType') === 'log') ? new LogScale() : new IntervalScale()\n );\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\n Radar.prototype.getIndicatorAxes = function () {\n return this._indicatorAxes;\n };\n\n Radar.prototype.dataToPoint = function (value, indicatorIndex) {\n var indicatorAxis = this._indicatorAxes[indicatorIndex];\n return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex);\n }; // TODO: API should be coordToPoint([coord, indicatorIndex])\n\n\n Radar.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\n Radar.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\n Radar.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 (isString(radius) || isNumber(radius)) {\n radius = [0, radius];\n }\n\n this.r0 = numberUtil.parsePercent(radius[0], viewSize);\n this.r = numberUtil.parsePercent(radius[1], viewSize);\n 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\n Radar.prototype.update = function (ecModel, api) {\n var indicatorAxes = this._indicatorAxes;\n var radarModel = this._model;\n each(indicatorAxes, function (indicatorAxis) {\n indicatorAxis.scale.setExtent(Infinity, -Infinity);\n });\n ecModel.eachSeriesByType('radar', function (radarSeries, idx) {\n if (radarSeries.get('coordinateSystem') !== 'radar' // @ts-ignore\n || ecModel.getComponent('radar', radarSeries.get('radarIndex')) !== radarModel) {\n return;\n }\n\n var data = radarSeries.getData();\n each(indicatorAxes, function (indicatorAxis) {\n indicatorAxis.scale.unionExtentFromData(data, data.mapDimension(indicatorAxis.dim));\n });\n }, this);\n var splitNumber = radarModel.get('splitNumber');\n var dummyScale = new IntervalScale();\n dummyScale.setExtent(0, splitNumber);\n dummyScale.setInterval(1); // Force all the axis fixing the maxSplitNumber.\n\n each(indicatorAxes, function (indicatorAxis, idx) {\n alignScaleTicks(indicatorAxis.scale, indicatorAxis.model, dummyScale);\n });\n };\n\n Radar.prototype.convertToPixel = function (ecModel, finder, value) {\n console.warn('Not implemented.');\n return null;\n };\n\n Radar.prototype.convertFromPixel = function (ecModel, finder, pixel) {\n console.warn('Not implemented.');\n return null;\n };\n\n Radar.prototype.containPoint = function (point) {\n console.warn('Not implemented.');\n return false;\n };\n\n Radar.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 // @ts-ignore\n radarSeries.coordinateSystem = radarList[radarSeries.get('radarIndex') || 0];\n }\n });\n return radarList;\n };\n /**\n * Radar dimensions is based on the data\n */\n\n\n Radar.dimensions = [];\n return Radar;\n}();\n\nexport default Radar;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport RadarModel from '../../coord/radar/RadarModel.js';\nimport RadarView from './RadarView.js';\nimport Radar from '../../coord/radar/Radar.js';\nexport function install(registers) {\n registers.registerCoordinateSystem('radar', Radar);\n registers.registerComponentModel(RadarModel);\n registers.registerComponentView(RadarView);\n registers.registerVisual({\n seriesType: 'radar',\n reset: function (seriesModel) {\n var data = seriesModel.getData(); // itemVisual symbol is for selected data\n\n data.each(function (idx) {\n data.setItemVisual(idx, 'legendIcon', 'roundRect');\n }); // visual is for unselected data\n\n data.setVisual('legendIcon', 'roundRect');\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension.js';\nimport radarLayout from '../radar/radarLayout.js';\nimport dataFilter from '../../processor/dataFilter.js';\nimport backwardCompat from '../radar/backwardCompat.js';\nimport RadarView from './RadarView.js';\nimport RadarSeriesModel from './RadarSeries.js';\nimport { install as installRadarComponent } from '../../component/radar/install.js';\nexport function install(registers) {\n use(installRadarComponent);\n registers.registerChartView(RadarView);\n registers.registerSeriesModel(RadarSeriesModel);\n registers.registerLayout(radarLayout);\n registers.registerProcessor(dataFilter('radar'));\n registers.registerPreprocessor(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\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Eventful from 'zrender/lib/core/Eventful.js';\nimport * as eventTool from 'zrender/lib/core/event.js';\nimport * as interactionMutex from './interactionMutex.js';\nimport { isString, bind, defaults, clone } from 'zrender/lib/core/util.js';\n;\n\nvar RoamController =\n/** @class */\nfunction (_super) {\n __extends(RoamController, _super);\n\n function RoamController(zr) {\n var _this = _super.call(this) || this;\n\n _this._zr = zr; // Avoid two roamController bind the same handler\n\n var mousedownHandler = bind(_this._mousedownHandler, _this);\n var mousemoveHandler = bind(_this._mousemoveHandler, _this);\n var mouseupHandler = bind(_this._mouseupHandler, _this);\n var mousewheelHandler = bind(_this._mousewheelHandler, _this);\n var pinchHandler = bind(_this._pinchHandler, _this);\n /**\n * Notice: only enable needed types. For example, if 'zoom'\n * is not needed, 'zoom' should not be enabled, otherwise\n * default mousewheel behaviour (scroll page) will be disabled.\n */\n\n _this.enable = function (controlType, opt) {\n // Disable previous first\n this.disable();\n this._opt = defaults(clone(opt) || {}, {\n zoomOnMouseWheel: true,\n moveOnMouseMove: true,\n // By default, wheel do not trigger move.\n moveOnMouseWheel: false,\n preventDefaultMouseMove: true\n });\n\n if (controlType == null) {\n controlType = true;\n }\n\n if (controlType === true || controlType === 'move' || controlType === 'pan') {\n zr.on('mousedown', mousedownHandler);\n zr.on('mousemove', mousemoveHandler);\n zr.on('mouseup', mouseupHandler);\n }\n\n if (controlType === true || controlType === 'scale' || controlType === 'zoom') {\n zr.on('mousewheel', mousewheelHandler);\n zr.on('pinch', pinchHandler);\n }\n };\n\n _this.disable = function () {\n zr.off('mousedown', mousedownHandler);\n zr.off('mousemove', mousemoveHandler);\n zr.off('mouseup', mouseupHandler);\n zr.off('mousewheel', mousewheelHandler);\n zr.off('pinch', pinchHandler);\n };\n\n return _this;\n }\n\n RoamController.prototype.isDragging = function () {\n return this._dragging;\n };\n\n RoamController.prototype.isPinching = function () {\n return this._pinching;\n };\n\n RoamController.prototype.setPointerChecker = function (pointerChecker) {\n this.pointerChecker = pointerChecker;\n };\n\n RoamController.prototype.dispose = function () {\n this.disable();\n };\n\n RoamController.prototype._mousedownHandler = function (e) {\n if (eventTool.isMiddleOrRightButtonOnMouseUpDown(e)) {\n return;\n }\n\n var el = e.target;\n\n while (el) {\n if (el.draggable) {\n return;\n } // check if host is draggable\n\n\n el = el.__hostTarget || el.parent;\n }\n\n var x = e.offsetX;\n var y = e.offsetY; // Only check on mosedown, but not mousemove.\n // Mouse can be out of target when mouse moving.\n\n if (this.pointerChecker && this.pointerChecker(e, x, y)) {\n this._x = x;\n this._y = y;\n this._dragging = true;\n }\n };\n\n RoamController.prototype._mousemoveHandler = function (e) {\n if (!this._dragging || !isAvailableBehavior('moveOnMouseMove', e, this._opt) || e.gestureEvent === 'pinch' || interactionMutex.isTaken(this._zr, 'globalPan')) {\n return;\n }\n\n var x = e.offsetX;\n var y = e.offsetY;\n var oldX = this._x;\n var oldY = this._y;\n var dx = x - oldX;\n var dy = y - oldY;\n this._x = x;\n this._y = y;\n this._opt.preventDefaultMouseMove && eventTool.stop(e.event);\n trigger(this, 'pan', 'moveOnMouseMove', e, {\n dx: dx,\n dy: dy,\n oldX: oldX,\n oldY: oldY,\n newX: x,\n newY: y,\n isAvailableBehavior: null\n });\n };\n\n RoamController.prototype._mouseupHandler = function (e) {\n if (!eventTool.isMiddleOrRightButtonOnMouseUpDown(e)) {\n this._dragging = false;\n }\n };\n\n RoamController.prototype._mousewheelHandler = function (e) {\n var shouldZoom = isAvailableBehavior('zoomOnMouseWheel', e, this._opt);\n var shouldMove = isAvailableBehavior('moveOnMouseWheel', e, this._opt);\n var wheelDelta = e.wheelDelta;\n var absWheelDeltaDelta = Math.abs(wheelDelta);\n var originX = e.offsetX;\n var originY = e.offsetY; // wheelDelta maybe -0 in chrome mac.\n\n if (wheelDelta === 0 || !shouldZoom && !shouldMove) {\n return;\n } // If both `shouldZoom` and `shouldMove` is true, trigger\n // their event both, and the final behavior is determined\n // by event listener themselves.\n\n\n if (shouldZoom) {\n // Convenience:\n // Mac and VM Windows on Mac: scroll up: zoom out.\n // Windows: scroll up: zoom in.\n // FIXME: Should do more test in different environment.\n // wheelDelta is too complicated in difference nvironment\n // (https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel),\n // although it has been normallized by zrender.\n // wheelDelta of mouse wheel is bigger than touch pad.\n var factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 1 ? 1.2 : 1.1;\n var scale = wheelDelta > 0 ? factor : 1 / factor;\n checkPointerAndTrigger(this, 'zoom', 'zoomOnMouseWheel', e, {\n scale: scale,\n originX: originX,\n originY: originY,\n isAvailableBehavior: null\n });\n }\n\n if (shouldMove) {\n // FIXME: Should do more test in different environment.\n var absDelta = Math.abs(wheelDelta); // wheelDelta of mouse wheel is bigger than touch pad.\n\n var scrollDelta = (wheelDelta > 0 ? 1 : -1) * (absDelta > 3 ? 0.4 : absDelta > 1 ? 0.15 : 0.05);\n checkPointerAndTrigger(this, 'scrollMove', 'moveOnMouseWheel', e, {\n scrollDelta: scrollDelta,\n originX: originX,\n originY: originY,\n isAvailableBehavior: null\n });\n }\n };\n\n RoamController.prototype._pinchHandler = function (e) {\n if (interactionMutex.isTaken(this._zr, 'globalPan')) {\n return;\n }\n\n var scale = e.pinchScale > 1 ? 1.1 : 1 / 1.1;\n checkPointerAndTrigger(this, 'zoom', null, e, {\n scale: scale,\n originX: e.pinchX,\n originY: e.pinchY,\n isAvailableBehavior: null\n });\n };\n\n return RoamController;\n}(Eventful);\n\nfunction checkPointerAndTrigger(controller, eventName, behaviorToCheck, e, contollerEvent) {\n if (controller.pointerChecker && controller.pointerChecker(e, contollerEvent.originX, contollerEvent.originY)) {\n // When mouse is out of roamController rect,\n // default befavoius should not be be disabled, otherwise\n // page sliding is disabled, contrary to expectation.\n eventTool.stop(e.event);\n trigger(controller, eventName, behaviorToCheck, e, contollerEvent);\n }\n}\n\nfunction trigger(controller, eventName, behaviorToCheck, e, contollerEvent) {\n // Also provide behavior checker for event listener, for some case that\n // multiple components share one listener.\n contollerEvent.isAvailableBehavior = bind(isAvailableBehavior, null, behaviorToCheck, e); // TODO should not have type issue.\n\n controller.trigger(eventName, contollerEvent);\n} // settings: {\n// zoomOnMouseWheel\n// moveOnMouseMove\n// moveOnMouseWheel\n// }\n// The value can be: true / false / 'shift' / 'ctrl' / 'alt'.\n\n\nfunction isAvailableBehavior(behaviorToCheck, e, settings) {\n var setting = settings[behaviorToCheck];\n return !behaviorToCheck || setting && (!isString(setting) || e.event[setting + 'Key']);\n}\n\nexport default RoamController;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * For geo and graph.\n */\nexport function updateViewOnPan(controllerHost, dx, dy) {\n var target = controllerHost.target;\n target.x += dx;\n target.y += dy;\n target.dirty();\n}\n/**\n * For geo and graph.\n */\n\nexport function updateViewOnZoom(controllerHost, zoomDelta, zoomX, zoomY) {\n var target = controllerHost.target;\n var zoomLimit = controllerHost.zoomLimit;\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 target.x -= (zoomX - target.x) * (zoomScale - 1);\n target.y -= (zoomY - target.y) * (zoomScale - 1);\n target.scaleX *= zoomScale;\n target.scaleY *= zoomScale;\n target.dirty();\n}","import Group from '../graphic/Group.js';\nimport ZRImage from '../graphic/Image.js';\nimport Circle from '../graphic/shape/Circle.js';\nimport Rect from '../graphic/shape/Rect.js';\nimport Ellipse from '../graphic/shape/Ellipse.js';\nimport Line from '../graphic/shape/Line.js';\nimport Polygon from '../graphic/shape/Polygon.js';\nimport Polyline from '../graphic/shape/Polyline.js';\nimport * as matrix from '../core/matrix.js';\nimport { createFromString } from './path.js';\nimport { defaults, trim, each, map, keys, hasOwn } from '../core/util.js';\nimport LinearGradient from '../graphic/LinearGradient.js';\nimport RadialGradient from '../graphic/RadialGradient.js';\nimport TSpan from '../graphic/TSpan.js';\nimport { parseXML } from './parseXML.js';\n;\nvar nodeParsers;\nvar INHERITABLE_STYLE_ATTRIBUTES_MAP = {\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-anchor': 'textAlign',\n 'visibility': 'visibility',\n 'display': 'display'\n};\nvar INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS = keys(INHERITABLE_STYLE_ATTRIBUTES_MAP);\nvar SELF_STYLE_ATTRIBUTES_MAP = {\n 'alignment-baseline': 'textBaseline',\n 'stop-color': 'stopColor'\n};\nvar SELF_STYLE_ATTRIBUTES_MAP_KEYS = keys(SELF_STYLE_ATTRIBUTES_MAP);\nvar SVGParser = (function () {\n function SVGParser() {\n this._defs = {};\n this._root = null;\n }\n SVGParser.prototype.parse = function (xml, opt) {\n opt = opt || {};\n var svg = parseXML(xml);\n if (process.env.NODE_ENV !== 'production') {\n if (!svg) {\n throw new Error('Illegal svg');\n }\n }\n this._defsUsePending = [];\n var root = new Group();\n this._root = root;\n var named = [];\n var viewBox = svg.getAttribute('viewBox') || '';\n var width = parseFloat((svg.getAttribute('width') || opt.width));\n var height = parseFloat((svg.getAttribute('height') || opt.height));\n isNaN(width) && (width = null);\n isNaN(height) && (height = null);\n parseAttributes(svg, root, null, true, false);\n var child = svg.firstChild;\n while (child) {\n this._parseNode(child, root, named, null, false, false);\n child = child.nextSibling;\n }\n applyDefs(this._defs, this._defsUsePending);\n this._defsUsePending = [];\n var viewBoxRect;\n var viewBoxTransform;\n if (viewBox) {\n var viewBoxArr = splitNumberSequence(viewBox);\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 if (viewBoxRect && width != null && height != null) {\n viewBoxTransform = makeViewBoxTransform(viewBoxRect, { x: 0, y: 0, width: width, height: height });\n if (!opt.ignoreViewBox) {\n var elRoot = root;\n root = new Group();\n root.add(elRoot);\n elRoot.scaleX = elRoot.scaleY = viewBoxTransform.scale;\n elRoot.x = viewBoxTransform.x;\n elRoot.y = viewBoxTransform.y;\n }\n }\n if (!opt.ignoreRootClip && width != null && height != null) {\n root.setClipPath(new Rect({\n shape: { x: 0, y: 0, width: width, height: height }\n }));\n }\n return {\n root: root,\n width: width,\n height: height,\n viewBoxRect: viewBoxRect,\n viewBoxTransform: viewBoxTransform,\n named: named\n };\n };\n SVGParser.prototype._parseNode = function (xmlNode, parentGroup, named, namedFrom, isInDefs, isInText) {\n var nodeName = xmlNode.nodeName.toLowerCase();\n var el;\n var namedFromForSub = namedFrom;\n if (nodeName === 'defs') {\n isInDefs = true;\n }\n if (nodeName === 'text') {\n isInText = true;\n }\n if (nodeName === 'defs' || nodeName === 'switch') {\n el = parentGroup;\n }\n else {\n if (!isInDefs) {\n var parser_1 = nodeParsers[nodeName];\n if (parser_1 && hasOwn(nodeParsers, nodeName)) {\n el = parser_1.call(this, xmlNode, parentGroup);\n var nameAttr = xmlNode.getAttribute('name');\n if (nameAttr) {\n var newNamed = {\n name: nameAttr,\n namedFrom: null,\n svgNodeTagLower: nodeName,\n el: el\n };\n named.push(newNamed);\n if (nodeName === 'g') {\n namedFromForSub = newNamed;\n }\n }\n else if (namedFrom) {\n named.push({\n name: namedFrom.name,\n namedFrom: namedFrom,\n svgNodeTagLower: nodeName,\n el: el\n });\n }\n parentGroup.add(el);\n }\n }\n var parser = paintServerParsers[nodeName];\n if (parser && hasOwn(paintServerParsers, nodeName)) {\n var def = parser.call(this, xmlNode);\n var id = xmlNode.getAttribute('id');\n if (id) {\n this._defs[id] = def;\n }\n }\n }\n if (el && el.isGroup) {\n var child = xmlNode.firstChild;\n while (child) {\n if (child.nodeType === 1) {\n this._parseNode(child, el, named, namedFromForSub, isInDefs, isInText);\n }\n else if (child.nodeType === 3 && isInText) {\n this._parseText(child, el);\n }\n child = child.nextSibling;\n }\n }\n };\n SVGParser.prototype._parseText = function (xmlNode, parentGroup) {\n var text = new TSpan({\n style: {\n text: xmlNode.textContent\n },\n silent: true,\n x: this._textX || 0,\n y: this._textY || 0\n });\n inheritStyle(parentGroup, text);\n parseAttributes(xmlNode, text, this._defsUsePending, false, false);\n applyTextAlignment(text, parentGroup);\n var textStyle = text.style;\n var fontSize = textStyle.fontSize;\n if (fontSize && fontSize < 9) {\n textStyle.fontSize = 9;\n text.scaleX *= fontSize / 9;\n text.scaleY *= fontSize / 9;\n }\n var font = (textStyle.fontSize || textStyle.fontFamily) && [\n textStyle.fontStyle,\n textStyle.fontWeight,\n (textStyle.fontSize || 12) + 'px',\n textStyle.fontFamily || 'sans-serif'\n ].join(' ');\n textStyle.font = font;\n var rect = text.getBoundingRect();\n this._textX += rect.width;\n parentGroup.add(text);\n return text;\n };\n SVGParser.internalField = (function () {\n nodeParsers = {\n 'g': function (xmlNode, parentGroup) {\n var g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defsUsePending, false, false);\n return g;\n },\n 'rect': function (xmlNode, parentGroup) {\n var rect = new Rect();\n inheritStyle(parentGroup, rect);\n parseAttributes(xmlNode, rect, this._defsUsePending, false, false);\n rect.setShape({\n x: parseFloat(xmlNode.getAttribute('x') || '0'),\n y: parseFloat(xmlNode.getAttribute('y') || '0'),\n width: parseFloat(xmlNode.getAttribute('width') || '0'),\n height: parseFloat(xmlNode.getAttribute('height') || '0')\n });\n rect.silent = true;\n return rect;\n },\n 'circle': function (xmlNode, parentGroup) {\n var circle = new Circle();\n inheritStyle(parentGroup, circle);\n parseAttributes(xmlNode, circle, this._defsUsePending, false, false);\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 circle.silent = true;\n return circle;\n },\n 'line': function (xmlNode, parentGroup) {\n var line = new Line();\n inheritStyle(parentGroup, line);\n parseAttributes(xmlNode, line, this._defsUsePending, false, false);\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 line.silent = true;\n return line;\n },\n 'ellipse': function (xmlNode, parentGroup) {\n var ellipse = new Ellipse();\n inheritStyle(parentGroup, ellipse);\n parseAttributes(xmlNode, ellipse, this._defsUsePending, false, false);\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 ellipse.silent = true;\n return ellipse;\n },\n 'polygon': function (xmlNode, parentGroup) {\n var pointsStr = xmlNode.getAttribute('points');\n var pointsArr;\n if (pointsStr) {\n pointsArr = parsePoints(pointsStr);\n }\n var polygon = new Polygon({\n shape: {\n points: pointsArr || []\n },\n silent: true\n });\n inheritStyle(parentGroup, polygon);\n parseAttributes(xmlNode, polygon, this._defsUsePending, false, false);\n return polygon;\n },\n 'polyline': function (xmlNode, parentGroup) {\n var pointsStr = xmlNode.getAttribute('points');\n var pointsArr;\n if (pointsStr) {\n pointsArr = parsePoints(pointsStr);\n }\n var polyline = new Polyline({\n shape: {\n points: pointsArr || []\n },\n silent: true\n });\n inheritStyle(parentGroup, polyline);\n parseAttributes(xmlNode, polyline, this._defsUsePending, false, false);\n return polyline;\n },\n 'image': function (xmlNode, parentGroup) {\n var img = new ZRImage();\n inheritStyle(parentGroup, img);\n parseAttributes(xmlNode, img, this._defsUsePending, false, false);\n img.setStyle({\n image: xmlNode.getAttribute('xlink:href') || xmlNode.getAttribute('href'),\n x: +xmlNode.getAttribute('x'),\n y: +xmlNode.getAttribute('y'),\n width: +xmlNode.getAttribute('width'),\n height: +xmlNode.getAttribute('height')\n });\n img.silent = true;\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._defsUsePending, false, true);\n return g;\n },\n 'tspan': function (xmlNode, parentGroup) {\n var x = xmlNode.getAttribute('x');\n var y = xmlNode.getAttribute('y');\n if (x != null) {\n this._textX = parseFloat(x);\n }\n if (y != null) {\n this._textY = parseFloat(y);\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._defsUsePending, false, true);\n this._textX += parseFloat(dx);\n this._textY += parseFloat(dy);\n return g;\n },\n 'path': function (xmlNode, parentGroup) {\n var d = xmlNode.getAttribute('d') || '';\n var path = createFromString(d);\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defsUsePending, false, false);\n path.silent = true;\n return path;\n }\n };\n })();\n return SVGParser;\n}());\nvar paintServerParsers = {\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 parsePaintServerUnit(xmlNode, gradient);\n parseGradientColorStops(xmlNode, gradient);\n return gradient;\n },\n 'radialgradient': function (xmlNode) {\n var cx = parseInt(xmlNode.getAttribute('cx') || '0', 10);\n var cy = parseInt(xmlNode.getAttribute('cy') || '0', 10);\n var r = parseInt(xmlNode.getAttribute('r') || '0', 10);\n var gradient = new RadialGradient(cx, cy, r);\n parsePaintServerUnit(xmlNode, gradient);\n parseGradientColorStops(xmlNode, gradient);\n return gradient;\n }\n};\nfunction parsePaintServerUnit(xmlNode, gradient) {\n var gradientUnits = xmlNode.getAttribute('gradientUnits');\n if (gradientUnits === 'userSpaceOnUse') {\n gradient.global = true;\n }\n}\nfunction parseGradientColorStops(xmlNode, gradient) {\n var stop = xmlNode.firstChild;\n while (stop) {\n if (stop.nodeType === 1\n && stop.nodeName.toLocaleLowerCase() === 'stop') {\n var offsetStr = stop.getAttribute('offset');\n var offset = void 0;\n if (offsetStr && offsetStr.indexOf('%') > 0) {\n offset = parseInt(offsetStr, 10) / 100;\n }\n else if (offsetStr) {\n offset = parseFloat(offsetStr);\n }\n else {\n offset = 0;\n }\n var styleVals = {};\n parseInlineStyle(stop, styleVals, styleVals);\n var stopColor = styleVals.stopColor\n || stop.getAttribute('stop-color')\n || '#000000';\n gradient.colorStops.push({\n offset: offset,\n color: stopColor\n });\n }\n stop = stop.nextSibling;\n }\n}\nfunction inheritStyle(parent, child) {\n if (parent && parent.__inheritedStyle) {\n if (!child.__inheritedStyle) {\n child.__inheritedStyle = {};\n }\n defaults(child.__inheritedStyle, parent.__inheritedStyle);\n }\n}\nfunction parsePoints(pointsString) {\n var list = splitNumberSequence(pointsString);\n var points = [];\n for (var i = 0; i < list.length; i += 2) {\n var x = parseFloat(list[i]);\n var y = parseFloat(list[i + 1]);\n points.push([x, y]);\n }\n return points;\n}\nfunction parseAttributes(xmlNode, el, defsUsePending, onlyInlineStyle, isTextGroup) {\n var disp = el;\n var inheritedStyle = disp.__inheritedStyle = disp.__inheritedStyle || {};\n var selfStyle = {};\n if (xmlNode.nodeType === 1) {\n parseTransformAttribute(xmlNode, el);\n parseInlineStyle(xmlNode, inheritedStyle, selfStyle);\n if (!onlyInlineStyle) {\n parseAttributeStyle(xmlNode, inheritedStyle, selfStyle);\n }\n }\n disp.style = disp.style || {};\n if (inheritedStyle.fill != null) {\n disp.style.fill = getFillStrokeStyle(disp, 'fill', inheritedStyle.fill, defsUsePending);\n }\n if (inheritedStyle.stroke != null) {\n disp.style.stroke = getFillStrokeStyle(disp, 'stroke', inheritedStyle.stroke, defsUsePending);\n }\n each([\n 'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'\n ], function (propName) {\n if (inheritedStyle[propName] != null) {\n disp.style[propName] = parseFloat(inheritedStyle[propName]);\n }\n });\n each([\n 'lineDashOffset', 'lineCap', 'lineJoin', 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign'\n ], function (propName) {\n if (inheritedStyle[propName] != null) {\n disp.style[propName] = inheritedStyle[propName];\n }\n });\n if (isTextGroup) {\n disp.__selfStyle = selfStyle;\n }\n if (inheritedStyle.lineDash) {\n disp.style.lineDash = map(splitNumberSequence(inheritedStyle.lineDash), function (str) {\n return parseFloat(str);\n });\n }\n if (inheritedStyle.visibility === 'hidden' || inheritedStyle.visibility === 'collapse') {\n disp.invisible = true;\n }\n if (inheritedStyle.display === 'none') {\n disp.ignore = true;\n }\n}\nfunction applyTextAlignment(text, parentGroup) {\n var parentSelfStyle = parentGroup.__selfStyle;\n if (parentSelfStyle) {\n var textBaseline = parentSelfStyle.textBaseline;\n var zrTextBaseline = textBaseline;\n if (!textBaseline || textBaseline === 'auto') {\n zrTextBaseline = 'alphabetic';\n }\n else if (textBaseline === 'baseline') {\n zrTextBaseline = 'alphabetic';\n }\n else if (textBaseline === 'before-edge' || textBaseline === 'text-before-edge') {\n zrTextBaseline = 'top';\n }\n else if (textBaseline === 'after-edge' || textBaseline === 'text-after-edge') {\n zrTextBaseline = 'bottom';\n }\n else if (textBaseline === 'central' || textBaseline === 'mathematical') {\n zrTextBaseline = 'middle';\n }\n text.style.textBaseline = zrTextBaseline;\n }\n var parentInheritedStyle = parentGroup.__inheritedStyle;\n if (parentInheritedStyle) {\n var textAlign = parentInheritedStyle.textAlign;\n var zrTextAlign = textAlign;\n if (textAlign) {\n if (textAlign === 'middle') {\n zrTextAlign = 'center';\n }\n text.style.textAlign = zrTextAlign;\n }\n }\n}\nvar urlRegex = /^url\\(\\s*#(.*?)\\)/;\nfunction getFillStrokeStyle(el, method, str, defsUsePending) {\n var urlMatch = str && str.match(urlRegex);\n if (urlMatch) {\n var url = trim(urlMatch[1]);\n defsUsePending.push([el, method, url]);\n return;\n }\n if (str === 'none') {\n str = null;\n }\n return str;\n}\nfunction applyDefs(defs, defsUsePending) {\n for (var i = 0; i < defsUsePending.length; i++) {\n var item = defsUsePending[i];\n item[0].style[item[1]] = defs[item[2]];\n }\n}\nvar numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\nfunction splitNumberSequence(rawStr) {\n return rawStr.match(numberReg) || [];\n}\nvar transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\\(([\\-\\s0-9\\.eE,]*)\\)/g;\nvar DEGREE_TO_ANGLE = Math.PI / 180;\nfunction parseTransformAttribute(xmlNode, node) {\n var transform = xmlNode.getAttribute('transform');\n if (transform) {\n transform = transform.replace(/,/g, ' ');\n var transformOps_1 = [];\n var mt = null;\n transform.replace(transformRegex, function (str, type, value) {\n transformOps_1.push(type, value);\n return '';\n });\n for (var i = transformOps_1.length - 1; i > 0; i -= 2) {\n var value = transformOps_1[i];\n var type = transformOps_1[i - 1];\n var valueArr = splitNumberSequence(value);\n mt = mt || matrix.create();\n switch (type) {\n case 'translate':\n matrix.translate(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || '0')]);\n break;\n case 'scale':\n matrix.scale(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || valueArr[0])]);\n break;\n case 'rotate':\n matrix.rotate(mt, mt, -parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n break;\n case 'skewX':\n var sx = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n matrix.mul(mt, [1, 0, sx, 1, 0, 0], mt);\n break;\n case 'skewY':\n var sy = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n matrix.mul(mt, [1, sy, 0, 1, 0, 0], mt);\n break;\n case 'matrix':\n mt[0] = parseFloat(valueArr[0]);\n mt[1] = parseFloat(valueArr[1]);\n mt[2] = parseFloat(valueArr[2]);\n mt[3] = parseFloat(valueArr[3]);\n mt[4] = parseFloat(valueArr[4]);\n mt[5] = parseFloat(valueArr[5]);\n break;\n }\n }\n node.setLocalTransform(mt);\n }\n}\nvar styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\nfunction parseInlineStyle(xmlNode, inheritableStyleResult, selfStyleResult) {\n var style = xmlNode.getAttribute('style');\n if (!style) {\n return;\n }\n styleRegex.lastIndex = 0;\n var styleRegResult;\n while ((styleRegResult = styleRegex.exec(style)) != null) {\n var svgStlAttr = styleRegResult[1];\n var zrInheritableStlAttr = hasOwn(INHERITABLE_STYLE_ATTRIBUTES_MAP, svgStlAttr)\n ? INHERITABLE_STYLE_ATTRIBUTES_MAP[svgStlAttr]\n : null;\n if (zrInheritableStlAttr) {\n inheritableStyleResult[zrInheritableStlAttr] = styleRegResult[2];\n }\n var zrSelfStlAttr = hasOwn(SELF_STYLE_ATTRIBUTES_MAP, svgStlAttr)\n ? SELF_STYLE_ATTRIBUTES_MAP[svgStlAttr]\n : null;\n if (zrSelfStlAttr) {\n selfStyleResult[zrSelfStlAttr] = styleRegResult[2];\n }\n }\n}\nfunction parseAttributeStyle(xmlNode, inheritableStyleResult, selfStyleResult) {\n for (var i = 0; i < INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) {\n var svgAttrName = INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS[i];\n var attrValue = xmlNode.getAttribute(svgAttrName);\n if (attrValue != null) {\n inheritableStyleResult[INHERITABLE_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue;\n }\n }\n for (var i = 0; i < SELF_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) {\n var svgAttrName = SELF_STYLE_ATTRIBUTES_MAP_KEYS[i];\n var attrValue = xmlNode.getAttribute(svgAttrName);\n if (attrValue != null) {\n selfStyleResult[SELF_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue;\n }\n }\n}\nexport function makeViewBoxTransform(viewBoxRect, boundingRect) {\n var scaleX = boundingRect.width / viewBoxRect.width;\n var scaleY = boundingRect.height / viewBoxRect.height;\n var scale = Math.min(scaleX, scaleY);\n return {\n scale: scale,\n x: -(viewBoxRect.x + viewBoxRect.width / 2) * scale + (boundingRect.x + boundingRect.width / 2),\n y: -(viewBoxRect.y + viewBoxRect.height / 2) * scale + (boundingRect.y + boundingRect.height / 2)\n };\n}\nexport function parseSVG(xml, opt) {\n var parser = new SVGParser();\n return parser.parse(xml, opt);\n}\nexport { parseXML };\n","import { isString } from '../core/util.js';\nexport function parseXML(svg) {\n if (isString(svg)) {\n var parser = new DOMParser();\n svg = parser.parseFromString(svg, 'text/xml');\n }\n var svgNode = svg;\n if (svgNode.nodeType === 9) {\n svgNode = svgNode.firstChild;\n }\n while (svgNode.nodeName.toLowerCase() !== 'svg' || svgNode.nodeType !== 1) {\n svgNode = svgNode.nextSibling;\n }\n return svgNode;\n}\n","import windingLine from './windingLine.js';\nvar EPSILON = 1e-8;\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n}\nexport function contain(points, x, y) {\n var w = 0;\n var p = points[0];\n if (!p) {\n return false;\n }\n for (var i = 1; i < points.length; i++) {\n var p2 = points[i];\n w += windingLine(p[0], p[1], p2[0], p2[1], x, y);\n p = p2;\n }\n var p0 = points[0];\n if (!isAroundEqual(p[0], p0[0]) || !isAroundEqual(p[1], p0[1])) {\n w += windingLine(p[0], p[1], p0[0], p0[1], x, y);\n }\n return w !== 0;\n}\n","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport * as vec2 from 'zrender/lib/core/vector.js';\nimport * as polygonContain from 'zrender/lib/contain/polygon.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport { each } from 'zrender/lib/core/util.js';\nvar TMP_TRANSFORM = [];\n\nfunction transformPoints(points, transform) {\n for (var p = 0; p < points.length; p++) {\n vec2.applyTransform(points[p], points[p], transform);\n }\n}\n\nfunction updateBBoxFromPoints(points, min, max, projection) {\n for (var i = 0; i < points.length; i++) {\n var p = points[i];\n\n if (projection) {\n // projection may return null point.\n p = projection.project(p);\n }\n\n if (p && isFinite(p[0]) && isFinite(p[1])) {\n vec2.min(min, min, p);\n vec2.max(max, max, p);\n }\n }\n}\n\nfunction centroid(points) {\n var signedArea = 0;\n var cx = 0;\n var cy = 0;\n var len = points.length;\n var x0 = points[len - 1][0];\n var y0 = points[len - 1][1]; // Polygon should been closed.\n\n for (var i = 0; i < len; i++) {\n var x1 = points[i][0];\n var y1 = points[i][1];\n var a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n x0 = x1;\n y0 = y1;\n }\n\n return signedArea ? [cx / signedArea / 3, cy / signedArea / 3, signedArea] : [points[0][0] || 0, points[0][1] || 0];\n}\n\nvar Region =\n/** @class */\nfunction () {\n function Region(name) {\n this.name = name;\n }\n\n Region.prototype.setCenter = function (center) {\n this._center = center;\n };\n /**\n * Get center point in data unit. That is,\n * for GeoJSONRegion, the unit is lat/lng,\n * for GeoSVGRegion, the unit is SVG local coord.\n */\n\n\n Region.prototype.getCenter = function () {\n var center = this._center;\n\n if (!center) {\n // In most cases there are no need to calculate this center.\n // So calculate only when called.\n center = this._center = this.calcCenter();\n }\n\n return center;\n };\n\n return Region;\n}();\n\nexport { Region };\n\nvar GeoJSONPolygonGeometry =\n/** @class */\nfunction () {\n function GeoJSONPolygonGeometry(exterior, interiors) {\n this.type = 'polygon';\n this.exterior = exterior;\n this.interiors = interiors;\n }\n\n return GeoJSONPolygonGeometry;\n}();\n\nexport { GeoJSONPolygonGeometry };\n\nvar GeoJSONLineStringGeometry =\n/** @class */\nfunction () {\n function GeoJSONLineStringGeometry(points) {\n this.type = 'linestring';\n this.points = points;\n }\n\n return GeoJSONLineStringGeometry;\n}();\n\nexport { GeoJSONLineStringGeometry };\n\nvar GeoJSONRegion =\n/** @class */\nfunction (_super) {\n __extends(GeoJSONRegion, _super);\n\n function GeoJSONRegion(name, geometries, cp) {\n var _this = _super.call(this, name) || this;\n\n _this.type = 'geoJSON';\n _this.geometries = geometries;\n _this._center = cp && [cp[0], cp[1]];\n return _this;\n }\n\n GeoJSONRegion.prototype.calcCenter = function () {\n var geometries = this.geometries;\n var largestGeo;\n var largestGeoSize = 0;\n\n for (var i = 0; i < geometries.length; i++) {\n var geo = geometries[i];\n var exterior = geo.exterior; // Simple trick to use points count instead of polygon area as region size.\n // Ignore linestring\n\n var size = exterior && exterior.length;\n\n if (size > largestGeoSize) {\n largestGeo = geo;\n largestGeoSize = size;\n }\n }\n\n if (largestGeo) {\n return centroid(largestGeo.exterior);\n } // from bounding rect by default.\n\n\n var rect = this.getBoundingRect();\n return [rect.x + rect.width / 2, rect.y + rect.height / 2];\n };\n\n GeoJSONRegion.prototype.getBoundingRect = function (projection) {\n var rect = this._rect; // Always recalculate if using projection.\n\n if (rect && !projection) {\n return rect;\n }\n\n var min = [Infinity, Infinity];\n var max = [-Infinity, -Infinity];\n var geometries = this.geometries;\n each(geometries, function (geo) {\n if (geo.type === 'polygon') {\n // Doesn't consider hole\n updateBBoxFromPoints(geo.exterior, min, max, projection);\n } else {\n each(geo.points, function (points) {\n updateBBoxFromPoints(points, min, max, projection);\n });\n }\n }); // Normalie invalid bounding.\n\n if (!(isFinite(min[0]) && isFinite(min[1]) && isFinite(max[0]) && isFinite(max[1]))) {\n min[0] = min[1] = max[0] = max[1] = 0;\n }\n\n rect = new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\n if (!projection) {\n this._rect = rect;\n }\n\n return rect;\n };\n\n GeoJSONRegion.prototype.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 var geo = geometries[i]; // Only support polygon.\n\n if (geo.type !== 'polygon') {\n continue;\n }\n\n var exterior = geo.exterior;\n var interiors = geo.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], coord[0], coord[1])) {\n continue loopGeo;\n }\n }\n\n return true;\n }\n }\n\n return false;\n };\n /**\n * Transform the raw coords to target bounding.\n * @param x\n * @param y\n * @param width\n * @param height\n */\n\n\n GeoJSONRegion.prototype.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 var geo = geometries[i];\n\n if (geo.type === 'polygon') {\n transformPoints(geo.exterior, transform);\n each(geo.interiors, function (interior) {\n transformPoints(interior, transform);\n });\n } else {\n each(geo.points, function (points) {\n transformPoints(points, 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\n GeoJSONRegion.prototype.cloneShallow = function (name) {\n name == null && (name = this.name);\n var newRegion = new GeoJSONRegion(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\n return GeoJSONRegion;\n}(Region);\n\nexport { GeoJSONRegion };\n\nvar GeoSVGRegion =\n/** @class */\nfunction (_super) {\n __extends(GeoSVGRegion, _super);\n\n function GeoSVGRegion(name, elOnlyForCalculate) {\n var _this = _super.call(this, name) || this;\n\n _this.type = 'geoSVG';\n _this._elOnlyForCalculate = elOnlyForCalculate;\n return _this;\n }\n\n GeoSVGRegion.prototype.calcCenter = function () {\n var el = this._elOnlyForCalculate;\n var rect = el.getBoundingRect();\n var center = [rect.x + rect.width / 2, rect.y + rect.height / 2];\n var mat = matrix.identity(TMP_TRANSFORM);\n var target = el;\n\n while (target && !target.isGeoSVGGraphicRoot) {\n matrix.mul(mat, target.getLocalTransform(), mat);\n target = target.parent;\n }\n\n matrix.invert(mat, mat);\n vec2.applyTransform(center, center, mat);\n return center;\n };\n\n return GeoSVGRegion;\n}(Region);\n\nexport { GeoSVGRegion };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { parseSVG, makeViewBoxTransform } from 'zrender/lib/tool/parseSVG.js';\nimport Group from 'zrender/lib/graphic/Group.js';\nimport Rect from 'zrender/lib/graphic/shape/Rect.js';\nimport { assert, createHashMap, each } from 'zrender/lib/core/util.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport { parseXML } from 'zrender/lib/tool/parseXML.js';\nimport { GeoSVGRegion } from './Region.js';\n/**\n * \"region available\" means that: enable users to set attribute `name=\"xxx\"` on those tags\n * to make it be a region.\n * 1. region styles and its label styles can be defined in echarts opton:\n * ```js\n * geo: {\n * regions: [{\n * name: 'xxx',\n * itemStyle: { ... },\n * label: { ... }\n * }, {\n * ...\n * },\n * ...]\n * };\n * ```\n * 2. name can be duplicated in different SVG tag. All of the tags with the same name share\n * a region option. For exampel if there are two representing two lung lobes. They have\n * no common parents but both of them need to display label \"lung\" inside.\n */\n\nvar REGION_AVAILABLE_SVG_TAG_MAP = createHashMap(['rect', 'circle', 'line', 'ellipse', 'polygon', 'polyline', 'path', // are also enabled because some SVG might paint text itself,\n// but still need to trigger events or tooltip.\n'text', 'tspan', // is also enabled because this case: if multiple tags share one name\n// and need label displayed, every tags will display the name, which is not\n// expected. So we can put them into a . Thereby only one label\n// displayed and located based on the bounding rect of the .\n'g']);\n\nvar GeoSVGResource =\n/** @class */\nfunction () {\n function GeoSVGResource(mapName, svg) {\n this.type = 'geoSVG'; // All used graphics. key: hostKey, value: root\n\n this._usedGraphicMap = createHashMap(); // All unused graphics.\n\n this._freedGraphics = [];\n this._mapName = mapName; // 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\n this._parsedXML = parseXML(svg);\n }\n\n GeoSVGResource.prototype.load = function ()\n /* nameMap: NameMap */\n {\n // In the \"load\" stage, graphic need to be built to\n // get boundingRect for geo coordinate system.\n var firstGraphic = this._firstGraphic; // Create the return data structure only when first graphic created.\n // Because they will be used in geo coordinate system update stage,\n // and `regions` will be mounted at `geo` coordinate system,\n // in which there is no \"view\" info, so that it should better not to\n // make references to graphic elements.\n\n if (!firstGraphic) {\n firstGraphic = this._firstGraphic = this._buildGraphic(this._parsedXML);\n\n this._freedGraphics.push(firstGraphic);\n\n this._boundingRect = this._firstGraphic.boundingRect.clone(); // PENDING: `nameMap` will not be supported until some real requirement come.\n // if (nameMap) {\n // named = applyNameMap(named, nameMap);\n // }\n\n var _a = createRegions(firstGraphic.named),\n regions = _a.regions,\n regionsMap = _a.regionsMap;\n\n this._regions = regions;\n this._regionsMap = regionsMap;\n }\n\n return {\n boundingRect: this._boundingRect,\n regions: this._regions,\n regionsMap: this._regionsMap\n };\n };\n\n GeoSVGResource.prototype._buildGraphic = function (svgXML) {\n var result;\n var rootFromParse;\n\n try {\n result = svgXML && parseSVG(svgXML, {\n ignoreViewBox: true,\n ignoreRootClip: true\n }) || {};\n rootFromParse = result.root;\n assert(rootFromParse != null);\n } catch (e) {\n throw new Error('Invalid svg format\\n' + e.message);\n } // Note: we keep the covenant that the root has no transform. So always add an extra root.\n\n\n var root = new Group();\n root.add(rootFromParse);\n root.isGeoSVGGraphicRoot = true; // [THE_RULE_OF_VIEWPORT_AND_VIEWBOX]\n //\n // Consider: ``\n // - the `width/height` we call it `svgWidth/svgHeight` for short.\n // - `(0, 0, svgWidth, svgHeight)` defines the viewport of the SVG, or say,\n // \"viewport boundingRect\", or `boundingRect` for short.\n // - `viewBox` defines the transform from the real content ot the viewport.\n // `viewBox` has the same unit as the content of SVG.\n // If `viewBox` exists, a transform is defined, so the unit of `svgWidth/svgHeight` become\n // different from the content of SVG. Otherwise, they are the same.\n //\n // If both `svgWidth/svgHeight/viewBox` are specified in a SVG file, the transform rule will be:\n // 0. `boundingRect` is `(0, 0, svgWidth, svgHeight)`. Set it to Geo['_rect'] (View['_rect']).\n // 1. Make a transform from `viewBox` to `boundingRect`.\n // Note: only support `preserveAspectRatio 'xMidYMid'` here. That is, this transform will preserve\n // the aspect ratio.\n // 2. Make a transform from boundingRect to Geo['_viewRect'] (View['_viewRect'])\n // (`Geo`/`View` will do this job).\n // Note: this transform might not preserve aspect radio, which depending on how users specify\n // viewRect in echarts option (e.g., `geo.left/top/width/height` will not preserve aspect ratio,\n // but `geo.layoutCenter/layoutSize` will preserve aspect ratio).\n //\n // If `svgWidth/svgHeight` not specified, we use `viewBox` as the `boundingRect` to make the SVG\n // layout look good.\n //\n // If neither `svgWidth/svgHeight` nor `viewBox` are not specified, we calculate the boundingRect\n // of the SVG content and use them to make SVG layout look good.\n\n var svgWidth = result.width;\n var svgHeight = result.height;\n var viewBoxRect = result.viewBoxRect;\n var boundingRect = this._boundingRect;\n\n if (!boundingRect) {\n var bRectX = void 0;\n var bRectY = void 0;\n var bRectWidth = void 0;\n var bRectHeight = void 0;\n\n if (svgWidth != null) {\n bRectX = 0;\n bRectWidth = svgWidth;\n } else if (viewBoxRect) {\n bRectX = viewBoxRect.x;\n bRectWidth = viewBoxRect.width;\n }\n\n if (svgHeight != null) {\n bRectY = 0;\n bRectHeight = svgHeight;\n } else if (viewBoxRect) {\n bRectY = viewBoxRect.y;\n bRectHeight = viewBoxRect.height;\n } // If both viewBox and svgWidth/svgHeight not specified,\n // we have to determine how to layout those element to make them look good.\n\n\n if (bRectX == null || bRectY == null) {\n var calculatedBoundingRect = rootFromParse.getBoundingRect();\n\n if (bRectX == null) {\n bRectX = calculatedBoundingRect.x;\n bRectWidth = calculatedBoundingRect.width;\n }\n\n if (bRectY == null) {\n bRectY = calculatedBoundingRect.y;\n bRectHeight = calculatedBoundingRect.height;\n }\n }\n\n boundingRect = this._boundingRect = new BoundingRect(bRectX, bRectY, bRectWidth, bRectHeight);\n }\n\n if (viewBoxRect) {\n var viewBoxTransform = makeViewBoxTransform(viewBoxRect, boundingRect); // Only support `preserveAspectRatio 'xMidYMid'`\n\n rootFromParse.scaleX = rootFromParse.scaleY = viewBoxTransform.scale;\n rootFromParse.x = viewBoxTransform.x;\n rootFromParse.y = viewBoxTransform.y;\n } // SVG needs to clip based on `viewBox`. And some SVG files really rely on this feature.\n // They do not strictly confine all of the content inside a display rect, but deliberately\n // use a `viewBox` to define a displayable rect.\n // PENDING:\n // The drawback of the `setClipPath` here is: the region label (genereted by echarts) near the\n // edge might also be clipped, because region labels are put as `textContent` of the SVG path.\n\n\n root.setClipPath(new Rect({\n shape: boundingRect.plain()\n }));\n var named = [];\n each(result.named, function (namedItem) {\n if (REGION_AVAILABLE_SVG_TAG_MAP.get(namedItem.svgNodeTagLower) != null) {\n named.push(namedItem);\n setSilent(namedItem.el);\n }\n });\n return {\n root: root,\n boundingRect: boundingRect,\n named: named\n };\n };\n /**\n * Consider:\n * (1) One graphic element can not be shared by different `geoView` running simultaneously.\n * Notice, also need to consider multiple echarts instances share a `mapRecord`.\n * (2) Converting SVG to graphic elements is time consuming.\n * (3) In the current architecture, `load` should be called frequently to get boundingRect,\n * and it is called without view info.\n * So we maintain graphic elements in this module, and enables `view` to use/return these\n * graphics from/to the pool with it's uid.\n */\n\n\n GeoSVGResource.prototype.useGraphic = function (hostKey\n /* , nameMap: NameMap */\n ) {\n var usedRootMap = this._usedGraphicMap;\n var svgGraphic = usedRootMap.get(hostKey);\n\n if (svgGraphic) {\n return svgGraphic;\n }\n\n svgGraphic = this._freedGraphics.pop() // use the first boundingRect to avoid duplicated boundingRect calculation.\n || this._buildGraphic(this._parsedXML);\n usedRootMap.set(hostKey, svgGraphic); // PENDING: `nameMap` will not be supported until some real requirement come.\n // `nameMap` can only be obtained from echarts option.\n // The original `named` must not be modified.\n // if (nameMap) {\n // svgGraphic = extend({}, svgGraphic);\n // svgGraphic.named = applyNameMap(svgGraphic.named, nameMap);\n // }\n\n return svgGraphic;\n };\n\n GeoSVGResource.prototype.freeGraphic = function (hostKey) {\n var usedRootMap = this._usedGraphicMap;\n var svgGraphic = usedRootMap.get(hostKey);\n\n if (svgGraphic) {\n usedRootMap.removeKey(hostKey);\n\n this._freedGraphics.push(svgGraphic);\n }\n };\n\n return GeoSVGResource;\n}();\n\nexport { GeoSVGResource };\n\nfunction setSilent(el) {\n // Only named element has silent: false, other elements should\n // act as background and has no user interaction.\n el.silent = false; // text|tspan will be converted to group.\n\n if (el.isGroup) {\n el.traverse(function (child) {\n child.silent = false;\n });\n }\n}\n\nfunction createRegions(named) {\n var regions = [];\n var regionsMap = createHashMap(); // Create resions only for the first graphic.\n\n each(named, function (namedItem) {\n // Region has feature to calculate center for tooltip or other features.\n // If there is a , the center should be the center of the\n // bounding rect of the g.\n if (namedItem.namedFrom != null) {\n return;\n }\n\n var region = new GeoSVGRegion(namedItem.name, namedItem.el); // PENDING: if `nameMap` supported, this region can not be mounted on\n // `this`, but can only be created each time `load()` called.\n\n regions.push(region); // PENDING: if multiple tag named with the same name, only one will be\n // found by `_regionsMap`. `_regionsMap` is used to find a coordinate\n // by name. We use `region.getCenter()` as the coordinate.\n\n regionsMap.set(namedItem.name, region);\n });\n return {\n regions: regions,\n regionsMap: regionsMap\n };\n} // PENDING: `nameMap` will not be supported until some real requirement come.\n// /**\n// * Use the alias in geoNameMap.\n// * The input `named` must not be modified.\n// */\n// function applyNameMap(\n// named: GeoSVGGraphicRecord['named'],\n// nameMap: NameMap\n// ): GeoSVGGraphicRecord['named'] {\n// const result = [] as GeoSVGGraphicRecord['named'];\n// for (let i = 0; i < named.length; i++) {\n// let regionGraphic = named[i];\n// const name = regionGraphic.name;\n// if (nameMap && nameMap.hasOwnProperty(name)) {\n// regionGraphic = extend({}, regionGraphic);\n// regionGraphic.name = name;\n// }\n// result.push(regionGraphic);\n// }\n// return result;\n// }","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Parse and decode geo json\n */\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { GeoJSONLineStringGeometry, GeoJSONPolygonGeometry, GeoJSONRegion } from './Region.js';\n\nfunction decode(json) {\n if (!json.UTF8Encoding) {\n return json;\n }\n\n var jsonCompressed = json;\n var encodeScale = jsonCompressed.UTF8Scale;\n\n if (encodeScale == null) {\n encodeScale = 1024;\n }\n\n var features = jsonCompressed.features;\n zrUtil.each(features, function (feature) {\n var geometry = feature.geometry;\n var encodeOffsets = geometry.encodeOffsets;\n var coordinates = geometry.coordinates; // Geometry may be appeded manually in the script after json loaded.\n // In this case this geometry is usually not encoded.\n\n if (!encodeOffsets) {\n return;\n }\n\n switch (geometry.type) {\n case 'LineString':\n geometry.coordinates = decodeRing(coordinates, encodeOffsets, encodeScale);\n break;\n\n case 'Polygon':\n decodeRings(coordinates, encodeOffsets, encodeScale);\n break;\n\n case 'MultiLineString':\n decodeRings(coordinates, encodeOffsets, encodeScale);\n break;\n\n case 'MultiPolygon':\n zrUtil.each(coordinates, function (rings, idx) {\n return decodeRings(rings, encodeOffsets[idx], encodeScale);\n });\n }\n }); // Has been decoded\n\n jsonCompressed.UTF8Encoding = false;\n return jsonCompressed;\n}\n\nfunction decodeRings(rings, encodeOffsets, encodeScale) {\n for (var c = 0; c < rings.length; c++) {\n rings[c] = decodeRing(rings[c], encodeOffsets[c], encodeScale);\n }\n}\n\nfunction decodeRing(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\nexport default function parseGeoJSON(geoJson, nameProperty) {\n geoJson = 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 geometries = [];\n\n switch (geo.type) {\n case 'Polygon':\n var coordinates = geo.coordinates; // According to the GeoJSON specification.\n // First must be exterior, and the rest are all interior(holes).\n\n geometries.push(new GeoJSONPolygonGeometry(coordinates[0], coordinates.slice(1)));\n break;\n\n case 'MultiPolygon':\n zrUtil.each(geo.coordinates, function (item) {\n if (item[0]) {\n geometries.push(new GeoJSONPolygonGeometry(item[0], item.slice(1)));\n }\n });\n break;\n\n case 'LineString':\n geometries.push(new GeoJSONLineStringGeometry([geo.coordinates]));\n break;\n\n case 'MultiLineString':\n geometries.push(new GeoJSONLineStringGeometry(geo.coordinates));\n }\n\n var region = new GeoJSONRegion(properties[nameProperty || 'name'], geometries, properties.cp);\n region.properties = properties;\n return region;\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Fix for 南海诸岛\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { GeoJSONRegion } from '../Region.js';\nvar geoCoord = [126, 25];\nvar nanhaiName = '南海诸岛';\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\nexport default function fixNanhai(mapType, regions) {\n if (mapType === 'china') {\n for (var i = 0; i < regions.length; i++) {\n // Already exists.\n if (regions[i].name === nanhaiName) {\n return;\n }\n }\n\n regions.push(new GeoJSONRegion(nanhaiName, zrUtil.map(points, function (exterior) {\n return {\n type: 'polygon',\n exterior: exterior\n };\n }), geoCoord));\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar coordsOffsetMap = {\n '南海诸岛': [32, 80],\n // 全国\n '广东': [0, -10],\n '香港': [10, 5],\n '澳门': [-10, 10],\n // '北京': [-10, 0],\n '天津': [5, 5]\n};\nexport default function fixTextCoords(mapType, region) {\n if (mapType === 'china') {\n var coordFix = coordsOffsetMap[region.name];\n\n if (coordFix) {\n var cp = region.getCenter();\n cp[0] += coordFix[0] / 10.5;\n cp[1] += -coordFix[1] / (10.5 / 0.75);\n region.setCenter(cp);\n }\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Fix for 钓鱼岛\n// let Region = require('../Region');\n// let zrUtil = require('zrender/lib/core/util');\n// let 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]]];\nexport default function fixDiaoyuIsland(mapType, region) {\n if (mapType === 'china' && region.name === '台湾') {\n region.geometries.push({\n type: 'polygon',\n exterior: points[0]\n });\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, isString, createHashMap, hasOwn } from 'zrender/lib/core/util.js';\nimport parseGeoJson from './parseGeoJson.js'; // Built-in GEO fixer.\n\nimport fixNanhai from './fix/nanhai.js';\nimport fixTextCoord from './fix/textCoord.js';\nimport fixDiaoyuIsland from './fix/diaoyuIsland.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nvar DEFAULT_NAME_PROPERTY = 'name';\n\nvar GeoJSONResource =\n/** @class */\nfunction () {\n function GeoJSONResource(mapName, geoJSON, specialAreas) {\n this.type = 'geoJSON';\n this._parsedMap = createHashMap();\n this._mapName = mapName;\n this._specialAreas = specialAreas; // PENDING: delay the parse to the first usage to rapid up the FMP?\n\n this._geoJSON = parseInput(geoJSON);\n }\n /**\n * @param nameMap can be null/undefined\n * @param nameProperty can be null/undefined\n */\n\n\n GeoJSONResource.prototype.load = function (nameMap, nameProperty) {\n nameProperty = nameProperty || DEFAULT_NAME_PROPERTY;\n\n var parsed = this._parsedMap.get(nameProperty);\n\n if (!parsed) {\n var rawRegions = this._parseToRegions(nameProperty);\n\n parsed = this._parsedMap.set(nameProperty, {\n regions: rawRegions,\n boundingRect: calculateBoundingRect(rawRegions)\n });\n }\n\n var regionsMap = createHashMap();\n var finalRegions = [];\n each(parsed.regions, function (region) {\n var regionName = region.name; // Try use the alias in geoNameMap\n\n if (nameMap && hasOwn(nameMap, regionName)) {\n region = region.cloneShallow(regionName = nameMap[regionName]);\n }\n\n finalRegions.push(region);\n regionsMap.set(regionName, region);\n });\n return {\n regions: finalRegions,\n boundingRect: parsed.boundingRect || new BoundingRect(0, 0, 0, 0),\n regionsMap: regionsMap\n };\n };\n\n GeoJSONResource.prototype._parseToRegions = function (nameProperty) {\n var mapName = this._mapName;\n var geoJSON = this._geoJSON;\n var rawRegions; // https://jsperf.com/try-catch-performance-overhead\n\n try {\n rawRegions = geoJSON ? parseGeoJson(geoJSON, nameProperty) : [];\n } catch (e) {\n throw new Error('Invalid geoJson format\\n' + e.message);\n }\n\n fixNanhai(mapName, rawRegions);\n each(rawRegions, function (region) {\n var regionName = region.name;\n fixTextCoord(mapName, region);\n fixDiaoyuIsland(mapName, region); // Some area like Alaska in USA map needs to be tansformed\n // to look better\n\n var specialArea = this._specialAreas && this._specialAreas[regionName];\n\n if (specialArea) {\n region.transformTo(specialArea.left, specialArea.top, specialArea.width, specialArea.height);\n }\n }, this);\n return rawRegions;\n };\n /**\n * Only for exporting to users.\n * **MUST NOT** used internally.\n */\n\n\n GeoJSONResource.prototype.getMapForUser = function () {\n return {\n // For backward compatibility, use geoJson\n // PENDING: it has been returning them without clone.\n // do we need to avoid outsite modification?\n geoJson: this._geoJSON,\n geoJSON: this._geoJSON,\n specialAreas: this._specialAreas\n };\n };\n\n return GeoJSONResource;\n}();\n\nexport { GeoJSONResource };\n\nfunction calculateBoundingRect(regions) {\n var rect;\n\n for (var i = 0; i < regions.length; i++) {\n var regionRect = regions[i].getBoundingRect();\n rect = rect || regionRect.clone();\n rect.union(regionRect);\n }\n\n return rect;\n}\n\nfunction parseInput(source) {\n return !isString(source) ? source : typeof JSON !== 'undefined' && JSON.parse ? JSON.parse(source) : new Function('return (' + source + ');')();\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createHashMap } from 'zrender/lib/core/util.js';\nimport { GeoSVGResource } from './GeoSVGResource.js';\nimport { GeoJSONResource } from './GeoJSONResource.js';\nvar storage = createHashMap();\nexport default {\n /**\n * Compatible with previous `echarts.registerMap`.\n *\n * @usage\n * ```js\n *\n * echarts.registerMap('USA', geoJson, specialAreas);\n *\n * echarts.registerMap('USA', {\n * geoJson: geoJson,\n * specialAreas: {...}\n * });\n * echarts.registerMap('USA', {\n * geoJSON: geoJson,\n * specialAreas: {...}\n * });\n *\n * echarts.registerMap('airport', {\n * svg: svg\n * }\n * ```\n *\n * Note:\n * Do not support that register multiple geoJSON or SVG\n * one map name. Because different geoJSON and SVG have\n * different unit. It's not easy to make sure how those\n * units are mapping/normalize.\n * If intending to use multiple geoJSON or SVG, we can\n * use multiple geo coordinate system.\n */\n registerMap: function (mapName, rawDef, rawSpecialAreas) {\n if (rawDef.svg) {\n var resource = new GeoSVGResource(mapName, rawDef.svg);\n storage.set(mapName, resource);\n } else {\n // Recommend:\n // echarts.registerMap('eu', { geoJSON: xxx, specialAreas: xxx });\n // Backward compatibility:\n // echarts.registerMap('eu', geoJSON, specialAreas);\n // echarts.registerMap('eu', { geoJson: xxx, specialAreas: xxx });\n var geoJSON = rawDef.geoJson || rawDef.geoJSON;\n\n if (geoJSON && !rawDef.features) {\n rawSpecialAreas = rawDef.specialAreas;\n } else {\n geoJSON = rawDef;\n }\n\n var resource = new GeoJSONResource(mapName, geoJSON, rawSpecialAreas);\n storage.set(mapName, resource);\n }\n },\n getGeoResource: function (mapName) {\n return storage.get(mapName);\n },\n\n /**\n * Only for exporting to users.\n * **MUST NOT** used internally.\n */\n getMapForUser: function (mapName) {\n var resource = storage.get(mapName); // Do not support return SVG until some real requirement come.\n\n return resource && resource.type === 'geoJSON' && resource.getMapForUser();\n },\n load: function (mapName, nameMap, nameProperty) {\n var resource = storage.get(mapName);\n\n if (!resource) {\n if (process.env.NODE_ENV !== 'production') {\n console.error('Map ' + mapName + ' not exists. The GeoJSON of the map must be provided.');\n }\n\n return;\n }\n\n return resource.load(nameMap, nameProperty);\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport RoamController from './RoamController.js';\nimport * as roamHelper from '../../component/helper/roamHelper.js';\nimport { onIrrelevantElement } from '../../component/helper/cursorHelper.js';\nimport * as graphic from '../../util/graphic.js';\nimport { toggleHoverEmphasis, enableComponentHighDownFeatures, setDefaultStateProxy } from '../../util/states.js';\nimport geoSourceManager from '../../coord/geo/geoSourceManager.js';\nimport { getUID } from '../../util/component.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { createOrUpdatePatternFromDecal } from '../../util/decal.js';\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\nimport { makeInner } from '../../util/model.js';\n/**\n * Only these tags enable use `itemStyle` if they are named in SVG.\n * Other tags like might not suitable for `itemStyle`.\n * They will not be considered to be styled until some requirements come.\n */\n\nvar OPTION_STYLE_ENABLED_TAGS = ['rect', 'circle', 'line', 'ellipse', 'polygon', 'polyline', 'path'];\nvar OPTION_STYLE_ENABLED_TAG_MAP = zrUtil.createHashMap(OPTION_STYLE_ENABLED_TAGS);\nvar STATE_TRIGGER_TAG_MAP = zrUtil.createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(['g']));\nvar LABEL_HOST_MAP = zrUtil.createHashMap(OPTION_STYLE_ENABLED_TAGS.concat(['g']));\nvar mapLabelRaw = makeInner();\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} // Only stroke can be used for line.\n// Using fill in style if stroke not exits.\n// TODO Not sure yet. Perhaps a separate `lineStyle`?\n\n\nfunction fixLineStyle(styleHost) {\n var style = styleHost.style;\n\n if (style) {\n style.stroke = style.stroke || style.fill;\n style.fill = null;\n }\n}\n\nvar MapDraw =\n/** @class */\nfunction () {\n function MapDraw(api) {\n var group = new graphic.Group();\n this.uid = getUID('ec_map_draw');\n this._controller = new RoamController(api.getZr());\n this._controllerHost = {\n target: group\n };\n this.group = group;\n group.add(this._regionsGroup = new graphic.Group());\n group.add(this._svgGroup = new graphic.Group());\n }\n\n MapDraw.prototype.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 var regionsGroup = this._regionsGroup;\n var group = this.group;\n var transformInfo = geo.getTransformInfo();\n var transformInfoRaw = transformInfo.raw;\n var transformInfoRoam = transformInfo.roam; // No animation when first draw or in action\n\n var isFirstDraw = !regionsGroup.childAt(0) || payload;\n\n if (isFirstDraw) {\n group.x = transformInfoRoam.x;\n group.y = transformInfoRoam.y;\n group.scaleX = transformInfoRoam.scaleX;\n group.scaleY = transformInfoRoam.scaleY;\n group.dirty();\n } else {\n graphic.updateProps(group, transformInfoRoam, mapOrGeoModel);\n }\n\n var isVisualEncodedByVisualMap = data && data.getVisual('visualMeta') && data.getVisual('visualMeta').length > 0;\n var viewBuildCtx = {\n api: api,\n geo: geo,\n mapOrGeoModel: mapOrGeoModel,\n data: data,\n isVisualEncodedByVisualMap: isVisualEncodedByVisualMap,\n isGeo: isGeo,\n transformInfoRaw: transformInfoRaw\n };\n\n if (geo.resourceType === 'geoJSON') {\n this._buildGeoJSON(viewBuildCtx);\n } else if (geo.resourceType === 'geoSVG') {\n this._buildSVG(viewBuildCtx);\n }\n\n this._updateController(mapOrGeoModel, ecModel, api);\n\n this._updateMapSelectHandler(mapOrGeoModel, regionsGroup, api, fromView);\n };\n\n MapDraw.prototype._buildGeoJSON = function (viewBuildCtx) {\n var regionsGroupByName = this._regionsGroupByName = zrUtil.createHashMap();\n var regionsInfoByName = zrUtil.createHashMap();\n var regionsGroup = this._regionsGroup;\n var transformInfoRaw = viewBuildCtx.transformInfoRaw;\n var mapOrGeoModel = viewBuildCtx.mapOrGeoModel;\n var data = viewBuildCtx.data;\n var projection = viewBuildCtx.geo.projection;\n var projectionStream = projection && projection.stream;\n\n function transformPoint(point, project) {\n if (project) {\n // projection may return null point.\n point = project(point);\n }\n\n return point && [point[0] * transformInfoRaw.scaleX + transformInfoRaw.x, point[1] * transformInfoRaw.scaleY + transformInfoRaw.y];\n }\n\n ;\n\n function transformPolygonPoints(inPoints) {\n var outPoints = []; // If projectionStream is provided. Use it instead of single point project.\n\n var project = !projectionStream && projection && projection.project;\n\n for (var i = 0; i < inPoints.length; ++i) {\n var newPt = transformPoint(inPoints[i], project);\n newPt && outPoints.push(newPt);\n }\n\n return outPoints;\n }\n\n function getPolyShape(points) {\n return {\n shape: {\n points: transformPolygonPoints(points)\n }\n };\n }\n\n regionsGroup.removeAll(); // Only when the resource is GeoJSON, there is `geo.regions`.\n\n zrUtil.each(viewBuildCtx.geo.regions, function (region) {\n var regionName = region.name; // 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\n var regionGroup = regionsGroupByName.get(regionName);\n\n var _a = regionsInfoByName.get(regionName) || {},\n dataIdx = _a.dataIdx,\n regionModel = _a.regionModel;\n\n if (!regionGroup) {\n regionGroup = regionsGroupByName.set(regionName, new graphic.Group());\n regionsGroup.add(regionGroup);\n dataIdx = data ? data.indexOfName(regionName) : null;\n regionModel = viewBuildCtx.isGeo ? mapOrGeoModel.getRegionModel(regionName) : data ? data.getItemModel(dataIdx) : null;\n regionsInfoByName.set(regionName, {\n dataIdx: dataIdx,\n regionModel: regionModel\n });\n }\n\n var polygonSubpaths = [];\n var polylineSubpaths = [];\n zrUtil.each(region.geometries, function (geometry) {\n // Polygon and MultiPolygon\n if (geometry.type === 'polygon') {\n var polys = [geometry.exterior].concat(geometry.interiors || []);\n\n if (projectionStream) {\n polys = projectPolys(polys, projectionStream);\n }\n\n zrUtil.each(polys, function (poly) {\n polygonSubpaths.push(new graphic.Polygon(getPolyShape(poly)));\n });\n } // LineString and MultiLineString\n else {\n var points = geometry.points;\n\n if (projectionStream) {\n points = projectPolys(points, projectionStream, true);\n }\n\n zrUtil.each(points, function (points) {\n polylineSubpaths.push(new graphic.Polyline(getPolyShape(points)));\n });\n }\n });\n var centerPt = transformPoint(region.getCenter(), projection && projection.project);\n\n function createCompoundPath(subpaths, isLine) {\n if (!subpaths.length) {\n return;\n }\n\n var compoundPath = new graphic.CompoundPath({\n culling: true,\n segmentIgnoreThreshold: 1,\n shape: {\n paths: subpaths\n }\n });\n regionGroup.add(compoundPath);\n applyOptionStyleForRegion(viewBuildCtx, compoundPath, dataIdx, regionModel);\n resetLabelForRegion(viewBuildCtx, compoundPath, regionName, regionModel, mapOrGeoModel, dataIdx, centerPt);\n\n if (isLine) {\n fixLineStyle(compoundPath);\n zrUtil.each(compoundPath.states, fixLineStyle);\n }\n }\n\n createCompoundPath(polygonSubpaths);\n createCompoundPath(polylineSubpaths, true);\n }); // Ensure children have been added to `regionGroup` before calling them.\n\n regionsGroupByName.each(function (regionGroup, regionName) {\n var _a = regionsInfoByName.get(regionName),\n dataIdx = _a.dataIdx,\n regionModel = _a.regionModel;\n\n resetEventTriggerForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel, dataIdx);\n resetTooltipForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel);\n resetStateTriggerForRegion(viewBuildCtx, regionGroup, regionName, regionModel, mapOrGeoModel);\n }, this);\n };\n\n MapDraw.prototype._buildSVG = function (viewBuildCtx) {\n var mapName = viewBuildCtx.geo.map;\n var transformInfoRaw = viewBuildCtx.transformInfoRaw;\n this._svgGroup.x = transformInfoRaw.x;\n this._svgGroup.y = transformInfoRaw.y;\n this._svgGroup.scaleX = transformInfoRaw.scaleX;\n this._svgGroup.scaleY = transformInfoRaw.scaleY;\n\n if (this._svgResourceChanged(mapName)) {\n this._freeSVG();\n\n this._useSVG(mapName);\n }\n\n var svgDispatcherMap = this._svgDispatcherMap = zrUtil.createHashMap();\n var focusSelf = false;\n zrUtil.each(this._svgGraphicRecord.named, function (namedItem) {\n // Note that we also allow different elements have the same name.\n // For example, a glyph of a city and the label of the city have\n // the same name and their tooltip info can be defined in a single\n // region option.\n var regionName = namedItem.name;\n var mapOrGeoModel = viewBuildCtx.mapOrGeoModel;\n var data = viewBuildCtx.data;\n var svgNodeTagLower = namedItem.svgNodeTagLower;\n var el = namedItem.el;\n var dataIdx = data ? data.indexOfName(regionName) : null;\n var regionModel = mapOrGeoModel.getRegionModel(regionName);\n\n if (OPTION_STYLE_ENABLED_TAG_MAP.get(svgNodeTagLower) != null && el instanceof Displayable) {\n applyOptionStyleForRegion(viewBuildCtx, el, dataIdx, regionModel);\n }\n\n if (el instanceof Displayable) {\n el.culling = true;\n } // We do not know how the SVG like so we'd better not to change z2.\n // Otherwise it might bring some unexpected result. For example,\n // an area hovered that make some inner city can not be clicked.\n\n\n el.z2EmphasisLift = 0; // If self named:\n\n if (!namedItem.namedFrom) {\n // label should batter to be displayed based on the center of \n // if it is named rather than displayed on each child.\n if (LABEL_HOST_MAP.get(svgNodeTagLower) != null) {\n resetLabelForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx, null);\n }\n\n resetEventTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, dataIdx);\n resetTooltipForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel);\n\n if (STATE_TRIGGER_TAG_MAP.get(svgNodeTagLower) != null) {\n var focus_1 = resetStateTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel);\n\n if (focus_1 === 'self') {\n focusSelf = true;\n }\n\n var els = svgDispatcherMap.get(regionName) || svgDispatcherMap.set(regionName, []);\n els.push(el);\n }\n }\n }, this);\n\n this._enableBlurEntireSVG(focusSelf, viewBuildCtx);\n };\n\n MapDraw.prototype._enableBlurEntireSVG = function (focusSelf, viewBuildCtx) {\n // It's a little complicated to support blurring the entire geoSVG in series-map.\n // So do not suport it until some requirements come.\n // At present, in series-map, only regions can be blurred.\n if (focusSelf && viewBuildCtx.isGeo) {\n var blurStyle = viewBuildCtx.mapOrGeoModel.getModel(['blur', 'itemStyle']).getItemStyle(); // Only suport `opacity` here. Because not sure that other props are suitable for\n // all of the elements generated by SVG (especially for Text/TSpan/Image/... ).\n\n var opacity_1 = blurStyle.opacity;\n\n this._svgGraphicRecord.root.traverse(function (el) {\n if (!el.isGroup) {\n // PENDING: clear those settings to SVG elements when `_freeSVG`.\n // (Currently it happen not to be needed.)\n setDefaultStateProxy(el);\n var style = el.ensureState('blur').style || {}; // Do not overwrite the region style that already set from region option.\n\n if (style.opacity == null && opacity_1 != null) {\n style.opacity = opacity_1;\n } // If `ensureState('blur').style = {}`, there will be default opacity.\n // Enable `stateTransition` (animation).\n\n\n el.ensureState('emphasis');\n }\n });\n }\n };\n\n MapDraw.prototype.remove = function () {\n this._regionsGroup.removeAll();\n\n this._regionsGroupByName = null;\n\n this._svgGroup.removeAll();\n\n this._freeSVG();\n\n this._controller.dispose();\n\n this._controllerHost = null;\n };\n\n MapDraw.prototype.findHighDownDispatchers = function (name, geoModel) {\n if (name == null) {\n return [];\n }\n\n var geo = geoModel.coordinateSystem;\n\n if (geo.resourceType === 'geoJSON') {\n var regionsGroupByName = this._regionsGroupByName;\n\n if (regionsGroupByName) {\n var regionGroup = regionsGroupByName.get(name);\n return regionGroup ? [regionGroup] : [];\n }\n } else if (geo.resourceType === 'geoSVG') {\n return this._svgDispatcherMap && this._svgDispatcherMap.get(name) || [];\n }\n };\n\n MapDraw.prototype._svgResourceChanged = function (mapName) {\n return this._svgMapName !== mapName;\n };\n\n MapDraw.prototype._useSVG = function (mapName) {\n var resource = geoSourceManager.getGeoResource(mapName);\n\n if (resource && resource.type === 'geoSVG') {\n var svgGraphic = resource.useGraphic(this.uid);\n\n this._svgGroup.add(svgGraphic.root);\n\n this._svgGraphicRecord = svgGraphic;\n this._svgMapName = mapName;\n }\n };\n\n MapDraw.prototype._freeSVG = function () {\n var mapName = this._svgMapName;\n\n if (mapName == null) {\n return;\n }\n\n var resource = geoSourceManager.getGeoResource(mapName);\n\n if (resource && resource.type === 'geoSVG') {\n resource.freeGraphic(this.uid);\n }\n\n this._svgGraphicRecord = null;\n this._svgDispatcherMap = null;\n\n this._svgGroup.removeAll();\n\n this._svgMapName = null;\n };\n\n MapDraw.prototype._updateController = function (mapOrGeoModel, ecModel, api) {\n var geo = mapOrGeoModel.coordinateSystem;\n var controller = this._controller;\n var controllerHost = this._controllerHost; // @ts-ignore FIXME:TS\n\n controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit');\n controllerHost.zoom = geo.getZoom(); // roamType is will be set default true if it is null\n // @ts-ignore FIXME:TS\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 animation: {\n duration: 0\n }\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 animation: {\n duration: 0\n }\n }));\n }, this);\n controller.setPointerChecker(function (e, x, y) {\n return geo.containPoint([x, y]) && !onIrrelevantElement(e, api, mapOrGeoModel);\n });\n };\n /**\n * FIXME: this is a temporarily workaround.\n * When `geoRoam` the elements need to be reset in `MapView['render']`, because the props like\n * `ignore` might have been modified by `LabelManager`, and `LabelManager#addLabelsOfSeries`\n * will subsequently cache `defaultAttr` like `ignore`. If do not do this reset, the modified\n * props will have no chance to be restored.\n * Note: This reset should be after `clearStates` in `renderSeries` because `useStates` in\n * `renderSeries` will cache the modified `ignore` to `el._normalState`.\n * TODO:\n * Use clone/immutable in `LabelManager`?\n */\n\n\n MapDraw.prototype.resetForLabelLayout = function () {\n this.group.traverse(function (el) {\n var label = el.getTextContent();\n\n if (label) {\n label.ignore = mapLabelRaw(label).ignore;\n }\n });\n };\n\n MapDraw.prototype._updateMapSelectHandler = function (mapOrGeoModel, regionsGroup, api, fromView) {\n var mapDraw = this;\n regionsGroup.off('mousedown');\n regionsGroup.off('click'); // @ts-ignore FIXME:TS resolve type conflict\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 });\n }\n };\n\n return MapDraw;\n}();\n\n;\n\nfunction applyOptionStyleForRegion(viewBuildCtx, el, dataIndex, regionModel) {\n // All of the path are using `itemStyle`, because\n // (1) Some SVG also use fill on polyline (The different between\n // polyline and polygon is \"open\" or \"close\" but not fill or not).\n // (2) For the common props like opacity, if some use itemStyle\n // and some use `lineStyle`, it might confuse users.\n // (3) Most SVG use , where can not detect wether draw a \"line\"\n // or a filled shape, so use `itemStyle` for .\n var normalStyleModel = regionModel.getModel('itemStyle');\n var emphasisStyleModel = regionModel.getModel(['emphasis', 'itemStyle']);\n var blurStyleModel = regionModel.getModel(['blur', 'itemStyle']);\n var selectStyleModel = regionModel.getModel(['select', 'itemStyle']); // NOTE: DONT use 'style' in visual when drawing map.\n // This component is used for drawing underlying map for both geo component and map series.\n\n var normalStyle = getFixedItemStyle(normalStyleModel);\n var emphasisStyle = getFixedItemStyle(emphasisStyleModel);\n var selectStyle = getFixedItemStyle(selectStyleModel);\n var blurStyle = getFixedItemStyle(blurStyleModel); // Update the itemStyle if has data visual\n\n var data = viewBuildCtx.data;\n\n if (data) {\n // Only visual color of each item will be used. It can be encoded by visualMap\n // But visual color of series is used in symbol drawing\n // Visual color for each series is for the symbol draw\n var style = data.getItemVisual(dataIndex, 'style');\n var decal = data.getItemVisual(dataIndex, 'decal');\n\n if (viewBuildCtx.isVisualEncodedByVisualMap && style.fill) {\n normalStyle.fill = style.fill;\n }\n\n if (decal) {\n normalStyle.decal = createOrUpdatePatternFromDecal(decal, viewBuildCtx.api);\n }\n } // SVG text, tspan and image can be named but not supporeted\n // to be styled by region option yet.\n\n\n el.setStyle(normalStyle);\n el.style.strokeNoScale = true;\n el.ensureState('emphasis').style = emphasisStyle;\n el.ensureState('select').style = selectStyle;\n el.ensureState('blur').style = blurStyle; // Enable blur\n\n setDefaultStateProxy(el);\n}\n\nfunction resetLabelForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel, // Exist only if `viewBuildCtx.data` exists.\ndataIdx, // If labelXY not provided, use `textConfig.position: 'inside'`\nlabelXY) {\n var data = viewBuildCtx.data;\n var isGeo = viewBuildCtx.isGeo;\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 // 3. Region has no series legendIcon, which will be add a showLabel flag in mapSymbolLayout\n\n if (isGeo || isDataNaN || itemLayout && itemLayout.showLabel) {\n var query = !isGeo ? dataIdx : regionName;\n var labelFetcher = void 0; // Consider dataIdx not found.\n\n if (!data || dataIdx >= 0) {\n labelFetcher = mapOrGeoModel;\n }\n\n var specifiedTextOpt = labelXY ? {\n normal: {\n align: 'center',\n verticalAlign: 'middle'\n }\n } : null; // Caveat: must be called after `setDefaultStateProxy(el);` called.\n // because textContent will be assign with `el.stateProxy` inside.\n\n setLabelStyle(el, getLabelStatesModels(regionModel), {\n labelFetcher: labelFetcher,\n labelDataIndex: query,\n defaultText: regionName\n }, specifiedTextOpt);\n var textEl = el.getTextContent();\n\n if (textEl) {\n mapLabelRaw(textEl).ignore = textEl.ignore;\n\n if (el.textConfig && labelXY) {\n // Compute a relative offset based on the el bounding rect.\n var rect = el.getBoundingRect().clone(); // Need to make sure the percent position base on the same rect in normal and\n // emphasis state. Otherwise if using boundingRect of el, but the emphasis state\n // has borderWidth (even 0.5px), the text position will be changed obviously\n // if the position is very big like ['1234%', '1345%'].\n\n el.textConfig.layoutRect = rect;\n el.textConfig.position = [(labelXY[0] - rect.x) / rect.width * 100 + '%', (labelXY[1] - rect.y) / rect.height * 100 + '%'];\n }\n } // PENDING:\n // If labelLayout is enabled (test/label-layout.html), el.dataIndex should be specified.\n // But el.dataIndex is also used to determine whether user event should be triggered,\n // where el.seriesIndex or el.dataModel must be specified. At present for a single el\n // there is not case that \"only label layout enabled but user event disabled\", so here\n // we depends `resetEventTriggerForRegion` to do the job of setting `el.dataIndex`.\n\n\n el.disableLabelAnimation = true;\n } else {\n el.removeTextContent();\n el.removeTextConfig();\n el.disableLabelAnimation = null;\n }\n}\n\nfunction resetEventTriggerForRegion(viewBuildCtx, eventTrigger, regionName, regionModel, mapOrGeoModel, // Exist only if `viewBuildCtx.data` exists.\ndataIdx) {\n // setItemGraphicEl, setHoverStyle after all polygons and labels\n // are added to the regionGroup\n if (viewBuildCtx.data) {\n // FIXME: when series-map use a SVG map, and there are duplicated name specified\n // on different SVG elements, after `data.setItemGraphicEl(...)`:\n // (1) all of them will be mounted with `dataIndex`, `seriesIndex`, so that tooltip\n // can be triggered only mouse hover. That's correct.\n // (2) only the last element will be kept in `data`, so that if trigger tooltip\n // by `dispatchAction`, only the last one can be found and triggered. That might be\n // not correct. We will fix it in future if anyone demanding that.\n viewBuildCtx.data.setItemGraphicEl(dataIdx, eventTrigger);\n } // series-map will not trigger \"geoselectchange\" no matter it is\n // based on a declared geo component. Because series-map will\n // trigger \"selectchange\". If it trigger both the two events,\n // If users call `chart.dispatchAction({type: 'toggleSelect'})`,\n // it not easy to also fire event \"geoselectchanged\".\n else {\n // Package custom mouse event for geo component\n getECData(eventTrigger).eventData = {\n componentType: 'geo',\n componentIndex: mapOrGeoModel.componentIndex,\n geoIndex: mapOrGeoModel.componentIndex,\n name: regionName,\n region: regionModel && regionModel.option || {}\n };\n }\n}\n\nfunction resetTooltipForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel) {\n if (!viewBuildCtx.data) {\n graphic.setTooltipConfig({\n el: el,\n componentModel: mapOrGeoModel,\n itemName: regionName,\n // @ts-ignore FIXME:TS fix the \"compatible with each other\"?\n itemTooltipOption: regionModel.get('tooltip')\n });\n }\n}\n\nfunction resetStateTriggerForRegion(viewBuildCtx, el, regionName, regionModel, mapOrGeoModel) {\n // @ts-ignore FIXME:TS fix the \"compatible with each other\"?\n el.highDownSilentOnTouch = !!mapOrGeoModel.get('selectedMode'); // @ts-ignore FIXME:TS fix the \"compatible with each other\"?\n\n var emphasisModel = regionModel.getModel('emphasis');\n var focus = emphasisModel.get('focus');\n toggleHoverEmphasis(el, focus, emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n\n if (viewBuildCtx.isGeo) {\n enableComponentHighDownFeatures(el, mapOrGeoModel, regionName);\n }\n\n return focus;\n}\n\nfunction projectPolys(rings, // Polygons include exterior and interiors. Or polylines.\ncreateStream, isLine) {\n var polygons = [];\n var curPoly;\n\n function startPolygon() {\n curPoly = [];\n }\n\n function endPolygon() {\n if (curPoly.length) {\n polygons.push(curPoly);\n curPoly = [];\n }\n }\n\n var stream = createStream({\n polygonStart: startPolygon,\n polygonEnd: endPolygon,\n lineStart: startPolygon,\n lineEnd: endPolygon,\n point: function (x, y) {\n // May have NaN values from stream.\n if (isFinite(x) && isFinite(y)) {\n curPoly.push([x, y]);\n }\n },\n sphere: function () {}\n });\n !isLine && stream.polygonStart();\n zrUtil.each(rings, function (ring) {\n stream.lineStart();\n\n for (var i = 0; i < ring.length; i++) {\n stream.point(ring[i][0], ring[i][1]);\n }\n\n stream.lineEnd();\n });\n !isLine && stream.polygonEnd();\n return polygons;\n}\n\nexport default MapDraw; // @ts-ignore FIXME:TS fix the \"compatible with each other\"?","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as graphic from '../../util/graphic.js';\nimport MapDraw from '../../component/helper/MapDraw.js';\nimport ChartView from '../../view/Chart.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { setStatesFlag, Z2_EMPHASIS_LIFT } from '../../util/states.js';\n\nvar MapView =\n/** @class */\nfunction (_super) {\n __extends(MapView, _super);\n\n function MapView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = MapView.type;\n return _this;\n }\n\n MapView.prototype.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 }\n\n if (this._mapDraw && payload && payload.type === 'geoRoam') {\n this._mapDraw.resetForLabelLayout();\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);\n group.add(mapDraw.group);\n mapDraw.draw(mapModel, ecModel, api, this, payload);\n this._mapDraw = mapDraw;\n } else {\n // Remove drawn 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\n MapView.prototype.remove = function () {\n this._mapDraw && this._mapDraw.remove();\n this._mapDraw = null;\n this.group.removeAll();\n };\n\n MapView.prototype.dispose = function () {\n this._mapDraw && this._mapDraw.remove();\n this._mapDraw = null;\n };\n\n MapView.prototype._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 // TODO\n fill: mapModel.getData().getVisual('style').fill\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 ? 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_1 = originalData.getName(originalDataIndex);\n var fullIndex_1 = fullData.indexOfName(name_1);\n var itemModel = originalData.getItemModel(originalDataIndex);\n var labelModel = itemModel.getModel('label');\n var regionGroup = fullData.getItemGraphicEl(fullIndex_1); // `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 beginning, and this scenario is rarely encountered.\n // So it won't be fixed until we have to.\n\n setLabelStyle(circle, getLabelStatesModels(itemModel), {\n labelFetcher: {\n getFormattedLabel: function (idx, state) {\n return mapModel.getFormattedLabel(fullIndex_1, state);\n }\n },\n defaultText: name_1\n });\n circle.disableLabelAnimation = true;\n\n if (!labelModel.get('position')) {\n circle.setTextConfig({\n position: 'bottom'\n });\n }\n\n regionGroup.onHoverStateChange = function (toState) {\n setStatesFlag(circle, toState);\n };\n }\n\n group.add(circle);\n });\n };\n\n MapView.type = 'map';\n return MapView;\n}(ChartView);\n\nexport default MapView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply.js';\nimport SeriesModel from '../../model/Series.js';\nimport geoSourceManager from '../../coord/geo/geoSourceManager.js';\nimport { makeSeriesEncodeForNameBased } from '../../data/helper/sourceHelper.js';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup.js';\nimport { createSymbol } from '../../util/symbol.js';\n\nvar MapSeries =\n/** @class */\nfunction (_super) {\n __extends(MapSeries, _super);\n\n function MapSeries() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = MapSeries.type; // Only first map series of same mapType will drawMap.\n\n _this.needsDrawMap = false; // Group of all map series with same mapType\n\n _this.seriesGroup = [];\n\n _this.getTooltipPosition = function (dataIndex) {\n if (dataIndex != null) {\n var name_1 = this.getData().getName(dataIndex);\n var geo = this.coordinateSystem;\n var region = geo.getRegion(name_1);\n return region && geo.dataToPoint(region.getCenter());\n }\n };\n\n return _this;\n }\n\n MapSeries.prototype.getInitialData = function (option) {\n var data = createSeriesDataSimply(this, {\n coordDimensions: ['value'],\n encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)\n });\n var dataNameMap = zrUtil.createHashMap();\n var toAppendNames = [];\n\n for (var i = 0, len = data.count(); i < len; i++) {\n var name_2 = data.getName(i);\n dataNameMap.set(name_2, true);\n }\n\n var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap, this.option.nameProperty);\n zrUtil.each(geoSource.regions, function (region) {\n var name = region.name;\n\n if (!dataNameMap.get(name)) {\n toAppendNames.push(name);\n }\n }); // Complete data with missing regions. The consequent processes (like visual\n // map and render) can not be performed without a \"full data\". For example,\n // find `dataIndex` by name.\n\n data.appendValues([], toAppendNames);\n return data;\n };\n /**\n * If no host geo model, return null, which means using a\n * inner exclusive geo model.\n */\n\n\n MapSeries.prototype.getHostGeoModel = function () {\n var geoIndex = this.option.geoIndex;\n return geoIndex != null ? this.ecModel.getComponent('geo', geoIndex) : null;\n };\n\n MapSeries.prototype.getMapType = function () {\n return (this.getHostGeoModel() || this).option.map;\n }; // _fillOption(option, mapName) {\n // Shallow clone\n // option = zrUtil.extend({}, option);\n // option.data = geoCreator.getFilledRegions(option.data, mapName, option.nameMap);\n // return option;\n // }\n\n\n MapSeries.prototype.getRawValue = function (dataIndex) {\n // Use value stored in data instead because it is calculated from multiple series\n // FIXME Provide all value of multiple series ?\n var data = this.getData();\n return data.get(data.mapDimension('value'), dataIndex);\n };\n /**\n * Get model of region\n */\n\n\n MapSeries.prototype.getRegionModel = function (regionName) {\n var data = this.getData();\n return data.getItemModel(data.indexOfName(regionName));\n };\n /**\n * Map tooltip formatter\n */\n\n\n MapSeries.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n // FIXME orignalData and data is a bit confusing\n var data = this.getData();\n var value = this.getRawValue(dataIndex);\n var name = data.getName(dataIndex);\n var seriesGroup = this.seriesGroup;\n var seriesNames = [];\n\n for (var i = 0; i < seriesGroup.length; i++) {\n var otherIndex = seriesGroup[i].originalData.indexOfName(name);\n var valueDim = data.mapDimension('value');\n\n if (!isNaN(seriesGroup[i].originalData.get(valueDim, otherIndex))) {\n seriesNames.push(seriesGroup[i].name);\n }\n }\n\n return createTooltipMarkup('section', {\n header: seriesNames.join(', '),\n noHeader: !seriesNames.length,\n blocks: [createTooltipMarkup('nameValue', {\n name: name,\n value: value\n })]\n });\n };\n\n MapSeries.prototype.setZoom = function (zoom) {\n this.option.zoom = zoom;\n };\n\n MapSeries.prototype.setCenter = function (center) {\n this.option.center = center;\n };\n\n MapSeries.prototype.getLegendIcon = function (opt) {\n var iconType = opt.icon || 'roundRect';\n var icon = createSymbol(iconType, 0, 0, opt.itemWidth, opt.itemHeight, opt.itemStyle.fill);\n icon.setStyle(opt.itemStyle); // Map do not use itemStyle.borderWidth as border width\n\n icon.style.stroke = 'none'; // No rotation because no series visual symbol for map\n\n if (iconType.indexOf('empty') > -1) {\n icon.style.stroke = icon.style.fill;\n icon.style.fill = '#fff';\n icon.style.lineWidth = 2;\n }\n\n return icon;\n };\n\n MapSeries.type = 'series.map';\n MapSeries.dependencies = ['geo'];\n MapSeries.layoutMode = 'box';\n MapSeries.defaultOption = {\n // 一级层叠\n // zlevel: 0,\n // 二级层叠\n z: 2,\n coordinateSystem: 'geo',\n // map should be explicitly specified since ec3.\n map: '',\n // If `geoIndex` is not specified, a exclusive geo will be\n // created. Otherwise use the specified geo component, and\n // `map` and `mapType` are ignored.\n // geoIndex: 0,\n // 'center' | 'left' | 'right' | 'x%' | {number}\n left: 'center',\n // 'center' | 'top' | 'bottom' | 'x%' | {number}\n top: 'center',\n // right\n // bottom\n // width:\n // height\n // Aspect is width / height. Inited to be geoJson bbox aspect\n // This parameter is used for scale this aspect\n // Default value:\n // for geoSVG source: 1,\n // for geoJSON source: 0.75.\n aspectScale: null,\n // Layout with center and size\n // If you want to put map in a fixed size box with right aspect ratio\n // This two properties may be more convenient.\n // layoutCenter: [50%, 50%]\n // layoutSize: 100\n showLegendSymbol: true,\n // Define left-top, right-bottom coords to control view\n // For example, [ [180, 90], [-180, -90] ],\n // higher priority than center and zoom\n boundingCoords: null,\n // Default on center of map\n center: null,\n zoom: 1,\n scaleLimit: null,\n selectedMode: true,\n label: {\n show: false,\n color: '#000'\n },\n // scaleLimit: null,\n itemStyle: {\n borderWidth: 0.5,\n borderColor: '#444',\n areaColor: '#eee'\n },\n emphasis: {\n label: {\n show: true,\n color: 'rgb(100,0,0)'\n },\n itemStyle: {\n areaColor: 'rgba(255,215,0,0.8)'\n }\n },\n select: {\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 nameProperty: 'name'\n };\n return MapSeries;\n}(SeriesModel);\n\nexport default MapSeries;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js'; // FIXME 公用?\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\nexport default function mapDataStatistic(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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nexport default function mapSymbolLayout(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.getCenter());\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 legendIcon (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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/**\n * Simple view coordinate system\n * Mapping given x, y to transformd view x, y\n */\n\nimport * as vector from 'zrender/lib/core/vector.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport Transformable from 'zrender/lib/core/Transformable.js';\nimport { parsePercent } from '../util/number.js';\nvar v2ApplyTransform = vector.applyTransform;\n\nvar View =\n/** @class */\nfunction (_super) {\n __extends(View, _super);\n\n function View(name) {\n var _this = _super.call(this) || this;\n\n _this.type = 'view';\n _this.dimensions = ['x', 'y'];\n /**\n * Represents the transform brought by roam/zoom.\n * If `View['_viewRect']` applies roam transform,\n * we can get the final displayed rect.\n */\n\n _this._roamTransformable = new Transformable();\n /**\n * Represents the transform from `View['_rect']` to `View['_viewRect']`.\n */\n\n _this._rawTransformable = new Transformable();\n _this.name = name;\n return _this;\n }\n\n View.prototype.setBoundingRect = function (x, y, width, height) {\n this._rect = new BoundingRect(x, y, width, height);\n return this._rect;\n };\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n\n\n View.prototype.getBoundingRect = function () {\n return this._rect;\n };\n\n View.prototype.setViewRect = function (x, y, width, height) {\n this._transformTo(x, y, width, height);\n\n this._viewRect = new BoundingRect(x, y, width, height);\n };\n /**\n * Transformed to particular position and size\n */\n\n\n View.prototype._transformTo = function (x, y, width, height) {\n var rect = this.getBoundingRect();\n var rawTransform = this._rawTransformable;\n rawTransform.transform = rect.calculateTransform(new BoundingRect(x, y, width, height));\n var rawParent = rawTransform.parent;\n rawTransform.parent = null;\n rawTransform.decomposeTransform();\n rawTransform.parent = rawParent;\n\n this._updateTransform();\n };\n /**\n * Set center of view\n */\n\n\n View.prototype.setCenter = function (centerCoord, api) {\n if (!centerCoord) {\n return;\n }\n\n this._center = [parsePercent(centerCoord[0], api.getWidth()), parsePercent(centerCoord[1], api.getHeight())];\n\n this._updateCenterAndZoom();\n };\n\n View.prototype.setZoom = function (zoom) {\n zoom = zoom || 1;\n var zoomLimit = this.zoomLimit;\n\n if (zoomLimit) {\n if (zoomLimit.max != null) {\n zoom = Math.min(zoomLimit.max, zoom);\n }\n\n if (zoomLimit.min != null) {\n zoom = Math.max(zoomLimit.min, zoom);\n }\n }\n\n this._zoom = zoom;\n\n this._updateCenterAndZoom();\n };\n /**\n * Get default center without roam\n */\n\n\n View.prototype.getDefaultCenter = function () {\n // Rect before any transform\n var rawRect = this.getBoundingRect();\n var cx = rawRect.x + rawRect.width / 2;\n var cy = rawRect.y + rawRect.height / 2;\n return [cx, cy];\n };\n\n View.prototype.getCenter = function () {\n return this._center || this.getDefaultCenter();\n };\n\n View.prototype.getZoom = function () {\n return this._zoom || 1;\n };\n\n View.prototype.getRoamTransform = function () {\n return this._roamTransformable.getLocalTransform();\n };\n /**\n * Remove roam\n */\n\n\n View.prototype._updateCenterAndZoom = function () {\n // Must update after view transform updated\n var rawTransformMatrix = this._rawTransformable.getLocalTransform();\n\n var roamTransform = this._roamTransformable;\n var defaultCenter = this.getDefaultCenter();\n var center = this.getCenter();\n var zoom = this.getZoom();\n center = vector.applyTransform([], center, rawTransformMatrix);\n defaultCenter = vector.applyTransform([], defaultCenter, rawTransformMatrix);\n roamTransform.originX = center[0];\n roamTransform.originY = center[1];\n roamTransform.x = defaultCenter[0] - center[0];\n roamTransform.y = defaultCenter[1] - center[1];\n roamTransform.scaleX = roamTransform.scaleY = zoom;\n\n this._updateTransform();\n };\n /**\n * Update transform props on `this` based on the current\n * `this._roamTransformable` and `this._rawTransformable`.\n */\n\n\n View.prototype._updateTransform = function () {\n var roamTransformable = this._roamTransformable;\n var rawTransformable = this._rawTransformable;\n rawTransformable.parent = roamTransformable;\n roamTransformable.updateTransform();\n rawTransformable.updateTransform();\n matrix.copy(this.transform || (this.transform = []), rawTransformable.transform || matrix.create());\n this._rawTransform = rawTransformable.getLocalTransform();\n this.invTransform = this.invTransform || [];\n matrix.invert(this.invTransform, this.transform);\n this.decomposeTransform();\n };\n\n View.prototype.getTransformInfo = function () {\n var rawTransformable = this._rawTransformable;\n var roamTransformable = this._roamTransformable; // Because roamTransformabel has `originX/originY` modified,\n // but the caller of `getTransformInfo` can not handle `originX/originY`,\n // so need to recalculate them.\n\n var dummyTransformable = new Transformable();\n dummyTransformable.transform = roamTransformable.transform;\n dummyTransformable.decomposeTransform();\n return {\n roam: {\n x: dummyTransformable.x,\n y: dummyTransformable.y,\n scaleX: dummyTransformable.scaleX,\n scaleY: dummyTransformable.scaleY\n },\n raw: {\n x: rawTransformable.x,\n y: rawTransformable.y,\n scaleX: rawTransformable.scaleX,\n scaleY: rawTransformable.scaleY\n }\n };\n };\n\n View.prototype.getViewRect = function () {\n return this._viewRect;\n };\n /**\n * Get view rect after roam transform\n */\n\n\n View.prototype.getViewRectAfterRoam = function () {\n var rect = this.getBoundingRect().clone();\n rect.applyTransform(this.transform);\n return rect;\n };\n /**\n * Convert a single (lon, lat) data item to (x, y) point.\n */\n\n\n View.prototype.dataToPoint = function (data, noRoam, out) {\n var transform = noRoam ? this._rawTransform : this.transform;\n out = out || [];\n return transform ? v2ApplyTransform(out, data, transform) : vector.copy(out, data);\n };\n /**\n * Convert a (x, y) point to (lon, lat) data\n */\n\n\n View.prototype.pointToData = function (point) {\n var invTransform = this.invTransform;\n return invTransform ? v2ApplyTransform([], point, invTransform) : [point[0], point[1]];\n };\n\n View.prototype.convertToPixel = function (ecModel, finder, value) {\n var coordSys = getCoordSys(finder);\n return coordSys === this ? coordSys.dataToPoint(value) : null;\n };\n\n View.prototype.convertFromPixel = function (ecModel, finder, pixel) {\n var coordSys = getCoordSys(finder);\n return coordSys === this ? coordSys.pointToData(pixel) : null;\n };\n /**\n * @implements\n */\n\n\n View.prototype.containPoint = function (point) {\n return this.getViewRectAfterRoam().contain(point[0], point[1]);\n };\n\n View.dimensions = ['x', 'y'];\n return View;\n}(Transformable);\n\nfunction getCoordSys(finder) {\n var seriesModel = finder.seriesModel;\n return seriesModel ? seriesModel.coordinateSystem : null; // e.g., graph.\n}\n\nexport default View;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport View from '../View.js';\nimport geoSourceManager from './geoSourceManager.js';\nimport { SINGLE_REFERRING } from '../../util/model.js';\nimport { warn } from '../../util/log.js';\nvar GEO_DEFAULT_PARAMS = {\n 'geoJSON': {\n aspectScale: 0.75,\n invertLongitute: true\n },\n 'geoSVG': {\n aspectScale: 1,\n invertLongitute: false\n }\n};\nexport var geo2DDimensions = ['lng', 'lat'];\n\nvar Geo =\n/** @class */\nfunction (_super) {\n __extends(Geo, _super);\n\n function Geo(name, map, opt) {\n var _this = _super.call(this, name) || this;\n\n _this.dimensions = geo2DDimensions;\n _this.type = 'geo'; // Only store specified name coord via `addGeoCoord`.\n\n _this._nameCoordMap = zrUtil.createHashMap();\n _this.map = map;\n var projection = opt.projection;\n var source = geoSourceManager.load(map, opt.nameMap, opt.nameProperty);\n var resource = geoSourceManager.getGeoResource(map);\n var resourceType = _this.resourceType = resource ? resource.type : null;\n var regions = _this.regions = source.regions;\n var defaultParams = GEO_DEFAULT_PARAMS[resource.type];\n _this._regionsMap = source.regionsMap;\n _this.regions = source.regions;\n\n if (process.env.NODE_ENV !== 'production' && projection) {\n // Do some check\n if (resourceType === 'geoSVG') {\n if (process.env.NODE_ENV !== 'production') {\n warn(\"Map \" + map + \" with SVG source can't use projection. Only GeoJSON source supports projection.\");\n }\n\n projection = null;\n }\n\n if (!(projection.project && projection.unproject)) {\n if (process.env.NODE_ENV !== 'production') {\n warn('project and unproject must be both provided in the projeciton.');\n }\n\n projection = null;\n }\n }\n\n _this.projection = projection;\n var boundingRect;\n\n if (projection) {\n // Can't reuse the raw bounding rect\n for (var i = 0; i < regions.length; i++) {\n var regionRect = regions[i].getBoundingRect(projection);\n boundingRect = boundingRect || regionRect.clone();\n boundingRect.union(regionRect);\n }\n } else {\n boundingRect = source.boundingRect;\n }\n\n _this.setBoundingRect(boundingRect.x, boundingRect.y, boundingRect.width, boundingRect.height); // aspectScale and invertLongitute actually is the parameters default raw projection.\n // So we ignore them if projection is given.\n // Ignore default aspect scale if projection exits.\n\n\n _this.aspectScale = projection ? 1 : zrUtil.retrieve2(opt.aspectScale, defaultParams.aspectScale); // Not invert longitude if projection exits.\n\n _this._invertLongitute = projection ? false : defaultParams.invertLongitute;\n return _this;\n }\n\n Geo.prototype._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 // Longitude 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 var rawParent = rawTransformable.parent;\n rawTransformable.parent = null;\n rawTransformable.decomposeTransform();\n rawTransformable.parent = rawParent;\n\n if (invertLongitute) {\n rawTransformable.scaleY = -rawTransformable.scaleY;\n }\n\n this._updateTransform();\n };\n\n Geo.prototype.getRegion = function (name) {\n return this._regionsMap.get(name);\n };\n\n Geo.prototype.getRegionByCoord = function (coord) {\n var regions = this.regions;\n\n for (var i = 0; i < regions.length; i++) {\n var region = regions[i];\n\n if (region.type === 'geoJSON' && region.contain(coord)) {\n return regions[i];\n }\n }\n };\n /**\n * Add geoCoord for indexing by name\n */\n\n\n Geo.prototype.addGeoCoord = function (name, geoCoord) {\n this._nameCoordMap.set(name, geoCoord);\n };\n /**\n * Get geoCoord by name\n */\n\n\n Geo.prototype.getGeoCoord = function (name) {\n var region = this._regionsMap.get(name); // Calculate center only on demand.\n\n\n return this._nameCoordMap.get(name) || region && region.getCenter();\n };\n\n Geo.prototype.dataToPoint = function (data, noRoam, out) {\n if (zrUtil.isString(data)) {\n // Map area name to geoCoord\n data = this.getGeoCoord(data);\n }\n\n if (data) {\n var projection = this.projection;\n\n if (projection) {\n // projection may return null point.\n data = projection.project(data);\n }\n\n return data && this.projectedToPoint(data, noRoam, out);\n }\n };\n\n Geo.prototype.pointToData = function (point) {\n var projection = this.projection;\n\n if (projection) {\n // projection may return null point.\n point = projection.unproject(point);\n }\n\n return point && this.pointToProjected(point);\n };\n /**\n * Point to projected data. Same with pointToData when projection is used.\n */\n\n\n Geo.prototype.pointToProjected = function (point) {\n return _super.prototype.pointToData.call(this, point);\n };\n\n Geo.prototype.projectedToPoint = function (projected, noRoam, out) {\n return _super.prototype.dataToPoint.call(this, projected, noRoam, out);\n };\n\n Geo.prototype.convertToPixel = function (ecModel, finder, value) {\n var coordSys = getCoordSys(finder);\n return coordSys === this ? coordSys.dataToPoint(value) : null;\n };\n\n Geo.prototype.convertFromPixel = function (ecModel, finder, pixel) {\n var coordSys = getCoordSys(finder);\n return coordSys === this ? coordSys.pointToData(pixel) : null;\n };\n\n return Geo;\n}(View);\n\n;\nzrUtil.mixin(Geo, View);\n\nfunction getCoordSys(finder) {\n var geoModel = finder.geoModel;\n var seriesModel = finder.seriesModel;\n return geoModel ? geoModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem // For map series.\n || (seriesModel.getReferringComponents('geo', SINGLE_REFERRING).models[0] || {}).coordinateSystem : null;\n}\n\nexport default Geo;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport Geo, { geo2DDimensions } from './Geo.js';\nimport * as layout from '../../util/layout.js';\nimport * as numberUtil from '../../util/number.js';\nimport geoSourceManager from './geoSourceManager.js';\nimport * as vector from 'zrender/lib/core/vector.js';\n/**\n * Resize method bound to the geo\n */\n\nfunction resizeGeo(geoModel, api) {\n var boundingCoords = geoModel.get('boundingCoords');\n\n if (boundingCoords != null) {\n var leftTop_1 = boundingCoords[0];\n var rightBottom_1 = boundingCoords[1];\n\n if (!(isFinite(leftTop_1[0]) && isFinite(leftTop_1[1]) && isFinite(rightBottom_1[0]) && isFinite(rightBottom_1[1]))) {\n if (process.env.NODE_ENV !== 'production') {\n console.error('Invalid boundingCoords');\n }\n } else {\n // Sample around the lng/lat rect and use projection to calculate actual bounding rect.\n var projection_1 = this.projection;\n\n if (projection_1) {\n var xMin = leftTop_1[0];\n var yMin = leftTop_1[1];\n var xMax = rightBottom_1[0];\n var yMax = rightBottom_1[1];\n leftTop_1 = [Infinity, Infinity];\n rightBottom_1 = [-Infinity, -Infinity]; // TODO better way?\n\n var sampleLine = function (x0, y0, x1, y1) {\n var dx = x1 - x0;\n var dy = y1 - y0;\n\n for (var i = 0; i <= 100; i++) {\n var p = i / 100;\n var pt = projection_1.project([x0 + dx * p, y0 + dy * p]);\n vector.min(leftTop_1, leftTop_1, pt);\n vector.max(rightBottom_1, rightBottom_1, pt);\n }\n }; // Top\n\n\n sampleLine(xMin, yMin, xMax, yMin); // Right\n\n sampleLine(xMax, yMin, xMax, yMax); // Bottom\n\n sampleLine(xMax, yMax, xMin, yMax); // Left\n\n sampleLine(xMin, yMax, xMax, yMin);\n }\n\n this.setBoundingRect(leftTop_1[0], leftTop_1[1], rightBottom_1[0] - leftTop_1[0], rightBottom_1[1] - leftTop_1[1]);\n }\n }\n\n var rect = this.getBoundingRect();\n var centerOption = geoModel.get('layoutCenter');\n var sizeOption = 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 var center;\n var size;\n\n if (centerOption && sizeOption) {\n center = [numberUtil.parsePercent(centerOption[0], viewWidth), numberUtil.parsePercent(centerOption[1], viewHeight)];\n size = numberUtil.parsePercent(sizeOption, Math.min(viewWidth, viewHeight));\n\n if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) {\n useCenterAndSize = true;\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Given layoutCenter or layoutSize data are invalid. Use left/top/width/height instead.');\n }\n }\n }\n\n var viewRect;\n\n if (useCenterAndSize) {\n 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 var boxLayoutOption = geoModel.getBoxLayoutParams();\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'), api);\n this.setZoom(geoModel.get('zoom'));\n} // Back compat for ECharts2, where the coord map is set on map series:\n// {type: 'map', geoCoord: {'cityA': [116.46,39.92], 'cityA': [119.12,24.61]}},\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/** @class */\nfunction () {\n function GeoCreator() {\n // For deciding which dimensions to use when creating list data\n this.dimensions = geo2DDimensions;\n }\n\n GeoCreator.prototype.create = function (ecModel, api) {\n var geoList = [];\n\n function getCommonGeoProperties(model) {\n return {\n nameProperty: model.get('nameProperty'),\n aspectScale: model.get('aspectScale'),\n projection: model.get('projection')\n };\n } // FIXME Create each time may be slow\n\n\n ecModel.eachComponent('geo', function (geoModel, idx) {\n var mapName = geoModel.get('map');\n var geo = new Geo(mapName + idx, mapName, zrUtil.extend({\n nameMap: geoModel.get('nameMap')\n }, getCommonGeoProperties(geoModel)));\n geo.zoomLimit = geoModel.get('scaleLimit');\n geoList.push(geo); // setGeoCoords(geo, geoModel);\n\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.extend({\n nameMap: zrUtil.mergeAll(nameMapList)\n }, getCommonGeoProperties(mapSeries[0])));\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.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 * Fill given regions array\n */\n\n\n GeoCreator.prototype.getFilledRegions = function (originRegionArr, mapName, nameMap, nameProperty) {\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, nameProperty);\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\n return GeoCreator;\n}();\n\nvar geoCreator = new GeoCreator();\nexport default geoCreator;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as modelUtil from '../../util/model.js';\nimport ComponentModel from '../../model/Component.js';\nimport Model from '../../model/Model.js';\nimport geoCreator from './geoCreator.js';\nimport geoSourceManager from './geoSourceManager.js';\n;\n\nvar GeoModel =\n/** @class */\nfunction (_super) {\n __extends(GeoModel, _super);\n\n function GeoModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = GeoModel.type;\n return _this;\n }\n\n GeoModel.prototype.init = function (option, parentModel, ecModel) {\n var source = geoSourceManager.getGeoResource(option.map);\n\n if (source && source.type === 'geoJSON') {\n var itemStyle = option.itemStyle = option.itemStyle || {};\n\n if (!('color' in itemStyle)) {\n itemStyle.color = '#eee';\n }\n }\n\n this.mergeDefaultAndTheme(option, ecModel); // Default label emphasis `show`\n\n modelUtil.defaultEmphasis(option, 'label', ['show']);\n };\n\n GeoModel.prototype.optionUpdated = function () {\n var _this = this;\n\n var option = this.option;\n option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap, option.nameProperty);\n var selectedMap = {};\n this._optionModelMap = zrUtil.reduce(option.regions || [], function (optionModelMap, regionOpt) {\n var regionName = regionOpt.name;\n\n if (regionName) {\n optionModelMap.set(regionName, new Model(regionOpt, _this, _this.ecModel));\n\n if (regionOpt.selected) {\n selectedMap[regionName] = true;\n }\n }\n\n return optionModelMap;\n }, zrUtil.createHashMap());\n\n if (!option.selectedMap) {\n option.selectedMap = selectedMap;\n }\n };\n /**\n * Get model of region.\n */\n\n\n GeoModel.prototype.getRegionModel = function (name) {\n return this._optionModelMap.get(name) || new Model(null, this, this.ecModel);\n };\n /**\n * Format label\n * @param name Region name\n */\n\n\n GeoModel.prototype.getFormattedLabel = function (name, status) {\n var regionModel = this.getRegionModel(name);\n var formatter = status === 'normal' ? regionModel.get(['label', 'formatter']) : regionModel.get(['emphasis', 'label', 'formatter']);\n var params = {\n name: name\n };\n\n if (zrUtil.isFunction(formatter)) {\n params.status = status;\n return formatter(params);\n } else if (zrUtil.isString(formatter)) {\n return formatter.replace('{a}', name != null ? name : '');\n }\n };\n\n GeoModel.prototype.setZoom = function (zoom) {\n this.option.zoom = zoom;\n };\n\n GeoModel.prototype.setCenter = function (center) {\n this.option.center = center;\n }; // PENGING If selectedMode is null ?\n\n\n GeoModel.prototype.select = function (name) {\n var option = this.option;\n var selectedMode = option.selectedMode;\n\n if (!selectedMode) {\n return;\n }\n\n if (selectedMode !== 'multiple') {\n option.selectedMap = null;\n }\n\n var selectedMap = option.selectedMap || (option.selectedMap = {});\n selectedMap[name] = true;\n };\n\n GeoModel.prototype.unSelect = function (name) {\n var selectedMap = this.option.selectedMap;\n\n if (selectedMap) {\n selectedMap[name] = false;\n }\n };\n\n GeoModel.prototype.toggleSelected = function (name) {\n this[this.isSelected(name) ? 'unSelect' : 'select'](name);\n };\n\n GeoModel.prototype.isSelected = function (name) {\n var selectedMap = this.option.selectedMap;\n return !!(selectedMap && selectedMap[name]);\n };\n\n GeoModel.type = 'geo';\n GeoModel.layoutMode = 'box';\n GeoModel.defaultOption = {\n // zlevel: 0,\n z: 0,\n show: true,\n left: 'center',\n top: 'center',\n // Default value:\n // for geoSVG source: 1,\n // for geoJSON source: 0.75.\n aspectScale: null,\n // /// Layout with center and size\n // If you want to put map in a fixed size box with right aspect ratio\n // This two properties may be more convenient\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 borderWidth: 0.5,\n borderColor: '#444' // Default color:\n // + geoJSON: #eee\n // + geoSVG: null (use SVG original `fill`)\n // color: '#eee'\n\n },\n emphasis: {\n label: {\n show: true,\n color: 'rgb(100,0,0)'\n },\n itemStyle: {\n color: 'rgba(255,215,0,0.8)'\n }\n },\n select: {\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: [] // tooltip: {\n // show: false\n // }\n\n };\n return GeoModel;\n}(ComponentModel);\n\nexport default GeoModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction getCenterCoord(view, point) {\n // Use projected coord as center because it's linear.\n return view.pointToProjected ? view.pointToProjected(point) : view.pointToData(point);\n}\n\nexport function updateCenterAndZoom(view, payload, zoomLimit, api) {\n var previousZoom = view.getZoom();\n var center = view.getCenter();\n var zoom = payload.zoom;\n var point = view.projectedToPoint ? view.projectedToPoint(center) : view.dataToPoint(center);\n\n if (payload.dx != null && payload.dy != null) {\n point[0] -= payload.dx;\n point[1] -= payload.dy;\n view.setCenter(getCenterCoord(view, point), api);\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.scaleX *= zoom;\n view.scaleY *= zoom;\n var fixX = (payload.originX - view.x) * (zoom - 1);\n var fixY = (payload.originY - view.y) * (zoom - 1);\n view.x -= fixX;\n view.y -= fixY;\n view.updateTransform(); // Get the new center\n\n view.setCenter(getCenterCoord(view, point), api);\n view.setZoom(zoom * previousZoom);\n }\n\n return {\n center: view.getCenter(),\n zoom: view.getZoom()\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport MapDraw from '../helper/MapDraw.js';\nimport ComponentView from '../../view/Component.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { findEventDispatcher } from '../../util/event.js';\n\nvar GeoView =\n/** @class */\nfunction (_super) {\n __extends(GeoView, _super);\n\n function GeoView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = GeoView.type;\n _this.focusBlurEnabled = true;\n return _this;\n }\n\n GeoView.prototype.init = function (ecModel, api) {\n this._api = api;\n };\n\n GeoView.prototype.render = function (geoModel, ecModel, api, payload) {\n this._model = geoModel;\n\n if (!geoModel.get('show')) {\n this._mapDraw && this._mapDraw.remove();\n this._mapDraw = null;\n return;\n }\n\n if (!this._mapDraw) {\n this._mapDraw = new MapDraw(api);\n }\n\n var mapDraw = this._mapDraw;\n mapDraw.draw(geoModel, ecModel, api, this, payload);\n mapDraw.group.on('click', this._handleRegionClick, this);\n mapDraw.group.silent = geoModel.get('silent');\n this.group.add(mapDraw.group);\n this.updateSelectStatus(geoModel, ecModel, api);\n };\n\n GeoView.prototype._handleRegionClick = function (e) {\n var eventData;\n findEventDispatcher(e.target, function (current) {\n return (eventData = getECData(current).eventData) != null;\n }, true);\n\n if (eventData) {\n this._api.dispatchAction({\n type: 'geoToggleSelect',\n geoId: this._model.id,\n name: eventData.name\n });\n }\n };\n\n GeoView.prototype.updateSelectStatus = function (model, ecModel, api) {\n var _this = this;\n\n this._mapDraw.group.traverse(function (node) {\n var eventData = getECData(node).eventData;\n\n if (eventData) {\n _this._model.isSelected(eventData.name) ? api.enterSelect(node) : api.leaveSelect(node); // No need to traverse children.\n\n return true;\n }\n });\n };\n\n GeoView.prototype.findHighDownDispatchers = function (name) {\n return this._mapDraw && this._mapDraw.findHighDownDispatchers(name, this._model);\n };\n\n GeoView.prototype.dispose = function () {\n this._mapDraw && this._mapDraw.remove();\n };\n\n GeoView.type = 'geo';\n return GeoView;\n}(ComponentView);\n\nexport default GeoView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport GeoModel from '../../coord/geo/GeoModel.js';\nimport geoCreator from '../../coord/geo/geoCreator.js';\nimport { each } from 'zrender/lib/core/util.js';\nimport { updateCenterAndZoom } from '../../action/roamHelper.js';\nimport GeoView from './GeoView.js';\nimport geoSourceManager from '../../coord/geo/geoSourceManager.js';\n\nfunction registerMap(mapName, geoJson, specialAreas) {\n geoSourceManager.registerMap(mapName, geoJson, specialAreas);\n}\n\nexport function install(registers) {\n registers.registerCoordinateSystem('geo', geoCreator);\n registers.registerComponentModel(GeoModel);\n registers.registerComponentView(GeoView);\n registers.registerImpl('registerMap', registerMap);\n registers.registerImpl('getMap', function (mapName) {\n return geoSourceManager.getMapForUser(mapName);\n });\n\n function makeAction(method, actionInfo) {\n actionInfo.update = 'geo:updateSelectStatus';\n registers.registerAction(actionInfo, function (payload, ecModel) {\n var selected = {};\n var allSelected = [];\n ecModel.eachComponent({\n mainType: 'geo',\n query: payload\n }, function (geoModel) {\n geoModel[method](payload.name);\n var geo = geoModel.coordinateSystem;\n each(geo.regions, function (region) {\n selected[region.name] = geoModel.isSelected(region.name) || false;\n }); // Notice: there might be duplicated name in different regions.\n\n var names = [];\n each(selected, function (v, name) {\n selected[name] && names.push(name);\n });\n allSelected.push({\n geoIndex: geoModel.componentIndex,\n // Use singular, the same naming convention as the event `selectchanged`.\n name: names\n });\n });\n return {\n selected: selected,\n allSelected: allSelected,\n name: payload.name\n };\n });\n }\n\n makeAction('toggleSelected', {\n type: 'geoToggleSelect',\n event: 'geoselectchanged'\n });\n makeAction('select', {\n type: 'geoSelect',\n event: 'geoselected'\n });\n makeAction('unSelect', {\n type: 'geoUnSelect',\n event: 'geounselected'\n });\n /**\n * @payload\n * @property {string} [componentType=series]\n * @property {number} [dx]\n * @property {number} [dy]\n * @property {number} [zoom]\n * @property {number} [originX]\n * @property {number} [originY]\n */\n\n registers.registerAction({\n type: 'geoRoam',\n event: 'geoRoam',\n update: 'updateTransform'\n }, function (payload, ecModel, api) {\n var componentType = payload.componentType || 'series';\n ecModel.eachComponent({\n mainType: componentType,\n query: payload\n }, function (componentModel) {\n var geo = componentModel.coordinateSystem;\n\n if (geo.type !== 'geo') {\n return;\n }\n\n var res = updateCenterAndZoom(geo, payload, componentModel.get('scaleLimit'), api);\n componentModel.setCenter && componentModel.setCenter(res.center);\n componentModel.setZoom && componentModel.setZoom(res.zoom); // All map series with same `map` use the same geo coordinate system\n // So the center and zoom must be in sync. Include the series not selected by legend\n\n if (componentType === 'series') {\n each(componentModel.seriesGroup, function (seriesModel) {\n seriesModel.setCenter(res.center);\n seriesModel.setZoom(res.zoom);\n });\n }\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension.js';\nimport MapView from './MapView.js';\nimport MapSeries from './MapSeries.js';\nimport mapDataStatistic from './mapDataStatistic.js';\nimport mapSymbolLayout from './mapSymbolLayout.js';\nimport { createLegacyDataSelectAction } from '../../legacy/dataSelectAction.js';\nimport { install as installGeo } from '../../component/geo/install.js';\nexport function install(registers) {\n use(installGeo);\n registers.registerChartView(MapView);\n registers.registerSeriesModel(MapSeries);\n registers.registerLayout(mapSymbolLayout);\n registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, mapDataStatistic);\n createLegacyDataSelectAction('map', registers.registerAction);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embedded 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 */\nimport * as layout from '../../util/layout.js';\n/**\n * Initialize all computational message for following algorithm.\n */\n\nexport function init(inRoot) {\n var root = inRoot;\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\nexport function firstWalk(node, separation) {\n var children = node.isExpand ? node.children : [];\n var siblings = node.parentNode.children;\n var subtreeW = node.hierNode.i ? siblings[node.hierNode.i - 1] : null;\n\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\nexport function 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}\nexport function separation(cb) {\n return arguments.length ? cb : defaultSeparation;\n}\n/**\n * Transform the common coordinate to radial coordinate.\n */\n\nexport function radialCoordinate(rad, r) {\n rad -= Math.PI / 2;\n return {\n x: r * Math.cos(rad),\n y: r * Math.sin(rad)\n };\n}\n/**\n * Get the layout position of the whole view.\n */\n\nexport function 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\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\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\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\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\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\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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { getECData } from '../../util/innerStore.js';\nimport SymbolClz from '../helper/Symbol.js';\nimport { radialCoordinate } from './layoutHelper.js';\nimport * as bbox from 'zrender/lib/core/bbox.js';\nimport View from '../../coord/View.js';\nimport * as roamHelper from '../../component/helper/roamHelper.js';\nimport RoamController from '../../component/helper/RoamController.js';\nimport { onIrrelevantElement } from '../../component/helper/cursorHelper.js';\nimport { parsePercent } from '../../util/number.js';\nimport ChartView from '../../view/Chart.js';\nimport Path from 'zrender/lib/graphic/Path.js';\nimport { setStatesStylesFromModel, setStatesFlag, setDefaultStateProxy, HOVER_STATE_BLUR } from '../../util/states.js';\n\nvar TreeEdgeShape =\n/** @class */\nfunction () {\n function TreeEdgeShape() {\n this.parentPoint = [];\n this.childPoints = [];\n }\n\n return TreeEdgeShape;\n}();\n\nvar TreePath =\n/** @class */\nfunction (_super) {\n __extends(TreePath, _super);\n\n function TreePath(opts) {\n return _super.call(this, opts) || this;\n }\n\n TreePath.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n\n TreePath.prototype.getDefaultShape = function () {\n return new TreeEdgeShape();\n };\n\n TreePath.prototype.buildPath = function (ctx, shape) {\n var childPoints = shape.childPoints;\n var childLen = childPoints.length;\n var parentPoint = shape.parentPoint;\n var firstChildPos = childPoints[0];\n var lastChildPos = childPoints[childLen - 1];\n\n if (childLen === 1) {\n ctx.moveTo(parentPoint[0], parentPoint[1]);\n ctx.lineTo(firstChildPos[0], firstChildPos[1]);\n return;\n }\n\n var orient = shape.orient;\n var forkDim = orient === 'TB' || orient === 'BT' ? 0 : 1;\n var otherDim = 1 - forkDim;\n var forkPosition = parsePercent(shape.forkPosition, 1);\n var tmpPoint = [];\n tmpPoint[forkDim] = parentPoint[forkDim];\n tmpPoint[otherDim] = parentPoint[otherDim] + (lastChildPos[otherDim] - parentPoint[otherDim]) * forkPosition;\n ctx.moveTo(parentPoint[0], parentPoint[1]);\n ctx.lineTo(tmpPoint[0], tmpPoint[1]);\n ctx.moveTo(firstChildPos[0], firstChildPos[1]);\n tmpPoint[forkDim] = firstChildPos[forkDim];\n ctx.lineTo(tmpPoint[0], tmpPoint[1]);\n tmpPoint[forkDim] = lastChildPos[forkDim];\n ctx.lineTo(tmpPoint[0], tmpPoint[1]);\n ctx.lineTo(lastChildPos[0], lastChildPos[1]);\n\n for (var i = 1; i < childLen - 1; i++) {\n var point = childPoints[i];\n ctx.moveTo(point[0], point[1]);\n tmpPoint[forkDim] = point[forkDim];\n ctx.lineTo(tmpPoint[0], tmpPoint[1]);\n }\n };\n\n return TreePath;\n}(Path);\n\nvar TreeView =\n/** @class */\nfunction (_super) {\n __extends(TreeView, _super);\n\n function TreeView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = TreeView.type;\n _this._mainGroup = new graphic.Group();\n return _this;\n }\n\n TreeView.prototype.init = function (ecModel, api) {\n this._controller = new RoamController(api.getZr());\n this._controllerHost = {\n target: this.group\n };\n this.group.add(this._mainGroup);\n };\n\n TreeView.prototype.render = function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var layoutInfo = seriesModel.layoutInfo;\n var group = this._mainGroup;\n var layout = seriesModel.get('layout');\n\n if (layout === 'radial') {\n group.x = layoutInfo.x + layoutInfo.width / 2;\n group.y = layoutInfo.y + layoutInfo.height / 2;\n } else {\n group.x = layoutInfo.x;\n group.y = layoutInfo.y;\n }\n\n this._updateViewCoordSys(seriesModel, api);\n\n this._updateController(seriesModel, ecModel, api);\n\n var oldData = this._data;\n data.diff(oldData).add(function (newIdx) {\n if (symbolNeedsDraw(data, newIdx)) {\n // Create node and edge\n updateNode(data, newIdx, null, group, seriesModel);\n }\n }).update(function (newIdx, oldIdx) {\n var symbolEl = oldData.getItemGraphicEl(oldIdx);\n\n if (!symbolNeedsDraw(data, newIdx)) {\n symbolEl && removeNode(oldData, oldIdx, symbolEl, group, seriesModel);\n return;\n } // Update node and edge\n\n\n updateNode(data, newIdx, symbolEl, group, seriesModel);\n }).remove(function (oldIdx) {\n var symbolEl = oldData.getItemGraphicEl(oldIdx); // When remove a collapsed node of subtree, since the collapsed\n // node haven't been initialized with a symbol element,\n // you can't found it's symbol element through index.\n // so if we want to remove the symbol element we should insure\n // that the symbol element is not null.\n\n if (symbolEl) {\n removeNode(oldData, oldIdx, symbolEl, group, seriesModel);\n }\n }).execute();\n this._nodeScaleRatio = seriesModel.get('nodeScaleRatio');\n\n this._updateNodeAndLinkScale(seriesModel);\n\n if (seriesModel.get('expandAndCollapse') === true) {\n data.eachItemGraphicEl(function (el, dataIndex) {\n el.off('click').on('click', function () {\n api.dispatchAction({\n type: 'treeExpandAndCollapse',\n seriesId: seriesModel.id,\n dataIndex: dataIndex\n });\n });\n });\n }\n\n this._data = data;\n };\n\n TreeView.prototype._updateViewCoordSys = function (seriesModel, api) {\n var data = seriesModel.getData();\n var points = [];\n data.each(function (idx) {\n var layout = data.getItemLayout(idx);\n\n if (layout && !isNaN(layout.x) && !isNaN(layout.y)) {\n points.push([+layout.x, +layout.y]);\n }\n });\n var min = [];\n var max = [];\n bbox.fromPoints(points, min, max); // If don't Store min max when collapse the root node after roam,\n // the root node will disappear.\n\n var oldMin = this._min;\n var oldMax = this._max; // If width or height is 0\n\n if (max[0] - min[0] === 0) {\n min[0] = oldMin ? oldMin[0] : min[0] - 1;\n max[0] = oldMax ? oldMax[0] : max[0] + 1;\n }\n\n if (max[1] - min[1] === 0) {\n min[1] = oldMin ? oldMin[1] : min[1] - 1;\n max[1] = oldMax ? oldMax[1] : max[1] + 1;\n }\n\n var viewCoordSys = seriesModel.coordinateSystem = new View();\n viewCoordSys.zoomLimit = seriesModel.get('scaleLimit');\n viewCoordSys.setBoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n viewCoordSys.setCenter(seriesModel.get('center'), api);\n viewCoordSys.setZoom(seriesModel.get('zoom')); // Here we use viewCoordSys just for computing the 'position' and 'scale' of the group\n\n this.group.attr({\n x: viewCoordSys.x,\n y: viewCoordSys.y,\n scaleX: viewCoordSys.scaleX,\n scaleY: viewCoordSys.scaleY\n });\n this._min = min;\n this._max = max;\n };\n\n TreeView.prototype._updateController = function (seriesModel, ecModel, api) {\n var _this = this;\n\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 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: 'treeRoam',\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: 'treeRoam',\n zoom: e.scale,\n originX: e.originX,\n originY: e.originY\n });\n\n _this._updateNodeAndLinkScale(seriesModel); // Only update label layout on zoom\n\n\n api.updateLabelLayout();\n });\n };\n\n TreeView.prototype._updateNodeAndLinkScale = function (seriesModel) {\n var data = seriesModel.getData();\n\n var nodeScale = this._getNodeGlobalScale(seriesModel);\n\n data.eachItemGraphicEl(function (el, idx) {\n el.setSymbolScale(nodeScale);\n });\n };\n\n TreeView.prototype._getNodeGlobalScale = function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys.type !== 'view') {\n return 1;\n }\n\n var nodeScaleRatio = this._nodeScaleRatio;\n var groupZoom = coordSys.scaleX || 1; // Scale node when zoom changes\n\n var roamZoom = coordSys.getZoom();\n var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;\n return nodeScale / groupZoom;\n };\n\n TreeView.prototype.dispose = function () {\n this._controller && this._controller.dispose();\n this._controllerHost = null;\n };\n\n TreeView.prototype.remove = function () {\n this._mainGroup.removeAll();\n\n this._data = null;\n };\n\n TreeView.type = 'tree';\n return TreeView;\n}(ChartView);\n\nfunction symbolNeedsDraw(data, dataIndex) {\n var layout = data.getItemLayout(dataIndex);\n return layout && !isNaN(layout.x) && !isNaN(layout.y);\n}\n\nfunction updateNode(data, dataIndex, symbolEl, group, seriesModel) {\n var isInit = !symbolEl;\n var node = data.tree.getNodeByDataIndex(dataIndex);\n var itemModel = node.getModel();\n var visualColor = node.getVisual('style').fill;\n var symbolInnerColor = node.isExpand === false && node.children.length !== 0 ? visualColor : '#fff';\n var virtualRoot = data.tree.root;\n var source = node.parentNode === virtualRoot ? node : node.parentNode || node;\n var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex);\n var sourceLayout = source.getLayout();\n var sourceOldLayout = sourceSymbolEl ? {\n x: sourceSymbolEl.__oldX,\n y: sourceSymbolEl.__oldY,\n rawX: sourceSymbolEl.__radialOldRawX,\n rawY: sourceSymbolEl.__radialOldRawY\n } : sourceLayout;\n var targetLayout = node.getLayout();\n\n if (isInit) {\n symbolEl = new SymbolClz(data, dataIndex, null, {\n symbolInnerColor: symbolInnerColor,\n useNameLabel: true\n });\n symbolEl.x = sourceOldLayout.x;\n symbolEl.y = sourceOldLayout.y;\n } else {\n symbolEl.updateData(data, dataIndex, null, {\n symbolInnerColor: symbolInnerColor,\n useNameLabel: true\n });\n }\n\n symbolEl.__radialOldRawX = symbolEl.__radialRawX;\n symbolEl.__radialOldRawY = symbolEl.__radialRawY;\n symbolEl.__radialRawX = targetLayout.rawX;\n symbolEl.__radialRawY = targetLayout.rawY;\n group.add(symbolEl);\n data.setItemGraphicEl(dataIndex, symbolEl);\n symbolEl.__oldX = symbolEl.x;\n symbolEl.__oldY = symbolEl.y;\n graphic.updateProps(symbolEl, {\n x: targetLayout.x,\n y: targetLayout.y\n }, seriesModel);\n var symbolPath = symbolEl.getSymbolPath();\n\n if (seriesModel.get('layout') === 'radial') {\n var realRoot = virtualRoot.children[0];\n var rootLayout = realRoot.getLayout();\n var length_1 = realRoot.children.length;\n var rad = void 0;\n var isLeft = void 0;\n\n if (targetLayout.x === rootLayout.x && node.isExpand === true && realRoot.children.length) {\n var center = {\n x: (realRoot.children[0].getLayout().x + realRoot.children[length_1 - 1].getLayout().x) / 2,\n y: (realRoot.children[0].getLayout().y + realRoot.children[length_1 - 1].getLayout().y) / 2\n };\n rad = Math.atan2(center.y - rootLayout.y, center.x - rootLayout.x);\n\n if (rad < 0) {\n rad = Math.PI * 2 + rad;\n }\n\n isLeft = center.x < rootLayout.x;\n\n if (isLeft) {\n rad = rad - Math.PI;\n }\n } else {\n rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x);\n\n if (rad < 0) {\n rad = Math.PI * 2 + rad;\n }\n\n if (node.children.length === 0 || node.children.length !== 0 && node.isExpand === false) {\n isLeft = targetLayout.x < rootLayout.x;\n\n if (isLeft) {\n rad = rad - Math.PI;\n }\n } else {\n isLeft = targetLayout.x > rootLayout.x;\n\n if (!isLeft) {\n rad = rad - Math.PI;\n }\n }\n }\n\n var textPosition = isLeft ? 'left' : 'right';\n var normalLabelModel = itemModel.getModel('label');\n var rotate = normalLabelModel.get('rotate');\n var labelRotateRadian = rotate * (Math.PI / 180);\n var textContent = symbolPath.getTextContent();\n\n if (textContent) {\n symbolPath.setTextConfig({\n position: normalLabelModel.get('position') || textPosition,\n rotation: rotate == null ? -rad : labelRotateRadian,\n origin: 'center'\n });\n textContent.setStyle('verticalAlign', 'middle');\n }\n } // Handle status\n\n\n var focus = itemModel.get(['emphasis', 'focus']);\n var focusDataIndices = focus === 'relative' ? zrUtil.concatArray(node.getAncestorsIndices(), node.getDescendantIndices()) : focus === 'ancestor' ? node.getAncestorsIndices() : focus === 'descendant' ? node.getDescendantIndices() : null;\n\n if (focusDataIndices) {\n // Modify the focus to data indices.\n getECData(symbolEl).focus = focusDataIndices;\n }\n\n drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sourceLayout, targetLayout, group);\n\n if (symbolEl.__edge) {\n symbolEl.onHoverStateChange = function (toState) {\n if (toState !== 'blur') {\n // NOTE: Ensure the parent elements will been blurred firstly.\n // According to the return of getAncestorsIndices and getDescendantIndices\n // TODO: A bit tricky.\n var parentEl = node.parentNode && data.getItemGraphicEl(node.parentNode.dataIndex);\n\n if (!(parentEl && parentEl.hoverState === HOVER_STATE_BLUR)) {\n setStatesFlag(symbolEl.__edge, toState);\n }\n }\n };\n }\n}\n\nfunction drawEdge(seriesModel, node, virtualRoot, symbolEl, sourceOldLayout, sourceLayout, targetLayout, group) {\n var itemModel = node.getModel();\n var edgeShape = seriesModel.get('edgeShape');\n var layout = seriesModel.get('layout');\n var orient = seriesModel.getOrient();\n var curvature = seriesModel.get(['lineStyle', 'curveness']);\n var edgeForkPosition = seriesModel.get('edgeForkPosition');\n var lineStyle = itemModel.getModel('lineStyle').getLineStyle();\n var edge = symbolEl.__edge; // curve edge from node -> parent\n // polyline edge from node -> children\n\n if (edgeShape === 'curve') {\n if (node.parentNode && node.parentNode !== virtualRoot) {\n if (!edge) {\n edge = symbolEl.__edge = new graphic.BezierCurve({\n shape: getEdgeShape(layout, orient, curvature, sourceOldLayout, sourceOldLayout)\n });\n }\n\n graphic.updateProps(edge, {\n shape: getEdgeShape(layout, orient, curvature, sourceLayout, targetLayout)\n }, seriesModel);\n }\n } else if (edgeShape === 'polyline') {\n if (layout === 'orthogonal') {\n if (node !== virtualRoot && node.children && node.children.length !== 0 && node.isExpand === true) {\n var children = node.children;\n var childPoints = [];\n\n for (var i = 0; i < children.length; i++) {\n var childLayout = children[i].getLayout();\n childPoints.push([childLayout.x, childLayout.y]);\n }\n\n if (!edge) {\n edge = symbolEl.__edge = new TreePath({\n shape: {\n parentPoint: [targetLayout.x, targetLayout.y],\n childPoints: [[targetLayout.x, targetLayout.y]],\n orient: orient,\n forkPosition: edgeForkPosition\n }\n });\n }\n\n graphic.updateProps(edge, {\n shape: {\n parentPoint: [targetLayout.x, targetLayout.y],\n childPoints: childPoints\n }\n }, seriesModel);\n }\n } else {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('The polyline edgeShape can only be used in orthogonal layout');\n }\n }\n } // show all edge when edgeShape is 'curve', filter node `isExpand` is false when edgeShape is 'polyline'\n\n\n if (edge && !(edgeShape === 'polyline' && !node.isExpand)) {\n edge.useStyle(zrUtil.defaults({\n strokeNoScale: true,\n fill: null\n }, lineStyle));\n setStatesStylesFromModel(edge, itemModel, 'lineStyle');\n setDefaultStateProxy(edge);\n group.add(edge);\n }\n}\n\nfunction removeNodeEdge(node, data, group, seriesModel, removeAnimationOpt) {\n var virtualRoot = data.tree.root;\n\n var _a = getSourceNode(virtualRoot, node),\n source = _a.source,\n sourceLayout = _a.sourceLayout;\n\n var symbolEl = data.getItemGraphicEl(node.dataIndex);\n\n if (!symbolEl) {\n return;\n }\n\n var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex);\n var sourceEdge = sourceSymbolEl.__edge; // 1. when expand the sub tree, delete the children node should delete the edge of\n // the source at the same time. because the polyline edge shape is only owned by the source.\n // 2.when the node is the only children of the source, delete the node should delete the edge of\n // the source at the same time. the same reason as above.\n\n var edge = symbolEl.__edge || (source.isExpand === false || source.children.length === 1 ? sourceEdge : undefined);\n var edgeShape = seriesModel.get('edgeShape');\n var layoutOpt = seriesModel.get('layout');\n var orient = seriesModel.get('orient');\n var curvature = seriesModel.get(['lineStyle', 'curveness']);\n\n if (edge) {\n if (edgeShape === 'curve') {\n graphic.removeElement(edge, {\n shape: getEdgeShape(layoutOpt, orient, curvature, sourceLayout, sourceLayout),\n style: {\n opacity: 0\n }\n }, seriesModel, {\n cb: function () {\n group.remove(edge);\n },\n removeOpt: removeAnimationOpt\n });\n } else if (edgeShape === 'polyline' && seriesModel.get('layout') === 'orthogonal') {\n graphic.removeElement(edge, {\n shape: {\n parentPoint: [sourceLayout.x, sourceLayout.y],\n childPoints: [[sourceLayout.x, sourceLayout.y]]\n },\n style: {\n opacity: 0\n }\n }, seriesModel, {\n cb: function () {\n group.remove(edge);\n },\n removeOpt: removeAnimationOpt\n });\n }\n }\n}\n\nfunction getSourceNode(virtualRoot, node) {\n var source = node.parentNode === virtualRoot ? node : node.parentNode || node;\n var sourceLayout;\n\n while (sourceLayout = source.getLayout(), sourceLayout == null) {\n source = source.parentNode === virtualRoot ? source : source.parentNode || source;\n }\n\n return {\n source: source,\n sourceLayout: sourceLayout\n };\n}\n\nfunction removeNode(data, dataIndex, symbolEl, group, seriesModel) {\n var node = data.tree.getNodeByDataIndex(dataIndex);\n var virtualRoot = data.tree.root;\n var sourceLayout = getSourceNode(virtualRoot, node).sourceLayout; // Use same duration and easing with update to have more consistent animation.\n\n var removeAnimationOpt = {\n duration: seriesModel.get('animationDurationUpdate'),\n easing: seriesModel.get('animationEasingUpdate')\n };\n graphic.removeElement(symbolEl, {\n x: sourceLayout.x + 1,\n y: sourceLayout.y + 1\n }, seriesModel, {\n cb: function () {\n group.remove(symbolEl);\n data.setItemGraphicEl(dataIndex, null);\n },\n removeOpt: removeAnimationOpt\n });\n symbolEl.fadeOut(null, data.hostModel, {\n fadeLabel: true,\n animation: removeAnimationOpt\n }); // remove edge as parent node\n\n node.children.forEach(function (childNode) {\n removeNodeEdge(childNode, data, group, seriesModel, removeAnimationOpt);\n }); // remove edge as child node\n\n removeNodeEdge(node, data, group, seriesModel, removeAnimationOpt);\n}\n\nfunction getEdgeShape(layoutOpt, orient, curvature, sourceLayout, targetLayout) {\n var cpx1;\n var cpy1;\n var cpx2;\n var cpy2;\n var x1;\n var x2;\n var y1;\n var y2;\n\n if (layoutOpt === 'radial') {\n x1 = sourceLayout.rawX;\n y1 = sourceLayout.rawY;\n x2 = targetLayout.rawX;\n y2 = targetLayout.rawY;\n var radialCoor1 = radialCoordinate(x1, y1);\n var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * curvature);\n var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * curvature);\n var radialCoor4 = radialCoordinate(x2, y2);\n return {\n x1: radialCoor1.x || 0,\n y1: radialCoor1.y || 0,\n x2: radialCoor4.x || 0,\n y2: radialCoor4.y || 0,\n cpx1: radialCoor2.x || 0,\n cpy1: radialCoor2.y || 0,\n cpx2: radialCoor3.x || 0,\n cpy2: radialCoor3.y || 0\n };\n } else {\n x1 = sourceLayout.x;\n y1 = sourceLayout.y;\n x2 = targetLayout.x;\n y2 = targetLayout.y;\n\n if (orient === 'LR' || orient === 'RL') {\n cpx1 = x1 + (x2 - x1) * curvature;\n cpy1 = y1;\n cpx2 = x2 + (x1 - x2) * curvature;\n cpy2 = y2;\n }\n\n if (orient === 'TB' || orient === 'BT') {\n cpx1 = x1;\n cpy1 = y1 + (y2 - y1) * curvature;\n cpx2 = x2;\n cpy2 = y2 + (y1 - y2) * curvature;\n }\n }\n\n return {\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n cpx1: cpx1,\n cpy1: cpy1,\n cpx2: cpx2,\n cpy2: cpy2\n };\n}\n\nexport default TreeView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Link lists and struct (graph or tree)\n */\nimport { curry, each, assert, extend, map, keys } from 'zrender/lib/core/util.js';\nimport { makeInner } from '../../util/model.js';\nvar inner = makeInner();\n\nfunction linkSeriesData(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, curry(transferInjection, opt));\n });\n }); // Beyond transfer, additional features should be added to `cloneShallow`.\n\n mainData.wrapMethod('cloneShallow', 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, curry(changeInjection, opt));\n }); // Make sure datas contains mainData.\n\n 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 = extend({}, inner(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, inner(this).mainData, opt);\n }\n\n return res;\n}\n\nfunction changeInjection(opt, res) {\n opt.struct && opt.struct.update();\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(inner(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 [dataType] If not specified, return mainData.\n */\n\n\nfunction getLinkedData(dataType) {\n var mainData = inner(this).mainData;\n return dataType == null || mainData == null ? mainData : inner(mainData).datas[dataType];\n}\n/**\n * Get list of all linked data\n */\n\n\nfunction getLinkedDataAll() {\n var mainData = inner(this).mainData;\n return mainData == null ? [{\n data: mainData\n }] : map(keys(inner(mainData).datas), function (type) {\n return {\n type: type,\n data: inner(mainData).datas[type]\n };\n });\n}\n\nfunction isMainData(data) {\n return inner(data).mainData === data;\n}\n\nfunction linkAll(mainData, datas, opt) {\n inner(mainData).datas = {};\n each(datas, function (data, dataType) {\n linkSingle(data, dataType, mainData, opt);\n });\n}\n\nfunction linkSingle(data, dataType, mainData, opt) {\n inner(mainData).datas[dataType] = data;\n inner(data).mainData = 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 data.getLinkedDataAll = getLinkedDataAll;\n}\n\nexport default linkSeriesData;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Tree data structure\n */\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport linkSeriesData from './helper/linkSeriesData.js';\nimport SeriesData from './SeriesData.js';\nimport prepareSeriesDataSchema from './helper/createDimensions.js';\nimport { convertOptionIdName } from '../util/model.js';\n\nvar TreeNode =\n/** @class */\nfunction () {\n function TreeNode(name, hostTree) {\n this.depth = 0;\n this.height = 0;\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\n this.dataIndex = -1;\n this.children = [];\n this.viewChildren = [];\n this.isExpand = false;\n this.name = name || '';\n this.hostTree = hostTree;\n }\n /**\n * The node is removed.\n */\n\n\n TreeNode.prototype.isRemoved = function () {\n return this.dataIndex < 0;\n };\n\n TreeNode.prototype.eachNode = function (options, cb, context) {\n if (zrUtil.isFunction(options)) {\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 * Update depth and height of this subtree.\n */\n\n\n TreeNode.prototype.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 TreeNode.prototype.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 TreeNode.prototype.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 * @param includeSelf Default false.\n * @return order: [root, child, grandchild, ...]\n */\n\n\n TreeNode.prototype.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 TreeNode.prototype.getAncestorsIndices = function () {\n var indices = [];\n var currNode = this;\n\n while (currNode) {\n indices.push(currNode.dataIndex);\n currNode = currNode.parentNode;\n }\n\n indices.reverse();\n return indices;\n };\n\n TreeNode.prototype.getDescendantIndices = function () {\n var indices = [];\n this.eachNode(function (childNode) {\n indices.push(childNode.dataIndex);\n });\n return indices;\n };\n\n TreeNode.prototype.getValue = function (dimension) {\n var data = this.hostTree.data;\n return data.getStore().get(data.getDimensionIndex(dimension || 'value'), this.dataIndex);\n };\n\n TreeNode.prototype.setLayout = function (layout, merge) {\n this.dataIndex >= 0 && this.hostTree.data.setItemLayout(this.dataIndex, layout, merge);\n };\n /**\n * @return {Object} layout\n */\n\n\n TreeNode.prototype.getLayout = function () {\n return this.hostTree.data.getItemLayout(this.dataIndex);\n }; // @depcrecated\n // getModel(path: S): Model\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n TreeNode.prototype.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 return itemModel.getModel(path);\n }; // TODO: TYPE More specific model\n\n\n TreeNode.prototype.getLevelModel = function () {\n return (this.hostTree.levelModels || [])[this.depth];\n };\n\n TreeNode.prototype.setVisual = function (key, value) {\n this.dataIndex >= 0 && this.hostTree.data.setItemVisual(this.dataIndex, key, value);\n };\n /**\n * Get item visual\n * FIXME: make return type better\n */\n\n\n TreeNode.prototype.getVisual = function (key) {\n return this.hostTree.data.getItemVisual(this.dataIndex, key);\n };\n\n TreeNode.prototype.getRawIndex = function () {\n return this.hostTree.data.getRawIndex(this.dataIndex);\n };\n\n TreeNode.prototype.getId = function () {\n return this.hostTree.data.getId(this.dataIndex);\n };\n /**\n * index in parent's children\n */\n\n\n TreeNode.prototype.getChildIndex = function () {\n if (this.parentNode) {\n var children = this.parentNode.children;\n\n for (var i = 0; i < children.length; ++i) {\n if (children[i] === this) {\n return i;\n }\n }\n\n return -1;\n }\n\n return -1;\n };\n /**\n * if this is an ancestor of another node\n *\n * @param node another node\n * @return if is ancestor\n */\n\n\n TreeNode.prototype.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 * if this is an descendant of another node\n *\n * @param node another node\n * @return if is descendant\n */\n\n\n TreeNode.prototype.isDescendantOf = function (node) {\n return node !== this && node.isAncestorOf(this);\n };\n\n return TreeNode;\n}();\n\nexport { TreeNode };\n;\n\nvar Tree =\n/** @class */\nfunction () {\n function Tree(hostModel) {\n this.type = 'tree';\n this._nodes = [];\n this.hostModel = hostModel;\n }\n\n Tree.prototype.eachNode = function (options, cb, context) {\n this.root.eachNode(options, cb, context);\n };\n\n Tree.prototype.getNodeByDataIndex = function (dataIndex) {\n var rawIndex = this.data.getRawIndex(dataIndex);\n return this._nodes[rawIndex];\n };\n\n Tree.prototype.getNodeById = function (name) {\n return this.root.getNodeById(name);\n };\n /**\n * Update item available by list,\n * when list has been performed options like 'filterSelf' or 'map'.\n */\n\n\n Tree.prototype.update = function () {\n var data = this.data;\n var nodes = this._nodes;\n\n for (var i = 0, len = nodes.length; i < len; i++) {\n nodes[i].dataIndex = -1;\n }\n\n for (var i = 0, len = data.count(); i < len; i++) {\n nodes[data.getRawIndex(i)].dataIndex = i;\n }\n };\n /**\n * Clear all layouts\n */\n\n\n Tree.prototype.clearLayouts = function () {\n this.data.clearItemLayouts();\n };\n /**\n * data node format:\n * {\n * name: ...\n * value: ...\n * children: [\n * {\n * name: ...\n * value: ...\n * children: ...\n * },\n * ...\n * ]\n * }\n */\n\n\n Tree.createTree = function (dataRoot, hostModel, beforeLink) {\n var tree = new Tree(hostModel);\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(convertOptionIdName(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 dimensions = prepareSeriesDataSchema(listData, {\n coordDimensions: ['value'],\n dimensionsCount: dimMax\n }).dimensions;\n var list = new SeriesData(dimensions, hostModel);\n list.initData(listData);\n beforeLink && beforeLink(list);\n linkSeriesData({\n mainData: list,\n struct: tree,\n structAttr: 'tree'\n });\n tree.update();\n return tree;\n };\n\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\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\nexport default Tree;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nexport function retrieveTargetInfo(payload, validPayloadTypes, seriesModel) {\n if (payload && zrUtil.indexOf(validPayloadTypes, payload.type) >= 0) {\n var root = seriesModel.getData().tree.root;\n var targetNode = payload.targetNode;\n\n if (zrUtil.isString(targetNode)) {\n targetNode = root.getNodeById(targetNode);\n }\n\n if (targetNode && root.contains(targetNode)) {\n return {\n node: targetNode\n };\n }\n\n var targetNodeId = payload.targetNodeId;\n\n if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) {\n return {\n node: targetNode\n };\n }\n }\n} // Not includes the given node at the last item.\n\nexport function getPathToRoot(node) {\n var path = [];\n\n while (node) {\n node = node.parentNode;\n node && path.push(node);\n }\n\n return path.reverse();\n}\nexport function aboveViewRoot(viewRoot, node) {\n var viewPath = getPathToRoot(viewRoot);\n return zrUtil.indexOf(viewPath, node) >= 0;\n} // From root to the input node (the input node will be included).\n\nexport function wrapTreePathInfo(node, seriesModel) {\n var treePathInfo = [];\n\n while (node) {\n var nodeDataIndex = node.dataIndex;\n treePathInfo.push({\n name: node.name,\n dataIndex: nodeDataIndex,\n value: seriesModel.getRawValue(nodeDataIndex)\n });\n node = node.parentNode;\n }\n\n treePathInfo.reverse();\n return treePathInfo;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SeriesModel from '../../model/Series.js';\nimport Tree from '../../data/Tree.js';\nimport Model from '../../model/Model.js';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup.js';\nimport { wrapTreePathInfo } from '../helper/treeHelper.js';\n\nvar TreeSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(TreeSeriesModel, _super);\n\n function TreeSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.hasSymbolVisual = true; // Do it self.\n\n _this.ignoreStyleOnData = true;\n return _this;\n }\n /**\n * Init a tree data structure from data in option series\n */\n\n\n TreeSeriesModel.prototype.getInitialData = function (option) {\n // create a 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 && 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 * Make the configuration 'orient' backward compatibly, with 'horizontal = LR', 'vertical = TB'.\n * @returns {string} orient\n */\n\n\n TreeSeriesModel.prototype.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\n TreeSeriesModel.prototype.setZoom = function (zoom) {\n this.option.zoom = zoom;\n };\n\n TreeSeriesModel.prototype.setCenter = function (center) {\n this.option.center = center;\n };\n\n TreeSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\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 createTooltipMarkup('nameValue', {\n name: name,\n value: value,\n noValue: isNaN(value) || value == null\n });\n }; // Add tree path to tooltip param\n\n\n TreeSeriesModel.prototype.getDataParams = function (dataIndex) {\n var params = _super.prototype.getDataParams.apply(this, arguments);\n\n var node = this.getData().tree.getNodeByDataIndex(dataIndex);\n params.treeAncestors = wrapTreePathInfo(node, this);\n params.collapsed = !node.isExpand;\n return params;\n };\n\n TreeSeriesModel.type = 'series.tree'; // can support the position parameters 'left', 'top','right','bottom', 'width',\n // 'height' in the setOption() with 'merge' mode normal.\n\n TreeSeriesModel.layoutMode = 'box';\n TreeSeriesModel.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 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 },\n animationEasing: 'linear',\n animationDuration: 700,\n animationDurationUpdate: 500\n };\n return TreeSeriesModel;\n}(SeriesModel);\n\nexport default TreeSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Traverse the tree from bottom to top and do something\n */\nfunction eachAfter(root, callback, separation) {\n var nodes = [root];\n var next = [];\n var node;\n\n while (node = nodes.pop()) {\n // jshint ignore:line\n next.push(node);\n\n if (node.isExpand) {\n var children = node.children;\n\n if (children.length) {\n for (var i = 0; i < children.length; i++) {\n nodes.push(children[i]);\n }\n }\n }\n }\n\n while (node = next.pop()) {\n // jshint ignore:line\n callback(node, separation);\n }\n}\n/**\n * Traverse the tree from top to bottom and do something\n */\n\n\nfunction eachBefore(root, callback) {\n var nodes = [root];\n var node;\n\n while (node = nodes.pop()) {\n // jshint ignore:line\n callback(node);\n\n if (node.isExpand) {\n var children = node.children;\n\n if (children.length) {\n for (var i = children.length - 1; i >= 0; i--) {\n nodes.push(children[i]);\n }\n }\n }\n }\n}\n\nexport { eachAfter, eachBefore };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { eachAfter, eachBefore } from './traversalHelper.js';\nimport { init, firstWalk, secondWalk, separation as sep, radialCoordinate, getViewRect } from './layoutHelper.js';\nexport default function treeLayout(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_1 = realRoot;\n var right_1 = realRoot;\n var bottom_1 = realRoot;\n eachBefore(realRoot, function (node) {\n var x = node.getLayout().x;\n\n if (x < left_1.getLayout().x) {\n left_1 = node;\n }\n\n if (x > right_1.getLayout().x) {\n right_1 = node;\n }\n\n if (node.depth > bottom_1.depth) {\n bottom_1 = node;\n }\n });\n var delta = left_1 === right_1 ? 1 : separation(left_1, right_1) / 2;\n var tx_1 = delta - left_1.getLayout().x;\n var kx_1 = 0;\n var ky_1 = 0;\n var coorX_1 = 0;\n var coorY_1 = 0;\n\n if (layout === 'radial') {\n kx_1 = width / (right_1.getLayout().x + delta + tx_1); // here we use (node.depth - 1), bucause the real root's depth is 1\n\n ky_1 = height / (bottom_1.depth - 1 || 1);\n eachBefore(realRoot, function (node) {\n coorX_1 = (node.getLayout().x + tx_1) * kx_1;\n coorY_1 = (node.depth - 1) * ky_1;\n var finalCoor = radialCoordinate(coorX_1, coorY_1);\n node.setLayout({\n x: finalCoor.x,\n y: finalCoor.y,\n rawX: coorX_1,\n rawY: coorY_1\n }, true);\n });\n } else {\n var orient_1 = seriesModel.getOrient();\n\n if (orient_1 === 'RL' || orient_1 === 'LR') {\n ky_1 = height / (right_1.getLayout().x + delta + tx_1);\n kx_1 = width / (bottom_1.depth - 1 || 1);\n eachBefore(realRoot, function (node) {\n coorY_1 = (node.getLayout().x + tx_1) * ky_1;\n coorX_1 = orient_1 === 'LR' ? (node.depth - 1) * kx_1 : width - (node.depth - 1) * kx_1;\n node.setLayout({\n x: coorX_1,\n y: coorY_1\n }, true);\n });\n } else if (orient_1 === 'TB' || orient_1 === 'BT') {\n kx_1 = width / (right_1.getLayout().x + delta + tx_1);\n ky_1 = height / (bottom_1.depth - 1 || 1);\n eachBefore(realRoot, function (node) {\n coorX_1 = (node.getLayout().x + tx_1) * kx_1;\n coorY_1 = orient_1 === 'TB' ? (node.depth - 1) * ky_1 : height - (node.depth - 1) * ky_1;\n node.setLayout({\n x: coorX_1,\n y: coorY_1\n }, true);\n });\n }\n }\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { extend } from 'zrender/lib/core/util.js';\nexport default function treeVisual(ecModel) {\n ecModel.eachSeriesByType('tree', function (seriesModel) {\n var data = seriesModel.getData();\n var tree = data.tree;\n tree.eachNode(function (node) {\n var model = node.getModel(); // TODO Optimize\n\n var style = model.getModel('itemStyle').getItemStyle();\n var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, 'style');\n extend(existsStyle, style);\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { updateCenterAndZoom } from '../../action/roamHelper.js';\nexport function installTreeAction(registers) {\n registers.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 });\n registers.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, api) {\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, undefined, api);\n seriesModel.setCenter && seriesModel.setCenter(res.center);\n seriesModel.setZoom && seriesModel.setZoom(res.zoom);\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport TreeView from './TreeView.js';\nimport TreeSeriesModel from './TreeSeries.js';\nimport treeLayout from './treeLayout.js';\nimport treeVisual from './treeVisual.js';\nimport { installTreeAction } from './treeAction.js';\nexport function install(registers) {\n registers.registerChartView(TreeView);\n registers.registerSeriesModel(TreeSeriesModel);\n registers.registerLayout(treeLayout);\n registers.registerVisual(treeVisual);\n installTreeAction(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as helper from '../helper/treeHelper.js';\nimport { noop } from 'zrender/lib/core/util.js';\nvar actionTypes = ['treemapZoomToNode', 'treemapRender', 'treemapMove'];\nexport function installTreemapAction(registers) {\n for (var i = 0; i < actionTypes.length; i++) {\n registers.registerAction({\n type: actionTypes[i],\n update: 'updateView'\n }, noop);\n }\n\n registers.registerAction({\n type: 'treemapRootToNode',\n update: 'updateView'\n }, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'series',\n subType: 'treemap',\n query: payload\n }, handleRootToNode);\n\n function handleRootToNode(model, index) {\n var types = ['treemapZoomToNode', 'treemapRootToNode'];\n var targetInfo = helper.retrieveTargetInfo(payload, types, model);\n\n if (targetInfo) {\n var originViewRoot = model.getViewRoot();\n\n if (originViewRoot) {\n payload.direction = helper.aboveViewRoot(originViewRoot, targetInfo.node) ? 'rollUp' : 'drillDown';\n }\n\n model.resetViewRoot(targetInfo.node);\n }\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { getDecalFromPalette } from '../../model/mixin/palette.js';\nexport default function enableAriaDecalForTree(seriesModel) {\n var data = seriesModel.getData();\n var tree = data.tree;\n var decalPaletteScope = {};\n tree.eachNode(function (node) {\n // Use decal of level 1 node\n var current = node;\n\n while (current && current.depth > 1) {\n current = current.parentNode;\n }\n\n var decal = getDecalFromPalette(seriesModel.ecModel, current.name || current.dataIndex + '', decalPaletteScope);\n node.setVisual('decal', decal);\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport SeriesModel from '../../model/Series.js';\nimport Tree from '../../data/Tree.js';\nimport Model from '../../model/Model.js';\nimport { wrapTreePathInfo } from '../helper/treeHelper.js';\nimport { normalizeToArray } from '../../util/model.js';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup.js';\nimport enableAriaDecalForTree from '../helper/enableAriaDecalForTree.js';\n\nvar TreemapSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(TreemapSeriesModel, _super);\n\n function TreemapSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = TreemapSeriesModel.type;\n _this.preventUsingHoverLayer = true;\n return _this;\n }\n /**\n * @override\n */\n\n\n TreemapSeriesModel.prototype.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 || []; // Used in \"visual priority\" in `treemapVisual.js`.\n // This way is a little tricky, must satisfy the precondition:\n // 1. There is no `treeNode.getModel('itemStyle.xxx')` used.\n // 2. The `Model.prototype.getModel()` will not use any clone-like way.\n\n var designatedVisualItemStyle = this.designatedVisualItemStyle = {};\n var designatedVisualModel = new Model({\n itemStyle: designatedVisualItemStyle\n }, this, ecModel);\n levels = option.levels = setDefault(levels, ecModel);\n var levelModels = zrUtil.map(levels || [], function (levelDefine) {\n return new Model(levelDefine, designatedVisualModel, 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, beforeLink);\n\n function beforeLink(nodeData) {\n nodeData.wrapMethod('getItemModel', function (model, idx) {\n var node = tree.getNodeByDataIndex(idx);\n var levelModel = node ? levelModels[node.depth] : null; // If no levelModel, we also need `designatedVisualModel`.\n\n model.parentModel = levelModel || designatedVisualModel;\n return model;\n });\n }\n\n return tree.data;\n };\n\n TreemapSeriesModel.prototype.optionUpdated = function () {\n this.resetViewRoot();\n };\n /**\n * @override\n * @param {number} dataIndex\n * @param {boolean} [mutipleSeries=false]\n */\n\n\n TreemapSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n var data = this.getData();\n var value = this.getRawValue(dataIndex);\n var name = data.getName(dataIndex);\n return createTooltipMarkup('nameValue', {\n name: name,\n value: value\n });\n };\n /**\n * Add tree path to tooltip param\n *\n * @override\n * @param {number} dataIndex\n * @return {Object}\n */\n\n\n TreemapSeriesModel.prototype.getDataParams = function (dataIndex) {\n var params = _super.prototype.getDataParams.apply(this, arguments);\n\n var node = this.getData().tree.getNodeByDataIndex(dataIndex);\n params.treeAncestors = wrapTreePathInfo(node, this); // compatitable the previous code.\n\n params.treePathInfo = params.treeAncestors;\n return params;\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\n\n TreemapSeriesModel.prototype.setLayoutInfo = function (layoutInfo) {\n /**\n * @readOnly\n * @type {Object}\n */\n this.layoutInfo = this.layoutInfo || {};\n zrUtil.extend(this.layoutInfo, layoutInfo);\n };\n /**\n * @param {string} id\n * @return {number} index\n */\n\n\n TreemapSeriesModel.prototype.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\n TreemapSeriesModel.prototype.getViewRoot = function () {\n return this._viewRoot;\n };\n\n TreemapSeriesModel.prototype.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 TreemapSeriesModel.prototype.enableAriaDecal = function () {\n enableAriaDecalForTree(this);\n };\n\n TreemapSeriesModel.type = 'series.treemap';\n TreemapSeriesModel.layoutMode = 'box';\n TreemapSeriesModel.defaultOption = {\n // Disable progressive rendering\n progressive: 0,\n // size: ['80%', '80%'], // deprecated, compatible with ec2.\n left: 'center',\n top: 'middle',\n width: '80%',\n height: '80%',\n sort: true,\n clipWindow: 'origin',\n squareRatio: 0.5 * (1 + Math.sqrt(5)),\n leafDepth: null,\n drillDownIcon: '▶',\n // to align specialized icon. ▷▶❒❐▼✚\n zoomToNodeRatio: 0.32 * 0.32,\n roam: true,\n nodeClick: 'zoomToNode',\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 itemStyle: {\n color: 'rgba(0,0,0,0.7)',\n textStyle: {\n color: '#fff'\n }\n },\n emphasis: {\n itemStyle: {\n color: 'rgba(0,0,0,0.9)' // '#5793f3',\n\n }\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 // formatter: null,\n color: '#fff',\n overflow: 'truncate' // align\n // verticalAlign\n\n },\n upperLabel: {\n show: false,\n position: [0, '50%'],\n height: 20,\n // formatter: null,\n // color: '#fff',\n overflow: 'truncate',\n // align: null,\n verticalAlign: 'middle'\n },\n itemStyle: {\n color: null,\n colorAlpha: null,\n colorSaturation: null,\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 overflow: 'truncate',\n verticalAlign: 'middle'\n }\n },\n visualDimension: 0,\n visualMin: null,\n visualMax: null,\n color: [],\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 colorSaturation: null,\n colorMappingBy: 'index',\n visibleMin: 10,\n // be rendered. Only works when sort is 'asc' or 'desc'.\n childrenVisibleMin: null,\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\n };\n return TreemapSeriesModel;\n}(SeriesModel);\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 = normalizeToArray(ecModel.get('color'));\n var globalDecalList = normalizeToArray(ecModel.get(['aria', 'decal', 'decals']));\n\n if (!globalColorList) {\n return;\n }\n\n levels = levels || [];\n var hasColorDefine;\n var hasDecalDefine;\n zrUtil.each(levels, function (levelDefine) {\n var model = new Model(levelDefine);\n var modelColor = model.get('color');\n var modelDecal = model.get('decal');\n\n if (model.get(['itemStyle', 'color']) || modelColor && modelColor !== 'none') {\n hasColorDefine = true;\n }\n\n if (model.get(['itemStyle', 'decal']) || modelDecal && modelDecal !== 'none') {\n hasDecalDefine = true;\n }\n });\n var level0 = levels[0] || (levels[0] = {});\n\n if (!hasColorDefine) {\n level0.color = globalColorList.slice();\n }\n\n if (!hasDecalDefine && globalDecalList) {\n level0.decal = globalDecalList.slice();\n }\n\n return levels;\n}\n\nexport default TreemapSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as graphic from '../../util/graphic.js';\nimport { getECData } from '../../util/innerStore.js';\nimport * as layout from '../../util/layout.js';\nimport { wrapTreePathInfo } from '../helper/treeHelper.js';\nimport { curry, defaults } from 'zrender/lib/core/util.js';\nimport { convertOptionIdName } from '../../util/model.js';\nimport { toggleHoverEmphasis, Z2_EMPHASIS_LIFT } from '../../util/states.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nvar TEXT_PADDING = 8;\nvar ITEM_GAP = 8;\nvar ARRAY_LENGTH = 5;\n\nvar Breadcrumb =\n/** @class */\nfunction () {\n function Breadcrumb(containerGroup) {\n this.group = new graphic.Group();\n containerGroup.add(this.group);\n }\n\n Breadcrumb.prototype.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');\n var emphasisModel = model.getModel('emphasis');\n var textStyleModel = normalStyleModel.getModel('textStyle');\n var emphasisTextStyleModel = emphasisModel.getModel(['itemStyle', '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, emphasisModel, textStyleModel, emphasisTextStyleModel, onSelect);\n\n layout.positionElement(thisGroup, layoutParam.pos, layoutParam.box);\n };\n /**\n * Prepare render list and total width\n * @private\n */\n\n\n Breadcrumb.prototype._prepare = function (targetNode, layoutParam, textStyleModel) {\n for (var node = targetNode; node; node = node.parentNode) {\n var text = convertOptionIdName(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 * @private\n */\n\n\n Breadcrumb.prototype._renderContent = function (seriesModel, layoutParam, normalStyleModel, emphasisModel, textStyleModel, emphasisTextStyleModel, 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 var emphasisItemStyle = emphasisModel.getModel('itemStyle').getItemStyle();\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: defaults(normalStyleModel.getItemStyle(), {\n lineJoin: 'bevel'\n }),\n textContent: new graphic.Text({\n style: createTextStyle(textStyleModel, {\n text: text\n })\n }),\n textConfig: {\n position: 'inside'\n },\n z2: Z2_EMPHASIS_LIFT * 1e4,\n onclick: curry(onSelect, itemNode)\n });\n el.disableLabelAnimation = true;\n el.getTextContent().ensureState('emphasis').style = createTextStyle(emphasisTextStyleModel, {\n text: text\n });\n el.ensureState('emphasis').style = emphasisItemStyle;\n toggleHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n this.group.add(el);\n packEventData(el, seriesModel, itemNode);\n lastX += itemWidth + ITEM_GAP;\n }\n };\n\n Breadcrumb.prototype.remove = function () {\n this.group.removeAll();\n };\n\n return Breadcrumb;\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 getECData(el).eventData = {\n componentType: 'series',\n componentSubType: 'treemap',\n componentIndex: seriesModel.componentIndex,\n seriesIndex: seriesModel.seriesIndex,\n seriesName: seriesModel.name,\n seriesType: 'treemap',\n selfType: 'breadcrumb',\n nodeData: {\n dataIndex: itemNode && itemNode.dataIndex,\n name: itemNode && itemNode.name\n },\n treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel)\n };\n}\n\nexport default Breadcrumb;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Animate multiple elements with a single done-callback.\n *\n * @example\n * animation\n * .createWrap()\n * .add(el1, {x: 10, y: 10})\n * .add(el2, {shape: {width: 500}, style: {fill: 'red'}}, 400)\n * .done(function () { // done })\n * .start('cubicOut');\n */\nvar AnimationWrap =\n/** @class */\nfunction () {\n function AnimationWrap() {\n this._storage = [];\n this._elExistsMap = {};\n }\n /**\n * Caution: a el can only be added once, otherwise 'done'\n * might not be called. This method checks this (by el.id),\n * suppresses adding and returns false when existing el found.\n *\n * @return Whether adding succeeded.\n */\n\n\n AnimationWrap.prototype.add = function (el, target, duration, delay, easing) {\n if (this._elExistsMap[el.id]) {\n return false;\n }\n\n this._elExistsMap[el.id] = true;\n\n this._storage.push({\n el: el,\n target: target,\n duration: duration,\n delay: delay,\n easing: easing\n });\n\n return true;\n };\n /**\n * Only execute when animation done/aborted.\n */\n\n\n AnimationWrap.prototype.finished = function (callback) {\n this._finishedCallback = callback;\n return this;\n };\n /**\n * Will stop exist animation firstly.\n */\n\n\n AnimationWrap.prototype.start = function () {\n var _this = this;\n\n var count = this._storage.length;\n\n var checkTerminate = function () {\n count--;\n\n if (count <= 0) {\n // Guard.\n _this._storage.length = 0;\n _this._elExistsMap = {};\n _this._finishedCallback && _this._finishedCallback();\n }\n };\n\n for (var i = 0, len = this._storage.length; i < len; i++) {\n var item = this._storage[i];\n item.el.animateTo(item.target, {\n duration: item.duration,\n delay: item.delay,\n easing: item.easing,\n setToFinal: true,\n done: checkTerminate,\n aborted: checkTerminate\n });\n }\n\n return this;\n };\n\n return AnimationWrap;\n}();\n\nexport function createWrap() {\n return new AnimationWrap();\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { bind, each, indexOf, curry, extend, normalizeCssArray, isFunction } from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { isHighDownDispatcher, setAsHighDownDispatcher, setDefaultStateProxy, enableHoverFocus, Z2_EMPHASIS_LIFT } from '../../util/states.js';\nimport DataDiffer from '../../data/DataDiffer.js';\nimport * as helper from '../helper/treeHelper.js';\nimport Breadcrumb from './Breadcrumb.js';\nimport RoamController from '../../component/helper/RoamController.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport * as animationUtil from '../../util/animation.js';\nimport makeStyleMapper from '../../model/mixin/makeStyleMapper.js';\nimport ChartView from '../../view/Chart.js';\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\nimport { makeInner, convertOptionIdName } from '../../util/model.js';\nimport { windowOpen } from '../../util/format.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nvar Group = graphic.Group;\nvar Rect = graphic.Rect;\nvar DRAG_THRESHOLD = 3;\nvar PATH_LABEL_NOAMAL = 'label';\nvar PATH_UPPERLABEL_NORMAL = 'upperLabel'; // Should larger than emphasis states lift z\n\nvar Z2_BASE = Z2_EMPHASIS_LIFT * 10; // Should bigger than every z2.\n\nvar Z2_BG = Z2_EMPHASIS_LIFT * 2;\nvar Z2_CONTENT = Z2_EMPHASIS_LIFT * 3;\nvar getStateItemStyle = 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'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`.\n// So do not transfer decal directly.\n]);\n\nvar getItemStyleNormal = function (model) {\n // Normal style props should include emphasis style props.\n var itemStyle = getStateItemStyle(model); // Clear styles set by emphasis.\n\n itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null;\n return itemStyle;\n};\n\nvar inner = makeInner();\n\nvar TreemapView =\n/** @class */\nfunction (_super) {\n __extends(TreemapView, _super);\n\n function TreemapView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = TreemapView.type;\n _this._state = 'ready';\n _this._storage = createStorage();\n return _this;\n }\n /**\n * @override\n */\n\n\n TreemapView.prototype.render = function (seriesModel, ecModel, api, payload) {\n var models = ecModel.findComponents({\n mainType: 'series',\n subType: 'treemap',\n query: payload\n });\n\n if (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 hasAnimation = seriesModel.get('animation');\n\n var renderResult = this._doRender(containerGroup, seriesModel, reRoot);\n\n hasAnimation && !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 TreemapView.prototype._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.x = layoutInfo.x;\n containerGroup.y = layoutInfo.y;\n return containerGroup;\n };\n\n TreemapView.prototype._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\n function doRenderNode(thisNode, oldNode, parentGroup, depth) {\n return renderNode(seriesModel, thisStorage, oldStorage, reRoot, lastsForAnimation, willInvisibleEls, thisNode, oldNode, parentGroup, depth);\n } // Notice: When thisTree and oldTree are the same tree (see list.cloneShallow),\n // the oldTree is actually losted, so we cannot find all of the old graphic\n // elements from tree. So we use this strategy: make element storage, move\n // from old storage to new storage, clear old storage.\n\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(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), inner(el).willDelete = true);\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 TreemapView.prototype._doAnimation = function (containerGroup, renderResult, seriesModel, reRoot) {\n var durationOption = seriesModel.get('animationDurationUpdate');\n var easingOption = seriesModel.get('animationEasing'); // TODO: do not support function until necessary.\n\n var duration = (isFunction(durationOption) ? 0 : durationOption) || 0;\n var easing = (isFunction(easingOption) ? null : easingOption) || 'cubicOut';\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 var innerStore = inner(parent);\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: innerStore.nodeWidth,\n height: innerStore.nodeHeight\n },\n style: {\n opacity: 0\n }\n } // Others.\n : {\n style: {\n opacity: 0\n }\n };\n } else {\n var targetX = 0;\n var targetY = 0;\n\n if (!innerStore.willDelete) {\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 = innerStore.nodeWidth / 2;\n targetY = innerStore.nodeHeight / 2;\n }\n\n target = storageName === 'nodeGroup' ? {\n x: targetX,\n y: 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 } // TODO: do not support delay until necessary.\n\n\n target && animationWrap.add(el, target, duration, 0, 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 (el instanceof graphic.Group) {\n if (last.oldX != null) {\n target.x = el.x;\n target.y = el.y;\n el.x = last.oldX;\n el.y = last.oldY;\n }\n } else {\n if (last.oldShape) {\n target.shape = extend({}, el.shape);\n el.setShape(last.oldShape);\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, 0, easing);\n });\n }, this);\n this._state = 'animating';\n animationWrap.finished(bind(function () {\n this._state = 'ready';\n renderResult.renderFinally();\n }, this)).start();\n };\n\n TreemapView.prototype._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 TreemapView.prototype._clearController = function () {\n var controller = this._controller;\n\n if (controller) {\n controller.dispose();\n controller = null;\n }\n };\n\n TreemapView.prototype._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 TreemapView.prototype._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 TreemapView.prototype._initEvents = function (containerGroup) {\n var _this = this;\n\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 TreemapView.prototype._renderBreadcrumb = function (seriesModel, api, targetInfo) {\n var _this = this;\n\n if (!targetInfo) {\n targetInfo = seriesModel.get('leafDepth', true) != null ? {\n node: seriesModel.getViewRoot()\n } // FIXME\n // better way?\n // Find breadcrumb tail on center of containerGroup.\n : this.findTarget(api.getWidth() / 2, api.getHeight() / 2);\n\n if (!targetInfo) {\n targetInfo = {\n node: seriesModel.getData().tree.root\n };\n }\n }\n\n (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group))).render(seriesModel, api, targetInfo.node, function (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 * @override\n */\n\n\n TreemapView.prototype.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\n TreemapView.prototype.dispose = function () {\n this._clearController();\n };\n\n TreemapView.prototype._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 TreemapView.prototype._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 * @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\n\n TreemapView.prototype.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, don't 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 TreemapView.type = 'treemap';\n return TreemapView;\n}(ChartView);\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();\n var nodeModel = thisNode.getModel(); // 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 = nodeModel.getModel('itemStyle');\n var itemStyleEmphasisModel = nodeModel.getModel(['emphasis', 'itemStyle']);\n var itemStyleBlurModel = nodeModel.getModel(['blur', 'itemStyle']);\n var itemStyleSelectModel = nodeModel.getModel(['select', 'itemStyle']);\n var borderRadius = itemStyleNormalModel.get('borderRadius') || 0; // 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.x = thisLayout.x || 0;\n group.y = thisLayout.y || 0;\n group.markRedraw();\n inner(group).nodeWidth = thisWidth;\n inner(group).nodeHeight = thisHeight;\n\n if (thisLayout.isAboveViewRoot) {\n return group;\n } // Background\n\n\n var bg = giveGraphic('background', Rect, depth, Z2_BG);\n bg && renderBackground(group, bg, isParent && thisLayout.upperLabelHeight);\n var emphasisModel = nodeModel.getModel('emphasis');\n var focus = emphasisModel.get('focus');\n var blurScope = emphasisModel.get('blurScope');\n var isDisabled = emphasisModel.get('disabled');\n var focusOrIndices = focus === 'ancestor' ? thisNode.getAncestorsIndices() : focus === 'descendant' ? thisNode.getDescendantIndices() : focus; // 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 (isHighDownDispatcher(group)) {\n setAsHighDownDispatcher(group, false);\n }\n\n if (bg) {\n setAsHighDownDispatcher(bg, !isDisabled); // Only for enabling highlight/downplay.\n\n data.setItemGraphicEl(thisNode.dataIndex, bg);\n enableHoverFocus(bg, focusOrIndices, blurScope);\n }\n } else {\n var content = giveGraphic('content', Rect, depth, Z2_CONTENT);\n content && renderContent(group, content);\n bg.disableMorphing = true;\n\n if (bg && isHighDownDispatcher(bg)) {\n setAsHighDownDispatcher(bg, false);\n }\n\n setAsHighDownDispatcher(group, !isDisabled); // Only for enabling highlight/downplay.\n\n data.setItemGraphicEl(thisNode.dataIndex, group);\n enableHoverFocus(group, focusOrIndices, blurScope);\n }\n\n return group; // ----------------------------\n // | Procedures in renderNode |\n // ----------------------------\n\n function renderBackground(group, bg, useUpperLabel) {\n var ecData = getECData(bg); // For tooltip.\n\n ecData.dataIndex = thisNode.dataIndex;\n ecData.seriesIndex = seriesModel.seriesIndex;\n bg.setShape({\n x: 0,\n y: 0,\n width: thisWidth,\n height: thisHeight,\n r: borderRadius\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 style = thisNode.getVisual('style');\n var visualBorderColor = style.stroke;\n var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n normalStyle.fill = visualBorderColor;\n var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel);\n emphasisStyle.fill = itemStyleEmphasisModel.get('borderColor');\n var blurStyle = getStateItemStyle(itemStyleBlurModel);\n blurStyle.fill = itemStyleBlurModel.get('borderColor');\n var selectStyle = getStateItemStyle(itemStyleSelectModel);\n selectStyle.fill = itemStyleSelectModel.get('borderColor');\n\n if (useUpperLabel) {\n var upperLabelWidth = thisWidth - 2 * borderWidth;\n prepareText( // PENDING: convert ZRColor to ColorString for text.\n bg, visualBorderColor, style.opacity, {\n x: borderWidth,\n y: 0,\n width: upperLabelWidth,\n height: upperHeight\n });\n } // For old bg.\n else {\n bg.removeTextContent();\n }\n\n bg.setStyle(normalStyle);\n bg.ensureState('emphasis').style = emphasisStyle;\n bg.ensureState('blur').style = blurStyle;\n bg.ensureState('select').style = selectStyle;\n setDefaultStateProxy(bg);\n }\n\n group.add(bg);\n }\n\n function renderContent(group, content) {\n var ecData = getECData(content); // For tooltip.\n\n ecData.dataIndex = thisNode.dataIndex;\n ecData.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 r: borderRadius\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 nodeStyle = thisNode.getVisual('style');\n var visualColor = nodeStyle.fill;\n var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n normalStyle.fill = visualColor;\n normalStyle.decal = nodeStyle.decal;\n var emphasisStyle = getStateItemStyle(itemStyleEmphasisModel);\n var blurStyle = getStateItemStyle(itemStyleBlurModel);\n var selectStyle = getStateItemStyle(itemStyleSelectModel); // PENDING: convert ZRColor to ColorString for text.\n\n prepareText(content, visualColor, nodeStyle.opacity, null);\n content.setStyle(normalStyle);\n content.ensureState('emphasis').style = emphasisStyle;\n content.ensureState('blur').style = blurStyle;\n content.ensureState('select').style = selectStyle;\n setDefaultStateProxy(content);\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(rectEl, visualColor, visualOpacity, // Can be null/undefined\n upperLabelRect) {\n var normalLabelModel = nodeModel.getModel(upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL);\n var defaultText = convertOptionIdName(nodeModel.get('name'), null);\n var isShow = normalLabelModel.getShallow('show');\n setLabelStyle(rectEl, getLabelStatesModels(nodeModel, upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL), {\n defaultText: isShow ? defaultText : null,\n inheritColor: visualColor,\n defaultOpacity: visualOpacity,\n labelFetcher: seriesModel,\n labelDataIndex: thisNode.dataIndex\n });\n var textEl = rectEl.getTextContent();\n\n if (!textEl) {\n return;\n }\n\n var textStyle = textEl.style;\n var textPadding = normalizeCssArray(textStyle.padding || 0);\n\n if (upperLabelRect) {\n rectEl.setTextConfig({\n layoutRect: upperLabelRect\n });\n textEl.disableLabelLayout = true;\n }\n\n textEl.beforeUpdate = function () {\n var width = Math.max((upperLabelRect ? upperLabelRect.width : rectEl.shape.width) - textPadding[1] - textPadding[3], 0);\n var height = Math.max((upperLabelRect ? upperLabelRect.height : rectEl.shape.height) - textPadding[0] - textPadding[2], 0);\n\n if (textStyle.width !== width || textStyle.height !== height) {\n textEl.setStyle({\n width: width,\n height: height\n });\n }\n };\n\n textStyle.truncateMinChar = 2;\n textStyle.lineOverflow = 'truncate';\n addDrillDownIcon(textStyle, upperLabelRect, thisLayout);\n var textEmphasisState = textEl.getState('emphasis');\n addDrillDownIcon(textEmphasisState ? textEmphasisState.style : null, upperLabelRect, thisLayout);\n }\n\n function addDrillDownIcon(style, upperLabelRect, thisLayout) {\n var text = style ? style.text : null;\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);\n } // If invisible and no old element, do not create new element (for optimizing).\n else if (!thisInvisible) {\n element = new Ctor();\n\n if (element instanceof Displayable) {\n element.z2 = calculateZ2(depth, z);\n }\n\n prepareAnimationWhenNoOld(lasts, element);\n } // Set to thisStorage\n\n\n return thisStorage[storageName][thisRawIndex] = element;\n }\n\n function prepareAnimationWhenHasOld(lasts, element) {\n var lastCfg = lasts[thisRawIndex] = {};\n\n if (element instanceof Group) {\n lastCfg.oldX = element.x;\n lastCfg.oldY = element.y;\n } else {\n lastCfg.oldShape = extend({}, element.shape);\n }\n } // If a element is new, we need to find the animation start point carefully,\n // otherwise it will looks strange when 'zoomToNode'.\n\n\n function prepareAnimationWhenNoOld(lasts, element) {\n var lastCfg = lasts[thisRawIndex] = {};\n var parentNode = thisNode.parentNode;\n var isGroup = element instanceof graphic.Group;\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.oldShape) {\n parentOldX = parentOldBg.oldShape.width;\n parentOldY = parentOldBg.oldShape.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 if (isGroup) {\n lastCfg.oldX = 0;\n lastCfg.oldY = parentOldY;\n } else {\n lastCfg.oldShape = {\n x: parentOldX,\n y: parentOldY,\n width: 0,\n height: 0\n };\n }\n } // Fade in, user can be aware that these nodes are new.\n\n\n lastCfg.fadein = !isGroup;\n }\n} // We cannot set all background 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 lower background elements to 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 calculateZ2(depth, z2InLevel) {\n return depth * Z2_BASE + z2InLevel;\n}\n\nexport default TreemapView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as zrColor from 'zrender/lib/tool/color.js';\nimport { linearMap } from '../util/number.js';\nimport { warn } from '../util/log.js';\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\nvar CATEGORY_DEFAULT_VISUAL_INDEX = -1;\n\nvar VisualMapping =\n/** @class */\nfunction () {\n function VisualMapping(option) {\n var mappingMethod = option.mappingMethod;\n var visualType = option.type;\n var thisOption = this.option = zrUtil.clone(option);\n this.type = visualType;\n this.mappingMethod = mappingMethod;\n this._normalizeData = normalizers[mappingMethod];\n var visualHandler = VisualMapping.visualHandlers[visualType];\n this.applyVisual = visualHandler.applyVisual;\n this.getColorMapper = visualHandler.getColorMapper;\n this._normalizedToVisual = visualHandler._normalizedToVisual[mappingMethod];\n\n if (mappingMethod === 'piecewise') {\n normalizeVisualRange(thisOption);\n preprocessForPiecewise(thisOption);\n } else if (mappingMethod === 'category') {\n thisOption.categories ? preprocessForSpecifiedCategory(thisOption) // categories is ordinal when thisOption.categories not specified,\n // which need no more preprocess except normalize visual.\n : normalizeVisualRange(thisOption, true);\n } else {\n // mappingMethod === 'linear' or 'fixed'\n zrUtil.assert(mappingMethod !== 'linear' || thisOption.dataExtent);\n normalizeVisualRange(thisOption);\n }\n }\n\n VisualMapping.prototype.mapValueToVisual = function (value) {\n var normalized = this._normalizeData(value);\n\n return this._normalizedToVisual(normalized, value);\n };\n\n VisualMapping.prototype.getNormalizer = function () {\n return zrUtil.bind(this._normalizeData, this);\n };\n /**\n * List available visual types.\n *\n * @public\n * @return {Array.}\n */\n\n\n VisualMapping.listVisualTypes = function () {\n return zrUtil.keys(VisualMapping.visualHandlers);\n }; // /**\n // * @public\n // */\n // static addVisualHandler(name, handler) {\n // visualHandlers[name] = handler;\n // }\n\n /**\n * @public\n */\n\n\n VisualMapping.isValidType = function (visualType) {\n return VisualMapping.visualHandlers.hasOwnProperty(visualType);\n };\n /**\n * Convenient method.\n * Visual can be Object or Array or primary type.\n */\n\n\n VisualMapping.eachVisual = function (visual, callback, context) {\n if (zrUtil.isObject(visual)) {\n zrUtil.each(visual, callback, context);\n } else {\n callback.call(context, visual);\n }\n };\n\n VisualMapping.mapVisual = function (visual, callback, context) {\n var isPrimary;\n var newVisual = zrUtil.isArray(visual) ? [] : zrUtil.isObject(visual) ? {} : (isPrimary = true, null);\n VisualMapping.eachVisual(visual, function (v, key) {\n var newVal = callback.call(context, v, key);\n isPrimary ? newVisual = newVal : newVisual[key] = newVal;\n });\n return newVisual;\n };\n /**\n * Retrieve visual properties from given object.\n */\n\n\n VisualMapping.retrieveVisuals = function (obj) {\n var ret = {};\n var hasVisual;\n obj && each(VisualMapping.visualHandlers, function (h, visualType) {\n if (obj.hasOwnProperty(visualType)) {\n ret[visualType] = obj[visualType];\n hasVisual = true;\n }\n });\n return hasVisual ? ret : null;\n };\n /**\n * Give order to visual types, considering colorSaturation, colorAlpha depends on color.\n *\n * @public\n * @param {(Object|Array)} visualTypes If Object, like: {color: ..., colorSaturation: ...}\n * IF Array, like: ['color', 'symbol', 'colorSaturation']\n * @return {Array.} Sorted visual types.\n */\n\n\n VisualMapping.prepareVisualTypes = function (visualTypes) {\n if (zrUtil.isArray(visualTypes)) {\n visualTypes = visualTypes.slice();\n } else if (isObject(visualTypes)) {\n var types_1 = [];\n each(visualTypes, function (item, type) {\n types_1.push(type);\n });\n visualTypes = types_1;\n } else {\n return [];\n }\n\n visualTypes.sort(function (type1, type2) {\n // color should be front of colorSaturation, colorAlpha, ...\n // symbol and symbolSize do not matter.\n return type2 === 'color' && type1 !== 'color' && type1.indexOf('color') === 0 ? 1 : -1;\n });\n return visualTypes;\n };\n /**\n * 'color', 'colorSaturation', 'colorAlpha', ... are depends on 'color'.\n * Other visuals are only depends on themself.\n */\n\n\n VisualMapping.dependsOn = function (visualType1, visualType2) {\n return visualType2 === 'color' ? !!(visualType1 && visualType1.indexOf(visualType2) === 0) : visualType1 === visualType2;\n };\n /**\n * @param value\n * @param pieceList [{value: ..., interval: [min, max]}, ...]\n * Always from small to big.\n * @param findClosestWhenOutside Default to be false\n * @return index\n */\n\n\n VisualMapping.findPieceIndex = function (value, pieceList, findClosestWhenOutside) {\n var possibleI;\n var abs = Infinity; // value has the higher priority.\n\n for (var i = 0, len = pieceList.length; i < len; i++) {\n var pieceValue = pieceList[i].value;\n\n if (pieceValue != null) {\n if (pieceValue === value // FIXME\n // It is supposed to compare value according to value type of dimension,\n // but currently value type can exactly be string or number.\n // Compromise for numeric-like string (like '12'), especially\n // in the case that visualMap.categories is ['22', '33'].\n || zrUtil.isString(pieceValue) && pieceValue === value + '') {\n return i;\n }\n\n findClosestWhenOutside && updatePossible(pieceValue, i);\n }\n }\n\n for (var i = 0, len = pieceList.length; i < len; i++) {\n var piece = pieceList[i];\n var interval = piece.interval;\n var close_1 = piece.close;\n\n if (interval) {\n if (interval[0] === -Infinity) {\n if (littleThan(close_1[1], value, interval[1])) {\n return i;\n }\n } else if (interval[1] === Infinity) {\n if (littleThan(close_1[0], interval[0], value)) {\n return i;\n }\n } else if (littleThan(close_1[0], interval[0], value) && littleThan(close_1[1], value, interval[1])) {\n return i;\n }\n\n findClosestWhenOutside && updatePossible(interval[0], i);\n findClosestWhenOutside && updatePossible(interval[1], i);\n }\n }\n\n if (findClosestWhenOutside) {\n return value === Infinity ? pieceList.length - 1 : value === -Infinity ? 0 : possibleI;\n }\n\n function updatePossible(val, index) {\n var newAbs = Math.abs(val - value);\n\n if (newAbs < abs) {\n abs = newAbs;\n possibleI = index;\n }\n }\n };\n\n VisualMapping.visualHandlers = {\n color: {\n applyVisual: makeApplyVisual('color'),\n getColorMapper: function () {\n var thisOption = this.option;\n return zrUtil.bind(thisOption.mappingMethod === 'category' ? function (value, isNormalized) {\n !isNormalized && (value = this._normalizeData(value));\n return doMapCategory.call(this, value);\n } : function (value, isNormalized, out) {\n // If output rgb array\n // which will be much faster and useful in pixel manipulation\n var returnRGBArray = !!out;\n !isNormalized && (value = this._normalizeData(value));\n out = zrColor.fastLerp(value, thisOption.parsedVisual, out);\n return returnRGBArray ? out : zrColor.stringify(out, 'rgba');\n }, this);\n },\n _normalizedToVisual: {\n linear: function (normalized) {\n return zrColor.stringify(zrColor.fastLerp(normalized, this.option.parsedVisual), 'rgba');\n },\n category: doMapCategory,\n piecewise: function (normalized, value) {\n var result = getSpecifiedVisual.call(this, value);\n\n if (result == null) {\n result = zrColor.stringify(zrColor.fastLerp(normalized, this.option.parsedVisual), 'rgba');\n }\n\n return result;\n },\n fixed: doMapFixed\n }\n },\n colorHue: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyHSL(color, value);\n }),\n colorSaturation: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyHSL(color, null, value);\n }),\n colorLightness: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyHSL(color, null, null, value);\n }),\n colorAlpha: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyAlpha(color, value);\n }),\n decal: {\n applyVisual: makeApplyVisual('decal'),\n _normalizedToVisual: {\n linear: null,\n category: doMapCategory,\n piecewise: null,\n fixed: null\n }\n },\n opacity: {\n applyVisual: makeApplyVisual('opacity'),\n _normalizedToVisual: createNormalizedToNumericVisual([0, 1])\n },\n liftZ: {\n applyVisual: makeApplyVisual('liftZ'),\n _normalizedToVisual: {\n linear: doMapFixed,\n category: doMapFixed,\n piecewise: doMapFixed,\n fixed: doMapFixed\n }\n },\n symbol: {\n applyVisual: function (value, getter, setter) {\n var symbolCfg = this.mapValueToVisual(value);\n setter('symbol', symbolCfg);\n },\n _normalizedToVisual: {\n linear: doMapToArray,\n category: doMapCategory,\n piecewise: function (normalized, value) {\n var result = getSpecifiedVisual.call(this, value);\n\n if (result == null) {\n result = doMapToArray.call(this, normalized);\n }\n\n return result;\n },\n fixed: doMapFixed\n }\n },\n symbolSize: {\n applyVisual: makeApplyVisual('symbolSize'),\n _normalizedToVisual: createNormalizedToNumericVisual([0, 1])\n }\n };\n return VisualMapping;\n}();\n\nfunction preprocessForPiecewise(thisOption) {\n var pieceList = thisOption.pieceList;\n thisOption.hasSpecialVisual = false;\n zrUtil.each(pieceList, function (piece, index) {\n piece.originIndex = index; // piece.visual is \"result visual value\" but not\n // a visual range, so it does not need to be normalized.\n\n if (piece.visual != null) {\n thisOption.hasSpecialVisual = true;\n }\n });\n}\n\nfunction preprocessForSpecifiedCategory(thisOption) {\n // Hash categories.\n var categories = thisOption.categories;\n var categoryMap = thisOption.categoryMap = {};\n var visual = thisOption.visual;\n each(categories, function (cate, index) {\n categoryMap[cate] = index;\n }); // Process visual map input.\n\n if (!zrUtil.isArray(visual)) {\n var visualArr_1 = [];\n\n if (zrUtil.isObject(visual)) {\n each(visual, function (v, cate) {\n var index = categoryMap[cate];\n visualArr_1[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v;\n });\n } else {\n // Is primary type, represents default visual.\n visualArr_1[CATEGORY_DEFAULT_VISUAL_INDEX] = visual;\n }\n\n visual = setVisualToOption(thisOption, visualArr_1);\n } // Remove categories that has no visual,\n // then we can mapping them to CATEGORY_DEFAULT_VISUAL_INDEX.\n\n\n for (var i = categories.length - 1; i >= 0; i--) {\n if (visual[i] == null) {\n delete categoryMap[categories[i]];\n categories.pop();\n }\n }\n}\n\nfunction normalizeVisualRange(thisOption, isCategory) {\n var visual = thisOption.visual;\n var visualArr = [];\n\n if (zrUtil.isObject(visual)) {\n each(visual, function (v) {\n visualArr.push(v);\n });\n } else if (visual != null) {\n visualArr.push(visual);\n }\n\n var doNotNeedPair = {\n color: 1,\n symbol: 1\n };\n\n if (!isCategory && visualArr.length === 1 && !doNotNeedPair.hasOwnProperty(thisOption.type)) {\n // Do not care visualArr.length === 0, which is illegal.\n visualArr[1] = visualArr[0];\n }\n\n setVisualToOption(thisOption, visualArr);\n}\n\nfunction makePartialColorVisualHandler(applyValue) {\n return {\n applyVisual: function (value, getter, setter) {\n // Only used in HSL\n var colorChannel = this.mapValueToVisual(value); // Must not be array value\n\n setter('color', applyValue(getter('color'), colorChannel));\n },\n _normalizedToVisual: createNormalizedToNumericVisual([0, 1])\n };\n}\n\nfunction doMapToArray(normalized) {\n var visual = this.option.visual;\n return visual[Math.round(linearMap(normalized, [0, 1], [0, visual.length - 1], true))] || {}; // TODO {}?\n}\n\nfunction makeApplyVisual(visualType) {\n return function (value, getter, setter) {\n setter(visualType, this.mapValueToVisual(value));\n };\n}\n\nfunction doMapCategory(normalized) {\n var visual = this.option.visual;\n return visual[this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX ? normalized % visual.length : normalized];\n}\n\nfunction doMapFixed() {\n // visual will be convert to array.\n return this.option.visual[0];\n}\n/**\n * Create mapped to numeric visual\n */\n\n\nfunction createNormalizedToNumericVisual(sourceExtent) {\n return {\n linear: function (normalized) {\n return linearMap(normalized, sourceExtent, this.option.visual, true);\n },\n category: doMapCategory,\n piecewise: function (normalized, value) {\n var result = getSpecifiedVisual.call(this, value);\n\n if (result == null) {\n result = linearMap(normalized, sourceExtent, this.option.visual, true);\n }\n\n return result;\n },\n fixed: doMapFixed\n };\n}\n\nfunction getSpecifiedVisual(value) {\n var thisOption = this.option;\n var pieceList = thisOption.pieceList;\n\n if (thisOption.hasSpecialVisual) {\n var pieceIndex = VisualMapping.findPieceIndex(value, pieceList);\n var piece = pieceList[pieceIndex];\n\n if (piece && piece.visual) {\n return piece.visual[this.type];\n }\n }\n}\n\nfunction setVisualToOption(thisOption, visualArr) {\n thisOption.visual = visualArr;\n\n if (thisOption.type === 'color') {\n thisOption.parsedVisual = zrUtil.map(visualArr, function (item) {\n var color = zrColor.parse(item);\n\n if (!color && process.env.NODE_ENV !== 'production') {\n warn(\"'\" + item + \"' is an illegal color, fallback to '#000000'\", true);\n }\n\n return color || [0, 0, 0, 1];\n });\n }\n\n return visualArr;\n}\n/**\n * Normalizers by mapping methods.\n */\n\n\nvar normalizers = {\n linear: function (value) {\n return linearMap(value, this.option.dataExtent, [0, 1], true);\n },\n piecewise: function (value) {\n var pieceList = this.option.pieceList;\n var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true);\n\n if (pieceIndex != null) {\n return linearMap(pieceIndex, [0, pieceList.length - 1], [0, 1], true);\n }\n },\n category: function (value) {\n var index = this.option.categories ? this.option.categoryMap[value] : value; // ordinal value\n\n return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index;\n },\n fixed: zrUtil.noop\n};\n\nfunction littleThan(close, a, b) {\n return close ? a <= b : a < b;\n}\n\nexport default VisualMapping;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport VisualMapping from '../../visual/VisualMapping.js';\nimport { each, extend, isArray } from 'zrender/lib/core/util.js';\nimport { modifyHSL, modifyAlpha } from 'zrender/lib/tool/color.js';\nimport { makeInner } from '../../util/model.js';\nvar ITEM_STYLE_NORMAL = 'itemStyle';\nvar inner = makeInner();\nexport default {\n seriesType: 'treemap',\n reset: function (seriesModel) {\n var tree = seriesModel.getData().tree;\n var root = tree.root;\n\n if (root.isRemoved()) {\n return;\n }\n\n travelTree(root, // Visual should calculate from tree root but not view root.\n {}, seriesModel.getViewRoot().getAncestors(), seriesModel);\n }\n};\n\nfunction travelTree(node, designatedVisual, viewRootAncestors, seriesModel) {\n var nodeModel = node.getModel();\n var nodeLayout = node.getLayout();\n var data = node.hostTree.data; // Optimize\n\n if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) {\n return;\n }\n\n var nodeItemStyleModel = nodeModel.getModel(ITEM_STYLE_NORMAL);\n var visuals = buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel);\n var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, 'style'); // 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);\n borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor);\n }\n\n existsStyle.stroke = borderColor;\n var viewChildren = node.viewChildren;\n\n if (!viewChildren || !viewChildren.length) {\n thisNodeColor = calculateColor(visuals); // Apply visual to this node.\n\n existsStyle.fill = thisNodeColor;\n } else {\n var mapping_1 = buildVisualMapping(node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren); // Designate visual to children.\n\n 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_1, seriesModel);\n travelTree(child, childVisual, viewRootAncestors, seriesModel);\n }\n });\n }\n}\n\nfunction buildVisuals(nodeItemStyleModel, designatedVisual, seriesModel) {\n var visuals = extend({}, designatedVisual);\n var designatedVisualItemStyle = seriesModel.designatedVisualItemStyle;\n each(['color', 'colorAlpha', 'colorSaturation'], function (visualName) {\n // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel\n designatedVisualItemStyle[visualName] = designatedVisual[visualName];\n var val = nodeItemStyleModel.get(visualName);\n designatedVisualItemStyle[visualName] = null;\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 = modifyHSL(color, null, null, colorSaturation);\n }\n\n if (colorAlpha) {\n color = modifyAlpha(color, colorAlpha);\n }\n\n return color;\n }\n}\n\nfunction calculateBorderColor(borderColorSaturation, thisNodeColor) {\n return thisNodeColor != null // Can only be string\n ? 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 inner(mapping).drColorMappingBy = colorMappingBy;\n return mapping;\n} // Notice: If we don't 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 doesn't have children, and its siblings have children,\n// and colorRange is set on level-1, then the node cannot 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 exists 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 = extend({}, visuals);\n\n if (mapping) {\n // Only support color, colorAlpha, colorSaturation.\n var mappingType = mapping.type;\n var colorMappingBy = mappingType === 'color' && inner(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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embedded 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*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport { parsePercent, MAX_SAFE_INTEGER } from '../../util/number.js';\nimport * as layout from '../../util/layout.js';\nimport * as helper from '../helper/treeHelper.js';\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/**\n * @public\n */\n\nexport default {\n seriesType: 'treemap',\n reset: function (seriesModel, ecModel, api, payload) {\n // Layout result in each node:\n // {x, y, width, height, area, borderWidth}\n var ecWidth = api.getWidth();\n var ecHeight = api.getHeight();\n var seriesOption = seriesModel.option;\n 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_1 = seriesOption.sort;\n\n if (sort_1 && sort_1 !== 'asc' && sort_1 !== 'desc') {\n // Default to be desc order.\n sort_1 = 'desc';\n }\n\n var options = {\n squareRatio: seriesOption.squareRatio,\n sort: sort_1,\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_1 = {\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_1);\n squarify(viewRoot, options, false, 0); // Supplement layout.\n\n viewRootLayout_1 = 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_1));\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 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 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 = void 0, 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 default.\n\n\nfunction estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) {\n // If targetInfo.node exists, we zoom to the node,\n // so estimate whole width and height 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));\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 position based 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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { installTreemapAction } from './treemapAction.js';\nimport TreemapSeriesModel from './TreemapSeries.js';\nimport TreemapView from './TreemapView.js';\nimport treemapVisual from './treemapVisual.js';\nimport treemapLayout from './treemapLayout.js';\nexport function install(registers) {\n registers.registerSeriesModel(TreemapSeriesModel);\n registers.registerChartView(TreemapView);\n registers.registerVisual(treemapVisual);\n registers.registerLayout(treemapLayout);\n installTreemapAction(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isNumber } from 'zrender/lib/core/util.js';\nexport default function categoryFilter(ecModel) {\n var legendModels = ecModel.findComponents({\n mainType: 'legend'\n });\n\n if (!legendModels || !legendModels.length) {\n return;\n }\n\n ecModel.eachSeriesByType('graph', function (graphSeries) {\n var categoriesData = graphSeries.getCategoriesData();\n var graph = graphSeries.getGraph();\n var data = graph.data;\n var categoryNames = categoriesData.mapArray(categoriesData.getName);\n data.filterSelf(function (idx) {\n var model = data.getItemModel(idx);\n var category = model.getShallow('category');\n\n if (category != null) {\n if (isNumber(category)) {\n category = categoryNames[category];\n } // If in any legend component the status is not selected.\n\n\n for (var i = 0; i < legendModels.length; i++) {\n if (!legendModels[i].isSelected(category)) {\n return false;\n }\n }\n }\n\n return true;\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { extend, isString } from 'zrender/lib/core/util.js';\nexport default function categoryVisual(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 style = itemModel.getModel('itemStyle').getItemStyle();\n\n if (!style.fill) {\n // Get color from palette.\n style.fill = seriesModel.getColorFromPalette(name, paletteScope);\n }\n\n categoriesData.setItemVisual(idx, 'style', style);\n var symbolVisualList = ['symbol', 'symbolSize', 'symbolKeepAspect'];\n\n for (var i = 0; i < symbolVisualList.length; i++) {\n var symbolVisual = itemModel.getShallow(symbolVisualList[i], true);\n\n if (symbolVisual != null) {\n categoriesData.setItemVisual(idx, symbolVisualList[i], symbolVisual);\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 categoryIdx = model.getShallow('category');\n\n if (categoryIdx != null) {\n if (isString(categoryIdx)) {\n categoryIdx = categoryNameIdxMap['ec-' + categoryIdx];\n }\n\n var categoryStyle = categoriesData.getItemVisual(categoryIdx, 'style');\n var style = data.ensureUniqueItemVisual(idx, 'style');\n extend(style, categoryStyle);\n var visualList = ['symbol', 'symbolSize', 'symbolKeepAspect'];\n\n for (var i = 0; i < visualList.length; i++) {\n data.setItemVisual(idx, visualList[i], categoriesData.getItemVisual(categoryIdx, visualList[i]));\n }\n }\n });\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { extend } from 'zrender/lib/core/util.js';\n\nfunction normalize(a) {\n if (!(a instanceof Array)) {\n a = [a, a];\n }\n\n return a;\n}\n\nexport default function graphEdgeVisual(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')); // const colorQuery = ['lineStyle', 'color'] as const;\n // const opacityQuery = ['lineStyle', 'opacity'] as const;\n\n edgeData.setVisual('fromSymbol', symbolType && symbolType[0]);\n edgeData.setVisual('toSymbol', symbolType && symbolType[1]);\n edgeData.setVisual('fromSymbolSize', symbolSize && symbolSize[0]);\n edgeData.setVisual('toSymbolSize', symbolSize && symbolSize[1]);\n edgeData.setVisual('style', seriesModel.getModel('lineStyle').getLineStyle());\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 style = itemModel.getModel('lineStyle').getLineStyle();\n var existsStyle = edgeData.ensureUniqueItemVisual(idx, 'style');\n extend(existsStyle, style);\n\n switch (existsStyle.stroke) {\n case 'source':\n {\n var nodeStyle = edge.node1.getVisual('style');\n existsStyle.stroke = nodeStyle && nodeStyle.fill;\n break;\n }\n\n case 'target':\n {\n var nodeStyle = edge.node2.getVisual('style');\n existsStyle.stroke = nodeStyle && nodeStyle.fill;\n break;\n }\n }\n\n symbolType[0] && edge.setVisual('fromSymbol', symbolType[0]);\n symbolType[1] && edge.setVisual('toSymbol', symbolType[1]);\n symbolSize[0] && edge.setVisual('fromSymbolSize', symbolSize[0]);\n symbolSize[1] && edge.setVisual('toSymbolSize', symbolSize[1]);\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// @ts-nocheck\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar KEY_DELIMITER = '-->';\n/**\n * params handler\n * @param {module:echarts/model/SeriesModel} seriesModel\n * @returns {*}\n */\n\nvar getAutoCurvenessParams = function (seriesModel) {\n return seriesModel.get('autoCurveness') || null;\n};\n/**\n * Generate a list of edge curvatures, 20 is the default\n * @param {module:echarts/model/SeriesModel} seriesModel\n * @param {number} appendLength\n * @return 20 => [0, -0.2, 0.2, -0.4, 0.4, -0.6, 0.6, -0.8, 0.8, -1, 1, -1.2, 1.2, -1.4, 1.4, -1.6, 1.6, -1.8, 1.8, -2]\n */\n\n\nvar createCurveness = function (seriesModel, appendLength) {\n var autoCurvenessParmas = getAutoCurvenessParams(seriesModel);\n var length = 20;\n var curvenessList = []; // handler the function set\n\n if (zrUtil.isNumber(autoCurvenessParmas)) {\n length = autoCurvenessParmas;\n } else if (zrUtil.isArray(autoCurvenessParmas)) {\n seriesModel.__curvenessList = autoCurvenessParmas;\n return;\n } // append length\n\n\n if (appendLength > length) {\n length = appendLength;\n } // make sure the length is even\n\n\n var len = length % 2 ? length + 2 : length + 3;\n curvenessList = [];\n\n for (var i = 0; i < len; i++) {\n curvenessList.push((i % 2 ? i + 1 : i) / 10 * (i % 2 ? -1 : 1));\n }\n\n seriesModel.__curvenessList = curvenessList;\n};\n/**\n * Create different cache key data in the positive and negative directions, in order to set the curvature later\n * @param {number|string|module:echarts/data/Graph.Node} n1\n * @param {number|string|module:echarts/data/Graph.Node} n2\n * @param {module:echarts/model/SeriesModel} seriesModel\n * @returns {string} key\n */\n\n\nvar getKeyOfEdges = function (n1, n2, seriesModel) {\n var source = [n1.id, n1.dataIndex].join('.');\n var target = [n2.id, n2.dataIndex].join('.');\n return [seriesModel.uid, source, target].join(KEY_DELIMITER);\n};\n/**\n * get opposite key\n * @param {string} key\n * @returns {string}\n */\n\n\nvar getOppositeKey = function (key) {\n var keys = key.split(KEY_DELIMITER);\n return [keys[0], keys[2], keys[1]].join(KEY_DELIMITER);\n};\n/**\n * get edgeMap with key\n * @param edge\n * @param {module:echarts/model/SeriesModel} seriesModel\n */\n\n\nvar getEdgeFromMap = function (edge, seriesModel) {\n var key = getKeyOfEdges(edge.node1, edge.node2, seriesModel);\n return seriesModel.__edgeMap[key];\n};\n/**\n * calculate all cases total length\n * @param edge\n * @param seriesModel\n * @returns {number}\n */\n\n\nvar getTotalLengthBetweenNodes = function (edge, seriesModel) {\n var len = getEdgeMapLengthWithKey(getKeyOfEdges(edge.node1, edge.node2, seriesModel), seriesModel);\n var lenV = getEdgeMapLengthWithKey(getKeyOfEdges(edge.node2, edge.node1, seriesModel), seriesModel);\n return len + lenV;\n};\n/**\n *\n * @param key\n */\n\n\nvar getEdgeMapLengthWithKey = function (key, seriesModel) {\n var edgeMap = seriesModel.__edgeMap;\n return edgeMap[key] ? edgeMap[key].length : 0;\n};\n/**\n * Count the number of edges between the same two points, used to obtain the curvature table and the parity of the edge\n * @see /graph/GraphSeries.js@getInitialData\n * @param {module:echarts/model/SeriesModel} seriesModel\n */\n\n\nexport function initCurvenessList(seriesModel) {\n if (!getAutoCurvenessParams(seriesModel)) {\n return;\n }\n\n seriesModel.__curvenessList = [];\n seriesModel.__edgeMap = {}; // calc the array of curveness List\n\n createCurveness(seriesModel);\n}\n/**\n * set edgeMap with key\n * @param {number|string|module:echarts/data/Graph.Node} n1\n * @param {number|string|module:echarts/data/Graph.Node} n2\n * @param {module:echarts/model/SeriesModel} seriesModel\n * @param {number} index\n */\n\nexport function createEdgeMapForCurveness(n1, n2, seriesModel, index) {\n if (!getAutoCurvenessParams(seriesModel)) {\n return;\n }\n\n var key = getKeyOfEdges(n1, n2, seriesModel);\n var edgeMap = seriesModel.__edgeMap;\n var oppositeEdges = edgeMap[getOppositeKey(key)]; // set direction\n\n if (edgeMap[key] && !oppositeEdges) {\n edgeMap[key].isForward = true;\n } else if (oppositeEdges && edgeMap[key]) {\n oppositeEdges.isForward = true;\n edgeMap[key].isForward = false;\n }\n\n edgeMap[key] = edgeMap[key] || [];\n edgeMap[key].push(index);\n}\n/**\n * get curvature for edge\n * @param edge\n * @param {module:echarts/model/SeriesModel} seriesModel\n * @param index\n */\n\nexport function getCurvenessForEdge(edge, seriesModel, index, needReverse) {\n var autoCurvenessParams = getAutoCurvenessParams(seriesModel);\n var isArrayParam = zrUtil.isArray(autoCurvenessParams);\n\n if (!autoCurvenessParams) {\n return null;\n }\n\n var edgeArray = getEdgeFromMap(edge, seriesModel);\n\n if (!edgeArray) {\n return null;\n }\n\n var edgeIndex = -1;\n\n for (var i = 0; i < edgeArray.length; i++) {\n if (edgeArray[i] === index) {\n edgeIndex = i;\n break;\n }\n } // if totalLen is Longer createCurveness\n\n\n var totalLen = getTotalLengthBetweenNodes(edge, seriesModel);\n createCurveness(seriesModel, totalLen);\n edge.lineStyle = edge.lineStyle || {}; // if is opposite edge, must set curvenss to opposite number\n\n var curKey = getKeyOfEdges(edge.node1, edge.node2, seriesModel);\n var curvenessList = seriesModel.__curvenessList; // if pass array no need parity\n\n var parityCorrection = isArrayParam ? 0 : totalLen % 2 ? 0 : 1;\n\n if (!edgeArray.isForward) {\n // the opposite edge show outside\n var oppositeKey = getOppositeKey(curKey);\n var len = getEdgeMapLengthWithKey(oppositeKey, seriesModel);\n var resValue = curvenessList[edgeIndex + len + parityCorrection]; // isNeedReverse, simple, force type need reverse the curveness in the junction of the forword and the opposite\n\n if (needReverse) {\n // set as array may make the parity handle with the len of opposite\n if (isArrayParam) {\n if (autoCurvenessParams && autoCurvenessParams[0] === 0) {\n return (len + parityCorrection) % 2 ? resValue : -resValue;\n } else {\n return ((len % 2 ? 0 : 1) + parityCorrection) % 2 ? resValue : -resValue;\n }\n } else {\n return (len + parityCorrection) % 2 ? resValue : -resValue;\n }\n } else {\n return curvenessList[edgeIndex + len + parityCorrection];\n }\n } else {\n return curvenessList[parityCorrection + edgeIndex];\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as vec2 from 'zrender/lib/core/vector.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { getCurvenessForEdge } from '../helper/multipleGraphEdgeHelper.js';\nexport function 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, seriesModel);\n}\nexport function simpleLayoutEdge(graph, seriesModel) {\n graph.eachEdge(function (edge, index) {\n var curveness = zrUtil.retrieve3(edge.getModel().get(['lineStyle', 'curveness']), -getCurvenessForEdge(edge, seriesModel, index, true), 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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each } from 'zrender/lib/core/util.js';\nimport { simpleLayout, simpleLayoutEdge } from './simpleLayoutHelper.js';\nexport default function graphSimpleLayout(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_1 = seriesModel.getData();\n var dimensions_1 = [];\n each(coordSys.dimensions, function (coordDim) {\n dimensions_1 = dimensions_1.concat(data_1.mapDimensionsAll(coordDim));\n });\n\n for (var dataIndex = 0; dataIndex < data_1.count(); dataIndex++) {\n var value = [];\n var hasValue = false;\n\n for (var i = 0; i < dimensions_1.length; i++) {\n var val = data_1.get(dimensions_1[i], dataIndex);\n\n if (!isNaN(val)) {\n hasValue = true;\n }\n\n value.push(val);\n }\n\n if (hasValue) {\n data_1.setItemLayout(dataIndex, coordSys.dataToPoint(value));\n } else {\n // Also {Array.}, not undefined to avoid if...else... statement\n data_1.setItemLayout(dataIndex, [NaN, NaN]);\n }\n }\n\n simpleLayoutEdge(data_1.graph, seriesModel);\n } else if (!layout || layout === 'none') {\n simpleLayout(seriesModel);\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport function getNodeGlobalScale(seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys.type !== 'view') {\n return 1;\n }\n\n var nodeScaleRatio = seriesModel.option.nodeScaleRatio;\n var groupZoom = coordSys.scaleX; // Scale node when zoom changes\n\n var roamZoom = coordSys.getZoom();\n var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;\n return nodeScale / groupZoom;\n}\nexport function getSymbolSize(node) {\n var symbolSize = node.getVisual('symbolSize');\n\n if (symbolSize instanceof Array) {\n symbolSize = (symbolSize[0] + symbolSize[1]) / 2;\n }\n\n return +symbolSize;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as vec2 from 'zrender/lib/core/vector.js';\nimport { getSymbolSize, getNodeGlobalScale } from './graphHelper.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { getCurvenessForEdge } from '../helper/multipleGraphEdgeHelper.js';\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\nexport function circularLayout(seriesModel, basedOn, draggingNode, pointer) {\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 if (draggingNode) {\n var _a = coordSys.pointToData(pointer),\n tempX = _a[0],\n tempY = _a[1];\n\n var v = [tempX - cx, tempY - cy];\n vec2.normalize(v, v);\n vec2.scale(v, v, r);\n draggingNode.setLayout([cx + v[0], cy + v[1]], true);\n var circularRotateLabel = seriesModel.get(['circular', 'rotateLabel']);\n rotateNodeLabel(draggingNode, circularRotateLabel, cx, cy);\n }\n\n _layoutNodesBasedOn[basedOn](seriesModel, graph, nodeData, r, cx, cy, count);\n\n graph.eachEdge(function (edge, index) {\n var curveness = zrUtil.retrieve3(edge.getModel().get(['lineStyle', 'curveness']), getCurvenessForEdge(edge, seriesModel, index), 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}\nvar _layoutNodesBasedOn = {\n value: function (seriesModel, 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, 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; // init circular layout for\n // 1. layout undefined node\n // 2. not fixed node\n\n (!node.getLayout() || !node.getLayout().fixed) && node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]);\n angle += radianHalf;\n });\n }\n};\nexport function rotateNodeLabel(node, circularRotateLabel, cx, cy) {\n var el = node.getGraphicEl(); // need to check if el exists. '-' value may not create node element.\n\n if (!el) {\n return;\n }\n\n var nodeModel = node.getModel();\n var labelRotate = nodeModel.get(['label', 'rotate']) || 0;\n var symbolPath = el.getSymbolPath();\n\n if (circularRotateLabel) {\n var pos = node.getLayout();\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 symbolPath.setTextConfig({\n rotation: -rad,\n position: textPosition,\n origin: 'center'\n });\n var emphasisState = symbolPath.ensureState('emphasis');\n zrUtil.extend(emphasisState.textConfig || (emphasisState.textConfig = {}), {\n position: textPosition\n });\n } else {\n symbolPath.setTextConfig({\n rotation: labelRotate *= Math.PI / 180\n });\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { circularLayout } from './circularLayoutHelper.js';\nexport default function graphCircularLayout(ecModel) {\n ecModel.eachSeriesByType('graph', function (seriesModel) {\n if (seriesModel.get('layout') === 'circular') {\n circularLayout(seriesModel, 'symbolSize');\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embedded 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*/\nimport * as vec2 from 'zrender/lib/core/vector.js';\nvar scaleAndAdd = vec2.scaleAndAdd; // function adjacentNode(n, e) {\n// return e.n1 === n ? e.n2 : e.n1;\n// }\n\nexport function forceLayout(inNodes, inEdges, opts) {\n var nodes = inNodes;\n var edges = inEdges;\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]; // let scale = opts.scale || 1;\n\n var gravity = opts.gravity == null ? 0.1 : opts.gravity; // for (let i = 0; i < edges.length; i++) {\n // let e = edges[i];\n // let n1 = e.n1;\n // let 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 // let k = scale * Math.sqrt(width * height / nodes.length);\n // let k2 = k * k;\n\n\n var initialFriction = opts.friction == null ? 0.6 : opts.friction;\n var friction = initialFriction;\n var beforeStepCallback;\n var afterStepCallback;\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 * Before step hook\n */\n beforeStep: function (cb) {\n beforeStepCallback = cb;\n },\n\n /**\n * After step hook\n */\n afterStep: function (cb) {\n afterStepCallback = cb;\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 beforeStepCallback && beforeStepCallback(nodes, edges);\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); // let d = vec2.len(v12);\n // vec2.scale(v12, v12, 1 / d);\n // let 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 var finished = friction < 0.01;\n afterStepCallback && afterStepCallback(nodes, edges, finished);\n cb && cb(finished);\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { forceLayout } from './forceHelper.js';\nimport { simpleLayout } from './simpleLayoutHelper.js';\nimport { circularLayout } from './circularLayoutHelper.js';\nimport { linearMap } from '../../util/number.js';\nimport * as vec2 from 'zrender/lib/core/vector.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { getCurvenessForEdge } from '../helper/multipleGraphEdgeHelper.js';\nexport default function graphForceLayout(ecModel) {\n ecModel.eachSeriesByType('graph', function (graphSeries) {\n var coordSys = graphSeries.coordinateSystem;\n\n if (coordSys && coordSys.type !== 'view') {\n return;\n }\n\n if (graphSeries.get('layout') === 'force') {\n var preservedPoints_1 = graphSeries.preservedPoints || {};\n var graph_1 = graphSeries.getGraph();\n var nodeData_1 = graph_1.data;\n var edgeData = graph_1.edgeData;\n var forceModel = graphSeries.getModel('force');\n var initLayout = forceModel.get('initLayout');\n\n if (graphSeries.preservedPoints) {\n nodeData_1.each(function (idx) {\n var id = nodeData_1.getId(idx);\n nodeData_1.setItemLayout(idx, preservedPoints_1[id] || [NaN, NaN]);\n });\n } else if (!initLayout || initLayout === 'none') {\n simpleLayout(graphSeries);\n } else if (initLayout === 'circular') {\n circularLayout(graphSeries, 'value');\n }\n\n var nodeDataExtent_1 = nodeData_1.getDataExtent('value');\n var edgeDataExtent_1 = edgeData.getDataExtent('value'); // let edgeDataExtent = edgeData.getDataExtent('value');\n\n var repulsion = forceModel.get('repulsion');\n var edgeLength = forceModel.get('edgeLength');\n var repulsionArr_1 = zrUtil.isArray(repulsion) ? repulsion : [repulsion, repulsion];\n var edgeLengthArr_1 = zrUtil.isArray(edgeLength) ? edgeLength : [edgeLength, edgeLength]; // Larger value has smaller length\n\n edgeLengthArr_1 = [edgeLengthArr_1[1], edgeLengthArr_1[0]];\n var nodes_1 = nodeData_1.mapArray('value', function (value, idx) {\n var point = nodeData_1.getItemLayout(idx);\n var rep = linearMap(value, nodeDataExtent_1, repulsionArr_1);\n\n if (isNaN(rep)) {\n rep = (repulsionArr_1[0] + repulsionArr_1[1]) / 2;\n }\n\n return {\n w: rep,\n rep: rep,\n fixed: nodeData_1.getItemModel(idx).get('fixed'),\n p: !point || isNaN(point[0]) || isNaN(point[1]) ? null : point\n };\n });\n var edges = edgeData.mapArray('value', function (value, idx) {\n var edge = graph_1.getEdgeByIndex(idx);\n var d = linearMap(value, edgeDataExtent_1, edgeLengthArr_1);\n\n if (isNaN(d)) {\n d = (edgeLengthArr_1[0] + edgeLengthArr_1[1]) / 2;\n }\n\n var edgeModel = edge.getModel();\n var curveness = zrUtil.retrieve3(edge.getModel().get(['lineStyle', 'curveness']), -getCurvenessForEdge(edge, graphSeries, idx, true), 0);\n return {\n n1: nodes_1[edge.node1.dataIndex],\n n2: nodes_1[edge.node2.dataIndex],\n d: d,\n curveness: curveness,\n ignoreForceLayout: edgeModel.get('ignoreForceLayout')\n };\n }); // let coordSys = graphSeries.coordinateSystem;\n\n var rect = coordSys.getBoundingRect();\n var forceInstance = forceLayout(nodes_1, edges, {\n rect: rect,\n gravity: forceModel.get('gravity'),\n friction: forceModel.get('friction')\n });\n forceInstance.beforeStep(function (nodes, edges) {\n for (var i = 0, l = nodes.length; i < l; i++) {\n if (nodes[i].fixed) {\n // Write back to layout instance\n vec2.copy(nodes[i].p, graph_1.getNodeByIndex(i).getLayout());\n }\n }\n });\n forceInstance.afterStep(function (nodes, edges, stopped) {\n for (var i = 0, l = nodes.length; i < l; i++) {\n if (!nodes[i].fixed) {\n graph_1.getNodeByIndex(i).setLayout(nodes[i].p);\n }\n\n preservedPoints_1[nodeData_1.getId(i)] = nodes[i].p;\n }\n\n for (var i = 0, l = edges.length; i < l; i++) {\n var e = edges[i];\n var edge = graph_1.getEdgeByIndex(i);\n var p1 = e.n1.p;\n var p2 = e.n2.p;\n var points = edge.getLayout();\n points = points ? points.slice() : [];\n points[0] = points[0] || [];\n points[1] = points[1] || [];\n vec2.copy(points[0], p1);\n vec2.copy(points[1], p2);\n\n if (+e.curveness) {\n points[2] = [(p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * e.curveness, (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * e.curveness];\n }\n\n edge.setLayout(points);\n }\n });\n graphSeries.forceLayout = forceInstance;\n graphSeries.preservedPoints = preservedPoints_1; // Step to get the layout\n\n forceInstance.step();\n } else {\n // Remove prev injected forceLayout instance\n graphSeries.forceLayout = null;\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// FIXME Where to create the simple view coordinate system\nimport View from '../../coord/View.js';\nimport { getLayoutRect } from '../../util/layout.js';\nimport * as bbox from 'zrender/lib/core/bbox.js';\nimport { extend } from 'zrender/lib/core/util.js';\n\nfunction getViewRect(seriesModel, api, aspect) {\n var option = extend(seriesModel.getBoxLayoutParams(), {\n aspect: aspect\n });\n return getLayoutRect(option, {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n\nexport default function createViewCoordSys(ecModel, api) {\n var viewList = [];\n ecModel.eachSeriesByType('graph', function (seriesModel) {\n var coordSysType = seriesModel.get('coordinateSystem');\n\n if (!coordSysType || coordSysType === 'view') {\n var data_1 = seriesModel.getData();\n var positions = data_1.mapArray(function (idx) {\n var itemModel = data_1.getItemModel(idx);\n return [+itemModel.get('x'), +itemModel.get('y')];\n });\n var min = [];\n var max = [];\n bbox.fromPoints(positions, min, max); // If width or height is 0\n\n if (max[0] - min[0] === 0) {\n max[0] += 1;\n min[0] -= 1;\n }\n\n if (max[1] - min[1] === 0) {\n max[1] += 1;\n min[1] -= 1;\n }\n\n var aspect = (max[0] - min[0]) / (max[1] - min[1]); // FIXME If get view rect after data processed?\n\n var viewRect = getViewRect(seriesModel, api, aspect); // Position may be NaN, use view rect instead\n\n if (isNaN(aspect)) {\n min = [viewRect.x, viewRect.y];\n max = [viewRect.x + viewRect.width, viewRect.y + viewRect.height];\n }\n\n var bbWidth = max[0] - min[0];\n var bbHeight = max[1] - min[1];\n var viewWidth = viewRect.width;\n var viewHeight = viewRect.height;\n var viewCoordSys = seriesModel.coordinateSystem = new View();\n viewCoordSys.zoomLimit = seriesModel.get('scaleLimit');\n viewCoordSys.setBoundingRect(min[0], min[1], bbWidth, bbHeight);\n viewCoordSys.setViewRect(viewRect.x, viewRect.y, viewWidth, viewHeight); // Update roam info\n\n viewCoordSys.setCenter(seriesModel.get('center'), api);\n viewCoordSys.setZoom(seriesModel.get('zoom'));\n viewList.push(viewCoordSys);\n }\n });\n return viewList;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/**\n * Line path for bezier and straight line draw\n */\n\nimport * as graphic from '../../util/graphic.js';\nimport * as vec2 from 'zrender/lib/core/vector.js';\nvar straightLineProto = graphic.Line.prototype;\nvar bezierCurveProto = graphic.BezierCurve.prototype;\n\nvar StraightLineShape =\n/** @class */\nfunction () {\n function StraightLineShape() {\n // Start point\n this.x1 = 0;\n this.y1 = 0; // End point\n\n this.x2 = 0;\n this.y2 = 0;\n this.percent = 1;\n }\n\n return StraightLineShape;\n}();\n\nvar CurveShape =\n/** @class */\nfunction (_super) {\n __extends(CurveShape, _super);\n\n function CurveShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return CurveShape;\n}(StraightLineShape);\n\nfunction isStraightLine(shape) {\n return isNaN(+shape.cpx1) || isNaN(+shape.cpy1);\n}\n\nvar ECLinePath =\n/** @class */\nfunction (_super) {\n __extends(ECLinePath, _super);\n\n function ECLinePath(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this.type = 'ec-line';\n return _this;\n }\n\n ECLinePath.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n\n ECLinePath.prototype.getDefaultShape = function () {\n return new StraightLineShape();\n };\n\n ECLinePath.prototype.buildPath = function (ctx, shape) {\n if (isStraightLine(shape)) {\n straightLineProto.buildPath.call(this, ctx, shape);\n } else {\n bezierCurveProto.buildPath.call(this, ctx, shape);\n }\n };\n\n ECLinePath.prototype.pointAt = function (t) {\n if (isStraightLine(this.shape)) {\n return straightLineProto.pointAt.call(this, t);\n } else {\n return bezierCurveProto.pointAt.call(this, t);\n }\n };\n\n ECLinePath.prototype.tangentAt = function (t) {\n var shape = this.shape;\n var p = isStraightLine(shape) ? [shape.x2 - shape.x1, shape.y2 - shape.y1] : bezierCurveProto.tangentAt.call(this, t);\n return vec2.normalize(p, p);\n };\n\n return ECLinePath;\n}(graphic.Path);\n\nexport default ECLinePath;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { isArray, each } from 'zrender/lib/core/util.js';\nimport * as vector from 'zrender/lib/core/vector.js';\nimport * as symbolUtil from '../../util/symbol.js';\nimport ECLinePath from './LinePath.js';\nimport * as graphic from '../../util/graphic.js';\nimport { toggleHoverEmphasis, enterEmphasis, leaveEmphasis, SPECIAL_STATES } from '../../util/states.js';\nimport { getLabelStatesModels, setLabelStyle } from '../../label/labelStyle.js';\nimport { round } from '../../util/number.js';\nvar SYMBOL_CATEGORIES = ['fromSymbol', 'toSymbol'];\n\nfunction makeSymbolTypeKey(symbolCategory) {\n return '_' + symbolCategory + 'Type';\n}\n/**\n * @inner\n */\n\n\nfunction createSymbol(name, lineData, idx) {\n var symbolType = lineData.getItemVisual(idx, name);\n\n if (!symbolType || symbolType === 'none') {\n return;\n }\n\n var symbolSize = lineData.getItemVisual(idx, name + 'Size');\n var symbolRotate = lineData.getItemVisual(idx, name + 'Rotate');\n var symbolOffset = lineData.getItemVisual(idx, name + 'Offset');\n var symbolKeepAspect = lineData.getItemVisual(idx, name + 'KeepAspect');\n var symbolSizeArr = symbolUtil.normalizeSymbolSize(symbolSize);\n var symbolOffsetArr = symbolUtil.normalizeSymbolOffset(symbolOffset || 0, symbolSizeArr);\n var symbolPath = symbolUtil.createSymbol(symbolType, -symbolSizeArr[0] / 2 + symbolOffsetArr[0], -symbolSizeArr[1] / 2 + symbolOffsetArr[1], symbolSizeArr[0], symbolSizeArr[1], null, symbolKeepAspect);\n symbolPath.__specifiedRotation = symbolRotate == null || isNaN(symbolRotate) ? void 0 : +symbolRotate * Math.PI / 180 || 0;\n symbolPath.name = name;\n return symbolPath;\n}\n\nfunction createLine(points) {\n var line = new ECLinePath({\n name: 'line',\n subPixelOptimize: true\n });\n setLinePoints(line.shape, points);\n return line;\n}\n\nfunction setLinePoints(targetShape, points) {\n targetShape.x1 = points[0][0];\n targetShape.y1 = points[0][1];\n targetShape.x2 = points[1][0];\n targetShape.y2 = points[1][1];\n targetShape.percent = 1;\n var cp1 = points[2];\n\n if (cp1) {\n targetShape.cpx1 = cp1[0];\n targetShape.cpy1 = cp1[1];\n } else {\n targetShape.cpx1 = NaN;\n targetShape.cpy1 = NaN;\n }\n}\n\nvar Line =\n/** @class */\nfunction (_super) {\n __extends(Line, _super);\n\n function Line(lineData, idx, seriesScope) {\n var _this = _super.call(this) || this;\n\n _this._createLine(lineData, idx, seriesScope);\n\n return _this;\n }\n\n Line.prototype._createLine = function (lineData, idx, seriesScope) {\n var seriesModel = lineData.hostModel;\n var linePoints = lineData.getItemLayout(idx);\n var line = createLine(linePoints);\n line.shape.percent = 0;\n graphic.initProps(line, {\n shape: {\n percent: 1\n }\n }, seriesModel, idx);\n this.add(line);\n each(SYMBOL_CATEGORIES, function (symbolCategory) {\n var symbol = createSymbol(symbolCategory, lineData, idx); // symbols must added after line to make sure\n // it will be updated after line#update.\n // Or symbol position and rotation update in line#beforeUpdate will be one frame slow\n\n this.add(symbol);\n this[makeSymbolTypeKey(symbolCategory)] = lineData.getItemVisual(idx, symbolCategory);\n }, this);\n\n this._updateCommonStl(lineData, idx, seriesScope);\n }; // TODO More strict on the List type in parameters?\n\n\n Line.prototype.updateData = function (lineData, idx, seriesScope) {\n var seriesModel = lineData.hostModel;\n var line = this.childOfName('line');\n var linePoints = lineData.getItemLayout(idx);\n var target = {\n shape: {}\n };\n setLinePoints(target.shape, linePoints);\n graphic.updateProps(line, target, seriesModel, idx);\n each(SYMBOL_CATEGORIES, function (symbolCategory) {\n var symbolType = lineData.getItemVisual(idx, symbolCategory);\n var key = makeSymbolTypeKey(symbolCategory); // Symbol changed\n\n if (this[key] !== symbolType) {\n this.remove(this.childOfName(symbolCategory));\n var symbol = createSymbol(symbolCategory, lineData, idx);\n this.add(symbol);\n }\n\n this[key] = symbolType;\n }, this);\n\n this._updateCommonStl(lineData, idx, seriesScope);\n };\n\n ;\n\n Line.prototype.getLinePath = function () {\n return this.childAt(0);\n };\n\n Line.prototype._updateCommonStl = function (lineData, idx, seriesScope) {\n var seriesModel = lineData.hostModel;\n var line = this.childOfName('line');\n var emphasisLineStyle = seriesScope && seriesScope.emphasisLineStyle;\n var blurLineStyle = seriesScope && seriesScope.blurLineStyle;\n var selectLineStyle = seriesScope && seriesScope.selectLineStyle;\n var labelStatesModels = seriesScope && seriesScope.labelStatesModels;\n var emphasisDisabled = seriesScope && seriesScope.emphasisDisabled;\n var focus = seriesScope && seriesScope.focus;\n var blurScope = seriesScope && seriesScope.blurScope; // Optimization for large dataset\n\n if (!seriesScope || lineData.hasItemOption) {\n var itemModel = lineData.getItemModel(idx);\n var emphasisModel = itemModel.getModel('emphasis');\n emphasisLineStyle = emphasisModel.getModel('lineStyle').getLineStyle();\n blurLineStyle = itemModel.getModel(['blur', 'lineStyle']).getLineStyle();\n selectLineStyle = itemModel.getModel(['select', 'lineStyle']).getLineStyle();\n emphasisDisabled = emphasisModel.get('disabled');\n focus = emphasisModel.get('focus');\n blurScope = emphasisModel.get('blurScope');\n labelStatesModels = getLabelStatesModels(itemModel);\n }\n\n var lineStyle = lineData.getItemVisual(idx, 'style');\n var visualColor = lineStyle.stroke;\n line.useStyle(lineStyle);\n line.style.fill = null;\n line.style.strokeNoScale = true;\n line.ensureState('emphasis').style = emphasisLineStyle;\n line.ensureState('blur').style = blurLineStyle;\n line.ensureState('select').style = selectLineStyle; // Update symbol\n\n each(SYMBOL_CATEGORIES, function (symbolCategory) {\n var symbol = this.childOfName(symbolCategory);\n\n if (symbol) {\n // Share opacity and color with line.\n symbol.setColor(visualColor);\n symbol.style.opacity = lineStyle.opacity;\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n var lineState = line.getState(stateName);\n\n if (lineState) {\n var lineStateStyle = lineState.style || {};\n var state = symbol.ensureState(stateName);\n var stateStyle = state.style || (state.style = {});\n\n if (lineStateStyle.stroke != null) {\n stateStyle[symbol.__isEmptyBrush ? 'stroke' : 'fill'] = lineStateStyle.stroke;\n }\n\n if (lineStateStyle.opacity != null) {\n stateStyle.opacity = lineStateStyle.opacity;\n }\n }\n }\n\n symbol.markRedraw();\n }\n }, this);\n var rawVal = seriesModel.getRawValue(idx);\n setLabelStyle(this, labelStatesModels, {\n labelDataIndex: idx,\n labelFetcher: {\n getFormattedLabel: function (dataIndex, stateName) {\n return seriesModel.getFormattedLabel(dataIndex, stateName, lineData.dataType);\n }\n },\n inheritColor: visualColor || '#000',\n defaultOpacity: lineStyle.opacity,\n defaultText: (rawVal == null ? lineData.getName(idx) : isFinite(rawVal) ? round(rawVal) : rawVal) + ''\n });\n var label = this.getTextContent(); // Always set `textStyle` even if `normalStyle.text` is null, because default\n // values have to be set on `normalStyle`.\n\n if (label) {\n var labelNormalModel = labelStatesModels.normal;\n label.__align = label.style.align;\n label.__verticalAlign = label.style.verticalAlign; // 'start', 'middle', 'end'\n\n label.__position = labelNormalModel.get('position') || 'middle';\n var distance = labelNormalModel.get('distance');\n\n if (!isArray(distance)) {\n distance = [distance, distance];\n }\n\n label.__labelDistance = distance;\n }\n\n this.setTextConfig({\n position: null,\n local: true,\n inside: false // Can't be inside for stroke element.\n\n });\n toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled);\n };\n\n Line.prototype.highlight = function () {\n enterEmphasis(this);\n };\n\n Line.prototype.downplay = function () {\n leaveEmphasis(this);\n };\n\n Line.prototype.updateLayout = function (lineData, idx) {\n this.setLinePoints(lineData.getItemLayout(idx));\n };\n\n Line.prototype.setLinePoints = function (points) {\n var linePath = this.childOfName('line');\n setLinePoints(linePath.shape, points);\n linePath.dirty();\n };\n\n Line.prototype.beforeUpdate = function () {\n var lineGroup = this;\n var symbolFrom = lineGroup.childOfName('fromSymbol');\n var symbolTo = lineGroup.childOfName('toSymbol');\n var label = lineGroup.getTextContent(); // Quick reject\n\n if (!symbolFrom && !symbolTo && (!label || label.ignore)) {\n return;\n }\n\n var invScale = 1;\n var parentNode = this.parent;\n\n while (parentNode) {\n if (parentNode.scaleX) {\n invScale /= parentNode.scaleX;\n }\n\n parentNode = parentNode.parent;\n }\n\n var line = lineGroup.childOfName('line'); // If line not changed\n // FIXME Parent scale changed\n\n if (!this.__dirty && !line.__dirty) {\n return;\n }\n\n var percent = line.shape.percent;\n var fromPos = line.pointAt(0);\n var toPos = line.pointAt(percent);\n var d = vector.sub([], toPos, fromPos);\n vector.normalize(d, d);\n\n function setSymbolRotation(symbol, percent) {\n // Fix #12388\n // when symbol is set to be 'arrow' in markLine,\n // symbolRotate value will be ignored, and compulsively use tangent angle.\n // rotate by default if symbol rotation is not specified\n var specifiedRotation = symbol.__specifiedRotation;\n\n if (specifiedRotation == null) {\n var tangent = line.tangentAt(percent);\n symbol.attr('rotation', (percent === 1 ? -1 : 1) * Math.PI / 2 - Math.atan2(tangent[1], tangent[0]));\n } else {\n symbol.attr('rotation', specifiedRotation);\n }\n }\n\n if (symbolFrom) {\n symbolFrom.setPosition(fromPos);\n setSymbolRotation(symbolFrom, 0);\n symbolFrom.scaleX = symbolFrom.scaleY = invScale * percent;\n symbolFrom.markRedraw();\n }\n\n if (symbolTo) {\n symbolTo.setPosition(toPos);\n setSymbolRotation(symbolTo, 1);\n symbolTo.scaleX = symbolTo.scaleY = invScale * percent;\n symbolTo.markRedraw();\n }\n\n if (label && !label.ignore) {\n label.x = label.y = 0;\n label.originX = label.originY = 0;\n var textAlign = void 0;\n var textVerticalAlign = void 0;\n var distance = label.__labelDistance;\n var distanceX = distance[0] * invScale;\n var distanceY = distance[1] * invScale;\n var halfPercent = percent / 2;\n var tangent = line.tangentAt(halfPercent);\n var n = [tangent[1], -tangent[0]];\n var cp = line.pointAt(halfPercent);\n\n if (n[1] > 0) {\n n[0] = -n[0];\n n[1] = -n[1];\n }\n\n var dir = tangent[0] < 0 ? -1 : 1;\n\n if (label.__position !== 'start' && label.__position !== 'end') {\n var rotation = -Math.atan2(tangent[1], tangent[0]);\n\n if (toPos[0] < fromPos[0]) {\n rotation = Math.PI + rotation;\n }\n\n label.rotation = rotation;\n }\n\n var dy = void 0;\n\n switch (label.__position) {\n case 'insideStartTop':\n case 'insideMiddleTop':\n case 'insideEndTop':\n case 'middle':\n dy = -distanceY;\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideStartBottom':\n case 'insideMiddleBottom':\n case 'insideEndBottom':\n dy = distanceY;\n textVerticalAlign = 'top';\n break;\n\n default:\n dy = 0;\n textVerticalAlign = 'middle';\n }\n\n switch (label.__position) {\n case 'end':\n label.x = d[0] * distanceX + toPos[0];\n label.y = d[1] * distanceY + toPos[1];\n textAlign = d[0] > 0.8 ? 'left' : d[0] < -0.8 ? 'right' : 'center';\n textVerticalAlign = d[1] > 0.8 ? 'top' : d[1] < -0.8 ? 'bottom' : 'middle';\n break;\n\n case 'start':\n label.x = -d[0] * distanceX + fromPos[0];\n label.y = -d[1] * distanceY + fromPos[1];\n textAlign = d[0] > 0.8 ? 'right' : d[0] < -0.8 ? 'left' : 'center';\n textVerticalAlign = d[1] > 0.8 ? 'bottom' : d[1] < -0.8 ? 'top' : 'middle';\n break;\n\n case 'insideStartTop':\n case 'insideStart':\n case 'insideStartBottom':\n label.x = distanceX * dir + fromPos[0];\n label.y = fromPos[1] + dy;\n textAlign = tangent[0] < 0 ? 'right' : 'left';\n label.originX = -distanceX * dir;\n label.originY = -dy;\n break;\n\n case 'insideMiddleTop':\n case 'insideMiddle':\n case 'insideMiddleBottom':\n case 'middle':\n label.x = cp[0];\n label.y = cp[1] + dy;\n textAlign = 'center';\n label.originY = -dy;\n break;\n\n case 'insideEndTop':\n case 'insideEnd':\n case 'insideEndBottom':\n label.x = -distanceX * dir + toPos[0];\n label.y = toPos[1] + dy;\n textAlign = tangent[0] >= 0 ? 'right' : 'left';\n label.originX = distanceX * dir;\n label.originY = -dy;\n break;\n }\n\n label.scaleX = label.scaleY = invScale;\n label.setStyle({\n // Use the user specified text align and baseline first\n verticalAlign: label.__verticalAlign || textVerticalAlign,\n align: label.__align || textAlign\n });\n }\n };\n\n return Line;\n}(graphic.Group);\n\nexport default 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\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as graphic from '../../util/graphic.js';\nimport LineGroup from './Line.js';\nimport { getLabelStatesModels } from '../../label/labelStyle.js';\n\nvar LineDraw =\n/** @class */\nfunction () {\n function LineDraw(LineCtor) {\n this.group = new graphic.Group();\n this._LineCtor = LineCtor || LineGroup;\n }\n\n LineDraw.prototype.updateData = function (lineData) {\n var _this = this; // Remove progressive els.\n\n\n this._progressiveEls = null;\n var lineDraw = this;\n var group = lineDraw.group;\n var oldLineData = lineDraw._lineData;\n lineDraw._lineData = lineData; // 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 (!oldLineData) {\n group.removeAll();\n }\n\n var seriesScope = makeSeriesScope(lineData);\n lineData.diff(oldLineData).add(function (idx) {\n _this._doAdd(lineData, idx, seriesScope);\n }).update(function (newIdx, oldIdx) {\n _this._doUpdate(oldLineData, lineData, oldIdx, newIdx, seriesScope);\n }).remove(function (idx) {\n group.remove(oldLineData.getItemGraphicEl(idx));\n }).execute();\n };\n\n ;\n\n LineDraw.prototype.updateLayout = function () {\n var lineData = this._lineData; // Do not support update layout in incremental mode.\n\n if (!lineData) {\n return;\n }\n\n lineData.eachItemGraphicEl(function (el, idx) {\n el.updateLayout(lineData, idx);\n }, this);\n };\n\n ;\n\n LineDraw.prototype.incrementalPrepareUpdate = function (lineData) {\n this._seriesScope = makeSeriesScope(lineData);\n this._lineData = null;\n this.group.removeAll();\n };\n\n ;\n\n LineDraw.prototype.incrementalUpdate = function (taskParams, lineData) {\n this._progressiveEls = [];\n\n function updateIncrementalAndHover(el) {\n if (!el.isGroup && !isEffectObject(el)) {\n el.incremental = true;\n el.ensureState('emphasis').hoverLayer = true;\n }\n }\n\n for (var idx = taskParams.start; idx < taskParams.end; idx++) {\n var itemLayout = lineData.getItemLayout(idx);\n\n if (lineNeedsDraw(itemLayout)) {\n var el = new this._LineCtor(lineData, idx, this._seriesScope);\n el.traverse(updateIncrementalAndHover);\n this.group.add(el);\n lineData.setItemGraphicEl(idx, el);\n\n this._progressiveEls.push(el);\n }\n }\n };\n\n ;\n\n LineDraw.prototype.remove = function () {\n this.group.removeAll();\n };\n\n ;\n\n LineDraw.prototype.eachRendered = function (cb) {\n graphic.traverseElements(this._progressiveEls || this.group, cb);\n };\n\n LineDraw.prototype._doAdd = function (lineData, idx, seriesScope) {\n var itemLayout = lineData.getItemLayout(idx);\n\n if (!lineNeedsDraw(itemLayout)) {\n return;\n }\n\n var el = new this._LineCtor(lineData, idx, seriesScope);\n lineData.setItemGraphicEl(idx, el);\n this.group.add(el);\n };\n\n LineDraw.prototype._doUpdate = function (oldLineData, newLineData, oldIdx, newIdx, seriesScope) {\n var itemEl = oldLineData.getItemGraphicEl(oldIdx);\n\n if (!lineNeedsDraw(newLineData.getItemLayout(newIdx))) {\n this.group.remove(itemEl);\n return;\n }\n\n if (!itemEl) {\n itemEl = new this._LineCtor(newLineData, newIdx, seriesScope);\n } else {\n itemEl.updateData(newLineData, newIdx, seriesScope);\n }\n\n newLineData.setItemGraphicEl(newIdx, itemEl);\n this.group.add(itemEl);\n };\n\n return LineDraw;\n}();\n\nfunction isEffectObject(el) {\n return el.animators && el.animators.length > 0;\n}\n\nfunction makeSeriesScope(lineData) {\n var hostModel = lineData.hostModel;\n var emphasisModel = hostModel.getModel('emphasis');\n return {\n lineStyle: hostModel.getModel('lineStyle').getLineStyle(),\n emphasisLineStyle: emphasisModel.getModel(['lineStyle']).getLineStyle(),\n blurLineStyle: hostModel.getModel(['blur', 'lineStyle']).getLineStyle(),\n selectLineStyle: hostModel.getModel(['select', 'lineStyle']).getLineStyle(),\n emphasisDisabled: emphasisModel.get('disabled'),\n blurScope: emphasisModel.get('blurScope'),\n focus: emphasisModel.get('focus'),\n labelStatesModels: getLabelStatesModels(hostModel)\n };\n}\n\nfunction isPointNaN(pt) {\n return isNaN(pt[0]) || isNaN(pt[1]);\n}\n\nfunction lineNeedsDraw(pts) {\n return pts && !isPointNaN(pts[0]) && !isPointNaN(pts[1]);\n}\n\nexport default LineDraw;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as curveTool from 'zrender/lib/core/curve.js';\nimport * as vec2 from 'zrender/lib/core/vector.js';\nimport { getSymbolSize } from './graphHelper.js';\nvar v1 = [];\nvar v2 = [];\nvar v3 = [];\nvar quadraticAt = curveTool.quadraticAt;\nvar v2DistSquare = vec2.distSquare;\nvar mathAbs = Math.abs;\n\nfunction intersectCurveCircle(curvePoints, center, radius) {\n var p0 = curvePoints[0];\n var p1 = curvePoints[1];\n var p2 = curvePoints[2];\n var d = Infinity;\n var t;\n var radiusSquare = radius * radius;\n var interval = 0.1;\n\n for (var _t = 0.1; _t <= 0.9; _t += 0.1) {\n v1[0] = quadraticAt(p0[0], p1[0], p2[0], _t);\n v1[1] = quadraticAt(p0[1], p1[1], p2[1], _t);\n var diff = mathAbs(v2DistSquare(v1, center) - radiusSquare);\n\n if (diff < d) {\n d = diff;\n t = _t;\n }\n } // Assume the segment is monotone,Find root through Bisection method\n // At most 32 iteration\n\n\n for (var i = 0; i < 32; i++) {\n // let prev = t - interval;\n var next = t + interval; // v1[0] = quadraticAt(p0[0], p1[0], p2[0], prev);\n // v1[1] = quadraticAt(p0[1], p1[1], p2[1], prev);\n\n v2[0] = quadraticAt(p0[0], p1[0], p2[0], t);\n v2[1] = quadraticAt(p0[1], p1[1], p2[1], t);\n v3[0] = quadraticAt(p0[0], p1[0], p2[0], next);\n v3[1] = quadraticAt(p0[1], p1[1], p2[1], next);\n var diff = v2DistSquare(v2, center) - radiusSquare;\n\n if (mathAbs(diff) < 1e-2) {\n break;\n } // let prevDiff = v2DistSquare(v1, center) - radiusSquare;\n\n\n var nextDiff = v2DistSquare(v3, center) - radiusSquare;\n interval /= 2;\n\n if (diff < 0) {\n if (nextDiff >= 0) {\n t = t + interval;\n } else {\n t = t - interval;\n }\n } else {\n if (nextDiff >= 0) {\n t = t - interval;\n } else {\n t = t + interval;\n }\n }\n }\n\n return t;\n} // Adjust edge to avoid\n\n\nexport default function adjustEdge(graph, scale) {\n var tmp0 = [];\n var quadraticSubdivide = curveTool.quadraticSubdivide;\n var pts = [[], [], []];\n var pts2 = [[], []];\n var v = [];\n scale /= 2;\n graph.eachEdge(function (edge, idx) {\n var linePoints = edge.getLayout();\n var fromSymbol = edge.getVisual('fromSymbol');\n var toSymbol = edge.getVisual('toSymbol');\n\n if (!linePoints.__original) {\n linePoints.__original = [vec2.clone(linePoints[0]), vec2.clone(linePoints[1])];\n\n if (linePoints[2]) {\n linePoints.__original.push(vec2.clone(linePoints[2]));\n }\n }\n\n var originalPoints = linePoints.__original; // Quadratic curve\n\n if (linePoints[2] != null) {\n vec2.copy(pts[0], originalPoints[0]);\n vec2.copy(pts[1], originalPoints[2]);\n vec2.copy(pts[2], originalPoints[1]);\n\n if (fromSymbol && fromSymbol !== 'none') {\n var symbolSize = getSymbolSize(edge.node1);\n var t = intersectCurveCircle(pts, originalPoints[0], symbolSize * scale); // Subdivide and get the second\n\n quadraticSubdivide(pts[0][0], pts[1][0], pts[2][0], t, tmp0);\n pts[0][0] = tmp0[3];\n pts[1][0] = tmp0[4];\n quadraticSubdivide(pts[0][1], pts[1][1], pts[2][1], t, tmp0);\n pts[0][1] = tmp0[3];\n pts[1][1] = tmp0[4];\n }\n\n if (toSymbol && toSymbol !== 'none') {\n var symbolSize = getSymbolSize(edge.node2);\n var t = intersectCurveCircle(pts, originalPoints[1], symbolSize * scale); // Subdivide and get the first\n\n quadraticSubdivide(pts[0][0], pts[1][0], pts[2][0], t, tmp0);\n pts[1][0] = tmp0[1];\n pts[2][0] = tmp0[2];\n quadraticSubdivide(pts[0][1], pts[1][1], pts[2][1], t, tmp0);\n pts[1][1] = tmp0[1];\n pts[2][1] = tmp0[2];\n } // Copy back to layout\n\n\n vec2.copy(linePoints[0], pts[0]);\n vec2.copy(linePoints[1], pts[2]);\n vec2.copy(linePoints[2], pts[1]);\n } // Line\n else {\n vec2.copy(pts2[0], originalPoints[0]);\n vec2.copy(pts2[1], originalPoints[1]);\n vec2.sub(v, pts2[1], pts2[0]);\n vec2.normalize(v, v);\n\n if (fromSymbol && fromSymbol !== 'none') {\n var symbolSize = getSymbolSize(edge.node1);\n vec2.scaleAndAdd(pts2[0], pts2[0], v, symbolSize * scale);\n }\n\n if (toSymbol && toSymbol !== 'none') {\n var symbolSize = getSymbolSize(edge.node2);\n vec2.scaleAndAdd(pts2[1], pts2[1], v, -symbolSize * scale);\n }\n\n vec2.copy(linePoints[0], pts2[0]);\n vec2.copy(linePoints[1], pts2[1]);\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SymbolDraw from '../helper/SymbolDraw.js';\nimport LineDraw from '../helper/LineDraw.js';\nimport RoamController from '../../component/helper/RoamController.js';\nimport * as roamHelper from '../../component/helper/roamHelper.js';\nimport { onIrrelevantElement } from '../../component/helper/cursorHelper.js';\nimport * as graphic from '../../util/graphic.js';\nimport adjustEdge from './adjustEdge.js';\nimport { getNodeGlobalScale } from './graphHelper.js';\nimport ChartView from '../../view/Chart.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { simpleLayoutEdge } from './simpleLayoutHelper.js';\nimport { circularLayout, rotateNodeLabel } from './circularLayoutHelper.js';\n\nfunction isViewCoordSys(coordSys) {\n return coordSys.type === 'view';\n}\n\nvar GraphView =\n/** @class */\nfunction (_super) {\n __extends(GraphView, _super);\n\n function GraphView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = GraphView.type;\n return _this;\n }\n\n GraphView.prototype.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\n GraphView.prototype.render = function (seriesModel, ecModel, api) {\n var _this = this;\n\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 (isViewCoordSys(coordSys)) {\n var groupNewProp = {\n x: coordSys.x,\n y: coordSys.y,\n scaleX: coordSys.scaleX,\n scaleY: coordSys.scaleY\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(); // TODO: TYPE\n\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 var layout = seriesModel.get('layout');\n data.graph.eachNode(function (node) {\n var idx = node.dataIndex;\n var el = node.getGraphicEl();\n var itemModel = node.getModel();\n\n if (!el) {\n return;\n } // Update draggable\n\n\n el.off('drag').off('dragend');\n var draggable = itemModel.get('draggable');\n\n if (draggable) {\n el.on('drag', function (e) {\n switch (layout) {\n case 'force':\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.x, el.y]);\n break;\n\n case 'circular':\n data.setItemLayout(idx, [el.x, el.y]); // mark node fixed\n\n node.setLayout({\n fixed: true\n }, true); // recalculate circular layout\n\n circularLayout(seriesModel, 'symbolSize', node, [e.offsetX, e.offsetY]);\n\n _this.updateLayout(seriesModel);\n\n break;\n\n case 'none':\n default:\n data.setItemLayout(idx, [el.x, el.y]); // update edge\n\n simpleLayoutEdge(seriesModel.getGraph(), seriesModel);\n\n _this.updateLayout(seriesModel);\n\n break;\n }\n }).on('dragend', function () {\n if (forceLayout) {\n forceLayout.setUnfixed(idx);\n }\n });\n }\n\n el.setDraggable(draggable, !!itemModel.get('cursor'));\n var focus = itemModel.get(['emphasis', 'focus']);\n\n if (focus === 'adjacency') {\n getECData(el).focus = node.getAdjacentDataIndices();\n }\n });\n data.graph.eachEdge(function (edge) {\n var el = edge.getGraphicEl();\n var focus = edge.getModel().get(['emphasis', 'focus']);\n\n if (!el) {\n return;\n }\n\n if (focus === 'adjacency') {\n getECData(el).focus = {\n edge: [edge.dataIndex],\n node: [edge.node1.dataIndex, edge.node2.dataIndex]\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.graph.eachNode(function (node) {\n rotateNodeLabel(node, circularRotateLabel, cx, cy);\n });\n this._firstRender = false;\n };\n\n GraphView.prototype.dispose = function () {\n this._controller && this._controller.dispose();\n this._controllerHost = null;\n };\n\n GraphView.prototype._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\n GraphView.prototype._updateController = function (seriesModel, ecModel, api) {\n var _this = this;\n\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 (!isViewCoordSys(seriesModel.coordinateSystem)) {\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(); // Only update label layout on zoom\n\n\n api.updateLabelLayout();\n });\n };\n\n GraphView.prototype._updateNodeAndLinkScale = function () {\n var seriesModel = this._model;\n var data = seriesModel.getData();\n var nodeScale = getNodeGlobalScale(seriesModel);\n data.eachItemGraphicEl(function (el, idx) {\n el && el.setSymbolScale(nodeScale);\n });\n };\n\n GraphView.prototype.updateLayout = function (seriesModel) {\n adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));\n\n this._symbolDraw.updateLayout();\n\n this._lineDraw.updateLayout();\n };\n\n GraphView.prototype.remove = function (ecModel, api) {\n this._symbolDraw && this._symbolDraw.remove();\n this._lineDraw && this._lineDraw.remove();\n };\n\n GraphView.type = 'graph';\n return GraphView;\n}(ChartView);\n\nexport default GraphView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js'; // id may be function name of Object, add a prefix to avoid this problem.\n\nfunction generateNodeKey(id) {\n return '_EC_' + id;\n}\n\nvar Graph =\n/** @class */\nfunction () {\n function Graph(directed) {\n this.type = 'graph';\n this.nodes = [];\n this.edges = [];\n this._nodesMap = {};\n /**\n * @type {Object.}\n * @private\n */\n\n this._edgesMap = {};\n this._directed = directed || false;\n }\n /**\n * If is directed graph\n */\n\n\n Graph.prototype.isDirected = function () {\n return this._directed;\n };\n\n ;\n /**\n * Add a new node\n */\n\n Graph.prototype.addNode = function (id, dataIndex) {\n id = id == null ? '' + dataIndex : '' + id;\n var nodesMap = this._nodesMap;\n\n if (nodesMap[generateNodeKey(id)]) {\n if (process.env.NODE_ENV !== 'production') {\n console.error('Graph nodes have duplicate name or id');\n }\n\n return;\n }\n\n var node = new GraphNode(id, dataIndex);\n node.hostGraph = this;\n this.nodes.push(node);\n nodesMap[generateNodeKey(id)] = node;\n return node;\n };\n\n ;\n /**\n * Get node by data index\n */\n\n Graph.prototype.getNodeByIndex = function (dataIndex) {\n var rawIdx = this.data.getRawIndex(dataIndex);\n return this.nodes[rawIdx];\n };\n\n ;\n /**\n * Get node by id\n */\n\n Graph.prototype.getNodeById = function (id) {\n return this._nodesMap[generateNodeKey(id)];\n };\n\n ;\n /**\n * Add a new edge\n */\n\n Graph.prototype.addEdge = function (n1, n2, dataIndex) {\n var nodesMap = this._nodesMap;\n var edgesMap = this._edgesMap; // PNEDING\n\n if (zrUtil.isNumber(n1)) {\n n1 = this.nodes[n1];\n }\n\n if (zrUtil.isNumber(n2)) {\n n2 = this.nodes[n2];\n }\n\n if (!(n1 instanceof GraphNode)) {\n n1 = nodesMap[generateNodeKey(n1)];\n }\n\n if (!(n2 instanceof GraphNode)) {\n n2 = nodesMap[generateNodeKey(n2)];\n }\n\n if (!n1 || !n2) {\n return;\n }\n\n var key = n1.id + '-' + n2.id;\n var edge = new GraphEdge(n1, n2, dataIndex);\n edge.hostGraph = this;\n\n if (this._directed) {\n n1.outEdges.push(edge);\n n2.inEdges.push(edge);\n }\n\n n1.edges.push(edge);\n\n if (n1 !== n2) {\n n2.edges.push(edge);\n }\n\n this.edges.push(edge);\n edgesMap[key] = edge;\n return edge;\n };\n\n ;\n /**\n * Get edge by data index\n */\n\n Graph.prototype.getEdgeByIndex = function (dataIndex) {\n var rawIdx = this.edgeData.getRawIndex(dataIndex);\n return this.edges[rawIdx];\n };\n\n ;\n /**\n * Get edge by two linked nodes\n */\n\n Graph.prototype.getEdge = function (n1, n2) {\n if (n1 instanceof GraphNode) {\n n1 = n1.id;\n }\n\n if (n2 instanceof GraphNode) {\n n2 = n2.id;\n }\n\n var edgesMap = this._edgesMap;\n\n if (this._directed) {\n return edgesMap[n1 + '-' + n2];\n } else {\n return edgesMap[n1 + '-' + n2] || edgesMap[n2 + '-' + n1];\n }\n };\n\n ;\n /**\n * Iterate all nodes\n */\n\n Graph.prototype.eachNode = function (cb, context) {\n var nodes = this.nodes;\n var len = nodes.length;\n\n for (var i = 0; i < len; i++) {\n if (nodes[i].dataIndex >= 0) {\n cb.call(context, nodes[i], i);\n }\n }\n };\n\n ;\n /**\n * Iterate all edges\n */\n\n Graph.prototype.eachEdge = function (cb, context) {\n var edges = this.edges;\n var len = edges.length;\n\n for (var i = 0; i < len; i++) {\n if (edges[i].dataIndex >= 0 && edges[i].node1.dataIndex >= 0 && edges[i].node2.dataIndex >= 0) {\n cb.call(context, edges[i], i);\n }\n }\n };\n\n ;\n /**\n * Breadth first traverse\n * Return true to stop traversing\n */\n\n Graph.prototype.breadthFirstTraverse = function (cb, startNode, direction, context) {\n if (!(startNode instanceof GraphNode)) {\n startNode = this._nodesMap[generateNodeKey(startNode)];\n }\n\n if (!startNode) {\n return;\n }\n\n var edgeType = direction === 'out' ? 'outEdges' : direction === 'in' ? 'inEdges' : 'edges';\n\n for (var i = 0; i < this.nodes.length; i++) {\n this.nodes[i].__visited = false;\n }\n\n if (cb.call(context, startNode, null)) {\n return;\n }\n\n var queue = [startNode];\n\n while (queue.length) {\n var currentNode = queue.shift();\n var edges = currentNode[edgeType];\n\n for (var i = 0; i < edges.length; i++) {\n var e = edges[i];\n var otherNode = e.node1 === currentNode ? e.node2 : e.node1;\n\n if (!otherNode.__visited) {\n if (cb.call(context, otherNode, currentNode)) {\n // Stop traversing\n return;\n }\n\n queue.push(otherNode);\n otherNode.__visited = true;\n }\n }\n }\n };\n\n ; // TODO\n // depthFirstTraverse(\n // cb, startNode, direction, context\n // ) {\n // };\n // Filter update\n\n Graph.prototype.update = function () {\n var data = this.data;\n var edgeData = this.edgeData;\n var nodes = this.nodes;\n var edges = this.edges;\n\n for (var i = 0, len = nodes.length; i < len; i++) {\n nodes[i].dataIndex = -1;\n }\n\n for (var i = 0, len = data.count(); i < len; i++) {\n nodes[data.getRawIndex(i)].dataIndex = i;\n }\n\n edgeData.filterSelf(function (idx) {\n var edge = edges[edgeData.getRawIndex(idx)];\n return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0;\n }); // Update edge\n\n for (var i = 0, len = edges.length; i < len; i++) {\n edges[i].dataIndex = -1;\n }\n\n for (var i = 0, len = edgeData.count(); i < len; i++) {\n edges[edgeData.getRawIndex(i)].dataIndex = i;\n }\n };\n\n ;\n /**\n * @return {module:echarts/data/Graph}\n */\n\n Graph.prototype.clone = function () {\n var graph = new Graph(this._directed);\n var nodes = this.nodes;\n var edges = this.edges;\n\n for (var i = 0; i < nodes.length; i++) {\n graph.addNode(nodes[i].id, nodes[i].dataIndex);\n }\n\n for (var i = 0; i < edges.length; i++) {\n var e = edges[i];\n graph.addEdge(e.node1.id, e.node2.id, e.dataIndex);\n }\n\n return graph;\n };\n\n ;\n return Graph;\n}();\n\nvar GraphNode =\n/** @class */\nfunction () {\n function GraphNode(id, dataIndex) {\n this.inEdges = [];\n this.outEdges = [];\n this.edges = [];\n this.dataIndex = -1;\n this.id = id == null ? '' : id;\n this.dataIndex = dataIndex == null ? -1 : dataIndex;\n }\n /**\n * @return {number}\n */\n\n\n GraphNode.prototype.degree = function () {\n return this.edges.length;\n };\n /**\n * @return {number}\n */\n\n\n GraphNode.prototype.inDegree = function () {\n return this.inEdges.length;\n };\n /**\n * @return {number}\n */\n\n\n GraphNode.prototype.outDegree = function () {\n return this.outEdges.length;\n };\n\n GraphNode.prototype.getModel = function (path) {\n if (this.dataIndex < 0) {\n return;\n }\n\n var graph = this.hostGraph;\n var itemModel = graph.data.getItemModel(this.dataIndex);\n return itemModel.getModel(path);\n };\n\n GraphNode.prototype.getAdjacentDataIndices = function () {\n var dataIndices = {\n edge: [],\n node: []\n };\n\n for (var i = 0; i < this.edges.length; i++) {\n var adjacentEdge = this.edges[i];\n\n if (adjacentEdge.dataIndex < 0) {\n continue;\n }\n\n dataIndices.edge.push(adjacentEdge.dataIndex);\n dataIndices.node.push(adjacentEdge.node1.dataIndex, adjacentEdge.node2.dataIndex);\n }\n\n return dataIndices;\n };\n\n return GraphNode;\n}();\n\nvar GraphEdge =\n/** @class */\nfunction () {\n function GraphEdge(n1, n2, dataIndex) {\n this.dataIndex = -1;\n this.node1 = n1;\n this.node2 = n2;\n this.dataIndex = dataIndex == null ? -1 : dataIndex;\n } // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\n\n GraphEdge.prototype.getModel = function (path) {\n if (this.dataIndex < 0) {\n return;\n }\n\n var graph = this.hostGraph;\n var itemModel = graph.edgeData.getItemModel(this.dataIndex);\n return itemModel.getModel(path);\n };\n\n GraphEdge.prototype.getAdjacentDataIndices = function () {\n return {\n edge: [this.dataIndex],\n node: [this.node1.dataIndex, this.node2.dataIndex]\n };\n };\n\n return GraphEdge;\n}();\n\nfunction createGraphDataProxyMixin(hostName, dataName) {\n return {\n /**\n * @param Default 'value'. can be 'a', 'b', 'c', 'd', 'e'.\n */\n getValue: function (dimension) {\n var data = this[hostName][dataName];\n return data.getStore().get(data.getDimensionIndex(dimension || 'value'), this.dataIndex);\n },\n // TODO: TYPE stricter type.\n setVisual: function (key, value) {\n this.dataIndex >= 0 && this[hostName][dataName].setItemVisual(this.dataIndex, key, value);\n },\n getVisual: function (key) {\n return this[hostName][dataName].getItemVisual(this.dataIndex, key);\n },\n setLayout: function (layout, merge) {\n this.dataIndex >= 0 && this[hostName][dataName].setItemLayout(this.dataIndex, layout, merge);\n },\n getLayout: function () {\n return this[hostName][dataName].getItemLayout(this.dataIndex);\n },\n getGraphicEl: function () {\n return this[hostName][dataName].getItemGraphicEl(this.dataIndex);\n },\n getRawIndex: function () {\n return this[hostName][dataName].getRawIndex(this.dataIndex);\n }\n };\n}\n\n;\n;\n;\nzrUtil.mixin(GraphNode, createGraphDataProxyMixin('hostGraph', 'data'));\nzrUtil.mixin(GraphEdge, createGraphDataProxyMixin('hostGraph', 'edgeData'));\nexport default Graph;\nexport { GraphNode, GraphEdge };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport SeriesData from '../../data/SeriesData.js';\nimport Graph from '../../data/Graph.js';\nimport linkSeriesData from '../../data/helper/linkSeriesData.js';\nimport prepareSeriesDataSchema from '../../data/helper/createDimensions.js';\nimport CoordinateSystem from '../../core/CoordinateSystem.js';\nimport createSeriesData from './createSeriesData.js';\nimport { convertOptionIdName } from '../../util/model.js';\nexport default function createGraphFromNodeEdge(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(convertOptionIdName(link.id, null), 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 = createSeriesData(nodes, seriesModel);\n } else {\n var coordSysCtor = CoordinateSystem.get(coordSys);\n var coordDimensions = coordSysCtor ? 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 dimensions = prepareSeriesDataSchema(nodes, {\n coordDimensions: coordDimensions,\n encodeDefine: seriesModel.getEncode()\n }).dimensions;\n nodeData = new SeriesData(dimensions, seriesModel);\n nodeData.initData(nodes);\n }\n\n var edgeData = new SeriesData(['value'], seriesModel);\n edgeData.initData(validEdges, linkNameList);\n beforeLink && beforeLink(nodeData, edgeData);\n linkSeriesData({\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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SeriesData from '../../data/SeriesData.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { defaultEmphasis } from '../../util/model.js';\nimport Model from '../../model/Model.js';\nimport createGraphFromNodeEdge from '../helper/createGraphFromNodeEdge.js';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider.js';\nimport SeriesModel from '../../model/Series.js';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup.js';\nimport { defaultSeriesFormatTooltip } from '../../component/tooltip/seriesFormatTooltip.js';\nimport { initCurvenessList, createEdgeMapForCurveness } from '../helper/multipleGraphEdgeHelper.js';\n\nvar GraphSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(GraphSeriesModel, _super);\n\n function GraphSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = GraphSeriesModel.type;\n _this.hasSymbolVisual = true;\n return _this;\n }\n\n GraphSeriesModel.prototype.init = function (option) {\n _super.prototype.init.apply(this, arguments);\n\n var self = this;\n\n function getCategoriesData() {\n return self._categoriesData;\n } // Provide data for legend select\n\n\n this.legendVisualProvider = new LegendVisualProvider(getCategoriesData, getCategoriesData);\n this.fillDataTextStyle(option.edges || option.links);\n\n this._updateCategoriesData();\n };\n\n GraphSeriesModel.prototype.mergeOption = function (option) {\n _super.prototype.mergeOption.apply(this, arguments);\n\n this.fillDataTextStyle(option.edges || option.links);\n\n this._updateCategoriesData();\n };\n\n GraphSeriesModel.prototype.mergeDefaultAndTheme = function (option) {\n _super.prototype.mergeDefaultAndTheme.apply(this, arguments);\n\n defaultEmphasis(option, 'edgeLabel', ['show']);\n };\n\n GraphSeriesModel.prototype.getInitialData = function (option, ecModel) {\n var edges = option.edges || option.links || [];\n var nodes = option.data || option.nodes || [];\n var self = this;\n\n if (nodes && edges) {\n // auto curveness\n initCurvenessList(this);\n var graph = createGraphFromNodeEdge(nodes, edges, this, true, beforeLink);\n zrUtil.each(graph.edges, function (edge) {\n createEdgeMapForCurveness(edge.node1, edge.node2, this, edge.dataIndex);\n }, this);\n return graph.data;\n }\n\n function beforeLink(nodeData, edgeData) {\n // Overwrite nodeData.getItemModel to\n nodeData.wrapMethod('getItemModel', function (model) {\n var categoriesModels = self._categoriesModels;\n var categoryIdx = model.getShallow('category');\n var categoryModel = categoriesModels[categoryIdx];\n\n if (categoryModel) {\n categoryModel.parentModel = model.parentModel;\n model.parentModel = categoryModel;\n }\n\n return model;\n }); // TODO Inherit resolveParentPath by default in Model#getModel?\n\n var oldGetModel = Model.prototype.getModel;\n\n function newGetModel(path, parentModel) {\n var model = oldGetModel.call(this, path, parentModel);\n model.resolveParentPath = resolveParentPath;\n return model;\n }\n\n edgeData.wrapMethod('getItemModel', function (model) {\n model.resolveParentPath = resolveParentPath;\n model.getModel = newGetModel;\n return model;\n });\n\n function resolveParentPath(pathArr) {\n if (pathArr && (pathArr[0] === 'label' || pathArr[1] === 'label')) {\n var newPathArr = pathArr.slice();\n\n if (pathArr[0] === 'label') {\n newPathArr[0] = 'edgeLabel';\n } else if (pathArr[1] === 'label') {\n newPathArr[1] = 'edgeLabel';\n }\n\n return newPathArr;\n }\n\n return pathArr;\n }\n }\n };\n\n GraphSeriesModel.prototype.getGraph = function () {\n return this.getData().graph;\n };\n\n GraphSeriesModel.prototype.getEdgeData = function () {\n return this.getGraph().edgeData;\n };\n\n GraphSeriesModel.prototype.getCategoriesData = function () {\n return this._categoriesData;\n };\n\n GraphSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n if (dataType === 'edge') {\n var nodeData = this.getData();\n var params = this.getDataParams(dataIndex, dataType);\n var edge = nodeData.graph.getEdgeByIndex(dataIndex);\n var sourceName = nodeData.getName(edge.node1.dataIndex);\n var targetName = nodeData.getName(edge.node2.dataIndex);\n var nameArr = [];\n sourceName != null && nameArr.push(sourceName);\n targetName != null && nameArr.push(targetName);\n return createTooltipMarkup('nameValue', {\n name: nameArr.join(' > '),\n value: params.value,\n noValue: params.value == null\n });\n } // dataType === 'node' or empty\n\n\n var nodeMarkup = defaultSeriesFormatTooltip({\n series: this,\n dataIndex: dataIndex,\n multipleSeries: multipleSeries\n });\n return nodeMarkup;\n };\n\n GraphSeriesModel.prototype._updateCategoriesData = function () {\n var categories = zrUtil.map(this.option.categories || [], function (category) {\n // Data must has value\n return category.value != null ? category : zrUtil.extend({\n value: 0\n }, category);\n });\n var categoriesData = new SeriesData(['value'], this);\n categoriesData.initData(categories);\n this._categoriesData = categoriesData;\n this._categoriesModels = categoriesData.mapArray(function (idx) {\n return categoriesData.getItemModel(idx);\n });\n };\n\n GraphSeriesModel.prototype.setZoom = function (zoom) {\n this.option.zoom = zoom;\n };\n\n GraphSeriesModel.prototype.setCenter = function (center) {\n this.option.center = center;\n };\n\n GraphSeriesModel.prototype.isAnimationEnabled = function () {\n return _super.prototype.isAnimationEnabled.call(this) // Not enable animation when do force layout\n && !(this.get('layout') === 'force' && this.get(['force', 'layoutAnimation']));\n };\n\n GraphSeriesModel.type = 'series.graph';\n GraphSeriesModel.dependencies = ['grid', 'polar', 'geo', 'singleAxis', 'calendar'];\n GraphSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n coordinateSystem: 'view',\n // Default option for all coordinate systems\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n // polarIndex: 0,\n // geoIndex: 0,\n legendHoverLink: true,\n layout: null,\n // Configuration of circular layout\n circular: {\n rotateLabel: false\n },\n // Configuration of force directed layout\n force: {\n initLayout: null,\n // Node repulsion. Can be an array to represent range.\n repulsion: [0, 50],\n gravity: 0.1,\n // Initial friction\n friction: 0.6,\n // Edge length. Can be an array to represent range.\n edgeLength: 30,\n layoutAnimation: true\n },\n left: 'center',\n top: 'center',\n // right: null,\n // bottom: null,\n // width: '80%',\n // height: '80%',\n symbol: 'circle',\n symbolSize: 10,\n edgeSymbol: ['none', 'none'],\n edgeSymbolSize: 10,\n edgeLabel: {\n position: 'middle',\n distance: 5\n },\n draggable: false,\n roam: false,\n // Default on center of graph\n center: null,\n zoom: 1,\n // Symbol size scale ratio in roam\n nodeScaleRatio: 0.6,\n // cursor: null,\n // categories: [],\n // data: []\n // Or\n // nodes: []\n //\n // links: []\n // Or\n // edges: []\n label: {\n show: false,\n formatter: '{b}'\n },\n itemStyle: {},\n lineStyle: {\n color: '#aaa',\n width: 1,\n opacity: 0.5\n },\n emphasis: {\n scale: true,\n label: {\n show: true\n }\n },\n select: {\n itemStyle: {\n borderColor: '#212121'\n }\n }\n };\n return GraphSeriesModel;\n}(SeriesModel);\n\nexport default GraphSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport categoryFilter from './categoryFilter.js';\nimport categoryVisual from './categoryVisual.js';\nimport edgeVisual from './edgeVisual.js';\nimport simpleLayout from './simpleLayout.js';\nimport circularLayout from './circularLayout.js';\nimport forceLayout from './forceLayout.js';\nimport createView from './createView.js';\nimport View from '../../coord/View.js';\nimport GraphView from './GraphView.js';\nimport GraphSeriesModel from './GraphSeries.js';\nimport { updateCenterAndZoom } from '../../action/roamHelper.js';\nimport { noop } from 'zrender/lib/core/util.js';\nvar actionInfo = {\n type: 'graphRoam',\n event: 'graphRoam',\n update: 'none'\n};\nexport function install(registers) {\n registers.registerChartView(GraphView);\n registers.registerSeriesModel(GraphSeriesModel);\n registers.registerProcessor(categoryFilter);\n registers.registerVisual(categoryVisual);\n registers.registerVisual(edgeVisual);\n registers.registerLayout(simpleLayout);\n registers.registerLayout(registers.PRIORITY.VISUAL.POST_CHART_LAYOUT, circularLayout);\n registers.registerLayout(forceLayout);\n registers.registerCoordinateSystem('graphView', {\n dimensions: View.dimensions,\n create: createView\n }); // Register legacy focus actions\n\n registers.registerAction({\n type: 'focusNodeAdjacency',\n event: 'focusNodeAdjacency',\n update: 'series:focusNodeAdjacency'\n }, noop);\n registers.registerAction({\n type: 'unfocusNodeAdjacency',\n event: 'unfocusNodeAdjacency',\n update: 'series:unfocusNodeAdjacency'\n }, noop); // Register roam action.\n\n registers.registerAction(actionInfo, function (payload, ecModel, api) {\n ecModel.eachComponent({\n mainType: 'series',\n query: payload\n }, function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n var res = updateCenterAndZoom(coordSys, payload, undefined, api);\n seriesModel.setCenter && seriesModel.setCenter(res.center);\n seriesModel.setZoom && seriesModel.setZoom(res.zoom);\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Path from 'zrender/lib/graphic/Path.js';\n\nvar PointerShape =\n/** @class */\nfunction () {\n function PointerShape() {\n this.angle = 0;\n this.width = 10;\n this.r = 10;\n this.x = 0;\n this.y = 0;\n }\n\n return PointerShape;\n}();\n\nvar PointerPath =\n/** @class */\nfunction (_super) {\n __extends(PointerPath, _super);\n\n function PointerPath(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this.type = 'pointer';\n return _this;\n }\n\n PointerPath.prototype.getDefaultShape = function () {\n return new PointerShape();\n };\n\n PointerPath.prototype.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 };\n\n return PointerPath;\n}(Path);\n\nexport default PointerPath;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport PointerPath from './PointerPath.js';\nimport * as graphic from '../../util/graphic.js';\nimport { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';\nimport { createTextStyle, setLabelValueAnimation, animateLabelValue } from '../../label/labelStyle.js';\nimport ChartView from '../../view/Chart.js';\nimport { parsePercent, round, linearMap } from '../../util/number.js';\nimport Sausage from '../../util/shape/sausage.js';\nimport { createSymbol } from '../../util/symbol.js';\nimport ZRImage from 'zrender/lib/graphic/Image.js';\nimport { extend, isFunction, isString, isNumber, each } from 'zrender/lib/core/util.js';\nimport { setCommonECData } from '../../util/innerStore.js';\nimport { normalizeArcAngles } from 'zrender/lib/core/PathProxy.js';\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(value, labelFormatter) {\n var label = value == null ? '' : value + '';\n\n if (labelFormatter) {\n if (isString(labelFormatter)) {\n label = labelFormatter.replace('{value}', label);\n } else if (isFunction(labelFormatter)) {\n label = labelFormatter(value);\n }\n }\n\n return label;\n}\n\nvar GaugeView =\n/** @class */\nfunction (_super) {\n __extends(GaugeView, _super);\n\n function GaugeView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = GaugeView.type;\n return _this;\n }\n\n GaugeView.prototype.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 this._data = seriesModel.getData();\n };\n\n GaugeView.prototype.dispose = function () {};\n\n GaugeView.prototype._renderMain = function (seriesModel, ecModel, api, colorList, posInfo) {\n var group = this.group;\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 axisLineModel = seriesModel.getModel('axisLine');\n var roundCap = axisLineModel.get('roundCap');\n var MainPath = roundCap ? Sausage : graphic.Sector;\n var showAxis = axisLineModel.get('show');\n var lineStyleModel = axisLineModel.getModel('lineStyle');\n var axisLineWidth = lineStyleModel.get('width');\n var angles = [startAngle, endAngle];\n normalizeArcAngles(angles, !clockwise);\n startAngle = angles[0];\n endAngle = angles[1];\n var angleRangeSpan = endAngle - startAngle;\n var prevEndAngle = startAngle;\n var sectors = [];\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 endAngle = startAngle + angleRangeSpan * percent;\n var sector = new MainPath({\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', 'width']));\n sectors.push(sector);\n prevEndAngle = endAngle;\n }\n\n sectors.reverse();\n each(sectors, function (sector) {\n return group.add(sector);\n });\n\n var getColor = function (percent) {\n // Less than 0\n if (percent <= 0) {\n return colorList[0][1];\n }\n\n var i;\n\n for (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 this._renderTicks(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth);\n\n this._renderTitleAndDetail(seriesModel, ecModel, api, getColor, posInfo);\n\n this._renderAnchor(seriesModel, posInfo);\n\n this._renderPointer(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth);\n };\n\n GaugeView.prototype._renderTicks = function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth) {\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 var splitLineDistance = splitLineModel.get('distance');\n var unitX;\n var unitY;\n\n for (var i = 0; i <= splitNumber; i++) {\n unitX = Math.cos(angle);\n unitY = Math.sin(angle); // Split line\n\n if (splitLineModel.get('show')) {\n var distance = splitLineDistance ? splitLineDistance + axisLineWidth : axisLineWidth;\n var splitLine = new graphic.Line({\n shape: {\n x1: unitX * (r - distance) + cx,\n y1: unitY * (r - distance) + cy,\n x2: unitX * (r - splitLineLen - distance) + cx,\n y2: unitY * (r - splitLineLen - distance) + 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 distance = labelModel.get('distance') + splitLineDistance;\n var label = formatLabel(round(i / splitNumber * (maxVal - minVal) + minVal), labelModel.get('formatter'));\n var autoColor = getColor(i / splitNumber);\n var textStyleX = unitX * (r - splitLineLen - distance) + cx;\n var textStyleY = unitY * (r - splitLineLen - distance) + cy;\n var rotateType = labelModel.get('rotate');\n var rotate = 0;\n\n if (rotateType === 'radial') {\n rotate = -angle + 2 * Math.PI;\n\n if (rotate > Math.PI / 2) {\n rotate += Math.PI;\n }\n } else if (rotateType === 'tangential') {\n rotate = -angle - Math.PI / 2;\n } else if (isNumber(rotateType)) {\n rotate = rotateType * Math.PI / 180;\n }\n\n if (rotate === 0) {\n group.add(new graphic.Text({\n style: createTextStyle(labelModel, {\n text: label,\n x: textStyleX,\n y: textStyleY,\n verticalAlign: unitY < -0.8 ? 'top' : unitY > 0.8 ? 'bottom' : 'middle',\n align: unitX < -0.4 ? 'left' : unitX > 0.4 ? 'right' : 'center'\n }, {\n inheritColor: autoColor\n }),\n silent: true\n }));\n } else {\n group.add(new graphic.Text({\n style: createTextStyle(labelModel, {\n text: label,\n x: textStyleX,\n y: textStyleY,\n verticalAlign: 'middle',\n align: 'center'\n }, {\n inheritColor: autoColor\n }),\n silent: true,\n originX: textStyleX,\n originY: textStyleY,\n rotation: rotate\n }));\n }\n } // Axis tick\n\n\n if (tickModel.get('show') && i !== splitNumber) {\n var distance = tickModel.get('distance');\n distance = distance ? distance + axisLineWidth : axisLineWidth;\n\n for (var j = 0; j <= subSplitNumber; j++) {\n unitX = Math.cos(angle);\n unitY = Math.sin(angle);\n var tickLine = new graphic.Line({\n shape: {\n x1: unitX * (r - distance) + cx,\n y1: unitY * (r - distance) + cy,\n x2: unitX * (r - tickLen - distance) + cx,\n y2: unitY * (r - tickLen - distance) + 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\n GaugeView.prototype._renderPointer = function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth) {\n var group = this.group;\n var oldData = this._data;\n var oldProgressData = this._progressEls;\n var progressList = [];\n var showPointer = seriesModel.get(['pointer', 'show']);\n var progressModel = seriesModel.getModel('progress');\n var showProgress = progressModel.get('show');\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n var valueExtent = [minVal, maxVal];\n var angleExtent = [startAngle, endAngle];\n\n function createPointer(idx, angle) {\n var itemModel = data.getItemModel(idx);\n var pointerModel = itemModel.getModel('pointer');\n var pointerWidth = parsePercent(pointerModel.get('width'), posInfo.r);\n var pointerLength = parsePercent(pointerModel.get('length'), posInfo.r);\n var pointerStr = seriesModel.get(['pointer', 'icon']);\n var pointerOffset = pointerModel.get('offsetCenter');\n var pointerOffsetX = parsePercent(pointerOffset[0], posInfo.r);\n var pointerOffsetY = parsePercent(pointerOffset[1], posInfo.r);\n var pointerKeepAspect = pointerModel.get('keepAspect');\n var pointer; // not exist icon type will be set 'rect'\n\n if (pointerStr) {\n pointer = createSymbol(pointerStr, pointerOffsetX - pointerWidth / 2, pointerOffsetY - pointerLength, pointerWidth, pointerLength, null, pointerKeepAspect);\n } else {\n pointer = new PointerPath({\n shape: {\n angle: -Math.PI / 2,\n width: pointerWidth,\n r: pointerLength,\n x: pointerOffsetX,\n y: pointerOffsetY\n }\n });\n }\n\n pointer.rotation = -(angle + Math.PI / 2);\n pointer.x = posInfo.cx;\n pointer.y = posInfo.cy;\n return pointer;\n }\n\n function createProgress(idx, endAngle) {\n var roundCap = progressModel.get('roundCap');\n var ProgressPath = roundCap ? Sausage : graphic.Sector;\n var isOverlap = progressModel.get('overlap');\n var progressWidth = isOverlap ? progressModel.get('width') : axisLineWidth / data.count();\n var r0 = isOverlap ? posInfo.r - progressWidth : posInfo.r - (idx + 1) * progressWidth;\n var r = isOverlap ? posInfo.r : posInfo.r - idx * progressWidth;\n var progress = new ProgressPath({\n shape: {\n startAngle: startAngle,\n endAngle: endAngle,\n cx: posInfo.cx,\n cy: posInfo.cy,\n clockwise: clockwise,\n r0: r0,\n r: r\n }\n });\n isOverlap && (progress.z2 = maxVal - data.get(valueDim, idx) % maxVal);\n return progress;\n }\n\n if (showProgress || showPointer) {\n data.diff(oldData).add(function (idx) {\n var val = data.get(valueDim, idx);\n\n if (showPointer) {\n var pointer = createPointer(idx, startAngle); // TODO hide pointer on NaN value?\n\n graphic.initProps(pointer, {\n rotation: -((isNaN(+val) ? angleExtent[0] : linearMap(val, valueExtent, angleExtent, true)) + Math.PI / 2)\n }, seriesModel);\n group.add(pointer);\n data.setItemGraphicEl(idx, pointer);\n }\n\n if (showProgress) {\n var progress = createProgress(idx, startAngle);\n var isClip = progressModel.get('clip');\n graphic.initProps(progress, {\n shape: {\n endAngle: linearMap(val, valueExtent, angleExtent, isClip)\n }\n }, seriesModel);\n group.add(progress); // Add data index and series index for indexing the data by element\n // Useful in tooltip\n\n setCommonECData(seriesModel.seriesIndex, data.dataType, idx, progress);\n progressList[idx] = progress;\n }\n }).update(function (newIdx, oldIdx) {\n var val = data.get(valueDim, newIdx);\n\n if (showPointer) {\n var previousPointer = oldData.getItemGraphicEl(oldIdx);\n var previousRotate = previousPointer ? previousPointer.rotation : startAngle;\n var pointer = createPointer(newIdx, previousRotate);\n pointer.rotation = previousRotate;\n graphic.updateProps(pointer, {\n rotation: -((isNaN(+val) ? angleExtent[0] : linearMap(val, valueExtent, angleExtent, true)) + Math.PI / 2)\n }, seriesModel);\n group.add(pointer);\n data.setItemGraphicEl(newIdx, pointer);\n }\n\n if (showProgress) {\n var previousProgress = oldProgressData[oldIdx];\n var previousEndAngle = previousProgress ? previousProgress.shape.endAngle : startAngle;\n var progress = createProgress(newIdx, previousEndAngle);\n var isClip = progressModel.get('clip');\n graphic.updateProps(progress, {\n shape: {\n endAngle: linearMap(val, valueExtent, angleExtent, isClip)\n }\n }, seriesModel);\n group.add(progress); // Add data index and series index for indexing the data by element\n // Useful in tooltip\n\n setCommonECData(seriesModel.seriesIndex, data.dataType, newIdx, progress);\n progressList[newIdx] = progress;\n }\n }).execute();\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n var emphasisModel = itemModel.getModel('emphasis');\n var focus = emphasisModel.get('focus');\n var blurScope = emphasisModel.get('blurScope');\n var emphasisDisabled = emphasisModel.get('disabled');\n\n if (showPointer) {\n var pointer = data.getItemGraphicEl(idx);\n var symbolStyle = data.getItemVisual(idx, 'style');\n var visualColor = symbolStyle.fill;\n\n if (pointer instanceof ZRImage) {\n var pathStyle = pointer.style;\n pointer.useStyle(extend({\n image: pathStyle.image,\n x: pathStyle.x,\n y: pathStyle.y,\n width: pathStyle.width,\n height: pathStyle.height\n }, symbolStyle));\n } else {\n pointer.useStyle(symbolStyle);\n pointer.type !== 'pointer' && pointer.setColor(visualColor);\n }\n\n pointer.setStyle(itemModel.getModel(['pointer', '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 pointer.z2EmphasisLift = 0;\n setStatesStylesFromModel(pointer, itemModel);\n toggleHoverEmphasis(pointer, focus, blurScope, emphasisDisabled);\n }\n\n if (showProgress) {\n var progress = progressList[idx];\n progress.useStyle(data.getItemVisual(idx, 'style'));\n progress.setStyle(itemModel.getModel(['progress', 'itemStyle']).getItemStyle());\n progress.z2EmphasisLift = 0;\n setStatesStylesFromModel(progress, itemModel);\n toggleHoverEmphasis(progress, focus, blurScope, emphasisDisabled);\n }\n });\n this._progressEls = progressList;\n }\n };\n\n GaugeView.prototype._renderAnchor = function (seriesModel, posInfo) {\n var anchorModel = seriesModel.getModel('anchor');\n var showAnchor = anchorModel.get('show');\n\n if (showAnchor) {\n var anchorSize = anchorModel.get('size');\n var anchorType = anchorModel.get('icon');\n var offsetCenter = anchorModel.get('offsetCenter');\n var anchorKeepAspect = anchorModel.get('keepAspect');\n var anchor = createSymbol(anchorType, posInfo.cx - anchorSize / 2 + parsePercent(offsetCenter[0], posInfo.r), posInfo.cy - anchorSize / 2 + parsePercent(offsetCenter[1], posInfo.r), anchorSize, anchorSize, null, anchorKeepAspect);\n anchor.z2 = anchorModel.get('showAbove') ? 1 : 0;\n anchor.setStyle(anchorModel.getModel('itemStyle').getItemStyle());\n this.group.add(anchor);\n }\n };\n\n GaugeView.prototype._renderTitleAndDetail = function (seriesModel, ecModel, api, getColor, posInfo) {\n var _this = this;\n\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n var contentGroup = new graphic.Group();\n var newTitleEls = [];\n var newDetailEls = [];\n var hasAnimation = seriesModel.isAnimationEnabled();\n var showPointerAbove = seriesModel.get(['pointer', 'showAbove']);\n data.diff(this._data).add(function (idx) {\n newTitleEls[idx] = new graphic.Text({\n silent: true\n });\n newDetailEls[idx] = new graphic.Text({\n silent: true\n });\n }).update(function (idx, oldIdx) {\n newTitleEls[idx] = _this._titleEls[oldIdx];\n newDetailEls[idx] = _this._detailEls[oldIdx];\n }).execute();\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n var value = data.get(valueDim, idx);\n var itemGroup = new graphic.Group();\n var autoColor = getColor(linearMap(value, [minVal, maxVal], [0, 1], true));\n var itemTitleModel = itemModel.getModel('title');\n\n if (itemTitleModel.get('show')) {\n var titleOffsetCenter = itemTitleModel.get('offsetCenter');\n var titleX = posInfo.cx + parsePercent(titleOffsetCenter[0], posInfo.r);\n var titleY = posInfo.cy + parsePercent(titleOffsetCenter[1], posInfo.r);\n var labelEl = newTitleEls[idx];\n labelEl.attr({\n z2: showPointerAbove ? 0 : 2,\n style: createTextStyle(itemTitleModel, {\n x: titleX,\n y: titleY,\n text: data.getName(idx),\n align: 'center',\n verticalAlign: 'middle'\n }, {\n inheritColor: autoColor\n })\n });\n itemGroup.add(labelEl);\n }\n\n var itemDetailModel = itemModel.getModel('detail');\n\n if (itemDetailModel.get('show')) {\n var detailOffsetCenter = itemDetailModel.get('offsetCenter');\n var detailX = posInfo.cx + parsePercent(detailOffsetCenter[0], posInfo.r);\n var detailY = posInfo.cy + parsePercent(detailOffsetCenter[1], posInfo.r);\n var width = parsePercent(itemDetailModel.get('width'), posInfo.r);\n var height = parsePercent(itemDetailModel.get('height'), posInfo.r);\n var detailColor = seriesModel.get(['progress', 'show']) ? data.getItemVisual(idx, 'style').fill : autoColor;\n var labelEl = newDetailEls[idx];\n var formatter_1 = itemDetailModel.get('formatter');\n labelEl.attr({\n z2: showPointerAbove ? 0 : 2,\n style: createTextStyle(itemDetailModel, {\n x: detailX,\n y: detailY,\n text: formatLabel(value, formatter_1),\n width: isNaN(width) ? null : width,\n height: isNaN(height) ? null : height,\n align: 'center',\n verticalAlign: 'middle'\n }, {\n inheritColor: detailColor\n })\n });\n setLabelValueAnimation(labelEl, {\n normal: itemDetailModel\n }, value, function (value) {\n return formatLabel(value, formatter_1);\n });\n hasAnimation && animateLabelValue(labelEl, idx, data, seriesModel, {\n getFormattedLabel: function (labelDataIndex, status, dataType, labelDimIndex, fmt, extendParams) {\n return formatLabel(extendParams ? extendParams.interpolatedValue : value, formatter_1);\n }\n });\n itemGroup.add(labelEl);\n }\n\n contentGroup.add(itemGroup);\n });\n this.group.add(contentGroup);\n this._titleEls = newTitleEls;\n this._detailEls = newDetailEls;\n };\n\n GaugeView.type = 'gauge';\n return GaugeView;\n}(ChartView);\n\nexport default GaugeView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply.js';\nimport SeriesModel from '../../model/Series.js';\n\nvar GaugeSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(GaugeSeriesModel, _super);\n\n function GaugeSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = GaugeSeriesModel.type;\n _this.visualStyleAccessPath = 'itemStyle';\n return _this;\n }\n\n GaugeSeriesModel.prototype.getInitialData = function (option, ecModel) {\n return createSeriesDataSimply(this, ['value']);\n };\n\n GaugeSeriesModel.type = 'series.gauge';\n GaugeSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n colorBy: 'data',\n // 默认全局居中\n center: ['50%', '50%'],\n legendHoverLink: true,\n radius: '75%',\n startAngle: 225,\n endAngle: -45,\n clockwise: true,\n // 最小值\n min: 0,\n // 最大值\n max: 100,\n // 分割段数,默认为10\n splitNumber: 10,\n // 坐标轴线\n axisLine: {\n // 默认显示,属性show控制显示与否\n show: true,\n roundCap: false,\n lineStyle: {\n color: [[1, '#E6EBF8']],\n width: 10\n }\n },\n // 坐标轴线\n progress: {\n // 默认显示,属性show控制显示与否\n show: false,\n overlap: true,\n width: 10,\n roundCap: false,\n clip: true\n },\n // 分隔线\n splitLine: {\n // 默认显示,属性show控制显示与否\n show: true,\n // 属性length控制线长\n length: 10,\n distance: 10,\n // 属性lineStyle(详见lineStyle)控制线条样式\n lineStyle: {\n color: '#63677A',\n width: 3,\n type: 'solid'\n }\n },\n // 坐标轴小标记\n axisTick: {\n // 属性show控制显示与否,默认不显示\n show: true,\n // 每份split细分多少段\n splitNumber: 5,\n // 属性length控制线长\n length: 6,\n distance: 10,\n // 属性lineStyle控制线条样式\n lineStyle: {\n color: '#63677A',\n width: 1,\n type: 'solid'\n }\n },\n axisLabel: {\n show: true,\n distance: 15,\n // formatter: null,\n color: '#464646',\n fontSize: 12,\n rotate: 0\n },\n pointer: {\n icon: null,\n offsetCenter: [0, 0],\n show: true,\n showAbove: true,\n length: '60%',\n width: 6,\n keepAspect: false\n },\n anchor: {\n show: false,\n showAbove: false,\n size: 6,\n icon: 'circle',\n offsetCenter: [0, 0],\n keepAspect: false,\n itemStyle: {\n color: '#fff',\n borderWidth: 0,\n borderColor: '#5470c6'\n }\n },\n title: {\n show: true,\n // x, y,单位px\n offsetCenter: [0, '20%'],\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n color: '#464646',\n fontSize: 16,\n valueAnimation: false\n },\n detail: {\n show: true,\n backgroundColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n borderColor: '#ccc',\n width: 100,\n height: null,\n padding: [5, 10],\n // x, y,单位px\n offsetCenter: [0, '40%'],\n // formatter: null,\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n color: '#464646',\n fontSize: 30,\n fontWeight: 'bold',\n lineHeight: 30,\n valueAnimation: false\n }\n };\n return GaugeSeriesModel;\n}(SeriesModel);\n\nexport default GaugeSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport GaugeView from './GaugeView.js';\nimport GaugeSeriesModel from './GaugeSeries.js';\nexport function install(registers) {\n registers.registerChartView(GaugeView);\n registers.registerSeriesModel(GaugeSeriesModel);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as graphic from '../../util/graphic.js';\nimport { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';\nimport ChartView from '../../view/Chart.js';\nimport { setLabelLineStyle, getLabelLineStatesModels } from '../../label/labelGuideHelper.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\nvar opacityAccessPath = ['itemStyle', 'opacity'];\n/**\n * Piece of pie including Sector, Label, LabelLine\n */\n\nvar FunnelPiece =\n/** @class */\nfunction (_super) {\n __extends(FunnelPiece, _super);\n\n function FunnelPiece(data, idx) {\n var _this = _super.call(this) || this;\n\n var polygon = _this;\n var labelLine = new graphic.Polyline();\n var text = new graphic.Text();\n polygon.setTextContent(text);\n\n _this.setTextGuideLine(labelLine);\n\n _this.updateData(data, idx, true);\n\n return _this;\n }\n\n FunnelPiece.prototype.updateData = function (data, idx, firstCreate) {\n var polygon = this;\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var layout = data.getItemLayout(idx);\n var emphasisModel = itemModel.getModel('emphasis');\n var opacity = itemModel.get(opacityAccessPath);\n opacity = opacity == null ? 1 : opacity;\n\n if (!firstCreate) {\n saveOldStyle(polygon);\n } // Update common style\n\n\n polygon.useStyle(data.getItemVisual(idx, 'style'));\n polygon.style.lineJoin = 'round';\n\n if (firstCreate) {\n polygon.setShape({\n points: layout.points\n });\n polygon.style.opacity = 0;\n graphic.initProps(polygon, {\n style: {\n opacity: opacity\n }\n }, seriesModel, idx);\n } else {\n graphic.updateProps(polygon, {\n style: {\n opacity: opacity\n },\n shape: {\n points: layout.points\n }\n }, seriesModel, idx);\n }\n\n setStatesStylesFromModel(polygon, itemModel);\n\n this._updateLabel(data, idx);\n\n toggleHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n };\n\n FunnelPiece.prototype._updateLabel = function (data, idx) {\n var polygon = this;\n var labelLine = this.getTextGuideLine();\n var labelText = polygon.getTextContent();\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var layout = data.getItemLayout(idx);\n var labelLayout = layout.label;\n var style = data.getItemVisual(idx, 'style');\n var visualColor = style.fill;\n setLabelStyle( // position will not be used in setLabelStyle\n labelText, getLabelStatesModels(itemModel), {\n labelFetcher: data.hostModel,\n labelDataIndex: idx,\n defaultOpacity: style.opacity,\n defaultText: data.getName(idx)\n }, {\n normal: {\n align: labelLayout.textAlign,\n verticalAlign: labelLayout.verticalAlign\n }\n });\n polygon.setTextConfig({\n local: true,\n inside: !!labelLayout.inside,\n insideStroke: visualColor,\n // insideFill: 'auto',\n outsideFill: visualColor\n });\n var linePoints = labelLayout.linePoints;\n labelLine.setShape({\n points: linePoints\n });\n polygon.textGuideLineConfig = {\n anchor: linePoints ? new graphic.Point(linePoints[0][0], linePoints[0][1]) : null\n }; // Make sure update style on labelText after setLabelStyle.\n // Because setLabelStyle will replace a new style on it.\n\n graphic.updateProps(labelText, {\n style: {\n x: labelLayout.x,\n y: labelLayout.y\n }\n }, seriesModel, idx);\n labelText.attr({\n rotation: labelLayout.rotation,\n originX: labelLayout.x,\n originY: labelLayout.y,\n z2: 10\n });\n setLabelLineStyle(polygon, getLabelLineStatesModels(itemModel), {\n // Default use item visual color\n stroke: visualColor\n });\n };\n\n return FunnelPiece;\n}(graphic.Polygon);\n\nvar FunnelView =\n/** @class */\nfunction (_super) {\n __extends(FunnelView, _super);\n\n function FunnelView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = FunnelView.type;\n _this.ignoreLabelLineUpdate = true;\n return _this;\n }\n\n FunnelView.prototype.render = function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var oldData = this._data;\n var group = this.group;\n data.diff(oldData).add(function (idx) {\n var funnelPiece = new FunnelPiece(data, idx);\n data.setItemGraphicEl(idx, funnelPiece);\n group.add(funnelPiece);\n }).update(function (newIdx, oldIdx) {\n var piece = oldData.getItemGraphicEl(oldIdx);\n piece.updateData(data, newIdx);\n group.add(piece);\n data.setItemGraphicEl(newIdx, piece);\n }).remove(function (idx) {\n var piece = oldData.getItemGraphicEl(idx);\n graphic.removeElementWithFadeOut(piece, seriesModel, idx);\n }).execute();\n this._data = data;\n };\n\n FunnelView.prototype.remove = function () {\n this.group.removeAll();\n this._data = null;\n };\n\n FunnelView.prototype.dispose = function () {};\n\n FunnelView.type = 'funnel';\n return FunnelView;\n}(ChartView);\n\nexport default FunnelView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply.js';\nimport { defaultEmphasis } from '../../util/model.js';\nimport { makeSeriesEncodeForNameBased } from '../../data/helper/sourceHelper.js';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider.js';\nimport SeriesModel from '../../model/Series.js';\n\nvar FunnelSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(FunnelSeriesModel, _super);\n\n function FunnelSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = FunnelSeriesModel.type;\n return _this;\n }\n\n FunnelSeriesModel.prototype.init = function (option) {\n _super.prototype.init.apply(this, arguments); // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n\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\n FunnelSeriesModel.prototype.getInitialData = function (option, ecModel) {\n return createSeriesDataSimply(this, {\n coordDimensions: ['value'],\n encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)\n });\n };\n\n FunnelSeriesModel.prototype._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 }; // Overwrite\n\n\n FunnelSeriesModel.prototype.getDataParams = function (dataIndex) {\n var data = this.getData();\n\n var params = _super.prototype.getDataParams.call(this, dataIndex);\n\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\n FunnelSeriesModel.type = 'series.funnel';\n FunnelSeriesModel.defaultOption = {\n // zlevel: 0, // 一级层叠\n z: 2,\n legendHoverLink: true,\n colorBy: 'data',\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 orient: 'vertical',\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 }\n },\n itemStyle: {\n // color: 各异,\n borderColor: '#fff',\n borderWidth: 1\n },\n emphasis: {\n label: {\n show: true\n }\n },\n select: {\n itemStyle: {\n borderColor: '#212121'\n }\n }\n };\n return FunnelSeriesModel;\n}(SeriesModel);\n\nexport default FunnelSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as layout from '../../util/layout.js';\nimport { parsePercent, linearMap } from '../../util/number.js';\nimport { isFunction } from 'zrender/lib/core/util.js';\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 (isFunction(sort)) {\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 var seriesModel = data.hostModel;\n var orient = seriesModel.get('orient');\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 = void 0;\n var y1 = void 0;\n var x2 = void 0;\n var y2 = void 0;\n var labelLineLen = labelLineModel.get('length');\n\n if (process.env.NODE_ENV !== 'production') {\n if (orient === 'vertical' && ['top', 'bottom'].indexOf(labelPosition) > -1) {\n labelPosition = 'left';\n console.warn('Position error: Funnel chart on vertical orient dose not support top and bottom.');\n }\n\n if (orient === 'horizontal' && ['left', 'right'].indexOf(labelPosition) > -1) {\n labelPosition = 'bottom';\n console.warn('Position error: Funnel chart on horizontal orient dose not support left and right.');\n }\n }\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 === 'top') {\n // Top side\n x1 = (points[3][0] + points[0][0]) / 2;\n y1 = (points[3][1] + points[0][1]) / 2;\n y2 = y1 - labelLineLen;\n textY = y2 - 5;\n textAlign = 'center';\n } else if (labelPosition === 'bottom') {\n // Bottom side\n x1 = (points[1][0] + points[2][0]) / 2;\n y1 = (points[1][1] + points[2][1]) / 2;\n y2 = y1 + labelLineLen;\n textY = y2 + 5;\n textAlign = 'center';\n } else if (labelPosition === 'rightTop') {\n // RightTop side\n x1 = orient === 'horizontal' ? points[3][0] : points[1][0];\n y1 = orient === 'horizontal' ? points[3][1] : points[1][1];\n\n if (orient === 'horizontal') {\n y2 = y1 - labelLineLen;\n textY = y2 - 5;\n textAlign = 'center';\n } else {\n x2 = x1 + labelLineLen;\n textX = x2 + 5;\n textAlign = 'top';\n }\n } else if (labelPosition === 'rightBottom') {\n // RightBottom side\n x1 = points[2][0];\n y1 = points[2][1];\n\n if (orient === 'horizontal') {\n y2 = y1 + labelLineLen;\n textY = y2 + 5;\n textAlign = 'center';\n } else {\n x2 = x1 + labelLineLen;\n textX = x2 + 5;\n textAlign = 'bottom';\n }\n } else if (labelPosition === 'leftTop') {\n // LeftTop side\n x1 = points[0][0];\n y1 = orient === 'horizontal' ? points[0][1] : points[1][1];\n\n if (orient === 'horizontal') {\n y2 = y1 - labelLineLen;\n textY = y2 - 5;\n textAlign = 'center';\n } else {\n x2 = x1 - labelLineLen;\n textX = x2 - 5;\n textAlign = 'right';\n }\n } else if (labelPosition === 'leftBottom') {\n // LeftBottom side\n x1 = orient === 'horizontal' ? points[1][0] : points[3][0];\n y1 = orient === 'horizontal' ? points[1][1] : points[2][1];\n\n if (orient === 'horizontal') {\n y2 = y1 + labelLineLen;\n textY = y2 + 5;\n textAlign = 'center';\n } else {\n x2 = x1 - labelLineLen;\n textX = x2 - 5;\n textAlign = 'right';\n }\n } else {\n // Right side or Bottom side\n x1 = (points[1][0] + points[2][0]) / 2;\n y1 = (points[1][1] + points[2][1]) / 2;\n\n if (orient === 'horizontal') {\n y2 = y1 + labelLineLen;\n textY = y2 + 5;\n textAlign = 'center';\n } else {\n x2 = x1 + labelLineLen;\n textX = x2 + 5;\n textAlign = 'left';\n }\n }\n\n if (orient === 'horizontal') {\n x2 = x1;\n textX = x2;\n } else {\n y2 = y1;\n textY = y2;\n }\n\n linePoints = [[x1, y1], [x2, y2]];\n }\n\n layout.label = {\n linePoints: linePoints,\n x: textX,\n y: textY,\n verticalAlign: 'middle',\n textAlign: textAlign,\n inside: isLabelInside\n };\n });\n}\n\nexport default function funnelLayout(ecModel, api) {\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 orient = seriesModel.get('orient');\n var viewWidth = viewRect.width;\n var viewHeight = viewRect.height;\n var indices = getSortedIndices(data, sort);\n var x = viewRect.x;\n var y = viewRect.y;\n var sizeExtent = orient === 'horizontal' ? [parsePercent(seriesModel.get('minSize'), viewHeight), parsePercent(seriesModel.get('maxSize'), viewHeight)] : [parsePercent(seriesModel.get('minSize'), viewWidth), parsePercent(seriesModel.get('maxSize'), viewWidth)];\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 viewSize = orient === 'horizontal' ? viewWidth : viewHeight;\n var itemSize = (viewSize - gap * (data.count() - 1)) / data.count();\n\n var getLinePoints = function (idx, offset) {\n // End point index is data.count() and we assign it 0\n if (orient === 'horizontal') {\n var val_1 = data.get(valueDim, idx) || 0;\n var itemHeight = linearMap(val_1, [min, max], sizeExtent, true);\n var y0 = void 0;\n\n switch (funnelAlign) {\n case 'top':\n y0 = y;\n break;\n\n case 'center':\n y0 = y + (viewHeight - itemHeight) / 2;\n break;\n\n case 'bottom':\n y0 = y + (viewHeight - itemHeight);\n break;\n }\n\n return [[offset, y0], [offset, y0 + itemHeight]];\n }\n\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 = x;\n break;\n\n case 'center':\n x0 = x + (viewWidth - itemWidth) / 2;\n break;\n\n case 'right':\n x0 = x + viewWidth - itemWidth;\n break;\n }\n\n return [[x0, offset], [x0 + itemWidth, offset]];\n };\n\n if (sort === 'ascending') {\n // From bottom to top\n itemSize = -itemSize;\n gap = -gap;\n\n if (orient === 'horizontal') {\n x += viewWidth;\n } else {\n y += viewHeight;\n }\n\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\n if (orient === 'horizontal') {\n var width = itemModel.get(['itemStyle', 'width']);\n\n if (width == null) {\n width = itemSize;\n } else {\n width = parsePercent(width, viewWidth);\n\n if (sort === 'ascending') {\n width = -width;\n }\n }\n\n var start = getLinePoints(idx, x);\n var end = getLinePoints(nextIdx, x + width);\n x += width + gap;\n data.setItemLayout(idx, {\n points: start.concat(end.slice().reverse())\n });\n } else {\n var height = itemModel.get(['itemStyle', 'height']);\n\n if (height == null) {\n height = itemSize;\n } else {\n height = parsePercent(height, viewHeight);\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\n labelLayout(data);\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport FunnelView from './FunnelView.js';\nimport FunnelSeriesModel from './FunnelSeries.js';\nimport funnelLayout from './funnelLayout.js';\nimport dataFilter from '../../processor/dataFilter.js';\nexport function install(registers) {\n registers.registerChartView(FunnelView);\n registers.registerSeriesModel(FunnelSeriesModel);\n registers.registerLayout(funnelLayout);\n registers.registerProcessor(dataFilter('funnel'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as graphic from '../../util/graphic.js';\nimport { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';\nimport ChartView from '../../view/Chart.js';\nimport { numericToNumber } from '../../util/number.js';\nimport { eqNaN } from 'zrender/lib/core/util.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\nvar DEFAULT_SMOOTH = 0.3;\n\nvar ParallelView =\n/** @class */\nfunction (_super) {\n __extends(ParallelView, _super);\n\n function ParallelView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ParallelView.type;\n _this._dataGroup = new graphic.Group();\n _this._initialized = false;\n return _this;\n }\n\n ParallelView.prototype.init = function () {\n this.group.add(this._dataGroup);\n };\n /**\n * @override\n */\n\n\n ParallelView.prototype.render = function (seriesModel, ecModel, api, payload) {\n // Clear previously rendered progressive elements.\n this._progressiveEls = null;\n var dataGroup = this._dataGroup;\n var data = seriesModel.getData();\n var oldData = this._data;\n var coordSys = seriesModel.coordinateSystem;\n var dimensions = coordSys.dimensions;\n var seriesScope = makeSeriesScope(seriesModel);\n data.diff(oldData).add(add).update(update).remove(remove).execute();\n\n function add(newDataIndex) {\n var line = addEl(data, dataGroup, newDataIndex, dimensions, coordSys);\n updateElCommon(line, data, newDataIndex, seriesScope);\n }\n\n function update(newDataIndex, oldDataIndex) {\n var line = oldData.getItemGraphicEl(oldDataIndex);\n var points = createLinePoints(data, newDataIndex, dimensions, coordSys);\n data.setItemGraphicEl(newDataIndex, line);\n graphic.updateProps(line, {\n shape: {\n points: points\n }\n }, seriesModel, newDataIndex);\n saveOldStyle(line);\n updateElCommon(line, data, newDataIndex, seriesScope);\n }\n\n function remove(oldDataIndex) {\n var line = oldData.getItemGraphicEl(oldDataIndex);\n dataGroup.remove(line);\n } // First create\n\n\n if (!this._initialized) {\n this._initialized = true;\n var clipPath = createGridClipShape(coordSys, seriesModel, function () {\n // Callback will be invoked immediately if there is no animation\n setTimeout(function () {\n dataGroup.removeClipPath();\n });\n });\n dataGroup.setClipPath(clipPath);\n }\n\n this._data = data;\n };\n\n ParallelView.prototype.incrementalPrepareRender = function (seriesModel, ecModel, api) {\n this._initialized = true;\n this._data = null;\n\n this._dataGroup.removeAll();\n };\n\n ParallelView.prototype.incrementalRender = function (taskParams, seriesModel, ecModel) {\n var data = seriesModel.getData();\n var coordSys = seriesModel.coordinateSystem;\n var dimensions = coordSys.dimensions;\n var seriesScope = makeSeriesScope(seriesModel);\n var progressiveEls = this._progressiveEls = [];\n\n for (var dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) {\n var line = addEl(data, this._dataGroup, dataIndex, dimensions, coordSys);\n line.incremental = true;\n updateElCommon(line, data, dataIndex, seriesScope);\n progressiveEls.push(line);\n }\n };\n\n ParallelView.prototype.remove = function () {\n this._dataGroup && this._dataGroup.removeAll();\n this._data = null;\n };\n\n ParallelView.type = 'parallel';\n return ParallelView;\n}(ChartView);\n\nfunction createGridClipShape(coordSys, seriesModel, cb) {\n var parallelModel = coordSys.model;\n var rect = coordSys.getRect();\n var rectEl = new graphic.Rect({\n shape: {\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n }\n });\n var dim = parallelModel.get('layout') === 'horizontal' ? 'width' : 'height';\n rectEl.setShape(dim, 0);\n graphic.initProps(rectEl, {\n shape: {\n width: rect.width,\n height: rect.height\n }\n }, seriesModel, cb);\n return rectEl;\n}\n\nfunction createLinePoints(data, dataIndex, dimensions, coordSys) {\n var points = [];\n\n for (var i = 0; i < dimensions.length; i++) {\n var dimName = dimensions[i];\n var value = data.get(data.mapDimension(dimName), dataIndex);\n\n if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) {\n points.push(coordSys.dataToPoint(value, dimName));\n }\n }\n\n return points;\n}\n\nfunction addEl(data, dataGroup, dataIndex, dimensions, coordSys) {\n var points = createLinePoints(data, dataIndex, dimensions, coordSys);\n var line = new graphic.Polyline({\n shape: {\n points: points\n },\n // silent: true,\n z2: 10\n });\n dataGroup.add(line);\n data.setItemGraphicEl(dataIndex, line);\n return line;\n}\n\nfunction makeSeriesScope(seriesModel) {\n var smooth = seriesModel.get('smooth', true);\n smooth === true && (smooth = DEFAULT_SMOOTH);\n smooth = numericToNumber(smooth);\n eqNaN(smooth) && (smooth = 0);\n return {\n smooth: smooth\n };\n}\n\nfunction updateElCommon(el, data, dataIndex, seriesScope) {\n el.useStyle(data.getItemVisual(dataIndex, 'style'));\n el.style.fill = null;\n el.setShape('smooth', seriesScope.smooth);\n var itemModel = data.getItemModel(dataIndex);\n var emphasisModel = itemModel.getModel('emphasis');\n setStatesStylesFromModel(el, itemModel, 'lineStyle');\n toggleHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n} // function simpleDiff(oldData, newData, dimensions) {\n// let oldLen;\n// if (!oldData\n// || !oldData.__plProgressive\n// || (oldLen = oldData.count()) !== newData.count()\n// ) {\n// return true;\n// }\n// let dimLen = dimensions.length;\n// for (let i = 0; i < oldLen; i++) {\n// for (let j = 0; j < dimLen; j++) {\n// if (oldData.get(dimensions[j], i) !== newData.get(dimensions[j], i)) {\n// return true;\n// }\n// }\n// }\n// return false;\n// }\n// FIXME put in common util?\n\n\nfunction isEmptyValue(val, axisType) {\n return axisType === 'category' ? val == null : val == null || isNaN(val); // axisType === 'value'\n}\n\nexport default ParallelView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { each, bind } from 'zrender/lib/core/util.js';\nimport SeriesModel from '../../model/Series.js';\nimport createSeriesData from '../helper/createSeriesData.js';\n\nvar ParallelSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(ParallelSeriesModel, _super);\n\n function ParallelSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ParallelSeriesModel.type;\n _this.visualStyleAccessPath = 'lineStyle';\n _this.visualDrawType = 'stroke';\n return _this;\n }\n\n ParallelSeriesModel.prototype.getInitialData = function (option, ecModel) {\n return createSeriesData(null, this, {\n useEncodeDefaulter: bind(makeDefaultEncode, null, this)\n });\n };\n /**\n * User can get data raw indices on 'axisAreaSelected' event received.\n *\n * @return Raw indices\n */\n\n\n ParallelSeriesModel.prototype.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\n ParallelSeriesModel.type = 'series.parallel';\n ParallelSeriesModel.dependencies = ['parallel'];\n ParallelSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\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 animationEasing: 'linear'\n };\n return ParallelSeriesModel;\n}(SeriesModel);\n\nfunction makeDefaultEncode(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 var parallelModel = seriesModel.ecModel.getComponent('parallel', seriesModel.get('parallelIndex'));\n\n if (!parallelModel) {\n return;\n }\n\n var encodeDefine = {};\n each(parallelModel.dimensions, function (axisDim) {\n var dataDimIndex = convertDimNameToNumber(axisDim);\n encodeDefine[axisDim] = dataDimIndex;\n });\n return encodeDefine;\n}\n\nfunction convertDimNameToNumber(dimName) {\n return +dimName.replace('dim', '');\n}\n\nexport default ParallelSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar opacityAccessPath = ['lineStyle', 'opacity'];\nvar parallelVisual = {\n seriesType: 'parallel',\n reset: function (seriesModel, ecModel) {\n var coordSys = seriesModel.coordinateSystem;\n var opacityMap = {\n normal: seriesModel.get(['lineStyle', 'opacity']),\n active: seriesModel.get('activeOpacity'),\n inactive: seriesModel.get('inactiveOpacity')\n };\n return {\n progress: function (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 var existsStyle = data.ensureUniqueItemVisual(dataIndex, 'style');\n existsStyle.opacity = opacity;\n }, params.start, params.end);\n }\n };\n }\n};\nexport default 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\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as modelUtil from '../../util/model.js';\nexport default function parallelPreprocessor(option) {\n createParallelIfNeeded(option);\n mergeAxisOptionFromParallel(option);\n}\n/**\n * Create a parallel coordinate if not exists.\n * @inner\n */\n\nfunction createParallelIfNeeded(option) {\n if (option.parallel) {\n return;\n }\n\n var hasParallelSeries = false;\n zrUtil.each(option.series, function (seriesOpt) {\n if (seriesOpt && seriesOpt.type === 'parallel') {\n hasParallelSeries = true;\n }\n });\n\n if (hasParallelSeries) {\n option.parallel = [{}];\n }\n}\n/**\n * Merge aixs definition from parallel option (if exists) to axis option.\n * @inner\n */\n\n\nfunction mergeAxisOptionFromParallel(option) {\n var axes = modelUtil.normalizeToArray(option.parallelAxis);\n zrUtil.each(axes, function (axisOption) {\n if (!zrUtil.isObject(axisOption)) {\n return;\n }\n\n var parallelIndex = axisOption.parallelIndex || 0;\n var parallelOption = modelUtil.normalizeToArray(option.parallel)[parallelIndex];\n\n if (parallelOption && parallelOption.parallelAxisDefault) {\n zrUtil.merge(axisOption, parallelOption.parallelAxisDefault, false);\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentView from '../../view/Component.js';\nimport { each, bind, extend } from 'zrender/lib/core/util.js';\nimport { createOrUpdate, clear } from '../../util/throttle.js';\nvar CLICK_THRESHOLD = 5; // > 4\n\nvar ParallelView =\n/** @class */\nfunction (_super) {\n __extends(ParallelView, _super);\n\n function ParallelView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ParallelView.type;\n return _this;\n }\n\n ParallelView.prototype.render = function (parallelModel, ecModel, api) {\n this._model = parallelModel;\n this._api = api;\n\n if (!this._handlers) {\n this._handlers = {};\n each(handlers, function (handler, eventName) {\n api.getZr().on(eventName, this._handlers[eventName] = bind(handler, this));\n }, this);\n }\n\n createOrUpdate(this, '_throttledDispatchExpand', parallelModel.get('axisExpandRate'), 'fixRate');\n };\n\n ParallelView.prototype.dispose = function (ecModel, api) {\n clear(this, '_throttledDispatchExpand');\n each(this._handlers, function (handler, eventName) {\n api.getZr().off(eventName, handler);\n });\n this._handlers = null;\n };\n /**\n * @internal\n * @param {Object} [opt] If null, cancel the last action triggering for debounce.\n */\n\n\n ParallelView.prototype._throttledDispatchExpand = function (opt) {\n this._dispatchExpand(opt);\n };\n /**\n * @internal\n */\n\n\n ParallelView.prototype._dispatchExpand = function (opt) {\n opt && this._api.dispatchAction(extend({\n type: 'parallelAxisExpand'\n }, opt));\n };\n\n ParallelView.type = 'parallel';\n return ParallelView;\n}(ComponentView);\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 // Cancel 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 : {\n duration: 0 // Disable animation.\n\n }\n });\n }\n};\n\nfunction checkTrigger(view, triggerOn) {\n var model = view._model;\n return model.get('axisExpandable') && model.get('axisExpandTriggerOn') === triggerOn;\n}\n\nexport default ParallelView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport ComponentModel from '../../model/Component.js';\n\nvar ParallelModel =\n/** @class */\nfunction (_super) {\n __extends(ParallelModel, _super);\n\n function ParallelModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ParallelModel.type;\n return _this;\n }\n\n ParallelModel.prototype.init = function () {\n _super.prototype.init.apply(this, arguments);\n\n this.mergeOption({});\n };\n\n ParallelModel.prototype.mergeOption = function (newOption) {\n var thisOption = this.option;\n newOption && zrUtil.merge(thisOption, newOption, true);\n\n this._initDimensions();\n };\n /**\n * Whether series or axis is in this coordinate system.\n */\n\n\n ParallelModel.prototype.contains = function (model, ecModel) {\n var parallelIndex = model.get('parallelIndex');\n return parallelIndex != null && ecModel.getComponent('parallel', parallelIndex) === this;\n };\n\n ParallelModel.prototype.setAxisExpand = function (opt) {\n zrUtil.each(['axisExpandable', 'axisExpandCenter', 'axisExpandCount', 'axisExpandWidth', 'axisExpandWindow'], function (name) {\n if (opt.hasOwnProperty(name)) {\n // @ts-ignore FIXME: why \"never\" inferred in this.option[name]?\n this.option[name] = opt[name];\n }\n }, this);\n };\n\n ParallelModel.prototype._initDimensions = function () {\n var dimensions = this.dimensions = [];\n var parallelAxisIndex = this.parallelAxisIndex = [];\n var axisModels = zrUtil.filter(this.ecModel.queryComponents({\n mainType: 'parallelAxis'\n }), 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 ParallelModel.type = 'parallel';\n ParallelModel.dependencies = ['parallelAxis'];\n ParallelModel.layoutMode = 'box';\n ParallelModel.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 // FIXME\n // naming?\n axisExpandable: false,\n axisExpandCenter: null,\n axisExpandCount: 0,\n axisExpandWidth: 50,\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 parallelAxisDefault: null\n };\n return ParallelModel;\n}(ComponentModel);\n\nexport default ParallelModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Axis from '../Axis.js';\n\nvar ParallelAxis =\n/** @class */\nfunction (_super) {\n __extends(ParallelAxis, _super);\n\n function ParallelAxis(dim, scale, coordExtent, axisType, axisIndex) {\n var _this = _super.call(this, dim, scale, coordExtent) || this;\n\n _this.type = axisType || 'value';\n _this.axisIndex = axisIndex;\n return _this;\n }\n\n ParallelAxis.prototype.isHorizontal = function () {\n return this.coordinateSystem.getModel().get('layout') !== 'horizontal';\n };\n\n return ParallelAxis;\n}(Axis);\n\nexport default ParallelAxis;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Parallel Coordinates\n * \n */\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport * as layoutUtil from '../../util/layout.js';\nimport * as axisHelper from '../../coord/axisHelper.js';\nimport ParallelAxis from './ParallelAxis.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as numberUtil from '../../util/number.js';\nimport sliderMove from '../../component/helper/sliderMove.js';\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\nvar Parallel =\n/** @class */\nfunction () {\n function Parallel(parallelModel, ecModel, api) {\n this.type = 'parallel';\n /**\n * key: dimension\n */\n\n this._axesMap = zrUtil.createHashMap();\n /**\n * key: dimension\n * value: {position: [], rotation, }\n */\n\n this._axesLayout = {};\n this.dimensions = parallelModel.dimensions;\n this._model = parallelModel;\n\n this._init(parallelModel, ecModel, api);\n }\n\n Parallel.prototype._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 * Update axis scale after data processed\n */\n\n\n Parallel.prototype.update = function (ecModel, api) {\n this._updateAxesFromSeries(this._model, ecModel);\n };\n\n Parallel.prototype.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\n Parallel.prototype.getModel = function () {\n return this._model;\n };\n /**\n * Update properties from series\n */\n\n\n Parallel.prototype._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 * Resize the parallel coordinate system.\n */\n\n\n Parallel.prototype.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 Parallel.prototype.getRect = function () {\n return this._rect;\n };\n\n Parallel.prototype._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 Parallel.prototype._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 layout info\n // TODO\n // update dimensions info based on axis order.\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 * Get axis by dim.\n */\n\n\n Parallel.prototype.getAxis = function (dim) {\n return this._axesMap.get(dim);\n };\n /**\n * Convert a dim value of a single item of series data to Point.\n */\n\n\n Parallel.prototype.dataToPoint = function (value, dim) {\n return this.axisCoordToPoint(this._axesMap.get(dim).dataToCoord(value), dim);\n };\n /**\n * Travel data for one time, get activeState of each data item.\n * @param start the start dataIndex that travel from.\n * @param end the next dataIndex of the last dataIndex will be travel.\n */\n\n\n Parallel.prototype.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 = void 0;\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 * Whether has any activeSet.\n */\n\n\n Parallel.prototype.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 * Convert coords of each axis to Point.\n * Return point. For example: [10, 20]\n */\n\n\n Parallel.prototype.axisCoordToPoint = function (coord, dim) {\n var axisLayout = this._axesLayout[dim];\n return graphic.applyTransform([coord, 0], axisLayout.transform);\n };\n /**\n * Get axis layout.\n */\n\n\n Parallel.prototype.getAxisLayout = function (dim) {\n return zrUtil.clone(this._axesLayout[dim]);\n };\n /**\n * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}.\n */\n\n\n Parallel.prototype.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 } // Convert 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 winSize2 = axisExpandWindow[1] - axisExpandWindow[0];\n var pos = extent[1] * pointCoord / winSize2;\n axisExpandWindow = [mathMax(0, pos - winSize2 / 2)];\n axisExpandWindow[1] = mathMin(extent[1], axisExpandWindow[0] + winSize2);\n axisExpandWindow[0] = axisExpandWindow[1] - winSize2;\n }\n\n return {\n axisExpandWindow: axisExpandWindow,\n behavior: behavior\n };\n };\n\n return Parallel;\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\nexport default Parallel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Parallel coordinate system creater.\n */\nimport Parallel from './Parallel.js';\nimport { SINGLE_REFERRING } from '../../util/model.js';\n\nfunction createParallelCoordSys(ecModel, api) {\n var coordSysList = [];\n ecModel.eachComponent('parallel', function (parallelModel, idx) {\n var coordSys = new Parallel(parallelModel, ecModel, api);\n coordSys.name = 'parallel_' + idx;\n coordSys.resize(parallelModel, api);\n parallelModel.coordinateSystem = coordSys;\n coordSys.model = parallelModel;\n coordSysList.push(coordSys);\n }); // Inject the coordinateSystems into seriesModel\n\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.get('coordinateSystem') === 'parallel') {\n var parallelModel = seriesModel.getReferringComponents('parallel', SINGLE_REFERRING).models[0];\n seriesModel.coordinateSystem = parallelModel.coordinateSystem;\n }\n });\n return coordSysList;\n}\n\nvar parallelCoordSysCreator = {\n create: createParallelCoordSys\n};\nexport default parallelCoordSysCreator;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport ComponentModel from '../../model/Component.js';\nimport makeStyleMapper from '../../model/mixin/makeStyleMapper.js';\nimport * as numberUtil from '../../util/number.js';\nimport { AxisModelCommonMixin } from '../axisModelCommonMixin.js';\n\nvar ParallelAxisModel =\n/** @class */\nfunction (_super) {\n __extends(ParallelAxisModel, _super);\n\n function ParallelAxisModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ParallelAxisModel.type;\n /**\n * @readOnly\n */\n\n _this.activeIntervals = [];\n return _this;\n }\n\n ParallelAxisModel.prototype.getAreaSelectStyle = function () {\n return makeStyleMapper([['fill', 'color'], ['lineWidth', 'borderWidth'], ['stroke', 'borderColor'], ['width', 'width'], ['opacity', 'opacity'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`.\n // So do not transfer decal directly.\n ])(this.getModel('areaSelectStyle'));\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 intervals `interval.length === 0` means set all active.\n */\n\n\n ParallelAxisModel.prototype.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 * @param value When only attempting detect whether 'no activeIntervals set',\n * `value` is not needed to be input.\n */\n\n\n ParallelAxisModel.prototype.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\n return ParallelAxisModel;\n}(ComponentModel);\n\nzrUtil.mixin(ParallelAxisModel, AxisModelCommonMixin);\nexport default ParallelAxisModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport AxisBuilder from './AxisBuilder.js';\nimport BrushController from '../helper/BrushController.js';\nimport * as brushHelper from '../helper/brushHelper.js';\nimport * as graphic from '../../util/graphic.js';\nimport ComponentView from '../../view/Component.js';\nvar elementList = ['axisLine', 'axisTickLabel', 'axisName'];\n\nvar ParallelAxisView =\n/** @class */\nfunction (_super) {\n __extends(ParallelAxisView, _super);\n\n function ParallelAxisView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ParallelAxisView.type;\n return _this;\n }\n\n ParallelAxisView.prototype.init = function (ecModel, api) {\n _super.prototype.init.apply(this, arguments);\n\n (this._brushController = new BrushController(api.getZr())).on('brush', zrUtil.bind(this._onBrush, this));\n };\n\n ParallelAxisView.prototype.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 graphic.groupTransition(oldAxisGroup, this._axisGroup, axisModel);\n }; // /**\n // * @override\n // */\n // updateVisual(axisModel, ecModel, api, payload) {\n // this._brushController && this._brushController\n // .updateCovers(getCoverInfoList(axisModel));\n // }\n\n\n ParallelAxisView.prototype._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 x: builderOpt.position[0],\n y: builderOpt.position[1]\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\n ParallelAxisView.prototype._onBrush = function (eventParam) {\n var coverInfoList = eventParam.areas; // Do not cache these object, because the mey be changed.\n\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 === eventParam.isEnd || eventParam.removeOnClick) {\n // jshint ignore:line\n this.api.dispatchAction({\n type: 'axisAreaSelect',\n parallelAxisId: axisModel.id,\n intervals: intervals\n });\n }\n };\n\n ParallelAxisView.prototype.dispose = function () {\n this._brushController.dispose();\n };\n\n ParallelAxisView.type = 'parallelAxis';\n return ParallelAxisView;\n}(ComponentView);\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\nexport default 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/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar actionInfo = {\n type: 'axisAreaSelect',\n event: 'axisAreaSelected' // update: 'updateVisual'\n\n};\nexport function installParallelActions(registers) {\n registers.registerAction(actionInfo, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'parallelAxis',\n query: payload\n }, function (parallelAxisModel) {\n parallelAxisModel.axis.model.setActiveIntervals(payload.intervals);\n });\n });\n /**\n * @payload\n */\n\n registers.registerAction('parallelAxisExpand', function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'parallel',\n query: payload\n }, function (parallelModel) {\n parallelModel.setAxisExpand(payload);\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport parallelPreprocessor from '../../coord/parallel/parallelPreprocessor.js';\nimport ParallelView from './ParallelView.js';\nimport ParallelModel from '../../coord/parallel/ParallelModel.js';\nimport parallelCoordSysCreator from '../../coord/parallel/parallelCreator.js';\nimport axisModelCreator from '../../coord/axisModelCreator.js';\nimport ParallelAxisModel from '../../coord/parallel/AxisModel.js';\nimport ParallelAxisView from '../axis/ParallelAxisView.js';\nimport { installParallelActions } from '../axis/parallelAxisAction.js';\nvar defaultAxisOption = {\n type: 'value',\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 z: 10\n};\nexport function install(registers) {\n registers.registerComponentView(ParallelView);\n registers.registerComponentModel(ParallelModel);\n registers.registerCoordinateSystem('parallel', parallelCoordSysCreator);\n registers.registerPreprocessor(parallelPreprocessor);\n registers.registerComponentModel(ParallelAxisModel);\n registers.registerComponentView(ParallelAxisView);\n axisModelCreator(registers, 'parallel', ParallelAxisModel, defaultAxisOption);\n installParallelActions(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension.js';\nimport ParallelView from './ParallelView.js';\nimport ParallelSeriesModel from './ParallelSeries.js';\nimport parallelVisual from './parallelVisual.js';\nimport { install as installParallelComponent } from '../../component/parallel/install.js';\nexport function install(registers) {\n use(installParallelComponent);\n registers.registerChartView(ParallelView);\n registers.registerSeriesModel(ParallelSeriesModel);\n registers.registerVisual(registers.PRIORITY.VISUAL.BRUSH, 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*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as graphic from '../../util/graphic.js';\nimport { enterEmphasis, leaveEmphasis, toggleHoverEmphasis, setStatesStylesFromModel } from '../../util/states.js';\nimport ChartView from '../../view/Chart.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { isString } from 'zrender/lib/core/util.js';\n\nvar SankeyPathShape =\n/** @class */\nfunction () {\n function SankeyPathShape() {\n this.x1 = 0;\n this.y1 = 0;\n this.x2 = 0;\n this.y2 = 0;\n this.cpx1 = 0;\n this.cpy1 = 0;\n this.cpx2 = 0;\n this.cpy2 = 0;\n this.extent = 0;\n }\n\n return SankeyPathShape;\n}();\n\nvar SankeyPath =\n/** @class */\nfunction (_super) {\n __extends(SankeyPath, _super);\n\n function SankeyPath(opts) {\n return _super.call(this, opts) || this;\n }\n\n SankeyPath.prototype.getDefaultShape = function () {\n return new SankeyPathShape();\n };\n\n SankeyPath.prototype.buildPath = function (ctx, shape) {\n var extent = shape.extent;\n ctx.moveTo(shape.x1, shape.y1);\n ctx.bezierCurveTo(shape.cpx1, shape.cpy1, shape.cpx2, shape.cpy2, shape.x2, shape.y2);\n\n if (shape.orient === 'vertical') {\n ctx.lineTo(shape.x2 + extent, shape.y2);\n ctx.bezierCurveTo(shape.cpx2 + extent, shape.cpy2, shape.cpx1 + extent, shape.cpy1, shape.x1 + extent, shape.y1);\n } else {\n ctx.lineTo(shape.x2, shape.y2 + extent);\n ctx.bezierCurveTo(shape.cpx2, shape.cpy2 + extent, shape.cpx1, shape.cpy1 + extent, shape.x1, shape.y1 + extent);\n }\n\n ctx.closePath();\n };\n\n SankeyPath.prototype.highlight = function () {\n enterEmphasis(this);\n };\n\n SankeyPath.prototype.downplay = function () {\n leaveEmphasis(this);\n };\n\n return SankeyPath;\n}(graphic.Path);\n\nvar SankeyView =\n/** @class */\nfunction (_super) {\n __extends(SankeyView, _super);\n\n function SankeyView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SankeyView.type;\n _this._focusAdjacencyDisabled = false;\n return _this;\n }\n\n SankeyView.prototype.render = function (seriesModel, ecModel, api) {\n var sankeyView = this;\n var graph = seriesModel.getGraph();\n var group = this.group;\n var layoutInfo = seriesModel.layoutInfo; // view width\n\n var width = layoutInfo.width; // view height\n\n var height = layoutInfo.height;\n var nodeData = seriesModel.getData();\n var edgeData = seriesModel.getData('edge');\n var orient = seriesModel.get('orient');\n this._model = seriesModel;\n group.removeAll();\n group.x = layoutInfo.x;\n group.y = layoutInfo.y; // generate a bezire Curve for each edge\n\n graph.eachEdge(function (edge) {\n var curve = new SankeyPath();\n var ecData = getECData(curve);\n ecData.dataIndex = edge.dataIndex;\n ecData.seriesIndex = seriesModel.seriesIndex;\n ecData.dataType = 'edge';\n var edgeModel = edge.getModel();\n var lineStyleModel = edgeModel.getModel('lineStyle');\n var curvature = lineStyleModel.get('curveness');\n var n1Layout = edge.node1.getLayout();\n var node1Model = edge.node1.getModel();\n var dragX1 = node1Model.get('localX');\n var dragY1 = node1Model.get('localY');\n var n2Layout = edge.node2.getLayout();\n var node2Model = edge.node2.getModel();\n var dragX2 = node2Model.get('localX');\n var dragY2 = node2Model.get('localY');\n var edgeLayout = edge.getLayout();\n var x1;\n var y1;\n var x2;\n var y2;\n var cpx1;\n var cpy1;\n var cpx2;\n var cpy2;\n curve.shape.extent = Math.max(1, edgeLayout.dy);\n curve.shape.orient = orient;\n\n if (orient === 'vertical') {\n x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + edgeLayout.sy;\n y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + n1Layout.dy;\n x2 = (dragX2 != null ? dragX2 * width : n2Layout.x) + edgeLayout.ty;\n y2 = dragY2 != null ? dragY2 * height : n2Layout.y;\n cpx1 = x1;\n cpy1 = y1 * (1 - curvature) + y2 * curvature;\n cpx2 = x2;\n cpy2 = y1 * curvature + y2 * (1 - curvature);\n } else {\n x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + n1Layout.dx;\n y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + edgeLayout.sy;\n x2 = dragX2 != null ? dragX2 * width : n2Layout.x;\n y2 = (dragY2 != null ? dragY2 * height : n2Layout.y) + edgeLayout.ty;\n cpx1 = x1 * (1 - curvature) + x2 * curvature;\n cpy1 = y1;\n cpx2 = x1 * curvature + x2 * (1 - curvature);\n cpy2 = y2;\n }\n\n curve.setShape({\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n cpx1: cpx1,\n cpy1: cpy1,\n cpx2: cpx2,\n cpy2: cpy2\n });\n curve.useStyle(lineStyleModel.getItemStyle()); // Special color, use source node color or target node color\n\n switch (curve.style.fill) {\n case 'source':\n curve.style.fill = edge.node1.getVisual('color');\n curve.style.decal = edge.node1.getVisual('style').decal;\n break;\n\n case 'target':\n curve.style.fill = edge.node2.getVisual('color');\n curve.style.decal = edge.node2.getVisual('style').decal;\n break;\n\n case 'gradient':\n var sourceColor = edge.node1.getVisual('color');\n var targetColor = edge.node2.getVisual('color');\n\n if (isString(sourceColor) && isString(targetColor)) {\n curve.style.fill = new graphic.LinearGradient(0, 0, +(orient === 'horizontal'), +(orient === 'vertical'), [{\n color: sourceColor,\n offset: 0\n }, {\n color: targetColor,\n offset: 1\n }]);\n }\n\n }\n\n setLabelStyle(curve, getLabelStatesModels(edgeModel, 'edgeLabel'), {\n labelFetcher: seriesModel,\n labelDataIndex: edge.dataIndex,\n defaultText: \"\" + edgeModel.get('value')\n });\n curve.setTextConfig({\n position: 'inside'\n });\n var emphasisModel = edgeModel.getModel('emphasis');\n setStatesStylesFromModel(curve, edgeModel, 'lineStyle', function (model) {\n return model.getItemStyle();\n });\n group.add(curve);\n edgeData.setItemGraphicEl(edge.dataIndex, curve);\n var focus = emphasisModel.get('focus');\n toggleHoverEmphasis(curve, focus === 'adjacency' ? edge.getAdjacentDataIndices() : focus, emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n getECData(curve).dataType = 'edge';\n }); // Generate a rect for each node\n\n graph.eachNode(function (node) {\n var layout = node.getLayout();\n var itemModel = node.getModel();\n var dragX = itemModel.get('localX');\n var dragY = itemModel.get('localY');\n var emphasisModel = itemModel.getModel('emphasis');\n var rect = new graphic.Rect({\n shape: {\n x: dragX != null ? dragX * width : layout.x,\n y: dragY != null ? dragY * height : layout.y,\n width: layout.dx,\n height: layout.dy\n },\n style: itemModel.getModel('itemStyle').getItemStyle(),\n z2: 10\n });\n setLabelStyle(rect, getLabelStatesModels(itemModel), {\n labelFetcher: seriesModel,\n labelDataIndex: node.dataIndex,\n defaultText: node.id\n });\n rect.disableLabelAnimation = true;\n rect.setStyle('fill', node.getVisual('color'));\n rect.setStyle('decal', node.getVisual('style').decal);\n setStatesStylesFromModel(rect, itemModel);\n group.add(rect);\n nodeData.setItemGraphicEl(node.dataIndex, rect);\n getECData(rect).dataType = 'node';\n var focus = emphasisModel.get('focus');\n toggleHoverEmphasis(rect, focus === 'adjacency' ? node.getAdjacentDataIndices() : focus, emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n });\n nodeData.eachItemGraphicEl(function (el, dataIndex) {\n var itemModel = nodeData.getItemModel(dataIndex);\n\n if (itemModel.get('draggable')) {\n el.drift = function (dx, dy) {\n sankeyView._focusAdjacencyDisabled = true;\n this.shape.x += dx;\n this.shape.y += dy;\n this.dirty();\n api.dispatchAction({\n type: 'dragNode',\n seriesId: seriesModel.id,\n dataIndex: nodeData.getRawIndex(dataIndex),\n localX: this.shape.x / width,\n localY: this.shape.y / height\n });\n };\n\n el.ondragend = function () {\n sankeyView._focusAdjacencyDisabled = false;\n };\n\n el.draggable = true;\n el.cursor = 'move';\n }\n });\n\n if (!this._data && seriesModel.isAnimationEnabled()) {\n group.setClipPath(createGridClipShape(group.getBoundingRect(), seriesModel, function () {\n group.removeClipPath();\n }));\n }\n\n this._data = seriesModel.getData();\n };\n\n SankeyView.prototype.dispose = function () {};\n\n SankeyView.type = 'sankey';\n return SankeyView;\n}(ChartView); // 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 }\n }, seriesModel, cb);\n return rectEl;\n}\n\nexport default SankeyView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SeriesModel from '../../model/Series.js';\nimport createGraphFromNodeEdge from '../helper/createGraphFromNodeEdge.js';\nimport Model from '../../model/Model.js';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup.js';\n\nvar SankeySeriesModel =\n/** @class */\nfunction (_super) {\n __extends(SankeySeriesModel, _super);\n\n function SankeySeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SankeySeriesModel.type;\n return _this;\n }\n /**\n * Init a graph data structure from data in option series\n */\n\n\n SankeySeriesModel.prototype.getInitialData = function (option, ecModel) {\n var links = option.edges || option.links;\n var nodes = option.data || option.nodes;\n var levels = option.levels;\n this.levelModels = [];\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 if (process.env.NODE_ENV !== 'production') {\n throw new Error('levels[i].depth is mandatory and should be natural number');\n }\n }\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 var seriesModel = model.parentModel;\n var layout = seriesModel.getData().getItemLayout(idx);\n\n if (layout) {\n var nodeDepth = layout.depth;\n var levelModel = seriesModel.levelModels[nodeDepth];\n\n if (levelModel) {\n model.parentModel = levelModel;\n }\n }\n\n return model;\n });\n edgeData.wrapMethod('getItemModel', function (model, idx) {\n var seriesModel = model.parentModel;\n var edge = seriesModel.getGraph().getEdgeByIndex(idx);\n var layout = edge.node1.getLayout();\n\n if (layout) {\n var depth = layout.depth;\n var levelModel = seriesModel.levelModels[depth];\n\n if (levelModel) {\n model.parentModel = levelModel;\n }\n }\n\n return model;\n });\n }\n };\n\n SankeySeriesModel.prototype.setNodePosition = function (dataIndex, localPosition) {\n var nodes = this.option.data || this.option.nodes;\n var dataItem = nodes[dataIndex];\n dataItem.localX = localPosition[0];\n dataItem.localY = localPosition[1];\n };\n /**\n * Return the graphic data structure\n *\n * @return graphic data structure\n */\n\n\n SankeySeriesModel.prototype.getGraph = function () {\n return this.getData().graph;\n };\n /**\n * Get edge data of graphic data structure\n *\n * @return data structure of list\n */\n\n\n SankeySeriesModel.prototype.getEdgeData = function () {\n return this.getGraph().edgeData;\n };\n\n SankeySeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n function noValue(val) {\n return isNaN(val) || val == null;\n } // dataType === 'node' or empty do not show tooltip by default\n\n\n if (dataType === 'edge') {\n var params = this.getDataParams(dataIndex, dataType);\n var rawDataOpt = params.data;\n var edgeValue = params.value;\n var edgeName = rawDataOpt.source + ' -- ' + rawDataOpt.target;\n return createTooltipMarkup('nameValue', {\n name: edgeName,\n value: edgeValue,\n noValue: noValue(edgeValue)\n });\n } // dataType === 'node'\n else {\n var node = this.getGraph().getNodeByIndex(dataIndex);\n var value = node.getLayout().value;\n var name_1 = this.getDataParams(dataIndex, dataType).data.name;\n return createTooltipMarkup('nameValue', {\n name: name_1 != null ? name_1 + '' : null,\n value: value,\n noValue: noValue(value)\n });\n }\n };\n\n SankeySeriesModel.prototype.optionUpdated = function () {}; // Override Series.getDataParams()\n\n\n SankeySeriesModel.prototype.getDataParams = function (dataIndex, dataType) {\n var params = _super.prototype.getDataParams.call(this, 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\n SankeySeriesModel.type = 'series.sankey';\n SankeySeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n coordinateSystem: 'view',\n left: '5%',\n top: '5%',\n right: '20%',\n bottom: '5%',\n orient: 'horizontal',\n nodeWidth: 20,\n nodeGap: 8,\n draggable: true,\n layoutIterations: 32,\n label: {\n show: true,\n position: 'right',\n fontSize: 12\n },\n edgeLabel: {\n show: false,\n fontSize: 12\n },\n levels: [],\n nodeAlign: 'justify',\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 select: {\n itemStyle: {\n borderColor: '#212121'\n }\n },\n animationEasing: 'linear',\n animationDuration: 1000\n };\n return SankeySeriesModel;\n}(SeriesModel);\n\nexport default SankeySeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as layout from '../../util/layout.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { groupData } from '../../util/model.js';\nexport default function sankeyLayout(ecModel, api) {\n ecModel.eachSeriesByType('sankey', function (seriesModel) {\n var nodeWidth = seriesModel.get('nodeWidth');\n var nodeGap = seriesModel.get('nodeGap');\n var layoutInfo = getViewRect(seriesModel, api);\n seriesModel.layoutInfo = layoutInfo;\n var width = layoutInfo.width;\n var height = layoutInfo.height;\n var graph = seriesModel.getGraph();\n var nodes = graph.nodes;\n var edges = graph.edges;\n computeNodeValues(nodes);\n var filteredNodes = zrUtil.filter(nodes, function (node) {\n return node.getLayout().value === 0;\n });\n var iterations = filteredNodes.length !== 0 ? 0 : seriesModel.get('layoutIterations');\n var orient = seriesModel.get('orient');\n var nodeAlign = seriesModel.get('nodeAlign');\n layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign);\n });\n}\n/**\n * Get the layout position of the whole view\n */\n\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n\nfunction layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign) {\n computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign);\n computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient);\n computeEdgeDepths(nodes, orient);\n}\n/**\n * Compute the value of each node by summing the associated edge's value\n */\n\n\nfunction computeNodeValues(nodes) {\n zrUtil.each(nodes, function (node) {\n var value1 = sum(node.outEdges, getEdgeValue);\n var value2 = sum(node.inEdges, getEdgeValue);\n var nodeRawValue = node.getValue() || 0;\n var value = Math.max(value1, value2, nodeRawValue);\n node.setLayout({\n value: value\n }, true);\n });\n}\n/**\n * Compute the x-position for each node.\n *\n * Here we use Kahn algorithm to detect cycle when we traverse\n * the node to computer the initial x position.\n */\n\n\nfunction computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign) {\n // Used to mark whether the edge is deleted. if it is deleted,\n // the value is 0, otherwise it is 1.\n var remainEdges = []; // Storage each node's indegree.\n\n var indegreeArr = []; // Used to storage the node with indegree is equal to 0.\n\n var zeroIndegrees = [];\n var nextTargetNode = [];\n var x = 0; // let kx = 0;\n\n for (var i = 0; i < edges.length; i++) {\n remainEdges[i] = 1;\n }\n\n for (var i = 0; i < nodes.length; i++) {\n indegreeArr[i] = nodes[i].inEdges.length;\n\n if (indegreeArr[i] === 0) {\n zeroIndegrees.push(nodes[i]);\n }\n }\n\n var maxNodeDepth = -1; // Traversing nodes using topological sorting to calculate the\n // horizontal(if orient === 'horizontal') or vertical(if orient === 'vertical')\n // position of the nodes.\n\n while (zeroIndegrees.length) {\n for (var idx = 0; idx < zeroIndegrees.length; idx++) {\n var node = zeroIndegrees[idx];\n var item = node.hostGraph.data.getRawDataItem(node.dataIndex);\n var isItemDepth = item.depth != null && item.depth >= 0;\n\n if (isItemDepth && item.depth > maxNodeDepth) {\n maxNodeDepth = item.depth;\n }\n\n node.setLayout({\n depth: isItemDepth ? item.depth : x\n }, true);\n orient === 'vertical' ? node.setLayout({\n dy: nodeWidth\n }, true) : node.setLayout({\n dx: nodeWidth\n }, true);\n\n for (var edgeIdx = 0; edgeIdx < node.outEdges.length; edgeIdx++) {\n var edge = node.outEdges[edgeIdx];\n var indexEdge = edges.indexOf(edge);\n remainEdges[indexEdge] = 0;\n var targetNode = edge.node2;\n var nodeIndex = nodes.indexOf(targetNode);\n\n if (--indegreeArr[nodeIndex] === 0 && nextTargetNode.indexOf(targetNode) < 0) {\n nextTargetNode.push(targetNode);\n }\n }\n }\n\n ++x;\n zeroIndegrees = nextTargetNode;\n nextTargetNode = [];\n }\n\n for (var i = 0; i < remainEdges.length; i++) {\n if (remainEdges[i] === 1) {\n throw new Error('Sankey is a DAG, the original data has cycle!');\n }\n }\n\n var maxDepth = maxNodeDepth > x - 1 ? maxNodeDepth : x - 1;\n\n if (nodeAlign && nodeAlign !== 'left') {\n adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth);\n }\n\n var kx = orient === 'vertical' ? (height - nodeWidth) / maxDepth : (width - nodeWidth) / maxDepth;\n scaleNodeBreadths(nodes, kx, orient);\n}\n\nfunction isNodeDepth(node) {\n var item = node.hostGraph.data.getRawDataItem(node.dataIndex);\n return item.depth != null && item.depth >= 0;\n}\n\nfunction adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth) {\n if (nodeAlign === 'right') {\n var nextSourceNode = [];\n var remainNodes = nodes;\n var nodeHeight = 0;\n\n while (remainNodes.length) {\n for (var i = 0; i < remainNodes.length; i++) {\n var node = remainNodes[i];\n node.setLayout({\n skNodeHeight: nodeHeight\n }, true);\n\n for (var j = 0; j < node.inEdges.length; j++) {\n var edge = node.inEdges[j];\n\n if (nextSourceNode.indexOf(edge.node1) < 0) {\n nextSourceNode.push(edge.node1);\n }\n }\n }\n\n remainNodes = nextSourceNode;\n nextSourceNode = [];\n ++nodeHeight;\n }\n\n zrUtil.each(nodes, function (node) {\n if (!isNodeDepth(node)) {\n node.setLayout({\n depth: Math.max(0, maxDepth - node.getLayout().skNodeHeight)\n }, true);\n }\n });\n } else if (nodeAlign === 'justify') {\n moveSinksRight(nodes, maxDepth);\n }\n}\n/**\n * All the node without outEgdes are assigned maximum x-position and\n * be aligned in the last column.\n *\n * @param nodes. node of sankey view.\n * @param maxDepth. use to assign to node without outEdges as x-position.\n */\n\n\nfunction moveSinksRight(nodes, maxDepth) {\n zrUtil.each(nodes, function (node) {\n if (!isNodeDepth(node) && !node.outEdges.length) {\n node.setLayout({\n depth: maxDepth\n }, true);\n }\n });\n}\n/**\n * Scale node x-position to the width\n *\n * @param nodes node of sankey view\n * @param kx multiple used to scale nodes\n */\n\n\nfunction scaleNodeBreadths(nodes, kx, orient) {\n zrUtil.each(nodes, function (node) {\n var nodeDepth = node.getLayout().depth * kx;\n orient === 'vertical' ? node.setLayout({\n y: nodeDepth\n }, true) : node.setLayout({\n x: nodeDepth\n }, true);\n });\n}\n/**\n * Using Gauss-Seidel iterations method to compute the node depth(y-position)\n *\n * @param nodes node of sankey view\n * @param edges edge of sankey view\n * @param height the whole height of the area to draw the view\n * @param nodeGap the vertical distance between two nodes\n * in the same column.\n * @param iterations the number of iterations for the algorithm\n */\n\n\nfunction computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient) {\n var nodesByBreadth = prepareNodesByBreadth(nodes, orient);\n initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient);\n resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);\n\n for (var alpha = 1; iterations > 0; iterations--) {\n // 0.99 is a experience parameter, ensure that each iterations of\n // changes as small as possible.\n alpha *= 0.99;\n relaxRightToLeft(nodesByBreadth, alpha, orient);\n resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);\n relaxLeftToRight(nodesByBreadth, alpha, orient);\n resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);\n }\n}\n\nfunction prepareNodesByBreadth(nodes, orient) {\n var nodesByBreadth = [];\n var keyAttr = orient === 'vertical' ? 'y' : 'x';\n var groupResult = groupData(nodes, function (node) {\n return node.getLayout()[keyAttr];\n });\n groupResult.keys.sort(function (a, b) {\n return a - b;\n });\n zrUtil.each(groupResult.keys, function (key) {\n nodesByBreadth.push(groupResult.buckets.get(key));\n });\n return nodesByBreadth;\n}\n/**\n * Compute the original y-position for each node\n */\n\n\nfunction initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient) {\n var minKy = Infinity;\n zrUtil.each(nodesByBreadth, function (nodes) {\n var n = nodes.length;\n var sum = 0;\n zrUtil.each(nodes, function (node) {\n sum += node.getLayout().value;\n });\n var ky = orient === 'vertical' ? (width - (n - 1) * nodeGap) / sum : (height - (n - 1) * nodeGap) / sum;\n\n if (ky < minKy) {\n minKy = ky;\n }\n });\n zrUtil.each(nodesByBreadth, function (nodes) {\n zrUtil.each(nodes, function (node, i) {\n var nodeDy = node.getLayout().value * minKy;\n\n if (orient === 'vertical') {\n node.setLayout({\n x: i\n }, true);\n node.setLayout({\n dx: nodeDy\n }, true);\n } else {\n node.setLayout({\n y: i\n }, true);\n node.setLayout({\n dy: nodeDy\n }, true);\n }\n });\n });\n zrUtil.each(edges, function (edge) {\n var edgeDy = +edge.getValue() * minKy;\n edge.setLayout({\n dy: edgeDy\n }, true);\n });\n}\n/**\n * Resolve the collision of initialized depth (y-position)\n */\n\n\nfunction resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) {\n var keyAttr = orient === 'vertical' ? 'x' : 'y';\n zrUtil.each(nodesByBreadth, function (nodes) {\n nodes.sort(function (a, b) {\n return a.getLayout()[keyAttr] - b.getLayout()[keyAttr];\n });\n var nodeX;\n var node;\n var dy;\n var y0 = 0;\n var n = nodes.length;\n var nodeDyAttr = orient === 'vertical' ? 'dx' : 'dy';\n\n for (var i = 0; i < n; i++) {\n node = nodes[i];\n dy = y0 - node.getLayout()[keyAttr];\n\n if (dy > 0) {\n nodeX = node.getLayout()[keyAttr] + dy;\n orient === 'vertical' ? node.setLayout({\n x: nodeX\n }, true) : node.setLayout({\n y: nodeX\n }, true);\n }\n\n y0 = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap;\n }\n\n var viewWidth = orient === 'vertical' ? width : height; // If the bottommost node goes outside the bounds, push it back up\n\n dy = y0 - nodeGap - viewWidth;\n\n if (dy > 0) {\n nodeX = node.getLayout()[keyAttr] - dy;\n orient === 'vertical' ? node.setLayout({\n x: nodeX\n }, true) : node.setLayout({\n y: nodeX\n }, true);\n y0 = nodeX;\n\n for (var i = n - 2; i >= 0; --i) {\n node = nodes[i];\n dy = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap - y0;\n\n if (dy > 0) {\n nodeX = node.getLayout()[keyAttr] - dy;\n orient === 'vertical' ? node.setLayout({\n x: nodeX\n }, true) : node.setLayout({\n y: nodeX\n }, true);\n }\n\n y0 = node.getLayout()[keyAttr];\n }\n }\n });\n}\n/**\n * Change the y-position of the nodes, except most the right side nodes\n * @param nodesByBreadth\n * @param alpha parameter used to adjust the nodes y-position\n */\n\n\nfunction relaxRightToLeft(nodesByBreadth, alpha, orient) {\n zrUtil.each(nodesByBreadth.slice().reverse(), function (nodes) {\n zrUtil.each(nodes, function (node) {\n if (node.outEdges.length) {\n var y = sum(node.outEdges, weightedTarget, orient) / sum(node.outEdges, getEdgeValue);\n\n if (isNaN(y)) {\n var len = node.outEdges.length;\n y = len ? sum(node.outEdges, centerTarget, orient) / len : 0;\n }\n\n if (orient === 'vertical') {\n var nodeX = node.getLayout().x + (y - center(node, orient)) * alpha;\n node.setLayout({\n x: nodeX\n }, true);\n } else {\n var nodeY = node.getLayout().y + (y - center(node, orient)) * alpha;\n node.setLayout({\n y: nodeY\n }, true);\n }\n }\n });\n });\n}\n\nfunction weightedTarget(edge, orient) {\n return center(edge.node2, orient) * edge.getValue();\n}\n\nfunction centerTarget(edge, orient) {\n return center(edge.node2, orient);\n}\n\nfunction weightedSource(edge, orient) {\n return center(edge.node1, orient) * edge.getValue();\n}\n\nfunction centerSource(edge, orient) {\n return center(edge.node1, orient);\n}\n\nfunction center(node, orient) {\n return orient === 'vertical' ? node.getLayout().x + node.getLayout().dx / 2 : node.getLayout().y + node.getLayout().dy / 2;\n}\n\nfunction getEdgeValue(edge) {\n return edge.getValue();\n}\n\nfunction sum(array, cb, orient) {\n var sum = 0;\n var len = array.length;\n var i = -1;\n\n while (++i < len) {\n var value = +cb(array[i], orient);\n\n if (!isNaN(value)) {\n sum += value;\n }\n }\n\n return sum;\n}\n/**\n * Change the y-position of the nodes, except most the left side nodes\n */\n\n\nfunction relaxLeftToRight(nodesByBreadth, alpha, orient) {\n zrUtil.each(nodesByBreadth, function (nodes) {\n zrUtil.each(nodes, function (node) {\n if (node.inEdges.length) {\n var y = sum(node.inEdges, weightedSource, orient) / sum(node.inEdges, getEdgeValue);\n\n if (isNaN(y)) {\n var len = node.inEdges.length;\n y = len ? sum(node.inEdges, centerSource, orient) / len : 0;\n }\n\n if (orient === 'vertical') {\n var nodeX = node.getLayout().x + (y - center(node, orient)) * alpha;\n node.setLayout({\n x: nodeX\n }, true);\n } else {\n var nodeY = node.getLayout().y + (y - center(node, orient)) * alpha;\n node.setLayout({\n y: nodeY\n }, true);\n }\n }\n });\n });\n}\n/**\n * Compute the depth(y-position) of each edge\n */\n\n\nfunction computeEdgeDepths(nodes, orient) {\n var keyAttr = orient === 'vertical' ? 'x' : 'y';\n zrUtil.each(nodes, function (node) {\n node.outEdges.sort(function (a, b) {\n return a.node2.getLayout()[keyAttr] - b.node2.getLayout()[keyAttr];\n });\n node.inEdges.sort(function (a, b) {\n return a.node1.getLayout()[keyAttr] - b.node1.getLayout()[keyAttr];\n });\n });\n zrUtil.each(nodes, function (node) {\n var sy = 0;\n var ty = 0;\n zrUtil.each(node.outEdges, function (edge) {\n edge.setLayout({\n sy: sy\n }, true);\n sy += edge.getLayout().dy;\n });\n zrUtil.each(node.inEdges, function (edge) {\n edge.setLayout({\n ty: ty\n }, true);\n ty += edge.getLayout().dy;\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport VisualMapping from '../../visual/VisualMapping.js';\nexport default function sankeyVisual(ecModel) {\n ecModel.eachSeriesByType('sankey', function (seriesModel) {\n var graph = seriesModel.getGraph();\n var nodes = graph.nodes;\n var edges = graph.edges;\n\n if (nodes.length) {\n var minValue_1 = Infinity;\n var maxValue_1 = -Infinity;\n zrUtil.each(nodes, function (node) {\n var nodeValue = node.getLayout().value;\n\n if (nodeValue < minValue_1) {\n minValue_1 = nodeValue;\n }\n\n if (nodeValue > maxValue_1) {\n maxValue_1 = nodeValue;\n }\n });\n zrUtil.each(nodes, function (node) {\n var mapping = new VisualMapping({\n type: 'color',\n mappingMethod: 'linear',\n dataExtent: [minValue_1, maxValue_1],\n visual: seriesModel.get('color')\n });\n var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value);\n var customColor = node.getModel().get(['itemStyle', 'color']);\n\n if (customColor != null) {\n node.setVisual('color', customColor);\n node.setVisual('style', {\n fill: customColor\n });\n } else {\n node.setVisual('color', mapValueToColor);\n node.setVisual('style', {\n fill: mapValueToColor\n });\n }\n });\n }\n\n if (edges.length) {\n zrUtil.each(edges, function (edge) {\n var edgeStyle = edge.getModel().get('lineStyle');\n edge.setVisual('style', edgeStyle);\n });\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport SankeyView from './SankeyView.js';\nimport SankeySeriesModel from './SankeySeries.js';\nimport sankeyLayout from './sankeyLayout.js';\nimport sankeyVisual from './sankeyVisual.js';\nexport function install(registers) {\n registers.registerChartView(SankeyView);\n registers.registerSeriesModel(SankeySeriesModel);\n registers.registerLayout(sankeyLayout);\n registers.registerVisual(sankeyVisual);\n registers.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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport createSeriesDataSimply from './createSeriesDataSimply.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { getDimensionTypeByAxis } from '../../data/helper/dimensionHelper.js';\nimport { makeSeriesEncodeForAxisCoordSys } from '../../data/helper/sourceHelper.js';\n\nvar WhiskerBoxCommonMixin =\n/** @class */\nfunction () {\n function WhiskerBoxCommonMixin() {}\n /**\n * @override\n */\n\n\n WhiskerBoxCommonMixin.prototype.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; // Clone a new data for next setOption({}) usage.\n // Avoid modifying current data will affect further update.\n\n if (data && addOrdinal) {\n var newOptionData_1 = [];\n zrUtil.each(data, function (item, index) {\n var newItem;\n\n if (zrUtil.isArray(item)) {\n newItem = item.slice(); // Modify current using data.\n\n item.unshift(index);\n } else if (zrUtil.isArray(item.value)) {\n newItem = zrUtil.extend({}, item);\n newItem.value = newItem.value.slice(); // Modify current using data.\n\n item.value.unshift(index);\n } else {\n newItem = item;\n }\n\n newOptionData_1.push(newItem);\n });\n option.data = newOptionData_1;\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 createSeriesDataSimply(this, {\n coordDimensions: coordDimensions,\n dimensionsCount: defaultValueDimensions.length + 1,\n encodeDefaulter: zrUtil.curry(makeSeriesEncodeForAxisCoordSys, coordDimensions, this)\n });\n };\n /**\n * If horizontal, base axis is x, otherwise y.\n * @override\n */\n\n\n WhiskerBoxCommonMixin.prototype.getBaseAxis = function () {\n var dim = this._baseAxisDim;\n return this.ecModel.getComponent(dim + 'Axis', this.get(dim + 'AxisIndex')).axis;\n };\n\n return WhiskerBoxCommonMixin;\n}();\n\n;\nexport { WhiskerBoxCommonMixin };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SeriesModel from '../../model/Series.js';\nimport { WhiskerBoxCommonMixin } from '../helper/whiskerBoxCommon.js';\nimport { mixin } from 'zrender/lib/core/util.js';\n\nvar BoxplotSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(BoxplotSeriesModel, _super);\n\n function BoxplotSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = BoxplotSeriesModel.type; // 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\n _this.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 _this.visualDrawType = 'stroke';\n return _this;\n }\n\n BoxplotSeriesModel.type = 'series.boxplot';\n BoxplotSeriesModel.dependencies = ['xAxis', 'yAxis', 'grid'];\n BoxplotSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n layout: null,\n boxWidth: [7, 50],\n itemStyle: {\n color: '#fff',\n borderWidth: 1\n },\n emphasis: {\n scale: true,\n itemStyle: {\n borderWidth: 2,\n shadowBlur: 5,\n shadowOffsetX: 1,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0,0,0,0.2)'\n }\n },\n animationDuration: 800\n };\n return BoxplotSeriesModel;\n}(SeriesModel);\n\nmixin(BoxplotSeriesModel, WhiskerBoxCommonMixin, true);\nexport default BoxplotSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport ChartView from '../../view/Chart.js';\nimport * as graphic from '../../util/graphic.js';\nimport { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';\nimport Path from 'zrender/lib/graphic/Path.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\n\nvar BoxplotView =\n/** @class */\nfunction (_super) {\n __extends(BoxplotView, _super);\n\n function BoxplotView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = BoxplotView.type;\n return _this;\n }\n\n BoxplotView.prototype.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 saveOldStyle(symbolEl);\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\n BoxplotView.prototype.remove = function (ecModel) {\n var group = this.group;\n var data = this._data;\n this._data = null;\n data && data.eachItemGraphicEl(function (el) {\n el && group.remove(el);\n });\n };\n\n BoxplotView.type = 'boxplot';\n return BoxplotView;\n}(ChartView);\n\nvar BoxPathShape =\n/** @class */\nfunction () {\n function BoxPathShape() {}\n\n return BoxPathShape;\n}();\n\nvar BoxPath =\n/** @class */\nfunction (_super) {\n __extends(BoxPath, _super);\n\n function BoxPath(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this.type = 'boxplotBoxPath';\n return _this;\n }\n\n BoxPath.prototype.getDefaultShape = function () {\n return new BoxPathShape();\n };\n\n BoxPath.prototype.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 return BoxPath;\n}(Path);\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 el.useStyle(data.getItemVisual(dataIndex, 'style'));\n el.style.strokeNoScale = true;\n el.z2 = 100;\n var itemModel = data.getItemModel(dataIndex);\n var emphasisModel = itemModel.getModel('emphasis');\n setStatesStylesFromModel(el, itemModel);\n toggleHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n}\n\nfunction transInit(points, dim, itemLayout) {\n return zrUtil.map(points, function (point) {\n point = point.slice();\n point[dim] = itemLayout.initBaseline;\n return point;\n });\n}\n\nexport default BoxplotView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { parsePercent } from '../../util/number.js';\nvar each = zrUtil.each;\nexport default function boxplotLayout(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\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 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_1 = 0;\n each(seriesModels, function (seriesModel) {\n maxDataCount_1 = Math.max(maxDataCount_1, seriesModel.getData().count());\n });\n var extent = baseAxis.getExtent();\n bandWidth = Math.abs(extent[1] - extent[0]) / maxDataCount_1;\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.mapDimensionsAll(coordDims[vDimIdx]);\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, false);\n addBodyEnd(ends, end4, true);\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, dim, dataIndex) {\n var val = data.get(dim, 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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { quantile, asc } from '../../util/number.js';\nimport { isFunction, isString } from 'zrender/lib/core/util.js';\n/**\n * See:\n * \n * \n *\n * Helper method for preparing data.\n *\n * @param rawData like\n * [\n * [12,232,443], (raw data set for the first box)\n * [3843,5545,1232], (raw data set for the second box)\n * ...\n * ]\n * @param opt.boundIQR=1.5 Data less than min bound is outlier.\n * default 1.5, means Q1 - 1.5 * (Q3 - Q1).\n * If 'none'/0 passed, min bound will not be used.\n */\n\nexport default function prepareBoxplotData(rawData, opt) {\n opt = opt || {};\n var boxData = [];\n var outliers = [];\n var boundIQR = opt.boundIQR;\n var useExtreme = boundIQR === 'none' || boundIQR === 0;\n\n for (var i = 0; i < rawData.length; i++) {\n var ascList = asc(rawData[i].slice());\n var Q1 = quantile(ascList, 0.25);\n var Q2 = quantile(ascList, 0.5);\n var Q3 = quantile(ascList, 0.75);\n var min = ascList[0];\n var max = ascList[ascList.length - 1];\n var bound = (boundIQR == null ? 1.5 : boundIQR) * (Q3 - Q1);\n var low = useExtreme ? min : Math.max(min, Q1 - bound);\n var high = useExtreme ? max : Math.min(max, Q3 + bound);\n var itemNameFormatter = opt.itemNameFormatter;\n var itemName = isFunction(itemNameFormatter) ? itemNameFormatter({\n value: i\n }) : isString(itemNameFormatter) ? itemNameFormatter.replace('{value}', i + '') : i + '';\n boxData.push([itemName, low, Q1, Q2, Q3, high]);\n\n for (var j = 0; j < ascList.length; j++) {\n var dataItem = ascList[j];\n\n if (dataItem < low || dataItem > high) {\n var outlier = [itemName, dataItem];\n outliers.push(outlier);\n }\n }\n }\n\n return {\n boxData: boxData,\n outliers: outliers\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport prepareBoxplotData from './prepareBoxplotData.js';\nimport { throwError, makePrintable } from '../../util/log.js';\nimport { SOURCE_FORMAT_ARRAY_ROWS } from '../../util/types.js';\nexport var boxplotTransform = {\n type: 'echarts:boxplot',\n transform: function transform(params) {\n var upstream = params.upstream;\n\n if (upstream.sourceFormat !== SOURCE_FORMAT_ARRAY_ROWS) {\n var errMsg = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('source data is not applicable for this boxplot transform. Expect number[][].');\n }\n\n throwError(errMsg);\n }\n\n var result = prepareBoxplotData(upstream.getRawData(), params.config);\n return [{\n dimensions: ['ItemName', 'Low', 'Q1', 'Q2', 'Q3', 'High'],\n data: result.boxData\n }, {\n data: result.outliers\n }];\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport BoxplotSeriesModel from './BoxplotSeries.js';\nimport BoxplotView from './BoxplotView.js';\nimport boxplotLayout from './boxplotLayout.js';\nimport { boxplotTransform } from './boxplotTransform.js';\nexport function install(registers) {\n registers.registerSeriesModel(BoxplotSeriesModel);\n registers.registerChartView(BoxplotView);\n registers.registerLayout(boxplotLayout);\n registers.registerTransform(boxplotTransform);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport ChartView from '../../view/Chart.js';\nimport * as graphic from '../../util/graphic.js';\nimport { setStatesStylesFromModel } from '../../util/states.js';\nimport Path from 'zrender/lib/graphic/Path.js';\nimport { createClipPath } from '../helper/createClipPathFromCoordSys.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\nvar SKIP_PROPS = ['color', 'borderColor'];\n\nvar CandlestickView =\n/** @class */\nfunction (_super) {\n __extends(CandlestickView, _super);\n\n function CandlestickView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = CandlestickView.type;\n return _this;\n }\n\n CandlestickView.prototype.render = function (seriesModel, ecModel, api) {\n // If there is clipPath created in large mode. Remove it.\n this.group.removeClipPath(); // Clear previously rendered progressive elements.\n\n this._progressiveEls = null;\n\n this._updateDrawMode(seriesModel);\n\n this._isLargeDraw ? this._renderLarge(seriesModel) : this._renderNormal(seriesModel);\n };\n\n CandlestickView.prototype.incrementalPrepareRender = function (seriesModel, ecModel, api) {\n this._clear();\n\n this._updateDrawMode(seriesModel);\n };\n\n CandlestickView.prototype.incrementalRender = function (params, seriesModel, ecModel, api) {\n this._progressiveEls = [];\n this._isLargeDraw ? this._incrementalRenderLarge(params, seriesModel) : this._incrementalRenderNormal(params, seriesModel);\n };\n\n CandlestickView.prototype.eachRendered = function (cb) {\n graphic.traverseElements(this._progressiveEls || this.group, cb);\n };\n\n CandlestickView.prototype._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\n CandlestickView.prototype._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 itemLayout = data.getItemLayout(newIdx);\n\n if (needsClip && isNormalBoxClipped(clipArea, itemLayout)) {\n return;\n }\n\n var 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 saveOldStyle(el);\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\n CandlestickView.prototype._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\n CandlestickView.prototype._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 itemLayout = data.getItemLayout(dataIndex);\n var el = createNormalBox(itemLayout, dataIndex);\n setBoxCommon(el, data, dataIndex, isSimpleBox);\n el.incremental = true;\n this.group.add(el);\n\n this._progressiveEls.push(el);\n }\n };\n\n CandlestickView.prototype._incrementalRenderLarge = function (params, seriesModel) {\n createLarge(seriesModel, this.group, this._progressiveEls, true);\n };\n\n CandlestickView.prototype.remove = function (ecModel) {\n this._clear();\n };\n\n CandlestickView.prototype._clear = function () {\n this.group.removeAll();\n this._data = null;\n };\n\n CandlestickView.type = 'candlestick';\n return CandlestickView;\n}(ChartView);\n\nvar NormalBoxPathShape =\n/** @class */\nfunction () {\n function NormalBoxPathShape() {}\n\n return NormalBoxPathShape;\n}();\n\nvar NormalBoxPath =\n/** @class */\nfunction (_super) {\n __extends(NormalBoxPath, _super);\n\n function NormalBoxPath(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this.type = 'normalCandlestickBox';\n return _this;\n }\n\n NormalBoxPath.prototype.getDefaultShape = function () {\n return new NormalBoxPathShape();\n };\n\n NormalBoxPath.prototype.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 return NormalBoxPath;\n}(Path);\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 el.useStyle(data.getItemVisual(dataIndex, 'style'));\n el.style.strokeNoScale = true;\n el.__simpleBox = isSimpleBox;\n setStatesStylesFromModel(el, itemModel);\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 LargeBoxPathShape =\n/** @class */\nfunction () {\n function LargeBoxPathShape() {}\n\n return LargeBoxPathShape;\n}();\n\nvar LargeBoxPath =\n/** @class */\nfunction (_super) {\n __extends(LargeBoxPath, _super);\n\n function LargeBoxPath(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this.type = 'largeCandlestickBox';\n return _this;\n }\n\n LargeBoxPath.prototype.getDefaultShape = function () {\n return new LargeBoxPathShape();\n };\n\n LargeBoxPath.prototype.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 return LargeBoxPath;\n}(Path);\n\nfunction createLarge(seriesModel, group, progressiveEls, 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 ignoreCoarsePointer: true\n });\n group.add(elP);\n var elN = new LargeBoxPath({\n shape: {\n points: largePoints\n },\n __sign: -1,\n ignoreCoarsePointer: true\n });\n group.add(elN);\n var elDoji = new LargeBoxPath({\n shape: {\n points: largePoints\n },\n __sign: 0,\n ignoreCoarsePointer: true\n });\n group.add(elDoji);\n setLargeStyle(1, elP, seriesModel, data);\n setLargeStyle(-1, elN, seriesModel, data);\n setLargeStyle(0, elDoji, seriesModel, data);\n\n if (incremental) {\n elP.incremental = true;\n elN.incremental = true;\n }\n\n if (progressiveEls) {\n progressiveEls.push(elP, elN);\n }\n}\n\nfunction setLargeStyle(sign, el, seriesModel, data) {\n // TODO put in visual?\n var borderColor = seriesModel.get(['itemStyle', sign > 0 ? 'borderColor' : 'borderColor0']) // Use color for border color by default.\n || seriesModel.get(['itemStyle', sign > 0 ? 'color' : 'color0']);\n\n if (sign === 0) {\n borderColor = seriesModel.get(['itemStyle', 'borderColorDoji']);\n } // Color must be excluded.\n // Because symbol provide setColor individually to set fill and stroke\n\n\n var itemStyle = seriesModel.getModel('itemStyle').getItemStyle(SKIP_PROPS);\n el.useStyle(itemStyle);\n el.style.fill = null;\n el.style.stroke = borderColor;\n}\n\nexport default CandlestickView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SeriesModel from '../../model/Series.js';\nimport { WhiskerBoxCommonMixin } from '../helper/whiskerBoxCommon.js';\nimport { mixin } from 'zrender/lib/core/util.js';\n\nvar CandlestickSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(CandlestickSeriesModel, _super);\n\n function CandlestickSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = CandlestickSeriesModel.type;\n _this.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 return _this;\n }\n /**\n * Get dimension for shadow in dataZoom\n * @return dimension name\n */\n\n\n CandlestickSeriesModel.prototype.getShadowDim = function () {\n return 'open';\n };\n\n CandlestickSeriesModel.prototype.brushSelector = function (dataIndex, data, selectors) {\n var itemLayout = data.getItemLayout(dataIndex);\n return itemLayout && selectors.rect(itemLayout.brushRect);\n };\n\n CandlestickSeriesModel.type = 'series.candlestick';\n CandlestickSeriesModel.dependencies = ['xAxis', 'yAxis', 'grid'];\n CandlestickSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n layout: null,\n clip: true,\n itemStyle: {\n color: '#eb5454',\n color0: '#47b262',\n borderColor: '#eb5454',\n borderColor0: '#47b262',\n borderColorDoji: null,\n // borderColor: '#d24040',\n // borderColor0: '#398f4f',\n borderWidth: 1\n },\n emphasis: {\n scale: true,\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 animationEasing: 'linear',\n animationDuration: 300\n };\n return CandlestickSeriesModel;\n}(SeriesModel);\n\nmixin(CandlestickSeriesModel, WhiskerBoxCommonMixin, true);\nexport default CandlestickSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nexport default function candlestickPreprocessor(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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport createRenderPlanner from '../helper/createRenderPlanner.js';\nimport { extend } from 'zrender/lib/core/util.js';\nvar positiveBorderColorQuery = ['itemStyle', 'borderColor'];\nvar negativeBorderColorQuery = ['itemStyle', 'borderColor0'];\nvar dojiBorderColorQuery = ['itemStyle', 'borderColorDoji'];\nvar positiveColorQuery = ['itemStyle', 'color'];\nvar negativeColorQuery = ['itemStyle', 'color0'];\nvar candlestickVisual = {\n seriesType: 'candlestick',\n plan: createRenderPlanner(),\n // For legend.\n performRawSeries: true,\n reset: function (seriesModel, ecModel) {\n function getColor(sign, model) {\n return model.get(sign > 0 ? positiveColorQuery : negativeColorQuery);\n }\n\n function getBorderColor(sign, model) {\n return model.get(sign === 0 ? dojiBorderColorQuery : sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery);\n } // Only visible series has each data be visual encoded\n\n\n if (ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n\n var isLargeRender = seriesModel.pipelineContext.large;\n return !isLargeRender && {\n progress: function (params, data) {\n var dataIndex;\n\n while ((dataIndex = params.next()) != null) {\n var itemModel = data.getItemModel(dataIndex);\n var sign = data.getItemLayout(dataIndex).sign;\n var style = itemModel.getItemStyle();\n style.fill = getColor(sign, itemModel);\n style.stroke = getBorderColor(sign, itemModel) || style.fill;\n var existsStyle = data.ensureUniqueItemVisual(dataIndex, 'style');\n extend(existsStyle, style);\n }\n }\n };\n }\n};\nexport default candlestickVisual;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { subPixelOptimize } from '../../util/graphic.js';\nimport createRenderPlanner from '../helper/createRenderPlanner.js';\nimport { parsePercent } from '../../util/number.js';\nimport { map, retrieve2 } from 'zrender/lib/core/util.js';\nimport { createFloat32Array } from '../../util/vendor.js';\nvar candlestickLayout = {\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 cDimI = data.getDimensionIndex(data.mapDimension(coordDims[cDimIdx]));\n var vDimsI = map(data.mapDimensionsAll(coordDims[vDimIdx]), data.getDimensionIndex, data);\n var openDimI = vDimsI[0];\n var closeDimI = vDimsI[1];\n var lowestDimI = vDimsI[2];\n var highestDimI = vDimsI[3];\n data.setLayout({\n candleWidth: candleWidth,\n // The value is experimented visually.\n isSimpleBox: candleWidth <= 1.3\n });\n\n if (cDimI < 0 || vDimsI.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 var store = data.getStore();\n\n while ((dataIndex = params.next()) != null) {\n var axisDimVal = store.get(cDimI, dataIndex);\n var openVal = store.get(openDimI, dataIndex);\n var closeVal = store.get(closeDimI, dataIndex);\n var lowestVal = store.get(lowestDimI, dataIndex);\n var highestVal = store.get(highestDimI, 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 var itemModel = data.getItemModel(dataIndex);\n var hasDojiColor = !!itemModel.get(['itemStyle', 'borderColorDoji']);\n data.setItemLayout(dataIndex, {\n sign: getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor),\n initBaseline: openVal > closeVal ? ocHighPoint[vDimIdx] : ocLowPoint[vDimIdx],\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 = createFloat32Array(params.count * 4);\n var offset = 0;\n var point;\n var tmpIn = [];\n var tmpOut = [];\n var dataIndex;\n var store = data.getStore();\n var hasDojiColor = !!seriesModel.get(['itemStyle', 'borderColorDoji']);\n\n while ((dataIndex = params.next()) != null) {\n var axisDimVal = store.get(cDimI, dataIndex);\n var openVal = store.get(openDimI, dataIndex);\n var closeVal = store.get(closeDimI, dataIndex);\n var lowestVal = store.get(lowestDimI, dataIndex);\n var highestVal = store.get(highestDimI, 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(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor);\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/**\n * Get the sign of a single data.\n *\n * @returns 0 for doji with hasDojiColor: true,\n * 1 for positive,\n * -1 for negative.\n */\n\nfunction getSign(store, dataIndex, openVal, closeVal, closeDimI, hasDojiColor) {\n var sign;\n\n if (openVal > closeVal) {\n sign = -1;\n } else if (openVal < closeVal) {\n sign = 1;\n } else {\n sign = hasDojiColor // When doji color is set, use it instead of color/color0.\n ? 0 : dataIndex > 0 // If close === open, compare with close of last record\n ? store.get(closeDimI, 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\nexport default 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\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport CandlestickView from './CandlestickView.js';\nimport CandlestickSeriesModel from './CandlestickSeries.js';\nimport preprocessor from './preprocessor.js';\nimport candlestickVisual from './candlestickVisual.js';\nimport candlestickLayout from './candlestickLayout.js';\nexport function install(registers) {\n registers.registerChartView(CandlestickView);\n registers.registerSeriesModel(CandlestickSeriesModel);\n registers.registerPreprocessor(preprocessor);\n registers.registerVisual(candlestickVisual);\n registers.registerLayout(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*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { createSymbol, normalizeSymbolOffset, normalizeSymbolSize } from '../../util/symbol.js';\nimport { Group } from '../../util/graphic.js';\nimport { enterEmphasis, leaveEmphasis, toggleHoverEmphasis } from '../../util/states.js';\nimport SymbolClz from './Symbol.js';\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\nvar EffectSymbol =\n/** @class */\nfunction (_super) {\n __extends(EffectSymbol, _super);\n\n function EffectSymbol(data, idx) {\n var _this = _super.call(this) || this;\n\n var symbol = new SymbolClz(data, idx);\n var rippleGroup = new Group();\n\n _this.add(symbol);\n\n _this.add(rippleGroup);\n\n _this.updateData(data, idx);\n\n return _this;\n }\n\n EffectSymbol.prototype.stopEffectAnimation = function () {\n this.childAt(1).removeAll();\n };\n\n EffectSymbol.prototype.startEffectAnimation = function (effectCfg) {\n var symbolType = effectCfg.symbolType;\n var color = effectCfg.color;\n var rippleNumber = effectCfg.rippleNumber;\n var rippleGroup = this.childAt(1);\n\n for (var i = 0; i < rippleNumber; 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 scaleX: 0.5,\n scaleY: 0.5\n });\n var delay = -i / rippleNumber * effectCfg.period + effectCfg.effectOffset;\n ripplePath.animate('', true).when(effectCfg.period, {\n scaleX: effectCfg.rippleScale / 2,\n scaleY: 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\n EffectSymbol.prototype.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', 'rippleNumber'];\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\n EffectSymbol.prototype.highlight = function () {\n enterEmphasis(this);\n };\n /**\n * Downplay symbol\n */\n\n\n EffectSymbol.prototype.downplay = function () {\n leaveEmphasis(this);\n };\n\n EffectSymbol.prototype.getSymbolType = function () {\n var symbol = this.childAt(0);\n return symbol && symbol.getSymbolType();\n };\n /**\n * Update symbol properties\n */\n\n\n EffectSymbol.prototype.updateData = function (data, idx) {\n var _this = this;\n\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 symbolStyle = data.getItemVisual(idx, 'style');\n var color = symbolStyle && symbolStyle.fill;\n var emphasisModel = itemModel.getModel('emphasis');\n rippleGroup.setScale(symbolSize);\n rippleGroup.traverse(function (ripplePath) {\n ripplePath.setStyle('fill', color);\n });\n var symbolOffset = normalizeSymbolOffset(data.getItemVisual(idx, 'symbolOffset'), symbolSize);\n\n if (symbolOffset) {\n rippleGroup.x = symbolOffset[0];\n rippleGroup.y = symbolOffset[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 = seriesModel.getShallow('z') || 0;\n effectCfg.zlevel = seriesModel.getShallow('zlevel') || 0;\n effectCfg.symbolType = symbolType;\n effectCfg.color = color;\n effectCfg.rippleEffectColor = itemModel.get(['rippleEffect', 'color']);\n effectCfg.rippleNumber = itemModel.get(['rippleEffect', 'number']);\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\n this.onHoverStateChange = function (toState) {\n if (toState === 'emphasis') {\n if (effectCfg.showEffectOn !== 'render') {\n _this.startEffectAnimation(effectCfg);\n }\n } else if (toState === 'normal') {\n if (effectCfg.showEffectOn !== 'render') {\n _this.stopEffectAnimation();\n }\n }\n };\n }\n\n this._effectCfg = effectCfg;\n toggleHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n };\n\n ;\n\n EffectSymbol.prototype.fadeOut = function (cb) {\n cb && cb();\n };\n\n ;\n return EffectSymbol;\n}(Group);\n\nexport default EffectSymbol;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SymbolDraw from '../helper/SymbolDraw.js';\nimport EffectSymbol from '../helper/EffectSymbol.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport pointsLayout from '../../layout/points.js';\nimport ChartView from '../../view/Chart.js';\n\nvar EffectScatterView =\n/** @class */\nfunction (_super) {\n __extends(EffectScatterView, _super);\n\n function EffectScatterView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = EffectScatterView.type;\n return _this;\n }\n\n EffectScatterView.prototype.init = function () {\n this._symbolDraw = new SymbolDraw(EffectSymbol);\n };\n\n EffectScatterView.prototype.render = function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var effectSymbolDraw = this._symbolDraw;\n effectSymbolDraw.updateData(data, {\n clipShape: this._getClipShape(seriesModel)\n });\n this.group.add(effectSymbolDraw.group);\n };\n\n EffectScatterView.prototype._getClipShape = function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n var clipArea = coordSys && coordSys.getArea && coordSys.getArea();\n return seriesModel.get('clip', true) ? clipArea : null;\n };\n\n EffectScatterView.prototype.updateTransform = function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n this.group.dirty();\n var res = pointsLayout('').reset(seriesModel, ecModel, api);\n\n if (res.progress) {\n res.progress({\n start: 0,\n end: data.count(),\n count: data.count()\n }, data);\n }\n\n this._symbolDraw.updateLayout();\n };\n\n EffectScatterView.prototype._updateGroupTransform = function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.getRoamTransform) {\n this.group.transform = matrix.clone(coordSys.getRoamTransform());\n this.group.decomposeTransform();\n }\n };\n\n EffectScatterView.prototype.remove = function (ecModel, api) {\n this._symbolDraw && this._symbolDraw.remove(true);\n };\n\n EffectScatterView.type = 'effectScatter';\n return EffectScatterView;\n}(ChartView);\n\nexport default EffectScatterView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport createSeriesData from '../helper/createSeriesData.js';\nimport SeriesModel from '../../model/Series.js';\n\nvar EffectScatterSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(EffectScatterSeriesModel, _super);\n\n function EffectScatterSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = EffectScatterSeriesModel.type;\n _this.hasSymbolVisual = true;\n return _this;\n }\n\n EffectScatterSeriesModel.prototype.getInitialData = function (option, ecModel) {\n return createSeriesData(null, this, {\n useEncodeDefaulter: true\n });\n };\n\n EffectScatterSeriesModel.prototype.brushSelector = function (dataIndex, data, selectors) {\n return selectors.point(data.getItemLayout(dataIndex));\n };\n\n EffectScatterSeriesModel.type = 'series.effectScatter';\n EffectScatterSeriesModel.dependencies = ['grid', 'polar'];\n EffectScatterSeriesModel.defaultOption = {\n coordinateSystem: 'cartesian2d',\n // zlevel: 0,\n z: 2,\n legendHoverLink: true,\n effectType: 'ripple',\n progressive: 0,\n // When to show the effect, option: 'render'|'emphasis'\n showEffectOn: 'render',\n clip: true,\n // Ripple effect config\n rippleEffect: {\n period: 4,\n // Scale of ripple\n scale: 2.5,\n // Brush type can be fill or stroke\n brushType: 'fill',\n // Ripple number\n number: 3\n },\n universalTransition: {\n divideShape: 'clone'\n },\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 // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2\n // symbolRotate: null, // 图形旋转控制\n // itemStyle: {\n // opacity: 1\n // }\n\n };\n return EffectScatterSeriesModel;\n}(SeriesModel);\n\nexport default EffectScatterSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport EffectScatterView from './EffectScatterView.js';\nimport EffectScatterSeriesModel from './EffectScatterSeries.js';\nimport layoutPoints from '../../layout/points.js';\nexport function install(registers) {\n registers.registerChartView(EffectScatterView);\n registers.registerSeriesModel(EffectScatterSeriesModel);\n registers.registerLayout(layoutPoints('effectScatter'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/**\n * Provide effect for line\n */\n\nimport * as graphic from '../../util/graphic.js';\nimport Line from './Line.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { createSymbol } from '../../util/symbol.js';\nimport * as vec2 from 'zrender/lib/core/vector.js';\nimport * as curveUtil from 'zrender/lib/core/curve.js';\n\nvar EffectLine =\n/** @class */\nfunction (_super) {\n __extends(EffectLine, _super);\n\n function EffectLine(lineData, idx, seriesScope) {\n var _this = _super.call(this) || this;\n\n _this.add(_this.createLine(lineData, idx, seriesScope));\n\n _this._updateEffectSymbol(lineData, idx);\n\n return _this;\n }\n\n EffectLine.prototype.createLine = function (lineData, idx, seriesScope) {\n return new Line(lineData, idx, seriesScope);\n };\n\n EffectLine.prototype._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 lineStyle = lineData.getItemVisual(idx, 'style');\n var color = effectModel.get('color') || lineStyle && lineStyle.stroke;\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.scaleX = size[0];\n symbol.scaleY = size[1];\n symbol.setColor(color);\n this._symbolType = symbolType;\n this._symbolScale = size;\n\n this._updateEffectAnimation(lineData, effectModel, idx);\n };\n\n EffectLine.prototype._updateEffectAnimation = function (lineData, effectModel, idx) {\n var symbol = this.childAt(1);\n\n if (!symbol) {\n return;\n }\n\n var points = lineData.getItemLayout(idx);\n var period = effectModel.get('period') * 1000;\n var loop = effectModel.get('loop');\n var roundTrip = effectModel.get('roundTrip');\n var constantSpeed = effectModel.get('constantSpeed');\n var delayExpr = zrUtil.retrieve(effectModel.get('delay'), function (idx) {\n return idx / lineData.count() * period / 3;\n }); // Ignore when updating\n\n symbol.ignore = true;\n\n this._updateAnimationPoints(symbol, points);\n\n if (constantSpeed > 0) {\n period = this._getLineLength(symbol) / constantSpeed * 1000;\n }\n\n if (period !== this._period || loop !== this._loop || roundTrip !== this._roundTrip) {\n symbol.stopAnimation();\n var delayNum = void 0;\n\n if (zrUtil.isFunction(delayExpr)) {\n delayNum = delayExpr(idx);\n } else {\n delayNum = delayExpr;\n }\n\n if (symbol.__t > 0) {\n delayNum = -period * symbol.__t;\n }\n\n this._animateSymbol(symbol, period, delayNum, loop, roundTrip);\n }\n\n this._period = period;\n this._loop = loop;\n this._roundTrip = roundTrip;\n };\n\n EffectLine.prototype._animateSymbol = function (symbol, period, delayNum, loop, roundTrip) {\n if (period > 0) {\n symbol.__t = 0;\n var self_1 = this;\n var animator = symbol.animate('', loop).when(roundTrip ? period * 2 : period, {\n __t: roundTrip ? 2 : 1\n }).delay(delayNum).during(function () {\n self_1._updateSymbolPosition(symbol);\n });\n\n if (!loop) {\n animator.done(function () {\n self_1.remove(symbol);\n });\n }\n\n animator.start();\n }\n };\n\n EffectLine.prototype._getLineLength = function (symbol) {\n // Not so accurate\n return vec2.dist(symbol.__p1, symbol.__cp1) + vec2.dist(symbol.__cp1, symbol.__p2);\n };\n\n EffectLine.prototype._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\n EffectLine.prototype.updateData = function (lineData, idx, seriesScope) {\n this.childAt(0).updateData(lineData, idx, seriesScope);\n\n this._updateEffectSymbol(lineData, idx);\n };\n\n EffectLine.prototype._updateSymbolPosition = function (symbol) {\n var p1 = symbol.__p1;\n var p2 = symbol.__p2;\n var cp1 = symbol.__cp1;\n var t = symbol.__t < 1 ? symbol.__t : 2 - symbol.__t;\n var pos = [symbol.x, symbol.y];\n var lastPos = pos.slice();\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 = symbol.__t < 1 ? quadraticDerivativeAt(p1[0], cp1[0], p2[0], t) : quadraticDerivativeAt(p2[0], cp1[0], p1[0], 1 - t);\n var ty = symbol.__t < 1 ? quadraticDerivativeAt(p1[1], cp1[1], p2[1], t) : quadraticDerivativeAt(p2[1], cp1[1], p1[1], 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 symbol.scaleY = vec2.dist(lastPos, pos) * 1.05; // 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 symbol.scaleY = 2 * vec2.dist(p1, pos);\n } else {\n symbol.scaleY = this._symbolScale[1];\n }\n }\n\n symbol.__lastT = symbol.__t;\n symbol.ignore = false;\n symbol.x = pos[0];\n symbol.y = pos[1];\n };\n\n EffectLine.prototype.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\n return EffectLine;\n}(graphic.Group);\n\nexport default EffectLine;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as graphic from '../../util/graphic.js';\nimport { toggleHoverEmphasis } from '../../util/states.js';\n\nvar Polyline =\n/** @class */\nfunction (_super) {\n __extends(Polyline, _super);\n\n function Polyline(lineData, idx, seriesScope) {\n var _this = _super.call(this) || this;\n\n _this._createPolyline(lineData, idx, seriesScope);\n\n return _this;\n }\n\n Polyline.prototype._createPolyline = function (lineData, idx, seriesScope) {\n // let seriesModel = lineData.hostModel;\n var points = lineData.getItemLayout(idx);\n var line = new graphic.Polyline({\n shape: {\n points: points\n }\n });\n this.add(line);\n\n this._updateCommonStl(lineData, idx, seriesScope);\n };\n\n ;\n\n Polyline.prototype.updateData = function (lineData, idx, seriesScope) {\n var seriesModel = lineData.hostModel;\n var line = this.childAt(0);\n var target = {\n shape: {\n points: lineData.getItemLayout(idx)\n }\n };\n graphic.updateProps(line, target, seriesModel, idx);\n\n this._updateCommonStl(lineData, idx, seriesScope);\n };\n\n ;\n\n Polyline.prototype._updateCommonStl = function (lineData, idx, seriesScope) {\n var line = this.childAt(0);\n var itemModel = lineData.getItemModel(idx);\n var emphasisLineStyle = seriesScope && seriesScope.emphasisLineStyle;\n var focus = seriesScope && seriesScope.focus;\n var blurScope = seriesScope && seriesScope.blurScope;\n var emphasisDisabled = seriesScope && seriesScope.emphasisDisabled;\n\n if (!seriesScope || lineData.hasItemOption) {\n var emphasisModel = itemModel.getModel('emphasis');\n emphasisLineStyle = emphasisModel.getModel('lineStyle').getLineStyle();\n emphasisDisabled = emphasisModel.get('disabled');\n focus = emphasisModel.get('focus');\n blurScope = emphasisModel.get('blurScope');\n }\n\n line.useStyle(lineData.getItemVisual(idx, 'style'));\n line.style.fill = null;\n line.style.strokeNoScale = true;\n var lineEmphasisState = line.ensureState('emphasis');\n lineEmphasisState.style = emphasisLineStyle;\n toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled);\n };\n\n ;\n\n Polyline.prototype.updateLayout = function (lineData, idx) {\n var polyline = this.childAt(0);\n polyline.setShape('points', lineData.getItemLayout(idx));\n };\n\n ;\n return Polyline;\n}(graphic.Group);\n\nexport default Polyline;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Polyline from './Polyline.js';\nimport EffectLine from './EffectLine.js';\nimport * as vec2 from 'zrender/lib/core/vector.js';\n\nvar EffectPolyline =\n/** @class */\nfunction (_super) {\n __extends(EffectPolyline, _super);\n\n function EffectPolyline() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this._lastFrame = 0;\n _this._lastFramePercent = 0;\n return _this;\n } // Override\n\n\n EffectPolyline.prototype.createLine = function (lineData, idx, seriesScope) {\n return new Polyline(lineData, idx, seriesScope);\n };\n\n ; // Override\n\n EffectPolyline.prototype._updateAnimationPoints = function (symbol, points) {\n this._points = points;\n var accLenArr = [0];\n var len = 0;\n\n for (var i = 1; i < points.length; i++) {\n var p1 = points[i - 1];\n var p2 = points[i];\n len += vec2.dist(p1, p2);\n accLenArr.push(len);\n }\n\n if (len === 0) {\n this._length = 0;\n return;\n }\n\n for (var i = 0; i < accLenArr.length; i++) {\n accLenArr[i] /= len;\n }\n\n this._offsets = accLenArr;\n this._length = len;\n };\n\n ; // Override\n\n EffectPolyline.prototype._getLineLength = function () {\n return this._length;\n };\n\n ; // Override\n\n EffectPolyline.prototype._updateSymbolPosition = function (symbol) {\n var t = symbol.__t < 1 ? symbol.__t : 2 - symbol.__t;\n var points = this._points;\n var offsets = this._offsets;\n var len = points.length;\n\n if (!offsets) {\n // Has length 0\n return;\n }\n\n var lastFrame = this._lastFrame;\n var frame;\n\n if (t < this._lastFramePercent) {\n // Start from the next frame\n // PENDING start from lastFrame ?\n var start = Math.min(lastFrame + 1, len - 1);\n\n for (frame = start; frame >= 0; frame--) {\n if (offsets[frame] <= t) {\n break;\n }\n } // PENDING really need to do this ?\n\n\n frame = Math.min(frame, len - 2);\n } else {\n for (frame = lastFrame; frame < len; frame++) {\n if (offsets[frame] > t) {\n break;\n }\n }\n\n frame = Math.min(frame - 1, len - 2);\n }\n\n var p = (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame]);\n var p0 = points[frame];\n var p1 = points[frame + 1];\n symbol.x = p0[0] * (1 - p) + p * p1[0];\n symbol.y = p0[1] * (1 - p) + p * p1[1];\n var tx = symbol.__t < 1 ? p1[0] - p0[0] : p0[0] - p1[0];\n var ty = symbol.__t < 1 ? p1[1] - p0[1] : p0[1] - p1[1];\n symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;\n this._lastFrame = frame;\n this._lastFramePercent = t;\n symbol.ignore = false;\n };\n\n ;\n return EffectPolyline;\n}(EffectLine);\n\nexport default EffectPolyline;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\"; // TODO Batch by color\n\nimport * as graphic from '../../util/graphic.js';\nimport * as lineContain from 'zrender/lib/contain/line.js';\nimport * as quadraticContain from 'zrender/lib/contain/quadratic.js';\nimport { getECData } from '../../util/innerStore.js';\n\nvar LargeLinesPathShape =\n/** @class */\nfunction () {\n function LargeLinesPathShape() {\n this.polyline = false;\n this.curveness = 0;\n this.segs = [];\n }\n\n return LargeLinesPathShape;\n}();\n\nvar LargeLinesPath =\n/** @class */\nfunction (_super) {\n __extends(LargeLinesPath, _super);\n\n function LargeLinesPath(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this._off = 0;\n _this.hoverDataIdx = -1;\n return _this;\n }\n\n LargeLinesPath.prototype.reset = function () {\n this.notClear = false;\n this._off = 0;\n };\n\n LargeLinesPath.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n\n LargeLinesPath.prototype.getDefaultShape = function () {\n return new LargeLinesPathShape();\n };\n\n LargeLinesPath.prototype.buildPath = function (ctx, shape) {\n var segs = shape.segs;\n var curveness = shape.curveness;\n var i;\n\n if (shape.polyline) {\n for (i = this._off; i < segs.length;) {\n var count = segs[i++];\n\n if (count > 0) {\n ctx.moveTo(segs[i++], segs[i++]);\n\n for (var k = 1; k < count; k++) {\n ctx.lineTo(segs[i++], segs[i++]);\n }\n }\n }\n } else {\n for (i = this._off; i < segs.length;) {\n var x0 = segs[i++];\n var y0 = segs[i++];\n var x1 = segs[i++];\n var y1 = segs[i++];\n ctx.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 ctx.quadraticCurveTo(x2, y2, x1, y1);\n } else {\n ctx.lineTo(x1, y1);\n }\n }\n }\n\n if (this.incremental) {\n this._off = i;\n this.notClear = true;\n }\n };\n\n LargeLinesPath.prototype.findDataIndex = function (x, y) {\n var shape = this.shape;\n var segs = shape.segs;\n var curveness = shape.curveness;\n var lineWidth = this.style.lineWidth;\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, lineWidth, x, y)) {\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, lineWidth, x, y)) {\n return dataIndex;\n }\n } else {\n if (lineContain.containStroke(x0, y0, x1, y1, lineWidth, x, y)) {\n return dataIndex;\n }\n }\n\n dataIndex++;\n }\n }\n\n return -1;\n };\n\n LargeLinesPath.prototype.contain = function (x, y) {\n var localPos = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n x = localPos[0];\n y = localPos[1];\n\n if (rect.contain(x, y)) {\n // Cache found data index.\n var dataIdx = this.hoverDataIdx = this.findDataIndex(x, y);\n return dataIdx >= 0;\n }\n\n this.hoverDataIdx = -1;\n return false;\n };\n\n LargeLinesPath.prototype.getBoundingRect = function () {\n // Ignore stroke for large symbol draw.\n var rect = this._rect;\n\n if (!rect) {\n var shape = this.shape;\n var points = shape.segs;\n var minX = Infinity;\n var minY = Infinity;\n var maxX = -Infinity;\n var maxY = -Infinity;\n\n for (var i = 0; i < points.length;) {\n var x = points[i++];\n var y = points[i++];\n minX = Math.min(x, minX);\n maxX = Math.max(x, maxX);\n minY = Math.min(y, minY);\n maxY = Math.max(y, maxY);\n }\n\n rect = this._rect = new graphic.BoundingRect(minX, minY, maxX, maxY);\n }\n\n return rect;\n };\n\n return LargeLinesPath;\n}(graphic.Path);\n\nvar LargeLineDraw =\n/** @class */\nfunction () {\n function LargeLineDraw() {\n this.group = new graphic.Group();\n }\n /**\n * Update symbols draw by new data\n */\n\n\n LargeLineDraw.prototype.updateData = function (data) {\n this._clear();\n\n var lineEl = this._create();\n\n lineEl.setShape({\n segs: data.getLayout('linesPoints')\n });\n\n this._setCommon(lineEl, data);\n };\n\n ;\n /**\n * @override\n */\n\n LargeLineDraw.prototype.incrementalPrepareUpdate = function (data) {\n this.group.removeAll();\n\n this._clear();\n };\n\n ;\n /**\n * @override\n */\n\n LargeLineDraw.prototype.incrementalUpdate = function (taskParams, data) {\n var lastAdded = this._newAdded[0];\n var linePoints = data.getLayout('linesPoints');\n var oldSegs = lastAdded && lastAdded.shape.segs; // Merging the exists. Each element has 1e4 points.\n // Consider the performance balance between too much elements and too much points in one shape(may affect hover optimization)\n\n if (oldSegs && oldSegs.length < 2e4) {\n var oldLen = oldSegs.length;\n var newSegs = new Float32Array(oldLen + linePoints.length); // Concat two array\n\n newSegs.set(oldSegs);\n newSegs.set(linePoints, oldLen);\n lastAdded.setShape({\n segs: newSegs\n });\n } else {\n // Clear\n this._newAdded = [];\n\n var lineEl = this._create();\n\n lineEl.incremental = true;\n lineEl.setShape({\n segs: linePoints\n });\n\n this._setCommon(lineEl, data);\n\n lineEl.__startIndex = taskParams.start;\n }\n };\n /**\n * @override\n */\n\n\n LargeLineDraw.prototype.remove = function () {\n this._clear();\n };\n\n LargeLineDraw.prototype.eachRendered = function (cb) {\n this._newAdded[0] && cb(this._newAdded[0]);\n };\n\n LargeLineDraw.prototype._create = function () {\n var lineEl = new LargeLinesPath({\n cursor: 'default',\n ignoreCoarsePointer: true\n });\n\n this._newAdded.push(lineEl);\n\n this.group.add(lineEl);\n return lineEl;\n };\n\n LargeLineDraw.prototype._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 style = data.getVisual('style');\n\n if (style && style.stroke) {\n lineEl.setStyle('stroke', style.stroke);\n }\n\n lineEl.setStyle('fill', null);\n var ecData = getECData(lineEl); // Enable tooltip\n // PENDING May have performance issue when path is extremely large\n\n ecData.seriesIndex = hostModel.seriesIndex;\n lineEl.on('mousemove', function (e) {\n ecData.dataIndex = null;\n var dataIndex = lineEl.hoverDataIdx;\n\n if (dataIndex > 0) {\n // Provide dataIndex for tooltip\n ecData.dataIndex = dataIndex + lineEl.__startIndex;\n }\n });\n };\n\n ;\n\n LargeLineDraw.prototype._clear = function () {\n this._newAdded = [];\n this.group.removeAll();\n };\n\n ;\n return LargeLineDraw;\n}();\n\nexport default LargeLineDraw;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\nimport createRenderPlanner from '../helper/createRenderPlanner.js';\nimport { error } from '../../util/log.js';\nvar linesLayout = {\n seriesType: 'lines',\n plan: createRenderPlanner(),\n reset: function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (!coordSys) {\n if (process.env.NODE_ENV !== 'production') {\n error('The lines series must have a coordinate system.');\n }\n\n return;\n }\n\n var isPolyline = seriesModel.get('polyline');\n var isLarge = seriesModel.pipelineContext.large;\n return {\n progress: function (params, lineData) {\n var lineCoords = [];\n\n if (isLarge) {\n var points = void 0;\n var segCount = params.end - params.start;\n\n if (isPolyline) {\n var totalCoordsCount = 0;\n\n for (var i = params.start; i < params.end; i++) {\n totalCoordsCount += seriesModel.getLineCoordsCount(i);\n }\n\n points = new Float32Array(segCount + totalCoordsCount * 2);\n } else {\n points = new Float32Array(segCount * 4);\n }\n\n var offset = 0;\n var pt = [];\n\n for (var i = params.start; i < params.end; i++) {\n var len = seriesModel.getLineCoords(i, lineCoords);\n\n if (isPolyline) {\n points[offset++] = len;\n }\n\n for (var k = 0; k < len; k++) {\n pt = coordSys.dataToPoint(lineCoords[k], false, pt);\n points[offset++] = pt[0];\n points[offset++] = pt[1];\n }\n }\n\n lineData.setLayout('linesPoints', points);\n } else {\n for (var i = params.start; i < params.end; i++) {\n var itemModel = lineData.getItemModel(i);\n var len = seriesModel.getLineCoords(i, lineCoords);\n var pts = [];\n\n if (isPolyline) {\n for (var j = 0; j < len; j++) {\n pts.push(coordSys.dataToPoint(lineCoords[j]));\n }\n } else {\n pts[0] = coordSys.dataToPoint(lineCoords[0]);\n pts[1] = coordSys.dataToPoint(lineCoords[1]);\n var curveness = itemModel.get(['lineStyle', 'curveness']);\n\n if (+curveness) {\n pts[2] = [(pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness, (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] - pts[0][0]) * curveness];\n }\n }\n\n lineData.setItemLayout(i, pts);\n }\n }\n }\n };\n }\n};\nexport default linesLayout;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport LineDraw from '../helper/LineDraw.js';\nimport EffectLine from '../helper/EffectLine.js';\nimport Line from '../helper/Line.js';\nimport Polyline from '../helper/Polyline.js';\nimport EffectPolyline from '../helper/EffectPolyline.js';\nimport LargeLineDraw from '../helper/LargeLineDraw.js';\nimport linesLayout from './linesLayout.js';\nimport { createClipPath } from '../helper/createClipPathFromCoordSys.js';\nimport ChartView from '../../view/Chart.js';\n\nvar LinesView =\n/** @class */\nfunction (_super) {\n __extends(LinesView, _super);\n\n function LinesView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = LinesView.type;\n return _this;\n }\n\n LinesView.prototype.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 > 0) {\n if (!isSvg) {\n zr.configLayer(zlevel, {\n motionBlur: true,\n lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0)\n });\n } else if (process.env.NODE_ENV !== 'production') {\n console.warn('SVG render mode doesn\\'t support lines with trail effect');\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\n LinesView.prototype.incrementalPrepareRender = function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n\n var lineDraw = this._updateLineDraw(data, seriesModel);\n\n lineDraw.incrementalPrepareUpdate(data);\n\n this._clearLayer(api);\n\n this._finished = false;\n };\n\n LinesView.prototype.incrementalRender = function (taskParams, seriesModel, ecModel) {\n this._lineDraw.incrementalUpdate(taskParams, seriesModel.getData());\n\n this._finished = taskParams.end === seriesModel.getData().count();\n };\n\n LinesView.prototype.eachRendered = function (cb) {\n this._lineDraw && this._lineDraw.eachRendered(cb);\n };\n\n LinesView.prototype.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, ecModel, api);\n\n if (res.progress) {\n res.progress({\n start: 0,\n end: data.count(),\n count: data.count()\n }, data);\n } // Not in large mode\n\n\n this._lineDraw.updateLayout();\n\n this._clearLayer(api);\n }\n };\n\n LinesView.prototype._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 (process.env.NODE_ENV !== 'production') {\n if (hasEffect && isLargeDraw) {\n console.warn('Large lines not support effect');\n }\n }\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 }\n\n this.group.add(lineDraw.group);\n return lineDraw;\n };\n\n LinesView.prototype._showEffect = function (seriesModel) {\n return !!seriesModel.get(['effect', 'show']);\n };\n\n LinesView.prototype._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\n LinesView.prototype.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\n LinesView.prototype.dispose = function (ecModel, api) {\n this.remove(ecModel, api);\n };\n\n LinesView.type = 'lines';\n return LinesView;\n}(ChartView);\n\nexport default LinesView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/* global Uint32Array, Float64Array, Float32Array */\n\nimport SeriesModel from '../../model/Series.js';\nimport SeriesData from '../../data/SeriesData.js';\nimport { concatArray, mergeAll, map, isNumber } from 'zrender/lib/core/util.js';\nimport CoordinateSystem from '../../core/CoordinateSystem.js';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup.js';\nvar Uint32Arr = typeof Uint32Array === 'undefined' ? Array : Uint32Array;\nvar Float64Arr = typeof Float64Array === 'undefined' ? Array : Float64Array;\n\nfunction compatEc2(seriesOpt) {\n var data = seriesOpt.data;\n\n if (data && data[0] && data[0][0] && data[0][0].coord) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Lines data configuration has been changed to' + ' { coords:[[1,2],[2,3]] }');\n }\n\n seriesOpt.data = map(data, function (itemOpt) {\n var coords = [itemOpt[0].coord, itemOpt[1].coord];\n var target = {\n coords: coords\n };\n\n if (itemOpt[0].name) {\n target.fromName = itemOpt[0].name;\n }\n\n if (itemOpt[1].name) {\n target.toName = itemOpt[1].name;\n }\n\n return mergeAll([target, itemOpt[0], itemOpt[1]]);\n });\n }\n}\n\nvar LinesSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(LinesSeriesModel, _super);\n\n function LinesSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = LinesSeriesModel.type;\n _this.visualStyleAccessPath = 'lineStyle';\n _this.visualDrawType = 'stroke';\n return _this;\n }\n\n LinesSeriesModel.prototype.init = function (option) {\n // The input data may be null/undefined.\n option.data = option.data || []; // Not using preprocessor because mergeOption may not have series.type\n\n compatEc2(option);\n\n var result = this._processFlatCoordsArray(option.data);\n\n this._flatCoords = result.flatCoords;\n this._flatCoordsOffset = result.flatCoordsOffset;\n\n if (result.flatCoords) {\n option.data = new Float32Array(result.count);\n }\n\n _super.prototype.init.apply(this, arguments);\n };\n\n LinesSeriesModel.prototype.mergeOption = function (option) {\n compatEc2(option);\n\n if (option.data) {\n // Only update when have option data to merge.\n var result = this._processFlatCoordsArray(option.data);\n\n this._flatCoords = result.flatCoords;\n this._flatCoordsOffset = result.flatCoordsOffset;\n\n if (result.flatCoords) {\n option.data = new Float32Array(result.count);\n }\n }\n\n _super.prototype.mergeOption.apply(this, arguments);\n };\n\n LinesSeriesModel.prototype.appendData = function (params) {\n var result = this._processFlatCoordsArray(params.data);\n\n if (result.flatCoords) {\n if (!this._flatCoords) {\n this._flatCoords = result.flatCoords;\n this._flatCoordsOffset = result.flatCoordsOffset;\n } else {\n this._flatCoords = concatArray(this._flatCoords, result.flatCoords);\n this._flatCoordsOffset = concatArray(this._flatCoordsOffset, result.flatCoordsOffset);\n }\n\n params.data = new Float32Array(result.count);\n }\n\n this.getRawData().appendData(params.data);\n };\n\n LinesSeriesModel.prototype._getCoordsFromItemModel = function (idx) {\n var itemModel = this.getData().getItemModel(idx);\n var coords = itemModel.option instanceof Array ? itemModel.option : itemModel.getShallow('coords');\n\n if (process.env.NODE_ENV !== 'production') {\n if (!(coords instanceof Array && coords.length > 0 && coords[0] instanceof Array)) {\n throw new Error('Invalid coords ' + JSON.stringify(coords) + '. Lines must have 2d coords array in data item.');\n }\n }\n\n return coords;\n };\n\n LinesSeriesModel.prototype.getLineCoordsCount = function (idx) {\n if (this._flatCoordsOffset) {\n return this._flatCoordsOffset[idx * 2 + 1];\n } else {\n return this._getCoordsFromItemModel(idx).length;\n }\n };\n\n LinesSeriesModel.prototype.getLineCoords = function (idx, out) {\n if (this._flatCoordsOffset) {\n var offset = this._flatCoordsOffset[idx * 2];\n var len = this._flatCoordsOffset[idx * 2 + 1];\n\n for (var i = 0; i < len; i++) {\n out[i] = out[i] || [];\n out[i][0] = this._flatCoords[offset + i * 2];\n out[i][1] = this._flatCoords[offset + i * 2 + 1];\n }\n\n return len;\n } else {\n var coords = this._getCoordsFromItemModel(idx);\n\n for (var i = 0; i < coords.length; i++) {\n out[i] = out[i] || [];\n out[i][0] = coords[i][0];\n out[i][1] = coords[i][1];\n }\n\n return coords.length;\n }\n };\n\n LinesSeriesModel.prototype._processFlatCoordsArray = function (data) {\n var startOffset = 0;\n\n if (this._flatCoords) {\n startOffset = this._flatCoords.length;\n } // Stored as a typed array. In format\n // Points Count(2) | x | y | x | y | Points Count(3) | x | y | x | y | x | y |\n\n\n if (isNumber(data[0])) {\n var len = data.length; // Store offset and len of each segment\n\n var coordsOffsetAndLenStorage = new Uint32Arr(len);\n var coordsStorage = new Float64Arr(len);\n var coordsCursor = 0;\n var offsetCursor = 0;\n var dataCount = 0;\n\n for (var i = 0; i < len;) {\n dataCount++;\n var count = data[i++]; // Offset\n\n coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor + startOffset; // Len\n\n coordsOffsetAndLenStorage[offsetCursor++] = count;\n\n for (var k = 0; k < count; k++) {\n var x = data[i++];\n var y = data[i++];\n coordsStorage[coordsCursor++] = x;\n coordsStorage[coordsCursor++] = y;\n\n if (i > len) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('Invalid data format.');\n }\n }\n }\n }\n\n return {\n flatCoordsOffset: new Uint32Array(coordsOffsetAndLenStorage.buffer, 0, offsetCursor),\n flatCoords: coordsStorage,\n count: dataCount\n };\n }\n\n return {\n flatCoordsOffset: null,\n flatCoords: null,\n count: data.length\n };\n };\n\n LinesSeriesModel.prototype.getInitialData = function (option, ecModel) {\n if (process.env.NODE_ENV !== 'production') {\n var CoordSys = CoordinateSystem.get(option.coordinateSystem);\n\n if (!CoordSys) {\n throw new Error('Unknown coordinate system ' + option.coordinateSystem);\n }\n }\n\n var lineData = new SeriesData(['value'], this);\n lineData.hasItemOption = false;\n lineData.initData(option.data, [], function (dataItem, dimName, dataIndex, dimIndex) {\n // dataItem is simply coords\n if (dataItem instanceof Array) {\n return NaN;\n } else {\n lineData.hasItemOption = true;\n var value = dataItem.value;\n\n if (value != null) {\n return value instanceof Array ? value[dimIndex] : value;\n }\n }\n });\n return lineData;\n };\n\n LinesSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n var data = this.getData();\n var itemModel = data.getItemModel(dataIndex);\n var name = itemModel.get('name');\n\n if (name) {\n return name;\n }\n\n var fromName = itemModel.get('fromName');\n var toName = itemModel.get('toName');\n var nameArr = [];\n fromName != null && nameArr.push(fromName);\n toName != null && nameArr.push(toName);\n return createTooltipMarkup('nameValue', {\n name: nameArr.join(' > ')\n });\n };\n\n LinesSeriesModel.prototype.preventIncremental = function () {\n return !!this.get(['effect', 'show']);\n };\n\n LinesSeriesModel.prototype.getProgressive = function () {\n var progressive = this.option.progressive;\n\n if (progressive == null) {\n return this.option.large ? 1e4 : this.get('progressive');\n }\n\n return progressive;\n };\n\n LinesSeriesModel.prototype.getProgressiveThreshold = function () {\n var progressiveThreshold = this.option.progressiveThreshold;\n\n if (progressiveThreshold == null) {\n return this.option.large ? 2e4 : this.get('progressiveThreshold');\n }\n\n return progressiveThreshold;\n };\n\n LinesSeriesModel.prototype.getZLevelKey = function () {\n var effectModel = this.getModel('effect');\n var trailLength = effectModel.get('trailLength');\n return this.getData().count() > this.getProgressiveThreshold() // Each progressive series has individual key.\n ? this.id : effectModel.get('show') && trailLength > 0 ? trailLength + '' : '';\n };\n\n LinesSeriesModel.type = 'series.lines';\n LinesSeriesModel.dependencies = ['grid', 'polar', 'geo', 'calendar'];\n LinesSeriesModel.defaultOption = {\n coordinateSystem: 'geo',\n // zlevel: 0,\n z: 2,\n legendHoverLink: true,\n // Cartesian coordinate system\n xAxisIndex: 0,\n yAxisIndex: 0,\n symbol: ['none', 'none'],\n symbolSize: [10, 10],\n // Geo coordinate system\n geoIndex: 0,\n effect: {\n show: false,\n period: 4,\n constantSpeed: 0,\n symbol: 'circle',\n symbolSize: 3,\n loop: true,\n trailLength: 0.2\n },\n large: false,\n // Available when large is true\n largeThreshold: 2000,\n polyline: false,\n clip: true,\n label: {\n show: false,\n position: 'end' // distance: 5,\n // formatter: 标签文本格式器,同Tooltip.formatter,不支持异步回调\n\n },\n lineStyle: {\n opacity: 0.5\n }\n };\n return LinesSeriesModel;\n}(SeriesModel);\n\nexport default LinesSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction normalize(a) {\n if (!(a instanceof Array)) {\n a = [a, a];\n }\n\n return a;\n}\n\nvar linesVisual = {\n seriesType: 'lines',\n reset: function (seriesModel) {\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\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 symbolType[0] && data.setItemVisual(idx, 'fromSymbol', symbolType[0]);\n symbolType[1] && data.setItemVisual(idx, 'toSymbol', symbolType[1]);\n symbolSize[0] && data.setItemVisual(idx, 'fromSymbolSize', symbolSize[0]);\n symbolSize[1] && data.setItemVisual(idx, 'toSymbolSize', symbolSize[1]);\n }\n\n return {\n dataEach: data.hasItemOption ? dataEach : null\n };\n }\n};\nexport default 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/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport LinesView from './LinesView.js';\nimport LinesSeriesModel from './LinesSeries.js';\nimport linesLayout from './linesLayout.js';\nimport linesVisual from './linesVisual.js';\nexport function install(registers) {\n registers.registerChartView(LinesView);\n registers.registerSeriesModel(LinesSeriesModel);\n registers.registerLayout(linesLayout);\n registers.registerVisual(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*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Uint8ClampedArray */\nimport { platformApi } from 'zrender/lib/core/platform.js';\nvar GRADIENT_LEVELS = 256;\n\nvar HeatmapLayer =\n/** @class */\nfunction () {\n function HeatmapLayer() {\n this.blurSize = 30;\n this.pointSize = 20;\n this.maxOpacity = 1;\n this.minOpacity = 0;\n this._gradientPixels = {\n inRange: null,\n outOfRange: null\n };\n var canvas = platformApi.createCanvas();\n this.canvas = canvas;\n }\n /**\n * Renders Heatmap and returns the rendered canvas\n * @param data array of data, each has x, y, value\n * @param width canvas width\n * @param height canvas height\n */\n\n\n HeatmapLayer.prototype.update = function (data, width, height, normalize, colorFunc, isInRange) {\n var brush = this._getBrush();\n\n var gradientInRange = this._getGradient(colorFunc, 'inRange');\n\n var gradientOutOfRange = this._getGradient(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 * get canvas of a black circle brush used for canvas to draw later\n */\n\n\n HeatmapLayer.prototype._getBrush = function () {\n var brushCanvas = this._brushCanvas || (this._brushCanvas = platformApi.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 * get gradient color map\n * @private\n */\n\n\n HeatmapLayer.prototype._getGradient = function (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\n return HeatmapLayer;\n}();\n\nexport default HeatmapLayer;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as graphic from '../../util/graphic.js';\nimport { toggleHoverEmphasis } from '../../util/states.js';\nimport HeatmapLayer from './HeatmapLayer.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport ChartView from '../../view/Chart.js';\nimport { isCoordinateSystemType } from '../../coord/CoordinateSystem.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\n\nfunction getIsInPiecewiseRange(dataExtent, pieceList, selected) {\n var dataSpan = dataExtent[1] - dataExtent[0];\n pieceList = zrUtil.map(pieceList, function (piece) {\n return {\n interval: [(piece.interval[0] - dataExtent[0]) / dataSpan, (piece.interval[1] - dataExtent[0]) / dataSpan]\n };\n });\n var len = pieceList.length;\n var lastIndex = 0;\n return function (val) {\n var i; // Try to find in the location of the last found\n\n for (i = lastIndex; i < len; i++) {\n var interval = pieceList[i].interval;\n\n if (interval[0] <= val && val <= interval[1]) {\n lastIndex = i;\n break;\n }\n }\n\n if (i === len) {\n // Not found, back interation\n for (i = lastIndex - 1; i >= 0; i--) {\n var interval = pieceList[i].interval;\n\n if (interval[0] <= val && val <= interval[1]) {\n lastIndex = i;\n break;\n }\n }\n }\n\n return i >= 0 && i < len && selected[i];\n };\n}\n\nfunction getIsInContinuousRange(dataExtent, range) {\n var dataSpan = dataExtent[1] - dataExtent[0];\n range = [(range[0] - dataExtent[0]) / dataSpan, (range[1] - dataExtent[0]) / dataSpan];\n return function (val) {\n return val >= range[0] && val <= range[1];\n };\n}\n\nfunction isGeoCoordSys(coordSys) {\n var dimensions = coordSys.dimensions; // Not use coordSys.type === 'geo' because coordSys maybe extended\n\n return dimensions[0] === 'lng' && dimensions[1] === 'lat';\n}\n\nvar HeatmapView =\n/** @class */\nfunction (_super) {\n __extends(HeatmapView, _super);\n\n function HeatmapView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = HeatmapView.type;\n return _this;\n }\n\n HeatmapView.prototype.render = function (seriesModel, ecModel, api) {\n var visualMapOfThisSeries;\n ecModel.eachComponent('visualMap', function (visualMap) {\n visualMap.eachTargetSeries(function (targetSeries) {\n if (targetSeries === seriesModel) {\n visualMapOfThisSeries = visualMap;\n }\n });\n });\n\n if (process.env.NODE_ENV !== 'production') {\n if (!visualMapOfThisSeries) {\n throw new Error('Heatmap must use with visualMap');\n }\n } // Clear previously rendered progressive elements.\n\n\n this._progressiveEls = null;\n this.group.removeAll();\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys.type === 'cartesian2d' || coordSys.type === 'calendar') {\n this._renderOnCartesianAndCalendar(seriesModel, api, 0, seriesModel.getData().count());\n } else if (isGeoCoordSys(coordSys)) {\n this._renderOnGeo(coordSys, seriesModel, visualMapOfThisSeries, api);\n }\n };\n\n HeatmapView.prototype.incrementalPrepareRender = function (seriesModel, ecModel, api) {\n this.group.removeAll();\n };\n\n HeatmapView.prototype.incrementalRender = function (params, seriesModel, ecModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys) {\n // geo does not support incremental rendering?\n if (isGeoCoordSys(coordSys)) {\n this.render(seriesModel, ecModel, api);\n } else {\n this._progressiveEls = [];\n\n this._renderOnCartesianAndCalendar(seriesModel, api, params.start, params.end, true);\n }\n }\n };\n\n HeatmapView.prototype.eachRendered = function (cb) {\n graphic.traverseElements(this._progressiveEls || this.group, cb);\n };\n\n HeatmapView.prototype._renderOnCartesianAndCalendar = function (seriesModel, api, start, end, incremental) {\n var coordSys = seriesModel.coordinateSystem;\n var isCartesian2d = isCoordinateSystemType(coordSys, 'cartesian2d');\n var width;\n var height;\n var xAxisExtent;\n var yAxisExtent;\n\n if (isCartesian2d) {\n var xAxis = coordSys.getAxis('x');\n var yAxis = coordSys.getAxis('y');\n\n if (process.env.NODE_ENV !== 'production') {\n if (!(xAxis.type === 'category' && yAxis.type === 'category')) {\n throw new Error('Heatmap on cartesian must have two category axes');\n }\n\n if (!(xAxis.onBand && yAxis.onBand)) {\n throw new Error('Heatmap on cartesian must have two axes with boundaryGap true');\n }\n } // add 0.5px to avoid the gaps\n\n\n width = xAxis.getBandWidth() + .5;\n height = yAxis.getBandWidth() + .5;\n xAxisExtent = xAxis.scale.getExtent();\n yAxisExtent = yAxis.scale.getExtent();\n }\n\n var group = this.group;\n var data = seriesModel.getData();\n var emphasisStyle = seriesModel.getModel(['emphasis', 'itemStyle']).getItemStyle();\n var blurStyle = seriesModel.getModel(['blur', 'itemStyle']).getItemStyle();\n var selectStyle = seriesModel.getModel(['select', 'itemStyle']).getItemStyle();\n var borderRadius = seriesModel.get(['itemStyle', 'borderRadius']);\n var labelStatesModels = getLabelStatesModels(seriesModel);\n var emphasisModel = seriesModel.getModel('emphasis');\n var focus = emphasisModel.get('focus');\n var blurScope = emphasisModel.get('blurScope');\n var emphasisDisabled = emphasisModel.get('disabled');\n var dataDims = isCartesian2d ? [data.mapDimension('x'), data.mapDimension('y'), data.mapDimension('value')] : [data.mapDimension('time'), data.mapDimension('value')];\n\n for (var idx = start; idx < end; idx++) {\n var rect = void 0;\n var style = data.getItemVisual(idx, 'style');\n\n if (isCartesian2d) {\n var dataDimX = data.get(dataDims[0], idx);\n var dataDimY = data.get(dataDims[1], idx); // Ignore empty data and out of extent data\n\n if (isNaN(data.get(dataDims[2], idx)) || isNaN(dataDimX) || isNaN(dataDimY) || dataDimX < xAxisExtent[0] || dataDimX > xAxisExtent[1] || dataDimY < yAxisExtent[0] || dataDimY > yAxisExtent[1]) {\n continue;\n }\n\n var point = coordSys.dataToPoint([dataDimX, dataDimY]);\n rect = new graphic.Rect({\n shape: {\n x: point[0] - width / 2,\n y: point[1] - height / 2,\n width: width,\n height: height\n },\n style: style\n });\n } else {\n // Ignore empty data\n if (isNaN(data.get(dataDims[1], idx))) {\n continue;\n }\n\n rect = new graphic.Rect({\n z2: 1,\n shape: coordSys.dataToRect([data.get(dataDims[0], idx)]).contentShape,\n style: style\n });\n } // Optimization for large dataset\n\n\n if (data.hasItemOption) {\n var itemModel = data.getItemModel(idx);\n var emphasisModel_1 = itemModel.getModel('emphasis');\n emphasisStyle = emphasisModel_1.getModel('itemStyle').getItemStyle();\n blurStyle = itemModel.getModel(['blur', 'itemStyle']).getItemStyle();\n selectStyle = itemModel.getModel(['select', 'itemStyle']).getItemStyle(); // Each item value struct in the data would be firstly\n // {\n // itemStyle: { borderRadius: [30, 30] },\n // value: [2022, 02, 22]\n // }\n\n borderRadius = itemModel.get(['itemStyle', 'borderRadius']);\n focus = emphasisModel_1.get('focus');\n blurScope = emphasisModel_1.get('blurScope');\n emphasisDisabled = emphasisModel_1.get('disabled');\n labelStatesModels = getLabelStatesModels(itemModel);\n }\n\n rect.shape.r = borderRadius;\n var rawValue = seriesModel.getRawValue(idx);\n var defaultText = '-';\n\n if (rawValue && rawValue[2] != null) {\n defaultText = rawValue[2] + '';\n }\n\n setLabelStyle(rect, labelStatesModels, {\n labelFetcher: seriesModel,\n labelDataIndex: idx,\n defaultOpacity: style.opacity,\n defaultText: defaultText\n });\n rect.ensureState('emphasis').style = emphasisStyle;\n rect.ensureState('blur').style = blurStyle;\n rect.ensureState('select').style = selectStyle;\n toggleHoverEmphasis(rect, focus, blurScope, emphasisDisabled);\n rect.incremental = incremental; // PENDING\n\n if (incremental) {\n // Rect must use hover layer if it's incremental.\n rect.states.emphasis.hoverLayer = true;\n }\n\n group.add(rect);\n data.setItemGraphicEl(idx, rect);\n\n if (this._progressiveEls) {\n this._progressiveEls.push(rect);\n }\n }\n };\n\n HeatmapView.prototype._renderOnGeo = function (geo, seriesModel, visualMapModel, api) {\n var inRangeVisuals = visualMapModel.targetVisuals.inRange;\n var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange; // if (!visualMapping) {\n // throw new Error('Data range must have color visuals');\n // }\n\n var data = seriesModel.getData();\n var hmLayer = this._hmLayer || this._hmLayer || new HeatmapLayer();\n hmLayer.blurSize = seriesModel.get('blurSize');\n hmLayer.pointSize = seriesModel.get('pointSize');\n hmLayer.minOpacity = seriesModel.get('minOpacity');\n hmLayer.maxOpacity = seriesModel.get('maxOpacity');\n var rect = geo.getViewRect().clone();\n var roamTransform = geo.getRoamTransform();\n rect.applyTransform(roamTransform); // Clamp on viewport\n\n var x = Math.max(rect.x, 0);\n var y = Math.max(rect.y, 0);\n var x2 = Math.min(rect.width + rect.x, api.getWidth());\n var y2 = Math.min(rect.height + rect.y, api.getHeight());\n var width = x2 - x;\n var height = y2 - y;\n var dims = [data.mapDimension('lng'), data.mapDimension('lat'), data.mapDimension('value')];\n var points = data.mapArray(dims, function (lng, lat, value) {\n var pt = geo.dataToPoint([lng, lat]);\n pt[0] -= x;\n pt[1] -= y;\n pt.push(value);\n return pt;\n });\n var dataExtent = visualMapModel.getExtent();\n var isInRange = visualMapModel.type === 'visualMap.continuous' ? getIsInContinuousRange(dataExtent, visualMapModel.option.range) : getIsInPiecewiseRange(dataExtent, visualMapModel.getPieceList(), visualMapModel.option.selected);\n hmLayer.update(points, width, height, inRangeVisuals.color.getNormalizer(), {\n inRange: inRangeVisuals.color.getColorMapper(),\n outOfRange: outOfRangeVisuals.color.getColorMapper()\n }, isInRange);\n var img = new graphic.Image({\n style: {\n width: width,\n height: height,\n x: x,\n y: y,\n image: hmLayer.canvas\n },\n silent: true\n });\n this.group.add(img);\n };\n\n HeatmapView.type = 'heatmap';\n return HeatmapView;\n}(ChartView);\n\nexport default HeatmapView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SeriesModel from '../../model/Series.js';\nimport createSeriesData from '../helper/createSeriesData.js';\nimport CoordinateSystem from '../../core/CoordinateSystem.js';\n\nvar HeatmapSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(HeatmapSeriesModel, _super);\n\n function HeatmapSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = HeatmapSeriesModel.type;\n return _this;\n }\n\n HeatmapSeriesModel.prototype.getInitialData = function (option, ecModel) {\n return createSeriesData(null, this, {\n generateCoord: 'value'\n });\n };\n\n HeatmapSeriesModel.prototype.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\n HeatmapSeriesModel.type = 'series.heatmap';\n HeatmapSeriesModel.dependencies = ['grid', 'geo', 'calendar'];\n HeatmapSeriesModel.defaultOption = {\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 select: {\n itemStyle: {\n borderColor: '#212121'\n }\n }\n };\n return HeatmapSeriesModel;\n}(SeriesModel);\n\nexport default HeatmapSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport HeatmapView from './HeatmapView.js';\nimport HeatmapSeriesModel from './HeatmapSeries.js';\nexport function install(registers) {\n registers.registerChartView(HeatmapView);\n registers.registerSeriesModel(HeatmapSeriesModel);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { toggleHoverEmphasis } from '../../util/states.js';\nimport { createSymbol, normalizeSymbolOffset } from '../../util/symbol.js';\nimport { parsePercent, isNumeric } from '../../util/number.js';\nimport ChartView from '../../view/Chart.js';\nimport { getDefaultLabel } from '../helper/labelHelper.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport ZRImage from 'zrender/lib/graphic/Image.js';\nimport { getECData } from '../../util/innerStore.js';\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();\n\nvar PictorialBarView =\n/** @class */\nfunction (_super) {\n __extends(PictorialBarView, _super);\n\n function PictorialBarView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = PictorialBarView.type;\n return _this;\n }\n\n PictorialBarView.prototype.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.master.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\n PictorialBarView.prototype.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, getECData(bar).dataIndex, ecModel, bar);\n });\n }\n } else {\n group.removeAll();\n }\n };\n\n PictorialBarView.type = 'pictorialBar';\n return PictorialBarView;\n}(ChartView); // Set or calculate default value about symbol, and calculate layout info.\n\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 style: data.getItemVisual(dataIndex, 'style'),\n symbolClip: symbolClip,\n symbolRepeat: symbolRepeat,\n symbolRepeatDirection: itemModel.get('symbolRepeatDirection'),\n symbolPatternSize: symbolPatternSize,\n rotation: rotation,\n animationModel: isAnimationEnabled ? itemModel : null,\n hoverScale: isAnimationEnabled && itemModel.get(['emphasis', 'scale']),\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 = normalizeSymbolOffset(itemModel.get('symbolOffset'), symbolSize);\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, outputSymbolMeta) {\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 outputSymbolMeta.boundingLength = boundingLength;\n\n if (symbolRepeat) {\n outputSymbolMeta.repeatCutLength = layout[valueDim.wh];\n } // if 'pxSign' means sign of pixel, it can't be zero, or symbolScale will be zero\n // and when borderWidth be settled, the actual linewidth will be NaN\n\n\n outputSymbolMeta.pxSign = boundingLength > 0 ? 1 : -1;\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, outputSymbolMeta) {\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 var parsedSymbolSize;\n\n if (zrUtil.isArray(symbolSize)) {\n parsedSymbolSize = symbolSize.slice();\n } else {\n if (symbolSize == null) {\n // will parse to number below\n parsedSymbolSize = ['100%', '100%'];\n } else {\n parsedSymbolSize = [symbolSize, symbolSize];\n }\n } // Note: percentage symbolSize (like '100%') do not consider lineWidth, because it is\n // to complicated to calculate real percent value if considering scaled lineWidth.\n // So the actual size will bigger than layout size if lineWidth is bigger than zero,\n // which can be tolerated in pictorial chart.\n\n\n parsedSymbolSize[categoryDim.index] = parsePercent(parsedSymbolSize[categoryDim.index], categorySize);\n parsedSymbolSize[valueDim.index] = parsePercent(parsedSymbolSize[valueDim.index], symbolRepeat ? categorySize : Math.abs(boundingLength));\n outputSymbolMeta.symbolSize = parsedSymbolSize; // If x or y is less than zero, show reversed shape.\n\n var symbolScale = outputSymbolMeta.symbolScale = [parsedSymbolSize[0] / symbolPatternSize, parsedSymbolSize[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, outputSymbolMeta) {\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 scaleX: symbolScale[0],\n scaleY: symbolScale[1],\n rotation: rotation\n });\n pathForLineWidth.updateTransform();\n valueLineWidth /= pathForLineWidth.getLineScale();\n valueLineWidth *= symbolScale[opt.valueDim.index];\n }\n\n outputSymbolMeta.valueLineWidth = valueLineWidth || 0;\n}\n\nfunction prepareLayoutInfo(itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset, symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, outputSymbolMeta) {\n var categoryDim = opt.categoryDim;\n var valueDim = opt.valueDim;\n var pxSign = outputSymbolMeta.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 var symbolMarginNumeric = parsePercent(symbolMargin, symbolSize[valueDim.index]);\n var uLenWithMargin = Math.max(unitLength + symbolMarginNumeric * 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 : symbolMarginNumeric * 2; // Both final repeatTimes and final symbolMarginNumeric 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 symbolMarginNumeric = mDiff / 2 / (hasEndGap ? repeatTimes : Math.max(repeatTimes - 1, 1));\n uLenWithMargin = unitLength + symbolMarginNumeric * 2;\n endFix = hasEndGap ? 0 : symbolMarginNumeric * 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 outputSymbolMeta.repeatTimes = repeatTimes;\n outputSymbolMeta.symbolMargin = symbolMarginNumeric;\n }\n\n var sizeFix = pxSign * (pathLen / 2);\n var pathPosition = outputSymbolMeta.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 = outputSymbolMeta.bundlePosition = [];\n bundlePosition[categoryDim.index] = layout[categoryDim.xy];\n bundlePosition[valueDim.index] = layout[valueDim.xy];\n var barRectShape = outputSymbolMeta.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 = outputSymbolMeta.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);\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 scaleX: 0,\n scaleY: 0\n }, symbolMeta, isUpdate, function () {\n bundle.remove(path);\n });\n } // updateHoverAnimation(path, symbolMeta);\n\n\n index++;\n });\n\n for (; index < repeatTimes; index++) {\n var path = createPath(symbolMeta);\n path.__pictorialAnimationIndex = index;\n path.__pictorialRepeatTimes = repeatTimes;\n bundle.add(path);\n var target = makeTarget(index);\n updateAttr(path, {\n x: target.x,\n y: target.y,\n scaleX: 0,\n scaleY: 0\n }, {\n scaleX: target.scaleX,\n scaleY: target.scaleY,\n rotation: target.rotation\n }, symbolMeta, isUpdate);\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 x: position[0],\n y: position[1],\n scaleX: symbolMeta.symbolScale[0],\n scaleY: symbolMeta.symbolScale[1],\n rotation: symbolMeta.rotation\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 x: symbolMeta.pathPosition[0],\n y: symbolMeta.pathPosition[1],\n scaleX: 0,\n scaleY: 0,\n rotation: symbolMeta.rotation\n }, {\n scaleX: symbolMeta.symbolScale[0],\n scaleY: symbolMeta.symbolScale[1]\n }, symbolMeta, isUpdate);\n } else {\n updateAttr(mainPath, null, {\n x: symbolMeta.pathPosition[0],\n y: symbolMeta.pathPosition[1],\n scaleX: symbolMeta.symbolScale[0],\n scaleY: symbolMeta.symbolScale[1],\n rotation: symbolMeta.rotation\n }, symbolMeta, isUpdate);\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 barRect.disableMorphing = true;\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 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.x = symbolMeta.bundlePosition[0];\n bundle.y = symbolMeta.bundlePosition[1];\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 x: symbolMeta.bundlePosition[0],\n y: symbolMeta.bundlePosition[1]\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.removeTextContent();\n var paths = [];\n eachPath(bar, function (path) {\n paths.push(path);\n });\n bar.__pictorialMainPath && paths.push(bar.__pictorialMainPath); // I do not find proper remove animation for clip yet.\n\n bar.__pictorialClipPath && (animationModel = null);\n zrUtil.each(paths, function (path) {\n graphic.removeElement(path, {\n scaleX: 0,\n scaleY: 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 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 emphasisModel = itemModel.getModel('emphasis');\n var emphasisStyle = emphasisModel.getModel('itemStyle').getItemStyle();\n var blurStyle = itemModel.getModel(['blur', 'itemStyle']).getItemStyle();\n var selectStyle = itemModel.getModel(['select', 'itemStyle']).getItemStyle();\n var cursorStyle = itemModel.getShallow('cursor');\n var focus = emphasisModel.get('focus');\n var blurScope = emphasisModel.get('blurScope');\n var hoverScale = emphasisModel.get('scale');\n eachPath(bar, function (path) {\n if (path instanceof ZRImage) {\n var pathStyle = path.style;\n path.useStyle(zrUtil.extend({\n // TODO other properties like dx, dy ?\n image: pathStyle.image,\n x: pathStyle.x,\n y: pathStyle.y,\n width: pathStyle.width,\n height: pathStyle.height\n }, symbolMeta.style));\n } else {\n path.useStyle(symbolMeta.style);\n }\n\n var emphasisState = path.ensureState('emphasis');\n emphasisState.style = emphasisStyle;\n\n if (hoverScale) {\n // NOTE: Must after scale is set after updateAttr\n emphasisState.scaleX = path.scaleX * 1.1;\n emphasisState.scaleY = path.scaleY * 1.1;\n }\n\n path.ensureState('blur').style = blurStyle;\n path.ensureState('select').style = selectStyle;\n cursorStyle && (path.cursor = cursorStyle);\n path.z2 = symbolMeta.z2;\n });\n var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)];\n var barRect = bar.__pictorialBarRect;\n setLabelStyle(barRect, getLabelStatesModels(itemModel), {\n labelFetcher: opt.seriesModel,\n labelDataIndex: dataIndex,\n defaultText: getDefaultLabel(opt.seriesModel.getData(), dataIndex),\n inheritColor: symbolMeta.style.fill,\n defaultOpacity: symbolMeta.style.opacity,\n defaultOutsidePosition: barPositionOutside\n });\n toggleHoverEmphasis(bar, focus, blurScope, emphasisModel.get('disabled'));\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\nexport default PictorialBarView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport BaseBarSeriesModel from './BaseBarSeries.js';\nimport { inheritDefaultOption } from '../../util/component.js';\n\nvar PictorialBarSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(PictorialBarSeriesModel, _super);\n\n function PictorialBarSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = PictorialBarSeriesModel.type;\n _this.hasSymbolVisual = true;\n _this.defaultSymbol = 'roundRect';\n return _this;\n }\n\n PictorialBarSeriesModel.prototype.getInitialData = function (option) {\n // Disable stack.\n option.stack = null;\n return _super.prototype.getInitialData.apply(this, arguments);\n };\n\n PictorialBarSeriesModel.type = 'series.pictorialBar';\n PictorialBarSeriesModel.dependencies = ['grid'];\n PictorialBarSeriesModel.defaultOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, {\n symbol: 'circle',\n symbolSize: null,\n symbolRotate: null,\n symbolPosition: null,\n symbolOffset: null,\n symbolMargin: null,\n symbolRepeat: false,\n symbolRepeatDirection: 'end',\n symbolClip: false,\n symbolBoundingData: null,\n symbolPatternSize: 400,\n barGap: '-100%',\n // z can be set in data item, which is z2 actually.\n // Disable progressive\n progressive: 0,\n emphasis: {\n // By default pictorialBar do not hover scale. Hover scale is not suitable\n // for the case that both has foreground and background.\n scale: false\n },\n select: {\n itemStyle: {\n borderColor: '#212121'\n }\n }\n });\n return PictorialBarSeriesModel;\n}(BaseBarSeriesModel);\n\nexport default PictorialBarSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport PictorialBarView from './PictorialBarView.js';\nimport PictorialBarSeriesModel from './PictorialBarSeries.js';\nimport { createProgressiveLayout, layout } from '../../layout/barGrid.js';\nimport { curry } from 'zrender/lib/core/util.js';\nexport function install(registers) {\n registers.registerChartView(PictorialBarView);\n registers.registerSeriesModel(PictorialBarSeriesModel);\n registers.registerLayout(registers.PRIORITY.VISUAL.LAYOUT, curry(layout, 'pictorialBar')); // Do layout after other overall layout, which can prepare some information.\n\n registers.registerLayout(registers.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, createProgressiveLayout('pictorialBar'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { ECPolygon } from '../line/poly.js';\nimport * as graphic from '../../util/graphic.js';\nimport { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { bind } from 'zrender/lib/core/util.js';\nimport DataDiffer from '../../data/DataDiffer.js';\nimport ChartView from '../../view/Chart.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\n\nvar ThemeRiverView =\n/** @class */\nfunction (_super) {\n __extends(ThemeRiverView, _super);\n\n function ThemeRiverView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ThemeRiverView.type;\n _this._layers = [];\n return _this;\n }\n\n ThemeRiverView.prototype.render = function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var self = this;\n var group = this.group;\n var layersSeries = seriesModel.getLayerSeries();\n var layoutInfo = data.getLayout('layoutInfo');\n var rect = layoutInfo.rect;\n var boundaryGap = layoutInfo.boundaryGap;\n group.x = 0;\n group.y = rect.y + boundaryGap[0];\n\n function keyGetter(item) {\n return item.name;\n }\n\n var dataDiffer = new DataDiffer(this._layersSeries || [], layersSeries, 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 = self._layers;\n\n if (status === 'remove') {\n group.remove(oldLayersGroups[idx]);\n return;\n }\n\n var points0 = [];\n var points1 = [];\n var style;\n var indices = layersSeries[idx].indices;\n var j = 0;\n\n for (; 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 style = data.getItemVisual(indices[j], 'style');\n }\n\n var polygon;\n var textLayout = data.getItemLayout(indices[0]);\n var labelModel = seriesModel.getModel('label');\n var margin = labelModel.get('margin');\n var emphasisModel = seriesModel.getModel('emphasis');\n\n if (status === 'add') {\n var layerGroup = newLayersGroups[idx] = new graphic.Group();\n polygon = new ECPolygon({\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 layerGroup.add(polygon);\n group.add(layerGroup);\n\n if (seriesModel.isAnimationEnabled()) {\n polygon.setClipPath(createGridClipShape(polygon.getBoundingRect(), seriesModel, function () {\n polygon.removeClipPath();\n }));\n }\n } else {\n var layerGroup = oldLayersGroups[oldIdx];\n polygon = layerGroup.childAt(0);\n group.add(layerGroup);\n newLayersGroups[idx] = layerGroup;\n graphic.updateProps(polygon, {\n shape: {\n points: points0,\n stackedOnPoints: points1\n }\n }, seriesModel);\n saveOldStyle(polygon);\n }\n\n setLabelStyle(polygon, getLabelStatesModels(seriesModel), {\n labelDataIndex: indices[j - 1],\n defaultText: data.getName(indices[j - 1]),\n inheritColor: style.fill\n }, {\n normal: {\n verticalAlign: 'middle' // align: 'right'\n\n }\n });\n polygon.setTextConfig({\n position: null,\n local: true\n });\n var labelEl = polygon.getTextContent(); // TODO More label position options.\n\n if (labelEl) {\n labelEl.x = textLayout.x - margin;\n labelEl.y = textLayout.y0 + textLayout.y / 2;\n }\n\n polygon.useStyle(style);\n data.setItemGraphicEl(idx, polygon);\n setStatesStylesFromModel(polygon, seriesModel);\n toggleHoverEmphasis(polygon, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n }\n\n this._layersSeries = layersSeries;\n this._layers = newLayersGroups;\n };\n\n ThemeRiverView.type = 'themeRiver';\n return ThemeRiverView;\n}(ChartView);\n\n; // add animation to the view\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 x: rect.x - 50,\n width: rect.width + 100,\n height: rect.height + 20\n }\n }, seriesModel, cb);\n return rectEl;\n}\n\nexport default ThemeRiverView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SeriesModel from '../../model/Series.js';\nimport prepareSeriesDataSchema from '../../data/helper/createDimensions.js';\nimport { getDimensionTypeByAxis } from '../../data/helper/dimensionHelper.js';\nimport SeriesData from '../../data/SeriesData.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { groupData, SINGLE_REFERRING } from '../../util/model.js';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider.js';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup.js';\nvar DATA_NAME_INDEX = 2;\n\nvar ThemeRiverSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(ThemeRiverSeriesModel, _super);\n\n function ThemeRiverSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ThemeRiverSeriesModel.type;\n return _this;\n }\n /**\n * @override\n */\n\n\n ThemeRiverSeriesModel.prototype.init = function (option) {\n // eslint-disable-next-line\n _super.prototype.init.apply(this, 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\n this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));\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\n\n ThemeRiverSeriesModel.prototype.fixData = function (data) {\n var rawDataLength = data.length;\n /**\n * Make sure every layer data get the same keys.\n * The value index tells which layer has visited.\n * {\n * 2014/01/01: -1\n * }\n */\n\n var timeValueKeys = {}; // grouped data by name\n\n var groupResult = groupData(data, function (item) {\n if (!timeValueKeys.hasOwnProperty(item[0] + '')) {\n timeValueKeys[item[0] + ''] = -1;\n }\n\n return item[2];\n });\n var layerData = [];\n groupResult.buckets.each(function (items, key) {\n layerData.push({\n name: key,\n dataList: items\n });\n });\n var layerNum = layerData.length;\n\n for (var k = 0; k < layerNum; ++k) {\n var name_1 = layerData[k].name;\n\n for (var j = 0; j < layerData[k].dataList.length; ++j) {\n var timeValue = layerData[k].dataList[j][0] + '';\n timeValueKeys[timeValue] = k;\n }\n\n for (var timeValue in timeValueKeys) {\n if (timeValueKeys.hasOwnProperty(timeValue) && timeValueKeys[timeValue] !== k) {\n timeValueKeys[timeValue] = k;\n data[rawDataLength] = [timeValue, 0, name_1];\n rawDataLength++;\n }\n }\n }\n\n return data;\n };\n /**\n * @override\n * @param option the initial option that user gave\n * @param ecModel the model object for themeRiver option\n */\n\n\n ThemeRiverSeriesModel.prototype.getInitialData = function (option, ecModel) {\n var singleAxisModel = this.getReferringComponents('singleAxis', SINGLE_REFERRING).models[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 dimensions = prepareSeriesDataSchema(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 }).dimensions;\n var list = new SeriesData(dimensions, this);\n list.initData(data);\n return list;\n };\n /**\n * The raw data is divided into multiple layers and each layer\n * has same name.\n */\n\n\n ThemeRiverSeriesModel.prototype.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 * Get data indices for show tooltip content\n */\n\n\n ThemeRiverSeriesModel.prototype.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 ThemeRiverSeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n var data = this.getData();\n var name = data.getName(dataIndex);\n var value = data.get(data.mapDimension('value'), dataIndex);\n return createTooltipMarkup('nameValue', {\n name: name,\n value: value\n });\n };\n\n ThemeRiverSeriesModel.type = 'series.themeRiver';\n ThemeRiverSeriesModel.dependencies = ['singleAxis'];\n ThemeRiverSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n colorBy: 'data',\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 fontSize: 11\n },\n emphasis: {\n label: {\n show: true\n }\n }\n };\n return ThemeRiverSeriesModel;\n}(SeriesModel);\n\nexport default ThemeRiverSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as numberUtil from '../../util/number.js';\nexport default function themeRiverLayout(ecModel, api) {\n ecModel.eachSeriesByType('themeRiver', function (seriesModel) {\n var data = seriesModel.getData();\n var single = seriesModel.coordinateSystem;\n var layoutInfo = {}; // use the axis boundingRect for view\n\n var rect = single.getRect();\n layoutInfo.rect = rect;\n var boundaryGap = seriesModel.get('boundaryGap');\n var axis = single.getAxis();\n layoutInfo.boundaryGap = boundaryGap;\n\n if (axis.orient === 'horizontal') {\n boundaryGap[0] = numberUtil.parsePercent(boundaryGap[0], rect.height);\n boundaryGap[1] = numberUtil.parsePercent(boundaryGap[1], rect.height);\n var height = rect.height - boundaryGap[0] - boundaryGap[1];\n doThemeRiverLayout(data, seriesModel, height);\n } else {\n boundaryGap[0] = numberUtil.parsePercent(boundaryGap[0], rect.width);\n boundaryGap[1] = numberUtil.parsePercent(boundaryGap[1], rect.width);\n var width = rect.width - boundaryGap[0] - boundaryGap[1];\n doThemeRiverLayout(data, seriesModel, width);\n }\n\n data.setLayout('layoutInfo', layoutInfo);\n });\n}\n/**\n * The layout information about themeriver\n *\n * @param data data in the series\n * @param seriesModel the model object of themeRiver series\n * @param height value used to compute every series height\n */\n\nfunction doThemeRiverLayout(data, seriesModel, height) {\n if (!data.count()) {\n return;\n }\n\n var coordSys = seriesModel.coordinateSystem; // the data in each layer are organized into a series.\n\n var layerSeries = seriesModel.getLayerSeries(); // the points in each layer.\n\n var timeDim = data.mapDimension('single');\n var valueDim = data.mapDimension('value');\n var layerPoints = zrUtil.map(layerSeries, function (singleLayer) {\n return zrUtil.map(singleLayer.indices, function (idx) {\n var pt = coordSys.dataToPoint(data.get(timeDim, idx));\n pt[1] = data.get(valueDim, idx);\n return pt;\n });\n });\n var base = computeBaseline(layerPoints);\n var baseLine = base.y0;\n var ky = height / base.max; // set layout information for each item.\n\n var n = layerSeries.length;\n var m = layerSeries[0].indices.length;\n var baseY0;\n\n for (var j = 0; j < m; ++j) {\n baseY0 = baseLine[j] * ky;\n data.setItemLayout(layerSeries[0].indices[j], {\n layerIndex: 0,\n x: layerPoints[0][j][0],\n y0: baseY0,\n y: layerPoints[0][j][1] * ky\n });\n\n for (var i = 1; i < n; ++i) {\n baseY0 += layerPoints[i - 1][j][1] * ky;\n data.setItemLayout(layerSeries[i].indices[j], {\n layerIndex: i,\n x: layerPoints[i][j][0],\n y0: baseY0,\n y: layerPoints[i][j][1] * ky\n });\n }\n }\n}\n/**\n * Compute the baseLine of the rawdata\n * Inspired by Lee Byron's paper Stacked Graphs - Geometry & Aesthetics\n *\n * @param data the points in each layer\n */\n\n\nfunction computeBaseline(data) {\n var layerNum = data.length;\n var pointNum = data[0].length;\n var sums = [];\n var y0 = [];\n var max = 0;\n\n for (var i = 0; i < pointNum; ++i) {\n var temp = 0;\n\n for (var j = 0; j < layerNum; ++j) {\n temp += data[j][i][1];\n }\n\n if (temp > max) {\n max = temp;\n }\n\n sums.push(temp);\n }\n\n for (var k = 0; k < pointNum; ++k) {\n y0[k] = (max - sums[k]) / 2;\n }\n\n max = 0;\n\n for (var l = 0; l < pointNum; ++l) {\n var sum = sums[l] + y0[l];\n\n if (sum > max) {\n max = sum;\n }\n }\n\n return {\n y0: y0,\n max: max\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\nimport ThemeRiverView from './ThemeRiverView.js';\nimport ThemeRiverSeriesModel from './ThemeRiverSeries.js';\nimport themeRiverLayout from './themeRiverLayout.js';\nimport dataFilter from '../../processor/dataFilter.js';\nexport function install(registers) {\n registers.registerChartView(ThemeRiverView);\n registers.registerSeriesModel(ThemeRiverSeriesModel);\n registers.registerLayout(themeRiverLayout);\n registers.registerProcessor(dataFilter('themeRiver'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { toggleHoverEmphasis, SPECIAL_STATES, DISPLAY_STATES } from '../../util/states.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { getSectorCornerRadius } from '../helper/pieHelper.js';\nimport { createOrUpdatePatternFromDecal } from '../../util/decal.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\nvar DEFAULT_SECTOR_Z = 2;\nvar DEFAULT_TEXT_Z = 4;\n/**\n * Sunburstce of Sunburst including Sector, Label, LabelLine\n */\n\nvar SunburstPiece =\n/** @class */\nfunction (_super) {\n __extends(SunburstPiece, _super);\n\n function SunburstPiece(node, seriesModel, ecModel, api) {\n var _this = _super.call(this) || this;\n\n _this.z2 = DEFAULT_SECTOR_Z;\n _this.textConfig = {\n inside: true\n };\n getECData(_this).seriesIndex = seriesModel.seriesIndex;\n var text = new graphic.Text({\n z2: DEFAULT_TEXT_Z,\n silent: node.getModel().get(['label', 'silent'])\n });\n\n _this.setTextContent(text);\n\n _this.updateData(true, node, seriesModel, ecModel, api);\n\n return _this;\n }\n\n SunburstPiece.prototype.updateData = function (firstCreate, node, // state: 'emphasis' | 'normal' | 'highlight' | 'downplay',\n seriesModel, ecModel, api) {\n this.node = node;\n node.piece = this;\n seriesModel = seriesModel || this._seriesModel;\n ecModel = ecModel || this._ecModel;\n var sector = this;\n getECData(sector).dataIndex = node.dataIndex;\n var itemModel = node.getModel();\n var emphasisModel = itemModel.getModel('emphasis');\n var layout = node.getLayout();\n var sectorShape = zrUtil.extend({}, layout);\n sectorShape.label = null;\n var normalStyle = node.getVisual('style');\n normalStyle.lineJoin = 'bevel';\n var decal = node.getVisual('decal');\n\n if (decal) {\n normalStyle.decal = createOrUpdatePatternFromDecal(decal, api);\n }\n\n var cornerRadius = getSectorCornerRadius(itemModel.getModel('itemStyle'), sectorShape, true);\n zrUtil.extend(sectorShape, cornerRadius);\n zrUtil.each(SPECIAL_STATES, function (stateName) {\n var state = sector.ensureState(stateName);\n var itemStyleModel = itemModel.getModel([stateName, 'itemStyle']);\n state.style = itemStyleModel.getItemStyle(); // border radius\n\n var cornerRadius = getSectorCornerRadius(itemStyleModel, sectorShape);\n\n if (cornerRadius) {\n state.shape = cornerRadius;\n }\n });\n\n if (firstCreate) {\n sector.setShape(sectorShape);\n sector.shape.r = layout.r0;\n graphic.updateProps(sector, {\n shape: {\n r: layout.r\n }\n }, seriesModel, node.dataIndex);\n } else {\n // Disable animation for gradient since no interpolation method\n // is supported for gradient\n graphic.updateProps(sector, {\n shape: sectorShape\n }, seriesModel);\n saveOldStyle(sector);\n }\n\n sector.useStyle(normalStyle);\n\n this._updateLabel(seriesModel);\n\n var cursorStyle = itemModel.getShallow('cursor');\n cursorStyle && sector.attr('cursor', cursorStyle);\n this._seriesModel = seriesModel || this._seriesModel;\n this._ecModel = ecModel || this._ecModel;\n var focus = emphasisModel.get('focus');\n var focusOrIndices = focus === 'ancestor' ? node.getAncestorsIndices() : focus === 'descendant' ? node.getDescendantIndices() : focus;\n toggleHoverEmphasis(this, focusOrIndices, emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n };\n\n SunburstPiece.prototype._updateLabel = function (seriesModel) {\n var _this = this;\n\n var itemModel = this.node.getModel();\n var normalLabelModel = itemModel.getModel('label');\n var layout = this.node.getLayout();\n var angle = layout.endAngle - layout.startAngle;\n var midAngle = (layout.startAngle + layout.endAngle) / 2;\n var dx = Math.cos(midAngle);\n var dy = Math.sin(midAngle);\n var sector = this;\n var label = sector.getTextContent();\n var dataIndex = this.node.dataIndex;\n var labelMinAngle = normalLabelModel.get('minAngle') / 180 * Math.PI;\n var isNormalShown = normalLabelModel.get('show') && !(labelMinAngle != null && Math.abs(angle) < labelMinAngle);\n label.ignore = !isNormalShown; // TODO use setLabelStyle\n\n zrUtil.each(DISPLAY_STATES, function (stateName) {\n var labelStateModel = stateName === 'normal' ? itemModel.getModel('label') : itemModel.getModel([stateName, 'label']);\n var isNormal = stateName === 'normal';\n var state = isNormal ? label : label.ensureState(stateName);\n var text = seriesModel.getFormattedLabel(dataIndex, stateName);\n\n if (isNormal) {\n text = text || _this.node.name;\n }\n\n state.style = createTextStyle(labelStateModel, {}, null, stateName !== 'normal', true);\n\n if (text) {\n state.style.text = text;\n } // Not displaying text when angle is too small\n\n\n var isShown = labelStateModel.get('show');\n\n if (isShown != null && !isNormal) {\n state.ignore = !isShown;\n }\n\n var labelPosition = getLabelAttr(labelStateModel, 'position');\n var sectorState = isNormal ? sector : sector.states[stateName];\n var labelColor = sectorState.style.fill;\n sectorState.textConfig = {\n outsideFill: labelStateModel.get('color') === 'inherit' ? labelColor : null,\n inside: labelPosition !== 'outside'\n };\n var r;\n var labelPadding = getLabelAttr(labelStateModel, 'distance') || 0;\n var textAlign = getLabelAttr(labelStateModel, 'align');\n\n if (labelPosition === 'outside') {\n r = layout.r + labelPadding;\n textAlign = midAngle > Math.PI / 2 ? 'right' : 'left';\n } else {\n if (!textAlign || textAlign === 'center') {\n // Put label in the center if it's a circle\n if (angle === 2 * Math.PI && layout.r0 === 0) {\n r = 0;\n } else {\n r = (layout.r + layout.r0) / 2;\n }\n\n textAlign = 'center';\n } else if (textAlign === 'left') {\n r = layout.r0 + labelPadding;\n\n if (midAngle > Math.PI / 2) {\n textAlign = 'right';\n }\n } else if (textAlign === 'right') {\n r = layout.r - labelPadding;\n\n if (midAngle > Math.PI / 2) {\n textAlign = 'left';\n }\n }\n }\n\n state.style.align = textAlign;\n state.style.verticalAlign = getLabelAttr(labelStateModel, 'verticalAlign') || 'middle';\n state.x = r * dx + layout.cx;\n state.y = r * dy + layout.cy;\n var rotateType = getLabelAttr(labelStateModel, 'rotate');\n var rotate = 0;\n\n if (rotateType === 'radial') {\n rotate = -midAngle;\n\n if (rotate < -Math.PI / 2) {\n rotate += Math.PI;\n }\n } else if (rotateType === 'tangential') {\n rotate = Math.PI / 2 - midAngle;\n\n if (rotate > Math.PI / 2) {\n rotate -= Math.PI;\n } else if (rotate < -Math.PI / 2) {\n rotate += Math.PI;\n }\n } else if (zrUtil.isNumber(rotateType)) {\n rotate = rotateType * Math.PI / 180;\n }\n\n state.rotation = rotate;\n });\n\n function getLabelAttr(model, name) {\n var stateAttr = model.get(name);\n\n if (stateAttr == null) {\n return normalLabelModel.get(name);\n }\n\n return stateAttr;\n }\n\n label.dirtyStyle();\n };\n\n return SunburstPiece;\n}(graphic.Sector);\n\nexport default SunburstPiece;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { extend } from 'zrender/lib/core/util.js';\nimport { deprecateReplaceLog } from '../../util/log.js';\nimport { retrieveTargetInfo, aboveViewRoot } from '../helper/treeHelper.js';\nexport var ROOT_TO_NODE_ACTION = 'sunburstRootToNode';\nvar HIGHLIGHT_ACTION = 'sunburstHighlight';\nvar UNHIGHLIGHT_ACTION = 'sunburstUnhighlight';\nexport function installSunburstAction(registers) {\n registers.registerAction({\n type: ROOT_TO_NODE_ACTION,\n update: 'updateView'\n }, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'series',\n subType: 'sunburst',\n query: payload\n }, handleRootToNode);\n\n function handleRootToNode(model, index) {\n var targetInfo = retrieveTargetInfo(payload, [ROOT_TO_NODE_ACTION], model);\n\n if (targetInfo) {\n var originViewRoot = model.getViewRoot();\n\n if (originViewRoot) {\n payload.direction = aboveViewRoot(originViewRoot, targetInfo.node) ? 'rollUp' : 'drillDown';\n }\n\n model.resetViewRoot(targetInfo.node);\n }\n }\n });\n registers.registerAction({\n type: HIGHLIGHT_ACTION,\n update: 'none'\n }, function (payload, ecModel, api) {\n // Clone\n payload = extend({}, payload);\n ecModel.eachComponent({\n mainType: 'series',\n subType: 'sunburst',\n query: payload\n }, handleHighlight);\n\n function handleHighlight(model) {\n var targetInfo = retrieveTargetInfo(payload, [HIGHLIGHT_ACTION], model);\n\n if (targetInfo) {\n payload.dataIndex = targetInfo.node.dataIndex;\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('sunburstHighlight', 'highlight');\n } // Fast forward action\n\n\n api.dispatchAction(extend(payload, {\n type: 'highlight'\n }));\n });\n registers.registerAction({\n type: UNHIGHLIGHT_ACTION,\n update: 'updateView'\n }, function (payload, ecModel, api) {\n payload = extend({}, payload);\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('sunburstUnhighlight', 'downplay');\n }\n\n api.dispatchAction(extend(payload, {\n type: 'downplay'\n }));\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport ChartView from '../../view/Chart.js';\nimport SunburstPiece from './SunburstPiece.js';\nimport DataDiffer from '../../data/DataDiffer.js';\nimport { ROOT_TO_NODE_ACTION } from './sunburstAction.js';\nimport { windowOpen } from '../../util/format.js';\n\nvar SunburstView =\n/** @class */\nfunction (_super) {\n __extends(SunburstView, _super);\n\n function SunburstView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SunburstView.type;\n return _this;\n }\n\n SunburstView.prototype.render = function (seriesModel, ecModel, api, // @ts-ignore\n payload) {\n var self = 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 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(newIdx, oldIdx) {\n var newNode = newIdx == null ? null : newChildren[newIdx];\n var oldNode = oldIdx == null ? null : oldChildren[oldIdx];\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, seriesModel, ecModel, api); // 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, api);\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 (self.virtualPiece) {\n // Update\n self.virtualPiece.updateData(false, virtualRoot, seriesModel, ecModel, api);\n } else {\n // Add\n self.virtualPiece = new SunburstPiece(virtualRoot, seriesModel, ecModel, api);\n group.add(self.virtualPiece);\n } // TODO event scope\n\n\n viewRoot.piece.off('click');\n self.virtualPiece.on('click', function (e) {\n self._rootToNode(viewRoot.parentNode);\n });\n } else if (self.virtualPiece) {\n // Remove\n group.remove(self.virtualPiece);\n self.virtualPiece = null;\n }\n }\n };\n /**\n * @private\n */\n\n\n SunburstView.prototype._initEvents = function () {\n var _this = this;\n\n this.group.off('click');\n this.group.on('click', function (e) {\n var targetFound = false;\n\n var viewRoot = _this.seriesModel.getViewRoot();\n\n viewRoot.eachNode(function (node) {\n if (!targetFound && node.piece && node.piece === e.target) {\n var nodeClick = node.getModel().get('nodeClick');\n\n if (nodeClick === 'rootToNode') {\n _this._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 /**\n * @private\n */\n\n\n SunburstView.prototype._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 * @implement\n */\n\n\n SunburstView.prototype.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\n SunburstView.type = 'sunburst';\n return SunburstView;\n}(ChartView);\n\nexport default SunburstView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport SeriesModel from '../../model/Series.js';\nimport Tree from '../../data/Tree.js';\nimport { wrapTreePathInfo } from '../helper/treeHelper.js';\nimport Model from '../../model/Model.js';\nimport enableAriaDecalForTree from '../helper/enableAriaDecalForTree.js';\n\nvar SunburstSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(SunburstSeriesModel, _super);\n\n function SunburstSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SunburstSeriesModel.type;\n _this.ignoreStyleOnData = true;\n return _this;\n }\n\n SunburstSeriesModel.prototype.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 levelModels = this._levelModels = zrUtil.map(option.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, 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\n SunburstSeriesModel.prototype.optionUpdated = function () {\n this.resetViewRoot();\n };\n /*\n * @override\n */\n\n\n SunburstSeriesModel.prototype.getDataParams = function (dataIndex) {\n var params = _super.prototype.getDataParams.apply(this, arguments);\n\n var node = this.getData().tree.getNodeByDataIndex(dataIndex);\n params.treePathInfo = wrapTreePathInfo(node, this);\n return params;\n };\n\n SunburstSeriesModel.prototype.getLevelModel = function (node) {\n return this._levelModels && this._levelModels[node.depth];\n };\n\n SunburstSeriesModel.prototype.getViewRoot = function () {\n return this._viewRoot;\n };\n\n SunburstSeriesModel.prototype.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 SunburstSeriesModel.prototype.enableAriaDecal = function () {\n enableAriaDecalForTree(this);\n };\n\n SunburstSeriesModel.type = 'series.sunburst';\n SunburstSeriesModel.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 // If still show when all data zero.\n stillShowZeroSum: true,\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 outer\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 emphasis: {\n focus: 'descendant'\n },\n blur: {\n itemStyle: {\n opacity: 0.2\n },\n label: {\n opacity: 0.1\n }\n },\n // Animation type can be expansion, scale.\n animationType: 'expansion',\n animationDuration: 1000,\n animationDurationUpdate: 500,\n data: [],\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 return SunburstSeriesModel;\n}(SeriesModel);\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; // TODO First value of array must be a number\n\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\nexport default SunburstSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { parsePercent } from '../../util/number.js';\nimport * as zrUtil from 'zrender/lib/core/util.js'; // let PI2 = Math.PI * 2;\n\nvar RADIAN = Math.PI / 180;\nexport default function sunburstLayout(seriesType, ecModel, api) {\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 // let restAngle = PI2;\n // let 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 levelModel = seriesModel.getLevelModel(node);\n\n if (levelModel) {\n var r0_1 = levelModel.get('r0', true);\n var r_1 = levelModel.get('r', true);\n var radius_1 = levelModel.get('radius', true);\n\n if (radius_1 != null) {\n r0_1 = radius_1[0];\n r_1 = radius_1[1];\n }\n\n r0_1 != null && (rStart = parsePercent(r0_1, size / 2));\n r_1 != null && (rEnd = parsePercent(r_1, 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_1 = 0;\n zrUtil.each(node.children, function (node) {\n siblingAngle_1 += renderNode(node, startAngle + siblingAngle_1);\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\nfunction initChildren(node, sortOrder) {\n var children = node.children || [];\n node.children = sort(children, sortOrder); // Init children recursively\n\n if (children.length) {\n zrUtil.each(node.children, function (child) {\n initChildren(child, sortOrder);\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 (zrUtil.isFunction(sortOrder)) {\n var sortTargets = zrUtil.map(children, function (child, idx) {\n var value = child.getValue();\n return {\n params: {\n depth: child.depth,\n height: child.height,\n dataIndex: child.dataIndex,\n getValue: function () {\n return value;\n }\n },\n index: idx\n };\n });\n sortTargets.sort(function (a, b) {\n return sortOrder(a.params, b.params);\n });\n return zrUtil.map(sortTargets, function (target) {\n return children[target.index];\n });\n } else {\n var isAsc_1 = sortOrder === 'asc';\n return children.sort(function (a, b) {\n var diff = (a.getValue() - b.getValue()) * (isAsc_1 ? 1 : -1);\n return diff === 0 ? (a.dataIndex - b.dataIndex) * (isAsc_1 ? -1 : 1) : diff;\n });\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { lift } from 'zrender/lib/tool/color.js';\nimport { extend, isString } from 'zrender/lib/core/util.js';\nexport default function sunburstVisual(ecModel) {\n var paletteScope = {}; // Default color strategy\n\n function pickColor(node, seriesModel, treeHeight) {\n // Choose color from palette based on the first level.\n var current = node;\n\n while (current && current.depth > 1) {\n current = current.parentNode;\n }\n\n var color = seriesModel.getColorFromPalette(current.name || current.dataIndex + '', paletteScope);\n\n if (node.depth > 1 && isString(color)) {\n // Lighter on the deeper level.\n color = lift(color, (node.depth - 1) / (treeHeight - 1) * 0.5);\n }\n\n return color;\n }\n\n ecModel.eachSeriesByType('sunburst', function (seriesModel) {\n var data = seriesModel.getData();\n var tree = data.tree;\n tree.eachNode(function (node) {\n var model = node.getModel();\n var style = model.getModel('itemStyle').getItemStyle();\n\n if (!style.fill) {\n style.fill = pickColor(node, seriesModel, tree.root.height);\n }\n\n var existsStyle = data.ensureUniqueItemVisual(node.dataIndex, 'style');\n extend(existsStyle, style);\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport SunburstView from './SunburstView.js';\nimport SunburstSeriesModel from './SunburstSeries.js';\nimport sunburstLayout from './sunburstLayout.js';\nimport sunburstVisual from './sunburstVisual.js';\nimport dataFilter from '../../processor/dataFilter.js';\nimport { curry } from 'zrender/lib/core/util.js';\nimport { installSunburstAction } from './sunburstAction.js';\nexport function install(registers) {\n registers.registerChartView(SunburstView);\n registers.registerSeriesModel(SunburstSeriesModel);\n registers.registerLayout(curry(sunburstLayout, 'sunburst'));\n registers.registerProcessor(curry(dataFilter, 'sunburst'));\n registers.registerVisual(sunburstVisual);\n installSunburstAction(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport createSeriesData from '../helper/createSeriesData.js';\nimport { makeInner } from '../../util/model.js';\nimport SeriesModel from '../../model/Series.js'; // Also compat with ec4, where\n// `visual('color') visual('borderColor')` is supported.\n\nexport var STYLE_VISUAL_TYPE = {\n color: 'fill',\n borderColor: 'stroke'\n};\nexport var NON_STYLE_VISUAL_PROPS = {\n symbol: 1,\n symbolSize: 1,\n symbolKeepAspect: 1,\n legendIcon: 1,\n visualMeta: 1,\n liftZ: 1,\n decal: 1\n};\n;\nexport var customInnerStore = makeInner();\n\nvar CustomSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(CustomSeriesModel, _super);\n\n function CustomSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = CustomSeriesModel.type;\n return _this;\n }\n\n CustomSeriesModel.prototype.optionUpdated = function () {\n this.currentZLevel = this.get('zlevel', true);\n this.currentZ = this.get('z', true);\n };\n\n CustomSeriesModel.prototype.getInitialData = function (option, ecModel) {\n return createSeriesData(null, this);\n };\n\n CustomSeriesModel.prototype.getDataParams = function (dataIndex, dataType, el) {\n var params = _super.prototype.getDataParams.call(this, dataIndex, dataType);\n\n el && (params.info = customInnerStore(el).info);\n return params;\n };\n\n CustomSeriesModel.type = 'series.custom';\n CustomSeriesModel.dependencies = ['grid', 'polar', 'geo', 'singleAxis', 'calendar'];\n CustomSeriesModel.defaultOption = {\n coordinateSystem: 'cartesian2d',\n // zlevel: 0,\n z: 2,\n legendHoverLink: 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 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\n };\n return CustomSeriesModel;\n}(SeriesModel);\n\nexport default CustomSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\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\nexport default function cartesianPrepareCustom(coordSys) {\n var rect = coordSys.master.getRect();\n return {\n coordSys: {\n // The name exposed to user is always 'cartesian2d' but not 'grid'.\n type: 'cartesian2d',\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n },\n api: {\n coord: function (data) {\n // do not provide \"out\" param\n return coordSys.dataToPoint(data);\n },\n size: zrUtil.bind(dataToCoordSize, coordSys)\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\n\nfunction dataToCoordSize(dataSize, dataItem) {\n dataItem = dataItem || [0, 0];\n return zrUtil.map([0, 1], function (dimIdx) {\n var val = dataItem[dimIdx];\n var halfSize = dataSize[dimIdx] / 2;\n var p1 = [];\n var p2 = [];\n p1[dimIdx] = val - halfSize;\n p2[dimIdx] = val + halfSize;\n p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];\n return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);\n }, this);\n}\n\nexport default function geoPrepareCustom(coordSys) {\n var rect = coordSys.getBoundingRect();\n return {\n coordSys: {\n type: 'geo',\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n zoom: coordSys.getZoom()\n },\n api: {\n coord: function (data) {\n // do not provide \"out\" and noRoam param,\n // Compatible with this usage:\n // echarts.util.map(item.points, api.coord)\n return coordSys.dataToPoint(data);\n },\n size: zrUtil.bind(dataToCoordSize, coordSys)\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { bind } from 'zrender/lib/core/util.js';\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\nexport default function singlePrepareCustom(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: bind(dataToCoordSize, coordSys)\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js'; // import AngleAxis from './AngleAxis.js';\n\nfunction dataToCoordSize(dataSize, dataItem) {\n // dataItem is necessary in log axis.\n dataItem = dataItem || [0, 0];\n return zrUtil.map(['Radius', 'Angle'], function (dim, dimIdx) {\n var getterName = 'get' + dim + 'Axis'; // TODO: TYPE Check Angle Axis\n\n var axis = this[getterName]();\n var val = dataItem[dimIdx];\n var halfSize = dataSize[dimIdx] / 2;\n var result = axis.type === 'category' ? axis.getBandWidth() : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));\n\n if (dim === 'Angle') {\n result = result * Math.PI / 180;\n }\n\n return result;\n }, this);\n}\n\nexport default function polarPrepareCustom(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: function (data) {\n var radius = radiusAxis.dataToRadius(data[0]);\n var angle = angleAxis.dataToAngle(data[1]);\n var coord = coordSys.coordToPoint([radius, angle]);\n coord.push(radius, angle * Math.PI / 180);\n return coord;\n },\n size: zrUtil.bind(dataToCoordSize, coordSys)\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport default function calendarPrepareCustom(coordSys) {\n var rect = coordSys.getRect();\n var rangeInfo = coordSys.getRangeInfo();\n return {\n coordSys: {\n type: 'calendar',\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n cellWidth: coordSys.getCellWidth(),\n cellHeight: coordSys.getCellHeight(),\n rangeInfo: {\n start: rangeInfo.start,\n end: rangeInfo.end,\n weeks: rangeInfo.weeks,\n dayCount: rangeInfo.allDay\n }\n },\n api: {\n coord: function (data, clamp) {\n return coordSys.dataToPoint(data, clamp);\n }\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, hasOwn } from 'zrender/lib/core/util.js';\nvar deprecatedLogs = {};\n/**\n * Whether need to call `convertEC4CompatibleStyle`.\n */\n\nexport function isEC4CompatibleStyle(style, elType, hasOwnTextContentOption, hasOwnTextConfig) {\n // Since echarts5, `RectText` is separated from its host element and style.text\n // does not exist any more. The compat work brings some extra burden on performance.\n // So we provide:\n // `legacy: true` force make compat.\n // `legacy: false`, force do not compat.\n // `legacy` not set: auto detect whether legacy.\n // But in this case we do not compat (difficult to detect and rare case):\n // Becuse custom series and graphic component support \"merge\", users may firstly\n // only set `textStrokeWidth` style or secondly only set `text`.\n return style && (style.legacy || style.legacy !== false && !hasOwnTextContentOption && !hasOwnTextConfig && elType !== 'tspan' // Difficult to detect whether legacy for a \"text\" el.\n && (elType === 'text' || hasOwn(style, 'text')));\n}\n/**\n * `EC4CompatibleStyle` is style that might be in echarts4 format or echarts5 format.\n * @param hostStyle The properties might be modified.\n * @return If be text el, `textContentStyle` and `textConfig` will not be returned.\n * Otherwise a `textContentStyle` and `textConfig` will be created, whose props area\n * retried from the `hostStyle`.\n */\n\nexport function convertFromEC4CompatibleStyle(hostStyle, elType, isNormal) {\n var srcStyle = hostStyle;\n var textConfig;\n var textContent;\n var textContentStyle;\n\n if (elType === 'text') {\n textContentStyle = srcStyle;\n } else {\n textContentStyle = {};\n hasOwn(srcStyle, 'text') && (textContentStyle.text = srcStyle.text);\n hasOwn(srcStyle, 'rich') && (textContentStyle.rich = srcStyle.rich);\n hasOwn(srcStyle, 'textFill') && (textContentStyle.fill = srcStyle.textFill);\n hasOwn(srcStyle, 'textStroke') && (textContentStyle.stroke = srcStyle.textStroke);\n hasOwn(srcStyle, 'fontFamily') && (textContentStyle.fontFamily = srcStyle.fontFamily);\n hasOwn(srcStyle, 'fontSize') && (textContentStyle.fontSize = srcStyle.fontSize);\n hasOwn(srcStyle, 'fontStyle') && (textContentStyle.fontStyle = srcStyle.fontStyle);\n hasOwn(srcStyle, 'fontWeight') && (textContentStyle.fontWeight = srcStyle.fontWeight);\n textContent = {\n type: 'text',\n style: textContentStyle,\n // ec4 does not support rectText trigger.\n // And when text position is different in normal and emphasis\n // => hover text trigger emphasis;\n // => text position changed, leave mouse pointer immediately;\n // That might cause incorrect state.\n silent: true\n };\n textConfig = {};\n var hasOwnPos = hasOwn(srcStyle, 'textPosition');\n\n if (isNormal) {\n textConfig.position = hasOwnPos ? srcStyle.textPosition : 'inside';\n } else {\n hasOwnPos && (textConfig.position = srcStyle.textPosition);\n }\n\n hasOwn(srcStyle, 'textPosition') && (textConfig.position = srcStyle.textPosition);\n hasOwn(srcStyle, 'textOffset') && (textConfig.offset = srcStyle.textOffset);\n hasOwn(srcStyle, 'textRotation') && (textConfig.rotation = srcStyle.textRotation);\n hasOwn(srcStyle, 'textDistance') && (textConfig.distance = srcStyle.textDistance);\n }\n\n convertEC4CompatibleRichItem(textContentStyle, hostStyle);\n each(textContentStyle.rich, function (richItem) {\n convertEC4CompatibleRichItem(richItem, richItem);\n });\n return {\n textConfig: textConfig,\n textContent: textContent\n };\n}\n/**\n * The result will be set to `out`.\n */\n\nfunction convertEC4CompatibleRichItem(out, richItem) {\n if (!richItem) {\n return;\n } // (1) For simplicity, make textXXX properties (deprecated since ec5) has\n // higher priority. For example, consider in ec4 `borderColor: 5, textBorderColor: 10`\n // on a rect means `borderColor: 4` on the rect and `borderColor: 10` on an attached\n // richText in ec5.\n // (2) `out === richItem` if and only if `out` is text el or rich item.\n // So we can overwrite existing props in `out` since textXXX has higher priority.\n\n\n richItem.font = richItem.textFont || richItem.font;\n hasOwn(richItem, 'textStrokeWidth') && (out.lineWidth = richItem.textStrokeWidth);\n hasOwn(richItem, 'textAlign') && (out.align = richItem.textAlign);\n hasOwn(richItem, 'textVerticalAlign') && (out.verticalAlign = richItem.textVerticalAlign);\n hasOwn(richItem, 'textLineHeight') && (out.lineHeight = richItem.textLineHeight);\n hasOwn(richItem, 'textWidth') && (out.width = richItem.textWidth);\n hasOwn(richItem, 'textHeight') && (out.height = richItem.textHeight);\n hasOwn(richItem, 'textBackgroundColor') && (out.backgroundColor = richItem.textBackgroundColor);\n hasOwn(richItem, 'textPadding') && (out.padding = richItem.textPadding);\n hasOwn(richItem, 'textBorderColor') && (out.borderColor = richItem.textBorderColor);\n hasOwn(richItem, 'textBorderWidth') && (out.borderWidth = richItem.textBorderWidth);\n hasOwn(richItem, 'textBorderRadius') && (out.borderRadius = richItem.textBorderRadius);\n hasOwn(richItem, 'textBoxShadowColor') && (out.shadowColor = richItem.textBoxShadowColor);\n hasOwn(richItem, 'textBoxShadowBlur') && (out.shadowBlur = richItem.textBoxShadowBlur);\n hasOwn(richItem, 'textBoxShadowOffsetX') && (out.shadowOffsetX = richItem.textBoxShadowOffsetX);\n hasOwn(richItem, 'textBoxShadowOffsetY') && (out.shadowOffsetY = richItem.textBoxShadowOffsetY);\n}\n/**\n * Convert to pure echarts4 format style.\n * `itemStyle` will be modified, added with ec4 style properties from\n * `textStyle` and `textConfig`.\n *\n * [Caveat]: For simplicity, `insideRollback` in ec4 does not compat, where\n * `styleEmphasis: {textFill: 'red'}` will remove the normal auto added stroke.\n */\n\n\nexport function convertToEC4StyleForCustomSerise(itemStl, txStl, txCfg) {\n var out = itemStl; // See `custom.ts`, a trick to set extra `textPosition` firstly.\n\n out.textPosition = out.textPosition || txCfg.position || 'inside';\n txCfg.offset != null && (out.textOffset = txCfg.offset);\n txCfg.rotation != null && (out.textRotation = txCfg.rotation);\n txCfg.distance != null && (out.textDistance = txCfg.distance);\n var isInside = out.textPosition.indexOf('inside') >= 0;\n var hostFill = itemStl.fill || '#000';\n convertToEC4RichItem(out, txStl);\n var textFillNotSet = out.textFill == null;\n\n if (isInside) {\n if (textFillNotSet) {\n out.textFill = txCfg.insideFill || '#fff';\n !out.textStroke && txCfg.insideStroke && (out.textStroke = txCfg.insideStroke);\n !out.textStroke && (out.textStroke = hostFill);\n out.textStrokeWidth == null && (out.textStrokeWidth = 2);\n }\n } else {\n if (textFillNotSet) {\n out.textFill = itemStl.fill || txCfg.outsideFill || '#000';\n }\n\n !out.textStroke && txCfg.outsideStroke && (out.textStroke = txCfg.outsideStroke);\n }\n\n out.text = txStl.text;\n out.rich = txStl.rich;\n each(txStl.rich, function (richItem) {\n convertToEC4RichItem(richItem, richItem);\n });\n return out;\n}\n\nfunction convertToEC4RichItem(out, richItem) {\n if (!richItem) {\n return;\n }\n\n hasOwn(richItem, 'fill') && (out.textFill = richItem.fill);\n hasOwn(richItem, 'stroke') && (out.textStroke = richItem.fill);\n hasOwn(richItem, 'lineWidth') && (out.textStrokeWidth = richItem.lineWidth);\n hasOwn(richItem, 'font') && (out.font = richItem.font);\n hasOwn(richItem, 'fontStyle') && (out.fontStyle = richItem.fontStyle);\n hasOwn(richItem, 'fontWeight') && (out.fontWeight = richItem.fontWeight);\n hasOwn(richItem, 'fontSize') && (out.fontSize = richItem.fontSize);\n hasOwn(richItem, 'fontFamily') && (out.fontFamily = richItem.fontFamily);\n hasOwn(richItem, 'align') && (out.textAlign = richItem.align);\n hasOwn(richItem, 'verticalAlign') && (out.textVerticalAlign = richItem.verticalAlign);\n hasOwn(richItem, 'lineHeight') && (out.textLineHeight = richItem.lineHeight);\n hasOwn(richItem, 'width') && (out.textWidth = richItem.width);\n hasOwn(richItem, 'height') && (out.textHeight = richItem.height);\n hasOwn(richItem, 'backgroundColor') && (out.textBackgroundColor = richItem.backgroundColor);\n hasOwn(richItem, 'padding') && (out.textPadding = richItem.padding);\n hasOwn(richItem, 'borderColor') && (out.textBorderColor = richItem.borderColor);\n hasOwn(richItem, 'borderWidth') && (out.textBorderWidth = richItem.borderWidth);\n hasOwn(richItem, 'borderRadius') && (out.textBorderRadius = richItem.borderRadius);\n hasOwn(richItem, 'shadowColor') && (out.textBoxShadowColor = richItem.shadowColor);\n hasOwn(richItem, 'shadowBlur') && (out.textBoxShadowBlur = richItem.shadowBlur);\n hasOwn(richItem, 'shadowOffsetX') && (out.textBoxShadowOffsetX = richItem.shadowOffsetX);\n hasOwn(richItem, 'shadowOffsetY') && (out.textBoxShadowOffsetY = richItem.shadowOffsetY);\n hasOwn(richItem, 'textShadowColor') && (out.textShadowColor = richItem.textShadowColor);\n hasOwn(richItem, 'textShadowBlur') && (out.textShadowBlur = richItem.textShadowBlur);\n hasOwn(richItem, 'textShadowOffsetX') && (out.textShadowOffsetX = richItem.textShadowOffsetX);\n hasOwn(richItem, 'textShadowOffsetY') && (out.textShadowOffsetY = richItem.textShadowOffsetY);\n}\n\nexport function warnDeprecated(deprecated, insteadApproach) {\n if (process.env.NODE_ENV !== 'production') {\n var key = deprecated + '^_^' + insteadApproach;\n\n if (!deprecatedLogs[key]) {\n console.warn(\"[ECharts] DEPRECATED: \\\"\" + deprecated + \"\\\" has been deprecated. \" + insteadApproach);\n deprecatedLogs[key] = true;\n }\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { makeInner, normalizeToArray } from '../util/model.js';\nimport { assert, bind, each, eqNaN, extend, hasOwn, indexOf, isArrayLike, keys, reduce } from 'zrender/lib/core/util.js';\nimport { cloneValue } from 'zrender/lib/animation/Animator.js';\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\nimport { getAnimationConfig } from './basicTransition.js';\nimport { Path } from '../util/graphic.js';\nimport { warn } from '../util/log.js';\nimport { TRANSFORMABLE_PROPS } from 'zrender/lib/core/Transformable.js';\nvar LEGACY_TRANSFORM_PROPS_MAP = {\n position: ['x', 'y'],\n scale: ['scaleX', 'scaleY'],\n origin: ['originX', 'originY']\n};\nvar LEGACY_TRANSFORM_PROPS = keys(LEGACY_TRANSFORM_PROPS_MAP);\nvar TRANSFORM_PROPS_MAP = reduce(TRANSFORMABLE_PROPS, function (obj, key) {\n obj[key] = 1;\n return obj;\n}, {});\nvar transformPropNamesStr = TRANSFORMABLE_PROPS.join(', '); // '' means root\n\nexport var ELEMENT_ANIMATABLE_PROPS = ['', 'style', 'shape', 'extra'];\n;\nvar transitionInnerStore = makeInner();\n;\n\nfunction getElementAnimationConfig(animationType, el, elOption, parentModel, dataIndex) {\n var animationProp = animationType + \"Animation\";\n var config = getAnimationConfig(animationType, parentModel, dataIndex) || {};\n var userDuring = transitionInnerStore(el).userDuring; // Only set when duration is > 0 and it's need to be animated.\n\n if (config.duration > 0) {\n // For simplicity, if during not specified, the previous during will not work any more.\n config.during = userDuring ? bind(duringCall, {\n el: el,\n userDuring: userDuring\n }) : null;\n config.setToFinal = true;\n config.scope = animationType;\n }\n\n extend(config, elOption[animationProp]);\n return config;\n}\n\nexport function applyUpdateTransition(el, elOption, animatableModel, opts) {\n opts = opts || {};\n var dataIndex = opts.dataIndex,\n isInit = opts.isInit,\n clearStyle = opts.clearStyle;\n var hasAnimation = animatableModel.isAnimationEnabled(); // Save the meta info for further morphing. Like apply on the sub morphing elements.\n\n var store = transitionInnerStore(el);\n var styleOpt = elOption.style;\n store.userDuring = elOption.during;\n var transFromProps = {};\n var propsToSet = {};\n prepareTransformAllPropsFinal(el, elOption, propsToSet);\n prepareShapeOrExtraAllPropsFinal('shape', elOption, propsToSet);\n prepareShapeOrExtraAllPropsFinal('extra', elOption, propsToSet);\n\n if (!isInit && hasAnimation) {\n prepareTransformTransitionFrom(el, elOption, transFromProps);\n prepareShapeOrExtraTransitionFrom('shape', el, elOption, transFromProps);\n prepareShapeOrExtraTransitionFrom('extra', el, elOption, transFromProps);\n prepareStyleTransitionFrom(el, elOption, styleOpt, transFromProps);\n }\n\n propsToSet.style = styleOpt;\n applyPropsDirectly(el, propsToSet, clearStyle);\n applyMiscProps(el, elOption);\n\n if (hasAnimation) {\n if (isInit) {\n var enterFromProps_1 = {};\n each(ELEMENT_ANIMATABLE_PROPS, function (propName) {\n var prop = propName ? elOption[propName] : elOption;\n\n if (prop && prop.enterFrom) {\n if (propName) {\n enterFromProps_1[propName] = enterFromProps_1[propName] || {};\n }\n\n extend(propName ? enterFromProps_1[propName] : enterFromProps_1, prop.enterFrom);\n }\n });\n var config = getElementAnimationConfig('enter', el, elOption, animatableModel, dataIndex);\n\n if (config.duration > 0) {\n el.animateFrom(enterFromProps_1, config);\n }\n } else {\n applyPropsTransition(el, elOption, dataIndex || 0, animatableModel, transFromProps);\n }\n } // Store leave to be used in leave transition.\n\n\n updateLeaveTo(el, elOption);\n styleOpt ? el.dirty() : el.markRedraw();\n}\nexport function updateLeaveTo(el, elOption) {\n // Try merge to previous set leaveTo\n var leaveToProps = transitionInnerStore(el).leaveToProps;\n\n for (var i = 0; i < ELEMENT_ANIMATABLE_PROPS.length; i++) {\n var propName = ELEMENT_ANIMATABLE_PROPS[i];\n var prop = propName ? elOption[propName] : elOption;\n\n if (prop && prop.leaveTo) {\n if (!leaveToProps) {\n leaveToProps = transitionInnerStore(el).leaveToProps = {};\n }\n\n if (propName) {\n leaveToProps[propName] = leaveToProps[propName] || {};\n }\n\n extend(propName ? leaveToProps[propName] : leaveToProps, prop.leaveTo);\n }\n }\n}\nexport function applyLeaveTransition(el, elOption, animatableModel, onRemove) {\n if (el) {\n var parent_1 = el.parent;\n var leaveToProps = transitionInnerStore(el).leaveToProps;\n\n if (leaveToProps) {\n // TODO TODO use leave after leaveAnimation in series is introduced\n // TODO Data index?\n var config = getElementAnimationConfig('update', el, elOption, animatableModel, 0);\n\n config.done = function () {\n parent_1.remove(el);\n onRemove && onRemove();\n };\n\n el.animateTo(leaveToProps, config);\n } else {\n parent_1.remove(el);\n onRemove && onRemove();\n }\n }\n}\nexport function isTransitionAll(transition) {\n return transition === 'all';\n}\n\nfunction applyPropsDirectly(el, // Can be null/undefined\nallPropsFinal, clearStyle) {\n var styleOpt = allPropsFinal.style;\n\n if (!el.isGroup && styleOpt) {\n if (clearStyle) {\n el.useStyle({}); // When style object changed, how to trade the existing animation?\n // It is probably complicated and not needed to cover all the cases.\n // But still need consider the case:\n // (1) When using init animation on `style.opacity`, and before the animation\n // ended users triggers an update by mousewhel. At that time the init\n // animation should better be continued rather than terminated.\n // So after `useStyle` called, we should change the animation target manually\n // to continue the effect of the init animation.\n // (2) PENDING: If the previous animation targeted at a `val1`, and currently we need\n // to update the value to `val2` and no animation declared, should be terminate\n // the previous animation or just modify the target of the animation?\n // Therotically That will happen not only on `style` but also on `shape` and\n // `transfrom` props. But we haven't handle this case at present yet.\n // (3) PENDING: Is it proper to visit `animators` and `targetName`?\n\n var animators = el.animators;\n\n for (var i = 0; i < animators.length; i++) {\n var animator = animators[i]; // targetName is the \"topKey\".\n\n if (animator.targetName === 'style') {\n animator.changeTarget(el.style);\n }\n }\n }\n\n el.setStyle(styleOpt);\n }\n\n if (allPropsFinal) {\n // Not set style here.\n allPropsFinal.style = null; // Set el to the final state firstly.\n\n allPropsFinal && el.attr(allPropsFinal);\n allPropsFinal.style = styleOpt;\n }\n}\n\nfunction applyPropsTransition(el, elOption, dataIndex, model, // Can be null/undefined\ntransFromProps) {\n if (transFromProps) {\n var config = getElementAnimationConfig('update', el, elOption, model, dataIndex);\n\n if (config.duration > 0) {\n el.animateFrom(transFromProps, config);\n }\n }\n}\n\nfunction applyMiscProps(el, elOption) {\n // Merge by default.\n hasOwn(elOption, 'silent') && (el.silent = elOption.silent);\n hasOwn(elOption, 'ignore') && (el.ignore = elOption.ignore);\n\n if (el instanceof Displayable) {\n hasOwn(elOption, 'invisible') && (el.invisible = elOption.invisible);\n }\n\n if (el instanceof Path) {\n hasOwn(elOption, 'autoBatch') && (el.autoBatch = elOption.autoBatch);\n }\n} // Use it to avoid it be exposed to user.\n\n\nvar tmpDuringScope = {};\nvar transitionDuringAPI = {\n // Usually other props do not need to be changed in animation during.\n setTransform: function (key, val) {\n if (process.env.NODE_ENV !== 'production') {\n assert(hasOwn(TRANSFORM_PROPS_MAP, key), 'Only ' + transformPropNamesStr + ' available in `setTransform`.');\n }\n\n tmpDuringScope.el[key] = val;\n return this;\n },\n getTransform: function (key) {\n if (process.env.NODE_ENV !== 'production') {\n assert(hasOwn(TRANSFORM_PROPS_MAP, key), 'Only ' + transformPropNamesStr + ' available in `getTransform`.');\n }\n\n return tmpDuringScope.el[key];\n },\n setShape: function (key, val) {\n if (process.env.NODE_ENV !== 'production') {\n assertNotReserved(key);\n }\n\n var el = tmpDuringScope.el;\n var shape = el.shape || (el.shape = {});\n shape[key] = val;\n el.dirtyShape && el.dirtyShape();\n return this;\n },\n getShape: function (key) {\n if (process.env.NODE_ENV !== 'production') {\n assertNotReserved(key);\n }\n\n var shape = tmpDuringScope.el.shape;\n\n if (shape) {\n return shape[key];\n }\n },\n setStyle: function (key, val) {\n if (process.env.NODE_ENV !== 'production') {\n assertNotReserved(key);\n }\n\n var el = tmpDuringScope.el;\n var style = el.style;\n\n if (style) {\n if (process.env.NODE_ENV !== 'production') {\n if (eqNaN(val)) {\n warn('style.' + key + ' must not be assigned with NaN.');\n }\n }\n\n style[key] = val;\n el.dirtyStyle && el.dirtyStyle();\n }\n\n return this;\n },\n getStyle: function (key) {\n if (process.env.NODE_ENV !== 'production') {\n assertNotReserved(key);\n }\n\n var style = tmpDuringScope.el.style;\n\n if (style) {\n return style[key];\n }\n },\n setExtra: function (key, val) {\n if (process.env.NODE_ENV !== 'production') {\n assertNotReserved(key);\n }\n\n var extra = tmpDuringScope.el.extra || (tmpDuringScope.el.extra = {});\n extra[key] = val;\n return this;\n },\n getExtra: function (key) {\n if (process.env.NODE_ENV !== 'production') {\n assertNotReserved(key);\n }\n\n var extra = tmpDuringScope.el.extra;\n\n if (extra) {\n return extra[key];\n }\n }\n};\n\nfunction assertNotReserved(key) {\n if (process.env.NODE_ENV !== 'production') {\n if (key === 'transition' || key === 'enterFrom' || key === 'leaveTo') {\n throw new Error('key must not be \"' + key + '\"');\n }\n }\n}\n\nfunction duringCall() {\n // Do not provide \"percent\" until some requirements come.\n // Because consider thies case:\n // enterFrom: {x: 100, y: 30}, transition: 'x'.\n // And enter duration is different from update duration.\n // Thus it might be confused about the meaning of \"percent\" in during callback.\n var scope = this;\n var el = scope.el;\n\n if (!el) {\n return;\n } // If el is remove from zr by reason like legend, during still need to called,\n // because el will be added back to zr and the prop value should not be incorrect.\n\n\n var latestUserDuring = transitionInnerStore(el).userDuring;\n var scopeUserDuring = scope.userDuring; // Ensured a during is only called once in each animation frame.\n // If a during is called multiple times in one frame, maybe some users' calculation logic\n // might be wrong (not sure whether this usage exists).\n // The case of a during might be called twice can be: by default there is a animator for\n // 'x', 'y' when init. Before the init animation finished, call `setOption` to start\n // another animators for 'style'/'shape'/'extra'.\n\n if (latestUserDuring !== scopeUserDuring) {\n // release\n scope.el = scope.userDuring = null;\n return;\n }\n\n tmpDuringScope.el = el; // Give no `this` to user in \"during\" calling.\n\n scopeUserDuring(transitionDuringAPI); // FIXME: if in future meet the case that some prop will be both modified in `during` and `state`,\n // consider the issue that the prop might be incorrect when return to \"normal\" state.\n}\n\nfunction prepareShapeOrExtraTransitionFrom(mainAttr, fromEl, elOption, transFromProps) {\n var attrOpt = elOption[mainAttr];\n\n if (!attrOpt) {\n return;\n }\n\n var elPropsInAttr = fromEl[mainAttr];\n var transFromPropsInAttr;\n\n if (elPropsInAttr) {\n var transition = elOption.transition;\n var attrTransition = attrOpt.transition;\n\n if (attrTransition) {\n !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {});\n\n if (isTransitionAll(attrTransition)) {\n extend(transFromPropsInAttr, elPropsInAttr);\n } else {\n var transitionKeys = normalizeToArray(attrTransition);\n\n for (var i = 0; i < transitionKeys.length; i++) {\n var key = transitionKeys[i];\n var elVal = elPropsInAttr[key];\n transFromPropsInAttr[key] = elVal;\n }\n }\n } else if (isTransitionAll(transition) || indexOf(transition, mainAttr) >= 0) {\n !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {});\n var elPropsInAttrKeys = keys(elPropsInAttr);\n\n for (var i = 0; i < elPropsInAttrKeys.length; i++) {\n var key = elPropsInAttrKeys[i];\n var elVal = elPropsInAttr[key];\n\n if (isNonStyleTransitionEnabled(attrOpt[key], elVal)) {\n transFromPropsInAttr[key] = elVal;\n }\n }\n }\n }\n}\n\nfunction prepareShapeOrExtraAllPropsFinal(mainAttr, elOption, allProps) {\n var attrOpt = elOption[mainAttr];\n\n if (!attrOpt) {\n return;\n }\n\n var allPropsInAttr = allProps[mainAttr] = {};\n var keysInAttr = keys(attrOpt);\n\n for (var i = 0; i < keysInAttr.length; i++) {\n var key = keysInAttr[i]; // To avoid share one object with different element, and\n // to avoid user modify the object inexpectedly, have to clone.\n\n allPropsInAttr[key] = cloneValue(attrOpt[key]);\n }\n}\n\nfunction prepareTransformTransitionFrom(el, elOption, transFromProps) {\n var transition = elOption.transition;\n var transitionKeys = isTransitionAll(transition) ? TRANSFORMABLE_PROPS : normalizeToArray(transition || []);\n\n for (var i = 0; i < transitionKeys.length; i++) {\n var key = transitionKeys[i];\n\n if (key === 'style' || key === 'shape' || key === 'extra') {\n continue;\n }\n\n var elVal = el[key];\n\n if (process.env.NODE_ENV !== 'production') {\n checkTransformPropRefer(key, 'el.transition');\n } // Do not clone, animator will perform that clone.\n\n\n transFromProps[key] = elVal;\n }\n}\n\nfunction prepareTransformAllPropsFinal(el, elOption, allProps) {\n for (var i = 0; i < LEGACY_TRANSFORM_PROPS.length; i++) {\n var legacyName = LEGACY_TRANSFORM_PROPS[i];\n var xyName = LEGACY_TRANSFORM_PROPS_MAP[legacyName];\n var legacyArr = elOption[legacyName];\n\n if (legacyArr) {\n allProps[xyName[0]] = legacyArr[0];\n allProps[xyName[1]] = legacyArr[1];\n }\n }\n\n for (var i = 0; i < TRANSFORMABLE_PROPS.length; i++) {\n var key = TRANSFORMABLE_PROPS[i];\n\n if (elOption[key] != null) {\n allProps[key] = elOption[key];\n }\n }\n}\n\nfunction prepareStyleTransitionFrom(fromEl, elOption, styleOpt, transFromProps) {\n if (!styleOpt) {\n return;\n }\n\n var fromElStyle = fromEl.style;\n var transFromStyleProps;\n\n if (fromElStyle) {\n var styleTransition = styleOpt.transition;\n var elTransition = elOption.transition;\n\n if (styleTransition && !isTransitionAll(styleTransition)) {\n var transitionKeys = normalizeToArray(styleTransition);\n !transFromStyleProps && (transFromStyleProps = transFromProps.style = {});\n\n for (var i = 0; i < transitionKeys.length; i++) {\n var key = transitionKeys[i];\n var elVal = fromElStyle[key]; // Do not clone, see `checkNonStyleTansitionRefer`.\n\n transFromStyleProps[key] = elVal;\n }\n } else if (fromEl.getAnimationStyleProps && (isTransitionAll(elTransition) || isTransitionAll(styleTransition) || indexOf(elTransition, 'style') >= 0)) {\n var animationProps = fromEl.getAnimationStyleProps();\n var animationStyleProps = animationProps ? animationProps.style : null;\n\n if (animationStyleProps) {\n !transFromStyleProps && (transFromStyleProps = transFromProps.style = {});\n var styleKeys = keys(styleOpt);\n\n for (var i = 0; i < styleKeys.length; i++) {\n var key = styleKeys[i];\n\n if (animationStyleProps[key]) {\n var elVal = fromElStyle[key];\n transFromStyleProps[key] = elVal;\n }\n }\n }\n }\n }\n}\n\nfunction isNonStyleTransitionEnabled(optVal, elVal) {\n // The same as `checkNonStyleTansitionRefer`.\n return !isArrayLike(optVal) ? optVal != null && isFinite(optVal) : optVal !== elVal;\n}\n\nvar checkTransformPropRefer;\n\nif (process.env.NODE_ENV !== 'production') {\n checkTransformPropRefer = function (key, usedIn) {\n if (!hasOwn(TRANSFORM_PROPS_MAP, key)) {\n warn('Prop `' + key + '` is not a permitted in `' + usedIn + '`. ' + 'Only `' + keys(TRANSFORM_PROPS_MAP).join('`, `') + '` are permitted.');\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { keys, filter, each, isArray, indexOf } from 'zrender/lib/core/util.js';\nimport { ELEMENT_ANIMATABLE_PROPS } from './customGraphicTransition.js';\nimport { getAnimationConfig } from './basicTransition.js';\nimport { warn } from '../util/log.js';\nimport { makeInner } from '../util/model.js';\nvar getStateToRestore = makeInner();\nvar KEYFRAME_EXCLUDE_KEYS = ['percent', 'easing', 'shape', 'style', 'extra'];\n/**\n * Stop previous keyframe animation and restore the attributes.\n * Avoid new keyframe animation starts with wrong internal state when the percent: 0 is not set.\n */\n\nexport function stopPreviousKeyframeAnimationAndRestore(el) {\n // Stop previous keyframe animation.\n el.stopAnimation('keyframe'); // Restore\n\n el.attr(getStateToRestore(el));\n}\nexport function applyKeyframeAnimation(el, animationOpts, animatableModel) {\n if (!animatableModel.isAnimationEnabled() || !animationOpts) {\n return;\n }\n\n if (isArray(animationOpts)) {\n each(animationOpts, function (singleAnimationOpts) {\n applyKeyframeAnimation(el, singleAnimationOpts, animatableModel);\n });\n return;\n }\n\n var keyframes = animationOpts.keyframes;\n var duration = animationOpts.duration;\n\n if (animatableModel && duration == null) {\n // Default to use duration of config.\n // NOTE: animation config from payload will be ignored because they are mainly for transitions.\n var config = getAnimationConfig('enter', animatableModel, 0);\n duration = config && config.duration;\n }\n\n if (!keyframes || !duration) {\n return;\n }\n\n var stateToRestore = getStateToRestore(el);\n each(ELEMENT_ANIMATABLE_PROPS, function (targetPropName) {\n if (targetPropName && !el[targetPropName]) {\n return;\n }\n\n var animator;\n var endFrameIsSet = false; // Sort keyframes by percent.\n\n keyframes.sort(function (a, b) {\n return a.percent - b.percent;\n });\n each(keyframes, function (kf) {\n // Stop current animation.\n var animators = el.animators;\n var kfValues = targetPropName ? kf[targetPropName] : kf;\n\n if (process.env.NODE_ENV !== 'production') {\n if (kf.percent >= 1) {\n endFrameIsSet = true;\n }\n }\n\n if (!kfValues) {\n return;\n }\n\n var propKeys = keys(kfValues);\n\n if (!targetPropName) {\n // PENDING performance?\n propKeys = filter(propKeys, function (key) {\n return indexOf(KEYFRAME_EXCLUDE_KEYS, key) < 0;\n });\n }\n\n if (!propKeys.length) {\n return;\n }\n\n if (!animator) {\n animator = el.animate(targetPropName, animationOpts.loop, true);\n animator.scope = 'keyframe';\n }\n\n for (var i = 0; i < animators.length; i++) {\n // Stop all other animation that is not keyframe.\n if (animators[i] !== animator && animators[i].targetName === animator.targetName) {\n animators[i].stopTracks(propKeys);\n }\n }\n\n targetPropName && (stateToRestore[targetPropName] = stateToRestore[targetPropName] || {});\n var savedTarget = targetPropName ? stateToRestore[targetPropName] : stateToRestore;\n each(propKeys, function (key) {\n // Save original value.\n savedTarget[key] = ((targetPropName ? el[targetPropName] : el) || {})[key];\n });\n animator.whenWithKeys(duration * kf.percent, kfValues, propKeys, kf.easing);\n });\n\n if (!animator) {\n return;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!endFrameIsSet) {\n warn('End frame with percent: 1 is missing in the keyframeAnimation.', true);\n }\n }\n\n animator.delay(animationOpts.delay || 0).duration(duration).start(animationOpts.easing);\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { hasOwn, assert, isString, retrieve2, retrieve3, defaults, each, indexOf } from 'zrender/lib/core/util.js';\nimport * as graphicUtil from '../../util/graphic.js';\nimport { setDefaultStateProxy, toggleHoverEmphasis } from '../../util/states.js';\nimport * as labelStyleHelper from '../../label/labelStyle.js';\nimport { getDefaultLabel } from '../helper/labelHelper.js';\nimport { getLayoutOnAxis } from '../../layout/barGrid.js';\nimport DataDiffer from '../../data/DataDiffer.js';\nimport ChartView from '../../view/Chart.js';\nimport { createClipPath } from '../helper/createClipPathFromCoordSys.js';\nimport prepareCartesian2d from '../../coord/cartesian/prepareCustom.js';\nimport prepareGeo from '../../coord/geo/prepareCustom.js';\nimport prepareSingleAxis from '../../coord/single/prepareCustom.js';\nimport preparePolar from '../../coord/polar/prepareCustom.js';\nimport prepareCalendar from '../../coord/calendar/prepareCustom.js';\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\nimport { convertToEC4StyleForCustomSerise, isEC4CompatibleStyle, convertFromEC4CompatibleStyle, warnDeprecated } from '../../util/styleCompat.js';\nimport { throwError } from '../../util/log.js';\nimport { createOrUpdatePatternFromDecal } from '../../util/decal.js';\nimport { STYLE_VISUAL_TYPE, NON_STYLE_VISUAL_PROPS, customInnerStore } from './CustomSeries.js';\nimport { applyLeaveTransition, applyUpdateTransition } from '../../animation/customGraphicTransition.js';\nimport { applyKeyframeAnimation, stopPreviousKeyframeAnimationAndRestore } from '../../animation/customGraphicKeyframeAnimation.js';\nvar EMPHASIS = 'emphasis';\nvar NORMAL = 'normal';\nvar BLUR = 'blur';\nvar SELECT = 'select';\nvar STATES = [NORMAL, EMPHASIS, BLUR, SELECT];\nvar PATH_ITEM_STYLE = {\n normal: ['itemStyle'],\n emphasis: [EMPHASIS, 'itemStyle'],\n blur: [BLUR, 'itemStyle'],\n select: [SELECT, 'itemStyle']\n};\nvar PATH_LABEL = {\n normal: ['label'],\n emphasis: [EMPHASIS, 'label'],\n blur: [BLUR, 'label'],\n select: [SELECT, 'label']\n};\nvar DEFAULT_TRANSITION = ['x', 'y']; // Use prefix to avoid index to be the same as el.name,\n// which will cause weird update animation.\n\nvar GROUP_DIFF_PREFIX = 'e\\0\\0';\nvar attachedTxInfoTmp = {\n normal: {},\n emphasis: {},\n blur: {},\n select: {}\n};\n/**\n * To reduce total package size of each coordinate systems, the modules `prepareCustom`\n * of each coordinate systems are not required by each coordinate systems directly, but\n * required by the module `custom`.\n *\n * prepareInfoForCustomSeries {Function}: optional\n * @return {Object} {coordSys: {...}, api: {\n * coord: function (data, clamp) {}, // return point in global.\n * size: function (dataSize, dataItem) {} // return size of each axis in coordSys.\n * }}\n */\n\nvar prepareCustoms = {\n cartesian2d: prepareCartesian2d,\n geo: prepareGeo,\n single: prepareSingleAxis,\n polar: preparePolar,\n calendar: prepareCalendar\n};\n\nfunction isPath(el) {\n return el instanceof graphicUtil.Path;\n}\n\nfunction isDisplayable(el) {\n return el instanceof Displayable;\n}\n\nfunction copyElement(sourceEl, targetEl) {\n targetEl.copyTransform(sourceEl);\n\n if (isDisplayable(targetEl) && isDisplayable(sourceEl)) {\n targetEl.setStyle(sourceEl.style);\n targetEl.z = sourceEl.z;\n targetEl.z2 = sourceEl.z2;\n targetEl.zlevel = sourceEl.zlevel;\n targetEl.invisible = sourceEl.invisible;\n targetEl.ignore = sourceEl.ignore;\n\n if (isPath(targetEl) && isPath(sourceEl)) {\n targetEl.setShape(sourceEl.shape);\n }\n }\n}\n\nvar CustomChartView =\n/** @class */\nfunction (_super) {\n __extends(CustomChartView, _super);\n\n function CustomChartView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = CustomChartView.type;\n return _this;\n }\n\n CustomChartView.prototype.render = function (customSeries, ecModel, api, payload) {\n // Clear previously rendered progressive elements.\n this._progressiveEls = null;\n var oldData = this._data;\n var data = customSeries.getData();\n var group = this.group;\n var renderItem = makeRenderItem(customSeries, data, ecModel, api);\n\n if (!oldData) {\n // Previous render is incremental render or first render.\n // Needs remove the incremental rendered elements.\n group.removeAll();\n }\n\n data.diff(oldData).add(function (newIdx) {\n createOrUpdateItem(api, null, newIdx, renderItem(newIdx, payload), customSeries, group, data);\n }).remove(function (oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n el && applyLeaveTransition(el, customInnerStore(el).option, customSeries);\n }).update(function (newIdx, oldIdx) {\n var oldEl = oldData.getItemGraphicEl(oldIdx);\n createOrUpdateItem(api, oldEl, newIdx, renderItem(newIdx, payload), customSeries, group, data);\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\n CustomChartView.prototype.incrementalPrepareRender = function (customSeries, ecModel, api) {\n this.group.removeAll();\n this._data = null;\n };\n\n CustomChartView.prototype.incrementalRender = function (params, customSeries, ecModel, api, payload) {\n var data = customSeries.getData();\n var renderItem = makeRenderItem(customSeries, data, ecModel, api);\n var progressiveEls = this._progressiveEls = [];\n\n function setIncrementalAndHoverLayer(el) {\n if (!el.isGroup) {\n el.incremental = true;\n el.ensureState('emphasis').hoverLayer = true;\n }\n }\n\n for (var idx = params.start; idx < params.end; idx++) {\n var el = createOrUpdateItem(null, null, idx, renderItem(idx, payload), customSeries, this.group, data);\n\n if (el) {\n el.traverse(setIncrementalAndHoverLayer);\n progressiveEls.push(el);\n }\n }\n };\n\n CustomChartView.prototype.eachRendered = function (cb) {\n graphicUtil.traverseElements(this._progressiveEls || this.group, cb);\n };\n\n CustomChartView.prototype.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 are triggered by its descendents.\n\n\n while ((targetEl = targetEl.__hostTarget || targetEl.parent) && targetEl !== this.group) {\n if (targetEl.name === elementName) {\n return true;\n }\n }\n\n return false;\n };\n\n CustomChartView.type = 'custom';\n return CustomChartView;\n}(ChartView);\n\nexport default CustomChartView;\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 customInnerStore(el).customPathData = pathData;\n } else if (graphicType === 'image') {\n el = new graphicUtil.Image({});\n customInnerStore(el).customImagePath = elOption.style.image;\n } else if (graphicType === 'text') {\n el = new graphicUtil.Text({}); // customInnerStore(el).customText = (elOption.style as TextStyleProps).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\n if (!Clz) {\n var errMsg = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'graphic type \"' + graphicType + '\" can not be found.';\n }\n\n throwError(errMsg);\n }\n\n el = new Clz();\n }\n\n customInnerStore(el).customGraphicType = graphicType;\n el.name = elOption.name; // Compat ec4: the default z2 lift is 1. If changing the number,\n // some cases probably be broken: hierarchy layout along z, like circle packing,\n // where emphasis only intending to modify color/border rather than lift z2.\n\n el.z2EmphasisLift = 1;\n el.z2SelectLift = 1;\n return el;\n}\n\nfunction updateElNormal( // Can be null/undefined\napi, el, dataIndex, elOption, attachedTxInfo, seriesModel, isInit) {\n // Stop and restore before update any other attributes.\n stopPreviousKeyframeAnimationAndRestore(el);\n var txCfgOpt = attachedTxInfo && attachedTxInfo.normal.cfg;\n\n if (txCfgOpt) {\n // PENDING: whether use user object directly rather than clone?\n // TODO:5.0 textConfig transition animation?\n el.setTextConfig(txCfgOpt);\n } // Default transition ['x', 'y']\n\n\n if (elOption && elOption.transition == null) {\n elOption.transition = DEFAULT_TRANSITION;\n } // Do some normalization on style.\n\n\n var styleOpt = elOption && elOption.style;\n\n if (styleOpt) {\n if (el.type === 'text') {\n var textOptionStyle = styleOpt; // Compatible with ec4: if `textFill` or `textStroke` exists use them.\n\n hasOwn(textOptionStyle, 'textFill') && (textOptionStyle.fill = textOptionStyle.textFill);\n hasOwn(textOptionStyle, 'textStroke') && (textOptionStyle.stroke = textOptionStyle.textStroke);\n }\n\n var decalPattern = void 0;\n var decalObj = isPath(el) ? styleOpt.decal : null;\n\n if (api && decalObj) {\n decalObj.dirty = true;\n decalPattern = createOrUpdatePatternFromDecal(decalObj, api);\n } // Always overwrite in case user specify this prop.\n\n\n styleOpt.__decalPattern = decalPattern;\n }\n\n if (isDisplayable(el)) {\n if (styleOpt) {\n var decalPattern = styleOpt.__decalPattern;\n\n if (decalPattern) {\n styleOpt.decal = decalPattern;\n }\n }\n }\n\n applyUpdateTransition(el, elOption, seriesModel, {\n dataIndex: dataIndex,\n isInit: isInit,\n clearStyle: true\n });\n applyKeyframeAnimation(el, elOption.keyframeAnimation, seriesModel);\n}\n\nfunction updateElOnState(state, el, elStateOpt, styleOpt, attachedTxInfo) {\n var elDisplayable = el.isGroup ? null : el;\n var txCfgOpt = attachedTxInfo && attachedTxInfo[state].cfg; // PENDING:5.0 support customize scale change and transition animation?\n\n if (elDisplayable) {\n // By default support auto lift color when hover whether `emphasis` specified.\n var stateObj = elDisplayable.ensureState(state);\n\n if (styleOpt === false) {\n var existingEmphasisState = elDisplayable.getState(state);\n\n if (existingEmphasisState) {\n existingEmphasisState.style = null;\n }\n } else {\n // style is needed to enable default emphasis.\n stateObj.style = styleOpt || null;\n } // If `elOption.styleEmphasis` or `elOption.emphasis.style` is `false`,\n // remove hover style.\n // If `elOption.textConfig` or `elOption.emphasis.textConfig` is null/undefined, it does not\n // make sense. So for simplicity, we do not ditinguish `hasOwnProperty` and null/undefined.\n\n\n if (txCfgOpt) {\n stateObj.textConfig = txCfgOpt;\n }\n\n setDefaultStateProxy(elDisplayable);\n }\n}\n\nfunction updateZ(el, elOption, seriesModel) {\n // Group not support textContent and not support z yet.\n if (el.isGroup) {\n return;\n }\n\n var elDisplayable = el;\n var currentZ = seriesModel.currentZ;\n var currentZLevel = seriesModel.currentZLevel; // Always erase.\n\n elDisplayable.z = currentZ;\n elDisplayable.zlevel = currentZLevel; // z2 must not be null/undefined, otherwise sort error may occur.\n\n var optZ2 = elOption.z2;\n optZ2 != null && (elDisplayable.z2 = optZ2 || 0);\n\n for (var i = 0; i < STATES.length; i++) {\n updateZForEachState(elDisplayable, elOption, STATES[i]);\n }\n}\n\nfunction updateZForEachState(elDisplayable, elOption, state) {\n var isNormal = state === NORMAL;\n var elStateOpt = isNormal ? elOption : retrieveStateOption(elOption, state);\n var optZ2 = elStateOpt ? elStateOpt.z2 : null;\n var stateObj;\n\n if (optZ2 != null) {\n // Do not `ensureState` until required.\n stateObj = isNormal ? elDisplayable : elDisplayable.ensureState(state);\n stateObj.z2 = optZ2 || 0;\n }\n}\n\nfunction makeRenderItem(customSeries, data, ecModel, api) {\n var renderItem = customSeries.get('renderItem');\n var coordSys = customSeries.coordinateSystem;\n var prepareResult = {};\n\n if (coordSys) {\n if (process.env.NODE_ENV !== 'production') {\n assert(renderItem, 'series.render is required.');\n assert(coordSys.prepareCustoms || prepareCustoms[coordSys.type], 'This coordSys does not support custom series.');\n } // `coordSys.prepareCustoms` is used for external coord sys like bmap.\n\n\n prepareResult = coordSys.prepareCustoms ? coordSys.prepareCustoms(coordSys) : prepareCustoms[coordSys.type](coordSys);\n }\n\n var userAPI = defaults({\n getWidth: api.getWidth,\n getHeight: api.getHeight,\n getZr: api.getZr,\n getDevicePixelRatio: api.getDevicePixelRatio,\n value: value,\n style: style,\n ordinalRawValue: ordinalRawValue,\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 }; // If someday intending to refactor them to a class, should consider do not\n // break change: currently these attribute member are encapsulated in a closure\n // so that do not need to force user to call these method with a scope.\n // Do not support call `api` asynchronously without dataIndexInside input.\n\n var currDataIndexInside;\n var currItemModel;\n var currItemStyleModels = {};\n var currLabelModels = {};\n var seriesItemStyleModels = {};\n var seriesLabelModels = {};\n\n for (var i = 0; i < STATES.length; i++) {\n var stateName = STATES[i];\n seriesItemStyleModels[stateName] = customSeries.getModel(PATH_ITEM_STYLE[stateName]);\n seriesLabelModels[stateName] = customSeries.getModel(PATH_LABEL[stateName]);\n }\n\n function getItemModel(dataIndexInside) {\n return dataIndexInside === currDataIndexInside ? currItemModel || (currItemModel = data.getItemModel(dataIndexInside)) : data.getItemModel(dataIndexInside);\n }\n\n function getItemStyleModel(dataIndexInside, state) {\n return !data.hasItemOption ? seriesItemStyleModels[state] : dataIndexInside === currDataIndexInside ? currItemStyleModels[state] || (currItemStyleModels[state] = getItemModel(dataIndexInside).getModel(PATH_ITEM_STYLE[state])) : getItemModel(dataIndexInside).getModel(PATH_ITEM_STYLE[state]);\n }\n\n function getLabelModel(dataIndexInside, state) {\n return !data.hasItemOption ? seriesLabelModels[state] : dataIndexInside === currDataIndexInside ? currLabelModels[state] || (currLabelModels[state] = getItemModel(dataIndexInside).getModel(PATH_LABEL[state])) : getItemModel(dataIndexInside).getModel(PATH_LABEL[state]);\n }\n\n return function (dataIndexInside, payload) {\n currDataIndexInside = dataIndexInside;\n currItemModel = null;\n currItemStyleModels = {};\n currLabelModels = {};\n return renderItem && renderItem(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 };\n /**\n * @public\n * @param dim by default 0.\n * @param dataIndexInside by default `currDataIndexInside`.\n */\n\n function value(dim, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n return data.getStore().get(data.getDimensionIndex(dim || 0), dataIndexInside);\n }\n /**\n * @public\n * @param dim by default 0.\n * @param dataIndexInside by default `currDataIndexInside`.\n */\n\n\n function ordinalRawValue(dim, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n dim = dim || 0;\n var dimInfo = data.getDimensionInfo(dim);\n\n if (!dimInfo) {\n var dimIndex = data.getDimensionIndex(dim);\n return dimIndex >= 0 ? data.getStore().get(dimIndex, dataIndexInside) : undefined;\n }\n\n var val = data.get(dimInfo.name, dataIndexInside);\n var ordinalMeta = dimInfo && dimInfo.ordinalMeta;\n return ordinalMeta ? ordinalMeta.categories[val] : val;\n }\n /**\n * @deprecated The original intention of `api.style` is enable to set itemStyle\n * like other series. But it is not necessary and not easy to give a strict definition\n * of what it returns. And since echarts5 it needs to be make compat work. So\n * deprecates it since echarts5.\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 *\n * [Compat]: since ec5, RectText has been separated from its hosts el.\n * so `api.style()` will only return the style from `itemStyle` but not handle `label`\n * any more. But `series.label` config is never published in doc.\n * We still compat it in `api.style()`. But not encourage to use it and will still not\n * to pulish it to doc.\n * @public\n * @param dataIndexInside by default `currDataIndexInside`.\n */\n\n\n function style(userProps, dataIndexInside) {\n if (process.env.NODE_ENV !== 'production') {\n warnDeprecated('api.style', 'Please write literal style directly instead.');\n }\n\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n var style = data.getItemVisual(dataIndexInside, 'style');\n var visualColor = style && style.fill;\n var opacity = style && style.opacity;\n var itemStyle = getItemStyleModel(dataIndexInside, NORMAL).getItemStyle();\n visualColor != null && (itemStyle.fill = visualColor);\n opacity != null && (itemStyle.opacity = opacity);\n var opt = {\n inheritColor: isString(visualColor) ? visualColor : '#000'\n };\n var labelModel = getLabelModel(dataIndexInside, NORMAL); // Now that the feature of \"auto adjust text fill/stroke\" has been migrated to zrender\n // since ec5, we should set `isAttached` as `false` here and make compat in\n // `convertToEC4StyleForCustomSerise`.\n\n var textStyle = labelStyleHelper.createTextStyle(labelModel, null, opt, false, true);\n textStyle.text = labelModel.getShallow('show') ? retrieve2(customSeries.getFormattedLabel(dataIndexInside, NORMAL), getDefaultLabel(data, dataIndexInside)) : null;\n var textConfig = labelStyleHelper.createTextConfig(labelModel, opt, false);\n preFetchFromExtra(userProps, itemStyle);\n itemStyle = convertToEC4StyleForCustomSerise(itemStyle, textStyle, textConfig);\n userProps && applyUserPropsAfter(itemStyle, userProps);\n itemStyle.legacy = true;\n return itemStyle;\n }\n /**\n * @deprecated The reason see `api.style()`\n * @public\n * @param dataIndexInside by default `currDataIndexInside`.\n */\n\n\n function styleEmphasis(userProps, dataIndexInside) {\n if (process.env.NODE_ENV !== 'production') {\n warnDeprecated('api.styleEmphasis', 'Please write literal style directly instead.');\n }\n\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n var itemStyle = getItemStyleModel(dataIndexInside, EMPHASIS).getItemStyle();\n var labelModel = getLabelModel(dataIndexInside, EMPHASIS);\n var textStyle = labelStyleHelper.createTextStyle(labelModel, null, null, true, true);\n textStyle.text = labelModel.getShallow('show') ? retrieve3(customSeries.getFormattedLabel(dataIndexInside, EMPHASIS), customSeries.getFormattedLabel(dataIndexInside, NORMAL), getDefaultLabel(data, dataIndexInside)) : null;\n var textConfig = labelStyleHelper.createTextConfig(labelModel, null, true);\n preFetchFromExtra(userProps, itemStyle);\n itemStyle = convertToEC4StyleForCustomSerise(itemStyle, textStyle, textConfig);\n userProps && applyUserPropsAfter(itemStyle, userProps);\n itemStyle.legacy = true;\n return itemStyle;\n }\n\n function applyUserPropsAfter(itemStyle, extra) {\n for (var key in extra) {\n if (hasOwn(extra, key)) {\n itemStyle[key] = extra[key];\n }\n }\n }\n\n function preFetchFromExtra(extra, itemStyle) {\n // A trick to retrieve those props firstly, which are used to\n // apply auto inside fill/stroke in `convertToEC4StyleForCustomSerise`.\n // (It's not reasonable but only for a degree of compat)\n if (extra) {\n extra.textFill && (itemStyle.textFill = extra.textFill);\n extra.textPosition && (itemStyle.textPosition = extra.textPosition);\n }\n }\n /**\n * @public\n * @param dataIndexInside by default `currDataIndexInside`.\n */\n\n\n function visual(visualType, dataIndexInside) {\n dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n\n if (hasOwn(STYLE_VISUAL_TYPE, visualType)) {\n var style_1 = data.getItemVisual(dataIndexInside, 'style');\n return style_1 ? style_1[STYLE_VISUAL_TYPE[visualType]] : null;\n } // Only support these visuals. Other visual might be inner tricky\n // for performance (like `style`), do not expose to users.\n\n\n if (hasOwn(NON_STYLE_VISUAL_PROPS, visualType)) {\n return data.getItemVisual(dataIndexInside, visualType);\n }\n }\n /**\n * @public\n * @return If not support, return undefined.\n */\n\n\n function barLayout(opt) {\n if (coordSys.type === 'cartesian2d') {\n var baseAxis = coordSys.getBaseAxis();\n return getLayoutOnAxis(defaults({\n axis: baseAxis\n }, opt));\n }\n }\n /**\n * @public\n */\n\n\n function currentSeriesIndices() {\n return ecModel.getCurrentSeriesIndices();\n }\n /**\n * @public\n * @return font string\n */\n\n\n function font(opt) {\n return labelStyleHelper.getFont(opt, ecModel);\n }\n}\n\nfunction wrapEncodeDef(data) {\n var encodeDef = {};\n each(data.dimensions, function (dimName) {\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] = data.getDimensionIndex(dimName);\n }\n });\n return encodeDef;\n}\n\nfunction createOrUpdateItem(api, existsEl, dataIndex, elOption, seriesModel, group, data) {\n // [Rule]\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 // The rule or \"merge\" see [STRATEGY_MERGE].\n // If `elOption` is `null`/`undefined`/`false` (when `renderItem` returns nothing).\n if (!elOption) {\n group.remove(existsEl);\n return;\n }\n\n var el = doCreateOrUpdateEl(api, existsEl, dataIndex, elOption, seriesModel, group);\n el && data.setItemGraphicEl(dataIndex, el);\n el && toggleHoverEmphasis(el, elOption.focus, elOption.blurScope, elOption.emphasisDisabled);\n return el;\n}\n\nfunction doCreateOrUpdateEl(api, existsEl, dataIndex, elOption, seriesModel, group) {\n if (process.env.NODE_ENV !== 'production') {\n assert(elOption, 'should not have an null/undefined element setting');\n }\n\n var toBeReplacedIdx = -1;\n var oldEl = existsEl;\n\n if (existsEl && doesElNeedRecreate(existsEl, elOption, seriesModel) // || (\n // // PENDING: even in one-to-one mapping case, if el is marked as morph,\n // // do not sure whether the el will be mapped to another el with different\n // // hierarchy in Group tree. So always recreate el rather than reuse the el.\n // morphHelper && morphHelper.isOneToOneFrom(el)\n // )\n ) {\n // Should keep at the original index, otherwise \"merge by index\" will be incorrect.\n toBeReplacedIdx = indexOf(group.childrenRef(), existsEl);\n existsEl = null;\n }\n\n var isInit = !existsEl;\n var el = existsEl;\n\n if (!el) {\n el = createEl(elOption);\n\n if (oldEl) {\n copyElement(oldEl, el);\n }\n } else {\n // FIMXE:NEXT unified clearState?\n // If in some case the performance issue arised, consider\n // do not clearState but update cached normal state directly.\n el.clearStates();\n } // Need to set morph: false explictly to disable automatically morphing.\n\n\n if (elOption.morph === false) {\n el.disableMorphing = true;\n } else if (el.disableMorphing) {\n el.disableMorphing = false;\n }\n\n attachedTxInfoTmp.normal.cfg = attachedTxInfoTmp.normal.conOpt = attachedTxInfoTmp.emphasis.cfg = attachedTxInfoTmp.emphasis.conOpt = attachedTxInfoTmp.blur.cfg = attachedTxInfoTmp.blur.conOpt = attachedTxInfoTmp.select.cfg = attachedTxInfoTmp.select.conOpt = null;\n attachedTxInfoTmp.isLegacy = false;\n doCreateOrUpdateAttachedTx(el, dataIndex, elOption, seriesModel, isInit, attachedTxInfoTmp);\n doCreateOrUpdateClipPath(el, dataIndex, elOption, seriesModel, isInit);\n updateElNormal(api, el, dataIndex, elOption, attachedTxInfoTmp, seriesModel, isInit); // `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 hasOwn(elOption, 'info') && (customInnerStore(el).info = elOption.info);\n\n for (var i = 0; i < STATES.length; i++) {\n var stateName = STATES[i];\n\n if (stateName !== NORMAL) {\n var otherStateOpt = retrieveStateOption(elOption, stateName);\n var otherStyleOpt = retrieveStyleOptionOnState(elOption, otherStateOpt, stateName);\n updateElOnState(stateName, el, otherStateOpt, otherStyleOpt, attachedTxInfoTmp);\n }\n }\n\n updateZ(el, elOption, seriesModel);\n\n if (elOption.type === 'group') {\n mergeChildren(api, el, dataIndex, elOption, seriesModel);\n }\n\n if (toBeReplacedIdx >= 0) {\n group.replaceAt(el, toBeReplacedIdx);\n } else {\n group.add(el);\n }\n\n return el;\n} // `el` must not be null/undefined.\n\n\nfunction doesElNeedRecreate(el, elOption, seriesModel) {\n var elInner = customInnerStore(el);\n var elOptionType = elOption.type;\n var elOptionShape = elOption.shape;\n var elOptionStyle = elOption.style;\n return (// Always create new if universal transition is enabled.\n // Because we do transition after render. It needs to know what old element is. Replacement will loose it.\n seriesModel.isUniversalTransitionEnabled() // If `elOptionType` is `null`, follow the merge principle.\n || elOptionType != null && elOptionType !== elInner.customGraphicType || elOptionType === 'path' && hasOwnPathData(elOptionShape) && getPathData(elOptionShape) !== elInner.customPathData || elOptionType === 'image' && hasOwn(elOptionStyle, 'image') && elOptionStyle.image !== elInner.customImagePath // // FIXME test and remove this restriction?\n // || (elOptionType === 'text'\n // && hasOwn(elOptionStyle, 'text')\n // && (elOptionStyle as TextStyleProps).text !== elInner.customText\n // )\n\n );\n}\n\nfunction doCreateOrUpdateClipPath(el, dataIndex, elOption, seriesModel, isInit) {\n // Based on the \"merge\" principle, if no clipPath provided,\n // do nothing. The exists clip will be totally removed only if\n // `el.clipPath` is `false`. Otherwise it will be merged/replaced.\n var clipPathOpt = elOption.clipPath;\n\n if (clipPathOpt === false) {\n if (el && el.getClipPath()) {\n el.removeClipPath();\n }\n } else if (clipPathOpt) {\n var clipPath = el.getClipPath();\n\n if (clipPath && doesElNeedRecreate(clipPath, clipPathOpt, seriesModel)) {\n clipPath = null;\n }\n\n if (!clipPath) {\n clipPath = createEl(clipPathOpt);\n\n if (process.env.NODE_ENV !== 'production') {\n assert(isPath(clipPath), 'Only any type of `path` can be used in `clipPath`, rather than ' + clipPath.type + '.');\n }\n\n el.setClipPath(clipPath);\n }\n\n updateElNormal(null, clipPath, dataIndex, clipPathOpt, null, seriesModel, isInit);\n } // If not define `clipPath` in option, do nothing unnecessary.\n\n}\n\nfunction doCreateOrUpdateAttachedTx(el, dataIndex, elOption, seriesModel, isInit, attachedTxInfo) {\n // Group does not support textContent temporarily until necessary.\n if (el.isGroup) {\n return;\n } // Normal must be called before emphasis, for `isLegacy` detection.\n\n\n processTxInfo(elOption, null, attachedTxInfo);\n processTxInfo(elOption, EMPHASIS, attachedTxInfo); // If `elOption.textConfig` or `elOption.textContent` is null/undefined, it does not make sense.\n // So for simplicity, if \"elOption hasOwnProperty of them but be null/undefined\", we do not\n // trade them as set to null to el.\n // Especially:\n // `elOption.textContent: false` means remove textContent.\n // `elOption.textContent.emphasis.style: false` means remove the style from emphasis state.\n\n var txConOptNormal = attachedTxInfo.normal.conOpt;\n var txConOptEmphasis = attachedTxInfo.emphasis.conOpt;\n var txConOptBlur = attachedTxInfo.blur.conOpt;\n var txConOptSelect = attachedTxInfo.select.conOpt;\n\n if (txConOptNormal != null || txConOptEmphasis != null || txConOptSelect != null || txConOptBlur != null) {\n var textContent = el.getTextContent();\n\n if (txConOptNormal === false) {\n textContent && el.removeTextContent();\n } else {\n txConOptNormal = attachedTxInfo.normal.conOpt = txConOptNormal || {\n type: 'text'\n };\n\n if (!textContent) {\n textContent = createEl(txConOptNormal);\n el.setTextContent(textContent);\n } else {\n // If in some case the performance issue arised, consider\n // do not clearState but update cached normal state directly.\n textContent.clearStates();\n }\n\n updateElNormal(null, textContent, dataIndex, txConOptNormal, null, seriesModel, isInit);\n var txConStlOptNormal = txConOptNormal && txConOptNormal.style;\n\n for (var i = 0; i < STATES.length; i++) {\n var stateName = STATES[i];\n\n if (stateName !== NORMAL) {\n var txConOptOtherState = attachedTxInfo[stateName].conOpt;\n updateElOnState(stateName, textContent, txConOptOtherState, retrieveStyleOptionOnState(txConOptNormal, txConOptOtherState, stateName), null);\n }\n }\n\n txConStlOptNormal ? textContent.dirty() : textContent.markRedraw();\n }\n }\n}\n\nfunction processTxInfo(elOption, state, attachedTxInfo) {\n var stateOpt = !state ? elOption : retrieveStateOption(elOption, state);\n var styleOpt = !state ? elOption.style : retrieveStyleOptionOnState(elOption, stateOpt, EMPHASIS);\n var elType = elOption.type;\n var txCfg = stateOpt ? stateOpt.textConfig : null;\n var txConOptNormal = elOption.textContent;\n var txConOpt = !txConOptNormal ? null : !state ? txConOptNormal : retrieveStateOption(txConOptNormal, state);\n\n if (styleOpt && ( // Because emphasis style has little info to detect legacy,\n // if normal is legacy, emphasis is trade as legacy.\n attachedTxInfo.isLegacy || isEC4CompatibleStyle(styleOpt, elType, !!txCfg, !!txConOpt))) {\n attachedTxInfo.isLegacy = true;\n var convertResult = convertFromEC4CompatibleStyle(styleOpt, elType, !state); // Explicitly specified `textConfig` and `textContent` has higher priority than\n // the ones generated by legacy style. Otherwise if users use them and `api.style`\n // at the same time, they not both work and hardly to known why.\n\n if (!txCfg && convertResult.textConfig) {\n txCfg = convertResult.textConfig;\n }\n\n if (!txConOpt && convertResult.textContent) {\n txConOpt = convertResult.textContent;\n }\n }\n\n if (!state && txConOpt) {\n var txConOptNormal_1 = txConOpt; // `textContent: {type: 'text'}`, the \"type\" is easy to be missing. So we tolerate it.\n\n !txConOptNormal_1.type && (txConOptNormal_1.type = 'text');\n\n if (process.env.NODE_ENV !== 'production') {\n // Do not tolerate incorrcet type for forward compat.\n assert(txConOptNormal_1.type === 'text', 'textContent.type must be \"text\"');\n }\n }\n\n var info = !state ? attachedTxInfo.normal : attachedTxInfo[state];\n info.cfg = txCfg;\n info.conOpt = txConOpt;\n}\n\nfunction retrieveStateOption(elOption, state) {\n return !state ? elOption : elOption ? elOption[state] : null;\n}\n\nfunction retrieveStyleOptionOnState(stateOptionNormal, stateOption, state) {\n var style = stateOption && stateOption.style;\n\n if (style == null && state === EMPHASIS && stateOptionNormal) {\n style = stateOptionNormal.styleEmphasis;\n }\n\n return style;\n} // Usage:\n// (1) By default, `elOption.$mergeChildren` is `'byIndex'`, which indicates\n// that the existing children will not be removed, and enables the feature\n// that 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\n// happen.\n// (5) If `elOption.$mergeChildren` is not `false` neither `'byName'` and the\n// `el` is a group, and if any of the new child is null, it means to remove\n// the element at the same index, if exists. On the other hand, if the new\n// child is and empty object `{}`, it means to keep the element not changed.\n//\n// For implementation simpleness, do not provide a direct way to remove single\n// child (otherwise the total indices of the children array have to be modified).\n// User can remove a single child by setting its `ignore` to `true`.\n\n\nfunction mergeChildren(api, el, dataIndex, elOption, seriesModel) {\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 api: api,\n oldChildren: el.children() || [],\n newChildren: newChildren || [],\n dataIndex: dataIndex,\n seriesModel: seriesModel,\n group: el\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 var newChild = newChildren[index];\n var oldChild = el.childAt(index);\n\n if (newChild) {\n if (newChild.ignore == null) {\n // The old child is set to be ignored if null (see comments\n // below). So we need to set ignore to be false back.\n newChild.ignore = false;\n }\n\n doCreateOrUpdateEl(api, oldChild, dataIndex, newChild, seriesModel, el);\n } else {\n if (process.env.NODE_ENV !== 'production') {\n assert(oldChild, 'renderItem should not return a group containing elements' + ' as null/undefined/{} if they do not exist before.');\n } // If the new element option is null, it means to remove the old\n // element. But we cannot really remove the element from the group\n // directly, because the element order may not be stable when this\n // element is added back. So we set the element to be ignored.\n\n\n oldChild.ignore = true;\n }\n }\n\n for (var i = el.childCount() - 1; i >= index; i--) {\n var child = el.childAt(i);\n removeChildFromGroup(el, child, seriesModel);\n }\n}\n\nfunction removeChildFromGroup(group, child, seriesModel) {\n // Do not support leave elements that are not mentioned in the latest\n // `renderItem` return. Otherwise users may not have a clear and simple\n // concept that how to control all of the elements.\n child && applyLeaveTransition(child, customInnerStore(group).option, seriesModel);\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 doCreateOrUpdateEl(context.api, child, context.dataIndex, childOption, context.seriesModel, context.group);\n}\n\nfunction processRemove(oldIndex) {\n var context = this.context;\n var child = context.oldChildren[oldIndex];\n child && applyLeaveTransition(child, customInnerStore(child).option, context.seriesModel);\n}\n/**\n * @return SVG Path data.\n */\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 && (hasOwn(shape, 'pathData') || hasOwn(shape, 'd'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport CustomSeriesModel from './CustomSeries.js';\nimport CustomChartView from './CustomView.js';\nexport function install(registers) {\n registers.registerChartView(CustomChartView);\n registers.registerSeriesModel(CustomSeriesModel);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport BaseAxisPointer from './BaseAxisPointer.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as viewHelper from './viewHelper.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport AxisBuilder from '../axis/AxisBuilder.js';\n\nvar PolarAxisPointer =\n/** @class */\nfunction (_super) {\n __extends(PolarAxisPointer, _super);\n\n function PolarAxisPointer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @override\n */\n\n\n PolarAxisPointer.prototype.makeElOption = function (elOption, value, axisModel, axisPointerModel, api) {\n var axis = axisModel.axis;\n\n if (axis.dim === 'angle') {\n this.animationThreshold = Math.PI / 18;\n }\n\n var polar = axis.polar;\n var otherAxis = polar.getOtherAxis(axis);\n var otherExtent = otherAxis.getExtent();\n var coordValue = axis.dataToCoord(value);\n var axisPointerType = axisPointerModel.get('type');\n\n if (axisPointerType && axisPointerType !== 'none') {\n var elStyle = viewHelper.buildElStyle(axisPointerModel);\n var pointerOption = pointerShapeBuilder[axisPointerType](axis, polar, coordValue, otherExtent);\n pointerOption.style = elStyle;\n elOption.graphicKey = pointerOption.type;\n elOption.pointer = pointerOption;\n }\n\n var labelMargin = axisPointerModel.get(['label', 'margin']);\n var labelPos = getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin);\n viewHelper.buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos);\n };\n\n return PolarAxisPointer;\n}(BaseAxisPointer);\n\n;\n\nfunction getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin) {\n var axis = axisModel.axis;\n var coord = axis.dataToCoord(value);\n var axisAngle = polar.getAngleAxis().getExtent()[0];\n axisAngle = axisAngle / 180 * Math.PI;\n var radiusExtent = polar.getRadiusAxis().getExtent();\n var position;\n var align;\n var verticalAlign;\n\n if (axis.dim === 'radius') {\n var transform = matrix.create();\n matrix.rotate(transform, transform, axisAngle);\n matrix.translate(transform, transform, [polar.cx, polar.cy]);\n position = graphic.applyTransform([coord, -labelMargin], transform);\n var labelRotation = axisModel.getModel('axisLabel').get('rotate') || 0; // @ts-ignore\n\n var labelLayout = AxisBuilder.innerTextLayout(axisAngle, labelRotation * Math.PI / 180, -1);\n align = labelLayout.textAlign;\n verticalAlign = labelLayout.textVerticalAlign;\n } else {\n // angle axis\n var r = radiusExtent[1];\n position = polar.coordToPoint([r + labelMargin, coord]);\n var cx = polar.cx;\n var cy = polar.cy;\n align = Math.abs(position[0] - cx) / r < 0.3 ? 'center' : position[0] > cx ? 'left' : 'right';\n verticalAlign = Math.abs(position[1] - cy) / r < 0.3 ? 'middle' : position[1] > cy ? 'top' : 'bottom';\n }\n\n return {\n position: position,\n align: align,\n verticalAlign: verticalAlign\n };\n}\n\nvar pointerShapeBuilder = {\n line: function (axis, polar, coordValue, otherExtent) {\n return axis.dim === 'angle' ? {\n type: 'Line',\n shape: viewHelper.makeLineShape(polar.coordToPoint([otherExtent[0], coordValue]), polar.coordToPoint([otherExtent[1], coordValue]))\n } : {\n type: 'Circle',\n shape: {\n cx: polar.cx,\n cy: polar.cy,\n r: coordValue\n }\n };\n },\n shadow: function (axis, polar, coordValue, otherExtent) {\n var bandWidth = Math.max(1, axis.getBandWidth());\n var radian = Math.PI / 180;\n return axis.dim === 'angle' ? {\n type: 'Sector',\n shape: viewHelper.makeSectorShape(polar.cx, polar.cy, otherExtent[0], otherExtent[1], // In ECharts y is negative if angle is positive\n (-coordValue - bandWidth / 2) * radian, (-coordValue + bandWidth / 2) * radian)\n } : {\n type: 'Sector',\n shape: viewHelper.makeSectorShape(polar.cx, polar.cy, coordValue - bandWidth / 2, coordValue + bandWidth / 2, 0, Math.PI * 2)\n };\n }\n};\nexport default PolarAxisPointer;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentModel from '../../model/Component.js';\n\nvar PolarModel =\n/** @class */\nfunction (_super) {\n __extends(PolarModel, _super);\n\n function PolarModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = PolarModel.type;\n return _this;\n }\n\n PolarModel.prototype.findAxisModel = function (axisType) {\n var foundAxisModel;\n var ecModel = this.ecModel;\n ecModel.eachComponent(axisType, function (axisModel) {\n if (axisModel.getCoordSysModel() === this) {\n foundAxisModel = axisModel;\n }\n }, this);\n return foundAxisModel;\n };\n\n PolarModel.type = 'polar';\n PolarModel.dependencies = ['radiusAxis', 'angleAxis'];\n PolarModel.defaultOption = {\n // zlevel: 0,\n z: 0,\n center: ['50%', '50%'],\n radius: '80%'\n };\n return PolarModel;\n}(ComponentModel);\n\nexport default PolarModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport ComponentModel from '../../model/Component.js';\nimport { AxisModelCommonMixin } from '../axisModelCommonMixin.js';\nimport { SINGLE_REFERRING } from '../../util/model.js';\n\nvar PolarAxisModel =\n/** @class */\nfunction (_super) {\n __extends(PolarAxisModel, _super);\n\n function PolarAxisModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n PolarAxisModel.prototype.getCoordSysModel = function () {\n return this.getReferringComponents('polar', SINGLE_REFERRING).models[0];\n };\n\n PolarAxisModel.type = 'polarAxis';\n return PolarAxisModel;\n}(ComponentModel);\n\nzrUtil.mixin(PolarAxisModel, AxisModelCommonMixin);\nexport { PolarAxisModel };\n\nvar AngleAxisModel =\n/** @class */\nfunction (_super) {\n __extends(AngleAxisModel, _super);\n\n function AngleAxisModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = AngleAxisModel.type;\n return _this;\n }\n\n AngleAxisModel.type = 'angleAxis';\n return AngleAxisModel;\n}(PolarAxisModel);\n\nexport { AngleAxisModel };\n\nvar RadiusAxisModel =\n/** @class */\nfunction (_super) {\n __extends(RadiusAxisModel, _super);\n\n function RadiusAxisModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = RadiusAxisModel.type;\n return _this;\n }\n\n RadiusAxisModel.type = 'radiusAxis';\n return RadiusAxisModel;\n}(PolarAxisModel);\n\nexport { RadiusAxisModel };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Axis from '../Axis.js';\n\nvar RadiusAxis =\n/** @class */\nfunction (_super) {\n __extends(RadiusAxis, _super);\n\n function RadiusAxis(scale, radiusExtent) {\n return _super.call(this, 'radius', scale, radiusExtent) || this;\n }\n\n RadiusAxis.prototype.pointToData = function (point, clamp) {\n return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];\n };\n\n return RadiusAxis;\n}(Axis);\n\nRadiusAxis.prototype.dataToRadius = Axis.prototype.dataToCoord;\nRadiusAxis.prototype.radiusToData = Axis.prototype.coordToData;\nexport default RadiusAxis;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as textContain from 'zrender/lib/contain/text.js';\nimport Axis from '../Axis.js';\nimport { makeInner } from '../../util/model.js';\nvar inner = makeInner();\n\nvar AngleAxis =\n/** @class */\nfunction (_super) {\n __extends(AngleAxis, _super);\n\n function AngleAxis(scale, angleExtent) {\n return _super.call(this, 'angle', scale, angleExtent || [0, 360]) || this;\n }\n\n AngleAxis.prototype.pointToData = function (point, clamp) {\n return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];\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\n\n AngleAxis.prototype.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 == null ? '' : 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\n return AngleAxis;\n}(Axis);\n\nAngleAxis.prototype.dataToAngle = Axis.prototype.dataToCoord;\nAngleAxis.prototype.angleToData = Axis.prototype.coordToData;\nexport default AngleAxis;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport RadiusAxis from './RadiusAxis.js';\nimport AngleAxis from './AngleAxis.js';\nexport var polarDimensions = ['radius', 'angle'];\n\nvar Polar =\n/** @class */\nfunction () {\n function Polar(name) {\n this.dimensions = polarDimensions;\n this.type = 'polar';\n /**\n * x of polar center\n */\n\n this.cx = 0;\n /**\n * y of polar center\n */\n\n this.cy = 0;\n this._radiusAxis = new RadiusAxis();\n this._angleAxis = new AngleAxis();\n this.axisPointerEnabled = true;\n this.name = name || '';\n this._radiusAxis.polar = this._angleAxis.polar = this;\n }\n /**\n * If contain coord\n */\n\n\n Polar.prototype.containPoint = function (point) {\n var coord = this.pointToCoord(point);\n return this._radiusAxis.contain(coord[0]) && this._angleAxis.contain(coord[1]);\n };\n /**\n * If contain data\n */\n\n\n Polar.prototype.containData = function (data) {\n return this._radiusAxis.containData(data[0]) && this._angleAxis.containData(data[1]);\n };\n\n Polar.prototype.getAxis = function (dim) {\n var key = '_' + dim + 'Axis';\n return this[key];\n };\n\n Polar.prototype.getAxes = function () {\n return [this._radiusAxis, this._angleAxis];\n };\n /**\n * Get axes by type of scale\n */\n\n\n Polar.prototype.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 Polar.prototype.getAngleAxis = function () {\n return this._angleAxis;\n };\n\n Polar.prototype.getRadiusAxis = function () {\n return this._radiusAxis;\n };\n\n Polar.prototype.getOtherAxis = function (axis) {\n var angleAxis = this._angleAxis;\n return axis === angleAxis ? this._radiusAxis : angleAxis;\n };\n /**\n * Base axis will be used on stacking.\n *\n */\n\n\n Polar.prototype.getBaseAxis = function () {\n return this.getAxesByScale('ordinal')[0] || this.getAxesByScale('time')[0] || this.getAngleAxis();\n };\n\n Polar.prototype.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 * 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 */\n\n\n Polar.prototype.dataToPoint = function (data, clamp) {\n return this.coordToPoint([this._radiusAxis.dataToRadius(data[0], clamp), this._angleAxis.dataToAngle(data[1], clamp)]);\n };\n /**\n * Convert a (x, y) point to data\n */\n\n\n Polar.prototype.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 * Convert a (x, y) point to (radius, angle) coord\n */\n\n\n Polar.prototype.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 * Convert a (radius, angle) coord to (x, y) point\n */\n\n\n Polar.prototype.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 * Get ring area of cartesian.\n * Area will have a contain function to determine if a point is in the coordinate system.\n */\n\n\n Polar.prototype.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; // minus a tiny value 1e-4 to avoid being clipped unexpectedly\n\n var d2 = dx * dx + dy * dy - 1e-4;\n var r = this.r;\n var r0 = this.r0;\n return d2 <= r * r && d2 >= r0 * r0;\n }\n };\n };\n\n Polar.prototype.convertToPixel = function (ecModel, finder, value) {\n var coordSys = getCoordSys(finder);\n return coordSys === this ? this.dataToPoint(value) : null;\n };\n\n Polar.prototype.convertFromPixel = function (ecModel, finder, pixel) {\n var coordSys = getCoordSys(finder);\n return coordSys === this ? this.pointToData(pixel) : null;\n };\n\n return Polar;\n}();\n\nfunction getCoordSys(finder) {\n var seriesModel = finder.seriesModel;\n var polarModel = finder.polarModel;\n return polarModel && polarModel.coordinateSystem || seriesModel && seriesModel.coordinateSystem;\n}\n\nexport default Polar;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO Axis scale\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport Polar, { polarDimensions } from './Polar.js';\nimport { parsePercent } from '../../util/number.js';\nimport { createScaleByModel, niceScaleExtent, getDataDimensionsOnAxis } from '../../coord/axisHelper.js';\nimport { SINGLE_REFERRING } from '../../util/model.js';\n/**\n * Resize method bound to the polar\n */\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 var parsedRadius = [parsePercent(radius[0], size), parsePercent(radius[1], size)];\n radiusAxis.inverse ? radiusAxis.setExtent(parsedRadius[1], parsedRadius[0]) : radiusAxis.setExtent(parsedRadius[0], parsedRadius[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_1 = seriesModel.getData();\n zrUtil.each(getDataDimensionsOnAxis(data_1, 'radius'), function (dim) {\n radiusAxis.scale.unionExtentFromData(data_1, dim);\n });\n zrUtil.each(getDataDimensionsOnAxis(data_1, 'angle'), function (dim) {\n angleAxis.scale.unionExtentFromData(data_1, 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\nfunction isAngleAxisModel(axisModel) {\n return axisModel.mainType === 'angleAxis';\n}\n/**\n * Set common axis properties\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 (isAngleAxisModel(axisModel)) {\n axis.inverse = 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: polarDimensions,\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 = seriesModel.getReferringComponents('polar', SINGLE_REFERRING).models[0];\n\n if (process.env.NODE_ENV !== 'production') {\n if (!polarModel) {\n throw new Error('Polar \"' + zrUtil.retrieve(seriesModel.get('polarIndex'), seriesModel.get('polarId'), 0) + '\" not found');\n }\n }\n\n seriesModel.coordinateSystem = polarModel.coordinateSystem;\n }\n });\n return polarList;\n }\n};\nexport default polarCreator;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nimport Model from '../../model/Model.js';\nimport AxisView from './AxisView.js';\nimport AxisBuilder from './AxisBuilder.js';\nimport { getECData } from '../../util/innerStore.js';\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 AngleAxisView =\n/** @class */\nfunction (_super) {\n __extends(AngleAxisView, _super);\n\n function AngleAxisView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = AngleAxisView.type;\n _this.axisPointerClass = 'PolarAxisPointer';\n return _this;\n }\n\n AngleAxisView.prototype.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 labelItem = zrUtil.clone(labelItem);\n var scale = angleAxis.scale;\n var tickValue = scale.type === 'ordinal' ? scale.getRawOrdinalNumber(labelItem.tickValue) : labelItem.tickValue;\n labelItem.coord = angleAxis.dataToCoord(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 angelAxisElementsBuilders[name](this.group, angleAxisModel, polar, ticksAngles, minorTickAngles, radiusExtent, labels);\n }\n }, this);\n };\n\n AngleAxisView.type = 'angleAxis';\n return AngleAxisView;\n}(AxisView);\n\nvar angelAxisElementsBuilders = {\n axisLine: function (group, 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 group.add(shape);\n },\n axisTick: function (group, 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 group.add(graphic.mergePath(lines, {\n style: zrUtil.defaults(tickModel.getModel('lineStyle').getLineStyle(), {\n stroke: angleAxisModel.get(['axisLine', 'lineStyle', 'color'])\n })\n }));\n },\n minorTick: function (group, 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 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 axisLabel: function (group, 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]) {\n var rawCategoryItem = rawCategoryData[tickValue];\n\n if (zrUtil.isObject(rawCategoryItem) && rawCategoryItem.textStyle) {\n labelModel = new Model(rawCategoryItem.textStyle, commonLabelModel, commonLabelModel.ecModel);\n }\n }\n\n var textEl = new graphic.Text({\n silent: AxisBuilder.isLabelSilent(angleAxisModel),\n style: createTextStyle(labelModel, {\n x: p[0],\n y: p[1],\n fill: labelModel.getTextColor() || angleAxisModel.get(['axisLine', 'lineStyle', 'color']),\n text: labelItem.formattedLabel,\n align: labelTextAlign,\n verticalAlign: labelTextVerticalAlign\n })\n });\n group.add(textEl); // Pack data for mouse event\n\n if (triggerEvent) {\n var eventData = AxisBuilder.makeAxisEventDataBase(angleAxisModel);\n eventData.targetType = 'axisLabel';\n eventData.value = labelItem.rawLabel;\n getECData(textEl).eventData = eventData;\n }\n }, this);\n },\n splitLine: function (group, 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 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 minorSplitLine: function (group, 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 group.add(graphic.mergePath(lines, {\n style: lineStyleModel.getLineStyle(),\n silent: true,\n z: angleAxisModel.get('z')\n }));\n },\n splitArea: function (group, 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, len = ticksAngles.length; i <= len; i++) {\n var coord = i === len ? ticksAngles[0].coord : ticksAngles[i].coord;\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: -coord * RADIAN,\n clockwise: clockwise\n },\n silent: true\n }));\n prevAngle = -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 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};\nexport default 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\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport AxisBuilder from './AxisBuilder.js';\nimport AxisView from './AxisView.js';\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\nvar selfBuilderAttrs = ['splitLine', 'splitArea', 'minorSplitLine'];\n\nvar RadiusAxisView =\n/** @class */\nfunction (_super) {\n __extends(RadiusAxisView, _super);\n\n function RadiusAxisView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = RadiusAxisView.type;\n _this.axisPointerClass = 'PolarAxisPointer';\n return _this;\n }\n\n RadiusAxisView.prototype.render = function (radiusAxisModel, ecModel) {\n this.group.removeAll();\n\n if (!radiusAxisModel.get('show')) {\n return;\n }\n\n var oldAxisGroup = this._axisGroup;\n var newAxisGroup = this._axisGroup = new graphic.Group();\n this.group.add(newAxisGroup);\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 newAxisGroup.add(axisBuilder.getGroup());\n graphic.groupTransition(oldAxisGroup, newAxisGroup, radiusAxisModel);\n zrUtil.each(selfBuilderAttrs, function (name) {\n if (radiusAxisModel.get([name, 'show']) && !radiusAxis.scale.isBlank()) {\n axisElementBuilders[name](this.group, radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords, minorTicksCoords);\n }\n }, this);\n };\n\n RadiusAxisView.type = 'radiusAxis';\n return RadiusAxisView;\n}(AxisView);\n\nvar axisElementBuilders = {\n splitLine: function (group, 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 // ensure circle radius >= 0\n r: Math.max(ticksCoords[i].coord, 0)\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 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 minorSplitLine: function (group, 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 group.add(graphic.mergePath(lines, {\n style: zrUtil.defaults({\n fill: null\n }, lineStyleModel.getLineStyle()),\n silent: true\n }));\n },\n splitArea: function (group, 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 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\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\nexport default RadiusAxisView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { parsePercent } from '../util/number.js';\nimport { isDimensionStacked } from '../data/helper/dataStackHelper.js';\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\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.dataToCoord(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 n: valueAxisStart // Negative stack\n\n };\n } // Should also consider #4243\n\n\n baseCoord = lastStackCoords[stackId][baseValue][sign];\n }\n\n var r0 = void 0;\n var r = void 0;\n var startAngle = void 0;\n var endAngle = void 0; // radial sector\n\n if (valueAxis.dim === 'radius') {\n var radiusSpan = valueAxis.dataToCoord(value) - valueAxisStart;\n var angle = baseAxis.dataToCoord(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.dataToCoord(value, clampLayout) - valueAxisStart;\n var radius = baseAxis.dataToCoord(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 // let extent = angleAxis.getExtent();\n // let 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 * Keep the same logic with bar in catesion: use end value to\n * control direction. Notice that if clockwise is true (by\n * default), the sector will always draw clockwisely, no matter\n * whether endAngle is greater or less than startAngle.\n */\n clockwise: startAngle >= endAngle\n });\n }\n });\n}\n/**\n * Calculate bar width and offset for radial bar charts\n */\n\n\nfunction calRadialBar(barSeries) {\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\nexport default barLayoutPolar;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { use } from '../../extension.js';\nimport AxisView from '../axis/AxisView.js';\nimport PolarAxisPointer from '../axisPointer/PolarAxisPointer.js';\nimport { install as installAxisPointer } from '../axisPointer/install.js';\nimport PolarModel from '../../coord/polar/PolarModel.js';\nimport axisModelCreator from '../../coord/axisModelCreator.js';\nimport { AngleAxisModel, RadiusAxisModel } from '../../coord/polar/AxisModel.js';\nimport polarCreator from '../../coord/polar/polarCreator.js';\nimport AngleAxisView from '../axis/AngleAxisView.js';\nimport RadiusAxisView from '../axis/RadiusAxisView.js';\nimport ComponentView from '../../view/Component.js';\nimport { curry } from 'zrender/lib/core/util.js';\nimport barLayoutPolar from '../../layout/barPolar.js';\nvar angleAxisExtraOption = {\n startAngle: 90,\n clockwise: true,\n splitNumber: 12,\n axisLabel: {\n rotate: 0\n }\n};\nvar radiusAxisExtraOption = {\n splitNumber: 5\n};\n\nvar PolarView =\n/** @class */\nfunction (_super) {\n __extends(PolarView, _super);\n\n function PolarView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = PolarView.type;\n return _this;\n }\n\n PolarView.type = 'polar';\n return PolarView;\n}(ComponentView);\n\nexport function install(registers) {\n use(installAxisPointer);\n AxisView.registerAxisPointerClass('PolarAxisPointer', PolarAxisPointer);\n registers.registerCoordinateSystem('polar', polarCreator);\n registers.registerComponentModel(PolarModel);\n registers.registerComponentView(PolarView); // Model and view for angleAxis and radiusAxis\n\n axisModelCreator(registers, 'angle', AngleAxisModel, angleAxisExtraOption);\n axisModelCreator(registers, 'radius', RadiusAxisModel, radiusAxisExtraOption);\n registers.registerComponentView(AngleAxisView);\n registers.registerComponentView(RadiusAxisView);\n registers.registerLayout(curry(barLayoutPolar, 'bar'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nexport function 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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport AxisBuilder from './AxisBuilder.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as singleAxisHelper from '../../coord/single/singleAxisHelper.js';\nimport AxisView from './AxisView.js';\nimport { rectCoordAxisBuildSplitArea, rectCoordAxisHandleRemove } from './axisSplitHelper.js';\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\nvar selfBuilderAttrs = ['splitArea', 'splitLine'];\n\nvar SingleAxisView =\n/** @class */\nfunction (_super) {\n __extends(SingleAxisView, _super);\n\n function SingleAxisView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SingleAxisView.type;\n _this.axisPointerClass = 'SingleAxisPointer';\n return _this;\n }\n\n SingleAxisView.prototype.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 axisElementBuilders[name](this, this.group, this._axisGroup, axisModel);\n }\n }, this);\n graphic.groupTransition(oldAxisGroup, this._axisGroup, axisModel);\n\n _super.prototype.render.call(this, axisModel, ecModel, api, payload);\n };\n\n SingleAxisView.prototype.remove = function () {\n rectCoordAxisHandleRemove(this);\n };\n\n SingleAxisView.type = 'singleAxis';\n return SingleAxisView;\n}(AxisView);\n\nvar axisElementBuilders = {\n splitLine: function (axisView, group, axisGroup, 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 lineColors = lineStyleModel.get('color');\n lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n var lineWidth = lineStyleModel.get('width');\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 line = new graphic.Line({\n shape: {\n x1: p1[0],\n y1: p1[1],\n x2: p2[0],\n y2: p2[1]\n },\n silent: true\n });\n graphic.subPixelOptimizeLine(line.shape, lineWidth);\n var colorIndex = lineCount++ % lineColors.length;\n splitLines[colorIndex] = splitLines[colorIndex] || [];\n splitLines[colorIndex].push(line);\n }\n\n var lineStyle = lineStyleModel.getLineStyle(['color']);\n\n for (var i = 0; i < splitLines.length; ++i) {\n group.add(graphic.mergePath(splitLines[i], {\n style: zrUtil.defaults({\n stroke: lineColors[i % lineColors.length]\n }, lineStyle),\n silent: true\n }));\n }\n },\n splitArea: function (axisView, group, axisGroup, axisModel) {\n rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, axisModel);\n }\n};\nexport default SingleAxisView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentModel from '../../model/Component.js';\nimport { AxisModelCommonMixin } from '../axisModelCommonMixin.js';\nimport { mixin } from 'zrender/lib/core/util.js';\n\nvar SingleAxisModel =\n/** @class */\nfunction (_super) {\n __extends(SingleAxisModel, _super);\n\n function SingleAxisModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SingleAxisModel.type;\n return _this;\n }\n\n SingleAxisModel.prototype.getCoordSysModel = function () {\n return this;\n };\n\n SingleAxisModel.type = 'singleAxis';\n SingleAxisModel.layoutMode = 'box';\n SingleAxisModel.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 return SingleAxisModel;\n}(ComponentModel);\n\nmixin(SingleAxisModel, AxisModelCommonMixin.prototype);\nexport default SingleAxisModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Axis from '../Axis.js';\n\nvar SingleAxis =\n/** @class */\nfunction (_super) {\n __extends(SingleAxis, _super);\n\n function SingleAxis(dim, scale, coordExtent, axisType, position) {\n var _this = _super.call(this, dim, scale, coordExtent) || this;\n\n _this.type = axisType || 'value';\n _this.position = position || 'bottom';\n return _this;\n }\n /**\n * Judge the orient of the axis.\n */\n\n\n SingleAxis.prototype.isHorizontal = function () {\n var position = this.position;\n return position === 'top' || position === 'bottom';\n };\n\n SingleAxis.prototype.pointToData = function (point, clamp) {\n return this.coordinateSystem.pointToData(point)[0];\n };\n\n return SingleAxis;\n}(Axis);\n\nexport default SingleAxis;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Single coordinates system.\n */\nimport SingleAxis from './SingleAxis.js';\nimport * as axisHelper from '../axisHelper.js';\nimport { getLayoutRect } from '../../util/layout.js';\nimport { each } from 'zrender/lib/core/util.js';\nexport var singleDimensions = ['single'];\n/**\n * Create a single coordinates system.\n */\n\nvar Single =\n/** @class */\nfunction () {\n function Single(axisModel, ecModel, api) {\n this.type = 'single';\n this.dimension = 'single';\n /**\n * Add it just for draw tooltip.\n */\n\n this.dimensions = singleDimensions;\n this.axisPointerEnabled = true;\n this.model = axisModel;\n\n this._init(axisModel, ecModel, api);\n }\n /**\n * Initialize single coordinate system.\n */\n\n\n Single.prototype._init = function (axisModel, ecModel, api) {\n var dim = this.dimension;\n var axis = new SingleAxis(dim, axisHelper.createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisModel.get('position'));\n var isCategory = axis.type === 'category';\n axis.onBand = isCategory && axisModel.get('boundaryGap');\n axis.inverse = axisModel.get('inverse');\n axis.orient = axisModel.get('orient');\n axisModel.axis = axis;\n axis.model = axisModel;\n axis.coordinateSystem = this;\n this._axis = axis;\n };\n /**\n * Update axis scale after data processed\n */\n\n\n Single.prototype.update = function (ecModel, api) {\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.coordinateSystem === this) {\n var data_1 = seriesModel.getData();\n each(data_1.mapDimensionsAll(this.dimension), function (dim) {\n this._axis.scale.unionExtentFromData(data_1, dim);\n }, this);\n axisHelper.niceScaleExtent(this._axis.scale, this._axis.model);\n }\n }, this);\n };\n /**\n * Resize the single coordinate system.\n */\n\n\n Single.prototype.resize = function (axisModel, api) {\n this._rect = getLayoutRect({\n left: axisModel.get('left'),\n top: axisModel.get('top'),\n right: axisModel.get('right'),\n bottom: axisModel.get('bottom'),\n width: axisModel.get('width'),\n height: axisModel.get('height')\n }, {\n width: api.getWidth(),\n height: api.getHeight()\n });\n\n this._adjustAxis();\n };\n\n Single.prototype.getRect = function () {\n return this._rect;\n };\n\n Single.prototype._adjustAxis = function () {\n var rect = this._rect;\n var axis = this._axis;\n var isHorizontal = axis.isHorizontal();\n var extent = isHorizontal ? [0, rect.width] : [0, rect.height];\n var idx = axis.inverse ? 1 : 0;\n axis.setExtent(extent[idx], extent[1 - idx]);\n\n this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y);\n };\n\n Single.prototype._updateAxisTransform = function (axis, coordBase) {\n var axisExtent = axis.getExtent();\n var extentSum = axisExtent[0] + axisExtent[1];\n var isHorizontal = axis.isHorizontal();\n axis.toGlobalCoord = isHorizontal ? function (coord) {\n return coord + coordBase;\n } : function (coord) {\n return extentSum - coord + coordBase;\n };\n axis.toLocalCoord = isHorizontal ? function (coord) {\n return coord - coordBase;\n } : function (coord) {\n return extentSum - coord + coordBase;\n };\n };\n /**\n * Get axis.\n */\n\n\n Single.prototype.getAxis = function () {\n return this._axis;\n };\n /**\n * Get axis, add it just for draw tooltip.\n */\n\n\n Single.prototype.getBaseAxis = function () {\n return this._axis;\n };\n\n Single.prototype.getAxes = function () {\n return [this._axis];\n };\n\n Single.prototype.getTooltipAxes = function () {\n return {\n baseAxes: [this.getAxis()],\n // Empty otherAxes\n otherAxes: []\n };\n };\n /**\n * If contain point.\n */\n\n\n Single.prototype.containPoint = function (point) {\n var rect = this.getRect();\n var axis = this.getAxis();\n var orient = axis.orient;\n\n if (orient === 'horizontal') {\n return axis.contain(axis.toLocalCoord(point[0])) && point[1] >= rect.y && point[1] <= rect.y + rect.height;\n } else {\n return axis.contain(axis.toLocalCoord(point[1])) && point[0] >= rect.y && point[0] <= rect.y + rect.height;\n }\n };\n\n Single.prototype.pointToData = function (point) {\n var axis = this.getAxis();\n return [axis.coordToData(axis.toLocalCoord(point[axis.orient === 'horizontal' ? 0 : 1]))];\n };\n /**\n * Convert the series data to concrete point.\n * Can be [val] | val\n */\n\n\n Single.prototype.dataToPoint = function (val) {\n var axis = this.getAxis();\n var rect = this.getRect();\n var pt = [];\n var idx = axis.orient === 'horizontal' ? 0 : 1;\n\n if (val instanceof Array) {\n val = val[0];\n }\n\n pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val));\n pt[1 - idx] = idx === 0 ? rect.y + rect.height / 2 : rect.x + rect.width / 2;\n return pt;\n };\n\n Single.prototype.convertToPixel = function (ecModel, finder, value) {\n var coordSys = getCoordSys(finder);\n return coordSys === this ? this.dataToPoint(value) : null;\n };\n\n Single.prototype.convertFromPixel = function (ecModel, finder, pixel) {\n var coordSys = getCoordSys(finder);\n return coordSys === this ? this.pointToData(pixel) : null;\n };\n\n return Single;\n}();\n\nfunction getCoordSys(finder) {\n var seriesModel = finder.seriesModel;\n var singleModel = finder.singleAxisModel;\n return singleModel && singleModel.coordinateSystem || seriesModel && seriesModel.coordinateSystem;\n}\n\nexport default Single;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Single coordinate system creator.\n */\nimport Single, { singleDimensions } from './Single.js';\nimport { SINGLE_REFERRING } from '../../util/model.js';\n/**\n * Create single coordinate system and inject it into seriesModel.\n */\n\nfunction create(ecModel, api) {\n var singles = [];\n ecModel.eachComponent('singleAxis', function (axisModel, idx) {\n var single = new Single(axisModel, ecModel, api);\n single.name = 'single_' + idx;\n single.resize(axisModel, api);\n axisModel.coordinateSystem = single;\n singles.push(single);\n });\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.get('coordinateSystem') === 'singleAxis') {\n var singleAxisModel = seriesModel.getReferringComponents('singleAxis', SINGLE_REFERRING).models[0];\n seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem;\n }\n });\n return singles;\n}\n\nvar singleCreator = {\n create: create,\n dimensions: singleDimensions\n};\nexport default singleCreator;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport BaseAxisPointer from './BaseAxisPointer.js';\nimport * as viewHelper from './viewHelper.js';\nimport * as singleAxisHelper from '../../coord/single/singleAxisHelper.js';\nvar XY = ['x', 'y'];\nvar WH = ['width', 'height'];\n\nvar SingleAxisPointer =\n/** @class */\nfunction (_super) {\n __extends(SingleAxisPointer, _super);\n\n function SingleAxisPointer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @override\n */\n\n\n SingleAxisPointer.prototype.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( // @ts-ignore\n value, elOption, layoutInfo, axisModel, axisPointerModel, api);\n };\n /**\n * @override\n */\n\n\n SingleAxisPointer.prototype.getHandleTransform = function (value, axisModel, axisPointerModel) {\n var layoutInfo = singleAxisHelper.layout(axisModel, {\n labelInside: false\n }); // @ts-ignore\n\n layoutInfo.labelMargin = axisPointerModel.get(['handle', 'margin']);\n var position = viewHelper.getTransformedPosition(axisModel.axis, value, layoutInfo);\n return {\n x: position[0],\n y: position[1],\n rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)\n };\n };\n /**\n * @override\n */\n\n\n SingleAxisPointer.prototype.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.x, transform.y];\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 x: currPosition[0],\n y: currPosition[1],\n rotation: transform.rotation,\n cursorPoint: cursorPoint,\n tooltipOption: {\n verticalAlign: 'middle'\n }\n };\n };\n\n return SingleAxisPointer;\n}(BaseAxisPointer);\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\nexport default SingleAxisPointer;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { use } from '../../extension.js';\nimport ComponentView from '../../view/Component.js';\nimport SingleAxisView from '../axis/SingleAxisView.js';\nimport axisModelCreator from '../../coord/axisModelCreator.js';\nimport SingleAxisModel from '../../coord/single/AxisModel.js';\nimport singleCreator from '../../coord/single/singleCreator.js';\nimport { install as installAxisPointer } from '../axisPointer/install.js';\nimport AxisView from '../axis/AxisView.js';\nimport SingleAxisPointer from '../axisPointer/SingleAxisPointer.js';\n\nvar SingleView =\n/** @class */\nfunction (_super) {\n __extends(SingleView, _super);\n\n function SingleView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SingleView.type;\n return _this;\n }\n\n SingleView.type = 'single';\n return SingleView;\n}(ComponentView);\n\nexport function install(registers) {\n use(installAxisPointer);\n AxisView.registerAxisPointerClass('SingleAxisPointer', SingleAxisPointer);\n registers.registerComponentView(SingleView); // Axis\n\n registers.registerComponentView(SingleAxisView);\n registers.registerComponentModel(SingleAxisModel);\n axisModelCreator(registers, 'single', SingleAxisModel, SingleAxisModel.defaultOption);\n registers.registerCoordinateSystem('single', singleCreator);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport ComponentModel from '../../model/Component.js';\nimport { getLayoutParams, sizeCalculable, mergeLayoutParam } from '../../util/layout.js';\n\nvar CalendarModel =\n/** @class */\nfunction (_super) {\n __extends(CalendarModel, _super);\n\n function CalendarModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = CalendarModel.type;\n return _this;\n }\n /**\n * @override\n */\n\n\n CalendarModel.prototype.init = function (option, parentModel, ecModel) {\n var inputPositionParams = getLayoutParams(option);\n\n _super.prototype.init.apply(this, arguments);\n\n mergeAndNormalizeLayoutParams(option, inputPositionParams);\n };\n /**\n * @override\n */\n\n\n CalendarModel.prototype.mergeOption = function (option) {\n _super.prototype.mergeOption.apply(this, arguments);\n\n mergeAndNormalizeLayoutParams(this.option, option);\n };\n\n CalendarModel.prototype.getCellSize = function () {\n // Has been normalized\n return this.option.cellSize;\n };\n\n CalendarModel.type = 'calendar';\n CalendarModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n left: 80,\n top: 60,\n cellSize: 20,\n // horizontal vertical\n orient: 'horizontal',\n // month separate line style\n splitLine: {\n show: true,\n lineStyle: {\n color: '#000',\n width: 1,\n type: 'solid'\n }\n },\n // rect style temporarily unused emphasis\n itemStyle: {\n color: '#fff',\n borderWidth: 1,\n borderColor: '#ccc'\n },\n // week text style\n dayLabel: {\n show: true,\n firstDay: 0,\n // start end\n position: 'start',\n margin: '50%',\n color: '#000'\n },\n // month text style\n monthLabel: {\n show: true,\n // start end\n position: 'start',\n margin: 5,\n // center or left\n align: 'center',\n formatter: null,\n color: '#000'\n },\n // year text style\n yearLabel: {\n show: true,\n // top bottom left right\n position: null,\n margin: 30,\n formatter: null,\n color: '#ccc',\n fontFamily: 'sans-serif',\n fontWeight: 'bolder',\n fontSize: 20\n }\n };\n return CalendarModel;\n}(ComponentModel);\n\nfunction mergeAndNormalizeLayoutParams(target, raw) {\n // Normalize cellSize\n var cellSize = target.cellSize;\n var cellSizeArr;\n\n if (!zrUtil.isArray(cellSize)) {\n cellSizeArr = target.cellSize = [cellSize, cellSize];\n } else {\n cellSizeArr = cellSize;\n }\n\n if (cellSizeArr.length === 1) {\n cellSizeArr[1] = cellSizeArr[0];\n }\n\n var ignoreSize = zrUtil.map([0, 1], function (hvIdx) {\n // If user have set `width` or both `left` and `right`, cellSizeArr\n // will be automatically set to 'auto', otherwise the default\n // setting of cellSizeArr will make `width` setting not work.\n if (sizeCalculable(raw, hvIdx)) {\n cellSizeArr[hvIdx] = 'auto';\n }\n\n return cellSizeArr[hvIdx] != null && cellSizeArr[hvIdx] !== 'auto';\n });\n mergeLayoutParam(target, raw, {\n type: 'box',\n ignoreSize: ignoreSize\n });\n}\n\nexport default CalendarModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { isString, extend, map, isFunction } from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nimport { formatTplSimple } from '../../util/format.js';\nimport { parsePercent } from '../../util/number.js';\nimport ComponentView from '../../view/Component.js';\nimport { getLocaleModel } from '../../core/locale.js';\n\nvar CalendarView =\n/** @class */\nfunction (_super) {\n __extends(CalendarView, _super);\n\n function CalendarView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = CalendarView.type;\n return _this;\n }\n\n CalendarView.prototype.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(); // locale\n\n var localeModel = ecModel.getLocaleModel();\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, localeModel, orient, group);\n\n this._renderWeekText(calendarModel, localeModel, rangeData, orient, group);\n }; // render day rect\n\n\n CalendarView.prototype._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 }; // render separate line\n\n\n CalendarView.prototype._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 }; // get points at both ends\n\n\n CalendarView.prototype._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 }; // render split line\n\n\n CalendarView.prototype._drawSplitline = function (points, lineStyle, group) {\n var poyline = new graphic.Polyline({\n z2: 20,\n shape: {\n points: points\n },\n style: lineStyle\n });\n group.add(poyline);\n }; // render month line of one week points\n\n\n CalendarView.prototype._getLinePointsOfOneWeek = function (calendarModel, date, orient) {\n var coordSys = calendarModel.coordinateSystem;\n var parsedDate = coordSys.getDateInfo(date);\n var points = [];\n\n for (var i = 0; i < 7; i++) {\n var tmpD = coordSys.getNextNDay(parsedDate.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\n CalendarView.prototype._formatterLabel = function (formatter, params) {\n if (isString(formatter) && formatter) {\n return formatTplSimple(formatter, params);\n }\n\n if (isFunction(formatter)) {\n return formatter(params);\n }\n\n return params.nameMap;\n };\n\n CalendarView.prototype._yearTextPositionControl = function (textEl, point, orient, position, margin) {\n var x = point[0];\n var y = point[1];\n var aligns = ['center', 'bottom'];\n\n if (position === 'bottom') {\n y += margin;\n aligns = ['center', 'top'];\n } else if (position === 'left') {\n x -= margin;\n } else if (position === 'right') {\n x += margin;\n aligns = ['center', 'top'];\n } else {\n // top\n y -= 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 x: x,\n y: y,\n style: {\n align: aligns[0],\n verticalAlign: aligns[1]\n }\n };\n }; // render year\n\n\n CalendarView.prototype._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 style: createTextStyle(yearLabel, {\n text: content\n })\n });\n yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin));\n group.add(yearText);\n };\n\n CalendarView.prototype._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 align: align,\n verticalAlign: vAlign\n };\n }; // render month and year text\n\n\n CalendarView.prototype._renderMonthText = function (calendarModel, localeModel, 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 (!nameMap || isString(nameMap)) {\n if (nameMap) {\n // case-sensitive\n localeModel = getLocaleModel(nameMap) || localeModel;\n } // PENDING\n // for ZH locale, original form is `一月` but current form is `1月`\n\n\n nameMap = localeModel.get(['time', 'monthAbbr']) || [];\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_1 = 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_1\n };\n\n var content = this._formatterLabel(formatter, params);\n\n var monthText = new graphic.Text({\n z2: 30,\n style: extend(createTextStyle(monthLabel, {\n text: content\n }), this._monthTextPositionControl(tmp, isCenter, orient, pos, margin))\n });\n group.add(monthText);\n }\n };\n\n CalendarView.prototype._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 align: align,\n verticalAlign: vAlign\n };\n }; // render weeks\n\n\n CalendarView.prototype._renderWeekText = function (calendarModel, localeModel, 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 (!nameMap || isString(nameMap)) {\n if (nameMap) {\n // case-sensitive\n localeModel = getLocaleModel(nameMap) || localeModel;\n } // Use the first letter of `dayOfWeekAbbr` if `dayOfWeekShort` doesn't exist in the locale file\n\n\n var dayOfWeekShort = localeModel.get(['time', 'dayOfWeekShort']);\n nameMap = dayOfWeekShort || map(localeModel.get(['time', 'dayOfWeekAbbr']), function (val) {\n return val[0];\n });\n }\n\n var start = coordSys.getNextNDay(rangeData.end.time, 7 - rangeData.lweek).time;\n var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()];\n margin = parsePercent(margin, Math.min(cellSize[1], cellSize[0]));\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 style: extend(createTextStyle(dayLabel, {\n text: nameMap[day]\n }), this._weekTextPositionControl(point, orient, pos, margin, cellSize))\n });\n group.add(weekText);\n }\n };\n\n CalendarView.type = 'calendar';\n return CalendarView;\n}(ComponentView);\n\nexport default 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/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as layout from '../../util/layout.js';\nimport * as numberUtil from '../../util/number.js'; // (24*60*60*1000)\n\nvar PROXIMATE_ONE_DAY = 86400000;\n\nvar Calendar =\n/** @class */\nfunction () {\n function Calendar(calendarModel, ecModel, api) {\n this.type = 'calendar';\n this.dimensions = Calendar.dimensions; // Required in createListFromData\n\n this.getDimensionsInfo = Calendar.getDimensionsInfo;\n this._model = calendarModel;\n }\n\n Calendar.getDimensionsInfo = function () {\n return [{\n name: 'time',\n type: 'time'\n }, 'value'];\n };\n\n Calendar.prototype.getRangeInfo = function () {\n return this._rangeInfo;\n };\n\n Calendar.prototype.getModel = function () {\n return this._model;\n };\n\n Calendar.prototype.getRect = function () {\n return this._rect;\n };\n\n Calendar.prototype.getCellWidth = function () {\n return this._sw;\n };\n\n Calendar.prototype.getCellHeight = function () {\n return this._sh;\n };\n\n Calendar.prototype.getOrient = function () {\n return this._orient;\n };\n /**\n * getFirstDayOfWeek\n *\n * @example\n * 0 : start at Sunday\n * 1 : start at Monday\n *\n * @return {number}\n */\n\n\n Calendar.prototype.getFirstDayOfWeek = function () {\n return this._firstDayOfWeek;\n };\n /**\n * get date info\n * }\n */\n\n\n Calendar.prototype.getDateInfo = function (date) {\n date = numberUtil.parseDate(date);\n var y = date.getFullYear();\n var m = date.getMonth() + 1;\n var mStr = m < 10 ? '0' + m : '' + m;\n var d = date.getDate();\n var dStr = 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: mStr,\n d: dStr,\n day: day,\n time: date.getTime(),\n formatedDate: y + '-' + mStr + '-' + dStr,\n date: date\n };\n };\n\n Calendar.prototype.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\n Calendar.prototype.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.getCellSize().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 } // Has been calculated out number.\n\n\n this._sw = cellSize[0];\n this._sh = cellSize[1];\n };\n /**\n * Convert a time data(time, value) item to (x, y) point.\n */\n // TODO Clamp of calendar is not same with cartesian coordinate systems.\n // It will return NaN if data exceeds.\n\n\n Calendar.prototype.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 * Convert a (x, y) point to time data\n */\n\n\n Calendar.prototype.pointToData = function (point) {\n var date = this.pointToDate(point);\n return date && date.time;\n };\n /**\n * Convert a time date item to (x, y) four point.\n */\n\n\n Calendar.prototype.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 * Convert a (x, y) point to time date\n *\n * @param {Array} point point\n * @return {Object} date\n */\n\n\n Calendar.prototype.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 Calendar.prototype.convertToPixel = function (ecModel, finder, value) {\n var coordSys = getCoordSys(finder);\n return coordSys === this ? coordSys.dataToPoint(value) : null;\n };\n\n Calendar.prototype.convertFromPixel = function (ecModel, finder, pixel) {\n var coordSys = getCoordSys(finder);\n return coordSys === this ? coordSys.pointToData(pixel) : null;\n };\n\n Calendar.prototype.containPoint = function (point) {\n console.warn('Not implemented.');\n return false;\n };\n /**\n * initRange\n * Normalize to an [start, end] array\n */\n\n\n Calendar.prototype._initRangeOption = function () {\n var range = this._model.get('range');\n\n var normalizedRange; // Convert [1990] to 1990\n\n if (zrUtil.isArray(range) && range.length === 1) {\n range = range[0];\n }\n\n if (!zrUtil.isArray(range)) {\n var rangeStr = range.toString(); // One year.\n\n if (/^\\d{4}$/.test(rangeStr)) {\n normalizedRange = [rangeStr + '-01-01', rangeStr + '-12-31'];\n } // One month\n\n\n if (/^\\d{4}[\\/|-]\\d{1,2}$/.test(rangeStr)) {\n var start = this.getDateInfo(rangeStr);\n var firstDay = start.date;\n firstDay.setMonth(firstDay.getMonth() + 1);\n var end = this.getNextNDay(firstDay, -1);\n normalizedRange = [start.formatedDate, end.formatedDate];\n } // One day\n\n\n if (/^\\d{4}[\\/|-]\\d{1,2}[\\/|-]\\d{1,2}$/.test(rangeStr)) {\n normalizedRange = [rangeStr, rangeStr];\n }\n } else {\n normalizedRange = range;\n }\n\n if (!normalizedRange) {\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.logError('Invalid date range.');\n } // Not handling it.\n\n\n return range;\n }\n\n var tmp = this._getRangeInfo(normalizedRange);\n\n if (tmp.start.time > tmp.end.time) {\n normalizedRange.reverse();\n }\n\n return normalizedRange;\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\n\n Calendar.prototype._getRangeInfo = function (range) {\n var parsedRange = [this.getDateInfo(range[0]), this.getDateInfo(range[1])];\n var reversed;\n\n if (parsedRange[0].time > parsedRange[1].time) {\n reversed = true;\n parsedRange.reverse();\n }\n\n var allDay = Math.floor(parsedRange[1].time / PROXIMATE_ONE_DAY) - Math.floor(parsedRange[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 // let first = new Date(1478412000000 - 3600 * 1000 * 2.5);\n // let second = new Date(1478412000000);\n // let 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(parsedRange[0].time);\n var startDateNum = date.getDate();\n var endDateNum = parsedRange[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() - parsedRange[1].time > 0 ? 1 : -1;\n\n while ((dateNum = date.getDate()) !== endDateNum && (date.getTime() - parsedRange[1].time) * sign > 0) {\n allDay -= sign;\n date.setDate(dateNum - sign);\n }\n }\n\n var weeks = Math.floor((allDay + parsedRange[0].day + 6) / 7);\n var nthWeek = reversed ? -weeks + 1 : weeks - 1;\n reversed && parsedRange.reverse();\n return {\n range: [parsedRange[0].formatedDate, parsedRange[1].formatedDate],\n start: parsedRange[0],\n end: parsedRange[1],\n allDay: allDay,\n weeks: weeks,\n // From 0.\n nthWeek: nthWeek,\n fweek: parsedRange[0].day,\n lweek: parsedRange[1].day\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\n\n Calendar.prototype._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 null;\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\n Calendar.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\n Calendar.dimensions = ['time', 'value'];\n return Calendar;\n}();\n\nfunction getCoordSys(finder) {\n var calendarModel = finder.calendarModel;\n var seriesModel = finder.seriesModel;\n var coordSys = calendarModel ? calendarModel.coordinateSystem : seriesModel ? seriesModel.coordinateSystem : null;\n return coordSys;\n}\n\nexport default Calendar;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport CalendarModel from '../../coord/calendar/CalendarModel.js';\nimport CalendarView from './CalendarView.js';\nimport Calendar from '../../coord/calendar/Calendar.js';\nexport function install(registers) {\n registers.registerComponentModel(CalendarModel);\n registers.registerComponentView(CalendarView);\n registers.registerCoordinateSystem('calendar', Calendar);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as modelUtil from '../../util/model.js';\nimport ComponentModel from '../../model/Component.js';\nimport { copyLayoutParams, mergeLayoutParam } from '../../util/layout.js';\n;\n;\n;\nexport function setKeyInfoToNewElOption(resultItem, newElOption) {\n var existElOption = resultItem.existing; // Set id and type after id assigned.\n\n newElOption.id = resultItem.keyInfo.id;\n !newElOption.type && existElOption && (newElOption.type = existElOption.type); // Set parent id if not specified\n\n if (newElOption.parentId == null) {\n var newElParentOption = newElOption.parentOption;\n\n if (newElParentOption) {\n newElOption.parentId = newElParentOption.id;\n } else if (existElOption) {\n newElOption.parentId = existElOption.parentId;\n }\n } // Clear\n\n\n newElOption.parentOption = null;\n}\n\nfunction isSetLoc(obj, props) {\n var isSet;\n zrUtil.each(props, function (prop) {\n obj[prop] != null && obj[prop] !== 'auto' && (isSet = true);\n });\n return isSet;\n}\n\nfunction mergeNewElOptionToExist(existList, index, newElOption) {\n // Update existing options, for `getOption` feature.\n var newElOptCopy = zrUtil.extend({}, newElOption);\n var existElOption = existList[index];\n var $action = newElOption.$action || 'merge';\n\n if ($action === 'merge') {\n if (existElOption) {\n if (process.env.NODE_ENV !== 'production') {\n var newType = newElOption.type;\n zrUtil.assert(!newType || existElOption.type === newType, 'Please set $action: \"replace\" to change `type`');\n } // We can ensure that newElOptCopy and existElOption are not\n // the same object, so `merge` will not change newElOptCopy.\n\n\n zrUtil.merge(existElOption, newElOptCopy, true); // Rigid body, use ignoreSize.\n\n mergeLayoutParam(existElOption, newElOptCopy, {\n ignoreSize: true\n }); // Will be used in render.\n\n copyLayoutParams(newElOption, existElOption); // Copy transition info to new option so it can be used in the transition.\n // DO IT AFTER merge\n\n copyTransitionInfo(newElOption, existElOption);\n copyTransitionInfo(newElOption, existElOption, 'shape');\n copyTransitionInfo(newElOption, existElOption, 'style');\n copyTransitionInfo(newElOption, existElOption, 'extra'); // Copy clipPath\n\n newElOption.clipPath = existElOption.clipPath;\n } else {\n existList[index] = newElOptCopy;\n }\n } else if ($action === 'replace') {\n existList[index] = newElOptCopy;\n } else if ($action === 'remove') {\n // null will be cleaned later.\n existElOption && (existList[index] = null);\n }\n}\n\nvar TRANSITION_PROPS_TO_COPY = ['transition', 'enterFrom', 'leaveTo'];\nvar ROOT_TRANSITION_PROPS_TO_COPY = TRANSITION_PROPS_TO_COPY.concat(['enterAnimation', 'updateAnimation', 'leaveAnimation']);\n\nfunction copyTransitionInfo(target, source, targetProp) {\n if (targetProp) {\n if (!target[targetProp] && source[targetProp]) {\n // TODO avoid creating this empty object when there is no transition configuration.\n target[targetProp] = {};\n }\n\n target = target[targetProp];\n source = source[targetProp];\n }\n\n if (!target || !source) {\n return;\n }\n\n var props = targetProp ? TRANSITION_PROPS_TO_COPY : ROOT_TRANSITION_PROPS_TO_COPY;\n\n for (var i = 0; i < props.length; i++) {\n var prop = props[i];\n\n if (target[prop] == null && source[prop] != null) {\n target[prop] = source[prop];\n }\n }\n}\n\nfunction setLayoutInfoToExist(existItem, newElOption) {\n if (!existItem) {\n return;\n }\n\n existItem.hv = newElOption.hv = [// Rigid body, don't care about `width`.\n isSetLoc(newElOption, ['left', 'right']), // Rigid body, don't care about `height`.\n isSetLoc(newElOption, ['top', 'bottom'])]; // Give default group size. Otherwise layout error may occur.\n\n if (existItem.type === 'group') {\n var existingGroupOpt = existItem;\n var newGroupOpt = newElOption;\n existingGroupOpt.width == null && (existingGroupOpt.width = newGroupOpt.width = 0);\n existingGroupOpt.height == null && (existingGroupOpt.height = newGroupOpt.height = 0);\n }\n}\n\nvar GraphicComponentModel =\n/** @class */\nfunction (_super) {\n __extends(GraphicComponentModel, _super);\n\n function GraphicComponentModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = GraphicComponentModel.type;\n _this.preventAutoZ = true;\n return _this;\n }\n\n GraphicComponentModel.prototype.mergeOption = function (option, ecModel) {\n // Prevent default merge to elements\n var elements = this.option.elements;\n this.option.elements = null;\n\n _super.prototype.mergeOption.call(this, option, ecModel);\n\n this.option.elements = elements;\n };\n\n GraphicComponentModel.prototype.optionUpdated = function (newOption, isInit) {\n var thisOption = this.option;\n var newList = (isInit ? thisOption : newOption).elements;\n var existList = thisOption.elements = isInit ? [] : thisOption.elements;\n var flattenedList = [];\n\n this._flatten(newList, flattenedList, null);\n\n var mappingResult = modelUtil.mappingToExists(existList, flattenedList, 'normalMerge'); // Clear elOptionsToUpdate\n\n var elOptionsToUpdate = this._elOptionsToUpdate = [];\n zrUtil.each(mappingResult, function (resultItem, index) {\n var newElOption = resultItem.newOption;\n\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.assert(zrUtil.isObject(newElOption) || resultItem.existing, 'Empty graphic option definition');\n }\n\n if (!newElOption) {\n return;\n }\n\n elOptionsToUpdate.push(newElOption);\n setKeyInfoToNewElOption(resultItem, newElOption);\n mergeNewElOptionToExist(existList, index, newElOption);\n setLayoutInfoToExist(existList[index], newElOption);\n }, this); // Clean\n\n thisOption.elements = zrUtil.filter(existList, function (item) {\n // $action should be volatile, otherwise option gotten from\n // `getOption` will contain unexpected $action.\n item && delete item.$action;\n return item != null;\n });\n };\n /**\n * Convert\n * [{\n * type: 'group',\n * id: 'xx',\n * children: [{type: 'circle'}, {type: 'polygon'}]\n * }]\n * to\n * [\n * {type: 'group', id: 'xx'},\n * {type: 'circle', parentId: 'xx'},\n * {type: 'polygon', parentId: 'xx'}\n * ]\n */\n\n\n GraphicComponentModel.prototype._flatten = function (optionList, result, parentOption) {\n zrUtil.each(optionList, function (option) {\n if (!option) {\n return;\n }\n\n if (parentOption) {\n option.parentOption = parentOption;\n }\n\n result.push(option);\n var children = option.children; // here we don't judge if option.type is `group`\n // when new option doesn't provide `type`, it will cause that the children can't be updated.\n\n if (children && children.length) {\n this._flatten(children, result, option);\n } // Deleting for JSON output, and for not affecting group creation.\n\n\n delete option.children;\n }, this);\n }; // FIXME\n // Pass to view using payload? setOption has a payload?\n\n\n GraphicComponentModel.prototype.useElOptionsToUpdate = function () {\n var els = this._elOptionsToUpdate; // Clear to avoid render duplicately when zooming.\n\n this._elOptionsToUpdate = null;\n return els;\n };\n\n GraphicComponentModel.type = 'graphic';\n GraphicComponentModel.defaultOption = {\n elements: [] // parentId: null\n\n };\n return GraphicComponentModel;\n}(ComponentModel);\n\nexport { GraphicComponentModel };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport Displayable from 'zrender/lib/graphic/Displayable.js';\nimport * as modelUtil from '../../util/model.js';\nimport * as graphicUtil from '../../util/graphic.js';\nimport * as layoutUtil from '../../util/layout.js';\nimport { parsePercent } from '../../util/number.js';\nimport ComponentView from '../../view/Component.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { isEC4CompatibleStyle, convertFromEC4CompatibleStyle } from '../../util/styleCompat.js';\nimport { applyLeaveTransition, applyUpdateTransition, isTransitionAll, updateLeaveTo } from '../../animation/customGraphicTransition.js';\nimport { updateProps } from '../../animation/basicTransition.js';\nimport { applyKeyframeAnimation, stopPreviousKeyframeAnimationAndRestore } from '../../animation/customGraphicKeyframeAnimation.js';\nvar nonShapeGraphicElements = {\n // Reserved but not supported in graphic component.\n path: null,\n compoundPath: null,\n // Supported in graphic component.\n group: graphicUtil.Group,\n image: graphicUtil.Image,\n text: graphicUtil.Text\n};\nexport var inner = modelUtil.makeInner(); // ------------------------\n// View\n// ------------------------\n\nvar GraphicComponentView =\n/** @class */\nfunction (_super) {\n __extends(GraphicComponentView, _super);\n\n function GraphicComponentView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = GraphicComponentView.type;\n return _this;\n }\n\n GraphicComponentView.prototype.init = function () {\n this._elMap = zrUtil.createHashMap();\n };\n\n GraphicComponentView.prototype.render = function (graphicModel, ecModel, api) {\n // Having leveraged between use cases and algorithm complexity, a very\n // simple layout mechanism is used:\n // The size(width/height) can be determined by itself or its parent (not\n // implemented yet), but can not by its children. (Top-down travel)\n // The location(x/y) can be determined by the bounding rect of itself\n // (can including its descendants or not) and the size of its parent.\n // (Bottom-up travel)\n // When `chart.clear()` or `chart.setOption({...}, true)` with the same id,\n // view will be reused.\n if (graphicModel !== this._lastGraphicModel) {\n this._clear();\n }\n\n this._lastGraphicModel = graphicModel;\n\n this._updateElements(graphicModel);\n\n this._relocate(graphicModel, api);\n };\n /**\n * Update graphic elements.\n */\n\n\n GraphicComponentView.prototype._updateElements = function (graphicModel) {\n var elOptionsToUpdate = graphicModel.useElOptionsToUpdate();\n\n if (!elOptionsToUpdate) {\n return;\n }\n\n var elMap = this._elMap;\n var rootGroup = this.group;\n var globalZ = graphicModel.get('z');\n var globalZLevel = graphicModel.get('zlevel'); // Top-down tranverse to assign graphic settings to each elements.\n\n zrUtil.each(elOptionsToUpdate, function (elOption) {\n var id = modelUtil.convertOptionIdName(elOption.id, null);\n var elExisting = id != null ? elMap.get(id) : null;\n var parentId = modelUtil.convertOptionIdName(elOption.parentId, null);\n var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup;\n var elType = elOption.type;\n var elOptionStyle = elOption.style;\n\n if (elType === 'text' && elOptionStyle) {\n // In top/bottom mode, textVerticalAlign should not be used, which cause\n // inaccurately locating.\n if (elOption.hv && elOption.hv[1]) {\n elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = elOptionStyle.verticalAlign = elOptionStyle.align = null;\n }\n }\n\n var textContentOption = elOption.textContent;\n var textConfig = elOption.textConfig;\n\n if (elOptionStyle && isEC4CompatibleStyle(elOptionStyle, elType, !!textConfig, !!textContentOption)) {\n var convertResult = convertFromEC4CompatibleStyle(elOptionStyle, elType, true);\n\n if (!textConfig && convertResult.textConfig) {\n textConfig = elOption.textConfig = convertResult.textConfig;\n }\n\n if (!textContentOption && convertResult.textContent) {\n textContentOption = convertResult.textContent;\n }\n } // Remove unnecessary props to avoid potential problems.\n\n\n var elOptionCleaned = getCleanedElOption(elOption); // For simple, do not support parent change, otherwise reorder is needed.\n\n if (process.env.NODE_ENV !== 'production') {\n elExisting && zrUtil.assert(targetElParent === elExisting.parent, 'Changing parent is not supported.');\n }\n\n var $action = elOption.$action || 'merge';\n var isMerge = $action === 'merge';\n var isReplace = $action === 'replace';\n\n if (isMerge) {\n var isInit = !elExisting;\n var el_1 = elExisting;\n\n if (isInit) {\n el_1 = createEl(id, targetElParent, elOption.type, elMap);\n } else {\n el_1 && (inner(el_1).isNew = false); // Stop and restore before update any other attributes.\n\n stopPreviousKeyframeAnimationAndRestore(el_1);\n }\n\n if (el_1) {\n applyUpdateTransition(el_1, elOptionCleaned, graphicModel, {\n isInit: isInit\n });\n updateCommonAttrs(el_1, elOption, globalZ, globalZLevel);\n }\n } else if (isReplace) {\n removeEl(elExisting, elOption, elMap, graphicModel);\n var el_2 = createEl(id, targetElParent, elOption.type, elMap);\n\n if (el_2) {\n applyUpdateTransition(el_2, elOptionCleaned, graphicModel, {\n isInit: true\n });\n updateCommonAttrs(el_2, elOption, globalZ, globalZLevel);\n }\n } else if ($action === 'remove') {\n updateLeaveTo(elExisting, elOption);\n removeEl(elExisting, elOption, elMap, graphicModel);\n }\n\n var el = elMap.get(id);\n\n if (el && textContentOption) {\n if (isMerge) {\n var textContentExisting = el.getTextContent();\n textContentExisting ? textContentExisting.attr(textContentOption) : el.setTextContent(new graphicUtil.Text(textContentOption));\n } else if (isReplace) {\n el.setTextContent(new graphicUtil.Text(textContentOption));\n }\n }\n\n if (el) {\n var clipPathOption = elOption.clipPath;\n\n if (clipPathOption) {\n var clipPathType = clipPathOption.type;\n var clipPath = void 0;\n var isInit = false;\n\n if (isMerge) {\n var oldClipPath = el.getClipPath();\n isInit = !oldClipPath || inner(oldClipPath).type !== clipPathType;\n clipPath = isInit ? newEl(clipPathType) : oldClipPath;\n } else if (isReplace) {\n isInit = true;\n clipPath = newEl(clipPathType);\n }\n\n el.setClipPath(clipPath);\n applyUpdateTransition(clipPath, clipPathOption, graphicModel, {\n isInit: isInit\n });\n applyKeyframeAnimation(clipPath, clipPathOption.keyframeAnimation, graphicModel);\n }\n\n var elInner = inner(el);\n el.setTextConfig(textConfig);\n elInner.option = elOption;\n setEventData(el, graphicModel, elOption);\n graphicUtil.setTooltipConfig({\n el: el,\n componentModel: graphicModel,\n itemName: el.name,\n itemTooltipOption: elOption.tooltip\n });\n applyKeyframeAnimation(el, elOption.keyframeAnimation, graphicModel);\n }\n });\n };\n /**\n * Locate graphic elements.\n */\n\n\n GraphicComponentView.prototype._relocate = function (graphicModel, api) {\n var elOptions = graphicModel.option.elements;\n var rootGroup = this.group;\n var elMap = this._elMap;\n var apiWidth = api.getWidth();\n var apiHeight = api.getHeight();\n var xy = ['x', 'y']; // Top-down to calculate percentage width/height of group\n\n for (var i = 0; i < elOptions.length; i++) {\n var elOption = elOptions[i];\n var id = modelUtil.convertOptionIdName(elOption.id, null);\n var el = id != null ? elMap.get(id) : null;\n\n if (!el || !el.isGroup) {\n continue;\n }\n\n var parentEl = el.parent;\n var isParentRoot = parentEl === rootGroup; // Like 'position:absolut' in css, default 0.\n\n var elInner = inner(el);\n var parentElInner = inner(parentEl);\n elInner.width = parsePercent(elInner.option.width, isParentRoot ? apiWidth : parentElInner.width) || 0;\n elInner.height = parsePercent(elInner.option.height, isParentRoot ? apiHeight : parentElInner.height) || 0;\n } // Bottom-up tranvese all elements (consider ec resize) to locate elements.\n\n\n for (var i = elOptions.length - 1; i >= 0; i--) {\n var elOption = elOptions[i];\n var id = modelUtil.convertOptionIdName(elOption.id, null);\n var el = id != null ? elMap.get(id) : null;\n\n if (!el) {\n continue;\n }\n\n var parentEl = el.parent;\n var parentElInner = inner(parentEl);\n var containerInfo = parentEl === rootGroup ? {\n width: apiWidth,\n height: apiHeight\n } : {\n width: parentElInner.width,\n height: parentElInner.height\n }; // PENDING\n // Currently, when `bounding: 'all'`, the union bounding rect of the group\n // does not include the rect of [0, 0, group.width, group.height], which\n // is probably weird for users. Should we make a break change for it?\n\n var layoutPos = {};\n var layouted = layoutUtil.positionElement(el, elOption, containerInfo, null, {\n hv: elOption.hv,\n boundingMode: elOption.bounding\n }, layoutPos);\n\n if (!inner(el).isNew && layouted) {\n var transition = elOption.transition;\n var animatePos = {};\n\n for (var k = 0; k < xy.length; k++) {\n var key = xy[k];\n var val = layoutPos[key];\n\n if (transition && (isTransitionAll(transition) || zrUtil.indexOf(transition, key) >= 0)) {\n animatePos[key] = val;\n } else {\n el[key] = val;\n }\n }\n\n updateProps(el, animatePos, graphicModel, 0);\n } else {\n el.attr(layoutPos);\n }\n }\n };\n /**\n * Clear all elements.\n */\n\n\n GraphicComponentView.prototype._clear = function () {\n var _this = this;\n\n var elMap = this._elMap;\n elMap.each(function (el) {\n removeEl(el, inner(el).option, elMap, _this._lastGraphicModel);\n });\n this._elMap = zrUtil.createHashMap();\n };\n\n GraphicComponentView.prototype.dispose = function () {\n this._clear();\n };\n\n GraphicComponentView.type = 'graphic';\n return GraphicComponentView;\n}(ComponentView);\n\nexport { GraphicComponentView };\n\nfunction newEl(graphicType) {\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.assert(graphicType, 'graphic type MUST be set');\n }\n\n var Clz = zrUtil.hasOwn(nonShapeGraphicElements, graphicType) // Those graphic elements are not shapes. They should not be\n // overwritten by users, so do them first.\n ? nonShapeGraphicElements[graphicType] : graphicUtil.getShapeClass(graphicType);\n\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.assert(Clz, \"graphic type \" + graphicType + \" can not be found\");\n }\n\n var el = new Clz({});\n inner(el).type = graphicType;\n return el;\n}\n\nfunction createEl(id, targetElParent, graphicType, elMap) {\n var el = newEl(graphicType);\n targetElParent.add(el);\n elMap.set(id, el);\n inner(el).id = id;\n inner(el).isNew = true;\n return el;\n}\n\nfunction removeEl(elExisting, elOption, elMap, graphicModel) {\n var existElParent = elExisting && elExisting.parent;\n\n if (existElParent) {\n elExisting.type === 'group' && elExisting.traverse(function (el) {\n removeEl(el, elOption, elMap, graphicModel);\n });\n applyLeaveTransition(elExisting, elOption, graphicModel);\n elMap.removeKey(inner(elExisting).id);\n }\n}\n\nfunction updateCommonAttrs(el, elOption, defaultZ, defaultZlevel) {\n if (!el.isGroup) {\n zrUtil.each([['cursor', Displayable.prototype.cursor], // We should not support configure z and zlevel in the element level.\n // But seems we didn't limit it previously. So here still use it to avoid breaking.\n ['zlevel', defaultZlevel || 0], ['z', defaultZ || 0], // z2 must not be null/undefined, otherwise sort error may occur.\n ['z2', 0]], function (item) {\n var prop = item[0];\n\n if (zrUtil.hasOwn(elOption, prop)) {\n el[prop] = zrUtil.retrieve2(elOption[prop], item[1]);\n } else if (el[prop] == null) {\n el[prop] = item[1];\n }\n });\n }\n\n zrUtil.each(zrUtil.keys(elOption), function (key) {\n // Assign event handlers.\n // PENDING: should enumerate all event names or use pattern matching?\n if (key.indexOf('on') === 0) {\n var val = elOption[key];\n el[key] = zrUtil.isFunction(val) ? val : null;\n }\n });\n\n if (zrUtil.hasOwn(elOption, 'draggable')) {\n el.draggable = elOption.draggable;\n } // Other attributes\n\n\n elOption.name != null && (el.name = elOption.name);\n elOption.id != null && (el.id = elOption.id);\n} // Remove unnecessary props to avoid potential problems.\n\n\nfunction getCleanedElOption(elOption) {\n elOption = zrUtil.extend({}, elOption);\n zrUtil.each(['id', 'parentId', '$action', 'hv', 'bounding', 'textContent', 'clipPath'].concat(layoutUtil.LOCATION_PARAMS), function (name) {\n delete elOption[name];\n });\n return elOption;\n}\n\nfunction setEventData(el, graphicModel, elOption) {\n var eventData = getECData(el).eventData; // Simple optimize for large amount of elements that no need event.\n\n if (!el.silent && !el.ignore && !eventData) {\n eventData = getECData(el).eventData = {\n componentType: 'graphic',\n componentIndex: graphicModel.componentIndex,\n name: el.name\n };\n } // `elOption.info` enables user to mount some info on\n // elements and use them in event handlers.\n\n\n if (eventData) {\n eventData.info = elOption.info;\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isArray } from 'zrender/lib/core/util.js';\nimport { GraphicComponentModel } from './GraphicModel.js';\nimport { GraphicComponentView } from './GraphicView.js';\nexport function install(registers) {\n registers.registerComponentModel(GraphicComponentModel);\n registers.registerComponentView(GraphicComponentView);\n registers.registerPreprocessor(function (option) {\n var graphicOption = option.graphic; // Convert\n // {graphic: [{left: 10, type: 'circle'}, ...]}\n // or\n // {graphic: {left: 10, type: 'circle'}}\n // to\n // {graphic: [{elements: [{left: 10, type: 'circle'}, ...]}]}\n\n if (isArray(graphicOption)) {\n if (!graphicOption[0] || !graphicOption[0].elements) {\n option.graphic = [{\n elements: graphicOption\n }];\n } else {\n // Only one graphic instance can be instantiated. (We don't\n // want that too many views are created in echarts._viewMap.)\n option.graphic = [option.graphic[0]];\n }\n } else if (graphicOption && !graphicOption.elements) {\n option.graphic = [{\n elements: [graphicOption]\n }];\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { normalizeToArray } from '../../util/model.js';\nvar DEFAULT_TOOLBOX_BTNS = ['rect', 'polygon', 'keep', 'clear'];\nexport default function brushPreprocessor(option, isNew) {\n var brushComponents = normalizeToArray(option ? option.brush : []);\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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @file Visual solution, for consistent option specification.\n */\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport VisualMapping from './VisualMapping.js';\nimport { getItemVisualFromData, setItemVisualFromData } from './helper.js';\nvar each = zrUtil.each;\n\nfunction hasKeys(obj) {\n if (obj) {\n for (var name_1 in obj) {\n if (obj.hasOwnProperty(name_1)) {\n return true;\n }\n }\n }\n}\n\nexport function 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}\nexport function replaceVisualOption(thisOption, newOption, keys) {\n // Visual attributes merge is not supported, otherwise it\n // brings overcomplicated merge logic. See #2853. So if\n // newOption has anyone of these keys, all of these keys\n // will be reset. Otherwise, all keys remain.\n var has;\n zrUtil.each(keys, function (key) {\n if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {\n has = true;\n }\n });\n has && zrUtil.each(keys, function (key) {\n if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {\n thisOption[key] = zrUtil.clone(newOption[key]);\n } else {\n delete thisOption[key];\n }\n });\n}\n/**\n * @param stateList\n * @param visualMappings\n * @param list\n * @param getValueState param: valueOrIndex, return: state.\n * @param scope Scope for getValueState\n * @param dimension Concrete dimension, if used.\n */\n// ???! handle brush?\n\nexport function applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) {\n var visualTypesMap = {};\n zrUtil.each(stateList, function (state) {\n var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);\n visualTypesMap[state] = visualTypes;\n });\n var dataIndex;\n\n function getVisual(key) {\n return getItemVisualFromData(data, dataIndex, key);\n }\n\n function setVisual(key, value) {\n setItemVisualFromData(data, 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 // First argument is index\n : index;\n var rawDataItem = data.getRawDataItem(dataIndex); // Consider performance\n // @ts-ignore\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 data\n * @param stateList\n * @param visualMappings >\n * @param getValueState param: valueOrIndex, return: state.\n * @param dim dimension or dimension index.\n */\n\nexport function incrementalApplyVisual(stateList, visualMappings, getValueState, dim) {\n var visualTypesMap = {};\n zrUtil.each(stateList, function (state) {\n var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);\n visualTypesMap[state] = visualTypes;\n });\n return {\n progress: function progress(params, data) {\n var dimIndex;\n\n if (dim != null) {\n dimIndex = data.getDimensionIndex(dim);\n }\n\n function getVisual(key) {\n return getItemVisualFromData(data, dataIndex, key);\n }\n\n function setVisual(key, value) {\n setItemVisualFromData(data, dataIndex, key, value);\n }\n\n var dataIndex;\n var store = data.getStore();\n\n while ((dataIndex = params.next()) != null) {\n var rawDataItem = data.getRawDataItem(dataIndex); // Consider performance\n // @ts-ignore\n\n if (rawDataItem && rawDataItem.visualMap === false) {\n continue;\n }\n\n var value = dim != null ? store.get(dimIndex, dataIndex) : 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}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as polygonContain from 'zrender/lib/contain/polygon.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport { linePolygonIntersect } from '../../util/graphic.js';\nexport function makeBrushCommonSelectorForSeries(area) {\n var brushType = area.brushType; // Do not use function binding or curry for performance.\n\n var selectors = {\n point: function (itemLayout) {\n return selector[brushType].point(itemLayout, selectors, area);\n },\n rect: function (itemLayout) {\n return selector[brushType].rect(itemLayout, selectors, area);\n }\n };\n return selectors;\n}\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\nexport default selector;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport * as visualSolution from '../../visual/visualSolution.js';\nimport { makeBrushCommonSelectorForSeries } from './selector.js';\nimport * as throttleUtil from '../../util/throttle.js';\nimport BrushTargetManager from '../helper/BrushTargetManager.js';\nvar STATE_LIST = ['inBrush', 'outOfBrush'];\nvar DISPATCH_METHOD = '__ecBrushSelect';\nvar DISPATCH_FLAG = '__ecInBrushSelectEvent';\n;\nexport function 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\nexport default function brushVisual(ecModel, api, payload) {\n var brushSelected = [];\n var throttleType;\n var throttleDelay;\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 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 = false;\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 var builder = boundingRectBuilders[area.brushType];\n var selectableArea = zrUtil.defaults({\n boundingRect: builder ? builder(area) : void 0\n }, area);\n selectableArea.selectors = makeBrushCommonSelectorForSeries(selectableArea);\n return selectableArea;\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) : stepAOthers(seriesModel, seriesIndex, rangeInfoList);\n });\n\n function stepAParallel(seriesModel, seriesIndex) {\n var coordSys = seriesModel.coordinateSystem;\n hasBrushExists = 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 if (!seriesModel.brushSelector || brushModelNotControll(brushModel, seriesIndex)) {\n return;\n }\n\n zrUtil.each(areas, function (area) {\n if (brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel)) {\n rangeInfoList.push(area);\n }\n\n hasBrushExists = hasBrushExists || brushed(rangeInfoList);\n });\n\n if (linkOthers(seriesIndex) && brushed(rangeInfoList)) {\n var data_1 = seriesModel.getData();\n data_1.each(function (dataIndex) {\n if (checkInRange(seriesModel, rangeInfoList, data_1, 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 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(seriesModel, 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;\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(seriesModel, rangeInfoList, data, dataIndex) {\n for (var i = 0, len = rangeInfoList.length; i < len; i++) {\n var area = rangeInfoList[i];\n\n if (seriesModel.brushSelector(dataIndex, data, area.selectors, area)) {\n return true;\n }\n }\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\nvar boundingRectBuilders = {\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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport BrushController from '../helper/BrushController.js';\nimport { layoutCovers } from './visualEncoding.js';\nimport ComponentView from '../../view/Component.js';\n\nvar BrushView =\n/** @class */\nfunction (_super) {\n __extends(BrushView, _super);\n\n function BrushView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = BrushView.type;\n return _this;\n }\n\n BrushView.prototype.init = function (ecModel, api) {\n this.ecModel = ecModel;\n this.api = api;\n this.model;\n (this._brushController = new BrushController(api.getZr())).on('brush', zrUtil.bind(this._onBrush, this)).mount();\n };\n\n BrushView.prototype.render = function (brushModel, ecModel, api, payload) {\n this.model = brushModel;\n\n this._updateController(brushModel, ecModel, api, payload);\n };\n\n BrushView.prototype.updateTransform = function (brushModel, ecModel, api, payload) {\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\n this._updateController(brushModel, ecModel, api, payload);\n };\n\n BrushView.prototype.updateVisual = function (brushModel, ecModel, api, payload) {\n this.updateTransform(brushModel, ecModel, api, payload);\n };\n\n BrushView.prototype.updateView = function (brushModel, ecModel, api, payload) {\n this._updateController(brushModel, ecModel, api, payload);\n };\n\n BrushView.prototype._updateController = function (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 }; // updateLayout: updateController,\n // updateVisual: updateController,\n\n\n BrushView.prototype.dispose = function () {\n this._brushController.dispose();\n };\n\n BrushView.prototype._onBrush = function (eventParam) {\n var modelId = this.model.id;\n var areas = this.model.brushTargetManager.setOutputRanges(eventParam.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 (!eventParam.isEnd || eventParam.removeOnClick) && this.api.dispatchAction({\n type: 'brush',\n brushId: modelId,\n areas: zrUtil.clone(areas),\n $from: modelId\n });\n eventParam.isEnd && this.api.dispatchAction({\n type: 'brushEnd',\n brushId: modelId,\n areas: zrUtil.clone(areas),\n $from: modelId\n });\n };\n\n BrushView.type = 'brush';\n return BrushView;\n}(ComponentView);\n\nexport default BrushView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as visualSolution from '../../visual/visualSolution.js';\nimport Model from '../../model/Model.js';\nimport ComponentModel from '../../model/Component.js';\nvar DEFAULT_OUT_OF_BRUSH_COLOR = '#ddd';\n\nvar BrushModel =\n/** @class */\nfunction (_super) {\n __extends(BrushModel, _super);\n\n function BrushModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = BrushModel.type;\n /**\n * @readOnly\n */\n\n _this.areas = [];\n /**\n * Current brush painting area settings.\n * @readOnly\n */\n\n _this.brushOption = {};\n return _this;\n }\n\n BrushModel.prototype.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 * If `areas` is null/undefined, range state remain.\n */\n\n\n BrushModel.prototype.setAreas = function (areas) {\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.assert(zrUtil.isArray(areas));\n zrUtil.each(areas, function (area) {\n zrUtil.assert(area.brushType, 'Illegal areas');\n });\n } // If areas 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\n\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 * Set the current painting brush option.\n */\n\n\n BrushModel.prototype.setBrushOption = function (brushOption) {\n this.brushOption = generateBrushOption(this.option, brushOption);\n this.brushType = this.brushOption.brushType;\n };\n\n BrushModel.type = 'brush';\n BrushModel.dependencies = ['geo', 'grid', 'xAxis', 'yAxis', 'parallel', 'series'];\n BrushModel.defaultOption = {\n seriesIndex: 'all',\n brushType: 'rect',\n brushMode: 'single',\n transformable: true,\n brushStyle: {\n borderWidth: 1,\n color: 'rgba(210,219,238,0.3)',\n borderColor: '#D2DBEE'\n },\n throttleType: 'fixRate',\n throttleDelay: 0,\n removeOnClick: true,\n z: 10000\n };\n return BrushModel;\n}(ComponentModel);\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\nexport default BrushModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { ToolboxFeature } from '../featureManager.js';\nvar ICON_TYPES = ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'];\n\nvar BrushFeature =\n/** @class */\nfunction (_super) {\n __extends(BrushFeature, _super);\n\n function BrushFeature() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n BrushFeature.prototype.render = 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 = 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\n BrushFeature.prototype.updateView = function (featureModel, ecModel, api) {\n this.render(featureModel, ecModel, api);\n };\n\n BrushFeature.prototype.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\n ;\n\n BrushFeature.prototype.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\n ;\n\n BrushFeature.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n type: ICON_TYPES.slice(),\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 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 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 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 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 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: ecModel.getLocaleModel().get(['toolbox', 'brush', 'title'])\n };\n return defaultOption;\n };\n\n return BrushFeature;\n}(ToolboxFeature);\n\nexport default BrushFeature;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport brushPreprocessor from './preprocessor.js';\nimport BrushView from './BrushView.js';\nimport BrushModel from './BrushModel.js';\nimport brushVisual from './visualEncoding.js'; // TODO\n\nimport BrushFeature from '../toolbox/feature/Brush.js';\nimport { registerFeature } from '../toolbox/featureManager.js';\nimport { noop } from 'zrender/lib/core/util.js';\nexport function install(registers) {\n registers.registerComponentView(BrushView);\n registers.registerComponentModel(BrushModel);\n registers.registerPreprocessor(brushPreprocessor);\n registers.registerVisual(registers.PRIORITY.VISUAL.BRUSH, brushVisual);\n registers.registerAction({\n type: 'brush',\n event: 'brush',\n update: 'updateVisual'\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\n registers.registerAction({\n type: 'brushSelect',\n event: 'brushSelected',\n update: 'none'\n }, noop);\n registers.registerAction({\n type: 'brushEnd',\n event: 'brushEnd',\n update: 'none'\n }, noop);\n registerFeature('brush', BrushFeature);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nimport { getLayoutRect } from '../../util/layout.js';\nimport ComponentModel from '../../model/Component.js';\nimport ComponentView from '../../view/Component.js';\nimport { windowOpen } from '../../util/format.js';\n\nvar TitleModel =\n/** @class */\nfunction (_super) {\n __extends(TitleModel, _super);\n\n function TitleModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = TitleModel.type;\n _this.layoutMode = {\n type: 'box',\n ignoreSize: true\n };\n return _this;\n }\n\n TitleModel.type = 'title';\n TitleModel.defaultOption = {\n // zlevel: 0,\n z: 6,\n show: true,\n text: '',\n target: 'blank',\n subtext: '',\n subtarget: 'blank',\n left: 0,\n top: 0,\n backgroundColor: 'rgba(0,0,0,0)',\n borderColor: '#ccc',\n borderWidth: 0,\n padding: 5,\n itemGap: 10,\n textStyle: {\n fontSize: 18,\n fontWeight: 'bold',\n color: '#464646'\n },\n subtextStyle: {\n fontSize: 12,\n color: '#6E7079'\n }\n };\n return TitleModel;\n}(ComponentModel); // View\n\n\nvar TitleView =\n/** @class */\nfunction (_super) {\n __extends(TitleView, _super);\n\n function TitleView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = TitleView.type;\n return _this;\n }\n\n TitleView.prototype.render = function (titleModel, ecModel, api) {\n this.group.removeAll();\n\n if (!titleModel.get('show')) {\n return;\n }\n\n var group = this.group;\n var textStyleModel = titleModel.getModel('textStyle');\n var subtextStyleModel = titleModel.getModel('subtextStyle');\n var textAlign = titleModel.get('textAlign');\n var textVerticalAlign = zrUtil.retrieve2(titleModel.get('textBaseline'), titleModel.get('textVerticalAlign'));\n var textEl = new graphic.Text({\n style: createTextStyle(textStyleModel, {\n text: titleModel.get('text'),\n fill: textStyleModel.getTextColor()\n }, {\n disableBox: true\n }),\n z2: 10\n });\n var textRect = textEl.getBoundingRect();\n var subText = titleModel.get('subtext');\n var subTextEl = new graphic.Text({\n style: createTextStyle(subtextStyleModel, {\n text: subText,\n fill: subtextStyleModel.getTextColor(),\n y: textRect.height + titleModel.get('itemGap'),\n verticalAlign: 'top'\n }, {\n disableBox: true\n }),\n z2: 10\n });\n var link = titleModel.get('link');\n var sublink = titleModel.get('sublink');\n var triggerEvent = titleModel.get('triggerEvent', true);\n textEl.silent = !link && !triggerEvent;\n subTextEl.silent = !sublink && !triggerEvent;\n\n if (link) {\n textEl.on('click', function () {\n windowOpen(link, '_' + titleModel.get('target'));\n });\n }\n\n if (sublink) {\n subTextEl.on('click', function () {\n windowOpen(sublink, '_' + titleModel.get('subtarget'));\n });\n }\n\n getECData(textEl).eventData = getECData(subTextEl).eventData = triggerEvent ? {\n componentType: 'title',\n componentIndex: titleModel.componentIndex\n } : null;\n group.add(textEl);\n subText && group.add(subTextEl); // If no subText, but add subTextEl, there will be an empty line.\n\n var groupRect = group.getBoundingRect();\n var layoutOption = titleModel.getBoxLayoutParams();\n layoutOption.width = groupRect.width;\n layoutOption.height = groupRect.height;\n var layoutRect = getLayoutRect(layoutOption, {\n width: api.getWidth(),\n height: api.getHeight()\n }, titleModel.get('padding')); // Adjust text align based on position\n\n if (!textAlign) {\n // Align left if title is on the left. center and right is same\n textAlign = titleModel.get('left') || titleModel.get('right'); // @ts-ignore\n\n if (textAlign === 'middle') {\n textAlign = 'center';\n } // Adjust layout by text align\n\n\n if (textAlign === 'right') {\n layoutRect.x += layoutRect.width;\n } else if (textAlign === 'center') {\n layoutRect.x += layoutRect.width / 2;\n }\n }\n\n if (!textVerticalAlign) {\n textVerticalAlign = titleModel.get('top') || titleModel.get('bottom'); // @ts-ignore\n\n if (textVerticalAlign === 'center') {\n textVerticalAlign = 'middle';\n }\n\n if (textVerticalAlign === 'bottom') {\n layoutRect.y += layoutRect.height;\n } else if (textVerticalAlign === 'middle') {\n layoutRect.y += layoutRect.height / 2;\n }\n\n textVerticalAlign = textVerticalAlign || 'top';\n }\n\n group.x = layoutRect.x;\n group.y = layoutRect.y;\n group.markRedraw();\n var alignStyle = {\n align: textAlign,\n verticalAlign: textVerticalAlign\n };\n textEl.setStyle(alignStyle);\n subTextEl.setStyle(alignStyle); // Render background\n // Get groupRect again because textAlign has been changed\n\n groupRect = group.getBoundingRect();\n var padding = layoutRect.margin;\n var style = titleModel.getItemStyle(['color', 'opacity']);\n style.fill = titleModel.get('backgroundColor');\n var rect = new graphic.Rect({\n shape: {\n x: groupRect.x - padding[3],\n y: groupRect.y - padding[0],\n width: groupRect.width + padding[1] + padding[3],\n height: groupRect.height + padding[0] + padding[2],\n r: titleModel.get('borderRadius')\n },\n style: style,\n subPixelOptimize: true,\n silent: true\n });\n group.add(rect);\n };\n\n TitleView.type = 'title';\n return TitleView;\n}(ComponentView);\n\nexport function install(registers) {\n registers.registerComponentModel(TitleModel);\n registers.registerComponentView(TitleView);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentModel from '../../model/Component.js';\nimport SeriesData from '../../data/SeriesData.js';\nimport { each, isObject, clone } from 'zrender/lib/core/util.js';\nimport { convertOptionIdName, getDataItemValue } from '../../util/model.js';\n\nvar TimelineModel =\n/** @class */\nfunction (_super) {\n __extends(TimelineModel, _super);\n\n function TimelineModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = TimelineModel.type;\n _this.layoutMode = 'box';\n return _this;\n }\n /**\n * @override\n */\n\n\n TimelineModel.prototype.init = function (option, parentModel, ecModel) {\n this.mergeDefaultAndTheme(option, ecModel);\n\n this._initData();\n };\n /**\n * @override\n */\n\n\n TimelineModel.prototype.mergeOption = function (option) {\n _super.prototype.mergeOption.apply(this, arguments);\n\n this._initData();\n };\n\n TimelineModel.prototype.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 * @return {number} currentIndex\n */\n\n\n TimelineModel.prototype.getCurrentIndex = function () {\n return this.option.currentIndex;\n };\n /**\n * @return {boolean}\n */\n\n\n TimelineModel.prototype.isIndexMax = function () {\n return this.getCurrentIndex() >= this._data.count() - 1;\n };\n /**\n * @param {boolean} state true: play, false: stop\n */\n\n\n TimelineModel.prototype.setPlayState = function (state) {\n this.option.autoPlay = !!state;\n };\n /**\n * @return {boolean} true: play, false: stop\n */\n\n\n TimelineModel.prototype.getPlayState = function () {\n return !!this.option.autoPlay;\n };\n /**\n * @private\n */\n\n\n TimelineModel.prototype._initData = function () {\n var thisOption = this.option;\n var dataArr = thisOption.data || [];\n var axisType = thisOption.axisType;\n var names = this._names = [];\n var processedDataArr;\n\n if (axisType === 'category') {\n processedDataArr = [];\n each(dataArr, function (item, index) {\n var value = convertOptionIdName(getDataItemValue(item), '');\n var newItem;\n\n if (isObject(item)) {\n newItem = clone(item);\n newItem.value = index;\n } else {\n newItem = index;\n }\n\n processedDataArr.push(newItem);\n names.push(value);\n });\n } else {\n processedDataArr = dataArr;\n }\n\n var dimType = {\n category: 'ordinal',\n time: 'time',\n value: 'number'\n }[axisType] || 'number';\n var data = this._data = new SeriesData([{\n name: 'value',\n type: dimType\n }], this);\n data.initData(processedDataArr, names);\n };\n\n TimelineModel.prototype.getData = function () {\n return this._data;\n };\n /**\n * @public\n * @return {Array.} categoreis\n */\n\n\n TimelineModel.prototype.getCategories = function () {\n if (this.get('axisType') === 'category') {\n return this._names.slice();\n }\n };\n\n TimelineModel.type = 'timeline';\n /**\n * @protected\n */\n\n TimelineModel.defaultOption = {\n // zlevel: 0, // 一级层叠\n z: 4,\n show: true,\n axisType: 'time',\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 autoPlay: false,\n rewind: false,\n loop: true,\n playInterval: 2000,\n currentIndex: 0,\n itemStyle: {},\n label: {\n color: '#000'\n },\n data: []\n };\n return TimelineModel;\n}(ComponentModel);\n\nexport default TimelineModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport TimelineModel from './TimelineModel.js';\nimport { DataFormatMixin } from '../../model/mixin/dataFormat.js';\nimport { mixin } from 'zrender/lib/core/util.js';\nimport { inheritDefaultOption } from '../../util/component.js';\n\nvar SliderTimelineModel =\n/** @class */\nfunction (_super) {\n __extends(SliderTimelineModel, _super);\n\n function SliderTimelineModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SliderTimelineModel.type;\n return _this;\n }\n\n SliderTimelineModel.type = 'timeline.slider';\n /**\n * @protected\n */\n\n SliderTimelineModel.defaultOption = inheritDefaultOption(TimelineModel.defaultOption, {\n backgroundColor: 'rgba(0,0,0,0)',\n borderColor: '#ccc',\n borderWidth: 0,\n orient: 'horizontal',\n inverse: false,\n tooltip: {\n trigger: 'item' // data item may also have tootip attr.\n\n },\n symbol: 'circle',\n symbolSize: 12,\n lineStyle: {\n show: true,\n width: 2,\n color: '#DAE1F5'\n },\n label: {\n position: 'auto',\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: '#A4B1D7'\n },\n itemStyle: {\n color: '#A4B1D7',\n borderWidth: 1\n },\n checkpointStyle: {\n symbol: 'circle',\n symbolSize: 15,\n color: '#316bf3',\n borderColor: '#fff',\n borderWidth: 2,\n shadowBlur: 2,\n shadowOffsetX: 1,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0, 0, 0, 0.3)',\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: 24,\n itemGap: 12,\n position: 'left',\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 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 // eslint-disable-next-line max-len\n nextIcon: 'M2,18.5A1.52,1.52,0,0,1,.92,18a1.49,1.49,0,0,1,0-2.12L7.81,9.36,1,3.11A1.5,1.5,0,1,1,3,.89l8,7.34a1.48,1.48,0,0,1,.49,1.09,1.51,1.51,0,0,1-.46,1.1L3,18.08A1.5,1.5,0,0,1,2,18.5Z',\n // eslint-disable-next-line max-len\n prevIcon: 'M10,.5A1.52,1.52,0,0,1,11.08,1a1.49,1.49,0,0,1,0,2.12L4.19,9.64,11,15.89a1.5,1.5,0,1,1-2,2.22L1,10.77A1.48,1.48,0,0,1,.5,9.68,1.51,1.51,0,0,1,1,8.58L9,.92A1.5,1.5,0,0,1,10,.5Z',\n prevBtnSize: 18,\n nextBtnSize: 18,\n color: '#A4B1D7',\n borderColor: '#A4B1D7',\n borderWidth: 1\n },\n emphasis: {\n label: {\n show: true,\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n color: '#6f778d'\n },\n itemStyle: {\n color: '#316BF3'\n },\n controlStyle: {\n color: '#316BF3',\n borderColor: '#316BF3',\n borderWidth: 2\n }\n },\n progress: {\n lineStyle: {\n color: '#316BF3'\n },\n itemStyle: {\n color: '#316BF3'\n },\n label: {\n color: '#6f778d'\n }\n },\n data: []\n });\n return SliderTimelineModel;\n}(TimelineModel);\n\nmixin(SliderTimelineModel, DataFormatMixin.prototype);\nexport default SliderTimelineModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentView from '../../view/Component.js';\n\nvar TimelineView =\n/** @class */\nfunction (_super) {\n __extends(TimelineView, _super);\n\n function TimelineView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = TimelineView.type;\n return _this;\n }\n\n TimelineView.type = 'timeline';\n return TimelineView;\n}(ComponentView);\n\nexport default TimelineView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Axis from '../../coord/Axis.js';\n/**\n * Extend axis 2d\n */\n\nvar TimelineAxis =\n/** @class */\nfunction (_super) {\n __extends(TimelineAxis, _super);\n\n function TimelineAxis(dim, scale, coordExtent, axisType) {\n var _this = _super.call(this, dim, scale, coordExtent) || this;\n\n _this.type = axisType || 'value';\n return _this;\n }\n /**\n * @override\n */\n\n\n TimelineAxis.prototype.getLabelModel = function () {\n // Force override\n return this.model.getModel('label');\n };\n /**\n * @override\n */\n\n\n TimelineAxis.prototype.isHorizontal = function () {\n return this.model.get('orient') === 'horizontal';\n };\n\n return TimelineAxis;\n}(Axis);\n\nexport default TimelineAxis;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport * as graphic from '../../util/graphic.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nimport * as layout from '../../util/layout.js';\nimport TimelineView from './TimelineView.js';\nimport TimelineAxis from './TimelineAxis.js';\nimport { createSymbol, normalizeSymbolOffset, normalizeSymbolSize } from '../../util/symbol.js';\nimport * as numberUtil from '../../util/number.js';\nimport { merge, each, extend, isString, bind, defaults, retrieve2 } from 'zrender/lib/core/util.js';\nimport OrdinalScale from '../../scale/Ordinal.js';\nimport TimeScale from '../../scale/Time.js';\nimport IntervalScale from '../../scale/Interval.js';\nimport { parsePercent } from 'zrender/lib/contain/text.js';\nimport { makeInner } from '../../util/model.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { enableHoverEmphasis } from '../../util/states.js';\nimport { createTooltipMarkup } from '../tooltip/tooltipMarkup.js';\nvar PI = Math.PI;\nvar labelDataIndexStore = makeInner();\n\nvar SliderTimelineView =\n/** @class */\nfunction (_super) {\n __extends(SliderTimelineView, _super);\n\n function SliderTimelineView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SliderTimelineView.type;\n return _this;\n }\n\n SliderTimelineView.prototype.init = function (ecModel, api) {\n this.api = api;\n };\n /**\n * @override\n */\n\n\n SliderTimelineView.prototype.render = function (timelineModel, ecModel, api) {\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_1 = this._layout(timelineModel, api);\n\n var mainGroup_1 = this._createGroup('_mainGroup');\n\n var labelGroup = this._createGroup('_labelGroup');\n\n var axis_1 = this._axis = this._createAxis(layoutInfo_1, timelineModel);\n\n timelineModel.formatTooltip = function (dataIndex) {\n var name = axis_1.scale.getLabel({\n value: dataIndex\n });\n return createTooltipMarkup('nameValue', {\n noName: true,\n value: name\n });\n };\n\n each(['AxisLine', 'AxisTick', 'Control', 'CurrentPointer'], function (name) {\n this['_render' + name](layoutInfo_1, mainGroup_1, axis_1, timelineModel);\n }, this);\n\n this._renderAxisLabel(layoutInfo_1, labelGroup, axis_1, timelineModel);\n\n this._position(layoutInfo_1, timelineModel);\n }\n\n this._doPlayStop();\n\n this._updateTicksStatus();\n };\n /**\n * @override\n */\n\n\n SliderTimelineView.prototype.remove = function () {\n this._clearTimer();\n\n this.group.removeAll();\n };\n /**\n * @override\n */\n\n\n SliderTimelineView.prototype.dispose = function () {\n this._clearTimer();\n };\n\n SliderTimelineView.prototype._layout = function (timelineModel, api) {\n var labelPosOpt = timelineModel.get(['label', 'position']);\n var orient = timelineModel.get('orient');\n var viewRect = getViewRect(timelineModel, api);\n var parsedLabelPos; // Auto label offset.\n\n if (labelPosOpt == null || labelPosOpt === 'auto') {\n parsedLabelPos = orient === 'horizontal' ? viewRect.y + viewRect.height / 2 < api.getHeight() / 2 ? '-' : '+' : viewRect.x + viewRect.width / 2 < api.getWidth() / 2 ? '+' : '-';\n } else if (isString(labelPosOpt)) {\n parsedLabelPos = {\n horizontal: {\n top: '-',\n bottom: '+'\n },\n vertical: {\n left: '-',\n right: '+'\n }\n }[orient][labelPosOpt];\n } else {\n // is number\n parsedLabelPos = labelPosOpt;\n }\n\n var labelAlignMap = {\n horizontal: 'center',\n vertical: parsedLabelPos >= 0 || parsedLabelPos === '+' ? 'left' : 'right'\n };\n var labelBaselineMap = {\n horizontal: parsedLabelPos >= 0 || parsedLabelPos === '+' ? '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 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 var 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: parsedLabelPos,\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\n SliderTimelineView.prototype._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.x, mainGroup.y];\n var labelsPosition = [labelGroup.x, labelGroup.y];\n labelsPosition[0] = mainPosition[0] = viewBound[0][0];\n var labelPosOpt = layoutInfo.labelPosOpt;\n\n if (labelPosOpt == null || isString(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.setPosition(mainPosition);\n labelGroup.setPosition(labelsPosition);\n mainGroup.rotation = labelGroup.rotation = layoutInfo.rotation;\n setOrigin(mainGroup);\n setOrigin(labelGroup);\n\n function setOrigin(targetGroup) {\n targetGroup.originX = viewBound[0][0] - targetGroup.x;\n targetGroup.originY = viewBound[1][0] - targetGroup.y;\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\n SliderTimelineView.prototype._createAxis = function (layoutInfo, timelineModel) {\n var data = timelineModel.getData();\n var axisType = timelineModel.get('axisType');\n var scale = createScaleByModel(timelineModel, axisType); // Customize scale. The `tickValue` is `dataIndex`.\n\n scale.getTicks = function () {\n return data.mapArray(['value'], function (value) {\n return {\n value: value\n };\n });\n };\n\n var dataExtent = data.getDataExtent('value');\n scale.setExtent(dataExtent[0], dataExtent[1]);\n scale.calcNiceTicks();\n var axis = new TimelineAxis('value', scale, layoutInfo.axisExtent, axisType);\n axis.model = timelineModel;\n return axis;\n };\n\n SliderTimelineView.prototype._createGroup = function (key) {\n var newGroup = this[key] = new graphic.Group();\n this.group.add(newGroup);\n return newGroup;\n };\n\n SliderTimelineView.prototype._renderAxisLine = function (layoutInfo, group, axis, timelineModel) {\n var axisExtent = axis.getExtent();\n\n if (!timelineModel.get(['lineStyle', 'show'])) {\n return;\n }\n\n var line = new graphic.Line({\n shape: {\n x1: axisExtent[0],\n y1: 0,\n x2: axisExtent[1],\n y2: 0\n },\n style: extend({\n lineCap: 'round'\n }, timelineModel.getModel('lineStyle').getLineStyle()),\n silent: true,\n z2: 1\n });\n group.add(line);\n var progressLine = this._progressLine = new graphic.Line({\n shape: {\n x1: axisExtent[0],\n x2: this._currentPointer ? this._currentPointer.x : axisExtent[0],\n y1: 0,\n y2: 0\n },\n style: defaults({\n lineCap: 'round',\n lineWidth: line.style.lineWidth\n }, timelineModel.getModel(['progress', 'lineStyle']).getLineStyle()),\n silent: true,\n z2: 1\n });\n group.add(progressLine);\n };\n\n SliderTimelineView.prototype._renderAxisTick = function (layoutInfo, group, axis, timelineModel) {\n var _this = this;\n\n var data = timelineModel.getData(); // Show all ticks, despite ignoring strategy.\n\n var ticks = axis.scale.getTicks();\n this._tickSymbols = []; // The value is dataIndex, see the customized scale.\n\n each(ticks, function (tick) {\n var tickCoord = axis.dataToCoord(tick.value);\n var itemModel = data.getItemModel(tick.value);\n var itemStyleModel = itemModel.getModel('itemStyle');\n var hoverStyleModel = itemModel.getModel(['emphasis', 'itemStyle']);\n var progressStyleModel = itemModel.getModel(['progress', 'itemStyle']);\n var symbolOpt = {\n x: tickCoord,\n y: 0,\n onclick: bind(_this._changeTimeline, _this, tick.value)\n };\n var el = giveSymbol(itemModel, itemStyleModel, group, symbolOpt);\n el.ensureState('emphasis').style = hoverStyleModel.getItemStyle();\n el.ensureState('progress').style = progressStyleModel.getItemStyle();\n enableHoverEmphasis(el);\n var ecData = getECData(el);\n\n if (itemModel.get('tooltip')) {\n ecData.dataIndex = tick.value;\n ecData.dataModel = timelineModel;\n } else {\n ecData.dataIndex = ecData.dataModel = null;\n }\n\n _this._tickSymbols.push(el);\n });\n };\n\n SliderTimelineView.prototype._renderAxisLabel = function (layoutInfo, group, axis, timelineModel) {\n var _this = this;\n\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 this._tickLabels = [];\n each(labels, function (labelItem) {\n // The tickValue is dataIndex, see the customized 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 progressLabelModel = itemModel.getModel(['progress', 'label']);\n var tickCoord = axis.dataToCoord(labelItem.tickValue);\n var textEl = new graphic.Text({\n x: tickCoord,\n y: 0,\n rotation: layoutInfo.labelRotation - layoutInfo.rotation,\n onclick: bind(_this._changeTimeline, _this, dataIndex),\n silent: false,\n style: createTextStyle(normalLabelModel, {\n text: labelItem.formattedLabel,\n align: layoutInfo.labelAlign,\n verticalAlign: layoutInfo.labelBaseline\n })\n });\n textEl.ensureState('emphasis').style = createTextStyle(hoverLabelModel);\n textEl.ensureState('progress').style = createTextStyle(progressLabelModel);\n group.add(textEl);\n enableHoverEmphasis(textEl);\n labelDataIndexStore(textEl).dataIndex = dataIndex;\n\n _this._tickLabels.push(textEl);\n });\n };\n\n SliderTimelineView.prototype._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 playState = timelineModel.getPlayState();\n var inverse = timelineModel.get('inverse', true);\n makeBtn(layoutInfo.nextBtnPosition, 'next', bind(this._changeTimeline, this, inverse ? '-' : '+'));\n makeBtn(layoutInfo.prevBtnPosition, 'prev', bind(this._changeTimeline, this, inverse ? '+' : '-'));\n makeBtn(layoutInfo.playPosition, playState ? 'stop' : 'play', bind(this._handlePlayClick, this, !playState), true);\n\n function makeBtn(position, iconName, onclick, willRotate) {\n if (!position) {\n return;\n }\n\n var iconSize = parsePercent(retrieve2(timelineModel.get(['controlStyle', iconName + 'BtnSize']), controlSize), controlSize);\n var rect = [0, -iconSize / 2, iconSize, iconSize];\n var btn = makeControlIcon(timelineModel, iconName + 'Icon', rect, {\n x: position[0],\n y: position[1],\n originX: controlSize / 2,\n originY: 0,\n rotation: willRotate ? -rotation : 0,\n rectHover: true,\n style: itemStyle,\n onclick: onclick\n });\n btn.ensureState('emphasis').style = hoverStyle;\n group.add(btn);\n enableHoverEmphasis(btn);\n }\n };\n\n SliderTimelineView.prototype._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, me._progressLine, currentIndex, axis, timelineModel, true);\n },\n onUpdate: function (pointer) {\n pointerMoveTo(pointer, me._progressLine, 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\n SliderTimelineView.prototype._handlePlayClick = function (nextState) {\n this._clearTimer();\n\n this.api.dispatchAction({\n type: 'timelinePlayChange',\n playState: nextState,\n from: this.uid\n });\n };\n\n SliderTimelineView.prototype._handlePointerDrag = function (dx, dy, e) {\n this._clearTimer();\n\n this._pointerChangeTimeline([e.offsetX, e.offsetY]);\n };\n\n SliderTimelineView.prototype._handlePointerDragend = function (e) {\n this._pointerChangeTimeline([e.offsetX, e.offsetY], true);\n };\n\n SliderTimelineView.prototype._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.x = toCoord;\n\n this._currentPointer.markRedraw();\n\n var progressLine = this._progressLine;\n\n if (progressLine) {\n progressLine.shape.x2 = toCoord;\n progressLine.dirty();\n }\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\n SliderTimelineView.prototype._doPlayStop = function () {\n var _this = this;\n\n this._clearTimer();\n\n if (this.model.getPlayState()) {\n this._timer = setTimeout(function () {\n // Do not cache\n var timelineModel = _this.model;\n\n _this._changeTimeline(timelineModel.getCurrentIndex() + (timelineModel.get('rewind', true) ? -1 : 1));\n }, this.model.get('playInterval'));\n }\n };\n\n SliderTimelineView.prototype._toAxisCoord = function (vertex) {\n var trans = this._mainGroup.getLocalTransform();\n\n return graphic.applyTransform(vertex, trans, true);\n };\n\n SliderTimelineView.prototype._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\n SliderTimelineView.prototype._clearTimer = function () {\n if (this._timer) {\n clearTimeout(this._timer);\n this._timer = null;\n }\n };\n\n SliderTimelineView.prototype._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 SliderTimelineView.prototype._updateTicksStatus = function () {\n var currentIndex = this.model.getCurrentIndex();\n var tickSymbols = this._tickSymbols;\n var tickLabels = this._tickLabels;\n\n if (tickSymbols) {\n for (var i = 0; i < tickSymbols.length; i++) {\n tickSymbols && tickSymbols[i] && tickSymbols[i].toggleState('progress', i < currentIndex);\n }\n }\n\n if (tickLabels) {\n for (var i = 0; i < tickLabels.length; i++) {\n tickLabels && tickLabels[i] && tickLabels[i].toggleState('progress', labelDataIndexStore(tickLabels[i]).dataIndex <= currentIndex);\n }\n }\n };\n\n SliderTimelineView.type = 'timeline.slider';\n return SliderTimelineView;\n}(TimelineView);\n\nfunction createScaleByModel(model, axisType) {\n axisType = axisType || model.get('type');\n\n if (axisType) {\n switch (axisType) {\n // Buildin scale\n case 'category':\n return new OrdinalScale({\n ordinalMeta: model.getCategories(),\n extent: [Infinity, -Infinity]\n });\n\n case 'time':\n return new TimeScale({\n locale: model.ecModel.getLocaleModel(),\n useUTC: model.ecModel.get('useUTC')\n });\n\n default:\n // default to be value\n return new IntervalScale();\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 makeControlIcon(timelineModel, objPath, rect, opts) {\n var style = opts.style;\n var icon = graphic.createIcon(timelineModel.get(['controlStyle', objPath]), opts || {}, new BoundingRect(rect[0], rect[1], rect[2], rect[3])); // TODO createIcon won't use style in opt.\n\n if (style) {\n icon.setStyle(style);\n }\n\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']);\n symbol.setStyle(itemStyle); // Transform and events.\n\n opt = merge({\n rectHover: true,\n z2: 100\n }, opt, true);\n var symbolSize = normalizeSymbolSize(hostModel.get('symbolSize'));\n opt.scaleX = symbolSize[0] / 2;\n opt.scaleY = symbolSize[1] / 2;\n var symbolOffset = normalizeSymbolOffset(hostModel.get('symbolOffset'), symbolSize);\n\n if (symbolOffset) {\n opt.x = (opt.x || 0) + symbolOffset[0];\n opt.y = (opt.y || 0) + symbolOffset[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, progressLine, 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 x: toCoord,\n y: 0\n });\n progressLine && progressLine.attr({\n shape: {\n x2: toCoord\n }\n });\n } else {\n var animationCfg = {\n duration: pointerModel.get('animationDuration', true),\n easing: pointerModel.get('animationEasing', true)\n };\n pointer.stopAnimation(null, true);\n pointer.animateTo({\n x: toCoord,\n y: 0\n }, animationCfg);\n progressLine && progressLine.animateTo({\n shape: {\n x2: toCoord\n }\n }, animationCfg);\n }\n}\n\nexport default SliderTimelineView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { defaults } from 'zrender/lib/core/util.js';\nexport function installTimelineAction(registers) {\n registers.registerAction({\n type: 'timelineChange',\n event: 'timelineChanged',\n update: 'prepareAndUpdate'\n }, function (payload, ecModel, api) {\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() && timelineModel.getPlayState()) {\n timelineModel.setPlayState(false); // The timeline has played to the end, trigger event\n\n api.dispatchAction({\n type: 'timelinePlayChange',\n playState: false,\n from: payload.from\n });\n }\n } // Set normalized currentIndex to payload.\n\n\n ecModel.resetOption('timeline', {\n replaceMerge: timelineModel.get('replaceMerge', true)\n });\n return defaults({\n currentIndex: timelineModel.option.currentIndex\n }, payload);\n });\n registers.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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// @ts-nocheck\nimport * as zrUtil from 'zrender/lib/core/util.js';\nexport default function timelinePreprocessor(option) {\n var timelineOpt = option && option.timeline;\n\n if (!zrUtil.isArray(timelineOpt)) {\n timelineOpt = timelineOpt ? [timelineOpt] : [];\n }\n\n zrUtil.each(timelineOpt, function (opt) {\n if (!opt) {\n return;\n }\n\n compatibleEC2(opt);\n });\n}\n\nfunction compatibleEC2(opt) {\n var type = opt.type;\n var ec2Types = {\n 'number': 'value',\n 'time': 'time'\n }; // Compatible with ec2\n\n if (ec2Types[type]) {\n opt.axisType = ec2Types[type];\n delete opt.type;\n }\n\n transferItem(opt);\n\n if (has(opt, 'controlPosition')) {\n var controlStyle = opt.controlStyle || (opt.controlStyle = {});\n\n if (!has(controlStyle, 'position')) {\n controlStyle.position = opt.controlPosition;\n }\n\n if (controlStyle.position === 'none' && !has(controlStyle, 'show')) {\n controlStyle.show = false;\n delete controlStyle.position;\n }\n\n delete opt.controlPosition;\n }\n\n zrUtil.each(opt.data || [], function (dataItem) {\n if (zrUtil.isObject(dataItem) && !zrUtil.isArray(dataItem)) {\n if (!has(dataItem, 'value') && has(dataItem, 'name')) {\n // In ec2, using name as value.\n dataItem.value = dataItem.name;\n }\n\n transferItem(dataItem);\n }\n });\n}\n\nfunction transferItem(opt) {\n var itemStyle = opt.itemStyle || (opt.itemStyle = {});\n var itemStyleEmphasis = itemStyle.emphasis || (itemStyle.emphasis = {}); // Transfer label out\n\n var label = opt.label || opt.label || {};\n var labelNormal = label.normal || (label.normal = {});\n var excludeLabelAttr = {\n normal: 1,\n emphasis: 1\n };\n zrUtil.each(label, function (value, name) {\n if (!excludeLabelAttr[name] && !has(labelNormal, name)) {\n labelNormal[name] = value;\n }\n });\n\n if (itemStyleEmphasis.label && !has(label, 'emphasis')) {\n label.emphasis = itemStyleEmphasis.label;\n delete itemStyleEmphasis.label;\n }\n}\n\nfunction has(obj, attr) {\n return obj.hasOwnProperty(attr);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\nimport SliderTimelineModel from './SliderTimelineModel.js';\nimport SliderTimelineView from './SliderTimelineView.js';\nimport { installTimelineAction } from './timelineAction.js';\nimport preprocessor from './preprocessor.js';\nexport function install(registers) {\n registers.registerComponentModel(SliderTimelineModel);\n registers.registerComponentView(SliderTimelineView);\n registers.registerSubTypeDefaulter('timeline', function () {\n // Only slider now.\n return 'slider';\n });\n installTimelineAction(registers);\n registers.registerPreprocessor(preprocessor);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isArray } from 'zrender/lib/core/util.js';\nexport default function checkMarkerInSeries(seriesOpts, markerType) {\n if (!seriesOpts) {\n return false;\n }\n\n var seriesOptArr = isArray(seriesOpts) ? seriesOpts : [seriesOpts];\n\n for (var idx = 0; idx < seriesOptArr.length; idx++) {\n if (seriesOptArr[idx] && seriesOptArr[idx][markerType]) {\n return true;\n }\n }\n\n return false;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport env from 'zrender/lib/core/env.js';\nimport { DataFormatMixin } from '../../model/mixin/dataFormat.js';\nimport ComponentModel from '../../model/Component.js';\nimport { makeInner, defaultEmphasis } from '../../util/model.js';\nimport { createTooltipMarkup } from '../tooltip/tooltipMarkup.js';\n\nfunction fillLabel(opt) {\n defaultEmphasis(opt, 'label', ['show']);\n} // { [componentType]: MarkerModel }\n\n\nvar inner = makeInner();\n\nvar MarkerModel =\n/** @class */\nfunction (_super) {\n __extends(MarkerModel, _super);\n\n function MarkerModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = MarkerModel.type;\n /**\n * If marker model is created by self from series\n */\n\n _this.createdBySelf = false;\n return _this;\n }\n /**\n * @overrite\n */\n\n\n MarkerModel.prototype.init = function (option, parentModel, ecModel) {\n if (process.env.NODE_ENV !== 'production') {\n if (this.type === 'marker') {\n throw new Error('Marker component is abstract component. Use markLine, markPoint, markArea instead.');\n }\n }\n\n this.mergeDefaultAndTheme(option, ecModel);\n\n this._mergeOption(option, ecModel, false, true);\n };\n\n MarkerModel.prototype.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 * @overrite\n */\n\n\n MarkerModel.prototype.mergeOption = function (newOpt, ecModel) {\n this._mergeOption(newOpt, ecModel, false, false);\n };\n\n MarkerModel.prototype._mergeOption = function (newOpt, ecModel, createdBySelf, isInit) {\n var componentType = this.mainType;\n\n if (!createdBySelf) {\n ecModel.eachSeries(function (seriesModel) {\n // mainType can be markPoint, markLine, markArea\n var markerOpt = seriesModel.get(this.mainType, true);\n var markerModel = inner(seriesModel)[componentType];\n\n if (!markerOpt || !markerOpt.data) {\n inner(seriesModel)[componentType] = 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 = this.createMarkerModelFromSeries(markerOpt, this, ecModel); // markerModel = new ImplementedMarkerModel(\n // markerOpt, this, ecModel\n // );\n\n zrUtil.extend(markerModel, {\n mainType: this.mainType,\n // Use the same series index and name\n seriesIndex: seriesModel.seriesIndex,\n name: seriesModel.name,\n createdBySelf: true\n });\n markerModel.__hostSeries = seriesModel;\n } else {\n markerModel._mergeOption(markerOpt, ecModel, true);\n }\n\n inner(seriesModel)[componentType] = markerModel;\n }, this);\n }\n };\n\n MarkerModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n var data = this.getData();\n var value = this.getRawValue(dataIndex);\n var itemName = data.getName(dataIndex);\n return createTooltipMarkup('section', {\n header: this.name,\n blocks: [createTooltipMarkup('nameValue', {\n name: itemName,\n value: value,\n noName: !itemName,\n noValue: value == null\n })]\n });\n };\n\n MarkerModel.prototype.getData = function () {\n return this._data;\n };\n\n MarkerModel.prototype.setData = function (data) {\n this._data = data;\n };\n\n MarkerModel.getMarkerModelFromSeries = function (seriesModel, // Support three types of markers. Strict check.\n componentType) {\n return inner(seriesModel)[componentType];\n };\n\n MarkerModel.type = 'marker';\n MarkerModel.dependencies = ['series', 'grid', 'polar', 'geo'];\n return MarkerModel;\n}(ComponentModel);\n\nzrUtil.mixin(MarkerModel, DataFormatMixin.prototype);\nexport default MarkerModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport MarkerModel from './MarkerModel.js';\n\nvar MarkPointModel =\n/** @class */\nfunction (_super) {\n __extends(MarkPointModel, _super);\n\n function MarkPointModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = MarkPointModel.type;\n return _this;\n }\n\n MarkPointModel.prototype.createMarkerModelFromSeries = function (markerOpt, masterMarkerModel, ecModel) {\n return new MarkPointModel(markerOpt, masterMarkerModel, ecModel);\n };\n\n MarkPointModel.type = 'markPoint';\n MarkPointModel.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 return MarkPointModel;\n}(MarkerModel);\n\nexport default MarkPointModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as numberUtil from '../../util/number.js';\nimport { isDimensionStacked } from '../../data/helper/dataStackHelper.js';\nimport { indexOf, curry, clone, isArray } from 'zrender/lib/core/util.js';\nimport { parseDataValue } from '../../data/helper/dataValueHelper.js';\n\nfunction hasXOrY(item) {\n return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y)));\n}\n\nfunction hasXAndY(item) {\n return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y));\n}\n\nfunction markerTypeCalculatorWithExtent(markerType, 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, markerType);\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} // TODO Specified percent\n\n\nvar markerTypeCalculator = {\n min: curry(markerTypeCalculatorWithExtent, 'min'),\n max: curry(markerTypeCalculatorWithExtent, 'max'),\n average: curry(markerTypeCalculatorWithExtent, 'average'),\n median: curry(markerTypeCalculatorWithExtent, 'median')\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 */\n\nexport function dataTransform(seriesModel, item) {\n if (!item) {\n return;\n }\n\n var data = seriesModel.getData();\n var coordSys = seriesModel.coordinateSystem;\n var dims = coordSys.dimensions; // 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 (!hasXAndY(item) && !isArray(item.coord) && coordSys) {\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 = 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 item.coord = [item.xAxis != null ? item.xAxis : item.radiusAxis, item.yAxis != null ? item.yAxis : item.angleAxis];\n }\n } // x y is provided\n\n\n if (item.coord == null) {\n item.coord = [];\n } else {\n // Each coord support max, min, average\n var coord = item.coord;\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\n return item;\n}\nexport function getAxisInfo(item, data, coordSys, seriesModel) {\n var ret = {};\n\n if (item.valueIndex != null || item.valueDim != null) {\n ret.valueDataDim = item.valueIndex != null ? 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 dimItem = seriesModel.getData().getDimensionInfo(dataDim);\n return dimItem && dimItem.coordDim;\n}\n/**\n * Filter data which is out of coordinateSystem range\n * [dataFilter description]\n */\n\n\nexport function dataFilter( // Currently only polar and cartesian has containData.\ncoordSys, item) {\n // Always return true if there is no coordSys\n return coordSys && coordSys.containData && item.coord && !hasXOrY(item) ? coordSys.containData(item.coord) : true;\n}\nexport function zoneFilter( // Currently only polar and cartesian has containData.\ncoordSys, item1, item2) {\n // Always return true if there is no coordSys\n return coordSys && coordSys.containZone && item1.coord && item2.coord && !hasXOrY(item1) && !hasXOrY(item2) ? coordSys.containZone(item1.coord, item2.coord) : true;\n}\nexport function createMarkerDimValueGetter(inCoordSys, dims) {\n return inCoordSys ? function (item, dimName, dataIndex, dimIndex) {\n var rawVal = dimIndex < 2 // x, y, radius, angle\n ? item.coord && item.coord[dimIndex] : item.value;\n return parseDataValue(rawVal, dims[dimIndex]);\n } : function (item, dimName, dataIndex, dimIndex) {\n return parseDataValue(item.value, dims[dimIndex]);\n };\n}\nexport function numCalculate(data, valueDataDim, type) {\n if (type === 'average') {\n var sum_1 = 0;\n var count_1 = 0;\n data.each(valueDataDim, function (val, idx) {\n if (!isNaN(val)) {\n sum_1 += val;\n count_1++;\n }\n });\n return sum_1 / count_1;\n } else if (type === 'median') {\n return data.getMedian(valueDataDim);\n } else {\n // max & min\n return data.getDataExtent(valueDataDim)[type === 'max' ? 1 : 0];\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentView from '../../view/Component.js';\nimport { createHashMap, each } from 'zrender/lib/core/util.js';\nimport MarkerModel from './MarkerModel.js';\nimport { makeInner } from '../../util/model.js';\nimport { enterBlur, leaveBlur } from '../../util/states.js';\nvar inner = makeInner();\n\nvar MarkerView =\n/** @class */\nfunction (_super) {\n __extends(MarkerView, _super);\n\n function MarkerView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = MarkerView.type;\n return _this;\n }\n\n MarkerView.prototype.init = function () {\n this.markerGroupMap = createHashMap();\n };\n\n MarkerView.prototype.render = function (markerModel, ecModel, api) {\n var _this = this;\n\n var markerGroupMap = this.markerGroupMap;\n markerGroupMap.each(function (item) {\n inner(item).keep = false;\n });\n ecModel.eachSeries(function (seriesModel) {\n var markerModel = MarkerModel.getMarkerModelFromSeries(seriesModel, _this.type);\n markerModel && _this.renderSeries(seriesModel, markerModel, ecModel, api);\n });\n markerGroupMap.each(function (item) {\n !inner(item).keep && _this.group.remove(item.group);\n });\n };\n\n MarkerView.prototype.markKeep = function (drawGroup) {\n inner(drawGroup).keep = true;\n };\n\n MarkerView.prototype.toggleBlurSeries = function (seriesModelList, isBlur) {\n var _this = this;\n\n each(seriesModelList, function (seriesModel) {\n var markerModel = MarkerModel.getMarkerModelFromSeries(seriesModel, _this.type);\n\n if (markerModel) {\n var data = markerModel.getData();\n data.eachItemGraphicEl(function (el) {\n if (el) {\n isBlur ? enterBlur(el) : leaveBlur(el);\n }\n });\n }\n });\n };\n\n MarkerView.type = 'marker';\n return MarkerView;\n}(ComponentView);\n\nexport default MarkerView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SymbolDraw from '../../chart/helper/SymbolDraw.js';\nimport * as numberUtil from '../../util/number.js';\nimport SeriesData from '../../data/SeriesData.js';\nimport * as markerHelper from './markerHelper.js';\nimport MarkerView from './MarkerView.js';\nimport MarkerModel from './MarkerModel.js';\nimport { isFunction, map, filter, curry, extend } from 'zrender/lib/core/util.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { getVisualFromData } from '../../visual/helper.js';\n\nfunction updateMarkerLayout(mpData, seriesModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n mpData.each(function (idx) {\n var itemModel = mpData.getItemModel(idx);\n var point;\n var xPx = numberUtil.parsePercent(itemModel.get('x'), api.getWidth());\n var yPx = numberUtil.parsePercent(itemModel.get('y'), api.getHeight());\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n point = [xPx, yPx];\n } // Chart like bar may have there own marker positioning logic\n else if (seriesModel.getMarkerPosition) {\n // Use the getMarkerPosition\n point = seriesModel.getMarkerPosition(mpData.getValues(mpData.dimensions, idx));\n } else if (coordSys) {\n var x = mpData.get(coordSys.dimensions[0], idx);\n var y = mpData.get(coordSys.dimensions[1], idx);\n point = coordSys.dataToPoint([x, y]);\n } // 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 mpData.setItemLayout(idx, point);\n });\n}\n\nvar MarkPointView =\n/** @class */\nfunction (_super) {\n __extends(MarkPointView, _super);\n\n function MarkPointView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = MarkPointView.type;\n return _this;\n }\n\n MarkPointView.prototype.updateTransform = function (markPointModel, ecModel, api) {\n ecModel.eachSeries(function (seriesModel) {\n var mpModel = MarkerModel.getMarkerModelFromSeries(seriesModel, 'markPoint');\n\n if (mpModel) {\n updateMarkerLayout(mpModel.getData(), seriesModel, api);\n this.markerGroupMap.get(seriesModel.id).updateLayout();\n }\n }, this);\n };\n\n MarkPointView.prototype.renderSeries = function (seriesModel, mpModel, ecModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var seriesId = seriesModel.id;\n var seriesData = seriesModel.getData();\n var symbolDrawMap = this.markerGroupMap;\n var symbolDraw = symbolDrawMap.get(seriesId) || symbolDrawMap.set(seriesId, new SymbolDraw());\n var mpData = createData(coordSys, seriesModel, mpModel); // FIXME\n\n mpModel.setData(mpData);\n updateMarkerLayout(mpModel.getData(), seriesModel, api);\n mpData.each(function (idx) {\n var itemModel = mpData.getItemModel(idx);\n var symbol = itemModel.getShallow('symbol');\n var symbolSize = itemModel.getShallow('symbolSize');\n var symbolRotate = itemModel.getShallow('symbolRotate');\n var symbolOffset = itemModel.getShallow('symbolOffset');\n var symbolKeepAspect = itemModel.getShallow('symbolKeepAspect'); // TODO: refactor needed: single data item should not support callback function\n\n if (isFunction(symbol) || isFunction(symbolSize) || isFunction(symbolRotate) || isFunction(symbolOffset)) {\n var rawIdx = mpModel.getRawValue(idx);\n var dataParams = mpModel.getDataParams(idx);\n\n if (isFunction(symbol)) {\n symbol = symbol(rawIdx, dataParams);\n }\n\n if (isFunction(symbolSize)) {\n // FIXME 这里不兼容 ECharts 2.x,2.x 貌似参数是整个数据?\n symbolSize = symbolSize(rawIdx, dataParams);\n }\n\n if (isFunction(symbolRotate)) {\n symbolRotate = symbolRotate(rawIdx, dataParams);\n }\n\n if (isFunction(symbolOffset)) {\n symbolOffset = symbolOffset(rawIdx, dataParams);\n }\n }\n\n var style = itemModel.getModel('itemStyle').getItemStyle();\n var color = getVisualFromData(seriesData, 'color');\n\n if (!style.fill) {\n style.fill = color;\n }\n\n mpData.setItemVisual(idx, {\n symbol: symbol,\n symbolSize: symbolSize,\n symbolRotate: symbolRotate,\n symbolOffset: symbolOffset,\n symbolKeepAspect: symbolKeepAspect,\n style: style\n });\n }); // TODO Text are wrong\n\n symbolDraw.updateData(mpData);\n this.group.add(symbolDraw.group); // Set host model for tooltip\n // FIXME\n\n mpData.eachItemGraphicEl(function (el) {\n el.traverse(function (child) {\n getECData(child).dataModel = mpModel;\n });\n });\n this.markKeep(symbolDraw);\n symbolDraw.group.silent = mpModel.get('silent') || seriesModel.get('silent');\n };\n\n MarkPointView.type = 'markPoint';\n return MarkPointView;\n}(MarkerView);\n\nfunction createData(coordSys, seriesModel, mpModel) {\n var coordDimsInfos;\n\n if (coordSys) {\n coordDimsInfos = 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 extend(extend({}, info), {\n name: coordDim,\n // DON'T use ordinalMeta to parse and collect ordinal.\n ordinalMeta: null\n });\n });\n } else {\n coordDimsInfos = [{\n name: 'value',\n type: 'float'\n }];\n }\n\n var mpData = new SeriesData(coordDimsInfos, mpModel);\n var dataOpt = map(mpModel.get('data'), curry(markerHelper.dataTransform, seriesModel));\n\n if (coordSys) {\n dataOpt = filter(dataOpt, curry(markerHelper.dataFilter, coordSys));\n }\n\n var dimValueGetter = markerHelper.createMarkerDimValueGetter(!!coordSys, coordDimsInfos);\n mpData.initData(dataOpt, null, dimValueGetter);\n return mpData;\n}\n\nexport default MarkPointView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\nimport checkMarkerInSeries from './checkMarkerInSeries.js';\nimport MarkPointModel from './MarkPointModel.js';\nimport MarkPointView from './MarkPointView.js';\nexport function install(registers) {\n registers.registerComponentModel(MarkPointModel);\n registers.registerComponentView(MarkPointView);\n registers.registerPreprocessor(function (opt) {\n if (checkMarkerInSeries(opt.series, 'markPoint')) {\n // Make sure markPoint component is enabled\n opt.markPoint = opt.markPoint || {};\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport MarkerModel from './MarkerModel.js';\n\nvar MarkLineModel =\n/** @class */\nfunction (_super) {\n __extends(MarkLineModel, _super);\n\n function MarkLineModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = MarkLineModel.type;\n return _this;\n }\n\n MarkLineModel.prototype.createMarkerModelFromSeries = function (markerOpt, masterMarkerModel, ecModel) {\n return new MarkLineModel(markerOpt, masterMarkerModel, ecModel);\n };\n\n MarkLineModel.type = 'markLine';\n MarkLineModel.defaultOption = {\n // zlevel: 0,\n z: 5,\n symbol: ['circle', 'arrow'],\n symbolSize: [8, 16],\n // symbolRotate: 0,\n symbolOffset: 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 return MarkLineModel;\n}(MarkerModel);\n\nexport default MarkLineModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport SeriesData from '../../data/SeriesData.js';\nimport * as numberUtil from '../../util/number.js';\nimport * as markerHelper from './markerHelper.js';\nimport LineDraw from '../../chart/helper/LineDraw.js';\nimport MarkerView from './MarkerView.js';\nimport { getStackedDimension } from '../../data/helper/dataStackHelper.js';\nimport { isCoordinateSystemType } from '../../coord/CoordinateSystem.js';\nimport { getECData } from '../../util/innerStore.js';\nimport MarkerModel from './MarkerModel.js';\nimport { isArray, retrieve, retrieve2, clone, extend, logError, merge, map, curry, filter, isNumber } from 'zrender/lib/core/util.js';\nimport { makeInner } from '../../util/model.js';\nimport { getVisualFromData } from '../../visual/helper.js';\nvar inner = makeInner();\n\nvar markLineTransform = function (seriesModel, coordSys, mlModel, item) {\n var data = seriesModel.getData();\n var itemArray;\n\n if (!isArray(item)) {\n // Special type markLine like 'min', 'max', 'average', 'median'\n var mlType = item.type;\n\n if (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 = void 0;\n var value = void 0;\n\n if (item.yAxis != null || item.xAxis != null) {\n valueAxis = coordSys.getAxis(item.yAxis != null ? 'y' : 'x');\n value = 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; // Normized to 2d data with start and end point\n\n var mlFrom = clone(item);\n var mlTo = {\n coord: []\n };\n mlFrom.type = null;\n mlFrom.coord = [];\n mlFrom.coord[baseIndex] = -Infinity;\n mlTo.coord[baseIndex] = Infinity;\n var precision = mlModel.get('precision');\n\n if (precision >= 0 && isNumber(value)) {\n value = +value.toFixed(Math.min(precision, 20));\n }\n\n mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value;\n itemArray = [mlFrom, mlTo, {\n type: mlType,\n valueIndex: item.valueIndex,\n // Force to use the value of calculated value.\n value: value\n }];\n } else {\n // Invalid data\n if (process.env.NODE_ENV !== 'production') {\n logError('Invalid markLine data.');\n }\n\n itemArray = [];\n }\n } else {\n itemArray = item;\n }\n\n var normalizedItem = [markerHelper.dataTransform(seriesModel, itemArray[0]), markerHelper.dataTransform(seriesModel, itemArray[1]), extend({}, itemArray[2])]; // Avoid line data type is extended by from(to) data type\n\n normalizedItem[2].type = normalizedItem[2].type || null; // Merge from option and to option into line option\n\n merge(normalizedItem[2], normalizedItem[0]);\n merge(normalizedItem[2], normalizedItem[1]);\n return normalizedItem;\n};\n\nfunction isInfinity(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 isInfinity(fromCoord[otherDimIndex]) && isInfinity(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 getMarkerPosition\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 (isCoordinateSystemType(coordSys, 'cartesian2d')) {\n // TODO: TYPE ts@4.1 may still infer it as Axis instead of Axis2D. Not sure if it's a bug\n var xAxis = coordSys.getAxis('x');\n var yAxis = coordSys.getAxis('y');\n var dims = coordSys.dimensions;\n\n if (isInfinity(data.get(dims[0], idx))) {\n point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]);\n } else if (isInfinity(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 MarkLineView =\n/** @class */\nfunction (_super) {\n __extends(MarkLineView, _super);\n\n function MarkLineView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = MarkLineView.type;\n return _this;\n }\n\n MarkLineView.prototype.updateTransform = function (markLineModel, ecModel, api) {\n ecModel.eachSeries(function (seriesModel) {\n var mlModel = MarkerModel.getMarkerModelFromSeries(seriesModel, 'markLine');\n\n if (mlModel) {\n var mlData_1 = mlModel.getData();\n var fromData_1 = inner(mlModel).from;\n var toData_1 = inner(mlModel).to; // Update visual and layout of from symbol and to symbol\n\n fromData_1.each(function (idx) {\n updateSingleMarkerEndLayout(fromData_1, idx, true, seriesModel, api);\n updateSingleMarkerEndLayout(toData_1, idx, false, seriesModel, api);\n }); // Update layout of line\n\n mlData_1.each(function (idx) {\n mlData_1.setItemLayout(idx, [fromData_1.getItemLayout(idx), toData_1.getItemLayout(idx)]);\n });\n this.markerGroupMap.get(seriesModel.id).updateLayout();\n }\n }, this);\n };\n\n MarkLineView.prototype.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 inner(mlModel).from = fromData;\n inner(mlModel).to = toData; // Line data for tooltip and formatter\n\n mlModel.setData(lineData); // TODO\n // Functionally, `symbolSize` & `symbolOffset` can also be 2D array now.\n // But the related logic and type definition are not finished yet.\n // Finish it if required\n\n var symbolType = mlModel.get('symbol');\n var symbolSize = mlModel.get('symbolSize');\n var symbolRotate = mlModel.get('symbolRotate');\n var symbolOffset = mlModel.get('symbolOffset'); // TODO: support callback function like markPoint\n\n if (!isArray(symbolType)) {\n symbolType = [symbolType, symbolType];\n }\n\n if (!isArray(symbolSize)) {\n symbolSize = [symbolSize, symbolSize];\n }\n\n if (!isArray(symbolRotate)) {\n symbolRotate = [symbolRotate, symbolRotate];\n }\n\n if (!isArray(symbolOffset)) {\n symbolOffset = [symbolOffset, symbolOffset];\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 lineStyle = lineData.getItemModel(idx).getModel('lineStyle').getLineStyle(); // lineData.setItemVisual(idx, {\n // color: lineColor || fromData.getItemVisual(idx, 'color')\n // });\n\n lineData.setItemLayout(idx, [fromData.getItemLayout(idx), toData.getItemLayout(idx)]);\n\n if (lineStyle.stroke == null) {\n lineStyle.stroke = fromData.getItemVisual(idx, 'style').fill;\n }\n\n lineData.setItemVisual(idx, {\n fromSymbolKeepAspect: fromData.getItemVisual(idx, 'symbolKeepAspect'),\n fromSymbolOffset: fromData.getItemVisual(idx, 'symbolOffset'),\n fromSymbolRotate: fromData.getItemVisual(idx, 'symbolRotate'),\n fromSymbolSize: fromData.getItemVisual(idx, 'symbolSize'),\n fromSymbol: fromData.getItemVisual(idx, 'symbol'),\n toSymbolKeepAspect: toData.getItemVisual(idx, 'symbolKeepAspect'),\n toSymbolOffset: toData.getItemVisual(idx, 'symbolOffset'),\n toSymbolRotate: toData.getItemVisual(idx, 'symbolRotate'),\n toSymbolSize: toData.getItemVisual(idx, 'symbolSize'),\n toSymbol: toData.getItemVisual(idx, 'symbol'),\n style: lineStyle\n });\n });\n lineDraw.updateData(lineData); // Set host model for tooltip\n // FIXME\n\n mlData.line.eachItemGraphicEl(function (el) {\n getECData(el).dataModel = mlModel;\n el.traverse(function (child) {\n getECData(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 var style = itemModel.getModel('itemStyle').getItemStyle();\n\n if (style.fill == null) {\n style.fill = getVisualFromData(seriesData, 'color');\n }\n\n data.setItemVisual(idx, {\n symbolKeepAspect: itemModel.get('symbolKeepAspect'),\n // `0` should be considered as a valid value, so use `retrieve2` instead of `||`\n symbolOffset: retrieve2(itemModel.get('symbolOffset', true), symbolOffset[isFrom ? 0 : 1]),\n symbolRotate: retrieve2(itemModel.get('symbolRotate', true), symbolRotate[isFrom ? 0 : 1]),\n // TODO: when 2d array is supported, it should ignore parent\n symbolSize: retrieve2(itemModel.get('symbolSize'), symbolSize[isFrom ? 0 : 1]),\n symbol: retrieve2(itemModel.get('symbol', true), symbolType[isFrom ? 0 : 1]),\n style: style\n });\n }\n\n this.markKeep(lineDraw);\n lineDraw.group.silent = mlModel.get('silent') || seriesModel.get('silent');\n };\n\n MarkLineView.type = 'markLine';\n return MarkLineView;\n}(MarkerView);\n\nfunction createList(coordSys, seriesModel, mlModel) {\n var coordDimsInfos;\n\n if (coordSys) {\n coordDimsInfos = 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 extend(extend({}, info), {\n name: coordDim,\n // DON'T use ordinalMeta to parse and collect ordinal.\n ordinalMeta: null\n });\n });\n } else {\n coordDimsInfos = [{\n name: 'value',\n type: 'float'\n }];\n }\n\n var fromData = new SeriesData(coordDimsInfos, mlModel);\n var toData = new SeriesData(coordDimsInfos, mlModel); // No dimensions\n\n var lineData = new SeriesData([], mlModel);\n var optData = map(mlModel.get('data'), curry(markLineTransform, seriesModel, coordSys, mlModel));\n\n if (coordSys) {\n optData = filter(optData, curry(markLineFilter, coordSys));\n }\n\n var dimValueGetter = markerHelper.createMarkerDimValueGetter(!!coordSys, coordDimsInfos);\n fromData.initData(map(optData, function (item) {\n return item[0];\n }), null, dimValueGetter);\n toData.initData(map(optData, function (item) {\n return item[1];\n }), null, dimValueGetter);\n lineData.initData(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\nexport default MarkLineView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\nimport checkMarkerInSeries from './checkMarkerInSeries.js';\nimport MarkLineModel from './MarkLineModel.js';\nimport MarkLineView from './MarkLineView.js';\nexport function install(registers) {\n registers.registerComponentModel(MarkLineModel);\n registers.registerComponentView(MarkLineView);\n registers.registerPreprocessor(function (opt) {\n if (checkMarkerInSeries(opt.series, 'markLine')) {\n // Make sure markLine component is enabled\n opt.markLine = opt.markLine || {};\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport MarkerModel from './MarkerModel.js';\n\nvar MarkAreaModel =\n/** @class */\nfunction (_super) {\n __extends(MarkAreaModel, _super);\n\n function MarkAreaModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = MarkAreaModel.type;\n return _this;\n }\n\n MarkAreaModel.prototype.createMarkerModelFromSeries = function (markerOpt, masterMarkerModel, ecModel) {\n return new MarkAreaModel(markerOpt, masterMarkerModel, ecModel);\n };\n\n MarkAreaModel.type = 'markArea';\n MarkAreaModel.defaultOption = {\n // zlevel: 0,\n // PENDING\n z: 1,\n tooltip: {\n trigger: 'item'\n },\n // markArea should fixed on the coordinate system\n animation: false,\n label: {\n show: true,\n position: 'top'\n },\n itemStyle: {\n // color and borderColor default to use color from series\n // color: 'auto'\n // borderColor: 'auto'\n borderWidth: 0\n },\n emphasis: {\n label: {\n show: true,\n position: 'top'\n }\n }\n };\n return MarkAreaModel;\n}(MarkerModel);\n\nexport default MarkAreaModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\"; // TODO Optimize on polar\n\nimport * as colorUtil from 'zrender/lib/tool/color.js';\nimport SeriesData from '../../data/SeriesData.js';\nimport * as numberUtil from '../../util/number.js';\nimport * as graphic from '../../util/graphic.js';\nimport { toggleHoverEmphasis, setStatesStylesFromModel } from '../../util/states.js';\nimport * as markerHelper from './markerHelper.js';\nimport MarkerView from './MarkerView.js';\nimport { retrieve, mergeAll, map, curry, filter, extend, isString } from 'zrender/lib/core/util.js';\nimport { isCoordinateSystemType } from '../../coord/CoordinateSystem.js';\nimport MarkerModel from './MarkerModel.js';\nimport { makeInner } from '../../util/model.js';\nimport { getVisualFromData } from '../../visual/helper.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { parseDataValue } from '../../data/helper/dataValueHelper.js';\nvar inner = makeInner();\n\nvar markAreaTransform = function (seriesModel, coordSys, maModel, item) {\n // item may be null\n var item0 = item[0];\n var item1 = item[1];\n\n if (!item0 || !item1) {\n return;\n }\n\n var lt = markerHelper.dataTransform(seriesModel, item0);\n var rb = markerHelper.dataTransform(seriesModel, item1); // 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 = 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 isInfinity(val) {\n return !isNaN(val) && !isFinite(val);\n} // If a markArea has one dim\n\n\nfunction ifMarkAreaHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {\n var otherDimIndex = 1 - dimIndex;\n return isInfinity(fromCoord[otherDimIndex]) && isInfinity(toCoord[otherDimIndex]);\n}\n\nfunction markAreaFilter(coordSys, item) {\n var fromCoord = item.coord[0];\n var toCoord = item.coord[1];\n var item0 = {\n coord: fromCoord,\n x: item.x0,\n y: item.y0\n };\n var item1 = {\n coord: toCoord,\n x: item.x1,\n y: item.y1\n };\n\n if (isCoordinateSystemType(coordSys, 'cartesian2d')) {\n // In case\n // {\n // markArea: {\n // data: [{ yAxis: 2 }]\n // }\n // }\n if (fromCoord && toCoord && (ifMarkAreaHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkAreaHasOnlyDim(0, fromCoord, toCoord, coordSys))) {\n return true;\n } // Directly returning true may also do the work,\n // because markArea will not be shown automatically\n // when it's not included in coordinate system.\n // But filtering ahead can avoid keeping rendering markArea\n // when there are too many of them.\n\n\n return markerHelper.zoneFilter(coordSys, item0, item1);\n }\n\n return markerHelper.dataFilter(coordSys, item0) || markerHelper.dataFilter(coordSys, item1);\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 // Consider the case that user input the right-bottom point first\n // Pick the larger x and y as 'x1' and 'y1'\n var pointValue0 = data.getValues(['x0', 'y0'], idx);\n var pointValue1 = data.getValues(['x1', 'y1'], idx);\n var clampPointValue0 = coordSys.clampData(pointValue0);\n var clampPointValue1 = coordSys.clampData(pointValue1);\n var pointValue = [];\n\n if (dims[0] === 'x0') {\n pointValue[0] = clampPointValue0[0] > clampPointValue1[0] ? pointValue1[0] : pointValue0[0];\n } else {\n pointValue[0] = clampPointValue0[0] > clampPointValue1[0] ? pointValue0[0] : pointValue1[0];\n }\n\n if (dims[1] === 'y0') {\n pointValue[1] = clampPointValue0[1] > clampPointValue1[1] ? pointValue1[1] : pointValue0[1];\n } else {\n pointValue[1] = clampPointValue0[1] > clampPointValue1[1] ? pointValue0[1] : pointValue1[1];\n } // Use the getMarkerPosition\n\n\n point = seriesModel.getMarkerPosition(pointValue, dims, true);\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 (isCoordinateSystemType(coordSys, 'cartesian2d')) {\n // TODO: TYPE ts@4.1 may still infer it as Axis instead of Axis2D. Not sure if it's a bug\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 (isInfinity(x)) {\n point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === 'x0' ? 0 : 1]);\n } else if (isInfinity(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\nexport var dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']];\n\nvar MarkAreaView =\n/** @class */\nfunction (_super) {\n __extends(MarkAreaView, _super);\n\n function MarkAreaView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = MarkAreaView.type;\n return _this;\n }\n\n MarkAreaView.prototype.updateTransform = function (markAreaModel, ecModel, api) {\n ecModel.eachSeries(function (seriesModel) {\n var maModel = MarkerModel.getMarkerModelFromSeries(seriesModel, 'markArea');\n\n if (maModel) {\n var areaData_1 = maModel.getData();\n areaData_1.each(function (idx) {\n var points = map(dimPermutations, function (dim) {\n return getSingleMarkerEndPoint(areaData_1, idx, dim, seriesModel, api);\n }); // Layout\n\n areaData_1.setItemLayout(idx, points);\n var el = areaData_1.getItemGraphicEl(idx);\n el.setShape('points', points);\n });\n }\n }, this);\n };\n\n MarkAreaView.prototype.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 this.markKeep(polygonGroup);\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 var points = map(dimPermutations, function (dim) {\n return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);\n });\n var xAxisScale = coordSys.getAxis('x').scale;\n var yAxisScale = coordSys.getAxis('y').scale;\n var xAxisExtent = xAxisScale.getExtent();\n var yAxisExtent = yAxisScale.getExtent();\n var xPointExtent = [xAxisScale.parse(areaData.get('x0', idx)), xAxisScale.parse(areaData.get('x1', idx))];\n var yPointExtent = [yAxisScale.parse(areaData.get('y0', idx)), yAxisScale.parse(areaData.get('y1', idx))];\n numberUtil.asc(xPointExtent);\n numberUtil.asc(yPointExtent);\n var overlapped = !(xAxisExtent[0] > xPointExtent[1] || xAxisExtent[1] < xPointExtent[0] || yAxisExtent[0] > yPointExtent[1] || yAxisExtent[1] < yPointExtent[0]); // If none of the area is inside coordSys, allClipped is set to be true\n // in layout so that label will not be displayed. See #12591\n\n var allClipped = !overlapped;\n areaData.setItemLayout(idx, {\n points: points,\n allClipped: allClipped\n });\n var style = areaData.getItemModel(idx).getModel('itemStyle').getItemStyle();\n var color = getVisualFromData(seriesData, 'color');\n\n if (!style.fill) {\n style.fill = color;\n\n if (isString(style.fill)) {\n style.fill = colorUtil.modifyAlpha(style.fill, 0.4);\n }\n }\n\n if (!style.stroke) {\n style.stroke = color;\n } // Visual\n\n\n areaData.setItemVisual(idx, 'style', style);\n });\n areaData.diff(inner(polygonGroup).data).add(function (idx) {\n var layout = areaData.getItemLayout(idx);\n\n if (!layout.allClipped) {\n var polygon = new graphic.Polygon({\n shape: {\n points: layout.points\n }\n });\n areaData.setItemGraphicEl(idx, polygon);\n polygonGroup.group.add(polygon);\n }\n }).update(function (newIdx, oldIdx) {\n var polygon = inner(polygonGroup).data.getItemGraphicEl(oldIdx);\n var layout = areaData.getItemLayout(newIdx);\n\n if (!layout.allClipped) {\n if (polygon) {\n graphic.updateProps(polygon, {\n shape: {\n points: layout.points\n }\n }, maModel, newIdx);\n } else {\n polygon = new graphic.Polygon({\n shape: {\n points: layout.points\n }\n });\n }\n\n areaData.setItemGraphicEl(newIdx, polygon);\n polygonGroup.group.add(polygon);\n } else if (polygon) {\n polygonGroup.group.remove(polygon);\n }\n }).remove(function (idx) {\n var polygon = inner(polygonGroup).data.getItemGraphicEl(idx);\n polygonGroup.group.remove(polygon);\n }).execute();\n areaData.eachItemGraphicEl(function (polygon, idx) {\n var itemModel = areaData.getItemModel(idx);\n var style = areaData.getItemVisual(idx, 'style');\n polygon.useStyle(areaData.getItemVisual(idx, 'style'));\n setLabelStyle(polygon, getLabelStatesModels(itemModel), {\n labelFetcher: maModel,\n labelDataIndex: idx,\n defaultText: areaData.getName(idx) || '',\n inheritColor: isString(style.fill) ? colorUtil.modifyAlpha(style.fill, 1) : '#000'\n });\n setStatesStylesFromModel(polygon, itemModel);\n toggleHoverEmphasis(polygon, null, null, itemModel.get(['emphasis', 'disabled']));\n getECData(polygon).dataModel = maModel;\n });\n inner(polygonGroup).data = areaData;\n polygonGroup.group.silent = maModel.get('silent') || seriesModel.get('silent');\n };\n\n MarkAreaView.type = 'markArea';\n return MarkAreaView;\n}(MarkerView);\n\nfunction createList(coordSys, seriesModel, maModel) {\n var areaData;\n var dataDims;\n var dims = ['x0', 'y0', 'x1', 'y1'];\n\n if (coordSys) {\n var coordDimsInfos_1 = 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 extend(extend({}, info), {\n name: coordDim,\n // DON'T use ordinalMeta to parse and collect ordinal.\n ordinalMeta: null\n });\n });\n dataDims = map(dims, function (dim, idx) {\n return {\n name: dim,\n type: coordDimsInfos_1[idx % 2].type\n };\n });\n areaData = new SeriesData(dataDims, maModel);\n } else {\n dataDims = [{\n name: 'value',\n type: 'float'\n }];\n areaData = new SeriesData(dataDims, maModel);\n }\n\n var optData = map(maModel.get('data'), curry(markAreaTransform, seriesModel, coordSys, maModel));\n\n if (coordSys) {\n optData = filter(optData, curry(markAreaFilter, coordSys));\n }\n\n var dimValueGetter = coordSys ? function (item, dimName, dataIndex, dimIndex) {\n // TODO should convert to ParsedValue?\n var rawVal = item.coord[Math.floor(dimIndex / 2)][dimIndex % 2];\n return parseDataValue(rawVal, dataDims[dimIndex]);\n } : function (item, dimName, dataIndex, dimIndex) {\n return parseDataValue(item.value, dataDims[dimIndex]);\n };\n areaData.initData(optData, null, dimValueGetter);\n areaData.hasItemOption = true;\n return areaData;\n}\n\nexport default MarkAreaView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport checkMarkerInSeries from './checkMarkerInSeries.js';\nimport MarkAreaModel from './MarkAreaModel.js';\nimport MarkAreaView from './MarkAreaView.js';\nexport function install(registers) {\n registers.registerComponentModel(MarkAreaModel);\n registers.registerComponentView(MarkAreaView);\n registers.registerPreprocessor(function (opt) {\n if (checkMarkerInSeries(opt.series, 'markArea')) {\n // Make sure markArea component is enabled\n opt.markArea = opt.markArea || {};\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport DataZoomModel from './DataZoomModel.js';\nimport { inheritDefaultOption } from '../../util/component.js';\n\nvar InsideZoomModel =\n/** @class */\nfunction (_super) {\n __extends(InsideZoomModel, _super);\n\n function InsideZoomModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = InsideZoomModel.type;\n return _this;\n }\n\n InsideZoomModel.type = 'dataZoom.inside';\n InsideZoomModel.defaultOption = inheritDefaultOption(DataZoomModel.defaultOption, {\n disabled: false,\n zoomLock: false,\n zoomOnMouseWheel: true,\n moveOnMouseMove: true,\n moveOnMouseWheel: false,\n preventDefaultMouseMove: true\n });\n return InsideZoomModel;\n}(DataZoomModel);\n\nexport default InsideZoomModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Only create one roam controller for each coordinate system.\n// one roam controller might be refered by two inside data zoom\n// components (for example, one for x and one for y). When user\n// pan or zoom, only dispatch one action for those data zoom\n// components.\nimport RoamController from '../../component/helper/RoamController.js';\nimport * as throttleUtil from '../../util/throttle.js';\nimport { makeInner } from '../../util/model.js';\nimport { each, curry, createHashMap } from 'zrender/lib/core/util.js';\nimport { collectReferCoordSysModelInfo } from './helper.js';\nvar inner = makeInner();\nexport function setViewInfoToCoordSysRecord(api, dataZoomModel, getRange) {\n inner(api).coordSysRecordMap.each(function (coordSysRecord) {\n var dzInfo = coordSysRecord.dataZoomInfoMap.get(dataZoomModel.uid);\n\n if (dzInfo) {\n dzInfo.getRange = getRange;\n }\n });\n}\nexport function disposeCoordSysRecordIfNeeded(api, dataZoomModel) {\n var coordSysRecordMap = inner(api).coordSysRecordMap;\n var coordSysKeyArr = coordSysRecordMap.keys();\n\n for (var i = 0; i < coordSysKeyArr.length; i++) {\n var coordSysKey = coordSysKeyArr[i];\n var coordSysRecord = coordSysRecordMap.get(coordSysKey);\n var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap;\n\n if (dataZoomInfoMap) {\n var dzUid = dataZoomModel.uid;\n var dzInfo = dataZoomInfoMap.get(dzUid);\n\n if (dzInfo) {\n dataZoomInfoMap.removeKey(dzUid);\n\n if (!dataZoomInfoMap.keys().length) {\n disposeCoordSysRecord(coordSysRecordMap, coordSysRecord);\n }\n }\n }\n }\n}\n\nfunction disposeCoordSysRecord(coordSysRecordMap, coordSysRecord) {\n if (coordSysRecord) {\n coordSysRecordMap.removeKey(coordSysRecord.model.uid);\n var controller = coordSysRecord.controller;\n controller && controller.dispose();\n }\n}\n\nfunction createCoordSysRecord(api, coordSysModel) {\n // These init props will never change after record created.\n var coordSysRecord = {\n model: coordSysModel,\n containsPoint: curry(containsPoint, coordSysModel),\n dispatchAction: curry(dispatchAction, api),\n dataZoomInfoMap: null,\n controller: null\n }; // Must not do anything depends on coordSysRecord outside the event handler here,\n // because coordSysRecord not completed yet.\n\n var controller = coordSysRecord.controller = new RoamController(api.getZr());\n each(['pan', 'zoom', 'scrollMove'], function (eventName) {\n controller.on(eventName, function (event) {\n var batch = [];\n coordSysRecord.dataZoomInfoMap.each(function (dzInfo) {\n // Check whether the behaviors (zoomOnMouseWheel, moveOnMouseMove,\n // moveOnMouseWheel, ...) enabled.\n if (!event.isAvailableBehavior(dzInfo.model.option)) {\n return;\n }\n\n var method = (dzInfo.getRange || {})[eventName];\n var range = method && method(dzInfo.dzReferCoordSysInfo, coordSysRecord.model.mainType, coordSysRecord.controller, event);\n !dzInfo.model.get('disabled', true) && range && batch.push({\n dataZoomId: dzInfo.model.id,\n start: range[0],\n end: range[1]\n });\n });\n batch.length && coordSysRecord.dispatchAction(batch);\n });\n });\n return coordSysRecord;\n}\n/**\n * This action will be throttled.\n */\n\n\nfunction dispatchAction(api, batch) {\n if (!api.isDisposed()) {\n api.dispatchAction({\n type: 'dataZoom',\n animation: {\n easing: 'cubicOut',\n duration: 100\n },\n batch: batch\n });\n }\n}\n\nfunction containsPoint(coordSysModel, e, x, y) {\n return coordSysModel.coordinateSystem.containPoint([x, y]);\n}\n/**\n * Merge roamController settings when multiple dataZooms share one roamController.\n */\n\n\nfunction mergeControllerParams(dataZoomInfoMap) {\n var controlType; // DO NOT use reserved word (true, false, undefined) as key literally. Even if encapsulated\n // as string, it is probably revert to reserved word by compress tool. See #7411.\n\n var prefix = 'type_';\n var typePriority = {\n 'type_true': 2,\n 'type_move': 1,\n 'type_false': 0,\n 'type_undefined': -1\n };\n var preventDefaultMouseMove = true;\n dataZoomInfoMap.each(function (dataZoomInfo) {\n var dataZoomModel = dataZoomInfo.model;\n var oneType = dataZoomModel.get('disabled', true) ? false : dataZoomModel.get('zoomLock', true) ? 'move' : true;\n\n if (typePriority[prefix + oneType] > typePriority[prefix + controlType]) {\n controlType = oneType;\n } // Prevent default move event by default. If one false, do not prevent. Otherwise\n // users may be confused why it does not work when multiple insideZooms exist.\n\n\n preventDefaultMouseMove = preventDefaultMouseMove && dataZoomModel.get('preventDefaultMouseMove', true);\n });\n return {\n controlType: controlType,\n opt: {\n // RoamController will enable all of these functionalities,\n // and the final behavior is determined by its event listener\n // provided by each inside zoom.\n zoomOnMouseWheel: true,\n moveOnMouseMove: true,\n moveOnMouseWheel: true,\n preventDefaultMouseMove: !!preventDefaultMouseMove\n }\n };\n}\n\nexport function installDataZoomRoamProcessor(registers) {\n registers.registerProcessor(registers.PRIORITY.PROCESSOR.FILTER, function (ecModel, api) {\n var apiInner = inner(api);\n var coordSysRecordMap = apiInner.coordSysRecordMap || (apiInner.coordSysRecordMap = createHashMap());\n coordSysRecordMap.each(function (coordSysRecord) {\n // `coordSysRecordMap` always exists (because it holds the `roam controller`, which should\n // better not re-create each time), but clear `dataZoomInfoMap` each round of the workflow.\n coordSysRecord.dataZoomInfoMap = null;\n });\n ecModel.eachComponent({\n mainType: 'dataZoom',\n subType: 'inside'\n }, function (dataZoomModel) {\n var dzReferCoordSysWrap = collectReferCoordSysModelInfo(dataZoomModel);\n each(dzReferCoordSysWrap.infoList, function (dzCoordSysInfo) {\n var coordSysUid = dzCoordSysInfo.model.uid;\n var coordSysRecord = coordSysRecordMap.get(coordSysUid) || coordSysRecordMap.set(coordSysUid, createCoordSysRecord(api, dzCoordSysInfo.model));\n var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap || (coordSysRecord.dataZoomInfoMap = createHashMap()); // Notice these props might be changed each time for a single dataZoomModel.\n\n dataZoomInfoMap.set(dataZoomModel.uid, {\n dzReferCoordSysInfo: dzCoordSysInfo,\n model: dataZoomModel,\n getRange: null\n });\n });\n }); // (1) Merge dataZoom settings for each coord sys and set to the roam controller.\n // (2) Clear coord sys if not refered by any dataZoom.\n\n coordSysRecordMap.each(function (coordSysRecord) {\n var controller = coordSysRecord.controller;\n var firstDzInfo;\n var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap;\n\n if (dataZoomInfoMap) {\n var firstDzKey = dataZoomInfoMap.keys()[0];\n\n if (firstDzKey != null) {\n firstDzInfo = dataZoomInfoMap.get(firstDzKey);\n }\n }\n\n if (!firstDzInfo) {\n disposeCoordSysRecord(coordSysRecordMap, coordSysRecord);\n return;\n }\n\n var controllerParams = mergeControllerParams(dataZoomInfoMap);\n controller.enable(controllerParams.controlType, controllerParams.opt);\n controller.setPointerChecker(coordSysRecord.containsPoint);\n throttleUtil.createOrUpdate(coordSysRecord, 'dispatchAction', firstDzInfo.model.get('throttle', true), 'fixRate');\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport DataZoomView from './DataZoomView.js';\nimport sliderMove from '../helper/sliderMove.js';\nimport * as roams from './roams.js';\nimport { bind } from 'zrender/lib/core/util.js';\n\nvar InsideZoomView =\n/** @class */\nfunction (_super) {\n __extends(InsideZoomView, _super);\n\n function InsideZoomView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'dataZoom.inside';\n return _this;\n }\n\n InsideZoomView.prototype.render = function (dataZoomModel, ecModel, api) {\n _super.prototype.render.apply(this, arguments);\n\n if (dataZoomModel.noTarget()) {\n this._clear();\n\n return;\n } // Hence the `throttle` util ensures to preserve command order,\n // here simply updating range all the time will not cause missing\n // any of the the roam change.\n\n\n this.range = dataZoomModel.getPercentRange(); // Reset controllers.\n\n roams.setViewInfoToCoordSysRecord(api, dataZoomModel, {\n pan: bind(getRangeHandlers.pan, this),\n zoom: bind(getRangeHandlers.zoom, this),\n scrollMove: bind(getRangeHandlers.scrollMove, this)\n });\n };\n\n InsideZoomView.prototype.dispose = function () {\n this._clear();\n\n _super.prototype.dispose.apply(this, arguments);\n };\n\n InsideZoomView.prototype._clear = function () {\n roams.disposeCoordSysRecordIfNeeded(this.api, this.dataZoomModel);\n this.range = null;\n };\n\n InsideZoomView.type = 'dataZoom.inside';\n return InsideZoomView;\n}(DataZoomView);\n\nvar getRangeHandlers = {\n zoom: function (coordSysInfo, coordSysMainType, controller, e) {\n var lastRange = this.range;\n var range = lastRange.slice(); // Calculate transform by the first axis.\n\n var axisModel = coordSysInfo.axisModels[0];\n\n if (!axisModel) {\n return;\n }\n\n var directionInfo = getDirectionInfo[coordSysMainType](null, [e.originX, e.originY], axisModel, controller, coordSysInfo);\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 pan: makeMover(function (range, axisModel, coordSysInfo, coordSysMainType, controller, e) {\n var directionInfo = getDirectionInfo[coordSysMainType]([e.oldX, e.oldY], [e.newX, e.newY], axisModel, controller, coordSysInfo);\n return directionInfo.signal * (range[1] - range[0]) * directionInfo.pixel / directionInfo.pixelLength;\n }),\n scrollMove: makeMover(function (range, axisModel, coordSysInfo, coordSysMainType, controller, e) {\n var directionInfo = getDirectionInfo[coordSysMainType]([0, 0], [e.scrollDelta, e.scrollDelta], axisModel, controller, coordSysInfo);\n return directionInfo.signal * (range[1] - range[0]) * e.scrollDelta;\n })\n};\n\nfunction makeMover(getPercentDelta) {\n return function (coordSysInfo, coordSysMainType, controller, e) {\n var lastRange = this.range;\n var range = lastRange.slice(); // Calculate transform by the first axis.\n\n var axisModel = coordSysInfo.axisModels[0];\n\n if (!axisModel) {\n return;\n }\n\n var percentDelta = getPercentDelta(range, axisModel, coordSysInfo, coordSysMainType, 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, coordSysInfo) {\n var axis = axisModel.axis;\n var ret = {};\n var rect = coordSysInfo.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, coordSysInfo) {\n var axis = axisModel.axis;\n var ret = {};\n var polar = coordSysInfo.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, coordSysInfo) {\n var axis = axisModel.axis;\n var rect = coordSysInfo.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};\nexport default InsideZoomView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport InsideZoomModel from './InsideZoomModel.js';\nimport InsideZoomView from './InsideZoomView.js';\nimport { installDataZoomRoamProcessor } from './roams.js';\nimport installCommon from './installCommon.js';\nexport function install(registers) {\n installCommon(registers);\n registers.registerComponentModel(InsideZoomModel);\n registers.registerComponentView(InsideZoomView);\n installDataZoomRoamProcessor(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport DataZoomModel from './DataZoomModel.js';\nimport { inheritDefaultOption } from '../../util/component.js';\n\nvar SliderZoomModel =\n/** @class */\nfunction (_super) {\n __extends(SliderZoomModel, _super);\n\n function SliderZoomModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SliderZoomModel.type;\n return _this;\n }\n\n SliderZoomModel.type = 'dataZoom.slider';\n SliderZoomModel.layoutMode = 'box';\n SliderZoomModel.defaultOption = inheritDefaultOption(DataZoomModel.defaultOption, {\n show: true,\n // deault value can only be drived in view stage.\n right: 'ph',\n top: 'ph',\n width: 'ph',\n height: 'ph',\n left: null,\n bottom: null,\n borderColor: '#d2dbee',\n borderRadius: 3,\n backgroundColor: 'rgba(47,69,84,0)',\n // dataBackgroundColor: '#ddd',\n dataBackground: {\n lineStyle: {\n color: '#d2dbee',\n width: 0.5\n },\n areaStyle: {\n color: '#d2dbee',\n opacity: 0.2\n }\n },\n selectedDataBackground: {\n lineStyle: {\n color: '#8fb0f7',\n width: 0.5\n },\n areaStyle: {\n color: '#8fb0f7',\n opacity: 0.2\n }\n },\n // Color of selected window.\n fillerColor: 'rgba(135,175,274,0.2)',\n handleIcon: 'path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z',\n // Percent of the slider height\n handleSize: '100%',\n handleStyle: {\n color: '#fff',\n borderColor: '#ACB8D1'\n },\n moveHandleSize: 7,\n moveHandleIcon: 'path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z',\n moveHandleStyle: {\n color: '#D2DBEE',\n opacity: 0.7\n },\n showDetail: true,\n showDataShadow: 'auto',\n realtime: true,\n zoomLock: false,\n textStyle: {\n color: '#6E7079'\n },\n brushSelect: true,\n brushStyle: {\n color: 'rgba(135,175,274,0.15)'\n },\n emphasis: {\n handleStyle: {\n borderColor: '#8FB0F7'\n },\n moveHandleStyle: {\n color: '#8FB0F7'\n }\n }\n });\n return SliderZoomModel;\n}(DataZoomModel);\n\nexport default SliderZoomModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { bind, each, isFunction, isString, indexOf } from 'zrender/lib/core/util.js';\nimport * as eventTool from 'zrender/lib/core/event.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as throttle from '../../util/throttle.js';\nimport DataZoomView from './DataZoomView.js';\nimport { linearMap, asc, parsePercent } from '../../util/number.js';\nimport * as layout from '../../util/layout.js';\nimport sliderMove from '../helper/sliderMove.js';\nimport { getAxisMainType, collectReferCoordSysModelInfo } from './helper.js';\nimport { enableHoverEmphasis } from '../../util/states.js';\nimport { createSymbol, symbolBuildProxies } from '../../util/symbol.js';\nimport { deprecateLog } from '../../util/log.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nvar Rect = graphic.Rect; // Constants\n\nvar DEFAULT_LOCATION_EDGE_GAP = 7;\nvar DEFAULT_FRAME_BORDER_WIDTH = 1;\nvar DEFAULT_FILLER_SIZE = 30;\nvar DEFAULT_MOVE_HANDLE_SIZE = 7;\nvar HORIZONTAL = 'horizontal';\nvar VERTICAL = 'vertical';\nvar LABEL_GAP = 5;\nvar SHOW_DATA_SHADOW_SERIES_TYPE = ['line', 'bar', 'candlestick', 'scatter'];\nvar REALTIME_ANIMATION_CONFIG = {\n easing: 'cubicOut',\n duration: 100,\n delay: 0\n};\n\nvar SliderZoomView =\n/** @class */\nfunction (_super) {\n __extends(SliderZoomView, _super);\n\n function SliderZoomView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SliderZoomView.type;\n _this._displayables = {};\n return _this;\n }\n\n SliderZoomView.prototype.init = function (ecModel, api) {\n this.api = api; // A unique handler for each dataZoom component\n\n this._onBrush = bind(this._onBrush, this);\n this._onBrushEnd = bind(this._onBrushEnd, this);\n };\n\n SliderZoomView.prototype.render = function (dataZoomModel, ecModel, api, payload) {\n _super.prototype.render.apply(this, arguments);\n\n throttle.createOrUpdate(this, '_dispatchZoomAction', dataZoomModel.get('throttle'), 'fixRate');\n this._orient = dataZoomModel.getOrient();\n\n if (dataZoomModel.get('show') === false) {\n this.group.removeAll();\n return;\n }\n\n if (dataZoomModel.noTarget()) {\n this._clear();\n\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 SliderZoomView.prototype.dispose = function () {\n this._clear();\n\n _super.prototype.dispose.apply(this, arguments);\n };\n\n SliderZoomView.prototype._clear = function () {\n throttle.clear(this, '_dispatchZoomAction');\n var zr = this.api.getZr();\n zr.off('mousemove', this._onBrush);\n zr.off('mouseup', this._onBrushEnd);\n };\n\n SliderZoomView.prototype._buildView = function () {\n var thisGroup = this.group;\n thisGroup.removeAll();\n this._brushing = false;\n this._displayables.brushRect = null;\n\n this._resetLocation();\n\n this._resetInterval();\n\n var barGroup = this._displayables.sliderGroup = 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 SliderZoomView.prototype._resetLocation = function () {\n var dataZoomModel = this.dataZoomModel;\n var api = this.api;\n var showMoveHandle = dataZoomModel.get('brushSelect');\n var moveHandleSize = showMoveHandle ? DEFAULT_MOVE_HANDLE_SIZE : 0; // 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 - moveHandleSize,\n width: coordRect.width,\n height: DEFAULT_FILLER_SIZE\n } : {\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 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);\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 SliderZoomView.prototype._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 sliderGroup = this._displayables.sliderGroup;\n var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse; // Transform barGroup.\n\n sliderGroup.attr(orient === HORIZONTAL && !inverse ? {\n scaleY: otherAxisInverse ? 1 : -1,\n scaleX: 1\n } : orient === HORIZONTAL && inverse ? {\n scaleY: otherAxisInverse ? 1 : -1,\n scaleX: -1\n } : orient === VERTICAL && !inverse ? {\n scaleY: otherAxisInverse ? -1 : 1,\n scaleX: 1,\n rotation: Math.PI / 2\n } // Dont use Math.PI, considering shadow direction.\n : {\n scaleY: otherAxisInverse ? -1 : 1,\n scaleX: -1,\n rotation: Math.PI / 2\n }); // Position barGroup\n\n var rect = thisGroup.getBoundingRect([sliderGroup]);\n thisGroup.x = location.x - rect.x;\n thisGroup.y = location.y - rect.y;\n thisGroup.markRedraw();\n };\n\n SliderZoomView.prototype._getViewExtent = function () {\n return [0, this._size[0]];\n };\n\n SliderZoomView.prototype._renderBackground = function () {\n var dataZoomModel = this.dataZoomModel;\n var size = this._size;\n var barGroup = this._displayables.sliderGroup;\n var brushSelect = dataZoomModel.get('brushSelect');\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 var clickPanel = 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: bind(this._onClickPanel, this)\n });\n var zr = this.api.getZr();\n\n if (brushSelect) {\n clickPanel.on('mousedown', this._onBrushStart, this);\n clickPanel.cursor = 'crosshair';\n zr.on('mousemove', this._onBrush);\n zr.on('mouseup', this._onBrushEnd);\n } else {\n zr.off('mousemove', this._onBrush);\n zr.off('mouseup', this._onBrushEnd);\n }\n\n barGroup.add(clickPanel);\n };\n\n SliderZoomView.prototype._renderDataShadow = function () {\n var info = this._dataShadowInfo = this._prepareDataShadowInfo();\n\n this._displayables.dataShadowSegs = [];\n\n if (!info) {\n return;\n }\n\n var size = this._size;\n var oldSize = this._shadowSize || [];\n var seriesModel = info.series;\n var data = seriesModel.getRawData();\n var candlestickDim = seriesModel.getShadowDim && seriesModel.getShadowDim();\n var otherDim = candlestickDim && data.getDimensionInfo(candlestickDim) ? seriesModel.getShadowDim() // @see candlestick\n : info.otherDim;\n\n if (otherDim == null) {\n return;\n }\n\n var polygonPts = this._shadowPolygonPts;\n var polylinePts = this._shadowPolylinePts; // Not re-render if data doesn't change.\n\n if (data !== this._shadowData || otherDim !== this._shadowDim || size[0] !== oldSize[0] || size[1] !== oldSize[1]) {\n var otherDataExtent_1 = data.getDataExtent(otherDim); // Nice extent.\n\n var otherOffset = (otherDataExtent_1[1] - otherDataExtent_1[0]) * 0.3;\n otherDataExtent_1 = [otherDataExtent_1[0] - otherOffset, otherDataExtent_1[1] + otherOffset];\n var otherShadowExtent_1 = [0, size[1]];\n var thisShadowExtent = [0, size[0]];\n var areaPoints_1 = [[size[0], 0], [0, 0]];\n var linePoints_1 = [];\n var step_1 = thisShadowExtent[1] / (data.count() - 1);\n var thisCoord_1 = 0; // Optimize for large data shadow\n\n var stride_1 = Math.round(data.count() / size[0]);\n var lastIsEmpty_1;\n data.each([otherDim], function (value, index) {\n if (stride_1 > 0 && index % stride_1) {\n thisCoord_1 += step_1;\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_1, otherShadowExtent_1, true); // Attempt to draw data shadow precisely when there are empty value.\n\n if (isEmpty && !lastIsEmpty_1 && index) {\n areaPoints_1.push([areaPoints_1[areaPoints_1.length - 1][0], 0]);\n linePoints_1.push([linePoints_1[linePoints_1.length - 1][0], 0]);\n } else if (!isEmpty && lastIsEmpty_1) {\n areaPoints_1.push([thisCoord_1, 0]);\n linePoints_1.push([thisCoord_1, 0]);\n }\n\n areaPoints_1.push([thisCoord_1, otherCoord]);\n linePoints_1.push([thisCoord_1, otherCoord]);\n thisCoord_1 += step_1;\n lastIsEmpty_1 = isEmpty;\n });\n polygonPts = this._shadowPolygonPts = areaPoints_1;\n polylinePts = this._shadowPolylinePts = linePoints_1;\n }\n\n this._shadowData = data;\n this._shadowDim = otherDim;\n this._shadowSize = [size[0], size[1]];\n var dataZoomModel = this.dataZoomModel;\n\n function createDataShadowGroup(isSelectedArea) {\n var model = dataZoomModel.getModel(isSelectedArea ? 'selectedDataBackground' : 'dataBackground');\n var group = new graphic.Group();\n var polygon = new graphic.Polygon({\n shape: {\n points: polygonPts\n },\n segmentIgnoreThreshold: 1,\n style: model.getModel('areaStyle').getAreaStyle(),\n silent: true,\n z2: -20\n });\n var polyline = new graphic.Polyline({\n shape: {\n points: polylinePts\n },\n segmentIgnoreThreshold: 1,\n style: model.getModel('lineStyle').getLineStyle(),\n silent: true,\n z2: -19\n });\n group.add(polygon);\n group.add(polyline);\n return group;\n } // let dataBackgroundModel = dataZoomModel.getModel('dataBackground');\n\n\n for (var i = 0; i < 3; i++) {\n var group = createDataShadowGroup(i === 1);\n\n this._displayables.sliderGroup.add(group);\n\n this._displayables.dataShadowSegs.push(group);\n }\n };\n\n SliderZoomView.prototype._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 (axisDim, axisIndex) {\n var seriesModels = dataZoomModel.getAxisProxy(axisDim, axisIndex).getTargetSeriesModels();\n each(seriesModels, function (seriesModel) {\n if (result) {\n return;\n }\n\n if (showDataShadow !== true && indexOf(SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get('type')) < 0) {\n return;\n }\n\n var thisAxis = ecModel.getComponent(getAxisMainType(axisDim), axisIndex).axis;\n var otherDim = getOtherDim(axisDim);\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: axisDim,\n otherDim: otherDim,\n otherAxisInverse: otherAxisInverse\n };\n }, this);\n }, this);\n return result;\n };\n\n SliderZoomView.prototype._renderHandle = function () {\n var thisGroup = this.group;\n var displayables = this._displayables;\n var handles = displayables.handles = [null, null];\n var handleLabels = displayables.handleLabels = [null, null];\n var sliderGroup = this._displayables.sliderGroup;\n var size = this._size;\n var dataZoomModel = this.dataZoomModel;\n var api = this.api;\n var borderRadius = dataZoomModel.get('borderRadius') || 0;\n var brushSelect = dataZoomModel.get('brushSelect');\n var filler = displayables.filler = new Rect({\n silent: brushSelect,\n style: {\n fill: dataZoomModel.get('fillerColor')\n },\n textConfig: {\n position: 'inside'\n }\n });\n sliderGroup.add(filler); // Frame border.\n\n sliderGroup.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 r: borderRadius\n },\n style: {\n // deprecated option\n stroke: dataZoomModel.get('dataBackgroundColor') || dataZoomModel.get('borderColor'),\n lineWidth: DEFAULT_FRAME_BORDER_WIDTH,\n fill: 'rgba(0,0,0,0)'\n }\n })); // Left and right handle to resize\n\n each([0, 1], function (handleIndex) {\n var iconStr = dataZoomModel.get('handleIcon');\n\n if (!symbolBuildProxies[iconStr] && iconStr.indexOf('path://') < 0 && iconStr.indexOf('image://') < 0) {\n // Compatitable with the old icon parsers. Which can use a path string without path://\n iconStr = 'path://' + iconStr;\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog('handleIcon now needs \\'path://\\' prefix when using a path string');\n }\n }\n\n var path = createSymbol(iconStr, -1, 0, 2, 2, null, true);\n path.attr({\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 z2: 5\n });\n var bRect = path.getBoundingRect();\n var handleSize = dataZoomModel.get('handleSize');\n this._handleHeight = parsePercent(handleSize, this._size[1]);\n this._handleWidth = bRect.width / bRect.height * this._handleHeight;\n path.setStyle(dataZoomModel.getModel('handleStyle').getItemStyle());\n path.style.strokeNoScale = true;\n path.rectHover = true;\n path.ensureState('emphasis').style = dataZoomModel.getModel(['emphasis', 'handleStyle']).getItemStyle();\n enableHoverEmphasis(path);\n var handleColor = dataZoomModel.get('handleColor'); // deprecated option\n // Compatitable with previous version\n\n if (handleColor != null) {\n path.style.fill = handleColor;\n }\n\n sliderGroup.add(handles[handleIndex] = path);\n var textStyleModel = dataZoomModel.getModel('textStyle');\n thisGroup.add(handleLabels[handleIndex] = new graphic.Text({\n silent: true,\n invisible: true,\n style: createTextStyle(textStyleModel, {\n x: 0,\n y: 0,\n text: '',\n verticalAlign: 'middle',\n align: 'center',\n fill: textStyleModel.getTextColor(),\n font: textStyleModel.getFont()\n }),\n z2: 10\n }));\n }, this); // Handle to move. Only visible when brushSelect is set true.\n\n var actualMoveZone = filler;\n\n if (brushSelect) {\n var moveHandleHeight = parsePercent(dataZoomModel.get('moveHandleSize'), size[1]);\n var moveHandle_1 = displayables.moveHandle = new graphic.Rect({\n style: dataZoomModel.getModel('moveHandleStyle').getItemStyle(),\n silent: true,\n shape: {\n r: [0, 0, 2, 2],\n y: size[1] - 0.5,\n height: moveHandleHeight\n }\n });\n var iconSize = moveHandleHeight * 0.8;\n var moveHandleIcon = displayables.moveHandleIcon = createSymbol(dataZoomModel.get('moveHandleIcon'), -iconSize / 2, -iconSize / 2, iconSize, iconSize, '#fff', true);\n moveHandleIcon.silent = true;\n moveHandleIcon.y = size[1] + moveHandleHeight / 2 - 0.5;\n moveHandle_1.ensureState('emphasis').style = dataZoomModel.getModel(['emphasis', 'moveHandleStyle']).getItemStyle();\n var moveZoneExpandSize = Math.min(size[1] / 2, Math.max(moveHandleHeight, 10));\n actualMoveZone = displayables.moveZone = new graphic.Rect({\n invisible: true,\n shape: {\n y: size[1] - moveZoneExpandSize,\n height: moveHandleHeight + moveZoneExpandSize\n }\n });\n actualMoveZone.on('mouseover', function () {\n api.enterEmphasis(moveHandle_1);\n }).on('mouseout', function () {\n api.leaveEmphasis(moveHandle_1);\n });\n sliderGroup.add(moveHandle_1);\n sliderGroup.add(moveHandleIcon);\n sliderGroup.add(actualMoveZone);\n }\n\n actualMoveZone.attr({\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 });\n };\n\n SliderZoomView.prototype._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 SliderZoomView.prototype._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 SliderZoomView.prototype._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 scaleX: handleHeight / 2,\n scaleY: handleHeight / 2,\n // This is a trick, by adding an extra tiny offset to let the default handle's end point align to the drag window.\n // NOTE: It may affect some custom shapes a bit. But we prefer to have better result by default.\n x: handleEnds[handleIndex] + (handleIndex ? -1 : 1),\n y: 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 var viewExtent = {\n x: handleInterval[0],\n width: handleInterval[1] - handleInterval[0]\n }; // Move handle\n\n if (displaybles.moveHandle) {\n displaybles.moveHandle.setShape(viewExtent);\n displaybles.moveZone.setShape(viewExtent); // Force update path on the invisible object\n\n displaybles.moveZone.getBoundingRect();\n displaybles.moveHandleIcon && displaybles.moveHandleIcon.attr('x', viewExtent.x + viewExtent.width / 2);\n } // update clip path of shadow.\n\n\n var dataShadowSegs = displaybles.dataShadowSegs;\n var segIntervals = [0, handleInterval[0], handleInterval[1], size[0]];\n\n for (var i = 0; i < dataShadowSegs.length; i++) {\n var segGroup = dataShadowSegs[i];\n var clipPath = segGroup.getClipPath();\n\n if (!clipPath) {\n clipPath = new graphic.Rect();\n segGroup.setClipPath(clipPath);\n }\n\n clipPath.setShape({\n x: segIntervals[i],\n y: 0,\n width: segIntervals[i + 1] - segIntervals[i],\n height: size[1]\n });\n }\n\n this._updateDataInfo(nonRealtime);\n };\n\n SliderZoomView.prototype._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 verticalAlign: orient === HORIZONTAL ? 'middle' : direction,\n align: orient === HORIZONTAL ? direction : 'center',\n text: labelTexts[handleIndex]\n });\n }\n };\n\n SliderZoomView.prototype._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({\n value: Math.round(value)\n }) // param of toFixed should less then 20.\n : value.toFixed(Math.min(labelPrecision, 20));\n return isFunction(labelFormatter) ? labelFormatter(value, valueStr) : isString(labelFormatter) ? labelFormatter.replace('{value}', valueStr) : valueStr;\n };\n /**\n * @param showOrHide true: show, false: hide\n */\n\n\n SliderZoomView.prototype._showDataInfo = function (showOrHide) {\n // Always show when drgging.\n showOrHide = this._dragging || showOrHide;\n var displayables = this._displayables;\n var handleLabels = displayables.handleLabels;\n handleLabels[0].attr('invisible', !showOrHide);\n handleLabels[1].attr('invisible', !showOrHide); // Highlight move handle\n\n displayables.moveHandle && this.api[showOrHide ? 'enterEmphasis' : 'leaveEmphasis'](displayables.moveHandle, 1);\n };\n\n SliderZoomView.prototype._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.sliderGroup.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(true);\n };\n\n SliderZoomView.prototype._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(false);\n };\n\n SliderZoomView.prototype._onClickPanel = function (e) {\n var size = this._size;\n\n var localPoint = this._displayables.sliderGroup.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(false);\n };\n\n SliderZoomView.prototype._onBrushStart = function (e) {\n var x = e.offsetX;\n var y = e.offsetY;\n this._brushStart = new graphic.Point(x, y);\n this._brushing = true;\n this._brushStartTime = +new Date(); // this._updateBrushRect(x, y);\n };\n\n SliderZoomView.prototype._onBrushEnd = function (e) {\n if (!this._brushing) {\n return;\n }\n\n var brushRect = this._displayables.brushRect;\n this._brushing = false;\n\n if (!brushRect) {\n return;\n }\n\n brushRect.attr('ignore', true);\n var brushShape = brushRect.shape;\n var brushEndTime = +new Date(); // console.log(brushEndTime - this._brushStartTime);\n\n if (brushEndTime - this._brushStartTime < 200 && Math.abs(brushShape.width) < 5) {\n // Will treat it as a click\n return;\n }\n\n var viewExtend = this._getViewExtent();\n\n var percentExtent = [0, 100];\n this._range = asc([linearMap(brushShape.x, viewExtend, percentExtent, true), linearMap(brushShape.x + brushShape.width, viewExtend, percentExtent, true)]);\n this._handleEnds = [brushShape.x, brushShape.x + brushShape.width];\n\n this._updateView();\n\n this._dispatchZoomAction(false);\n };\n\n SliderZoomView.prototype._onBrush = function (e) {\n if (this._brushing) {\n // For mobile device, prevent screen slider on the button.\n eventTool.stop(e.event);\n\n this._updateBrushRect(e.offsetX, e.offsetY);\n }\n };\n\n SliderZoomView.prototype._updateBrushRect = function (mouseX, mouseY) {\n var displayables = this._displayables;\n var dataZoomModel = this.dataZoomModel;\n var brushRect = displayables.brushRect;\n\n if (!brushRect) {\n brushRect = displayables.brushRect = new Rect({\n silent: true,\n style: dataZoomModel.getModel('brushStyle').getItemStyle()\n });\n displayables.sliderGroup.add(brushRect);\n }\n\n brushRect.attr('ignore', false);\n var brushStart = this._brushStart;\n var sliderGroup = this._displayables.sliderGroup;\n var endPoint = sliderGroup.transformCoordToLocal(mouseX, mouseY);\n var startPoint = sliderGroup.transformCoordToLocal(brushStart.x, brushStart.y);\n var size = this._size;\n endPoint[0] = Math.max(Math.min(size[0], endPoint[0]), 0);\n brushRect.setShape({\n x: startPoint[0],\n y: 0,\n width: endPoint[0] - startPoint[0],\n height: size[1]\n });\n };\n /**\n * This action will be throttled.\n */\n\n\n SliderZoomView.prototype._dispatchZoomAction = function (realtime) {\n var range = this._range;\n this.api.dispatchAction({\n type: 'dataZoom',\n from: this.uid,\n dataZoomId: this.dataZoomModel.id,\n animation: realtime ? REALTIME_ANIMATION_CONFIG : null,\n start: range[0],\n end: range[1]\n });\n };\n\n SliderZoomView.prototype._findCoordRect = function () {\n // Find the grid coresponding to the first axis referred by dataZoom.\n var rect;\n var coordSysInfoList = collectReferCoordSysModelInfo(this.dataZoomModel).infoList;\n\n if (!rect && coordSysInfoList.length) {\n var coordSys = coordSysInfoList[0].model.coordinateSystem;\n rect = coordSys.getRect && coordSys.getRect();\n }\n\n if (!rect) {\n var width = this.api.getWidth();\n var height = this.api.getHeight();\n rect = {\n x: width * 0.2,\n y: height * 0.2,\n width: width * 0.6,\n height: height * 0.6\n };\n }\n\n return rect;\n };\n\n SliderZoomView.type = 'dataZoom.slider';\n return SliderZoomView;\n}(DataZoomView);\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\nexport default SliderZoomView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport SliderZoomModel from './SliderZoomModel.js';\nimport SliderZoomView from './SliderZoomView.js';\nimport installCommon from './installCommon.js';\nexport function install(registers) {\n registers.registerComponentModel(SliderZoomModel);\n registers.registerComponentView(SliderZoomView);\n installCommon(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension.js';\nimport { install as installDataZoomInside } from './installDataZoomInside.js';\nimport { install as installDataZoomSlider } from './installDataZoomSlider.js';\nexport function install(registers) {\n use(installDataZoomInside);\n use(installDataZoomSlider); // Do not install './dataZoomSelect',\n // since it only work for toolbox dataZoom.\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @file Visual mapping.\n */\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar visualDefault = {\n /**\n * @public\n */\n get: function (visualType, key, isCategory) {\n var value = zrUtil.clone((defaultOption[visualType] || {})[key]);\n return isCategory ? zrUtil.isArray(value) ? value[value.length - 1] : value : value;\n }\n};\nvar defaultOption = {\n color: {\n active: ['#006edd', '#e0ffff'],\n inactive: ['rgba(0,0,0,0)']\n },\n colorHue: {\n active: [0, 360],\n inactive: [0, 0]\n },\n colorSaturation: {\n active: [0.3, 1],\n inactive: [0, 0]\n },\n colorLightness: {\n active: [0.9, 0.5],\n inactive: [0, 0]\n },\n colorAlpha: {\n active: [0.3, 1],\n inactive: [0, 0]\n },\n opacity: {\n active: [0.3, 1],\n inactive: [0, 0]\n },\n symbol: {\n active: ['circle', 'roundRect', 'diamond'],\n inactive: ['none']\n },\n symbolSize: {\n active: [10, 50],\n inactive: [0, 0]\n }\n};\nexport default visualDefault;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport visualDefault from '../../visual/visualDefault.js';\nimport VisualMapping from '../../visual/VisualMapping.js';\nimport * as visualSolution from '../../visual/visualSolution.js';\nimport * as modelUtil from '../../util/model.js';\nimport * as numberUtil from '../../util/number.js';\nimport ComponentModel from '../../model/Component.js';\nvar mapVisual = VisualMapping.mapVisual;\nvar eachVisual = VisualMapping.eachVisual;\nvar isArray = zrUtil.isArray;\nvar each = zrUtil.each;\nvar asc = numberUtil.asc;\nvar linearMap = numberUtil.linearMap;\n\nvar VisualMapModel =\n/** @class */\nfunction (_super) {\n __extends(VisualMapModel, _super);\n\n function VisualMapModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = VisualMapModel.type;\n _this.stateList = ['inRange', 'outOfRange'];\n _this.replacableOptionKeys = ['inRange', 'outOfRange', 'target', 'controller', 'color'];\n _this.layoutMode = {\n type: 'box',\n ignoreSize: true\n };\n /**\n * [lowerBound, upperBound]\n */\n\n _this.dataBound = [-Infinity, Infinity];\n _this.targetVisuals = {};\n _this.controllerVisuals = {};\n return _this;\n }\n\n VisualMapModel.prototype.init = function (option, parentModel, ecModel) {\n this.mergeDefaultAndTheme(option, ecModel);\n };\n /**\n * @protected\n */\n\n\n VisualMapModel.prototype.optionUpdated = function (newOption, isInit) {\n var thisOption = this.option;\n !isInit && visualSolution.replaceVisualOption(thisOption, newOption, this.replacableOptionKeys);\n this.textStyleModel = this.getModel('textStyle');\n this.resetItemSize();\n this.completeVisualOption();\n };\n /**\n * @protected\n */\n\n\n VisualMapModel.prototype.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 * @public\n */\n\n\n VisualMapModel.prototype.getItemSymbol = function () {\n return null;\n };\n /**\n * @protected\n * @return {Array.} An array of series indices.\n */\n\n\n VisualMapModel.prototype.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 * @public\n */\n\n\n VisualMapModel.prototype.eachTargetSeries = function (callback, context) {\n zrUtil.each(this.getTargetSeriesIndices(), function (seriesIndex) {\n var seriesModel = this.ecModel.getSeriesByIndex(seriesIndex);\n\n if (seriesModel) {\n callback.call(context, seriesModel);\n }\n }, this);\n };\n /**\n * @pubilc\n */\n\n\n VisualMapModel.prototype.isTargetSeries = function (seriesModel) {\n var is = false;\n this.eachTargetSeries(function (model) {\n model === seriesModel && (is = true);\n });\n return is;\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 value Real value, or this.dataBound[0 or 1].\n * @param isCategory Only available when value is number.\n * @param edgeSymbols Open-close symbol when value is interval.\n * @protected\n */\n\n\n VisualMapModel.prototype.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 edgeSymbols = edgeSymbols || ['<', '>'];\n\n if (zrUtil.isArray(value)) {\n value = value.slice();\n isMinMax = true;\n }\n\n var textValue = isCategory ? value // Value is string when isCategory\n : 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 * @protected\n */\n\n\n VisualMapModel.prototype.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 * PENDING:\n * delete this method if no outer usage.\n *\n * Return Concrete dimention. If return null/undefined, no dimension used.\n */\n // getDataDimension(data: SeriesData) {\n // const optDim = this.option.dimension;\n // if (optDim != null) {\n // return data.getDimension(optDim);\n // }\n // const dimNames = data.dimensions;\n // for (let i = dimNames.length - 1; i >= 0; i--) {\n // const dimName = dimNames[i];\n // const dimInfo = data.getDimensionInfo(dimName);\n // if (!dimInfo.isCalculationCoord) {\n // return dimName;\n // }\n // }\n // }\n\n\n VisualMapModel.prototype.getDataDimensionIndex = function (data) {\n var optDim = this.option.dimension;\n\n if (optDim != null) {\n return data.getDimensionIndex(optDim);\n }\n\n var dimNames = data.dimensions;\n\n for (var i = dimNames.length - 1; i >= 0; i--) {\n var dimName = dimNames[i];\n var dimInfo = data.getDimensionInfo(dimName);\n\n if (!dimInfo.isCalculationCoord) {\n return dimInfo.storeDimIndex;\n }\n }\n };\n\n VisualMapModel.prototype.getExtent = function () {\n return this._dataExtent.slice();\n };\n\n VisualMapModel.prototype.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 default color, set inRange: {color: null}.\n\n\n base.inRange = base.inRange || {\n color: ecModel.get('gradientColor')\n };\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 var itemSymbol = this.getItemSymbol();\n var defaultSymbol = itemSymbol || 'roundRect';\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 ? defaultSymbol : [defaultSymbol]);\n }\n\n if (visuals.symbolSize == null) {\n visuals.symbolSize = symbolSizeExists && zrUtil.clone(symbolSizeExists) || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]);\n } // Filter none\n\n\n visuals.symbol = mapVisual(visuals.symbol, function (symbol) {\n return symbol === 'none' ? defaultSymbol : symbol;\n }); // Normalize symbolSize\n\n var symbolSize = visuals.symbolSize;\n\n if (symbolSize != null) {\n var max_1 = -Infinity; // symbolSize can be object when categories defined.\n\n eachVisual(symbolSize, function (value) {\n value > max_1 && (max_1 = value);\n });\n visuals.symbolSize = mapVisual(symbolSize, function (value) {\n return linearMap(value, [0, max_1], [0, itemSize[0]], true);\n });\n }\n }, this);\n }\n };\n\n VisualMapModel.prototype.resetItemSize = function () {\n this.itemSize = [parseFloat(this.get('itemWidth')), parseFloat(this.get('itemHeight'))];\n };\n\n VisualMapModel.prototype.isCategory = function () {\n return !!this.option.categories;\n };\n /**\n * @public\n * @abstract\n */\n\n\n VisualMapModel.prototype.setSelected = function (selected) {};\n\n VisualMapModel.prototype.getSelected = function () {\n return null;\n };\n /**\n * @public\n * @abstract\n */\n\n\n VisualMapModel.prototype.getValueState = function (value) {\n return null;\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 getColorVisual\n * params: value, valueState\n * return: color\n * @return {Object} visualMeta\n * should includes {stops, outerColors}\n * outerColor means [colorBeyondMinValue, colorBeyondMaxValue]\n */\n\n\n VisualMapModel.prototype.getVisualMeta = function (getColorVisual) {\n return null;\n };\n\n VisualMapModel.type = 'visualMap';\n VisualMapModel.dependencies = ['series'];\n VisualMapModel.defaultOption = {\n show: true,\n // zlevel: 0,\n z: 4,\n seriesIndex: 'all',\n min: 0,\n max: 200,\n left: 0,\n right: null,\n top: null,\n bottom: 0,\n itemWidth: null,\n itemHeight: null,\n inverse: false,\n orient: 'vertical',\n backgroundColor: 'rgba(0,0,0,0)',\n borderColor: '#ccc',\n contentColor: '#5793f3',\n inactiveColor: '#aaa',\n borderWidth: 0,\n padding: 5,\n // 接受数组分别设定上右下左边距,同css\n textGap: 10,\n precision: 0,\n textStyle: {\n color: '#333' // 值域文字颜色\n\n }\n };\n return VisualMapModel;\n}(ComponentModel);\n\nexport default VisualMapModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport VisualMapModel from './VisualMapModel.js';\nimport * as numberUtil from '../../util/number.js';\nimport { inheritDefaultOption } from '../../util/component.js'; // Constant\n\nvar DEFAULT_BAR_BOUND = [20, 140];\n\nvar ContinuousModel =\n/** @class */\nfunction (_super) {\n __extends(ContinuousModel, _super);\n\n function ContinuousModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ContinuousModel.type;\n return _this;\n }\n /**\n * @override\n */\n\n\n ContinuousModel.prototype.optionUpdated = function (newOption, isInit) {\n _super.prototype.optionUpdated.apply(this, arguments);\n\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 * @protected\n * @override\n */\n\n\n ContinuousModel.prototype.resetItemSize = function () {\n _super.prototype.resetItemSize.apply(this, arguments);\n\n var itemSize = this.itemSize;\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 * @private\n */\n\n\n ContinuousModel.prototype._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 * @protected\n * @override\n */\n\n\n ContinuousModel.prototype.completeVisualOption = function () {\n _super.prototype.completeVisualOption.apply(this, arguments);\n\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] = symbolSize[1] / 3; // For good looking.\n }\n }, this);\n };\n /**\n * @override\n */\n\n\n ContinuousModel.prototype.setSelected = function (selected) {\n this.option.range = selected.slice();\n\n this._resetRange();\n };\n /**\n * @public\n */\n\n\n ContinuousModel.prototype.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 * @override\n */\n\n\n ContinuousModel.prototype.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 ContinuousModel.prototype.findTargetDataIndices = function (range) {\n var result = [];\n this.eachTargetSeries(function (seriesModel) {\n var dataIndices = [];\n var data = seriesModel.getData();\n data.each(this.getDataDimensionIndex(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 * @implement\n */\n\n\n ContinuousModel.prototype.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 ContinuousModel.type = 'visualMap.continuous';\n ContinuousModel.defaultOption = inheritDefaultOption(VisualMapModel.defaultOption, {\n align: 'auto',\n calculable: false,\n hoverLink: true,\n realtime: true,\n handleIcon: 'path://M-11.39,9.77h0a3.5,3.5,0,0,1-3.5,3.5h-22a3.5,3.5,0,0,1-3.5-3.5h0a3.5,3.5,0,0,1,3.5-3.5h22A3.5,3.5,0,0,1-11.39,9.77Z',\n handleSize: '120%',\n handleStyle: {\n borderColor: '#fff',\n borderWidth: 1\n },\n indicatorIcon: 'circle',\n indicatorSize: '50%',\n indicatorStyle: {\n borderColor: '#fff',\n borderWidth: 2,\n shadowBlur: 2,\n shadowOffsetX: 1,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0,0,0,0.2)'\n } // emphasis: {\n // handleStyle: {\n // shadowBlur: 3,\n // shadowOffsetX: 1,\n // shadowOffsetY: 1,\n // shadowColor: 'rgba(0,0,0,0.2)'\n // }\n // }\n\n });\n return ContinuousModel;\n}(VisualMapModel);\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\nexport default ContinuousModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { Rect } from '../../util/graphic.js';\nimport * as formatUtil from '../../util/format.js';\nimport * as layout from '../../util/layout.js';\nimport VisualMapping from '../../visual/VisualMapping.js';\nimport ComponentView from '../../view/Component.js';\n\nvar VisualMapView =\n/** @class */\nfunction (_super) {\n __extends(VisualMapView, _super);\n\n function VisualMapView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = VisualMapView.type;\n _this.autoPositionValues = {\n left: 1,\n right: 1,\n top: 1,\n bottom: 1\n };\n return _this;\n }\n\n VisualMapView.prototype.init = function (ecModel, api) {\n this.ecModel = ecModel;\n this.api = api;\n };\n /**\n * @protected\n */\n\n\n VisualMapView.prototype.render = function (visualMapModel, ecModel, api, payload // TODO: TYPE\n ) {\n this.visualMapModel = visualMapModel;\n\n if (visualMapModel.get('show') === false) {\n this.group.removeAll();\n return;\n }\n\n this.doRender(visualMapModel, ecModel, api, payload);\n };\n /**\n * @protected\n */\n\n\n VisualMapView.prototype.renderBackground = function (group) {\n var visualMapModel = this.visualMapModel;\n var padding = formatUtil.normalizeCssArray(visualMapModel.get('padding') || 0);\n var rect = group.getBoundingRect();\n group.add(new Rect({\n z2: -1,\n silent: true,\n shape: {\n x: rect.x - padding[3],\n y: rect.y - padding[0],\n width: rect.width + padding[3] + padding[1],\n height: rect.height + padding[0] + padding[2]\n },\n style: {\n fill: visualMapModel.get('backgroundColor'),\n stroke: visualMapModel.get('borderColor'),\n lineWidth: visualMapModel.get('borderWidth')\n }\n }));\n };\n /**\n * @protected\n * @param targetValue can be Infinity or -Infinity\n * @param visualCluster Only can be 'color' 'opacity' 'symbol' 'symbolSize'\n * @param opts\n * @param opts.forceState Specify state, instead of using getValueState method.\n * @param opts.convertOpacityToAlpha For color gradient in controller widget.\n * @return {*} Visual value.\n */\n\n\n VisualMapView.prototype.getControllerVisual = function (targetValue, visualCluster, opts) {\n opts = opts || {};\n var forceState = opts.forceState;\n var visualMapModel = this.visualMapModel;\n var visualObj = {}; // Default values.\n\n if (visualCluster === 'color') {\n var defaultColor = visualMapModel.get('contentColor');\n visualObj.color = defaultColor;\n }\n\n function getter(key) {\n return visualObj[key];\n }\n\n function setter(key, value) {\n visualObj[key] = value;\n }\n\n var mappings = visualMapModel.controllerVisuals[forceState || visualMapModel.getValueState(targetValue)];\n var visualTypes = VisualMapping.prepareVisualTypes(mappings);\n zrUtil.each(visualTypes, function (type) {\n var visualMapping = mappings[type];\n\n if (opts.convertOpacityToAlpha && type === 'opacity') {\n type = 'colorAlpha';\n visualMapping = mappings.__alphaForOpacity;\n }\n\n if (VisualMapping.dependsOn(type, visualCluster)) {\n visualMapping && visualMapping.applyVisual(targetValue, getter, setter);\n }\n });\n return visualObj[visualCluster];\n };\n\n VisualMapView.prototype.positionGroup = function (group) {\n var model = this.visualMapModel;\n var api = this.api;\n layout.positionElement(group, model.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n };\n\n VisualMapView.prototype.doRender = function (visualMapModel, ecModel, api, payload) {};\n\n VisualMapView.type = 'visualMap';\n return VisualMapView;\n}(ComponentView);\n\nexport default VisualMapView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { getLayoutRect } from '../../util/layout.js';\nvar paramsSet = [['left', 'right', 'width'], ['top', 'bottom', 'height']];\n/**\n * @param visualMapModel\n * @param api\n * @param itemSize always [short, long]\n * @return {string} 'left' or 'right' or 'top' or 'bottom'\n */\n\nexport function getItemAlign(visualMapModel, api, itemSize) {\n var modelOption = visualMapModel.option;\n var itemAlign = modelOption.align;\n\n if (itemAlign != null && itemAlign !== 'auto') {\n return itemAlign;\n } // 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 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// TODO: TYPE more specified payload types.\n\nexport function makeHighDownBatch(batch, visualMapModel) {\n zrUtil.each(batch || [], function (batchItem) {\n if (batchItem.dataIndex != null) {\n batchItem.dataIndexInside = batchItem.dataIndex;\n batchItem.dataIndex = null;\n }\n\n batchItem.highlightKey = 'visualMap' + (visualMapModel ? visualMapModel.componentIndex : '');\n });\n return batch;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport LinearGradient from 'zrender/lib/graphic/LinearGradient.js';\nimport * as eventTool from 'zrender/lib/core/event.js';\nimport VisualMapView from './VisualMapView.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as numberUtil from '../../util/number.js';\nimport sliderMove from '../helper/sliderMove.js';\nimport * as helper from './helper.js';\nimport * as modelUtil from '../../util/model.js';\nimport { parsePercent } from 'zrender/lib/contain/text.js';\nimport { setAsHighDownDispatcher } from '../../util/states.js';\nimport { createSymbol } from '../../util/symbol.js';\nimport ZRImage from 'zrender/lib/graphic/Image.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nimport { findEventDispatcher } from '../../util/event.js';\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 =\n/** @class */\nfunction (_super) {\n __extends(ContinuousView, _super);\n\n function ContinuousView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ContinuousView.type;\n _this._shapes = {};\n _this._dataInterval = [];\n _this._handleEnds = [];\n _this._hoverLinkDataIndices = [];\n return _this;\n }\n\n ContinuousView.prototype.doRender = function (visualMapModel, ecModel, api, payload) {\n this._api = api;\n\n if (!payload || payload.type !== 'selectDataRange' || payload.from !== this.uid) {\n this._buildView();\n }\n };\n\n ContinuousView.prototype._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 ContinuousView.prototype._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.mainGroup;\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: createTextStyle(textStyleModel, {\n x: position[0],\n y: position[1],\n verticalAlign: orient === 'horizontal' ? 'middle' : align,\n align: orient === 'horizontal' ? align : 'center',\n text: text\n })\n }));\n };\n\n ContinuousView.prototype._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 mainGroup = shapes.mainGroup = this._createBarGroup(itemAlign);\n\n var gradientBarGroup = new graphic.Group();\n mainGroup.add(gradientBarGroup); // Bar\n\n gradientBarGroup.add(shapes.outOfRange = createPolygon());\n gradientBarGroup.add(shapes.inRange = createPolygon(null, useHandle ? getCursor(this._orient) : null, zrUtil.bind(this._dragHandle, this, 'all', false), zrUtil.bind(this._dragHandle, this, 'all', true))); // A border radius clip.\n\n gradientBarGroup.setClipPath(new graphic.Rect({\n shape: {\n x: 0,\n y: 0,\n width: itemSize[0],\n height: itemSize[1],\n r: 3\n }\n }));\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(visualMapModel, mainGroup, 0, itemSize, textSize, orient);\n\n this._createHandle(visualMapModel, mainGroup, 1, itemSize, textSize, orient);\n }\n\n this._createIndicator(visualMapModel, mainGroup, itemSize, textSize, orient);\n\n targetGroup.add(mainGroup);\n };\n\n ContinuousView.prototype._createHandle = function (visualMapModel, mainGroup, 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 handleSize = parsePercent(visualMapModel.get('handleSize'), itemSize[0]);\n var handleThumb = createSymbol(visualMapModel.get('handleIcon'), -handleSize / 2, -handleSize / 2, handleSize, handleSize, null, true);\n var cursor = getCursor(this._orient);\n handleThumb.attr({\n cursor: cursor,\n draggable: true,\n drift: onDrift,\n ondragend: onDragEnd,\n onmousemove: function (e) {\n eventTool.stop(e.event);\n }\n });\n handleThumb.x = itemSize[0] / 2;\n handleThumb.useStyle(visualMapModel.getModel('handleStyle').getItemStyle());\n handleThumb.setStyle({\n strokeNoScale: true,\n strokeFirst: true\n });\n handleThumb.style.lineWidth *= 2;\n handleThumb.ensureState('emphasis').style = visualMapModel.getModel(['emphasis', 'handleStyle']).getItemStyle();\n setAsHighDownDispatcher(handleThumb, true);\n mainGroup.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 cursor: cursor,\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: createTextStyle(textStyleModel, {\n x: 0,\n y: 0,\n text: ''\n })\n });\n handleLabel.ensureState('blur').style = {\n opacity: 0.1\n };\n handleLabel.stateTransition = {\n duration: 200\n };\n this.group.add(handleLabel);\n var handleLabelPoint = [handleSize, 0];\n var shapes = this._shapes;\n shapes.handleThumbs[handleIndex] = handleThumb;\n shapes.handleLabelPoints[handleIndex] = handleLabelPoint;\n shapes.handleLabels[handleIndex] = handleLabel;\n };\n\n ContinuousView.prototype._createIndicator = function (visualMapModel, mainGroup, itemSize, textSize, orient) {\n var scale = parsePercent(visualMapModel.get('indicatorSize'), itemSize[0]);\n var indicator = createSymbol(visualMapModel.get('indicatorIcon'), -scale / 2, -scale / 2, scale, scale, null, true);\n indicator.attr({\n cursor: 'move',\n invisible: true,\n silent: true,\n x: itemSize[0] / 2\n });\n var indicatorStyle = visualMapModel.getModel('indicatorStyle').getItemStyle();\n\n if (indicator instanceof ZRImage) {\n var pathStyle = indicator.style;\n indicator.useStyle(zrUtil.extend({\n // TODO other properties like x, y ?\n image: pathStyle.image,\n x: pathStyle.x,\n y: pathStyle.y,\n width: pathStyle.width,\n height: pathStyle.height\n }, indicatorStyle));\n } else {\n indicator.useStyle(indicatorStyle);\n }\n\n mainGroup.add(indicator);\n var textStyleModel = this.visualMapModel.textStyleModel;\n var indicatorLabel = new graphic.Text({\n silent: true,\n invisible: true,\n style: createTextStyle(textStyleModel, {\n x: 0,\n y: 0,\n text: ''\n })\n });\n this.group.add(indicatorLabel);\n var indicatorLabelPoint = [(orient === 'horizontal' ? textSize / 2 : HOVER_LINK_OUT) + itemSize[0] / 2, 0];\n var shapes = this._shapes;\n shapes.indicator = indicator;\n shapes.indicatorLabel = indicatorLabel;\n shapes.indicatorLabelPoint = indicatorLabelPoint;\n this._firstShowIndicator = true;\n };\n\n ContinuousView.prototype._dragHandle = function (handleIndex, isEnd, // dx is event from ondragend if isEnd is true. It's not used\n 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.mainGroup, true);\n\n this._updateInterval(handleIndex, vertex[1]);\n\n this._hideIndicator(); // 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 ContinuousView.prototype._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 * @private\n * @param {(number|string)} handleIndex 0 or 1 or 'all'\n * @param {number} dx\n * @param {number} dy\n */\n\n\n ContinuousView.prototype._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 ContinuousView.prototype._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 // opacity: visualInRange.opacity\n\n }).setShape('points', visualInRange.barPoints);\n shapes.outOfRange.setStyle({\n fill: visualOutOfRange.barColor // opacity: visualOutOfRange.opacity\n\n }).setShape('points', visualOutOfRange.barPoints);\n\n this._updateHandle(inRangeHandleEnds, visualInRange);\n };\n\n ContinuousView.prototype._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 ContinuousView.prototype._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 ContinuousView.prototype._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 ContinuousView.prototype._createBarGroup = function (itemAlign) {\n var orient = this._orient;\n var inverse = this.visualMapModel.get('inverse');\n return new graphic.Group(orient === 'horizontal' && !inverse ? {\n scaleX: itemAlign === 'bottom' ? 1 : -1,\n rotation: Math.PI / 2\n } : orient === 'horizontal' && inverse ? {\n scaleX: itemAlign === 'bottom' ? -1 : 1,\n rotation: -Math.PI / 2\n } : orient === 'vertical' && !inverse ? {\n scaleX: itemAlign === 'left' ? 1 : -1,\n scaleY: -1\n } : {\n scaleX: itemAlign === 'left' ? 1 : -1\n });\n };\n\n ContinuousView.prototype._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 var itemSize = visualMapModel.itemSize;\n var dataExtent = visualMapModel.getExtent();\n each([0, 1], function (handleIndex) {\n var handleThumb = handleThumbs[handleIndex];\n handleThumb.setStyle('fill', visualInRange.handlesColor[handleIndex]);\n handleThumb.y = handleEnds[handleIndex];\n var val = linearMap(handleEnds[handleIndex], [0, itemSize[1]], dataExtent, true);\n var symbolSize = this.getControllerVisual(val, 'symbolSize');\n handleThumb.scaleX = handleThumb.scaleY = symbolSize / itemSize[0];\n handleThumb.x = itemSize[0] - symbolSize / 2; // 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 verticalAlign: 'middle',\n align: this._orient === 'vertical' ? this._applyTransform('left', shapes.mainGroup) : 'center'\n });\n }, this);\n };\n\n ContinuousView.prototype._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 shapes = this._shapes;\n var indicator = shapes.indicator;\n\n if (!indicator) {\n return;\n }\n\n indicator.attr('invisible', false);\n var opts = {\n convertOpacityToAlpha: true\n };\n var color = this.getControllerVisual(cursorValue, 'color', opts);\n var symbolSize = this.getControllerVisual(cursorValue, 'symbolSize');\n var y = linearMap(cursorValue, dataExtent, sizeExtent, true);\n var x = itemSize[0] - symbolSize / 2;\n var oldIndicatorPos = {\n x: indicator.x,\n y: indicator.y\n }; // Update handle label position.\n\n indicator.y = y;\n indicator.x = x;\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.mainGroup);\n\n var orient = this._orient;\n var isHorizontal = orient === 'horizontal';\n indicatorLabel.setStyle({\n text: (rangeSymbol ? rangeSymbol : '') + visualMapModel.formatValueText(textValue),\n verticalAlign: isHorizontal ? align : 'middle',\n align: isHorizontal ? 'center' : align\n });\n var indicatorNewProps = {\n x: x,\n y: y,\n style: {\n fill: color\n }\n };\n var labelNewProps = {\n style: {\n x: textPoint[0],\n y: textPoint[1]\n }\n };\n\n if (visualMapModel.ecModel.isAnimationEnabled() && !this._firstShowIndicator) {\n var animationCfg = {\n duration: 100,\n easing: 'cubicInOut',\n additive: true\n };\n indicator.x = oldIndicatorPos.x;\n indicator.y = oldIndicatorPos.y;\n indicator.animateTo(indicatorNewProps, animationCfg);\n indicatorLabel.animateTo(labelNewProps, animationCfg);\n } else {\n indicator.attr(indicatorNewProps);\n indicatorLabel.attr(labelNewProps);\n }\n\n this._firstShowIndicator = false;\n var handleLabels = this._shapes.handleLabels;\n\n if (handleLabels) {\n for (var i = 0; i < handleLabels.length; i++) {\n // Fade out handle labels.\n // NOTE: Must use api enter/leave on emphasis/blur/select state. Or the global states manager will change it.\n this._api.enterBlur(handleLabels[i]);\n }\n }\n };\n\n ContinuousView.prototype._enableHoverLinkToSeries = function () {\n var self = this;\n\n this._shapes.mainGroup.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.mainGroup, 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 ContinuousView.prototype._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 ContinuousView.prototype._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 ContinuousView.prototype._hoverLinkFromSeriesMouseOver = function (e) {\n var ecData;\n findEventDispatcher(e.target, function (target) {\n var currECData = getECData(target);\n\n if (currECData.dataIndex != null) {\n ecData = currECData;\n return true;\n }\n }, true);\n\n if (!ecData) {\n return;\n }\n\n var dataModel = this.ecModel.getSeriesByIndex(ecData.seriesIndex);\n var visualMapModel = this.visualMapModel;\n\n if (!visualMapModel.isTargetSeries(dataModel)) {\n return;\n }\n\n var data = dataModel.getData(ecData.dataType);\n var value = data.getStore().get(visualMapModel.getDataDimensionIndex(data), ecData.dataIndex);\n\n if (!isNaN(value)) {\n this._showIndicator(value, value);\n }\n };\n\n ContinuousView.prototype._hideIndicator = function () {\n var shapes = this._shapes;\n shapes.indicator && shapes.indicator.attr('invisible', true);\n shapes.indicatorLabel && shapes.indicatorLabel.attr('invisible', true);\n var handleLabels = this._shapes.handleLabels;\n\n if (handleLabels) {\n for (var i = 0; i < handleLabels.length; i++) {\n // Fade out handle labels.\n // NOTE: Must use api enter/leave on emphasis/blur/select state. Or the global states manager will change it.\n this._api.leaveBlur(handleLabels[i]);\n }\n }\n };\n\n ContinuousView.prototype._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 ContinuousView.prototype._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 ContinuousView.prototype._applyTransform = function (vertex, element, inverse, global) {\n var transform = graphic.getTransform(element, global ? null : this.group);\n return zrUtil.isArray(vertex) ? graphic.applyTransform(vertex, transform, inverse) : graphic.transformDirection(vertex, transform, inverse);\n }; // TODO: TYPE more specified payload types.\n\n\n ContinuousView.prototype._dispatchHighDown = function (type, batch) {\n batch && batch.length && this.api.dispatchAction({\n type: type,\n batch: batch\n });\n };\n /**\n * @override\n */\n\n\n ContinuousView.prototype.dispose = function () {\n this._clearHoverLinkFromSeries();\n\n this._clearHoverLinkToSeries();\n };\n /**\n * @override\n */\n\n\n ContinuousView.prototype.remove = function () {\n this._clearHoverLinkFromSeries();\n\n this._clearHoverLinkToSeries();\n };\n\n ContinuousView.type = 'visualMap.continuous';\n return ContinuousView;\n}(VisualMapView);\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 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\nexport default ContinuousView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport var visualMapActionInfo = {\n type: 'selectDataRange',\n event: 'dataRangeSelected',\n // FIXME use updateView appears wrong\n update: 'update'\n};\nexport var visualMapActionHander = 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\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as visualSolution from '../../visual/visualSolution.js';\nimport VisualMapping from '../../visual/VisualMapping.js';\nimport { getVisualFromData } from '../../visual/helper.js';\nexport var visualMapEncodingHandlers = [{\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.getDataDimensionIndex(seriesModel.getData())));\n });\n return resetDefines;\n }\n}, // Only support color.\n{\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 dimIdx = visualMapModel.getDataDimensionIndex(data);\n\n if (dimIdx >= 0) {\n // visualMeta.dimension should be dimension index, but not concrete dimension.\n visualMeta.dimension = dimIdx;\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: getVisualFromData(seriesModel.getData(), '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/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// @ts-nocheck\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar each = zrUtil.each;\nexport default function visualMapPreprocessor(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/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { visualMapActionInfo, visualMapActionHander } from './visualMapAction.js';\nimport { visualMapEncodingHandlers } from './visualEncoding.js';\nimport { each } from 'zrender/lib/core/util.js';\nimport preprocessor from './preprocessor.js';\nvar installed = false;\nexport default function installCommon(registers) {\n if (installed) {\n return;\n }\n\n installed = true;\n registers.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 });\n registers.registerAction(visualMapActionInfo, visualMapActionHander);\n each(visualMapEncodingHandlers, function (handler) {\n registers.registerVisual(registers.PRIORITY.VISUAL.COMPONENT, handler);\n });\n registers.registerPreprocessor(preprocessor);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport ContinuousModel from './ContinuousModel.js';\nimport ContinuousView from './ContinuousView.js';\nimport installCommon from './installCommon.js';\nexport function install(registers) {\n registers.registerComponentModel(ContinuousModel);\n registers.registerComponentView(ContinuousView);\n installCommon(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport VisualMapModel from './VisualMapModel.js';\nimport VisualMapping from '../../visual/VisualMapping.js';\nimport visualDefault from '../../visual/visualDefault.js';\nimport { reformIntervals } from '../../util/number.js';\nimport { inheritDefaultOption } from '../../util/component.js';\n\nvar PiecewiseModel =\n/** @class */\nfunction (_super) {\n __extends(PiecewiseModel, _super);\n\n function PiecewiseModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = PiecewiseModel.type;\n /**\n * The order is always [low, ..., high].\n * [{text: string, interval: Array.}, ...]\n */\n\n _this._pieceList = [];\n return _this;\n }\n\n PiecewiseModel.prototype.optionUpdated = function (newOption, isInit) {\n _super.prototype.optionUpdated.apply(this, arguments);\n\n this.resetExtent();\n\n var mode = this._mode = this._determineMode();\n\n this._pieceList = [];\n\n resetMethods[this._mode].call(this, this._pieceList);\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 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 * @protected\n * @override\n */\n\n\n PiecewiseModel.prototype.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 = false;\n zrUtil.each(this.stateList, function (state) {\n exists = 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] && obj[state].hasOwnProperty(visualType);\n }\n\n _super.prototype.completeVisualOption.apply(this, arguments);\n };\n\n PiecewiseModel.prototype._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_1 = false;\n zrUtil.each(pieceList, function (piece, index) {\n var key = this.getSelectedMapKey(piece);\n\n if (selected[key]) {\n hasSel_1 ? selected[key] = false : hasSel_1 = true;\n }\n }, this);\n } // thisOption.selectedMode === 'multiple', default: all selected.\n\n };\n /**\n * @public\n */\n\n\n PiecewiseModel.prototype.getItemSymbol = function () {\n return this.get('itemSymbol');\n };\n /**\n * @public\n */\n\n\n PiecewiseModel.prototype.getSelectedMapKey = function (piece) {\n return this._mode === 'categories' ? piece.value + '' : piece.index + '';\n };\n /**\n * @public\n */\n\n\n PiecewiseModel.prototype.getPieceList = function () {\n return this._pieceList;\n };\n /**\n * @return {string}\n */\n\n\n PiecewiseModel.prototype._determineMode = function () {\n var option = this.option;\n return option.pieces && option.pieces.length > 0 ? 'pieces' : this.option.categories ? 'categories' : 'splitNumber';\n };\n /**\n * @override\n */\n\n\n PiecewiseModel.prototype.setSelected = function (selected) {\n this.option.selected = zrUtil.clone(selected);\n };\n /**\n * @override\n */\n\n\n PiecewiseModel.prototype.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 * @public\n * @param pieceIndex piece index in visualMapModel.getPieceList()\n */\n\n\n PiecewiseModel.prototype.findTargetDataIndices = function (pieceIndex) {\n var result = [];\n var pieceList = this._pieceList;\n this.eachTargetSeries(function (seriesModel) {\n var dataIndices = [];\n var data = seriesModel.getData();\n data.each(this.getDataDimensionIndex(data), function (value, dataIndex) {\n // Should always base on model pieceList, because it is order sensitive.\n var pIdx = VisualMapping.findPieceIndex(value, 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 * @private\n * @param piece piece.value or piece.interval is required.\n * @return Can be Infinity or -Infinity\n */\n\n\n PiecewiseModel.prototype.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\n PiecewiseModel.prototype.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 }); // Not category\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 PiecewiseModel.type = 'visualMap.piecewise';\n PiecewiseModel.defaultOption = inheritDefaultOption(VisualMapModel.defaultOption, {\n selected: null,\n minOpen: false,\n maxOpen: false,\n align: 'auto',\n itemWidth: 20,\n itemHeight: 14,\n itemSymbol: 'roundRect',\n pieces: null,\n categories: null,\n splitNumber: 5,\n selectedMode: 'multiple',\n itemGap: 10,\n hoverLink: true // Enable hover highlight.\n\n });\n return PiecewiseModel;\n}(VisualMapModel);\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 (outPieceList) {\n var thisOption = this.option;\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 outPieceList.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 outPieceList.push({\n interval: [curr, max],\n close: [1, 1]\n });\n }\n\n if (thisOption.maxOpen) {\n outPieceList.push({\n interval: [dataExtent[1], Infinity],\n close: [0, 0]\n });\n }\n\n reformIntervals(outPieceList);\n zrUtil.each(outPieceList, function (piece, index) {\n piece.index = index;\n piece.text = this.formatValueText(piece.interval);\n }, this);\n },\n categories: function (outPieceList) {\n var thisOption = this.option;\n zrUtil.each(thisOption.categories, function (cate) {\n // FIXME category模式也使用pieceList,但在visualMapping中不是使用pieceList。\n // 是否改一致。\n outPieceList.push({\n text: this.formatValueText(cate, true),\n value: cate\n });\n }, this); // See \"Order Rule\".\n\n normalizeReverse(thisOption, outPieceList);\n },\n pieces: function (outPieceList) {\n var thisOption = this.option;\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_1 = 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_1[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_1[0] = 0);\n useMinMax[1] && interval[0] === -Infinity && (close_1[1] = 0);\n\n if (process.env.NODE_ENV !== 'production') {\n if (interval[0] > interval[1]) {\n console.warn('Piece ' + index + 'is illegal: ' + interval + ' lower bound should not greater then uppper bound.');\n }\n }\n\n if (interval[0] === interval[1] && close_1[0] && close_1[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 outPieceList.push(item);\n }, this); // See \"Order Rule\".\n\n normalizeReverse(thisOption, outPieceList); // Only pieces\n\n reformIntervals(outPieceList);\n zrUtil.each(outPieceList, 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\nexport default PiecewiseModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport VisualMapView from './VisualMapView.js';\nimport * as graphic from '../../util/graphic.js';\nimport { createSymbol } from '../../util/symbol.js';\nimport * as layout from '../../util/layout.js';\nimport * as helper from './helper.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\n\nvar PiecewiseVisualMapView =\n/** @class */\nfunction (_super) {\n __extends(PiecewiseVisualMapView, _super);\n\n function PiecewiseVisualMapView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = PiecewiseVisualMapView.type;\n return _this;\n }\n\n PiecewiseVisualMapView.prototype.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, function (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); // TODO Category\n\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 verticalAlign: 'middle',\n align: itemAlign,\n font: textFont,\n fill: textFill,\n opacity: visualState === 'outOfRange' ? 0.5 : 1\n }\n }));\n }\n\n thisGroup.add(itemGroup);\n }, 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\n PiecewiseVisualMapView.prototype._enableHoverLink = function (itemGroup, pieceIndex) {\n var _this = this;\n\n itemGroup.on('mouseover', function () {\n return onHoverLink('highlight');\n }).on('mouseout', function () {\n return onHoverLink('downplay');\n });\n\n var onHoverLink = function (method) {\n var visualMapModel = _this.visualMapModel; // TODO: TYPE More detailed action types\n\n visualMapModel.option.hoverLink && _this.api.dispatchAction({\n type: method,\n batch: helper.makeHighDownBatch(visualMapModel.findTargetDataIndices(pieceIndex), visualMapModel)\n });\n };\n };\n\n PiecewiseVisualMapView.prototype._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 PiecewiseVisualMapView.prototype._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: createTextStyle(textStyleModel, {\n x: showLabel ? itemAlign === 'right' ? itemSize[0] : 0 : itemSize[0] / 2,\n y: itemSize[1] / 2,\n verticalAlign: 'middle',\n align: showLabel ? itemAlign : 'center',\n text: text\n })\n }));\n group.add(itemGroup);\n };\n /**\n * @private\n * @return {Object} {peiceList, endsText} The order is the same as screen pixel order.\n */\n\n\n PiecewiseVisualMapView.prototype._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 PiecewiseVisualMapView.prototype._createItemSymbol = function (group, representValue, shapeParam) {\n group.add(createSymbol( // symbol will be string\n this.getControllerVisual(representValue, 'symbol'), shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3], // color will be string\n this.getControllerVisual(representValue, 'color')));\n };\n\n PiecewiseVisualMapView.prototype._onItemClick = function (piece) {\n var visualMapModel = this.visualMapModel;\n var option = visualMapModel.option;\n var selectedMode = option.selectedMode;\n\n if (!selectedMode) {\n return;\n }\n\n var selected = zrUtil.clone(option.selected);\n var newKey = visualMapModel.getSelectedMapKey(piece);\n\n if (selectedMode === 'single' || selectedMode === true) {\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\n PiecewiseVisualMapView.type = 'visualMap.piecewise';\n return PiecewiseVisualMapView;\n}(VisualMapView);\n\nexport default PiecewiseVisualMapView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport PiecewiseModel from './PiecewiseModel.js';\nimport PiecewiseView from './PiecewiseView.js';\nimport installCommon from './installCommon.js';\nexport function install(registers) {\n registers.registerComponentModel(PiecewiseModel);\n registers.registerComponentView(PiecewiseView);\n installCommon(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension.js';\nimport { install as installVisualMapContinuous } from './installVisualMapContinuous.js';\nimport { install as installVisualMapPiecewise } from './installVisualMapPiecewise.js';\nexport function install(registers) {\n use(installVisualMapContinuous);\n use(installVisualMapPiecewise); // Do not install './dataZoomSelect',\n // since it only work for toolbox dataZoom.\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { makeInner } from '../util/model.js';\nimport { getDecalFromPalette } from '../model/mixin/palette.js';\nvar DEFAULT_OPTION = {\n label: {\n enabled: true\n },\n decal: {\n show: false\n }\n};\nvar inner = makeInner();\nvar decalPaletteScope = {};\nexport default function ariaVisual(ecModel, api) {\n var ariaModel = ecModel.getModel('aria'); // See \"area enabled\" detection code in `GlobalModel.ts`.\n\n if (!ariaModel.get('enabled')) {\n return;\n }\n\n var defaultOption = zrUtil.clone(DEFAULT_OPTION);\n zrUtil.merge(defaultOption.label, ecModel.getLocaleModel().get('aria'), false);\n zrUtil.merge(ariaModel.option, defaultOption, false);\n setDecal();\n setLabel();\n\n function setDecal() {\n var decalModel = ariaModel.getModel('decal');\n var useDecal = decalModel.get('show');\n\n if (useDecal) {\n // Each type of series use one scope.\n // Pie and funnel are using different scopes.\n var paletteScopeGroupByType_1 = zrUtil.createHashMap();\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.isColorBySeries()) {\n return;\n }\n\n var decalScope = paletteScopeGroupByType_1.get(seriesModel.type);\n\n if (!decalScope) {\n decalScope = {};\n paletteScopeGroupByType_1.set(seriesModel.type, decalScope);\n }\n\n inner(seriesModel).scope = decalScope;\n });\n ecModel.eachRawSeries(function (seriesModel) {\n if (ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n\n if (zrUtil.isFunction(seriesModel.enableAriaDecal)) {\n // Let series define how to use decal palette on data\n seriesModel.enableAriaDecal();\n return;\n }\n\n var data = seriesModel.getData();\n\n if (!seriesModel.isColorBySeries()) {\n var dataAll_1 = seriesModel.getRawData();\n var idxMap_1 = {};\n var decalScope_1 = inner(seriesModel).scope;\n data.each(function (idx) {\n var rawIdx = data.getRawIndex(idx);\n idxMap_1[rawIdx] = idx;\n });\n var dataCount_1 = dataAll_1.count();\n dataAll_1.each(function (rawIdx) {\n var idx = idxMap_1[rawIdx];\n var name = dataAll_1.getName(rawIdx) || rawIdx + '';\n var paletteDecal = getDecalFromPalette(seriesModel.ecModel, name, decalScope_1, dataCount_1);\n var specifiedDecal = data.getItemVisual(idx, 'decal');\n data.setItemVisual(idx, 'decal', mergeDecal(specifiedDecal, paletteDecal));\n });\n } else {\n var paletteDecal = getDecalFromPalette(seriesModel.ecModel, seriesModel.name, decalPaletteScope, ecModel.getSeriesCount());\n var specifiedDecal = data.getVisual('decal');\n data.setVisual('decal', mergeDecal(specifiedDecal, paletteDecal));\n }\n\n function mergeDecal(specifiedDecal, paletteDecal) {\n // Merge decal from palette to decal from itemStyle.\n // User do not need to specify all of the decal props.\n var resultDecal = specifiedDecal ? zrUtil.extend(zrUtil.extend({}, paletteDecal), specifiedDecal) : paletteDecal;\n resultDecal.dirty = true;\n return resultDecal;\n }\n });\n }\n }\n\n function setLabel() {\n var labelLocale = ecModel.getLocaleModel().get('aria');\n var labelModel = ariaModel.getModel('label');\n labelModel.option = zrUtil.defaults(labelModel.option, labelLocale);\n\n if (!labelModel.get('enabled')) {\n return;\n }\n\n var dom = api.getZr().dom;\n\n if (labelModel.get('description')) {\n dom.setAttribute('aria-label', labelModel.get('description'));\n return;\n }\n\n var seriesCnt = ecModel.getSeriesCount();\n var maxDataCnt = labelModel.get(['data', 'maxCount']) || 10;\n var maxSeriesCnt = labelModel.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 var withTitle = labelModel.get(['general', 'withTitle']);\n ariaLabel = replace(withTitle, {\n title: title\n });\n } else {\n ariaLabel = labelModel.get(['general', 'withoutTitle']);\n }\n\n var seriesLabels_1 = [];\n var prefix = seriesCnt > 1 ? labelModel.get(['series', 'multiple', 'prefix']) : labelModel.get(['series', 'single', 'prefix']);\n ariaLabel += replace(prefix, {\n seriesCount: seriesCnt\n });\n ecModel.eachSeries(function (seriesModel, idx) {\n if (idx < displaySeriesCnt) {\n var seriesLabel = void 0;\n var seriesName = seriesModel.get('name');\n var withName = seriesName ? 'withName' : 'withoutName';\n seriesLabel = seriesCnt > 1 ? labelModel.get(['series', 'multiple', withName]) : labelModel.get(['series', 'single', withName]);\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\n if (data.count() > maxDataCnt) {\n // Show part of data\n var partialLabel = labelModel.get(['data', 'partialData']);\n seriesLabel += replace(partialLabel, {\n displayCnt: maxDataCnt\n });\n } else {\n seriesLabel += labelModel.get(['data', 'allData']);\n }\n\n var middleSeparator_1 = labelModel.get(['data', 'separator', 'middle']);\n var endSeparator_1 = labelModel.get(['data', 'separator', 'end']);\n var dataLabels = [];\n\n for (var i = 0; i < data.count(); i++) {\n if (i < maxDataCnt) {\n var name_1 = data.getName(i);\n var value = data.getValues(i);\n var dataLabel = labelModel.get(['data', name_1 ? 'withName' : 'withoutName']);\n dataLabels.push(replace(dataLabel, {\n name: name_1,\n value: value.join(middleSeparator_1)\n }));\n }\n }\n\n seriesLabel += dataLabels.join(middleSeparator_1) + endSeparator_1;\n seriesLabels_1.push(seriesLabel);\n }\n });\n var separatorModel = labelModel.getModel(['series', 'multiple', 'separator']);\n var middleSeparator = separatorModel.get('middle');\n var endSeparator = separatorModel.get('end');\n ariaLabel += seriesLabels_1.join(middleSeparator) + endSeparator;\n dom.setAttribute('aria-label', ariaLabel);\n }\n }\n\n function replace(str, keyValues) {\n if (!zrUtil.isString(str)) {\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 getTitle() {\n var title = ecModel.get('title');\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 ecModel.getLocaleModel().get(['series', 'typeNames'])[type] || '自定义图';\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nexport default function ariaPreprocessor(option) {\n if (!option || !option.aria) {\n return;\n }\n\n var aria = option.aria; // aria.show is deprecated and should use aria.enabled instead\n\n if (aria.show != null) {\n aria.enabled = aria.show;\n }\n\n aria.label = aria.label || {}; // move description, general, series, data to be under aria.label\n\n zrUtil.each(['description', 'general', 'series', 'data'], function (name) {\n if (aria[name] != null) {\n aria.label[name] = aria[name];\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport ariaVisual from '../../visual/aria.js';\nimport ariaPreprocessor from './preprocessor.js';\nexport function install(registers) {\n registers.registerPreprocessor(ariaPreprocessor);\n registers.registerVisual(registers.PRIORITY.VISUAL.ARIA, ariaVisual);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { keys, isArray, map, isObject, isString, isRegExp, isArrayLike, hasOwn, isNumber } from 'zrender/lib/core/util.js';\nimport { throwError, makePrintable } from './log.js';\nimport { getRawValueParser, createFilterComparator } from '../data/helper/dataValueHelper.js';\n;\nvar RELATIONAL_EXPRESSION_OP_ALIAS_MAP = {\n value: 'eq',\n // PENDING: not good for literal semantic?\n '<': 'lt',\n '<=': 'lte',\n '>': 'gt',\n '>=': 'gte',\n '=': 'eq',\n '!=': 'ne',\n '<>': 'ne' // Might be misleading for sake of the difference between '==' and '===',\n // so don't support them.\n // '==': 'eq',\n // '===': 'seq',\n // '!==': 'sne'\n // PENDING: Whether support some common alias \"ge\", \"le\", \"neq\"?\n // ge: 'gte',\n // le: 'lte',\n // neq: 'ne',\n\n}; // type RelationalExpressionOpEvaluate = (tarVal: unknown, condVal: unknown) => boolean;\n\nvar RegExpEvaluator =\n/** @class */\nfunction () {\n function RegExpEvaluator(rVal) {\n // Support condVal: RegExp | string\n var condValue = this._condVal = isString(rVal) ? new RegExp(rVal) : isRegExp(rVal) ? rVal : null;\n\n if (condValue == null) {\n var errMsg = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Illegal regexp', rVal, 'in');\n }\n\n throwError(errMsg);\n }\n }\n\n RegExpEvaluator.prototype.evaluate = function (lVal) {\n var type = typeof lVal;\n return isString(type) ? this._condVal.test(lVal) : isNumber(type) ? this._condVal.test(lVal + '') : false;\n };\n\n return RegExpEvaluator;\n}();\n\nvar ConstConditionInternal =\n/** @class */\nfunction () {\n function ConstConditionInternal() {}\n\n ConstConditionInternal.prototype.evaluate = function () {\n return this.value;\n };\n\n return ConstConditionInternal;\n}();\n\nvar AndConditionInternal =\n/** @class */\nfunction () {\n function AndConditionInternal() {}\n\n AndConditionInternal.prototype.evaluate = function () {\n var children = this.children;\n\n for (var i = 0; i < children.length; i++) {\n if (!children[i].evaluate()) {\n return false;\n }\n }\n\n return true;\n };\n\n return AndConditionInternal;\n}();\n\nvar OrConditionInternal =\n/** @class */\nfunction () {\n function OrConditionInternal() {}\n\n OrConditionInternal.prototype.evaluate = function () {\n var children = this.children;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].evaluate()) {\n return true;\n }\n }\n\n return false;\n };\n\n return OrConditionInternal;\n}();\n\nvar NotConditionInternal =\n/** @class */\nfunction () {\n function NotConditionInternal() {}\n\n NotConditionInternal.prototype.evaluate = function () {\n return !this.child.evaluate();\n };\n\n return NotConditionInternal;\n}();\n\nvar RelationalConditionInternal =\n/** @class */\nfunction () {\n function RelationalConditionInternal() {}\n\n RelationalConditionInternal.prototype.evaluate = function () {\n var needParse = !!this.valueParser; // Call getValue with no `this`.\n\n var getValue = this.getValue;\n var tarValRaw = getValue(this.valueGetterParam);\n var tarValParsed = needParse ? this.valueParser(tarValRaw) : null; // Relational cond follow \"and\" logic internally.\n\n for (var i = 0; i < this.subCondList.length; i++) {\n if (!this.subCondList[i].evaluate(needParse ? tarValParsed : tarValRaw)) {\n return false;\n }\n }\n\n return true;\n };\n\n return RelationalConditionInternal;\n}();\n\nfunction parseOption(exprOption, getters) {\n if (exprOption === true || exprOption === false) {\n var cond = new ConstConditionInternal();\n cond.value = exprOption;\n return cond;\n }\n\n var errMsg = '';\n\n if (!isObjectNotArray(exprOption)) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Illegal config. Expect a plain object but actually', exprOption);\n }\n\n throwError(errMsg);\n }\n\n if (exprOption.and) {\n return parseAndOrOption('and', exprOption, getters);\n } else if (exprOption.or) {\n return parseAndOrOption('or', exprOption, getters);\n } else if (exprOption.not) {\n return parseNotOption(exprOption, getters);\n }\n\n return parseRelationalOption(exprOption, getters);\n}\n\nfunction parseAndOrOption(op, exprOption, getters) {\n var subOptionArr = exprOption[op];\n var errMsg = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('\"and\"/\"or\" condition should only be `' + op + ': [...]` and must not be empty array.', 'Illegal condition:', exprOption);\n }\n\n if (!isArray(subOptionArr)) {\n throwError(errMsg);\n }\n\n if (!subOptionArr.length) {\n throwError(errMsg);\n }\n\n var cond = op === 'and' ? new AndConditionInternal() : new OrConditionInternal();\n cond.children = map(subOptionArr, function (subOption) {\n return parseOption(subOption, getters);\n });\n\n if (!cond.children.length) {\n throwError(errMsg);\n }\n\n return cond;\n}\n\nfunction parseNotOption(exprOption, getters) {\n var subOption = exprOption.not;\n var errMsg = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('\"not\" condition should only be `not: {}`.', 'Illegal condition:', exprOption);\n }\n\n if (!isObjectNotArray(subOption)) {\n throwError(errMsg);\n }\n\n var cond = new NotConditionInternal();\n cond.child = parseOption(subOption, getters);\n\n if (!cond.child) {\n throwError(errMsg);\n }\n\n return cond;\n}\n\nfunction parseRelationalOption(exprOption, getters) {\n var errMsg = '';\n var valueGetterParam = getters.prepareGetValue(exprOption);\n var subCondList = [];\n var exprKeys = keys(exprOption);\n var parserName = exprOption.parser;\n var valueParser = parserName ? getRawValueParser(parserName) : null;\n\n for (var i = 0; i < exprKeys.length; i++) {\n var keyRaw = exprKeys[i];\n\n if (keyRaw === 'parser' || getters.valueGetterAttrMap.get(keyRaw)) {\n continue;\n }\n\n var op = hasOwn(RELATIONAL_EXPRESSION_OP_ALIAS_MAP, keyRaw) ? RELATIONAL_EXPRESSION_OP_ALIAS_MAP[keyRaw] : keyRaw;\n var condValueRaw = exprOption[keyRaw];\n var condValueParsed = valueParser ? valueParser(condValueRaw) : condValueRaw;\n var evaluator = createFilterComparator(op, condValueParsed) || op === 'reg' && new RegExpEvaluator(condValueParsed);\n\n if (!evaluator) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Illegal relational operation: \"' + keyRaw + '\" in condition:', exprOption);\n }\n\n throwError(errMsg);\n }\n\n subCondList.push(evaluator);\n }\n\n if (!subCondList.length) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Relational condition must have at least one operator.', 'Illegal condition:', exprOption);\n } // No relational operator always disabled in case of dangers result.\n\n\n throwError(errMsg);\n }\n\n var cond = new RelationalConditionInternal();\n cond.valueGetterParam = valueGetterParam;\n cond.valueParser = valueParser;\n cond.getValue = getters.getValue;\n cond.subCondList = subCondList;\n return cond;\n}\n\nfunction isObjectNotArray(val) {\n return isObject(val) && !isArrayLike(val);\n}\n\nvar ConditionalExpressionParsed =\n/** @class */\nfunction () {\n function ConditionalExpressionParsed(exprOption, getters) {\n this._cond = parseOption(exprOption, getters);\n }\n\n ConditionalExpressionParsed.prototype.evaluate = function () {\n return this._cond.evaluate();\n };\n\n return ConditionalExpressionParsed;\n}();\n\n;\nexport function parseConditionalExpression(exprOption, getters) {\n return new ConditionalExpressionParsed(exprOption, getters);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { parseConditionalExpression } from '../../util/conditionalExpression.js';\nimport { hasOwn, createHashMap } from 'zrender/lib/core/util.js';\nimport { makePrintable, throwError } from '../../util/log.js';\nexport var filterTransform = {\n type: 'echarts:filter',\n // PEDING: enhance to filter by index rather than create new data\n transform: function (params) {\n // [Caveat] Fail-Fast:\n // Do not return the whole dataset unless user config indicate it explicitly.\n // For example, if no condition specified by mistake, return an empty result\n // is better than return the entire raw soruce for user to find the mistake.\n var upstream = params.upstream;\n var rawItem;\n var condition = parseConditionalExpression(params.config, {\n valueGetterAttrMap: createHashMap({\n dimension: true\n }),\n prepareGetValue: function (exprOption) {\n var errMsg = '';\n var dimLoose = exprOption.dimension;\n\n if (!hasOwn(exprOption, 'dimension')) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Relation condition must has prop \"dimension\" specified.', 'Illegal condition:', exprOption);\n }\n\n throwError(errMsg);\n }\n\n var dimInfo = upstream.getDimensionInfo(dimLoose);\n\n if (!dimInfo) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Can not find dimension info via: ' + dimLoose + '.\\n', 'Existing dimensions: ', upstream.cloneAllDimensionInfo(), '.\\n', 'Illegal condition:', exprOption, '.\\n');\n }\n\n throwError(errMsg);\n }\n\n return {\n dimIdx: dimInfo.index\n };\n },\n getValue: function (param) {\n return upstream.retrieveValueFromItem(rawItem, param.dimIdx);\n }\n });\n var resultData = [];\n\n for (var i = 0, len = upstream.count(); i < len; i++) {\n rawItem = upstream.getRawDataItem(i);\n\n if (condition.evaluate()) {\n resultData.push(rawItem);\n }\n }\n\n return {\n data: resultData\n };\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { SOURCE_FORMAT_ARRAY_ROWS, SOURCE_FORMAT_OBJECT_ROWS } from '../../util/types.js';\nimport { makePrintable, throwError } from '../../util/log.js';\nimport { each } from 'zrender/lib/core/util.js';\nimport { normalizeToArray } from '../../util/model.js';\nimport { getRawValueParser, SortOrderComparator } from '../../data/helper/dataValueHelper.js';\nvar sampleLog = '';\n\nif (process.env.NODE_ENV !== 'production') {\n sampleLog = ['Valid config is like:', '{ dimension: \"age\", order: \"asc\" }', 'or [{ dimension: \"age\", order: \"asc\"], { dimension: \"date\", order: \"desc\" }]'].join(' ');\n}\n\nexport var sortTransform = {\n type: 'echarts:sort',\n transform: function (params) {\n var upstream = params.upstream;\n var config = params.config;\n var errMsg = ''; // Normalize\n // const orderExprList: OrderExpression[] = isArray(config[0])\n // ? config as OrderExpression[]\n // : [config as OrderExpression];\n\n var orderExprList = normalizeToArray(config);\n\n if (!orderExprList.length) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'Empty `config` in sort transform.';\n }\n\n throwError(errMsg);\n }\n\n var orderDefList = [];\n each(orderExprList, function (orderExpr) {\n var dimLoose = orderExpr.dimension;\n var order = orderExpr.order;\n var parserName = orderExpr.parser;\n var incomparable = orderExpr.incomparable;\n\n if (dimLoose == null) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'Sort transform config must has \"dimension\" specified.' + sampleLog;\n }\n\n throwError(errMsg);\n }\n\n if (order !== 'asc' && order !== 'desc') {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'Sort transform config must has \"order\" specified.' + sampleLog;\n }\n\n throwError(errMsg);\n }\n\n if (incomparable && incomparable !== 'min' && incomparable !== 'max') {\n var errMsg_1 = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg_1 = 'incomparable must be \"min\" or \"max\" rather than \"' + incomparable + '\".';\n }\n\n throwError(errMsg_1);\n }\n\n if (order !== 'asc' && order !== 'desc') {\n var errMsg_2 = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg_2 = 'order must be \"asc\" or \"desc\" rather than \"' + order + '\".';\n }\n\n throwError(errMsg_2);\n }\n\n var dimInfo = upstream.getDimensionInfo(dimLoose);\n\n if (!dimInfo) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Can not find dimension info via: ' + dimLoose + '.\\n', 'Existing dimensions: ', upstream.cloneAllDimensionInfo(), '.\\n', 'Illegal config:', orderExpr, '.\\n');\n }\n\n throwError(errMsg);\n }\n\n var parser = parserName ? getRawValueParser(parserName) : null;\n\n if (parserName && !parser) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Invalid parser name ' + parserName + '.\\n', 'Illegal config:', orderExpr, '.\\n');\n }\n\n throwError(errMsg);\n }\n\n orderDefList.push({\n dimIdx: dimInfo.index,\n parser: parser,\n comparator: new SortOrderComparator(order, incomparable)\n });\n }); // TODO: support it?\n\n var sourceFormat = upstream.sourceFormat;\n\n if (sourceFormat !== SOURCE_FORMAT_ARRAY_ROWS && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'sourceFormat \"' + sourceFormat + '\" is not supported yet';\n }\n\n throwError(errMsg);\n } // Other upstream format are all array.\n\n\n var resultData = [];\n\n for (var i = 0, len = upstream.count(); i < len; i++) {\n resultData.push(upstream.getRawDataItem(i));\n }\n\n resultData.sort(function (item0, item1) {\n for (var i = 0; i < orderDefList.length; i++) {\n var orderDef = orderDefList[i];\n var val0 = upstream.retrieveValueFromItem(item0, orderDef.dimIdx);\n var val1 = upstream.retrieveValueFromItem(item1, orderDef.dimIdx);\n\n if (orderDef.parser) {\n val0 = orderDef.parser(val0);\n val1 = orderDef.parser(val1);\n }\n\n var result = orderDef.comparator.evaluate(val0, val1);\n\n if (result !== 0) {\n return result;\n }\n }\n\n return 0;\n });\n return {\n data: resultData\n };\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { filterTransform } from './filterTransform.js';\nimport { sortTransform } from './sortTransform.js';\nexport function install(registers) {\n registers.registerTransform(filterTransform);\n registers.registerTransform(sortTransform);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/**\n * This module is imported by echarts directly.\n *\n * Notice:\n * Always keep this file exists for backward compatibility.\n * Because before 4.1.0, dataset is an optional component,\n * some users may import this module manually.\n */\n\nimport ComponentModel from '../../model/Component.js';\nimport ComponentView from '../../view/Component.js';\nimport { SERIES_LAYOUT_BY_COLUMN } from '../../util/types.js';\nimport { disableTransformOptionMerge, SourceManager } from '../../data/helper/sourceManager.js';\n\nvar DatasetModel =\n/** @class */\nfunction (_super) {\n __extends(DatasetModel, _super);\n\n function DatasetModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'dataset';\n return _this;\n }\n\n DatasetModel.prototype.init = function (option, parentModel, ecModel) {\n _super.prototype.init.call(this, option, parentModel, ecModel);\n\n this._sourceManager = new SourceManager(this);\n disableTransformOptionMerge(this);\n };\n\n DatasetModel.prototype.mergeOption = function (newOption, ecModel) {\n _super.prototype.mergeOption.call(this, newOption, ecModel);\n\n disableTransformOptionMerge(this);\n };\n\n DatasetModel.prototype.optionUpdated = function () {\n this._sourceManager.dirty();\n };\n\n DatasetModel.prototype.getSourceManager = function () {\n return this._sourceManager;\n };\n\n DatasetModel.type = 'dataset';\n DatasetModel.defaultOption = {\n seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN\n };\n return DatasetModel;\n}(ComponentModel);\n\nexport { DatasetModel };\n\nvar DatasetView =\n/** @class */\nfunction (_super) {\n __extends(DatasetView, _super);\n\n function DatasetView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'dataset';\n return _this;\n }\n\n DatasetView.type = 'dataset';\n return DatasetView;\n}(ComponentView);\n\nexport function install(registers) {\n registers.registerComponentModel(DatasetModel);\n registers.registerComponentView(DatasetView);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from './lib/extension.js';\nexport * from './lib/export/core.js'; // ----------------------------------------------\n// All of the modules that are allowed to be\n// imported are listed below.\n//\n// Users MUST NOT import other modules that are\n// not included in this list.\n// ----------------------------------------------\n\nimport { SVGRenderer, CanvasRenderer } from './lib/export/renderers.js';\nimport { LineChart, BarChart, PieChart, ScatterChart, RadarChart, MapChart, TreeChart, TreemapChart, GraphChart, GaugeChart, FunnelChart, ParallelChart, SankeyChart, BoxplotChart, CandlestickChart, EffectScatterChart, LinesChart, HeatmapChart, PictorialBarChart, ThemeRiverChart, SunburstChart, CustomChart } from './lib/export/charts.js';\nimport { GridComponent, PolarComponent, GeoComponent, SingleAxisComponent, ParallelComponent, CalendarComponent, GraphicComponent, ToolboxComponent, TooltipComponent, AxisPointerComponent, BrushComponent, TitleComponent, TimelineComponent, MarkPointComponent, MarkLineComponent, MarkAreaComponent, LegendComponent, DataZoomComponent, DataZoomInsideComponent, DataZoomSliderComponent, VisualMapComponent, VisualMapContinuousComponent, VisualMapPiecewiseComponent, AriaComponent, DatasetComponent, TransformComponent } from './lib/export/components.js';\nimport { UniversalTransition, LabelLayout } from './lib/export/features.js'; // -----------------\n// Render engines\n// -----------------\n// Render via Canvas.\n// echarts.init(dom, null, { renderer: 'canvas' })\n\nuse([CanvasRenderer]); // Render via SVG.\n// echarts.init(dom, null, { renderer: 'svg' })\n\nuse([SVGRenderer]); // ----------------\n// Charts (series)\n// ----------------\n// All of the series types, for example:\n// chart.setOption({\n// series: [{\n// type: 'line' // or 'bar', 'pie', ...\n// }]\n// });\n\nuse([LineChart, BarChart, PieChart, ScatterChart, RadarChart, MapChart, TreeChart, TreemapChart, GraphChart, GaugeChart, FunnelChart, ParallelChart, SankeyChart, BoxplotChart, CandlestickChart, EffectScatterChart, LinesChart, HeatmapChart, PictorialBarChart, ThemeRiverChart, SunburstChart, CustomChart]); // -------------------\n// Coordinate systems\n// -------------------\n// All of the axis modules have been included in the\n// coordinate system module below, do not need to\n// make extra import.\n// `cartesian` coordinate system. For some historical\n// reasons, it is named as grid, for example:\n// chart.setOption({\n// grid: {...},\n// xAxis: {...},\n// yAxis: {...},\n// series: [{...}]\n// });\n\nuse(GridComponent); // `polar` coordinate system, for example:\n// chart.setOption({\n// polar: {...},\n// radiusAxis: {...},\n// angleAxis: {...},\n// series: [{\n// coordinateSystem: 'polar'\n// }]\n// });\n\nuse(PolarComponent); // `geo` coordinate system, for example:\n// chart.setOption({\n// geo: {...},\n// series: [{\n// coordinateSystem: 'geo'\n// }]\n// });\n\nuse(GeoComponent); // `singleAxis` coordinate system (notice, it is a coordinate system\n// with only one axis, work for chart like theme river), for example:\n// chart.setOption({\n// singleAxis: {...}\n// series: [{type: 'themeRiver', ...}]\n// });\n\nuse(SingleAxisComponent); // `parallel` coordinate system, only work for parallel series, for example:\n// chart.setOption({\n// parallel: {...},\n// parallelAxis: [{...}, ...],\n// series: [{\n// type: 'parallel'\n// }]\n// });\n\nuse(ParallelComponent); // `calendar` coordinate system. for example,\n// chart.setOptionp({\n// calendar: {...},\n// series: [{\n// coordinateSystem: 'calendar'\n// }]\n// );\n\nuse(CalendarComponent); // ------------------\n// Other components\n// ------------------\n// `graphic` component, for example:\n// chart.setOption({\n// graphic: {...}\n// });\n\nuse(GraphicComponent); // `toolbox` component, for example:\n// chart.setOption({\n// toolbox: {...}\n// });\n\nuse(ToolboxComponent); // `tooltip` component, for example:\n// chart.setOption({\n// tooltip: {...}\n// });\n\nuse(TooltipComponent); // `axisPointer` component, for example:\n// chart.setOption({\n// tooltip: {axisPointer: {...}, ...}\n// });\n// Or\n// chart.setOption({\n// axisPointer: {...}\n// });\n\nuse(AxisPointerComponent); // `brush` component, for example:\n// chart.setOption({\n// brush: {...}\n// });\n// Or\n// chart.setOption({\n// tooltip: {feature: {brush: {...}}\n// })\n\nuse(BrushComponent); // `title` component, for example:\n// chart.setOption({\n// title: {...}\n// });\n\nuse(TitleComponent); // `timeline` component, for example:\n// chart.setOption({\n// timeline: {...}\n// });\n\nuse(TimelineComponent); // `markPoint` component, for example:\n// chart.setOption({\n// series: [{markPoint: {...}}]\n// });\n\nuse(MarkPointComponent); // `markLine` component, for example:\n// chart.setOption({\n// series: [{markLine: {...}}]\n// });\n\nuse(MarkLineComponent); // `markArea` component, for example:\n// chart.setOption({\n// series: [{markArea: {...}}]\n// });\n\nuse(MarkAreaComponent); // `legend` component not scrollable. for example:\n// chart.setOption({\n// legend: {...}\n// });\n\nuse(LegendComponent); // `dataZoom` component including both `dataZoomInside` and `dataZoomSlider`.\n\nuse(DataZoomComponent); // `dataZoom` component providing drag, pinch, wheel behaviors\n// inside coodinate system, for example:\n// chart.setOption({\n// dataZoom: {type: 'inside'}\n// });\n\nuse(DataZoomInsideComponent); // `dataZoom` component providing a slider bar, for example:\n// chart.setOption({\n// dataZoom: {type: 'slider'}\n// });\n\nuse(DataZoomSliderComponent); // `visualMap` component including both `visualMapContinuous` and `visualMapPiecewise`.\n\nuse(VisualMapComponent); // `visualMap` component providing continuous bar, for example:\n// chart.setOption({\n// visualMap: {type: 'continuous'}\n// });\n\nuse(VisualMapContinuousComponent); // `visualMap` component providing pieces bar, for example:\n// chart.setOption({\n// visualMap: {type: 'piecewise'}\n// });\n\nuse(VisualMapPiecewiseComponent); // `aria` component providing aria, for example:\n// chart.setOption({\n// aria: {...}\n// });\n\nuse(AriaComponent); // dataset transform\n// chart.setOption({\n// dataset: {\n// transform: []\n// }\n// });\n\nuse(TransformComponent);\nuse(DatasetComponent); // universal transition\n// chart.setOption({\n// series: {\n// universalTransition: { enabled: true }\n// }\n// })\n\nuse(UniversalTransition); // label layout\n// chart.setOption({\n// series: {\n// labelLayout: { hideOverlap: true }\n// }\n// })\n\nuse(LabelLayout);","
\n

一周使用统计 查看其他统计

\n
\n
\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!./HomeChart.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!./HomeChart.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HomeChart.vue?vue&type=template&id=4de62c87&\"\nimport script from \"./HomeChart.vue?vue&type=script&lang=js&\"\nexport * from \"./HomeChart.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HomeChart.vue?vue&type=style&index=0&lang=less&\"\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 null,\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 _vm._m(0)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"home-intro\"},[_c('p',{staticClass:\"home-intro-title\"},[_vm._v(\"中午好!欢迎来到巴蜀小学课程博览馆\")]),_c('p',{staticClass:\"home-intro-desc\"},[_vm._v(\" 云巴蜀课程博览馆是由巴蜀小学核心团队研发,旨在打造学校精品课程资源库,帮助老师备课、上课。课程既有单元解读、又有单课目标分解,方便老师明晰教学脉络,把控教学目标,创生教学内容,是一个能很好地实现资源共享,师生共创的教学助手。 \")]),_c('div',{staticClass:\"home-intro-icon\"},[_c('img',{attrs:{\"src\":require(\"@/assets/expo1.png\"),\"alt\":\"\",\"srcset\":\"\"}})])])}]\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!./HomeIntro.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!./HomeIntro.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HomeIntro.vue?vue&type=template&id=73e2a274&\"\nimport script from \"./HomeIntro.vue?vue&type=script&lang=js&\"\nexport * from \"./HomeIntro.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HomeIntro.vue?vue&type=style&index=0&lang=less&\"\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 null,\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:\"home-right-side\"},[_c('div',{staticClass:\"home-right-header\"},[_c('a-avatar',{attrs:{\"size\":56,\"icon\":\"user\",\"src\":_vm.model.headImg}}),_c('div',{staticClass:\"user-name-warp\"},[_c('p',{staticClass:\"name\"},[_vm._v(_vm._s(_vm.model.teacherName))]),_c('p',{staticClass:\"school\"},[_vm._v(_vm._s(_vm.model.schoolName))])])],1),_c('ul',{staticClass:\"data-warp\"},[_c('li',{staticClass:\"data-item\"},[_c('p',{staticClass:\"title\"},[_vm._v(\"学科\")]),_c('p',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.model.teach))])]),_c('li',{staticClass:\"data-item\"},[_c('p',{staticClass:\"title\"},[_vm._v(\"浏览量\")]),_c('p',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.model.total))])]),_c('li',{staticClass:\"data-item\"},[_c('p',{staticClass:\"title\"},[_vm._v(\"收藏\")]),_c('p',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.model.favorite))])]),_c('li',{staticClass:\"data-item\"},[_c('p',{staticClass:\"title\"},[_vm._v(\"下载\")]),_c('p',{staticClass:\"value\"},[_vm._v(_vm._s(_vm.model.downCount))])])]),_c('br'),_c('div',[_c('h3',[_vm._v(\"足迹\")]),_c('ul',{staticClass:\"foot-print-list\"},_vm._l((_vm.model.footPointList),function(item,index){return _c('li',{key:index,staticClass:\"foot-print-list-item\"},[_c('div',{staticClass:\"icon-warp\"},[_c('a-icon',{staticStyle:{\"color\":\"#6e76ff\"},attrs:{\"type\":\"pushpin\",\"theme\":\"filled\"}})],1),_c('div',{staticClass:\"item-right\"},[_c('p',{staticClass:\"action-name\"},[_vm._v(\"你的足迹\")]),_c('p',{staticClass:\"action-time\"},[_vm._v(_vm._s(item.time))]),_c('p',{staticClass:\"action-detail\"},[_vm._v(_vm._s(item.what2Do))])])])}),0)])])}\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!./HomeRightSide.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!./HomeRightSide.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./HomeRightSide.vue?vue&type=template&id=1426abee&\"\nimport script from \"./HomeRightSide.vue?vue&type=script&lang=js&\"\nexport * from \"./HomeRightSide.vue?vue&type=script&lang=js&\"\nimport style0 from \"./HomeRightSide.vue?vue&type=style&index=0&lang=less&\"\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 null,\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!./Home.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!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=3884c1ac&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Home.vue?vue&type=style&index=0&lang=less&\"\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 null,\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('li',{staticClass:\"course-item\",style:({ background: _vm.index % 2 == 1 ? '#6E76FF' : '#ffffff' }),on:{\"click\":function($event){return _vm.navigateToDetail()}}},[_c('img',{staticClass:\"logo\",attrs:{\"src\":require(\"@/assets/smalllogo.png\"),\"alt\":\"\",\"srcset\":\"\"}}),_c('img',{staticClass:\"rangc\",attrs:{\"src\":require(\"@/assets/ran.png\"),\"alt\":\"\",\"srcset\":\"\"}}),_c('img',{staticClass:\"icon\",attrs:{\"src\":_vm.item.icon,\"alt\":\"\",\"srcset\":\"\"}}),_c('div',{staticClass:\"course-name\",style:({ color: _vm.index % 2 == 0 ? '#2A2A31' : '#ffffff' })},[_vm._v(\" \"+_vm._s(_vm.item.Type)+\" \")]),_c('div',{staticClass:\"number-warp\",style:({ color: _vm.index % 2 == 0 ? '#2A2A31' : '#ffffff' })},[_c('span',{staticClass:\"number\"},[_vm._v(_vm._s(_vm.item.TeachTime))]),_c('span',{staticClass:\"unit\"},[_vm._v(\"课时\")])]),(_vm.showDown)?_c('div',{staticClass:\"number-warp download\",style:({ color: _vm.index % 2 == 0 ? '#2A2A31' : '#ffffff' })},[_c('span',{staticClass:\"number\"},[_vm._v(_vm._s(_vm.item.DownCount))]),_c('span',{staticClass:\"unit\"},[_vm._v(\"下载\")])]):_vm._e()])}\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!./CourseItem.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!./CourseItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CourseItem.vue?vue&type=template&id=1e414fd2&\"\nimport script from \"./CourseItem.vue?vue&type=script&lang=js&\"\nexport * from \"./CourseItem.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CourseItem.vue?vue&type=style&index=0&lang=less&\"\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 null,\n null\n \n)\n\nexport default component.exports","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!./Clock.vue?vue&type=style&index=0&lang=less&\""],"sourceRoot":""}