{"version":3,"sources":["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/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/roamHelper.js","webpack:///./node_modules/echarts/lib/component/helper/cursorHelper.js","webpack:///./node_modules/zrender/lib/tool/parseSVG.js","webpack:///./node_modules/zrender/lib/tool/parseXML.js","webpack:///./node_modules/echarts/lib/coord/geo/GeoSVGResource.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/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/helper/BrushController.js","webpack:///./node_modules/echarts/lib/component/helper/brushHelper.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/boxplotVisual.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/dataZoom/SelectZoomModel.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SelectZoomView.js","webpack:///./node_modules/echarts/lib/component/dataZoom/installDataZoomSelect.js","webpack:///./node_modules/echarts/lib/component/toolbox/featureManager.js","webpack:///./node_modules/echarts/lib/component/toolbox/ToolboxModel.js","webpack:///./node_modules/echarts/lib/component/toolbox/ToolboxView.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/SaveAsImage.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/MagicType.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/DataView.js","webpack:///./node_modules/echarts/lib/component/dataZoom/history.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/Restore.js","webpack:///./node_modules/echarts/lib/component/helper/BrushTargetManager.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/DataZoom.js","webpack:///./node_modules/echarts/lib/component/toolbox/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/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/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/index.js","webpack:///./src/utils/Getfengxiang.js"],"names":["mathSin","Math","sin","mathCos","cos","PI","PI2","degree","SVGPathRebuilder","prototype","reset","precision","this","_start","_d","_str","_p","pow","moveTo","x","y","_add","lineTo","bezierCurveTo","x2","y2","x3","y3","quadraticCurveTo","arc","cx","cy","r","startAngle","endAngle","anticlockwise","ellipse","rx","ry","psi","dTheta","clockwise","dThetaPositive","abs","isCircle","unifiedTheta","large","x0","y0","xRot","round","p","dTheta_1","rect","w","h","closePath","length","cmd","a","b","c","d","e","f","g","vals","i","arguments","val","isNaN","_invalid","push","join","generateStr","getStr","NONE","mathRound","pathHasFill","style","fill","pathHasStroke","stroke","strokeProps","svgStrokeProps","prop","toLowerCase","mapStyleToAttrs","updateAttr","el","forceUpdate","opacity","color","fillOpacity","strokeScale","strokeNoScale","getLineScale","strokeWidth","lineWidth","strokeOpacity","strokeFirst","lineDash","_a","lineDashOffset","propName","SVGNS","XLINKNS","XMLNS","XML_NAMESPACE","createElement","name","document","createElementNS","createVNode","tag","key","attrs","children","text","createElementOpen","attrsStr","part","createElementClose","vNodeToString","opts","S","newline","convertElToString","child","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","width","height","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","path","shape","buildPath","svgPathBuilder","rebuildPath","setTransformOrigin","target","transform","originX","originY","ANIMATE_STYLE_MAP","addAnimation","cssAnim","scope","createCompoundPathCSSAnimation","cssAnimationCfg","cssAnimationName","paths","composedAnim","subScope","animation","createCSSAnimation","animNames","len","lastAnim","kf","indexOf","replace","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","k","track","needsAnimate","kfs","keyframes","time","kfEasing","rawValue","targetProp","targetName","str","timingFunction","canAnimateShape","isFirst","PathProxy","len_1","newLen","transformOrigin","percents","allTransformOriginSame","p0","p1","isImageLike","src","isCanvasLike","toDataURL","setStyleAttrs","isFillStroke","setGradient","setPattern","setShadow","noRotateScale","m","noTranslate","setTransform","compress","mul","convertPolyShape","points","strArr","validatePolyShape","smooth","createAttrsConvert","desc","normalizedDesc","item","buitinShapesDef","circle","polyline","polygon","hasShapeAnimation","brushSVGPath","builtinShpDef","type","svgElType","strokePercent","willUpdate","createPathProxy","shapeChanged","beginPath","pathUpdated","pathVersion","getVersion","elExt","__svgPathBuilder","__svgPathVersion","__svgPathStrokePercent","id","brushSVGImage","image","dw","dh","href","brushSVGTSpan","font","textBaseline","textAlign","separatedFontStr","fontStyle","fontSize","parseFloat","fontFamily","fontWeight","match","undefined","brush","Path","TSpan","shadowKey","shadowId","globalScale","getGlobalScale","scaleX","scaleY","offsetX","shadowOffsetX","offsetY","shadowOffsetY","blur_1","shadowBlur","shadowColor","stdDx","stdDy","stdDeviation","filter","gradientTag","gradientAttrs","global","x1","y1","colors","colorStops","offset","stopColor","stopsAttrs","gradientVNode","gradientKey","gradientId","patternAttrs","imageWidth_1","imageWidth","imageHeight_1","imageHeight","imageSrc","patternImage","Image","errMsg","setSizeToVNode_1","vNode","img","svgEl","elm","setAttribute","createdImage","patternVNode","svgElement","svgWidth","svgHeight","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","charCodeAt","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","bgColor","_backgroundColor","_width","_height","_bgVNode","mainVNode","_mainVNode","_paintList","animationCssStr","styleNode","renderToString","cssAnimation","setBackgroundColor","backgroundColor","bgVNode","getSvgRoot","out","currentClipPathGroup","prevClipPaths","listLen","clipPathsGroupsStack","clipPathsGroupsStackDepth","clipGroupNodeIdx","displayable","invisible","clipPaths","__clipPaths","prevLen","lca","max","i_1","i_2","groupAttrs","ret","display","viewportStyle","getWidth","getHeight","dispose","innerHTML","clear","base64","encodeURIComponent","prefix","method","install","registers","registerPainter","getViewRect","seriesModel","api","getBoxLayoutParams","getBasicPieLayout","viewRect","center","get","radius","size","min","r0","pieLayout","seriesType","ecModel","eachSeriesByType","data","getData","valueDim","mapDimension","minAngle","validDataCount","each","value","sum","getSum","unitRadian","roseType","stillShowZeroSum","extent","getDataExtent","restAngle","valueSumLargerThanMinAngle","currentAngle","dir","setLayout","idx","angle","setItemLayout","NaN","angle_1","layout_1","getItemLayout","layout_2","dataFilter","legendModels","findComponents","mainType","filterSelf","getName","isSelected","adjustSingleSide","viewWidth","viewHeight","viewLeft","viewTop","farthestX","position","labelAlignTo","dx","label","linePoints","recalculateX","recalculateXOnSemiToAlignOnEllipseCurve","semi","rB","rB2","dy","rA","rA2","sqrt","newX","len2","deltaX","newTargetWidth","targetTextWidth","constrainTextWidth","items","topSemi","maxY","bottomSemi","avoidOverlap","labelLayoutList","leftList","rightList","leftmostX","Number","MAX_VALUE","rightmostX","isPositionCenter","layout","labelStyleWidth","labelDistance","edgeDistance","bleedMargin","isAlignToEdge","padding","paddingH","extraPaddingH","realTextWidth","dist","availableWidth","forceRecalculate","textRect","overflow","oldOuterWidth","oldHeight","setStyle","innerRect","getBoundingRect","ceil","availableInnerWidth","newWidth","unconstrainedWidth","newRect","margin","sectorShape","pieLabelLayout","hasLabelRotate","minShowLabelRadian","getLayout","setNotShow","ignore","isLabelShown","states","sector","getItemGraphicEl","getTextContent","labelLine","getTextGuideLine","itemModel","getItemModel","labelModel","getModel","labelPosition","labelLineModel","labelLineLen","labelLineLen2","textX","textY","midAngle","nx","ny","isLabelInside","labelRotate","rotate","radialAngle","rad","atan2","isDown","rotation","verticalAlign","align","selectState","select","clone","applyTransform","getComputedTransform","minTurnAngle","maxSurfaceAngle","surfaceNormal","Point","setTextConfig","inside","notShowLabel","setShape","__hostTarget","textGuideLineConfig","anchor","getSectorCornerRadius","model","zeroIfNull","cornerRadius","dr","cr","_super","PiePiece","_this","call","z2","updateData","firstCreate","hostModel","emphasisModel","animationType","getShallow","dataIndex","isFrom","useStyle","getItemVisual","cursorStyle","attr","_updateLabel","ensureState","labelText","visualColor","visualOpacity","labelFetcher","labelDataIndex","inheritColor","defaultOpacity","defaultText","getFormattedLabel","removeTextGuideLine","setTextGuideLine","PieView","apply","ignoreLabelLineUpdate","render","payload","oldData","_data","group","count","_emptyCircleSector","remove","getItemStyle","add","diff","piePiece","setItemGraphicEl","update","newIdx","oldIdx","off","execute","containPoint","point","itemLayout","Chart","LegendVisualProvider","getDataWithEncodedVisual","getRawData","_getDataWithEncodedVisual","_getRawData","getAllNames","rawData","mapArray","containName","indexOfName","dataWithEncodedVisual","PieSeriesModel","init","option","legendVisualProvider","_defaultLabelLine","mergeOption","getInitialData","createSeriesDataSimply","coordDimensions","encodeDefaulter","getDataParams","params","valueList","$vars","labelLineNormalOpt","labelLineEmphasisOpt","emphasis","show","defaultOption","z","legendHoverLink","colorBy","minShowLabelAngle","selectedOffset","percentPrecision","left","top","right","bottom","alignTo","distanceToLabelLine","length2","lineStyle","itemStyle","borderWidth","borderJoin","showEmptyCircle","emptyCircleStyle","labelLayout","hideOverlap","scale","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","coordinateSystem","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","Infinity","minY","maxX","LargeSymbolDraw","opt","_clear","symbolEl","_create","_setCommon","updateLayout","eachChild","startIndex","endIndex","byteOffset","Float32Array","buffer","incrementalPrepareUpdate","incrementalUpdate","taskParams","lastAdded","_newAdded","oldPoints","oldLen","newPoints","set","end","start","eachRendered","cb","cursor","getVisual","Array","clipShape","setColor","extrudeShadow","globalStyle","ecData","seriesIndex","on","removeAll","ScatterView","symbolDraw","_updateSymbolDraw","_getClipShape","_finished","incrementalPrepareRender","incrementalRender","_symbolDraw","updateTransform","dirty","res","progress","coordSys","clipArea","getArea","pipelineContext","isLargeDraw","_isLargeDraw","SymbolDraw","radarLayout","axes","getIndicatorAxes","axis","axisIndex","dim","dataToPoint","isValidPoint","getValueMissingPoint","firstPoint","slice","radarBackwardCompat","polarOptArr","polar","polarNotRadar_1","polarOpt","indicator","radar","series","seriesOpt","polarIndex","radarIndex","RadarView","createSymbol","symbolType","symbolPath","symbolRotate","updateSymbols","symbolGroup","isInit","__dimIdx","setPosition","graphic","getInitialPoints","pt","itemGroup","childAt","eachItemGraphicEl","getLineStyle","areaStyleModel","polygonIgnore","isEmpty","parentModel","stateName","stateModel","stateIgnore","getAreaStyle","decal","itemHoverStyle","pathStyle","pathEmphasisState","getStore","getDimensionIndex","labelDimIndex","RadarSeriesModel","generateCoord","generateCoordCount","formatTooltip","multipleSeries","dataType","indicatorAxes","nameToDisplay","markerColor","header","sortBlocks","blocks","markerType","sortParam","getTooltipPosition","data_1","values","getValues","dimensions","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","j","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","create","radarList","eachComponent","registerCoordinateSystem","registerComponentModel","registerComponentView","registerVisual","setItemVisual","setVisual","registerPreprocessor","updateViewOnPan","controllerHost","updateViewOnZoom","zoomDelta","zoomX","zoomY","zoomLimit","newZoom","zoom","zoomMin","zoomMax","zoomScale","IRRELEVANT_EXCLUDES","onIrrelevantElement","targetCoordSysModel","getComponentByElement","topTarget","hasOwnProperty","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","parseInt","gradient","LinearGradient","parsePaintServerUnit","parseGradientColorStops","RadialGradient","gradientUnits","stop","toLocaleLowerCase","offsetStr","styleVals","parseInlineStyle","parent","__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","tan","sy","setLocalTransform","styleRegex","inheritableStyleResult","selfStyleResult","styleRegResult","lastIndex","exec","svgStlAttr","zrInheritableStlAttr","zrSelfStlAttr","svgAttrName","attrValue","boundingRect","parseSVG","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","isGeoSVGGraphicRoot","bRectX","bRectY","bRectWidth","bRectHeight","calculatedBoundingRect","BoundingRect","plain","namedItem","setSilent","useGraphic","hostKey","usedRootMap","svgGraphic","pop","freeGraphic","removeKey","traverse","region","geoCoord","nanhaiName","fixNanhai","mapType","exterior","coordsOffsetMap","fixTextCoords","coordFix","cp","getCenter","setCenter","fixDiaoyuIsland","geometries","DEFAULT_NAME_PROPERTY","GeoJSONResource","geoJSON","specialAreas","_parsedMap","_specialAreas","_geoJSON","parseInput","nameMap","nameProperty","parsed","rawRegions","_parseToRegions","calculateBoundingRect","finalRegions","regionName","cloneShallow","parseGeoJson","specialArea","transformTo","getMapForUser","geoJson","regionRect","union","source","JSON","Function","registerMap","rawDef","rawSpecialAreas","resource","features","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","RoamController","getZr","_controllerHost","_regionsGroup","_svgGroup","draw","mapOrGeoModel","fromView","isGeo","subType","mapSeries","getHostGeoModel","geo","regionsGroup","transformInfo","getTransformInfo","transformInfoRaw","raw","transformInfoRoam","roam","isFirstDraw","isVisualEncodedByVisualMap","viewBuildCtx","resourceType","_buildGeoJSON","_buildSVG","_updateController","_updateMapSelectHandler","regionsGroupByName","_regionsGroupByName","regionsInfoByName","projection","projectionStream","stream","transformPoint","project","transformPolygonPoints","inPoints","outPoints","newPt","getPolyShape","regionGroup","regionModel","getRegionModel","polygonSubpaths","polylineSubpaths","geometry","polys","interiors","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","controller","getZoom","enable","makeActionBase","action","componentType","_mouseDownFlag","dispatchAction","duration","setPointerChecker","resetForLabelLayout","mapDraw","normalStyleModel","emphasisStyleModel","blurStyleModel","selectStyleModel","normalStyle","emphasisStyle","selectStyle","labelXY","isDataNaN","showLabel","query","specifiedTextOpt","normal","textEl","textConfig","layoutRect","disableLabelAnimation","removeTextContent","removeTextConfig","eventTrigger","eventData","geoIndex","componentModel","itemName","itemTooltipOption","highDownSilentOnTouch","focus","rings","createStream","curPoly","polygons","startPolygon","endPolygon","polygonStart","polygonEnd","lineStart","lineEnd","isFinite","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","vector","View","_roamTransformable","Transformable","_rawTransformable","setBoundingRect","setViewRect","_transformTo","_viewRect","rawTransform","calculateTransform","rawParent","decomposeTransform","_updateTransform","centerCoord","_center","_updateCenterAndZoom","_zoom","getDefaultCenter","rawRect","getRoamTransform","getLocalTransform","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","aspect","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","event","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","forEach","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","SeriesData","initData","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","index","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","distance","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","layoutParam","pos","box","totalWidth","renderList","_prepare","_renderContent","getTextRect","lastX","availableSize","itemNode","makeItemPoints","lineJoin","getTextColor","getFont","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","oldX","oldY","oldShape","fadein","_onPan","_onZoom","_clearController","rootRect","mouseX","mouseY","findTarget","isLeafRoot","_rootToNode","_zoomToNode","link","linkTarget","_breadcrumb","bgEl","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","disableLabelLayout","beforeUpdate","truncateMinChar","lineOverflow","addDrillDownIcon","textEmphasisState","getState","iconChar","Ctor","lasts","prepareAnimationWhenHasOld","calculateZ2","prepareAnimationWhenNoOld","lastCfg","parentOldX","parentOldY","parentOldBg","z2InLevel","isObject","CATEGORY_DEFAULT_VISUAL_INDEX","VisualMapping","mappingMethod","visualType","thisOption","_normalizeData","normalizers","visualHandler","visualHandlers","applyVisual","getColorMapper","_normalizedToVisual","normalizeVisualRange","preprocessForPiecewise","categories","preprocessForSpecifiedCategory","dataExtent","mapValueToVisual","normalized","getNormalizer","listVisualTypes","isValidType","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","keys","split","getEdgeFromMap","__edgeMap","getTotalLengthBetweenNodes","getEdgeMapLengthWithKey","lenV","edgeMap","initCurvenessList","createEdgeMapForCurveness","oppositeEdges","isForward","getCurvenessForEdge","needReverse","autoCurvenessParams","isArrayParam","edgeArray","edgeIndex","totalLen","curKey","parityCorrection","oppositeKey","resValue","simpleLayout","simpleLayoutEdge","eachEdge","p2","graphSimpleLayout","dimensions_1","coordDim","mapDimensionsAll","hasValue","getNodeGlobalScale","getSymbolSize","_symbolRadiansHalf","circularLayout","basedOn","_layoutNodesBasedOn","cp1","x12","y12","unitAngle","radianHalf","sumRadian","symbolRadianHalf","asin","halfRemainRadian","graphCircularLayout","scaleAndAdd","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","t","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","local","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","getGraphicEl","draggable","_layouting","setDraggable","getAdjacentDataIndices","circularRotateLabel","emphasisState","self","setTimeout","disable","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","encodeDefine","getEncode","GraphSeriesModel","_categoriesData","fillDataTextStyle","links","_updateCategoriesData","categoriesModels","_categoriesModels","categoryModel","oldGetModel","newGetModel","resolveParentPath","pathArr","newPathArr","sourceName","nameArr","nodeMarkup","isAnimationEnabled","circular","rotateLabel","force","edgeSymbol","edgeSymbolSize","edgeLabel","GraphSeries","VISUAL","POST_CHART_LAYOUT","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","visualStyleAccessPath","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","eventName","_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","posInfo","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","BRUSH_PANEL_GLOBAL","mathPow","COVER_Z","UNSELECT_THRESHOLD","MIN_RESIZE_LINE_WIDTH","MUTEX_RESOURCE_KEY","DIRECTION_MAP","CURSOR_MAP","ne","sw","nw","se","DEFAULT_BRUSH_OPT","brushStyle","transformable","brushMode","removeOnClick","baseUID","BrushController","zr","_track","_covers","_zr","_uid","pointerHandlers","enableBrush","brushOption","_brushType","_doDisableBrush","brushType","_doEnableBrush","_enableGlobalPan","interactionMutex","_brushOption","setPanels","panelOpts","panels_1","_panels","panelId","mount","enableGlobalPan","_transform","updateCovers","coverConfigList","coverConfig","tmpIdPrefix","oldCovers","newCovers","creatingCover","_creatingCover","oldGetKey","addOrUpdate","cover","__brushOption","newBrushInternal","endCreating","createCover","updateCoverAfterCreation","unmount","clearCovers","Eventful","coverRenderers","updateZ","coverRenderer","getCoverRenderer","updateCoverShape","updateCommon","getPanelByPoint","localCursorPoint","panel","panels","pn","isTargetByCursor","getPanelByCover","covers","originalLength","areas","trigger","isEnd","shouldShowCover","getTrackEnds","createBaseRectCover","rectRangeConverter","edgeNameSequences","makeStyle","drift","driftRect","ondragend","nameSequence","updateBaseRect","localRange","handleSize","xa","ya","x2a","y2a","widtha","heighta","updateRectShape","mainEl","globalDir","getGlobalDirection1","getGlobalDirection2","pointsToRect","clipByPanel","formatRectRange","getTransform","localDirName","inverseMap","localDirNameSeq","dirNameSequence","rectRange","toRectRange","localDelta","toLocalDelta","dirName","ind","fromRectRange","driftPolygon","localD","localZero","xmin","ymin","xmax","ymax","resetCursor","isOutsideZrArea","currPanel","_dragging","setCursorStyle","preventDefault","rawE","mainShapeContain","updateCoverByMouse","eventParams","_creatingPanel","thisBrushOption","determineBrushType","coverBrushOption","getCreatingRange","defaultBrushType","handleDragEnd","lineX","getLineRenderer","lineY","returnInput","localTrack","ends","xyIndex","otherExtent","getLinearBrushOtherExtent","makeRectPanelClipPath","normalizeRect","localPoints","makeLinearBrushOtherExtent","specifiedXYIndex","brushWidth","base","makeRectIsTargetByCursor","targetModel","elementList","ParallelAxisView","_brushController","_onBrush","fromAxisAreaSelect","oldAxisGroup","_axisGroup","coordSysModel","getCoordSysModel","areaSelectStyle","areaWidth","builderOpt","strokeContainThreshold","_refreshBrushController","getExtent","extentLen","extra","getCoverInfoList","eventParam","coverInfoList","coverInfo","realtime","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","localX","localY","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","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","transInit","updateMethod","initBaseline","boxplotVisual","boxplotLayout","groupSeriesByAxis","groupItem","seriesModels","calculateBase","layoutSingleSeries","boxOffsetList","boxWidthList","axisList","baseAxis","bandWidth","seriesCount","boundList","getBandWidth","maxDataCount_1","boxWidthBound","boxGap","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","setLargeStyle","sign","CandlestickSeriesModel","getShadowDim","brushRect","color0","borderColor0","barMaxWidth","barMinWidth","barWidth","progressiveChunkMode","CandlestickSeries","candlestickPreprocessor","seriesItem","positiveBorderColorQuery","negativeBorderColorQuery","positiveColorQuery","negativeColorQuery","candlestickVisual","plan","createRenderPlanner","performRawSeries","getColor","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","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","symbolStyle","setScale","showEffectOn","EffectScatterView","effectSymbolDraw","_updateGroupTransform","EffectScatterSeriesModel","effectType","rippleEffect","EffectScatterSeries","EffectLine","_updateEffectSymbol","effectModel","_symbolType","_symbolScale","_updateEffectAnimation","constantSpeed","delayExpr","_updateAnimationPoints","_getLineLength","_period","_loop","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","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","labelRect","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","labelEl","DATA_NAME_INDEX","ThemeRiverSeriesModel","fixData","rawDataLength","timeValueKeys","layerData","dataList","layerNum","timeValue","singleAxisModel","filterData","nameList","dimensionsDefine","single","lenCount","indexArr","timeDim","layerSeries","index1","index2","getAxisTooltipData","nestestValue","minDist","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","isNormal","isShown","sectorState","labelColor","labelPadding","rotateType","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","lineHeight","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","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","targetEl","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","stateObj","existingEmphasisState","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","labelStyle","preFetchFromExtra","applyUserPropsAfter","style_1","getCurrentSeriesIndices","encodeDef","isExtraCoord","coordDimIndex","existsEl","doCreateOrUpdateEl","toBeReplacedIdx","doesElNeedRecreate","childrenRef","clearStates","morph","conOpt","isLegacy","doCreateOrUpdateAttachedTx","doCreateOrUpdateClipPath","otherStateOpt","otherStyleOpt","retrieveStyleOptionOnState","replaceAt","elInner","elOptionType","elOptionShape","elOptionStyle","isUniversalTransitionEnabled","hasOwnPathData","clipPathOpt","getClipPath","processTxInfo","txConOptNormal","txConOptEmphasis","txConOptBlur","txConOptSelect","txConStlOptNormal","txConOptOtherState","stateOpt","txConOpt","convertResult","txConOptNormal_1","stateOptionNormal","stateOption","mergeChildren","$mergeChildren","byName","diffChildrenByName","notMerge","diffGroupChildren","childCount","processAddUpdate","processRemove","childOption","PolarAxisPointer","makeElOption","axisPointerModel","animationThreshold","otherAxis","coordValue","axisPointerType","elStyle","viewHelper","pointerOption","pointerShapeBuilder","graphicKey","pointer","labelMargin","labelPos","getLabelPosition","BaseAxisPointer","axisAngle","labelRotation","innerTextLayout","shadow","PolarModel","findAxisModel","foundAxisModel","PolarAxisModel","AngleAxisModel","RadiusAxisModel","RadiusAxis","radiusToData","AngleAxis","angleExtent","calculateCategoryInterval","ordinalScale","ordinalExtent","tickCount","tickValue","unitSpan","unitH","maxH","cache","lastAutoInterval","lastTickCount","angleToData","polarDimensions","Polar","_radiusAxis","_angleAxis","axisPointerEnabled","pointToCoord","containData","getAxes","getAxesByScale","scaleType","getTooltipAxes","baseAxes","otherAxes","maxAngle","RADIAN","d2","polarModel","resizePolar","parsedRadius","updatePolarScale","isAngleAxisModel","setAxis","polarCreator","polarList","radiusAxisModel","angleAxisModel","getAxisLineShape","rExtent","getRadiusIdx","fixAngleOverlap","firstItem","lastItem","AngleAxisView","axisPointerClass","ticksAngles","minorTickAngles","getMinorTicksCoords","labels","getViewLabels","labelItem","getRawOrdinalNumber","isBlank","angelAxisElementsBuilders","AxisView","rId","r0Id","tickModel","tickLen","lines","tickAngleItem","minorTick","tickAngles","minorTickModel","rawCategoryData","getCategories","commonLabelModel","labelTextAlign","labelTextVerticalAlign","rawCategoryItem","isLabelSilent","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","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","tmp","firstDayPoints","yyyy","yy","MM","M","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","SelectDataZoomModel","DataZoomModel","SelectDataZoomView","DataZoomView","SelectZoomModel","SelectZoomView","installCommon","ToolboxFeature","registerFeature","ctor","getFeature","ToolboxModel","feature","featureOpt","featureName","Feature","getDefaultOption","itemGap","showTitle","iconStyle","ToolboxView","toolboxModel","isVertical","featureOpts","_features","featureNames","_featureNames","processFeature","listComponent","titleText","__title","emphasisTextConfig","emphasisTextState","emphasisTextStyle","makeFont","needPutOnTop","topOffset","oldName","featureModel","newTitle","title","isUserFeatureName","isToolboxFeature","unusable","createIconPaths","setIconStatus","iconName","iconPaths","iconStatus","iconsMap","titlesMap","iconStyleModel","iconStyleEmphasisModel","icons","getIcons","titles","iconStr","formatterParamsExtra","hoverStyle","defaultTextPosition","enterEmphasis","leaveEmphasis","hide","updateView","SaveAsImage","getConnectedDataURL","connectedBackgroundColor","excludeComponents","pixelRatio","browser","env","MouseEvent","newEdge","ie","$a","download","evt","defaultView","bubbles","cancelable","dispatchEvent","window","navigator","msSaveOrOpenBlob","parts","base64Encoded","bstr","decodeURIComponent","atob","filename","u8arr","Uint8Array","blob","Blob","body","cw","contentWindow","doc","open","write","execCommand","lang","html","tab","INNER_STACK_KEYWORD","radioTypes","MagicType","availableIcons","seriesOptGenreator","generateNewSeriesTypes","newSeriesOpt","categoryAxis","radio","currentType","tiled","markPoint","markLine","isStack","echarts","BLOCK_SPLITER","ITEM_SPLITER","groupSeries","seriesGroupByCategoryAxis","otherSeries","meta","eachRawSeries","other","assembleSeriesWithCategoryAxis","groups","tables","valueAxisDim","headers","columns","assembleOtherSeries","argLen","getContentFromModel","trim","isTSVFormat","block","firstLine","itemSplitRegex","RegExp","parseTSVContents","tsv","tsvLines","parseListContents","hasName","parseContents","blockMetaList","blockMeta","DataView","container","getDom","_dom","viewMain","textarea","optionToContent","contentToOption","htmlOrDom","getOption","readOnly","buttonContainer","buttonStyle","closeButton","refreshButton","clientHeight","textColor","textareaColor","textareaBorderColor","buttonColor","buttonTextColor","tryMergeDataOption","newData","original","newValIsObject","shouldDeleteName","newSeriesOptList","getSeriesByName","newSnapshot","storedSnapshots","getStoreSnapshots","batchItem","dataZoomId","snapshot","dataZoomModel","percentRange","getPercentRange","snapshots","RestoreOption","resetOption","Restore","INCLUDE_FINDER_MAIN_TYPES","BrushTargetManager","_targetInfoList","foundCpts","parseFinder","targetInfoBuilders","builder","include","setOutputRanges","matchOutputRanges","coordRange","coordRanges","coordConvert","__rangeOffset","diffProcessor","xyMinMax","findTargetInfo","coordSyses","setInputRanges","rangeOffset","getScales","makePanelOpts","getDefaultBrushType","getPanelRect","controlSeries","targetInfoList","areaPanelId","targetInfoMatchers","formatMinMax","minMax","includeMainTypes","grid","xAxisModels","yAxisModels","gridModels","gridModelMap","xAxesHas","yAxesHas","gridModel","cartesians","getCartesians","panelRectBuilders","xAxisDeclared","yAxisDeclared","geoModels","axisConvert","rangeOrCoordRange","xminymin","xmaxymax","axisNameIndex","axisDiffProcessor","refer","scales","xyMinMaxCurr","xyMinMaxOrigin","sizeCurr","getSize","sizeOrigin","DATA_ZOOM_ID_BASE","DataZoomFeature","updateZoomBtnStatus","updateBackBtnStatus","brushTargetManager","makeAxisFinder","setBatch","_dispatchZoomAction","findDataZoom","minMaxSpan","findRepresentativeAxisProxy","getMinMaxSpan","minValueSpan","maxValueSpan","startValue","endValue","found","dzModel","has","getAxisModel","batch","filterMode","back","nextActive","_isZoomActive","dataZoomSelectActive","dzFeatureModel","setting","xAxisId","yAxisId","zoomActive","featureDataZoomPath","dzOptions","finderResult","buildInternalOptions","axisMainType","axisIndexPropName","newOpt","$fromToolbox","DataZoom","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","getLineSelectors","inLineRange","layoutRange","STATE_LIST","DISPATCH_METHOD","DISPATCH_FLAG","layoutCovers","brushModel","brushVisual","throttleType","throttleDelay","brushSelected","setBrushOption","brushIndex","thisBrushSelected","brushId","brushName","brushLink","linkedSeriesMap","selectedDataIndexForLink","rangeInfoBySeries","hasBrushExists","boundingRectBuilders","selectableArea","linkOthers","brushed","rangeInfoList","stepAParallel","stepAOthers","brushModelNotControll","checkInRange","seriesBrushSelected","doDispatch","fn","throttle","isDisposed","seriesIndices","getBoundingRectFromMinMax","rg","BrushView","updateVisual","$from","modelId","DEFAULT_OUT_OF_BRUSH_COLOR","BrushModel","inBrush","outOfBrush","setAreas","generateBrushOption","BrushFeature","isBrushed","_brushMode","command","keep","Brush","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","playState","makeBtn","willRotate","iconSize","btn","makeControlIcon","rectHover","_handlePlayClick","_renderCurrentPointer","pointerModel","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","replaceMerge","timelinePreprocessor","timelineOpt","timeline","compatibleEC2","ec2Types","transferItem","itemStyleEmphasis","labelNormal","excludeLabelAttr","registerSubTypeDefaulter","checkMarkerInSeries","seriesOpts","seriesOptArr","fillLabel","MarkerModel","createdBySelf","_mergeOption","hostSeries","__hostSeries","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","MarkLineModel","markLineTransform","mlModel","itemArray","mlType","baseIndex","mlFrom","mlTo","normalizedItem","isInifinity","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","MarkAreaModel","markAreaTransform","maModel","lt","rb","ltCoord","rbCoord","ifMarkAreaHasOnlyDim","markAreaFilter","item0","getSingleMarkerEndPoint","clampData","dimPermutations","MarkAreaView","markAreaModel","areaData_1","areaGroupMap","polygonGroup","areaData","xAxisScale","yAxisScale","xPointExtent","yPointExtent","overlapped","allClipped","coordDimsInfos_1","markArea","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","dataInterval","findTargetDataIndices","oVals","getColorStopValues","iVals","stops","setStop","iIdx","oIdx","iLen","oLen","first","stopsLen","outerColors","calculable","hoverLink","handleIcon","handleStyle","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","highlightKey","HOVER_LINK_SIZE","HOVER_LINK_OUT","ContinuousView","_shapes","_dataInterval","_handleEnds","_hoverLinkDataIndices","_buildView","_useHandle","_resetInterval","_renderBar","dataRangeText","_renderEndsText","_updateView","_enableHoverLinkToSeries","_enableHoverLinkFromSeries","endsIndex","barGroup","_applyTransform","shapes","useHandle","_createBarGroup","gradientBarGroup","createPolygon","getCursor","_dragHandle","textSize","handleThumbs","handleLabels","handleLabelPoints","_createHandle","_createIndicator","handleIndex","onDrift","onDragEnd","handleThumb","onmousemove","handleLabel","stateTransition","handleLabelPoint","indicatorLabel","indicatorLabelPoint","_firstShowIndicator","_updateInterval","_hideIndicator","visualMapId","_hovering","_clearHoverLinkToSeries","useHoverLinkOnHandle","_doHoverLinkToSeries","handleEnds","forSketch","outOfRangeHandleEnds","inRangeHandleEnds","visualInRange","_createBarVisual","visualOutOfRange","barColor","barPoints","_updateHandle","_makeColorGradient","symbolSizes","_createBarPoints","handlesColor","sampleNumber","currValue","textPoint","_showIndicator","cursorValue","rangeSymbol","halfHoverLinkSize","oldIndicatorPos","indicatorNewProps","labelNewProps","additive","enterBlur","_hoverLinkFromSeriesMouseOver","_clearHoverLinkFromSeries","cursorPos","hoverOnBar","getHalfHoverLinkSize","hoverRange","valueRange","oldBatch","newBatch","resultBatches","_dispatchHighDown","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","setLabel","decalModel","useDecal","paletteScopeGroupByType_1","isColorBySeries","decalScope","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","WindLevel","wv","level","WindLevel1","Getfengxiang","fx1","fx3","Getfengsu","fs1","fj","fs3"],"mappings":"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","file":"static/js/chunk-45746aa4.1f23cd15.js","sourcesContent":["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';\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 + (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 buitinShapesDef = {\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 = buitinShapesDef[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 if (!el.path) {\n el.createPathProxy();\n }\n var path = el.path;\n if (el.shapeChanged()) {\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}\nfunction 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}\nfunction setPattern(el, attrs, target, scope) {\n var val = el.style[target];\n var patternAttrs = {\n 'patternUnits': 'userSpaceOnUse'\n };\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 = (vNode.attrs.width = imageWidth_1 || img.width);\n var height = (vNode.attrs.height = imageHeight_1 || img.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 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 patternAttrs.patternTransform = getSRTTransformString(val);\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 } from './graphic.js';\nimport { createElement, createVNode, vNodeToString, getCssString, createBrushScope, createSVGVNode } from './core.js';\nimport { normalizeColor, encodeBase64 } from './helper.js';\nimport { extend, keys, logError, map, 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 bgColor = this._backgroundColor;\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 if (bgColor && bgColor !== 'none') {\n var _a = normalizeColor(bgColor), color = _a.color, opacity = _a.opacity;\n this._bgVNode = createVNode('rect', 'bg', {\n width: width,\n height: height,\n x: '0',\n y: '0',\n id: '0',\n fill: color,\n 'fill-opacity': opacity\n });\n children.push(this._bgVNode);\n }\n else {\n this._bgVNode = null;\n }\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 var bgVNode = this._bgVNode;\n if (bgVNode && bgVNode.elm) {\n var _a = normalizeColor(backgroundColor), color = _a.color, opacity = _a.opacity;\n bgVNode.elm.setAttribute('fill', color);\n if (opacity < 1) {\n bgVNode.elm.setAttribute('fill-opacity', opacity);\n }\n }\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 var svgDom = this._svgDom;\n if (svgDom) {\n svgDom.setAttribute('width', width);\n svgDom.setAttribute('height', height);\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 = encodeURIComponent(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,' + 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}\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);\n var center = seriesModel.get('center');\n var radius = seriesModel.get('radius');\n\n if (!zrUtil.isArray(radius)) {\n radius = [0, radius];\n }\n\n if (!zrUtil.isArray(center)) {\n center = [center, center];\n }\n\n var width = parsePercent(viewRect.width, api.getWidth());\n var height = parsePercent(viewRect.height, api.getHeight());\n var size = Math.min(width, height);\n var cx = parsePercent(center[0], width) + viewRect.x;\n var cy = parsePercent(center[1], height) + viewRect.y;\n var r0 = parsePercent(radius[0], size / 2);\n var r = parsePercent(radius[1], size / 2);\n 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 backgroud.\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 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/basicTrasition.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*/\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 { getPercentWithPrecision } from '../../util/number.js';\nimport { makeSeriesEncodeForNameBased } from '../../data/helper/sourceHelper.js';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider.js';\nimport SeriesModel from '../../model/Series.js';\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();\n\n var params = _super.prototype.getDataParams.call(this, dataIndex); // FIXME toFixed?\n\n\n var valueList = [];\n data.each(data.mapDimension('value'), function (value) {\n valueList.push(value);\n });\n params.percent = getPercentWithPrecision(valueList, dataIndex, data.hostModel.get('percentPrecision'));\n params.$vars.push('percent');\n return params;\n };\n\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 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/basicTrasition.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*/\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}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar IRRELEVANT_EXCLUDES = {\n 'axisPointer': 1,\n 'tooltip': 1,\n 'brush': 1\n};\n/**\n * Avoid that: mouse click on a elements that is over geo or graph,\n * but roam is triggered.\n */\n\nexport function onIrrelevantElement(e, api, targetCoordSysModel) {\n var model = api.getComponentByElement(e.topTarget); // If model is axisModel, it works only if it is injected with coordinateSystem.\n\n var coordSys = model && model.coordinateSystem;\n return model && model !== targetCoordSysModel && !IRRELEVANT_EXCLUDES.hasOwnProperty(model.mainType) && coordSys && coordSys.model !== targetCoordSysModel;\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","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 becuase 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 suport `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// 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` becuase `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`, becuase\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 rigionGroup\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. Becuause 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 drawed map\n this._mapDraw && this._mapDraw.remove();\n this._mapDraw = null;\n }\n } else {\n var mapDraw = this._mapDraw;\n mapDraw && group.add(mapDraw.group);\n }\n\n mapModel.get('showLegendSymbol') && ecModel.getComponent('legend') && this._renderSymbols(mapModel, ecModel, api);\n };\n\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 begining, and this scenario is rarely encountered.\n // So it won't be fixed until 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 wan't to put map in a fixed size box with right aspect ratio\n // This two properties may more conveninet\n // layoutCenter: [50%, 50%]\n // layoutSize: 100\n 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; // Becuase roamTransformabel has `originX/originY` modified,\n // but the caller of `getTransformInfo` can not handle `originX/originY`,\n // so need to recalcualte 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 longitute 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 // Longitute is inverted\n rect.y = -rect.y - rect.height;\n }\n\n var rawTransformable = this._rawTransformable;\n rawTransformable.transform = rect.calculateTransform(new BoundingRect(x, y, width, height));\n 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); // calcualte 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 wan't to put map in a fixed size box with right aspect ratio\n // This two properties may more conveninet\n // layoutCenter: [50%, 50%]\n // layoutSize: 100\n silent: false,\n // Map type\n map: '',\n // Define left-top, right-bottom coords to control view\n // For example, [ [180, 90], [-180, -90] ]\n boundingCoords: null,\n // Default on center of map\n center: null,\n zoom: 1,\n scaleLimit: null,\n // selectedMode: false\n label: {\n show: false,\n color: '#000'\n },\n itemStyle: {\n 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 embeded for some of the code in this file:\n* The tree layoutHelper implementation was originally copied from\n* \"d3.js\"(https://github.com/d3/d3-hierarchy) with\n* some modifications made for this project.\n* (see more details in the comment of the specific method below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the licence of \"d3.js\" (BSD-3Clause, see\n* ).\n*/\n\n/**\n * @file The layout algorithm of node-link tree diagrams. Here we using Reingold-Tilford algorithm to drawing\n * the tree.\n */\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 an virtual root\n var root = {\n name: option.name,\n children: option.data\n };\n var leaves = option.leaves || {};\n var leavesModel = new Model(leaves, this, this.ecModel);\n var tree = Tree.createTree(root, this, beforeLink);\n\n function beforeLink(nodeData) {\n nodeData.wrapMethod('getItemModel', function (model, idx) {\n var node = tree.getNodeByDataIndex(idx);\n\n if (!(node && 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 },\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 { Z2_EMPHASIS_LIFT } from '../../util/states.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'); // let emphasisStyleModel = model.getModel('emphasis.itemStyle');\n\n var textStyleModel = normalStyleModel.getModel('textStyle');\n var layoutParam = {\n pos: {\n left: model.get('left'),\n right: model.get('right'),\n top: model.get('top'),\n bottom: model.get('bottom')\n },\n box: {\n width: api.getWidth(),\n height: api.getHeight()\n },\n emptyItemWidth: model.get('emptyItemWidth'),\n totalWidth: 0,\n renderList: []\n };\n\n this._prepare(targetNode, layoutParam, textStyleModel);\n\n this._renderContent(seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect);\n\n layout.positionElement(thisGroup, layoutParam.pos, layoutParam.box);\n };\n /**\n * 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, textStyleModel, onSelect) {\n // Start rendering.\n var lastX = 0;\n var emptyItemWidth = layoutParam.emptyItemWidth;\n var height = seriesModel.get(['breadcrumb', 'height']);\n var availableSize = layout.getAvailableSize(layoutParam.pos, layoutParam.box);\n var totalWidth = layoutParam.totalWidth;\n var renderList = layoutParam.renderList;\n\n for (var i = renderList.length - 1; i >= 0; i--) {\n var item = renderList[i];\n var itemNode = item.node;\n var itemWidth = item.width;\n var text = item.text; // Hdie text and shorten width if necessary.\n\n if (totalWidth > availableSize.width) {\n totalWidth -= itemWidth - emptyItemWidth;\n itemWidth = emptyItemWidth;\n text = null;\n }\n\n var el = new graphic.Polygon({\n shape: {\n points: makeItemPoints(lastX, 0, itemWidth, height, i === renderList.length - 1, i === 0)\n },\n style: defaults(normalStyleModel.getItemStyle(), {\n lineJoin: 'bevel'\n }),\n textContent: new graphic.Text({\n style: {\n text: text,\n fill: textStyleModel.getTextColor(),\n font: textStyleModel.getFont()\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 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 can not find all of the old graphic\n // elements from tree. So we use this stragegy: make element storage, move\n // from old storage to new storage, clear old storage.\n\n\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, dont use 'getBoundingRect'.\n\n if (shape.x <= point[0] && point[0] <= shape.x + shape.width && shape.y <= point[1] && point[1] <= shape.y + shape.height) {\n targetInfo = {\n node: node,\n offsetX: point[0],\n offsetY: point[1]\n };\n } else {\n return false; // Suppress visit subtree.\n }\n }\n }, this);\n return targetInfo;\n };\n\n 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 can not set all backgroud with the same z, Because the behaviour of\n// drill down and roll up differ background creation sequence from tree\n// hierarchy sequence, which cause that lowser background element overlap\n// upper ones. So we calculate z based on depth.\n// Moreover, we try to shrink down z interval to [0, 1] to avoid that\n// treemap with large z overlaps other components.\n\n\nfunction 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 * Convinent 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 dont have the attribute 'colorRange', but only use\n// attribute 'color' to represent both concepts of 'colorRange' and 'color',\n// (It means 'colorRange' when 'color' is Array, means 'color' when not array),\n// this problem will be encountered:\n// If a level-1 node dont have children, and its siblings has children,\n// and colorRange is set on level-1, then the node can not be colored.\n// So we separate 'colorRange' and 'color' to different attributes.\n\n\nfunction getRangeVisual(nodeModel, name) {\n // 'colorRange', 'colorARange', 'colorSRange'.\n // If not exsits on this node, fetch from levels and series.\n var range = nodeModel.get(name);\n return isArray(range) && range.length ? {\n name: name,\n range: range\n } : null;\n}\n\nfunction mapVisual(nodeModel, visuals, child, index, mapping, seriesModel) {\n var childVisuals = 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 embeded for some of the code in this file:\n* The treemap layout implementation was originally copied from\n* \"d3.js\" with some modifications made for this project.\n* (See more details in the comment of the method \"squarify\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* ).\n*/\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 whold width and heigth by target node.\n var currNode = (targetInfo || {}).node;\n var defaultSize = [containerWidth, containerHeight];\n\n if (!currNode || currNode === viewRoot) {\n return defaultSize;\n }\n\n var parent;\n var viewArea = containerWidth * containerHeight;\n var area = viewArea * seriesModel.option.zoomToNodeRatio;\n\n while (parent = currNode.parentNode) {\n // jshint ignore:line\n var sum = 0;\n var siblings = parent.children;\n\n for (var i = 0, len = siblings.length; i < len; i++) {\n sum += siblings[i].getValue();\n }\n\n var currNodeValue = currNode.getValue();\n\n if (currNodeValue === 0) {\n return defaultSize;\n }\n\n area *= sum / currNodeValue; // Considering border, suppose aspect ratio is 1.\n\n var parentModel = parent.getModel();\n var borderWidth = parentModel.get(PATH_BORDER_WIDTH);\n var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel));\n area += 4 * borderWidth * borderWidth + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5);\n area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER);\n currNode = parent;\n }\n\n area < viewArea && (area = viewArea);\n var scale = Math.pow(area / viewArea, 0.5);\n return [containerWidth * scale, containerHeight * scale];\n} // Root postion base on coord of containerGroup\n\n\nfunction calculateRootPosition(layoutInfo, rootRect, targetInfo) {\n if (rootRect) {\n return {\n x: rootRect.x,\n y: rootRect.y\n };\n }\n\n var defaultPosition = {\n x: 0,\n y: 0\n };\n\n if (!targetInfo) {\n return defaultPosition;\n } // If targetInfo is fetched by 'retrieveTargetInfo',\n // old tree and new tree are the same tree,\n // so the node still exists and we can visit it.\n\n\n var targetNode = targetInfo.node;\n var layout = targetNode.getLayout();\n\n if (!layout) {\n return defaultPosition;\n } // Transform coord from local to container.\n\n\n var targetCenter = [layout.width / 2, layout.height / 2];\n var node = targetNode;\n\n while (node) {\n var nodeLayout = node.getLayout();\n targetCenter[0] += nodeLayout.x;\n targetCenter[1] += nodeLayout.y;\n node = node.parentNode;\n }\n\n return {\n x: layoutInfo.width / 2 - targetCenter[0],\n y: layoutInfo.height / 2 - targetCenter[1]\n };\n} // Mark nodes visible for prunning when visual coding and rendering.\n// Prunning depends on layout and root position, so we have to do it after layout.\n\n\nfunction prunning(node, clipRect, viewAbovePath, viewRoot, depth) {\n var nodeLayout = node.getLayout();\n var nodeInViewAbovePath = viewAbovePath[depth];\n var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node;\n\n if (nodeInViewAbovePath && !isAboveViewRoot || depth === viewAbovePath.length && node !== viewRoot) {\n return;\n }\n\n node.setLayout({\n // isInView means: viewRoot sub tree + viewAbovePath\n isInView: true,\n // invisible only means: outside view clip so that the node can not\n // see but still layout for animation preparation but not render.\n invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout),\n isAboveViewRoot: isAboveViewRoot\n }, true); // Transform to child coordinate.\n\n var childClipRect = new BoundingRect(clipRect.x - nodeLayout.x, clipRect.y - nodeLayout.y, clipRect.width, clipRect.height);\n each(node.viewChildren || [], function (child) {\n prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1);\n });\n}\n\nfunction getUpperLabelHeight(model) {\n return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.type !== 'view') {\n return;\n }\n\n var rect = coordSys.getBoundingRect();\n var nodeData = seriesModel.getData();\n var graph = nodeData.graph;\n var cx = rect.width / 2 + rect.x;\n var cy = rect.height / 2 + rect.y;\n var r = Math.min(rect.width, rect.height) / 2;\n var count = nodeData.count();\n nodeData.setLayout({\n cx: cx,\n cy: cy\n });\n\n if (!count) {\n return;\n }\n\n _layoutNodesBasedOn[basedOn](seriesModel, 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;\n node.setLayout([r * Math.cos(angle) + cx, r * Math.sin(angle) + cy]);\n angle += radianHalf;\n });\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 embeded for some of the code in this file:\n* Some formulas were originally copied from \"d3.js\" with some\n* modifications made for this project.\n* (See more details in the comment of the method \"step\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* ).\n*/\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 * as zrUtil from 'zrender/lib/core/util.js';\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';\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 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 () {\n if (forceLayout) {\n forceLayout.warmUp();\n !_this._layouting && _this._startForceLayoutIteration(forceLayout, layoutAnimation);\n forceLayout.setFixed(idx); // Write position back to layout\n\n data.setItemLayout(idx, [el.x, el.y]);\n }\n }).on('dragend', function () {\n if (forceLayout) {\n forceLayout.setUnfixed(idx);\n }\n });\n }\n\n el.setDraggable(draggable && !!forceLayout, !!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.eachItemGraphicEl(function (el, idx) {\n var itemModel = data.getItemModel(idx);\n var labelRotate = itemModel.get(['label', 'rotate']) || 0;\n var symbolPath = el.getSymbolPath();\n\n if (circularRotateLabel) {\n var pos = data.getItemLayout(idx);\n var rad = Math.atan2(pos[1] - cy, pos[0] - cx);\n\n if (rad < 0) {\n rad = Math.PI * 2 + rad;\n }\n\n var isLeft = pos[0] < cx;\n\n if (isLeft) {\n rad = rad - Math.PI;\n }\n\n var textPosition = isLeft ? 'left' : 'right';\n 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 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 * 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/basicTrasition.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/basicTrasition.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, cancle 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 // Cancle the last trigger, in case that mouse slide out of the area quickly.\n : {\n axisExpandWindow: result.axisExpandWindow,\n // Jumping uses animation, and sliding suppresses animation.\n animation: behavior === 'jump' ? null : {\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 } // Conver the point from global to expand coordinates.\n\n\n var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos; // For dragging operation convenience, the window should not be\n // slided when mouse is the center area of the window.\n\n var delta;\n var behavior = 'slide';\n var axisCollapseWidth = layoutInfo.axisCollapseWidth;\n\n var triggerArea = this._model.get('axisExpandSlideTriggerArea'); // But consider touch device, jump is necessary.\n\n\n var useJump = triggerArea[0] != null;\n\n if (axisCollapseWidth) {\n if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) {\n behavior = 'jump';\n delta = pointCoord - winSize * triggerArea[2];\n } else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) {\n behavior = 'jump';\n delta = pointCoord - winSize * (1 - triggerArea[2]);\n } else {\n (delta = pointCoord - winSize * triggerArea[1]) >= 0 && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0 && (delta = 0);\n }\n\n delta *= layoutInfo.axisExpandWidth / axisCollapseWidth;\n delta ? sliderMove(delta, axisExpandWindow, extent, 'all') // Avoid nonsense triger on mousemove.\n : behavior = 'none';\n } // When screen is too narrow, make it visible and slidable, although it is hard to interact.\n else {\n var 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 { curry, each, map, bind, merge, clone, defaults, assert } from 'zrender/lib/core/util.js';\nimport Eventful from 'zrender/lib/core/Eventful.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as interactionMutex from './interactionMutex.js';\nimport DataDiffer from '../../data/DataDiffer.js';\nvar BRUSH_PANEL_GLOBAL = true;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathPow = Math.pow;\nvar COVER_Z = 10000;\nvar UNSELECT_THRESHOLD = 6;\nvar MIN_RESIZE_LINE_WIDTH = 6;\nvar MUTEX_RESOURCE_KEY = 'globalPan';\nvar DIRECTION_MAP = {\n w: [0, 0],\n e: [0, 1],\n n: [1, 0],\n s: [1, 1]\n};\nvar CURSOR_MAP = {\n w: 'ew',\n e: 'ew',\n n: 'ns',\n s: 'ns',\n ne: 'nesw',\n sw: 'nesw',\n nw: 'nwse',\n se: 'nwse'\n};\nvar DEFAULT_BRUSH_OPT = {\n brushStyle: {\n lineWidth: 2,\n stroke: 'rgba(210,219,238,0.3)',\n fill: '#D2DBEE'\n },\n transformable: true,\n brushMode: 'single',\n removeOnClick: false\n};\nvar baseUID = 0;\n/**\n * params:\n * areas: Array., coord relates to container group,\n * If no container specified, to global.\n * opt {\n * isEnd: boolean,\n * removeOnClick: boolean\n * }\n */\n\nvar BrushController =\n/** @class */\nfunction (_super) {\n __extends(BrushController, _super);\n\n function BrushController(zr) {\n var _this = _super.call(this) || this;\n /**\n * @internal\n */\n\n\n _this._track = [];\n /**\n * @internal\n */\n\n _this._covers = [];\n _this._handlers = {};\n\n if (process.env.NODE_ENV !== 'production') {\n assert(zr);\n }\n\n _this._zr = zr;\n _this.group = new graphic.Group();\n _this._uid = 'brushController_' + baseUID++;\n each(pointerHandlers, function (handler, eventName) {\n this._handlers[eventName] = bind(handler, this);\n }, _this);\n return _this;\n }\n /**\n * If set to `false`, select disabled.\n */\n\n\n BrushController.prototype.enableBrush = function (brushOption) {\n if (process.env.NODE_ENV !== 'production') {\n assert(this._mounted);\n }\n\n this._brushType && this._doDisableBrush();\n brushOption.brushType && this._doEnableBrush(brushOption);\n return this;\n };\n\n BrushController.prototype._doEnableBrush = function (brushOption) {\n var zr = this._zr; // Consider roam, which takes globalPan too.\n\n if (!this._enableGlobalPan) {\n interactionMutex.take(zr, MUTEX_RESOURCE_KEY, this._uid);\n }\n\n each(this._handlers, function (handler, eventName) {\n zr.on(eventName, handler);\n });\n this._brushType = brushOption.brushType;\n this._brushOption = merge(clone(DEFAULT_BRUSH_OPT), brushOption, true);\n };\n\n BrushController.prototype._doDisableBrush = function () {\n var zr = this._zr;\n interactionMutex.release(zr, MUTEX_RESOURCE_KEY, this._uid);\n each(this._handlers, function (handler, eventName) {\n zr.off(eventName, handler);\n });\n this._brushType = this._brushOption = null;\n };\n /**\n * @param panelOpts If not pass, it is global brush.\n */\n\n\n BrushController.prototype.setPanels = function (panelOpts) {\n if (panelOpts && panelOpts.length) {\n var panels_1 = this._panels = {};\n each(panelOpts, function (panelOpts) {\n panels_1[panelOpts.panelId] = clone(panelOpts);\n });\n } else {\n this._panels = null;\n }\n\n return this;\n };\n\n BrushController.prototype.mount = function (opt) {\n opt = opt || {};\n\n if (process.env.NODE_ENV !== 'production') {\n this._mounted = true; // should be at first.\n }\n\n this._enableGlobalPan = opt.enableGlobalPan;\n var thisGroup = this.group;\n\n this._zr.add(thisGroup);\n\n thisGroup.attr({\n x: opt.x || 0,\n y: opt.y || 0,\n rotation: opt.rotation || 0,\n scaleX: opt.scaleX || 1,\n scaleY: opt.scaleY || 1\n });\n this._transform = thisGroup.getLocalTransform();\n return this;\n }; // eachCover(cb, context): void {\n // each(this._covers, cb, context);\n // }\n\n /**\n * Update covers.\n * @param coverConfigList\n * If coverConfigList is null/undefined, all covers removed.\n */\n\n\n BrushController.prototype.updateCovers = function (coverConfigList) {\n if (process.env.NODE_ENV !== 'production') {\n assert(this._mounted);\n }\n\n coverConfigList = map(coverConfigList, function (coverConfig) {\n return merge(clone(DEFAULT_BRUSH_OPT), coverConfig, true);\n });\n var tmpIdPrefix = '\\0-brush-index-';\n var oldCovers = this._covers;\n var newCovers = this._covers = [];\n var controller = this;\n var creatingCover = this._creatingCover;\n new DataDiffer(oldCovers, coverConfigList, oldGetKey, getKey).add(addOrUpdate).update(addOrUpdate).remove(remove).execute();\n return this;\n\n function getKey(brushOption, index) {\n return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index) + '-' + brushOption.brushType;\n }\n\n function oldGetKey(cover, index) {\n return getKey(cover.__brushOption, index);\n }\n\n function addOrUpdate(newIndex, oldIndex) {\n var newBrushInternal = coverConfigList[newIndex]; // Consider setOption in event listener of brushSelect,\n // where updating cover when creating should be forbiden.\n\n if (oldIndex != null && oldCovers[oldIndex] === creatingCover) {\n newCovers[newIndex] = oldCovers[oldIndex];\n } else {\n var cover = newCovers[newIndex] = oldIndex != null ? (oldCovers[oldIndex].__brushOption = newBrushInternal, oldCovers[oldIndex]) : endCreating(controller, createCover(controller, newBrushInternal));\n updateCoverAfterCreation(controller, cover);\n }\n }\n\n function remove(oldIndex) {\n if (oldCovers[oldIndex] !== creatingCover) {\n controller.group.remove(oldCovers[oldIndex]);\n }\n }\n };\n\n BrushController.prototype.unmount = function () {\n if (process.env.NODE_ENV !== 'production') {\n if (!this._mounted) {\n return;\n }\n }\n\n this.enableBrush(false); // container may 'removeAll' outside.\n\n clearCovers(this);\n\n this._zr.remove(this.group);\n\n if (process.env.NODE_ENV !== 'production') {\n this._mounted = false; // should be at last.\n }\n\n return this;\n };\n\n BrushController.prototype.dispose = function () {\n this.unmount();\n this.off();\n };\n\n return BrushController;\n}(Eventful);\n\nfunction createCover(controller, brushOption) {\n var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption);\n cover.__brushOption = brushOption;\n updateZ(cover, brushOption);\n controller.group.add(cover);\n return cover;\n}\n\nfunction endCreating(controller, creatingCover) {\n var coverRenderer = getCoverRenderer(creatingCover);\n\n if (coverRenderer.endCreating) {\n coverRenderer.endCreating(controller, creatingCover);\n updateZ(creatingCover, creatingCover.__brushOption);\n }\n\n return creatingCover;\n}\n\nfunction updateCoverShape(controller, cover) {\n var brushOption = cover.__brushOption;\n getCoverRenderer(cover).updateCoverShape(controller, cover, brushOption.range, brushOption);\n}\n\nfunction updateZ(cover, brushOption) {\n var z = brushOption.z;\n z == null && (z = COVER_Z);\n cover.traverse(function (el) {\n el.z = z;\n el.z2 = z; // Consider in given container.\n });\n}\n\nfunction updateCoverAfterCreation(controller, cover) {\n getCoverRenderer(cover).updateCommon(controller, cover);\n updateCoverShape(controller, cover);\n}\n\nfunction getCoverRenderer(cover) {\n return coverRenderers[cover.__brushOption.brushType];\n} // return target panel or `true` (means global panel)\n\n\nfunction getPanelByPoint(controller, e, localCursorPoint) {\n var panels = controller._panels;\n\n if (!panels) {\n return BRUSH_PANEL_GLOBAL; // Global panel\n }\n\n var panel;\n var transform = controller._transform;\n each(panels, function (pn) {\n pn.isTargetByCursor(e, localCursorPoint, transform) && (panel = pn);\n });\n return panel;\n} // Return a panel or true\n\n\nfunction getPanelByCover(controller, cover) {\n var panels = controller._panels;\n\n if (!panels) {\n return BRUSH_PANEL_GLOBAL; // Global panel\n }\n\n var panelId = cover.__brushOption.panelId; // User may give cover without coord sys info,\n // which is then treated as global panel.\n\n return panelId != null ? panels[panelId] : BRUSH_PANEL_GLOBAL;\n}\n\nfunction clearCovers(controller) {\n var covers = controller._covers;\n var originalLength = covers.length;\n each(covers, function (cover) {\n controller.group.remove(cover);\n }, controller);\n covers.length = 0;\n return !!originalLength;\n}\n\nfunction trigger(controller, opt) {\n var areas = map(controller._covers, function (cover) {\n var brushOption = cover.__brushOption;\n var range = clone(brushOption.range);\n return {\n brushType: brushOption.brushType,\n panelId: brushOption.panelId,\n range: range\n };\n });\n controller.trigger('brush', {\n areas: areas,\n isEnd: !!opt.isEnd,\n removeOnClick: !!opt.removeOnClick\n });\n}\n\nfunction shouldShowCover(controller) {\n var track = controller._track;\n\n if (!track.length) {\n return false;\n }\n\n var p2 = track[track.length - 1];\n var p1 = track[0];\n var dx = p2[0] - p1[0];\n var dy = p2[1] - p1[1];\n var dist = mathPow(dx * dx + dy * dy, 0.5);\n return dist > UNSELECT_THRESHOLD;\n}\n\nfunction getTrackEnds(track) {\n var tail = track.length - 1;\n tail < 0 && (tail = 0);\n return [track[0], track[tail]];\n}\n\n;\n\nfunction createBaseRectCover(rectRangeConverter, controller, brushOption, edgeNameSequences) {\n var cover = new graphic.Group();\n cover.add(new graphic.Rect({\n name: 'main',\n style: makeStyle(brushOption),\n silent: true,\n draggable: true,\n cursor: 'move',\n drift: curry(driftRect, rectRangeConverter, controller, cover, ['n', 's', 'w', 'e']),\n ondragend: curry(trigger, controller, {\n isEnd: true\n })\n }));\n each(edgeNameSequences, function (nameSequence) {\n cover.add(new graphic.Rect({\n name: nameSequence.join(''),\n style: {\n opacity: 0\n },\n draggable: true,\n silent: true,\n invisible: true,\n drift: curry(driftRect, rectRangeConverter, controller, cover, nameSequence),\n ondragend: curry(trigger, controller, {\n isEnd: true\n })\n }));\n });\n return cover;\n}\n\nfunction updateBaseRect(controller, cover, localRange, brushOption) {\n var lineWidth = brushOption.brushStyle.lineWidth || 0;\n var handleSize = mathMax(lineWidth, MIN_RESIZE_LINE_WIDTH);\n var x = localRange[0][0];\n var y = localRange[1][0];\n var xa = x - lineWidth / 2;\n var ya = y - lineWidth / 2;\n var x2 = localRange[0][1];\n var y2 = localRange[1][1];\n var x2a = x2 - handleSize + lineWidth / 2;\n var y2a = y2 - handleSize + lineWidth / 2;\n var width = x2 - x;\n var height = y2 - y;\n var widtha = width + lineWidth;\n var heighta = height + lineWidth;\n updateRectShape(controller, cover, 'main', x, y, width, height);\n\n if (brushOption.transformable) {\n updateRectShape(controller, cover, 'w', xa, ya, handleSize, heighta);\n updateRectShape(controller, cover, 'e', x2a, ya, handleSize, heighta);\n updateRectShape(controller, cover, 'n', xa, ya, widtha, handleSize);\n updateRectShape(controller, cover, 's', xa, y2a, widtha, handleSize);\n updateRectShape(controller, cover, 'nw', xa, ya, handleSize, handleSize);\n updateRectShape(controller, cover, 'ne', x2a, ya, handleSize, handleSize);\n updateRectShape(controller, cover, 'sw', xa, y2a, handleSize, handleSize);\n updateRectShape(controller, cover, 'se', x2a, y2a, handleSize, handleSize);\n }\n}\n\nfunction updateCommon(controller, cover) {\n var brushOption = cover.__brushOption;\n var transformable = brushOption.transformable;\n var mainEl = cover.childAt(0);\n mainEl.useStyle(makeStyle(brushOption));\n mainEl.attr({\n silent: !transformable,\n cursor: transformable ? 'move' : 'default'\n });\n each([['w'], ['e'], ['n'], ['s'], ['s', 'e'], ['s', 'w'], ['n', 'e'], ['n', 'w']], function (nameSequence) {\n var el = cover.childOfName(nameSequence.join(''));\n var globalDir = nameSequence.length === 1 ? getGlobalDirection1(controller, nameSequence[0]) : getGlobalDirection2(controller, nameSequence);\n el && el.attr({\n silent: !transformable,\n invisible: !transformable,\n cursor: transformable ? CURSOR_MAP[globalDir] + '-resize' : null\n });\n });\n}\n\nfunction updateRectShape(controller, cover, name, x, y, w, h) {\n var el = cover.childOfName(name);\n el && el.setShape(pointsToRect(clipByPanel(controller, cover, [[x, y], [x + w, y + h]])));\n}\n\nfunction makeStyle(brushOption) {\n return defaults({\n strokeNoScale: true\n }, brushOption.brushStyle);\n}\n\nfunction formatRectRange(x, y, x2, y2) {\n var min = [mathMin(x, x2), mathMin(y, y2)];\n var max = [mathMax(x, x2), mathMax(y, y2)];\n return [[min[0], max[0]], [min[1], max[1]] // y range\n ];\n}\n\nfunction getTransform(controller) {\n return graphic.getTransform(controller.group);\n}\n\nfunction getGlobalDirection1(controller, localDirName) {\n var map = {\n w: 'left',\n e: 'right',\n n: 'top',\n s: 'bottom'\n };\n var inverseMap = {\n left: 'w',\n right: 'e',\n top: 'n',\n bottom: 's'\n };\n var dir = graphic.transformDirection(map[localDirName], getTransform(controller));\n return inverseMap[dir];\n}\n\nfunction getGlobalDirection2(controller, localDirNameSeq) {\n var globalDir = [getGlobalDirection1(controller, localDirNameSeq[0]), getGlobalDirection1(controller, localDirNameSeq[1])];\n (globalDir[0] === 'e' || globalDir[0] === 'w') && globalDir.reverse();\n return globalDir.join('');\n}\n\nfunction driftRect(rectRangeConverter, controller, cover, dirNameSequence, dx, dy) {\n var brushOption = cover.__brushOption;\n var rectRange = rectRangeConverter.toRectRange(brushOption.range);\n var localDelta = toLocalDelta(controller, dx, dy);\n each(dirNameSequence, function (dirName) {\n var ind = DIRECTION_MAP[dirName];\n rectRange[ind[0]][ind[1]] += localDelta[ind[0]];\n });\n brushOption.range = rectRangeConverter.fromRectRange(formatRectRange(rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1]));\n updateCoverAfterCreation(controller, cover);\n trigger(controller, {\n isEnd: false\n });\n}\n\nfunction driftPolygon(controller, cover, dx, dy) {\n var range = cover.__brushOption.range;\n var localDelta = toLocalDelta(controller, dx, dy);\n each(range, function (point) {\n point[0] += localDelta[0];\n point[1] += localDelta[1];\n });\n updateCoverAfterCreation(controller, cover);\n trigger(controller, {\n isEnd: false\n });\n}\n\nfunction toLocalDelta(controller, dx, dy) {\n var thisGroup = controller.group;\n var localD = thisGroup.transformCoordToLocal(dx, dy);\n var localZero = thisGroup.transformCoordToLocal(0, 0);\n return [localD[0] - localZero[0], localD[1] - localZero[1]];\n}\n\nfunction clipByPanel(controller, cover, data) {\n var panel = getPanelByCover(controller, cover);\n return panel && panel !== BRUSH_PANEL_GLOBAL ? panel.clipPath(data, controller._transform) : clone(data);\n}\n\nfunction pointsToRect(points) {\n var xmin = mathMin(points[0][0], points[1][0]);\n var ymin = mathMin(points[0][1], points[1][1]);\n var xmax = mathMax(points[0][0], points[1][0]);\n var ymax = mathMax(points[0][1], points[1][1]);\n return {\n x: xmin,\n y: ymin,\n width: xmax - xmin,\n height: ymax - ymin\n };\n}\n\nfunction resetCursor(controller, e, localCursorPoint) {\n if ( // Check active\n !controller._brushType // resetCursor should be always called when mouse is in zr area,\n // but not called when mouse is out of zr area to avoid bad influence\n // if `mousemove`, `mouseup` are triggered from `document` event.\n || isOutsideZrArea(controller, e.offsetX, e.offsetY)) {\n return;\n }\n\n var zr = controller._zr;\n var covers = controller._covers;\n var currPanel = getPanelByPoint(controller, e, localCursorPoint); // Check whether in covers.\n\n if (!controller._dragging) {\n for (var i = 0; i < covers.length; i++) {\n var brushOption = covers[i].__brushOption;\n\n if (currPanel && (currPanel === BRUSH_PANEL_GLOBAL || brushOption.panelId === currPanel.panelId) && coverRenderers[brushOption.brushType].contain(covers[i], localCursorPoint[0], localCursorPoint[1])) {\n // Use cursor style set on cover.\n return;\n }\n }\n }\n\n currPanel && zr.setCursorStyle('crosshair');\n}\n\nfunction preventDefault(e) {\n var rawE = e.event;\n rawE.preventDefault && rawE.preventDefault();\n}\n\nfunction mainShapeContain(cover, x, y) {\n return cover.childOfName('main').contain(x, y);\n}\n\nfunction updateCoverByMouse(controller, e, localCursorPoint, isEnd) {\n var creatingCover = controller._creatingCover;\n var panel = controller._creatingPanel;\n var thisBrushOption = controller._brushOption;\n var eventParams;\n\n controller._track.push(localCursorPoint.slice());\n\n if (shouldShowCover(controller) || creatingCover) {\n if (panel && !creatingCover) {\n thisBrushOption.brushMode === 'single' && clearCovers(controller);\n var brushOption = clone(thisBrushOption);\n brushOption.brushType = determineBrushType(brushOption.brushType, panel);\n brushOption.panelId = panel === BRUSH_PANEL_GLOBAL ? null : panel.panelId;\n creatingCover = controller._creatingCover = createCover(controller, brushOption);\n\n controller._covers.push(creatingCover);\n }\n\n if (creatingCover) {\n var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)];\n var coverBrushOption = creatingCover.__brushOption;\n coverBrushOption.range = coverRenderer.getCreatingRange(clipByPanel(controller, creatingCover, controller._track));\n\n if (isEnd) {\n endCreating(controller, creatingCover);\n coverRenderer.updateCommon(controller, creatingCover);\n }\n\n updateCoverShape(controller, creatingCover);\n eventParams = {\n isEnd: isEnd\n };\n }\n } else if (isEnd && thisBrushOption.brushMode === 'single' && thisBrushOption.removeOnClick) {\n // Help user to remove covers easily, only by a tiny drag, in 'single' mode.\n // But a single click do not clear covers, because user may have casual\n // clicks (for example, click on other component and do not expect covers\n // disappear).\n // Only some cover removed, trigger action, but not every click trigger action.\n if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) {\n eventParams = {\n isEnd: isEnd,\n removeOnClick: true\n };\n }\n }\n\n return eventParams;\n}\n\nfunction determineBrushType(brushType, panel) {\n if (brushType === 'auto') {\n if (process.env.NODE_ENV !== 'production') {\n assert(panel && panel.defaultBrushType, 'MUST have defaultBrushType when brushType is \"atuo\"');\n }\n\n return panel.defaultBrushType;\n }\n\n return brushType;\n}\n\nvar pointerHandlers = {\n mousedown: function (e) {\n if (this._dragging) {\n // In case some browser do not support globalOut,\n // and release mouse out side the browser.\n handleDragEnd(this, e);\n } else if (!e.target || !e.target.draggable) {\n preventDefault(e);\n var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\n this._creatingCover = null;\n var panel = this._creatingPanel = getPanelByPoint(this, e, localCursorPoint);\n\n if (panel) {\n this._dragging = true;\n this._track = [localCursorPoint.slice()];\n }\n }\n },\n mousemove: function (e) {\n var x = e.offsetX;\n var y = e.offsetY;\n var localCursorPoint = this.group.transformCoordToLocal(x, y);\n resetCursor(this, e, localCursorPoint);\n\n if (this._dragging) {\n preventDefault(e);\n var eventParams = updateCoverByMouse(this, e, localCursorPoint, false);\n eventParams && trigger(this, eventParams);\n }\n },\n mouseup: function (e) {\n handleDragEnd(this, e);\n }\n};\n\nfunction handleDragEnd(controller, e) {\n if (controller._dragging) {\n preventDefault(e);\n var x = e.offsetX;\n var y = e.offsetY;\n var localCursorPoint = controller.group.transformCoordToLocal(x, y);\n var eventParams = updateCoverByMouse(controller, e, localCursorPoint, true);\n controller._dragging = false;\n controller._track = [];\n controller._creatingCover = null; // trigger event shoule be at final, after procedure will be nested.\n\n eventParams && trigger(controller, eventParams);\n }\n}\n\nfunction isOutsideZrArea(controller, x, y) {\n var zr = controller._zr;\n return x < 0 || x > zr.getWidth() || y < 0 || y > zr.getHeight();\n}\n/**\n * key: brushType\n */\n\n\nvar coverRenderers = {\n lineX: getLineRenderer(0),\n lineY: getLineRenderer(1),\n rect: {\n createCover: function (controller, brushOption) {\n function returnInput(range) {\n return range;\n }\n\n return createBaseRectCover({\n toRectRange: returnInput,\n fromRectRange: returnInput\n }, controller, brushOption, [['w'], ['e'], ['n'], ['s'], ['s', 'e'], ['s', 'w'], ['n', 'e'], ['n', 'w']]);\n },\n getCreatingRange: function (localTrack) {\n var ends = getTrackEnds(localTrack);\n return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]);\n },\n updateCoverShape: function (controller, cover, localRange, brushOption) {\n updateBaseRect(controller, cover, localRange, brushOption);\n },\n updateCommon: updateCommon,\n contain: mainShapeContain\n },\n polygon: {\n createCover: function (controller, brushOption) {\n var cover = new graphic.Group(); // Do not use graphic.Polygon because graphic.Polyline do not close the\n // border of the shape when drawing, which is a better experience for user.\n\n cover.add(new graphic.Polyline({\n name: 'main',\n style: makeStyle(brushOption),\n silent: true\n }));\n return cover;\n },\n getCreatingRange: function (localTrack) {\n return localTrack;\n },\n endCreating: function (controller, cover) {\n cover.remove(cover.childAt(0)); // Use graphic.Polygon close the shape.\n\n cover.add(new graphic.Polygon({\n name: 'main',\n draggable: true,\n drift: curry(driftPolygon, controller, cover),\n ondragend: curry(trigger, controller, {\n isEnd: true\n })\n }));\n },\n updateCoverShape: function (controller, cover, localRange, brushOption) {\n cover.childAt(0).setShape({\n points: clipByPanel(controller, cover, localRange)\n });\n },\n updateCommon: updateCommon,\n contain: mainShapeContain\n }\n};\n\nfunction getLineRenderer(xyIndex) {\n return {\n createCover: function (controller, brushOption) {\n return createBaseRectCover({\n toRectRange: function (range) {\n var rectRange = [range, [0, 100]];\n xyIndex && rectRange.reverse();\n return rectRange;\n },\n fromRectRange: function (rectRange) {\n return rectRange[xyIndex];\n }\n }, controller, brushOption, [[['w'], ['e']], [['n'], ['s']]][xyIndex]);\n },\n getCreatingRange: function (localTrack) {\n var ends = getTrackEnds(localTrack);\n var min = mathMin(ends[0][xyIndex], ends[1][xyIndex]);\n var max = mathMax(ends[0][xyIndex], ends[1][xyIndex]);\n return [min, max];\n },\n updateCoverShape: function (controller, cover, localRange, brushOption) {\n var otherExtent; // If brushWidth not specified, fit the panel.\n\n var panel = getPanelByCover(controller, cover);\n\n if (panel !== BRUSH_PANEL_GLOBAL && panel.getLinearBrushOtherExtent) {\n otherExtent = panel.getLinearBrushOtherExtent(xyIndex);\n } else {\n var zr = controller._zr;\n otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]];\n }\n\n var rectRange = [localRange, otherExtent];\n xyIndex && rectRange.reverse();\n updateBaseRect(controller, cover, rectRange, brushOption);\n },\n updateCommon: updateCommon,\n contain: mainShapeContain\n };\n}\n\nexport default BrushController;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport { onIrrelevantElement } from './cursorHelper.js';\nimport * as graphicUtil from '../../util/graphic.js';\nexport function makeRectPanelClipPath(rect) {\n rect = normalizeRect(rect);\n return function (localPoints) {\n return graphicUtil.clipPointsByRect(localPoints, rect);\n };\n}\nexport function makeLinearBrushOtherExtent(rect, specifiedXYIndex) {\n rect = normalizeRect(rect);\n return function (xyIndex) {\n var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex;\n var brushWidth = idx ? rect.width : rect.height;\n var base = idx ? rect.x : rect.y;\n return [base, base + (brushWidth || 0)];\n };\n}\nexport function makeRectIsTargetByCursor(rect, api, targetModel) {\n var boundingRect = normalizeRect(rect);\n return function (e, localCursorPoint) {\n return boundingRect.contain(localCursorPoint[0], localCursorPoint[1]) && !onIrrelevantElement(e, api, targetModel);\n };\n} // Consider width/height is negative.\n\nfunction normalizeRect(rect) {\n return BoundingRect.create(rect);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 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 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\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}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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/basicTrasition.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*/\nexport default function boxplotVisual(ecModel, api) {}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 boxplotVisual from './boxplotVisual.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.registerVisual(boxplotVisual);\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/basicTrasition.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 });\n group.add(elP);\n var elN = new LargeBoxPath({\n shape: {\n points: largePoints\n },\n __sign: -1\n });\n group.add(elN);\n setLargeStyle(1, elP, seriesModel, data);\n setLargeStyle(-1, elN, seriesModel, data);\n\n if (incremental) {\n elP.incremental = true;\n elN.incremental = true;\n }\n\n 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']) || seriesModel.get(['itemStyle', sign > 0 ? 'color' : 'color0']); // Color must be excluded.\n // Because symbol provide setColor individually to set fill and stroke\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 // 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 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 ? 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 data.setItemLayout(dataIndex, {\n sign: getSign(store, dataIndex, openVal, closeVal, closeDimI),\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\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);\n tmpIn[cDimIdx] = axisDimVal;\n tmpIn[vDimIdx] = lowestVal;\n point = coordSys.dataToPoint(tmpIn, null, tmpOut);\n points[offset++] = point ? point[0] : NaN;\n points[offset++] = point ? point[1] : NaN;\n tmpIn[vDimIdx] = highestVal;\n point = coordSys.dataToPoint(tmpIn, null, tmpOut);\n points[offset++] = point ? point[1] : NaN;\n }\n\n data.setLayout('largePoints', points);\n }\n }\n};\n\nfunction getSign(store, dataIndex, openVal, closeVal, closeDimI) {\n var sign;\n\n if (openVal > closeVal) {\n sign = -1;\n } else if (openVal < closeVal) {\n sign = 1;\n } else {\n sign = dataIndex > 0 // If close === open, compare with close of last record\n ? 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 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) {\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);\n }\n\n this._period = period;\n this._loop = loop;\n };\n\n EffectLine.prototype._animateSymbol = function (symbol, period, delayNum, loop) {\n if (period > 0) {\n symbol.__t = 0;\n var self_1 = this;\n var animator = symbol.animate('', loop).when(period, {\n __t: 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;\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 = quadraticDerivativeAt(p1[0], cp1[0], p2[0], t);\n var ty = quadraticDerivativeAt(p1[1], cp1[1], p2[1], t);\n symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2; // enable continuity trail for 'line', 'rect', 'roundRect' symbolType\n\n if (this._symbolType === 'line' || this._symbolType === 'rect' || this._symbolType === 'roundRect') {\n if (symbol.__lastT !== undefined && symbol.__lastT < symbol.__t) {\n 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;\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 = p1[0] - p0[0];\n var ty = p1[1] - p0[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 });\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('Unkown 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 coorSys.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)) || 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 datset\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 preapre some informations.\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/basicTrasition.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 gived\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/basicTrasition.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('highlight', 'sunburstHighlight');\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('downplay', 'sunburstUnhighlight');\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 outter\n // side for inside\n align: 'center',\n position: 'inside',\n distance: 5,\n silent: true\n },\n itemStyle: {\n borderWidth: 1,\n borderColor: 'white',\n borderType: 'solid',\n shadowBlur: 0,\n shadowColor: 'rgba(0, 0, 0, 0.2)',\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n opacity: 1\n },\n 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 canbe 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 wheter 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 retured.\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 do not support rectText trigger.\n // And when text postion is different in normal and emphasis\n // => hover text trigger emphasis;\n // => text position changed, leave mouse pointer immediately;\n // That might cause state incorrect.\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 overwite 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 './basicTrasition.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 // becuase 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' calulation 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 './basicTrasition.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 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 triggerd 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 defaut 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 orgininal intention of `api.style` is enable to set itemStyle\n * like other series. But it not necessary and not easy to give a strict definition\n * of what it return. 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 feture 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 do not support textContent temporarily untill 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 sence.\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 incorret 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 that\n// the existing children will not be removed, and enables the feature that\n// update some of the props of some of the children simply by construct\n// the returned children of `renderItem` like:\n// `var children = group.children = []; children[3] = {opacity: 0.5};`\n// (2) If `elOption.$mergeChildren` is `'byName'`, add/update/remove children\n// by child.name. But that might be lower performance.\n// (3) If `elOption.$mergeChildren` is `false`, the existing children will be\n// replaced totally.\n// (4) If `!elOption.children`, following the \"merge\" principle, nothing will happen.\n//\n// For implementation simpleness, do not provide a direct way to remove sinlge\n// child (otherwise the total indicies of the children array have to be modified).\n// User can remove a single child by set its `ignore` as `true`.\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 newChildren[index] && doCreateOrUpdateEl(api, el.childAt(index), dataIndex, newChildren[index], seriesModel, el);\n }\n\n for (var i = el.childCount() - 1; i >= index; i--) {\n // Do not supprot 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 contorl all of the elements.\n var child = el.childAt(i);\n applyLeaveTransition(child, customInnerStore(el).option, seriesModel);\n }\n}\n\nfunction diffGroupChildren(context) {\n new DataDiffer(context.oldChildren, context.newChildren, getKey, getKey, context).add(processAddUpdate).update(processAddUpdate).remove(processRemove).execute();\n}\n\nfunction getKey(item, idx) {\n var name = item && item.name;\n return name != null ? name : GROUP_DIFF_PREFIX + idx;\n}\n\nfunction processAddUpdate(newIndex, oldIndex) {\n var context = this.context;\n var childOption = newIndex != null ? context.newChildren[newIndex] : null;\n var child = oldIndex != null ? context.oldChildren[oldIndex] : null;\n 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 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 gridRect = axisModel.coordinateSystem.getRect();\n var isHorizontal = axis.isHorizontal();\n var splitLines = [];\n var lineCount = 0;\n var ticksCoords = axis.getTicksCoords({\n tickModel: splitLineModel\n });\n var p1 = [];\n var p2 = [];\n\n for (var i = 0; i < ticksCoords.length; ++i) {\n var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);\n\n if (isHorizontal) {\n p1[0] = tickCoord;\n p1[1] = gridRect.y;\n p2[0] = tickCoord;\n p2[1] = gridRect.y + gridRect.height;\n } else {\n p1[0] = gridRect.x;\n p1[1] = tickCoord;\n p2[0] = gridRect.x + gridRect.width;\n p2[1] = tickCoord;\n }\n\n var colorIndex = lineCount++ % lineColors.length;\n splitLines[colorIndex] = splitLines[colorIndex] || [];\n splitLines[colorIndex].push(new graphic.Line({\n subPixelOptimize: true,\n shape: {\n x1: p1[0],\n y1: p1[1],\n x2: p2[0],\n y2: p2[1]\n },\n silent: true\n }));\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.reverse ? 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, dont care `width`.\n isSetLoc(newElOption, ['left', 'right']), // Rigid body, dont care `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/basicTrasition.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 dont\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 { __extends } from \"tslib\";\nimport DataZoomModel from './DataZoomModel.js';\n\nvar SelectDataZoomModel =\n/** @class */\nfunction (_super) {\n __extends(SelectDataZoomModel, _super);\n\n function SelectDataZoomModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SelectDataZoomModel.type;\n return _this;\n }\n\n SelectDataZoomModel.type = 'dataZoom.select';\n return SelectDataZoomModel;\n}(DataZoomModel);\n\nexport default SelectDataZoomModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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';\n\nvar SelectDataZoomView =\n/** @class */\nfunction (_super) {\n __extends(SelectDataZoomView, _super);\n\n function SelectDataZoomView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = SelectDataZoomView.type;\n return _this;\n }\n\n SelectDataZoomView.type = 'dataZoom.select';\n return SelectDataZoomView;\n}(DataZoomView);\n\nexport default SelectDataZoomView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 SelectZoomModel from './SelectZoomModel.js';\nimport SelectZoomView from './SelectZoomView.js';\nimport installCommon from './installCommon.js';\nexport function install(registers) {\n registers.registerComponentModel(SelectZoomModel);\n registers.registerComponentView(SelectZoomView);\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\nvar ToolboxFeature =\n/** @class */\nfunction () {\n function ToolboxFeature() {}\n\n return ToolboxFeature;\n}();\n\nexport { ToolboxFeature };\nvar features = {};\nexport function registerFeature(name, ctor) {\n features[name] = ctor;\n}\nexport function getFeature(name) {\n return features[name];\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 featureManager from './featureManager.js';\nimport ComponentModel from '../../model/Component.js';\n\nvar ToolboxModel =\n/** @class */\nfunction (_super) {\n __extends(ToolboxModel, _super);\n\n function ToolboxModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = ToolboxModel.type;\n return _this;\n }\n\n ToolboxModel.prototype.optionUpdated = function () {\n _super.prototype.optionUpdated.apply(this, arguments);\n\n var ecModel = this.ecModel;\n zrUtil.each(this.option.feature, function (featureOpt, featureName) {\n var Feature = featureManager.getFeature(featureName);\n\n if (Feature) {\n if (Feature.getDefaultOption) {\n Feature.defaultOption = Feature.getDefaultOption(ecModel);\n }\n\n zrUtil.merge(featureOpt, Feature.defaultOption);\n }\n });\n };\n\n ToolboxModel.type = 'toolbox';\n ToolboxModel.layoutMode = {\n type: 'box',\n ignoreSize: true\n };\n ToolboxModel.defaultOption = {\n show: true,\n z: 6,\n // zlevel: 0,\n orient: 'horizontal',\n left: 'right',\n top: 'top',\n // right\n // bottom\n backgroundColor: 'transparent',\n borderColor: '#ccc',\n borderRadius: 0,\n borderWidth: 0,\n padding: 5,\n itemSize: 15,\n itemGap: 8,\n showTitle: true,\n iconStyle: {\n borderColor: '#666',\n color: 'none'\n },\n emphasis: {\n iconStyle: {\n borderColor: '#3E98C5'\n }\n },\n // textStyle: {},\n // feature\n tooltip: {\n show: false,\n position: 'bottom'\n }\n };\n return ToolboxModel;\n}(ComponentModel);\n\nexport default ToolboxModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 textContain from 'zrender/lib/contain/text.js';\nimport * as graphic from '../../util/graphic.js';\nimport { enterEmphasis, leaveEmphasis } from '../../util/states.js';\nimport Model from '../../model/Model.js';\nimport DataDiffer from '../../data/DataDiffer.js';\nimport * as listComponentHelper from '../helper/listComponent.js';\nimport ComponentView from '../../view/Component.js';\nimport { ToolboxFeature, getFeature } from './featureManager.js';\nimport { getUID } from '../../util/component.js';\nimport ZRText from 'zrender/lib/graphic/Text.js';\n\nvar ToolboxView =\n/** @class */\nfunction (_super) {\n __extends(ToolboxView, _super);\n\n function ToolboxView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n ToolboxView.prototype.render = function (toolboxModel, ecModel, api, payload) {\n var group = this.group;\n group.removeAll();\n\n if (!toolboxModel.get('show')) {\n return;\n }\n\n var itemSize = +toolboxModel.get('itemSize');\n var isVertical = toolboxModel.get('orient') === 'vertical';\n var featureOpts = toolboxModel.get('feature') || {};\n var features = this._features || (this._features = {});\n var featureNames = [];\n zrUtil.each(featureOpts, function (opt, name) {\n featureNames.push(name);\n });\n new DataDiffer(this._featureNames || [], featureNames).add(processFeature).update(processFeature).remove(zrUtil.curry(processFeature, null)).execute(); // Keep for diff.\n\n this._featureNames = featureNames;\n\n function processFeature(newIndex, oldIndex) {\n var featureName = featureNames[newIndex];\n var oldName = featureNames[oldIndex];\n var featureOpt = featureOpts[featureName];\n var featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel);\n var feature; // FIX#11236, merge feature title from MagicType newOption. TODO: consider seriesIndex ?\n\n if (payload && payload.newTitle != null && payload.featureName === featureName) {\n featureOpt.title = payload.newTitle;\n }\n\n if (featureName && !oldName) {\n // Create\n if (isUserFeatureName(featureName)) {\n feature = {\n onclick: featureModel.option.onclick,\n featureName: featureName\n };\n } else {\n var Feature = getFeature(featureName);\n\n if (!Feature) {\n return;\n }\n\n feature = new Feature();\n }\n\n features[featureName] = feature;\n } else {\n feature = features[oldName]; // If feature does not exsit.\n\n if (!feature) {\n return;\n }\n }\n\n feature.uid = getUID('toolbox-feature');\n feature.model = featureModel;\n feature.ecModel = ecModel;\n feature.api = api;\n var isToolboxFeature = feature instanceof ToolboxFeature;\n\n if (!featureName && oldName) {\n isToolboxFeature && feature.dispose && feature.dispose(ecModel, api);\n return;\n }\n\n if (!featureModel.get('show') || isToolboxFeature && feature.unusable) {\n isToolboxFeature && feature.remove && feature.remove(ecModel, api);\n return;\n }\n\n createIconPaths(featureModel, feature, featureName);\n\n featureModel.setIconStatus = function (iconName, status) {\n var option = this.option;\n var iconPaths = this.iconPaths;\n option.iconStatus = option.iconStatus || {};\n option.iconStatus[iconName] = status;\n\n if (iconPaths[iconName]) {\n (status === 'emphasis' ? enterEmphasis : leaveEmphasis)(iconPaths[iconName]);\n }\n };\n\n if (feature instanceof ToolboxFeature) {\n if (feature.render) {\n feature.render(featureModel, ecModel, api, payload);\n }\n }\n }\n\n function createIconPaths(featureModel, feature, featureName) {\n var iconStyleModel = featureModel.getModel('iconStyle');\n var iconStyleEmphasisModel = featureModel.getModel(['emphasis', 'iconStyle']); // If one feature has mutiple icon. they are orginaized as\n // {\n // icon: {\n // foo: '',\n // bar: ''\n // },\n // title: {\n // foo: '',\n // bar: ''\n // }\n // }\n\n var icons = feature instanceof ToolboxFeature && feature.getIcons ? feature.getIcons() : featureModel.get('icon');\n var titles = featureModel.get('title') || {};\n var iconsMap;\n var titlesMap;\n\n if (zrUtil.isString(icons)) {\n iconsMap = {};\n iconsMap[featureName] = icons;\n } else {\n iconsMap = icons;\n }\n\n if (zrUtil.isString(titles)) {\n titlesMap = {};\n titlesMap[featureName] = titles;\n } else {\n titlesMap = titles;\n }\n\n var iconPaths = featureModel.iconPaths = {};\n zrUtil.each(iconsMap, function (iconStr, iconName) {\n var path = graphic.createIcon(iconStr, {}, {\n x: -itemSize / 2,\n y: -itemSize / 2,\n width: itemSize,\n height: itemSize\n }); // TODO handling image\n\n path.setStyle(iconStyleModel.getItemStyle());\n var pathEmphasisState = path.ensureState('emphasis');\n pathEmphasisState.style = iconStyleEmphasisModel.getItemStyle(); // Text position calculation\n\n var textContent = new ZRText({\n style: {\n text: titlesMap[iconName],\n align: iconStyleEmphasisModel.get('textAlign'),\n borderRadius: iconStyleEmphasisModel.get('textBorderRadius'),\n padding: iconStyleEmphasisModel.get('textPadding'),\n fill: null\n },\n ignore: true\n });\n path.setTextContent(textContent);\n graphic.setTooltipConfig({\n el: path,\n componentModel: toolboxModel,\n itemName: iconName,\n formatterParamsExtra: {\n title: titlesMap[iconName]\n }\n });\n path.__title = titlesMap[iconName];\n path.on('mouseover', function () {\n // Should not reuse above hoverStyle, which might be modified.\n var hoverStyle = iconStyleEmphasisModel.getItemStyle();\n var defaultTextPosition = isVertical ? toolboxModel.get('right') == null && toolboxModel.get('left') !== 'right' ? 'right' : 'left' : toolboxModel.get('bottom') == null && toolboxModel.get('top') !== 'bottom' ? 'bottom' : 'top';\n textContent.setStyle({\n fill: iconStyleEmphasisModel.get('textFill') || hoverStyle.fill || hoverStyle.stroke || '#000',\n backgroundColor: iconStyleEmphasisModel.get('textBackgroundColor')\n });\n path.setTextConfig({\n position: iconStyleEmphasisModel.get('textPosition') || defaultTextPosition\n });\n textContent.ignore = !toolboxModel.get('showTitle'); // Use enterEmphasis and leaveEmphasis provide by ec.\n // There are flags managed by the echarts.\n\n api.enterEmphasis(this);\n }).on('mouseout', function () {\n if (featureModel.get(['iconStatus', iconName]) !== 'emphasis') {\n api.leaveEmphasis(this);\n }\n\n textContent.hide();\n });\n (featureModel.get(['iconStatus', iconName]) === 'emphasis' ? enterEmphasis : leaveEmphasis)(path);\n group.add(path);\n path.on('click', zrUtil.bind(feature.onclick, feature, ecModel, api, iconName));\n iconPaths[iconName] = path;\n });\n }\n\n listComponentHelper.layout(group, toolboxModel, api); // Render background after group is layout\n // FIXME\n\n group.add(listComponentHelper.makeBackground(group.getBoundingRect(), toolboxModel)); // Adjust icon title positions to avoid them out of screen\n\n isVertical || group.eachChild(function (icon) {\n var titleText = icon.__title; // const hoverStyle = icon.hoverStyle;\n // TODO simplify code?\n\n var emphasisState = icon.ensureState('emphasis');\n var emphasisTextConfig = emphasisState.textConfig || (emphasisState.textConfig = {});\n var textContent = icon.getTextContent();\n var emphasisTextState = textContent && textContent.ensureState('emphasis'); // May be background element\n\n if (emphasisTextState && !zrUtil.isFunction(emphasisTextState) && titleText) {\n var emphasisTextStyle = emphasisTextState.style || (emphasisTextState.style = {});\n var rect = textContain.getBoundingRect(titleText, ZRText.makeFont(emphasisTextStyle));\n var offsetX = icon.x + group.x;\n var offsetY = icon.y + group.y + itemSize;\n var needPutOnTop = false;\n\n if (offsetY + rect.height > api.getHeight()) {\n emphasisTextConfig.position = 'top';\n needPutOnTop = true;\n }\n\n var topOffset = needPutOnTop ? -5 - rect.height : itemSize + 10;\n\n if (offsetX + rect.width / 2 > api.getWidth()) {\n emphasisTextConfig.position = ['100%', topOffset];\n emphasisTextStyle.align = 'right';\n } else if (offsetX - rect.width / 2 < 0) {\n emphasisTextConfig.position = [0, topOffset];\n emphasisTextStyle.align = 'left';\n }\n }\n });\n };\n\n ToolboxView.prototype.updateView = function (toolboxModel, ecModel, api, payload) {\n zrUtil.each(this._features, function (feature) {\n feature instanceof ToolboxFeature && feature.updateView && feature.updateView(feature.model, ecModel, api, payload);\n });\n }; // updateLayout(toolboxModel, ecModel, api, payload) {\n // zrUtil.each(this._features, function (feature) {\n // feature.updateLayout && feature.updateLayout(feature.model, ecModel, api, payload);\n // });\n // },\n\n\n ToolboxView.prototype.remove = function (ecModel, api) {\n zrUtil.each(this._features, function (feature) {\n feature instanceof ToolboxFeature && feature.remove && feature.remove(ecModel, api);\n });\n this.group.removeAll();\n };\n\n ToolboxView.prototype.dispose = function (ecModel, api) {\n zrUtil.each(this._features, function (feature) {\n feature instanceof ToolboxFeature && feature.dispose && feature.dispose(ecModel, api);\n });\n };\n\n ToolboxView.type = 'toolbox';\n return ToolboxView;\n}(ComponentView);\n\nfunction isUserFeatureName(featureName) {\n return featureName.indexOf('my') === 0;\n}\n\nexport default ToolboxView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 Uint8Array, document */\n\nimport env from 'zrender/lib/core/env.js';\nimport { ToolboxFeature } from '../featureManager.js';\nimport { isFunction } from 'zrender/lib/core/util.js';\n/* global window, document */\n\nvar SaveAsImage =\n/** @class */\nfunction (_super) {\n __extends(SaveAsImage, _super);\n\n function SaveAsImage() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n SaveAsImage.prototype.onclick = function (ecModel, api) {\n var model = this.model;\n var title = model.get('name') || ecModel.get('title.0.text') || 'echarts';\n var isSvg = api.getZr().painter.getType() === 'svg';\n var type = isSvg ? 'svg' : model.get('type', true) || 'png';\n var url = api.getConnectedDataURL({\n type: type,\n backgroundColor: model.get('backgroundColor', true) || ecModel.get('backgroundColor') || '#fff',\n connectedBackgroundColor: model.get('connectedBackgroundColor'),\n excludeComponents: model.get('excludeComponents'),\n pixelRatio: model.get('pixelRatio')\n });\n var browser = env.browser; // Chrome, Firefox, New Edge\n\n if (isFunction(MouseEvent) && (browser.newEdge || !browser.ie && !browser.edge)) {\n var $a = document.createElement('a');\n $a.download = title + '.' + type;\n $a.target = '_blank';\n $a.href = url;\n var evt = new MouseEvent('click', {\n // some micro front-end framework, window maybe is a Proxy\n view: document.defaultView,\n bubbles: true,\n cancelable: false\n });\n $a.dispatchEvent(evt);\n } // IE or old Edge\n else {\n // @ts-ignore\n if (window.navigator.msSaveOrOpenBlob || isSvg) {\n var parts = url.split(','); // data:[][;charset=][;base64],\n\n var base64Encoded = parts[0].indexOf('base64') > -1;\n var bstr = isSvg // should decode the svg data uri first\n ? decodeURIComponent(parts[1]) : parts[1]; // only `atob` when the data uri is encoded with base64\n // otherwise, like `svg` data uri exported by zrender,\n // there will be an error, for it's not encoded with base64.\n // (just a url-encoded string through `encodeURIComponent`)\n\n base64Encoded && (bstr = window.atob(bstr));\n var filename = title + '.' + type; // @ts-ignore\n\n if (window.navigator.msSaveOrOpenBlob) {\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n\n var blob = new Blob([u8arr]); // @ts-ignore\n\n window.navigator.msSaveOrOpenBlob(blob, filename);\n } else {\n var frame = document.createElement('iframe');\n document.body.appendChild(frame);\n var cw = frame.contentWindow;\n var doc = cw.document;\n doc.open('image/svg+xml', 'replace');\n doc.write(bstr);\n doc.close();\n cw.focus();\n doc.execCommand('SaveAs', true, filename);\n document.body.removeChild(frame);\n }\n } else {\n var lang = model.get('lang');\n var html = '' + '' + '' + '';\n var tab = window.open();\n tab.document.write(html);\n tab.document.title = title;\n }\n }\n };\n\n SaveAsImage.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',\n title: ecModel.getLocaleModel().get(['toolbox', 'saveAsImage', 'title']),\n type: 'png',\n // Default use option.backgroundColor\n // backgroundColor: '#fff',\n connectedBackgroundColor: '#fff',\n name: '',\n excludeComponents: ['toolbox'],\n // use current pixel ratio of device by default\n // pixelRatio: 1,\n lang: ecModel.getLocaleModel().get(['toolbox', 'saveAsImage', 'lang'])\n };\n return defaultOption;\n };\n\n return SaveAsImage;\n}(ToolboxFeature);\n\nexport default SaveAsImage;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 echarts from '../../../core/echarts.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { ToolboxFeature } from '../featureManager.js';\nimport { SINGLE_REFERRING } from '../../../util/model.js';\nvar INNER_STACK_KEYWORD = '__ec_magicType_stack__';\nvar ICON_TYPES = ['line', 'bar', 'stack']; // stack and tiled appears in pair for the title\n\nvar TITLE_TYPES = ['line', 'bar', 'stack', 'tiled'];\nvar radioTypes = [['line', 'bar'], ['stack']];\n\nvar MagicType =\n/** @class */\nfunction (_super) {\n __extends(MagicType, _super);\n\n function MagicType() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n MagicType.prototype.getIcons = function () {\n var model = this.model;\n var availableIcons = model.get('icon');\n var icons = {};\n zrUtil.each(model.get('type'), function (type) {\n if (availableIcons[type]) {\n icons[type] = availableIcons[type];\n }\n });\n return icons;\n };\n\n MagicType.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n type: [],\n // Icon group\n icon: {\n line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4',\n bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7',\n // eslint-disable-next-line\n stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z' // jshint ignore:line\n\n },\n // `line`, `bar`, `stack`, `tiled`\n title: ecModel.getLocaleModel().get(['toolbox', 'magicType', 'title']),\n option: {},\n seriesIndex: {}\n };\n return defaultOption;\n };\n\n MagicType.prototype.onclick = function (ecModel, api, type) {\n var model = this.model;\n var seriesIndex = model.get(['seriesIndex', type]); // Not supported magicType\n\n if (!seriesOptGenreator[type]) {\n return;\n }\n\n var newOption = {\n series: []\n };\n\n var generateNewSeriesTypes = function (seriesModel) {\n var seriesType = seriesModel.subType;\n var seriesId = seriesModel.id;\n var newSeriesOpt = seriesOptGenreator[type](seriesType, seriesId, seriesModel, model);\n\n if (newSeriesOpt) {\n // PENDING If merge original option?\n zrUtil.defaults(newSeriesOpt, seriesModel.option);\n newOption.series.push(newSeriesOpt);\n } // Modify boundaryGap\n\n\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) {\n var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n\n if (categoryAxis) {\n var axisDim = categoryAxis.dim;\n var axisType = axisDim + 'Axis';\n var axisModel = seriesModel.getReferringComponents(axisType, SINGLE_REFERRING).models[0];\n var axisIndex = axisModel.componentIndex;\n newOption[axisType] = newOption[axisType] || [];\n\n for (var i = 0; i <= axisIndex; i++) {\n newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {};\n }\n\n newOption[axisType][axisIndex].boundaryGap = type === 'bar';\n }\n }\n };\n\n zrUtil.each(radioTypes, function (radio) {\n if (zrUtil.indexOf(radio, type) >= 0) {\n zrUtil.each(radio, function (item) {\n model.setIconStatus(item, 'normal');\n });\n }\n });\n model.setIconStatus(type, 'emphasis');\n ecModel.eachComponent({\n mainType: 'series',\n query: seriesIndex == null ? null : {\n seriesIndex: seriesIndex\n }\n }, generateNewSeriesTypes);\n var newTitle;\n var currentType = type; // Change title of stack\n\n if (type === 'stack') {\n // use titles in model instead of ecModel\n // as stack and tiled appears in pair, just flip them\n // no need of checking stack state\n newTitle = zrUtil.merge({\n stack: model.option.title.tiled,\n tiled: model.option.title.stack\n }, model.option.title);\n\n if (model.get(['iconStatus', type]) !== 'emphasis') {\n currentType = 'tiled';\n }\n }\n\n api.dispatchAction({\n type: 'changeMagicType',\n currentType: currentType,\n newOption: newOption,\n newTitle: newTitle,\n featureName: 'magicType'\n });\n };\n\n return MagicType;\n}(ToolboxFeature);\n\nvar seriesOptGenreator = {\n 'line': function (seriesType, seriesId, seriesModel, model) {\n if (seriesType === 'bar') {\n return zrUtil.merge({\n id: seriesId,\n type: 'line',\n // Preserve data related option\n data: seriesModel.get('data'),\n stack: seriesModel.get('stack'),\n markPoint: seriesModel.get('markPoint'),\n markLine: seriesModel.get('markLine')\n }, model.get(['option', 'line']) || {}, true);\n }\n },\n 'bar': function (seriesType, seriesId, seriesModel, model) {\n if (seriesType === 'line') {\n return zrUtil.merge({\n id: seriesId,\n type: 'bar',\n // Preserve data related option\n data: seriesModel.get('data'),\n stack: seriesModel.get('stack'),\n markPoint: seriesModel.get('markPoint'),\n markLine: seriesModel.get('markLine')\n }, model.get(['option', 'bar']) || {}, true);\n }\n },\n 'stack': function (seriesType, seriesId, seriesModel, model) {\n var isStack = seriesModel.get('stack') === INNER_STACK_KEYWORD;\n\n if (seriesType === 'line' || seriesType === 'bar') {\n model.setIconStatus('stack', isStack ? 'normal' : 'emphasis');\n return zrUtil.merge({\n id: seriesId,\n stack: isStack ? '' : INNER_STACK_KEYWORD\n }, model.get(['option', 'stack']) || {}, true);\n }\n }\n}; // TODO: SELF REGISTERED.\n\necharts.registerAction({\n type: 'changeMagicType',\n event: 'magicTypeChanged',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n ecModel.mergeOption(payload.newOption);\n});\nexport default MagicType;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 document */\n\nimport * as echarts from '../../../core/echarts.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { ToolboxFeature } from '../featureManager.js';\nimport { addEventListener } from 'zrender/lib/core/event.js';\nimport { warn } from '../../../util/log.js';\n/* global document */\n\nvar BLOCK_SPLITER = new Array(60).join('-');\nvar ITEM_SPLITER = '\\t';\n/**\n * Group series into two types\n * 1. on category axis, like line, bar\n * 2. others, like scatter, pie\n */\n\nfunction groupSeries(ecModel) {\n var seriesGroupByCategoryAxis = {};\n var otherSeries = [];\n var meta = [];\n ecModel.eachRawSeries(function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && (coordSys.type === 'cartesian2d' || coordSys.type === 'polar')) {\n // TODO: TYPE Consider polar? Include polar may increase unecessary bundle size.\n var baseAxis = coordSys.getBaseAxis();\n\n if (baseAxis.type === 'category') {\n var key = baseAxis.dim + '_' + baseAxis.index;\n\n if (!seriesGroupByCategoryAxis[key]) {\n seriesGroupByCategoryAxis[key] = {\n categoryAxis: baseAxis,\n valueAxis: coordSys.getOtherAxis(baseAxis),\n series: []\n };\n meta.push({\n axisDim: baseAxis.dim,\n axisIndex: baseAxis.index\n });\n }\n\n seriesGroupByCategoryAxis[key].series.push(seriesModel);\n } else {\n otherSeries.push(seriesModel);\n }\n } else {\n otherSeries.push(seriesModel);\n }\n });\n return {\n seriesGroupByCategoryAxis: seriesGroupByCategoryAxis,\n other: otherSeries,\n meta: meta\n };\n}\n/**\n * Assemble content of series on cateogory axis\n * @inner\n */\n\n\nfunction assembleSeriesWithCategoryAxis(groups) {\n var tables = [];\n zrUtil.each(groups, function (group, key) {\n var categoryAxis = group.categoryAxis;\n var valueAxis = group.valueAxis;\n var valueAxisDim = valueAxis.dim;\n var headers = [' '].concat(zrUtil.map(group.series, function (series) {\n return series.name;\n })); // @ts-ignore TODO Polar\n\n var columns = [categoryAxis.model.getCategories()];\n zrUtil.each(group.series, function (series) {\n var rawData = series.getRawData();\n columns.push(series.getRawData().mapArray(rawData.mapDimension(valueAxisDim), function (val) {\n return val;\n }));\n }); // Assemble table content\n\n var lines = [headers.join(ITEM_SPLITER)];\n\n for (var i = 0; i < columns[0].length; i++) {\n var items = [];\n\n for (var j = 0; j < columns.length; j++) {\n items.push(columns[j][i]);\n }\n\n lines.push(items.join(ITEM_SPLITER));\n }\n\n tables.push(lines.join('\\n'));\n });\n return tables.join('\\n\\n' + BLOCK_SPLITER + '\\n\\n');\n}\n/**\n * Assemble content of other series\n */\n\n\nfunction assembleOtherSeries(series) {\n return zrUtil.map(series, function (series) {\n var data = series.getRawData();\n var lines = [series.name];\n var vals = [];\n data.each(data.dimensions, function () {\n var argLen = arguments.length;\n var dataIndex = arguments[argLen - 1];\n var name = data.getName(dataIndex);\n\n for (var i = 0; i < argLen - 1; i++) {\n vals[i] = arguments[i];\n }\n\n lines.push((name ? name + ITEM_SPLITER : '') + vals.join(ITEM_SPLITER));\n });\n return lines.join('\\n');\n }).join('\\n\\n' + BLOCK_SPLITER + '\\n\\n');\n}\n\nfunction getContentFromModel(ecModel) {\n var result = groupSeries(ecModel);\n return {\n value: zrUtil.filter([assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis), assembleOtherSeries(result.other)], function (str) {\n return !!str.replace(/[\\n\\t\\s]/g, '');\n }).join('\\n\\n' + BLOCK_SPLITER + '\\n\\n'),\n meta: result.meta\n };\n}\n\nfunction trim(str) {\n return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n}\n/**\n * If a block is tsv format\n */\n\n\nfunction isTSVFormat(block) {\n // Simple method to find out if a block is tsv format\n var firstLine = block.slice(0, block.indexOf('\\n'));\n\n if (firstLine.indexOf(ITEM_SPLITER) >= 0) {\n return true;\n }\n}\n\nvar itemSplitRegex = new RegExp('[' + ITEM_SPLITER + ']+', 'g');\n/**\n * @param {string} tsv\n * @return {Object}\n */\n\nfunction parseTSVContents(tsv) {\n var tsvLines = tsv.split(/\\n+/g);\n var headers = trim(tsvLines.shift()).split(itemSplitRegex);\n var categories = [];\n var series = zrUtil.map(headers, function (header) {\n return {\n name: header,\n data: []\n };\n });\n\n for (var i = 0; i < tsvLines.length; i++) {\n var items = trim(tsvLines[i]).split(itemSplitRegex);\n categories.push(items.shift());\n\n for (var j = 0; j < items.length; j++) {\n series[j] && (series[j].data[i] = items[j]);\n }\n }\n\n return {\n series: series,\n categories: categories\n };\n}\n\nfunction parseListContents(str) {\n var lines = str.split(/\\n+/g);\n var seriesName = trim(lines.shift());\n var data = [];\n\n for (var i = 0; i < lines.length; i++) {\n // if line is empty, ignore it.\n // there is a case that a user forgot to delete `\\n`.\n var line = trim(lines[i]);\n\n if (!line) {\n continue;\n }\n\n var items = line.split(itemSplitRegex);\n var name_1 = '';\n var value = void 0;\n var hasName = false;\n\n if (isNaN(items[0])) {\n // First item is name\n hasName = true;\n name_1 = items[0];\n items = items.slice(1);\n data[i] = {\n name: name_1,\n value: []\n };\n value = data[i].value;\n } else {\n value = data[i] = [];\n }\n\n for (var j = 0; j < items.length; j++) {\n value.push(+items[j]);\n }\n\n if (value.length === 1) {\n hasName ? data[i].value = value[0] : data[i] = value[0];\n }\n }\n\n return {\n name: seriesName,\n data: data\n };\n}\n\nfunction parseContents(str, blockMetaList) {\n var blocks = str.split(new RegExp('\\n*' + BLOCK_SPLITER + '\\n*', 'g'));\n var newOption = {\n series: []\n };\n zrUtil.each(blocks, function (block, idx) {\n if (isTSVFormat(block)) {\n var result = parseTSVContents(block);\n var blockMeta = blockMetaList[idx];\n var axisKey = blockMeta.axisDim + 'Axis';\n\n if (blockMeta) {\n newOption[axisKey] = newOption[axisKey] || [];\n newOption[axisKey][blockMeta.axisIndex] = {\n data: result.categories\n };\n newOption.series = newOption.series.concat(result.series);\n }\n } else {\n var result = parseListContents(block);\n newOption.series.push(result);\n }\n });\n return newOption;\n}\n\nvar DataView =\n/** @class */\nfunction (_super) {\n __extends(DataView, _super);\n\n function DataView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n DataView.prototype.onclick = function (ecModel, api) {\n // FIXME: better way?\n setTimeout(function () {\n api.dispatchAction({\n type: 'hideTip'\n });\n });\n var container = api.getDom();\n var model = this.model;\n\n if (this._dom) {\n container.removeChild(this._dom);\n }\n\n var root = document.createElement('div'); // use padding to avoid 5px whitespace\n\n root.style.cssText = 'position:absolute;top:0;bottom:0;left:0;right:0;padding:5px';\n root.style.backgroundColor = model.get('backgroundColor') || '#fff'; // Create elements\n\n var header = document.createElement('h4');\n var lang = model.get('lang') || [];\n header.innerHTML = lang[0] || model.get('title');\n header.style.cssText = 'margin:10px 20px';\n header.style.color = model.get('textColor');\n var viewMain = document.createElement('div');\n var textarea = document.createElement('textarea');\n viewMain.style.cssText = 'overflow:auto';\n var optionToContent = model.get('optionToContent');\n var contentToOption = model.get('contentToOption');\n var result = getContentFromModel(ecModel);\n\n if (zrUtil.isFunction(optionToContent)) {\n var htmlOrDom = optionToContent(api.getOption());\n\n if (zrUtil.isString(htmlOrDom)) {\n viewMain.innerHTML = htmlOrDom;\n } else if (zrUtil.isDom(htmlOrDom)) {\n viewMain.appendChild(htmlOrDom);\n }\n } else {\n // Use default textarea\n textarea.readOnly = model.get('readOnly');\n var style = textarea.style; // eslint-disable-next-line max-len\n\n style.cssText = 'display:block;width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;resize:none;box-sizing:border-box;outline:none';\n style.color = model.get('textColor');\n style.borderColor = model.get('textareaBorderColor');\n style.backgroundColor = model.get('textareaColor');\n textarea.value = result.value;\n viewMain.appendChild(textarea);\n }\n\n var blockMetaList = result.meta;\n var buttonContainer = document.createElement('div');\n buttonContainer.style.cssText = 'position:absolute;bottom:5px;left:0;right:0'; // eslint-disable-next-line max-len\n\n var buttonStyle = 'float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px';\n var closeButton = document.createElement('div');\n var refreshButton = document.createElement('div');\n buttonStyle += ';background-color:' + model.get('buttonColor');\n buttonStyle += ';color:' + model.get('buttonTextColor');\n var self = this;\n\n function close() {\n container.removeChild(root);\n self._dom = null;\n }\n\n addEventListener(closeButton, 'click', close);\n addEventListener(refreshButton, 'click', function () {\n if (contentToOption == null && optionToContent != null || contentToOption != null && optionToContent == null) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line\n warn('It seems you have just provided one of `contentToOption` and `optionToContent` functions but missed the other one. Data change is ignored.');\n }\n\n close();\n return;\n }\n\n var newOption;\n\n try {\n if (zrUtil.isFunction(contentToOption)) {\n newOption = contentToOption(viewMain, api.getOption());\n } else {\n newOption = parseContents(textarea.value, blockMetaList);\n }\n } catch (e) {\n close();\n throw new Error('Data view format error ' + e);\n }\n\n if (newOption) {\n api.dispatchAction({\n type: 'changeDataView',\n newOption: newOption\n });\n }\n\n close();\n });\n closeButton.innerHTML = lang[1];\n refreshButton.innerHTML = lang[2];\n refreshButton.style.cssText = closeButton.style.cssText = buttonStyle;\n !model.get('readOnly') && buttonContainer.appendChild(refreshButton);\n buttonContainer.appendChild(closeButton);\n root.appendChild(header);\n root.appendChild(viewMain);\n root.appendChild(buttonContainer);\n viewMain.style.height = container.clientHeight - 80 + 'px';\n container.appendChild(root);\n this._dom = root;\n };\n\n DataView.prototype.remove = function (ecModel, api) {\n this._dom && api.getDom().removeChild(this._dom);\n };\n\n DataView.prototype.dispose = function (ecModel, api) {\n this.remove(ecModel, api);\n };\n\n DataView.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n readOnly: false,\n optionToContent: null,\n contentToOption: null,\n // eslint-disable-next-line\n icon: 'M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28',\n title: ecModel.getLocaleModel().get(['toolbox', 'dataView', 'title']),\n lang: ecModel.getLocaleModel().get(['toolbox', 'dataView', 'lang']),\n backgroundColor: '#fff',\n textColor: '#000',\n textareaColor: '#fff',\n textareaBorderColor: '#333',\n buttonColor: '#c23531',\n buttonTextColor: '#fff'\n };\n return defaultOption;\n };\n\n return DataView;\n}(ToolboxFeature);\n/**\n * @inner\n */\n\n\nfunction tryMergeDataOption(newData, originalData) {\n return zrUtil.map(newData, function (newVal, idx) {\n var original = originalData && originalData[idx];\n\n if (zrUtil.isObject(original) && !zrUtil.isArray(original)) {\n var newValIsObject = zrUtil.isObject(newVal) && !zrUtil.isArray(newVal);\n\n if (!newValIsObject) {\n newVal = {\n value: newVal\n };\n } // original data has name but new data has no name\n\n\n var shouldDeleteName = original.name != null && newVal.name == null; // Original data has option\n\n newVal = zrUtil.defaults(newVal, original);\n shouldDeleteName && delete newVal.name;\n return newVal;\n } else {\n return newVal;\n }\n });\n} // TODO: SELF REGISTERED.\n\n\necharts.registerAction({\n type: 'changeDataView',\n event: 'dataViewChanged',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n var newSeriesOptList = [];\n zrUtil.each(payload.newOption.series, function (seriesOpt) {\n var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0];\n\n if (!seriesModel) {\n // New created series\n // Geuss the series type\n newSeriesOptList.push(zrUtil.extend({\n // Default is scatter\n type: 'scatter'\n }, seriesOpt));\n } else {\n var originalData = seriesModel.get('data');\n newSeriesOptList.push({\n name: seriesOpt.name,\n data: tryMergeDataOption(seriesOpt.data, originalData)\n });\n }\n });\n ecModel.mergeOption(zrUtil.defaults({\n series: newSeriesOptList\n }, payload.newOption));\n});\nexport default DataView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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';\nvar each = zrUtil.each;\nvar inner = makeInner();\n/**\n * @param ecModel\n * @param newSnapshot key is dataZoomId\n */\n\nexport function push(ecModel, newSnapshot) {\n var storedSnapshots = getStoreSnapshots(ecModel); // If previous dataZoom can not be found,\n // complete an range with current range.\n\n each(newSnapshot, function (batchItem, dataZoomId) {\n var i = storedSnapshots.length - 1;\n\n for (; i >= 0; i--) {\n var snapshot = storedSnapshots[i];\n\n if (snapshot[dataZoomId]) {\n break;\n }\n }\n\n if (i < 0) {\n // No origin range set, create one by current range.\n var dataZoomModel = ecModel.queryComponents({\n mainType: 'dataZoom',\n subType: 'select',\n id: dataZoomId\n })[0];\n\n if (dataZoomModel) {\n var percentRange = dataZoomModel.getPercentRange();\n storedSnapshots[0][dataZoomId] = {\n dataZoomId: dataZoomId,\n start: percentRange[0],\n end: percentRange[1]\n };\n }\n }\n });\n storedSnapshots.push(newSnapshot);\n}\nexport function pop(ecModel) {\n var storedSnapshots = getStoreSnapshots(ecModel);\n var head = storedSnapshots[storedSnapshots.length - 1];\n storedSnapshots.length > 1 && storedSnapshots.pop(); // Find top for all dataZoom.\n\n var snapshot = {};\n each(head, function (batchItem, dataZoomId) {\n for (var i = storedSnapshots.length - 1; i >= 0; i--) {\n batchItem = storedSnapshots[i][dataZoomId];\n\n if (batchItem) {\n snapshot[dataZoomId] = batchItem;\n break;\n }\n }\n });\n return snapshot;\n}\nexport function clear(ecModel) {\n inner(ecModel).snapshots = null;\n}\nexport function count(ecModel) {\n return getStoreSnapshots(ecModel).length;\n}\n/**\n * History length of each dataZoom may be different.\n * this._history[0] is used to store origin range.\n */\n\nfunction getStoreSnapshots(ecModel) {\n var store = inner(ecModel);\n\n if (!store.snapshots) {\n store.snapshots = [{}];\n }\n\n return store.snapshots;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 echarts from '../../../core/echarts.js';\nimport * as history from '../../dataZoom/history.js';\nimport { ToolboxFeature } from '../featureManager.js';\n\nvar RestoreOption =\n/** @class */\nfunction (_super) {\n __extends(RestoreOption, _super);\n\n function RestoreOption() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n RestoreOption.prototype.onclick = function (ecModel, api) {\n history.clear(ecModel);\n api.dispatchAction({\n type: 'restore',\n from: this.uid\n });\n };\n\n RestoreOption.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n // eslint-disable-next-line\n icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5',\n title: ecModel.getLocaleModel().get(['toolbox', 'restore', 'title'])\n };\n return defaultOption;\n };\n\n return RestoreOption;\n}(ToolboxFeature); // TODO: SELF REGISTERED.\n\n\necharts.registerAction({\n type: 'restore',\n event: 'restore',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n ecModel.resetOption('recreate');\n});\nexport default RestoreOption;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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, indexOf, curry, assert, map, createHashMap } from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as brushHelper from './brushHelper.js';\nimport { parseFinder as modelUtilParseFinder } from '../../util/model.js'; // FIXME\n// how to genarialize to more coordinate systems.\n\nvar INCLUDE_FINDER_MAIN_TYPES = ['grid', 'xAxis', 'yAxis', 'geo', 'graph', 'polar', 'radiusAxis', 'angleAxis', 'bmap'];\n\nvar BrushTargetManager =\n/** @class */\nfunction () {\n /**\n * @param finder contains Index/Id/Name of xAxis/yAxis/geo/grid\n * Each can be {number|Array.}. like: {xAxisIndex: [3, 4]}\n * @param opt.include include coordinate system types.\n */\n function BrushTargetManager(finder, ecModel, opt) {\n var _this = this;\n\n this._targetInfoList = [];\n var foundCpts = parseFinder(ecModel, finder);\n each(targetInfoBuilders, function (builder, type) {\n if (!opt || !opt.include || indexOf(opt.include, type) >= 0) {\n builder(foundCpts, _this._targetInfoList);\n }\n });\n }\n\n BrushTargetManager.prototype.setOutputRanges = function (areas, ecModel) {\n this.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {\n (area.coordRanges || (area.coordRanges = [])).push(coordRange); // area.coordRange is the first of area.coordRanges\n\n if (!area.coordRange) {\n area.coordRange = coordRange; // In 'category' axis, coord to pixel is not reversible, so we can not\n // rebuild range by coordRange accrately, which may bring trouble when\n // brushing only one item. So we use __rangeOffset to rebuilding range\n // by coordRange. And this it only used in brush component so it is no\n // need to be adapted to coordRanges.\n\n var result = coordConvert[area.brushType](0, coordSys, coordRange);\n area.__rangeOffset = {\n offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]),\n xyMinMax: result.xyMinMax\n };\n }\n });\n return areas;\n };\n\n BrushTargetManager.prototype.matchOutputRanges = function (areas, ecModel, cb) {\n each(areas, function (area) {\n var targetInfo = this.findTargetInfo(area, ecModel);\n\n if (targetInfo && targetInfo !== true) {\n each(targetInfo.coordSyses, function (coordSys) {\n var result = coordConvert[area.brushType](1, coordSys, area.range, true);\n cb(area, result.values, coordSys, ecModel);\n });\n }\n }, this);\n };\n /**\n * the `areas` is `BrushModel.areas`.\n * Called in layout stage.\n * convert `area.coordRange` to global range and set panelId to `area.range`.\n */\n\n\n BrushTargetManager.prototype.setInputRanges = function (areas, ecModel) {\n each(areas, function (area) {\n var targetInfo = this.findTargetInfo(area, ecModel);\n\n if (process.env.NODE_ENV !== 'production') {\n assert(!targetInfo || targetInfo === true || area.coordRange, 'coordRange must be specified when coord index specified.');\n assert(!targetInfo || targetInfo !== true || area.range, 'range must be specified in global brush.');\n }\n\n area.range = area.range || []; // convert coordRange to global range and set panelId.\n\n if (targetInfo && targetInfo !== true) {\n area.panelId = targetInfo.panelId; // (1) area.range shoule always be calculate from coordRange but does\n // not keep its original value, for the sake of the dataZoom scenario,\n // where area.coordRange remains unchanged but area.range may be changed.\n // (2) Only support converting one coordRange to pixel range in brush\n // component. So do not consider `coordRanges`.\n // (3) About __rangeOffset, see comment above.\n\n var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange);\n var rangeOffset = area.__rangeOffset;\n area.range = rangeOffset ? diffProcessor[area.brushType](result.values, rangeOffset.offset, getScales(result.xyMinMax, rangeOffset.xyMinMax)) : result.values;\n }\n }, this);\n };\n\n BrushTargetManager.prototype.makePanelOpts = function (api, getDefaultBrushType) {\n return map(this._targetInfoList, function (targetInfo) {\n var rect = targetInfo.getPanelRect();\n return {\n panelId: targetInfo.panelId,\n defaultBrushType: getDefaultBrushType ? getDefaultBrushType(targetInfo) : null,\n clipPath: brushHelper.makeRectPanelClipPath(rect),\n isTargetByCursor: brushHelper.makeRectIsTargetByCursor(rect, api, targetInfo.coordSysModel),\n getLinearBrushOtherExtent: brushHelper.makeLinearBrushOtherExtent(rect)\n };\n });\n };\n\n BrushTargetManager.prototype.controlSeries = function (area, seriesModel, ecModel) {\n // Check whether area is bound in coord, and series do not belong to that coord.\n // If do not do this check, some brush (like lineX) will controll all axes.\n var targetInfo = this.findTargetInfo(area, ecModel);\n return targetInfo === true || targetInfo && indexOf(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0;\n };\n /**\n * If return Object, a coord found.\n * If reutrn true, global found.\n * Otherwise nothing found.\n */\n\n\n BrushTargetManager.prototype.findTargetInfo = function (area, ecModel) {\n var targetInfoList = this._targetInfoList;\n var foundCpts = parseFinder(ecModel, area);\n\n for (var i = 0; i < targetInfoList.length; i++) {\n var targetInfo = targetInfoList[i];\n var areaPanelId = area.panelId;\n\n if (areaPanelId) {\n if (targetInfo.panelId === areaPanelId) {\n return targetInfo;\n }\n } else {\n for (var j = 0; j < targetInfoMatchers.length; j++) {\n if (targetInfoMatchers[j](foundCpts, targetInfo)) {\n return targetInfo;\n }\n }\n }\n }\n\n return true;\n };\n\n return BrushTargetManager;\n}();\n\nfunction formatMinMax(minMax) {\n minMax[0] > minMax[1] && minMax.reverse();\n return minMax;\n}\n\nfunction parseFinder(ecModel, finder) {\n return modelUtilParseFinder(ecModel, finder, {\n includeMainTypes: INCLUDE_FINDER_MAIN_TYPES\n });\n}\n\nvar targetInfoBuilders = {\n grid: function (foundCpts, targetInfoList) {\n var xAxisModels = foundCpts.xAxisModels;\n var yAxisModels = foundCpts.yAxisModels;\n var gridModels = foundCpts.gridModels; // Remove duplicated.\n\n var gridModelMap = createHashMap();\n var xAxesHas = {};\n var yAxesHas = {};\n\n if (!xAxisModels && !yAxisModels && !gridModels) {\n return;\n }\n\n each(xAxisModels, function (axisModel) {\n var gridModel = axisModel.axis.grid.model;\n gridModelMap.set(gridModel.id, gridModel);\n xAxesHas[gridModel.id] = true;\n });\n each(yAxisModels, function (axisModel) {\n var gridModel = axisModel.axis.grid.model;\n gridModelMap.set(gridModel.id, gridModel);\n yAxesHas[gridModel.id] = true;\n });\n each(gridModels, function (gridModel) {\n gridModelMap.set(gridModel.id, gridModel);\n xAxesHas[gridModel.id] = true;\n yAxesHas[gridModel.id] = true;\n });\n gridModelMap.each(function (gridModel) {\n var grid = gridModel.coordinateSystem;\n var cartesians = [];\n each(grid.getCartesians(), function (cartesian, index) {\n if (indexOf(xAxisModels, cartesian.getAxis('x').model) >= 0 || indexOf(yAxisModels, cartesian.getAxis('y').model) >= 0) {\n cartesians.push(cartesian);\n }\n });\n targetInfoList.push({\n panelId: 'grid--' + gridModel.id,\n gridModel: gridModel,\n coordSysModel: gridModel,\n // Use the first one as the representitive coordSys.\n coordSys: cartesians[0],\n coordSyses: cartesians,\n getPanelRect: panelRectBuilders.grid,\n xAxisDeclared: xAxesHas[gridModel.id],\n yAxisDeclared: yAxesHas[gridModel.id]\n });\n });\n },\n geo: function (foundCpts, targetInfoList) {\n each(foundCpts.geoModels, function (geoModel) {\n var coordSys = geoModel.coordinateSystem;\n targetInfoList.push({\n panelId: 'geo--' + geoModel.id,\n geoModel: geoModel,\n coordSysModel: geoModel,\n coordSys: coordSys,\n coordSyses: [coordSys],\n getPanelRect: panelRectBuilders.geo\n });\n });\n }\n};\nvar targetInfoMatchers = [// grid\nfunction (foundCpts, targetInfo) {\n var xAxisModel = foundCpts.xAxisModel;\n var yAxisModel = foundCpts.yAxisModel;\n var gridModel = foundCpts.gridModel;\n !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model);\n !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model);\n return gridModel && gridModel === targetInfo.gridModel;\n}, // geo\nfunction (foundCpts, targetInfo) {\n var geoModel = foundCpts.geoModel;\n return geoModel && geoModel === targetInfo.geoModel;\n}];\nvar panelRectBuilders = {\n grid: function () {\n // grid is not Transformable.\n return this.coordSys.master.getRect().clone();\n },\n geo: function () {\n var coordSys = this.coordSys;\n var rect = coordSys.getBoundingRect().clone(); // geo roam and zoom transform\n\n rect.applyTransform(graphic.getTransform(coordSys));\n return rect;\n }\n};\nvar coordConvert = {\n lineX: curry(axisConvert, 0),\n lineY: curry(axisConvert, 1),\n rect: function (to, coordSys, rangeOrCoordRange, clamp) {\n var xminymin = to ? coordSys.pointToData([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]], clamp) : coordSys.dataToPoint([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]], clamp);\n var xmaxymax = to ? coordSys.pointToData([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]], clamp) : coordSys.dataToPoint([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]], clamp);\n var values = [formatMinMax([xminymin[0], xmaxymax[0]]), formatMinMax([xminymin[1], xmaxymax[1]])];\n return {\n values: values,\n xyMinMax: values\n };\n },\n polygon: function (to, coordSys, rangeOrCoordRange, clamp) {\n var xyMinMax = [[Infinity, -Infinity], [Infinity, -Infinity]];\n var values = map(rangeOrCoordRange, function (item) {\n var p = to ? coordSys.pointToData(item, clamp) : coordSys.dataToPoint(item, clamp);\n xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]);\n xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]);\n xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]);\n xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]);\n return p;\n });\n return {\n values: values,\n xyMinMax: xyMinMax\n };\n }\n};\n\nfunction axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) {\n if (process.env.NODE_ENV !== 'production') {\n assert(coordSys.type === 'cartesian2d', 'lineX/lineY brush is available only in cartesian2d.');\n }\n\n var axis = coordSys.getAxis(['x', 'y'][axisNameIndex]);\n var values = formatMinMax(map([0, 1], function (i) {\n return to ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i]), true) : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i]));\n }));\n var xyMinMax = [];\n xyMinMax[axisNameIndex] = values;\n xyMinMax[1 - axisNameIndex] = [NaN, NaN];\n return {\n values: values,\n xyMinMax: xyMinMax\n };\n}\n\nvar diffProcessor = {\n lineX: curry(axisDiffProcessor, 0),\n lineY: curry(axisDiffProcessor, 1),\n rect: function (values, refer, scales) {\n return [[values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]], [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]]];\n },\n polygon: function (values, refer, scales) {\n return map(values, function (item, idx) {\n return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]];\n });\n }\n};\n\nfunction axisDiffProcessor(axisNameIndex, values, refer, scales) {\n return [values[0] - scales[axisNameIndex] * refer[0], values[1] - scales[axisNameIndex] * refer[1]];\n} // We have to process scale caused by dataZoom manually,\n// although it might be not accurate.\n// Return [0~1, 0~1]\n\n\nfunction getScales(xyMinMaxCurr, xyMinMaxOrigin) {\n var sizeCurr = getSize(xyMinMaxCurr);\n var sizeOrigin = getSize(xyMinMaxOrigin);\n var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]];\n isNaN(scales[0]) && (scales[0] = 1);\n isNaN(scales[1]) && (scales[1] = 1);\n return scales;\n}\n\nfunction getSize(xyMinMax) {\n return xyMinMax ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]] : [NaN, NaN];\n}\n\nexport default BrushTargetManager;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 depends on DataZoom and Brush\n\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport BrushController from '../../helper/BrushController.js';\nimport BrushTargetManager from '../../helper/BrushTargetManager.js';\nimport * as history from '../../dataZoom/history.js';\nimport sliderMove from '../../helper/sliderMove.js';\nimport { ToolboxFeature } from '../featureManager.js';\nimport { makeInternalComponentId, parseFinder } from '../../../util/model.js';\nimport { registerInternalOptionCreator } from '../../../model/internalComponentCreator.js';\nvar each = zrUtil.each;\nvar DATA_ZOOM_ID_BASE = makeInternalComponentId('toolbox-dataZoom_');\nvar ICON_TYPES = ['zoom', 'back'];\n\nvar DataZoomFeature =\n/** @class */\nfunction (_super) {\n __extends(DataZoomFeature, _super);\n\n function DataZoomFeature() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n DataZoomFeature.prototype.render = function (featureModel, ecModel, api, payload) {\n if (!this._brushController) {\n this._brushController = new BrushController(api.getZr());\n\n this._brushController.on('brush', zrUtil.bind(this._onBrush, this)).mount();\n }\n\n updateZoomBtnStatus(featureModel, ecModel, this, payload, api);\n updateBackBtnStatus(featureModel, ecModel);\n };\n\n DataZoomFeature.prototype.onclick = function (ecModel, api, type) {\n handlers[type].call(this);\n };\n\n DataZoomFeature.prototype.remove = function (ecModel, api) {\n this._brushController && this._brushController.unmount();\n };\n\n DataZoomFeature.prototype.dispose = function (ecModel, api) {\n this._brushController && this._brushController.dispose();\n };\n\n DataZoomFeature.prototype._onBrush = function (eventParam) {\n var areas = eventParam.areas;\n\n if (!eventParam.isEnd || !areas.length) {\n return;\n }\n\n var snapshot = {};\n var ecModel = this.ecModel;\n\n this._brushController.updateCovers([]); // remove cover\n\n\n var brushTargetManager = new BrushTargetManager(makeAxisFinder(this.model), ecModel, {\n include: ['grid']\n });\n brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {\n if (coordSys.type !== 'cartesian2d') {\n return;\n }\n\n var brushType = area.brushType;\n\n if (brushType === 'rect') {\n setBatch('x', coordSys, coordRange[0]);\n setBatch('y', coordSys, coordRange[1]);\n } else {\n setBatch({\n lineX: 'x',\n lineY: 'y'\n }[brushType], coordSys, coordRange);\n }\n });\n history.push(ecModel, snapshot);\n\n this._dispatchZoomAction(snapshot);\n\n function setBatch(dimName, coordSys, minMax) {\n var axis = coordSys.getAxis(dimName);\n var axisModel = axis.model;\n var dataZoomModel = findDataZoom(dimName, axisModel, ecModel); // Restrict range.\n\n var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan();\n\n if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) {\n minMax = sliderMove(0, minMax.slice(), axis.scale.getExtent(), 0, minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan);\n }\n\n dataZoomModel && (snapshot[dataZoomModel.id] = {\n dataZoomId: dataZoomModel.id,\n startValue: minMax[0],\n endValue: minMax[1]\n });\n }\n\n function findDataZoom(dimName, axisModel, ecModel) {\n var found;\n ecModel.eachComponent({\n mainType: 'dataZoom',\n subType: 'select'\n }, function (dzModel) {\n var has = dzModel.getAxisModel(dimName, axisModel.componentIndex);\n has && (found = dzModel);\n });\n return found;\n }\n };\n\n ;\n\n DataZoomFeature.prototype._dispatchZoomAction = function (snapshot) {\n var batch = []; // Convert from hash map to array.\n\n each(snapshot, function (batchItem, dataZoomId) {\n batch.push(zrUtil.clone(batchItem));\n });\n batch.length && this.api.dispatchAction({\n type: 'dataZoom',\n from: this.uid,\n batch: batch\n });\n };\n\n DataZoomFeature.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n filterMode: 'filter',\n // Icon group\n icon: {\n zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1',\n back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26'\n },\n // `zoom`, `back`\n title: ecModel.getLocaleModel().get(['toolbox', 'dataZoom', 'title']),\n brushStyle: {\n borderWidth: 0,\n color: 'rgba(210,219,238,0.2)'\n }\n };\n return defaultOption;\n };\n\n return DataZoomFeature;\n}(ToolboxFeature);\n\nvar handlers = {\n zoom: function () {\n var nextActive = !this._isZoomActive;\n this.api.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'dataZoomSelect',\n dataZoomSelectActive: nextActive\n });\n },\n back: function () {\n this._dispatchZoomAction(history.pop(this.ecModel));\n }\n};\n\nfunction makeAxisFinder(dzFeatureModel) {\n var setting = {\n xAxisIndex: dzFeatureModel.get('xAxisIndex', true),\n yAxisIndex: dzFeatureModel.get('yAxisIndex', true),\n xAxisId: dzFeatureModel.get('xAxisId', true),\n yAxisId: dzFeatureModel.get('yAxisId', true)\n }; // If both `xAxisIndex` `xAxisId` not set, it means 'all'.\n // If both `yAxisIndex` `yAxisId` not set, it means 'all'.\n // Some old cases set like this below to close yAxis control but leave xAxis control:\n // `{ feature: { dataZoom: { yAxisIndex: false } }`.\n\n if (setting.xAxisIndex == null && setting.xAxisId == null) {\n setting.xAxisIndex = 'all';\n }\n\n if (setting.yAxisIndex == null && setting.yAxisId == null) {\n setting.yAxisIndex = 'all';\n }\n\n return setting;\n}\n\nfunction updateBackBtnStatus(featureModel, ecModel) {\n featureModel.setIconStatus('back', history.count(ecModel) > 1 ? 'emphasis' : 'normal');\n}\n\nfunction updateZoomBtnStatus(featureModel, ecModel, view, payload, api) {\n var zoomActive = view._isZoomActive;\n\n if (payload && payload.type === 'takeGlobalCursor') {\n zoomActive = payload.key === 'dataZoomSelect' ? payload.dataZoomSelectActive : false;\n }\n\n view._isZoomActive = zoomActive;\n featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal');\n var brushTargetManager = new BrushTargetManager(makeAxisFinder(featureModel), ecModel, {\n include: ['grid']\n });\n var panels = brushTargetManager.makePanelOpts(api, function (targetInfo) {\n return targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared ? 'lineX' : !targetInfo.xAxisDeclared && targetInfo.yAxisDeclared ? 'lineY' : 'rect';\n });\n\n view._brushController.setPanels(panels).enableBrush(zoomActive && panels.length ? {\n brushType: 'auto',\n brushStyle: featureModel.getModel('brushStyle').getItemStyle()\n } : false);\n}\n\nregisterInternalOptionCreator('dataZoom', function (ecModel) {\n var toolboxModel = ecModel.getComponent('toolbox', 0);\n var featureDataZoomPath = ['feature', 'dataZoom'];\n\n if (!toolboxModel || toolboxModel.get(featureDataZoomPath) == null) {\n return;\n }\n\n var dzFeatureModel = toolboxModel.getModel(featureDataZoomPath);\n var dzOptions = [];\n var finder = makeAxisFinder(dzFeatureModel);\n var finderResult = parseFinder(ecModel, finder);\n each(finderResult.xAxisModels, function (axisModel) {\n return buildInternalOptions(axisModel, 'xAxis', 'xAxisIndex');\n });\n each(finderResult.yAxisModels, function (axisModel) {\n return buildInternalOptions(axisModel, 'yAxis', 'yAxisIndex');\n });\n\n function buildInternalOptions(axisModel, axisMainType, axisIndexPropName) {\n var axisIndex = axisModel.componentIndex;\n var newOpt = {\n type: 'select',\n $fromToolbox: true,\n // Default to be filter\n filterMode: dzFeatureModel.get('filterMode', true) || 'filter',\n // Id for merge mapping.\n id: DATA_ZOOM_ID_BASE + axisMainType + axisIndex\n };\n newOpt[axisIndexPropName] = axisIndex;\n dzOptions.push(newOpt);\n }\n\n return dzOptions;\n});\nexport default DataZoomFeature;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 installDataZoomSelect } from '../../component/dataZoom/installDataZoomSelect.js';\nimport ToolboxModel from './ToolboxModel.js';\nimport ToolboxView from './ToolboxView.js'; // TODOD: REGISTER IN INSTALL\n\nimport { registerFeature } from './featureManager.js';\nimport SaveAsImage from './feature/SaveAsImage.js';\nimport MagicType from './feature/MagicType.js';\nimport DataView from './feature/DataView.js';\nimport Restore from './feature/Restore.js';\nimport DataZoom from './feature/DataZoom.js';\nexport function install(registers) {\n registers.registerComponentModel(ToolboxModel);\n registers.registerComponentView(ToolboxView);\n registerFeature('saveAsImage', SaveAsImage);\n registerFeature('magicType', MagicType);\n registerFeature('dataView', DataView);\n registerFeature('dataZoom', DataZoom);\n registerFeature('restore', Restore);\n use(installDataZoomSelect);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 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 costomized 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 costomized scale.\n var dataIndex = labelItem.tickValue;\n var itemModel = data.getItemModel(dataIndex);\n var normalLabelModel = itemModel.getModel('label');\n var hoverLabelModel = itemModel.getModel(['emphasis', 'label']);\n var 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 this._progressLine.shape.x2 = toCoord;\n\n this._progressLine.dirty();\n\n var targetDataIndex = this._findNearestTick(toCoord);\n\n var timelineModel = this.model;\n\n if (trigger || targetDataIndex !== timelineModel.getCurrentIndex() && timelineModel.get('realtime')) {\n this._changeTimeline(targetDataIndex);\n }\n };\n\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 var data = seriesModel.getData();\n var coordSys = seriesModel.coordinateSystem; // 1. If not specify the position with pixel directly\n // 2. If `coord` is not a data array. Which uses `xAxis`,\n // `yAxis` to specify the coord on each dimension\n // parseFloat first because item.x and item.y can be percent string like '20%'\n\n if (item && !hasXAndY(item) && !isArray(item.coord) && coordSys) {\n var dims = coordSys.dimensions;\n var axisInfo = getAxisInfo(item, data, coordSys, seriesModel); // Clone the option\n // Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value\n\n item = clone(item);\n\n if (item.type && markerTypeCalculator[item.type] && axisInfo.baseAxis && axisInfo.valueAxis) {\n var otherCoordIndex = indexOf(dims, axisInfo.baseAxis.dim);\n var targetCoordIndex = indexOf(dims, axisInfo.valueAxis.dim);\n var coordInfo = markerTypeCalculator[item.type](data, axisInfo.baseDataDim, axisInfo.valueDataDim, otherCoordIndex, targetCoordIndex);\n item.coord = coordInfo[0]; // Force to use the value of calculated value.\n // let item use the value without stack.\n\n item.value = coordInfo[1];\n } else {\n // FIXME Only has one of xAxis and yAxis.\n var coord = [item.xAxis != null ? item.xAxis : item.radiusAxis, item.yAxis != null ? item.yAxis : item.angleAxis]; // Each coord support max, min, average\n\n for (var i = 0; i < 2; i++) {\n if (markerTypeCalculator[coord[i]]) {\n coord[i] = numCalculate(data, data.mapDimension(dims[i]), coord[i]);\n }\n }\n\n item.coord = coord;\n }\n }\n\n return item;\n}\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 // Alwalys 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 // Alwalys 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 getMarkerPoisition\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 isInifinity(val) {\n return !isNaN(val) && !isFinite(val);\n} // If a markLine has one dim\n\n\nfunction ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {\n var otherDimIndex = 1 - dimIndex;\n var dimName = coordSys.dimensions[dimIndex];\n return isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex]) && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]);\n}\n\nfunction markLineFilter(coordSys, item) {\n if (coordSys.type === 'cartesian2d') {\n var fromCoord = item[0].coord;\n var toCoord = item[1].coord; // In case\n // {\n // markLine: {\n // data: [{ yAxis: 2 }]\n // }\n // }\n\n if (fromCoord && toCoord && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys) || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))) {\n return true;\n }\n }\n\n return markerHelper.dataFilter(coordSys, item[0]) && markerHelper.dataFilter(coordSys, item[1]);\n}\n\nfunction updateSingleMarkerEndLayout(data, idx, isFrom, seriesModel, api) {\n var coordSys = seriesModel.coordinateSystem;\n var itemModel = data.getItemModel(idx);\n var point;\n var xPx = numberUtil.parsePercent(itemModel.get('x'), api.getWidth());\n var yPx = numberUtil.parsePercent(itemModel.get('y'), api.getHeight());\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n point = [xPx, yPx];\n } else {\n // Chart like bar may have there own marker positioning logic\n if (seriesModel.getMarkerPosition) {\n // Use the getMarkerPoisition\n point = seriesModel.getMarkerPosition(data.getValues(data.dimensions, idx));\n } else {\n var dims = coordSys.dimensions;\n var x = data.get(dims[0], idx);\n var y = data.get(dims[1], idx);\n point = coordSys.dataToPoint([x, y]);\n } // Expand line to the edge of grid if value on one axis is Inifnity\n // In case\n // markLine: {\n // data: [{\n // yAxis: 2\n // // or\n // type: 'average'\n // }]\n // }\n\n\n if (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 (isInifinity(data.get(dims[0], idx))) {\n point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]);\n } else if (isInifinity(data.get(dims[1], idx))) {\n point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]);\n }\n } // Use x, y if has any\n\n\n if (!isNaN(xPx)) {\n point[0] = xPx;\n }\n\n if (!isNaN(yPx)) {\n point[1] = yPx;\n }\n }\n\n data.setItemLayout(idx, point);\n}\n\nvar 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 var lt = markerHelper.dataTransform(seriesModel, item[0]);\n var rb = markerHelper.dataTransform(seriesModel, item[1]); // 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 isInifinity(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 isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex]);\n}\n\nfunction markAreaFilter(coordSys, item) {\n var fromCoord = item.coord[0];\n var toCoord = item.coord[1];\n 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 // Use the getMarkerPoisition\n point = seriesModel.getMarkerPosition(data.getValues(dims, idx));\n } else {\n var x = data.get(dims[0], idx);\n var y = data.get(dims[1], idx);\n var pt = [x, y];\n coordSys.clampData && coordSys.clampData(pt, pt);\n point = coordSys.dataToPoint(pt, true);\n }\n\n if (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 (isInifinity(x)) {\n point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === 'x0' ? 0 : 1]);\n } else if (isInifinity(y)) {\n point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === 'y0' ? 0 : 1]);\n }\n } // Use x, y if has any\n\n\n if (!isNaN(xPx)) {\n point[0] = xPx;\n }\n\n if (!isNaN(yPx)) {\n point[1] = yPx;\n }\n }\n\n return point;\n}\n\nvar dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']];\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*/\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';\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 el = e.target;\n var visualMapModel = this.visualMapModel;\n\n if (!el || getECData(el).dataIndex == null) {\n return;\n }\n\n var ecData = getECData(el);\n var dataModel = this.ecModel.getSeriesByIndex(ecData.seriesIndex);\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 diferrent 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 { 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);","/**\r\n * Created by DELL on 2019/4/22.\r\n */\r\n/**风速换算 */\r\nexport function WindLevel(wv){\r\n var level = \"\";\r\n if (wv >= 0.0 && wv <= 0.2)\r\n {\r\n level = \"无风\";\r\n }\r\n else if (wv >= 0.3 && wv <= 1.5)\r\n {\r\n level = \"1级\";\r\n }\r\n else if (wv >= 1.6 && wv <= 3.3)\r\n {\r\n level = \"2级\";\r\n }\r\n else if (wv >= 3.4 && wv <= 5.4)\r\n {\r\n level = \"3级\";\r\n }\r\n else if (wv >= 5.5 && wv <= 7.9)\r\n {\r\n level = \"4级\";\r\n }\r\n else if (wv >= 8.0 && wv <= 10.7)\r\n {\r\n level = \"5级\";\r\n }\r\n else if (wv >= 10.8 && wv <= 13.8)\r\n {\r\n level = \"6级\";\r\n }\r\n else if (wv >= 13.9 && wv <= 17.1)\r\n {\r\n level = \"7级\";\r\n }\r\n else if (wv >= 17.2 && wv <= 20.7)\r\n {\r\n level = \"8级\";\r\n }\r\n else if (wv >= 20.8 && wv <= 24.4)\r\n {\r\n level = \"9级\";\r\n }\r\n else if (wv >= 24.5 && wv <= 28.4)\r\n {\r\n level = \"10级\";\r\n }\r\n else if (wv >= 28.5 && wv <= 32.6)\r\n {\r\n level = \"11级\";\r\n }\r\n else if (wv >= 32.7 && wv <= 36.9)\r\n {\r\n level = \"12级\";\r\n }\r\n else if (wv >= 37.0 && wv <= 41.4)\r\n {\r\n level = \"13级\";\r\n }\r\n else if (wv >= 41.5 && wv <= 46.1)\r\n {\r\n level = \"14级\";\r\n }\r\n else if (wv >= 46.2 && wv <= 50.9)\r\n {\r\n level = \"15级\";\r\n }\r\n return level;\r\n }\r\n/**风速换算 */\r\nexport function WindLevel1(wv){\r\n var level = \"\";\r\n if (wv >= 0.0 && wv <= 0.2)\r\n {\r\n level = 0;\r\n }\r\n else if (wv >= 0.3 && wv <= 1.5)\r\n {\r\n level = 1;\r\n }\r\n else if (wv >= 1.6 && wv <= 3.3)\r\n {\r\n level = 2;\r\n }\r\n else if (wv >= 3.4 && wv <= 5.4)\r\n {\r\n level = 3;\r\n }\r\n else if (wv >= 5.5 && wv <= 7.9)\r\n {\r\n level = 4;\r\n }\r\n else if (wv >= 8.0 && wv <= 10.7)\r\n {\r\n level = 5;\r\n }\r\n else if (wv >= 10.8 && wv <= 13.8)\r\n {\r\n level = 6;\r\n }\r\n else if (wv >= 13.9 && wv <= 17.1)\r\n {\r\n level = 7;\r\n }\r\n else if (wv >= 17.2 && wv <= 20.7)\r\n {\r\n level = 8;\r\n }\r\n else if (wv >= 20.8 && wv <= 24.4)\r\n {\r\n level = 9;\r\n }\r\n else if (wv >= 24.5 && wv <= 28.4)\r\n {\r\n level = 10;\r\n }\r\n else if (wv >= 28.5 && wv <= 32.6)\r\n {\r\n level = 11;\r\n }\r\n else if (wv >= 32.7 && wv <= 36.9)\r\n {\r\n level = 12;\r\n }\r\n else if (wv >= 37.0 && wv <= 41.4)\r\n {\r\n level = 13;\r\n }\r\n else if (wv >= 41.5 && wv <= 46.1)\r\n {\r\n level = 14;\r\n }\r\n else if (wv >= 46.2 && wv <= 50.9)\r\n {\r\n level = 15;\r\n }\r\n return level;\r\n }\r\nexport function Getfengxiang(fx1) {\r\n var fx3 = \"\";\r\n if (fx1 > 0 && fx1 < 11.25) {\r\n fx3 = \"北风\";\r\n }\r\n else if (fx1 > 11.26 && fx1 < 33.75) {\r\n fx3 = \"东北风\";\r\n }\r\n else if (fx1 > 33.76 && fx1 < 56.25) {\r\n fx3 = \"东北风\";\r\n }\r\n else if (fx1 > 56.26 && fx1 < 78.75) {\r\n fx3 = \"东北风\";\r\n }\r\n else if (fx1 > 78.76 && fx1 < 101.25) {\r\n fx3 = \"东风\";\r\n }\r\n else if (fx1 > 101.25 && fx1 < 123.75) {\r\n fx3 = \"东南风\";\r\n }\r\n else if (fx1 > 123.76 && fx1 < 146.25) {\r\n fx3 = \"东南风\";\r\n }\r\n else if (fx1 > 146.26 && fx1 < 168.75) {\r\n fx3 = \"东南风\";\r\n }\r\n else if (fx1 > 168.76 && fx1 < 191.25) {\r\n fx3 = \"南风\";\r\n }\r\n else if (fx1 > 191.26 && fx1 < 213.75) {\r\n fx3 = \"西南风\";\r\n }\r\n else if (fx1 > 213.76 && fx1 < 236.25) {\r\n fx3 = \"西南风\";\r\n }\r\n else if (fx1 > 236.26 && fx1 < 258.75) {\r\n fx3 = \"西南风\";\r\n }\r\n else if (fx1 > 258.76 && fx1 < 281.25) {\r\n fx3 = \"西风\";\r\n }\r\n else if (fx1 > 281.76 && fx1 < 303.75) {\r\n fx3 = \"西北风\";\r\n }\r\n else if (fx1 > 303.76 && fx1 < 326.25) {\r\n fx3 = \"西北风\";\r\n }\r\n else if (fx1 > 326.26 && fx1 < 348.75) {\r\n fx3 = \"西北风\";\r\n }\r\n else { fx3 = \"北风\"; }\r\n\r\n return fx3;\r\n}\r\n\r\nexport function Getfengsu(fs1) {\r\n var fs3 = \"\",fj;\r\n if (fs1 > 0 && fs1 < 0.2) {\r\n fs3 = \"无风\";\r\n fj = 0;\r\n }\r\n else if (fs1 > 0.3 && fs1 < 1.5) {\r\n fs3 = \"软风\";\r\n fj = 1;\r\n }\r\n else if (fs1 > 1.6 && fs1 < 3.3) {\r\n fs3 = \"轻风\";\r\n fj = 2;\r\n }\r\n else if (fs1 > 3.4 && fs1 < 5.4) {\r\n fs3 = \"微风\";\r\n fj = 3;\r\n }\r\n else if (fs1 > 5.5 && fs1 < 7.9) {\r\n fs3 = \"和风\";\r\n fj = 4;\r\n }\r\n else if (fs1 > 8.0 && fs1 < 10.7) {\r\n fs3 = \"轻劲风\";\r\n fj = 5;\r\n }\r\n else if (fs1 > 10.8 && fs1 < 13.8) {\r\n fs3 = \"强风\";\r\n fj = 6;\r\n }\r\n else if (fs1 > 13.9 && fs1 < 17.1) {\r\n fs3 = \"疾风\";\r\n fj = 7;\r\n }\r\n else if (fs1 > 17.2 && fs1 < 20.7) {\r\n fs3 = \"大风\";\r\n fj = 8;\r\n }\r\n else if (fs1 > 20.8 && fs1 < 24.4) {\r\n fs3 = \"烈风\";\r\n fj = 9;\r\n }\r\n else if (fs1 > 24.5 && fs1 < 28.4) {\r\n fs3 = \"狂风\";\r\n fj = 10;\r\n }\r\n else if (fs1 > 28.5 && fs1 < 32.6) {\r\n fs3 = \"暴风\";\r\n fj = 11;\r\n }\r\n else if (fs1 > 32.7 && fs1 < 36.9) {\r\n fs3 = \"台风\";\r\n fj = 12;\r\n }\r\n else { fs3 = \"微风\";fj = 3; }\r\n return {\"name\":fs3,\"value\":fj};\r\n}"],"sourceRoot":""}