{"version":3,"sources":["../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/createSeriesData.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/labelHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/createRenderPlanner.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/SymbolDraw.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/Symbol.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/action/roamHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/LineDraw.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/LinePath.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/Line.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/animation/basicTrasition.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/line/LineSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/line/helper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/line/poly.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/createClipPathFromCoordSys.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/line/LineView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/line/lineAnimationDiff.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/bar/BaseBarSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/bar/BarSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/bar/BarView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/pie/pieLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/pie/labelLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/pieHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/pie/PieView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/createSeriesDataSimply.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/pie/PieSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/scatter/ScatterSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/LargeSymbolDraw.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/scatter/ScatterView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/radar/radarLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/radar/backwardCompat.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/radar/RadarView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/radar/RadarSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/map/MapView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/map/MapSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/map/mapDataStatistic.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/map/mapSymbolLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/tree/layoutHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/tree/TreeView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/treeHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/tree/TreeSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/tree/traversalHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/tree/treeLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/tree/treeVisual.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/treemap/treemapAction.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/enableAriaDecalForTree.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/treemap/TreemapSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/treemap/Breadcrumb.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/treemap/TreemapView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/treemap/treemapVisual.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/treemap/treemapLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/categoryFilter.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/categoryVisual.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/edgeVisual.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/multipleGraphEdgeHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/simpleLayoutHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/simpleLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/graphHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/circularLayoutHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/circularLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/forceHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/forceLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/createView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/adjustEdge.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/GraphView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/createGraphFromNodeEdge.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/GraphSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/graph/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/gauge/PointerPath.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/gauge/GaugeView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/gauge/GaugeSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/funnel/FunnelView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/funnel/FunnelSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/funnel/funnelLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/parallel/ParallelView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/parallel/ParallelSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/parallel/parallelVisual.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sankey/SankeyView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sankey/SankeySeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sankey/sankeyLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sankey/sankeyVisual.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/whiskerBoxCommon.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/boxplot/BoxplotSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/boxplot/BoxplotView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/boxplot/boxplotVisual.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/boxplot/boxplotLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/boxplot/boxplotTransform.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/boxplot/prepareBoxplotData.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/candlestick/CandlestickView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/candlestick/CandlestickSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/candlestick/preprocessor.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/candlestick/candlestickVisual.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/candlestick/candlestickLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/EffectSymbol.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/effectScatter/EffectScatterView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/effectScatter/EffectScatterSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/EffectLine.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/Polyline.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/EffectPolyline.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/helper/LargeLineDraw.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/lines/linesLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/lines/LinesView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/lines/LinesSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/lines/linesVisual.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/heatmap/HeatmapLayer.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/heatmap/HeatmapView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/heatmap/HeatmapSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/bar/PictorialBarView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/bar/PictorialBarSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/themeRiver/ThemeRiverView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/themeRiver/ThemeRiverSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/themeRiver/themeRiverLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sunburst/SunburstPiece.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sunburst/sunburstAction.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sunburst/SunburstView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sunburst/SunburstSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sunburst/sunburstLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sunburst/sunburstVisual.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/custom/CustomSeries.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/custom/prepare.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/custom/CustomView.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/animation/morphTransitionHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/animation/universalTransition.js","../node_modules/@dhi/react-components/node_modules/echarts/index.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/line/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/bar/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/pie/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/scatter/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/radar/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/map/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/tree/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/tree/treeAction.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/treemap/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/gauge/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/funnel/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/parallel/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sankey/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/boxplot/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/candlestick/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/effectScatter/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/lines/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/heatmap/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/bar/installPictorialBar.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/themeRiver/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/sunburst/install.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/chart/custom/install.js","../../../src/helper/pick.ts","../../../src/helper/is-function.ts","../../src/index.ts","../../src/core.tsx","../../../src/helper/is-string.ts"],"names":["createSeriesData","sourceRaw","seriesModel","opt","source","sourceManager","getSourceManager","isOriginalSource","createSourceFromSeriesDataOption","getSource","sourceFormat","SOURCE_FORMAT_ORIGINAL","coordSysInfo","getCoordSysInfoBySeries","coordSysDimDefs","coordSysName","get","registeredCoordSys","CoordinateSystem","coordSysDims","zrUtil","dim","dimInfo","name","axisModel","axisMap","axisType","type","getDimensionTypeByAxis","getDimensionsInfo","dimensions","slice","getCoordSysDimDefs","useEncodeDefaulter","encodeDefaulter","makeSeriesEncodeForAxisCoordSys","createDimensionOptions","coordDimensions","generateCoord","encodeDefine","getEncode","canOmitUnusedDimensions","schema","prepareSeriesDataSchema","firstCategoryDimIndex","dimInfoList","createInvertedIndices","hasNameEncode","dimIndex","coordDim","categoryAxisModel","categoryAxisMap","ordinalMeta","getOrdinalMeta","otherDims","itemName","injectOrdinalMeta","store","getSharedDataStore","stackCalculationInfo","enableDataStack","data","SeriesData","setCalculationInfo","dimValueGetter","sampleItem","arr","i","length","firstDataNotNull","getDataItemValue","isNeedCompleteOrdinalData","itemOpt","dimName","dataIndex","this","defaultDimValueGetter","hasItemOption","initData","getDefaultLabel","labelDims","mapDimensionsAll","len","rawVal","retrieveRawValue","vals","push","join","getDefaultInterpolatedLabel","interpolatedValue","isArray","getDimensionIndex","createRenderPlanner","inner","makeInner","fields","pipelineContext","originalLarge","large","originalProgressive","progressiveRender","progressive","symbolNeedsDraw","point","idx","isNaN","isIgnore","clipShape","contain","getItemVisual","normalizeUpdateOpt","isObject","makeSeriesScope","hostModel","emphasisModel","getModel","emphasisItemStyle","getItemStyle","blurItemStyle","selectItemStyle","focus","blurScope","hoverScale","labelStatesModels","getLabelStatesModels","cursorStyle","SymbolDraw","SymbolCtor","group","graphic","_SymbolCtor","SymbolClz","prototype","updateData","oldData","_data","disableAnimation","seriesScope","symbolUpdateOpt","getSymbolPoint","getItemLayout","removeAll","diff","add","newIdx","symbolEl","setPosition","setItemGraphicEl","update","oldIdx","getItemGraphicEl","newSymbolType","oldSymbolType","getSymbolType","remove","target","x","y","attr","el","fadeOut","execute","_getSymbolPoint","isPersistent","updateLayout","_this","eachItemGraphicEl","markRedraw","incrementalPrepareUpdate","_seriesScope","incrementalUpdate","taskParams","updateIncrementalAndHover","isGroup","incremental","ensureState","hoverLayer","start","end","traverse","enableAnimation","Symbol","_super","opts","call","__extends","_createSymbol","symbolType","symbolSize","keepAspect","symbolPath","createSymbol","z2","culling","scaleX","scaleY","drift","driftSymbol","_symbolType","stopSymbolAnimation","toLastFrame","childAt","stopAnimation","getSymbolPath","highlight","enterEmphasis","downplay","leaveEmphasis","setZ","zlevel","z","setDraggable","draggable","cursor","silent","getSymbolSize","isInit","saveOldStyle","_updateCommon","_sizeX","_sizeY","style","opacity","_seriesModel","itemModel","getItemModel","getShallow","symbolRotate","Math","PI","symbolOffset","normalizeSymbolOffset","symbolStyle","visualColor","fill","ZRImage","pathStyle","useStyle","extend","image","width","height","__isEmptyBrush","decal","setColor","symbolInnerColor","strokeNoScale","liftZ","z2Origin","_z2","useNameLabel","setLabelStyle","labelFetcher","labelDataIndex","defaultText","getName","inheritColor","defaultOpacity","emphasisState","scaleRatio","max","setSymbolScale","enableHoverEmphasis","scale","cb","getECData","animationOpt","animation","fadeLabel","textContent","getTextContent","removeOpt","removeTextContent","normalizeSymbolSize","dx","dy","parent","updateCenterAndZoom","view","payload","zoomLimit","previousZoom","getZoom","center","getCenter","zoom","dataToPoint","setCenter","pointToData","zoomMin","min","zoomMax","Infinity","fixX","originX","fixY","originY","updateTransform","setZoom","LineDraw","LineCtor","_LineCtor","LineGroup","lineData","lineDraw","oldLineData","_lineData","_doAdd","_doUpdate","animators","isEffectObject","lineNeedsDraw","newLineData","itemEl","lineStyle","getLineStyle","emphasisLineStyle","blurLineStyle","selectLineStyle","isPointNaN","pt","pts","straightLineProto","bezierCurveProto","StraightLineShape","x1","y1","x2","y2","percent","CurveShape","apply","arguments","isStraightLine","shape","cpx1","cpy1","ECLinePath","getDefaultStyle","stroke","getDefaultShape","buildPath","ctx","pointAt","t","tangentAt","p","vec2","SYMBOL_CATEGORIES","makeSymbolTypeKey","symbolCategory","symbolKeepAspect","symbolSizeArr","symbolUtil","symbolOffsetArr","__specifiedRotation","setLinePoints","targetShape","points","cp1","NaN","Line","_createLine","line","subPixelOptimize","createLine","each","symbol","_updateCommonStl","childOfName","linePoints","key","getLinePath","SPECIAL_STATES","stateName","lineState","getState","lineStateStyle","state","stateStyle","getRawValue","getFormattedLabel","dataType","isFinite","round","label","labelNormalModel","normal","__align","align","__verticalAlign","verticalAlign","__position","distance","__labelDistance","setTextConfig","position","local","inside","linePath","dirty","beforeUpdate","lineGroup","symbolFrom","symbolTo","ignore","invScale","parentNode","__dirty","fromPos","toPos","d","vector","setSymbolRotation","textAlign","textVerticalAlign","distanceX","distanceY","halfPercent","tangent","n","cp","dir","rotation","atan2","setStyle","specifiedRotation","transitionStore","getAnimationConfig","animationType","animatableModel","extraOpts","extraDelayParams","animationPayload","ecModel","updatePayload","getUpdatePayload","isUpdate","isAnimationEnabled","duration","easing","delay","retrieve2","animateOrSetProps","props","during","isFrom","isRemove","animationConfig","getAnimationDelayParams","animateConfig","done","force","setToFinal","scope","animateFrom","animateTo","updateProps","initProps","isElementRemoved","__zr","removeElement","fadeOutDisplayable","removeTextGuideLine","removeElementWithFadeOut","doRemove","disp","oldStyle","getOldStyle","LineSeriesModel","hasSymbolVisual","getInitialData","option","getLegendIcon","Group","itemHeight","itemWidth","visualType","getData","getVisual","visualRotate","size","itemStyle","iconRotate","setOrigin","indexOf","lineWidth","dependencies","defaultOption","coordinateSystem","legendHoverLink","clip","endLabel","show","valueAnimation","emphasis","step","smooth","smoothMonotone","showSymbol","showAllSymbol","connectNulls","sampling","animationEasing","hoverLayerThreshold","universalTransition","divideShape","SeriesModel","prepareDataCoordInfo","coordSys","valueOrigin","baseAxis","getBaseAxis","valueAxis","getOtherAxis","valueStart","extent","getExtent","getValueStart","baseAxisDim","valueAxisDim","valueDim","mapDimension","baseDim","baseDataOffset","dims","map","stacked","stackResultDim","getCalculationInfo","isDimensionStacked","dataDimsForPoint","stackedOverDimension","getStackedOnPoint","dataCoordInfo","value","stackedData","mathMin","mathMax","isPointNull","drawSegment","segLen","allLen","prevX","prevY","cpx0","cpy0","k","nextIdx","nextX","nextY","tmpK","ratioNextSeg","vx","vy","nextCpx0","nextCpy0","dx0","dx1","dy0","dy1","lenPrevSeg","lenNextSeg","abs","sqrt","bezierCurveTo","lineTo","ECPolylineShape","smoothConstraint","ECPolyline","getPointOn","xOrY","path","createPathProxy","x0","y0","CMD","PathProxy","isDimX","roots","x3","y3","M","L","val","C","nRoot","cubicRootAt","i_1","t_1","cubicAt","Path","ECPolygonShape","ECPolygon","stackedOnPoints","stackedOnSmooth","closePath","createGridClipPath","cartesian","hasAnimation","rect","getArea","floor","clipPath","isHorizontal","isAxisInversed","inverse","duringCb","createPolarClipPath","polar","sectorArea","r0","r","cx","cy","startAngle","endAngle","clockwise","createClipPath","isPointsSame","points1","points2","bboxFromPoints","minX","minY","maxX","maxY","getBoundingDiff","_a","min1","max1","_b","min2","max2","getSmooth","turnPointsIntoStep","stepTurnAt","baseIndex","stepPoints","stepPt","nextPt","middle","stepPt2","getIsIgnoreFunc","isAuto","categoryAxis","getAxesByScale","axisExtent","availSize","count","dataLen","canShowAllSymbolForCategory","categoryDataDim","labelMap","getViewLabels","labelItem","ordinalNumber","getRawOrdinalNumber","tickValue","hasOwnProperty","getPointAtIndex","anyStateShowEndLabel","createLineClipPath","lineView","isCoordinateSystemType","endLabelModel_1","valueAnimation_1","data_1","labelAnimationRecord_1","lastFrameIndex","clipRect","_endLabelOnDuring","_endLabel","originalX","originalY","rectShape","expandSize","LineView","init","symbolDraw","_symbolDraw","_lineGroup","render","api","lineStyleModel","areaStyleModel","getLayout","isCoordSysPolar","prevCoordSys","_coordSys","polyline","_polyline","polygon","_polygon","isAreaChart","isEmpty","createFloat32Array","getStackedOnPoints","isIgnoreFunc","__temp","clipShapeForSymbol","_clipShapeForSymbol","visualMetaList","visualMeta","getDimensionInfo","dimension","axis","getAxis","axisScaleExtent","colorStops","stops","stop","coord","toGlobalCoord","dataToCoord","offset","color","stopLen","outerColors","reverse","minCoord","maxCoord","coordSpan","unshift","gradient","getVisualGradient","_step","_newPolygon","_initOrUpdateEndLabel","convertToColorString","setClipPath","_stackedOnPoints","_points","_doUpdateAnimation","setShape","_initSymbolLabelAnimation","_newPolyline","lineJoin","setStatesStylesFromModel","seriesIndex","stackedOnSeries","getAreaStyle","changePolyState","toState","_changePolyState","onHoverStateChange","_valueOrigin","dispose","modelUtil","Array","symbolLabel","ChartView","setStatesFlag","segmentIgnoreThreshold","isHorizontalOrRadial","isAxisInverse","seriesDuration","seriesDalay","seriesDalayValue","current","polarClip","pointToCoord","gridClip","ratio","text","disableLabelAnimation","endLabelModel","data_2","ignoreClip","setTextContent","getLastIndexNotNull","enableTextSetter","isBaseInversed","getEndLabelStateSpecified","textConfig","animationRecord","precision","dataIndexRange","a","b","dimIdx","prevIndex","nextIndex","range","getIndexRange","indices","startValue","endValue","labelInner","setLabelText","newData","oldStackedOnPoints","newStackedOnPoints","oldCoordSys","newCoordSys","oldValueOrigin","newValueOrigin","diffResult","cmd","idx1","diffData","currPoints","nextPoints","currStackedPoints","nextStackedPoints","status","sortedIndices","rawIndices","newDataOldCoordInfo","oldPoints","newPoints","diffItem","pointAdded","oldIdx2","newIdx2","currentX","currentY","getRawIndex","newDataDimsForPoint","oldPt","stackedOnPoint","sort","sortedCurrPoints","sortedNextPoints","sortedCurrStackedPoints","sortedNextStackedPoints","sortedStatus","i2","idx2","next","stackedOnCurrent","stackedOnNext","lineAnimationDiff","__points","updatedDataInfo","diffStatus","ptIdx","dirtyShape","BaseBarSeriesModel","getMarkerPosition","clampData","barMinHeight","barMinAngle","largeThreshold","progressiveChunkMode","registerClass","BarSeriesModel","getProgressive","getProgressiveThreshold","progressiveThreshold","brushSelector","selectors","inheritDefaultOption","roundCap","showBackground","backgroundStyle","borderColor","borderWidth","borderType","borderRadius","shadowBlur","shadowColor","shadowOffsetX","shadowOffsetY","select","realtimeSort","_eventPos","BarView","_isFirstFrame","_model","_removeOnRenderedListener","_updateDrawMode","coordinateSystemType","_isLargeDraw","_renderLarge","_renderNormal","incrementalPrepareRender","_clear","_updateLargeClip","incrementalRender","params","_incrementalRenderLarge","isLargeDraw","animationModel","realtimeSortCfg","realtimeSortOption","process","otherAxis","shouldRealtimeSort","_enableRealtimeSort","needsClip","coordSysClipArea","onBand","expandWidth","getClipArea","removeClipPath","drawBackground","backgroundModel","barBorderRadius","bgEls","oldBgEls","_backgroundEls","isInitSort","isChangeOrder","createBackground","bgLayout","bgEl","layout","Sector","Rect","createBackgroundShape","createBackgroundEl","hasValue","isValidLayout","isClipped","elementCreator","model","updateStyle","updateRealtimeAnimation","newIndex","oldIndex","bgGroup","_backgroundGroup","createLarge","_removeBackground","_dispatchInitSort","orderMapping_1","_onRendered","_updateSortWithinSameData","getZr","on","_dataSort","orderMapping","info","dataIdx","mappedValue","ordinalNumbers","item","_isOrderChangedWithinSameData","ordinalDataDim","lastValue","Number","MAX_VALUE","tickNum","categories","rawIdx","rawIndexOf","MIN_VALUE","indexOfRawIndex","_isOrderDifferentInView","orderInfo","tickMax","sortInfo","dispatchAction","componentType","axisId","index","sortResult","off","cartesian2d","coordSysBoundingRect","signWidth","signHeight","coordSysX2","coordSysY2","xClipped","yClipped","signR","tmp","clipped","__dataIndex","isRadial","ShapeClass","Sausage","sector","defaults","positionMap","createPolarPositionMapping","calculateTextPosition","createSectorCalculateTextPosition","isRoundCap","animateProperty","animateTarget","seriesAnimationModel","seriesTarget","axisTarget","axisAnimationModel","checkPropertiesNotValid","obj","rectPropties","polarPropties","fixedLineWidth","rawLayout","getLineWidth","signX","signY","arcOrAngle","isPolar","labelPositionOutside","defaultOutsidePosition","setSectorTextRotation","setLabelValueAnimation","isZeroOnPolar","states","LagePathShape","LargePath","startPoint","__startPoint","baseDimIdx","__baseDimIdx","moveTo","largeDataIndices","barWidth","backgroundStartPoint","__largeDataIndices","__barWidth","setLargeBackgroundStyle","globalStyle","setLargeStyle","largePathUpdateDataIndex","throttle","event","largePath","valueDimIdx","barWidthHalf","startValueVal","pointerBaseVal","pointerValueVal","baseLowerBound","baseUpperBound","ii","barBaseVal","barValueVal","largePathFindDataIndex","offsetX","offsetY","coordLayout","sectorShape","PI2","RADIAN","getViewRect","getBoxLayoutParams","getWidth","getHeight","getBasicPieLayout","viewRect","radius","parsePercent","pieLayout","seriesType","eachSeriesByType","minAngle","validDataCount","sum","getSum","unitRadian","roseType","stillShowZeroSum","getDataExtent","restAngle","valueSumLargerThanMinAngle","currentAngle","setLayout","angle","setItemLayout","linearMap","angle_1","layout_1","layout_2","adjustSingleSide","list","viewWidth","viewHeight","viewLeft","viewTop","farthestX","labelAlignTo","shiftLayoutOnY","items","topSemi","bottomSemi","semi","len2","rA","rB","recalculateXOnSemiToAlignOnEllipseCurve","recalculateX","rB2","rA2","isPositionCenter","pieLabelLayout","labelLayoutList","hasLabelRotate","minShowLabelRadian","setNotShow","labelLine","getTextGuideLine","labelModel","labelPosition","labelDistance","edgeDistance","bleedMargin","labelLineModel","labelLineLen","labelLineLen2","isLabelShown","textX","textY","midAngle","nx","cos","ny","sin","labelRotate","isLabelInside","rotate","radialAngle","selectState","textRect","getBoundingRect","clone","applyTransform","getComputedTransform","margin","minTurnAngle","maxSurfaceAngle","surfaceNormal","Point","leftList","rightList","leftmostX","rightmostX","isAlignToEdge","realTextWidth","targetTextWidth","dist","avoidOverlap","notShowLabel","limitTurnAngle","limitSurfaceAngle","__hostTarget","textGuideLineConfig","anchor","getSectorCornerRadius","zeroIfNull","cornerRadius","innerCornerRadius","PiePiece","firstCreate","_updateLabel","__assign","labelText","visualOpacity","setTextGuideLine","setLabelLineStyle","getLabelLineStatesModels","retrieve3","PieView","ignoreLabelLineUpdate","sectorGroup","_sectorGroup","s","_emptyCircleSector","piePiece","labelLayout","containPoint","itemLayout","createSeriesDataSimply","nameList","PieSeriesModel","legendVisualProvider","LegendVisualProvider","getRawData","_defaultLabelLine","mergeOption","makeSeriesEncodeForNameBased","getDataParams","valueList","getPercentWithPrecision","$vars","labelLineNormalOpt","labelLineEmphasisOpt","colorBy","minShowLabelAngle","selectedOffset","percentPrecision","left","top","right","bottom","overflow","alignTo","distanceToLabelLine","length2","borderJoin","showEmptyCircle","emptyCircleStyle","hideOverlap","scaleSize","avoidLabelOverlap","animationDuration","animationTypeUpdate","animationEasingUpdate","animationDurationUpdate","ScatterSeriesModel","LargeSymbolPathShape","LargeSymbolPath","symbolProxy","symbolProxyShape","getContext","_ctx","softClipShape","afterBrush","fillRect","findDataIndex","w","h","LargeSymbolDraw","_incremental","rectHover","_setCommon","eachChild","child","startIndex","endIndex","byteOffset","Float32Array","buffer","_clearIncremental","IncrementalDisplayable","addDisplayable","isIncremental","extrudeShadow","ecData_1","e","clearDisplaybles","ScatterView","_updateSymbolDraw","_getClipShape","_finished","res","pointsLayout","reset","progress","clipArea","radarLayout","axes","getIndicatorAxes","axisIndex","isValidPoint","getValueMissingPoint","firstPoint","radarBackwardCompat","polarOptArr","polarNotRadar_1","polarOpt","indicator","radar","series","seriesOpt","polarIndex","radarIndex","RadarView","updateSymbols","symbolGroup","__dimIdx","getInitialPoints","itemGroup","polygonIgnore","parentModel","stateModel","stateIgnore","itemHoverStyle","getStore","labelDimIndex","RadarSeriesModel","generateCoordCount","formatTooltip","multipleSeries","indicatorAxes","nameToDisplay","markerColor","retrieveVisualColorForTooltipMarker","createTooltipMarkup","header","sortBlocks","blocks","markerType","sortParam","getTooltipPosition","values","getValues","coordToPoint","MapView","mapModel","from","uid","getHostGeoModel","_mapDraw","resetForLabelLayout","seriesId","id","mapDraw","needsDrawMap","MapDraw","draw","getComponent","_renderSymbols","originalData","originalDataIndex","circle","Z2_EMPHASIS_LIFT","fullData","mainSeries","name_1","fullIndex_1","indexOfName","regionGroup","MapSeries","seriesGroup","geo","region","getRegion","dataNameMap","toAppendNames","name_2","set","geoSource","geoSourceManager","load","getMapType","nameMap","nameProperty","regions","appendValues","geoIndex","getRegionModel","regionName","seriesNames","otherIndex","noHeader","iconType","icon","layoutMode","aspectScale","showLegendSymbol","boundingCoords","scaleLimit","selectedMode","areaColor","mapDataStatistic","seriesGroups","hostGeoModel","seriesList","datas","statisticType","mapKey","dataStatistics","setData","cloneShallow","mapSymbolLayout","processedMapType","mapSeries","mapType","mapSymbolOffsets","subMapSeries","showLabel","firstWalk","node","separation","children","isExpand","siblings","subtreeW","hierNode","shift","change","prelim","modifier","executeShifts","midPoint","defaultAncestor","subtreeV","ancestor","nodeOutRight","nodeInRight","nodeOutLeft","nodeInLeft","sumOutRight","sumInRight","sumOutLeft","sumInLeft","nextRight","nextLeft","moveSubtree","nextAncestor","thread","apportion","secondWalk","nodeX","defaultSeparation","radialCoordinate","rad","wl","wr","node1","node2","TreeEdgeShape","parentPoint","childPoints","TreePath","childLen","firstChildPos","lastChildPos","orient","forkDim","otherDim","forkPosition","tmpPoint","TreeView","_mainGroup","_controller","RoamController","_controllerHost","layoutInfo","_updateViewCoordSys","_updateController","updateNode","removeNode","_nodeScaleRatio","_updateNodeAndLinkScale","bbox","oldMin","_min","oldMax","_max","viewCoordSys","View","setBoundingRect","controller","controllerHost","setPointerChecker","transform","onIrrelevantElement","enable","roamHelper","updateLabelLayout","nodeScale","_getNodeGlobalScale","nodeScaleRatio","groupZoom","tree","getNodeByDataIndex","virtualRoot","root","sourceSymbolEl","sourceLayout","sourceOldLayout","__oldX","__oldY","rawX","__radialOldRawX","rawY","__radialOldRawY","targetLayout","__radialRawX","__radialRawY","realRoot","rootLayout","length_1","isLeft","textPosition","normalLabelModel","labelRotateRadian","origin","focusDataIndices","getAncestorsIndices","getDescendantIndices","edgeShape","getOrient","curvature","edgeForkPosition","edge","__edge","getEdgeShape","childLayout","setDefaultStateProxy","drawEdge","parentEl","hoverState","HOVER_STATE_BLUR","removeNodeEdge","removeAnimationOpt","getSourceNode","sourceEdge","undefined","layoutOpt","forEach","childNode","cpx2","cpy2","radialCoor1","radialCoor2","radialCoor3","radialCoor4","retrieveTargetInfo","validPayloadTypes","targetNode","getNodeById","contains","targetNodeId","getPathToRoot","aboveViewRoot","viewRoot","viewPath","wrapTreePathInfo","treePathInfo","nodeDataIndex","TreeSeriesModel","ignoreStyleOnData","leaves","leavesModel","Model","Tree","createTree","nodeData","wrapMethod","treeDepth","eachNode","depth","expandTreeDepth","expandAndCollapse","initialTreeDepth","hostTree","getRawDataItem","collapsed","getValue","noValue","treeAncestors","roam","curveness","eachBefore","callback","nodes","pop","treeLayout","sep","inRoot","eachAfter","left_1","right_1","bottom_1","delta","tx_1","kx_1","ky_1","coorX_1","coorY_1","finalCoor","orient_1","commonLayout","treeVisual","existsStyle","ensureUniqueItemVisual","noop","actionTypes","enableAriaDecalForTree","decalPaletteScope","getDecalFromPalette","setVisual","TreemapSeriesModel","preventUsingHoverLayer","completeTreeValue","levels","designatedVisualItemStyle","designatedVisualModel","hasColorDefine","hasDecalDefine","globalColorList","normalizeToArray","globalDecalList","levelDefine","modelColor","modelDecal","level0","setDefault","levelModels","levelModel","optionUpdated","resetViewRoot","setLayoutInfo","mapIdToIndex","idIndexMap","_idIndexMap","_idIndexMapCount","getViewRoot","_viewRoot","enableAriaDecal","clipWindow","squareRatio","leafDepth","drillDownIcon","zoomToNodeRatio","nodeClick","breadcrumb","emptyItemWidth","textStyle","padding","upperLabel","colorAlpha","colorSaturation","gapWidth","borderColorSaturation","ellipsis","visualDimension","visualMin","visualMax","colorMappingBy","visibleMin","childrenVisibleMin","dataNode","childValue","thisValue","makeItemPoints","head","tail","splice","packEventData","itemNode","eventData","componentSubType","componentIndex","seriesName","selfType","Breadcrumb","containerGroup","onSelect","thisGroup","normalStyleModel","textStyleModel","layoutParam","pos","box","totalWidth","renderList","_prepare","_renderContent","convertOptionIdName","getTextRect","TEXT_PADDING","lastX","availableSize","getTextColor","font","getFont","onclick","curry","PATH_LABEL_NOAMAL","PATH_UPPERLABEL_NORMAL","Z2_BASE","Z2_BG","Z2_CONTENT","getStateItemStyle","makeStyleMapper","getItemStyleNormal","TreemapView","_state","_storage","nodeGroup","background","content","models","findComponents","mainType","subType","query","targetInfo","helper","payloadType","_oldTree","thisStorage","reRoot","rootNodeGroup","direction","_giveContainerGroup","renderResult","_doRender","renderFinally","_doAnimation","_resetController","_renderBreadcrumb","_containerGroup","_initEvents","thisTree","oldTree","lastsForAnimation","oldStorage","willInvisibleEls","doRenderNode","thisNode","oldNode","parentGroup","thisLayout","nodeModel","isInView","thisWidth","thisHeight","thisInvisible","invisible","thisRawIndex","oldRawIndex","thisViewChildren","viewChildren","upperHeight","isParent","itemStyleNormalModel","itemStyleEmphasisModel","itemStyleBlurModel","itemStyleSelectModel","giveGraphic","nodeWidth","nodeHeight","isAboveViewRoot","bg","renderBackground","upperLabelHeight","focusOrIndices","isHighDownDispatcher","setAsHighDownDispatcher","enableHoverFocus","renderContent","disableMorphing","useUpperLabel","ecData","processInvisible","visualBorderColor","normalStyle","emphasisStyle","blurStyle","selectStyle","upperLabelWidth","prepareText","contentWidth","contentHeight","nodeStyle","element","rectEl","upperLabelRect","isShow","textEl","textPadding","normalizeCssArray","layoutRect","disableLabelLayout","truncateMinChar","lineOverflow","addDrillDownIcon","textEmphasisState","isLeafRoot","iconChar","storageName","Ctor","lasts","prepareAnimationWhenHasOld","Displayable","z2InLevel","calculateZ2","prepareAnimationWhenNoOld","lastCfg","oldX","oldY","oldShape","parentOldX","parentOldY","parentOldBg","fadein","renderNode","dualTravel","oldViewChildren","sameTree","isRemoved","processNode","DataDiffer","getKey","getId","willDeleteEls","storage","delEls","willDelete","clearStorage","els","durationOption","easingOption","isFunction","animationWrap","animationUtil","rawIndex","innerStore","targetX","targetY","last","finished","bind","_onPan","_onZoom","BoundingRect","_clearController","rootRect","mouseX","mouseY","m","matrix","findTarget","_rootToNode","_zoomToNode","link","linkTarget","windowOpen","_breadcrumb","order","transformCoordToLocal","travelTree","getAncestors","designatedVisual","viewRootAncestors","nodeLayout","thisNodeColor","nodeItemStyleModel","visuals","visualName","buildVisuals","modifyHSL","calculateBorderColor","calculateColor","mapping_1","rangeVisual","getRangeVisual","dataExtent","visual","mappingMethod","loop","mapping","VisualMapping","drColorMappingBy","buildVisualMapping","childVisual","childVisuals","mappingType","mapValueToVisual","mapVisual","getValueVisualDefine","modifyAlpha","retrieveValue","PATH_BORDER_WIDTH","PATH_GAP_WIDTH","PATH_UPPER_LABEL_SHOW","PATH_UPPER_LABEL_HEIGHT","ecWidth","ecHeight","seriesOption","containerWidth","containerHeight","viewAbovePath","rootSize","currNode","defaultSize","viewArea","area","currNodeValue","getUpperLabelHeight","pow","MAX_SAFE_INTEGER","estimateRootSize","sort_1","options","clearLayouts","viewRootLayout_1","squarify","treeRoot","defaultPosition","targetCenter","calculateRootPosition","prunning","hideChildren","halfGapWidth","layoutOffset","layoutOffsetUpper","totalArea","orderBy","overLeafDepth","statistic","orderedChildren","deletePoint","filterByThreshold","initChildren","rowFixedLength","best","row","score","worst","areaMax","areaMin","squareArea","f","flush","idx0WhenH","idx1WhenH","xy","wh","rowOtherLength","rowLen","wh1","remain","modWH","wh0","nodeInViewAbovePath","intersect","childClipRect","categoryFilter","legendModels","graphSeries","categoriesData","getCategoriesData","getGraph","categoryNames","mapArray","filterSelf","category","isSelected","categoryVisual","paletteScope","categoryNameIdxMap","getColorFromPalette","setItemVisual","symbolVisualList","symbolVisual","categoryIdx","categoryStyle","visualList","normalize","graphEdgeVisual","graph","edgeData","getEdgeData","getEdgeByIndex","KEY_DELIMITER","getAutoCurvenessParams","createCurveness","appendLength","autoCurvenessParmas","curvenessList","__curvenessList","getKeyOfEdges","n1","n2","getOppositeKey","keys","split","getEdgeMapLengthWithKey","edgeMap","__edgeMap","getCurvenessForEdge","needReverse","autoCurvenessParams","isArrayParam","edgeArray","getEdgeFromMap","edgeIndex","totalLen","getTotalLengthBetweenNodes","curKey","parityCorrection","isForward","oppositeKey","resValue","simpleLayout","simpleLayoutEdge","eachEdge","p1","p2","graphSimpleLayout","dimensions_1","concat","getNodeGlobalScale","_symbolRadiansHalf","circularLayout","basedOn","_layoutNodesBasedOn","x12","y12","unitAngle","radianHalf","sumRadian","symbolRadianHalf","asin","halfRemainRadian","graphCircularLayout","scaleAndAdd","graphForceLayout","preservedPoints_1","preservedPoints","graph_1","nodeData_1","forceModel","initLayout","nodeDataExtent_1","edgeDataExtent_1","repulsion","edgeLength","repulsionArr_1","edgeLengthArr_1","nodes_1","rep","fixed","edges","edgeModel","ignoreForceLayout","forceInstance","inNodes","inEdges","gravity","random","pp","beforeStepCallback","afterStepCallback","initialFriction","friction","warmUp","setFixed","setUnfixed","beforeStep","afterStep","v12","nLen","j","repFact","v","forceLayout","l","getNodeByIndex","stopped","createViewCoordSys","viewList","coordSysType","positions","aspect","getLayoutRect","bbWidth","bbHeight","setViewRect","v1","v2","v3","quadraticAt","curveTool","v2DistSquare","mathAbs","intersectCurveCircle","curvePoints","p0","radiusSquare","interval","_t","nextDiff","adjustEdge","tmp0","quadraticSubdivide","pts2","fromSymbol","toSymbol","__original","originalPoints","isViewCoordSys","GraphView","_lineDraw","_firstRender","groupNewProp","clearTimeout","_layoutTimeout","layoutAnimation","_startForceLayoutIteration","getGraphicEl","_layouting","getAdjacentDataIndices","circularRotateLabel","self","setTimeout","disable","createGraphFromNodeEdge","directed","beforeLink","Graph","addNode","linkNameList","validEdges","linkCount","addEdge","coordSysCtor","linkSeriesData","mainData","struct","structAttr","datasAttr","GraphSeriesModel","_categoriesData","fillDataTextStyle","links","_updateCategoriesData","mergeDefaultAndTheme","defaultEmphasis","categoryModel","_categoriesModels","oldGetModel","newGetModel","resolveParentPath","pathArr","newPathArr","oppositeEdges","createEdgeMapForCurveness","sourceName","targetName","nameArr","defaultSeriesFormatTooltip","circular","rotateLabel","edgeSymbol","edgeSymbolSize","edgeLabel","formatter","actionInfo","PointerShape","PointerPath","mathCos","mathSin","formatLabel","labelFormatter","replace","GaugeView","colorList","posInfo","parsePosition","_renderMain","axisLineModel","MainPath","showAxis","axisLineWidth","angleRangeSpan","prevEndAngle","getColor","_renderTicks","_renderTitleAndDetail","_renderAnchor","_renderPointer","unitX","unitY","minVal","maxVal","splitLineModel","tickModel","splitNumber","subSplitNumber","splitLineLen","tickLen","subStep","splitLineStyle","tickLineStyle","splitLineDistance","splitLine","autoColor","createTextStyle","tickLine","oldProgressData","_progressEls","progressList","showPointer","progressModel","showProgress","valueExtent","angleExtent","createPointer","pointer","pointerModel","pointerWidth","pointerLength","pointerStr","pointerOffset","pointerOffsetX","pointerOffsetY","pointerKeepAspect","createProgress","ProgressPath","isOverlap","progressWidth","isClip","setCommonECData","previousPointer","previousRotate","previousProgress","z2EmphasisLift","anchorModel","anchorSize","anchorType","offsetCenter","anchorKeepAspect","contentGroup","newTitleEls","newDetailEls","showPointerAbove","_titleEls","_detailEls","itemTitleModel","titleOffsetCenter","titleX","titleY","labelEl","itemDetailModel","detailOffsetCenter","detailX","detailY","detailColor","formatter_1","animateLabelValue","fmt","extendParams","GaugeSeriesModel","visualStyleAccessPath","axisLine","overlap","axisTick","axisLabel","fontSize","showAbove","title","detail","backgroundColor","fontWeight","lineHeight","opacityAccessPath","FunnelPiece","insideStroke","outsideFill","FunnelView","funnelPiece","piece","FunnelSeriesModel","toFixed","minSize","maxSize","gap","funnelAlign","funnelLayout","valueArr","isAscending","getSortedIndices","sizeExtent","itemSize","getLinePoints","val_1","ParallelView","_dataGroup","_initialized","dataGroup","newDataIndex","updateElCommon","addEl","oldDataIndex","createLinePoints","parallelModel","getRect","createGridClipShape","numericToNumber","eqNaN","ParallelSeriesModel","visualDrawType","makeDefaultEncode","getRawIndicesByActiveState","activeState","eachActiveState","theActiveState","parallelIndex","inactiveOpacity","activeOpacity","axisDim","dataDimIndex","parallelVisual","opacityMap","active","inactive","itemOpacity","SankeyPathShape","SankeyPath","SankeyView","_focusAdjacencyDisabled","sankeyView","curve","n1Layout","node1Model","dragX1","dragY1","n2Layout","node2Model","dragX2","dragY2","edgeLayout","sy","ty","sourceColor","targetColor","dragX","dragY","localX","localY","ondragend","SankeySeriesModel","nodeDepth","setNodePosition","localPosition","dataItem","rawDataOpt","edgeValue","edgeName","nodeValue","nodeGap","layoutIterations","nodeAlign","sankeyLayout","value1","outEdges","getEdgeValue","value2","nodeRawValue","computeNodeValues","iterations","remainEdges","indegreeArr","zeroIndegrees","nextTargetNode","maxNodeDepth","hostGraph","isItemDepth","edgeIdx","Error","maxDepth","nextSourceNode","remainNodes","skNodeHeight","isNodeDepth","moveSinksRight","adjustNodeWithNodeAlign","kx","scaleNodeBreadths","computeNodeBreadths","nodesByBreadth","keyAttr","groupResult","groupData","buckets","prepareNodesByBreadth","minKy","ky","nodeDy","edgeDy","initializeNodeDepth","resolveCollisions","alpha","relaxRightToLeft","relaxLeftToRight","computeNodeDepths","computeEdgeDepths","layoutSankey","nodeDyAttr","weightedTarget","centerTarget","nodeY","weightedSource","centerSource","array","sankeyVisual","minValue_1","maxValue_1","mapValueToColor","customColor","WhiskerBoxCommonMixin","addOrdinal","xAxisModel","yAxisModel","xAxisType","yAxisType","coordDims","baseAxisDimIndex","_baseAxisDim","otherAxisDim","axisModels","baseAxisType","otherAxisType","newOptionData_1","newItem","defaultValueDimensions","tooltip","dimsDef","dimensionsCount","BoxplotSeriesModel","defaultTooltip","boxWidth","mixin","BoxplotView","constDim","createNormalBox","updateNormalBoxData","BoxPathShape","BoxPath","ends","transInit","updateMethod","initBaseline","boxplotVisual","boxplotLayout","result","axisList","seriesModels","groupSeriesByAxis","groupItem","bandWidth","seriesCount","boxWidthList","boxOffsetList","boundList","getBandWidth","maxDataCount_1","boxWidthBound","availableWidth","boxGap","base","calculateBase","halfWidth","cDimIdx","vDimIdx","cDim","vDims","axisDimVal","median","getPoint","end1","end2","end4","end5","addBodyEnd","layEndLine","point1","point2","endCenter","to","layoutSingleSeries","boxplotTransform","upstream","SOURCE_FORMAT_ARRAY_ROWS","throwError","rawData","boxData","outliers","boundIQR","useExtreme","ascList","asc","Q1","quantile","Q2","Q3","bound","low","high","itemNameFormatter","isString","outlier","prepareBoxplotData","config","SKIP_PROPS","CandlestickView","_incrementalRenderNormal","isSimpleBox","isNormalBoxClipped","setBoxCommon","NormalBoxPathShape","NormalBoxPath","__simpleBox","LargeBoxPathShape","LargeBoxPath","__sign","largePoints","elP","elN","sign","CandlestickSeriesModel","getShadowDim","brushRect","color0","borderColor0","barMaxWidth","barMinWidth","candlestickPreprocessor","seriesItem","positiveBorderColorQuery","negativeBorderColorQuery","positiveColorQuery","negativeColorQuery","candlestickVisual","plan","performRawSeries","getBorderColor","isSeriesFiltered","LargeArr","getSign","openVal","closeVal","closeDimI","candlestickLayout","candleWidth","calculateCandleWidth","cDimI","vDimsI","openDimI","lowestDimI","highestDimI","tmpIn","tmpOut","lowestVal","highestVal","ocLow","ocHigh","ocLowPoint","ocHighPoint","lowestPoint","highestPoint","subPixelOptimizePoint","makeBrushRect","pmin","pmax","updateRipplePath","rippleGroup","effectCfg","rippleEffectColor","ripplePath","brushType","EffectSymbol","stopEffectAnimation","startEffectAnimation","rippleNumber","period","effectOffset","animate","when","rippleScale","animateStyle","updateEffectAnimation","oldEffectCfg","_effectCfg","DIFFICULT_PROPS","propName","setScale","showEffectOn","EffectScatterView","effectSymbolDraw","_updateGroupTransform","getRoamTransform","decomposeTransform","EffectScatterSeriesModel","effectType","rippleEffect","number","EffectLine","_updateEffectSymbol","effectModel","_symbolScale","_updateEffectAnimation","constantSpeed","delayExpr","_updateAnimationPoints","_getLineLength","_period","_loop","delayNum","__t","animator","_updateSymbolPosition","__p1","__cp1","__p2","lastPos","curveUtil","quadraticDerivativeAt","tx","__lastT","Polyline","_createPolyline","hoverLineStyle","EffectPolyline","_lastFrame","_lastFramePercent","accLenArr","_offsets","_length","offsets","frame","lastFrame","LargeLinesPathShape","segs","LargeLinesPath","quadraticCurveTo","lineContain","quadraticContain","LargeLineDraw","lineEl","__startIndex","linesLayout","isPolyline","isLarge","lineCoords","segCount","totalCoordsCount","getLineCoordsCount","getLineCoords","LinesView","_updateLineDraw","trailLength","zr","isSvg","painter","getType","getLayer","clear","_lastZlevel","configLayer","motionBlur","_showEffect","lastFrameAlpha","_clearLayer","hasEffect","_hasEffet","_isPolyline","Uint32Arr","Uint32Array","Float64Arr","Float64Array","compatEc2","coords","fromName","toName","mergeAll","LinesSeriesModel","_processFlatCoordsArray","_flatCoords","flatCoords","_flatCoordsOffset","flatCoordsOffset","appendData","concatArray","_getCoordsFromItemModel","out","startOffset","coordsOffsetAndLenStorage","coordsStorage","coordsCursor","offsetCursor","dataCount","preventIncremental","xAxisIndex","yAxisIndex","effect","linesVisual","dataEach","HeatmapLayer","blurSize","pointSize","maxOpacity","minOpacity","_gradientPixels","inRange","outOfRange","canvas","colorFunc","isInRange","brush","_getBrush","gradientInRange","_getGradient","gradientOutOfRange","globalAlpha","drawImage","imageData","getImageData","pixels","pixelLen","diffOpacity","gradientOffset","putImageData","brushCanvas","_brushCanvas","clearRect","beginPath","arc","gradientPixels","pixelsSingleState","Uint8ClampedArray","isGeoCoordSys","HeatmapView","visualMapOfThisSeries","eachComponent","visualMap","eachTargetSeries","targetSeries","_incrementalDisplayable","_renderOnCartesianAndCalendar","_renderOnGeo","xAxisExtent","yAxisExtent","xAxis","yAxis","dataDims","dataDimX","dataDimY","ceil","dataToRect","contentShape","rawValue","visualMapModel","inRangeVisuals","targetVisuals","outOfRangeVisuals","hmLayer","_hmLayer","roamTransform","lng","lat","dataSpan","getIsInContinuousRange","pieceList","selected","lastIndex","getIsInPiecewiseRange","getPieceList","getNormalizer","getColorMapper","img","HeatmapSeriesModel","coordSysCreator","BAR_BORDER_WIDTH_QUERY","LAYOUT_ATTRS","posDesc","pathForLineWidth","PictorialBarView","coordSysRect","master","ecSize","coordSysExtent","categoryDim","symbolMeta","getSymbolMeta","bar","createBar","updateCommon","pictorialShapeStr","getShapeStr","__pictorialShapeStr","bundle","__pictorialBundle","bundlePosition","symbolRepeat","createOrUpdateRepeatSymbols","createOrUpdateSingleSymbol","createOrUpdateBarRect","createOrUpdateClip","updateBar","__pictorialSymbolMeta","removeBar","symbolClip","symbolPosition","symbolPatternSize","symbolRepeatDirection","outputSymbolMeta","boundingLength","symbolBoundingData","zeroPx","pxSignIdx","symbolBoundingExtent","convertToCoordOnAxis","repeatCutLength","pxSign","prepareBarLength","parsedSymbolSize","categorySize","symbolScale","prepareSymbolSize","valueLineWidth","getLineScale","prepareLineWidth","unitLength","pathLen","absBoundingLength","symbolMargin","hasEndGap","lastIndexOf","symbolMarginNumeric","uLenWithMargin","endFix","repeatSpecified","isNumeric","repeatTimes","toIntTimes","sizeFix","pathPosition","barRectShape","prepareLayoutInfo","parse","createPath","unit","eachPath","__pictorialAnimationIndex","__pictorialRepeatTimes","updateAttr","makeTarget","mainPath","__pictorialMainPath","barRect","__pictorialBarRect","__pictorialClipPath","labelRect","pathes","context","immediateAttrs","animationAttrs","barPositionOutside","times","roundedTimes","PictorialBarSeriesModel","defaultSymbol","stack","barGap","ThemeRiverView","_layers","layersSeries","getLayerSeries","boundaryGap","keyGetter","dataDiffer","_layersSeries","newLayersGroups","oldLayersGroups","points0","textLayout","layerGroup","ThemeRiverSeriesModel","fixData","rawDataLength","timeValueKeys","layerData","dataList","layerNum","timeValue","getReferringComponents","SINGLE_REFERRING","filterData","dimensionsDefine","single","lenCount","indexArr","timeDim","layerSeries","index1","index2","getAxisTooltipData","nestestValue","minDist","nearestIdx","pointNum","theValue","dataIndices","singleAxisIndex","themeRiverLayout","numberUtil","doThemeRiverLayout","baseY0","layerPoints","singleLayer","sums","temp","computeBaseline","baseLine","layerIndex","SunburstPiece","_ecModel","createOrUpdatePatternFromDecal","itemStyleModel","labelMinAngle","isNormalShown","getLabelAttr","stateAttr","DISPLAY_STATES","labelStateModel","isNormal","isShown","sectorState","labelColor","labelPadding","rotateType","dirtyStyle","ROOT_TO_NODE_ACTION","HIGHLIGHT_ACTION","SunburstView","newRoot","renderLabelForZeroData","newChildren","oldChildren","_oldChildren","newNode","virtualPiece","renderRollUp","targetFound","SunburstSeriesModel","blur","sunburstLayout","rootDepth","renderRollupNode","rPerLevel","rStart","rEnd","siblingAngle_1","sortOrder","sortTargets","isAsc_1","sunburstVisual","treeHeight","lift","pickColor","STYLE_VISUAL_TYPE","NON_STYLE_VISUAL_PROPS","legendIcon","customInnerStore","CustomSeriesModel","currentZLevel","currentZ","LEGACY_TRANSFORM_PROPS","setLegacyTransformProp","elOption","targetProps","legacyName","legacyArr","xyName","setTransformProp","allProps","setTransformPropToTransitionFrom","transitionFrom","fromTransformable","prepareShapeOrExtraTransitionFrom","mainAttr","fromEl","transFromProps","attrOpt","transFromPropsInAttr","elPropsInAttr","enterFrom","enterFromKeys","transition","transitionKeys","elVal","elPropsInAttrKeys","isNonStyleTransitionEnabled","leaveTo","leaveToProps","getOrCreateLeaveToPropsFromEl","leaveToPropsInAttr","leaveToKeys","prepareShapeOrExtraAllPropsFinal","allPropsInAttr","keysInAttr","cloneValue","optVal","isArrayLike","innerEl","EMPHASIS","NORMAL","BLUR","SELECT","STATES","PATH_ITEM_STYLE","PATH_LABEL","attachedTxInfoTmp","prepareCustoms","prepareCartesian2d","prepareGeo","singleAxis","prepareSingleAxis","preparePolar","calendar","prepareCalendar","isPath","graphicUtil","isDisplayable","CustomChartView","customSeries","renderItem","makeRenderItem","createOrUpdateItem","doRemoveEl","oldEl","setIncrementalAndHoverLayer","filterForExposedEvent","eventType","targetEl","packedEvent","elementName","createEl","graphicType","pathRect","pathData","getPathData","customPathData","customImagePath","Clz","customGraphicType","z2SelectLift","updateElNormal","attachedTxInfo","isTextContent","txCfgOpt","cfg","styleOpt","textOptionStyle","hasOwn","textFill","textStroke","decalPattern","decalObj","__decalPattern","userDuring","propsToSet","prepareTransformTransitionFrom","prepareTransformAllPropsFinal","transFromStyleProps","fromElStyle","getAnimationStyleProps","animationProps","animationStyleProps","styleKeys","leaveToStyleProps","prepareStyleTransitionFrom","allPropsFinal","elDisplayable","changeTarget","applyPropsDirectly","duringCall","applyPropsTransition","autoBatch","applyMiscProps","tmpDuringScope","customDuringAPI","setTransform","getTransform","isShapeDirty","getShape","isStyleDirty","getStyle","setExtra","extra","getExtra","latestUserDuring","scopeUserDuring","updateElOnState","elStateOpt","isRoot","stateObj","existingEmphasisState","updateZForEachState","retrieveStateOption","optZ2","prepareResult","currDataIndexInside","currItemModel","userAPI","getDevicePixelRatio","dataIndexInside","userProps","getItemStyleModel","getLabelModel","labelStyleHelper","preFetchFromExtra","convertToEC4StyleForCustomSerise","applyUserPropsAfter","legacy","ordinalRawValue","styleEmphasis","style_1","barLayout","getLayoutOnAxis","currentSeriesIndices","getCurrentSeriesIndices","userParams","dataInsideLength","encode","wrapEncodeDef","currItemStyleModels","currLabelModels","seriesItemStyleModels","seriesLabelModels","actionType","encodeDef","isExtraCoord","coordDimIndex","existsEl","doCreateOrUpdateEl","toBeReplacedIdx","doesElNeedRecreate","childrenRef","sourceEl","clearStates","copyTransform","morph","conOpt","isLegacy","processTxInfo","txConOptNormal","txConOptEmphasis","txConOptBlur","txConOptSelect","txConStlOptNormal","txConOptOtherState","retrieveStyleOptionOnState","doCreateOrUpdateAttachedTx","clipPathOpt","getClipPath","doCreateOrUpdateClipPath","otherStateOpt","updateZ","newLen","mergeChildren","$mergeChildren","byName","diffChildrenByName","notMerge","processAddUpdate","processRemove","childCount","replaceAt","elInner","elOptionType","elOptionShape","elOptionStyle","isUniversalTransitionEnabled","stateOpt","elType","txCfg","txConOpt","isEC4CompatibleStyle","convertResult","convertFromEC4CompatibleStyle","txConOptNormal_1","stateOptionNormal","stateOption","childOption","isMultiple","elements","prepareMorphBatches","one","many","batches","batchCount","moveFrom","mid","pathDividers","ret","approxOpacity","cloned","clonePath","applyMorphAnimation","animateOtherProps","updateAnimationCfg","animationDelay","animationCfg","Object","assign","fromIsMany","morphBatches","animateCount","animateIndex","morphOneBatch","batch","forceManyOne","batchMany","batchOne","separateAnimationCfg","dividePath","individualDelay","fromPath","toPath","combineMorph","separateMorph","fromIndividuals","toIndividuals","individualAnimationCfg","batchFrom","batchTo","isCombineMorphing","morphPath","getPathList","pathList_1","pathList","getUniversalTransitionGlobalStore","flattenDataDiffItems","seriesInfo","getIndices","groupDim","itemGroupId","getGroupIdDimension","divide","fadeInElement","newEl","newSeries","removeEl","computedTransform","setLocalTransform","transitionBetween","oldList","newList","oldDiffItems","newDiffItems","updateMorphingPathProps","rawFrom","rawTo","findKeyDim","oldKeyDim","newKeyDim","hasMorphAnimation","createKeyGetter","isOld","onlyGetId","dataGroupId","keyDim","dimOrdinalMeta","itemVal","groupId","useId","oldItem","isAllIdSame","isElementStillInChart","updateOneToOne","animateElementStyles","updateManyToOne","oldIndices","oldElsList","filter","updateOneToMany","newIndices","newElsList","newSeris","updateManyToMany","getViewOfSeriesModel","getSeriesTransitionKey","seriesKey","convertArraySeriesKeyToString","getDivideShapeFromData","querySeries","finder","use","CanvasRenderer","SVGRenderer","registers","registerChartView","registerSeriesModel","LineSeries","registerLayout","layoutPoints","registerVisual","registerProcessor","PRIORITY","PROCESSOR","STATISTIC","dataSample","BarSeries","VISUAL","LAYOUT","PROGRESSIVE_LAYOUT","largeLayout","registerAction","componentModel","setCategorySortInfo","createLegacyDataSelectAction","dataFilter","negativeDataFilter","installGridSimple","installRadarComponent","registerPreprocessor","backwardCompat","installGeo","installTreeAction","treemapVisual","treemapLayout","originViewRoot","installTreemapAction","edgeVisual","POST_CHART_LAYOUT","registerCoordinateSystem","create","createView","installParallelComponent","BRUSH","registerTransform","preprocessor","installSunburstAction","GridComponent","PolarComponent","GeoComponent","SingleAxisComponent","ParallelComponent","CalendarComponent","GraphicComponent","ToolboxComponent","TooltipComponent","AxisPointerComponent","BrushComponent","TitleComponent","TimelineComponent","MarkPointComponent","MarkLineComponent","MarkAreaComponent","LegendComponent","DataZoomComponent","DataZoomInsideComponent","DataZoomSliderComponent","VisualMapComponent","VisualMapContinuousComponent","VisualMapPiecewiseComponent","AriaComponent","TransformComponent","DatasetComponent","registerUpdateLifecycle","ecMOdel","seriesTransition","transOpt","updatedSeries","SERIES_UNIVERSAL_TRANSITION_PROP","globalStore","oldSeries","optionChanged","transitionOpt","transitionSeriesFromOpt","updateBatches_1","updateBatches","createHashMap","oldDataMap","oldDataMapForSplit","transitionKey","transitionKeyStr","oldSeries_1","oldData_1","findTransitionSeriesBatches","allSeries","getSeries","savedSeries","savedData","LabelLayout","pick","echarts","EChartsReact","ele","componentDidMount","renderNewEcharts","componentDidUpdate","prevProps","shouldSetOption","theme","onEvents","pickKeys","echartsInstance","updateEChartsOption","className","resize","console","warn","componentWillUnmount","getEchartsInstance","getInstanceByDom","onChartReady","bindEvents","instance","events","_bindEvent","eventName","func","param","lazyUpdate","showLoading","loadingOption","echartInstance","setOption","hideLoading","newStyle","ref"],"mappings":"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","file":"static/js/47.68b1781f.chunk.js","sourcesContent":["\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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';\nimport SeriesData from '../../data/SeriesData';\nimport prepareSeriesDataSchema from '../../data/helper/createDimensions';\nimport { getDimensionTypeByAxis } from '../../data/helper/dimensionHelper';\nimport { getDataItemValue } from '../../util/model';\nimport CoordinateSystem from '../../core/CoordinateSystem';\nimport { getCoordSysInfoBySeries } from '../../model/referHelper';\nimport { createSourceFromSeriesDataOption } from '../../data/Source';\nimport { enableDataStack } from '../../data/helper/dataStackHelper';\nimport { makeSeriesEncodeForAxisCoordSys } from '../../data/helper/sourceHelper';\nimport { SOURCE_FORMAT_ORIGINAL } from '../../util/types';\n\nfunction getCoordSysDimDefs(seriesModel, coordSysInfo) {\n var coordSysName = seriesModel.get('coordinateSystem');\n var registeredCoordSys = CoordinateSystem.get(coordSysName);\n var coordSysDimDefs;\n\n if (coordSysInfo && coordSysInfo.coordSysDims) {\n coordSysDimDefs = zrUtil.map(coordSysInfo.coordSysDims, function (dim) {\n var dimInfo = {\n name: dim\n };\n var axisModel = coordSysInfo.axisMap.get(dim);\n\n if (axisModel) {\n var axisType = axisModel.get('type');\n dimInfo.type = getDimensionTypeByAxis(axisType);\n }\n\n return dimInfo;\n });\n }\n\n if (!coordSysDimDefs) {\n // Get dimensions from registered coordinate system\n coordSysDimDefs = registeredCoordSys && (registeredCoordSys.getDimensionsInfo ? registeredCoordSys.getDimensionsInfo() : registeredCoordSys.dimensions.slice()) || ['x', 'y'];\n }\n\n return coordSysDimDefs;\n}\n\nfunction injectOrdinalMeta(dimInfoList, createInvertedIndices, coordSysInfo) {\n var firstCategoryDimIndex;\n var hasNameEncode;\n coordSysInfo && zrUtil.each(dimInfoList, function (dimInfo, dimIndex) {\n var coordDim = dimInfo.coordDim;\n var categoryAxisModel = coordSysInfo.categoryAxisMap.get(coordDim);\n\n if (categoryAxisModel) {\n if (firstCategoryDimIndex == null) {\n firstCategoryDimIndex = dimIndex;\n }\n\n dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta();\n\n if (createInvertedIndices) {\n dimInfo.createInvertedIndices = true;\n }\n }\n\n if (dimInfo.otherDims.itemName != null) {\n hasNameEncode = true;\n }\n });\n\n if (!hasNameEncode && firstCategoryDimIndex != null) {\n dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0;\n }\n\n return firstCategoryDimIndex;\n}\n/**\n * Caution: there are side effects to `sourceManager` in this method.\n * Should better only be called in `Series['getInitialData']`.\n */\n\n\nfunction createSeriesData(sourceRaw, seriesModel, opt) {\n opt = opt || {};\n var sourceManager = seriesModel.getSourceManager();\n var source;\n var isOriginalSource = false;\n\n if (sourceRaw) {\n isOriginalSource = true;\n source = createSourceFromSeriesDataOption(sourceRaw);\n } else {\n source = sourceManager.getSource(); // Is series.data. not dataset.\n\n isOriginalSource = source.sourceFormat === SOURCE_FORMAT_ORIGINAL;\n }\n\n var coordSysInfo = getCoordSysInfoBySeries(seriesModel);\n var coordSysDimDefs = getCoordSysDimDefs(seriesModel, coordSysInfo);\n var useEncodeDefaulter = opt.useEncodeDefaulter;\n var encodeDefaulter = zrUtil.isFunction(useEncodeDefaulter) ? useEncodeDefaulter : useEncodeDefaulter ? zrUtil.curry(makeSeriesEncodeForAxisCoordSys, coordSysDimDefs, seriesModel) : null;\n var createDimensionOptions = {\n coordDimensions: coordSysDimDefs,\n generateCoord: opt.generateCoord,\n encodeDefine: seriesModel.getEncode(),\n encodeDefaulter: encodeDefaulter,\n canOmitUnusedDimensions: !isOriginalSource\n };\n var schema = prepareSeriesDataSchema(source, createDimensionOptions);\n var firstCategoryDimIndex = injectOrdinalMeta(schema.dimensions, opt.createInvertedIndices, coordSysInfo);\n var store = !isOriginalSource ? sourceManager.getSharedDataStore(schema) : null;\n var stackCalculationInfo = enableDataStack(seriesModel, {\n schema: schema,\n store: store\n });\n var data = new SeriesData(schema, seriesModel);\n data.setCalculationInfo(stackCalculationInfo);\n var dimValueGetter = firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source) ? function (itemOpt, dimName, dataIndex, dimIndex) {\n // Use dataIndex as ordinal value in categoryAxis\n return dimIndex === firstCategoryDimIndex ? dataIndex : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex);\n } : null;\n data.hasItemOption = false;\n data.initData( // Try to reuse the data store in sourceManager if using dataset.\n isOriginalSource ? source : store, null, dimValueGetter);\n return data;\n}\n\nfunction isNeedCompleteOrdinalData(source) {\n if (source.sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n var sampleItem = firstDataNotNull(source.data || []);\n return sampleItem != null && !zrUtil.isArray(getDataItemValue(sampleItem));\n }\n}\n\nfunction firstDataNotNull(arr) {\n var i = 0;\n\n while (i < arr.length && arr[i] == null) {\n i++;\n }\n\n return arr[i];\n}\n\nexport default createSeriesData;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { retrieveRawValue } from '../../data/helper/dataProvider';\nimport { isArray } from 'zrender/lib/core/util';\n/**\n * @return label string. Not null/undefined\n */\n\nexport function getDefaultLabel(data, dataIndex) {\n var labelDims = data.mapDimensionsAll('defaultedLabel');\n var len = labelDims.length; // Simple optimization (in lots of cases, label dims length is 1)\n\n if (len === 1) {\n var rawVal = retrieveRawValue(data, dataIndex, labelDims[0]);\n return rawVal != null ? rawVal + '' : null;\n } else if (len) {\n var vals = [];\n\n for (var i = 0; i < labelDims.length; i++) {\n vals.push(retrieveRawValue(data, dataIndex, labelDims[i]));\n }\n\n return vals.join(' ');\n }\n}\nexport function getDefaultInterpolatedLabel(data, interpolatedValue) {\n var labelDims = data.mapDimensionsAll('defaultedLabel');\n\n if (!isArray(interpolatedValue)) {\n return interpolatedValue + '';\n }\n\n var vals = [];\n\n for (var i = 0; i < labelDims.length; i++) {\n var dimIndex = data.getDimensionIndex(labelDims[i]);\n\n if (dimIndex >= 0) {\n vals.push(interpolatedValue[dimIndex]);\n }\n }\n\n return vals.join(' ');\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { makeInner } from '../../util/model';\n/**\n * @return {string} If large mode changed, return string 'reset';\n */\n\nexport default function createRenderPlanner() {\n var inner = makeInner();\n return function (seriesModel) {\n var fields = inner(seriesModel);\n var pipelineContext = seriesModel.pipelineContext;\n var originalLarge = !!fields.large;\n var originalProgressive = !!fields.progressiveRender; // FIXME: if the planner works on a filtered series, `pipelineContext` does not\n // exists. See #11611 . Probably we need to modify this structure, see the comment\n // on `performRawSeries` in `Schedular.js`.\n\n var large = fields.large = !!(pipelineContext && pipelineContext.large);\n var progressive = fields.progressiveRender = !!(pipelineContext && pipelineContext.progressiveRender);\n return !!(originalLarge !== large || originalProgressive !== progressive) && 'reset';\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as graphic from '../../util/graphic';\nimport SymbolClz from './Symbol';\nimport { isObject } from 'zrender/lib/core/util';\nimport { getLabelStatesModels } from '../../label/labelStyle';\n\nfunction symbolNeedsDraw(data, point, idx, opt) {\n return point && !isNaN(point[0]) && !isNaN(point[1]) && !(opt.isIgnore && opt.isIgnore(idx)) // We do not set clipShape on group, because it will cut part of\n // the symbol element shape. We use the same clip shape here as\n // the line clip.\n && !(opt.clipShape && !opt.clipShape.contain(point[0], point[1])) && data.getItemVisual(idx, 'symbol') !== 'none';\n}\n\nfunction normalizeUpdateOpt(opt) {\n if (opt != null && !isObject(opt)) {\n opt = {\n isIgnore: opt\n };\n }\n\n return opt || {};\n}\n\nfunction makeSeriesScope(data) {\n var seriesModel = data.hostModel;\n var emphasisModel = seriesModel.getModel('emphasis');\n return {\n emphasisItemStyle: emphasisModel.getModel('itemStyle').getItemStyle(),\n blurItemStyle: seriesModel.getModel(['blur', 'itemStyle']).getItemStyle(),\n selectItemStyle: seriesModel.getModel(['select', 'itemStyle']).getItemStyle(),\n focus: emphasisModel.get('focus'),\n blurScope: emphasisModel.get('blurScope'),\n hoverScale: emphasisModel.get('scale'),\n labelStatesModels: getLabelStatesModels(seriesModel),\n cursorStyle: seriesModel.get('cursor')\n };\n}\n\nvar SymbolDraw =\n/** @class */\nfunction () {\n function SymbolDraw(SymbolCtor) {\n this.group = new graphic.Group();\n this._SymbolCtor = SymbolCtor || SymbolClz;\n }\n /**\n * Update symbols draw by new data\n */\n\n\n SymbolDraw.prototype.updateData = function (data, opt) {\n opt = normalizeUpdateOpt(opt);\n var group = this.group;\n var seriesModel = data.hostModel;\n var oldData = this._data;\n var SymbolCtor = this._SymbolCtor;\n var disableAnimation = opt.disableAnimation;\n var seriesScope = makeSeriesScope(data);\n var symbolUpdateOpt = {\n disableAnimation: disableAnimation\n };\n\n var getSymbolPoint = opt.getSymbolPoint || function (idx) {\n return data.getItemLayout(idx);\n }; // There is no oldLineData only when first rendering or switching from\n // stream mode to normal mode, where previous elements should be removed.\n\n\n if (!oldData) {\n group.removeAll();\n }\n\n data.diff(oldData).add(function (newIdx) {\n var point = getSymbolPoint(newIdx);\n\n if (symbolNeedsDraw(data, point, newIdx, opt)) {\n var symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt);\n symbolEl.setPosition(point);\n data.setItemGraphicEl(newIdx, symbolEl);\n group.add(symbolEl);\n }\n }).update(function (newIdx, oldIdx) {\n var symbolEl = oldData.getItemGraphicEl(oldIdx);\n var point = getSymbolPoint(newIdx);\n\n if (!symbolNeedsDraw(data, point, newIdx, opt)) {\n group.remove(symbolEl);\n return;\n }\n\n var newSymbolType = data.getItemVisual(newIdx, 'symbol') || 'circle';\n var oldSymbolType = symbolEl && symbolEl.getSymbolType && symbolEl.getSymbolType();\n\n if (!symbolEl // Create a new if symbol type changed.\n || oldSymbolType && oldSymbolType !== newSymbolType) {\n group.remove(symbolEl);\n symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt);\n symbolEl.setPosition(point);\n } else {\n symbolEl.updateData(data, newIdx, seriesScope, symbolUpdateOpt);\n var target = {\n x: point[0],\n y: point[1]\n };\n disableAnimation ? symbolEl.attr(target) : graphic.updateProps(symbolEl, target, seriesModel);\n } // Add back\n\n\n group.add(symbolEl);\n data.setItemGraphicEl(newIdx, symbolEl);\n }).remove(function (oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n el && el.fadeOut(function () {\n group.remove(el);\n });\n }).execute();\n this._getSymbolPoint = getSymbolPoint;\n this._data = data;\n };\n\n ;\n\n SymbolDraw.prototype.isPersistent = function () {\n return true;\n };\n\n ;\n\n SymbolDraw.prototype.updateLayout = function () {\n var _this = this;\n\n var data = this._data;\n\n if (data) {\n // Not use animation\n data.eachItemGraphicEl(function (el, idx) {\n var point = _this._getSymbolPoint(idx);\n\n el.setPosition(point);\n el.markRedraw();\n });\n }\n };\n\n ;\n\n SymbolDraw.prototype.incrementalPrepareUpdate = function (data) {\n this._seriesScope = makeSeriesScope(data);\n this._data = null;\n this.group.removeAll();\n };\n\n ;\n /**\n * Update symbols draw by new data\n */\n\n SymbolDraw.prototype.incrementalUpdate = function (taskParams, data, opt) {\n opt = normalizeUpdateOpt(opt);\n\n function updateIncrementalAndHover(el) {\n if (!el.isGroup) {\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 point = data.getItemLayout(idx);\n\n if (symbolNeedsDraw(data, point, idx, opt)) {\n var el = new this._SymbolCtor(data, idx, this._seriesScope);\n el.traverse(updateIncrementalAndHover);\n el.setPosition(point);\n this.group.add(el);\n data.setItemGraphicEl(idx, el);\n }\n }\n };\n\n ;\n\n SymbolDraw.prototype.remove = function (enableAnimation) {\n var group = this.group;\n var data = this._data; // Incremental model do not have this._data.\n\n if (data && enableAnimation) {\n data.eachItemGraphicEl(function (el) {\n el.fadeOut(function () {\n group.remove(el);\n });\n });\n } else {\n group.removeAll();\n }\n };\n\n ;\n return SymbolDraw;\n}();\n\nexport default SymbolDraw;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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';\nimport * as graphic from '../../util/graphic';\nimport { getECData } from '../../util/innerStore';\nimport { enterEmphasis, leaveEmphasis, enableHoverEmphasis } from '../../util/states';\nimport { getDefaultLabel } from './labelHelper';\nimport { extend } from 'zrender/lib/core/util';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';\nimport ZRImage from 'zrender/lib/graphic/Image';\nimport { saveOldStyle } from '../../animation/basicTrasition';\n\nvar Symbol =\n/** @class */\nfunction (_super) {\n __extends(Symbol, _super);\n\n function Symbol(data, idx, seriesScope, opts) {\n var _this = _super.call(this) || this;\n\n _this.updateData(data, idx, seriesScope, opts);\n\n return _this;\n }\n\n Symbol.prototype._createSymbol = function (symbolType, data, idx, symbolSize, keepAspect) {\n // Remove paths created before\n this.removeAll(); // let symbolPath = createSymbol(\n // symbolType, -0.5, -0.5, 1, 1, color\n // );\n // If width/height are set too small (e.g., set to 1) on ios10\n // and macOS Sierra, a circle stroke become a rect, no matter what\n // the scale is set. So we set width/height as 2. See #4150.\n\n var symbolPath = createSymbol(symbolType, -1, -1, 2, 2, null, keepAspect);\n symbolPath.attr({\n z2: 100,\n culling: true,\n scaleX: symbolSize[0] / 2,\n scaleY: symbolSize[1] / 2\n }); // Rewrite drift method\n\n symbolPath.drift = driftSymbol;\n this._symbolType = symbolType;\n this.add(symbolPath);\n };\n /**\n * Stop animation\n * @param {boolean} toLastFrame\n */\n\n\n Symbol.prototype.stopSymbolAnimation = function (toLastFrame) {\n this.childAt(0).stopAnimation(null, toLastFrame);\n };\n\n Symbol.prototype.getSymbolType = function () {\n return this._symbolType;\n };\n /**\n * FIXME:\n * Caution: This method breaks the encapsulation of this module,\n * but it indeed brings convenience. So do not use the method\n * unless you detailedly know all the implements of `Symbol`,\n * especially animation.\n *\n * Get symbol path element.\n */\n\n\n Symbol.prototype.getSymbolPath = function () {\n return this.childAt(0);\n };\n /**\n * Highlight symbol\n */\n\n\n Symbol.prototype.highlight = function () {\n enterEmphasis(this.childAt(0));\n };\n /**\n * Downplay symbol\n */\n\n\n Symbol.prototype.downplay = function () {\n leaveEmphasis(this.childAt(0));\n };\n /**\n * @param {number} zlevel\n * @param {number} z\n */\n\n\n Symbol.prototype.setZ = function (zlevel, z) {\n var symbolPath = this.childAt(0);\n symbolPath.zlevel = zlevel;\n symbolPath.z = z;\n };\n\n Symbol.prototype.setDraggable = function (draggable) {\n var symbolPath = this.childAt(0);\n symbolPath.draggable = draggable;\n symbolPath.cursor = draggable ? 'move' : symbolPath.cursor;\n };\n /**\n * Update symbol properties\n */\n\n\n Symbol.prototype.updateData = function (data, idx, seriesScope, opts) {\n this.silent = false;\n var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';\n var seriesModel = data.hostModel;\n var symbolSize = Symbol.getSymbolSize(data, idx);\n var isInit = symbolType !== this._symbolType;\n var disableAnimation = opts && opts.disableAnimation;\n\n if (isInit) {\n var keepAspect = data.getItemVisual(idx, 'symbolKeepAspect');\n\n this._createSymbol(symbolType, data, idx, symbolSize, keepAspect);\n } else {\n var symbolPath = this.childAt(0);\n symbolPath.silent = false;\n var target = {\n scaleX: symbolSize[0] / 2,\n scaleY: symbolSize[1] / 2\n };\n disableAnimation ? symbolPath.attr(target) : graphic.updateProps(symbolPath, target, seriesModel, idx);\n saveOldStyle(symbolPath);\n }\n\n this._updateCommon(data, idx, symbolSize, seriesScope, opts);\n\n if (isInit) {\n var symbolPath = this.childAt(0);\n\n if (!disableAnimation) {\n var target = {\n scaleX: this._sizeX,\n scaleY: this._sizeY,\n style: {\n // Always fadeIn. Because it has fadeOut animation when symbol is removed..\n opacity: symbolPath.style.opacity\n }\n };\n symbolPath.scaleX = symbolPath.scaleY = 0;\n symbolPath.style.opacity = 0;\n graphic.initProps(symbolPath, target, seriesModel, idx);\n }\n }\n\n if (disableAnimation) {\n // Must stop remove animation manually if don't call initProps or updateProps.\n this.childAt(0).stopAnimation('remove');\n }\n\n this._seriesModel = seriesModel;\n };\n\n Symbol.prototype._updateCommon = function (data, idx, symbolSize, seriesScope, opts) {\n var symbolPath = this.childAt(0);\n var seriesModel = data.hostModel;\n var emphasisItemStyle;\n var blurItemStyle;\n var selectItemStyle;\n var focus;\n var blurScope;\n var labelStatesModels;\n var hoverScale;\n var cursorStyle;\n\n if (seriesScope) {\n emphasisItemStyle = seriesScope.emphasisItemStyle;\n blurItemStyle = seriesScope.blurItemStyle;\n selectItemStyle = seriesScope.selectItemStyle;\n focus = seriesScope.focus;\n blurScope = seriesScope.blurScope;\n labelStatesModels = seriesScope.labelStatesModels;\n hoverScale = seriesScope.hoverScale;\n cursorStyle = seriesScope.cursorStyle;\n }\n\n if (!seriesScope || data.hasItemOption) {\n var itemModel = seriesScope && seriesScope.itemModel ? seriesScope.itemModel : data.getItemModel(idx);\n var emphasisModel = itemModel.getModel('emphasis');\n emphasisItemStyle = emphasisModel.getModel('itemStyle').getItemStyle();\n selectItemStyle = itemModel.getModel(['select', 'itemStyle']).getItemStyle();\n blurItemStyle = itemModel.getModel(['blur', 'itemStyle']).getItemStyle();\n focus = emphasisModel.get('focus');\n blurScope = emphasisModel.get('blurScope');\n labelStatesModels = getLabelStatesModels(itemModel);\n hoverScale = emphasisModel.getShallow('scale');\n cursorStyle = itemModel.getShallow('cursor');\n }\n\n var symbolRotate = data.getItemVisual(idx, 'symbolRotate');\n symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0);\n var symbolOffset = normalizeSymbolOffset(data.getItemVisual(idx, 'symbolOffset'), symbolSize);\n\n if (symbolOffset) {\n symbolPath.x = symbolOffset[0];\n symbolPath.y = symbolOffset[1];\n }\n\n cursorStyle && symbolPath.attr('cursor', cursorStyle);\n var symbolStyle = data.getItemVisual(idx, 'style');\n var visualColor = symbolStyle.fill;\n\n if (symbolPath instanceof ZRImage) {\n var pathStyle = symbolPath.style;\n symbolPath.useStyle(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 }, symbolStyle));\n } else {\n if (symbolPath.__isEmptyBrush) {\n // fill and stroke will be swapped if it's empty.\n // So we cloned a new style to avoid it affecting the original style in visual storage.\n // TODO Better implementation. No empty logic!\n symbolPath.useStyle(extend({}, symbolStyle));\n } else {\n symbolPath.useStyle(symbolStyle);\n } // Disable decal because symbol scale will been applied on the decal.\n\n\n symbolPath.style.decal = null;\n symbolPath.setColor(visualColor, opts && opts.symbolInnerColor);\n symbolPath.style.strokeNoScale = true;\n }\n\n var liftZ = data.getItemVisual(idx, 'liftZ');\n var z2Origin = this._z2;\n\n if (liftZ != null) {\n if (z2Origin == null) {\n this._z2 = symbolPath.z2;\n symbolPath.z2 += liftZ;\n }\n } else if (z2Origin != null) {\n symbolPath.z2 = z2Origin;\n this._z2 = null;\n }\n\n var useNameLabel = opts && opts.useNameLabel;\n setLabelStyle(symbolPath, labelStatesModels, {\n labelFetcher: seriesModel,\n labelDataIndex: idx,\n defaultText: getLabelDefaultText,\n inheritColor: visualColor,\n defaultOpacity: symbolStyle.opacity\n }); // Do not execute util needed.\n\n function getLabelDefaultText(idx) {\n return useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx);\n }\n\n this._sizeX = symbolSize[0] / 2;\n this._sizeY = symbolSize[1] / 2;\n var emphasisState = symbolPath.ensureState('emphasis');\n emphasisState.style = emphasisItemStyle;\n symbolPath.ensureState('select').style = selectItemStyle;\n symbolPath.ensureState('blur').style = blurItemStyle;\n\n if (hoverScale) {\n var scaleRatio = Math.max(1.1, 3 / this._sizeY);\n emphasisState.scaleX = this._sizeX * scaleRatio;\n emphasisState.scaleY = this._sizeY * scaleRatio;\n }\n\n this.setSymbolScale(1);\n enableHoverEmphasis(this, focus, blurScope);\n };\n\n Symbol.prototype.setSymbolScale = function (scale) {\n this.scaleX = this.scaleY = scale;\n };\n\n Symbol.prototype.fadeOut = function (cb, opt) {\n var symbolPath = this.childAt(0);\n var seriesModel = this._seriesModel;\n var dataIndex = getECData(this).dataIndex;\n var animationOpt = opt && opt.animation; // Avoid mistaken hover when fading out\n\n this.silent = symbolPath.silent = true; // Not show text when animating\n\n if (opt && opt.fadeLabel) {\n var textContent = symbolPath.getTextContent();\n\n if (textContent) {\n graphic.removeElement(textContent, {\n style: {\n opacity: 0\n }\n }, seriesModel, {\n dataIndex: dataIndex,\n removeOpt: animationOpt,\n cb: function () {\n symbolPath.removeTextContent();\n }\n });\n }\n } else {\n symbolPath.removeTextContent();\n }\n\n graphic.removeElement(symbolPath, {\n style: {\n opacity: 0\n },\n scaleX: 0,\n scaleY: 0\n }, seriesModel, {\n dataIndex: dataIndex,\n cb: cb,\n removeOpt: animationOpt\n });\n };\n\n Symbol.getSymbolSize = function (data, idx) {\n return normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize'));\n };\n\n return Symbol;\n}(graphic.Group);\n\nfunction driftSymbol(dx, dy) {\n this.parent.drift(dx, dy);\n}\n\nexport default Symbol;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 updateCenterAndZoom(view, payload, zoomLimit) {\n var previousZoom = view.getZoom();\n var center = view.getCenter();\n var zoom = payload.zoom;\n var point = view.dataToPoint(center);\n\n if (payload.dx != null && payload.dy != null) {\n point[0] -= payload.dx;\n point[1] -= payload.dy;\n view.setCenter(view.pointToData(point));\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(view.pointToData(point));\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 * as graphic from '../../util/graphic';\nimport LineGroup from './Line';\nimport { getLabelStatesModels } from '../../label/labelStyle';\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.isPersistent = function () {\n return true;\n };\n\n ;\n\n LineDraw.prototype.updateData = function (lineData) {\n var _this = this;\n\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 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 }\n };\n\n ;\n\n LineDraw.prototype.remove = function () {\n this.group.removeAll();\n };\n\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 return {\n lineStyle: hostModel.getModel('lineStyle').getLineStyle(),\n emphasisLineStyle: hostModel.getModel(['emphasis', 'lineStyle']).getLineStyle(),\n blurLineStyle: hostModel.getModel(['blur', 'lineStyle']).getLineStyle(),\n selectLineStyle: hostModel.getModel(['select', 'lineStyle']).getLineStyle(),\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 !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 { __extends } from \"tslib\";\n/**\n * Line path for bezier and straight line draw\n */\n\nimport * as graphic from '../../util/graphic';\nimport * as vec2 from 'zrender/lib/core/vector';\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';\nimport * as vector from 'zrender/lib/core/vector';\nimport * as symbolUtil from '../../util/symbol';\nimport ECLinePath from './LinePath';\nimport * as graphic from '../../util/graphic';\nimport { enableHoverEmphasis, enterEmphasis, leaveEmphasis, SPECIAL_STATES } from '../../util/states';\nimport { getLabelStatesModels, setLabelStyle } from '../../label/labelStyle';\nimport { round } from '../../util/number';\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; // Optimization for large dataset\n\n if (!seriesScope || lineData.hasItemOption) {\n var itemModel = lineData.getItemModel(idx);\n emphasisLineStyle = itemModel.getModel(['emphasis', 'lineStyle']).getLineStyle();\n blurLineStyle = itemModel.getModel(['blur', 'lineStyle']).getLineStyle();\n selectLineStyle = itemModel.getModel(['select', 'lineStyle']).getLineStyle();\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 enableHoverEmphasis(this);\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 { isObject, retrieve2 } from 'zrender/lib/core/util';\nimport { makeInner } from '../util/model'; // Stored properties for further transition.\n\nexport var transitionStore = makeInner();\n/**\n * Return null if animation is disabled.\n */\n\nexport function getAnimationConfig(animationType, animatableModel, dataIndex, // Extra opts can override the option in animatable model.\nextraOpts, // TODO It's only for pictorial bar now.\nextraDelayParams) {\n var animationPayload; // Check if there is global animation configuration from dataZoom/resize can override the config in option.\n // If animation is enabled. Will use this animation config in payload.\n // If animation is disabled. Just ignore it.\n\n if (animatableModel && animatableModel.ecModel) {\n var updatePayload = animatableModel.ecModel.getUpdatePayload();\n animationPayload = updatePayload && updatePayload.animation;\n }\n\n var animationEnabled = animatableModel && animatableModel.isAnimationEnabled();\n var isUpdate = animationType === 'update';\n\n if (animationEnabled) {\n var duration = void 0;\n var easing = void 0;\n var delay = void 0;\n\n if (extraOpts) {\n duration = retrieve2(extraOpts.duration, 200);\n easing = retrieve2(extraOpts.easing, 'cubicOut');\n delay = 0;\n } else {\n duration = animatableModel.getShallow(isUpdate ? 'animationDurationUpdate' : 'animationDuration');\n easing = animatableModel.getShallow(isUpdate ? 'animationEasingUpdate' : 'animationEasing');\n delay = animatableModel.getShallow(isUpdate ? 'animationDelayUpdate' : 'animationDelay');\n } // animation from payload has highest priority.\n\n\n if (animationPayload) {\n animationPayload.duration != null && (duration = animationPayload.duration);\n animationPayload.easing != null && (easing = animationPayload.easing);\n animationPayload.delay != null && (delay = animationPayload.delay);\n }\n\n if (typeof delay === 'function') {\n delay = delay(dataIndex, extraDelayParams);\n }\n\n if (typeof duration === 'function') {\n duration = duration(dataIndex);\n }\n\n var config = {\n duration: duration || 0,\n delay: delay,\n easing: easing\n };\n return config;\n } else {\n return null;\n }\n}\n\nfunction animateOrSetProps(animationType, el, props, animatableModel, dataIndex, cb, during) {\n var isFrom = false;\n var removeOpt;\n\n if (typeof dataIndex === 'function') {\n during = cb;\n cb = dataIndex;\n dataIndex = null;\n } else if (isObject(dataIndex)) {\n cb = dataIndex.cb;\n during = dataIndex.during;\n isFrom = dataIndex.isFrom;\n removeOpt = dataIndex.removeOpt;\n dataIndex = dataIndex.dataIndex;\n }\n\n var isRemove = animationType === 'remove';\n\n if (!isRemove) {\n // Must stop the remove animation.\n el.stopAnimation('remove');\n }\n\n var animationConfig = getAnimationConfig(animationType, animatableModel, dataIndex, isRemove ? removeOpt || {} : null, animatableModel && animatableModel.getAnimationDelayParams ? animatableModel.getAnimationDelayParams(el, dataIndex) : null);\n\n if (animationConfig && animationConfig.duration > 0) {\n var duration = animationConfig.duration;\n var animationDelay = animationConfig.delay;\n var animationEasing = animationConfig.easing;\n var animateConfig = {\n duration: duration,\n delay: animationDelay || 0,\n easing: animationEasing,\n done: cb,\n force: !!cb || !!during,\n // Set to final state in update/init animation.\n // So the post processing based on the path shape can be done correctly.\n setToFinal: !isRemove,\n scope: animationType,\n during: during\n };\n isFrom ? el.animateFrom(props, animateConfig) : el.animateTo(props, animateConfig);\n } else {\n el.stopAnimation(); // If `isFrom`, the props is the \"from\" props.\n\n !isFrom && el.attr(props); // Call during at least once.\n\n during && during(1);\n cb && cb();\n }\n}\n/**\n * Update graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n * @example\n * graphic.updateProps(el, {\n * position: [100, 100]\n * }, seriesModel, dataIndex, function () { console.log('Animation done!'); });\n * // Or\n * graphic.updateProps(el, {\n * position: [100, 100]\n * }, seriesModel, function () { console.log('Animation done!'); });\n */\n\n\nfunction updateProps(el, props, // TODO: TYPE AnimatableModel\nanimatableModel, dataIndex, cb, during) {\n animateOrSetProps('update', el, props, animatableModel, dataIndex, cb, during);\n}\n\nexport { updateProps };\n/**\n * Init graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n */\n\nexport function initProps(el, props, animatableModel, dataIndex, cb, during) {\n animateOrSetProps('init', el, props, animatableModel, dataIndex, cb, during);\n}\n/**\n * If element is removed.\n * It can determine if element is having remove animation.\n */\n\nexport function isElementRemoved(el) {\n if (!el.__zr) {\n return true;\n }\n\n for (var i = 0; i < el.animators.length; i++) {\n var animator = el.animators[i];\n\n if (animator.scope === 'remove') {\n return true;\n }\n }\n\n return false;\n}\n/**\n * Remove graphic element\n */\n\nexport function removeElement(el, props, animatableModel, dataIndex, cb, during) {\n // Don't do remove animation twice.\n if (isElementRemoved(el)) {\n return;\n }\n\n animateOrSetProps('remove', el, props, animatableModel, dataIndex, cb, during);\n}\n\nfunction fadeOutDisplayable(el, animatableModel, dataIndex, done) {\n el.removeTextContent();\n el.removeTextGuideLine();\n removeElement(el, {\n style: {\n opacity: 0\n }\n }, animatableModel, dataIndex, done);\n}\n\nexport function removeElementWithFadeOut(el, animatableModel, dataIndex) {\n function doRemove() {\n el.parent && el.parent.remove(el);\n } // Hide label and labelLine first\n // TODO Also use fade out animation?\n\n\n if (!el.isGroup) {\n fadeOutDisplayable(el, animatableModel, dataIndex, doRemove);\n } else {\n el.traverse(function (disp) {\n if (!disp.isGroup) {\n // Can invoke doRemove multiple times.\n fadeOutDisplayable(disp, animatableModel, dataIndex, doRemove);\n }\n });\n }\n}\n/**\n * Save old style for style transition in universalTransition module.\n * It's used when element will be reused in each render.\n * For chart like map, heatmap, which will always create new element.\n * We don't need to save this because universalTransition can get old style from the old element\n */\n\nexport function saveOldStyle(el) {\n transitionStore(el).oldStyle = el.style;\n}\nexport function getOldStyle(el) {\n return transitionStore(el).oldStyle;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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';\nimport SeriesModel from '../../model/Series';\nimport { createSymbol } from '../../util/symbol';\nimport { Group } from '../../util/graphic';\n\nvar LineSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(LineSeriesModel, _super);\n\n function LineSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = LineSeriesModel.type;\n _this.hasSymbolVisual = true;\n return _this;\n }\n\n LineSeriesModel.prototype.getInitialData = function (option) {\n if (process.env.NODE_ENV !== 'production') {\n var coordSys = option.coordinateSystem;\n\n if (coordSys !== 'polar' && coordSys !== 'cartesian2d') {\n throw new Error('Line not support coordinateSystem besides cartesian and polar');\n }\n }\n\n return createSeriesData(null, this, {\n useEncodeDefaulter: true\n });\n };\n\n LineSeriesModel.prototype.getLegendIcon = function (opt) {\n var group = new Group();\n var line = createSymbol('line', 0, opt.itemHeight / 2, opt.itemWidth, 0, opt.lineStyle.stroke, false);\n group.add(line);\n line.setStyle(opt.lineStyle);\n var visualType = this.getData().getVisual('symbol');\n var visualRotate = this.getData().getVisual('symbolRotate');\n var symbolType = visualType === 'none' ? 'circle' : visualType; // Symbol size is 80% when there is a line\n\n var size = opt.itemHeight * 0.8;\n var symbol = createSymbol(symbolType, (opt.itemWidth - size) / 2, (opt.itemHeight - size) / 2, size, size, opt.itemStyle.fill);\n group.add(symbol);\n symbol.setStyle(opt.itemStyle);\n var symbolRotate = opt.iconRotate === 'inherit' ? visualRotate : opt.iconRotate || 0;\n symbol.rotation = symbolRotate * Math.PI / 180;\n symbol.setOrigin([opt.itemWidth / 2, opt.itemHeight / 2]);\n\n if (symbolType.indexOf('empty') > -1) {\n symbol.style.stroke = symbol.style.fill;\n symbol.style.fill = '#fff';\n symbol.style.lineWidth = 2;\n }\n\n return group;\n };\n\n LineSeriesModel.type = 'series.line';\n LineSeriesModel.dependencies = ['grid', 'polar'];\n LineSeriesModel.defaultOption = {\n zlevel: 0,\n z: 3,\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n clip: true,\n label: {\n position: 'top'\n },\n // itemStyle: {\n // },\n endLabel: {\n show: false,\n valueAnimation: true,\n distance: 8\n },\n lineStyle: {\n width: 2,\n type: 'solid'\n },\n emphasis: {\n scale: true,\n lineStyle: {\n width: 'bolder'\n }\n },\n // areaStyle: {\n // origin of areaStyle. Valid values:\n // `'auto'/null/undefined`: from axisLine to data\n // `'start'`: from min to data\n // `'end'`: from data to max\n // origin: 'auto'\n // },\n // false, 'start', 'end', 'middle'\n step: false,\n // Disabled if step is true\n smooth: false,\n smoothMonotone: null,\n symbol: 'emptyCircle',\n symbolSize: 4,\n symbolRotate: null,\n showSymbol: true,\n // `false`: follow the label interval strategy.\n // `true`: show all symbols.\n // `'auto'`: If possible, show all symbols, otherwise\n // follow the label interval strategy.\n showAllSymbol: 'auto',\n // Whether to connect break point.\n connectNulls: false,\n // Sampling for large data. Can be: 'average', 'max', 'min', 'sum', 'lttb'.\n sampling: 'none',\n animationEasing: 'linear',\n // Disable progressive\n progressive: 0,\n hoverLayerThreshold: Infinity,\n universalTransition: {\n divideShape: 'clone'\n }\n };\n return LineSeriesModel;\n}(SeriesModel);\n\nexport default LineSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isDimensionStacked } from '../../data/helper/dataStackHelper';\nimport { map } from 'zrender/lib/core/util';\nexport function prepareDataCoordInfo(coordSys, data, valueOrigin) {\n var baseAxis = coordSys.getBaseAxis();\n var valueAxis = coordSys.getOtherAxis(baseAxis);\n var valueStart = getValueStart(valueAxis, valueOrigin);\n var baseAxisDim = baseAxis.dim;\n var valueAxisDim = valueAxis.dim;\n var valueDim = data.mapDimension(valueAxisDim);\n var baseDim = data.mapDimension(baseAxisDim);\n var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0;\n var dims = map(coordSys.dimensions, function (coordDim) {\n return data.mapDimension(coordDim);\n });\n var stacked = false;\n var stackResultDim = data.getCalculationInfo('stackResultDimension');\n\n if (isDimensionStacked(data, dims[0]\n /*, dims[1]*/\n )) {\n // jshint ignore:line\n stacked = true;\n dims[0] = stackResultDim;\n }\n\n if (isDimensionStacked(data, dims[1]\n /*, dims[0]*/\n )) {\n // jshint ignore:line\n stacked = true;\n dims[1] = stackResultDim;\n }\n\n return {\n dataDimsForPoint: dims,\n valueStart: valueStart,\n valueAxisDim: valueAxisDim,\n baseAxisDim: baseAxisDim,\n stacked: !!stacked,\n valueDim: valueDim,\n baseDim: baseDim,\n baseDataOffset: baseDataOffset,\n stackedOverDimension: data.getCalculationInfo('stackedOverDimension')\n };\n}\n\nfunction getValueStart(valueAxis, valueOrigin) {\n var valueStart = 0;\n var extent = valueAxis.scale.getExtent();\n\n if (valueOrigin === 'start') {\n valueStart = extent[0];\n } else if (valueOrigin === 'end') {\n valueStart = extent[1];\n } // auto\n else {\n // Both positive\n if (extent[0] > 0) {\n valueStart = extent[0];\n } // Both negative\n else if (extent[1] < 0) {\n valueStart = extent[1];\n } // If is one positive, and one negative, onZero shall be true\n\n }\n\n return valueStart;\n}\n\nexport function getStackedOnPoint(dataCoordInfo, coordSys, data, idx) {\n var value = NaN;\n\n if (dataCoordInfo.stacked) {\n value = data.get(data.getCalculationInfo('stackedOverDimension'), idx);\n }\n\n if (isNaN(value)) {\n value = dataCoordInfo.valueStart;\n }\n\n var baseDataOffset = dataCoordInfo.baseDataOffset;\n var stackedData = [];\n stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx);\n stackedData[1 - baseDataOffset] = value;\n return coordSys.dataToPoint(stackedData);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\"; // Poly path support NaN point\n\nimport Path from 'zrender/lib/graphic/Path';\nimport PathProxy from 'zrender/lib/core/PathProxy';\nimport { cubicRootAt, cubicAt } from 'zrender/lib/core/curve';\nvar mathMin = Math.min;\nvar mathMax = Math.max;\n\nfunction isPointNull(x, y) {\n return isNaN(x) || isNaN(y);\n}\n/**\n * Draw smoothed line in non-monotone, in may cause undesired curve in extreme\n * situations. This should be used when points are non-monotone neither in x or\n * y dimension.\n */\n\n\nfunction drawSegment(ctx, points, start, segLen, allLen, dir, smooth, smoothMonotone, connectNulls) {\n var prevX;\n var prevY;\n var cpx0;\n var cpy0;\n var cpx1;\n var cpy1;\n var idx = start;\n var k = 0;\n\n for (; k < segLen; k++) {\n var x = points[idx * 2];\n var y = points[idx * 2 + 1];\n\n if (idx >= allLen || idx < 0) {\n break;\n }\n\n if (isPointNull(x, y)) {\n if (connectNulls) {\n idx += dir;\n continue;\n }\n\n break;\n }\n\n if (idx === start) {\n ctx[dir > 0 ? 'moveTo' : 'lineTo'](x, y);\n cpx0 = x;\n cpy0 = y;\n } else {\n var dx = x - prevX;\n var dy = y - prevY; // Ignore tiny segment.\n\n if (dx * dx + dy * dy < 0.5) {\n idx += dir;\n continue;\n }\n\n if (smooth > 0) {\n var nextIdx = idx + dir;\n var nextX = points[nextIdx * 2];\n var nextY = points[nextIdx * 2 + 1];\n var tmpK = k + 1;\n\n if (connectNulls) {\n // Find next point not null\n while (isPointNull(nextX, nextY) && tmpK < segLen) {\n tmpK++;\n nextIdx += dir;\n nextX = points[nextIdx * 2];\n nextY = points[nextIdx * 2 + 1];\n }\n }\n\n var ratioNextSeg = 0.5;\n var vx = 0;\n var vy = 0;\n var nextCpx0 = void 0;\n var nextCpy0 = void 0; // Is last point\n\n if (tmpK >= segLen || isPointNull(nextX, nextY)) {\n cpx1 = x;\n cpy1 = y;\n } else {\n vx = nextX - prevX;\n vy = nextY - prevY;\n var dx0 = x - prevX;\n var dx1 = nextX - x;\n var dy0 = y - prevY;\n var dy1 = nextY - y;\n var lenPrevSeg = void 0;\n var lenNextSeg = void 0;\n\n if (smoothMonotone === 'x') {\n lenPrevSeg = Math.abs(dx0);\n lenNextSeg = Math.abs(dx1);\n cpx1 = x - lenPrevSeg * smooth;\n cpy1 = y;\n nextCpx0 = x + lenPrevSeg * smooth;\n nextCpy0 = y;\n } else if (smoothMonotone === 'y') {\n lenPrevSeg = Math.abs(dy0);\n lenNextSeg = Math.abs(dy1);\n cpx1 = x;\n cpy1 = y - lenPrevSeg * smooth;\n nextCpx0 = x;\n nextCpy0 = y + lenPrevSeg * smooth;\n } else {\n lenPrevSeg = Math.sqrt(dx0 * dx0 + dy0 * dy0);\n lenNextSeg = Math.sqrt(dx1 * dx1 + dy1 * dy1); // Use ratio of seg length\n\n ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg);\n cpx1 = x - vx * smooth * (1 - ratioNextSeg);\n cpy1 = y - vy * smooth * (1 - ratioNextSeg); // cp0 of next segment\n\n nextCpx0 = x + vx * smooth * ratioNextSeg;\n nextCpy0 = y + vy * smooth * ratioNextSeg; // Smooth constraint between point and next point.\n // Avoid exceeding extreme after smoothing.\n\n nextCpx0 = mathMin(nextCpx0, mathMax(nextX, x));\n nextCpy0 = mathMin(nextCpy0, mathMax(nextY, y));\n nextCpx0 = mathMax(nextCpx0, mathMin(nextX, x));\n nextCpy0 = mathMax(nextCpy0, mathMin(nextY, y)); // Reclaculate cp1 based on the adjusted cp0 of next seg.\n\n vx = nextCpx0 - x;\n vy = nextCpy0 - y;\n cpx1 = x - vx * lenPrevSeg / lenNextSeg;\n cpy1 = y - vy * lenPrevSeg / lenNextSeg; // Smooth constraint between point and prev point.\n // Avoid exceeding extreme after smoothing.\n\n cpx1 = mathMin(cpx1, mathMax(prevX, x));\n cpy1 = mathMin(cpy1, mathMax(prevY, y));\n cpx1 = mathMax(cpx1, mathMin(prevX, x));\n cpy1 = mathMax(cpy1, mathMin(prevY, y)); // Adjust next cp0 again.\n\n vx = x - cpx1;\n vy = y - cpy1;\n nextCpx0 = x + vx * lenNextSeg / lenPrevSeg;\n nextCpy0 = y + vy * lenNextSeg / lenPrevSeg;\n }\n }\n\n ctx.bezierCurveTo(cpx0, cpy0, cpx1, cpy1, x, y);\n cpx0 = nextCpx0;\n cpy0 = nextCpy0;\n } else {\n ctx.lineTo(x, y);\n }\n }\n\n prevX = x;\n prevY = y;\n idx += dir;\n }\n\n return k;\n}\n\nvar ECPolylineShape =\n/** @class */\nfunction () {\n function ECPolylineShape() {\n this.smooth = 0;\n this.smoothConstraint = true;\n }\n\n return ECPolylineShape;\n}();\n\nvar ECPolyline =\n/** @class */\nfunction (_super) {\n __extends(ECPolyline, _super);\n\n function ECPolyline(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this.type = 'ec-polyline';\n return _this;\n }\n\n ECPolyline.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n\n ECPolyline.prototype.getDefaultShape = function () {\n return new ECPolylineShape();\n };\n\n ECPolyline.prototype.buildPath = function (ctx, shape) {\n var points = shape.points;\n var i = 0;\n var len = points.length / 2; // const result = getBoundingBox(points, shape.smoothConstraint);\n\n if (shape.connectNulls) {\n // Must remove first and last null values avoid draw error in polygon\n for (; len > 0; len--) {\n if (!isPointNull(points[len * 2 - 2], points[len * 2 - 1])) {\n break;\n }\n }\n\n for (; i < len; i++) {\n if (!isPointNull(points[i * 2], points[i * 2 + 1])) {\n break;\n }\n }\n }\n\n while (i < len) {\n i += drawSegment(ctx, points, i, len, len, 1, shape.smooth, shape.smoothMonotone, shape.connectNulls) + 1;\n }\n };\n\n ECPolyline.prototype.getPointOn = function (xOrY, dim) {\n if (!this.path) {\n this.createPathProxy();\n this.buildPath(this.path, this.shape);\n }\n\n var path = this.path;\n var data = path.data;\n var CMD = PathProxy.CMD;\n var x0;\n var y0;\n var isDimX = dim === 'x';\n var roots = [];\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++];\n var x = void 0;\n var y = void 0;\n var x2 = void 0;\n var y2 = void 0;\n var x3 = void 0;\n var y3 = void 0;\n var t = void 0;\n\n switch (cmd) {\n case CMD.M:\n x0 = data[i++];\n y0 = data[i++];\n break;\n\n case CMD.L:\n x = data[i++];\n y = data[i++];\n t = isDimX ? (xOrY - x0) / (x - x0) : (xOrY - y0) / (y - y0);\n\n if (t <= 1 && t >= 0) {\n var val = isDimX ? (y - y0) * t + y0 : (x - x0) * t + x0;\n return isDimX ? [xOrY, val] : [val, xOrY];\n }\n\n x0 = x;\n y0 = y;\n break;\n\n case CMD.C:\n x = data[i++];\n y = data[i++];\n x2 = data[i++];\n y2 = data[i++];\n x3 = data[i++];\n y3 = data[i++];\n var nRoot = isDimX ? cubicRootAt(x0, x, x2, x3, xOrY, roots) : cubicRootAt(y0, y, y2, y3, xOrY, roots);\n\n if (nRoot > 0) {\n for (var i_1 = 0; i_1 < nRoot; i_1++) {\n var t_1 = roots[i_1];\n\n if (t_1 <= 1 && t_1 >= 0) {\n var val = isDimX ? cubicAt(y0, y, y2, y3, t_1) : cubicAt(x0, x, x2, x3, t_1);\n return isDimX ? [xOrY, val] : [val, xOrY];\n }\n }\n }\n\n x0 = x3;\n y0 = y3;\n break;\n }\n }\n };\n\n return ECPolyline;\n}(Path);\n\nexport { ECPolyline };\n\nvar ECPolygonShape =\n/** @class */\nfunction (_super) {\n __extends(ECPolygonShape, _super);\n\n function ECPolygonShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n return ECPolygonShape;\n}(ECPolylineShape);\n\nvar ECPolygon =\n/** @class */\nfunction (_super) {\n __extends(ECPolygon, _super);\n\n function ECPolygon(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this.type = 'ec-polygon';\n return _this;\n }\n\n ECPolygon.prototype.getDefaultShape = function () {\n return new ECPolygonShape();\n };\n\n ECPolygon.prototype.buildPath = function (ctx, shape) {\n var points = shape.points;\n var stackedOnPoints = shape.stackedOnPoints;\n var i = 0;\n var len = points.length / 2;\n var smoothMonotone = shape.smoothMonotone;\n\n if (shape.connectNulls) {\n // Must remove first and last null values avoid draw error in polygon\n for (; len > 0; len--) {\n if (!isPointNull(points[len * 2 - 2], points[len * 2 - 1])) {\n break;\n }\n }\n\n for (; i < len; i++) {\n if (!isPointNull(points[i * 2], points[i * 2 + 1])) {\n break;\n }\n }\n }\n\n while (i < len) {\n var k = drawSegment(ctx, points, i, len, len, 1, shape.smooth, smoothMonotone, shape.connectNulls);\n drawSegment(ctx, stackedOnPoints, i + k - 1, k, len, -1, shape.stackedOnSmooth, smoothMonotone, shape.connectNulls);\n i += k + 1;\n ctx.closePath();\n }\n };\n\n return ECPolygon;\n}(Path);\n\nexport { ECPolygon };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as graphic from '../../util/graphic';\nimport { round } from '../../util/number';\n\nfunction createGridClipPath(cartesian, hasAnimation, seriesModel, done, during) {\n var rect = cartesian.getArea();\n var x = rect.x;\n var y = rect.y;\n var width = rect.width;\n var height = rect.height;\n var lineWidth = seriesModel.get(['lineStyle', 'width']) || 2; // Expand the clip path a bit to avoid the border is clipped and looks thinner\n\n x -= lineWidth / 2;\n y -= lineWidth / 2;\n width += lineWidth;\n height += lineWidth; // fix: https://github.com/apache/incubator-echarts/issues/11369\n\n x = Math.floor(x);\n width = Math.round(width);\n var clipPath = new graphic.Rect({\n shape: {\n x: x,\n y: y,\n width: width,\n height: height\n }\n });\n\n if (hasAnimation) {\n var baseAxis = cartesian.getBaseAxis();\n var isHorizontal = baseAxis.isHorizontal();\n var isAxisInversed = baseAxis.inverse;\n\n if (isHorizontal) {\n if (isAxisInversed) {\n clipPath.shape.x += width;\n }\n\n clipPath.shape.width = 0;\n } else {\n if (!isAxisInversed) {\n clipPath.shape.y += height;\n }\n\n clipPath.shape.height = 0;\n }\n\n var duringCb = typeof during === 'function' ? function (percent) {\n during(percent, clipPath);\n } : null;\n graphic.initProps(clipPath, {\n shape: {\n width: width,\n height: height,\n x: x,\n y: y\n }\n }, seriesModel, null, done, duringCb);\n }\n\n return clipPath;\n}\n\nfunction createPolarClipPath(polar, hasAnimation, seriesModel) {\n var sectorArea = polar.getArea(); // Avoid float number rounding error for symbol on the edge of axis extent.\n\n var r0 = round(sectorArea.r0, 1);\n var r = round(sectorArea.r, 1);\n var clipPath = new graphic.Sector({\n shape: {\n cx: round(polar.cx, 1),\n cy: round(polar.cy, 1),\n r0: r0,\n r: r,\n startAngle: sectorArea.startAngle,\n endAngle: sectorArea.endAngle,\n clockwise: sectorArea.clockwise\n }\n });\n\n if (hasAnimation) {\n var isRadial = polar.getBaseAxis().dim === 'angle';\n\n if (isRadial) {\n clipPath.shape.endAngle = sectorArea.startAngle;\n } else {\n clipPath.shape.r = r0;\n }\n\n graphic.initProps(clipPath, {\n shape: {\n endAngle: sectorArea.endAngle,\n r: r\n }\n }, seriesModel);\n }\n\n return clipPath;\n}\n\nfunction createClipPath(coordSys, hasAnimation, seriesModel, done, during) {\n if (!coordSys) {\n return null;\n } else if (coordSys.type === 'polar') {\n return createPolarClipPath(coordSys, hasAnimation, seriesModel);\n } else if (coordSys.type === 'cartesian2d') {\n return createGridClipPath(coordSys, hasAnimation, seriesModel, done, during);\n }\n\n return null;\n}\n\nexport { createGridClipPath, createPolarClipPath, createClipPath };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\"; // FIXME step not support polar\n\nimport * as zrUtil from 'zrender/lib/core/util';\nimport SymbolDraw from '../helper/SymbolDraw';\nimport SymbolClz from '../helper/Symbol';\nimport lineAnimationDiff from './lineAnimationDiff';\nimport * as graphic from '../../util/graphic';\nimport * as modelUtil from '../../util/model';\nimport { ECPolyline, ECPolygon } from './poly';\nimport ChartView from '../../view/Chart';\nimport { prepareDataCoordInfo, getStackedOnPoint } from './helper';\nimport { createGridClipPath, createPolarClipPath } from '../helper/createClipPathFromCoordSys';\nimport { isCoordinateSystemType } from '../../coord/CoordinateSystem';\nimport { setStatesStylesFromModel, setStatesFlag, enableHoverEmphasis, SPECIAL_STATES } from '../../util/states';\nimport { setLabelStyle, getLabelStatesModels, labelInner } from '../../label/labelStyle';\nimport { getDefaultLabel, getDefaultInterpolatedLabel } from '../helper/labelHelper';\nimport { getECData } from '../../util/innerStore';\nimport { createFloat32Array } from '../../util/vendor';\nimport { convertToColorString } from '../../util/format';\n\nfunction isPointsSame(points1, points2) {\n if (points1.length !== points2.length) {\n return;\n }\n\n for (var i = 0; i < points1.length; i++) {\n if (points1[i] !== points2[i]) {\n return;\n }\n }\n\n return true;\n}\n\nfunction bboxFromPoints(points) {\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\n if (!isNaN(x)) {\n minX = Math.min(x, minX);\n maxX = Math.max(x, maxX);\n }\n\n if (!isNaN(y)) {\n minY = Math.min(y, minY);\n maxY = Math.max(y, maxY);\n }\n }\n\n return [[minX, minY], [maxX, maxY]];\n}\n\nfunction getBoundingDiff(points1, points2) {\n var _a = bboxFromPoints(points1),\n min1 = _a[0],\n max1 = _a[1];\n\n var _b = bboxFromPoints(points2),\n min2 = _b[0],\n max2 = _b[1]; // Get a max value from each corner of two boundings.\n\n\n return Math.max(Math.abs(min1[0] - min2[0]), Math.abs(min1[1] - min2[1]), Math.abs(max1[0] - max2[0]), Math.abs(max1[1] - max2[1]));\n}\n\nfunction getSmooth(smooth) {\n return typeof smooth === 'number' ? smooth : smooth ? 0.5 : 0;\n}\n\nfunction getStackedOnPoints(coordSys, data, dataCoordInfo) {\n if (!dataCoordInfo.valueDim) {\n return [];\n }\n\n var len = data.count();\n var points = createFloat32Array(len * 2);\n\n for (var idx = 0; idx < len; idx++) {\n var pt = getStackedOnPoint(dataCoordInfo, coordSys, data, idx);\n points[idx * 2] = pt[0];\n points[idx * 2 + 1] = pt[1];\n }\n\n return points;\n}\n\nfunction turnPointsIntoStep(points, coordSys, stepTurnAt) {\n var baseAxis = coordSys.getBaseAxis();\n var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1;\n var stepPoints = [];\n var i = 0;\n var stepPt = [];\n var pt = [];\n var nextPt = [];\n\n for (; i < points.length - 2; i += 2) {\n nextPt[0] = points[i + 2];\n nextPt[1] = points[i + 3];\n pt[0] = points[i];\n pt[1] = points[i + 1];\n stepPoints.push(pt[0], pt[1]);\n\n switch (stepTurnAt) {\n case 'end':\n stepPt[baseIndex] = nextPt[baseIndex];\n stepPt[1 - baseIndex] = pt[1 - baseIndex];\n stepPoints.push(stepPt[0], stepPt[1]);\n break;\n\n case 'middle':\n var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2;\n var stepPt2 = [];\n stepPt[baseIndex] = stepPt2[baseIndex] = middle;\n stepPt[1 - baseIndex] = pt[1 - baseIndex];\n stepPt2[1 - baseIndex] = nextPt[1 - baseIndex];\n stepPoints.push(stepPt[0], stepPt[1]);\n stepPoints.push(stepPt2[0], stepPt2[1]);\n break;\n\n default:\n // default is start\n stepPt[baseIndex] = pt[baseIndex];\n stepPt[1 - baseIndex] = nextPt[1 - baseIndex];\n stepPoints.push(stepPt[0], stepPt[1]);\n }\n } // Last points\n\n\n stepPoints.push(points[i++], points[i++]);\n return stepPoints;\n}\n\nfunction getVisualGradient(data, coordSys) {\n var visualMetaList = data.getVisual('visualMeta');\n\n if (!visualMetaList || !visualMetaList.length || !data.count()) {\n // When data.count() is 0, gradient range can not be calculated.\n return;\n }\n\n if (coordSys.type !== 'cartesian2d') {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Visual map on line style is only supported on cartesian2d.');\n }\n\n return;\n }\n\n var coordDim;\n var visualMeta;\n\n for (var i = visualMetaList.length - 1; i >= 0; i--) {\n var dimInfo = data.getDimensionInfo(visualMetaList[i].dimension);\n coordDim = dimInfo && dimInfo.coordDim; // Can only be x or y\n\n if (coordDim === 'x' || coordDim === 'y') {\n visualMeta = visualMetaList[i];\n break;\n }\n }\n\n if (!visualMeta) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Visual map on line style only support x or y dimension.');\n }\n\n return;\n } // If the area to be rendered is bigger than area defined by LinearGradient,\n // the canvas spec prescribes that the color of the first stop and the last\n // stop should be used. But if two stops are added at offset 0, in effect\n // browsers use the color of the second stop to render area outside\n // LinearGradient. So we can only infinitesimally extend area defined in\n // LinearGradient to render `outerColors`.\n\n\n var axis = coordSys.getAxis(coordDim);\n var axisScaleExtent = axis.scale.getExtent(); // dataToCoord mapping may not be linear, but must be monotonic.\n\n var colorStops = zrUtil.map(visualMeta.stops, function (stop) {\n var coord = axis.toGlobalCoord(axis.dataToCoord(stop.value)); // normalize the infinite value\n\n isNaN(coord) || isFinite(coord) || (coord = axis.toGlobalCoord(axis.dataToCoord(axisScaleExtent[+(coord < 0)])));\n return {\n offset: 0,\n coord: coord,\n color: stop.color\n };\n });\n var stopLen = colorStops.length;\n var outerColors = visualMeta.outerColors.slice();\n\n if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) {\n colorStops.reverse();\n outerColors.reverse();\n }\n\n var tinyExtent = 10; // Arbitrary value: 10px\n\n var minCoord = colorStops[0].coord - tinyExtent;\n var maxCoord = colorStops[stopLen - 1].coord + tinyExtent;\n var coordSpan = maxCoord - minCoord;\n\n if (coordSpan < 1e-3) {\n return 'transparent';\n }\n\n zrUtil.each(colorStops, function (stop) {\n stop.offset = (stop.coord - minCoord) / coordSpan;\n });\n colorStops.push({\n offset: stopLen ? colorStops[stopLen - 1].offset : 0.5,\n color: outerColors[1] || 'transparent'\n });\n colorStops.unshift({\n offset: stopLen ? colorStops[0].offset : 0.5,\n color: outerColors[0] || 'transparent'\n }); // zrUtil.each(colorStops, function (colorStop) {\n // // Make sure each offset has rounded px to avoid not sharp edge\n // colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start);\n // });\n\n var gradient = new graphic.LinearGradient(0, 0, 0, 0, colorStops, true);\n gradient[coordDim] = minCoord;\n gradient[coordDim + '2'] = maxCoord;\n return gradient;\n}\n\nfunction getIsIgnoreFunc(seriesModel, data, coordSys) {\n var showAllSymbol = seriesModel.get('showAllSymbol');\n var isAuto = showAllSymbol === 'auto';\n\n if (showAllSymbol && !isAuto) {\n return;\n }\n\n var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n\n if (!categoryAxis) {\n return;\n } // Note that category label interval strategy might bring some weird effect\n // in some scenario: users may wonder why some of the symbols are not\n // displayed. So we show all symbols as possible as we can.\n\n\n if (isAuto // Simplify the logic, do not determine label overlap here.\n && canShowAllSymbolForCategory(categoryAxis, data)) {\n return;\n } // Otherwise follow the label interval strategy on category axis.\n\n\n var categoryDataDim = data.mapDimension(categoryAxis.dim);\n var labelMap = {};\n zrUtil.each(categoryAxis.getViewLabels(), function (labelItem) {\n var ordinalNumber = categoryAxis.scale.getRawOrdinalNumber(labelItem.tickValue);\n labelMap[ordinalNumber] = 1;\n });\n return function (dataIndex) {\n return !labelMap.hasOwnProperty(data.get(categoryDataDim, dataIndex));\n };\n}\n\nfunction canShowAllSymbolForCategory(categoryAxis, data) {\n // In mose cases, line is monotonous on category axis, and the label size\n // is close with each other. So we check the symbol size and some of the\n // label size alone with the category axis to estimate whether all symbol\n // can be shown without overlap.\n var axisExtent = categoryAxis.getExtent();\n var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / categoryAxis.scale.count();\n isNaN(availSize) && (availSize = 0); // 0/0 is NaN.\n // Sampling some points, max 5.\n\n var dataLen = data.count();\n var step = Math.max(1, Math.round(dataLen / 5));\n\n for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) {\n if (SymbolClz.getSymbolSize(data, dataIndex // Only for cartesian, where `isHorizontal` exists.\n )[categoryAxis.isHorizontal() ? 1 : 0] // Empirical number\n * 1.5 > availSize) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isPointNull(x, y) {\n return isNaN(x) || isNaN(y);\n}\n\nfunction getLastIndexNotNull(points) {\n var len = points.length / 2;\n\n for (; len > 0; len--) {\n if (!isPointNull(points[len * 2 - 2], points[len * 2 - 1])) {\n break;\n }\n }\n\n return len - 1;\n}\n\nfunction getPointAtIndex(points, idx) {\n return [points[idx * 2], points[idx * 2 + 1]];\n}\n\nfunction getIndexRange(points, xOrY, dim) {\n var len = points.length / 2;\n var dimIdx = dim === 'x' ? 0 : 1;\n var a;\n var b;\n var prevIndex = 0;\n var nextIndex = -1;\n\n for (var i = 0; i < len; i++) {\n b = points[i * 2 + dimIdx];\n\n if (isNaN(b) || isNaN(points[i * 2 + 1 - dimIdx])) {\n continue;\n }\n\n if (i === 0) {\n a = b;\n continue;\n }\n\n if (a <= xOrY && b >= xOrY || a >= xOrY && b <= xOrY) {\n nextIndex = i;\n break;\n }\n\n prevIndex = i;\n a = b;\n }\n\n return {\n range: [prevIndex, nextIndex],\n t: (xOrY - a) / (b - a)\n };\n}\n\nfunction anyStateShowEndLabel(seriesModel) {\n if (seriesModel.get(['endLabel', 'show'])) {\n return true;\n }\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n if (seriesModel.get([SPECIAL_STATES[i], 'endLabel', 'show'])) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction createLineClipPath(lineView, coordSys, hasAnimation, seriesModel) {\n if (isCoordinateSystemType(coordSys, 'cartesian2d')) {\n var endLabelModel_1 = seriesModel.getModel('endLabel');\n var valueAnimation_1 = endLabelModel_1.get('valueAnimation');\n var data_1 = seriesModel.getData();\n var labelAnimationRecord_1 = {\n lastFrameIndex: 0\n };\n var during = anyStateShowEndLabel(seriesModel) ? function (percent, clipRect) {\n lineView._endLabelOnDuring(percent, clipRect, data_1, labelAnimationRecord_1, valueAnimation_1, endLabelModel_1, coordSys);\n } : null;\n var isHorizontal = coordSys.getBaseAxis().isHorizontal();\n var clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel, function () {\n var endLabel = lineView._endLabel;\n\n if (endLabel && hasAnimation) {\n if (labelAnimationRecord_1.originalX != null) {\n endLabel.attr({\n x: labelAnimationRecord_1.originalX,\n y: labelAnimationRecord_1.originalY\n });\n }\n }\n }, during); // Expand clip shape to avoid clipping when line value exceeds axis\n\n if (!seriesModel.get('clip', true)) {\n var rectShape = clipPath.shape;\n var expandSize = Math.max(rectShape.width, rectShape.height);\n\n if (isHorizontal) {\n rectShape.y -= expandSize;\n rectShape.height += expandSize * 2;\n } else {\n rectShape.x -= expandSize;\n rectShape.width += expandSize * 2;\n }\n } // Set to the final frame. To make sure label layout is right.\n\n\n if (during) {\n during(1, clipPath);\n }\n\n return clipPath;\n } else {\n if (process.env.NODE_ENV !== 'production') {\n if (seriesModel.get(['endLabel', 'show'])) {\n console.warn('endLabel is not supported for lines in polar systems.');\n }\n }\n\n return createPolarClipPath(coordSys, hasAnimation, seriesModel);\n }\n}\n\nfunction getEndLabelStateSpecified(endLabelModel, coordSys) {\n var baseAxis = coordSys.getBaseAxis();\n var isHorizontal = baseAxis.isHorizontal();\n var isBaseInversed = baseAxis.inverse;\n var align = isHorizontal ? isBaseInversed ? 'right' : 'left' : 'center';\n var verticalAlign = isHorizontal ? 'middle' : isBaseInversed ? 'top' : 'bottom';\n return {\n normal: {\n align: endLabelModel.get('align') || align,\n verticalAlign: endLabelModel.get('verticalAlign') || verticalAlign\n }\n };\n}\n\nvar LineView =\n/** @class */\nfunction (_super) {\n __extends(LineView, _super);\n\n function LineView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n LineView.prototype.init = function () {\n var lineGroup = new graphic.Group();\n var symbolDraw = new SymbolDraw();\n this.group.add(symbolDraw.group);\n this._symbolDraw = symbolDraw;\n this._lineGroup = lineGroup;\n };\n\n LineView.prototype.render = function (seriesModel, ecModel, api) {\n var _this = this;\n\n var coordSys = seriesModel.coordinateSystem;\n var group = this.group;\n var data = seriesModel.getData();\n var lineStyleModel = seriesModel.getModel('lineStyle');\n var areaStyleModel = seriesModel.getModel('areaStyle');\n var points = data.getLayout('points') || [];\n var isCoordSysPolar = coordSys.type === 'polar';\n var prevCoordSys = this._coordSys;\n var symbolDraw = this._symbolDraw;\n var polyline = this._polyline;\n var polygon = this._polygon;\n var lineGroup = this._lineGroup;\n var hasAnimation = seriesModel.get('animation');\n var isAreaChart = !areaStyleModel.isEmpty();\n var valueOrigin = areaStyleModel.get('origin');\n var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin);\n var stackedOnPoints = isAreaChart && getStackedOnPoints(coordSys, data, dataCoordInfo);\n var showSymbol = seriesModel.get('showSymbol');\n var isIgnoreFunc = showSymbol && !isCoordSysPolar && getIsIgnoreFunc(seriesModel, data, coordSys); // Remove temporary symbols\n\n var oldData = this._data;\n oldData && oldData.eachItemGraphicEl(function (el, idx) {\n if (el.__temp) {\n group.remove(el);\n oldData.setItemGraphicEl(idx, null);\n }\n }); // Remove previous created symbols if showSymbol changed to false\n\n if (!showSymbol) {\n symbolDraw.remove();\n }\n\n group.add(lineGroup); // FIXME step not support polar\n\n var step = !isCoordSysPolar ? seriesModel.get('step') : false;\n var clipShapeForSymbol;\n\n if (coordSys && coordSys.getArea && seriesModel.get('clip', true)) {\n clipShapeForSymbol = coordSys.getArea(); // Avoid float number rounding error for symbol on the edge of axis extent.\n // See #7913 and `test/dataZoom-clip.html`.\n\n if (clipShapeForSymbol.width != null) {\n clipShapeForSymbol.x -= 0.1;\n clipShapeForSymbol.y -= 0.1;\n clipShapeForSymbol.width += 0.2;\n clipShapeForSymbol.height += 0.2;\n } else if (clipShapeForSymbol.r0) {\n clipShapeForSymbol.r0 -= 0.5;\n clipShapeForSymbol.r += 0.5;\n }\n }\n\n this._clipShapeForSymbol = clipShapeForSymbol;\n var visualColor = getVisualGradient(data, coordSys) || data.getVisual('style')[data.getVisual('drawType')]; // Initialization animation or coordinate system changed\n\n if (!(polyline && prevCoordSys.type === coordSys.type && step === this._step)) {\n showSymbol && symbolDraw.updateData(data, {\n isIgnore: isIgnoreFunc,\n clipShape: clipShapeForSymbol,\n disableAnimation: true,\n getSymbolPoint: function (idx) {\n return [points[idx * 2], points[idx * 2 + 1]];\n }\n });\n hasAnimation && this._initSymbolLabelAnimation(data, coordSys, clipShapeForSymbol);\n\n if (step) {\n // TODO If stacked series is not step\n points = turnPointsIntoStep(points, coordSys, step);\n\n if (stackedOnPoints) {\n stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);\n }\n }\n\n polyline = this._newPolyline(points);\n\n if (isAreaChart) {\n polygon = this._newPolygon(points, stackedOnPoints);\n } // NOTE: Must update _endLabel before setClipPath.\n\n\n if (!isCoordSysPolar) {\n this._initOrUpdateEndLabel(seriesModel, coordSys, convertToColorString(visualColor));\n }\n\n lineGroup.setClipPath(createLineClipPath(this, coordSys, true, seriesModel));\n } else {\n if (isAreaChart && !polygon) {\n // If areaStyle is added\n polygon = this._newPolygon(points, stackedOnPoints);\n } else if (polygon && !isAreaChart) {\n // If areaStyle is removed\n lineGroup.remove(polygon);\n polygon = this._polygon = null;\n } // NOTE: Must update _endLabel before setClipPath.\n\n\n if (!isCoordSysPolar) {\n this._initOrUpdateEndLabel(seriesModel, coordSys, convertToColorString(visualColor));\n } // Update clipPath\n\n\n lineGroup.setClipPath(createLineClipPath(this, coordSys, false, seriesModel)); // Always update, or it is wrong in the case turning on legend\n // because points are not changed\n\n showSymbol && symbolDraw.updateData(data, {\n isIgnore: isIgnoreFunc,\n clipShape: clipShapeForSymbol,\n disableAnimation: true,\n getSymbolPoint: function (idx) {\n return [points[idx * 2], points[idx * 2 + 1]];\n }\n }); // In the case data zoom triggerred refreshing frequently\n // Data may not change if line has a category axis. So it should animate nothing\n\n if (!isPointsSame(this._stackedOnPoints, stackedOnPoints) || !isPointsSame(this._points, points)) {\n if (hasAnimation) {\n this._doUpdateAnimation(data, stackedOnPoints, coordSys, api, step, valueOrigin);\n } else {\n // Not do it in update with animation\n if (step) {\n // TODO If stacked series is not step\n points = turnPointsIntoStep(points, coordSys, step);\n\n if (stackedOnPoints) {\n stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);\n }\n }\n\n polyline.setShape({\n points: points\n });\n polygon && polygon.setShape({\n points: points,\n stackedOnPoints: stackedOnPoints\n });\n }\n }\n }\n\n var focus = seriesModel.get(['emphasis', 'focus']);\n var blurScope = seriesModel.get(['emphasis', 'blurScope']);\n polyline.useStyle(zrUtil.defaults( // Use color in lineStyle first\n lineStyleModel.getLineStyle(), {\n fill: 'none',\n stroke: visualColor,\n lineJoin: 'bevel'\n }));\n setStatesStylesFromModel(polyline, seriesModel, 'lineStyle');\n\n if (polyline.style.lineWidth > 0 && seriesModel.get(['emphasis', 'lineStyle', 'width']) === 'bolder') {\n var emphasisLineStyle = polyline.getState('emphasis').style;\n emphasisLineStyle.lineWidth = +polyline.style.lineWidth + 1;\n } // Needs seriesIndex for focus\n\n\n getECData(polyline).seriesIndex = seriesModel.seriesIndex;\n enableHoverEmphasis(polyline, focus, blurScope);\n var smooth = getSmooth(seriesModel.get('smooth'));\n var smoothMonotone = seriesModel.get('smoothMonotone');\n var connectNulls = seriesModel.get('connectNulls');\n polyline.setShape({\n smooth: smooth,\n smoothMonotone: smoothMonotone,\n connectNulls: connectNulls\n });\n\n if (polygon) {\n var stackedOnSeries = data.getCalculationInfo('stackedOnSeries');\n var stackedOnSmooth = 0;\n polygon.useStyle(zrUtil.defaults(areaStyleModel.getAreaStyle(), {\n fill: visualColor,\n opacity: 0.7,\n lineJoin: 'bevel',\n decal: data.getVisual('style').decal\n }));\n\n if (stackedOnSeries) {\n stackedOnSmooth = getSmooth(stackedOnSeries.get('smooth'));\n }\n\n polygon.setShape({\n smooth: smooth,\n stackedOnSmooth: stackedOnSmooth,\n smoothMonotone: smoothMonotone,\n connectNulls: connectNulls\n });\n setStatesStylesFromModel(polygon, seriesModel, 'areaStyle'); // Needs seriesIndex for focus\n\n getECData(polygon).seriesIndex = seriesModel.seriesIndex;\n enableHoverEmphasis(polygon, focus, blurScope);\n }\n\n var changePolyState = function (toState) {\n _this._changePolyState(toState);\n };\n\n data.eachItemGraphicEl(function (el) {\n // Switch polyline / polygon state if element changed its state.\n el && (el.onHoverStateChange = changePolyState);\n });\n this._polyline.onHoverStateChange = changePolyState;\n this._data = data; // Save the coordinate system for transition animation when data changed\n\n this._coordSys = coordSys;\n this._stackedOnPoints = stackedOnPoints;\n this._points = points;\n this._step = step;\n this._valueOrigin = valueOrigin;\n };\n\n LineView.prototype.dispose = function () {};\n\n LineView.prototype.highlight = function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n\n this._changePolyState('emphasis');\n\n if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) {\n var points = data.getLayout('points');\n var symbol = data.getItemGraphicEl(dataIndex);\n\n if (!symbol) {\n // Create a temporary symbol if it is not exists\n var x = points[dataIndex * 2];\n var y = points[dataIndex * 2 + 1];\n\n if (isNaN(x) || isNaN(y)) {\n // Null data\n return;\n } // fix #11360: should't draw symbol outside clipShapeForSymbol\n\n\n if (this._clipShapeForSymbol && !this._clipShapeForSymbol.contain(x, y)) {\n return;\n }\n\n var zlevel = seriesModel.get('zlevel');\n var z = seriesModel.get('z');\n symbol = new SymbolClz(data, dataIndex);\n symbol.x = x;\n symbol.y = y;\n symbol.setZ(zlevel, z); // ensure label text of the temporary symbol is in front of line and area polygon\n\n var symbolLabel = symbol.getSymbolPath().getTextContent();\n\n if (symbolLabel) {\n symbolLabel.zlevel = zlevel;\n symbolLabel.z = z;\n symbolLabel.z2 = this._polyline.z2 + 1;\n }\n\n symbol.__temp = true;\n data.setItemGraphicEl(dataIndex, symbol); // Stop scale animation\n\n symbol.stopSymbolAnimation(true);\n this.group.add(symbol);\n }\n\n symbol.highlight();\n } else {\n // Highlight whole series\n ChartView.prototype.highlight.call(this, seriesModel, ecModel, api, payload);\n }\n };\n\n LineView.prototype.downplay = function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n\n this._changePolyState('normal');\n\n if (dataIndex != null && dataIndex >= 0) {\n var symbol = data.getItemGraphicEl(dataIndex);\n\n if (symbol) {\n if (symbol.__temp) {\n data.setItemGraphicEl(dataIndex, null);\n this.group.remove(symbol);\n } else {\n symbol.downplay();\n }\n }\n } else {\n // FIXME\n // can not downplay completely.\n // Downplay whole series\n ChartView.prototype.downplay.call(this, seriesModel, ecModel, api, payload);\n }\n };\n\n LineView.prototype._changePolyState = function (toState) {\n var polygon = this._polygon;\n setStatesFlag(this._polyline, toState);\n polygon && setStatesFlag(polygon, toState);\n };\n\n LineView.prototype._newPolyline = function (points) {\n var polyline = this._polyline; // Remove previous created polyline\n\n if (polyline) {\n this._lineGroup.remove(polyline);\n }\n\n polyline = new ECPolyline({\n shape: {\n points: points\n },\n segmentIgnoreThreshold: 2,\n z2: 10\n });\n\n this._lineGroup.add(polyline);\n\n this._polyline = polyline;\n return polyline;\n };\n\n LineView.prototype._newPolygon = function (points, stackedOnPoints) {\n var polygon = this._polygon; // Remove previous created polygon\n\n if (polygon) {\n this._lineGroup.remove(polygon);\n }\n\n polygon = new ECPolygon({\n shape: {\n points: points,\n stackedOnPoints: stackedOnPoints\n },\n segmentIgnoreThreshold: 2\n });\n\n this._lineGroup.add(polygon);\n\n this._polygon = polygon;\n return polygon;\n };\n\n LineView.prototype._initSymbolLabelAnimation = function (data, coordSys, clipShape) {\n var isHorizontalOrRadial;\n var isCoordSysPolar;\n var baseAxis = coordSys.getBaseAxis();\n var isAxisInverse = baseAxis.inverse;\n\n if (coordSys.type === 'cartesian2d') {\n isHorizontalOrRadial = baseAxis.isHorizontal();\n isCoordSysPolar = false;\n } else if (coordSys.type === 'polar') {\n isHorizontalOrRadial = baseAxis.dim === 'angle';\n isCoordSysPolar = true;\n }\n\n var seriesModel = data.hostModel;\n var seriesDuration = seriesModel.get('animationDuration');\n\n if (typeof seriesDuration === 'function') {\n seriesDuration = seriesDuration(null);\n }\n\n var seriesDalay = seriesModel.get('animationDelay') || 0;\n var seriesDalayValue = typeof seriesDalay === 'function' ? seriesDalay(null) : seriesDalay;\n data.eachItemGraphicEl(function (symbol, idx) {\n var el = symbol;\n\n if (el) {\n var point = [symbol.x, symbol.y];\n var start = void 0;\n var end = void 0;\n var current = void 0;\n\n if (clipShape) {\n if (isCoordSysPolar) {\n var polarClip = clipShape;\n var coord = coordSys.pointToCoord(point);\n\n if (isHorizontalOrRadial) {\n start = polarClip.startAngle;\n end = polarClip.endAngle;\n current = -coord[1] / 180 * Math.PI;\n } else {\n start = polarClip.r0;\n end = polarClip.r;\n current = coord[0];\n }\n } else {\n var gridClip = clipShape;\n\n if (isHorizontalOrRadial) {\n start = gridClip.x;\n end = gridClip.x + gridClip.width;\n current = symbol.x;\n } else {\n start = gridClip.y + gridClip.height;\n end = gridClip.y;\n current = symbol.y;\n }\n }\n }\n\n var ratio = end === start ? 0 : (current - start) / (end - start);\n\n if (isAxisInverse) {\n ratio = 1 - ratio;\n }\n\n var delay = typeof seriesDalay === 'function' ? seriesDalay(idx) : seriesDuration * ratio + seriesDalayValue;\n var symbolPath = el.getSymbolPath();\n var text = symbolPath.getTextContent();\n el.attr({\n scaleX: 0,\n scaleY: 0\n });\n el.animateTo({\n scaleX: 1,\n scaleY: 1\n }, {\n duration: 200,\n setToFinal: true,\n delay: delay\n });\n\n if (text) {\n text.animateFrom({\n style: {\n opacity: 0\n }\n }, {\n duration: 300,\n delay: delay\n });\n }\n\n symbolPath.disableLabelAnimation = true;\n }\n });\n };\n\n LineView.prototype._initOrUpdateEndLabel = function (seriesModel, coordSys, inheritColor) {\n var endLabelModel = seriesModel.getModel('endLabel');\n\n if (anyStateShowEndLabel(seriesModel)) {\n var data_2 = seriesModel.getData();\n var polyline = this._polyline;\n var endLabel = this._endLabel;\n\n if (!endLabel) {\n endLabel = this._endLabel = new graphic.Text({\n z2: 200 // should be higher than item symbol\n\n });\n endLabel.ignoreClip = true;\n polyline.setTextContent(this._endLabel);\n polyline.disableLabelAnimation = true;\n } // Find last non-NaN data to display data\n\n\n var dataIndex = getLastIndexNotNull(data_2.getLayout('points'));\n\n if (dataIndex >= 0) {\n setLabelStyle(polyline, getLabelStatesModels(seriesModel, 'endLabel'), {\n inheritColor: inheritColor,\n labelFetcher: seriesModel,\n labelDataIndex: dataIndex,\n defaultText: function (dataIndex, opt, interpolatedValue) {\n return interpolatedValue != null ? getDefaultInterpolatedLabel(data_2, interpolatedValue) : getDefaultLabel(data_2, dataIndex);\n },\n enableTextSetter: true\n }, getEndLabelStateSpecified(endLabelModel, coordSys));\n polyline.textConfig.position = null;\n }\n } else if (this._endLabel) {\n this._polyline.removeTextContent();\n\n this._endLabel = null;\n }\n };\n\n LineView.prototype._endLabelOnDuring = function (percent, clipRect, data, animationRecord, valueAnimation, endLabelModel, coordSys) {\n var endLabel = this._endLabel;\n var polyline = this._polyline;\n\n if (endLabel) {\n // NOTE: Don't remove percent < 1. percent === 1 means the first frame during render.\n // The label is not prepared at this time.\n if (percent < 1 && animationRecord.originalX == null) {\n animationRecord.originalX = endLabel.x;\n animationRecord.originalY = endLabel.y;\n }\n\n var points = data.getLayout('points');\n var seriesModel = data.hostModel;\n var connectNulls = seriesModel.get('connectNulls');\n var precision = endLabelModel.get('precision');\n var distance = endLabelModel.get('distance') || 0;\n var baseAxis = coordSys.getBaseAxis();\n var isHorizontal = baseAxis.isHorizontal();\n var isBaseInversed = baseAxis.inverse;\n var clipShape = clipRect.shape;\n var xOrY = isBaseInversed ? isHorizontal ? clipShape.x : clipShape.y + clipShape.height : isHorizontal ? clipShape.x + clipShape.width : clipShape.y;\n var distanceX = (isHorizontal ? distance : 0) * (isBaseInversed ? -1 : 1);\n var distanceY = (isHorizontal ? 0 : -distance) * (isBaseInversed ? -1 : 1);\n var dim = isHorizontal ? 'x' : 'y';\n var dataIndexRange = getIndexRange(points, xOrY, dim);\n var indices = dataIndexRange.range;\n var diff = indices[1] - indices[0];\n var value = void 0;\n\n if (diff >= 1) {\n // diff > 1 && connectNulls, which is on the null data.\n if (diff > 1 && !connectNulls) {\n var pt = getPointAtIndex(points, indices[0]);\n endLabel.attr({\n x: pt[0] + distanceX,\n y: pt[1] + distanceY\n });\n valueAnimation && (value = seriesModel.getRawValue(indices[0]));\n } else {\n var pt = polyline.getPointOn(xOrY, dim);\n pt && endLabel.attr({\n x: pt[0] + distanceX,\n y: pt[1] + distanceY\n });\n var startValue = seriesModel.getRawValue(indices[0]);\n var endValue = seriesModel.getRawValue(indices[1]);\n valueAnimation && (value = modelUtil.interpolateRawValues(data, precision, startValue, endValue, dataIndexRange.t));\n }\n\n animationRecord.lastFrameIndex = indices[0];\n } else {\n // If diff <= 0, which is the range is not found(Include NaN)\n // Choose the first point or last point.\n var idx = percent === 1 || animationRecord.lastFrameIndex > 0 ? indices[0] : 0;\n var pt = getPointAtIndex(points, idx);\n valueAnimation && (value = seriesModel.getRawValue(idx));\n endLabel.attr({\n x: pt[0] + distanceX,\n y: pt[1] + distanceY\n });\n }\n\n if (valueAnimation) {\n labelInner(endLabel).setLabelText(value);\n }\n }\n };\n /**\n * @private\n */\n // FIXME Two value axis\n\n\n LineView.prototype._doUpdateAnimation = function (data, stackedOnPoints, coordSys, api, step, valueOrigin) {\n var polyline = this._polyline;\n var polygon = this._polygon;\n var seriesModel = data.hostModel;\n var diff = lineAnimationDiff(this._data, data, this._stackedOnPoints, stackedOnPoints, this._coordSys, coordSys, this._valueOrigin, valueOrigin);\n var current = diff.current;\n var stackedOnCurrent = diff.stackedOnCurrent;\n var next = diff.next;\n var stackedOnNext = diff.stackedOnNext;\n\n if (step) {\n // TODO If stacked series is not step\n current = turnPointsIntoStep(diff.current, coordSys, step);\n stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step);\n next = turnPointsIntoStep(diff.next, coordSys, step);\n stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step);\n } // Don't apply animation if diff is large.\n // For better result and avoid memory explosion problems like\n // https://github.com/apache/incubator-echarts/issues/12229\n\n\n if (getBoundingDiff(current, next) > 3000 || polygon && getBoundingDiff(stackedOnCurrent, stackedOnNext) > 3000) {\n polyline.setShape({\n points: next\n });\n\n if (polygon) {\n polygon.setShape({\n points: next,\n stackedOnPoints: stackedOnNext\n });\n }\n\n return;\n }\n\n polyline.shape.__points = diff.current;\n polyline.shape.points = current;\n var target = {\n shape: {\n points: next\n }\n }; // Also animate the original points.\n // If points reference is changed when turning into step line.\n\n if (diff.current !== current) {\n target.shape.__points = diff.next;\n } // Stop previous animation.\n\n\n polyline.stopAnimation();\n graphic.updateProps(polyline, target, seriesModel);\n\n if (polygon) {\n polygon.setShape({\n // Reuse the points with polyline.\n points: current,\n stackedOnPoints: stackedOnCurrent\n });\n polygon.stopAnimation();\n graphic.updateProps(polygon, {\n shape: {\n stackedOnPoints: stackedOnNext\n }\n }, seriesModel); // If use attr directly in updateProps.\n\n if (polyline.shape.points !== polygon.shape.points) {\n polygon.shape.points = polyline.shape.points;\n }\n }\n\n var updatedDataInfo = [];\n var diffStatus = diff.status;\n\n for (var i = 0; i < diffStatus.length; i++) {\n var cmd = diffStatus[i].cmd;\n\n if (cmd === '=') {\n var el = data.getItemGraphicEl(diffStatus[i].idx1);\n\n if (el) {\n updatedDataInfo.push({\n el: el,\n ptIdx: i // Index of points\n\n });\n }\n }\n }\n\n if (polyline.animators && polyline.animators.length) {\n polyline.animators[0].during(function () {\n polygon && polygon.dirtyShape();\n var points = polyline.shape.__points;\n\n for (var i = 0; i < updatedDataInfo.length; i++) {\n var el = updatedDataInfo[i].el;\n var offset = updatedDataInfo[i].ptIdx * 2;\n el.x = points[offset];\n el.y = points[offset + 1];\n el.markRedraw();\n }\n });\n }\n };\n\n LineView.prototype.remove = function (ecModel) {\n var group = this.group;\n var oldData = this._data;\n\n this._lineGroup.removeAll();\n\n this._symbolDraw.remove(true); // Remove temporary created elements when highlighting\n\n\n oldData && oldData.eachItemGraphicEl(function (el, idx) {\n if (el.__temp) {\n group.remove(el);\n oldData.setItemGraphicEl(idx, null);\n }\n });\n this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._endLabel = this._data = null;\n };\n\n LineView.type = 'line';\n return LineView;\n}(ChartView);\n\nexport default LineView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { prepareDataCoordInfo, getStackedOnPoint } from './helper';\nimport { createFloat32Array } from '../../util/vendor';\n\nfunction diffData(oldData, newData) {\n var diffResult = [];\n newData.diff(oldData).add(function (idx) {\n diffResult.push({\n cmd: '+',\n idx: idx\n });\n }).update(function (newIdx, oldIdx) {\n diffResult.push({\n cmd: '=',\n idx: oldIdx,\n idx1: newIdx\n });\n }).remove(function (idx) {\n diffResult.push({\n cmd: '-',\n idx: idx\n });\n }).execute();\n return diffResult;\n}\n\nexport default function lineAnimationDiff(oldData, newData, oldStackedOnPoints, newStackedOnPoints, oldCoordSys, newCoordSys, oldValueOrigin, newValueOrigin) {\n var diff = diffData(oldData, newData); // let newIdList = newData.mapArray(newData.getId);\n // let oldIdList = oldData.mapArray(oldData.getId);\n // convertToIntId(newIdList, oldIdList);\n // // FIXME One data ?\n // diff = arrayDiff(oldIdList, newIdList);\n\n var currPoints = [];\n var nextPoints = []; // Points for stacking base line\n\n var currStackedPoints = [];\n var nextStackedPoints = [];\n var status = [];\n var sortedIndices = [];\n var rawIndices = [];\n var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin); // const oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin);\n\n var oldPoints = oldData.getLayout('points') || [];\n var newPoints = newData.getLayout('points') || [];\n\n for (var i = 0; i < diff.length; i++) {\n var diffItem = diff[i];\n var pointAdded = true;\n var oldIdx2 = void 0;\n var newIdx2 = void 0; // FIXME, animation is not so perfect when dataZoom window moves fast\n // Which is in case remvoing or add more than one data in the tail or head\n\n switch (diffItem.cmd) {\n case '=':\n oldIdx2 = diffItem.idx * 2;\n newIdx2 = diffItem.idx1 * 2;\n var currentX = oldPoints[oldIdx2];\n var currentY = oldPoints[oldIdx2 + 1];\n var nextX = newPoints[newIdx2];\n var nextY = newPoints[newIdx2 + 1]; // If previous data is NaN, use next point directly\n\n if (isNaN(currentX) || isNaN(currentY)) {\n currentX = nextX;\n currentY = nextY;\n }\n\n currPoints.push(currentX, currentY);\n nextPoints.push(nextX, nextY);\n currStackedPoints.push(oldStackedOnPoints[oldIdx2], oldStackedOnPoints[oldIdx2 + 1]);\n nextStackedPoints.push(newStackedOnPoints[newIdx2], newStackedOnPoints[newIdx2 + 1]);\n rawIndices.push(newData.getRawIndex(diffItem.idx1));\n break;\n\n case '+':\n var newIdx = diffItem.idx;\n var newDataDimsForPoint = newDataOldCoordInfo.dataDimsForPoint;\n var oldPt = oldCoordSys.dataToPoint([newData.get(newDataDimsForPoint[0], newIdx), newData.get(newDataDimsForPoint[1], newIdx)]);\n newIdx2 = newIdx * 2;\n currPoints.push(oldPt[0], oldPt[1]);\n nextPoints.push(newPoints[newIdx2], newPoints[newIdx2 + 1]);\n var stackedOnPoint = getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, newIdx);\n currStackedPoints.push(stackedOnPoint[0], stackedOnPoint[1]);\n nextStackedPoints.push(newStackedOnPoints[newIdx2], newStackedOnPoints[newIdx2 + 1]);\n rawIndices.push(newData.getRawIndex(newIdx));\n break;\n\n case '-':\n pointAdded = false;\n } // Original indices\n\n\n if (pointAdded) {\n status.push(diffItem);\n sortedIndices.push(sortedIndices.length);\n }\n } // Diff result may be crossed if all items are changed\n // Sort by data index\n\n\n sortedIndices.sort(function (a, b) {\n return rawIndices[a] - rawIndices[b];\n });\n var len = currPoints.length;\n var sortedCurrPoints = createFloat32Array(len);\n var sortedNextPoints = createFloat32Array(len);\n var sortedCurrStackedPoints = createFloat32Array(len);\n var sortedNextStackedPoints = createFloat32Array(len);\n var sortedStatus = [];\n\n for (var i = 0; i < sortedIndices.length; i++) {\n var idx = sortedIndices[i];\n var i2 = i * 2;\n var idx2 = idx * 2;\n sortedCurrPoints[i2] = currPoints[idx2];\n sortedCurrPoints[i2 + 1] = currPoints[idx2 + 1];\n sortedNextPoints[i2] = nextPoints[idx2];\n sortedNextPoints[i2 + 1] = nextPoints[idx2 + 1];\n sortedCurrStackedPoints[i2] = currStackedPoints[idx2];\n sortedCurrStackedPoints[i2 + 1] = currStackedPoints[idx2 + 1];\n sortedNextStackedPoints[i2] = nextStackedPoints[idx2];\n sortedNextStackedPoints[i2 + 1] = nextStackedPoints[idx2 + 1];\n sortedStatus[i] = status[idx];\n }\n\n return {\n current: sortedCurrPoints,\n next: sortedNextPoints,\n stackedOnCurrent: sortedCurrStackedPoints,\n stackedOnNext: sortedNextStackedPoints,\n status: sortedStatus\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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';\nimport createSeriesData from '../helper/createSeriesData';\n\nvar BaseBarSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(BaseBarSeriesModel, _super);\n\n function BaseBarSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = BaseBarSeriesModel.type;\n return _this;\n }\n\n BaseBarSeriesModel.prototype.getInitialData = function (option, ecModel) {\n return createSeriesData(null, this, {\n useEncodeDefaulter: true\n });\n };\n\n BaseBarSeriesModel.prototype.getMarkerPosition = function (value) {\n var coordSys = this.coordinateSystem;\n\n if (coordSys && coordSys.clampData) {\n // PENDING if clamp ?\n var pt = coordSys.dataToPoint(coordSys.clampData(value));\n var data = this.getData();\n var offset = data.getLayout('offset');\n var size = data.getLayout('size');\n var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1;\n pt[offsetIndex] += offset + size / 2;\n return pt;\n }\n\n return [NaN, NaN];\n };\n\n BaseBarSeriesModel.type = 'series.__base_bar__';\n BaseBarSeriesModel.defaultOption = {\n zlevel: 0,\n z: 2,\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n // stack: null\n // Cartesian coordinate system\n // xAxisIndex: 0,\n // yAxisIndex: 0,\n barMinHeight: 0,\n barMinAngle: 0,\n // cursor: null,\n large: false,\n largeThreshold: 400,\n progressive: 3e3,\n progressiveChunkMode: 'mod'\n };\n return BaseBarSeriesModel;\n}(SeriesModel);\n\nSeriesModel.registerClass(BaseBarSeriesModel);\nexport default BaseBarSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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';\nimport createSeriesData from '../helper/createSeriesData';\nimport { inheritDefaultOption } from '../../util/component';\n\nvar BarSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(BarSeriesModel, _super);\n\n function BarSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = BarSeriesModel.type;\n return _this;\n }\n\n BarSeriesModel.prototype.getInitialData = function () {\n return createSeriesData(null, this, {\n useEncodeDefaulter: true,\n createInvertedIndices: !!this.get('realtimeSort', true) || null\n });\n };\n /**\n * @override\n */\n\n\n BarSeriesModel.prototype.getProgressive = function () {\n // Do not support progressive in normal mode.\n return this.get('large') ? this.get('progressive') : false;\n };\n /**\n * @override\n */\n\n\n BarSeriesModel.prototype.getProgressiveThreshold = function () {\n // Do not support progressive in normal mode.\n var progressiveThreshold = this.get('progressiveThreshold');\n var largeThreshold = this.get('largeThreshold');\n\n if (largeThreshold > progressiveThreshold) {\n progressiveThreshold = largeThreshold;\n }\n\n return progressiveThreshold;\n };\n\n BarSeriesModel.prototype.brushSelector = function (dataIndex, data, selectors) {\n return selectors.rect(data.getItemLayout(dataIndex));\n };\n\n BarSeriesModel.type = 'series.bar';\n BarSeriesModel.dependencies = ['grid', 'polar'];\n BarSeriesModel.defaultOption = inheritDefaultOption(BaseBarSeriesModel.defaultOption, {\n // If clipped\n // Only available on cartesian2d\n clip: true,\n roundCap: false,\n showBackground: false,\n backgroundStyle: {\n color: 'rgba(180, 180, 180, 0.2)',\n borderColor: null,\n borderWidth: 0,\n borderType: 'solid',\n borderRadius: 0,\n shadowBlur: 0,\n shadowColor: null,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n opacity: 1\n },\n select: {\n itemStyle: {\n borderColor: '#212121'\n }\n },\n realtimeSort: false\n });\n return BarSeriesModel;\n}(BaseBarSeriesModel);\n\nexport default BarSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Path from 'zrender/lib/graphic/Path';\nimport Group from 'zrender/lib/graphic/Group';\nimport { extend, defaults, each, map } from 'zrender/lib/core/util';\nimport { Rect, Sector, updateProps, initProps, removeElementWithFadeOut } from '../../util/graphic';\nimport { getECData } from '../../util/innerStore';\nimport { enableHoverEmphasis, setStatesStylesFromModel } from '../../util/states';\nimport { setLabelStyle, getLabelStatesModels, setLabelValueAnimation } from '../../label/labelStyle';\nimport { throttle } from '../../util/throttle';\nimport { createClipPath } from '../helper/createClipPathFromCoordSys';\nimport Sausage from '../../util/shape/sausage';\nimport ChartView from '../../view/Chart';\nimport { isCoordinateSystemType } from '../../coord/CoordinateSystem';\nimport { getDefaultLabel, getDefaultInterpolatedLabel } from '../helper/labelHelper';\nimport { warn } from '../../util/log';\nimport { createSectorCalculateTextPosition, setSectorTextRotation } from '../../label/sectorLabel';\nimport { saveOldStyle } from '../../animation/basicTrasition';\nvar _eventPos = [0, 0];\nvar mathMax = Math.max;\nvar mathMin = Math.min;\n\nfunction getClipArea(coord, data) {\n var coordSysClipArea = coord.getArea && coord.getArea();\n\n if (isCoordinateSystemType(coord, 'cartesian2d')) {\n var baseAxis = coord.getBaseAxis(); // When boundaryGap is false or using time axis. bar may exceed the grid.\n // We should not clip this part.\n // See test/bar2.html\n\n if (baseAxis.type !== 'category' || !baseAxis.onBand) {\n var expandWidth = data.getLayout('bandWidth');\n\n if (baseAxis.isHorizontal()) {\n coordSysClipArea.x -= expandWidth;\n coordSysClipArea.width += expandWidth * 2;\n } else {\n coordSysClipArea.y -= expandWidth;\n coordSysClipArea.height += expandWidth * 2;\n }\n }\n }\n\n return coordSysClipArea;\n}\n\nvar BarView =\n/** @class */\nfunction (_super) {\n __extends(BarView, _super);\n\n function BarView() {\n var _this = _super.call(this) || this;\n\n _this.type = BarView.type;\n _this._isFirstFrame = true;\n return _this;\n }\n\n BarView.prototype.render = function (seriesModel, ecModel, api, payload) {\n this._model = seriesModel;\n\n this._removeOnRenderedListener(api);\n\n this._updateDrawMode(seriesModel);\n\n var coordinateSystemType = seriesModel.get('coordinateSystem');\n\n if (coordinateSystemType === 'cartesian2d' || coordinateSystemType === 'polar') {\n this._isLargeDraw ? this._renderLarge(seriesModel, ecModel, api) : this._renderNormal(seriesModel, ecModel, api, payload);\n } else if (process.env.NODE_ENV !== 'production') {\n warn('Only cartesian2d and polar supported for bar.');\n }\n };\n\n BarView.prototype.incrementalPrepareRender = function (seriesModel) {\n this._clear();\n\n this._updateDrawMode(seriesModel); // incremental also need to clip, otherwise might be overlow.\n // But must not set clip in each frame, otherwise all of the children will be marked redraw.\n\n\n this._updateLargeClip(seriesModel);\n };\n\n BarView.prototype.incrementalRender = function (params, seriesModel) {\n // Do not support progressive in normal mode.\n this._incrementalRenderLarge(params, seriesModel);\n };\n\n BarView.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 BarView.prototype._renderNormal = function (seriesModel, ecModel, api, payload) {\n var group = this.group;\n var data = seriesModel.getData();\n var oldData = this._data;\n var coord = seriesModel.coordinateSystem;\n var baseAxis = coord.getBaseAxis();\n var isHorizontalOrRadial;\n\n if (coord.type === 'cartesian2d') {\n isHorizontalOrRadial = baseAxis.isHorizontal();\n } else if (coord.type === 'polar') {\n isHorizontalOrRadial = baseAxis.dim === 'angle';\n }\n\n var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null;\n var realtimeSortCfg = shouldRealtimeSort(seriesModel, coord);\n\n if (realtimeSortCfg) {\n this._enableRealtimeSort(realtimeSortCfg, data, api);\n }\n\n var needsClip = seriesModel.get('clip', true) || realtimeSortCfg;\n var coordSysClipArea = getClipArea(coord, data); // If there is clipPath created in large mode. Remove it.\n\n group.removeClipPath(); // We don't use clipPath in normal mode because we needs a perfect animation\n // And don't want the label are clipped.\n\n var roundCap = seriesModel.get('roundCap', true);\n var drawBackground = seriesModel.get('showBackground', true);\n var backgroundModel = seriesModel.getModel('backgroundStyle');\n var barBorderRadius = backgroundModel.get('borderRadius') || 0;\n var bgEls = [];\n var oldBgEls = this._backgroundEls;\n var isInitSort = payload && payload.isInitSort;\n var isChangeOrder = payload && payload.type === 'changeAxisOrder';\n\n function createBackground(dataIndex) {\n var bgLayout = getLayout[coord.type](data, dataIndex);\n var bgEl = createBackgroundEl(coord, isHorizontalOrRadial, bgLayout);\n bgEl.useStyle(backgroundModel.getItemStyle()); // Only cartesian2d support borderRadius.\n\n if (coord.type === 'cartesian2d') {\n bgEl.setShape('r', barBorderRadius);\n }\n\n bgEls[dataIndex] = bgEl;\n return bgEl;\n }\n\n ;\n data.diff(oldData).add(function (dataIndex) {\n var itemModel = data.getItemModel(dataIndex);\n var layout = getLayout[coord.type](data, dataIndex, itemModel);\n\n if (drawBackground) {\n createBackground(dataIndex);\n } // If dataZoom in filteMode: 'empty', the baseValue can be set as NaN in \"axisProxy\".\n\n\n if (!data.hasValue(dataIndex) || !isValidLayout[coord.type](layout)) {\n return;\n }\n\n var isClipped = false;\n\n if (needsClip) {\n // Clip will modify the layout params.\n // And return a boolean to determine if the shape are fully clipped.\n isClipped = clip[coord.type](coordSysClipArea, layout);\n }\n\n var el = elementCreator[coord.type](seriesModel, data, dataIndex, layout, isHorizontalOrRadial, animationModel, baseAxis.model, false, roundCap);\n updateStyle(el, data, dataIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, coord.type === 'polar');\n\n if (isInitSort) {\n el.attr({\n shape: layout\n });\n } else if (realtimeSortCfg) {\n updateRealtimeAnimation(realtimeSortCfg, animationModel, el, layout, dataIndex, isHorizontalOrRadial, false, false);\n } else {\n initProps(el, {\n shape: layout\n }, seriesModel, dataIndex);\n }\n\n data.setItemGraphicEl(dataIndex, el);\n group.add(el);\n el.ignore = isClipped;\n }).update(function (newIndex, oldIndex) {\n var itemModel = data.getItemModel(newIndex);\n var layout = getLayout[coord.type](data, newIndex, itemModel);\n\n if (drawBackground) {\n var bgEl = void 0;\n\n if (oldBgEls.length === 0) {\n bgEl = createBackground(oldIndex);\n } else {\n bgEl = oldBgEls[oldIndex];\n bgEl.useStyle(backgroundModel.getItemStyle()); // Only cartesian2d support borderRadius.\n\n if (coord.type === 'cartesian2d') {\n bgEl.setShape('r', barBorderRadius);\n }\n\n bgEls[newIndex] = bgEl;\n }\n\n var bgLayout = getLayout[coord.type](data, newIndex);\n var shape = createBackgroundShape(isHorizontalOrRadial, bgLayout, coord);\n updateProps(bgEl, {\n shape: shape\n }, animationModel, newIndex);\n }\n\n var el = oldData.getItemGraphicEl(oldIndex);\n\n if (!data.hasValue(newIndex) || !isValidLayout[coord.type](layout)) {\n group.remove(el);\n return;\n }\n\n var isClipped = false;\n\n if (needsClip) {\n isClipped = clip[coord.type](coordSysClipArea, layout);\n\n if (isClipped) {\n group.remove(el);\n }\n }\n\n if (!el) {\n el = elementCreator[coord.type](seriesModel, data, newIndex, layout, isHorizontalOrRadial, animationModel, baseAxis.model, !!el, roundCap);\n } else {\n saveOldStyle(el);\n } // Not change anything if only order changed.\n // Especially not change label.\n\n\n if (!isChangeOrder) {\n updateStyle(el, data, newIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, coord.type === 'polar');\n }\n\n if (isInitSort) {\n el.attr({\n shape: layout\n });\n } else if (realtimeSortCfg) {\n updateRealtimeAnimation(realtimeSortCfg, animationModel, el, layout, newIndex, isHorizontalOrRadial, true, isChangeOrder);\n } else {\n updateProps(el, {\n shape: layout\n }, seriesModel, newIndex, null);\n }\n\n data.setItemGraphicEl(newIndex, el);\n el.ignore = isClipped;\n group.add(el);\n }).remove(function (dataIndex) {\n var el = oldData.getItemGraphicEl(dataIndex);\n el && removeElementWithFadeOut(el, seriesModel, dataIndex);\n }).execute();\n var bgGroup = this._backgroundGroup || (this._backgroundGroup = new Group());\n bgGroup.removeAll();\n\n for (var i = 0; i < bgEls.length; ++i) {\n bgGroup.add(bgEls[i]);\n }\n\n group.add(bgGroup);\n this._backgroundEls = bgEls;\n this._data = data;\n };\n\n BarView.prototype._renderLarge = function (seriesModel, ecModel, api) {\n this._clear();\n\n createLarge(seriesModel, this.group);\n\n this._updateLargeClip(seriesModel);\n };\n\n BarView.prototype._incrementalRenderLarge = function (params, seriesModel) {\n this._removeBackground();\n\n createLarge(seriesModel, this.group, true);\n };\n\n BarView.prototype._updateLargeClip = function (seriesModel) {\n // Use clipPath in large mode.\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 BarView.prototype._enableRealtimeSort = function (realtimeSortCfg, data, api) {\n var _this = this; // If no data in the first frame, wait for data to initSort\n\n\n if (!data.count()) {\n return;\n }\n\n var baseAxis = realtimeSortCfg.baseAxis;\n\n if (this._isFirstFrame) {\n this._dispatchInitSort(data, realtimeSortCfg, api);\n\n this._isFirstFrame = false;\n } else {\n var orderMapping_1 = function (idx) {\n var el = data.getItemGraphicEl(idx);\n\n if (el) {\n var shape = el.shape; // If data is NaN, shape.xxx may be NaN, so use || 0 here in case\n\n return (baseAxis.isHorizontal() // The result should be consistent with the initial sort by data value.\n // Do not support the case that both positive and negative exist.\n ? Math.abs(shape.height) : Math.abs(shape.width)) || 0;\n } else {\n return 0;\n }\n };\n\n this._onRendered = function () {\n _this._updateSortWithinSameData(data, orderMapping_1, baseAxis, api);\n };\n\n api.getZr().on('rendered', this._onRendered);\n }\n };\n\n BarView.prototype._dataSort = function (data, baseAxis, orderMapping) {\n var info = [];\n data.each(data.mapDimension(baseAxis.dim), function (ordinalNumber, dataIdx) {\n var mappedValue = orderMapping(dataIdx);\n mappedValue = mappedValue == null ? NaN : mappedValue;\n info.push({\n dataIndex: dataIdx,\n mappedValue: mappedValue,\n ordinalNumber: ordinalNumber\n });\n });\n info.sort(function (a, b) {\n // If NaN, it will be treated as min val.\n return b.mappedValue - a.mappedValue;\n });\n return {\n ordinalNumbers: map(info, function (item) {\n return item.ordinalNumber;\n })\n };\n };\n\n BarView.prototype._isOrderChangedWithinSameData = function (data, orderMapping, baseAxis) {\n var scale = baseAxis.scale;\n var ordinalDataDim = data.mapDimension(baseAxis.dim);\n var lastValue = Number.MAX_VALUE;\n\n for (var tickNum = 0, len = scale.getOrdinalMeta().categories.length; tickNum < len; ++tickNum) {\n var rawIdx = data.rawIndexOf(ordinalDataDim, scale.getRawOrdinalNumber(tickNum));\n var value = rawIdx < 0 // If some tick have no bar, the tick will be treated as min.\n ? Number.MIN_VALUE // PENDING: if dataZoom on baseAxis exits, is it a performance issue?\n : orderMapping(data.indexOfRawIndex(rawIdx));\n\n if (value > lastValue) {\n return true;\n }\n\n lastValue = value;\n }\n\n return false;\n };\n /*\n * Consider the case when A and B changed order, whose representing\n * bars are both out of sight, we don't wish to trigger reorder action\n * as long as the order in the view doesn't change.\n */\n\n\n BarView.prototype._isOrderDifferentInView = function (orderInfo, baseAxis) {\n var scale = baseAxis.scale;\n var extent = scale.getExtent();\n var tickNum = Math.max(0, extent[0]);\n var tickMax = Math.min(extent[1], scale.getOrdinalMeta().categories.length - 1);\n\n for (; tickNum <= tickMax; ++tickNum) {\n if (orderInfo.ordinalNumbers[tickNum] !== scale.getRawOrdinalNumber(tickNum)) {\n return true;\n }\n }\n };\n\n BarView.prototype._updateSortWithinSameData = function (data, orderMapping, baseAxis, api) {\n if (!this._isOrderChangedWithinSameData(data, orderMapping, baseAxis)) {\n return;\n }\n\n var sortInfo = this._dataSort(data, baseAxis, orderMapping);\n\n if (this._isOrderDifferentInView(sortInfo, baseAxis)) {\n this._removeOnRenderedListener(api);\n\n api.dispatchAction({\n type: 'changeAxisOrder',\n componentType: baseAxis.dim + 'Axis',\n axisId: baseAxis.index,\n sortInfo: sortInfo\n });\n }\n };\n\n BarView.prototype._dispatchInitSort = function (data, realtimeSortCfg, api) {\n var baseAxis = realtimeSortCfg.baseAxis;\n\n var sortResult = this._dataSort(data, baseAxis, function (dataIdx) {\n return data.get(data.mapDimension(realtimeSortCfg.otherAxis.dim), dataIdx);\n });\n\n api.dispatchAction({\n type: 'changeAxisOrder',\n componentType: baseAxis.dim + 'Axis',\n isInitSort: true,\n axisId: baseAxis.index,\n sortInfo: sortResult\n });\n };\n\n BarView.prototype.remove = function (ecModel, api) {\n this._clear(this._model);\n\n this._removeOnRenderedListener(api);\n };\n\n BarView.prototype.dispose = function (ecModel, api) {\n this._removeOnRenderedListener(api);\n };\n\n BarView.prototype._removeOnRenderedListener = function (api) {\n if (this._onRendered) {\n api.getZr().off('rendered', this._onRendered);\n this._onRendered = null;\n }\n };\n\n BarView.prototype._clear = function (model) {\n var group = this.group;\n var data = this._data;\n\n if (model && model.isAnimationEnabled() && data && !this._isLargeDraw) {\n this._removeBackground();\n\n this._backgroundEls = [];\n data.eachItemGraphicEl(function (el) {\n removeElementWithFadeOut(el, model, getECData(el).dataIndex);\n });\n } else {\n group.removeAll();\n }\n\n this._data = null;\n this._isFirstFrame = true;\n };\n\n BarView.prototype._removeBackground = function () {\n this.group.remove(this._backgroundGroup);\n this._backgroundGroup = null;\n };\n\n BarView.type = 'bar';\n return BarView;\n}(ChartView);\n\nvar clip = {\n cartesian2d: function (coordSysBoundingRect, layout) {\n var signWidth = layout.width < 0 ? -1 : 1;\n var signHeight = layout.height < 0 ? -1 : 1; // Needs positive width and height\n\n if (signWidth < 0) {\n layout.x += layout.width;\n layout.width = -layout.width;\n }\n\n if (signHeight < 0) {\n layout.y += layout.height;\n layout.height = -layout.height;\n }\n\n var coordSysX2 = coordSysBoundingRect.x + coordSysBoundingRect.width;\n var coordSysY2 = coordSysBoundingRect.y + coordSysBoundingRect.height;\n var x = mathMax(layout.x, coordSysBoundingRect.x);\n var x2 = mathMin(layout.x + layout.width, coordSysX2);\n var y = mathMax(layout.y, coordSysBoundingRect.y);\n var y2 = mathMin(layout.y + layout.height, coordSysY2);\n var xClipped = x2 < x;\n var yClipped = y2 < y; // When xClipped or yClipped, the element will be marked as `ignore`.\n // But we should also place the element at the edge of the coord sys bounding rect.\n // Beause if data changed and the bar show again, its transition animaiton\n // will begin at this place.\n\n layout.x = xClipped && x > coordSysX2 ? x2 : x;\n layout.y = yClipped && y > coordSysY2 ? y2 : y;\n layout.width = xClipped ? 0 : x2 - x;\n layout.height = yClipped ? 0 : y2 - y; // Reverse back\n\n if (signWidth < 0) {\n layout.x += layout.width;\n layout.width = -layout.width;\n }\n\n if (signHeight < 0) {\n layout.y += layout.height;\n layout.height = -layout.height;\n }\n\n return xClipped || yClipped;\n },\n polar: function (coordSysClipArea, layout) {\n var signR = layout.r0 <= layout.r ? 1 : -1; // Make sure r is larger than r0\n\n if (signR < 0) {\n var tmp = layout.r;\n layout.r = layout.r0;\n layout.r0 = tmp;\n }\n\n var r = mathMin(layout.r, coordSysClipArea.r);\n var r0 = mathMax(layout.r0, coordSysClipArea.r0);\n layout.r = r;\n layout.r0 = r0;\n var clipped = r - r0 < 0; // Reverse back\n\n if (signR < 0) {\n var tmp = layout.r;\n layout.r = layout.r0;\n layout.r0 = tmp;\n }\n\n return clipped;\n }\n};\nvar elementCreator = {\n cartesian2d: function (seriesModel, data, newIndex, layout, isHorizontal, animationModel, axisModel, isUpdate, roundCap) {\n var rect = new Rect({\n shape: extend({}, layout),\n z2: 1\n });\n rect.__dataIndex = newIndex;\n rect.name = 'item';\n\n if (animationModel) {\n var rectShape = rect.shape;\n var animateProperty = isHorizontal ? 'height' : 'width';\n rectShape[animateProperty] = 0;\n }\n\n return rect;\n },\n polar: function (seriesModel, data, newIndex, layout, isRadial, animationModel, axisModel, isUpdate, roundCap) {\n // Keep the same logic with bar in catesion: use end value to control\n // direction. Notice that if clockwise is true (by default), the sector\n // will always draw clockwisely, no matter whether endAngle is greater\n // or less than startAngle.\n var clockwise = layout.startAngle < layout.endAngle;\n var ShapeClass = !isRadial && roundCap ? Sausage : Sector;\n var sector = new ShapeClass({\n shape: defaults({\n clockwise: clockwise\n }, layout),\n z2: 1\n });\n sector.name = 'item';\n var positionMap = createPolarPositionMapping(isRadial);\n sector.calculateTextPosition = createSectorCalculateTextPosition(positionMap, {\n isRoundCap: ShapeClass === Sausage\n }); // Animation\n\n if (animationModel) {\n var sectorShape = sector.shape;\n var animateProperty = isRadial ? 'r' : 'endAngle';\n var animateTarget = {};\n sectorShape[animateProperty] = isRadial ? 0 : layout.startAngle;\n animateTarget[animateProperty] = layout[animateProperty];\n (isUpdate ? updateProps : initProps)(sector, {\n shape: animateTarget // __value: typeof dataValue === 'string' ? parseInt(dataValue, 10) : dataValue\n\n }, animationModel);\n }\n\n return sector;\n }\n};\n\nfunction shouldRealtimeSort(seriesModel, coordSys) {\n var realtimeSortOption = seriesModel.get('realtimeSort', true);\n var baseAxis = coordSys.getBaseAxis();\n\n if (process.env.NODE_ENV !== 'production') {\n if (realtimeSortOption) {\n if (baseAxis.type !== 'category') {\n warn('`realtimeSort` will not work because this bar series is not based on a category axis.');\n }\n\n if (coordSys.type !== 'cartesian2d') {\n warn('`realtimeSort` will not work because this bar series is not on cartesian2d.');\n }\n }\n }\n\n if (realtimeSortOption && baseAxis.type === 'category' && coordSys.type === 'cartesian2d') {\n return {\n baseAxis: baseAxis,\n otherAxis: coordSys.getOtherAxis(baseAxis)\n };\n }\n}\n\nfunction updateRealtimeAnimation(realtimeSortCfg, seriesAnimationModel, el, layout, newIndex, isHorizontal, isUpdate, isChangeOrder) {\n var seriesTarget;\n var axisTarget;\n\n if (isHorizontal) {\n axisTarget = {\n x: layout.x,\n width: layout.width\n };\n seriesTarget = {\n y: layout.y,\n height: layout.height\n };\n } else {\n axisTarget = {\n y: layout.y,\n height: layout.height\n };\n seriesTarget = {\n x: layout.x,\n width: layout.width\n };\n }\n\n if (!isChangeOrder) {\n // Keep the original growth animation if only axis order changed.\n // Not start a new animation.\n (isUpdate ? updateProps : initProps)(el, {\n shape: seriesTarget\n }, seriesAnimationModel, newIndex, null);\n }\n\n var axisAnimationModel = seriesAnimationModel ? realtimeSortCfg.baseAxis.model : null;\n (isUpdate ? updateProps : initProps)(el, {\n shape: axisTarget\n }, axisAnimationModel, newIndex);\n}\n\nfunction checkPropertiesNotValid(obj, props) {\n for (var i = 0; i < props.length; i++) {\n if (!isFinite(obj[props[i]])) {\n return true;\n }\n }\n\n return false;\n}\n\nvar rectPropties = ['x', 'y', 'width', 'height'];\nvar polarPropties = ['cx', 'cy', 'r', 'startAngle', 'endAngle'];\nvar isValidLayout = {\n cartesian2d: function (layout) {\n return !checkPropertiesNotValid(layout, rectPropties);\n },\n polar: function (layout) {\n return !checkPropertiesNotValid(layout, polarPropties);\n }\n};\nvar getLayout = {\n // itemModel is only used to get borderWidth, which is not needed\n // when calculating bar background layout.\n cartesian2d: function (data, dataIndex, itemModel) {\n var layout = data.getItemLayout(dataIndex);\n var fixedLineWidth = itemModel ? getLineWidth(itemModel, layout) : 0; // fix layout with lineWidth\n\n var signX = layout.width > 0 ? 1 : -1;\n var signY = layout.height > 0 ? 1 : -1;\n return {\n x: layout.x + signX * fixedLineWidth / 2,\n y: layout.y + signY * fixedLineWidth / 2,\n width: layout.width - signX * fixedLineWidth,\n height: layout.height - signY * fixedLineWidth\n };\n },\n polar: function (data, dataIndex, itemModel) {\n var layout = data.getItemLayout(dataIndex);\n return {\n cx: layout.cx,\n cy: layout.cy,\n r0: layout.r0,\n r: layout.r,\n startAngle: layout.startAngle,\n endAngle: layout.endAngle\n };\n }\n};\n\nfunction isZeroOnPolar(layout) {\n return layout.startAngle != null && layout.endAngle != null && layout.startAngle === layout.endAngle;\n}\n\nfunction createPolarPositionMapping(isRadial) {\n return function (isRadial) {\n var arcOrAngle = isRadial ? 'Arc' : 'Angle';\n return function (position) {\n switch (position) {\n case 'start':\n case 'insideStart':\n case 'end':\n case 'insideEnd':\n return position + arcOrAngle;\n\n default:\n return position;\n }\n };\n }(isRadial);\n}\n\nfunction updateStyle(el, data, dataIndex, itemModel, layout, seriesModel, isHorizontalOrRadial, isPolar) {\n var style = data.getItemVisual(dataIndex, 'style');\n\n if (!isPolar) {\n el.setShape('r', itemModel.get(['itemStyle', 'borderRadius']) || 0);\n }\n\n el.useStyle(style);\n var cursorStyle = itemModel.getShallow('cursor');\n cursorStyle && el.attr('cursor', cursorStyle);\n var labelPositionOutside = isPolar ? isHorizontalOrRadial ? layout.r >= layout.r0 ? 'endArc' : 'startArc' : layout.endAngle >= layout.startAngle ? 'endAngle' : 'startAngle' : isHorizontalOrRadial ? layout.height >= 0 ? 'bottom' : 'top' : layout.width >= 0 ? 'right' : 'left';\n var labelStatesModels = getLabelStatesModels(itemModel);\n setLabelStyle(el, labelStatesModels, {\n labelFetcher: seriesModel,\n labelDataIndex: dataIndex,\n defaultText: getDefaultLabel(seriesModel.getData(), dataIndex),\n inheritColor: style.fill,\n defaultOpacity: style.opacity,\n defaultOutsidePosition: labelPositionOutside\n });\n var label = el.getTextContent();\n\n if (isPolar && label) {\n var position = itemModel.get(['label', 'position']);\n el.textConfig.inside = position === 'middle' ? true : null;\n setSectorTextRotation(el, position === 'outside' ? labelPositionOutside : position, createPolarPositionMapping(isHorizontalOrRadial), itemModel.get(['label', 'rotate']));\n }\n\n setLabelValueAnimation(label, labelStatesModels, seriesModel.getRawValue(dataIndex), function (value) {\n return getDefaultInterpolatedLabel(data, value);\n });\n var emphasisModel = itemModel.getModel(['emphasis']);\n enableHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'));\n setStatesStylesFromModel(el, itemModel);\n\n if (isZeroOnPolar(layout)) {\n el.style.fill = 'none';\n el.style.stroke = 'none';\n each(el.states, function (state) {\n if (state.style) {\n state.style.fill = state.style.stroke = 'none';\n }\n });\n }\n} // In case width or height are too small.\n\n\nfunction getLineWidth(itemModel, rawLayout) {\n // Has no border.\n var borderColor = itemModel.get(['itemStyle', 'borderColor']);\n\n if (!borderColor || borderColor === 'none') {\n return 0;\n }\n\n var lineWidth = itemModel.get(['itemStyle', 'borderWidth']) || 0; // width or height may be NaN for empty data\n\n var width = isNaN(rawLayout.width) ? Number.MAX_VALUE : Math.abs(rawLayout.width);\n var height = isNaN(rawLayout.height) ? Number.MAX_VALUE : Math.abs(rawLayout.height);\n return Math.min(lineWidth, width, height);\n}\n\nvar LagePathShape =\n/** @class */\nfunction () {\n function LagePathShape() {}\n\n return LagePathShape;\n}();\n\nvar LargePath =\n/** @class */\nfunction (_super) {\n __extends(LargePath, _super);\n\n function LargePath(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this.type = 'largeBar';\n return _this;\n }\n\n ;\n\n LargePath.prototype.getDefaultShape = function () {\n return new LagePathShape();\n };\n\n LargePath.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 var startPoint = this.__startPoint;\n var baseDimIdx = this.__baseDimIdx;\n\n for (var i = 0; i < points.length; i += 2) {\n startPoint[baseDimIdx] = points[i + baseDimIdx];\n ctx.moveTo(startPoint[0], startPoint[1]);\n ctx.lineTo(points[i], points[i + 1]);\n }\n };\n\n return LargePath;\n}(Path);\n\nfunction createLarge(seriesModel, group, incremental) {\n // TODO support polar\n var data = seriesModel.getData();\n var startPoint = [];\n var baseDimIdx = data.getLayout('valueAxisHorizontal') ? 1 : 0;\n startPoint[1 - baseDimIdx] = data.getLayout('valueAxisStart');\n var largeDataIndices = data.getLayout('largeDataIndices');\n var barWidth = data.getLayout('barWidth');\n var backgroundModel = seriesModel.getModel('backgroundStyle');\n var drawBackground = seriesModel.get('showBackground', true);\n\n if (drawBackground) {\n var points = data.getLayout('largeBackgroundPoints');\n var backgroundStartPoint = [];\n backgroundStartPoint[1 - baseDimIdx] = data.getLayout('backgroundStart');\n var bgEl = new LargePath({\n shape: {\n points: points\n },\n incremental: !!incremental,\n silent: true,\n z2: 0\n });\n bgEl.__startPoint = backgroundStartPoint;\n bgEl.__baseDimIdx = baseDimIdx;\n bgEl.__largeDataIndices = largeDataIndices;\n bgEl.__barWidth = barWidth;\n setLargeBackgroundStyle(bgEl, backgroundModel, data);\n group.add(bgEl);\n }\n\n var el = new LargePath({\n shape: {\n points: data.getLayout('largePoints')\n },\n incremental: !!incremental\n });\n el.__startPoint = startPoint;\n el.__baseDimIdx = baseDimIdx;\n el.__largeDataIndices = largeDataIndices;\n el.__barWidth = barWidth;\n group.add(el);\n setLargeStyle(el, seriesModel, data); // Enable tooltip and user mouse/touch event handlers.\n\n getECData(el).seriesIndex = seriesModel.seriesIndex;\n\n if (!seriesModel.get('silent')) {\n el.on('mousedown', largePathUpdateDataIndex);\n el.on('mousemove', largePathUpdateDataIndex);\n }\n} // Use throttle to avoid frequently traverse to find dataIndex.\n\n\nvar largePathUpdateDataIndex = throttle(function (event) {\n var largePath = this;\n var dataIndex = largePathFindDataIndex(largePath, event.offsetX, event.offsetY);\n getECData(largePath).dataIndex = dataIndex >= 0 ? dataIndex : null;\n}, 30, false);\n\nfunction largePathFindDataIndex(largePath, x, y) {\n var baseDimIdx = largePath.__baseDimIdx;\n var valueDimIdx = 1 - baseDimIdx;\n var points = largePath.shape.points;\n var largeDataIndices = largePath.__largeDataIndices;\n var barWidthHalf = Math.abs(largePath.__barWidth / 2);\n var startValueVal = largePath.__startPoint[valueDimIdx];\n _eventPos[0] = x;\n _eventPos[1] = y;\n var pointerBaseVal = _eventPos[baseDimIdx];\n var pointerValueVal = _eventPos[1 - baseDimIdx];\n var baseLowerBound = pointerBaseVal - barWidthHalf;\n var baseUpperBound = pointerBaseVal + barWidthHalf;\n\n for (var i = 0, len = points.length / 2; i < len; i++) {\n var ii = i * 2;\n var barBaseVal = points[ii + baseDimIdx];\n var barValueVal = points[ii + valueDimIdx];\n\n if (barBaseVal >= baseLowerBound && barBaseVal <= baseUpperBound && (startValueVal <= barValueVal ? pointerValueVal >= startValueVal && pointerValueVal <= barValueVal : pointerValueVal >= barValueVal && pointerValueVal <= startValueVal)) {\n return largeDataIndices[i];\n }\n }\n\n return -1;\n}\n\nfunction setLargeStyle(el, seriesModel, data) {\n var globalStyle = data.getVisual('style');\n el.useStyle(extend({}, globalStyle)); // Use stroke instead of fill.\n\n el.style.fill = null;\n el.style.stroke = globalStyle.fill;\n el.style.lineWidth = data.getLayout('barWidth');\n}\n\nfunction setLargeBackgroundStyle(el, backgroundModel, data) {\n var borderColor = backgroundModel.get('borderColor') || backgroundModel.get('color');\n var itemStyle = backgroundModel.getItemStyle();\n el.useStyle(itemStyle);\n el.style.fill = null;\n el.style.stroke = borderColor;\n el.style.lineWidth = data.getLayout('barWidth');\n}\n\nfunction createBackgroundShape(isHorizontalOrRadial, layout, coord) {\n if (isCoordinateSystemType(coord, 'cartesian2d')) {\n var rectShape = layout;\n var coordLayout = coord.getArea();\n return {\n x: isHorizontalOrRadial ? rectShape.x : coordLayout.x,\n y: isHorizontalOrRadial ? coordLayout.y : rectShape.y,\n width: isHorizontalOrRadial ? rectShape.width : coordLayout.width,\n height: isHorizontalOrRadial ? coordLayout.height : rectShape.height\n };\n } else {\n var coordLayout = coord.getArea();\n var sectorShape = layout;\n return {\n cx: coordLayout.cx,\n cy: coordLayout.cy,\n r0: isHorizontalOrRadial ? coordLayout.r0 : sectorShape.r0,\n r: isHorizontalOrRadial ? coordLayout.r : sectorShape.r,\n startAngle: isHorizontalOrRadial ? sectorShape.startAngle : 0,\n endAngle: isHorizontalOrRadial ? sectorShape.endAngle : Math.PI * 2\n };\n }\n}\n\nfunction createBackgroundEl(coord, isHorizontalOrRadial, layout) {\n var ElementClz = coord.type === 'polar' ? Sector : Rect;\n return new ElementClz({\n shape: createBackgroundShape(isHorizontalOrRadial, layout, coord),\n silent: true,\n z2: 0\n });\n}\n\nexport default BarView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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';\nimport * as layout from '../../util/layout';\nimport * as zrUtil from 'zrender/lib/core/util';\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*/\n// FIXME emphasis label position is not same with normal label position\nimport { parsePercent } from '../../util/number';\nimport { Point } from '../../util/graphic';\nimport { each } from 'zrender/lib/core/util';\nimport { limitTurnAngle, limitSurfaceAngle } from '../../label/labelGuideHelper';\nimport { shiftLayoutOnY } from '../../label/labelLayoutHelper';\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 item.label.x = cx + (dx + item.len2) * dir;\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 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 var label = layout.label;\n\n if (isPositionCenter(layout)) {\n continue;\n }\n\n var linePoints = layout.linePoints;\n\n if (linePoints) {\n var isAlignToEdge = layout.labelAlignTo === 'edge';\n var realTextWidth = layout.rect.width;\n var targetTextWidth = void 0;\n\n if (isAlignToEdge) {\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 {\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 if (targetTextWidth < layout.rect.width) {\n // TODOTODO\n // layout.text = textContain.truncateText(layout.text, targetTextWidth, layout.font);\n layout.label.style.width = targetTextWidth;\n\n if (layout.labelAlignTo === 'edge') {\n realTextWidth = targetTextWidth; // realTextWidth = textContain.getWidth(layout.text, layout.font);\n }\n }\n\n var dist = linePoints[1][0] - linePoints[2][0];\n\n if (isAlignToEdge) {\n if (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\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 labelRotate;\n var rotate = labelModel.get('rotate');\n\n if (typeof rotate === 'number') {\n labelRotate = rotate * (Math.PI / 180);\n } else if (labelPosition === 'center') {\n labelRotate = 0;\n } else {\n var radialAngle = nx < 0 ? -midAngle + Math.PI : -midAngle;\n\n if (rotate === 'radial' || rotate === true) {\n labelRotate = radialAngle;\n } else if (rotate === 'tangential' && labelPosition !== 'outside' && labelPosition !== 'outer') {\n labelRotate = radialAngle + Math.PI / 2;\n\n if (labelRotate > Math.PI / 2) {\n labelRotate -= Math.PI;\n }\n } else {\n labelRotate = 0;\n }\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 });\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 } from 'zrender/lib/core/util';\nimport { parsePercent } from 'zrender/lib/contain/text';\nexport function getSectorCornerRadius(model, shape, zeroIfNull) {\n var cornerRadius = model.get('borderRadius');\n\n if (cornerRadius == null) {\n return zeroIfNull ? {\n innerCornerRadius: 0,\n cornerRadius: 0\n } : null;\n }\n\n if (!isArray(cornerRadius)) {\n cornerRadius = [cornerRadius, cornerRadius];\n }\n\n return {\n innerCornerRadius: parsePercent(cornerRadius[0], shape.r0),\n cornerRadius: parsePercent(cornerRadius[1], shape.r)\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __assign, __extends } from \"tslib\";\nimport { extend, retrieve3 } from 'zrender/lib/core/util';\nimport * as graphic from '../../util/graphic';\nimport { setStatesStylesFromModel, enableHoverEmphasis } from '../../util/states';\nimport ChartView from '../../view/Chart';\nimport labelLayout from './labelLayout';\nimport { setLabelLineStyle, getLabelLineStatesModels } from '../../label/labelGuideHelper';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';\nimport { getSectorCornerRadius } from '../helper/pieHelper';\nimport { saveOldStyle } from '../../animation/basicTrasition';\nimport { getBasicPieLayout } from './pieLayout';\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 (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 = __assign({\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 enableHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope'));\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.init = function () {\n var sectorGroup = new graphic.Group();\n this._sectorGroup = sectorGroup;\n };\n\n PieView.prototype.render = function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var oldData = this._data;\n var group = this.group;\n var startAngle; // First render\n\n if (!oldData && data.count() > 0) {\n var shape = data.getItemLayout(0);\n\n for (var s = 1; isNaN(shape && shape.startAngle) && s < data.count(); ++s) {\n shape = data.getItemLayout(s);\n }\n\n if (shape) {\n startAngle = shape.startAngle;\n }\n } // remove empty-circle if it exists\n\n\n if (this._emptyCircleSector) {\n group.remove(this._emptyCircleSector);\n } // when all data are filtered, show lightgray empty circle\n\n\n if (data.count() === 0 && seriesModel.get('showEmptyCircle')) {\n var sector = new graphic.Sector({\n shape: getBasicPieLayout(seriesModel, api)\n });\n sector.useStyle(seriesModel.getModel('emptyCircleStyle').getItemStyle());\n this._emptyCircleSector = sector;\n group.add(sector);\n }\n\n data.diff(oldData).add(function (idx) {\n var piePiece = new PiePiece(data, idx, startAngle);\n data.setItemGraphicEl(idx, piePiece);\n group.add(piePiece);\n }).update(function (newIdx, oldIdx) {\n var piePiece = oldData.getItemGraphicEl(oldIdx);\n piePiece.updateData(data, newIdx, startAngle);\n piePiece.off('click');\n group.add(piePiece);\n data.setItemGraphicEl(newIdx, piePiece);\n }).remove(function (idx) {\n var piePiece = oldData.getItemGraphicEl(idx);\n graphic.removeElementWithFadeOut(piePiece, seriesModel, idx);\n }).execute();\n labelLayout(seriesModel); // Always use initial animation.\n\n if (seriesModel.get('animationTypeUpdate') !== 'expansion') {\n this._data = data;\n }\n };\n\n PieView.prototype.dispose = function () {};\n\n PieView.prototype.containPoint = function (point, seriesModel) {\n var data = seriesModel.getData();\n var itemLayout = data.getItemLayout(0);\n\n if (itemLayout) {\n var dx = point[0] - itemLayout.cx;\n var dy = point[1] - itemLayout.cy;\n var radius = Math.sqrt(dx * dx + dy * dy);\n return radius <= itemLayout.r && radius >= itemLayout.r0;\n }\n };\n\n PieView.type = 'pie';\n return PieView;\n}(ChartView);\n\nexport default PieView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport prepareSeriesDataSchema from '../../data/helper/createDimensions';\nimport SeriesData from '../../data/SeriesData';\nimport { extend, isArray } from 'zrender/lib/core/util';\n/**\n * [Usage]:\n * (1)\n * createListSimply(seriesModel, ['value']);\n * (2)\n * createListSimply(seriesModel, {\n * coordDimensions: ['value'],\n * dimensionsCount: 5\n * });\n */\n\nexport default function createSeriesDataSimply(seriesModel, opt, nameList) {\n opt = isArray(opt) && {\n coordDimensions: opt\n } || extend({\n encodeDefine: seriesModel.getEncode()\n }, opt);\n var source = seriesModel.getSource();\n var dimensions = prepareSeriesDataSchema(source, opt).dimensions;\n var list = new SeriesData(dimensions, seriesModel);\n list.initData(source, nameList);\n return list;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport * as modelUtil from '../../util/model';\nimport { getPercentWithPrecision } from '../../util/number';\nimport { makeSeriesEncodeForNameBased } from '../../data/helper/sourceHelper';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider';\nimport SeriesModel from '../../model/Series';\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 { __extends } from \"tslib\";\nimport createSeriesData from '../helper/createSeriesData';\nimport SeriesModel from '../../model/Series';\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.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';\nimport { createSymbol } from '../../util/symbol';\nimport IncrementalDisplayable from 'zrender/lib/graphic/IncrementalDisplayable';\nimport { getECData } from '../../util/innerStore';\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 return _super.call(this, opts) || this;\n }\n\n LargeSymbolPath.prototype.getDefaultShape = function () {\n return new LargeSymbolPathShape();\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; // Do draw in afterBrush.\n\n if (canBoost) {\n this._ctx = ctx;\n return;\n }\n\n this._ctx = null;\n\n for (var i = 0; i < points.length;) {\n var x = points[i++];\n var y = points[i++];\n\n if (isNaN(x) || isNaN(y)) {\n continue;\n }\n\n if (this.softClipShape && !this.softClipShape.contain(x, y)) {\n continue;\n }\n\n symbolProxyShape.x = x - size[0] / 2;\n symbolProxyShape.y = y - size[1] / 2;\n symbolProxyShape.width = size[0];\n symbolProxyShape.height = size[1];\n symbolProxy.buildPath(path, symbolProxyShape, true);\n }\n };\n\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\n if (!ctx) {\n return;\n } // PENDING If style or other canvas status changed?\n\n\n for (var i = 0; i < points.length;) {\n var x = points[i++];\n var y = points[i++];\n\n if (isNaN(x) || isNaN(y)) {\n continue;\n }\n\n if (this.softClipShape && !this.softClipShape.contain(x, y)) {\n continue;\n } // 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\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 return LargeSymbolPath;\n}(graphic.Path);\n\nvar LargeSymbolDraw =\n/** @class */\nfunction () {\n function LargeSymbolDraw() {\n this.group = new graphic.Group();\n }\n\n LargeSymbolDraw.prototype.isPersistent = function () {\n return !this._incremental;\n };\n\n ;\n /**\n * Update symbols draw by new data\n */\n\n LargeSymbolDraw.prototype.updateData = function (data, opt) {\n this.group.removeAll();\n var symbolEl = new LargeSymbolPath({\n rectHover: true,\n cursor: 'default'\n });\n symbolEl.setShape({\n points: data.getLayout('points')\n });\n\n this._setCommon(symbolEl, data, false, opt);\n\n this.group.add(symbolEl);\n this._incremental = null;\n };\n\n LargeSymbolDraw.prototype.updateLayout = function (data) {\n if (this._incremental) {\n return;\n }\n\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);\n });\n };\n\n LargeSymbolDraw.prototype.incrementalPrepareUpdate = function (data) {\n this.group.removeAll();\n\n this._clearIncremental(); // Only use incremental displayables when data amount is larger than 2 million.\n // PENDING Incremental data?\n\n\n if (data.count() > 2e6) {\n if (!this._incremental) {\n this._incremental = new IncrementalDisplayable({\n silent: true\n });\n }\n\n this.group.add(this._incremental);\n } else {\n this._incremental = null;\n }\n };\n\n LargeSymbolDraw.prototype.incrementalUpdate = function (taskParams, data, opt) {\n var symbolEl;\n\n if (this._incremental) {\n symbolEl = new LargeSymbolPath();\n\n this._incremental.addDisplayable(symbolEl, true);\n } else {\n symbolEl = new LargeSymbolPath({\n rectHover: true,\n cursor: 'default',\n startIndex: taskParams.start,\n endIndex: taskParams.end\n });\n symbolEl.incremental = true;\n this.group.add(symbolEl);\n }\n\n symbolEl.setShape({\n points: data.getLayout('points')\n });\n\n this._setCommon(symbolEl, data, !!this._incremental, opt);\n };\n\n LargeSymbolDraw.prototype._setCommon = function (symbolEl, data, isIncremental, 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 if (!isIncremental) {\n var ecData_1 = getECData(symbolEl); // Enable tooltip\n // PENDING May have performance issue when path is extremely large\n\n ecData_1.seriesIndex = hostModel.seriesIndex;\n symbolEl.on('mousemove', function (e) {\n ecData_1.dataIndex = null;\n var dataIndex = symbolEl.findDataIndex(e.offsetX, e.offsetY);\n\n if (dataIndex >= 0) {\n // Provide dataIndex for tooltip\n ecData_1.dataIndex = dataIndex + (symbolEl.startIndex || 0);\n }\n });\n }\n };\n\n LargeSymbolDraw.prototype.remove = function () {\n this._clearIncremental();\n\n this._incremental = null;\n this.group.removeAll();\n };\n\n LargeSymbolDraw.prototype._clearIncremental = function () {\n var incremental = this._incremental;\n\n if (incremental) {\n incremental.clearDisplaybles();\n }\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';\nimport LargeSymbolDraw from '../helper/LargeSymbolDraw';\nimport pointsLayout from '../../layout/points';\nimport ChartView from '../../view/Chart';\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 || !this._symbolDraw.isPersistent()) {\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._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 * as zrUtil from 'zrender/lib/core/util';\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';\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';\nimport { setStatesStylesFromModel, enableHoverEmphasis } from '../../util/states';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport * as symbolUtil from '../../util/symbol';\nimport ChartView from '../../view/Chart';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';\nimport ZRImage from 'zrender/lib/graphic/Image';\nimport { saveOldStyle } from '../../animation/basicTrasition';\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 enableHoverEmphasis(itemGroup, emphasisModel.get('focus'), emphasisModel.get('blurScope'));\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';\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider';\nimport { createTooltipMarkup, retrieveVisualColorForTooltipMarker } from '../../component/tooltip/tooltipMarkup';\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 graphic from '../../util/graphic';\nimport MapDraw from '../../component/helper/MapDraw';\nimport ChartView from '../../view/Chart';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';\nimport { setStatesFlag, Z2_EMPHASIS_LIFT } from '../../util/states';\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 });\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';\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply';\nimport SeriesModel from '../../model/Series';\nimport geoSourceManager from '../../coord/geo/geoSourceManager';\nimport { makeSeriesEncodeForNameBased } from '../../data/helper/sourceHelper';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup';\nimport { createSymbol } from '../../util/symbol';\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'; // 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';\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*/\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';\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';\nimport * as graphic from '../../util/graphic';\nimport { getECData } from '../../util/innerStore';\nimport SymbolClz from '../helper/Symbol';\nimport { radialCoordinate } from './layoutHelper';\nimport * as bbox from 'zrender/lib/core/bbox';\nimport View from '../../coord/View';\nimport * as roamHelper from '../../component/helper/roamHelper';\nimport RoamController from '../../component/helper/RoamController';\nimport { onIrrelevantElement } from '../../component/helper/cursorHelper';\nimport { parsePercent } from '../../util/number';\nimport ChartView from '../../view/Chart';\nimport Path from 'zrender/lib/graphic/Path';\nimport { setStatesStylesFromModel, setStatesFlag, setDefaultStateProxy, HOVER_STATE_BLUR } from '../../util/states';\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);\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) {\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'));\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) {\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 === '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;\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 }\n\n if (edge) {\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, {\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*/\nimport * as zrUtil from 'zrender/lib/core/util';\nexport function retrieveTargetInfo(payload, validPayloadTypes, seriesModel) {\n if (payload && zrUtil.indexOf(validPayloadTypes, payload.type) >= 0) {\n var root = seriesModel.getData().tree.root;\n var targetNode = payload.targetNode;\n\n if (typeof targetNode === 'string') {\n targetNode = root.getNodeById(targetNode);\n }\n\n if (targetNode && root.contains(targetNode)) {\n return {\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';\nimport Tree from '../../data/Tree';\nimport Model from '../../model/Model';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup';\nimport { wrapTreePathInfo } from '../helper/treeHelper';\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 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';\nimport { init, firstWalk, secondWalk, separation as sep, radialCoordinate, getViewRect } from './layoutHelper';\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';\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 * as helper from '../helper/treeHelper';\n\nvar noop = function () {};\n\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';\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';\nimport SeriesModel from '../../model/Series';\nimport Tree from '../../data/Tree';\nimport Model from '../../model/Model';\nimport { wrapTreePathInfo } from '../helper/treeHelper';\nimport { normalizeToArray } from '../../util/model';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup';\nimport enableAriaDecalForTree from '../helper/enableAriaDecalForTree';\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 ellipsis: true,\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 // data: {\n // value: [],\n // children: [],\n // link: 'http://xxx.xxx.xxx',\n // target: 'blank' or 'self'\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';\nimport { getECData } from '../../util/innerStore';\nimport * as layout from '../../util/layout';\nimport { wrapTreePathInfo } from '../helper/treeHelper';\nimport { curry, defaults } from 'zrender/lib/core/util';\nimport { convertOptionIdName } from '../../util/model';\nimport { Z2_EMPHASIS_LIFT } from '../../util/states';\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.componentIndex,\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*/\nimport { __extends } from \"tslib\";\nimport { bind, each, indexOf, curry, extend, normalizeCssArray, isFunction } from 'zrender/lib/core/util';\nimport * as graphic from '../../util/graphic';\nimport { getECData } from '../../util/innerStore';\nimport { isHighDownDispatcher, setAsHighDownDispatcher, setDefaultStateProxy, enableHoverFocus, Z2_EMPHASIS_LIFT } from '../../util/states';\nimport DataDiffer from '../../data/DataDiffer';\nimport * as helper from '../helper/treeHelper';\nimport Breadcrumb from './Breadcrumb';\nimport RoamController from '../../component/helper/RoamController';\nimport BoundingRect from 'zrender/lib/core/BoundingRect';\nimport * as matrix from 'zrender/lib/core/matrix';\nimport * as animationUtil from '../../util/animation';\nimport makeStyleMapper from '../../model/mixin/makeStyleMapper';\nimport ChartView from '../../view/Chart';\nimport Displayable from 'zrender/lib/graphic/Displayable';\nimport { makeInner, convertOptionIdName } from '../../util/model';\nimport { windowOpen } from '../../util/format';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';\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 focus = nodeModel.get(['emphasis', 'focus']);\n var blurScope = nodeModel.get(['emphasis', 'blurScope']);\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, true); // 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, true); // 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 VisualMapping from '../../visual/VisualMapping';\nimport { each, extend, isArray } from 'zrender/lib/core/util';\nimport { modifyHSL, modifyAlpha } from 'zrender/lib/tool/color';\nimport { makeInner } from '../../util/model';\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';\nimport BoundingRect from 'zrender/lib/core/BoundingRect';\nimport { parsePercent, MAX_SAFE_INTEGER } from '../../util/number';\nimport * as layout from '../../util/layout';\nimport * as helper from '../helper/treeHelper';\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*/\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 (typeof category === 'number') {\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 } from 'zrender/lib/core/util';\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 (typeof categoryIdx === 'string') {\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';\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';\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 (typeof autoCurvenessParmas === 'number') {\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';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { getCurvenessForEdge } from '../helper/multipleGraphEdgeHelper';\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';\nimport { simpleLayout, simpleLayoutEdge } from './simpleLayoutHelper';\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';\nimport { getSymbolSize, getNodeGlobalScale } from './graphHelper';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { getCurvenessForEdge } from '../helper/multipleGraphEdgeHelper';\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';\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';\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';\nimport { simpleLayout } from './simpleLayoutHelper';\nimport { circularLayout } from './circularLayoutHelper';\nimport { linearMap } from '../../util/number';\nimport * as vec2 from 'zrender/lib/core/vector';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { getCurvenessForEdge } from '../helper/multipleGraphEdgeHelper';\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';\nimport { getLayoutRect } from '../../util/layout';\nimport * as bbox from 'zrender/lib/core/bbox';\nimport { extend } from 'zrender/lib/core/util';\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'));\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 * as curveTool from 'zrender/lib/core/curve';\nimport * as vec2 from 'zrender/lib/core/vector';\nimport { getSymbolSize } from './graphHelper';\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';\nimport SymbolDraw from '../helper/SymbolDraw';\nimport LineDraw from '../helper/LineDraw';\nimport RoamController from '../../component/helper/RoamController';\nimport * as roamHelper from '../../component/helper/roamHelper';\nimport { onIrrelevantElement } from '../../component/helper/cursorHelper';\nimport * as graphic from '../../util/graphic';\nimport adjustEdge from './adjustEdge';\nimport { getNodeGlobalScale } from './graphHelper';\nimport ChartView from '../../view/Chart';\nimport { getECData } from '../../util/innerStore';\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(); // Update draggable\n\n el.off('drag').off('dragend');\n var draggable = itemModel.get('draggable');\n\n if (draggable) {\n el.on('drag', function () {\n if (forceLayout) {\n forceLayout.warmUp();\n !_this._layouting && _this._startForceLayoutIteration(forceLayout, layoutAnimation);\n forceLayout.setFixed(idx); // Write position back to layout\n\n data.setItemLayout(idx, [el.x, el.y]);\n }\n }).on('dragend', function () {\n if (forceLayout) {\n forceLayout.setUnfixed(idx);\n }\n });\n }\n\n el.setDraggable(draggable && !!forceLayout);\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 (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.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';\nimport SeriesData from '../../data/SeriesData';\nimport Graph from '../../data/Graph';\nimport linkSeriesData from '../../data/helper/linkSeriesData';\nimport prepareSeriesDataSchema from '../../data/helper/createDimensions';\nimport CoordinateSystem from '../../core/CoordinateSystem';\nimport createSeriesData from './createSeriesData';\nimport { convertOptionIdName } from '../../util/model';\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';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { defaultEmphasis } from '../../util/model';\nimport Model from '../../model/Model';\nimport createGraphFromNodeEdge from '../helper/createGraphFromNodeEdge';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider';\nimport SeriesModel from '../../model/Series';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup';\nimport { defaultSeriesFormatTooltip } from '../../component/tooltip/seriesFormatTooltip';\nimport { initCurvenessList, createEdgeMapForCurveness } from '../helper/multipleGraphEdgeHelper';\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';\nimport categoryVisual from './categoryVisual';\nimport edgeVisual from './edgeVisual';\nimport simpleLayout from './simpleLayout';\nimport circularLayout from './circularLayout';\nimport forceLayout from './forceLayout';\nimport createView from './createView';\nimport View from '../../coord/View';\nimport GraphView from './GraphView';\nimport GraphSeriesModel from './GraphSeries';\nimport { updateCenterAndZoom } from '../../action/roamHelper';\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 }, function () {});\n registers.registerAction({\n type: 'unfocusNodeAdjacency',\n event: 'unfocusNodeAdjacency',\n update: 'series:unfocusNodeAdjacency'\n }, function () {}); // Register roam action.\n\n registers.registerAction(actionInfo, function (payload, ecModel) {\n ecModel.eachComponent({\n mainType: 'series',\n query: payload\n }, function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n var res = updateCenterAndZoom(coordSys, payload);\n seriesModel.setCenter && seriesModel.setCenter(res.center);\n seriesModel.setZoom && seriesModel.setZoom(res.zoom);\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Path from 'zrender/lib/graphic/Path';\n\nvar PointerShape =\n/** @class */\nfunction () {\n function PointerShape() {\n this.angle = 0;\n this.width = 10;\n this.r = 10;\n this.x = 0;\n this.y = 0;\n }\n\n return PointerShape;\n}();\n\nvar PointerPath =\n/** @class */\nfunction (_super) {\n __extends(PointerPath, _super);\n\n function PointerPath(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this.type = 'pointer';\n return _this;\n }\n\n PointerPath.prototype.getDefaultShape = function () {\n return new PointerShape();\n };\n\n PointerPath.prototype.buildPath = function (ctx, shape) {\n var mathCos = Math.cos;\n var mathSin = Math.sin;\n var r = shape.r;\n var width = shape.width;\n var angle = shape.angle;\n var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2);\n var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2);\n angle = shape.angle - Math.PI / 2;\n ctx.moveTo(x, y);\n ctx.lineTo(shape.x + mathCos(angle) * width, shape.y + mathSin(angle) * width);\n ctx.lineTo(shape.x + mathCos(shape.angle) * r, shape.y + mathSin(shape.angle) * r);\n ctx.lineTo(shape.x - mathCos(angle) * width, shape.y - mathSin(angle) * width);\n ctx.lineTo(x, y);\n };\n\n return PointerPath;\n}(Path);\n\nexport default PointerPath;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport PointerPath from './PointerPath';\nimport * as graphic from '../../util/graphic';\nimport { setStatesStylesFromModel, enableHoverEmphasis } from '../../util/states';\nimport { createTextStyle, setLabelValueAnimation, animateLabelValue } from '../../label/labelStyle';\nimport ChartView from '../../view/Chart';\nimport { parsePercent, round, linearMap } from '../../util/number';\nimport Sausage from '../../util/shape/sausage';\nimport { createSymbol } from '../../util/symbol';\nimport ZRImage from 'zrender/lib/graphic/Image';\nimport { extend } from 'zrender/lib/core/util';\nimport { setCommonECData } from '../../util/innerStore';\n\nfunction parsePosition(seriesModel, api) {\n var center = seriesModel.get('center');\n var width = api.getWidth();\n var height = api.getHeight();\n var size = Math.min(width, height);\n var cx = parsePercent(center[0], api.getWidth());\n var cy = parsePercent(center[1], api.getHeight());\n var r = parsePercent(seriesModel.get('radius'), size / 2);\n return {\n cx: cx,\n cy: cy,\n r: r\n };\n}\n\nfunction formatLabel(value, labelFormatter) {\n var label = value == null ? '' : value + '';\n\n if (labelFormatter) {\n if (typeof labelFormatter === 'string') {\n label = labelFormatter.replace('{value}', label);\n } else if (typeof labelFormatter === 'function') {\n label = labelFormatter(value);\n }\n }\n\n return label;\n}\n\nvar PI2 = Math.PI * 2;\n\nvar GaugeView =\n/** @class */\nfunction (_super) {\n __extends(GaugeView, _super);\n\n function GaugeView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = GaugeView.type;\n return _this;\n }\n\n GaugeView.prototype.render = function (seriesModel, ecModel, api) {\n this.group.removeAll();\n var colorList = seriesModel.get(['axisLine', 'lineStyle', 'color']);\n var posInfo = parsePosition(seriesModel, api);\n\n this._renderMain(seriesModel, ecModel, api, colorList, posInfo);\n\n this._data = seriesModel.getData();\n };\n\n GaugeView.prototype.dispose = function () {};\n\n GaugeView.prototype._renderMain = function (seriesModel, ecModel, api, colorList, posInfo) {\n var group = this.group;\n var clockwise = seriesModel.get('clockwise');\n var startAngle = -seriesModel.get('startAngle') / 180 * Math.PI;\n var endAngle = -seriesModel.get('endAngle') / 180 * Math.PI;\n var axisLineModel = seriesModel.getModel('axisLine');\n var roundCap = axisLineModel.get('roundCap');\n var MainPath = roundCap ? Sausage : graphic.Sector;\n var showAxis = axisLineModel.get('show');\n var lineStyleModel = axisLineModel.getModel('lineStyle');\n var axisLineWidth = lineStyleModel.get('width');\n var angleRangeSpan = !((endAngle - startAngle) % PI2) && endAngle !== startAngle ? PI2 : (endAngle - startAngle) % PI2;\n var prevEndAngle = startAngle;\n\n for (var i = 0; showAxis && i < colorList.length; i++) {\n // Clamp\n var percent = Math.min(Math.max(colorList[i][0], 0), 1);\n endAngle = startAngle + angleRangeSpan * percent;\n var sector = new MainPath({\n shape: {\n startAngle: prevEndAngle,\n endAngle: endAngle,\n cx: posInfo.cx,\n cy: posInfo.cy,\n clockwise: clockwise,\n r0: posInfo.r - axisLineWidth,\n r: posInfo.r\n },\n silent: true\n });\n sector.setStyle({\n fill: colorList[i][1]\n });\n sector.setStyle(lineStyleModel.getLineStyle( // Because we use sector to simulate arc\n // so the properties for stroking are useless\n ['color', 'width']));\n group.add(sector);\n prevEndAngle = endAngle;\n }\n\n var getColor = function (percent) {\n // Less than 0\n if (percent <= 0) {\n return colorList[0][1];\n }\n\n var i;\n\n for (i = 0; i < colorList.length; i++) {\n if (colorList[i][0] >= percent && (i === 0 ? 0 : colorList[i - 1][0]) < percent) {\n return colorList[i][1];\n }\n } // More than 1\n\n\n return colorList[i - 1][1];\n };\n\n if (!clockwise) {\n var tmp = startAngle;\n startAngle = endAngle;\n endAngle = tmp;\n }\n\n this._renderTicks(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth);\n\n this._renderTitleAndDetail(seriesModel, ecModel, api, getColor, posInfo);\n\n this._renderAnchor(seriesModel, posInfo);\n\n this._renderPointer(seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth);\n };\n\n GaugeView.prototype._renderTicks = function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth) {\n var group = this.group;\n var cx = posInfo.cx;\n var cy = posInfo.cy;\n var r = posInfo.r;\n var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n var splitLineModel = seriesModel.getModel('splitLine');\n var tickModel = seriesModel.getModel('axisTick');\n var labelModel = seriesModel.getModel('axisLabel');\n var splitNumber = seriesModel.get('splitNumber');\n var subSplitNumber = tickModel.get('splitNumber');\n var splitLineLen = parsePercent(splitLineModel.get('length'), r);\n var tickLen = parsePercent(tickModel.get('length'), r);\n var angle = startAngle;\n var step = (endAngle - startAngle) / splitNumber;\n var subStep = step / subSplitNumber;\n var splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle();\n var tickLineStyle = tickModel.getModel('lineStyle').getLineStyle();\n var splitLineDistance = splitLineModel.get('distance');\n var unitX;\n var unitY;\n\n for (var i = 0; i <= splitNumber; i++) {\n unitX = Math.cos(angle);\n unitY = Math.sin(angle); // Split line\n\n if (splitLineModel.get('show')) {\n var distance = splitLineDistance ? splitLineDistance + axisLineWidth : axisLineWidth;\n var splitLine = new graphic.Line({\n shape: {\n x1: unitX * (r - distance) + cx,\n y1: unitY * (r - distance) + cy,\n x2: unitX * (r - splitLineLen - distance) + cx,\n y2: unitY * (r - splitLineLen - distance) + cy\n },\n style: splitLineStyle,\n silent: true\n });\n\n if (splitLineStyle.stroke === 'auto') {\n splitLine.setStyle({\n stroke: getColor(i / splitNumber)\n });\n }\n\n group.add(splitLine);\n } // Label\n\n\n if (labelModel.get('show')) {\n var distance = labelModel.get('distance') + splitLineDistance;\n var label = formatLabel(round(i / splitNumber * (maxVal - minVal) + minVal), labelModel.get('formatter'));\n var autoColor = getColor(i / splitNumber);\n group.add(new graphic.Text({\n style: createTextStyle(labelModel, {\n text: label,\n x: unitX * (r - splitLineLen - distance) + cx,\n y: unitY * (r - splitLineLen - distance) + cy,\n verticalAlign: unitY < -0.8 ? 'top' : unitY > 0.8 ? 'bottom' : 'middle',\n align: unitX < -0.4 ? 'left' : unitX > 0.4 ? 'right' : 'center'\n }, {\n inheritColor: autoColor\n }),\n silent: true\n }));\n } // Axis tick\n\n\n if (tickModel.get('show') && i !== splitNumber) {\n var distance = tickModel.get('distance');\n distance = distance ? distance + axisLineWidth : axisLineWidth;\n\n for (var j = 0; j <= subSplitNumber; j++) {\n unitX = Math.cos(angle);\n unitY = Math.sin(angle);\n var tickLine = new graphic.Line({\n shape: {\n x1: unitX * (r - distance) + cx,\n y1: unitY * (r - distance) + cy,\n x2: unitX * (r - tickLen - distance) + cx,\n y2: unitY * (r - tickLen - distance) + cy\n },\n silent: true,\n style: tickLineStyle\n });\n\n if (tickLineStyle.stroke === 'auto') {\n tickLine.setStyle({\n stroke: getColor((i + j / subSplitNumber) / splitNumber)\n });\n }\n\n group.add(tickLine);\n angle += subStep;\n }\n\n angle -= subStep;\n } else {\n angle += step;\n }\n }\n };\n\n GaugeView.prototype._renderPointer = function (seriesModel, ecModel, api, getColor, posInfo, startAngle, endAngle, clockwise, axisLineWidth) {\n var group = this.group;\n var oldData = this._data;\n var oldProgressData = this._progressEls;\n var progressList = [];\n var showPointer = seriesModel.get(['pointer', 'show']);\n var progressModel = seriesModel.getModel('progress');\n var showProgress = progressModel.get('show');\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n var valueExtent = [minVal, maxVal];\n var angleExtent = [startAngle, endAngle];\n\n function createPointer(idx, angle) {\n var itemModel = data.getItemModel(idx);\n var pointerModel = itemModel.getModel('pointer');\n var pointerWidth = parsePercent(pointerModel.get('width'), posInfo.r);\n var pointerLength = parsePercent(pointerModel.get('length'), posInfo.r);\n var pointerStr = seriesModel.get(['pointer', 'icon']);\n var pointerOffset = pointerModel.get('offsetCenter');\n var pointerOffsetX = parsePercent(pointerOffset[0], posInfo.r);\n var pointerOffsetY = parsePercent(pointerOffset[1], posInfo.r);\n var pointerKeepAspect = pointerModel.get('keepAspect');\n var pointer; // not exist icon type will be set 'rect'\n\n if (pointerStr) {\n pointer = createSymbol(pointerStr, pointerOffsetX - pointerWidth / 2, pointerOffsetY - pointerLength, pointerWidth, pointerLength, null, pointerKeepAspect);\n } else {\n pointer = new PointerPath({\n shape: {\n angle: -Math.PI / 2,\n width: pointerWidth,\n r: pointerLength,\n x: pointerOffsetX,\n y: pointerOffsetY\n }\n });\n }\n\n pointer.rotation = -(angle + Math.PI / 2);\n pointer.x = posInfo.cx;\n pointer.y = posInfo.cy;\n return pointer;\n }\n\n function createProgress(idx, endAngle) {\n var roundCap = progressModel.get('roundCap');\n var ProgressPath = roundCap ? Sausage : graphic.Sector;\n var isOverlap = progressModel.get('overlap');\n var progressWidth = isOverlap ? progressModel.get('width') : axisLineWidth / data.count();\n var r0 = isOverlap ? posInfo.r - progressWidth : posInfo.r - (idx + 1) * progressWidth;\n var r = isOverlap ? posInfo.r : posInfo.r - idx * progressWidth;\n var progress = new ProgressPath({\n shape: {\n startAngle: startAngle,\n endAngle: endAngle,\n cx: posInfo.cx,\n cy: posInfo.cy,\n clockwise: clockwise,\n r0: r0,\n r: r\n }\n });\n isOverlap && (progress.z2 = maxVal - data.get(valueDim, idx) % maxVal);\n return progress;\n }\n\n if (showProgress || showPointer) {\n data.diff(oldData).add(function (idx) {\n if (showPointer) {\n var pointer = createPointer(idx, startAngle);\n graphic.initProps(pointer, {\n rotation: -(linearMap(data.get(valueDim, idx), valueExtent, angleExtent, true) + Math.PI / 2)\n }, seriesModel);\n group.add(pointer);\n data.setItemGraphicEl(idx, pointer);\n }\n\n if (showProgress) {\n var progress = createProgress(idx, startAngle);\n var isClip = progressModel.get('clip');\n graphic.initProps(progress, {\n shape: {\n endAngle: linearMap(data.get(valueDim, idx), valueExtent, angleExtent, isClip)\n }\n }, seriesModel);\n group.add(progress); // Add data index and series index for indexing the data by element\n // Useful in tooltip\n\n setCommonECData(seriesModel.seriesIndex, data.dataType, idx, progress);\n progressList[idx] = progress;\n }\n }).update(function (newIdx, oldIdx) {\n if (showPointer) {\n var previousPointer = oldData.getItemGraphicEl(oldIdx);\n var previousRotate = previousPointer ? previousPointer.rotation : startAngle;\n var pointer = createPointer(newIdx, previousRotate);\n pointer.rotation = previousRotate;\n graphic.updateProps(pointer, {\n rotation: -(linearMap(data.get(valueDim, newIdx), valueExtent, angleExtent, true) + Math.PI / 2)\n }, seriesModel);\n group.add(pointer);\n data.setItemGraphicEl(newIdx, pointer);\n }\n\n if (showProgress) {\n var previousProgress = oldProgressData[oldIdx];\n var previousEndAngle = previousProgress ? previousProgress.shape.endAngle : startAngle;\n var progress = createProgress(newIdx, previousEndAngle);\n var isClip = progressModel.get('clip');\n graphic.updateProps(progress, {\n shape: {\n endAngle: linearMap(data.get(valueDim, newIdx), valueExtent, angleExtent, isClip)\n }\n }, seriesModel);\n group.add(progress); // Add data index and series index for indexing the data by element\n // Useful in tooltip\n\n setCommonECData(seriesModel.seriesIndex, data.dataType, newIdx, progress);\n progressList[newIdx] = progress;\n }\n }).execute();\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n var emphasisModel = itemModel.getModel('emphasis');\n\n if (showPointer) {\n var pointer = data.getItemGraphicEl(idx);\n var symbolStyle = data.getItemVisual(idx, 'style');\n var visualColor = symbolStyle.fill;\n\n if (pointer instanceof ZRImage) {\n var pathStyle = pointer.style;\n pointer.useStyle(extend({\n image: pathStyle.image,\n x: pathStyle.x,\n y: pathStyle.y,\n width: pathStyle.width,\n height: pathStyle.height\n }, symbolStyle));\n } else {\n pointer.useStyle(symbolStyle);\n pointer.type !== 'pointer' && pointer.setColor(visualColor);\n }\n\n pointer.setStyle(itemModel.getModel(['pointer', 'itemStyle']).getItemStyle());\n\n if (pointer.style.fill === 'auto') {\n pointer.setStyle('fill', getColor(linearMap(data.get(valueDim, idx), valueExtent, [0, 1], true)));\n }\n\n pointer.z2EmphasisLift = 0;\n setStatesStylesFromModel(pointer, itemModel);\n enableHoverEmphasis(pointer, emphasisModel.get('focus'), emphasisModel.get('blurScope'));\n }\n\n if (showProgress) {\n var progress = progressList[idx];\n progress.useStyle(data.getItemVisual(idx, 'style'));\n progress.setStyle(itemModel.getModel(['progress', 'itemStyle']).getItemStyle());\n progress.z2EmphasisLift = 0;\n setStatesStylesFromModel(progress, itemModel);\n enableHoverEmphasis(progress, emphasisModel.get('focus'), emphasisModel.get('blurScope'));\n }\n });\n this._progressEls = progressList;\n }\n };\n\n GaugeView.prototype._renderAnchor = function (seriesModel, posInfo) {\n var anchorModel = seriesModel.getModel('anchor');\n var showAnchor = anchorModel.get('show');\n\n if (showAnchor) {\n var anchorSize = anchorModel.get('size');\n var anchorType = anchorModel.get('icon');\n var offsetCenter = anchorModel.get('offsetCenter');\n var anchorKeepAspect = anchorModel.get('keepAspect');\n var anchor = createSymbol(anchorType, posInfo.cx - anchorSize / 2 + parsePercent(offsetCenter[0], posInfo.r), posInfo.cy - anchorSize / 2 + parsePercent(offsetCenter[1], posInfo.r), anchorSize, anchorSize, null, anchorKeepAspect);\n anchor.z2 = anchorModel.get('showAbove') ? 1 : 0;\n anchor.setStyle(anchorModel.getModel('itemStyle').getItemStyle());\n this.group.add(anchor);\n }\n };\n\n GaugeView.prototype._renderTitleAndDetail = function (seriesModel, ecModel, api, getColor, posInfo) {\n var _this = this;\n\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var minVal = +seriesModel.get('min');\n var maxVal = +seriesModel.get('max');\n var contentGroup = new graphic.Group();\n var newTitleEls = [];\n var newDetailEls = [];\n var hasAnimation = seriesModel.isAnimationEnabled();\n var showPointerAbove = seriesModel.get(['pointer', 'showAbove']);\n data.diff(this._data).add(function (idx) {\n newTitleEls[idx] = new graphic.Text({\n silent: true\n });\n newDetailEls[idx] = new graphic.Text({\n silent: true\n });\n }).update(function (idx, oldIdx) {\n newTitleEls[idx] = _this._titleEls[oldIdx];\n newDetailEls[idx] = _this._detailEls[oldIdx];\n }).execute();\n data.each(function (idx) {\n var itemModel = data.getItemModel(idx);\n var value = data.get(valueDim, idx);\n var itemGroup = new graphic.Group();\n var autoColor = getColor(linearMap(value, [minVal, maxVal], [0, 1], true));\n var itemTitleModel = itemModel.getModel('title');\n\n if (itemTitleModel.get('show')) {\n var titleOffsetCenter = itemTitleModel.get('offsetCenter');\n var titleX = posInfo.cx + parsePercent(titleOffsetCenter[0], posInfo.r);\n var titleY = posInfo.cy + parsePercent(titleOffsetCenter[1], posInfo.r);\n var labelEl = newTitleEls[idx];\n labelEl.attr({\n z2: showPointerAbove ? 0 : 2,\n style: createTextStyle(itemTitleModel, {\n x: titleX,\n y: titleY,\n text: data.getName(idx),\n align: 'center',\n verticalAlign: 'middle'\n }, {\n inheritColor: autoColor\n })\n });\n itemGroup.add(labelEl);\n }\n\n var itemDetailModel = itemModel.getModel('detail');\n\n if (itemDetailModel.get('show')) {\n var detailOffsetCenter = itemDetailModel.get('offsetCenter');\n var detailX = posInfo.cx + parsePercent(detailOffsetCenter[0], posInfo.r);\n var detailY = posInfo.cy + parsePercent(detailOffsetCenter[1], posInfo.r);\n var width = parsePercent(itemDetailModel.get('width'), posInfo.r);\n var height = parsePercent(itemDetailModel.get('height'), posInfo.r);\n var detailColor = seriesModel.get(['progress', 'show']) ? data.getItemVisual(idx, 'style').fill : autoColor;\n var labelEl = newDetailEls[idx];\n var formatter_1 = itemDetailModel.get('formatter');\n labelEl.attr({\n z2: showPointerAbove ? 0 : 2,\n style: createTextStyle(itemDetailModel, {\n x: detailX,\n y: detailY,\n text: formatLabel(value, formatter_1),\n width: isNaN(width) ? null : width,\n height: isNaN(height) ? null : height,\n align: 'center',\n verticalAlign: 'middle'\n }, {\n inheritColor: detailColor\n })\n });\n setLabelValueAnimation(labelEl, {\n normal: itemDetailModel\n }, value, function (value) {\n return formatLabel(value, formatter_1);\n });\n hasAnimation && animateLabelValue(labelEl, idx, data, seriesModel, {\n getFormattedLabel: function (labelDataIndex, status, dataType, labelDimIndex, fmt, extendParams) {\n return formatLabel(extendParams ? extendParams.interpolatedValue : value, formatter_1);\n }\n });\n itemGroup.add(labelEl);\n }\n\n contentGroup.add(itemGroup);\n });\n this.group.add(contentGroup);\n this._titleEls = newTitleEls;\n this._detailEls = newDetailEls;\n };\n\n GaugeView.type = 'gauge';\n return GaugeView;\n}(ChartView);\n\nexport default GaugeView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply';\nimport SeriesModel from '../../model/Series';\n\nvar GaugeSeriesModel =\n/** @class */\nfunction (_super) {\n __extends(GaugeSeriesModel, _super);\n\n function GaugeSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = GaugeSeriesModel.type;\n _this.visualStyleAccessPath = 'itemStyle';\n return _this;\n }\n\n GaugeSeriesModel.prototype.getInitialData = function (option, ecModel) {\n return createSeriesDataSimply(this, ['value']);\n };\n\n GaugeSeriesModel.type = 'series.gauge';\n GaugeSeriesModel.defaultOption = {\n zlevel: 0,\n z: 2,\n colorBy: 'data',\n // 默认全局居中\n center: ['50%', '50%'],\n legendHoverLink: true,\n radius: '75%',\n startAngle: 225,\n endAngle: -45,\n clockwise: true,\n // 最小值\n min: 0,\n // 最大值\n max: 100,\n // 分割段数,默认为10\n splitNumber: 10,\n // 坐标轴线\n axisLine: {\n // 默认显示,属性show控制显示与否\n show: true,\n roundCap: false,\n lineStyle: {\n color: [[1, '#E6EBF8']],\n width: 10\n }\n },\n // 坐标轴线\n progress: {\n // 默认显示,属性show控制显示与否\n show: false,\n overlap: true,\n width: 10,\n roundCap: false,\n clip: true\n },\n // 分隔线\n splitLine: {\n // 默认显示,属性show控制显示与否\n show: true,\n // 属性length控制线长\n length: 10,\n distance: 10,\n // 属性lineStyle(详见lineStyle)控制线条样式\n lineStyle: {\n color: '#63677A',\n width: 3,\n type: 'solid'\n }\n },\n // 坐标轴小标记\n axisTick: {\n // 属性show控制显示与否,默认不显示\n show: true,\n // 每份split细分多少段\n splitNumber: 5,\n // 属性length控制线长\n length: 6,\n distance: 10,\n // 属性lineStyle控制线条样式\n lineStyle: {\n color: '#63677A',\n width: 1,\n type: 'solid'\n }\n },\n axisLabel: {\n show: true,\n distance: 15,\n // formatter: null,\n color: '#464646',\n fontSize: 12\n },\n pointer: {\n icon: null,\n offsetCenter: [0, 0],\n show: true,\n showAbove: true,\n length: '60%',\n width: 6,\n keepAspect: false\n },\n anchor: {\n show: false,\n showAbove: false,\n size: 6,\n icon: 'circle',\n offsetCenter: [0, 0],\n keepAspect: false,\n itemStyle: {\n color: '#fff',\n borderWidth: 0,\n borderColor: '#5470c6'\n }\n },\n title: {\n show: true,\n // x, y,单位px\n offsetCenter: [0, '20%'],\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n color: '#464646',\n fontSize: 16,\n valueAnimation: false\n },\n detail: {\n show: true,\n backgroundColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n borderColor: '#ccc',\n width: 100,\n height: null,\n padding: [5, 10],\n // x, y,单位px\n offsetCenter: [0, '40%'],\n // formatter: null,\n // 其余属性默认使用全局文本样式,详见TEXTSTYLE\n color: '#464646',\n fontSize: 30,\n fontWeight: 'bold',\n lineHeight: 30,\n valueAnimation: false\n }\n };\n return GaugeSeriesModel;\n}(SeriesModel);\n\nexport default GaugeSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as graphic from '../../util/graphic';\nimport { setStatesStylesFromModel, enableHoverEmphasis } from '../../util/states';\nimport ChartView from '../../view/Chart';\nimport { setLabelLineStyle, getLabelLineStatesModels } from '../../label/labelGuideHelper';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';\nimport { saveOldStyle } from '../../animation/basicTrasition';\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 enableHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope'));\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';\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply';\nimport { defaultEmphasis } from '../../util/model';\nimport { makeSeriesEncodeForNameBased } from '../../data/helper/sourceHelper';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider';\nimport SeriesModel from '../../model/Series';\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';\nimport { parsePercent, linearMap } from '../../util/number';\n\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\n\nfunction getSortedIndices(data, sort) {\n var valueDim = data.mapDimension('value');\n var valueArr = data.mapArray(valueDim, function (val) {\n return val;\n });\n var indices = [];\n var isAscending = sort === 'ascending';\n\n for (var i = 0, len = data.count(); i < len; i++) {\n indices[i] = i;\n } // Add custom sortable function & none sortable opetion by \"options.sort\"\n\n\n if (typeof sort === 'function') {\n indices.sort(sort);\n } else if (sort !== 'none') {\n indices.sort(function (a, b) {\n return isAscending ? valueArr[a] - valueArr[b] : valueArr[b] - valueArr[a];\n });\n }\n\n return indices;\n}\n\nfunction labelLayout(data) {\n 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 { __extends } from \"tslib\";\nimport * as graphic from '../../util/graphic';\nimport { setStatesStylesFromModel, enableHoverEmphasis } from '../../util/states';\nimport ChartView from '../../view/Chart';\nimport { numericToNumber } from '../../util/number';\nimport { eqNaN } from 'zrender/lib/core/util';\nimport { saveOldStyle } from '../../animation/basicTrasition';\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 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\n for (var dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) {\n var line = addEl(data, this._dataGroup, dataIndex, dimensions, coordSys);\n line.incremental = true;\n updateElCommon(line, data, dataIndex, seriesScope);\n }\n };\n\n 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 enableHoverEmphasis(el, emphasisModel.get('focus'), emphasisModel.get('blurScope'));\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';\nimport SeriesModel from '../../model/Series';\nimport createSeriesData from '../helper/createSeriesData';\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 { __extends } from \"tslib\";\nimport * as graphic from '../../util/graphic';\nimport { enterEmphasis, leaveEmphasis, enableHoverEmphasis, setStatesStylesFromModel } from '../../util/states';\nimport ChartView from '../../view/Chart';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';\nimport { getECData } from '../../util/innerStore';\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 (typeof sourceColor === 'string' && typeof targetColor === 'string') {\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 enableHoverEmphasis(curve, focus === 'adjacency' ? edge.getAdjacentDataIndices() : focus, emphasisModel.get('blurScope'));\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 enableHoverEmphasis(rect, focus === 'adjacency' ? node.getAdjacentDataIndices() : focus, emphasisModel.get('blurScope'));\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';\nimport createGraphFromNodeEdge from '../helper/createGraphFromNodeEdge';\nimport Model from '../../model/Model';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup';\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';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { groupData } from '../../util/model';\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';\nimport VisualMapping from '../../visual/VisualMapping';\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 createSeriesDataSimply from './createSeriesDataSimply';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { getDimensionTypeByAxis } from '../../data/helper/dimensionHelper';\nimport { makeSeriesEncodeForAxisCoordSys } from '../../data/helper/sourceHelper';\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';\nimport { WhiskerBoxCommonMixin } from '../helper/whiskerBoxCommon';\nimport { mixin } from 'zrender/lib/core/util';\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';\nimport ChartView from '../../view/Chart';\nimport * as graphic from '../../util/graphic';\nimport { setStatesStylesFromModel, enableHoverEmphasis } from '../../util/states';\nimport Path from 'zrender/lib/graphic/Path';\nimport { saveOldStyle } from '../../animation/basicTrasition';\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 setStatesStylesFromModel(el, itemModel);\n enableHoverEmphasis(el, itemModel.get(['emphasis', 'focus']), itemModel.get(['emphasis', 'blurScope']));\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';\nimport { parsePercent } from '../../util/number';\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 extent;\n var baseAxis = groupItem.axis;\n var seriesModels = groupItem.seriesModels;\n var seriesCount = seriesModels.length;\n var boxWidthList = groupItem.boxWidthList = [];\n var boxOffsetList = groupItem.boxOffsetList = [];\n var boundList = [];\n var bandWidth;\n\n if (baseAxis.type === 'category') {\n bandWidth = baseAxis.getBandWidth();\n } else {\n var maxDataCount_1 = 0;\n each(seriesModels, function (seriesModel) {\n maxDataCount_1 = Math.max(maxDataCount_1, seriesModel.getData().count());\n });\n extent = baseAxis.getExtent(), 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 prepareBoxplotData from './prepareBoxplotData';\nimport { throwError, makePrintable } from '../../util/log';\nimport { SOURCE_FORMAT_ARRAY_ROWS } from '../../util/types';\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 { quantile, asc } from '../../util/number';\nimport { isFunction, isString } from 'zrender/lib/core/util';\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 { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util';\nimport ChartView from '../../view/Chart';\nimport * as graphic from '../../util/graphic';\nimport { setStatesStylesFromModel } from '../../util/states';\nimport Path from 'zrender/lib/graphic/Path';\nimport { createClipPath } from '../helper/createClipPathFromCoordSys';\nimport { saveOldStyle } from '../../animation/basicTrasition';\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();\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._isLargeDraw ? this._incrementalRenderLarge(params, seriesModel) : this._incrementalRenderNormal(params, seriesModel);\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 };\n\n CandlestickView.prototype._incrementalRenderLarge = function (params, seriesModel) {\n createLarge(seriesModel, this.group, 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, incremental) {\n var data = seriesModel.getData();\n var largePoints = data.getLayout('largePoints');\n var elP = new LargeBoxPath({\n shape: {\n points: largePoints\n },\n __sign: 1\n });\n group.add(elP);\n var elN = new LargeBoxPath({\n shape: {\n points: largePoints\n },\n __sign: -1\n });\n group.add(elN);\n setLargeStyle(1, elP, seriesModel, data);\n setLargeStyle(-1, elN, seriesModel, data);\n\n if (incremental) {\n elP.incremental = true;\n elN.incremental = true;\n }\n}\n\nfunction setLargeStyle(sign, el, seriesModel, data) {\n // 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';\nimport { WhiskerBoxCommonMixin } from '../helper/whiskerBoxCommon';\nimport { mixin } from 'zrender/lib/core/util';\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';\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';\nimport { extend } from 'zrender/lib/core/util';\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*/\n\n/* global Float32Array */\nimport { subPixelOptimize } from '../../util/graphic';\nimport createRenderPlanner from '../helper/createRenderPlanner';\nimport { parsePercent } from '../../util/number';\nimport { map, retrieve2 } from 'zrender/lib/core/util';\nvar LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;\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 = new LargeArr(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 { __extends } from \"tslib\";\nimport { createSymbol, normalizeSymbolOffset, normalizeSymbolSize } from '../../util/symbol';\nimport { Group } from '../../util/graphic';\nimport { enterEmphasis, leaveEmphasis, enableHoverEmphasis } from '../../util/states';\nimport SymbolClz from './Symbol';\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 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 this.off('mouseover').off('mouseout').off('emphasis').off('normal');\n\n if (effectCfg.showEffectOn === 'render') {\n this._effectCfg ? this.updateEffectAnimation(effectCfg) : this.startEffectAnimation(effectCfg);\n this._effectCfg = effectCfg;\n } else {\n // Not keep old effect config\n this._effectCfg = null;\n this.stopEffectAnimation();\n\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 enableHoverEmphasis(this);\n };\n\n ;\n\n EffectSymbol.prototype.fadeOut = function (cb) {\n this.off('mouseover').off('mouseout');\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';\nimport EffectSymbol from '../helper/EffectSymbol';\nimport * as matrix from 'zrender/lib/core/matrix';\nimport pointsLayout from '../../layout/points';\nimport ChartView from '../../view/Chart';\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';\nimport SeriesModel from '../../model/Series';\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 { __extends } from \"tslib\";\n/**\n * Provide effect for line\n */\n\nimport * as graphic from '../../util/graphic';\nimport Line from './Line';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { createSymbol } from '../../util/symbol';\nimport * as vec2 from 'zrender/lib/core/vector';\nimport * as curveUtil from 'zrender/lib/core/curve';\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 self = this;\n var points = lineData.getItemLayout(idx);\n var period = effectModel.get('period') * 1000;\n var loop = effectModel.get('loop');\n var constantSpeed = effectModel.get('constantSpeed');\n var delayExpr = zrUtil.retrieve(effectModel.get('delay'), function (idx) {\n return idx / lineData.count() * period / 3;\n }); // 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\n if (period > 0) {\n var delayNum = void 0;\n\n if (typeof delayExpr === 'function') {\n delayNum = delayExpr(idx);\n } else {\n delayNum = delayExpr;\n }\n\n if (symbol.__t > 0) {\n delayNum = -period * symbol.__t;\n }\n\n symbol.__t = 0;\n var animator = symbol.animate('', loop).when(period, {\n __t: 1\n }).delay(delayNum).during(function () {\n self._updateSymbolPosition(symbol);\n });\n\n if (!loop) {\n animator.done(function () {\n self.remove(symbol);\n });\n }\n\n animator.start();\n }\n }\n\n this._period = period;\n this._loop = loop;\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';\nimport { enableHoverEmphasis } from '../../util/states';\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 hoverLineStyle = seriesScope && seriesScope.emphasisLineStyle;\n\n if (!seriesScope || lineData.hasItemOption) {\n hoverLineStyle = itemModel.getModel(['emphasis', 'lineStyle']).getLineStyle();\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 = hoverLineStyle;\n enableHoverEmphasis(this);\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';\nimport EffectLine from './EffectLine';\nimport * as vec2 from 'zrender/lib/core/vector';\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';\nimport IncrementalDisplayable from 'zrender/lib/graphic/IncrementalDisplayable';\nimport * as lineContain from 'zrender/lib/contain/line';\nimport * as quadraticContain from 'zrender/lib/contain/quadratic';\nimport { getECData } from '../../util/innerStore';\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 return _super.call(this, opts) || this;\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\n if (shape.polyline) {\n for (var i = 0; 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 (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 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\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 return LargeLinesPath;\n}(graphic.Path);\n\nvar LargeLineDraw =\n/** @class */\nfunction () {\n function LargeLineDraw() {\n this.group = new graphic.Group();\n }\n\n LargeLineDraw.prototype.isPersistent = function () {\n return !this._incremental;\n };\n\n ;\n /**\n * Update symbols draw by new data\n */\n\n LargeLineDraw.prototype.updateData = function (data) {\n this.group.removeAll();\n var lineEl = new LargeLinesPath({\n rectHover: true,\n cursor: 'default'\n });\n lineEl.setShape({\n segs: data.getLayout('linesPoints')\n });\n\n this._setCommon(lineEl, data); // Add back\n\n\n this.group.add(lineEl);\n this._incremental = null;\n };\n\n ;\n /**\n * @override\n */\n\n LargeLineDraw.prototype.incrementalPrepareUpdate = function (data) {\n this.group.removeAll();\n\n this._clearIncremental();\n\n if (data.count() > 5e5) {\n if (!this._incremental) {\n this._incremental = new IncrementalDisplayable({\n silent: true\n });\n }\n\n this.group.add(this._incremental);\n } else {\n this._incremental = null;\n }\n };\n\n ;\n /**\n * @override\n */\n\n LargeLineDraw.prototype.incrementalUpdate = function (taskParams, data) {\n var lineEl = new LargeLinesPath();\n lineEl.setShape({\n segs: data.getLayout('linesPoints')\n });\n\n this._setCommon(lineEl, data, !!this._incremental);\n\n if (!this._incremental) {\n lineEl.rectHover = true;\n lineEl.cursor = 'default';\n lineEl.__startIndex = taskParams.start;\n this.group.add(lineEl);\n } else {\n this._incremental.addDisplayable(lineEl, true);\n }\n };\n\n ;\n /**\n * @override\n */\n\n LargeLineDraw.prototype.remove = function () {\n this._clearIncremental();\n\n this._incremental = null;\n this.group.removeAll();\n };\n\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\n if (!isIncremental) {\n var ecData_1 = getECData(lineEl); // Enable tooltip\n // PENDING May have performance issue when path is extremely large\n\n ecData_1.seriesIndex = hostModel.seriesIndex;\n lineEl.on('mousemove', function (e) {\n ecData_1.dataIndex = null;\n var dataIndex = lineEl.findDataIndex(e.offsetX, e.offsetY);\n\n if (dataIndex > 0) {\n // Provide dataIndex for tooltip\n ecData_1.dataIndex = dataIndex + lineEl.__startIndex;\n }\n });\n }\n };\n\n ;\n\n LargeLineDraw.prototype._clearIncremental = function () {\n var incremental = this._incremental;\n\n if (incremental) {\n incremental.clearDisplaybles();\n }\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';\nvar linesLayout = {\n seriesType: 'lines',\n plan: createRenderPlanner(),\n reset: function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\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';\nimport EffectLine from '../helper/EffectLine';\nimport Line from '../helper/Line';\nimport Polyline from '../helper/Polyline';\nimport EffectPolyline from '../helper/EffectPolyline';\nimport LargeLineDraw from '../helper/LargeLineDraw';\nimport linesLayout from './linesLayout';\nimport { createClipPath } from '../helper/createClipPathFromCoordSys';\nimport ChartView from '../../view/Chart';\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) {\n if (process.env.NODE_ENV !== 'production') {\n var notInIndividual_1 = false;\n ecModel.eachSeries(function (otherSeriesModel) {\n if (otherSeriesModel !== seriesModel && otherSeriesModel.get('zlevel') === zlevel) {\n notInIndividual_1 = true;\n }\n });\n notInIndividual_1 && console.warn('Lines with trail effect should have an individual zlevel');\n }\n\n if (!isSvg) {\n zr.configLayer(zlevel, {\n motionBlur: true,\n lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0)\n });\n }\n }\n\n lineDraw.updateData(data);\n 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.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';\nimport SeriesData from '../../data/SeriesData';\nimport { concatArray, mergeAll, map } from 'zrender/lib/core/util';\nimport CoordinateSystem from '../../core/CoordinateSystem';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup';\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 (typeof data[0] === 'number') {\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.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*/\n\n/* global Uint8ClampedArray */\nimport * as zrUtil from 'zrender/lib/core/util';\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 = zrUtil.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 = zrUtil.createCanvas()); // set brush size\n\n var r = this.pointSize + this.blurSize;\n var d = r * 2;\n brushCanvas.width = d;\n brushCanvas.height = d;\n var ctx = brushCanvas.getContext('2d');\n ctx.clearRect(0, 0, d, d); // in order to render shadow without the distinct circle,\n // draw the distinct circle in an invisible place,\n // and use shadowOffset to draw shadow in the center of the canvas\n\n ctx.shadowOffsetX = d;\n ctx.shadowBlur = this.blurSize; // draw the shadow in black, and use alpha and shadow blur to generate\n // color in color map\n\n ctx.shadowColor = '#000'; // draw circle in the left to the canvas\n\n ctx.beginPath();\n ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true);\n ctx.closePath();\n ctx.fill();\n return brushCanvas;\n };\n /**\n * 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';\nimport { enableHoverEmphasis } from '../../util/states';\nimport HeatmapLayer from './HeatmapLayer';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport ChartView from '../../view/Chart';\nimport { isCoordinateSystemType } from '../../coord/CoordinateSystem';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';\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 }\n\n this.group.removeAll();\n this._incrementalDisplayable = null;\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._renderOnCartesianAndCalendar(seriesModel, api, params.start, params.end, true);\n }\n }\n };\n\n HeatmapView.prototype._renderOnCartesianAndCalendar = function (seriesModel, api, start, end, incremental) {\n var coordSys = seriesModel.coordinateSystem;\n var width;\n var height;\n var xAxisExtent;\n var yAxisExtent;\n\n if (isCoordinateSystemType(coordSys, 'cartesian2d')) {\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 }\n\n width = xAxis.getBandWidth();\n height = yAxis.getBandWidth();\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 labelStatesModels = getLabelStatesModels(seriesModel);\n var focus = seriesModel.get(['emphasis', 'focus']);\n var blurScope = seriesModel.get(['emphasis', 'blurScope']);\n var dataDims = isCoordinateSystemType(coordSys, 'cartesian2d') ? [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 (isCoordinateSystemType(coordSys, 'cartesian2d')) {\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: Math.floor(Math.round(point[0]) - width / 2),\n y: Math.floor(Math.round(point[1]) - height / 2),\n width: Math.ceil(width),\n height: Math.ceil(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 }\n\n var itemModel = data.getItemModel(idx); // Optimization for large datset\n\n if (data.hasItemOption) {\n var emphasisModel = itemModel.getModel('emphasis');\n emphasisStyle = emphasisModel.getModel('itemStyle').getItemStyle();\n blurStyle = itemModel.getModel(['blur', 'itemStyle']).getItemStyle();\n selectStyle = itemModel.getModel(['select', 'itemStyle']).getItemStyle();\n focus = emphasisModel.get('focus');\n blurScope = emphasisModel.get('blurScope');\n labelStatesModels = getLabelStatesModels(itemModel);\n }\n\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 enableHoverEmphasis(rect, focus, blurScope);\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 };\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';\nimport createSeriesData from '../helper/createSeriesData';\nimport CoordinateSystem from '../../core/CoordinateSystem';\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 { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util';\nimport * as graphic from '../../util/graphic';\nimport { enableHoverEmphasis } from '../../util/states';\nimport { createSymbol, normalizeSymbolOffset } from '../../util/symbol';\nimport { parsePercent, isNumeric } from '../../util/number';\nimport ChartView from '../../view/Chart';\nimport { getDefaultLabel } from '../helper/labelHelper';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';\nimport ZRImage from 'zrender/lib/graphic/Image';\nimport { getECData } from '../../util/innerStore';\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 }\n\n outputSymbolMeta.pxSign = boundingLength > 0 ? 1 : boundingLength < 0 ? -1 : 0;\n}\n\nfunction convertToCoordOnAxis(axis, value) {\n return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value)));\n} // Support ['100%', '100%']\n\n\nfunction prepareSymbolSize(data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength, pxSign, symbolPatternSize, opt, 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;\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 pathes = [];\n eachPath(bar, function (path) {\n pathes.push(path);\n });\n bar.__pictorialMainPath && pathes.push(bar.__pictorialMainPath); // I do not find proper remove animation for clip yet.\n\n bar.__pictorialClipPath && (animationModel = null);\n zrUtil.each(pathes, function (path) {\n graphic.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 enableHoverEmphasis(bar, focus, blurScope);\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';\nimport { inheritDefaultOption } from '../../util/component';\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 { __extends } from \"tslib\";\nimport { ECPolygon } from '../line/poly';\nimport * as graphic from '../../util/graphic';\nimport { setStatesStylesFromModel, enableHoverEmphasis } from '../../util/states';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle';\nimport { bind } from 'zrender/lib/core/util';\nimport DataDiffer from '../../data/DataDiffer';\nimport ChartView from '../../view/Chart';\nimport { saveOldStyle } from '../../animation/basicTrasition';\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 enableHoverEmphasis(polygon, emphasisModel.get('focus'), emphasisModel.get('blurScope'));\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';\nimport prepareSeriesDataSchema from '../../data/helper/createDimensions';\nimport { getDimensionTypeByAxis } from '../../data/helper/dimensionHelper';\nimport SeriesData from '../../data/SeriesData';\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { groupData, SINGLE_REFERRING } from '../../util/model';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider';\nimport { createTooltipMarkup } from '../../component/tooltip/tooltipMarkup';\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';\nimport * as numberUtil from '../../util/number';\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\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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';\nimport * as graphic from '../../util/graphic';\nimport { enableHoverEmphasis, SPECIAL_STATES, DISPLAY_STATES } from '../../util/states';\nimport { createTextStyle } from '../../label/labelStyle';\nimport { getECData } from '../../util/innerStore';\nimport { getSectorCornerRadius } from '../helper/pieHelper';\nimport { createOrUpdatePatternFromDecal } from '../../util/decal';\nimport { saveOldStyle } from '../../animation/basicTrasition';\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 enableHoverEmphasis(this, focusOrIndices, emphasisModel.get('blurScope'));\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 r = (layout.r + layout.r0) / 2;\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 (typeof rotateType === 'number') {\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';\nimport { deprecateReplaceLog } from '../../util/log';\nimport { retrieveTargetInfo, aboveViewRoot } from '../helper/treeHelper';\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';\nimport ChartView from '../../view/Chart';\nimport SunburstPiece from './SunburstPiece';\nimport DataDiffer from '../../data/DataDiffer';\nimport { ROOT_TO_NODE_ACTION } from './sunburstAction';\nimport { windowOpen } from '../../util/format';\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';\nimport SeriesModel from '../../model/Series';\nimport Tree from '../../data/Tree';\nimport { wrapTreePathInfo } from '../helper/treeHelper';\nimport Model from '../../model/Model';\nimport enableAriaDecalForTree from '../helper/enableAriaDecalForTree';\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 = 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.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';\nimport * as zrUtil from 'zrender/lib/core/util'; // 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 itemModel = node.getModel(); // @ts-ignore. TODO this is not provided to developer yet. Rename it.\n\n if (itemModel.get('r0') != null) {\n // @ts-ignore\n rStart = parsePercent(itemModel.get('r0'), size / 2);\n } // @ts-ignore\n\n\n if (itemModel.get('r') != null) {\n // @ts-ignore\n rEnd = parsePercent(itemModel.get('r'), size / 2);\n }\n\n node.setLayout({\n angle: angle,\n startAngle: startAngle,\n endAngle: endAngle,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: rStart,\n r: rEnd\n });\n } // Render children\n\n\n if (node.children && node.children.length) {\n // currentAngle = startAngle;\n var siblingAngle_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 (typeof sortOrder === 'function') {\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';\nimport { extend } from 'zrender/lib/core/util';\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 && typeof color === 'string') {\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 { __extends } from \"tslib\";\nimport createSeriesData from '../helper/createSeriesData';\nimport { makeInner } from '../../util/model';\nimport SeriesModel from '../../model/Series';\nexport var TRANSFORM_PROPS = {\n x: 1,\n y: 1,\n scaleX: 1,\n scaleY: 1,\n originX: 1,\n originY: 1,\n rotation: 1\n}; // 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;\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 { customInnerStore, TRANSFORM_PROPS } from './CustomSeries';\nimport { normalizeToArray } from '../../util/model';\nimport { assert, hasOwn, indexOf, isArrayLike, keys } from 'zrender/lib/core/util';\nimport { cloneValue } from 'zrender/lib/animation/Animator';\nvar LEGACY_TRANSFORM_PROPS = {\n position: ['x', 'y'],\n scale: ['scaleX', 'scaleY'],\n origin: ['originX', 'originY']\n};\n\nfunction setLegacyTransformProp(elOption, targetProps, legacyName) {\n var legacyArr = elOption[legacyName];\n var xyName = LEGACY_TRANSFORM_PROPS[legacyName];\n\n if (legacyArr) {\n targetProps[xyName[0]] = legacyArr[0];\n targetProps[xyName[1]] = legacyArr[1];\n }\n}\n\nfunction setTransformProp(elOption, allProps, name) {\n if (elOption[name] != null) {\n allProps[name] = elOption[name];\n }\n}\n\nfunction setTransformPropToTransitionFrom(transitionFrom, name, fromTransformable // If provided, retrieve from the element.\n) {\n if (fromTransformable) {\n transitionFrom[name] = fromTransformable[name];\n }\n} // See [STRATEGY_TRANSITION]\n\n\nexport function prepareShapeOrExtraTransitionFrom(mainAttr, fromEl, elOption, transFromProps, isInit) {\n var attrOpt = elOption[mainAttr];\n\n if (!attrOpt) {\n return;\n }\n\n var elPropsInAttr = fromEl[mainAttr];\n var transFromPropsInAttr;\n var enterFrom = attrOpt.enterFrom;\n\n if (isInit && enterFrom) {\n !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {});\n var enterFromKeys = keys(enterFrom);\n\n for (var i = 0; i < enterFromKeys.length; i++) {\n // `enterFrom` props are not necessarily also declared in `shape`/`style`/...,\n // for example, `opacity` can only declared in `enterFrom` but not in `style`.\n var key = enterFromKeys[i]; // Do not clone, animator will perform that clone.\n\n transFromPropsInAttr[key] = enterFrom[key];\n }\n }\n\n if (!isInit && elPropsInAttr) {\n if (attrOpt.transition) {\n !transFromPropsInAttr && (transFromPropsInAttr = transFromProps[mainAttr] = {});\n var transitionKeys = normalizeToArray(attrOpt.transition);\n\n for (var i = 0; i < transitionKeys.length; i++) {\n var key = transitionKeys[i];\n var elVal = elPropsInAttr[key];\n\n if (process.env.NODE_ENV !== 'production') {\n checkNonStyleTansitionRefer(key, attrOpt[key], elVal);\n } // Do not clone, see `checkNonStyleTansitionRefer`.\n\n\n transFromPropsInAttr[key] = elVal;\n }\n } else if (indexOf(elOption.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 var leaveTo = attrOpt.leaveTo;\n\n if (leaveTo) {\n var leaveToProps = getOrCreateLeaveToPropsFromEl(fromEl);\n var leaveToPropsInAttr = leaveToProps[mainAttr] || (leaveToProps[mainAttr] = {});\n var leaveToKeys = keys(leaveTo);\n\n for (var i = 0; i < leaveToKeys.length; i++) {\n var key = leaveToKeys[i];\n leaveToPropsInAttr[key] = leaveTo[key];\n }\n }\n}\nexport function 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} // See [STRATEGY_TRANSITION].\n\nexport function prepareTransformTransitionFrom(el, elOption, transFromProps, isInit) {\n var enterFrom = elOption.enterFrom;\n\n if (isInit && enterFrom) {\n var enterFromKeys = keys(enterFrom);\n\n for (var i = 0; i < enterFromKeys.length; i++) {\n var key = enterFromKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n checkTransformPropRefer(key, 'el.enterFrom');\n } // Do not clone, animator will perform that clone.\n\n\n transFromProps[key] = enterFrom[key];\n }\n }\n\n if (!isInit) {\n if (elOption.transition) {\n var transitionKeys = normalizeToArray(elOption.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 checkNonStyleTansitionRefer(key, elOption[key], elVal);\n } // Do not clone, see `checkNonStyleTansitionRefer`.\n\n\n transFromProps[key] = elVal;\n }\n } // This default transition see [STRATEGY_TRANSITION]\n else {\n setTransformPropToTransitionFrom(transFromProps, 'x', el);\n setTransformPropToTransitionFrom(transFromProps, 'y', el);\n }\n }\n\n var leaveTo = elOption.leaveTo;\n\n if (leaveTo) {\n var leaveToProps = getOrCreateLeaveToPropsFromEl(el);\n var leaveToKeys = keys(leaveTo);\n\n for (var i = 0; i < leaveToKeys.length; i++) {\n var key = leaveToKeys[i];\n\n if (process.env.NODE_ENV !== 'production') {\n checkTransformPropRefer(key, 'el.leaveTo');\n }\n\n leaveToProps[key] = leaveTo[key];\n }\n }\n}\nexport function prepareTransformAllPropsFinal(el, elOption, allProps) {\n setLegacyTransformProp(elOption, allProps, 'position');\n setLegacyTransformProp(elOption, allProps, 'scale');\n setLegacyTransformProp(elOption, allProps, 'origin');\n setTransformProp(elOption, allProps, 'x');\n setTransformProp(elOption, allProps, 'y');\n setTransformProp(elOption, allProps, 'scaleX');\n setTransformProp(elOption, allProps, 'scaleY');\n setTransformProp(elOption, allProps, 'originX');\n setTransformProp(elOption, allProps, 'originY');\n setTransformProp(elOption, allProps, 'rotation');\n} // See [STRATEGY_TRANSITION].\n\nexport function prepareStyleTransitionFrom(fromEl, elOption, styleOpt, transFromProps, isInit) {\n if (!styleOpt) {\n return;\n }\n\n var fromElStyle = fromEl.style;\n var transFromStyleProps;\n var enterFrom = styleOpt.enterFrom;\n\n if (isInit && enterFrom) {\n var enterFromKeys = keys(enterFrom);\n !transFromStyleProps && (transFromStyleProps = transFromProps.style = {});\n\n for (var i = 0; i < enterFromKeys.length; i++) {\n var key = enterFromKeys[i]; // Do not clone, animator will perform that clone.\n\n transFromStyleProps[key] = enterFrom[key];\n }\n }\n\n if (!isInit && fromElStyle) {\n if (styleOpt.transition) {\n var transitionKeys = normalizeToArray(styleOpt.transition);\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 && indexOf(elOption.transition, '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 var leaveTo = styleOpt.leaveTo;\n\n if (leaveTo) {\n var leaveToKeys = keys(leaveTo);\n var leaveToProps = getOrCreateLeaveToPropsFromEl(fromEl);\n var leaveToStyleProps = leaveToProps.style || (leaveToProps.style = {});\n\n for (var i = 0; i < leaveToKeys.length; i++) {\n var key = leaveToKeys[i];\n leaveToStyleProps[key] = leaveTo[key];\n }\n }\n}\nvar checkNonStyleTansitionRefer;\n\nif (process.env.NODE_ENV !== 'production') {\n checkNonStyleTansitionRefer = function (propName, optVal, elVal) {\n if (!isArrayLike(optVal)) {\n assert(optVal != null && isFinite(optVal), 'Prop `' + propName + '` must refer to a finite number or ArrayLike for transition.');\n } else {\n // Try not to copy array for performance, but if user use the same object in different\n // call of `renderItem`, it will casue animation transition fail.\n assert(optVal !== elVal, 'Prop `' + propName + '` must use different Array object each time for transition.');\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 assert(hasOwn(TRANSFORM_PROPS, key), 'Prop `' + key + '` is not a permitted in `' + usedIn + '`. ' + 'Only `' + keys(TRANSFORM_PROPS).join('`, `') + '` are permitted.');\n };\n}\n\nfunction getOrCreateLeaveToPropsFromEl(el) {\n var innerEl = customInnerStore(el);\n return innerEl.leaveToProps || (innerEl.leaveToProps = {});\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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, keys, bind, eqNaN, indexOf } from 'zrender/lib/core/util';\nimport * as graphicUtil from '../../util/graphic';\nimport { setDefaultStateProxy, enableHoverEmphasis } from '../../util/states';\nimport * as labelStyleHelper from '../../label/labelStyle';\nimport { getDefaultLabel } from '../helper/labelHelper';\nimport { getLayoutOnAxis } from '../../layout/barGrid';\nimport DataDiffer from '../../data/DataDiffer';\nimport ChartView from '../../view/Chart';\nimport { createClipPath } from '../helper/createClipPathFromCoordSys';\nimport prepareCartesian2d from '../../coord/cartesian/prepareCustom';\nimport prepareGeo from '../../coord/geo/prepareCustom';\nimport prepareSingleAxis from '../../coord/single/prepareCustom';\nimport preparePolar from '../../coord/polar/prepareCustom';\nimport prepareCalendar from '../../coord/calendar/prepareCustom';\nimport Displayable from 'zrender/lib/graphic/Displayable';\nimport { convertToEC4StyleForCustomSerise, isEC4CompatibleStyle, convertFromEC4CompatibleStyle, warnDeprecated } from '../../util/styleCompat';\nimport { warn, throwError } from '../../util/log';\nimport { createOrUpdatePatternFromDecal } from '../../util/decal';\nimport { TRANSFORM_PROPS, STYLE_VISUAL_TYPE, NON_STYLE_VISUAL_PROPS, customInnerStore } from './CustomSeries';\nimport { prepareShapeOrExtraAllPropsFinal, prepareShapeOrExtraTransitionFrom, prepareStyleTransitionFrom, prepareTransformAllPropsFinal, prepareTransformTransitionFrom } from './prepare';\nvar transformPropNamesStr = keys(TRANSFORM_PROPS).join(', ');\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}; // 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 singleAxis: 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 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 doRemoveEl(oldData.getItemGraphicEl(oldIdx), customSeries, group);\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\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 el && el.traverse(setIncrementalAndHoverLayer);\n }\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, isTextContent) {\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 } // 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 } // Save the meta info for further morphing. Like apply on the sub morphing elements.\n\n\n var store = customInnerStore(el);\n store.userDuring = elOption.during;\n var transFromProps = {};\n var propsToSet = {};\n prepareShapeOrExtraTransitionFrom('shape', el, elOption, transFromProps, isInit);\n prepareShapeOrExtraAllPropsFinal('shape', elOption, propsToSet);\n prepareTransformTransitionFrom(el, elOption, transFromProps, isInit);\n prepareTransformAllPropsFinal(el, elOption, propsToSet);\n prepareShapeOrExtraTransitionFrom('extra', el, elOption, transFromProps, isInit);\n prepareShapeOrExtraAllPropsFinal('extra', elOption, propsToSet);\n prepareStyleTransitionFrom(el, elOption, styleOpt, transFromProps, isInit);\n propsToSet.style = styleOpt;\n applyPropsDirectly(el, propsToSet);\n applyPropsTransition(el, dataIndex, seriesModel, transFromProps, isInit);\n applyMiscProps(el, elOption, isTextContent);\n styleOpt ? el.dirty() : el.markRedraw();\n}\n\nfunction applyMiscProps(el, elOption, isTextContent) {\n // Merge by default.\n hasOwn(elOption, 'silent') && (el.silent = elOption.silent);\n hasOwn(elOption, 'ignore') && (el.ignore = elOption.ignore);\n\n if (isDisplayable(el)) {\n hasOwn(elOption, 'invisible') && (el.invisible = elOption.invisible);\n }\n\n if (isPath(el)) {\n hasOwn(elOption, 'autoBatch') && (el.autoBatch = elOption.autoBatch);\n }\n\n if (!isTextContent) {\n // `elOption.info` enables user to mount some info on\n // elements and use them in event handlers.\n // Update them only when user specified, otherwise, remain.\n hasOwn(elOption, 'info') && (customInnerStore(el).info = elOption.info);\n }\n}\n\nfunction applyPropsDirectly(el, // Can be null/undefined\nallPropsFinal) {\n var elDisplayable = el.isGroup ? null : el;\n var styleOpt = allPropsFinal.style;\n\n if (elDisplayable && styleOpt) {\n // PENDING: here the input style object is used directly.\n // Good for performance but bad for compatibility control.\n elDisplayable.useStyle(styleOpt);\n var decalPattern = styleOpt.__decalPattern;\n\n if (decalPattern) {\n elDisplayable.style.decal = decalPattern;\n } // 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\n var animators = elDisplayable.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(elDisplayable.style);\n }\n }\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, dataIndex, seriesModel, // Can be null/undefined\ntransFromProps, isInit) {\n if (transFromProps) {\n // NOTE: Do not use `el.updateDuringAnimation` here becuase `el.updateDuringAnimation` will\n // be called mutiple time in each animation frame. For example, if both \"transform\" props\n // and shape props and style props changed, it will generate three animator and called\n // one-by-one in each animation frame.\n // We use the during in `animateTo/From` params.\n var userDuring = customInnerStore(el).userDuring; // For simplicity, if during not specified, the previous during will not work any more.\n\n var cfgDuringCall = userDuring ? bind(duringCall, {\n el: el,\n userDuring: userDuring\n }) : null;\n var cfg = {\n dataIndex: dataIndex,\n isFrom: true,\n during: cfgDuringCall\n };\n isInit ? graphicUtil.initProps(el, transFromProps, seriesModel, cfg) : graphicUtil.updateProps(el, transFromProps, seriesModel, cfg);\n }\n} // Use it to avoid it be exposed to user.\n\n\nvar tmpDuringScope = {};\nvar customDuringAPI = {\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, 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, 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 shape = tmpDuringScope.el.shape || (tmpDuringScope.el.shape = {});\n shape[key] = val;\n tmpDuringScope.isShapeDirty = true;\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 style = tmpDuringScope.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 tmpDuringScope.isStyleDirty = true;\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 = customInnerStore(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;\n tmpDuringScope.isShapeDirty = false;\n tmpDuringScope.isStyleDirty = false; // Give no `this` to user in \"during\" calling.\n\n scopeUserDuring(customDuringAPI);\n\n if (tmpDuringScope.isShapeDirty && el.dirtyShape) {\n el.dirtyShape();\n }\n\n if (tmpDuringScope.isStyleDirty && el.dirtyStyle) {\n el.dirtyStyle();\n } // markRedraw() will be called by default in during.\n // FIXME `this.markRedraw();` directly ?\n // 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}\n\nfunction updateElOnState(state, el, elStateOpt, styleOpt, attachedTxInfo, isRoot, isTextContent) {\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, true);\n el && data.setItemGraphicEl(dataIndex, el);\n el && enableHoverEmphasis(el, elOption.focus, elOption.blurScope);\n return el;\n}\n\nfunction doCreateOrUpdateEl(api, existsEl, dataIndex, elOption, seriesModel, group, isRoot) {\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, false);\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, isRoot, false);\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, false);\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, true);\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, false, true);\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, false);\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 doRemoveEl(el.childAt(i), seriesModel, el);\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, false);\n}\n\nfunction processRemove(oldIndex) {\n var context = this.context;\n var child = context.oldChildren[oldIndex];\n doRemoveEl(child, context.seriesModel, context.group);\n}\n\nfunction doRemoveEl(el, seriesModel, group) {\n if (el) {\n var leaveToProps = customInnerStore(el).leaveToProps;\n leaveToProps ? graphicUtil.updateProps(el, leaveToProps, seriesModel, {\n cb: function () {\n group.remove(el);\n }\n }) : group.remove(el);\n }\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 { separateMorph, combineMorph, morphPath, isCombineMorphing } from 'zrender/lib/tool/morphPath';\nimport { Path } from '../util/graphic';\nimport { defaults, isArray } from 'zrender/lib/core/util';\nimport { getAnimationConfig } from './basicTrasition';\nimport { clonePath } from 'zrender/lib/tool/path';\n\nfunction isMultiple(elements) {\n return isArray(elements[0]);\n}\n\nfunction prepareMorphBatches(one, many) {\n var batches = [];\n var batchCount = one.length;\n\n for (var i = 0; i < batchCount; i++) {\n batches.push({\n one: one[i],\n many: []\n });\n }\n\n for (var i = 0; i < many.length; i++) {\n var len = many[i].length;\n var k = void 0;\n\n for (k = 0; k < len; k++) {\n batches[k % batchCount].many.push(many[i][k]);\n }\n }\n\n var off = 0; // If one has more paths than each one of many. average them.\n\n for (var i = batchCount - 1; i >= 0; i--) {\n if (!batches[i].many.length) {\n var moveFrom = batches[off].many;\n\n if (moveFrom.length <= 1) {\n // Not enough\n // Start from the first one.\n if (off) {\n off = 0;\n } else {\n return batches;\n }\n }\n\n var len = moveFrom.length;\n var mid = Math.ceil(len / 2);\n batches[i].many = moveFrom.slice(mid, len);\n batches[off].many = moveFrom.slice(0, mid);\n off++;\n }\n }\n\n return batches;\n}\n\nvar pathDividers = {\n clone: function (params) {\n var ret = []; // Fitting the alpha\n\n var approxOpacity = 1 - Math.pow(1 - params.path.style.opacity, 1 / params.count);\n\n for (var i = 0; i < params.count; i++) {\n var cloned = clonePath(params.path);\n cloned.setStyle('opacity', approxOpacity);\n ret.push(cloned);\n }\n\n return ret;\n },\n // Use the default divider\n split: null\n};\nexport function applyMorphAnimation(from, to, divideShape, seriesModel, dataIndex, animateOtherProps) {\n if (!from.length || !to.length) {\n return;\n }\n\n var updateAnimationCfg = getAnimationConfig('update', seriesModel, dataIndex);\n\n if (!(updateAnimationCfg && updateAnimationCfg.duration > 0)) {\n return;\n }\n\n var animationDelay = seriesModel.getModel('universalTransition').get('delay');\n var animationCfg = Object.assign({\n // Need to setToFinal so the further calculation based on the style can be correct.\n // Like emphasis color.\n setToFinal: true\n }, updateAnimationCfg);\n var many;\n var one;\n\n if (isMultiple(from)) {\n // manyToOne\n many = from;\n one = to;\n }\n\n if (isMultiple(to)) {\n // oneToMany\n many = to;\n one = from;\n }\n\n function morphOneBatch(batch, fromIsMany, animateIndex, animateCount, forceManyOne) {\n var batchMany = batch.many;\n var batchOne = batch.one;\n\n if (batchMany.length === 1 && !forceManyOne) {\n // Is one to one\n var batchFrom = fromIsMany ? batchMany[0] : batchOne;\n var batchTo = fromIsMany ? batchOne : batchMany[0];\n\n if (isCombineMorphing(batchFrom)) {\n // Keep doing combine animation.\n morphOneBatch({\n many: [batchFrom],\n one: batchTo\n }, true, animateIndex, animateCount, true);\n } else {\n var individualAnimationCfg = animationDelay ? defaults({\n delay: animationDelay(animateIndex, animateCount)\n }, animationCfg) : animationCfg;\n morphPath(batchFrom, batchTo, individualAnimationCfg);\n animateOtherProps(batchFrom, batchTo, batchFrom, batchTo, individualAnimationCfg);\n }\n } else {\n var separateAnimationCfg = defaults({\n dividePath: pathDividers[divideShape],\n individualDelay: animationDelay && function (idx, count, fromPath, toPath) {\n return animationDelay(idx + animateIndex, animateCount);\n }\n }, animationCfg);\n\n var _a = fromIsMany ? combineMorph(batchMany, batchOne, separateAnimationCfg) : separateMorph(batchOne, batchMany, separateAnimationCfg),\n fromIndividuals = _a.fromIndividuals,\n toIndividuals = _a.toIndividuals;\n\n var count = fromIndividuals.length;\n\n for (var k = 0; k < count; k++) {\n var individualAnimationCfg = animationDelay ? defaults({\n delay: animationDelay(k, count)\n }, animationCfg) : animationCfg;\n animateOtherProps(fromIndividuals[k], toIndividuals[k], fromIsMany ? batchMany[k] : batch.one, fromIsMany ? batch.one : batchMany[k], individualAnimationCfg);\n }\n }\n }\n\n var fromIsMany = many ? many === from // Is one to one. If the path number not match. also needs do merge and separate morphing.\n : from.length > to.length;\n var morphBatches = many ? prepareMorphBatches(one, many) : prepareMorphBatches(fromIsMany ? to : from, [fromIsMany ? from : to]);\n var animateCount = 0;\n\n for (var i = 0; i < morphBatches.length; i++) {\n animateCount += morphBatches[i].many.length;\n }\n\n var animateIndex = 0;\n\n for (var i = 0; i < morphBatches.length; i++) {\n morphOneBatch(morphBatches[i], fromIsMany, animateIndex, animateCount);\n animateIndex += morphBatches[i].many.length;\n }\n}\nexport function getPathList(elements) {\n if (!elements) {\n return [];\n }\n\n if (isArray(elements)) {\n var pathList_1 = [];\n\n for (var i = 0; i < elements.length; i++) {\n pathList_1.push(getPathList(elements[i]));\n }\n\n return pathList_1;\n }\n\n var pathList = [];\n elements.traverse(function (el) {\n if (el instanceof Path && !el.disableMorphing && !el.invisible && !el.ignore) {\n pathList.push(el);\n }\n });\n return pathList;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Universal transitions that can animate between any shapes(series) and any properties in any amounts.\nimport { SERIES_UNIVERSAL_TRANSITION_PROP } from '../model/Series';\nimport { createHashMap, each, map, filter, isArray } from 'zrender/lib/core/util';\nimport { applyMorphAnimation, getPathList } from './morphTransitionHelper';\nimport Path from 'zrender/lib/graphic/Path';\nimport { initProps } from '../util/graphic';\nimport DataDiffer from '../data/DataDiffer';\nimport { makeInner, normalizeToArray } from '../util/model';\nimport { warn } from '../util/log';\nimport { getAnimationConfig, getOldStyle } from './basicTrasition';\nimport Displayable from 'zrender/lib/graphic/Displayable';\nvar DATA_COUNT_THRESHOLD = 1e4;\n;\nvar getUniversalTransitionGlobalStore = makeInner();\n\nfunction getGroupIdDimension(data) {\n var dimensions = data.dimensions;\n\n for (var i = 0; i < dimensions.length; i++) {\n var dimInfo = data.getDimensionInfo(dimensions[i]);\n\n if (dimInfo && dimInfo.otherDims.itemGroupId === 0) {\n return dimensions[i];\n }\n }\n}\n\nfunction flattenDataDiffItems(list) {\n var items = [];\n each(list, function (seriesInfo) {\n var data = seriesInfo.data;\n\n if (data.count() > DATA_COUNT_THRESHOLD) {\n if (process.env.NODE_ENV !== 'production') {\n warn('Universal transition is disabled on large data > 10k.');\n }\n\n return;\n }\n\n var indices = data.getIndices();\n var groupDim = getGroupIdDimension(data);\n\n for (var dataIndex = 0; dataIndex < indices.length; dataIndex++) {\n items.push({\n data: data,\n dim: seriesInfo.dim || groupDim,\n divide: seriesInfo.divide,\n dataIndex: dataIndex\n });\n }\n });\n return items;\n}\n\nfunction fadeInElement(newEl, newSeries, newIndex) {\n newEl.traverse(function (el) {\n if (el instanceof Path) {\n // TODO use fade in animation for target element.\n initProps(el, {\n style: {\n opacity: 0\n }\n }, newSeries, {\n dataIndex: newIndex,\n isFrom: true\n });\n }\n });\n}\n\nfunction removeEl(el) {\n if (el.parent) {\n // Bake parent transform to element.\n // So it can still have proper transform to transition after it's removed.\n var computedTransform = el.getComputedTransform();\n el.setLocalTransform(computedTransform);\n el.parent.remove(el);\n }\n}\n\nfunction stopAnimation(el) {\n el.stopAnimation();\n\n if (el.isGroup) {\n el.traverse(function (child) {\n child.stopAnimation();\n });\n }\n}\n\nfunction animateElementStyles(el, dataIndex, seriesModel) {\n var animationConfig = getAnimationConfig('update', seriesModel, dataIndex);\n animationConfig && el.traverse(function (child) {\n if (child instanceof Displayable) {\n var oldStyle = getOldStyle(child);\n\n if (oldStyle) {\n child.animateFrom({\n style: oldStyle\n }, animationConfig);\n }\n }\n });\n}\n\nfunction isAllIdSame(oldDiffItems, newDiffItems) {\n var len = oldDiffItems.length;\n\n if (len !== newDiffItems.length) {\n return false;\n }\n\n for (var i = 0; i < len; i++) {\n var oldItem = oldDiffItems[i];\n var newItem = newDiffItems[i];\n\n if (oldItem.data.getId(oldItem.dataIndex) !== newItem.data.getId(newItem.dataIndex)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction transitionBetween(oldList, newList, api) {\n var oldDiffItems = flattenDataDiffItems(oldList);\n var newDiffItems = flattenDataDiffItems(newList);\n\n function updateMorphingPathProps(from, to, rawFrom, rawTo, animationCfg) {\n if (rawFrom || from) {\n to.animateFrom({\n style: (rawFrom || from).style\n }, animationCfg);\n }\n }\n\n function findKeyDim(items) {\n for (var i = 0; i < items.length; i++) {\n if (items[i].dim) {\n return items[i].dim;\n }\n }\n }\n\n var oldKeyDim = findKeyDim(oldDiffItems);\n var newKeyDim = findKeyDim(newDiffItems);\n var hasMorphAnimation = false;\n\n function createKeyGetter(isOld, onlyGetId) {\n return function (diffItem) {\n var data = diffItem.data;\n var dataIndex = diffItem.dataIndex; // TODO if specified dim\n\n if (onlyGetId) {\n return data.getId(dataIndex);\n } // Use group id as transition key by default.\n // So we can achieve multiple to multiple animation like drilldown / up naturally.\n // If group id not exits. Use id instead. If so, only one to one transition will be applied.\n\n\n var dataGroupId = data.hostModel && data.hostModel.get('dataGroupId'); // If specified key dimension(itemGroupId by default). Use this same dimension from other data.\n // PENDING: If only use key dimension of newData.\n\n var keyDim = isOld ? oldKeyDim || newKeyDim : newKeyDim || oldKeyDim;\n var dimInfo = keyDim && data.getDimensionInfo(keyDim);\n var dimOrdinalMeta = dimInfo && dimInfo.ordinalMeta;\n\n if (dimInfo) {\n // Get from encode.itemGroupId.\n var key = data.get(dimInfo.name, dataIndex);\n\n if (dimOrdinalMeta) {\n return dimOrdinalMeta.categories[key] || key + '';\n }\n\n return key + '';\n } // Get groupId from raw item. { groupId: '' }\n\n\n var itemVal = data.getRawDataItem(dataIndex);\n\n if (itemVal && itemVal.groupId) {\n return itemVal.groupId + '';\n }\n\n return dataGroupId || data.getId(dataIndex);\n };\n } // Use id if it's very likely to be an one to one animation\n // It's more robust than groupId\n // TODO Check if key dimension is specified.\n\n\n var useId = isAllIdSame(oldDiffItems, newDiffItems);\n var isElementStillInChart = {};\n\n if (!useId) {\n // We may have different diff strategy with basicTransition if we use other dimension as key.\n // If so, we can't simply check if oldEl is same with newEl. We need a map to check if oldEl is still being used in the new chart.\n // We can't use the elements that already being morphed. Let it keep it's original basic transition.\n for (var i = 0; i < newDiffItems.length; i++) {\n var newItem = newDiffItems[i];\n var el = newItem.data.getItemGraphicEl(newItem.dataIndex);\n\n if (el) {\n isElementStillInChart[el.id] = true;\n }\n }\n }\n\n function updateOneToOne(newIndex, oldIndex) {\n var oldItem = oldDiffItems[oldIndex];\n var newItem = newDiffItems[newIndex];\n var newSeries = newItem.data.hostModel; // TODO Mark this elements is morphed and don't morph them anymore\n\n var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex);\n var newEl = newItem.data.getItemGraphicEl(newItem.dataIndex); // Can't handle same elements.\n\n if (oldEl === newEl) {\n newEl && animateElementStyles(newEl, newItem.dataIndex, newSeries);\n return;\n }\n\n if ( // We can't use the elements that already being morphed\n oldEl && isElementStillInChart[oldEl.id]) {\n return;\n }\n\n if (newEl) {\n // TODO: If keep animating the group in case\n // some of the elements don't want to be morphed.\n // TODO Label?\n stopAnimation(newEl);\n\n if (oldEl) {\n stopAnimation(oldEl); // If old element is doing leaving animation. stop it and remove it immediately.\n\n removeEl(oldEl);\n hasMorphAnimation = true;\n applyMorphAnimation(getPathList(oldEl), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps);\n } else {\n fadeInElement(newEl, newSeries, newIndex);\n }\n } // else keep oldEl leaving animation.\n\n }\n\n new DataDiffer(oldDiffItems, newDiffItems, createKeyGetter(true, useId), createKeyGetter(false, useId), null, 'multiple').update(updateOneToOne).updateManyToOne(function (newIndex, oldIndices) {\n var newItem = newDiffItems[newIndex];\n var newData = newItem.data;\n var newSeries = newData.hostModel;\n var newEl = newData.getItemGraphicEl(newItem.dataIndex);\n var oldElsList = filter(map(oldIndices, function (idx) {\n return oldDiffItems[idx].data.getItemGraphicEl(oldDiffItems[idx].dataIndex);\n }), function (oldEl) {\n return oldEl && oldEl !== newEl && !isElementStillInChart[oldEl.id];\n });\n\n if (newEl) {\n stopAnimation(newEl);\n\n if (oldElsList.length) {\n // If old element is doing leaving animation. stop it and remove it immediately.\n each(oldElsList, function (oldEl) {\n stopAnimation(oldEl);\n removeEl(oldEl);\n });\n hasMorphAnimation = true;\n applyMorphAnimation(getPathList(oldElsList), getPathList(newEl), newItem.divide, newSeries, newIndex, updateMorphingPathProps);\n } else {\n fadeInElement(newEl, newSeries, newItem.dataIndex);\n }\n } // else keep oldEl leaving animation.\n\n }).updateOneToMany(function (newIndices, oldIndex) {\n var oldItem = oldDiffItems[oldIndex];\n var oldEl = oldItem.data.getItemGraphicEl(oldItem.dataIndex); // We can't use the elements that already being morphed\n\n if (oldEl && isElementStillInChart[oldEl.id]) {\n return;\n }\n\n var newElsList = filter(map(newIndices, function (idx) {\n return newDiffItems[idx].data.getItemGraphicEl(newDiffItems[idx].dataIndex);\n }), function (el) {\n return el && el !== oldEl;\n });\n var newSeris = newDiffItems[newIndices[0]].data.hostModel;\n\n if (newElsList.length) {\n each(newElsList, function (newEl) {\n return stopAnimation(newEl);\n });\n\n if (oldEl) {\n stopAnimation(oldEl); // If old element is doing leaving animation. stop it and remove it immediately.\n\n removeEl(oldEl);\n hasMorphAnimation = true;\n applyMorphAnimation(getPathList(oldEl), getPathList(newElsList), oldItem.divide, // Use divide on old.\n newSeris, newIndices[0], updateMorphingPathProps);\n } else {\n each(newElsList, function (newEl) {\n return fadeInElement(newEl, newSeris, newIndices[0]);\n });\n }\n } // else keep oldEl leaving animation.\n\n }).updateManyToMany(function (newIndices, oldIndices) {\n // If two data are same and both have groupId.\n // Normally they should be diff by id.\n new DataDiffer(oldIndices, newIndices, function (rawIdx) {\n return oldDiffItems[rawIdx].data.getId(oldDiffItems[rawIdx].dataIndex);\n }, function (rawIdx) {\n return newDiffItems[rawIdx].data.getId(newDiffItems[rawIdx].dataIndex);\n }).update(function (newIndex, oldIndex) {\n // Use the original index\n updateOneToOne(newIndices[newIndex], oldIndices[oldIndex]);\n }).execute();\n }).execute();\n\n if (hasMorphAnimation) {\n each(newList, function (_a) {\n var data = _a.data;\n var seriesModel = data.hostModel;\n var view = seriesModel && api.getViewOfSeriesModel(seriesModel);\n var animationCfg = getAnimationConfig('update', seriesModel, 0); // use 0 index.\n\n if (view && seriesModel.isAnimationEnabled() && animationCfg && animationCfg.duration > 0) {\n view.group.traverse(function (el) {\n if (el instanceof Path && !el.animators.length) {\n // We can't accept there still exists element that has no animation\n // if universalTransition is enabled\n el.animateFrom({\n style: {\n opacity: 0\n }\n }, animationCfg);\n }\n });\n }\n });\n }\n}\n\nfunction getSeriesTransitionKey(series) {\n var seriesKey = series.getModel('universalTransition').get('seriesKey');\n\n if (!seriesKey) {\n // Use series id by default.\n return series.id;\n }\n\n return seriesKey;\n}\n\nfunction convertArraySeriesKeyToString(seriesKey) {\n if (isArray(seriesKey)) {\n // Order independent.\n return seriesKey.sort().join(',');\n }\n\n return seriesKey;\n}\n\nfunction getDivideShapeFromData(data) {\n if (data.hostModel) {\n return data.hostModel.getModel('universalTransition').get('divideShape');\n }\n}\n\nfunction findTransitionSeriesBatches(globalStore, params) {\n var updateBatches = createHashMap();\n var oldDataMap = createHashMap(); // Map that only store key in array seriesKey.\n // Which is used to query the old data when transition from one to multiple series.\n\n var oldDataMapForSplit = createHashMap();\n each(globalStore.oldSeries, function (series, idx) {\n var oldData = globalStore.oldData[idx];\n var transitionKey = getSeriesTransitionKey(series);\n var transitionKeyStr = convertArraySeriesKeyToString(transitionKey);\n oldDataMap.set(transitionKeyStr, oldData);\n\n if (isArray(transitionKey)) {\n // Same key can't in different array seriesKey.\n each(transitionKey, function (key) {\n oldDataMapForSplit.set(key, {\n data: oldData,\n key: transitionKeyStr\n });\n });\n }\n });\n\n function checkTransitionSeriesKeyDuplicated(transitionKeyStr) {\n if (updateBatches.get(transitionKeyStr)) {\n warn(\"Duplicated seriesKey in universalTransition \" + transitionKeyStr);\n }\n }\n\n each(params.updatedSeries, function (series) {\n if (series.isUniversalTransitionEnabled() && series.isAnimationEnabled()) {\n var newData = series.getData();\n var transitionKey = getSeriesTransitionKey(series);\n var transitionKeyStr = convertArraySeriesKeyToString(transitionKey); // Only transition between series with same id.\n\n var oldData = oldDataMap.get(transitionKeyStr); // string transition key is the best match.\n\n if (oldData) {\n if (process.env.NODE_ENV !== 'production') {\n checkTransitionSeriesKeyDuplicated(transitionKeyStr);\n } // TODO check if data is same?\n\n\n updateBatches.set(transitionKeyStr, {\n oldSeries: [{\n divide: getDivideShapeFromData(oldData),\n data: oldData\n }],\n newSeries: [{\n divide: getDivideShapeFromData(newData),\n data: newData\n }]\n });\n } else {\n // Transition from multiple series.\n if (isArray(transitionKey)) {\n if (process.env.NODE_ENV !== 'production') {\n checkTransitionSeriesKeyDuplicated(transitionKeyStr);\n }\n\n var oldSeries_1 = [];\n each(transitionKey, function (key) {\n var oldData = oldDataMap.get(key);\n\n if (oldData) {\n oldSeries_1.push({\n divide: getDivideShapeFromData(oldData),\n data: oldData\n });\n }\n });\n\n if (oldSeries_1.length) {\n updateBatches.set(transitionKeyStr, {\n oldSeries: oldSeries_1,\n newSeries: [{\n data: newData,\n divide: getDivideShapeFromData(newData)\n }]\n });\n }\n } else {\n // Try transition to multiple series.\n var oldData_1 = oldDataMapForSplit.get(transitionKey);\n\n if (oldData_1) {\n var batch = updateBatches.get(oldData_1.key);\n\n if (!batch) {\n batch = {\n oldSeries: [{\n data: oldData_1.data,\n divide: getDivideShapeFromData(oldData_1.data)\n }],\n newSeries: []\n };\n updateBatches.set(oldData_1.key, batch);\n }\n\n batch.newSeries.push({\n data: newData,\n divide: getDivideShapeFromData(newData)\n });\n }\n }\n }\n }\n });\n return updateBatches;\n}\n\nfunction querySeries(series, finder) {\n for (var i = 0; i < series.length; i++) {\n var found = finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id;\n\n if (found) {\n return i;\n }\n }\n}\n\nfunction transitionSeriesFromOpt(transitionOpt, globalStore, params, api) {\n var from = [];\n var to = [];\n each(normalizeToArray(transitionOpt.from), function (finder) {\n var idx = querySeries(globalStore.oldSeries, finder);\n\n if (idx >= 0) {\n from.push({\n data: globalStore.oldData[idx],\n // TODO can specify divideShape in transition.\n divide: getDivideShapeFromData(globalStore.oldData[idx]),\n dim: finder.dimension\n });\n }\n });\n each(normalizeToArray(transitionOpt.to), function (finder) {\n var idx = querySeries(params.updatedSeries, finder);\n\n if (idx >= 0) {\n var data = params.updatedSeries[idx].getData();\n to.push({\n data: data,\n divide: getDivideShapeFromData(data),\n dim: finder.dimension\n });\n }\n });\n\n if (from.length > 0 && to.length > 0) {\n transitionBetween(from, to, api);\n }\n}\n\nexport function installUniversalTransition(registers) {\n registers.registerUpdateLifecycle('series:beforeupdate', function (ecMOdel, api, params) {\n each(normalizeToArray(params.seriesTransition), function (transOpt) {\n each(normalizeToArray(transOpt.to), function (finder) {\n var series = params.updatedSeries;\n\n for (var i = 0; i < series.length; i++) {\n if (finder.seriesIndex != null && finder.seriesIndex === series[i].seriesIndex || finder.seriesId != null && finder.seriesId === series[i].id) {\n series[i][SERIES_UNIVERSAL_TRANSITION_PROP] = true;\n }\n }\n });\n });\n });\n registers.registerUpdateLifecycle('series:transition', function (ecModel, api, params) {\n // TODO api provide an namespace that can save stuff per instance\n var globalStore = getUniversalTransitionGlobalStore(api); // TODO multiple to multiple series.\n\n if (globalStore.oldSeries && params.updatedSeries && params.optionChanged) {\n // Use give transition config if its' give;\n var transitionOpt = params.seriesTransition;\n\n if (transitionOpt) {\n each(normalizeToArray(transitionOpt), function (opt) {\n transitionSeriesFromOpt(opt, globalStore, params, api);\n });\n } else {\n // Else guess from series based on transition series key.\n var updateBatches_1 = findTransitionSeriesBatches(globalStore, params);\n each(updateBatches_1.keys(), function (key) {\n var batch = updateBatches_1.get(key);\n transitionBetween(batch.oldSeries, batch.newSeries, api);\n });\n } // Reset\n\n\n each(params.updatedSeries, function (series) {\n // Reset;\n if (series[SERIES_UNIVERSAL_TRANSITION_PROP]) {\n series[SERIES_UNIVERSAL_TRANSITION_PROP] = false;\n }\n });\n } // Save all series of current update. Not only the updated one.\n\n\n var allSeries = ecModel.getSeries();\n var savedSeries = globalStore.oldSeries = [];\n var savedData = globalStore.oldData = [];\n\n for (var i = 0; i < allSeries.length; i++) {\n var data = allSeries[i].getData(); // Only save the data that can have transition.\n // Avoid large data costing too much extra memory\n\n if (data.count() < DATA_COUNT_THRESHOLD) {\n savedSeries.push(allSeries[i]);\n savedData.push(data);\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 './lib/extension';\nexport * from './lib/export/core'; // ----------------------------------------------\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';\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';\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';\nimport { UniversalTransition, LabelLayout } from './lib/export/features'; // -----------------\n// Render engines\n// -----------------\n// Render via Canvas.\n// echarts.init(dom, null, { renderer: 'canvas' })\n\nuse([CanvasRenderer]); // Render via SVG.\n// echarts.init(dom, null, { renderer: 'svg' })\n\nuse([SVGRenderer]); // ----------------\n// Charts (series)\n// ----------------\n// All of the series types, for example:\n// chart.setOption({\n// series: [{\n// type: 'line' // or 'bar', 'pie', ...\n// }]\n// });\n\nuse([LineChart, BarChart, PieChart, ScatterChart, RadarChart, MapChart, TreeChart, TreemapChart, GraphChart, GaugeChart, FunnelChart, ParallelChart, SankeyChart, BoxplotChart, CandlestickChart, EffectScatterChart, LinesChart, HeatmapChart, PictorialBarChart, ThemeRiverChart, SunburstChart, CustomChart]); // -------------------\n// Coordinate systems\n// -------------------\n// All of the axis modules have been included in the\n// coordinate system module below, do not need to\n// make extra import.\n// `cartesian` coordinate system. For some historical\n// reasons, it is named as grid, for example:\n// chart.setOption({\n// grid: {...},\n// xAxis: {...},\n// yAxis: {...},\n// series: [{...}]\n// });\n\nuse(GridComponent); // `polar` coordinate system, for example:\n// chart.setOption({\n// polar: {...},\n// radiusAxis: {...},\n// angleAxis: {...},\n// series: [{\n// coordinateSystem: 'polar'\n// }]\n// });\n\nuse(PolarComponent); // `geo` coordinate system, for example:\n// chart.setOption({\n// geo: {...},\n// series: [{\n// coordinateSystem: 'geo'\n// }]\n// });\n\nuse(GeoComponent); // `singleAxis` coordinate system (notice, it is a coordinate system\n// with only one axis, work for chart like theme river), for example:\n// chart.setOption({\n// singleAxis: {...}\n// series: [{type: 'themeRiver', ...}]\n// });\n\nuse(SingleAxisComponent); // `parallel` coordinate system, only work for parallel series, for example:\n// chart.setOption({\n// parallel: {...},\n// parallelAxis: [{...}, ...],\n// series: [{\n// type: 'parallel'\n// }]\n// });\n\nuse(ParallelComponent); // `calendar` coordinate system. for example,\n// chart.setOptionp({\n// calendar: {...},\n// series: [{\n// coordinateSystem: 'calendar'\n// }]\n// );\n\nuse(CalendarComponent); // ------------------\n// Other components\n// ------------------\n// `graphic` component, for example:\n// chart.setOption({\n// graphic: {...}\n// });\n\nuse(GraphicComponent); // `toolbox` component, for example:\n// chart.setOption({\n// toolbox: {...}\n// });\n\nuse(ToolboxComponent); // `tooltip` component, for example:\n// chart.setOption({\n// tooltip: {...}\n// });\n\nuse(TooltipComponent); // `axisPointer` component, for example:\n// chart.setOption({\n// tooltip: {axisPointer: {...}, ...}\n// });\n// Or\n// chart.setOption({\n// axisPointer: {...}\n// });\n\nuse(AxisPointerComponent); // `brush` component, for example:\n// chart.setOption({\n// brush: {...}\n// });\n// Or\n// chart.setOption({\n// tooltip: {feature: {brush: {...}}\n// })\n\nuse(BrushComponent); // `title` component, for example:\n// chart.setOption({\n// title: {...}\n// });\n\nuse(TitleComponent); // `timeline` component, for example:\n// chart.setOption({\n// timeline: {...}\n// });\n\nuse(TimelineComponent); // `markPoint` component, for example:\n// chart.setOption({\n// series: [{markPoint: {...}}]\n// });\n\nuse(MarkPointComponent); // `markLine` component, for example:\n// chart.setOption({\n// series: [{markLine: {...}}]\n// });\n\nuse(MarkLineComponent); // `markArea` component, for example:\n// chart.setOption({\n// series: [{markArea: {...}}]\n// });\n\nuse(MarkAreaComponent); // `legend` component not scrollable. for example:\n// chart.setOption({\n// legend: {...}\n// });\n\nuse(LegendComponent); // `dataZoom` component including both `dataZoomInside` and `dataZoomSlider`.\n\nuse(DataZoomComponent); // `dataZoom` component providing drag, pinch, wheel behaviors\n// inside coodinate system, for example:\n// chart.setOption({\n// dataZoom: {type: 'inside'}\n// });\n\nuse(DataZoomInsideComponent); // `dataZoom` component providing a slider bar, for example:\n// chart.setOption({\n// dataZoom: {type: 'slider'}\n// });\n\nuse(DataZoomSliderComponent); // `visualMap` component including both `visualMapContinuous` and `visualMapPiecewise`.\n\nuse(VisualMapComponent); // `visualMap` component providing continuous bar, for example:\n// chart.setOption({\n// visualMap: {type: 'continuous'}\n// });\n\nuse(VisualMapContinuousComponent); // `visualMap` component providing pieces bar, for example:\n// chart.setOption({\n// visualMap: {type: 'piecewise'}\n// });\n\nuse(VisualMapPiecewiseComponent); // `aria` component providing aria, for example:\n// chart.setOption({\n// aria: {...}\n// });\n\nuse(AriaComponent); // dataset transform\n// chart.setOption({\n// dataset: {\n// transform: []\n// }\n// });\n\nuse(TransformComponent);\nuse(DatasetComponent); // universal transition\n// chart.setOption({\n// series: {\n// universalTransition: { enabled: true }\n// }\n// })\n\nuse(UniversalTransition); // label layout\n// chart.setOption({\n// series: {\n// labelLayout: { hideOverlap: true }\n// }\n// })\n\nuse(LabelLayout);","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport LineSeries from './LineSeries';\nimport LineView from './LineView'; // In case developer forget to include grid component\n\nimport layoutPoints from '../../layout/points';\nimport dataSample from '../../processor/dataSample';\nexport function install(registers) {\n registers.registerChartView(LineView);\n registers.registerSeriesModel(LineSeries);\n registers.registerLayout(layoutPoints('line', true));\n registers.registerVisual({\n seriesType: 'line',\n reset: function (seriesModel) {\n var data = seriesModel.getData(); // Visual coding for legend\n\n var lineStyle = seriesModel.getModel('lineStyle').getLineStyle();\n\n if (lineStyle && !lineStyle.stroke) {\n // Fill in visual should be palette color if\n // has color callback\n lineStyle.stroke = data.getVisual('style').fill;\n }\n\n data.setVisual('legendLineStyle', lineStyle);\n }\n }); // Down sample after filter\n\n registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, dataSample('line'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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';\nimport { layout, largeLayout } from '../../layout/barGrid';\nimport dataSample from '../../processor/dataSample';\nimport BarSeries from './BarSeries';\nimport BarView from './BarView';\nexport function install(registers) {\n registers.registerChartView(BarView);\n registers.registerSeriesModel(BarSeries);\n registers.registerLayout(registers.PRIORITY.VISUAL.LAYOUT, zrUtil.curry(layout, 'bar')); // Use higher prority to avoid to be blocked by other overall layout, which do not\n // only exist in this module, but probably also exist in other modules, like `barPolar`.\n\n registers.registerLayout(registers.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, largeLayout); // Down sample after filter\n\n registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, dataSample('bar'));\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: 'changeAxisOrder',\n event: 'changeAxisOrder',\n update: 'update'\n }, function (payload, ecModel) {\n var componentType = payload.componentType || 'series';\n ecModel.eachComponent({\n mainType: componentType,\n query: payload\n }, function (componentModel) {\n if (payload.sortInfo) {\n componentModel.axis.setCategorySortInfo(payload.sortInfo);\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';\nimport pieLayout from '../pie/pieLayout';\nimport dataFilter from '../../processor/dataFilter';\nimport { curry } from 'zrender/lib/core/util';\nimport PieView from './PieView';\nimport PieSeriesModel from './PieSeries';\nimport negativeDataFilter from '../../processor/negativeDataFilter';\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 { use } from '../../extension';\nimport ScatterSeriesModel from './ScatterSeries';\nimport ScatterView from './ScatterView';\nimport { install as installGridSimple } from '../../component/grid/installSimple';\nimport layoutPoints from '../../layout/points';\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 { use } from '../../extension';\nimport radarLayout from '../radar/radarLayout';\nimport dataFilter from '../../processor/dataFilter';\nimport backwardCompat from '../radar/backwardCompat';\nimport RadarView from './RadarView';\nimport RadarSeriesModel from './RadarSeries';\nimport { install as installRadarComponent } from '../../component/radar/install';\nexport function install(registers) {\n use(installRadarComponent);\n registers.registerChartView(RadarView);\n registers.registerSeriesModel(RadarSeriesModel);\n registers.registerLayout(radarLayout);\n registers.registerProcessor(dataFilter('radar'));\n registers.registerPreprocessor(backwardCompat);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension';\nimport MapView from './MapView';\nimport MapSeries from './MapSeries';\nimport mapDataStatistic from './mapDataStatistic';\nimport mapSymbolLayout from './mapSymbolLayout';\nimport { createLegacyDataSelectAction } from '../../legacy/dataSelectAction';\nimport { install as installGeo } from '../../component/geo/install';\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*/\nimport TreeView from './TreeView';\nimport TreeSeriesModel from './TreeSeries';\nimport treeLayout from './treeLayout';\nimport treeVisual from './treeVisual';\nimport { installTreeAction } from './treeAction';\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 { updateCenterAndZoom } from '../../action/roamHelper';\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) {\n ecModel.eachComponent({\n mainType: 'series',\n subType: 'tree',\n query: payload\n }, function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n var res = updateCenterAndZoom(coordSys, payload);\n seriesModel.setCenter && seriesModel.setCenter(res.center);\n seriesModel.setZoom && seriesModel.setZoom(res.zoom);\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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';\nimport TreemapSeriesModel from './TreemapSeries';\nimport TreemapView from './TreemapView';\nimport treemapVisual from './treemapVisual';\nimport treemapLayout from './treemapLayout';\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 GaugeView from './GaugeView';\nimport GaugeSeriesModel from './GaugeSeries';\nexport function install(registers) {\n registers.registerChartView(GaugeView);\n registers.registerSeriesModel(GaugeSeriesModel);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport FunnelView from './FunnelView';\nimport FunnelSeriesModel from './FunnelSeries';\nimport funnelLayout from './funnelLayout';\nimport dataFilter from '../../processor/dataFilter';\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 { use } from '../../extension';\nimport ParallelView from './ParallelView';\nimport ParallelSeriesModel from './ParallelSeries';\nimport parallelVisual from './parallelVisual';\nimport { install as installParallelComponent } from '../../component/parallel/install';\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 SankeyView from './SankeyView';\nimport SankeySeriesModel from './SankeySeries';\nimport sankeyLayout from './sankeyLayout';\nimport sankeyVisual from './sankeyVisual';\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 BoxplotSeriesModel from './BoxplotSeries';\nimport BoxplotView from './BoxplotView';\nimport boxplotVisual from './boxplotVisual';\nimport boxplotLayout from './boxplotLayout';\nimport { boxplotTransform } from './boxplotTransform';\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 CandlestickView from './CandlestickView';\nimport CandlestickSeriesModel from './CandlestickSeries';\nimport preprocessor from './preprocessor';\nimport candlestickVisual from './candlestickVisual';\nimport candlestickLayout from './candlestickLayout';\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 EffectScatterView from './EffectScatterView';\nimport EffectScatterSeriesModel from './EffectScatterSeries';\nimport layoutPoints from '../../layout/points';\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 LinesView from './LinesView';\nimport LinesSeriesModel from './LinesSeries';\nimport linesLayout from './linesLayout';\nimport linesVisual from './linesVisual';\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*/\nimport HeatmapView from './HeatmapView';\nimport HeatmapSeriesModel from './HeatmapSeries';\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 PictorialBarView from './PictorialBarView';\nimport PictorialBarSeriesModel from './PictorialBarSeries';\nimport { layout } from '../../layout/barGrid';\nimport { curry } from 'zrender/lib/core/util';\nexport function install(registers) {\n registers.registerChartView(PictorialBarView);\n registers.registerSeriesModel(PictorialBarSeriesModel);\n registers.registerLayout(curry(layout, '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\nimport ThemeRiverView from './ThemeRiverView';\nimport ThemeRiverSeriesModel from './ThemeRiverSeries';\nimport themeRiverLayout from './themeRiverLayout';\nimport dataFilter from '../../processor/dataFilter';\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 SunburstView from './SunburstView';\nimport SunburstSeriesModel from './SunburstSeries';\nimport sunburstLayout from './sunburstLayout';\nimport sunburstVisual from './sunburstVisual';\nimport dataFilter from '../../processor/dataFilter';\nimport { curry } from 'zrender/lib/core/util';\nimport { installSunburstAction } from './sunburstAction';\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 CustomSeriesModel from './CustomSeries';\nimport CustomChartView from './CustomView';\nexport function install(registers) {\n registers.registerChartView(CustomChartView);\n registers.registerSeriesModel(CustomSeriesModel);\n}","/**\n * 保留 object 中的部分内容\n * @param obj\n * @param keys\n */\nexport function pick(obj: Record, keys: string[]): Record {\n const r = {};\n keys.forEach((key) => {\n r[key] = obj[key];\n });\n return r;\n}\n","export function isFunction(v: any): boolean {\n return typeof v === 'function';\n}\n","import * as echarts from 'echarts';\nimport { EChartsReactProps, EChartsOption, EChartsInstance } from './types';\nimport EChartsReactCore from './core';\n\nexport { EChartsReactProps, EChartsOption, EChartsInstance };\n\n// export the Component the echarts Object.\nexport default class EChartsReact extends EChartsReactCore {\n constructor(props: EChartsReactProps) {\n super(props);\n\n // 初始化为 echarts 整个包\n this.echarts = echarts;\n }\n}\n","import React, { PureComponent } from 'react';\nimport { bind, clear } from 'size-sensor';\nimport { pick } from './helper/pick';\nimport { isFunction } from './helper/is-function';\nimport { isString } from './helper/is-string';\nimport { isEqual } from './helper/is-equal';\nimport { EChartsReactProps, EChartsInstance } from './types';\n\n/**\n * core component for echarts binding\n */\nexport default class EChartsReactCore extends PureComponent {\n /**\n * echarts render container\n */\n public ele: HTMLElement;\n\n /**\n * echarts library entry\n */\n protected echarts: any;\n\n constructor(props: EChartsReactProps) {\n super(props);\n\n this.echarts = props.echarts;\n this.ele = null;\n }\n\n componentDidMount() {\n this.renderNewEcharts();\n }\n\n // update\n componentDidUpdate(prevProps: EChartsReactProps) {\n /**\n * if shouldSetOption return false, then return, not update echarts options\n * default is true\n */\n const { shouldSetOption } = this.props;\n if (isFunction(shouldSetOption) && !shouldSetOption(prevProps, this.props)) {\n return;\n }\n\n // 以下属性修改的时候,需要 dispose 之后再新建\n // 1. 切换 theme 的时候\n // 2. 修改 opts 的时候\n // 3. 修改 onEvents 的时候,这样可以取消所有之前绑定的事件 issue #151\n if (\n !isEqual(prevProps.theme, this.props.theme) ||\n !isEqual(prevProps.opts, this.props.opts) ||\n !isEqual(prevProps.onEvents, this.props.onEvents)\n ) {\n this.dispose();\n\n this.renderNewEcharts(); // 重建\n return;\n }\n\n // when thoes props isEqual, do not update echarts\n const pickKeys = ['option', 'notMerge', 'lazyUpdate', 'showLoading', 'loadingOption'];\n if (isEqual(pick(this.props, pickKeys), pick(prevProps, pickKeys))) {\n return;\n }\n\n const echartsInstance = this.updateEChartsOption();\n /**\n * when style or class name updated, change size.\n */\n if (!isEqual(prevProps.style, this.props.style) || !isEqual(prevProps.className, this.props.className)) {\n try {\n echartsInstance.resize();\n } catch (e) {\n console.warn(e);\n }\n }\n }\n\n componentWillUnmount() {\n this.dispose();\n }\n\n /**\n * return the echart object\n * 1. if exist, return the existed instance\n * 2. or new one instance\n */\n public getEchartsInstance() {\n return this.echarts.getInstanceByDom(this.ele) || this.echarts.init(this.ele, this.props.theme, this.props.opts);\n }\n\n /**\n * dispose echarts and clear size-sensor\n */\n private dispose() {\n if (this.ele) {\n try {\n clear(this.ele);\n } catch (e) {\n console.warn(e);\n }\n // dispose echarts instance\n this.echarts.dispose(this.ele);\n }\n }\n\n /**\n * render a new echarts instance\n */\n private renderNewEcharts() {\n const { onEvents, onChartReady } = this.props;\n\n // 1. new echarts instance\n const echartsInstance = this.updateEChartsOption();\n\n // 2. bind events\n this.bindEvents(echartsInstance, onEvents || {});\n\n // 3. on chart ready\n if (isFunction(onChartReady)) onChartReady(echartsInstance);\n\n // 4. on resize\n if (this.ele) {\n bind(this.ele, () => {\n try {\n echartsInstance.resize();\n } catch (e) {\n console.warn(e);\n }\n });\n }\n }\n\n // bind the events\n private bindEvents(instance, events: EChartsReactProps['onEvents']) {\n function _bindEvent(eventName: string, func: Function) {\n // ignore the event config which not satisfy\n if (isString(eventName) && isFunction(func)) {\n // binding event\n instance.on(eventName, (param) => {\n func(param, instance);\n });\n }\n }\n\n // loop and bind\n for (const eventName in events) {\n if (Object.prototype.hasOwnProperty.call(events, eventName)) {\n _bindEvent(eventName, events[eventName]);\n }\n }\n }\n\n /**\n * render the echarts\n */\n private updateEChartsOption(): EChartsInstance {\n const { option, notMerge = false, lazyUpdate = false, showLoading, loadingOption = null } = this.props;\n // 1. get or initial the echarts object\n const echartInstance = this.getEchartsInstance();\n // 2. set the echarts option\n echartInstance.setOption(option, notMerge, lazyUpdate);\n // 3. set loading mask\n if (showLoading) echartInstance.showLoading(loadingOption);\n else echartInstance.hideLoading();\n\n return echartInstance;\n }\n\n render(): JSX.Element {\n const { style, className = '' } = this.props;\n // default height = 300\n const newStyle = { height: 300, ...style };\n\n return (\n {\n this.ele = e;\n }}\n style={newStyle}\n className={`echarts-for-react ${className}`}\n />\n );\n }\n}\n","export function isString(v: any): boolean {\n return typeof v === 'string';\n}\n"],"sourceRoot":""}