{"version":3,"sources":["../node_modules/@dhi/react-components/node_modules/echarts/lib/util/states.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/scale/helper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/throttle.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/visual/helper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/graphic.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/scale/Scale.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/label/labelGuideHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/mixin/makeStyleMapper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/scale/Interval.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/layout/barGrid.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/visual/visualSolution.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/layout/points.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/visual/LegendVisualProvider.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/processor/dataFilter.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/label/labelStyle.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/mixin/palette.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/types.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/mixin/dataFormat.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/decal.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/event.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/vendor.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/innerStore.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/layout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/styleCompat.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/label/labelLayoutHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/Component.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/mixin/lineStyle.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/mixin/itemStyle.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/legacy/dataSelectAction.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/shape/sausage.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/time.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/log.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/scale/Ordinal.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/format.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/view/Chart.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/Series.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/internalComponentCreator.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/scale/Time.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/processor/dataSample.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/visual/visualDefault.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/mixin/areaStyle.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/mixin/textStyle.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/Model.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/globalDefault.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/Global.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/visual/style.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/symbol.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/view/Component.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/visual/symbol.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/label/sectorLabel.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/preprocessor/helper/compatStyle.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/preprocessor/backwardCompat.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/number.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/legacy/getTextRect.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/ECEventProcessor.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/i18n/langEN.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/i18n/langZH.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/OptionManager.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/visual/decal.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/processor/dataStack.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/loading/default.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/theme/light.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/theme/dark.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/model/referHelper.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/scale/Log.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/processor/negativeDataFilter.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/animation.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/layout/barPolar.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/visual/aria.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/conditionalExpression.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/label/LabelManager.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/label/installLabelLayout.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/component.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/clazz.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/visual/VisualMapping.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/util/model.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/renderer/installCanvasRenderer.js","../node_modules/@dhi/react-components/node_modules/echarts/lib/renderer/installSVGRenderer.js"],"names":["_highlightNextDigit","_highlightKeyMap","getSavedStates","makeInner","HOVER_STATE_BLUR","HOVER_STATE_EMPHASIS","SPECIAL_STATES","DISPLAY_STATES","Z2_EMPHASIS_LIFT","HIGHLIGHT_ACTION_TYPE","DOWNPLAY_ACTION_TYPE","SELECT_ACTION_TYPE","UNSELECT_ACTION_TYPE","TOGGLE_SELECT_ACTION_TYPE","hasFillOrStroke","fillOrStroke","liftedColorCache","LRU","liftColor","color","liftedColor","get","colorTool","put","doChangeHoverState","el","stateName","hoverStateEnum","onHoverStateChange","hoverState","singleEnterEmphasis","singleLeaveEmphasis","singleEnterBlur","singleLeaveBlur","singleEnterSelect","selected","singleLeaveSelect","updateElementState","updater","commonParam","traverseUpdateState","isGroup","traverse","child","setStatesFlag","elementStateProxy","targetStates","state","this","states","style","hasSelect","indexOf","cloned","Path","store","fromFill","selectFill","normalFill","fromStroke","selectStroke","normalStroke","emphasisStyle","fill","extend","stroke","z2","z2EmphasisLift","createEmphasisDefaultState","hasBlur","currentStates","currentOpacity","opacity","fromState","props","toStateName","defaultValue","i","length","propName","val","animators","animator","__fromStateTransition","targetName","saveFinalToTarget","getFromStateStyle","blurStyle","createBlurDefaultState","z2SelectLift","createSelectDefaultState","setDefaultStateProxy","stateProxy","textContent","getTextContent","textGuide","getTextGuideLine","enterEmphasisWhenMouseOver","e","shouldSilent","__highByOuter","leaveEmphasisWhenMouseOut","enterEmphasis","highlightDigit","leaveEmphasis","enterBlur","leaveBlur","enterSelect","leaveSelect","__highDownSilentOnTouch","zrByTouch","allLeaveBlur","api","getModel","eachComponent","componentType","componentModel","getViewOfSeriesModel","getViewOfComponentModel","group","blurSeries","targetSeriesIndex","focus","blurScope","ecModel","leaveBlurOfIndices","data","dataIndices","itemEl","getItemGraphicEl","targetSeriesModel","getSeriesByIndex","targetCoordSys","coordinateSystem","master","blurredSeries","eachSeries","seriesModel","sameSeries","coordSys","isArrayLike","getData","isObject","dataTypes","keys","d","push","view","blurComponent","componentMainType","componentIndex","getComponent","focusBlurEnabled","blurSeriesFromHighlightPayload","payload","seriesIndex","dataType","dataIndex","queryDataIndex","isArray","count","current","ecData","getECData","focus_1","findComponentHighDownDispatchers","name","ret","focusSelf","dispatchers","findHighDownDispatchers","handleGlobalMouseOverForHighDown","dispatcher","_a","componentHighDownName","each","handleGlboalMouseOutForHighDown","toggleSelectionFromPayload","isSelectChangePayload","type","updateSeriesElementSelection","allData","getAllData","eachItemGraphicEl","idx","isSelected","getAllSelectedIndices","getSelectedDataIndices","item","enableHoverEmphasis","setAsHighDownDispatcher","enableHoverFocus","OTHER_STATES","defaultStyleGetterMap","itemStyle","lineStyle","areaStyle","setStatesStylesFromModel","itemModel","styleType","getter","model","ensureState","asDispatcher","disable","extendedEl","highDownSilentOnTouch","__highDownDispatcher","isHighDownDispatcher","enableComponentHighDownFeatures","mainType","getHighlightDigit","highlightKey","payloadType","isHighDownPayload","savePathStates","selectState","select","roundNumber","numberUtil","intervalScaleNiceTicks","extent","splitNumber","minInterval","maxInterval","result","span","interval","precision","intervalPrecision","getIntervalPrecision","niceTickExtent","isFinite","clamp","fixExtent","Math","ceil","floor","max","min","contain","normalize","scale","ORIGIN_METHOD","RATE","THROTTLE_TYPE","throttle","fn","delay","debounce","currCall","diff","scope","args","debounceNextCall","lastCall","lastExec","timer","exec","Date","getTime","apply","cb","cbArgs","_i","arguments","thisDelay","thisDebounce","clearTimeout","setTimeout","clear","debounceDelay","createOrUpdate","obj","fnAttr","rate","throttleType","originFn","lastThrottleType","getItemVisualFromData","key","getItemVisual","getVisual","getVisualFromData","setItemVisualFromData","value","ensureUniqueItemVisual","setItemVisual","mathMax","mathMin","_customShapeMap","extendShape","opts","extendPathFromString","pathTool","extendPath","pathData","registerShape","ShapeClass","getShapeClass","hasOwnProperty","makePath","rect","layout","path","centerGraphic","getBoundingRect","resizePath","makeImage","imageUrl","zrImg","ZRImage","image","x","y","width","height","onload","img","boundingRect","setStyle","aspect","mergePath","applyTransform","m","calculateTransform","subPixelOptimizeLine","param","subPixelOptimizeUtil","shape","subPixelOptimizeRect","subPixelOptimize","getTransform","target","ancestor","mat","matrix","getLocalTransform","parent","transform","invert","Transformable","vector","transformDirection","direction","hBase","abs","vBase","vertex","isNotGroup","groupTransition","g1","g2","animatableModel","elMap1","g","elMap","anid","getElMap","oldEl","newProp","getAnimatableProps","attr","updateProps","rotation","isPath","clipPointsByRect","points","map","point","clipRectByRect","targetRect","x2","y2","createIcon","iconStr","opt","innerOpts","rectHover","strokeNoScale","slice","defaults","replace","linePolygonIntersect","a1x","a1y","a2x","a2y","p2","p","lineLineIntersect","b1x","b1y","b2x","b2y","mx","my","nx","ny","nmCrossProduct","crossProduct2d","b1a1x","b1a1y","q","x1","y1","setTooltipConfig","itemTooltipOption","itemName","itemTooltipOptionObj","isString","formatter","formatterParams","$vars","formatterParamsExtra","hasOwn","tooltipConfig","option","content","Circle","Ellipse","Sector","Ring","Polygon","Polyline","Rect","Line","BezierCurve","Arc","Scale","setting","_setting","_extent","Infinity","prototype","getSetting","unionExtent","other","unionExtentFromData","dim","getApproximateExtent","getExtent","setExtent","start","end","thisExtent","isNaN","isInExtentRange","isBlank","_isBlank","setBlank","clazzUtil","PI2","PI","CMD","PathProxy","DEFAULT_SEARCH_SPACE","getCandidateAnchor","pos","distance","outPt","outDir","set","projectPointToArc","cx","cy","r","startAngle","endAngle","anticlockwise","out","sqrt","ox","oy","tmp","normalizeRadian","angle","atan2","cos","sin","d1","d2","projectPointToLine","limitToEnds","dx","dy","dx1","dy1","lineLen","t","projectPointToRect","tmpPt","nearestPointOnRect","pt","dist","nearestPointOnPath","xi","yi","x0","y0","minDist","cmd","M","L","C","cubicProjectPoint","Q","quadraticProjectPoint","A","rx","ry","theta","dTheta","R","Z","pt0","Point","pt1","pt2","dir","dir2","updateLabelLinePoints","labelLineModel","labelLine","label","labelGuideConfig","textGuideLineConfig","searchSpace","candidates","labelRect","clone","getComputedTransform","anchorPoint","anchor","targetTransform","targetInversedTransform","len","copy","scaleAndAdd","toArray","limitTurnAngle","setShape","tmpArr","tmpProjPoint","linePoints","minTurnAngle","fromArray","sub","len1","len2","angleCos","dot","tan","limitSurfaceAngle","surfaceNormal","maxSurfaceAngle","HALF_PI","newAngle","acos","setLabelLineState","ignore","stateModel","isNormal","stateObj","smooth","styleObj","getLineStyle","useStyle","buildLabelLinePath","moveTo","lineTo","moveLen","midPoint0","midPoint2","midPoint1","bezierCurveTo","setLabelLineStyle","targetEl","statesModels","defaultStyle","normalModel","normal","showNormal","labelIgnoreNormal","stateShow","retrieve2","setTextGuideLine","showAbove","buildPath","removeTextGuideLine","getLabelLineStatesModels","labelLineName","makeStyleMapper","properties","ignoreParent","excludes","includes","zrUtil","getShallow","IntervalScale","_super","_this","_interval","_intervalPrecision","__extends","parse","helper","parseFloat","getInterval","setInterval","_niceExtent","getTicks","expandToNicedExtent","ticks","tick","lastNiceTick","getMinorTicks","minorTicks","nextTick","prevTick","minorTicksGroup","minorInterval","minorTick","getLabel","dataNum","formatUtil","niceTicks","reverse","niceExtent","expandSize","fixMax","fixMin","registerClass","STACK_PREFIX","LargeArr","Float32Array","Array","getSeriesStackId","getAxisKey","axis","index","getLayoutOnAxis","params","baseAxis","axisKey","bandWidth","getBandWidth","stackId","widthAndOffsets","doCalBarWidthAndOffset","offsetCenter","offset","prepareLayoutBarSeries","seriesType","seriesModels","eachSeriesByType","isOnCartesian","isInLargeMode","makeColumnLayout","barSeries","axisMinGaps","axisValues","getBaseAxis","dimIdx","getDimensionIndex","mapDimension","getStore","cnt","valuesInAxis","sort","a","b","j","delta","getValueAxesMinGaps","seriesInfoList","axisExtent","minGap","extentSpan","scaleSpan","barWidth","parsePercent","barMaxWidth","barMinWidth","barGap","barCategoryGap","columnsMap","seriesInfo","columnsOnAxis","remainedWidth","autoWidthCount","categoryGap","gap","stacks","maxWidth","minWidth","coordSysName","categoryGapPercent","columnCount","barGapPercent","autoWidth","column","finalWidth","lastColumn","widthSum","retrieveColumnLayout","barWidthAndOffset","lastStackCoords","cartesian","columnLayoutInfo","columnOffset","columnWidth","valueAxis","getOtherAxis","barMinHeight","setLayout","size","valueDim","baseDim","stacked","isDimensionStacked","isValueAxisH","isHorizontal","valueAxisStart","getValueAxisStart","valueDimIdx","baseDimIdx","baseValue","sign","baseCoord","n","coord","dataToPoint","setItemLayout","largeLayout","plan","createRenderPlanner","reset","coordLayout","getRect","valueDimI","baseDimI","valueAxisHorizontal","progress","largePoints","largeBackgroundPoints","largeDataIndices","valuePair","pointsOffset","idxOffset","next","backgroundStart","pipelineContext","large","toGlobalCoord","dataToCoord","hasKeys","name_1","createVisualMappings","stateList","supplementVisualOption","visualMappings","mappings","Creater","__hidden","createMappings","visualData","visualType","VisualMapping","isValidType","mappingOption","visual","__alphaForOpacity","replaceVisualOption","thisOption","newOption","has","applyVisual","getValueState","dimension","visualTypesMap","setVisual","eachItem","valueOrIndex","rawDataItem","getRawDataItem","visualMap","valueState","call","visualTypes","prepareVisualTypes","incrementalApplyVisual","dimIndex","pointsLayout","forceStoreInTypedArray","useTypedArray","dims","dimensions","dimLen","stackResultDim","getCalculationInfo","dimIdx0","dimIdx1","segCount","createFloat32Array","tmpIn","tmpOut","LegendVisualProvider","getDataWithEncodedVisual","getRawData","_getDataWithEncodedVisual","_getRawData","getAllNames","rawData","mapArray","getName","containName","indexOfName","dataFilter","legendModels","findComponents","filterSelf","EMPTY_OBJ","setLabelText","labelTexts","text","oldStates","clearStates","useStates","getLabelText","stateModels","interpolatedValue","baseText","labelFetcher","labelDataIndex","labelDimIndex","getFormattedLabel","isFunction","defaultText","statesText","setLabelStyle","labelStatesModels","stateSpecified","isSetOnText","ZRText","needsCreateText","setTextContent","labelStatesTexts","normalStyle","createTextStyle","setTextConfig","createTextConfig","textConfig","silent","dirty","enableTextSetter","labelInner","getLabelStatesModels","labelName","textStyleModel","specifiedTextStyle","isNotNormal","isAttached","textStyle","richResult","globalTextStyle","richItemNames","richItemNameMap","rich","richKeys","parentModel","getRichItemNames","richTextStyle","setTokenTextStyle","overflow","margin","setTextStyleCommon","labelPosition","labelRotate","labelDistance","labelOffset","defaultOutsidePosition","position","outsideFill","inheritColor","TEXT_PROPS_WITH_GLOBAL","TEXT_PROPS_SELF","TEXT_PROPS_BOX","isBlock","inRich","fillColor","strokeColor","textBorderColor","textBorderWidth","lineWidth","textBorderType","lineDash","textBorderDashOffset","lineDashOffset","defaultOpacity","verticalAlign","baseline","disableBox","borderType","borderDash","backgroundColor","borderColor","getFont","gTextStyleModel","trim","fontStyle","fontWeight","fontSize","fontFamily","join","setLabelValueAnimation","getDefaultText","prevValue","normalLabelModel","valueAnimation","defaultInterpolatedText","animateLabelValue","textEl","labelInnerStore","currValue","targetValue","initProps","percent","interpolated","interpolateRawValues","labelText","innerColor","innerDecal","PaletteMixin","getColorFromPalette","requestNum","defaultPalette","normalizeToArray","layeredPalette","getFromPalette","clearColorPalette","that","inner","paletteIdx","paletteNameMap","getDecalFromPalette","defaultDecals","scopeFields","palette","palettes","requestColorNum","paletteNum","getNearestPalette","pickedPaletteItem","VISUAL_DIMENSIONS","createHashMap","SOURCE_FORMAT_ORIGINAL","SOURCE_FORMAT_ARRAY_ROWS","SOURCE_FORMAT_OBJECT_ROWS","SOURCE_FORMAT_KEYED_COLUMNS","SOURCE_FORMAT_TYPED_ARRAY","SOURCE_FORMAT_UNKNOWN","SERIES_LAYOUT_BY_COLUMN","SERIES_LAYOUT_BY_ROW","DIMENSION_LABEL_REG","DataFormatMixin","getDataParams","rawValue","getRawValue","rawDataIndex","getRawIndex","itemOpt","isSeries","userOutput","componentSubType","subType","seriesId","id","seriesName","dimensionNames","fullDimensions","encode","status","extendParams","getItemModel","dimensionIndex","formatTpl","origin","dimStr","dimLoose","charAt","retrieveRawValue","formatTooltip","multipleSeries","normalizeTooltipFormatResult","markupText","markupFragment","decalMap","WeakMap","decalCache","decalKeys","createOrUpdatePatternFromDecal","decalObject","dpr","getDevicePixelRatio","zr","getZr","isSVG","painter","oldPattern","decalOpt","symbol","symbolSize","symbolKeepAspect","dashArrayX","dashArrayY","maxTileWidth","maxTileHeight","pattern","repeat","cacheKey","isValidKey","valueType","cache","svgElement","ctx","normalizeDashArrayX","dash","dashValue_1","dashValue","concat","normalizeDashArrayY","symbolArray","normalizeSymbolArray","lineBlockLengthsX","line","getLineBlockLengthY","lineBlockLengthY","canvas","createCanvas","svgRoot","createSVGElement","pSize","xlen","getLeastCommonMultiple","symbolRepeats","process","getPatternSize","getContext","clearRect","fillStyle","fillRect","ySum","yId","yIdTotal","xId0","symbolYId","xId1","xId1Total","xSum","left","top_1","symbolXId","brushSymbol","symbolType","createSymbol","appendChild","paintOne","brushSingle","brushDecal","svgWidth","svgHeight","setPatternnSource","scaleX","scaleY","isAllString","isAllNumber","blockLength","findEventDispatcher","det","returnFirstMatch","found","__hostTarget","supportFloat32Array","Float32ArrayCtor","arg","setCommonECData","dataIdx","childECData","LOCATION_PARAMS","HV_NAMES","boxLayout","orient","maxHeight","currentLineMaxSize","eachChild","nextX","nextY","nextChild","childAt","nextChildRect","moveX","newline","moveY","markRedraw","box","getAvailableSize","positionInfo","containerRect","containerWidth","containerHeight","top","right","bottom","getLayoutRect","verticalMargin","horizontalMargin","BoundingRect","positionElement","h","hv","v","boundingMode","needLocalTransform","layoutRect","sizeCalculable","hvIdx","fetchLayoutMode","ins","layoutMode","constructor","mergeLayoutParam","targetOption","ignoreSize","hResult","merge","vResult","names","newParams","newValueCount","merged","mergedValueCount","hasProp","hasValue","source","getLayoutParams","copyLayoutParams","isEC4CompatibleStyle","elType","hasOwnTextContentOption","hasOwnTextConfig","legacy","convertFromEC4CompatibleStyle","hostStyle","textContentStyle","srcStyle","textFill","textStroke","hasOwnPos","textPosition","textOffset","textRotation","textDistance","convertEC4CompatibleRichItem","richItem","font","textFont","textStrokeWidth","align","textAlign","textVerticalAlign","lineHeight","textLineHeight","textWidth","textHeight","textBackgroundColor","padding","textPadding","borderWidth","borderRadius","textBorderRadius","shadowColor","textBoxShadowColor","shadowBlur","textBoxShadowBlur","shadowOffsetX","textBoxShadowOffsetX","shadowOffsetY","textBoxShadowOffsetY","convertToEC4StyleForCustomSerise","itemStl","txStl","txCfg","isInside","hostFill","convertToEC4RichItem","textFillNotSet","insideFill","insideStroke","outsideStroke","textShadowColor","textShadowBlur","textShadowOffsetX","textShadowOffsetY","prepareLayoutList","input","list","rawItem","defaultAttr","localRect","isAxisAligned","minMargin","globalRect","obb","OrientedBoundingRect","priority","layoutOption","computedLayoutOption","axisAligned","shiftLayout","xyDim","sizeDim","minBound","maxBound","balanceShift","lastPos","adjusted","shifts","totalShifts","shift","shiftList","maxGap","first","last","updateMinMaxGap","squeezeGaps","takeBoundsGap","squeezeWhenBailout","gapThisBound","gapOtherBound","moveDir","moveFromMaxGap","remained","maxSqeezePercent","gaps","totalGaps","prevItemRect","squeezePercent","moveForEachLabel","shiftLayoutOnX","leftBound","rightBound","shiftLayoutOnY","topBound","bottomBound","hideOverlap","labelList","displayedLabels","hideEl","emphasisState","labelItem","overlapped","existsTextCfg","intersect","labelGuideIgnore","ComponentModel","uid","componentUtil","init","mergeDefaultAndTheme","inputPositionParams","themeModel","getTheme","getDefaultOption","mergeOption","optionUpdated","newCptOption","isInit","ctor","isExtendedClass","defaultOption","fields","optList","clz","superClass","getReferringComponents","indexKey","idKey","queryReferringComponents","getBoxLayoutParams","boxLayoutModel","protoInitialize","proto","Model","mountExtend","enableClassManagement","deps","getClassesByMainType","dependencies","parseClassType","main","unshift","LINE_STYLE_KEY_MAP","LineStyleMixin","ITEM_STYLE_KEY_MAP","getItemStyle","ItemStyleMixin","createLegacyDataSelectAction","ecRegisterAction","getSeriesIndices","seriesIndices","query","eventsMap","dispatchAction","handleSeriesLegacySelectEvents","eventPostfix","ecIns","legacyEventName","isSilent","fromActionPayload","trigger","selectedMap","handleLegacySelectEvents","messageCenter","on","isFromClick","fromAction","SausageShape","r0","clockwise","SausagePath","getDefaultShape","dr","rCenter","unitStartX","unitStartY","unitEndX","unitEndY","arc","closePath","ONE_SECOND","ONE_MINUTE","ONE_HOUR","ONE_DAY","ONE_YEAR","defaultLeveledFormatter","year","month","day","hour","minute","second","millisecond","none","fullDayFormatter","fullLeveledFormatter","primaryTimeUnits","timeUnits","pad","str","substr","getPrimaryTimeUnit","timeUnit","isPrimaryTimeUnit","getDefaultFormatPrecisionOfInterval","format","time","template","isUTC","lang","date","fullYearGetterName","monthGetterName","dateGetterName","H","hoursGetterName","minutesGetterName","s","secondsGetterName","S","millisecondsGetterName","timeModel","getLocaleModel","SYSTEM_LANG","getDefaultLocaleModel","monthAbbr","dayOfWeek","dayOfWeekAbbr","leveledFormat","level","mergedFormatter","inherit","unit","getUnitFromValue","levelId","isSecond","isMinute","isHour","isDay","isMonth","getUnitValue","fullYearSetterName","monthSetterName","dateSetterName","hoursSetterName","minutesSetterName","secondsSetterName","millisecondsSetterName","ECHARTS_PREFIX","hasConsole","console","warn","log","error","deprecateLog","throwError","msg","Error","OrdinalScale","ordinalMeta","OrdinalMeta","categories","_ordinalMeta","getOrdinal","round","rank","scaleHelper","_getTickNumber","getRawOrdinalNumber","setSortInfo","info","infoOrdinalNumbers","ordinalNumbers","ordinalsByTick","_ordinalNumbersByTick","ticksByOrdinal","_ticksByOrdinalNumber","tickNum","allCategoryLen","ordinalNumber","unusedOrdinal","ordinal","ticksByOrdinalNumber","tickNumber","ordinalNumbersByTick","cateogry","getOrdinalMeta","addCommas","isNumeric","parts","split","toCamelCase","upperCaseFirst","toLowerCase","match","group1","toUpperCase","normalizeCssArray","replaceReg","replaceMap","encodeHTML","c","makeValueReadable","useUTC","stringToUserReadable","isNumberUserReadable","num","isTypeTime","isValueDate","parseDate","timeFormat","numericResult","numericToNumber","TPL_VAR_ALIAS","wrapVar","varName","seriesIdx","tpl","paramsList","seriesLen","alias","k","formatTplSimple","getTooltipMarker","inOpt","extraCssText","renderMode","markerId","formatTime","utc","capitalFirst","convertToColorString","defaultColor","colorStops","windowOpen","link","blank","window","open","opener","location","href","modelUtil","renderPlanner","ChartView","Group","renderTask","createTask","renderTaskPlan","renderTaskReset","context","render","highlight","toggleHighlight","downplay","remove","removeAll","dispose","updateView","updateLayout","updateVisual","markUpdateMethod","methodName","updateMethod","elSetState","progressiveRender","progressMethodMap","incrementalPrepareRender","incrementalRender","forceFirstProgress","getSelectionKey","getId","SERIES_UNIVERSAL_TRANSITION_PROP","SeriesModel","_selectedDataIndicesMap","dataTask","dataTaskCount","dataTaskReset","sourceManager","SourceManager","prepareSource","getInitialData","wrapData","dataBeforeProcessed","autoSeriesName","_initSelectedMapFromData","themeSubType","hasClass","fillDataTextStyle","newSeriesOption","appendData","task","getCurrentTask","getLinkedData","mainData","getLinkedDataAll","setData","outputData","getEncode","getSourceManager","getSource","getColorBy","isColorBySeries","defaultSeriesFormatTooltip","series","isAnimationEnabled","env","node","animationEnabled","restoreData","coordDimToDataDim","coordDim","mapDimensionsAll","getProgressive","getProgressiveThreshold","innerDataIndices","_innerSelect","unselect","nameOrId","toggleSelect","selectedDataIndicesMap","nameOrIds","isUniversalTransitionEnabled","universalTransitionOpt","universalTransition","enabled","_b","selectedMode","lastDataIndex","hasItemOption","ignoreStyleOnData","hasSymbolVisual","defaultSymbol","visualStyleAccessPath","visualDrawType","dataDims","nameArr","dataDim","dimInfo","getDimensionInfo","displayName","getSeriesAutoName","cloneShallow","dataTaskProgress","CHANGABLE_METHODS","DOWNSAMPLE_METHODS","wrapMethod","onDataChange","newList","setOutputEnd","scheduler","pipeline","getPipeline","currentTask","agentStubMap","internalOptionCreatorMap","registerInternalOptionCreator","creator","assert","concatInternalOptions","newCmptOptionList","internalOptionCreator","internalOptions","TimeScale","settings","_minLevelUnit","labelFormatter","innerTicks","bottomUnitName","approxInterval","safeLimit","unitNames","iter","addTicksInSpan","minTimestamp","maxTimestamp","getMethodName","setMethodName","isDate","dateTime","notAdd","addLevelTicks","unitName","lastLevelTicks","levelTicks","newAddedTicks","isFirstLevel","valueA","valueB","dateA","dateB","isSame","isSameYear","isSameMonth","isSameDay","isSameHour","isSameMinute","isSameSecond","isSameMilliSecond","isUnitValueSame","getFirstTimestampOfUnit","startTick","endTick","getterName","setterName","getMonthInterval","getDateInterval","getHourInterval","getMinutesAndSecondsInterval","getMillisecondsInterval","levelsTicks","currentLevelTicks","tickCount","lastLevelTickCount","primaryTimeUnit","levelTicksRemoveDuplicated","i_1","tickValue","targetTickNum","levelsTicksInExtent","filter","maxLevel","getIntervalTicks","_approxInterval","getFullYear","getMonth","getDate","approxTickNum","scaleIntervalsLen","scaleIntervals","lo","hi","mid","bisect","daysInMonth","isMinutes","outDate","samplers","average","frame","sum","NaN","nearest","indexSampler","dataSample","sampling","lttbDownSample","sampler","downSample","visualDefault","isCategory","active","inactive","colorHue","colorSaturation","colorLightness","colorAlpha","getAreaStyle","AreaStyleMixin","PATH_COLOR","tmpRichText","TextStyleMixin","getTextColor","isEmphasis","getTextRect","update","rest","_doGet","parsePath","hasPath","pathFinal","resolveParentPath","isEmpty","Ctor","animation","pathArr","enableClassExtend","enableClassCheck","mixin","platform","navigator","reCreateSeriesIndices","assertSeriesInitialized","initBase","decalColor","darkMode","colorBy","gradientColor","aria","decal","decals","blendMode","stateAnimation","duration","easing","animationDuration","animationDurationUpdate","animationEasing","animationEasingUpdate","animationThreshold","progressiveThreshold","progressive","hoverLayerThreshold","GlobalModel","theme","locale","optionManager","_theme","_locale","_optionManager","setOption","optionPreprocessorFuncs","innerOpt","normalizeSetOptionInput","_resetOption","resetOption","optionChanged","baseOption","mountOption","_mergeOption","timelineOption","getTimelineOption","mediaOptions","getMediaOption","mediaOption","componentsMap","_componentsMap","componentsCount","_componentsCount","newCmptTypes","newCmptTypeMap","replaceMergeMainTypeMap","resetSourceDefaulter","componentOption","mainTypeInReplaceMerge","topologicalTravel","getAllClassMainTypes","oldCmptList","mergeMode","mappingResult","optionsByMainType","cmptsByMainType","cmptsCountByMainType","resultItem","existing","newCmptOption","isSeriesType","ComponentModelClass","getClass","keyInfo","extraOpt","brandNew","__requireNewView","_seriesIndices","getOption","optInMainType","realLen","metNonInner","OPTION_INNER_KEY","setUpdatePayload","_payload","getUpdatePayload","cmpt","queryComponents","condition","cmpts","queryByIdOrName","filterBySubType","res","queryCond","indexAttr","idAttr","nameAttr","getQueryCond","ctxForAll_1","cbForAll_1","getSeriesByName","nameStr","oneSeries","getSeriesByType","getSeries","getSeriesCount","rawSeriesIndex","eachRawSeries","eachRawSeriesByType","isSeriesFiltered","_seriesIndicesMap","getCurrentSeriesIndices","filterSeries","newSeriesIndices","seriesRawIdx","componentTypes","components","component","isNotTargetSeries","internalField","airaOption","notMergeColorLayer","colorLayer","themeItem","mergeTheme","globalDefault","idOrName","keyMap_1","idOrNameItem","idName_1","replaceMerge","defaultStyleMappers","defaultColorKey","getStyleMapper","stylePath","styleMapper","visualStyleMapper","getDefaultColorKey","colorKey","seriesStyleTask","createOnAllSeries","performRawSeries","styleModel","globalStyle","getStyle","decalOption","colorCallback","hasAutoColor","colorPalette","dataEach","dataParams","sharedModel","dataStyleTask","existsStyle","dataColorPaletteTask","overallReset","paletteScopeGroupByType","colorScope","dataAll","idxMap","rawIdx","dataCount","Triangle","graphic","Diamond","Pin","w","asin","tanX","tanY","cpLen","cpLen2","Arrow","symbolCtors","roundRect","square","circle","diamond","pin","arrow","triangle","symbolShapeMakers","symbolBuildProxies","SymbolClz","calculateTextPosition","config","inBundle","proxySymbol","symbolPathSetColor","symbolStyle","__isEmptyBrush","keepAspect","symbolPath","setColor","normalizeSymbolSize","normalizeSymbolOffset","symbolOffset","ComponentView","seriesSymbolTask","legendIcon","symbolRotate","hasSymbolTypeCallback","hasSymbolSizeCallback","hasSymbolRotateCallback","hasSymbolOffsetCallback","hasCallback","seriesSymbol","seriesSymbolSize","seriesSymbolRotate","seriesSymbolOffset","dataSymbolTask","itemSymbolType","itemSymbolSize","itemSymbolRotate","itemSymbolOffset","itemSymbolKeepAspect","createSectorCalculateTextPosition","positionMapping","isRoundCap","mappedSectorPosition","sector","middleR","middleAngle","extraDist","mathCos","mathSin","adjustAngleDistanceX","adjustAngleDistanceY","setSectorTextRotation","rotateType","anchorAngle","rotate","isEnd","POSSIBLE_STYLES","compatEC2ItemStyle","itemStyleOpt","styleName","normalItemStyleOpt","emphasisItemStyleOpt","emphasis","convertNormalEmphasis","optType","useExtend","normalOpt","emphasisOpt","removeEC3NormalStatus","compatTextStyle","labelOptSingle","textPropName","compatEC3CommonStyles","toArr","o","toObj","globalCompatStyle","isTheme","seriesOpt","markPoint","markLine","markArea","nodes","edgeData","links","edges","mpData","mlData","breadcrumb","levels","leaves","processSeries","axes","axisName","axisOpt","axisPointer","parallel","parallelOpt","parallelAxisDefault","calendar","calendarOpt","radar","radarOpt","nameGap","axisNameGap","geo","geoOpt","regions","regionObj","timeline","timelineOpt","toolbox","toolboxOpt","feature","featureOpt","tooltip","compatLayoutProperties","LAYOUT_PROPERTIES","prop","COMPATITABLE_COMPONENTS","BAR_ITEM_STYLE_MAP","compatBarItemStyle","oldName","newName","compatPieLabel","alignTo","edgeDistance","compatSunburstState","blur","traverseTree","children","globalBackwardCompat","compatStyle","clipOverflow","clip","clockWise","isTypedArray","hoverOffset","scaleSize","pointerColor","overwrite","backgroundStyle","highlightPolicy","focusNodeAdjacency","compatGraphFocus","mapType","mapLocation","hoverAnimation","dataRange","componentName","options","RADIAN_EPSILON","linearMap","domain","range","d0","r1","subDomain","subRange","all","returnStr","toFixed","asc","arr","getPrecision","getPrecisionSafe","toString","eIndex","exp","significandPartLen","dotIndex","decimalPartLen","getPixelPrecision","dataExtent","pixelExtent","LN10","dataQuantity","sizeQuantity","getPercentWithPrecision","valueList","acc","digits","pow","votesPerQuota","targetSeats","seats","votes","currentSum","remainder","Number","NEGATIVE_INFINITY","maxId","addSafe","val0","val1","maxPrecision","MAX_SAFE_INTEGER","remRadian","radian","pi2","isRadianAroundZero","TIME_REG","UTC","substring","quantity","quantityExponent","nice","exponent","exp10","f","quantile","ascArr","reformIntervals","littleThan","curr","currClose","close_1","close","lg","splice","valFloat","getRandomIdBase","random","getGreatestCommonDividor","truncate","Text","ECEventProcessor","normalizeQuery","cptQuery","dataQuery","otherQuery","condCptType","suffixes_1","dataKeys_1","reserved","propSuffix","suffixPos","lastIndexOf","eventType","eventInfo","packedEvent","check","filterForExposedEvent","host","propOnHost","afterTrigger","legend","selector","inverse","brush","title","polygon","lineX","lineY","keep","dataView","dataZoom","zoom","back","magicType","bar","stack","tiled","restore","saveAsImage","typeNames","pie","scatter","effectScatter","tree","treemap","boxplot","candlestick","heatmap","lines","graph","sankey","funnel","gauge","pictorialBar","themeRiver","sunburst","general","withTitle","withoutTitle","single","prefix","withName","withoutName","multiple","separator","middle","partialData","QUERY_REG","OptionManager","_timelineOptions","_mediaList","_currentMediaIndices","_api","rawOption","setAsPrimitive","dataset","optionBackup","_optionBackup","newParsedOption","isNew","mediaDefault","mediaList","declaredBaseOption","timelineOnRoot","timelineOptionsOnRoot","mediaOnRoot","media","hasMedia","hasTimeline","singleMedia","doPreprocess","preProcess","timelineOptions","parseRawOption","_newBaseOption","isRecreate","_mediaDefault","timelineModel","getCurrentIndex","indices1","indices2","ecWidth","getWidth","ecHeight","getHeight","indices","applyMediaQuery","realMap","aspectratio","applicatable","matched","operator","realAttr","real","expect","compare","decalVisual","hasItemVisual","dataStack","stackInfoMap","stackInfoList","stackInfo","stackResultDimension","stackedOverDimension","stackedDimension","stackedByDimension","isStackedByIndex","setCalculationInfo","calculateStack","targetStackInfo","idxInStack","resultVal","resultNaN","targetData","modify","v0","v1","byValue","stackedDataRawIndex","stackedOver","rawIndexOf","getByRawIndex","defaultLoading","textColor","maskColor","showSpinner","spinnerRadius","zlevel","mask","z","add","lineCap","animateShape","when","resize","colorAll","contrastColor","axisCommon","axisLine","splitLine","splitArea","minorSplitLine","crossStyle","subtextStyle","iconStyle","brushStyle","handleStyle","moveHandleStyle","fillerColor","dataBackground","selectedDataBackground","controlStyle","dayLabel","monthLabel","yearLabel","timeAxis","logAxis","categoryAxis","axisLabel","detail","color0","borderColor0","show","CoordSysInfo","coordSysDims","axisMap","categoryAxisMap","getCoordSysInfoBySeries","fetch","fetchers","cartesian2d","xAxisModel","SINGLE_REFERRING","models","yAxisModel","firstCategoryDimIndex","singleAxis","singleAxisModel","polar","polarModel","radiusAxisModel","findAxisModel","angleAxisModel","parallelModel","parallelAxisIndex","axisIndex","axisModel","axisDim","scaleProto","intervalScaleProto","roundingErrorFix","mathFloor","mathCeil","mathPow","mathLog","LogScale","base","_originalScale","originalScale","originalExtent","powVal","_fixMin","fixRoundingError","_fixMax","originalVal","negativeDataFilter","curValue","AnimationWrap","_storage","_elExistsMap","finished","callback","_finishedCallback","checkTerminate","animateTo","setToFinal","done","aborted","createWrap","barLayoutPolar","calRadialBar","barMinAngle","clampLayout","radiusSpan","angleSpan","radius","DEFAULT_OPTION","decalPaletteScope","ariaVisual","ariaModel","paletteScopeGroupByType_1","decalScope","enableAriaDecal","paletteDecal","specifiedDecal","mergeDecal","dataAll_1","idxMap_1","decalScope_1","dataCount_1","resultDecal","setDecal","labelLocale","labelModel","dom","setAttribute","ariaLabel","seriesCnt","maxDataCnt","maxSeriesCnt","displaySeriesCnt","getTitle","seriesLabels_1","seriesCount","seriesLabel","displayCnt","dataLabels","dataLabel","middleSeparator_1","endSeparator_1","separatorModel","middleSeparator","endSeparator","setLabel","keyValues","RegExp","RELATIONAL_EXPRESSION_OP_ALIAS_MAP","RegExpEvaluator","rVal","_condVal","isRegExp","evaluate","lVal","test","ConstConditionInternal","AndConditionInternal","OrConditionInternal","NotConditionInternal","RelationalConditionInternal","needParse","valueParser","tarValRaw","getValue","valueGetterParam","tarValParsed","subCondList","parseOption","exprOption","getters","cond","isObjectNotArray","and","parseAndOrOption","or","not","subOption","errMsg","parseNotOption","prepareGetValue","exprKeys","parserName","parser","getRawValueParser","keyRaw","valueGetterAttrMap","op","condValueRaw","condValueParsed","evaluator","createFilterComparator","parseRelationalOption","subOptionArr","ConditionalExpressionParsed","_cond","parseConditionalExpression","cloneArr","newPoints","prepareLayoutCallbackParams","hostEl","hostRect","labelLinePoints","LABEL_OPTION_TO_STYLE_KEYS","dummyTransformable","labelLayoutInnerStore","labelLineAnimationStore","extendWithKeys","LABEL_LAYOUT_PROPS","LabelManager","_labelList","_chartViewList","clearLabels","_addLabel","labelStyle","labelTransform","plain","setLocalTransform","originX","originY","labelGuide","cursor","attachedPos","attachedRot","addLabelsOfSeries","chartView","__model","disableLabelLayout","updateLayoutConfig","createDragHandler","defaultLabelAttr","degreeToRadian","local","needsUpdateLabelLine","guideLine","draggable","hostModel","off","labelsNeedsAdjustOnX","moveOverlap","labelsNeedsAdjustOnY","labelsNeedsHideOverlap","processLabelsOverall","ignoreLabelLineUpdate","_updateLabelLine","_animateLabels","visualStyle","invisible","disableLabelAnimation","isElementRemoved","oldLayout","layoutStore","newProps","prevStates","oldLayoutSelect","oldLayoutEmphasis","oldOpacity","layoutSelect","layoutEmphasis","newLayout","strokePercent","getLabelManager","installLabelLayout","registers","registerUpdateLifecycle","labelManager","updatedSeries","forEach","getUID","enableSubTypeDefaulter","subTypeDefaulters","registerSubTypeDefaulter","defaulter","componentTypeInfo","determineSubType","componentTypeMain","hasSubTypes","enableTopologicalTravel","entity","dependencyGetter","createDependencyGraphItem","predecessor","successor","targetNameList","fullNameList","noEntryList","thisItem","availableDeps","originalDeps","dep","getAvailableDependencies","entryCount","dependentName","thatItem","makeDepndencyGraph","targetNameSet","currComponentType","pop","currVertex","isInTargetNameSet","removeEdgeAndAdd","removeEdge","succComponentType","inheritDefaultOption","superOption","IS_CONTAINER","IS_EXTENDED_CLASS","typeArr","rootClz","mandatoryMethods","$constructor","ExtendedClass","isESClass","bind","__spreadArray","superCall","superApply","Function","SubClz","SupperClz","classBase","classAttr","isInstance","storage","componentFullType","container","makeContainer","throwWhenNotFound","types","CATEGORY_DEFAULT_VISUAL_INDEX","mappingMethod","_normalizeData","normalizers","visualHandler","visualHandlers","getColorMapper","_normalizedToVisual","normalizeVisualRange","pieceList","hasSpecialVisual","piece","originIndex","preprocessForPiecewise","categoryMap","cate","visualArr_1","setVisualToOption","preprocessForSpecifiedCategory","mapValueToVisual","normalized","getNormalizer","listVisualTypes","eachVisual","mapVisual","isPrimary","newVisual","newVal","retrieveVisuals","hasVisual","types_1","type1","type2","dependsOn","visualType1","visualType2","findPieceIndex","findClosestWhenOutside","possibleI","pieceValue","updatePossible","newAbs","makeApplyVisual","isNormalized","doMapCategory","returnRGBArray","zrColor","parsedVisual","linear","category","piecewise","getSpecifiedVisual","fixed","doMapFixed","makePartialColorVisualHandler","createNormalizedToNumericVisual","liftZ","setter","doMapToArray","visualArr","applyValue","colorChannel","loop","sourceExtent","pieceIndex","DUMMY_COMPONENT_NAME_PREFIX","INTERNAL_COMPONENT_ID_PREFIX","defaultEmphasis","subOpts","subOptName","TEXT_STYLE_OPTIONS","getDataItemValue","dataItem","isDataItemOption","mappingToExists","existings","newCmptOptions","mode","isNormalMergeMode","isReplaceMergeMode","isReplaceAllMode","existingIdIdxMap","cmptOption","isComponentIdInternal","prepareResult","optionId","makeComparableKey","existingIdx","mappingById","keyExistAndEqual","mappingByName","nextIdx","mappingByIndex","mappingInReplaceAllMode","mapResult","idMap","idNum","makeIdAndName","obj1","obj2","key1","convertOptionIdName","key2","isStringSafe","isNameSpecified","makeInternalComponentId","idSuffix","setComponentTypeToKeyInfo","componentModelCtor","existComponent","compressBatches","batchA","batchB","mapA","mapB","makeMap","mapToArray","sourceBatch","otherMap","otherDataIndices","lenj","isData","dataIndexInside","indexOfRawIndex","innerUniqueIndex","hostObj","parseFinder","finderInput","preParseFinder","mainTypeSpecified","queryOptionMap","others","defaultMainType","queryOption","queryResult","useDefault","enableAll","enableNone","finder","parsedKey","queryType","includeMainTypes","MULTIPLE_REFERRING","userOption","indexOption","idOption","nameOption","specified","firstCmpt","getAttribute","getTooltipRenderMode","renderModeOption","domSupported","groupData","array","getKey","buckets","sourceValue","isAutoPrecision","interpolateNumber","leftArr","rightArr","length_1","leftVal","rightVal","install","registerPainter","CanvasPainter","SVGPainter"],"mappings":"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","file":"static/js/24.3463dbcd.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 LRU from 'zrender/lib/core/LRU';\nimport { extend, indexOf, isArrayLike, isObject, keys, isArray, each } from 'zrender/lib/core/util';\nimport { getECData } from './innerStore';\nimport * as colorTool from 'zrender/lib/tool/color';\nimport { queryDataIndex, makeInner } from './model';\nimport Path from 'zrender/lib/graphic/Path';\nimport { error } from './log'; // Reserve 0 as default.\n\nvar _highlightNextDigit = 1;\nvar _highlightKeyMap = {};\nvar getSavedStates = makeInner();\nexport var HOVER_STATE_NORMAL = 0;\nexport var HOVER_STATE_BLUR = 1;\nexport var HOVER_STATE_EMPHASIS = 2;\nexport var SPECIAL_STATES = ['emphasis', 'blur', 'select'];\nexport var DISPLAY_STATES = ['normal', 'emphasis', 'blur', 'select'];\nexport var Z2_EMPHASIS_LIFT = 10;\nexport var Z2_SELECT_LIFT = 9;\nexport var HIGHLIGHT_ACTION_TYPE = 'highlight';\nexport var DOWNPLAY_ACTION_TYPE = 'downplay';\nexport var SELECT_ACTION_TYPE = 'select';\nexport var UNSELECT_ACTION_TYPE = 'unselect';\nexport var TOGGLE_SELECT_ACTION_TYPE = 'toggleSelect';\n\nfunction hasFillOrStroke(fillOrStroke) {\n return fillOrStroke != null && fillOrStroke !== 'none';\n} // Most lifted color are duplicated.\n\n\nvar liftedColorCache = new LRU(100);\n\nfunction liftColor(color) {\n if (typeof color !== 'string') {\n return color;\n }\n\n var liftedColor = liftedColorCache.get(color);\n\n if (!liftedColor) {\n liftedColor = colorTool.lift(color, -0.1);\n liftedColorCache.put(color, liftedColor);\n }\n\n return liftedColor;\n}\n\nfunction doChangeHoverState(el, stateName, hoverStateEnum) {\n if (el.onHoverStateChange && (el.hoverState || 0) !== hoverStateEnum) {\n el.onHoverStateChange(stateName);\n }\n\n el.hoverState = hoverStateEnum;\n}\n\nfunction singleEnterEmphasis(el) {\n // Only mark the flag.\n // States will be applied in the echarts.ts in next frame.\n doChangeHoverState(el, 'emphasis', HOVER_STATE_EMPHASIS);\n}\n\nfunction singleLeaveEmphasis(el) {\n // Only mark the flag.\n // States will be applied in the echarts.ts in next frame.\n if (el.hoverState === HOVER_STATE_EMPHASIS) {\n doChangeHoverState(el, 'normal', HOVER_STATE_NORMAL);\n }\n}\n\nfunction singleEnterBlur(el) {\n doChangeHoverState(el, 'blur', HOVER_STATE_BLUR);\n}\n\nfunction singleLeaveBlur(el) {\n if (el.hoverState === HOVER_STATE_BLUR) {\n doChangeHoverState(el, 'normal', HOVER_STATE_NORMAL);\n }\n}\n\nfunction singleEnterSelect(el) {\n el.selected = true;\n}\n\nfunction singleLeaveSelect(el) {\n el.selected = false;\n}\n\nfunction updateElementState(el, updater, commonParam) {\n updater(el, commonParam);\n}\n\nfunction traverseUpdateState(el, updater, commonParam) {\n updateElementState(el, updater, commonParam);\n el.isGroup && el.traverse(function (child) {\n updateElementState(child, updater, commonParam);\n });\n}\n\nexport function setStatesFlag(el, stateName) {\n switch (stateName) {\n case 'emphasis':\n el.hoverState = HOVER_STATE_EMPHASIS;\n break;\n\n case 'normal':\n el.hoverState = HOVER_STATE_NORMAL;\n break;\n\n case 'blur':\n el.hoverState = HOVER_STATE_BLUR;\n break;\n\n case 'select':\n el.selected = true;\n }\n}\n/**\n * If we reuse elements when rerender.\n * DONT forget to clearStates before we update the style and shape.\n * Or we may update on the wrong state instead of normal state.\n */\n\nexport function clearStates(el) {\n if (el.isGroup) {\n el.traverse(function (child) {\n child.clearStates();\n });\n } else {\n el.clearStates();\n }\n}\n\nfunction getFromStateStyle(el, props, toStateName, defaultValue) {\n var style = el.style;\n var fromState = {};\n\n for (var i = 0; i < props.length; i++) {\n var propName = props[i];\n var val = style[propName];\n fromState[propName] = val == null ? defaultValue && defaultValue[propName] : val;\n }\n\n for (var i = 0; i < el.animators.length; i++) {\n var animator = el.animators[i];\n\n if (animator.__fromStateTransition // Dont consider the animation to emphasis state.\n && animator.__fromStateTransition.indexOf(toStateName) < 0 && animator.targetName === 'style') {\n animator.saveFinalToTarget(fromState, props);\n }\n }\n\n return fromState;\n}\n\nfunction createEmphasisDefaultState(el, stateName, targetStates, state) {\n var hasSelect = targetStates && indexOf(targetStates, 'select') >= 0;\n var cloned = false;\n\n if (el instanceof Path) {\n var store = getSavedStates(el);\n var fromFill = hasSelect ? store.selectFill || store.normalFill : store.normalFill;\n var fromStroke = hasSelect ? store.selectStroke || store.normalStroke : store.normalStroke;\n\n if (hasFillOrStroke(fromFill) || hasFillOrStroke(fromStroke)) {\n state = state || {};\n var emphasisStyle = state.style || {}; // inherit case\n\n if (emphasisStyle.fill === 'inherit') {\n cloned = true;\n state = extend({}, state);\n emphasisStyle = extend({}, emphasisStyle);\n emphasisStyle.fill = fromFill;\n } // Apply default color lift\n else if (!hasFillOrStroke(emphasisStyle.fill) && hasFillOrStroke(fromFill)) {\n cloned = true; // Not modify the original value.\n\n state = extend({}, state);\n emphasisStyle = extend({}, emphasisStyle); // Already being applied 'emphasis'. DON'T lift color multiple times.\n\n emphasisStyle.fill = liftColor(fromFill);\n } // Not highlight stroke if fill has been highlighted.\n else if (!hasFillOrStroke(emphasisStyle.stroke) && hasFillOrStroke(fromStroke)) {\n if (!cloned) {\n state = extend({}, state);\n emphasisStyle = extend({}, emphasisStyle);\n }\n\n emphasisStyle.stroke = liftColor(fromStroke);\n }\n\n state.style = emphasisStyle;\n }\n }\n\n if (state) {\n // TODO Share with textContent?\n if (state.z2 == null) {\n if (!cloned) {\n state = extend({}, state);\n }\n\n var z2EmphasisLift = el.z2EmphasisLift;\n state.z2 = el.z2 + (z2EmphasisLift != null ? z2EmphasisLift : Z2_EMPHASIS_LIFT);\n }\n }\n\n return state;\n}\n\nfunction createSelectDefaultState(el, stateName, state) {\n // const hasSelect = indexOf(el.currentStates, stateName) >= 0;\n if (state) {\n // TODO Share with textContent?\n if (state.z2 == null) {\n state = extend({}, state);\n var z2SelectLift = el.z2SelectLift;\n state.z2 = el.z2 + (z2SelectLift != null ? z2SelectLift : Z2_SELECT_LIFT);\n }\n }\n\n return state;\n}\n\nfunction createBlurDefaultState(el, stateName, state) {\n var hasBlur = indexOf(el.currentStates, stateName) >= 0;\n var currentOpacity = el.style.opacity;\n var fromState = !hasBlur ? getFromStateStyle(el, ['opacity'], stateName, {\n opacity: 1\n }) : null;\n state = state || {};\n var blurStyle = state.style || {};\n\n if (blurStyle.opacity == null) {\n // clone state\n state = extend({}, state);\n blurStyle = extend({\n // Already being applied 'emphasis'. DON'T mul opacity multiple times.\n opacity: hasBlur ? currentOpacity : fromState.opacity * 0.1\n }, blurStyle);\n state.style = blurStyle;\n }\n\n return state;\n}\n\nfunction elementStateProxy(stateName, targetStates) {\n var state = this.states[stateName];\n\n if (this.style) {\n if (stateName === 'emphasis') {\n return createEmphasisDefaultState(this, stateName, targetStates, state);\n } else if (stateName === 'blur') {\n return createBlurDefaultState(this, stateName, state);\n } else if (stateName === 'select') {\n return createSelectDefaultState(this, stateName, state);\n }\n }\n\n return state;\n}\n/**FI\n * Set hover style (namely \"emphasis style\") of element.\n * @param el Should not be `zrender/graphic/Group`.\n * @param focus 'self' | 'selfInSeries' | 'series'\n */\n\n\nexport function setDefaultStateProxy(el) {\n el.stateProxy = elementStateProxy;\n var textContent = el.getTextContent();\n var textGuide = el.getTextGuideLine();\n\n if (textContent) {\n textContent.stateProxy = elementStateProxy;\n }\n\n if (textGuide) {\n textGuide.stateProxy = elementStateProxy;\n }\n}\nexport function enterEmphasisWhenMouseOver(el, e) {\n !shouldSilent(el, e) // \"emphasis\" event highlight has higher priority than mouse highlight.\n && !el.__highByOuter && traverseUpdateState(el, singleEnterEmphasis);\n}\nexport function leaveEmphasisWhenMouseOut(el, e) {\n !shouldSilent(el, e) // \"emphasis\" event highlight has higher priority than mouse highlight.\n && !el.__highByOuter && traverseUpdateState(el, singleLeaveEmphasis);\n}\nexport function enterEmphasis(el, highlightDigit) {\n el.__highByOuter |= 1 << (highlightDigit || 0);\n traverseUpdateState(el, singleEnterEmphasis);\n}\nexport function leaveEmphasis(el, highlightDigit) {\n !(el.__highByOuter &= ~(1 << (highlightDigit || 0))) && traverseUpdateState(el, singleLeaveEmphasis);\n}\nexport function enterBlur(el) {\n traverseUpdateState(el, singleEnterBlur);\n}\nexport function leaveBlur(el) {\n traverseUpdateState(el, singleLeaveBlur);\n}\nexport function enterSelect(el) {\n traverseUpdateState(el, singleEnterSelect);\n}\nexport function leaveSelect(el) {\n traverseUpdateState(el, singleLeaveSelect);\n}\n\nfunction shouldSilent(el, e) {\n return el.__highDownSilentOnTouch && e.zrByTouch;\n}\n\nexport function allLeaveBlur(api) {\n var model = api.getModel();\n model.eachComponent(function (componentType, componentModel) {\n var view = componentType === 'series' ? api.getViewOfSeriesModel(componentModel) : api.getViewOfComponentModel(componentModel); // Leave blur anyway\n\n view.group.traverse(function (child) {\n singleLeaveBlur(child);\n });\n });\n}\nexport function blurSeries(targetSeriesIndex, focus, blurScope, api) {\n var ecModel = api.getModel();\n blurScope = blurScope || 'coordinateSystem';\n\n function leaveBlurOfIndices(data, dataIndices) {\n for (var i = 0; i < dataIndices.length; i++) {\n var itemEl = data.getItemGraphicEl(dataIndices[i]);\n itemEl && leaveBlur(itemEl);\n }\n }\n\n if (targetSeriesIndex == null) {\n return;\n }\n\n if (!focus || focus === 'none') {\n return;\n }\n\n var targetSeriesModel = ecModel.getSeriesByIndex(targetSeriesIndex);\n var targetCoordSys = targetSeriesModel.coordinateSystem;\n\n if (targetCoordSys && targetCoordSys.master) {\n targetCoordSys = targetCoordSys.master;\n }\n\n var blurredSeries = [];\n ecModel.eachSeries(function (seriesModel) {\n var sameSeries = targetSeriesModel === seriesModel;\n var coordSys = seriesModel.coordinateSystem;\n\n if (coordSys && coordSys.master) {\n coordSys = coordSys.master;\n }\n\n var sameCoordSys = coordSys && targetCoordSys ? coordSys === targetCoordSys : sameSeries; // If there is no coordinate system. use sameSeries instead.\n\n if (!( // Not blur other series if blurScope series\n blurScope === 'series' && !sameSeries // Not blur other coordinate system if blurScope is coordinateSystem\n || blurScope === 'coordinateSystem' && !sameCoordSys // Not blur self series if focus is series.\n || focus === 'series' && sameSeries // TODO blurScope: coordinate system\n )) {\n var view = api.getViewOfSeriesModel(seriesModel);\n view.group.traverse(function (child) {\n singleEnterBlur(child);\n });\n\n if (isArrayLike(focus)) {\n leaveBlurOfIndices(seriesModel.getData(), focus);\n } else if (isObject(focus)) {\n var dataTypes = keys(focus);\n\n for (var d = 0; d < dataTypes.length; d++) {\n leaveBlurOfIndices(seriesModel.getData(dataTypes[d]), focus[dataTypes[d]]);\n }\n }\n\n blurredSeries.push(seriesModel);\n }\n });\n ecModel.eachComponent(function (componentType, componentModel) {\n if (componentType === 'series') {\n return;\n }\n\n var view = api.getViewOfComponentModel(componentModel);\n\n if (view && view.blurSeries) {\n view.blurSeries(blurredSeries, ecModel);\n }\n });\n}\nexport function blurComponent(componentMainType, componentIndex, api) {\n if (componentMainType == null || componentIndex == null) {\n return;\n }\n\n var componentModel = api.getModel().getComponent(componentMainType, componentIndex);\n\n if (!componentModel) {\n return;\n }\n\n var view = api.getViewOfComponentModel(componentModel);\n\n if (!view || !view.focusBlurEnabled) {\n return;\n }\n\n view.group.traverse(function (child) {\n singleEnterBlur(child);\n });\n}\nexport function blurSeriesFromHighlightPayload(seriesModel, payload, api) {\n var seriesIndex = seriesModel.seriesIndex;\n var data = seriesModel.getData(payload.dataType);\n var dataIndex = queryDataIndex(data, payload); // Pick the first one if there is multiple/none exists.\n\n dataIndex = (isArray(dataIndex) ? dataIndex[0] : dataIndex) || 0;\n var el = data.getItemGraphicEl(dataIndex);\n\n if (!el) {\n var count = data.count();\n var current = 0; // If data on dataIndex is NaN.\n\n while (!el && current < count) {\n el = data.getItemGraphicEl(current++);\n }\n }\n\n if (el) {\n var ecData = getECData(el);\n blurSeries(seriesIndex, ecData.focus, ecData.blurScope, api);\n } else {\n // If there is no element put on the data. Try getting it from raw option\n // TODO Should put it on seriesModel?\n var focus_1 = seriesModel.get(['emphasis', 'focus']);\n var blurScope = seriesModel.get(['emphasis', 'blurScope']);\n\n if (focus_1 != null) {\n blurSeries(seriesIndex, focus_1, blurScope, api);\n }\n }\n}\nexport function findComponentHighDownDispatchers(componentMainType, componentIndex, name, api) {\n var ret = {\n focusSelf: false,\n dispatchers: null\n };\n\n if (componentMainType == null || componentMainType === 'series' || componentIndex == null || name == null) {\n return ret;\n }\n\n var componentModel = api.getModel().getComponent(componentMainType, componentIndex);\n\n if (!componentModel) {\n return ret;\n }\n\n var view = api.getViewOfComponentModel(componentModel);\n\n if (!view || !view.findHighDownDispatchers) {\n return ret;\n }\n\n var dispatchers = view.findHighDownDispatchers(name); // At presnet, the component (like Geo) only blur inside itself.\n // So we do not use `blurScope` in component.\n\n var focusSelf;\n\n for (var i = 0; i < dispatchers.length; i++) {\n if (process.env.NODE_ENV !== 'production' && !isHighDownDispatcher(dispatchers[i])) {\n error('param should be highDownDispatcher');\n }\n\n if (getECData(dispatchers[i]).focus === 'self') {\n focusSelf = true;\n break;\n }\n }\n\n return {\n focusSelf: focusSelf,\n dispatchers: dispatchers\n };\n}\nexport function handleGlobalMouseOverForHighDown(dispatcher, e, api) {\n if (process.env.NODE_ENV !== 'production' && !isHighDownDispatcher(dispatcher)) {\n error('param should be highDownDispatcher');\n }\n\n var ecData = getECData(dispatcher);\n\n var _a = findComponentHighDownDispatchers(ecData.componentMainType, ecData.componentIndex, ecData.componentHighDownName, api),\n dispatchers = _a.dispatchers,\n focusSelf = _a.focusSelf; // If `findHighDownDispatchers` is supported on the component,\n // highlight/downplay elements with the same name.\n\n\n if (dispatchers) {\n if (focusSelf) {\n blurComponent(ecData.componentMainType, ecData.componentIndex, api);\n }\n\n each(dispatchers, function (dispatcher) {\n return enterEmphasisWhenMouseOver(dispatcher, e);\n });\n } else {\n // Try blur all in the related series. Then emphasis the hoverred.\n // TODO. progressive mode.\n blurSeries(ecData.seriesIndex, ecData.focus, ecData.blurScope, api);\n\n if (ecData.focus === 'self') {\n blurComponent(ecData.componentMainType, ecData.componentIndex, api);\n } // Other than series, component that not support `findHighDownDispatcher` will\n // also use it. But in this case, highlight/downplay are only supported in\n // mouse hover but not in dispatchAction.\n\n\n enterEmphasisWhenMouseOver(dispatcher, e);\n }\n}\nexport function handleGlboalMouseOutForHighDown(dispatcher, e, api) {\n if (process.env.NODE_ENV !== 'production' && !isHighDownDispatcher(dispatcher)) {\n error('param should be highDownDispatcher');\n }\n\n allLeaveBlur(api);\n var ecData = getECData(dispatcher);\n var dispatchers = findComponentHighDownDispatchers(ecData.componentMainType, ecData.componentIndex, ecData.componentHighDownName, api).dispatchers;\n\n if (dispatchers) {\n each(dispatchers, function (dispatcher) {\n return leaveEmphasisWhenMouseOut(dispatcher, e);\n });\n } else {\n leaveEmphasisWhenMouseOut(dispatcher, e);\n }\n}\nexport function toggleSelectionFromPayload(seriesModel, payload, api) {\n if (!isSelectChangePayload(payload)) {\n return;\n }\n\n var dataType = payload.dataType;\n var data = seriesModel.getData(dataType);\n var dataIndex = queryDataIndex(data, payload);\n\n if (!isArray(dataIndex)) {\n dataIndex = [dataIndex];\n }\n\n seriesModel[payload.type === TOGGLE_SELECT_ACTION_TYPE ? 'toggleSelect' : payload.type === SELECT_ACTION_TYPE ? 'select' : 'unselect'](dataIndex, dataType);\n}\nexport function updateSeriesElementSelection(seriesModel) {\n var allData = seriesModel.getAllData();\n each(allData, function (_a) {\n var data = _a.data,\n type = _a.type;\n data.eachItemGraphicEl(function (el, idx) {\n seriesModel.isSelected(idx, type) ? enterSelect(el) : leaveSelect(el);\n });\n });\n}\nexport function getAllSelectedIndices(ecModel) {\n var ret = [];\n ecModel.eachSeries(function (seriesModel) {\n var allData = seriesModel.getAllData();\n each(allData, function (_a) {\n var data = _a.data,\n type = _a.type;\n var dataIndices = seriesModel.getSelectedDataIndices();\n\n if (dataIndices.length > 0) {\n var item = {\n dataIndex: dataIndices,\n seriesIndex: seriesModel.seriesIndex\n };\n\n if (type != null) {\n item.dataType = type;\n }\n\n ret.push(item);\n }\n });\n });\n return ret;\n}\n/**\n * Enable the function that mouseover will trigger the emphasis state.\n *\n * NOTE:\n * This function should be used on the element with dataIndex, seriesIndex.\n *\n */\n\nexport function enableHoverEmphasis(el, focus, blurScope) {\n setAsHighDownDispatcher(el, true);\n traverseUpdateState(el, setDefaultStateProxy);\n enableHoverFocus(el, focus, blurScope);\n}\nexport function enableHoverFocus(el, focus, blurScope) {\n var ecData = getECData(el);\n\n if (focus != null) {\n // TODO dataIndex may be set after this function. This check is not useful.\n // if (ecData.dataIndex == null) {\n // if (__DEV__) {\n // console.warn('focus can only been set on element with dataIndex');\n // }\n // }\n // else {\n ecData.focus = focus;\n ecData.blurScope = blurScope; // }\n } else if (ecData.focus) {\n ecData.focus = null;\n }\n}\nvar OTHER_STATES = ['emphasis', 'blur', 'select'];\nvar defaultStyleGetterMap = {\n itemStyle: 'getItemStyle',\n lineStyle: 'getLineStyle',\n areaStyle: 'getAreaStyle'\n};\n/**\n * Set emphasis/blur/selected states of element.\n */\n\nexport function setStatesStylesFromModel(el, itemModel, styleType, // default itemStyle\ngetter) {\n styleType = styleType || 'itemStyle';\n\n for (var i = 0; i < OTHER_STATES.length; i++) {\n var stateName = OTHER_STATES[i];\n var model = itemModel.getModel([stateName, styleType]);\n var state = el.ensureState(stateName); // Let it throw error if getterType is not found.\n\n state.style = getter ? getter(model) : model[defaultStyleGetterMap[styleType]]();\n }\n}\n/**\n * @parame el\n * @param el.highDownSilentOnTouch\n * In touch device, mouseover event will be trigger on touchstart event\n * (see module:zrender/dom/HandlerProxy). By this mechanism, we can\n * conveniently use hoverStyle when tap on touch screen without additional\n * code for compatibility.\n * But if the chart/component has select feature, which usually also use\n * hoverStyle, there might be conflict between 'select-highlight' and\n * 'hover-highlight' especially when roam is enabled (see geo for example).\n * In this case, `highDownSilentOnTouch` should be used to disable\n * hover-highlight on touch device.\n * @param asDispatcher If `false`, do not set as \"highDownDispatcher\".\n */\n\nexport function setAsHighDownDispatcher(el, asDispatcher) {\n var disable = asDispatcher === false;\n var extendedEl = el; // Make `highDownSilentOnTouch` and `onStateChange` only work after\n // `setAsHighDownDispatcher` called. Avoid it is modified by user unexpectedly.\n\n if (el.highDownSilentOnTouch) {\n extendedEl.__highDownSilentOnTouch = el.highDownSilentOnTouch;\n } // Simple optimize, since this method might be\n // called for each elements of a group in some cases.\n\n\n if (!disable || extendedEl.__highDownDispatcher) {\n // Emphasis, normal can be triggered manually by API or other components like hover link.\n // el[method]('emphasis', onElementEmphasisEvent)[method]('normal', onElementNormalEvent);\n // Also keep previous record.\n extendedEl.__highByOuter = extendedEl.__highByOuter || 0;\n extendedEl.__highDownDispatcher = !disable;\n }\n}\nexport function isHighDownDispatcher(el) {\n return !!(el && el.__highDownDispatcher);\n}\n/**\n * Enable component highlight/downplay features:\n * + hover link (within the same name)\n * + focus blur in component\n */\n\nexport function enableComponentHighDownFeatures(el, componentModel, componentHighDownName) {\n var ecData = getECData(el);\n ecData.componentMainType = componentModel.mainType;\n ecData.componentIndex = componentModel.componentIndex;\n ecData.componentHighDownName = componentHighDownName;\n}\n/**\n * Support hightlight/downplay record on each elements.\n * For the case: hover highlight/downplay (legend, visualMap, ...) and\n * user triggerred hightlight/downplay should not conflict.\n * Only all of the highlightDigit cleared, return to normal.\n * @param {string} highlightKey\n * @return {number} highlightDigit\n */\n\nexport function getHighlightDigit(highlightKey) {\n var highlightDigit = _highlightKeyMap[highlightKey];\n\n if (highlightDigit == null && _highlightNextDigit <= 32) {\n highlightDigit = _highlightKeyMap[highlightKey] = _highlightNextDigit++;\n }\n\n return highlightDigit;\n}\nexport function isSelectChangePayload(payload) {\n var payloadType = payload.type;\n return payloadType === SELECT_ACTION_TYPE || payloadType === UNSELECT_ACTION_TYPE || payloadType === TOGGLE_SELECT_ACTION_TYPE;\n}\nexport function isHighDownPayload(payload) {\n var payloadType = payload.type;\n return payloadType === HIGHLIGHT_ACTION_TYPE || payloadType === DOWNPLAY_ACTION_TYPE;\n}\nexport function savePathStates(el) {\n var store = getSavedStates(el);\n store.normalFill = el.style.fill;\n store.normalStroke = el.style.stroke;\n var selectState = el.states.select || {};\n store.selectFill = selectState.style && selectState.style.fill || null;\n store.selectStroke = selectState.style && selectState.style.stroke || null;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as numberUtil from '../util/number';\nvar roundNumber = numberUtil.round;\n/**\n * @param extent Both extent[0] and extent[1] should be valid number.\n * Should be extent[0] < extent[1].\n * @param splitNumber splitNumber should be >= 1.\n */\n\nexport function intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) {\n var result = {};\n var span = extent[1] - extent[0];\n var interval = result.interval = numberUtil.nice(span / splitNumber, true);\n\n if (minInterval != null && interval < minInterval) {\n interval = result.interval = minInterval;\n }\n\n if (maxInterval != null && interval > maxInterval) {\n interval = result.interval = maxInterval;\n } // Tow more digital for tick.\n\n\n var precision = result.intervalPrecision = getIntervalPrecision(interval); // Niced extent inside original extent\n\n var niceTickExtent = result.niceTickExtent = [roundNumber(Math.ceil(extent[0] / interval) * interval, precision), roundNumber(Math.floor(extent[1] / interval) * interval, precision)];\n fixExtent(niceTickExtent, extent);\n return result;\n}\n/**\n * @return interval precision\n */\n\nexport function getIntervalPrecision(interval) {\n // Tow more digital for tick.\n return numberUtil.getPrecision(interval) + 2;\n}\n\nfunction clamp(niceTickExtent, idx, extent) {\n niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]);\n} // In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent.\n\n\nexport function fixExtent(niceTickExtent, extent) {\n !isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]);\n !isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]);\n clamp(niceTickExtent, 0, extent);\n clamp(niceTickExtent, 1, extent);\n\n if (niceTickExtent[0] > niceTickExtent[1]) {\n niceTickExtent[0] = niceTickExtent[1];\n }\n}\nexport function contain(val, extent) {\n return val >= extent[0] && val <= extent[1];\n}\nexport function normalize(val, extent) {\n if (extent[1] === extent[0]) {\n return 0.5;\n }\n\n return (val - extent[0]) / (extent[1] - extent[0]);\n}\nexport function scale(val, extent) {\n return val * (extent[1] - extent[0]) + extent[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*/\nvar ORIGIN_METHOD = '\\0__throttleOriginMethod';\nvar RATE = '\\0__throttleRate';\nvar THROTTLE_TYPE = '\\0__throttleType';\n;\n/**\n * @public\n * @param {(Function)} fn\n * @param {number} [delay=0] Unit: ms.\n * @param {boolean} [debounce=false]\n * true: If call interval less than `delay`, only the last call works.\n * false: If call interval less than `delay, call works on fixed rate.\n * @return {(Function)} throttled fn.\n */\n\nexport function throttle(fn, delay, debounce) {\n var currCall;\n var lastCall = 0;\n var lastExec = 0;\n var timer = null;\n var diff;\n var scope;\n var args;\n var debounceNextCall;\n delay = delay || 0;\n\n function exec() {\n lastExec = new Date().getTime();\n timer = null;\n fn.apply(scope, args || []);\n }\n\n var cb = function () {\n var cbArgs = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n cbArgs[_i] = arguments[_i];\n }\n\n currCall = new Date().getTime();\n scope = this;\n args = cbArgs;\n var thisDelay = debounceNextCall || delay;\n var thisDebounce = debounceNextCall || debounce;\n debounceNextCall = null;\n diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay;\n clearTimeout(timer); // Here we should make sure that: the `exec` SHOULD NOT be called later\n // than a new call of `cb`, that is, preserving the command order. Consider\n // calculating \"scale rate\" when roaming as an example. When a call of `cb`\n // happens, either the `exec` is called dierectly, or the call is delayed.\n // But the delayed call should never be later than next call of `cb`. Under\n // this assurance, we can simply update view state each time `dispatchAction`\n // triggered by user roaming, but not need to add extra code to avoid the\n // state being \"rolled-back\".\n\n if (thisDebounce) {\n timer = setTimeout(exec, thisDelay);\n } else {\n if (diff >= 0) {\n exec();\n } else {\n timer = setTimeout(exec, -diff);\n }\n }\n\n lastCall = currCall;\n };\n /**\n * Clear throttle.\n * @public\n */\n\n\n cb.clear = function () {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n };\n /**\n * Enable debounce once.\n */\n\n\n cb.debounceNextCall = function (debounceDelay) {\n debounceNextCall = debounceDelay;\n };\n\n return cb;\n}\n/**\n * Create throttle method or update throttle rate.\n *\n * @example\n * ComponentView.prototype.render = function () {\n * ...\n * throttle.createOrUpdate(\n * this,\n * '_dispatchAction',\n * this.model.get('throttle'),\n * 'fixRate'\n * );\n * };\n * ComponentView.prototype.remove = function () {\n * throttle.clear(this, '_dispatchAction');\n * };\n * ComponentView.prototype.dispose = function () {\n * throttle.clear(this, '_dispatchAction');\n * };\n *\n */\n\nexport function createOrUpdate(obj, fnAttr, rate, throttleType) {\n var fn = obj[fnAttr];\n\n if (!fn) {\n return;\n }\n\n var originFn = fn[ORIGIN_METHOD] || fn;\n var lastThrottleType = fn[THROTTLE_TYPE];\n var lastRate = fn[RATE];\n\n if (lastRate !== rate || lastThrottleType !== throttleType) {\n if (rate == null || !throttleType) {\n return obj[fnAttr] = originFn;\n }\n\n fn = obj[fnAttr] = throttle(originFn, rate, throttleType === 'debounce');\n fn[ORIGIN_METHOD] = originFn;\n fn[THROTTLE_TYPE] = throttleType;\n fn[RATE] = rate;\n }\n\n return fn;\n}\n/**\n * Clear throttle. Example see throttle.createOrUpdate.\n */\n\nexport function clear(obj, fnAttr) {\n var fn = obj[fnAttr];\n\n if (fn && fn[ORIGIN_METHOD]) {\n obj[fnAttr] = fn[ORIGIN_METHOD];\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 getItemVisualFromData(data, dataIndex, key) {\n switch (key) {\n case 'color':\n var style = data.getItemVisual(dataIndex, 'style');\n return style[data.getVisual('drawType')];\n\n case 'opacity':\n return data.getItemVisual(dataIndex, 'style').opacity;\n\n case 'symbol':\n case 'symbolSize':\n case 'liftZ':\n return data.getItemVisual(dataIndex, key);\n\n default:\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Unknown visual type \" + key);\n }\n\n }\n}\nexport function getVisualFromData(data, key) {\n switch (key) {\n case 'color':\n var style = data.getVisual('style');\n return style[data.getVisual('drawType')];\n\n case 'opacity':\n return data.getVisual('style').opacity;\n\n case 'symbol':\n case 'symbolSize':\n case 'liftZ':\n return data.getVisual(key);\n\n default:\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Unknown visual type \" + key);\n }\n\n }\n}\nexport function setItemVisualFromData(data, dataIndex, key, value) {\n switch (key) {\n case 'color':\n // Make sure not sharing style object.\n var style = data.ensureUniqueItemVisual(dataIndex, 'style');\n style[data.getVisual('drawType')] = value; // Mark the color has been changed, not from palette anymore\n\n data.setItemVisual(dataIndex, 'colorFromPalette', false);\n break;\n\n case 'opacity':\n data.ensureUniqueItemVisual(dataIndex, 'style').opacity = value;\n break;\n\n case 'symbol':\n case 'symbolSize':\n case 'liftZ':\n data.setItemVisual(dataIndex, key, value);\n break;\n\n default:\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Unknown visual type \" + key);\n }\n\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as pathTool from 'zrender/lib/tool/path';\nimport * as matrix from 'zrender/lib/core/matrix';\nimport * as vector from 'zrender/lib/core/vector';\nimport Path from 'zrender/lib/graphic/Path';\nimport Transformable from 'zrender/lib/core/Transformable';\nimport ZRImage from 'zrender/lib/graphic/Image';\nimport Group from 'zrender/lib/graphic/Group';\nimport ZRText from 'zrender/lib/graphic/Text';\nimport Circle from 'zrender/lib/graphic/shape/Circle';\nimport Ellipse from 'zrender/lib/graphic/shape/Ellipse';\nimport Sector from 'zrender/lib/graphic/shape/Sector';\nimport Ring from 'zrender/lib/graphic/shape/Ring';\nimport Polygon from 'zrender/lib/graphic/shape/Polygon';\nimport Polyline from 'zrender/lib/graphic/shape/Polyline';\nimport Rect from 'zrender/lib/graphic/shape/Rect';\nimport Line from 'zrender/lib/graphic/shape/Line';\nimport BezierCurve from 'zrender/lib/graphic/shape/BezierCurve';\nimport Arc from 'zrender/lib/graphic/shape/Arc';\nimport CompoundPath from 'zrender/lib/graphic/CompoundPath';\nimport LinearGradient from 'zrender/lib/graphic/LinearGradient';\nimport RadialGradient from 'zrender/lib/graphic/RadialGradient';\nimport BoundingRect from 'zrender/lib/core/BoundingRect';\nimport OrientedBoundingRect from 'zrender/lib/core/OrientedBoundingRect';\nimport Point from 'zrender/lib/core/Point';\nimport IncrementalDisplayable from 'zrender/lib/graphic/IncrementalDisplayable';\nimport * as subPixelOptimizeUtil from 'zrender/lib/graphic/helper/subPixelOptimize';\nimport { extend, isArrayLike, map, defaults, isString, keys, each, hasOwn } from 'zrender/lib/core/util';\nimport { getECData } from './innerStore';\nimport { updateProps, initProps, removeElement, removeElementWithFadeOut, isElementRemoved } from '../animation/basicTrasition';\n/**\n * @deprecated export for compatitable reason\n */\n\nexport { updateProps, initProps, removeElement, removeElementWithFadeOut, isElementRemoved };\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar _customShapeMap = {};\n/**\n * Extend shape with parameters\n */\n\nexport function extendShape(opts) {\n return Path.extend(opts);\n}\nvar extendPathFromString = pathTool.extendFromString;\n/**\n * Extend path\n */\n\nexport function extendPath(pathData, opts) {\n return extendPathFromString(pathData, opts);\n}\n/**\n * Register a user defined shape.\n * The shape class can be fetched by `getShapeClass`\n * This method will overwrite the registered shapes, including\n * the registered built-in shapes, if using the same `name`.\n * The shape can be used in `custom series` and\n * `graphic component` by declaring `{type: name}`.\n *\n * @param name\n * @param ShapeClass Can be generated by `extendShape`.\n */\n\nexport function registerShape(name, ShapeClass) {\n _customShapeMap[name] = ShapeClass;\n}\n/**\n * Find shape class registered by `registerShape`. Usually used in\n * fetching user defined shape.\n *\n * [Caution]:\n * (1) This method **MUST NOT be used inside echarts !!!**, unless it is prepared\n * to use user registered shapes.\n * Because the built-in shape (see `getBuiltInShape`) will be registered by\n * `registerShape` by default. That enables users to get both built-in\n * shapes as well as the shapes belonging to themsleves. But users can overwrite\n * the built-in shapes by using names like 'circle', 'rect' via calling\n * `registerShape`. So the echarts inner featrues should not fetch shapes from here\n * in case that it is overwritten by users, except that some features, like\n * `custom series`, `graphic component`, do it deliberately.\n *\n * (2) In the features like `custom series`, `graphic component`, the user input\n * `{tpye: 'xxx'}` does not only specify shapes but also specify other graphic\n * elements like `'group'`, `'text'`, `'image'` or event `'path'`. Those names\n * are reserved names, that is, if some user register a shape named `'image'`,\n * the shape will not be used. If we intending to add some more reserved names\n * in feature, that might bring break changes (disable some existing user shape\n * names). But that case probably rearly happen. So we dont make more mechanism\n * to resolve this issue here.\n *\n * @param name\n * @return The shape class. If not found, return nothing.\n */\n\nexport function getShapeClass(name) {\n if (_customShapeMap.hasOwnProperty(name)) {\n return _customShapeMap[name];\n }\n}\n/**\n * Create a path element from path data string\n * @param pathData\n * @param opts\n * @param rect\n * @param layout 'center' or 'cover' default to be cover\n */\n\nexport function makePath(pathData, opts, rect, layout) {\n var path = pathTool.createFromString(pathData, opts);\n\n if (rect) {\n if (layout === 'center') {\n rect = centerGraphic(rect, path.getBoundingRect());\n }\n\n resizePath(path, rect);\n }\n\n return path;\n}\n/**\n * Create a image element from image url\n * @param imageUrl image url\n * @param opts options\n * @param rect constrain rect\n * @param layout 'center' or 'cover'. Default to be 'cover'\n */\n\nexport function makeImage(imageUrl, rect, layout) {\n var zrImg = new ZRImage({\n style: {\n image: imageUrl,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n },\n onload: function (img) {\n if (layout === 'center') {\n var boundingRect = {\n width: img.width,\n height: img.height\n };\n zrImg.setStyle(centerGraphic(rect, boundingRect));\n }\n }\n });\n return zrImg;\n}\n/**\n * Get position of centered element in bounding box.\n *\n * @param rect element local bounding box\n * @param boundingRect constraint bounding box\n * @return element position containing x, y, width, and height\n */\n\nfunction centerGraphic(rect, boundingRect) {\n // Set rect to center, keep width / height ratio.\n var aspect = boundingRect.width / boundingRect.height;\n var width = rect.height * aspect;\n var height;\n\n if (width <= rect.width) {\n height = rect.height;\n } else {\n width = rect.width;\n height = width / aspect;\n }\n\n var cx = rect.x + rect.width / 2;\n var cy = rect.y + rect.height / 2;\n return {\n x: cx - width / 2,\n y: cy - height / 2,\n width: width,\n height: height\n };\n}\n\nexport var mergePath = pathTool.mergePath;\n/**\n * Resize a path to fit the rect\n * @param path\n * @param rect\n */\n\nexport function resizePath(path, rect) {\n if (!path.applyTransform) {\n return;\n }\n\n var pathRect = path.getBoundingRect();\n var m = pathRect.calculateTransform(rect);\n path.applyTransform(m);\n}\n/**\n * Sub pixel optimize line for canvas\n */\n\nexport function subPixelOptimizeLine(param) {\n subPixelOptimizeUtil.subPixelOptimizeLine(param.shape, param.shape, param.style);\n return param;\n}\n/**\n * Sub pixel optimize rect for canvas\n */\n\nexport function subPixelOptimizeRect(param) {\n subPixelOptimizeUtil.subPixelOptimizeRect(param.shape, param.shape, param.style);\n return param;\n}\n/**\n * Sub pixel optimize for canvas\n *\n * @param position Coordinate, such as x, y\n * @param lineWidth Should be nonnegative integer.\n * @param positiveOrNegative Default false (negative).\n * @return Optimized position.\n */\n\nexport var subPixelOptimize = subPixelOptimizeUtil.subPixelOptimize;\n/**\n * Get transform matrix of target (param target),\n * in coordinate of its ancestor (param ancestor)\n *\n * @param target\n * @param [ancestor]\n */\n\nexport function getTransform(target, ancestor) {\n var mat = matrix.identity([]);\n\n while (target && target !== ancestor) {\n matrix.mul(mat, target.getLocalTransform(), mat);\n target = target.parent;\n }\n\n return mat;\n}\n/**\n * Apply transform to an vertex.\n * @param target [x, y]\n * @param transform Can be:\n * + Transform matrix: like [1, 0, 0, 1, 0, 0]\n * + {position, rotation, scale}, the same as `zrender/Transformable`.\n * @param invert Whether use invert matrix.\n * @return [x, y]\n */\n\nexport function applyTransform(target, transform, invert) {\n if (transform && !isArrayLike(transform)) {\n transform = Transformable.getLocalTransform(transform);\n }\n\n if (invert) {\n transform = matrix.invert([], transform);\n }\n\n return vector.applyTransform([], target, transform);\n}\n/**\n * @param direction 'left' 'right' 'top' 'bottom'\n * @param transform Transform matrix: like [1, 0, 0, 1, 0, 0]\n * @param invert Whether use invert matrix.\n * @return Transformed direction. 'left' 'right' 'top' 'bottom'\n */\n\nexport function transformDirection(direction, transform, invert) {\n // Pick a base, ensure that transform result will not be (0, 0).\n var hBase = transform[4] === 0 || transform[5] === 0 || transform[0] === 0 ? 1 : Math.abs(2 * transform[4] / transform[0]);\n var vBase = transform[4] === 0 || transform[5] === 0 || transform[2] === 0 ? 1 : Math.abs(2 * transform[4] / transform[2]);\n var vertex = [direction === 'left' ? -hBase : direction === 'right' ? hBase : 0, direction === 'top' ? -vBase : direction === 'bottom' ? vBase : 0];\n vertex = applyTransform(vertex, transform, invert);\n return Math.abs(vertex[0]) > Math.abs(vertex[1]) ? vertex[0] > 0 ? 'right' : 'left' : vertex[1] > 0 ? 'bottom' : 'top';\n}\n\nfunction isNotGroup(el) {\n return !el.isGroup;\n}\n\nfunction isPath(el) {\n return el.shape != null;\n}\n/**\n * Apply group transition animation from g1 to g2.\n * If no animatableModel, no animation.\n */\n\n\nexport function groupTransition(g1, g2, animatableModel) {\n if (!g1 || !g2) {\n return;\n }\n\n function getElMap(g) {\n var elMap = {};\n g.traverse(function (el) {\n if (isNotGroup(el) && el.anid) {\n elMap[el.anid] = el;\n }\n });\n return elMap;\n }\n\n function getAnimatableProps(el) {\n var obj = {\n x: el.x,\n y: el.y,\n rotation: el.rotation\n };\n\n if (isPath(el)) {\n obj.shape = extend({}, el.shape);\n }\n\n return obj;\n }\n\n var elMap1 = getElMap(g1);\n g2.traverse(function (el) {\n if (isNotGroup(el) && el.anid) {\n var oldEl = elMap1[el.anid];\n\n if (oldEl) {\n var newProp = getAnimatableProps(el);\n el.attr(getAnimatableProps(oldEl));\n updateProps(el, newProp, animatableModel, getECData(el).dataIndex);\n }\n }\n });\n}\nexport function clipPointsByRect(points, rect) {\n // FIXME: this way migth be incorrect when grpahic clipped by a corner.\n // and when element have border.\n return map(points, function (point) {\n var x = point[0];\n x = mathMax(x, rect.x);\n x = mathMin(x, rect.x + rect.width);\n var y = point[1];\n y = mathMax(y, rect.y);\n y = mathMin(y, rect.y + rect.height);\n return [x, y];\n });\n}\n/**\n * Return a new clipped rect. If rect size are negative, return undefined.\n */\n\nexport function clipRectByRect(targetRect, rect) {\n var x = mathMax(targetRect.x, rect.x);\n var x2 = mathMin(targetRect.x + targetRect.width, rect.x + rect.width);\n var y = mathMax(targetRect.y, rect.y);\n var y2 = mathMin(targetRect.y + targetRect.height, rect.y + rect.height); // If the total rect is cliped, nothing, including the border,\n // should be painted. So return undefined.\n\n if (x2 >= x && y2 >= y) {\n return {\n x: x,\n y: y,\n width: x2 - x,\n height: y2 - y\n };\n }\n}\nexport function createIcon(iconStr, // Support 'image://' or 'path://' or direct svg path.\nopt, rect) {\n var innerOpts = extend({\n rectHover: true\n }, opt);\n var style = innerOpts.style = {\n strokeNoScale: true\n };\n rect = rect || {\n x: -1,\n y: -1,\n width: 2,\n height: 2\n };\n\n if (iconStr) {\n return iconStr.indexOf('image://') === 0 ? (style.image = iconStr.slice(8), defaults(style, rect), new ZRImage(innerOpts)) : makePath(iconStr.replace('path://', ''), innerOpts, rect, 'center');\n }\n}\n/**\n * Return `true` if the given line (line `a`) and the given polygon\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n */\n\nexport function linePolygonIntersect(a1x, a1y, a2x, a2y, points) {\n for (var i = 0, p2 = points[points.length - 1]; i < points.length; i++) {\n var p = points[i];\n\n if (lineLineIntersect(a1x, a1y, a2x, a2y, p[0], p[1], p2[0], p2[1])) {\n return true;\n }\n\n p2 = p;\n }\n}\n/**\n * Return `true` if the given two lines (line `a` and line `b`)\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n */\n\nexport function lineLineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) {\n // let `vec_m` to be `vec_a2 - vec_a1` and `vec_n` to be `vec_b2 - vec_b1`.\n var mx = a2x - a1x;\n var my = a2y - a1y;\n var nx = b2x - b1x;\n var ny = b2y - b1y; // `vec_m` and `vec_n` are parallel iff\n // exising `k` such that `vec_m = k · vec_n`, equivalent to `vec_m X vec_n = 0`.\n\n var nmCrossProduct = crossProduct2d(nx, ny, mx, my);\n\n if (nearZero(nmCrossProduct)) {\n return false;\n } // `vec_m` and `vec_n` are intersect iff\n // existing `p` and `q` in [0, 1] such that `vec_a1 + p * vec_m = vec_b1 + q * vec_n`,\n // such that `q = ((vec_a1 - vec_b1) X vec_m) / (vec_n X vec_m)`\n // and `p = ((vec_a1 - vec_b1) X vec_n) / (vec_n X vec_m)`.\n\n\n var b1a1x = a1x - b1x;\n var b1a1y = a1y - b1y;\n var q = crossProduct2d(b1a1x, b1a1y, mx, my) / nmCrossProduct;\n\n if (q < 0 || q > 1) {\n return false;\n }\n\n var p = crossProduct2d(b1a1x, b1a1y, nx, ny) / nmCrossProduct;\n\n if (p < 0 || p > 1) {\n return false;\n }\n\n return true;\n}\n/**\n * Cross product of 2-dimension vector.\n */\n\nfunction crossProduct2d(x1, y1, x2, y2) {\n return x1 * y2 - x2 * y1;\n}\n\nfunction nearZero(val) {\n return val <= 1e-6 && val >= -1e-6;\n}\n\nexport function setTooltipConfig(opt) {\n var itemTooltipOption = opt.itemTooltipOption;\n var componentModel = opt.componentModel;\n var itemName = opt.itemName;\n var itemTooltipOptionObj = isString(itemTooltipOption) ? {\n formatter: itemTooltipOption\n } : itemTooltipOption;\n var mainType = componentModel.mainType;\n var componentIndex = componentModel.componentIndex;\n var formatterParams = {\n componentType: mainType,\n name: itemName,\n $vars: ['name']\n };\n formatterParams[mainType + 'Index'] = componentIndex;\n var formatterParamsExtra = opt.formatterParamsExtra;\n\n if (formatterParamsExtra) {\n each(keys(formatterParamsExtra), function (key) {\n if (!hasOwn(formatterParams, key)) {\n formatterParams[key] = formatterParamsExtra[key];\n formatterParams.$vars.push(key);\n }\n });\n }\n\n var ecData = getECData(opt.el);\n ecData.componentMainType = mainType;\n ecData.componentIndex = componentIndex;\n ecData.tooltipConfig = {\n name: itemName,\n option: defaults({\n content: itemName,\n formatterParams: formatterParams\n }, itemTooltipOptionObj)\n };\n} // Register built-in shapes. These shapes might be overwirtten\n// by users, although we do not recommend that.\n\nregisterShape('circle', Circle);\nregisterShape('ellipse', Ellipse);\nregisterShape('sector', Sector);\nregisterShape('ring', Ring);\nregisterShape('polygon', Polygon);\nregisterShape('polyline', Polyline);\nregisterShape('rect', Rect);\nregisterShape('line', Line);\nregisterShape('bezierCurve', BezierCurve);\nregisterShape('arc', Arc);\nexport { Group, ZRImage as Image, ZRText as Text, Circle, Ellipse, Sector, Ring, Polygon, Polyline, Rect, Line, BezierCurve, Arc, IncrementalDisplayable, CompoundPath, LinearGradient, RadialGradient, BoundingRect, OrientedBoundingRect, Point, Path };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 clazzUtil from '../util/clazz';\n\nvar Scale =\n/** @class */\nfunction () {\n function Scale(setting) {\n this._setting = setting || {};\n this._extent = [Infinity, -Infinity];\n }\n\n Scale.prototype.getSetting = function (name) {\n return this._setting[name];\n };\n /**\n * Set extent from data\n */\n\n\n Scale.prototype.unionExtent = function (other) {\n var extent = this._extent;\n other[0] < extent[0] && (extent[0] = other[0]);\n other[1] > extent[1] && (extent[1] = other[1]); // not setExtent because in log axis it may transformed to power\n // this.setExtent(extent[0], extent[1]);\n };\n /**\n * Set extent from data\n */\n\n\n Scale.prototype.unionExtentFromData = function (data, dim) {\n this.unionExtent(data.getApproximateExtent(dim));\n };\n /**\n * Get extent\n *\n * Extent is always in increase order.\n */\n\n\n Scale.prototype.getExtent = function () {\n return this._extent.slice();\n };\n /**\n * Set extent\n */\n\n\n Scale.prototype.setExtent = function (start, end) {\n var thisExtent = this._extent;\n\n if (!isNaN(start)) {\n thisExtent[0] = start;\n }\n\n if (!isNaN(end)) {\n thisExtent[1] = end;\n }\n };\n /**\n * If value is in extent range\n */\n\n\n Scale.prototype.isInExtentRange = function (value) {\n return this._extent[0] <= value && this._extent[1] >= value;\n };\n /**\n * When axis extent depends on data and no data exists,\n * axis ticks should not be drawn, which is named 'blank'.\n */\n\n\n Scale.prototype.isBlank = function () {\n return this._isBlank;\n };\n /**\n * When axis extent depends on data and no data exists,\n * axis ticks should not be drawn, which is named 'blank'.\n */\n\n\n Scale.prototype.setBlank = function (isBlank) {\n this._isBlank = isBlank;\n };\n\n return Scale;\n}();\n\nclazzUtil.enableClassManagement(Scale);\nexport default Scale;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { Point, Path, Polyline } from '../util/graphic';\nimport PathProxy from 'zrender/lib/core/PathProxy';\nimport { normalizeRadian } from 'zrender/lib/contain/util';\nimport { cubicProjectPoint, quadraticProjectPoint } from 'zrender/lib/core/curve';\nimport { defaults, retrieve2 } from 'zrender/lib/core/util';\nimport { invert } from 'zrender/lib/core/matrix';\nimport * as vector from 'zrender/lib/core/vector';\nimport { DISPLAY_STATES, SPECIAL_STATES } from '../util/states';\nvar PI2 = Math.PI * 2;\nvar CMD = PathProxy.CMD;\nvar DEFAULT_SEARCH_SPACE = ['top', 'right', 'bottom', 'left'];\n\nfunction getCandidateAnchor(pos, distance, rect, outPt, outDir) {\n var width = rect.width;\n var height = rect.height;\n\n switch (pos) {\n case 'top':\n outPt.set(rect.x + width / 2, rect.y - distance);\n outDir.set(0, -1);\n break;\n\n case 'bottom':\n outPt.set(rect.x + width / 2, rect.y + height + distance);\n outDir.set(0, 1);\n break;\n\n case 'left':\n outPt.set(rect.x - distance, rect.y + height / 2);\n outDir.set(-1, 0);\n break;\n\n case 'right':\n outPt.set(rect.x + width + distance, rect.y + height / 2);\n outDir.set(1, 0);\n break;\n }\n}\n\nfunction projectPointToArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y, out) {\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n x /= d;\n y /= d; // Intersect point.\n\n var ox = x * r + cx;\n var oy = y * r + cy;\n\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var angle = Math.atan2(y, x);\n\n if (angle < 0) {\n angle += PI2;\n }\n\n if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {\n // Project point is on the arc.\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n\n var x1 = r * Math.cos(startAngle) + cx;\n var y1 = r * Math.sin(startAngle) + cy;\n var x2 = r * Math.cos(endAngle) + cx;\n var y2 = r * Math.sin(endAngle) + cy;\n var d1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y);\n var d2 = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y);\n\n if (d1 < d2) {\n out[0] = x1;\n out[1] = y1;\n return Math.sqrt(d1);\n } else {\n out[0] = x2;\n out[1] = y2;\n return Math.sqrt(d2);\n }\n}\n\nfunction projectPointToLine(x1, y1, x2, y2, x, y, out, limitToEnds) {\n var dx = x - x1;\n var dy = y - y1;\n var dx1 = x2 - x1;\n var dy1 = y2 - y1;\n var lineLen = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n dx1 /= lineLen;\n dy1 /= lineLen; // dot product\n\n var projectedLen = dx * dx1 + dy * dy1;\n var t = projectedLen / lineLen;\n\n if (limitToEnds) {\n t = Math.min(Math.max(t, 0), 1);\n }\n\n t *= lineLen;\n var ox = out[0] = x1 + t * dx1;\n var oy = out[1] = y1 + t * dy1;\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\n\nfunction projectPointToRect(x1, y1, width, height, x, y, out) {\n if (width < 0) {\n x1 = x1 + width;\n width = -width;\n }\n\n if (height < 0) {\n y1 = y1 + height;\n height = -height;\n }\n\n var x2 = x1 + width;\n var y2 = y1 + height;\n var ox = out[0] = Math.min(Math.max(x, x1), x2);\n var oy = out[1] = Math.min(Math.max(y, y1), y2);\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\n\nvar tmpPt = [];\n\nfunction nearestPointOnRect(pt, rect, out) {\n var dist = projectPointToRect(rect.x, rect.y, rect.width, rect.height, pt.x, pt.y, tmpPt);\n out.set(tmpPt[0], tmpPt[1]);\n return dist;\n}\n/**\n * Calculate min distance corresponding point.\n * This method won't evaluate if point is in the path.\n */\n\n\nfunction nearestPointOnPath(pt, path, out) {\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n var x1;\n var y1;\n var minDist = Infinity;\n var data = path.data;\n var x = pt.x;\n var y = pt.y;\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++];\n\n if (i === 1) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n var d = minDist;\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n break;\n\n case CMD.L:\n d = projectPointToLine(xi, yi, data[i], data[i + 1], x, y, tmpPt, true);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n d = cubicProjectPoint(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n d = quadraticProjectPoint(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++]; // TODO Arc 旋转\n\n i += 1;\n var anticlockwise = !!(1 - data[i++]);\n x1 = Math.cos(theta) * rx + cx;\n y1 = Math.sin(theta) * ry + cy; // 不是直接使用 arc 命令\n\n if (i <= 1) {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n } // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n\n\n var _x = (x - cx) * ry / rx + cx;\n\n d = projectPointToArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y, tmpPt);\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n d = projectPointToRect(x0, y0, width, height, x, y, tmpPt);\n break;\n\n case CMD.Z:\n d = projectPointToLine(xi, yi, x0, y0, x, y, tmpPt, true);\n xi = x0;\n yi = y0;\n break;\n }\n\n if (d < minDist) {\n minDist = d;\n out.set(tmpPt[0], tmpPt[1]);\n }\n }\n\n return minDist;\n} // Temporal varible for intermediate usage.\n\n\nvar pt0 = new Point();\nvar pt1 = new Point();\nvar pt2 = new Point();\nvar dir = new Point();\nvar dir2 = new Point();\n/**\n * Calculate a proper guide line based on the label position and graphic element definition\n * @param label\n * @param labelRect\n * @param target\n * @param targetRect\n */\n\nexport function updateLabelLinePoints(target, labelLineModel) {\n if (!target) {\n return;\n }\n\n var labelLine = target.getTextGuideLine();\n var label = target.getTextContent(); // Needs to create text guide in each charts.\n\n if (!(label && labelLine)) {\n return;\n }\n\n var labelGuideConfig = target.textGuideLineConfig || {};\n var points = [[0, 0], [0, 0], [0, 0]];\n var searchSpace = labelGuideConfig.candidates || DEFAULT_SEARCH_SPACE;\n var labelRect = label.getBoundingRect().clone();\n labelRect.applyTransform(label.getComputedTransform());\n var minDist = Infinity;\n var anchorPoint = labelGuideConfig.anchor;\n var targetTransform = target.getComputedTransform();\n var targetInversedTransform = targetTransform && invert([], targetTransform);\n var len = labelLineModel.get('length2') || 0;\n\n if (anchorPoint) {\n pt2.copy(anchorPoint);\n }\n\n for (var i = 0; i < searchSpace.length; i++) {\n var candidate = searchSpace[i];\n getCandidateAnchor(candidate, 0, labelRect, pt0, dir);\n Point.scaleAndAdd(pt1, pt0, dir, len); // Transform to target coord space.\n\n pt1.transform(targetInversedTransform); // Note: getBoundingRect will ensure the `path` being created.\n\n var boundingRect = target.getBoundingRect();\n var dist = anchorPoint ? anchorPoint.distance(pt1) : target instanceof Path ? nearestPointOnPath(pt1, target.path, pt2) : nearestPointOnRect(pt1, boundingRect, pt2); // TODO pt2 is in the path\n\n if (dist < minDist) {\n minDist = dist; // Transform back to global space.\n\n pt1.transform(targetTransform);\n pt2.transform(targetTransform);\n pt2.toArray(points[0]);\n pt1.toArray(points[1]);\n pt0.toArray(points[2]);\n }\n }\n\n limitTurnAngle(points, labelLineModel.get('minTurnAngle'));\n labelLine.setShape({\n points: points\n });\n} // Temporal variable for the limitTurnAngle function\n\nvar tmpArr = [];\nvar tmpProjPoint = new Point();\n/**\n * Reduce the line segment attached to the label to limit the turn angle between two segments.\n * @param linePoints\n * @param minTurnAngle Radian of minimum turn angle. 0 - 180\n */\n\nexport function limitTurnAngle(linePoints, minTurnAngle) {\n if (!(minTurnAngle <= 180 && minTurnAngle > 0)) {\n return;\n }\n\n minTurnAngle = minTurnAngle / 180 * Math.PI; // The line points can be\n // /pt1----pt2 (label)\n // /\n // pt0/\n\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt0, pt1);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(dir2);\n var minTurnAngleCos = Math.cos(minTurnAngle);\n\n if (minTurnAngleCos < angleCos) {\n // Smaller than minTurnAngle\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr); // Calculate new projected length with limited minTurnAngle and get the new connect point\n\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle)); // Limit the new calculated connect point between pt1 and pt2.\n\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n\n if (isNaN(t)) {\n return;\n }\n\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n/**\n * Limit the angle of line and the surface\n * @param maxSurfaceAngle Radian of minimum turn angle. 0 - 180. 0 is same direction to normal. 180 is opposite\n */\n\nexport function limitSurfaceAngle(linePoints, surfaceNormal, maxSurfaceAngle) {\n if (!(maxSurfaceAngle <= 180 && maxSurfaceAngle > 0)) {\n return;\n }\n\n maxSurfaceAngle = maxSurfaceAngle / 180 * Math.PI;\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt1, pt0);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(surfaceNormal);\n var maxSurfaceAngleCos = Math.cos(maxSurfaceAngle);\n\n if (angleCos < maxSurfaceAngleCos) {\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr);\n var HALF_PI = Math.PI / 2;\n var angle2 = Math.acos(dir2.dot(surfaceNormal));\n var newAngle = HALF_PI + angle2 - maxSurfaceAngle;\n\n if (newAngle >= HALF_PI) {\n // parallel\n Point.copy(tmpProjPoint, pt2);\n } else {\n // Calculate new projected length with limited minTurnAngle and get the new connect point\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI / 2 - newAngle)); // Limit the new calculated connect point between pt1 and pt2.\n\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n\n if (isNaN(t)) {\n return;\n }\n\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n }\n\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n\nfunction setLabelLineState(labelLine, ignore, stateName, stateModel) {\n var isNormal = stateName === 'normal';\n var stateObj = isNormal ? labelLine : labelLine.ensureState(stateName); // Make sure display.\n\n stateObj.ignore = ignore; // Set smooth\n\n var smooth = stateModel.get('smooth');\n\n if (smooth && smooth === true) {\n smooth = 0.3;\n }\n\n stateObj.shape = stateObj.shape || {};\n\n if (smooth > 0) {\n stateObj.shape.smooth = smooth;\n }\n\n var styleObj = stateModel.getModel('lineStyle').getLineStyle();\n isNormal ? labelLine.useStyle(styleObj) : stateObj.style = styleObj;\n}\n\nfunction buildLabelLinePath(path, shape) {\n var smooth = shape.smooth;\n var points = shape.points;\n\n if (!points) {\n return;\n }\n\n path.moveTo(points[0][0], points[0][1]);\n\n if (smooth > 0 && points.length >= 3) {\n var len1 = vector.dist(points[0], points[1]);\n var len2 = vector.dist(points[1], points[2]);\n\n if (!len1 || !len2) {\n path.lineTo(points[1][0], points[1][1]);\n path.lineTo(points[2][0], points[2][1]);\n return;\n }\n\n var moveLen = Math.min(len1, len2) * smooth;\n var midPoint0 = vector.lerp([], points[1], points[0], moveLen / len1);\n var midPoint2 = vector.lerp([], points[1], points[2], moveLen / len2);\n var midPoint1 = vector.lerp([], midPoint0, midPoint2, 0.5);\n path.bezierCurveTo(midPoint0[0], midPoint0[1], midPoint0[0], midPoint0[1], midPoint1[0], midPoint1[1]);\n path.bezierCurveTo(midPoint2[0], midPoint2[1], midPoint2[0], midPoint2[1], points[2][0], points[2][1]);\n } else {\n for (var i = 1; i < points.length; i++) {\n path.lineTo(points[i][0], points[i][1]);\n }\n }\n}\n/**\n * Create a label line if necessary and set it's style.\n */\n\n\nexport function setLabelLineStyle(targetEl, statesModels, defaultStyle) {\n var labelLine = targetEl.getTextGuideLine();\n var label = targetEl.getTextContent();\n\n if (!label) {\n // Not show label line if there is no label.\n if (labelLine) {\n targetEl.removeTextGuideLine();\n }\n\n return;\n }\n\n var normalModel = statesModels.normal;\n var showNormal = normalModel.get('show');\n var labelIgnoreNormal = label.ignore;\n\n for (var i = 0; i < DISPLAY_STATES.length; i++) {\n var stateName = DISPLAY_STATES[i];\n var stateModel = statesModels[stateName];\n var isNormal = stateName === 'normal';\n\n if (stateModel) {\n var stateShow = stateModel.get('show');\n var isLabelIgnored = isNormal ? labelIgnoreNormal : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal);\n\n if (isLabelIgnored // Not show when label is not shown in this state.\n || !retrieve2(stateShow, showNormal) // Use normal state by default if not set.\n ) {\n var stateObj = isNormal ? labelLine : labelLine && labelLine.states.normal;\n\n if (stateObj) {\n stateObj.ignore = true;\n }\n\n continue;\n } // Create labelLine if not exists\n\n\n if (!labelLine) {\n labelLine = new Polyline();\n targetEl.setTextGuideLine(labelLine); // Reset state of normal because it's new created.\n // NOTE: NORMAL should always been the first!\n\n if (!isNormal && (labelIgnoreNormal || !showNormal)) {\n setLabelLineState(labelLine, true, 'normal', statesModels.normal);\n } // Use same state proxy.\n\n\n if (targetEl.stateProxy) {\n labelLine.stateProxy = targetEl.stateProxy;\n }\n }\n\n setLabelLineState(labelLine, false, stateName, stateModel);\n }\n }\n\n if (labelLine) {\n defaults(labelLine.style, defaultStyle); // Not fill.\n\n labelLine.style.fill = null;\n var showAbove = normalModel.get('showAbove');\n var labelLineConfig = targetEl.textGuideLineConfig = targetEl.textGuideLineConfig || {};\n labelLineConfig.showAbove = showAbove || false; // Custom the buildPath.\n\n labelLine.buildPath = buildLabelLinePath;\n }\n}\nexport function getLabelLineStatesModels(itemModel, labelLineName) {\n labelLineName = labelLineName || 'labelLine';\n var statesModels = {\n normal: itemModel.getModel(labelLineName)\n };\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n statesModels[stateName] = itemModel.getModel([stateName, labelLineName]);\n }\n\n return statesModels;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO Parse shadow style\n// TODO Only shallow path support\nimport * as zrUtil from 'zrender/lib/core/util';\nexport default function makeStyleMapper(properties, ignoreParent) {\n // Normalize\n for (var i = 0; i < properties.length; i++) {\n if (!properties[i][1]) {\n properties[i][1] = properties[i][0];\n }\n }\n\n ignoreParent = ignoreParent || false;\n return function (model, excludes, includes) {\n var style = {};\n\n for (var i = 0; i < properties.length; i++) {\n var propName = properties[i][1];\n\n if (excludes && zrUtil.indexOf(excludes, propName) >= 0 || includes && zrUtil.indexOf(includes, propName) < 0) {\n continue;\n }\n\n var val = model.getShallow(propName, ignoreParent);\n\n if (val != null) {\n style[properties[i][0]] = val;\n }\n } // TODO Text or image?\n\n\n return style;\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either 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 numberUtil from '../util/number';\nimport * as formatUtil from '../util/format';\nimport Scale from './Scale';\nimport * as helper from './helper';\nvar roundNumber = numberUtil.round;\n\nvar IntervalScale =\n/** @class */\nfunction (_super) {\n __extends(IntervalScale, _super);\n\n function IntervalScale() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'interval'; // Step is calculated in adjustExtent.\n\n _this._interval = 0;\n _this._intervalPrecision = 2;\n return _this;\n }\n\n IntervalScale.prototype.parse = function (val) {\n return val;\n };\n\n IntervalScale.prototype.contain = function (val) {\n return helper.contain(val, this._extent);\n };\n\n IntervalScale.prototype.normalize = function (val) {\n return helper.normalize(val, this._extent);\n };\n\n IntervalScale.prototype.scale = function (val) {\n return helper.scale(val, this._extent);\n };\n\n IntervalScale.prototype.setExtent = function (start, end) {\n var thisExtent = this._extent; // start,end may be a Number like '25',so...\n\n if (!isNaN(start)) {\n thisExtent[0] = parseFloat(start);\n }\n\n if (!isNaN(end)) {\n thisExtent[1] = parseFloat(end);\n }\n };\n\n IntervalScale.prototype.unionExtent = function (other) {\n var extent = this._extent;\n other[0] < extent[0] && (extent[0] = other[0]);\n other[1] > extent[1] && (extent[1] = other[1]); // unionExtent may called by it's sub classes\n\n this.setExtent(extent[0], extent[1]);\n };\n\n IntervalScale.prototype.getInterval = function () {\n return this._interval;\n };\n\n IntervalScale.prototype.setInterval = function (interval) {\n this._interval = interval; // Dropped auto calculated niceExtent and use user setted extent\n // We assume user wan't to set both interval, min, max to get a better result\n\n this._niceExtent = this._extent.slice();\n this._intervalPrecision = helper.getIntervalPrecision(interval);\n };\n /**\n * @param expandToNicedExtent Whether expand the ticks to niced extent.\n */\n\n\n IntervalScale.prototype.getTicks = function (expandToNicedExtent) {\n var interval = this._interval;\n var extent = this._extent;\n var niceTickExtent = this._niceExtent;\n var intervalPrecision = this._intervalPrecision;\n var ticks = []; // If interval is 0, return [];\n\n if (!interval) {\n return ticks;\n } // Consider this case: using dataZoom toolbox, zoom and zoom.\n\n\n var safeLimit = 10000;\n\n if (extent[0] < niceTickExtent[0]) {\n if (expandToNicedExtent) {\n ticks.push({\n value: roundNumber(niceTickExtent[0] - interval, intervalPrecision)\n });\n } else {\n ticks.push({\n value: extent[0]\n });\n }\n }\n\n var tick = niceTickExtent[0];\n\n while (tick <= niceTickExtent[1]) {\n ticks.push({\n value: tick\n }); // Avoid rounding error\n\n tick = roundNumber(tick + interval, intervalPrecision);\n\n if (tick === ticks[ticks.length - 1].value) {\n // Consider out of safe float point, e.g.,\n // -3711126.9907707 + 2e-10 === -3711126.9907707\n break;\n }\n\n if (ticks.length > safeLimit) {\n return [];\n }\n } // Consider this case: the last item of ticks is smaller\n // than niceTickExtent[1] and niceTickExtent[1] === extent[1].\n\n\n var lastNiceTick = ticks.length ? ticks[ticks.length - 1].value : niceTickExtent[1];\n\n if (extent[1] > lastNiceTick) {\n if (expandToNicedExtent) {\n ticks.push({\n value: roundNumber(lastNiceTick + interval, intervalPrecision)\n });\n } else {\n ticks.push({\n value: extent[1]\n });\n }\n }\n\n return ticks;\n };\n\n IntervalScale.prototype.getMinorTicks = function (splitNumber) {\n var ticks = this.getTicks(true);\n var minorTicks = [];\n var extent = this.getExtent();\n\n for (var i = 1; i < ticks.length; i++) {\n var nextTick = ticks[i];\n var prevTick = ticks[i - 1];\n var count = 0;\n var minorTicksGroup = [];\n var interval = nextTick.value - prevTick.value;\n var minorInterval = interval / splitNumber;\n\n while (count < splitNumber - 1) {\n var minorTick = roundNumber(prevTick.value + (count + 1) * minorInterval); // For the first and last interval. The count may be less than splitNumber.\n\n if (minorTick > extent[0] && minorTick < extent[1]) {\n minorTicksGroup.push(minorTick);\n }\n\n count++;\n }\n\n minorTicks.push(minorTicksGroup);\n }\n\n return minorTicks;\n };\n /**\n * @param opt.precision If 'auto', use nice presision.\n * @param opt.pad returns 1.50 but not 1.5 if precision is 2.\n */\n\n\n IntervalScale.prototype.getLabel = function (data, opt) {\n if (data == null) {\n return '';\n }\n\n var precision = opt && opt.precision;\n\n if (precision == null) {\n precision = numberUtil.getPrecision(data.value) || 0;\n } else if (precision === 'auto') {\n // Should be more precise then tick.\n precision = this._intervalPrecision;\n } // (1) If `precision` is set, 12.005 should be display as '12.00500'.\n // (2) Use roundNumber (toFixed) to avoid scientific notation like '3.5e-7'.\n\n\n var dataNum = roundNumber(data.value, precision, true);\n return formatUtil.addCommas(dataNum);\n };\n /**\n * @param splitNumber By default `5`.\n */\n\n\n IntervalScale.prototype.niceTicks = function (splitNumber, minInterval, maxInterval) {\n splitNumber = splitNumber || 5;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n\n if (!isFinite(span)) {\n return;\n } // User may set axis min 0 and data are all negative\n // FIXME If it needs to reverse ?\n\n\n if (span < 0) {\n span = -span;\n extent.reverse();\n }\n\n var result = helper.intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval);\n this._intervalPrecision = result.intervalPrecision;\n this._interval = result.interval;\n this._niceExtent = result.niceTickExtent;\n };\n\n IntervalScale.prototype.niceExtent = function (opt) {\n var extent = this._extent; // If extent start and end are same, expand them\n\n if (extent[0] === extent[1]) {\n if (extent[0] !== 0) {\n // Expand extent\n var expandSize = extent[0]; // In the fowllowing case\n // Axis has been fixed max 100\n // Plus data are all 100 and axis extent are [100, 100].\n // Extend to the both side will cause expanded max is larger than fixed max.\n // So only expand to the smaller side.\n\n if (!opt.fixMax) {\n extent[1] += expandSize / 2;\n extent[0] -= expandSize / 2;\n } else {\n extent[0] -= expandSize / 2;\n }\n } else {\n extent[1] = 1;\n }\n }\n\n var span = extent[1] - extent[0]; // If there are no data and extent are [Infinity, -Infinity]\n\n if (!isFinite(span)) {\n extent[0] = 0;\n extent[1] = 1;\n }\n\n this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval); // let extent = this._extent;\n\n var interval = this._interval;\n\n if (!opt.fixMin) {\n extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval);\n }\n\n if (!opt.fixMax) {\n extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval);\n }\n };\n\n IntervalScale.type = 'interval';\n return IntervalScale;\n}(Scale);\n\nScale.registerClass(IntervalScale);\nexport default IntervalScale;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* 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 * as zrUtil from 'zrender/lib/core/util';\nimport { parsePercent } from '../util/number';\nimport { isDimensionStacked } from '../data/helper/dataStackHelper';\nimport createRenderPlanner from '../chart/helper/createRenderPlanner';\nvar STACK_PREFIX = '__ec_stack_';\nvar LARGE_BAR_MIN_WIDTH = 0.5;\nvar LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;\n\nfunction getSeriesStackId(seriesModel) {\n return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex;\n}\n\nfunction getAxisKey(axis) {\n return axis.dim + axis.index;\n}\n/**\n * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined.\n */\n\n\nexport function getLayoutOnAxis(opt) {\n var params = [];\n var baseAxis = opt.axis;\n var axisKey = 'axis0';\n\n if (baseAxis.type !== 'category') {\n return;\n }\n\n var bandWidth = baseAxis.getBandWidth();\n\n for (var i = 0; i < opt.count || 0; i++) {\n params.push(zrUtil.defaults({\n bandWidth: bandWidth,\n axisKey: axisKey,\n stackId: STACK_PREFIX + i\n }, opt));\n }\n\n var widthAndOffsets = doCalBarWidthAndOffset(params);\n var result = [];\n\n for (var i = 0; i < opt.count; i++) {\n var item = widthAndOffsets[axisKey][STACK_PREFIX + i];\n item.offsetCenter = item.offset + item.width / 2;\n result.push(item);\n }\n\n return result;\n}\nexport function prepareLayoutBarSeries(seriesType, ecModel) {\n var seriesModels = [];\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n // Check series coordinate, do layout for cartesian2d only\n if (isOnCartesian(seriesModel) && !isInLargeMode(seriesModel)) {\n seriesModels.push(seriesModel);\n }\n });\n return seriesModels;\n}\n/**\n * Map from (baseAxis.dim + '_' + baseAxis.index) to min gap of two adjacent\n * values.\n * This works for time axes, value axes, and log axes.\n * For a single time axis, return value is in the form like\n * {'x_0': [1000000]}.\n * The value of 1000000 is in milliseconds.\n */\n\nfunction getValueAxesMinGaps(barSeries) {\n /**\n * Map from axis.index to values.\n * For a single time axis, axisValues is in the form like\n * {'x_0': [1495555200000, 1495641600000, 1495728000000]}.\n * Items in axisValues[x], e.g. 1495555200000, are time values of all\n * series.\n */\n var axisValues = {};\n zrUtil.each(barSeries, function (seriesModel) {\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n\n if (baseAxis.type !== 'time' && baseAxis.type !== 'value') {\n return;\n }\n\n var data = seriesModel.getData();\n var key = baseAxis.dim + '_' + baseAxis.index;\n var dimIdx = data.getDimensionIndex(data.mapDimension(baseAxis.dim));\n var store = data.getStore();\n\n for (var i = 0, cnt = store.count(); i < cnt; ++i) {\n var value = store.get(dimIdx, i);\n\n if (!axisValues[key]) {\n // No previous data for the axis\n axisValues[key] = [value];\n } else {\n // No value in previous series\n axisValues[key].push(value);\n } // Ignore duplicated time values in the same axis\n\n }\n });\n var axisMinGaps = {};\n\n for (var key in axisValues) {\n if (axisValues.hasOwnProperty(key)) {\n var valuesInAxis = axisValues[key];\n\n if (valuesInAxis) {\n // Sort axis values into ascending order to calculate gaps\n valuesInAxis.sort(function (a, b) {\n return a - b;\n });\n var min = null;\n\n for (var j = 1; j < valuesInAxis.length; ++j) {\n var delta = valuesInAxis[j] - valuesInAxis[j - 1];\n\n if (delta > 0) {\n // Ignore 0 delta because they are of the same axis value\n min = min === null ? delta : Math.min(min, delta);\n }\n } // Set to null if only have one data\n\n\n axisMinGaps[key] = min;\n }\n }\n }\n\n return axisMinGaps;\n}\n\nexport function makeColumnLayout(barSeries) {\n var axisMinGaps = getValueAxesMinGaps(barSeries);\n var seriesInfoList = [];\n zrUtil.each(barSeries, function (seriesModel) {\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var axisExtent = baseAxis.getExtent();\n var bandWidth;\n\n if (baseAxis.type === 'category') {\n bandWidth = baseAxis.getBandWidth();\n } else if (baseAxis.type === 'value' || baseAxis.type === 'time') {\n var key = baseAxis.dim + '_' + baseAxis.index;\n var minGap = axisMinGaps[key];\n var extentSpan = Math.abs(axisExtent[1] - axisExtent[0]);\n var scale = baseAxis.scale.getExtent();\n var scaleSpan = Math.abs(scale[1] - scale[0]);\n bandWidth = minGap ? extentSpan / scaleSpan * minGap : extentSpan; // When there is only one data value\n } else {\n var data = seriesModel.getData();\n bandWidth = Math.abs(axisExtent[1] - axisExtent[0]) / data.count();\n }\n\n var barWidth = parsePercent(seriesModel.get('barWidth'), bandWidth);\n var barMaxWidth = parsePercent(seriesModel.get('barMaxWidth'), bandWidth);\n var barMinWidth = parsePercent( // barMinWidth by default is 1 in cartesian. Because in value axis,\n // the auto-calculated bar width might be less than 1.\n seriesModel.get('barMinWidth') || 1, bandWidth);\n var barGap = seriesModel.get('barGap');\n var barCategoryGap = seriesModel.get('barCategoryGap');\n seriesInfoList.push({\n bandWidth: bandWidth,\n barWidth: barWidth,\n barMaxWidth: barMaxWidth,\n barMinWidth: barMinWidth,\n barGap: barGap,\n barCategoryGap: barCategoryGap,\n axisKey: getAxisKey(baseAxis),\n stackId: getSeriesStackId(seriesModel)\n });\n });\n return doCalBarWidthAndOffset(seriesInfoList);\n}\n\nfunction doCalBarWidthAndOffset(seriesInfoList) {\n // Columns info on each category axis. Key is cartesian name\n var columnsMap = {};\n zrUtil.each(seriesInfoList, function (seriesInfo, idx) {\n var axisKey = seriesInfo.axisKey;\n var bandWidth = seriesInfo.bandWidth;\n var columnsOnAxis = columnsMap[axisKey] || {\n bandWidth: bandWidth,\n remainedWidth: bandWidth,\n autoWidthCount: 0,\n categoryGap: null,\n gap: '20%',\n stacks: {}\n };\n var stacks = columnsOnAxis.stacks;\n columnsMap[axisKey] = columnsOnAxis;\n var stackId = seriesInfo.stackId;\n\n if (!stacks[stackId]) {\n columnsOnAxis.autoWidthCount++;\n }\n\n stacks[stackId] = stacks[stackId] || {\n width: 0,\n maxWidth: 0\n }; // Caution: In a single coordinate system, these barGrid attributes\n // will be shared by series. Consider that they have default values,\n // only the attributes set on the last series will work.\n // Do not change this fact unless there will be a break change.\n\n var barWidth = seriesInfo.barWidth;\n\n if (barWidth && !stacks[stackId].width) {\n // See #6312, do not restrict width.\n stacks[stackId].width = barWidth;\n barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n columnsOnAxis.remainedWidth -= barWidth;\n }\n\n var barMaxWidth = seriesInfo.barMaxWidth;\n barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n var barMinWidth = seriesInfo.barMinWidth;\n barMinWidth && (stacks[stackId].minWidth = barMinWidth);\n var barGap = seriesInfo.barGap;\n barGap != null && (columnsOnAxis.gap = barGap);\n var barCategoryGap = seriesInfo.barCategoryGap;\n barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap);\n });\n var result = {};\n zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {\n result[coordSysName] = {};\n var stacks = columnsOnAxis.stacks;\n var bandWidth = columnsOnAxis.bandWidth;\n var categoryGapPercent = columnsOnAxis.categoryGap;\n\n if (categoryGapPercent == null) {\n var columnCount = zrUtil.keys(stacks).length; // More columns in one group\n // the spaces between group is smaller. Or the column will be too thin.\n\n categoryGapPercent = Math.max(35 - columnCount * 4, 15) + '%';\n }\n\n var categoryGap = parsePercent(categoryGapPercent, bandWidth);\n var barGapPercent = parsePercent(columnsOnAxis.gap, 1);\n var remainedWidth = columnsOnAxis.remainedWidth;\n var autoWidthCount = columnsOnAxis.autoWidthCount;\n var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0); // Find if any auto calculated bar exceeded maxBarWidth\n\n zrUtil.each(stacks, function (column) {\n var maxWidth = column.maxWidth;\n var minWidth = column.minWidth;\n\n if (!column.width) {\n var finalWidth = autoWidth;\n\n if (maxWidth && maxWidth < finalWidth) {\n finalWidth = Math.min(maxWidth, remainedWidth);\n } // `minWidth` has higher priority. `minWidth` decide that wheter the\n // bar is able to be visible. So `minWidth` should not be restricted\n // by `maxWidth` or `remainedWidth` (which is from `bandWidth`). In\n // the extreme cases for `value` axis, bars are allowed to overlap\n // with each other if `minWidth` specified.\n\n\n if (minWidth && minWidth > finalWidth) {\n finalWidth = minWidth;\n }\n\n if (finalWidth !== autoWidth) {\n column.width = finalWidth;\n remainedWidth -= finalWidth + barGapPercent * finalWidth;\n autoWidthCount--;\n }\n } else {\n // `barMinWidth/barMaxWidth` has higher priority than `barWidth`, as\n // CSS does. Becuase barWidth can be a percent value, where\n // `barMaxWidth` can be used to restrict the final width.\n var finalWidth = column.width;\n\n if (maxWidth) {\n finalWidth = Math.min(finalWidth, maxWidth);\n } // `minWidth` has higher priority, as described above\n\n\n if (minWidth) {\n finalWidth = Math.max(finalWidth, minWidth);\n }\n\n column.width = finalWidth;\n remainedWidth -= finalWidth + barGapPercent * finalWidth;\n autoWidthCount--;\n }\n }); // Recalculate width again\n\n autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0);\n var widthSum = 0;\n var lastColumn;\n zrUtil.each(stacks, function (column, idx) {\n if (!column.width) {\n column.width = autoWidth;\n }\n\n lastColumn = column;\n widthSum += column.width * (1 + barGapPercent);\n });\n\n if (lastColumn) {\n widthSum -= lastColumn.width * barGapPercent;\n }\n\n var offset = -widthSum / 2;\n zrUtil.each(stacks, function (column, stackId) {\n result[coordSysName][stackId] = result[coordSysName][stackId] || {\n bandWidth: bandWidth,\n offset: offset,\n width: column.width\n };\n offset += column.width * (1 + barGapPercent);\n });\n });\n return result;\n}\n\nfunction retrieveColumnLayout(barWidthAndOffset, axis, seriesModel) {\n if (barWidthAndOffset && axis) {\n var result = barWidthAndOffset[getAxisKey(axis)];\n\n if (result != null && seriesModel != null) {\n return result[getSeriesStackId(seriesModel)];\n }\n\n return result;\n }\n}\n\nexport { retrieveColumnLayout };\nexport function layout(seriesType, ecModel) {\n var seriesModels = prepareLayoutBarSeries(seriesType, ecModel);\n var barWidthAndOffset = makeColumnLayout(seriesModels);\n var lastStackCoords = {};\n zrUtil.each(seriesModels, function (seriesModel) {\n var data = seriesModel.getData();\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var stackId = getSeriesStackId(seriesModel);\n var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId];\n var columnOffset = columnLayoutInfo.offset;\n var columnWidth = columnLayoutInfo.width;\n var valueAxis = cartesian.getOtherAxis(baseAxis);\n var barMinHeight = seriesModel.get('barMinHeight') || 0;\n lastStackCoords[stackId] = lastStackCoords[stackId] || [];\n data.setLayout({\n bandWidth: columnLayoutInfo.bandWidth,\n offset: columnOffset,\n size: columnWidth\n });\n var valueDim = data.mapDimension(valueAxis.dim);\n var baseDim = data.mapDimension(baseAxis.dim);\n var stacked = isDimensionStacked(data, valueDim);\n var isValueAxisH = valueAxis.isHorizontal();\n var valueAxisStart = getValueAxisStart(baseAxis, valueAxis, stacked);\n var store = data.getStore();\n var valueDimIdx = data.getDimensionIndex(valueDim);\n var baseDimIdx = data.getDimensionIndex(baseDim);\n\n for (var idx = 0, len = store.count(); idx < len; idx++) {\n var value = store.get(valueDimIdx, idx);\n var baseValue = store.get(baseDimIdx, idx);\n var sign = value >= 0 ? 'p' : 'n';\n var baseCoord = valueAxisStart; // Because of the barMinHeight, we can not use the value in\n // stackResultDimension directly.\n\n if (stacked) {\n // Only ordinal axis can be stacked.\n if (!lastStackCoords[stackId][baseValue]) {\n lastStackCoords[stackId][baseValue] = {\n p: valueAxisStart,\n n: valueAxisStart // Negative stack\n\n };\n } // Should also consider #4243\n\n\n baseCoord = lastStackCoords[stackId][baseValue][sign];\n }\n\n var x = void 0;\n var y = void 0;\n var width = void 0;\n var height = void 0;\n\n if (isValueAxisH) {\n var coord = cartesian.dataToPoint([value, baseValue]);\n x = baseCoord;\n y = coord[1] + columnOffset;\n width = coord[0] - valueAxisStart;\n height = columnWidth;\n\n if (Math.abs(width) < barMinHeight) {\n width = (width < 0 ? -1 : 1) * barMinHeight;\n } // Ignore stack from NaN value\n\n\n if (!isNaN(width)) {\n stacked && (lastStackCoords[stackId][baseValue][sign] += width);\n }\n } else {\n var coord = cartesian.dataToPoint([baseValue, value]);\n x = coord[0] + columnOffset;\n y = baseCoord;\n width = columnWidth;\n height = coord[1] - valueAxisStart;\n\n if (Math.abs(height) < barMinHeight) {\n // Include zero to has a positive bar\n height = (height <= 0 ? -1 : 1) * barMinHeight;\n } // Ignore stack from NaN value\n\n\n if (!isNaN(height)) {\n stacked && (lastStackCoords[stackId][baseValue][sign] += height);\n }\n }\n\n data.setItemLayout(idx, {\n x: x,\n y: y,\n width: width,\n height: height\n });\n }\n });\n} // TODO: Do not support stack in large mode yet.\n\nexport var largeLayout = {\n seriesType: 'bar',\n plan: createRenderPlanner(),\n reset: function (seriesModel) {\n if (!isOnCartesian(seriesModel) || !isInLargeMode(seriesModel)) {\n return;\n }\n\n var data = seriesModel.getData();\n var cartesian = seriesModel.coordinateSystem;\n var coordLayout = cartesian.master.getRect();\n var baseAxis = cartesian.getBaseAxis();\n var valueAxis = cartesian.getOtherAxis(baseAxis);\n var valueDimI = data.getDimensionIndex(data.mapDimension(valueAxis.dim));\n var baseDimI = data.getDimensionIndex(data.mapDimension(baseAxis.dim));\n var valueAxisHorizontal = valueAxis.isHorizontal();\n var valueDimIdx = valueAxisHorizontal ? 0 : 1;\n var barWidth = retrieveColumnLayout(makeColumnLayout([seriesModel]), baseAxis, seriesModel).width;\n\n if (!(barWidth > LARGE_BAR_MIN_WIDTH)) {\n // jshint ignore:line\n barWidth = LARGE_BAR_MIN_WIDTH;\n }\n\n return {\n progress: function (params, data) {\n var count = params.count;\n var largePoints = new LargeArr(count * 2);\n var largeBackgroundPoints = new LargeArr(count * 2);\n var largeDataIndices = new LargeArr(count);\n var dataIndex;\n var coord = [];\n var valuePair = [];\n var pointsOffset = 0;\n var idxOffset = 0;\n var store = data.getStore();\n\n while ((dataIndex = params.next()) != null) {\n valuePair[valueDimIdx] = store.get(valueDimI, dataIndex);\n valuePair[1 - valueDimIdx] = store.get(baseDimI, dataIndex);\n coord = cartesian.dataToPoint(valuePair, null); // Data index might not be in order, depends on `progressiveChunkMode`.\n\n largeBackgroundPoints[pointsOffset] = valueAxisHorizontal ? coordLayout.x + coordLayout.width : coord[0];\n largePoints[pointsOffset++] = coord[0];\n largeBackgroundPoints[pointsOffset] = valueAxisHorizontal ? coord[1] : coordLayout.y + coordLayout.height;\n largePoints[pointsOffset++] = coord[1];\n largeDataIndices[idxOffset++] = dataIndex;\n }\n\n data.setLayout({\n largePoints: largePoints,\n largeDataIndices: largeDataIndices,\n largeBackgroundPoints: largeBackgroundPoints,\n barWidth: barWidth,\n valueAxisStart: getValueAxisStart(baseAxis, valueAxis, false),\n backgroundStart: valueAxisHorizontal ? coordLayout.x : coordLayout.y,\n valueAxisHorizontal: valueAxisHorizontal\n });\n }\n };\n }\n};\n\nfunction isOnCartesian(seriesModel) {\n return seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'cartesian2d';\n}\n\nfunction isInLargeMode(seriesModel) {\n return seriesModel.pipelineContext && seriesModel.pipelineContext.large;\n} // See cases in `test/bar-start.html` and `#7412`, `#8747`.\n\n\nfunction getValueAxisStart(baseAxis, valueAxis, stacked) {\n return valueAxis.toGlobalCoord(valueAxis.dataToCoord(valueAxis.type === 'log' ? 1 : 0));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @file Visual solution, for consistent option specification.\n */\nimport * as zrUtil from 'zrender/lib/core/util';\nimport VisualMapping from './VisualMapping';\nimport { getItemVisualFromData, setItemVisualFromData } from './helper';\nvar each = zrUtil.each;\n\nfunction hasKeys(obj) {\n if (obj) {\n for (var name_1 in obj) {\n if (obj.hasOwnProperty(name_1)) {\n return true;\n }\n }\n }\n}\n\nexport function createVisualMappings(option, stateList, supplementVisualOption) {\n var visualMappings = {};\n each(stateList, function (state) {\n var mappings = visualMappings[state] = createMappings();\n each(option[state], function (visualData, visualType) {\n if (!VisualMapping.isValidType(visualType)) {\n return;\n }\n\n var mappingOption = {\n type: visualType,\n visual: visualData\n };\n supplementVisualOption && supplementVisualOption(mappingOption, state);\n mappings[visualType] = new VisualMapping(mappingOption); // Prepare a alpha for opacity, for some case that opacity\n // is not supported, such as rendering using gradient color.\n\n if (visualType === 'opacity') {\n mappingOption = zrUtil.clone(mappingOption);\n mappingOption.type = 'colorAlpha';\n mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption);\n }\n });\n });\n return visualMappings;\n\n function createMappings() {\n var Creater = function () {}; // Make sure hidden fields will not be visited by\n // object iteration (with hasOwnProperty checking).\n\n\n Creater.prototype.__hidden = Creater.prototype;\n var obj = new Creater();\n return obj;\n }\n}\nexport function replaceVisualOption(thisOption, newOption, keys) {\n // Visual attributes merge is not supported, otherwise it\n // brings overcomplicated merge logic. See #2853. So if\n // newOption has anyone of these keys, all of these keys\n // will be reset. Otherwise, all keys remain.\n var has;\n zrUtil.each(keys, function (key) {\n if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {\n has = true;\n }\n });\n has && zrUtil.each(keys, function (key) {\n if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {\n thisOption[key] = zrUtil.clone(newOption[key]);\n } else {\n delete thisOption[key];\n }\n });\n}\n/**\n * @param stateList\n * @param visualMappings\n * @param list\n * @param getValueState param: valueOrIndex, return: state.\n * @param scope Scope for getValueState\n * @param dimension Concrete dimension, if used.\n */\n// ???! handle brush?\n\nexport function applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) {\n var visualTypesMap = {};\n zrUtil.each(stateList, function (state) {\n var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);\n visualTypesMap[state] = visualTypes;\n });\n var dataIndex;\n\n function getVisual(key) {\n return getItemVisualFromData(data, dataIndex, key);\n }\n\n function setVisual(key, value) {\n setItemVisualFromData(data, dataIndex, key, value);\n }\n\n if (dimension == null) {\n data.each(eachItem);\n } else {\n data.each([dimension], eachItem);\n }\n\n function eachItem(valueOrIndex, index) {\n dataIndex = dimension == null ? valueOrIndex // First argument is index\n : index;\n var rawDataItem = data.getRawDataItem(dataIndex); // Consider performance\n // @ts-ignore\n\n if (rawDataItem && rawDataItem.visualMap === false) {\n return;\n }\n\n var valueState = getValueState.call(scope, valueOrIndex);\n var mappings = visualMappings[valueState];\n var visualTypes = visualTypesMap[valueState];\n\n for (var i = 0, len = visualTypes.length; i < len; i++) {\n var type = visualTypes[i];\n mappings[type] && mappings[type].applyVisual(valueOrIndex, getVisual, setVisual);\n }\n }\n}\n/**\n * @param data\n * @param stateList\n * @param visualMappings >\n * @param getValueState param: valueOrIndex, return: state.\n * @param dim dimension or dimension index.\n */\n\nexport function incrementalApplyVisual(stateList, visualMappings, getValueState, dim) {\n var visualTypesMap = {};\n zrUtil.each(stateList, function (state) {\n var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);\n visualTypesMap[state] = visualTypes;\n });\n return {\n progress: function progress(params, data) {\n var dimIndex;\n\n if (dim != null) {\n dimIndex = data.getDimensionIndex(dim);\n }\n\n function getVisual(key) {\n return getItemVisualFromData(data, dataIndex, key);\n }\n\n function setVisual(key, value) {\n setItemVisualFromData(data, dataIndex, key, value);\n }\n\n var dataIndex;\n var store = data.getStore();\n\n while ((dataIndex = params.next()) != null) {\n var rawDataItem = data.getRawDataItem(dataIndex); // Consider performance\n // @ts-ignore\n\n if (rawDataItem && rawDataItem.visualMap === false) {\n continue;\n }\n\n var value = dim != null ? store.get(dimIndex, dataIndex) : dataIndex;\n var valueState = getValueState(value);\n var mappings = visualMappings[valueState];\n var visualTypes = visualTypesMap[valueState];\n\n for (var i = 0, len = visualTypes.length; i < len; i++) {\n var type = visualTypes[i];\n mappings[type] && mappings[type].applyVisual(value, getVisual, setVisual);\n }\n }\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { map } from 'zrender/lib/core/util';\nimport createRenderPlanner from '../chart/helper/createRenderPlanner';\nimport { isDimensionStacked } from '../data/helper/dataStackHelper';\nimport { createFloat32Array } from '../util/vendor';\nexport default function pointsLayout(seriesType, forceStoreInTypedArray) {\n return {\n seriesType: seriesType,\n plan: createRenderPlanner(),\n reset: function (seriesModel) {\n var data = seriesModel.getData();\n var coordSys = seriesModel.coordinateSystem;\n var pipelineContext = seriesModel.pipelineContext;\n var useTypedArray = forceStoreInTypedArray || pipelineContext.large;\n\n if (!coordSys) {\n return;\n }\n\n var dims = map(coordSys.dimensions, function (dim) {\n return data.mapDimension(dim);\n }).slice(0, 2);\n var dimLen = dims.length;\n var stackResultDim = data.getCalculationInfo('stackResultDimension');\n\n if (isDimensionStacked(data, dims[0]\n /*, dims[1]*/\n )) {\n dims[0] = stackResultDim;\n }\n\n if (isDimensionStacked(data, dims[1]\n /*, dims[0]*/\n )) {\n dims[1] = stackResultDim;\n }\n\n var store = data.getStore();\n var dimIdx0 = data.getDimensionIndex(dims[0]);\n var dimIdx1 = data.getDimensionIndex(dims[1]);\n return dimLen && {\n progress: function (params, data) {\n var segCount = params.end - params.start;\n var points = useTypedArray && createFloat32Array(segCount * dimLen);\n var tmpIn = [];\n var tmpOut = [];\n\n for (var i = params.start, offset = 0; i < params.end; i++) {\n var point = void 0;\n\n if (dimLen === 1) {\n var x = store.get(dimIdx0, i); // NOTE: Make sure the second parameter is null to use default strategy.\n\n point = coordSys.dataToPoint(x, null, tmpOut);\n } else {\n tmpIn[0] = store.get(dimIdx0, i);\n tmpIn[1] = store.get(dimIdx1, i); // Let coordinate system to handle the NaN data.\n\n point = coordSys.dataToPoint(tmpIn, null, tmpOut);\n }\n\n if (useTypedArray) {\n points[offset++] = point[0];\n points[offset++] = point[1];\n } else {\n data.setItemLayout(i, point.slice());\n }\n }\n\n useTypedArray && data.setLayout('points', points);\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\n/**\n * LegendVisualProvider is an bridge that pick encoded color from data and\n * provide to the legend component.\n */\nvar LegendVisualProvider =\n/** @class */\nfunction () {\n function LegendVisualProvider( // Function to get data after filtered. It stores all the encoding info\n getDataWithEncodedVisual, // Function to get raw data before filtered.\n getRawData) {\n this._getDataWithEncodedVisual = getDataWithEncodedVisual;\n this._getRawData = getRawData;\n }\n\n LegendVisualProvider.prototype.getAllNames = function () {\n var rawData = this._getRawData(); // We find the name from the raw data. In case it's filtered by the legend component.\n // Normally, the name can be found in rawData, but can't be found in filtered data will display as gray.\n\n\n return rawData.mapArray(rawData.getName);\n };\n\n LegendVisualProvider.prototype.containName = function (name) {\n var rawData = this._getRawData();\n\n return rawData.indexOfName(name) >= 0;\n };\n\n LegendVisualProvider.prototype.indexOfName = function (name) {\n // Only get data when necessary.\n // Because LegendVisualProvider constructor may be new in the stage that data is not prepared yet.\n // Invoking Series#getData immediately will throw an error.\n var dataWithEncodedVisual = this._getDataWithEncodedVisual();\n\n return dataWithEncodedVisual.indexOfName(name);\n };\n\n LegendVisualProvider.prototype.getItemVisual = function (dataIndex, key) {\n // Get encoded visual properties from final filtered data.\n var dataWithEncodedVisual = this._getDataWithEncodedVisual();\n\n return dataWithEncodedVisual.getItemVisual(dataIndex, key);\n };\n\n return LegendVisualProvider;\n}();\n\nexport default LegendVisualProvider;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport default function dataFilter(seriesType) {\n return {\n seriesType: seriesType,\n reset: function (seriesModel, ecModel) {\n var legendModels = ecModel.findComponents({\n mainType: 'legend'\n });\n\n if (!legendModels || !legendModels.length) {\n return;\n }\n\n var data = seriesModel.getData();\n data.filterSelf(function (idx) {\n var name = data.getName(idx); // If in any legend component the status is not selected.\n\n for (var i = 0; i < legendModels.length; i++) {\n // @ts-ignore FIXME: LegendModel\n if (!legendModels[i].isSelected(name)) {\n return false;\n }\n }\n\n return true;\n });\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport ZRText from 'zrender/lib/graphic/Text';\nimport { isFunction, retrieve2, extend, keys, trim } from 'zrender/lib/core/util';\nimport { SPECIAL_STATES, DISPLAY_STATES } from '../util/states';\nimport { deprecateReplaceLog } from '../util/log';\nimport { makeInner, interpolateRawValues } from '../util/model';\nimport { initProps, updateProps } from '../util/graphic';\nvar EMPTY_OBJ = {};\nexport function setLabelText(label, labelTexts) {\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n var text = labelTexts[stateName];\n var state = label.ensureState(stateName);\n state.style = state.style || {};\n state.style.text = text;\n }\n\n var oldStates = label.currentStates.slice();\n label.clearStates(true);\n label.setStyle({\n text: labelTexts.normal\n });\n label.useStates(oldStates, true);\n}\n\nfunction getLabelText(opt, stateModels, interpolatedValue) {\n var labelFetcher = opt.labelFetcher;\n var labelDataIndex = opt.labelDataIndex;\n var labelDimIndex = opt.labelDimIndex;\n var normalModel = stateModels.normal;\n var baseText;\n\n if (labelFetcher) {\n baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex, normalModel && normalModel.get('formatter'), interpolatedValue != null ? {\n interpolatedValue: interpolatedValue\n } : null);\n }\n\n if (baseText == null) {\n baseText = isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt, interpolatedValue) : opt.defaultText;\n }\n\n var statesText = {\n normal: baseText\n };\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n var stateModel = stateModels[stateName];\n statesText[stateName] = retrieve2(labelFetcher ? labelFetcher.getFormattedLabel(labelDataIndex, stateName, null, labelDimIndex, stateModel && stateModel.get('formatter')) : null, baseText);\n }\n\n return statesText;\n}\n\nfunction setLabelStyle(targetEl, labelStatesModels, opt, stateSpecified // TODO specified position?\n) {\n opt = opt || EMPTY_OBJ;\n var isSetOnText = targetEl instanceof ZRText;\n var needsCreateText = false;\n\n for (var i = 0; i < DISPLAY_STATES.length; i++) {\n var stateModel = labelStatesModels[DISPLAY_STATES[i]];\n\n if (stateModel && stateModel.getShallow('show')) {\n needsCreateText = true;\n break;\n }\n }\n\n var textContent = isSetOnText ? targetEl : targetEl.getTextContent();\n\n if (needsCreateText) {\n if (!isSetOnText) {\n // Reuse the previous\n if (!textContent) {\n textContent = new ZRText();\n targetEl.setTextContent(textContent);\n } // Use same state proxy\n\n\n if (targetEl.stateProxy) {\n textContent.stateProxy = targetEl.stateProxy;\n }\n }\n\n var labelStatesTexts = getLabelText(opt, labelStatesModels);\n var normalModel = labelStatesModels.normal;\n var showNormal = !!normalModel.getShallow('show');\n var normalStyle = createTextStyle(normalModel, stateSpecified && stateSpecified.normal, opt, false, !isSetOnText);\n normalStyle.text = labelStatesTexts.normal;\n\n if (!isSetOnText) {\n // Always create new\n targetEl.setTextConfig(createTextConfig(normalModel, opt, false));\n }\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n var stateModel = labelStatesModels[stateName];\n\n if (stateModel) {\n var stateObj = textContent.ensureState(stateName);\n var stateShow = !!retrieve2(stateModel.getShallow('show'), showNormal);\n\n if (stateShow !== showNormal) {\n stateObj.ignore = !stateShow;\n }\n\n stateObj.style = createTextStyle(stateModel, stateSpecified && stateSpecified[stateName], opt, true, !isSetOnText);\n stateObj.style.text = labelStatesTexts[stateName];\n\n if (!isSetOnText) {\n var targetElEmphasisState = targetEl.ensureState(stateName);\n targetElEmphasisState.textConfig = createTextConfig(stateModel, opt, true);\n }\n }\n } // PENDING: if there is many requirements that emphasis position\n // need to be different from normal position, we might consider\n // auto slient is those cases.\n\n\n textContent.silent = !!normalModel.getShallow('silent'); // Keep x and y\n\n if (textContent.style.x != null) {\n normalStyle.x = textContent.style.x;\n }\n\n if (textContent.style.y != null) {\n normalStyle.y = textContent.style.y;\n }\n\n textContent.ignore = !showNormal; // Always create new style.\n\n textContent.useStyle(normalStyle);\n textContent.dirty();\n\n if (opt.enableTextSetter) {\n labelInner(textContent).setLabelText = function (interpolatedValue) {\n var labelStatesTexts = getLabelText(opt, labelStatesModels, interpolatedValue);\n setLabelText(textContent, labelStatesTexts);\n };\n }\n } else if (textContent) {\n // Not display rich text.\n textContent.ignore = true;\n }\n\n targetEl.dirty();\n}\n\nexport { setLabelStyle };\nexport function getLabelStatesModels(itemModel, labelName) {\n labelName = labelName || 'label';\n var statesModels = {\n normal: itemModel.getModel(labelName)\n };\n\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n statesModels[stateName] = itemModel.getModel([stateName, labelName]);\n }\n\n return statesModels;\n}\n/**\n * Set basic textStyle properties.\n */\n\nexport function createTextStyle(textStyleModel, specifiedTextStyle, // Fixed style in the code. Can't be set by model.\nopt, isNotNormal, isAttached // If text is attached on an element. If so, auto color will handling in zrender.\n) {\n var textStyle = {};\n setTextStyleCommon(textStyle, textStyleModel, opt, isNotNormal, isAttached);\n specifiedTextStyle && extend(textStyle, specifiedTextStyle); // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n\n return textStyle;\n}\nexport function createTextConfig(textStyleModel, opt, isNotNormal) {\n opt = opt || {};\n var textConfig = {};\n var labelPosition;\n var labelRotate = textStyleModel.getShallow('rotate');\n var labelDistance = retrieve2(textStyleModel.getShallow('distance'), isNotNormal ? null : 5);\n var labelOffset = textStyleModel.getShallow('offset');\n labelPosition = textStyleModel.getShallow('position') || (isNotNormal ? null : 'inside'); // 'outside' is not a valid zr textPostion value, but used\n // in bar series, and magric type should be considered.\n\n labelPosition === 'outside' && (labelPosition = opt.defaultOutsidePosition || 'top');\n\n if (labelPosition != null) {\n textConfig.position = labelPosition;\n }\n\n if (labelOffset != null) {\n textConfig.offset = labelOffset;\n }\n\n if (labelRotate != null) {\n labelRotate *= Math.PI / 180;\n textConfig.rotation = labelRotate;\n }\n\n if (labelDistance != null) {\n textConfig.distance = labelDistance;\n } // fill and auto is determined by the color of path fill if it's not specified by developers.\n\n\n textConfig.outsideFill = textStyleModel.get('color') === 'inherit' ? opt.inheritColor || null : 'auto';\n return textConfig;\n}\n/**\n * The uniform entry of set text style, that is, retrieve style definitions\n * from `model` and set to `textStyle` object.\n *\n * Never in merge mode, but in overwrite mode, that is, all of the text style\n * properties will be set. (Consider the states of normal and emphasis and\n * default value can be adopted, merge would make the logic too complicated\n * to manage.)\n */\n\nfunction setTextStyleCommon(textStyle, textStyleModel, opt, isNotNormal, isAttached) {\n // Consider there will be abnormal when merge hover style to normal style if given default value.\n opt = opt || EMPTY_OBJ;\n var ecModel = textStyleModel.ecModel;\n var globalTextStyle = ecModel && ecModel.option.textStyle; // Consider case:\n // {\n // data: [{\n // value: 12,\n // label: {\n // rich: {\n // // no 'a' here but using parent 'a'.\n // }\n // }\n // }],\n // rich: {\n // a: { ... }\n // }\n // }\n\n var richItemNames = getRichItemNames(textStyleModel);\n var richResult;\n\n if (richItemNames) {\n richResult = {};\n\n for (var name_1 in richItemNames) {\n if (richItemNames.hasOwnProperty(name_1)) {\n // Cascade is supported in rich.\n var richTextStyle = textStyleModel.getModel(['rich', name_1]); // In rich, never `disableBox`.\n // FIXME: consider `label: {formatter: '{a|xx}', color: 'blue', rich: {a: {}}}`,\n // the default color `'blue'` will not be adopted if no color declared in `rich`.\n // That might confuses users. So probably we should put `textStyleModel` as the\n // root ancestor of the `richTextStyle`. But that would be a break change.\n\n setTokenTextStyle(richResult[name_1] = {}, richTextStyle, globalTextStyle, opt, isNotNormal, isAttached, false, true);\n }\n }\n }\n\n if (richResult) {\n textStyle.rich = richResult;\n }\n\n var overflow = textStyleModel.get('overflow');\n\n if (overflow) {\n textStyle.overflow = overflow;\n }\n\n var margin = textStyleModel.get('minMargin');\n\n if (margin != null) {\n textStyle.margin = margin;\n }\n\n setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isNotNormal, isAttached, true, false);\n} // Consider case:\n// {\n// data: [{\n// value: 12,\n// label: {\n// rich: {\n// // no 'a' here but using parent 'a'.\n// }\n// }\n// }],\n// rich: {\n// a: { ... }\n// }\n// }\n// TODO TextStyleModel\n\n\nfunction getRichItemNames(textStyleModel) {\n // Use object to remove duplicated names.\n var richItemNameMap;\n\n while (textStyleModel && textStyleModel !== textStyleModel.ecModel) {\n var rich = (textStyleModel.option || EMPTY_OBJ).rich;\n\n if (rich) {\n richItemNameMap = richItemNameMap || {};\n var richKeys = keys(rich);\n\n for (var i = 0; i < richKeys.length; i++) {\n var richKey = richKeys[i];\n richItemNameMap[richKey] = 1;\n }\n }\n\n textStyleModel = textStyleModel.parentModel;\n }\n\n return richItemNameMap;\n}\n\nvar TEXT_PROPS_WITH_GLOBAL = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY'];\nvar TEXT_PROPS_SELF = ['align', 'lineHeight', 'width', 'height', 'tag', 'verticalAlign'];\nvar TEXT_PROPS_BOX = ['padding', 'borderWidth', 'borderRadius', 'borderDashOffset', 'backgroundColor', 'borderColor', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'];\n\nfunction setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isNotNormal, isAttached, isBlock, inRich) {\n // In merge mode, default value should not be given.\n globalTextStyle = !isNotNormal && globalTextStyle || EMPTY_OBJ;\n var inheritColor = opt && opt.inheritColor;\n var fillColor = textStyleModel.getShallow('color');\n var strokeColor = textStyleModel.getShallow('textBorderColor');\n var opacity = retrieve2(textStyleModel.getShallow('opacity'), globalTextStyle.opacity);\n\n if (fillColor === 'inherit' || fillColor === 'auto') {\n if (process.env.NODE_ENV !== 'production') {\n if (fillColor === 'auto') {\n deprecateReplaceLog('color: \\'auto\\'', 'color: \\'inherit\\'');\n }\n }\n\n if (inheritColor) {\n fillColor = inheritColor;\n } else {\n fillColor = null;\n }\n }\n\n if (strokeColor === 'inherit' || strokeColor === 'auto') {\n if (process.env.NODE_ENV !== 'production') {\n if (strokeColor === 'auto') {\n deprecateReplaceLog('color: \\'auto\\'', 'color: \\'inherit\\'');\n }\n }\n\n if (inheritColor) {\n strokeColor = inheritColor;\n } else {\n strokeColor = null;\n }\n }\n\n if (!isAttached) {\n // Only use default global textStyle.color if text is individual.\n // Otherwise it will use the strategy of attached text color because text may be on a path.\n fillColor = fillColor || globalTextStyle.color;\n strokeColor = strokeColor || globalTextStyle.textBorderColor;\n }\n\n if (fillColor != null) {\n textStyle.fill = fillColor;\n }\n\n if (strokeColor != null) {\n textStyle.stroke = strokeColor;\n }\n\n var textBorderWidth = retrieve2(textStyleModel.getShallow('textBorderWidth'), globalTextStyle.textBorderWidth);\n\n if (textBorderWidth != null) {\n textStyle.lineWidth = textBorderWidth;\n }\n\n var textBorderType = retrieve2(textStyleModel.getShallow('textBorderType'), globalTextStyle.textBorderType);\n\n if (textBorderType != null) {\n textStyle.lineDash = textBorderType;\n }\n\n var textBorderDashOffset = retrieve2(textStyleModel.getShallow('textBorderDashOffset'), globalTextStyle.textBorderDashOffset);\n\n if (textBorderDashOffset != null) {\n textStyle.lineDashOffset = textBorderDashOffset;\n }\n\n if (!isNotNormal && opacity == null && !inRich) {\n opacity = opt && opt.defaultOpacity;\n }\n\n if (opacity != null) {\n textStyle.opacity = opacity;\n } // TODO\n\n\n if (!isNotNormal && !isAttached) {\n // Set default finally.\n if (textStyle.fill == null && opt.inheritColor) {\n textStyle.fill = opt.inheritColor;\n }\n } // Do not use `getFont` here, because merge should be supported, where\n // part of these properties may be changed in emphasis style, and the\n // others should remain their original value got from normal style.\n\n\n for (var i = 0; i < TEXT_PROPS_WITH_GLOBAL.length; i++) {\n var key = TEXT_PROPS_WITH_GLOBAL[i];\n var val = retrieve2(textStyleModel.getShallow(key), globalTextStyle[key]);\n\n if (val != null) {\n textStyle[key] = val;\n }\n }\n\n for (var i = 0; i < TEXT_PROPS_SELF.length; i++) {\n var key = TEXT_PROPS_SELF[i];\n var val = textStyleModel.getShallow(key);\n\n if (val != null) {\n textStyle[key] = val;\n }\n }\n\n if (textStyle.verticalAlign == null) {\n var baseline = textStyleModel.getShallow('baseline');\n\n if (baseline != null) {\n textStyle.verticalAlign = baseline;\n }\n }\n\n if (!isBlock || !opt.disableBox) {\n for (var i = 0; i < TEXT_PROPS_BOX.length; i++) {\n var key = TEXT_PROPS_BOX[i];\n var val = textStyleModel.getShallow(key);\n\n if (val != null) {\n textStyle[key] = val;\n }\n }\n\n var borderType = textStyleModel.getShallow('borderType');\n\n if (borderType != null) {\n textStyle.borderDash = borderType;\n }\n\n if ((textStyle.backgroundColor === 'auto' || textStyle.backgroundColor === 'inherit') && inheritColor) {\n if (process.env.NODE_ENV !== 'production') {\n if (textStyle.backgroundColor === 'auto') {\n deprecateReplaceLog('backgroundColor: \\'auto\\'', 'backgroundColor: \\'inherit\\'');\n }\n }\n\n textStyle.backgroundColor = inheritColor;\n }\n\n if ((textStyle.borderColor === 'auto' || textStyle.borderColor === 'inherit') && inheritColor) {\n if (process.env.NODE_ENV !== 'production') {\n if (textStyle.borderColor === 'auto') {\n deprecateReplaceLog('borderColor: \\'auto\\'', 'borderColor: \\'inherit\\'');\n }\n }\n\n textStyle.borderColor = inheritColor;\n }\n }\n}\n\nexport function getFont(opt, ecModel) {\n var gTextStyleModel = ecModel && ecModel.getModel('textStyle');\n return trim([// FIXME in node-canvas fontWeight is before fontStyle\n opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '', opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '', (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px', opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'].join(' '));\n}\nexport var labelInner = makeInner();\nexport function setLabelValueAnimation(label, labelStatesModels, value, getDefaultText) {\n if (!label) {\n return;\n }\n\n var obj = labelInner(label);\n obj.prevValue = obj.value;\n obj.value = value;\n var normalLabelModel = labelStatesModels.normal;\n obj.valueAnimation = normalLabelModel.get('valueAnimation');\n\n if (obj.valueAnimation) {\n obj.precision = normalLabelModel.get('precision');\n obj.defaultInterpolatedText = getDefaultText;\n obj.statesModels = labelStatesModels;\n }\n}\nexport function animateLabelValue(textEl, dataIndex, data, animatableModel, labelFetcher) {\n var labelInnerStore = labelInner(textEl);\n\n if (!labelInnerStore.valueAnimation) {\n return;\n }\n\n var defaultInterpolatedText = labelInnerStore.defaultInterpolatedText; // Consider the case that being animating, do not use the `obj.value`,\n // Otherwise it will jump to the `obj.value` when this new animation started.\n\n var currValue = retrieve2(labelInnerStore.interpolatedValue, labelInnerStore.prevValue);\n var targetValue = labelInnerStore.value;\n\n function during(percent) {\n var interpolated = interpolateRawValues(data, labelInnerStore.precision, currValue, targetValue, percent);\n labelInnerStore.interpolatedValue = percent === 1 ? null : interpolated;\n var labelText = getLabelText({\n labelDataIndex: dataIndex,\n labelFetcher: labelFetcher,\n defaultText: defaultInterpolatedText ? defaultInterpolatedText(interpolated) : interpolated + ''\n }, labelInnerStore.statesModels, interpolated);\n setLabelText(textEl, labelText);\n }\n\n (labelInnerStore.prevValue == null ? initProps : updateProps)(textEl, {}, animatableModel, dataIndex, null, during);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { makeInner, normalizeToArray } from '../../util/model';\nvar innerColor = makeInner();\nvar innerDecal = makeInner();\n\nvar PaletteMixin =\n/** @class */\nfunction () {\n function PaletteMixin() {}\n\n PaletteMixin.prototype.getColorFromPalette = function (name, scope, requestNum) {\n var defaultPalette = normalizeToArray(this.get('color', true));\n var layeredPalette = this.get('colorLayer', true);\n return getFromPalette(this, innerColor, defaultPalette, layeredPalette, name, scope, requestNum);\n };\n\n PaletteMixin.prototype.clearColorPalette = function () {\n clearPalette(this, innerColor);\n };\n\n return PaletteMixin;\n}();\n\nexport function getDecalFromPalette(ecModel, name, scope, requestNum) {\n var defaultDecals = normalizeToArray(ecModel.get(['aria', 'decal', 'decals']));\n return getFromPalette(ecModel, innerDecal, defaultDecals, null, name, scope, requestNum);\n}\n\nfunction getNearestPalette(palettes, requestColorNum) {\n var paletteNum = palettes.length; // TODO palettes must be in order\n\n for (var i = 0; i < paletteNum; i++) {\n if (palettes[i].length > requestColorNum) {\n return palettes[i];\n }\n }\n\n return palettes[paletteNum - 1];\n}\n/**\n * @param name MUST NOT be null/undefined. Otherwise call this function\n * twise with the same parameters will get different result.\n * @param scope default this.\n * @return Can be null/undefined\n */\n\n\nfunction getFromPalette(that, inner, defaultPalette, layeredPalette, name, scope, requestNum) {\n scope = scope || that;\n var scopeFields = inner(scope);\n var paletteIdx = scopeFields.paletteIdx || 0;\n var paletteNameMap = scopeFields.paletteNameMap = scopeFields.paletteNameMap || {}; // Use `hasOwnProperty` to avoid conflict with Object.prototype.\n\n if (paletteNameMap.hasOwnProperty(name)) {\n return paletteNameMap[name];\n }\n\n var palette = requestNum == null || !layeredPalette ? defaultPalette : getNearestPalette(layeredPalette, requestNum); // In case can't find in layered color palette.\n\n palette = palette || defaultPalette;\n\n if (!palette || !palette.length) {\n return;\n }\n\n var pickedPaletteItem = palette[paletteIdx];\n\n if (name) {\n paletteNameMap[name] = pickedPaletteItem;\n }\n\n scopeFields.paletteIdx = (paletteIdx + 1) % palette.length;\n return pickedPaletteItem;\n}\n\nfunction clearPalette(that, inner) {\n inner(that).paletteIdx = 0;\n inner(that).paletteNameMap = {};\n}\n\nexport { PaletteMixin };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createHashMap } from 'zrender/lib/core/util';\n;\n;\n;\nexport var VISUAL_DIMENSIONS = createHashMap(['tooltip', 'label', 'itemName', 'itemId', 'itemGroupId', 'seriesName']);\nexport var SOURCE_FORMAT_ORIGINAL = 'original';\nexport var SOURCE_FORMAT_ARRAY_ROWS = 'arrayRows';\nexport var SOURCE_FORMAT_OBJECT_ROWS = 'objectRows';\nexport var SOURCE_FORMAT_KEYED_COLUMNS = 'keyedColumns';\nexport var SOURCE_FORMAT_TYPED_ARRAY = 'typedArray';\nexport var SOURCE_FORMAT_UNKNOWN = 'unknown';\nexport var SERIES_LAYOUT_BY_COLUMN = 'column';\nexport var SERIES_LAYOUT_BY_ROW = 'row';\n;\n;\n;\n;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { retrieveRawValue } from '../../data/helper/dataProvider';\nimport { formatTpl } from '../../util/format';\nimport { error, makePrintable } from '../../util/log';\nvar DIMENSION_LABEL_REG = /\\{@(.+?)\\}/g;\n\nvar DataFormatMixin =\n/** @class */\nfunction () {\n function DataFormatMixin() {}\n /**\n * Get params for formatter\n */\n\n\n DataFormatMixin.prototype.getDataParams = function (dataIndex, dataType) {\n var data = this.getData(dataType);\n var rawValue = this.getRawValue(dataIndex, dataType);\n var rawDataIndex = data.getRawIndex(dataIndex);\n var name = data.getName(dataIndex);\n var itemOpt = data.getRawDataItem(dataIndex);\n var style = data.getItemVisual(dataIndex, 'style');\n var color = style && style[data.getItemVisual(dataIndex, 'drawType') || 'fill'];\n var borderColor = style && style.stroke;\n var mainType = this.mainType;\n var isSeries = mainType === 'series';\n var userOutput = data.userOutput && data.userOutput.get();\n return {\n componentType: mainType,\n componentSubType: this.subType,\n componentIndex: this.componentIndex,\n seriesType: isSeries ? this.subType : null,\n seriesIndex: this.seriesIndex,\n seriesId: isSeries ? this.id : null,\n seriesName: isSeries ? this.name : null,\n name: name,\n dataIndex: rawDataIndex,\n data: itemOpt,\n dataType: dataType,\n value: rawValue,\n color: color,\n borderColor: borderColor,\n dimensionNames: userOutput ? userOutput.fullDimensions : null,\n encode: userOutput ? userOutput.encode : null,\n // Param name list for mapping `a`, `b`, `c`, `d`, `e`\n $vars: ['seriesName', 'name', 'value']\n };\n };\n /**\n * Format label\n * @param dataIndex\n * @param status 'normal' by default\n * @param dataType\n * @param labelDimIndex Only used in some chart that\n * use formatter in different dimensions, like radar.\n * @param formatter Formatter given outside.\n * @return return null/undefined if no formatter\n */\n\n\n DataFormatMixin.prototype.getFormattedLabel = function (dataIndex, status, dataType, labelDimIndex, formatter, extendParams) {\n status = status || 'normal';\n var data = this.getData(dataType);\n var params = this.getDataParams(dataIndex, dataType);\n\n if (extendParams) {\n params.value = extendParams.interpolatedValue;\n }\n\n if (labelDimIndex != null && zrUtil.isArray(params.value)) {\n params.value = params.value[labelDimIndex];\n }\n\n if (!formatter) {\n var itemModel = data.getItemModel(dataIndex); // @ts-ignore\n\n formatter = itemModel.get(status === 'normal' ? ['label', 'formatter'] : [status, 'label', 'formatter']);\n }\n\n if (typeof formatter === 'function') {\n params.status = status;\n params.dimensionIndex = labelDimIndex;\n return formatter(params);\n } else if (typeof formatter === 'string') {\n var str = formatTpl(formatter, params); // Support 'aaa{@[3]}bbb{@product}ccc'.\n // Do not support '}' in dim name util have to.\n\n return str.replace(DIMENSION_LABEL_REG, function (origin, dimStr) {\n var len = dimStr.length;\n var dimLoose = dimStr;\n\n if (dimLoose.charAt(0) === '[' && dimLoose.charAt(len - 1) === ']') {\n dimLoose = +dimLoose.slice(1, len - 1); // Also support: '[]' => 0\n\n if (process.env.NODE_ENV !== 'production') {\n if (isNaN(dimLoose)) {\n error(\"Invalide label formatter: @\" + dimStr + \", only support @[0], @[1], @[2], ...\");\n }\n }\n }\n\n var val = retrieveRawValue(data, dataIndex, dimLoose);\n\n if (extendParams && zrUtil.isArray(extendParams.interpolatedValue)) {\n var dimIndex = data.getDimensionIndex(dimLoose);\n\n if (dimIndex >= 0) {\n val = extendParams.interpolatedValue[dimIndex];\n }\n }\n\n return val != null ? val + '' : '';\n });\n }\n };\n /**\n * Get raw value in option\n */\n\n\n DataFormatMixin.prototype.getRawValue = function (idx, dataType) {\n return retrieveRawValue(this.getData(dataType), idx);\n };\n /**\n * Should be implemented.\n * @param {number} dataIndex\n * @param {boolean} [multipleSeries=false]\n * @param {string} [dataType]\n */\n\n\n DataFormatMixin.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n // Empty function\n return;\n };\n\n return DataFormatMixin;\n}();\n\nexport { DataFormatMixin };\n; // PENDING: previously we accept this type when calling `formatTooltip`,\n// but guess little chance has been used outside. Do we need to backward\n// compat it?\n// type TooltipFormatResultLegacyObject = {\n// // `html` means the markup language text, either in 'html' or 'richText'.\n// // The name `html` is not appropriate becuase in 'richText' it is not a HTML\n// // string. But still support it for backward compat.\n// html: string;\n// markers: Dictionary;\n// };\n\n/**\n * For backward compat, normalize the return from `formatTooltip`.\n */\n\nexport function normalizeTooltipFormatResult(result // markersExisting: Dictionary\n) {\n var markupText; // let markers: Dictionary;\n\n var markupFragment;\n\n if (zrUtil.isObject(result)) {\n if (result.type) {\n markupFragment = result;\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('The return type of `formatTooltip` is not supported: ' + makePrintable(result));\n }\n } // else {\n // markupText = (result as TooltipFormatResultLegacyObject).html;\n // markers = (result as TooltipFormatResultLegacyObject).markers;\n // if (markersExisting) {\n // markers = zrUtil.merge(markersExisting, markers);\n // }\n // }\n\n } else {\n markupText = result;\n }\n\n return {\n markupText: markupText,\n // markers: markers || markersExisting,\n markupFragment: markupFragment\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport WeakMap from 'zrender/lib/core/WeakMap';\nimport LRU from 'zrender/lib/core/LRU';\nimport { defaults, createCanvas, map, isArray } from 'zrender/lib/core/util';\nimport { getLeastCommonMultiple } from './number';\nimport { createSymbol } from './symbol';\nimport { brushSingle } from 'zrender/lib/canvas/graphic';\nvar decalMap = new WeakMap();\nvar decalCache = new LRU(100);\nvar decalKeys = ['symbol', 'symbolSize', 'symbolKeepAspect', 'color', 'backgroundColor', 'dashArrayX', 'dashArrayY', 'maxTileWidth', 'maxTileHeight'];\n/**\n * Create or update pattern image from decal options\n *\n * @param {InnerDecalObject | 'none'} decalObject decal options, 'none' if no decal\n * @return {Pattern} pattern with generated image, null if no decal\n */\n\nexport function createOrUpdatePatternFromDecal(decalObject, api) {\n if (decalObject === 'none') {\n return null;\n }\n\n var dpr = api.getDevicePixelRatio();\n var zr = api.getZr();\n var isSVG = zr.painter.type === 'svg';\n\n if (decalObject.dirty) {\n decalMap[\"delete\"](decalObject);\n }\n\n var oldPattern = decalMap.get(decalObject);\n\n if (oldPattern) {\n return oldPattern;\n }\n\n var decalOpt = defaults(decalObject, {\n symbol: 'rect',\n symbolSize: 1,\n symbolKeepAspect: true,\n color: 'rgba(0, 0, 0, 0.2)',\n backgroundColor: null,\n dashArrayX: 5,\n dashArrayY: 5,\n rotation: 0,\n maxTileWidth: 512,\n maxTileHeight: 512\n });\n\n if (decalOpt.backgroundColor === 'none') {\n decalOpt.backgroundColor = null;\n }\n\n var pattern = {\n repeat: 'repeat'\n };\n setPatternnSource(pattern);\n pattern.rotation = decalOpt.rotation;\n pattern.scaleX = pattern.scaleY = isSVG ? 1 : 1 / dpr;\n decalMap.set(decalObject, pattern);\n decalObject.dirty = false;\n return pattern;\n\n function setPatternnSource(pattern) {\n var keys = [dpr];\n var isValidKey = true;\n\n for (var i = 0; i < decalKeys.length; ++i) {\n var value = decalOpt[decalKeys[i]];\n var valueType = typeof value;\n\n if (value != null && !isArray(value) && valueType !== 'string' && valueType !== 'number' && valueType !== 'boolean') {\n isValidKey = false;\n break;\n }\n\n keys.push(value);\n }\n\n var cacheKey;\n\n if (isValidKey) {\n cacheKey = keys.join(',') + (isSVG ? '-svg' : '');\n var cache = decalCache.get(cacheKey);\n\n if (cache) {\n isSVG ? pattern.svgElement = cache : pattern.image = cache;\n }\n }\n\n var dashArrayX = normalizeDashArrayX(decalOpt.dashArrayX);\n var dashArrayY = normalizeDashArrayY(decalOpt.dashArrayY);\n var symbolArray = normalizeSymbolArray(decalOpt.symbol);\n var lineBlockLengthsX = getLineBlockLengthX(dashArrayX);\n var lineBlockLengthY = getLineBlockLengthY(dashArrayY);\n var canvas = !isSVG && createCanvas();\n var svgRoot = isSVG && zr.painter.createSVGElement('g');\n var pSize = getPatternSize();\n var ctx;\n\n if (canvas) {\n canvas.width = pSize.width * dpr;\n canvas.height = pSize.height * dpr;\n ctx = canvas.getContext('2d');\n }\n\n brushDecal();\n\n if (isValidKey) {\n decalCache.put(cacheKey, canvas || svgRoot);\n }\n\n pattern.image = canvas;\n pattern.svgElement = svgRoot;\n pattern.svgWidth = pSize.width;\n pattern.svgHeight = pSize.height;\n /**\n * Get minumum length that can make a repeatable pattern.\n *\n * @return {Object} pattern width and height\n */\n\n function getPatternSize() {\n /**\n * For example, if dash is [[3, 2], [2, 1]] for X, it looks like\n * |--- --- --- --- --- ...\n * |-- -- -- -- -- -- -- -- ...\n * |--- --- --- --- --- ...\n * |-- -- -- -- -- -- -- -- ...\n * So the minumum length of X is 15,\n * which is the least common multiple of `3 + 2` and `2 + 1`\n * |--- --- --- |--- --- ...\n * |-- -- -- -- -- |-- -- -- ...\n */\n var width = 1;\n\n for (var i = 0, xlen = lineBlockLengthsX.length; i < xlen; ++i) {\n width = getLeastCommonMultiple(width, lineBlockLengthsX[i]);\n }\n\n var symbolRepeats = 1;\n\n for (var i = 0, xlen = symbolArray.length; i < xlen; ++i) {\n symbolRepeats = getLeastCommonMultiple(symbolRepeats, symbolArray[i].length);\n }\n\n width *= symbolRepeats;\n var height = lineBlockLengthY * lineBlockLengthsX.length * symbolArray.length;\n\n if (process.env.NODE_ENV !== 'production') {\n var warn = function (attrName) {\n /* eslint-disable-next-line */\n console.warn(\"Calculated decal size is greater than \" + attrName + \" due to decal option settings so \" + attrName + \" is used for the decal size. Please consider changing the decal option to make a smaller decal or set \" + attrName + \" to be larger to avoid incontinuity.\");\n };\n\n if (width > decalOpt.maxTileWidth) {\n warn('maxTileWidth');\n }\n\n if (height > decalOpt.maxTileHeight) {\n warn('maxTileHeight');\n }\n }\n\n return {\n width: Math.max(1, Math.min(width, decalOpt.maxTileWidth)),\n height: Math.max(1, Math.min(height, decalOpt.maxTileHeight))\n };\n }\n\n function brushDecal() {\n if (ctx) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n if (decalOpt.backgroundColor) {\n ctx.fillStyle = decalOpt.backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n }\n\n var ySum = 0;\n\n for (var i = 0; i < dashArrayY.length; ++i) {\n ySum += dashArrayY[i];\n }\n\n if (ySum <= 0) {\n // dashArrayY is 0, draw nothing\n return;\n }\n\n var y = -lineBlockLengthY;\n var yId = 0;\n var yIdTotal = 0;\n var xId0 = 0;\n\n while (y < pSize.height) {\n if (yId % 2 === 0) {\n var symbolYId = yIdTotal / 2 % symbolArray.length;\n var x = 0;\n var xId1 = 0;\n var xId1Total = 0;\n\n while (x < pSize.width * 2) {\n var xSum = 0;\n\n for (var i = 0; i < dashArrayX[xId0].length; ++i) {\n xSum += dashArrayX[xId0][i];\n }\n\n if (xSum <= 0) {\n // Skip empty line\n break;\n } // E.g., [15, 5, 20, 5] draws only for 15 and 20\n\n\n if (xId1 % 2 === 0) {\n var size = (1 - decalOpt.symbolSize) * 0.5;\n var left = x + dashArrayX[xId0][xId1] * size;\n var top_1 = y + dashArrayY[yId] * size;\n var width = dashArrayX[xId0][xId1] * decalOpt.symbolSize;\n var height = dashArrayY[yId] * decalOpt.symbolSize;\n var symbolXId = xId1Total / 2 % symbolArray[symbolYId].length;\n brushSymbol(left, top_1, width, height, symbolArray[symbolYId][symbolXId]);\n }\n\n x += dashArrayX[xId0][xId1];\n ++xId1Total;\n ++xId1;\n\n if (xId1 === dashArrayX[xId0].length) {\n xId1 = 0;\n }\n }\n\n ++xId0;\n\n if (xId0 === dashArrayX.length) {\n xId0 = 0;\n }\n }\n\n y += dashArrayY[yId];\n ++yIdTotal;\n ++yId;\n\n if (yId === dashArrayY.length) {\n yId = 0;\n }\n }\n\n function brushSymbol(x, y, width, height, symbolType) {\n var scale = isSVG ? 1 : dpr;\n var symbol = createSymbol(symbolType, x * scale, y * scale, width * scale, height * scale, decalOpt.color, decalOpt.symbolKeepAspect);\n\n if (isSVG) {\n svgRoot.appendChild(zr.painter.paintOne(symbol));\n } else {\n // Paint to canvas for all other renderers.\n brushSingle(ctx, symbol);\n }\n }\n }\n }\n}\n/**\n * Convert symbol array into normalized array\n *\n * @param {string | (string | string[])[]} symbol symbol input\n * @return {string[][]} normolized symbol array\n */\n\nfunction normalizeSymbolArray(symbol) {\n if (!symbol || symbol.length === 0) {\n return [['rect']];\n }\n\n if (typeof symbol === 'string') {\n return [[symbol]];\n }\n\n var isAllString = true;\n\n for (var i = 0; i < symbol.length; ++i) {\n if (typeof symbol[i] !== 'string') {\n isAllString = false;\n break;\n }\n }\n\n if (isAllString) {\n return normalizeSymbolArray([symbol]);\n }\n\n var result = [];\n\n for (var i = 0; i < symbol.length; ++i) {\n if (typeof symbol[i] === 'string') {\n result.push([symbol[i]]);\n } else {\n result.push(symbol[i]);\n }\n }\n\n return result;\n}\n/**\n * Convert dash input into dashArray\n *\n * @param {DecalDashArrayX} dash dash input\n * @return {number[][]} normolized dash array\n */\n\n\nfunction normalizeDashArrayX(dash) {\n if (!dash || dash.length === 0) {\n return [[0, 0]];\n }\n\n if (typeof dash === 'number') {\n var dashValue = Math.ceil(dash);\n return [[dashValue, dashValue]];\n }\n /**\n * [20, 5] should be normalized into [[20, 5]],\n * while [20, [5, 10]] should be normalized into [[20, 20], [5, 10]]\n */\n\n\n var isAllNumber = true;\n\n for (var i = 0; i < dash.length; ++i) {\n if (typeof dash[i] !== 'number') {\n isAllNumber = false;\n break;\n }\n }\n\n if (isAllNumber) {\n return normalizeDashArrayX([dash]);\n }\n\n var result = [];\n\n for (var i = 0; i < dash.length; ++i) {\n if (typeof dash[i] === 'number') {\n var dashValue = Math.ceil(dash[i]);\n result.push([dashValue, dashValue]);\n } else {\n var dashValue = map(dash[i], function (n) {\n return Math.ceil(n);\n });\n\n if (dashValue.length % 2 === 1) {\n // [4, 2, 1] means |---- - -- |---- - -- |\n // so normalize it to be [4, 2, 1, 4, 2, 1]\n result.push(dashValue.concat(dashValue));\n } else {\n result.push(dashValue);\n }\n }\n }\n\n return result;\n}\n/**\n * Convert dash input into dashArray\n *\n * @param {DecalDashArrayY} dash dash input\n * @return {number[]} normolized dash array\n */\n\n\nfunction normalizeDashArrayY(dash) {\n if (!dash || typeof dash === 'object' && dash.length === 0) {\n return [0, 0];\n }\n\n if (typeof dash === 'number') {\n var dashValue_1 = Math.ceil(dash);\n return [dashValue_1, dashValue_1];\n }\n\n var dashValue = map(dash, function (n) {\n return Math.ceil(n);\n });\n return dash.length % 2 ? dashValue.concat(dashValue) : dashValue;\n}\n/**\n * Get block length of each line. A block is the length of dash line and space.\n * For example, a line with [4, 1] has a dash line of 4 and a space of 1 after\n * that, so the block length of this line is 5.\n *\n * @param {number[][]} dash dash arrary of X or Y\n * @return {number[]} block length of each line\n */\n\n\nfunction getLineBlockLengthX(dash) {\n return map(dash, function (line) {\n return getLineBlockLengthY(line);\n });\n}\n\nfunction getLineBlockLengthY(dash) {\n var blockLength = 0;\n\n for (var i = 0; i < dash.length; ++i) {\n blockLength += dash[i];\n }\n\n if (dash.length % 2 === 1) {\n // [4, 2, 1] means |---- - -- |---- - -- |\n // So total length is (4 + 2 + 1) * 2\n return blockLength * 2;\n }\n\n return blockLength;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 findEventDispatcher(target, det, returnFirstMatch) {\n var found;\n\n while (target) {\n if (det(target)) {\n found = target;\n\n if (returnFirstMatch) {\n break;\n }\n }\n\n target = target.__hostTarget || target.parent;\n }\n\n return found;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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';\n/* global Float32Array */\n\nvar supportFloat32Array = typeof Float32Array !== 'undefined';\nvar Float32ArrayCtor = !supportFloat32Array ? Array : Float32Array;\nexport function createFloat32Array(arg) {\n if (isArray(arg)) {\n // Return self directly if don't support TypedArray.\n return supportFloat32Array ? new Float32Array(arg) : arg;\n } // Else is number\n\n\n return new Float32ArrayCtor(arg);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 './model';\nexport var getECData = makeInner();\nexport var setCommonECData = function (seriesIndex, dataType, dataIdx, el) {\n if (el) {\n var ecData = getECData(el); // Add data index and series index for indexing the data by element\n // Useful in tooltip\n\n ecData.dataIndex = dataIdx;\n ecData.dataType = dataType;\n ecData.seriesIndex = seriesIndex; // TODO: not store dataIndex on children.\n\n if (el.type === 'group') {\n el.traverse(function (child) {\n var childECData = getECData(child);\n childECData.seriesIndex = seriesIndex;\n childECData.dataIndex = dataIdx;\n childECData.dataType = dataType;\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// Layout helpers for each component positioning\nimport * as zrUtil from 'zrender/lib/core/util';\nimport BoundingRect from 'zrender/lib/core/BoundingRect';\nimport { parsePercent } from './number';\nimport * as formatUtil from './format';\nvar each = zrUtil.each;\n/**\n * @public\n */\n\nexport var LOCATION_PARAMS = ['left', 'right', 'top', 'bottom', 'width', 'height'];\n/**\n * @public\n */\n\nexport var HV_NAMES = [['width', 'left', 'right'], ['height', 'top', 'bottom']];\n\nfunction boxLayout(orient, group, gap, maxWidth, maxHeight) {\n var x = 0;\n var y = 0;\n\n if (maxWidth == null) {\n maxWidth = Infinity;\n }\n\n if (maxHeight == null) {\n maxHeight = Infinity;\n }\n\n var currentLineMaxSize = 0;\n group.eachChild(function (child, idx) {\n var rect = child.getBoundingRect();\n var nextChild = group.childAt(idx + 1);\n var nextChildRect = nextChild && nextChild.getBoundingRect();\n var nextX;\n var nextY;\n\n if (orient === 'horizontal') {\n var moveX = rect.width + (nextChildRect ? -nextChildRect.x + rect.x : 0);\n nextX = x + moveX; // Wrap when width exceeds maxWidth or meet a `newline` group\n // FIXME compare before adding gap?\n\n if (nextX > maxWidth || child.newline) {\n x = 0;\n nextX = moveX;\n y += currentLineMaxSize + gap;\n currentLineMaxSize = rect.height;\n } else {\n // FIXME: consider rect.y is not `0`?\n currentLineMaxSize = Math.max(currentLineMaxSize, rect.height);\n }\n } else {\n var moveY = rect.height + (nextChildRect ? -nextChildRect.y + rect.y : 0);\n nextY = y + moveY; // Wrap when width exceeds maxHeight or meet a `newline` group\n\n if (nextY > maxHeight || child.newline) {\n x += currentLineMaxSize + gap;\n y = 0;\n nextY = moveY;\n currentLineMaxSize = rect.width;\n } else {\n currentLineMaxSize = Math.max(currentLineMaxSize, rect.width);\n }\n }\n\n if (child.newline) {\n return;\n }\n\n child.x = x;\n child.y = y;\n child.markRedraw();\n orient === 'horizontal' ? x = nextX + gap : y = nextY + gap;\n });\n}\n/**\n * VBox or HBox layouting\n * @param {string} orient\n * @param {module:zrender/graphic/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\n\n\nexport var box = boxLayout;\n/**\n * VBox layouting\n * @param {module:zrender/graphic/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\n\nexport var vbox = zrUtil.curry(boxLayout, 'vertical');\n/**\n * HBox layouting\n * @param {module:zrender/graphic/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\n\nexport var hbox = zrUtil.curry(boxLayout, 'horizontal');\n/**\n * If x or x2 is not specified or 'center' 'left' 'right',\n * the width would be as long as possible.\n * If y or y2 is not specified or 'middle' 'top' 'bottom',\n * the height would be as long as possible.\n */\n\nexport function getAvailableSize(positionInfo, containerRect, margin) {\n var containerWidth = containerRect.width;\n var containerHeight = containerRect.height;\n var x = parsePercent(positionInfo.left, containerWidth);\n var y = parsePercent(positionInfo.top, containerHeight);\n var x2 = parsePercent(positionInfo.right, containerWidth);\n var y2 = parsePercent(positionInfo.bottom, containerHeight);\n (isNaN(x) || isNaN(parseFloat(positionInfo.left))) && (x = 0);\n (isNaN(x2) || isNaN(parseFloat(positionInfo.right))) && (x2 = containerWidth);\n (isNaN(y) || isNaN(parseFloat(positionInfo.top))) && (y = 0);\n (isNaN(y2) || isNaN(parseFloat(positionInfo.bottom))) && (y2 = containerHeight);\n margin = formatUtil.normalizeCssArray(margin || 0);\n return {\n width: Math.max(x2 - x - margin[1] - margin[3], 0),\n height: Math.max(y2 - y - margin[0] - margin[2], 0)\n };\n}\n/**\n * Parse position info.\n */\n\nexport function getLayoutRect(positionInfo, containerRect, margin) {\n margin = formatUtil.normalizeCssArray(margin || 0);\n var containerWidth = containerRect.width;\n var containerHeight = containerRect.height;\n var left = parsePercent(positionInfo.left, containerWidth);\n var top = parsePercent(positionInfo.top, containerHeight);\n var right = parsePercent(positionInfo.right, containerWidth);\n var bottom = parsePercent(positionInfo.bottom, containerHeight);\n var width = parsePercent(positionInfo.width, containerWidth);\n var height = parsePercent(positionInfo.height, containerHeight);\n var verticalMargin = margin[2] + margin[0];\n var horizontalMargin = margin[1] + margin[3];\n var aspect = positionInfo.aspect; // If width is not specified, calculate width from left and right\n\n if (isNaN(width)) {\n width = containerWidth - right - horizontalMargin - left;\n }\n\n if (isNaN(height)) {\n height = containerHeight - bottom - verticalMargin - top;\n }\n\n if (aspect != null) {\n // If width and height are not given\n // 1. Graph should not exceeds the container\n // 2. Aspect must be keeped\n // 3. Graph should take the space as more as possible\n // FIXME\n // Margin is not considered, because there is no case that both\n // using margin and aspect so far.\n if (isNaN(width) && isNaN(height)) {\n if (aspect > containerWidth / containerHeight) {\n width = containerWidth * 0.8;\n } else {\n height = containerHeight * 0.8;\n }\n } // Calculate width or height with given aspect\n\n\n if (isNaN(width)) {\n width = aspect * height;\n }\n\n if (isNaN(height)) {\n height = width / aspect;\n }\n } // If left is not specified, calculate left from right and width\n\n\n if (isNaN(left)) {\n left = containerWidth - right - width - horizontalMargin;\n }\n\n if (isNaN(top)) {\n top = containerHeight - bottom - height - verticalMargin;\n } // Align left and top\n\n\n switch (positionInfo.left || positionInfo.right) {\n case 'center':\n left = containerWidth / 2 - width / 2 - margin[3];\n break;\n\n case 'right':\n left = containerWidth - width - horizontalMargin;\n break;\n }\n\n switch (positionInfo.top || positionInfo.bottom) {\n case 'middle':\n case 'center':\n top = containerHeight / 2 - height / 2 - margin[0];\n break;\n\n case 'bottom':\n top = containerHeight - height - verticalMargin;\n break;\n } // If something is wrong and left, top, width, height are calculated as NaN\n\n\n left = left || 0;\n top = top || 0;\n\n if (isNaN(width)) {\n // Width may be NaN if only one value is given except width\n width = containerWidth - horizontalMargin - left - (right || 0);\n }\n\n if (isNaN(height)) {\n // Height may be NaN if only one value is given except height\n height = containerHeight - verticalMargin - top - (bottom || 0);\n }\n\n var rect = new BoundingRect(left + margin[3], top + margin[0], width, height);\n rect.margin = margin;\n return rect;\n}\n/**\n * Position a zr element in viewport\n * Group position is specified by either\n * {left, top}, {right, bottom}\n * If all properties exists, right and bottom will be igonred.\n *\n * Logic:\n * 1. Scale (against origin point in parent coord)\n * 2. Rotate (against origin point in parent coord)\n * 3. Traslate (with el.position by this method)\n * So this method only fixes the last step 'Traslate', which does not affect\n * scaling and rotating.\n *\n * If be called repeatly with the same input el, the same result will be gotten.\n *\n * @param el Should have `getBoundingRect` method.\n * @param positionInfo\n * @param positionInfo.left\n * @param positionInfo.top\n * @param positionInfo.right\n * @param positionInfo.bottom\n * @param positionInfo.width Only for opt.boundingModel: 'raw'\n * @param positionInfo.height Only for opt.boundingModel: 'raw'\n * @param containerRect\n * @param margin\n * @param opt\n * @param opt.hv Only horizontal or only vertical. Default to be [1, 1]\n * @param opt.boundingMode\n * Specify how to calculate boundingRect when locating.\n * 'all': Position the boundingRect that is transformed and uioned\n * both itself and its descendants.\n * This mode simplies confine the elements in the bounding\n * of their container (e.g., using 'right: 0').\n * 'raw': Position the boundingRect that is not transformed and only itself.\n * This mode is useful when you want a element can overflow its\n * container. (Consider a rotated circle needs to be located in a corner.)\n * In this mode positionInfo.width/height can only be number.\n */\n\nexport function positionElement(el, positionInfo, containerRect, margin, opt) {\n var h = !opt || !opt.hv || opt.hv[0];\n var v = !opt || !opt.hv || opt.hv[1];\n var boundingMode = opt && opt.boundingMode || 'all';\n\n if (!h && !v) {\n return;\n }\n\n var rect;\n\n if (boundingMode === 'raw') {\n rect = el.type === 'group' ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0) : el.getBoundingRect();\n } else {\n rect = el.getBoundingRect();\n\n if (el.needLocalTransform()) {\n var transform = el.getLocalTransform(); // Notice: raw rect may be inner object of el,\n // which should not be modified.\n\n rect = rect.clone();\n rect.applyTransform(transform);\n }\n } // The real width and height can not be specified but calculated by the given el.\n\n\n var layoutRect = getLayoutRect(zrUtil.defaults({\n width: rect.width,\n height: rect.height\n }, positionInfo), containerRect, margin); // Because 'tranlate' is the last step in transform\n // (see zrender/core/Transformable#getLocalTransform),\n // we can just only modify el.position to get final result.\n\n var dx = h ? layoutRect.x - rect.x : 0;\n var dy = v ? layoutRect.y - rect.y : 0;\n\n if (boundingMode === 'raw') {\n el.x = dx;\n el.y = dy;\n } else {\n el.x += dx;\n el.y += dy;\n }\n\n el.markRedraw();\n}\n/**\n * @param option Contains some of the properties in HV_NAMES.\n * @param hvIdx 0: horizontal; 1: vertical.\n */\n\nexport function sizeCalculable(option, hvIdx) {\n return option[HV_NAMES[hvIdx][0]] != null || option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null;\n}\nexport function fetchLayoutMode(ins) {\n var layoutMode = ins.layoutMode || ins.constructor.layoutMode;\n return zrUtil.isObject(layoutMode) ? layoutMode : layoutMode ? {\n type: layoutMode\n } : null;\n}\n/**\n * Consider Case:\n * When default option has {left: 0, width: 100}, and we set {right: 0}\n * through setOption or media query, using normal zrUtil.merge will cause\n * {right: 0} does not take effect.\n *\n * @example\n * ComponentModel.extend({\n * init: function () {\n * ...\n * let inputPositionParams = layout.getLayoutParams(option);\n * this.mergeOption(inputPositionParams);\n * },\n * mergeOption: function (newOption) {\n * newOption && zrUtil.merge(thisOption, newOption, true);\n * layout.mergeLayoutParam(thisOption, newOption);\n * }\n * });\n *\n * @param targetOption\n * @param newOption\n * @param opt\n */\n\nexport function mergeLayoutParam(targetOption, newOption, opt) {\n var ignoreSize = opt && opt.ignoreSize;\n !zrUtil.isArray(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]);\n var hResult = merge(HV_NAMES[0], 0);\n var vResult = merge(HV_NAMES[1], 1);\n copy(HV_NAMES[0], targetOption, hResult);\n copy(HV_NAMES[1], targetOption, vResult);\n\n function merge(names, hvIdx) {\n var newParams = {};\n var newValueCount = 0;\n var merged = {};\n var mergedValueCount = 0;\n var enoughParamNumber = 2;\n each(names, function (name) {\n merged[name] = targetOption[name];\n });\n each(names, function (name) {\n // Consider case: newOption.width is null, which is\n // set by user for removing width setting.\n hasProp(newOption, name) && (newParams[name] = merged[name] = newOption[name]);\n hasValue(newParams, name) && newValueCount++;\n hasValue(merged, name) && mergedValueCount++;\n });\n\n if (ignoreSize[hvIdx]) {\n // Only one of left/right is premitted to exist.\n if (hasValue(newOption, names[1])) {\n merged[names[2]] = null;\n } else if (hasValue(newOption, names[2])) {\n merged[names[1]] = null;\n }\n\n return merged;\n } // Case: newOption: {width: ..., right: ...},\n // or targetOption: {right: ...} and newOption: {width: ...},\n // There is no conflict when merged only has params count\n // little than enoughParamNumber.\n\n\n if (mergedValueCount === enoughParamNumber || !newValueCount) {\n return merged;\n } // Case: newOption: {width: ..., right: ...},\n // Than we can make sure user only want those two, and ignore\n // all origin params in targetOption.\n else if (newValueCount >= enoughParamNumber) {\n return newParams;\n } else {\n // Chose another param from targetOption by priority.\n for (var i = 0; i < names.length; i++) {\n var name_1 = names[i];\n\n if (!hasProp(newParams, name_1) && hasProp(targetOption, name_1)) {\n newParams[name_1] = targetOption[name_1];\n break;\n }\n }\n\n return newParams;\n }\n }\n\n function hasProp(obj, name) {\n return obj.hasOwnProperty(name);\n }\n\n function hasValue(obj, name) {\n return obj[name] != null && obj[name] !== 'auto';\n }\n\n function copy(names, target, source) {\n each(names, function (name) {\n target[name] = source[name];\n });\n }\n}\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n */\n\nexport function getLayoutParams(source) {\n return copyLayoutParams({}, source);\n}\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n * @param {Object} source\n * @return {Object} Result contains those props.\n */\n\nexport function copyLayoutParams(target, source) {\n source && target && each(LOCATION_PARAMS, function (name) {\n source.hasOwnProperty(name) && (target[name] = source[name]);\n });\n return target;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, hasOwn } from 'zrender/lib/core/util';\nvar deprecatedLogs = {};\n/**\n * Whether need to call `convertEC4CompatibleStyle`.\n */\n\nexport function isEC4CompatibleStyle(style, elType, hasOwnTextContentOption, hasOwnTextConfig) {\n // Since echarts5, `RectText` is separated from its host element and style.text\n // does not exist any more. The compat work brings some extra burden on performance.\n // So we provide:\n // `legacy: true` force make compat.\n // `legacy: false`, force do not compat.\n // `legacy` not set: auto detect wheter legacy.\n // But in this case we do not compat (difficult to detect and rare case):\n // Becuse custom series and graphic component support \"merge\", users may firstly\n // only set `textStrokeWidth` style or secondly only set `text`.\n return style && (style.legacy || style.legacy !== false && !hasOwnTextContentOption && !hasOwnTextConfig && elType !== 'tspan' // Difficult to detect whether legacy for a \"text\" el.\n && (elType === 'text' || hasOwn(style, 'text')));\n}\n/**\n * `EC4CompatibleStyle` is style that might be in echarts4 format or echarts5 format.\n * @param hostStyle The properties might be modified.\n * @return If be text el, `textContentStyle` and `textConfig` will not be retured.\n * Otherwise a `textContentStyle` and `textConfig` will be created, whose props area\n * retried from the `hostStyle`.\n */\n\nexport function convertFromEC4CompatibleStyle(hostStyle, elType, isNormal) {\n var srcStyle = hostStyle;\n var textConfig;\n var textContent;\n var textContentStyle;\n\n if (elType === 'text') {\n textContentStyle = srcStyle;\n } else {\n textContentStyle = {};\n hasOwn(srcStyle, 'text') && (textContentStyle.text = srcStyle.text);\n hasOwn(srcStyle, 'rich') && (textContentStyle.rich = srcStyle.rich);\n hasOwn(srcStyle, 'textFill') && (textContentStyle.fill = srcStyle.textFill);\n hasOwn(srcStyle, 'textStroke') && (textContentStyle.stroke = srcStyle.textStroke);\n hasOwn(srcStyle, 'fontFamily') && (textContentStyle.fontFamily = srcStyle.fontFamily);\n hasOwn(srcStyle, 'fontSize') && (textContentStyle.fontSize = srcStyle.fontSize);\n hasOwn(srcStyle, 'fontStyle') && (textContentStyle.fontStyle = srcStyle.fontStyle);\n hasOwn(srcStyle, 'fontWeight') && (textContentStyle.fontWeight = srcStyle.fontWeight);\n textContent = {\n type: 'text',\n style: textContentStyle,\n // ec4 do not support rectText trigger.\n // And when text postion is different in normal and emphasis\n // => hover text trigger emphasis;\n // => text position changed, leave mouse pointer immediately;\n // That might cause state incorrect.\n silent: true\n };\n textConfig = {};\n var hasOwnPos = hasOwn(srcStyle, 'textPosition');\n\n if (isNormal) {\n textConfig.position = hasOwnPos ? srcStyle.textPosition : 'inside';\n } else {\n hasOwnPos && (textConfig.position = srcStyle.textPosition);\n }\n\n hasOwn(srcStyle, 'textPosition') && (textConfig.position = srcStyle.textPosition);\n hasOwn(srcStyle, 'textOffset') && (textConfig.offset = srcStyle.textOffset);\n hasOwn(srcStyle, 'textRotation') && (textConfig.rotation = srcStyle.textRotation);\n hasOwn(srcStyle, 'textDistance') && (textConfig.distance = srcStyle.textDistance);\n }\n\n convertEC4CompatibleRichItem(textContentStyle, hostStyle);\n each(textContentStyle.rich, function (richItem) {\n convertEC4CompatibleRichItem(richItem, richItem);\n });\n return {\n textConfig: textConfig,\n textContent: textContent\n };\n}\n/**\n * The result will be set to `out`.\n */\n\nfunction convertEC4CompatibleRichItem(out, richItem) {\n if (!richItem) {\n return;\n } // (1) For simplicity, make textXXX properties (deprecated since ec5) has\n // higher priority. For example, consider in ec4 `borderColor: 5, textBorderColor: 10`\n // on a rect means `borderColor: 4` on the rect and `borderColor: 10` on an attached\n // richText in ec5.\n // (2) `out === richItem` if and only if `out` is text el or rich item.\n // So we can overwite existing props in `out` since textXXX has higher priority.\n\n\n richItem.font = richItem.textFont || richItem.font;\n hasOwn(richItem, 'textStrokeWidth') && (out.lineWidth = richItem.textStrokeWidth);\n hasOwn(richItem, 'textAlign') && (out.align = richItem.textAlign);\n hasOwn(richItem, 'textVerticalAlign') && (out.verticalAlign = richItem.textVerticalAlign);\n hasOwn(richItem, 'textLineHeight') && (out.lineHeight = richItem.textLineHeight);\n hasOwn(richItem, 'textWidth') && (out.width = richItem.textWidth);\n hasOwn(richItem, 'textHeight') && (out.height = richItem.textHeight);\n hasOwn(richItem, 'textBackgroundColor') && (out.backgroundColor = richItem.textBackgroundColor);\n hasOwn(richItem, 'textPadding') && (out.padding = richItem.textPadding);\n hasOwn(richItem, 'textBorderColor') && (out.borderColor = richItem.textBorderColor);\n hasOwn(richItem, 'textBorderWidth') && (out.borderWidth = richItem.textBorderWidth);\n hasOwn(richItem, 'textBorderRadius') && (out.borderRadius = richItem.textBorderRadius);\n hasOwn(richItem, 'textBoxShadowColor') && (out.shadowColor = richItem.textBoxShadowColor);\n hasOwn(richItem, 'textBoxShadowBlur') && (out.shadowBlur = richItem.textBoxShadowBlur);\n hasOwn(richItem, 'textBoxShadowOffsetX') && (out.shadowOffsetX = richItem.textBoxShadowOffsetX);\n hasOwn(richItem, 'textBoxShadowOffsetY') && (out.shadowOffsetY = richItem.textBoxShadowOffsetY);\n}\n/**\n * Convert to pure echarts4 format style.\n * `itemStyle` will be modified, added with ec4 style properties from\n * `textStyle` and `textConfig`.\n *\n * [Caveat]: For simplicity, `insideRollback` in ec4 does not compat, where\n * `styleEmphasis: {textFill: 'red'}` will remove the normal auto added stroke.\n */\n\n\nexport function convertToEC4StyleForCustomSerise(itemStl, txStl, txCfg) {\n var out = itemStl; // See `custom.ts`, a trick to set extra `textPosition` firstly.\n\n out.textPosition = out.textPosition || txCfg.position || 'inside';\n txCfg.offset != null && (out.textOffset = txCfg.offset);\n txCfg.rotation != null && (out.textRotation = txCfg.rotation);\n txCfg.distance != null && (out.textDistance = txCfg.distance);\n var isInside = out.textPosition.indexOf('inside') >= 0;\n var hostFill = itemStl.fill || '#000';\n convertToEC4RichItem(out, txStl);\n var textFillNotSet = out.textFill == null;\n\n if (isInside) {\n if (textFillNotSet) {\n out.textFill = txCfg.insideFill || '#fff';\n !out.textStroke && txCfg.insideStroke && (out.textStroke = txCfg.insideStroke);\n !out.textStroke && (out.textStroke = hostFill);\n out.textStrokeWidth == null && (out.textStrokeWidth = 2);\n }\n } else {\n if (textFillNotSet) {\n out.textFill = itemStl.fill || txCfg.outsideFill || '#000';\n }\n\n !out.textStroke && txCfg.outsideStroke && (out.textStroke = txCfg.outsideStroke);\n }\n\n out.text = txStl.text;\n out.rich = txStl.rich;\n each(txStl.rich, function (richItem) {\n convertToEC4RichItem(richItem, richItem);\n });\n return out;\n}\n\nfunction convertToEC4RichItem(out, richItem) {\n if (!richItem) {\n return;\n }\n\n hasOwn(richItem, 'fill') && (out.textFill = richItem.fill);\n hasOwn(richItem, 'stroke') && (out.textStroke = richItem.fill);\n hasOwn(richItem, 'lineWidth') && (out.textStrokeWidth = richItem.lineWidth);\n hasOwn(richItem, 'font') && (out.font = richItem.font);\n hasOwn(richItem, 'fontStyle') && (out.fontStyle = richItem.fontStyle);\n hasOwn(richItem, 'fontWeight') && (out.fontWeight = richItem.fontWeight);\n hasOwn(richItem, 'fontSize') && (out.fontSize = richItem.fontSize);\n hasOwn(richItem, 'fontFamily') && (out.fontFamily = richItem.fontFamily);\n hasOwn(richItem, 'align') && (out.textAlign = richItem.align);\n hasOwn(richItem, 'verticalAlign') && (out.textVerticalAlign = richItem.verticalAlign);\n hasOwn(richItem, 'lineHeight') && (out.textLineHeight = richItem.lineHeight);\n hasOwn(richItem, 'width') && (out.textWidth = richItem.width);\n hasOwn(richItem, 'height') && (out.textHeight = richItem.height);\n hasOwn(richItem, 'backgroundColor') && (out.textBackgroundColor = richItem.backgroundColor);\n hasOwn(richItem, 'padding') && (out.textPadding = richItem.padding);\n hasOwn(richItem, 'borderColor') && (out.textBorderColor = richItem.borderColor);\n hasOwn(richItem, 'borderWidth') && (out.textBorderWidth = richItem.borderWidth);\n hasOwn(richItem, 'borderRadius') && (out.textBorderRadius = richItem.borderRadius);\n hasOwn(richItem, 'shadowColor') && (out.textBoxShadowColor = richItem.shadowColor);\n hasOwn(richItem, 'shadowBlur') && (out.textBoxShadowBlur = richItem.shadowBlur);\n hasOwn(richItem, 'shadowOffsetX') && (out.textBoxShadowOffsetX = richItem.shadowOffsetX);\n hasOwn(richItem, 'shadowOffsetY') && (out.textBoxShadowOffsetY = richItem.shadowOffsetY);\n hasOwn(richItem, 'textShadowColor') && (out.textShadowColor = richItem.textShadowColor);\n hasOwn(richItem, 'textShadowBlur') && (out.textShadowBlur = richItem.textShadowBlur);\n hasOwn(richItem, 'textShadowOffsetX') && (out.textShadowOffsetX = richItem.textShadowOffsetX);\n hasOwn(richItem, 'textShadowOffsetY') && (out.textShadowOffsetY = richItem.textShadowOffsetY);\n}\n\nexport function warnDeprecated(deprecated, insteadApproach) {\n if (process.env.NODE_ENV !== 'production') {\n var key = deprecated + '^_^' + insteadApproach;\n\n if (!deprecatedLogs[key]) {\n console.warn(\"[ECharts] DEPRECATED: \\\"\" + deprecated + \"\\\" has been deprecated. \" + insteadApproach);\n deprecatedLogs[key] = true;\n }\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { BoundingRect, OrientedBoundingRect } from '../util/graphic';\nexport function prepareLayoutList(input) {\n var list = [];\n\n for (var i = 0; i < input.length; i++) {\n var rawItem = input[i];\n\n if (rawItem.defaultAttr.ignore) {\n continue;\n }\n\n var label = rawItem.label;\n var transform = label.getComputedTransform(); // NOTE: Get bounding rect after getComputedTransform, or label may not been updated by the host el.\n\n var localRect = label.getBoundingRect();\n var isAxisAligned = !transform || transform[1] < 1e-5 && transform[2] < 1e-5;\n var minMargin = label.style.margin || 0;\n var globalRect = localRect.clone();\n globalRect.applyTransform(transform);\n globalRect.x -= minMargin / 2;\n globalRect.y -= minMargin / 2;\n globalRect.width += minMargin;\n globalRect.height += minMargin;\n var obb = isAxisAligned ? new OrientedBoundingRect(localRect, transform) : null;\n list.push({\n label: label,\n labelLine: rawItem.labelLine,\n rect: globalRect,\n localRect: localRect,\n obb: obb,\n priority: rawItem.priority,\n defaultAttr: rawItem.defaultAttr,\n layoutOption: rawItem.computedLayoutOption,\n axisAligned: isAxisAligned,\n transform: transform\n });\n }\n\n return list;\n}\n\nfunction shiftLayout(list, xyDim, sizeDim, minBound, maxBound, balanceShift) {\n var len = list.length;\n\n if (len < 2) {\n return;\n }\n\n list.sort(function (a, b) {\n return a.rect[xyDim] - b.rect[xyDim];\n });\n var lastPos = 0;\n var delta;\n var adjusted = false;\n var shifts = [];\n var totalShifts = 0;\n\n for (var i = 0; i < len; i++) {\n var item = list[i];\n var rect = item.rect;\n delta = rect[xyDim] - lastPos;\n\n if (delta < 0) {\n // shiftForward(i, len, -delta);\n rect[xyDim] -= delta;\n item.label[xyDim] -= delta;\n adjusted = true;\n }\n\n var shift = Math.max(-delta, 0);\n shifts.push(shift);\n totalShifts += shift;\n lastPos = rect[xyDim] + rect[sizeDim];\n }\n\n if (totalShifts > 0 && balanceShift) {\n // Shift back to make the distribution more equally.\n shiftList(-totalShifts / len, 0, len);\n } // TODO bleedMargin?\n\n\n var first = list[0];\n var last = list[len - 1];\n var minGap;\n var maxGap;\n updateMinMaxGap(); // If ends exceed two bounds, squeeze at most 80%, then take the gap of two bounds.\n\n minGap < 0 && squeezeGaps(-minGap, 0.8);\n maxGap < 0 && squeezeGaps(maxGap, 0.8);\n updateMinMaxGap();\n takeBoundsGap(minGap, maxGap, 1);\n takeBoundsGap(maxGap, minGap, -1); // Handle bailout when there is not enough space.\n\n updateMinMaxGap();\n\n if (minGap < 0) {\n squeezeWhenBailout(-minGap);\n }\n\n if (maxGap < 0) {\n squeezeWhenBailout(maxGap);\n }\n\n function updateMinMaxGap() {\n minGap = first.rect[xyDim] - minBound;\n maxGap = maxBound - last.rect[xyDim] - last.rect[sizeDim];\n }\n\n function takeBoundsGap(gapThisBound, gapOtherBound, moveDir) {\n if (gapThisBound < 0) {\n // Move from other gap if can.\n var moveFromMaxGap = Math.min(gapOtherBound, -gapThisBound);\n\n if (moveFromMaxGap > 0) {\n shiftList(moveFromMaxGap * moveDir, 0, len);\n var remained = moveFromMaxGap + gapThisBound;\n\n if (remained < 0) {\n squeezeGaps(-remained * moveDir, 1);\n }\n } else {\n squeezeGaps(-gapThisBound * moveDir, 1);\n }\n }\n }\n\n function shiftList(delta, start, end) {\n if (delta !== 0) {\n adjusted = true;\n }\n\n for (var i = start; i < end; i++) {\n var item = list[i];\n var rect = item.rect;\n rect[xyDim] += delta;\n item.label[xyDim] += delta;\n }\n } // Squeeze gaps if the labels exceed margin.\n\n\n function squeezeGaps(delta, maxSqeezePercent) {\n var gaps = [];\n var totalGaps = 0;\n\n for (var i = 1; i < len; i++) {\n var prevItemRect = list[i - 1].rect;\n var gap = Math.max(list[i].rect[xyDim] - prevItemRect[xyDim] - prevItemRect[sizeDim], 0);\n gaps.push(gap);\n totalGaps += gap;\n }\n\n if (!totalGaps) {\n return;\n }\n\n var squeezePercent = Math.min(Math.abs(delta) / totalGaps, maxSqeezePercent);\n\n if (delta > 0) {\n for (var i = 0; i < len - 1; i++) {\n // Distribute the shift delta to all gaps.\n var movement = gaps[i] * squeezePercent; // Forward\n\n shiftList(movement, 0, i + 1);\n }\n } else {\n // Backward\n for (var i = len - 1; i > 0; i--) {\n // Distribute the shift delta to all gaps.\n var movement = gaps[i - 1] * squeezePercent;\n shiftList(-movement, i, len);\n }\n }\n }\n /**\n * Squeeze to allow overlap if there is no more space available.\n * Let other overlapping strategy like hideOverlap do the job instead of keep exceeding the bounds.\n */\n\n\n function squeezeWhenBailout(delta) {\n var dir = delta < 0 ? -1 : 1;\n delta = Math.abs(delta);\n var moveForEachLabel = Math.ceil(delta / (len - 1));\n\n for (var i = 0; i < len - 1; i++) {\n if (dir > 0) {\n // Forward\n shiftList(moveForEachLabel, 0, i + 1);\n } else {\n // Backward\n shiftList(-moveForEachLabel, len - i - 1, len);\n }\n\n delta -= moveForEachLabel;\n\n if (delta <= 0) {\n return;\n }\n }\n }\n\n return adjusted;\n}\n/**\n * Adjust labels on x direction to avoid overlap.\n */\n\n\nexport function shiftLayoutOnX(list, leftBound, rightBound, // If average the shifts on all labels and add them to 0\n// TODO: Not sure if should enable it.\n// Pros: The angle of lines will distribute more equally\n// Cons: In some layout. It may not what user wanted. like in pie. the label of last sector is usually changed unexpectedly.\nbalanceShift) {\n return shiftLayout(list, 'x', 'width', leftBound, rightBound, balanceShift);\n}\n/**\n * Adjust labels on y direction to avoid overlap.\n */\n\nexport function shiftLayoutOnY(list, topBound, bottomBound, // If average the shifts on all labels and add them to 0\nbalanceShift) {\n return shiftLayout(list, 'y', 'height', topBound, bottomBound, balanceShift);\n}\nexport function hideOverlap(labelList) {\n var displayedLabels = []; // TODO, render overflow visible first, put in the displayedLabels.\n\n labelList.sort(function (a, b) {\n return b.priority - a.priority;\n });\n var globalRect = new BoundingRect(0, 0, 0, 0);\n\n function hideEl(el) {\n if (!el.ignore) {\n // Show on emphasis.\n var emphasisState = el.ensureState('emphasis');\n\n if (emphasisState.ignore == null) {\n emphasisState.ignore = false;\n }\n }\n\n el.ignore = true;\n }\n\n for (var i = 0; i < labelList.length; i++) {\n var labelItem = labelList[i];\n var isAxisAligned = labelItem.axisAligned;\n var localRect = labelItem.localRect;\n var transform = labelItem.transform;\n var label = labelItem.label;\n var labelLine = labelItem.labelLine;\n globalRect.copy(labelItem.rect); // Add a threshold because layout may be aligned precisely.\n\n globalRect.width -= 0.1;\n globalRect.height -= 0.1;\n globalRect.x += 0.05;\n globalRect.y += 0.05;\n var obb = labelItem.obb;\n var overlapped = false;\n\n for (var j = 0; j < displayedLabels.length; j++) {\n var existsTextCfg = displayedLabels[j]; // Fast rejection.\n\n if (!globalRect.intersect(existsTextCfg.rect)) {\n continue;\n }\n\n if (isAxisAligned && existsTextCfg.axisAligned) {\n // Is overlapped\n overlapped = true;\n break;\n }\n\n if (!existsTextCfg.obb) {\n // If self is not axis aligned. But other is.\n existsTextCfg.obb = new OrientedBoundingRect(existsTextCfg.localRect, existsTextCfg.transform);\n }\n\n if (!obb) {\n // If self is axis aligned. But other is not.\n obb = new OrientedBoundingRect(localRect, transform);\n }\n\n if (obb.intersect(existsTextCfg.obb)) {\n overlapped = true;\n break;\n }\n } // TODO Callback to determine if this overlap should be handled?\n\n\n if (overlapped) {\n hideEl(label);\n labelLine && hideEl(labelLine);\n } else {\n label.attr('ignore', labelItem.defaultAttr.ignore);\n labelLine && labelLine.attr('ignore', labelItem.defaultAttr.labelGuideIgnore);\n displayedLabels.push(labelItem);\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 Model from './Model';\nimport * as componentUtil from '../util/component';\nimport { enableClassManagement, parseClassType, isExtendedClass, mountExtend } from '../util/clazz';\nimport { makeInner, queryReferringComponents } from '../util/model';\nimport * as layout from '../util/layout';\nvar inner = makeInner();\n\nvar ComponentModel =\n/** @class */\nfunction (_super) {\n __extends(ComponentModel, _super);\n\n function ComponentModel(option, parentModel, ecModel) {\n var _this = _super.call(this, option, parentModel, ecModel) || this;\n\n _this.uid = componentUtil.getUID('ec_cpt_model');\n return _this;\n }\n\n ComponentModel.prototype.init = function (option, parentModel, ecModel) {\n this.mergeDefaultAndTheme(option, ecModel);\n };\n\n ComponentModel.prototype.mergeDefaultAndTheme = function (option, ecModel) {\n var layoutMode = layout.fetchLayoutMode(this);\n var inputPositionParams = layoutMode ? layout.getLayoutParams(option) : {};\n var themeModel = ecModel.getTheme();\n zrUtil.merge(option, themeModel.get(this.mainType));\n zrUtil.merge(option, this.getDefaultOption());\n\n if (layoutMode) {\n layout.mergeLayoutParam(option, inputPositionParams, layoutMode);\n }\n };\n\n ComponentModel.prototype.mergeOption = function (option, ecModel) {\n zrUtil.merge(this.option, option, true);\n var layoutMode = layout.fetchLayoutMode(this);\n\n if (layoutMode) {\n layout.mergeLayoutParam(this.option, option, layoutMode);\n }\n };\n /**\n * Called immediately after `init` or `mergeOption` of this instance called.\n */\n\n\n ComponentModel.prototype.optionUpdated = function (newCptOption, isInit) {};\n /**\n * [How to declare defaultOption]:\n *\n * (A) If using class declaration in typescript (since echarts 5):\n * ```ts\n * import {ComponentOption} from '../model/option';\n * export interface XxxOption extends ComponentOption {\n * aaa: number\n * }\n * export class XxxModel extends Component {\n * static type = 'xxx';\n * static defaultOption: XxxOption = {\n * aaa: 123\n * }\n * }\n * Component.registerClass(XxxModel);\n * ```\n * ```ts\n * import {inheritDefaultOption} from '../util/component';\n * import {XxxModel, XxxOption} from './XxxModel';\n * export interface XxxSubOption extends XxxOption {\n * bbb: number\n * }\n * class XxxSubModel extends XxxModel {\n * static defaultOption: XxxSubOption = inheritDefaultOption(XxxModel.defaultOption, {\n * bbb: 456\n * })\n * fn() {\n * let opt = this.getDefaultOption();\n * // opt is {aaa: 123, bbb: 456}\n * }\n * }\n * ```\n *\n * (B) If using class extend (previous approach in echarts 3 & 4):\n * ```js\n * let XxxComponent = Component.extend({\n * defaultOption: {\n * xx: 123\n * }\n * })\n * ```\n * ```js\n * let XxxSubComponent = XxxComponent.extend({\n * defaultOption: {\n * yy: 456\n * },\n * fn: function () {\n * let opt = this.getDefaultOption();\n * // opt is {xx: 123, yy: 456}\n * }\n * })\n * ```\n */\n\n\n ComponentModel.prototype.getDefaultOption = function () {\n var ctor = this.constructor; // If using class declaration, it is different to travel super class\n // in legacy env and auto merge defaultOption. So if using class\n // declaration, defaultOption should be merged manually.\n\n if (!isExtendedClass(ctor)) {\n // When using ts class, defaultOption must be declared as static.\n return ctor.defaultOption;\n } // FIXME: remove this approach?\n\n\n var fields = inner(this);\n\n if (!fields.defaultOption) {\n var optList = [];\n var clz = ctor;\n\n while (clz) {\n var opt = clz.prototype.defaultOption;\n opt && optList.push(opt);\n clz = clz.superClass;\n }\n\n var defaultOption = {};\n\n for (var i = optList.length - 1; i >= 0; i--) {\n defaultOption = zrUtil.merge(defaultOption, optList[i], true);\n }\n\n fields.defaultOption = defaultOption;\n }\n\n return fields.defaultOption;\n };\n /**\n * Notice: always force to input param `useDefault` in case that forget to consider it.\n * The same behavior as `modelUtil.parseFinder`.\n *\n * @param useDefault In many cases like series refer axis and axis refer grid,\n * If axis index / axis id not specified, use the first target as default.\n * In other cases like dataZoom refer axis, if not specified, measn no refer.\n */\n\n\n ComponentModel.prototype.getReferringComponents = function (mainType, opt) {\n var indexKey = mainType + 'Index';\n var idKey = mainType + 'Id';\n return queryReferringComponents(this.ecModel, mainType, {\n index: this.get(indexKey, true),\n id: this.get(idKey, true)\n }, opt);\n };\n\n ComponentModel.prototype.getBoxLayoutParams = function () {\n // Consider itself having box layout configs.\n var boxLayoutModel = this;\n return {\n left: boxLayoutModel.get('left'),\n top: boxLayoutModel.get('top'),\n right: boxLayoutModel.get('right'),\n bottom: boxLayoutModel.get('bottom'),\n width: boxLayoutModel.get('width'),\n height: boxLayoutModel.get('height')\n };\n };\n\n ComponentModel.protoInitialize = function () {\n var proto = ComponentModel.prototype;\n proto.type = 'component';\n proto.id = '';\n proto.name = '';\n proto.mainType = '';\n proto.subType = '';\n proto.componentIndex = 0;\n }();\n\n return ComponentModel;\n}(Model);\n\nmountExtend(ComponentModel, Model);\nenableClassManagement(ComponentModel);\ncomponentUtil.enableSubTypeDefaulter(ComponentModel);\ncomponentUtil.enableTopologicalTravel(ComponentModel, getDependencies);\n\nfunction getDependencies(componentType) {\n var deps = [];\n zrUtil.each(ComponentModel.getClassesByMainType(componentType), function (clz) {\n deps = deps.concat(clz.dependencies || clz.prototype.dependencies || []);\n }); // Ensure main type.\n\n deps = zrUtil.map(deps, function (type) {\n return parseClassType(type).main;\n }); // Hack dataset for convenience.\n\n if (componentType !== 'dataset' && zrUtil.indexOf(deps, 'dataset') <= 0) {\n deps.unshift('dataset');\n }\n\n return deps;\n}\n\nexport default ComponentModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport makeStyleMapper from './makeStyleMapper';\nexport var LINE_STYLE_KEY_MAP = [['lineWidth', 'width'], ['stroke', 'color'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor'], ['lineDash', 'type'], ['lineDashOffset', 'dashOffset'], ['lineCap', 'cap'], ['lineJoin', 'join'], ['miterLimit'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`.\n// So do not transfer decal directly.\n];\nvar getLineStyle = makeStyleMapper(LINE_STYLE_KEY_MAP);\n\nvar LineStyleMixin =\n/** @class */\nfunction () {\n function LineStyleMixin() {}\n\n LineStyleMixin.prototype.getLineStyle = function (excludes) {\n return getLineStyle(this, excludes);\n };\n\n return LineStyleMixin;\n}();\n\n;\nexport { LineStyleMixin };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport makeStyleMapper from './makeStyleMapper';\nexport var ITEM_STYLE_KEY_MAP = [['fill', 'color'], ['stroke', 'borderColor'], ['lineWidth', 'borderWidth'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor'], ['lineDash', 'borderType'], ['lineDashOffset', 'borderDashOffset'], ['lineCap', 'borderCap'], ['lineJoin', 'borderJoin'], ['miterLimit', 'borderMiterLimit'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`.\n// So do not transfer decal directly.\n];\nvar getItemStyle = makeStyleMapper(ITEM_STYLE_KEY_MAP);\n\nvar ItemStyleMixin =\n/** @class */\nfunction () {\n function ItemStyleMixin() {}\n\n ItemStyleMixin.prototype.getItemStyle = function (excludes, includes) {\n return getItemStyle(this, excludes, includes);\n };\n\n return ItemStyleMixin;\n}();\n\nexport { ItemStyleMixin };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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, each, isArray } from 'zrender/lib/core/util';\nimport { deprecateReplaceLog, deprecateLog } from '../util/log';\nimport { queryDataIndex } from '../util/model'; // Legacy data selection action.\n// Inlucdes: pieSelect, pieUnSelect, pieToggleSelect, mapSelect, mapUnSelect, mapToggleSelect\n\nexport function createLegacyDataSelectAction(seriesType, ecRegisterAction) {\n function getSeriesIndices(ecModel, payload) {\n var seriesIndices = [];\n ecModel.eachComponent({\n mainType: 'series',\n subType: seriesType,\n query: payload\n }, function (seriesModel) {\n seriesIndices.push(seriesModel.seriesIndex);\n });\n return seriesIndices;\n }\n\n each([[seriesType + 'ToggleSelect', 'toggleSelect'], [seriesType + 'Select', 'select'], [seriesType + 'UnSelect', 'unselect']], function (eventsMap) {\n ecRegisterAction(eventsMap[0], function (payload, ecModel, api) {\n payload = extend({}, payload);\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog(payload.type, eventsMap[1]);\n }\n\n api.dispatchAction(extend(payload, {\n type: eventsMap[1],\n seriesIndex: getSeriesIndices(ecModel, payload)\n }));\n });\n });\n}\n\nfunction handleSeriesLegacySelectEvents(type, eventPostfix, ecIns, ecModel, payload) {\n var legacyEventName = type + eventPostfix;\n\n if (!ecIns.isSilent(legacyEventName)) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog(\"event \" + legacyEventName + \" is deprecated.\");\n }\n\n ecModel.eachComponent({\n mainType: 'series',\n subType: 'pie'\n }, function (seriesModel) {\n var seriesIndex = seriesModel.seriesIndex;\n var selected = payload.selected;\n\n for (var i = 0; i < selected.length; i++) {\n if (selected[i].seriesIndex === seriesIndex) {\n var data = seriesModel.getData();\n var dataIndex = queryDataIndex(data, payload.fromActionPayload);\n ecIns.trigger(legacyEventName, {\n type: legacyEventName,\n seriesId: seriesModel.id,\n name: isArray(dataIndex) ? data.getName(dataIndex[0]) : data.getName(dataIndex),\n selected: extend({}, seriesModel.option.selectedMap)\n });\n }\n }\n });\n }\n}\n\nexport function handleLegacySelectEvents(messageCenter, ecIns, api) {\n messageCenter.on('selectchanged', function (params) {\n var ecModel = api.getModel();\n\n if (params.isFromClick) {\n handleSeriesLegacySelectEvents('map', 'selectchanged', ecIns, ecModel, params);\n handleSeriesLegacySelectEvents('pie', 'selectchanged', ecIns, ecModel, params);\n } else if (params.fromAction === 'select') {\n handleSeriesLegacySelectEvents('map', 'selected', ecIns, ecModel, params);\n handleSeriesLegacySelectEvents('pie', 'selected', ecIns, ecModel, params);\n } else if (params.fromAction === 'unselect') {\n handleSeriesLegacySelectEvents('map', 'unselected', ecIns, ecModel, params);\n handleSeriesLegacySelectEvents('pie', 'unselected', ecIns, ecModel, params);\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 '../graphic';\n/**\n * Sausage: similar to sector, but have half circle on both sides\n */\n\nvar SausageShape =\n/** @class */\nfunction () {\n function SausageShape() {\n this.cx = 0;\n this.cy = 0;\n this.r0 = 0;\n this.r = 0;\n this.startAngle = 0;\n this.endAngle = Math.PI * 2;\n this.clockwise = true;\n }\n\n return SausageShape;\n}();\n\nvar SausagePath =\n/** @class */\nfunction (_super) {\n __extends(SausagePath, _super);\n\n function SausagePath(opts) {\n var _this = _super.call(this, opts) || this;\n\n _this.type = 'sausage';\n return _this;\n }\n\n SausagePath.prototype.getDefaultShape = function () {\n return new SausageShape();\n };\n\n SausagePath.prototype.buildPath = function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var r0 = Math.max(shape.r0 || 0, 0);\n var r = Math.max(shape.r, 0);\n var dr = (r - r0) * 0.5;\n var rCenter = r0 + dr;\n var startAngle = shape.startAngle;\n var endAngle = shape.endAngle;\n var clockwise = shape.clockwise;\n var unitStartX = Math.cos(startAngle);\n var unitStartY = Math.sin(startAngle);\n var unitEndX = Math.cos(endAngle);\n var unitEndY = Math.sin(endAngle);\n var lessThanCircle = clockwise ? endAngle - startAngle < Math.PI * 2 : startAngle - endAngle < Math.PI * 2;\n\n if (lessThanCircle) {\n ctx.moveTo(unitStartX * r0 + x, unitStartY * r0 + y);\n ctx.arc(unitStartX * rCenter + x, unitStartY * rCenter + y, dr, -Math.PI + startAngle, startAngle, !clockwise);\n }\n\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n ctx.moveTo(unitEndX * r + x, unitEndY * r + y);\n ctx.arc(unitEndX * rCenter + x, unitEndY * rCenter + y, dr, endAngle - Math.PI * 2, endAngle - Math.PI, !clockwise);\n\n if (r0 !== 0) {\n ctx.arc(x, y, r0, endAngle, startAngle, clockwise);\n ctx.moveTo(unitStartX * r0 + x, unitEndY * r0 + y);\n }\n\n ctx.closePath();\n };\n\n return SausagePath;\n}(Path);\n\nexport default SausagePath;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 './number';\nimport { getDefaultLocaleModel, getLocaleModel, SYSTEM_LANG } from '../core/locale';\nimport Model from '../model/Model';\nexport var ONE_SECOND = 1000;\nexport var ONE_MINUTE = ONE_SECOND * 60;\nexport var ONE_HOUR = ONE_MINUTE * 60;\nexport var ONE_DAY = ONE_HOUR * 24;\nexport var ONE_YEAR = ONE_DAY * 365;\nexport var defaultLeveledFormatter = {\n year: '{yyyy}',\n month: '{MMM}',\n day: '{d}',\n hour: '{HH}:{mm}',\n minute: '{HH}:{mm}',\n second: '{HH}:{mm}:{ss}',\n millisecond: '{HH}:{mm}:{ss} {SSS}',\n none: '{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}'\n};\nvar fullDayFormatter = '{yyyy}-{MM}-{dd}';\nexport var fullLeveledFormatter = {\n year: '{yyyy}',\n month: '{yyyy}-{MM}',\n day: fullDayFormatter,\n hour: fullDayFormatter + ' ' + defaultLeveledFormatter.hour,\n minute: fullDayFormatter + ' ' + defaultLeveledFormatter.minute,\n second: fullDayFormatter + ' ' + defaultLeveledFormatter.second,\n millisecond: defaultLeveledFormatter.none\n};\nexport var primaryTimeUnits = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'];\nexport var timeUnits = ['year', 'half-year', 'quarter', 'month', 'week', 'half-week', 'day', 'half-day', 'quarter-day', 'hour', 'minute', 'second', 'millisecond'];\nexport function pad(str, len) {\n str += '';\n return '0000'.substr(0, len - str.length) + str;\n}\nexport function getPrimaryTimeUnit(timeUnit) {\n switch (timeUnit) {\n case 'half-year':\n case 'quarter':\n return 'month';\n\n case 'week':\n case 'half-week':\n return 'day';\n\n case 'half-day':\n case 'quarter-day':\n return 'hour';\n\n default:\n // year, minutes, second, milliseconds\n return timeUnit;\n }\n}\nexport function isPrimaryTimeUnit(timeUnit) {\n return timeUnit === getPrimaryTimeUnit(timeUnit);\n}\nexport function getDefaultFormatPrecisionOfInterval(timeUnit) {\n switch (timeUnit) {\n case 'year':\n case 'month':\n return 'day';\n\n case 'millisecond':\n return 'millisecond';\n\n default:\n // Also for day, hour, minute, second\n return 'second';\n }\n}\nexport function format( // Note: The result based on `isUTC` are totally different, which can not be just simply\n// substituted by the result without `isUTC`. So we make the param `isUTC` mandatory.\ntime, template, isUTC, lang) {\n var date = numberUtil.parseDate(time);\n var y = date[fullYearGetterName(isUTC)]();\n var M = date[monthGetterName(isUTC)]() + 1;\n var q = Math.floor((M - 1) / 4) + 1;\n var d = date[dateGetterName(isUTC)]();\n var e = date['get' + (isUTC ? 'UTC' : '') + 'Day']();\n var H = date[hoursGetterName(isUTC)]();\n var h = (H - 1) % 12 + 1;\n var m = date[minutesGetterName(isUTC)]();\n var s = date[secondsGetterName(isUTC)]();\n var S = date[millisecondsGetterName(isUTC)]();\n var localeModel = lang instanceof Model ? lang : getLocaleModel(lang || SYSTEM_LANG) || getDefaultLocaleModel();\n var timeModel = localeModel.getModel('time');\n var month = timeModel.get('month');\n var monthAbbr = timeModel.get('monthAbbr');\n var dayOfWeek = timeModel.get('dayOfWeek');\n var dayOfWeekAbbr = timeModel.get('dayOfWeekAbbr');\n return (template || '').replace(/{yyyy}/g, y + '').replace(/{yy}/g, y % 100 + '').replace(/{Q}/g, q + '').replace(/{MMMM}/g, month[M - 1]).replace(/{MMM}/g, monthAbbr[M - 1]).replace(/{MM}/g, pad(M, 2)).replace(/{M}/g, M + '').replace(/{dd}/g, pad(d, 2)).replace(/{d}/g, d + '').replace(/{eeee}/g, dayOfWeek[e]).replace(/{ee}/g, dayOfWeekAbbr[e]).replace(/{e}/g, e + '').replace(/{HH}/g, pad(H, 2)).replace(/{H}/g, H + '').replace(/{hh}/g, pad(h + '', 2)).replace(/{h}/g, h + '').replace(/{mm}/g, pad(m, 2)).replace(/{m}/g, m + '').replace(/{ss}/g, pad(s, 2)).replace(/{s}/g, s + '').replace(/{SSS}/g, pad(S, 3)).replace(/{S}/g, S + '');\n}\nexport function leveledFormat(tick, idx, formatter, lang, isUTC) {\n var template = null;\n\n if (typeof formatter === 'string') {\n // Single formatter for all units at all levels\n template = formatter;\n } else if (typeof formatter === 'function') {\n // Callback formatter\n template = formatter(tick.value, idx, {\n level: tick.level\n });\n } else {\n var defaults = zrUtil.extend({}, defaultLeveledFormatter);\n\n if (tick.level > 0) {\n for (var i = 0; i < primaryTimeUnits.length; ++i) {\n defaults[primaryTimeUnits[i]] = \"{primary|\" + defaults[primaryTimeUnits[i]] + \"}\";\n }\n }\n\n var mergedFormatter = formatter ? formatter.inherit === false ? formatter // Use formatter with bigger units\n : zrUtil.defaults(formatter, defaults) : defaults;\n var unit = getUnitFromValue(tick.value, isUTC);\n\n if (mergedFormatter[unit]) {\n template = mergedFormatter[unit];\n } else if (mergedFormatter.inherit) {\n // Unit formatter is not defined and should inherit from bigger units\n var targetId = timeUnits.indexOf(unit);\n\n for (var i = targetId - 1; i >= 0; --i) {\n if (mergedFormatter[unit]) {\n template = mergedFormatter[unit];\n break;\n }\n }\n\n template = template || defaults.none;\n }\n\n if (zrUtil.isArray(template)) {\n var levelId = tick.level == null ? 0 : tick.level >= 0 ? tick.level : template.length + tick.level;\n levelId = Math.min(levelId, template.length - 1);\n template = template[levelId];\n }\n }\n\n return format(new Date(tick.value), template, isUTC, lang);\n}\nexport function getUnitFromValue(value, isUTC) {\n var date = numberUtil.parseDate(value);\n var M = date[monthGetterName(isUTC)]() + 1;\n var d = date[dateGetterName(isUTC)]();\n var h = date[hoursGetterName(isUTC)]();\n var m = date[minutesGetterName(isUTC)]();\n var s = date[secondsGetterName(isUTC)]();\n var S = date[millisecondsGetterName(isUTC)]();\n var isSecond = S === 0;\n var isMinute = isSecond && s === 0;\n var isHour = isMinute && m === 0;\n var isDay = isHour && h === 0;\n var isMonth = isDay && d === 1;\n var isYear = isMonth && M === 1;\n\n if (isYear) {\n return 'year';\n } else if (isMonth) {\n return 'month';\n } else if (isDay) {\n return 'day';\n } else if (isHour) {\n return 'hour';\n } else if (isMinute) {\n return 'minute';\n } else if (isSecond) {\n return 'second';\n } else {\n return 'millisecond';\n }\n}\nexport function getUnitValue(value, unit, isUTC) {\n var date = typeof value === 'number' ? numberUtil.parseDate(value) : value;\n unit = unit || getUnitFromValue(value, isUTC);\n\n switch (unit) {\n case 'year':\n return date[fullYearGetterName(isUTC)]();\n\n case 'half-year':\n return date[monthGetterName(isUTC)]() >= 6 ? 1 : 0;\n\n case 'quarter':\n return Math.floor((date[monthGetterName(isUTC)]() + 1) / 4);\n\n case 'month':\n return date[monthGetterName(isUTC)]();\n\n case 'day':\n return date[dateGetterName(isUTC)]();\n\n case 'half-day':\n return date[hoursGetterName(isUTC)]() / 24;\n\n case 'hour':\n return date[hoursGetterName(isUTC)]();\n\n case 'minute':\n return date[minutesGetterName(isUTC)]();\n\n case 'second':\n return date[secondsGetterName(isUTC)]();\n\n case 'millisecond':\n return date[millisecondsGetterName(isUTC)]();\n }\n}\nexport function fullYearGetterName(isUTC) {\n return isUTC ? 'getUTCFullYear' : 'getFullYear';\n}\nexport function monthGetterName(isUTC) {\n return isUTC ? 'getUTCMonth' : 'getMonth';\n}\nexport function dateGetterName(isUTC) {\n return isUTC ? 'getUTCDate' : 'getDate';\n}\nexport function hoursGetterName(isUTC) {\n return isUTC ? 'getUTCHours' : 'getHours';\n}\nexport function minutesGetterName(isUTC) {\n return isUTC ? 'getUTCMinutes' : 'getMinutes';\n}\nexport function secondsGetterName(isUTC) {\n return isUTC ? 'getUTCSeconds' : 'getSeconds';\n}\nexport function millisecondsGetterName(isUTC) {\n return isUTC ? 'getUTCMilliseconds' : 'getMilliseconds';\n}\nexport function fullYearSetterName(isUTC) {\n return isUTC ? 'setUTCFullYear' : 'setFullYear';\n}\nexport function monthSetterName(isUTC) {\n return isUTC ? 'setUTCMonth' : 'setMonth';\n}\nexport function dateSetterName(isUTC) {\n return isUTC ? 'setUTCDate' : 'setDate';\n}\nexport function hoursSetterName(isUTC) {\n return isUTC ? 'setUTCHours' : 'setHours';\n}\nexport function minutesSetterName(isUTC) {\n return isUTC ? 'setUTCMinutes' : 'setMinutes';\n}\nexport function secondsSetterName(isUTC) {\n return isUTC ? 'setUTCSeconds' : 'setSeconds';\n}\nexport function millisecondsSetterName(isUTC) {\n return isUTC ? 'setUTCMilliseconds' : 'setMilliseconds';\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { map, isString, isFunction, eqNaN, isRegExp } from 'zrender/lib/core/util';\nvar ECHARTS_PREFIX = '[ECharts] ';\nvar storedLogs = {};\nvar hasConsole = typeof console !== 'undefined' // eslint-disable-next-line\n&& console.warn && console.log;\nexport function log(str) {\n if (hasConsole) {\n // eslint-disable-next-line\n console.log(ECHARTS_PREFIX + str);\n }\n}\nexport function warn(str) {\n if (hasConsole) {\n console.warn(ECHARTS_PREFIX + str);\n }\n}\nexport function error(str) {\n if (hasConsole) {\n console.error(ECHARTS_PREFIX + str);\n }\n}\nexport function deprecateLog(str) {\n if (process.env.NODE_ENV !== 'production') {\n if (storedLogs[str]) {\n // Not display duplicate message.\n return;\n }\n\n if (hasConsole) {\n storedLogs[str] = true;\n console.warn(ECHARTS_PREFIX + 'DEPRECATED: ' + str);\n }\n }\n}\nexport function deprecateReplaceLog(oldOpt, newOpt, scope) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog((scope ? \"[\" + scope + \"]\" : '') + (oldOpt + \" is deprecated, use \" + newOpt + \" instead.\"));\n }\n}\nexport function consoleLog() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n if (process.env.NODE_ENV !== 'production') {\n /* eslint-disable no-console */\n if (typeof console !== 'undefined' && console.log) {\n console.log.apply(console, args);\n }\n /* eslint-enable no-console */\n\n }\n}\n/**\n * If in __DEV__ environment, get console printable message for users hint.\n * Parameters are separated by ' '.\n * @usuage\n * makePrintable('This is an error on', someVar, someObj);\n *\n * @param hintInfo anything about the current execution context to hint users.\n * @throws Error\n */\n\nexport function makePrintable() {\n var hintInfo = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n hintInfo[_i] = arguments[_i];\n }\n\n var msg = '';\n\n if (process.env.NODE_ENV !== 'production') {\n // Fuzzy stringify for print.\n // This code only exist in dev environment.\n var makePrintableStringIfPossible_1 = function (val) {\n return val === void 0 ? 'undefined' : val === Infinity ? 'Infinity' : val === -Infinity ? '-Infinity' : eqNaN(val) ? 'NaN' : val instanceof Date ? 'Date(' + val.toISOString() + ')' : isFunction(val) ? 'function () { ... }' : isRegExp(val) ? val + '' : null;\n };\n\n msg = map(hintInfo, function (arg) {\n if (isString(arg)) {\n // Print without quotation mark for some statement.\n return arg;\n } else {\n var printableStr = makePrintableStringIfPossible_1(arg);\n\n if (printableStr != null) {\n return printableStr;\n } else if (typeof JSON !== 'undefined' && JSON.stringify) {\n try {\n return JSON.stringify(arg, function (n, val) {\n var printableStr = makePrintableStringIfPossible_1(val);\n return printableStr == null ? val : printableStr;\n }); // In most cases the info object is small, so do not line break.\n } catch (err) {\n return '?';\n }\n } else {\n return '?';\n }\n }\n }).join(' ');\n }\n\n return msg;\n}\n/**\n * @throws Error\n */\n\nexport function throwError(msg) {\n throw new Error(msg);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either 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 * Linear continuous scale\n * http://en.wikipedia.org/wiki/Level_of_measurement\n */\n// FIXME only one data\n\nimport Scale from './Scale';\nimport OrdinalMeta from '../data/OrdinalMeta';\nimport * as scaleHelper from './helper';\nimport { isArray, map, isObject } from 'zrender/lib/core/util';\n\nvar OrdinalScale =\n/** @class */\nfunction (_super) {\n __extends(OrdinalScale, _super);\n\n function OrdinalScale(setting) {\n var _this = _super.call(this, setting) || this;\n\n _this.type = 'ordinal';\n\n var ordinalMeta = _this.getSetting('ordinalMeta'); // Caution: Should not use instanceof, consider ec-extensions using\n // import approach to get OrdinalMeta class.\n\n\n if (!ordinalMeta) {\n ordinalMeta = new OrdinalMeta({});\n }\n\n if (isArray(ordinalMeta)) {\n ordinalMeta = new OrdinalMeta({\n categories: map(ordinalMeta, function (item) {\n return isObject(item) ? item.value : item;\n })\n });\n }\n\n _this._ordinalMeta = ordinalMeta;\n _this._extent = _this.getSetting('extent') || [0, ordinalMeta.categories.length - 1];\n return _this;\n }\n\n OrdinalScale.prototype.parse = function (val) {\n return typeof val === 'string' ? this._ordinalMeta.getOrdinal(val) // val might be float.\n : Math.round(val);\n };\n\n OrdinalScale.prototype.contain = function (rank) {\n rank = this.parse(rank);\n return scaleHelper.contain(rank, this._extent) && this._ordinalMeta.categories[rank] != null;\n };\n /**\n * Normalize given rank or name to linear [0, 1]\n * @param val raw ordinal number.\n * @return normalized value in [0, 1].\n */\n\n\n OrdinalScale.prototype.normalize = function (val) {\n val = this._getTickNumber(this.parse(val));\n return scaleHelper.normalize(val, this._extent);\n };\n /**\n * @param val normalized value in [0, 1].\n * @return raw ordinal number.\n */\n\n\n OrdinalScale.prototype.scale = function (val) {\n val = Math.round(scaleHelper.scale(val, this._extent));\n return this.getRawOrdinalNumber(val);\n };\n\n OrdinalScale.prototype.getTicks = function () {\n var ticks = [];\n var extent = this._extent;\n var rank = extent[0];\n\n while (rank <= extent[1]) {\n ticks.push({\n value: rank\n });\n rank++;\n }\n\n return ticks;\n };\n\n OrdinalScale.prototype.getMinorTicks = function (splitNumber) {\n // Not support.\n return;\n };\n /**\n * @see `Ordinal['_ordinalNumbersByTick']`\n */\n\n\n OrdinalScale.prototype.setSortInfo = function (info) {\n if (info == null) {\n this._ordinalNumbersByTick = this._ticksByOrdinalNumber = null;\n return;\n }\n\n var infoOrdinalNumbers = info.ordinalNumbers;\n var ordinalsByTick = this._ordinalNumbersByTick = [];\n var ticksByOrdinal = this._ticksByOrdinalNumber = []; // Unnecessary support negative tick in `realtimeSort`.\n\n var tickNum = 0;\n var allCategoryLen = this._ordinalMeta.categories.length;\n\n for (var len = Math.min(allCategoryLen, infoOrdinalNumbers.length); tickNum < len; ++tickNum) {\n var ordinalNumber = infoOrdinalNumbers[tickNum];\n ordinalsByTick[tickNum] = ordinalNumber;\n ticksByOrdinal[ordinalNumber] = tickNum;\n } // Handle that `series.data` only covers part of the `axis.category.data`.\n\n\n var unusedOrdinal = 0;\n\n for (; tickNum < allCategoryLen; ++tickNum) {\n while (ticksByOrdinal[unusedOrdinal] != null) {\n unusedOrdinal++;\n }\n\n ;\n ordinalsByTick.push(unusedOrdinal);\n ticksByOrdinal[unusedOrdinal] = tickNum;\n }\n };\n\n OrdinalScale.prototype._getTickNumber = function (ordinal) {\n var ticksByOrdinalNumber = this._ticksByOrdinalNumber; // also support ordinal out of range of `ordinalMeta.categories.length`,\n // where ordinal numbers are used as tick value directly.\n\n return ticksByOrdinalNumber && ordinal >= 0 && ordinal < ticksByOrdinalNumber.length ? ticksByOrdinalNumber[ordinal] : ordinal;\n };\n /**\n * @usage\n * ```js\n * const ordinalNumber = ordinalScale.getRawOrdinalNumber(tickVal);\n *\n * // case0\n * const rawOrdinalValue = axisModel.getCategories()[ordinalNumber];\n * // case1\n * const rawOrdinalValue = this._ordinalMeta.categories[ordinalNumber];\n * // case2\n * const coord = axis.dataToCoord(ordinalNumber);\n * ```\n *\n * @param {OrdinalNumber} tickNumber index of display\n */\n\n\n OrdinalScale.prototype.getRawOrdinalNumber = function (tickNumber) {\n var ordinalNumbersByTick = this._ordinalNumbersByTick; // tickNumber may be out of range, e.g., when axis max is larger than `ordinalMeta.categories.length`.,\n // where ordinal numbers are used as tick value directly.\n\n return ordinalNumbersByTick && tickNumber >= 0 && tickNumber < ordinalNumbersByTick.length ? ordinalNumbersByTick[tickNumber] : tickNumber;\n };\n /**\n * Get item on tick\n */\n\n\n OrdinalScale.prototype.getLabel = function (tick) {\n if (!this.isBlank()) {\n var ordinalNumber = this.getRawOrdinalNumber(tick.value);\n var cateogry = this._ordinalMeta.categories[ordinalNumber]; // Note that if no data, ordinalMeta.categories is an empty array.\n // Return empty if it's not exist.\n\n return cateogry == null ? '' : cateogry + '';\n }\n };\n\n OrdinalScale.prototype.count = function () {\n return this._extent[1] - this._extent[0] + 1;\n };\n\n OrdinalScale.prototype.unionExtentFromData = function (data, dim) {\n this.unionExtent(data.getApproximateExtent(dim));\n };\n /**\n * @override\n * If value is in extent range\n */\n\n\n OrdinalScale.prototype.isInExtentRange = function (value) {\n value = this._getTickNumber(value);\n return this._extent[0] <= value && this._extent[1] >= value;\n };\n\n OrdinalScale.prototype.getOrdinalMeta = function () {\n return this._ordinalMeta;\n };\n\n OrdinalScale.prototype.niceTicks = function () {};\n\n OrdinalScale.prototype.niceExtent = function () {};\n\n OrdinalScale.type = 'ordinal';\n return OrdinalScale;\n}(Scale);\n\nScale.registerClass(OrdinalScale);\nexport default OrdinalScale;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 { parseDate, isNumeric, numericToNumber } from './number';\nimport { format as timeFormat, pad } from './time';\nimport { deprecateReplaceLog } from './log';\n/**\n * Add a comma each three digit.\n */\n\nexport function addCommas(x) {\n if (!isNumeric(x)) {\n return zrUtil.isString(x) ? x : '-';\n }\n\n var parts = (x + '').split('.');\n return parts[0].replace(/(\\d{1,3})(?=(?:\\d{3})+(?!\\d))/g, '$1,') + (parts.length > 1 ? '.' + parts[1] : '');\n}\nexport function toCamelCase(str, upperCaseFirst) {\n str = (str || '').toLowerCase().replace(/-(.)/g, function (match, group1) {\n return group1.toUpperCase();\n });\n\n if (upperCaseFirst && str) {\n str = str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n return str;\n}\nexport var normalizeCssArray = zrUtil.normalizeCssArray;\nvar replaceReg = /([&<>\"'])/g;\nvar replaceMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': '''\n};\nexport function encodeHTML(source) {\n return source == null ? '' : (source + '').replace(replaceReg, function (str, c) {\n return replaceMap[c];\n });\n}\n/**\n * Make value user readable for tooltip and label.\n * \"User readable\":\n * Try to not print programmer-specific text like NaN, Infinity, null, undefined.\n * Avoid to display an empty string, which users can not recognize there is\n * a value and it might look like a bug.\n */\n\nexport function makeValueReadable(value, valueType, useUTC) {\n var USER_READABLE_DEFUALT_TIME_PATTERN = '{yyyy}-{MM}-{dd} {hh}:{mm}:{ss}';\n\n function stringToUserReadable(str) {\n return str && zrUtil.trim(str) ? str : '-';\n }\n\n function isNumberUserReadable(num) {\n return !!(num != null && !isNaN(num) && isFinite(num));\n }\n\n var isTypeTime = valueType === 'time';\n var isValueDate = value instanceof Date;\n\n if (isTypeTime || isValueDate) {\n var date = isTypeTime ? parseDate(value) : value;\n\n if (!isNaN(+date)) {\n return timeFormat(date, USER_READABLE_DEFUALT_TIME_PATTERN, useUTC);\n } else if (isValueDate) {\n return '-';\n } // In other cases, continue to try to display the value in the following code.\n\n }\n\n if (valueType === 'ordinal') {\n return zrUtil.isStringSafe(value) ? stringToUserReadable(value) : zrUtil.isNumber(value) ? isNumberUserReadable(value) ? value + '' : '-' : '-';\n } // By default.\n\n\n var numericResult = numericToNumber(value);\n return isNumberUserReadable(numericResult) ? addCommas(numericResult) : zrUtil.isStringSafe(value) ? stringToUserReadable(value) : '-';\n}\nvar TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];\n\nvar wrapVar = function (varName, seriesIdx) {\n return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}';\n};\n/**\n * Template formatter\n * @param {Array.|Object} paramsList\n */\n\n\nexport function formatTpl(tpl, paramsList, encode) {\n if (!zrUtil.isArray(paramsList)) {\n paramsList = [paramsList];\n }\n\n var seriesLen = paramsList.length;\n\n if (!seriesLen) {\n return '';\n }\n\n var $vars = paramsList[0].$vars || [];\n\n for (var i = 0; i < $vars.length; i++) {\n var alias = TPL_VAR_ALIAS[i];\n tpl = tpl.replace(wrapVar(alias), wrapVar(alias, 0));\n }\n\n for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) {\n for (var k = 0; k < $vars.length; k++) {\n var val = paramsList[seriesIdx][$vars[k]];\n tpl = tpl.replace(wrapVar(TPL_VAR_ALIAS[k], seriesIdx), encode ? encodeHTML(val) : val);\n }\n }\n\n return tpl;\n}\n/**\n * simple Template formatter\n */\n\nexport function formatTplSimple(tpl, param, encode) {\n zrUtil.each(param, function (value, key) {\n tpl = tpl.replace('{' + key + '}', encode ? encodeHTML(value) : value);\n });\n return tpl;\n}\nexport function getTooltipMarker(inOpt, extraCssText) {\n var opt = zrUtil.isString(inOpt) ? {\n color: inOpt,\n extraCssText: extraCssText\n } : inOpt || {};\n var color = opt.color;\n var type = opt.type;\n extraCssText = opt.extraCssText;\n var renderMode = opt.renderMode || 'html';\n\n if (!color) {\n return '';\n }\n\n if (renderMode === 'html') {\n return type === 'subItem' ? '' : '';\n } else {\n // Should better not to auto generate style name by auto-increment number here.\n // Because this util is usually called in tooltip formatter, which is probably\n // called repeatly when mouse move and the auto-increment number increases fast.\n // Users can make their own style name by theirselves, make it unique and readable.\n var markerId = opt.markerId || 'markerX';\n return {\n renderMode: renderMode,\n content: '{' + markerId + '|} ',\n style: type === 'subItem' ? {\n width: 4,\n height: 4,\n borderRadius: 2,\n backgroundColor: color\n } : {\n width: 10,\n height: 10,\n borderRadius: 5,\n backgroundColor: color\n }\n };\n }\n}\n/**\n * @deprecated Use `time/format` instead.\n * ISO Date format\n * @param {string} tpl\n * @param {number} value\n * @param {boolean} [isUTC=false] Default in local time.\n * see `module:echarts/scale/Time`\n * and `module:echarts/util/number#parseDate`.\n * @inner\n */\n\nexport function formatTime(tpl, value, isUTC) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('echarts.format.formatTime', 'echarts.time.format');\n }\n\n if (tpl === 'week' || tpl === 'month' || tpl === 'quarter' || tpl === 'half-year' || tpl === 'year') {\n tpl = 'MM-dd\\nyyyy';\n }\n\n var date = parseDate(value);\n var utc = isUTC ? 'UTC' : '';\n var y = date['get' + utc + 'FullYear']();\n var M = date['get' + utc + 'Month']() + 1;\n var d = date['get' + utc + 'Date']();\n var h = date['get' + utc + 'Hours']();\n var m = date['get' + utc + 'Minutes']();\n var s = date['get' + utc + 'Seconds']();\n var S = date['get' + utc + 'Milliseconds']();\n tpl = tpl.replace('MM', pad(M, 2)).replace('M', M).replace('yyyy', y).replace('yy', y % 100 + '').replace('dd', pad(d, 2)).replace('d', d).replace('hh', pad(h, 2)).replace('h', h).replace('mm', pad(m, 2)).replace('m', m).replace('ss', pad(s, 2)).replace('s', s).replace('SSS', pad(S, 3));\n return tpl;\n}\n/**\n * Capital first\n * @param {string} str\n * @return {string}\n */\n\nexport function capitalFirst(str) {\n return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;\n}\n/**\n * @return Never be null/undefined.\n */\n\nexport function convertToColorString(color, defaultColor) {\n defaultColor = defaultColor || 'transparent';\n return zrUtil.isString(color) ? color : zrUtil.isObject(color) ? color.colorStops && (color.colorStops[0] || {}).color || defaultColor : defaultColor;\n}\nexport { truncateText } from 'zrender/lib/graphic/helper/parseText';\n/**\n * open new tab\n * @param link url\n * @param target blank or self\n */\n\nexport function windowOpen(link, target) {\n /* global window */\n if (target === '_blank' || target === 'blank') {\n var blank = window.open();\n blank.opener = null;\n blank.location.href = link;\n } else {\n window.open(link, target);\n }\n}\nexport { getTextRect } from '../legacy/getTextRect';","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 Group from 'zrender/lib/graphic/Group';\nimport * as componentUtil from '../util/component';\nimport * as clazzUtil from '../util/clazz';\nimport * as modelUtil from '../util/model';\nimport { enterEmphasis, leaveEmphasis, getHighlightDigit } from '../util/states';\nimport { createTask } from '../core/task';\nimport createRenderPlanner from '../chart/helper/createRenderPlanner';\nvar inner = modelUtil.makeInner();\nvar renderPlanner = createRenderPlanner();\n\nvar ChartView =\n/** @class */\nfunction () {\n function ChartView() {\n this.group = new Group();\n this.uid = componentUtil.getUID('viewChart');\n this.renderTask = createTask({\n plan: renderTaskPlan,\n reset: renderTaskReset\n });\n this.renderTask.context = {\n view: this\n };\n }\n\n ChartView.prototype.init = function (ecModel, api) {};\n\n ChartView.prototype.render = function (seriesModel, ecModel, api, payload) {};\n /**\n * Highlight series or specified data item.\n */\n\n\n ChartView.prototype.highlight = function (seriesModel, ecModel, api, payload) {\n toggleHighlight(seriesModel.getData(), payload, 'emphasis');\n };\n /**\n * Downplay series or specified data item.\n */\n\n\n ChartView.prototype.downplay = function (seriesModel, ecModel, api, payload) {\n toggleHighlight(seriesModel.getData(), payload, 'normal');\n };\n /**\n * Remove self.\n */\n\n\n ChartView.prototype.remove = function (ecModel, api) {\n this.group.removeAll();\n };\n /**\n * Dispose self.\n */\n\n\n ChartView.prototype.dispose = function (ecModel, api) {};\n\n ChartView.prototype.updateView = function (seriesModel, ecModel, api, payload) {\n this.render(seriesModel, ecModel, api, payload);\n }; // FIXME never used?\n\n\n ChartView.prototype.updateLayout = function (seriesModel, ecModel, api, payload) {\n this.render(seriesModel, ecModel, api, payload);\n }; // FIXME never used?\n\n\n ChartView.prototype.updateVisual = function (seriesModel, ecModel, api, payload) {\n this.render(seriesModel, ecModel, api, payload);\n };\n\n ChartView.markUpdateMethod = function (payload, methodName) {\n inner(payload).updateMethod = methodName;\n };\n\n ChartView.protoInitialize = function () {\n var proto = ChartView.prototype;\n proto.type = 'chart';\n }();\n\n return ChartView;\n}();\n\n;\n/**\n * Set state of single element\n */\n\nfunction elSetState(el, state, highlightDigit) {\n if (el) {\n (state === 'emphasis' ? enterEmphasis : leaveEmphasis)(el, highlightDigit);\n }\n}\n\nfunction toggleHighlight(data, payload, state) {\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n var highlightDigit = payload && payload.highlightKey != null ? getHighlightDigit(payload.highlightKey) : null;\n\n if (dataIndex != null) {\n each(modelUtil.normalizeToArray(dataIndex), function (dataIdx) {\n elSetState(data.getItemGraphicEl(dataIdx), state, highlightDigit);\n });\n } else {\n data.eachItemGraphicEl(function (el) {\n elSetState(el, state, highlightDigit);\n });\n }\n}\n\nclazzUtil.enableClassExtend(ChartView, ['dispose']);\nclazzUtil.enableClassManagement(ChartView);\n\nfunction renderTaskPlan(context) {\n return renderPlanner(context.model);\n}\n\nfunction renderTaskReset(context) {\n var seriesModel = context.model;\n var ecModel = context.ecModel;\n var api = context.api;\n var payload = context.payload; // FIXME: remove updateView updateVisual\n\n var progressiveRender = seriesModel.pipelineContext.progressiveRender;\n var view = context.view;\n var updateMethod = payload && inner(payload).updateMethod;\n var methodName = progressiveRender ? 'incrementalPrepareRender' : updateMethod && view[updateMethod] ? updateMethod // `appendData` is also supported when data amount\n // is less than progressive threshold.\n : 'render';\n\n if (methodName !== 'render') {\n view[methodName](seriesModel, ecModel, api, payload);\n }\n\n return progressMethodMap[methodName];\n}\n\nvar progressMethodMap = {\n incrementalPrepareRender: {\n progress: function (params, context) {\n context.view.incrementalRender(params, context.model, context.ecModel, context.api, context.payload);\n }\n },\n render: {\n // Put view.render in `progress` to support appendData. But in this case\n // view.render should not be called in reset, otherwise it will be called\n // twise. Use `forceFirstProgress` to make sure that view.render is called\n // in any cases.\n forceFirstProgress: true,\n progress: function (params, context) {\n context.view.render(context.model, context.ecModel, context.api, context.payload);\n }\n }\n};\nexport default ChartView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either 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 env from 'zrender/lib/core/env';\nimport * as modelUtil from '../util/model';\nimport ComponentModel from './Component';\nimport { PaletteMixin } from './mixin/palette';\nimport { DataFormatMixin } from '../model/mixin/dataFormat';\nimport { getLayoutParams, mergeLayoutParam, fetchLayoutMode } from '../util/layout';\nimport { createTask } from '../core/task';\nimport { mountExtend } from '../util/clazz';\nimport { SourceManager } from '../data/helper/sourceManager';\nimport { defaultSeriesFormatTooltip } from '../component/tooltip/seriesFormatTooltip';\nvar inner = modelUtil.makeInner();\n\nfunction getSelectionKey(data, dataIndex) {\n return data.getName(dataIndex) || data.getId(dataIndex);\n}\n\nexport var SERIES_UNIVERSAL_TRANSITION_PROP = '__universalTransitionEnabled';\n\nvar SeriesModel =\n/** @class */\nfunction (_super) {\n __extends(SeriesModel, _super);\n\n function SeriesModel() {\n // [Caution]: Becuase this class or desecendants can be used as `XXX.extend(subProto)`,\n // the class members must not be initialized in constructor or declaration place.\n // Otherwise there is bad case:\n // class A {xxx = 1;}\n // enableClassExtend(A);\n // class B extends A {}\n // var C = B.extend({xxx: 5});\n // var c = new C();\n // console.log(c.xxx); // expect 5 but always 1.\n var _this = _super !== null && _super.apply(this, arguments) || this; // ---------------------------------------\n // Props about data selection\n // ---------------------------------------\n\n\n _this._selectedDataIndicesMap = {};\n return _this;\n }\n\n SeriesModel.prototype.init = function (option, parentModel, ecModel) {\n this.seriesIndex = this.componentIndex;\n this.dataTask = createTask({\n count: dataTaskCount,\n reset: dataTaskReset\n });\n this.dataTask.context = {\n model: this\n };\n this.mergeDefaultAndTheme(option, ecModel);\n var sourceManager = inner(this).sourceManager = new SourceManager(this);\n sourceManager.prepareSource();\n var data = this.getInitialData(option, ecModel);\n wrapData(data, this);\n this.dataTask.context.data = data;\n\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.assert(data, 'getInitialData returned invalid data.');\n }\n\n inner(this).dataBeforeProcessed = data; // If we reverse the order (make data firstly, and then make\n // dataBeforeProcessed by cloneShallow), cloneShallow will\n // cause data.graph.data !== data when using\n // module:echarts/data/Graph or module:echarts/data/Tree.\n // See module:echarts/data/helper/linkSeriesData\n // Theoretically, it is unreasonable to call `seriesModel.getData()` in the model\n // init or merge stage, because the data can be restored. So we do not `restoreData`\n // and `setData` here, which forbids calling `seriesModel.getData()` in this stage.\n // Call `seriesModel.getRawData()` instead.\n // this.restoreData();\n\n autoSeriesName(this);\n\n this._initSelectedMapFromData(data);\n };\n /**\n * Util for merge default and theme to option\n */\n\n\n SeriesModel.prototype.mergeDefaultAndTheme = function (option, ecModel) {\n var layoutMode = fetchLayoutMode(this);\n var inputPositionParams = layoutMode ? getLayoutParams(option) : {}; // Backward compat: using subType on theme.\n // But if name duplicate between series subType\n // (for example: parallel) add component mainType,\n // add suffix 'Series'.\n\n var themeSubType = this.subType;\n\n if (ComponentModel.hasClass(themeSubType)) {\n themeSubType += 'Series';\n }\n\n zrUtil.merge(option, ecModel.getTheme().get(this.subType));\n zrUtil.merge(option, this.getDefaultOption()); // Default label emphasis `show`\n\n modelUtil.defaultEmphasis(option, 'label', ['show']);\n this.fillDataTextStyle(option.data);\n\n if (layoutMode) {\n mergeLayoutParam(option, inputPositionParams, layoutMode);\n }\n };\n\n SeriesModel.prototype.mergeOption = function (newSeriesOption, ecModel) {\n // this.settingTask.dirty();\n newSeriesOption = zrUtil.merge(this.option, newSeriesOption, true);\n this.fillDataTextStyle(newSeriesOption.data);\n var layoutMode = fetchLayoutMode(this);\n\n if (layoutMode) {\n mergeLayoutParam(this.option, newSeriesOption, layoutMode);\n }\n\n var sourceManager = inner(this).sourceManager;\n sourceManager.dirty();\n sourceManager.prepareSource();\n var data = this.getInitialData(newSeriesOption, ecModel);\n wrapData(data, this);\n this.dataTask.dirty();\n this.dataTask.context.data = data;\n inner(this).dataBeforeProcessed = data;\n autoSeriesName(this);\n\n this._initSelectedMapFromData(data);\n };\n\n SeriesModel.prototype.fillDataTextStyle = function (data) {\n // Default data label emphasis `show`\n // FIXME Tree structure data ?\n // FIXME Performance ?\n if (data && !zrUtil.isTypedArray(data)) {\n var props = ['show'];\n\n for (var i = 0; i < data.length; i++) {\n if (data[i] && data[i].label) {\n modelUtil.defaultEmphasis(data[i], 'label', props);\n }\n }\n }\n };\n /**\n * Init a data structure from data related option in series\n * Must be overriden.\n */\n\n\n SeriesModel.prototype.getInitialData = function (option, ecModel) {\n return;\n };\n /**\n * Append data to list\n */\n\n\n SeriesModel.prototype.appendData = function (params) {\n // FIXME ???\n // (1) If data from dataset, forbidden append.\n // (2) support append data of dataset.\n var data = this.getRawData();\n data.appendData(params.data);\n };\n /**\n * Consider some method like `filter`, `map` need make new data,\n * We should make sure that `seriesModel.getData()` get correct\n * data in the stream procedure. So we fetch data from upstream\n * each time `task.perform` called.\n */\n\n\n SeriesModel.prototype.getData = function (dataType) {\n var task = getCurrentTask(this);\n\n if (task) {\n var data = task.context.data;\n return dataType == null ? data : data.getLinkedData(dataType);\n } else {\n // When series is not alive (that may happen when click toolbox\n // restore or setOption with not merge mode), series data may\n // be still need to judge animation or something when graphic\n // elements want to know whether fade out.\n return inner(this).data;\n }\n };\n\n SeriesModel.prototype.getAllData = function () {\n var mainData = this.getData();\n return mainData && mainData.getLinkedDataAll ? mainData.getLinkedDataAll() : [{\n data: mainData\n }];\n };\n\n SeriesModel.prototype.setData = function (data) {\n var task = getCurrentTask(this);\n\n if (task) {\n var context = task.context; // Consider case: filter, data sample.\n // FIXME:TS never used, so comment it\n // if (context.data !== data && task.modifyOutputEnd) {\n // task.setOutputEnd(data.count());\n // }\n\n context.outputData = data; // Caution: setData should update context.data,\n // Because getData may be called multiply in a\n // single stage and expect to get the data just\n // set. (For example, AxisProxy, x y both call\n // getData and setDate sequentially).\n // So the context.data should be fetched from\n // upstream each time when a stage starts to be\n // performed.\n\n if (task !== this.dataTask) {\n context.data = data;\n }\n }\n\n inner(this).data = data;\n };\n\n SeriesModel.prototype.getEncode = function () {\n var encode = this.get('encode', true);\n\n if (encode) {\n return zrUtil.createHashMap(encode);\n }\n };\n\n SeriesModel.prototype.getSourceManager = function () {\n return inner(this).sourceManager;\n };\n\n SeriesModel.prototype.getSource = function () {\n return this.getSourceManager().getSource();\n };\n /**\n * Get data before processed\n */\n\n\n SeriesModel.prototype.getRawData = function () {\n return inner(this).dataBeforeProcessed;\n };\n\n SeriesModel.prototype.getColorBy = function () {\n var colorBy = this.get('colorBy');\n return colorBy || 'series';\n };\n\n SeriesModel.prototype.isColorBySeries = function () {\n return this.getColorBy() === 'series';\n };\n /**\n * Get base axis if has coordinate system and has axis.\n * By default use coordSys.getBaseAxis();\n * Can be overrided for some chart.\n * @return {type} description\n */\n\n\n SeriesModel.prototype.getBaseAxis = function () {\n var coordSys = this.coordinateSystem; // @ts-ignore\n\n return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis();\n };\n /**\n * Default tooltip formatter\n *\n * @param dataIndex\n * @param multipleSeries\n * @param dataType\n * @param renderMode valid values: 'html'(by default) and 'richText'.\n * 'html' is used for rendering tooltip in extra DOM form, and the result\n * string is used as DOM HTML content.\n * 'richText' is used for rendering tooltip in rich text form, for those where\n * DOM operation is not supported.\n * @return formatted tooltip with `html` and `markers`\n * Notice: The override method can also return string\n */\n\n\n SeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n return defaultSeriesFormatTooltip({\n series: this,\n dataIndex: dataIndex,\n multipleSeries: multipleSeries\n });\n };\n\n SeriesModel.prototype.isAnimationEnabled = function () {\n if (env.node) {\n return false;\n }\n\n var animationEnabled = this.getShallow('animation');\n\n if (animationEnabled) {\n if (this.getData().count() > this.getShallow('animationThreshold')) {\n animationEnabled = false;\n }\n }\n\n return !!animationEnabled;\n };\n\n SeriesModel.prototype.restoreData = function () {\n this.dataTask.dirty();\n };\n\n SeriesModel.prototype.getColorFromPalette = function (name, scope, requestColorNum) {\n var ecModel = this.ecModel; // PENDING\n\n var color = PaletteMixin.prototype.getColorFromPalette.call(this, name, scope, requestColorNum);\n\n if (!color) {\n color = ecModel.getColorFromPalette(name, scope, requestColorNum);\n }\n\n return color;\n };\n /**\n * Use `data.mapDimensionsAll(coordDim)` instead.\n * @deprecated\n */\n\n\n SeriesModel.prototype.coordDimToDataDim = function (coordDim) {\n return this.getRawData().mapDimensionsAll(coordDim);\n };\n /**\n * Get progressive rendering count each step\n */\n\n\n SeriesModel.prototype.getProgressive = function () {\n return this.get('progressive');\n };\n /**\n * Get progressive rendering count each step\n */\n\n\n SeriesModel.prototype.getProgressiveThreshold = function () {\n return this.get('progressiveThreshold');\n }; // PENGING If selectedMode is null ?\n\n\n SeriesModel.prototype.select = function (innerDataIndices, dataType) {\n this._innerSelect(this.getData(dataType), innerDataIndices);\n };\n\n SeriesModel.prototype.unselect = function (innerDataIndices, dataType) {\n var selectedMap = this.option.selectedMap;\n\n if (!selectedMap) {\n return;\n }\n\n var data = this.getData(dataType);\n\n for (var i = 0; i < innerDataIndices.length; i++) {\n var dataIndex = innerDataIndices[i];\n var nameOrId = getSelectionKey(data, dataIndex);\n selectedMap[nameOrId] = false;\n this._selectedDataIndicesMap[nameOrId] = -1;\n }\n };\n\n SeriesModel.prototype.toggleSelect = function (innerDataIndices, dataType) {\n var tmpArr = [];\n\n for (var i = 0; i < innerDataIndices.length; i++) {\n tmpArr[0] = innerDataIndices[i];\n this.isSelected(innerDataIndices[i], dataType) ? this.unselect(tmpArr, dataType) : this.select(tmpArr, dataType);\n }\n };\n\n SeriesModel.prototype.getSelectedDataIndices = function () {\n var selectedDataIndicesMap = this._selectedDataIndicesMap;\n var nameOrIds = zrUtil.keys(selectedDataIndicesMap);\n var dataIndices = [];\n\n for (var i = 0; i < nameOrIds.length; i++) {\n var dataIndex = selectedDataIndicesMap[nameOrIds[i]];\n\n if (dataIndex >= 0) {\n dataIndices.push(dataIndex);\n }\n }\n\n return dataIndices;\n };\n\n SeriesModel.prototype.isSelected = function (dataIndex, dataType) {\n var selectedMap = this.option.selectedMap;\n\n if (!selectedMap) {\n return false;\n }\n\n var data = this.getData(dataType);\n var nameOrId = getSelectionKey(data, dataIndex);\n return selectedMap[nameOrId] || false;\n };\n\n SeriesModel.prototype.isUniversalTransitionEnabled = function () {\n if (this[SERIES_UNIVERSAL_TRANSITION_PROP]) {\n return true;\n }\n\n var universalTransitionOpt = this.option.universalTransition; // Quick reject\n\n if (!universalTransitionOpt) {\n return false;\n }\n\n if (universalTransitionOpt === true) {\n return true;\n } // Can be simply 'universalTransition: true'\n\n\n return universalTransitionOpt && universalTransitionOpt.enabled;\n };\n\n SeriesModel.prototype._innerSelect = function (data, innerDataIndices) {\n var _a, _b;\n\n var selectedMode = this.option.selectedMode;\n var len = innerDataIndices.length;\n\n if (!selectedMode || !len) {\n return;\n }\n\n if (selectedMode === 'multiple') {\n var selectedMap = this.option.selectedMap || (this.option.selectedMap = {});\n\n for (var i = 0; i < len; i++) {\n var dataIndex = innerDataIndices[i]; // TODO diffrent types of data share same object.\n\n var nameOrId = getSelectionKey(data, dataIndex);\n selectedMap[nameOrId] = true;\n this._selectedDataIndicesMap[nameOrId] = data.getRawIndex(dataIndex);\n }\n } else if (selectedMode === 'single' || selectedMode === true) {\n var lastDataIndex = innerDataIndices[len - 1];\n var nameOrId = getSelectionKey(data, lastDataIndex);\n this.option.selectedMap = (_a = {}, _a[nameOrId] = true, _a);\n this._selectedDataIndicesMap = (_b = {}, _b[nameOrId] = data.getRawIndex(lastDataIndex), _b);\n }\n };\n\n SeriesModel.prototype._initSelectedMapFromData = function (data) {\n // Ignore select info in data if selectedMap exists.\n // NOTE It's only for legacy usage. edge data is not supported.\n if (this.option.selectedMap) {\n return;\n }\n\n var dataIndices = [];\n\n if (data.hasItemOption) {\n data.each(function (idx) {\n var rawItem = data.getRawDataItem(idx);\n\n if (rawItem && rawItem.selected) {\n dataIndices.push(idx);\n }\n });\n }\n\n if (dataIndices.length > 0) {\n this._innerSelect(data, dataIndices);\n }\n }; // /**\n // * @see {module:echarts/stream/Scheduler}\n // */\n // abstract pipeTask: null\n\n\n SeriesModel.registerClass = function (clz) {\n return ComponentModel.registerClass(clz);\n };\n\n SeriesModel.protoInitialize = function () {\n var proto = SeriesModel.prototype;\n proto.type = 'series.__base__';\n proto.seriesIndex = 0;\n proto.ignoreStyleOnData = false;\n proto.hasSymbolVisual = false;\n proto.defaultSymbol = 'circle'; // Make sure the values can be accessed!\n\n proto.visualStyleAccessPath = 'itemStyle';\n proto.visualDrawType = 'fill';\n }();\n\n return SeriesModel;\n}(ComponentModel);\n\nzrUtil.mixin(SeriesModel, DataFormatMixin);\nzrUtil.mixin(SeriesModel, PaletteMixin);\nmountExtend(SeriesModel, ComponentModel);\n/**\n * MUST be called after `prepareSource` called\n * Here we need to make auto series, especially for auto legend. But we\n * do not modify series.name in option to avoid side effects.\n */\n\nfunction autoSeriesName(seriesModel) {\n // User specified name has higher priority, otherwise it may cause\n // series can not be queried unexpectedly.\n var name = seriesModel.name;\n\n if (!modelUtil.isNameSpecified(seriesModel)) {\n seriesModel.name = getSeriesAutoName(seriesModel) || name;\n }\n}\n\nfunction getSeriesAutoName(seriesModel) {\n var data = seriesModel.getRawData();\n var dataDims = data.mapDimensionsAll('seriesName');\n var nameArr = [];\n zrUtil.each(dataDims, function (dataDim) {\n var dimInfo = data.getDimensionInfo(dataDim);\n dimInfo.displayName && nameArr.push(dimInfo.displayName);\n });\n return nameArr.join(' ');\n}\n\nfunction dataTaskCount(context) {\n return context.model.getRawData().count();\n}\n\nfunction dataTaskReset(context) {\n var seriesModel = context.model;\n seriesModel.setData(seriesModel.getRawData().cloneShallow());\n return dataTaskProgress;\n}\n\nfunction dataTaskProgress(param, context) {\n // Avoid repead cloneShallow when data just created in reset.\n if (context.outputData && param.end > context.outputData.count()) {\n context.model.getRawData().cloneShallow(context.outputData);\n }\n} // TODO refactor\n\n\nfunction wrapData(data, seriesModel) {\n zrUtil.each(zrUtil.concatArray(data.CHANGABLE_METHODS, data.DOWNSAMPLE_METHODS), function (methodName) {\n data.wrapMethod(methodName, zrUtil.curry(onDataChange, seriesModel));\n });\n}\n\nfunction onDataChange(seriesModel, newList) {\n var task = getCurrentTask(seriesModel);\n\n if (task) {\n // Consider case: filter, selectRange\n task.setOutputEnd((newList || this).count());\n }\n\n return newList;\n}\n\nfunction getCurrentTask(seriesModel) {\n var scheduler = (seriesModel.ecModel || {}).scheduler;\n var pipeline = scheduler && scheduler.getPipeline(seriesModel.uid);\n\n if (pipeline) {\n // When pipline finished, the currrentTask keep the last\n // task (renderTask).\n var task = pipeline.currentTask;\n\n if (task) {\n var agentStubMap = task.agentStubMap;\n\n if (agentStubMap) {\n task = agentStubMap.get(seriesModel.uid);\n }\n }\n\n return task;\n }\n}\n\nexport default SeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createHashMap, assert } from 'zrender/lib/core/util';\nimport { isComponentIdInternal } from '../util/model';\nvar internalOptionCreatorMap = createHashMap();\nexport function registerInternalOptionCreator(mainType, creator) {\n assert(internalOptionCreatorMap.get(mainType) == null && creator);\n internalOptionCreatorMap.set(mainType, creator);\n}\nexport function concatInternalOptions(ecModel, mainType, newCmptOptionList) {\n var internalOptionCreator = internalOptionCreatorMap.get(mainType);\n\n if (!internalOptionCreator) {\n return newCmptOptionList;\n }\n\n var internalOptions = internalOptionCreator(ecModel);\n\n if (!internalOptions) {\n return newCmptOptionList;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n for (var i = 0; i < internalOptions.length; i++) {\n assert(isComponentIdInternal(internalOptions[i]));\n }\n }\n\n return newCmptOptionList.concat(internalOptions);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either 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* A third-party license is embeded for some of the code in this file:\n* The \"scaleLevels\" was originally copied from \"d3.js\" with some\n* modifications made for this project.\n* (See more details in the comment on the definition of \"scaleLevels\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* ).\n*/\n// [About UTC and local time zone]:\n// In most cases, `number.parseDate` will treat input data string as local time\n// (except time zone is specified in time string). And `format.formateTime` returns\n// local time by default. option.useUTC is false by default. This design have\n// concidered these common case:\n// (1) Time that is persistent in server is in UTC, but it is needed to be diplayed\n// in local time by default.\n// (2) By default, the input data string (e.g., '2011-01-02') should be displayed\n// as its original time, without any time difference.\n\nimport * as numberUtil from '../util/number';\nimport { ONE_SECOND, ONE_MINUTE, ONE_HOUR, ONE_DAY, ONE_YEAR, format, leveledFormat, getUnitValue, timeUnits, fullLeveledFormatter, getPrimaryTimeUnit, isPrimaryTimeUnit, getDefaultFormatPrecisionOfInterval, fullYearGetterName, monthSetterName, fullYearSetterName, dateSetterName, hoursGetterName, hoursSetterName, minutesSetterName, secondsSetterName, millisecondsSetterName, monthGetterName, dateGetterName, minutesGetterName, secondsGetterName, millisecondsGetterName } from '../util/time';\nimport * as scaleHelper from './helper';\nimport IntervalScale from './Interval';\nimport Scale from './Scale';\nimport { warn } from '../util/log';\nimport { filter, map } from 'zrender/lib/core/util'; // FIXME 公用?\n\nvar bisect = function (a, x, lo, hi) {\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n\n if (a[mid][1] < x) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n\n return lo;\n};\n\nvar TimeScale =\n/** @class */\nfunction (_super) {\n __extends(TimeScale, _super);\n\n function TimeScale(settings) {\n var _this = _super.call(this, settings) || this;\n\n _this.type = 'time';\n return _this;\n }\n /**\n * Get label is mainly for other components like dataZoom, tooltip.\n */\n\n\n TimeScale.prototype.getLabel = function (tick) {\n var useUTC = this.getSetting('useUTC');\n return format(tick.value, fullLeveledFormatter[getDefaultFormatPrecisionOfInterval(getPrimaryTimeUnit(this._minLevelUnit))] || fullLeveledFormatter.second, useUTC, this.getSetting('locale'));\n };\n\n TimeScale.prototype.getFormattedLabel = function (tick, idx, labelFormatter) {\n var isUTC = this.getSetting('useUTC');\n var lang = this.getSetting('locale');\n return leveledFormat(tick, idx, labelFormatter, lang, isUTC);\n };\n /**\n * @override\n * @param expandToNicedExtent Whether expand the ticks to niced extent.\n */\n\n\n TimeScale.prototype.getTicks = function (expandToNicedExtent) {\n var interval = this._interval;\n var extent = this._extent;\n var ticks = []; // If interval is 0, return [];\n\n if (!interval) {\n return ticks;\n }\n\n ticks.push({\n value: extent[0],\n level: 0\n });\n var useUTC = this.getSetting('useUTC');\n var innerTicks = getIntervalTicks(this._minLevelUnit, this._approxInterval, useUTC, extent);\n ticks = ticks.concat(innerTicks);\n ticks.push({\n value: extent[1],\n level: 0\n });\n return ticks;\n };\n\n TimeScale.prototype.niceExtent = function (opt) {\n var extent = this._extent; // If extent start and end are same, expand them\n\n if (extent[0] === extent[1]) {\n // Expand extent\n extent[0] -= ONE_DAY;\n extent[1] += ONE_DAY;\n } // If there are no data and extent are [Infinity, -Infinity]\n\n\n if (extent[1] === -Infinity && extent[0] === Infinity) {\n var d = new Date();\n extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate());\n extent[0] = extent[1] - ONE_DAY;\n }\n\n this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);\n };\n\n TimeScale.prototype.niceTicks = function (approxTickNum, minInterval, maxInterval) {\n approxTickNum = approxTickNum || 10;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n this._approxInterval = span / approxTickNum;\n\n if (minInterval != null && this._approxInterval < minInterval) {\n this._approxInterval = minInterval;\n }\n\n if (maxInterval != null && this._approxInterval > maxInterval) {\n this._approxInterval = maxInterval;\n }\n\n var scaleIntervalsLen = scaleIntervals.length;\n var idx = Math.min(bisect(scaleIntervals, this._approxInterval, 0, scaleIntervalsLen), scaleIntervalsLen - 1); // Interval that can be used to calculate ticks\n\n this._interval = scaleIntervals[idx][1]; // Min level used when picking ticks from top down.\n // We check one more level to avoid the ticks are to sparse in some case.\n\n this._minLevelUnit = scaleIntervals[Math.max(idx - 1, 0)][0];\n };\n\n TimeScale.prototype.parse = function (val) {\n // val might be float.\n return typeof val === 'number' ? val : +numberUtil.parseDate(val);\n };\n\n TimeScale.prototype.contain = function (val) {\n return scaleHelper.contain(this.parse(val), this._extent);\n };\n\n TimeScale.prototype.normalize = function (val) {\n return scaleHelper.normalize(this.parse(val), this._extent);\n };\n\n TimeScale.prototype.scale = function (val) {\n return scaleHelper.scale(val, this._extent);\n };\n\n TimeScale.type = 'time';\n return TimeScale;\n}(IntervalScale);\n/**\n * This implementation was originally copied from \"d3.js\"\n * \n * with some modifications made for this program.\n * See the license statement at the head of this file.\n */\n\n\nvar scaleIntervals = [// Format interval\n['second', ONE_SECOND], ['minute', ONE_MINUTE], ['hour', ONE_HOUR], ['quarter-day', ONE_HOUR * 6], ['half-day', ONE_HOUR * 12], ['day', ONE_DAY * 1.2], ['half-week', ONE_DAY * 3.5], ['week', ONE_DAY * 7], ['month', ONE_DAY * 31], ['quarter', ONE_DAY * 95], ['half-year', ONE_YEAR / 2], ['year', ONE_YEAR] // 1Y\n];\n\nfunction isUnitValueSame(unit, valueA, valueB, isUTC) {\n var dateA = numberUtil.parseDate(valueA);\n var dateB = numberUtil.parseDate(valueB);\n\n var isSame = function (unit) {\n return getUnitValue(dateA, unit, isUTC) === getUnitValue(dateB, unit, isUTC);\n };\n\n var isSameYear = function () {\n return isSame('year');\n }; // const isSameHalfYear = () => isSameYear() && isSame('half-year');\n // const isSameQuater = () => isSameYear() && isSame('quarter');\n\n\n var isSameMonth = function () {\n return isSameYear() && isSame('month');\n };\n\n var isSameDay = function () {\n return isSameMonth() && isSame('day');\n }; // const isSameHalfDay = () => isSameDay() && isSame('half-day');\n\n\n var isSameHour = function () {\n return isSameDay() && isSame('hour');\n };\n\n var isSameMinute = function () {\n return isSameHour() && isSame('minute');\n };\n\n var isSameSecond = function () {\n return isSameMinute() && isSame('second');\n };\n\n var isSameMilliSecond = function () {\n return isSameSecond() && isSame('millisecond');\n };\n\n switch (unit) {\n case 'year':\n return isSameYear();\n\n case 'month':\n return isSameMonth();\n\n case 'day':\n return isSameDay();\n\n case 'hour':\n return isSameHour();\n\n case 'minute':\n return isSameMinute();\n\n case 'second':\n return isSameSecond();\n\n case 'millisecond':\n return isSameMilliSecond();\n }\n} // const primaryUnitGetters = {\n// year: fullYearGetterName(),\n// month: monthGetterName(),\n// day: dateGetterName(),\n// hour: hoursGetterName(),\n// minute: minutesGetterName(),\n// second: secondsGetterName(),\n// millisecond: millisecondsGetterName()\n// };\n// const primaryUnitUTCGetters = {\n// year: fullYearGetterName(true),\n// month: monthGetterName(true),\n// day: dateGetterName(true),\n// hour: hoursGetterName(true),\n// minute: minutesGetterName(true),\n// second: secondsGetterName(true),\n// millisecond: millisecondsGetterName(true)\n// };\n// function moveTick(date: Date, unitName: TimeUnit, step: number, isUTC: boolean) {\n// step = step || 1;\n// switch (getPrimaryTimeUnit(unitName)) {\n// case 'year':\n// date[fullYearSetterName(isUTC)](date[fullYearGetterName(isUTC)]() + step);\n// break;\n// case 'month':\n// date[monthSetterName(isUTC)](date[monthGetterName(isUTC)]() + step);\n// break;\n// case 'day':\n// date[dateSetterName(isUTC)](date[dateGetterName(isUTC)]() + step);\n// break;\n// case 'hour':\n// date[hoursSetterName(isUTC)](date[hoursGetterName(isUTC)]() + step);\n// break;\n// case 'minute':\n// date[minutesSetterName(isUTC)](date[minutesGetterName(isUTC)]() + step);\n// break;\n// case 'second':\n// date[secondsSetterName(isUTC)](date[secondsGetterName(isUTC)]() + step);\n// break;\n// case 'millisecond':\n// date[millisecondsSetterName(isUTC)](date[millisecondsGetterName(isUTC)]() + step);\n// break;\n// }\n// return date.getTime();\n// }\n// const DATE_INTERVALS = [[8, 7.5], [4, 3.5], [2, 1.5]];\n// const MONTH_INTERVALS = [[6, 5.5], [3, 2.5], [2, 1.5]];\n// const MINUTES_SECONDS_INTERVALS = [[30, 30], [20, 20], [15, 15], [10, 10], [5, 5], [2, 2]];\n\n\nfunction getDateInterval(approxInterval, daysInMonth) {\n approxInterval /= ONE_DAY;\n return approxInterval > 16 ? 16 // Math.floor(daysInMonth / 2) + 1 // In this case we only want one tick betwen two month.\n : approxInterval > 7.5 ? 7 // TODO week 7 or day 8?\n : approxInterval > 3.5 ? 4 : approxInterval > 1.5 ? 2 : 1;\n}\n\nfunction getMonthInterval(approxInterval) {\n var APPROX_ONE_MONTH = 30 * ONE_DAY;\n approxInterval /= APPROX_ONE_MONTH;\n return approxInterval > 6 ? 6 : approxInterval > 3 ? 3 : approxInterval > 2 ? 2 : 1;\n}\n\nfunction getHourInterval(approxInterval) {\n approxInterval /= ONE_HOUR;\n return approxInterval > 12 ? 12 : approxInterval > 6 ? 6 : approxInterval > 3.5 ? 4 : approxInterval > 2 ? 2 : 1;\n}\n\nfunction getMinutesAndSecondsInterval(approxInterval, isMinutes) {\n approxInterval /= isMinutes ? ONE_MINUTE : ONE_SECOND;\n return approxInterval > 30 ? 30 : approxInterval > 20 ? 20 : approxInterval > 15 ? 15 : approxInterval > 10 ? 10 : approxInterval > 5 ? 5 : approxInterval > 2 ? 2 : 1;\n}\n\nfunction getMillisecondsInterval(approxInterval) {\n return numberUtil.nice(approxInterval, true);\n}\n\nfunction getFirstTimestampOfUnit(date, unitName, isUTC) {\n var outDate = new Date(date);\n\n switch (getPrimaryTimeUnit(unitName)) {\n case 'year':\n case 'month':\n outDate[monthSetterName(isUTC)](0);\n\n case 'day':\n outDate[dateSetterName(isUTC)](1);\n\n case 'hour':\n outDate[hoursSetterName(isUTC)](0);\n\n case 'minute':\n outDate[minutesSetterName(isUTC)](0);\n\n case 'second':\n outDate[secondsSetterName(isUTC)](0);\n outDate[millisecondsSetterName(isUTC)](0);\n }\n\n return outDate.getTime();\n}\n\nfunction getIntervalTicks(bottomUnitName, approxInterval, isUTC, extent) {\n var safeLimit = 10000;\n var unitNames = timeUnits;\n var iter = 0;\n\n function addTicksInSpan(interval, minTimestamp, maxTimestamp, getMethodName, setMethodName, isDate, out) {\n var date = new Date(minTimestamp);\n var dateTime = minTimestamp;\n var d = date[getMethodName](); // if (isDate) {\n // d -= 1; // Starts with 0; PENDING\n // }\n\n while (dateTime < maxTimestamp && dateTime <= extent[1]) {\n out.push({\n value: dateTime\n });\n d += interval;\n date[setMethodName](d);\n dateTime = date.getTime();\n } // This extra tick is for calcuating ticks of next level. Will not been added to the final result\n\n\n out.push({\n value: dateTime,\n notAdd: true\n });\n }\n\n function addLevelTicks(unitName, lastLevelTicks, levelTicks) {\n var newAddedTicks = [];\n var isFirstLevel = !lastLevelTicks.length;\n\n if (isUnitValueSame(getPrimaryTimeUnit(unitName), extent[0], extent[1], isUTC)) {\n return;\n }\n\n if (isFirstLevel) {\n lastLevelTicks = [{\n // TODO Optimize. Not include so may ticks.\n value: getFirstTimestampOfUnit(new Date(extent[0]), unitName, isUTC)\n }, {\n value: extent[1]\n }];\n }\n\n for (var i = 0; i < lastLevelTicks.length - 1; i++) {\n var startTick = lastLevelTicks[i].value;\n var endTick = lastLevelTicks[i + 1].value;\n\n if (startTick === endTick) {\n continue;\n }\n\n var interval = void 0;\n var getterName = void 0;\n var setterName = void 0;\n var isDate = false;\n\n switch (unitName) {\n case 'year':\n interval = Math.max(1, Math.round(approxInterval / ONE_DAY / 365));\n getterName = fullYearGetterName(isUTC);\n setterName = fullYearSetterName(isUTC);\n break;\n\n case 'half-year':\n case 'quarter':\n case 'month':\n interval = getMonthInterval(approxInterval);\n getterName = monthGetterName(isUTC);\n setterName = monthSetterName(isUTC);\n break;\n\n case 'week': // PENDING If week is added. Ignore day.\n\n case 'half-week':\n case 'day':\n interval = getDateInterval(approxInterval, 31); // Use 32 days and let interval been 16\n\n getterName = dateGetterName(isUTC);\n setterName = dateSetterName(isUTC);\n isDate = true;\n break;\n\n case 'half-day':\n case 'quarter-day':\n case 'hour':\n interval = getHourInterval(approxInterval);\n getterName = hoursGetterName(isUTC);\n setterName = hoursSetterName(isUTC);\n break;\n\n case 'minute':\n interval = getMinutesAndSecondsInterval(approxInterval, true);\n getterName = minutesGetterName(isUTC);\n setterName = minutesSetterName(isUTC);\n break;\n\n case 'second':\n interval = getMinutesAndSecondsInterval(approxInterval, false);\n getterName = secondsGetterName(isUTC);\n setterName = secondsSetterName(isUTC);\n break;\n\n case 'millisecond':\n interval = getMillisecondsInterval(approxInterval);\n getterName = millisecondsGetterName(isUTC);\n setterName = millisecondsSetterName(isUTC);\n break;\n }\n\n addTicksInSpan(interval, startTick, endTick, getterName, setterName, isDate, newAddedTicks);\n\n if (unitName === 'year' && levelTicks.length > 1 && i === 0) {\n // Add nearest years to the left extent.\n levelTicks.unshift({\n value: levelTicks[0].value - interval\n });\n }\n }\n\n for (var i = 0; i < newAddedTicks.length; i++) {\n levelTicks.push(newAddedTicks[i]);\n } // newAddedTicks.length && console.log(unitName, newAddedTicks);\n\n\n return newAddedTicks;\n }\n\n var levelsTicks = [];\n var currentLevelTicks = [];\n var tickCount = 0;\n var lastLevelTickCount = 0;\n\n for (var i = 0; i < unitNames.length && iter++ < safeLimit; ++i) {\n var primaryTimeUnit = getPrimaryTimeUnit(unitNames[i]);\n\n if (!isPrimaryTimeUnit(unitNames[i])) {\n // TODO\n continue;\n }\n\n addLevelTicks(unitNames[i], levelsTicks[levelsTicks.length - 1] || [], currentLevelTicks);\n var nextPrimaryTimeUnit = unitNames[i + 1] ? getPrimaryTimeUnit(unitNames[i + 1]) : null;\n\n if (primaryTimeUnit !== nextPrimaryTimeUnit) {\n if (currentLevelTicks.length) {\n lastLevelTickCount = tickCount; // Remove the duplicate so the tick count can be precisely.\n\n currentLevelTicks.sort(function (a, b) {\n return a.value - b.value;\n });\n var levelTicksRemoveDuplicated = [];\n\n for (var i_1 = 0; i_1 < currentLevelTicks.length; ++i_1) {\n var tickValue = currentLevelTicks[i_1].value;\n\n if (i_1 === 0 || currentLevelTicks[i_1 - 1].value !== tickValue) {\n levelTicksRemoveDuplicated.push(currentLevelTicks[i_1]);\n\n if (tickValue >= extent[0] && tickValue <= extent[1]) {\n tickCount++;\n }\n }\n }\n\n var targetTickNum = (extent[1] - extent[0]) / approxInterval; // Added too much in this level and not too less in last level\n\n if (tickCount > targetTickNum * 1.5 && lastLevelTickCount > targetTickNum / 1.5) {\n break;\n } // Only treat primary time unit as one level.\n\n\n levelsTicks.push(levelTicksRemoveDuplicated);\n\n if (tickCount > targetTickNum || bottomUnitName === unitNames[i]) {\n break;\n }\n } // Reset if next unitName is primary\n\n\n currentLevelTicks = [];\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (iter >= safeLimit) {\n warn('Exceed safe limit.');\n }\n }\n\n var levelsTicksInExtent = filter(map(levelsTicks, function (levelTicks) {\n return filter(levelTicks, function (tick) {\n return tick.value >= extent[0] && tick.value <= extent[1] && !tick.notAdd;\n });\n }), function (levelTicks) {\n return levelTicks.length > 0;\n });\n var ticks = [];\n var maxLevel = levelsTicksInExtent.length - 1;\n\n for (var i = 0; i < levelsTicksInExtent.length; ++i) {\n var levelTicks = levelsTicksInExtent[i];\n\n for (var k = 0; k < levelTicks.length; ++k) {\n ticks.push({\n value: levelTicks[k].value,\n level: maxLevel - i\n });\n }\n }\n\n ticks.sort(function (a, b) {\n return a.value - b.value;\n }); // Remove duplicates\n\n var result = [];\n\n for (var i = 0; i < ticks.length; ++i) {\n if (i === 0 || ticks[i].value !== ticks[i - 1].value) {\n result.push(ticks[i]);\n }\n }\n\n return result;\n}\n\nScale.registerClass(TimeScale);\nexport default TimeScale;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar samplers = {\n average: function (frame) {\n var sum = 0;\n var count = 0;\n\n for (var i = 0; i < frame.length; i++) {\n if (!isNaN(frame[i])) {\n sum += frame[i];\n count++;\n }\n } // Return NaN if count is 0\n\n\n return count === 0 ? NaN : sum / count;\n },\n sum: function (frame) {\n var sum = 0;\n\n for (var i = 0; i < frame.length; i++) {\n // Ignore NaN\n sum += frame[i] || 0;\n }\n\n return sum;\n },\n max: function (frame) {\n var max = -Infinity;\n\n for (var i = 0; i < frame.length; i++) {\n frame[i] > max && (max = frame[i]);\n } // NaN will cause illegal axis extent.\n\n\n return isFinite(max) ? max : NaN;\n },\n min: function (frame) {\n var min = Infinity;\n\n for (var i = 0; i < frame.length; i++) {\n frame[i] < min && (min = frame[i]);\n } // NaN will cause illegal axis extent.\n\n\n return isFinite(min) ? min : NaN;\n },\n // TODO\n // Median\n nearest: function (frame) {\n return frame[0];\n }\n};\n\nvar indexSampler = function (frame) {\n return Math.round(frame.length / 2);\n};\n\nexport default function dataSample(seriesType) {\n return {\n seriesType: seriesType,\n // FIXME:TS never used, so comment it\n // modifyOutputEnd: true,\n reset: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var sampling = seriesModel.get('sampling');\n var coordSys = seriesModel.coordinateSystem;\n var count = data.count(); // Only cartesian2d support down sampling. Disable it when there is few data.\n\n if (count > 10 && coordSys.type === 'cartesian2d' && sampling) {\n var baseAxis = coordSys.getBaseAxis();\n var valueAxis = coordSys.getOtherAxis(baseAxis);\n var extent = baseAxis.getExtent();\n var dpr = api.getDevicePixelRatio(); // Coordinste system has been resized\n\n var size = Math.abs(extent[1] - extent[0]) * (dpr || 1);\n var rate = Math.round(count / size);\n\n if (rate > 1) {\n if (sampling === 'lttb') {\n seriesModel.setData(data.lttbDownSample(data.mapDimension(valueAxis.dim), 1 / rate));\n }\n\n var sampler = void 0;\n\n if (typeof sampling === 'string') {\n sampler = samplers[sampling];\n } else if (typeof sampling === 'function') {\n sampler = sampling;\n }\n\n if (sampler) {\n // Only support sample the first dim mapped from value axis.\n seriesModel.setData(data.downSample(data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler));\n }\n }\n }\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @file Visual mapping.\n */\nimport * as zrUtil from 'zrender/lib/core/util';\nvar visualDefault = {\n /**\n * @public\n */\n get: function (visualType, key, isCategory) {\n var value = zrUtil.clone((defaultOption[visualType] || {})[key]);\n return isCategory ? zrUtil.isArray(value) ? value[value.length - 1] : value : value;\n }\n};\nvar defaultOption = {\n color: {\n active: ['#006edd', '#e0ffff'],\n inactive: ['rgba(0,0,0,0)']\n },\n colorHue: {\n active: [0, 360],\n inactive: [0, 0]\n },\n colorSaturation: {\n active: [0.3, 1],\n inactive: [0, 0]\n },\n colorLightness: {\n active: [0.9, 0.5],\n inactive: [0, 0]\n },\n colorAlpha: {\n active: [0.3, 1],\n inactive: [0, 0]\n },\n opacity: {\n active: [0.3, 1],\n inactive: [0, 0]\n },\n symbol: {\n active: ['circle', 'roundRect', 'diamond'],\n inactive: ['none']\n },\n symbolSize: {\n active: [10, 50],\n inactive: [0, 0]\n }\n};\nexport default visualDefault;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport makeStyleMapper from './makeStyleMapper';\nexport var AREA_STYLE_KEY_MAP = [['fill', 'color'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['opacity'], ['shadowColor'] // Option decal is in `DecalObject` but style.decal is in `PatternObject`.\n// So do not transfer decal directly.\n];\nvar getAreaStyle = makeStyleMapper(AREA_STYLE_KEY_MAP);\n\nvar AreaStyleMixin =\n/** @class */\nfunction () {\n function AreaStyleMixin() {}\n\n AreaStyleMixin.prototype.getAreaStyle = function (excludes, includes) {\n return getAreaStyle(this, excludes, includes);\n };\n\n return AreaStyleMixin;\n}();\n\n;\nexport { AreaStyleMixin };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { getFont } from '../../label/labelStyle';\nimport ZRText from 'zrender/lib/graphic/Text';\nvar PATH_COLOR = ['textStyle', 'color']; // TODO Performance improvement?\n\nvar tmpRichText = new ZRText();\n\nvar TextStyleMixin =\n/** @class */\nfunction () {\n function TextStyleMixin() {}\n /**\n * Get color property or get color from option.textStyle.color\n */\n // TODO Callback\n\n\n TextStyleMixin.prototype.getTextColor = function (isEmphasis) {\n var ecModel = this.ecModel;\n return this.getShallow('color') || (!isEmphasis && ecModel ? ecModel.get(PATH_COLOR) : null);\n };\n /**\n * Create font string from fontStyle, fontWeight, fontSize, fontFamily\n * @return {string}\n */\n\n\n TextStyleMixin.prototype.getFont = function () {\n return getFont({\n fontStyle: this.getShallow('fontStyle'),\n fontWeight: this.getShallow('fontWeight'),\n fontSize: this.getShallow('fontSize'),\n fontFamily: this.getShallow('fontFamily')\n }, this.ecModel);\n };\n\n TextStyleMixin.prototype.getTextRect = function (text) {\n tmpRichText.useStyle({\n text: text,\n fontStyle: this.getShallow('fontStyle'),\n fontWeight: this.getShallow('fontWeight'),\n fontSize: this.getShallow('fontSize'),\n fontFamily: this.getShallow('fontFamily'),\n verticalAlign: this.getShallow('verticalAlign') || this.getShallow('baseline'),\n padding: this.getShallow('padding'),\n lineHeight: this.getShallow('lineHeight'),\n rich: this.getShallow('rich')\n });\n tmpRichText.update();\n return tmpRichText.getBoundingRect();\n };\n\n return TextStyleMixin;\n}();\n\n;\nexport default TextStyleMixin;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport env from 'zrender/lib/core/env';\nimport { enableClassExtend, enableClassCheck } from '../util/clazz';\nimport { AreaStyleMixin } from './mixin/areaStyle';\nimport TextStyleMixin from './mixin/textStyle';\nimport { LineStyleMixin } from './mixin/lineStyle';\nimport { ItemStyleMixin } from './mixin/itemStyle';\nimport { mixin, clone, merge } from 'zrender/lib/core/util';\n\nvar Model =\n/** @class */\nfunction () {\n function Model(option, parentModel, ecModel) {\n this.parentModel = parentModel;\n this.ecModel = ecModel;\n this.option = option; // Simple optimization\n // if (this.init) {\n // if (arguments.length <= 4) {\n // this.init(option, parentModel, ecModel, extraOpt);\n // }\n // else {\n // this.init.apply(this, arguments);\n // }\n // }\n }\n\n Model.prototype.init = function (option, parentModel, ecModel) {\n var rest = [];\n\n for (var _i = 3; _i < arguments.length; _i++) {\n rest[_i - 3] = arguments[_i];\n }\n };\n /**\n * Merge the input option to me.\n */\n\n\n Model.prototype.mergeOption = function (option, ecModel) {\n merge(this.option, option, true);\n }; // `path` can be 'xxx.yyy.zzz', so the return value type have to be `ModelOption`\n // TODO: TYPE strict key check?\n // get(path: string | string[], ignoreParent?: boolean): ModelOption;\n\n\n Model.prototype.get = function (path, ignoreParent) {\n if (path == null) {\n return this.option;\n }\n\n return this._doGet(this.parsePath(path), !ignoreParent && this.parentModel);\n };\n\n Model.prototype.getShallow = function (key, ignoreParent) {\n var option = this.option;\n var val = option == null ? option : option[key];\n\n if (val == null && !ignoreParent) {\n var parentModel = this.parentModel;\n\n if (parentModel) {\n // FIXME:TS do not know how to make it works\n val = parentModel.getShallow(key);\n }\n }\n\n return val;\n }; // `path` can be 'xxx.yyy.zzz', so the return value type have to be `Model`\n // getModel(path: string | string[], parentModel?: Model): Model;\n // TODO 'xxx.yyy.zzz' is deprecated\n\n\n Model.prototype.getModel = function (path, parentModel) {\n var hasPath = path != null;\n var pathFinal = hasPath ? this.parsePath(path) : null;\n var obj = hasPath ? this._doGet(pathFinal) : this.option;\n parentModel = parentModel || this.parentModel && this.parentModel.getModel(this.resolveParentPath(pathFinal));\n return new Model(obj, parentModel, this.ecModel);\n };\n /**\n * Squash option stack into one.\n * parentModel will be removed after squashed.\n *\n * NOTE: resolveParentPath will not be applied here for simplicity. DON'T use this function\n * if resolveParentPath is modified.\n *\n * @param deepMerge If do deep merge. Default to be false.\n */\n // squash(\n // deepMerge?: boolean,\n // handleCallback?: (func: () => object) => object\n // ) {\n // const optionStack = [];\n // let model: Model = this;\n // while (model) {\n // if (model.option) {\n // optionStack.push(model.option);\n // }\n // model = model.parentModel;\n // }\n // const newOption = {} as Opt;\n // let option;\n // while (option = optionStack.pop()) { // Top down merge\n // if (isFunction(option) && handleCallback) {\n // option = handleCallback(option);\n // }\n // if (deepMerge) {\n // merge(newOption, option);\n // }\n // else {\n // extend(newOption, option);\n // }\n // }\n // // Remove parentModel\n // this.option = newOption;\n // this.parentModel = null;\n // }\n\n /**\n * If model has option\n */\n\n\n Model.prototype.isEmpty = function () {\n return this.option == null;\n };\n\n Model.prototype.restoreData = function () {}; // Pending\n\n\n Model.prototype.clone = function () {\n var Ctor = this.constructor;\n return new Ctor(clone(this.option));\n }; // setReadOnly(properties): void {\n // clazzUtil.setReadOnly(this, properties);\n // }\n // If path is null/undefined, return null/undefined.\n\n\n Model.prototype.parsePath = function (path) {\n if (typeof path === 'string') {\n return path.split('.');\n }\n\n return path;\n }; // Resolve path for parent. Perhaps useful when parent use a different property.\n // Default to be a identity resolver.\n // Can be modified to a different resolver.\n\n\n Model.prototype.resolveParentPath = function (path) {\n return path;\n }; // FIXME:TS check whether put this method here\n\n\n Model.prototype.isAnimationEnabled = function () {\n if (!env.node && this.option) {\n if (this.option.animation != null) {\n return !!this.option.animation;\n } else if (this.parentModel) {\n return this.parentModel.isAnimationEnabled();\n }\n }\n };\n\n Model.prototype._doGet = function (pathArr, parentModel) {\n var obj = this.option;\n\n if (!pathArr) {\n return obj;\n }\n\n for (var i = 0; i < pathArr.length; i++) {\n // Ignore empty\n if (!pathArr[i]) {\n continue;\n } // obj could be number/string/... (like 0)\n\n\n obj = obj && typeof obj === 'object' ? obj[pathArr[i]] : null;\n\n if (obj == null) {\n break;\n }\n }\n\n if (obj == null && parentModel) {\n obj = parentModel._doGet(this.resolveParentPath(pathArr), parentModel.parentModel);\n }\n\n return obj;\n };\n\n return Model;\n}();\n\n; // Enable Model.extend.\n\nenableClassExtend(Model);\nenableClassCheck(Model);\nmixin(Model, LineStyleMixin);\nmixin(Model, ItemStyleMixin);\nmixin(Model, AreaStyleMixin);\nmixin(Model, TextStyleMixin);\nexport default Model;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar platform = ''; // Navigator not exists in node\n\nif (typeof navigator !== 'undefined') {\n /* global navigator */\n platform = navigator.platform || '';\n}\n\nvar decalColor = 'rgba(0, 0, 0, 0.2)';\nexport default {\n darkMode: 'auto',\n // backgroundColor: 'rgba(0,0,0,0)',\n colorBy: 'series',\n color: ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'],\n gradientColor: ['#f6efa6', '#d88273', '#bf444c'],\n aria: {\n decal: {\n decals: [{\n color: decalColor,\n dashArrayX: [1, 0],\n dashArrayY: [2, 5],\n symbolSize: 1,\n rotation: Math.PI / 6\n }, {\n color: decalColor,\n symbol: 'circle',\n dashArrayX: [[8, 8], [0, 8, 8, 0]],\n dashArrayY: [6, 0],\n symbolSize: 0.8\n }, {\n color: decalColor,\n dashArrayX: [1, 0],\n dashArrayY: [4, 3],\n rotation: -Math.PI / 4\n }, {\n color: decalColor,\n dashArrayX: [[6, 6], [0, 6, 6, 0]],\n dashArrayY: [6, 0]\n }, {\n color: decalColor,\n dashArrayX: [[1, 0], [1, 6]],\n dashArrayY: [1, 0, 6, 0],\n rotation: Math.PI / 4\n }, {\n color: decalColor,\n symbol: 'triangle',\n dashArrayX: [[9, 9], [0, 9, 9, 0]],\n dashArrayY: [7, 2],\n symbolSize: 0.75\n }]\n }\n },\n // If xAxis and yAxis declared, grid is created by default.\n // grid: {},\n textStyle: {\n // color: '#000',\n // decoration: 'none',\n // PENDING\n fontFamily: platform.match(/^Win/) ? 'Microsoft YaHei' : 'sans-serif',\n // fontFamily: 'Arial, Verdana, sans-serif',\n fontSize: 12,\n fontStyle: 'normal',\n fontWeight: 'normal'\n },\n // http://blogs.adobe.com/webplatform/2014/02/24/using-blend-modes-in-html-canvas/\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n // Default is source-over\n blendMode: null,\n stateAnimation: {\n duration: 300,\n easing: 'cubicOut'\n },\n animation: 'auto',\n animationDuration: 1000,\n animationDurationUpdate: 500,\n animationEasing: 'cubicInOut',\n animationEasingUpdate: 'cubicInOut',\n animationThreshold: 2000,\n // Configuration for progressive/incremental rendering\n progressiveThreshold: 3000,\n progressive: 400,\n // Threshold of if use single hover layer to optimize.\n // It is recommended that `hoverLayerThreshold` is equivalent to or less than\n // `progressiveThreshold`, otherwise hover will cause restart of progressive,\n // which is unexpected.\n // see example .\n hoverLayerThreshold: 3000,\n // See: module:echarts/scale/Time\n useUTC: false\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either 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 * Caution: If the mechanism should be changed some day, these cases\n * should be considered:\n *\n * (1) In `merge option` mode, if using the same option to call `setOption`\n * many times, the result should be the same (try our best to ensure that).\n * (2) In `merge option` mode, if a component has no id/name specified, it\n * will be merged by index, and the result sequence of the components is\n * consistent to the original sequence.\n * (3) In `replaceMerge` mode, keep the result sequence of the components is\n * consistent to the original sequence, even though there might result in \"hole\".\n * (4) `reset` feature (in toolbox). Find detailed info in comments about\n * `mergeOption` in module:echarts/model/OptionManager.\n */\n\nimport { each, filter, isArray, isObject, isString, createHashMap, assert, clone, merge, extend, mixin, isFunction } from 'zrender/lib/core/util';\nimport * as modelUtil from '../util/model';\nimport Model from './Model';\nimport ComponentModel from './Component';\nimport globalDefault from './globalDefault';\nimport { resetSourceDefaulter } from '../data/helper/sourceHelper';\nimport { concatInternalOptions } from './internalComponentCreator';\nimport { PaletteMixin } from './mixin/palette';\nimport { error } from '../util/log'; // -----------------------\n// Internal method names:\n// -----------------------\n\nvar reCreateSeriesIndices;\nvar assertSeriesInitialized;\nvar initBase;\nvar OPTION_INNER_KEY = '\\0_ec_inner';\nvar OPTION_INNER_VALUE = 1;\nvar BUITIN_COMPONENTS_MAP = {\n grid: 'GridComponent',\n polar: 'PolarComponent',\n geo: 'GeoComponent',\n singleAxis: 'SingleAxisComponent',\n parallel: 'ParallelComponent',\n calendar: 'CalendarComponent',\n graphic: 'GraphicComponent',\n toolbox: 'ToolboxComponent',\n tooltip: 'TooltipComponent',\n axisPointer: 'AxisPointerComponent',\n brush: 'BrushComponent',\n title: 'TitleComponent',\n timeline: 'TimelineComponent',\n markPoint: 'MarkPointComponent',\n markLine: 'MarkLineComponent',\n markArea: 'MarkAreaComponent',\n legend: 'LegendComponent',\n dataZoom: 'DataZoomComponent',\n visualMap: 'VisualMapComponent',\n // aria: 'AriaComponent',\n // dataset: 'DatasetComponent',\n // Dependencies\n xAxis: 'GridComponent',\n yAxis: 'GridComponent',\n angleAxis: 'PolarComponent',\n radiusAxis: 'PolarComponent'\n};\nvar BUILTIN_CHARTS_MAP = {\n line: 'LineChart',\n bar: 'BarChart',\n pie: 'PieChart',\n scatter: 'ScatterChart',\n radar: 'RadarChart',\n map: 'MapChart',\n tree: 'TreeChart',\n treemap: 'TreemapChart',\n graph: 'GraphChart',\n gauge: 'GaugeChart',\n funnel: 'FunnelChart',\n parallel: 'ParallelChart',\n sankey: 'SankeyChart',\n boxplot: 'BoxplotChart',\n candlestick: 'CandlestickChart',\n effectScatter: 'EffectScatterChart',\n lines: 'LinesChart',\n heatmap: 'HeatmapChart',\n pictorialBar: 'PictorialBarChart',\n themeRiver: 'ThemeRiverChart',\n sunburst: 'SunburstChart',\n custom: 'CustomChart'\n};\nvar componetsMissingLogPrinted = {};\n\nfunction checkMissingComponents(option) {\n each(option, function (componentOption, mainType) {\n if (!ComponentModel.hasClass(mainType)) {\n var componentImportName = BUITIN_COMPONENTS_MAP[mainType];\n\n if (componentImportName && !componetsMissingLogPrinted[componentImportName]) {\n error(\"Component \" + mainType + \" is used but not imported.\\nimport { \" + componentImportName + \" } from 'echarts/components';\\necharts.use([\" + componentImportName + \"]);\");\n componetsMissingLogPrinted[componentImportName] = true;\n }\n }\n });\n}\n\nvar GlobalModel =\n/** @class */\nfunction (_super) {\n __extends(GlobalModel, _super);\n\n function GlobalModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n GlobalModel.prototype.init = function (option, parentModel, ecModel, theme, locale, optionManager) {\n theme = theme || {};\n this.option = null; // Mark as not initialized.\n\n this._theme = new Model(theme);\n this._locale = new Model(locale);\n this._optionManager = optionManager;\n };\n\n GlobalModel.prototype.setOption = function (option, opts, optionPreprocessorFuncs) {\n if (process.env.NODE_ENV !== 'production') {\n assert(option != null, 'option is null/undefined');\n assert(option[OPTION_INNER_KEY] !== OPTION_INNER_VALUE, 'please use chart.getOption()');\n }\n\n var innerOpt = normalizeSetOptionInput(opts);\n\n this._optionManager.setOption(option, optionPreprocessorFuncs, innerOpt);\n\n this._resetOption(null, innerOpt);\n };\n /**\n * @param type null/undefined: reset all.\n * 'recreate': force recreate all.\n * 'timeline': only reset timeline option\n * 'media': only reset media query option\n * @return Whether option changed.\n */\n\n\n GlobalModel.prototype.resetOption = function (type, opt) {\n return this._resetOption(type, normalizeSetOptionInput(opt));\n };\n\n GlobalModel.prototype._resetOption = function (type, opt) {\n var optionChanged = false;\n var optionManager = this._optionManager;\n\n if (!type || type === 'recreate') {\n var baseOption = optionManager.mountOption(type === 'recreate');\n\n if (process.env.NODE_ENV !== 'production') {\n checkMissingComponents(baseOption);\n }\n\n if (!this.option || type === 'recreate') {\n initBase(this, baseOption);\n } else {\n this.restoreData();\n\n this._mergeOption(baseOption, opt);\n }\n\n optionChanged = true;\n }\n\n if (type === 'timeline' || type === 'media') {\n this.restoreData();\n } // By design, if `setOption(option2)` at the second time, and `option2` is a `ECUnitOption`,\n // it should better not have the same props with `MediaUnit['option']`.\n // Becuase either `option2` or `MediaUnit['option']` will be always merged to \"current option\"\n // rather than original \"baseOption\". If they both override a prop, the result might be\n // unexpected when media state changed after `setOption` called.\n // If we really need to modify a props in each `MediaUnit['option']`, use the full version\n // (`{baseOption, media}`) in `setOption`.\n // For `timeline`, the case is the same.\n\n\n if (!type || type === 'recreate' || type === 'timeline') {\n var timelineOption = optionManager.getTimelineOption(this);\n\n if (timelineOption) {\n optionChanged = true;\n\n this._mergeOption(timelineOption, opt);\n }\n }\n\n if (!type || type === 'recreate' || type === 'media') {\n var mediaOptions = optionManager.getMediaOption(this);\n\n if (mediaOptions.length) {\n each(mediaOptions, function (mediaOption) {\n optionChanged = true;\n\n this._mergeOption(mediaOption, opt);\n }, this);\n }\n }\n\n return optionChanged;\n };\n\n GlobalModel.prototype.mergeOption = function (option) {\n this._mergeOption(option, null);\n };\n\n GlobalModel.prototype._mergeOption = function (newOption, opt) {\n var option = this.option;\n var componentsMap = this._componentsMap;\n var componentsCount = this._componentsCount;\n var newCmptTypes = [];\n var newCmptTypeMap = createHashMap();\n var replaceMergeMainTypeMap = opt && opt.replaceMergeMainTypeMap;\n resetSourceDefaulter(this); // If no component class, merge directly.\n // For example: color, animaiton options, etc.\n\n each(newOption, function (componentOption, mainType) {\n if (componentOption == null) {\n return;\n }\n\n if (!ComponentModel.hasClass(mainType)) {\n // globalSettingTask.dirty();\n option[mainType] = option[mainType] == null ? clone(componentOption) : merge(option[mainType], componentOption, true);\n } else if (mainType) {\n newCmptTypes.push(mainType);\n newCmptTypeMap.set(mainType, true);\n }\n });\n\n if (replaceMergeMainTypeMap) {\n // If there is a mainType `xxx` in `replaceMerge` but not declared in option,\n // we trade it as it is declared in option as `{xxx: []}`. Because:\n // (1) for normal merge, `{xxx: null/undefined}` are the same meaning as `{xxx: []}`.\n // (2) some preprocessor may convert some of `{xxx: null/undefined}` to `{xxx: []}`.\n replaceMergeMainTypeMap.each(function (val, mainTypeInReplaceMerge) {\n if (ComponentModel.hasClass(mainTypeInReplaceMerge) && !newCmptTypeMap.get(mainTypeInReplaceMerge)) {\n newCmptTypes.push(mainTypeInReplaceMerge);\n newCmptTypeMap.set(mainTypeInReplaceMerge, true);\n }\n });\n }\n\n ComponentModel.topologicalTravel(newCmptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this);\n\n function visitComponent(mainType) {\n var newCmptOptionList = concatInternalOptions(this, mainType, modelUtil.normalizeToArray(newOption[mainType]));\n var oldCmptList = componentsMap.get(mainType);\n var mergeMode = // `!oldCmptList` means init. See the comment in `mappingToExists`\n !oldCmptList ? 'replaceAll' : replaceMergeMainTypeMap && replaceMergeMainTypeMap.get(mainType) ? 'replaceMerge' : 'normalMerge';\n var mappingResult = modelUtil.mappingToExists(oldCmptList, newCmptOptionList, mergeMode); // Set mainType and complete subType.\n\n modelUtil.setComponentTypeToKeyInfo(mappingResult, mainType, ComponentModel); // Empty it before the travel, in order to prevent `this._componentsMap`\n // from being used in the `init`/`mergeOption`/`optionUpdated` of some\n // components, which is probably incorrect logic.\n\n option[mainType] = null;\n componentsMap.set(mainType, null);\n componentsCount.set(mainType, 0);\n var optionsByMainType = [];\n var cmptsByMainType = [];\n var cmptsCountByMainType = 0;\n each(mappingResult, function (resultItem, index) {\n var componentModel = resultItem.existing;\n var newCmptOption = resultItem.newOption;\n\n if (!newCmptOption) {\n if (componentModel) {\n // Consider where is no new option and should be merged using {},\n // see removeEdgeAndAdd in topologicalTravel and\n // ComponentModel.getAllClassMainTypes.\n componentModel.mergeOption({}, this);\n componentModel.optionUpdated({}, false);\n } // If no both `resultItem.exist` and `resultItem.option`,\n // either it is in `replaceMerge` and not matched by any id,\n // or it has been removed in previous `replaceMerge` and left a \"hole\" in this component index.\n\n } else {\n var isSeriesType = mainType === 'series';\n var ComponentModelClass = ComponentModel.getClass(mainType, resultItem.keyInfo.subType, !isSeriesType // Give a more detailed warn later if series don't exists\n );\n\n if (!ComponentModelClass) {\n if (process.env.NODE_ENV !== 'production') {\n var subType = resultItem.keyInfo.subType;\n var seriesImportName = BUILTIN_CHARTS_MAP[subType];\n\n if (!componetsMissingLogPrinted[subType]) {\n componetsMissingLogPrinted[subType] = true;\n\n if (seriesImportName) {\n error(\"Series \" + subType + \" is used but not imported.\\nimport { \" + seriesImportName + \" } from 'echarts/charts';\\necharts.use([\" + seriesImportName + \"]);\");\n } else {\n error(\"Unkown series \" + subType);\n }\n }\n }\n\n return;\n }\n\n if (componentModel && componentModel.constructor === ComponentModelClass) {\n componentModel.name = resultItem.keyInfo.name; // componentModel.settingTask && componentModel.settingTask.dirty();\n\n componentModel.mergeOption(newCmptOption, this);\n componentModel.optionUpdated(newCmptOption, false);\n } else {\n // PENDING Global as parent ?\n var extraOpt = extend({\n componentIndex: index\n }, resultItem.keyInfo);\n componentModel = new ComponentModelClass(newCmptOption, this, this, extraOpt); // Assign `keyInfo`\n\n extend(componentModel, extraOpt);\n\n if (resultItem.brandNew) {\n componentModel.__requireNewView = true;\n }\n\n componentModel.init(newCmptOption, this, this); // Call optionUpdated after init.\n // newCmptOption has been used as componentModel.option\n // and may be merged with theme and default, so pass null\n // to avoid confusion.\n\n componentModel.optionUpdated(null, true);\n }\n }\n\n if (componentModel) {\n optionsByMainType.push(componentModel.option);\n cmptsByMainType.push(componentModel);\n cmptsCountByMainType++;\n } else {\n // Always do assign to avoid elided item in array.\n optionsByMainType.push(void 0);\n cmptsByMainType.push(void 0);\n }\n }, this);\n option[mainType] = optionsByMainType;\n componentsMap.set(mainType, cmptsByMainType);\n componentsCount.set(mainType, cmptsCountByMainType); // Backup series for filtering.\n\n if (mainType === 'series') {\n reCreateSeriesIndices(this);\n }\n } // If no series declared, ensure `_seriesIndices` initialized.\n\n\n if (!this._seriesIndices) {\n reCreateSeriesIndices(this);\n }\n };\n /**\n * Get option for output (cloned option and inner info removed)\n */\n\n\n GlobalModel.prototype.getOption = function () {\n var option = clone(this.option);\n each(option, function (optInMainType, mainType) {\n if (ComponentModel.hasClass(mainType)) {\n var opts = modelUtil.normalizeToArray(optInMainType); // Inner cmpts need to be removed.\n // Inner cmpts might not be at last since ec5.0, but still\n // compatible for users: if inner cmpt at last, splice the returned array.\n\n var realLen = opts.length;\n var metNonInner = false;\n\n for (var i = realLen - 1; i >= 0; i--) {\n // Remove options with inner id.\n if (opts[i] && !modelUtil.isComponentIdInternal(opts[i])) {\n metNonInner = true;\n } else {\n opts[i] = null;\n !metNonInner && realLen--;\n }\n }\n\n opts.length = realLen;\n option[mainType] = opts;\n }\n });\n delete option[OPTION_INNER_KEY];\n return option;\n };\n\n GlobalModel.prototype.getTheme = function () {\n return this._theme;\n };\n\n GlobalModel.prototype.getLocaleModel = function () {\n return this._locale;\n };\n\n GlobalModel.prototype.setUpdatePayload = function (payload) {\n this._payload = payload;\n };\n\n GlobalModel.prototype.getUpdatePayload = function () {\n return this._payload;\n };\n /**\n * @param idx If not specified, return the first one.\n */\n\n\n GlobalModel.prototype.getComponent = function (mainType, idx) {\n var list = this._componentsMap.get(mainType);\n\n if (list) {\n var cmpt = list[idx || 0];\n\n if (cmpt) {\n return cmpt;\n } else if (idx == null) {\n for (var i = 0; i < list.length; i++) {\n if (list[i]) {\n return list[i];\n }\n }\n }\n }\n };\n /**\n * @return Never be null/undefined.\n */\n\n\n GlobalModel.prototype.queryComponents = function (condition) {\n var mainType = condition.mainType;\n\n if (!mainType) {\n return [];\n }\n\n var index = condition.index;\n var id = condition.id;\n var name = condition.name;\n\n var cmpts = this._componentsMap.get(mainType);\n\n if (!cmpts || !cmpts.length) {\n return [];\n }\n\n var result;\n\n if (index != null) {\n result = [];\n each(modelUtil.normalizeToArray(index), function (idx) {\n cmpts[idx] && result.push(cmpts[idx]);\n });\n } else if (id != null) {\n result = queryByIdOrName('id', id, cmpts);\n } else if (name != null) {\n result = queryByIdOrName('name', name, cmpts);\n } else {\n // Return all non-empty components in that mainType\n result = filter(cmpts, function (cmpt) {\n return !!cmpt;\n });\n }\n\n return filterBySubType(result, condition);\n };\n /**\n * The interface is different from queryComponents,\n * which is convenient for inner usage.\n *\n * @usage\n * let result = findComponents(\n * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}\n * );\n * let result = findComponents(\n * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}}\n * );\n * let result = findComponents(\n * {mainType: 'series',\n * filter: function (model, index) {...}}\n * );\n * // result like [component0, componnet1, ...]\n */\n\n\n GlobalModel.prototype.findComponents = function (condition) {\n var query = condition.query;\n var mainType = condition.mainType;\n var queryCond = getQueryCond(query);\n var result = queryCond ? this.queryComponents(queryCond) // Retrieve all non-empty components.\n : filter(this._componentsMap.get(mainType), function (cmpt) {\n return !!cmpt;\n });\n return doFilter(filterBySubType(result, condition));\n\n function getQueryCond(q) {\n var indexAttr = mainType + 'Index';\n var idAttr = mainType + 'Id';\n var nameAttr = mainType + 'Name';\n return q && (q[indexAttr] != null || q[idAttr] != null || q[nameAttr] != null) ? {\n mainType: mainType,\n // subType will be filtered finally.\n index: q[indexAttr],\n id: q[idAttr],\n name: q[nameAttr]\n } : null;\n }\n\n function doFilter(res) {\n return condition.filter ? filter(res, condition.filter) : res;\n }\n };\n\n GlobalModel.prototype.eachComponent = function (mainType, cb, context) {\n var componentsMap = this._componentsMap;\n\n if (isFunction(mainType)) {\n var ctxForAll_1 = cb;\n var cbForAll_1 = mainType;\n componentsMap.each(function (cmpts, componentType) {\n for (var i = 0; cmpts && i < cmpts.length; i++) {\n var cmpt = cmpts[i];\n cmpt && cbForAll_1.call(ctxForAll_1, componentType, cmpt, cmpt.componentIndex);\n }\n });\n } else {\n var cmpts = isString(mainType) ? componentsMap.get(mainType) : isObject(mainType) ? this.findComponents(mainType) : null;\n\n for (var i = 0; cmpts && i < cmpts.length; i++) {\n var cmpt = cmpts[i];\n cmpt && cb.call(context, cmpt, cmpt.componentIndex);\n }\n }\n };\n /**\n * Get series list before filtered by name.\n */\n\n\n GlobalModel.prototype.getSeriesByName = function (name) {\n var nameStr = modelUtil.convertOptionIdName(name, null);\n return filter(this._componentsMap.get('series'), function (oneSeries) {\n return !!oneSeries && nameStr != null && oneSeries.name === nameStr;\n });\n };\n /**\n * Get series list before filtered by index.\n */\n\n\n GlobalModel.prototype.getSeriesByIndex = function (seriesIndex) {\n return this._componentsMap.get('series')[seriesIndex];\n };\n /**\n * Get series list before filtered by type.\n * FIXME: rename to getRawSeriesByType?\n */\n\n\n GlobalModel.prototype.getSeriesByType = function (subType) {\n return filter(this._componentsMap.get('series'), function (oneSeries) {\n return !!oneSeries && oneSeries.subType === subType;\n });\n };\n /**\n * Get all series before filtered.\n */\n\n\n GlobalModel.prototype.getSeries = function () {\n return filter(this._componentsMap.get('series'), function (oneSeries) {\n return !!oneSeries;\n });\n };\n /**\n * Count series before filtered.\n */\n\n\n GlobalModel.prototype.getSeriesCount = function () {\n return this._componentsCount.get('series');\n };\n /**\n * After filtering, series may be different\n * frome raw series.\n */\n\n\n GlobalModel.prototype.eachSeries = function (cb, context) {\n assertSeriesInitialized(this);\n each(this._seriesIndices, function (rawSeriesIndex) {\n var series = this._componentsMap.get('series')[rawSeriesIndex];\n\n cb.call(context, series, rawSeriesIndex);\n }, this);\n };\n /**\n * Iterate raw series before filtered.\n *\n * @param {Function} cb\n * @param {*} context\n */\n\n\n GlobalModel.prototype.eachRawSeries = function (cb, context) {\n each(this._componentsMap.get('series'), function (series) {\n series && cb.call(context, series, series.componentIndex);\n });\n };\n /**\n * After filtering, series may be different.\n * frome raw series.\n */\n\n\n GlobalModel.prototype.eachSeriesByType = function (subType, cb, context) {\n assertSeriesInitialized(this);\n each(this._seriesIndices, function (rawSeriesIndex) {\n var series = this._componentsMap.get('series')[rawSeriesIndex];\n\n if (series.subType === subType) {\n cb.call(context, series, rawSeriesIndex);\n }\n }, this);\n };\n /**\n * Iterate raw series before filtered of given type.\n */\n\n\n GlobalModel.prototype.eachRawSeriesByType = function (subType, cb, context) {\n return each(this.getSeriesByType(subType), cb, context);\n };\n\n GlobalModel.prototype.isSeriesFiltered = function (seriesModel) {\n assertSeriesInitialized(this);\n return this._seriesIndicesMap.get(seriesModel.componentIndex) == null;\n };\n\n GlobalModel.prototype.getCurrentSeriesIndices = function () {\n return (this._seriesIndices || []).slice();\n };\n\n GlobalModel.prototype.filterSeries = function (cb, context) {\n assertSeriesInitialized(this);\n var newSeriesIndices = [];\n each(this._seriesIndices, function (seriesRawIdx) {\n var series = this._componentsMap.get('series')[seriesRawIdx];\n\n cb.call(context, series, seriesRawIdx) && newSeriesIndices.push(seriesRawIdx);\n }, this);\n this._seriesIndices = newSeriesIndices;\n this._seriesIndicesMap = createHashMap(newSeriesIndices);\n };\n\n GlobalModel.prototype.restoreData = function (payload) {\n reCreateSeriesIndices(this);\n var componentsMap = this._componentsMap;\n var componentTypes = [];\n componentsMap.each(function (components, componentType) {\n if (ComponentModel.hasClass(componentType)) {\n componentTypes.push(componentType);\n }\n });\n ComponentModel.topologicalTravel(componentTypes, ComponentModel.getAllClassMainTypes(), function (componentType) {\n each(componentsMap.get(componentType), function (component) {\n if (component && (componentType !== 'series' || !isNotTargetSeries(component, payload))) {\n component.restoreData();\n }\n });\n });\n };\n\n GlobalModel.internalField = function () {\n reCreateSeriesIndices = function (ecModel) {\n var seriesIndices = ecModel._seriesIndices = [];\n each(ecModel._componentsMap.get('series'), function (series) {\n // series may have been removed by `replaceMerge`.\n series && seriesIndices.push(series.componentIndex);\n });\n ecModel._seriesIndicesMap = createHashMap(seriesIndices);\n };\n\n assertSeriesInitialized = function (ecModel) {\n // Components that use _seriesIndices should depends on series component,\n // which make sure that their initialization is after series.\n if (process.env.NODE_ENV !== 'production') {\n if (!ecModel._seriesIndices) {\n throw new Error('Option should contains series.');\n }\n }\n };\n\n initBase = function (ecModel, baseOption) {\n // Using OPTION_INNER_KEY to mark that this option can not be used outside,\n // i.e. `chart.setOption(chart.getModel().option);` is forbiden.\n ecModel.option = {};\n ecModel.option[OPTION_INNER_KEY] = OPTION_INNER_VALUE; // Init with series: [], in case of calling findSeries method\n // before series initialized.\n\n ecModel._componentsMap = createHashMap({\n series: []\n });\n ecModel._componentsCount = createHashMap(); // If user spefied `option.aria`, aria will be enable. This detection should be\n // performed before theme and globalDefault merge.\n\n var airaOption = baseOption.aria;\n\n if (isObject(airaOption) && airaOption.enabled == null) {\n airaOption.enabled = true;\n }\n\n mergeTheme(baseOption, ecModel._theme.option); // TODO Needs clone when merging to the unexisted property\n\n merge(baseOption, globalDefault, false);\n\n ecModel._mergeOption(baseOption, null);\n };\n }();\n\n return GlobalModel;\n}(Model);\n\nfunction isNotTargetSeries(seriesModel, payload) {\n if (payload) {\n var index = payload.seriesIndex;\n var id = payload.seriesId;\n var name_1 = payload.seriesName;\n return index != null && seriesModel.componentIndex !== index || id != null && seriesModel.id !== id || name_1 != null && seriesModel.name !== name_1;\n }\n}\n\nfunction mergeTheme(option, theme) {\n // PENDING\n // NOT use `colorLayer` in theme if option has `color`\n var notMergeColorLayer = option.color && !option.colorLayer;\n each(theme, function (themeItem, name) {\n if (name === 'colorLayer' && notMergeColorLayer) {\n return;\n } // If it is component model mainType, the model handles that merge later.\n // otherwise, merge them here.\n\n\n if (!ComponentModel.hasClass(name)) {\n if (typeof themeItem === 'object') {\n option[name] = !option[name] ? clone(themeItem) : merge(option[name], themeItem, false);\n } else {\n if (option[name] == null) {\n option[name] = themeItem;\n }\n }\n }\n });\n}\n\nfunction queryByIdOrName(attr, idOrName, cmpts) {\n // Here is a break from echarts4: string and number are\n // treated as equal.\n if (isArray(idOrName)) {\n var keyMap_1 = createHashMap();\n each(idOrName, function (idOrNameItem) {\n if (idOrNameItem != null) {\n var idName = modelUtil.convertOptionIdName(idOrNameItem, null);\n idName != null && keyMap_1.set(idOrNameItem, true);\n }\n });\n return filter(cmpts, function (cmpt) {\n return cmpt && keyMap_1.get(cmpt[attr]);\n });\n } else {\n var idName_1 = modelUtil.convertOptionIdName(idOrName, null);\n return filter(cmpts, function (cmpt) {\n return cmpt && idName_1 != null && cmpt[attr] === idName_1;\n });\n }\n}\n\nfunction filterBySubType(components, condition) {\n // Using hasOwnProperty for restrict. Consider\n // subType is undefined in user payload.\n return condition.hasOwnProperty('subType') ? filter(components, function (cmpt) {\n return cmpt && cmpt.subType === condition.subType;\n }) : components;\n}\n\nfunction normalizeSetOptionInput(opts) {\n var replaceMergeMainTypeMap = createHashMap();\n opts && each(modelUtil.normalizeToArray(opts.replaceMerge), function (mainType) {\n if (process.env.NODE_ENV !== 'production') {\n assert(ComponentModel.hasClass(mainType), '\"' + mainType + '\" is not valid component main type in \"replaceMerge\"');\n }\n\n replaceMergeMainTypeMap.set(mainType, true);\n });\n return {\n replaceMergeMainTypeMap: replaceMergeMainTypeMap\n };\n}\n\nmixin(GlobalModel, PaletteMixin);\nexport default GlobalModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isFunction, extend, createHashMap } from 'zrender/lib/core/util';\nimport makeStyleMapper from '../model/mixin/makeStyleMapper';\nimport { ITEM_STYLE_KEY_MAP } from '../model/mixin/itemStyle';\nimport { LINE_STYLE_KEY_MAP } from '../model/mixin/lineStyle';\nimport Model from '../model/Model';\nimport { makeInner } from '../util/model';\nvar inner = makeInner();\nvar defaultStyleMappers = {\n itemStyle: makeStyleMapper(ITEM_STYLE_KEY_MAP, true),\n lineStyle: makeStyleMapper(LINE_STYLE_KEY_MAP, true)\n};\nvar defaultColorKey = {\n lineStyle: 'stroke',\n itemStyle: 'fill'\n};\n\nfunction getStyleMapper(seriesModel, stylePath) {\n var styleMapper = seriesModel.visualStyleMapper || defaultStyleMappers[stylePath];\n\n if (!styleMapper) {\n console.warn(\"Unkown style type '\" + stylePath + \"'.\");\n return defaultStyleMappers.itemStyle;\n }\n\n return styleMapper;\n}\n\nfunction getDefaultColorKey(seriesModel, stylePath) {\n // return defaultColorKey[stylePath] ||\n var colorKey = seriesModel.visualDrawType || defaultColorKey[stylePath];\n\n if (!colorKey) {\n console.warn(\"Unkown style type '\" + stylePath + \"'.\");\n return 'fill';\n }\n\n return colorKey;\n}\n\nvar seriesStyleTask = {\n createOnAllSeries: true,\n performRawSeries: true,\n reset: function (seriesModel, ecModel) {\n var data = seriesModel.getData();\n var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; // Set in itemStyle\n\n var styleModel = seriesModel.getModel(stylePath);\n var getStyle = getStyleMapper(seriesModel, stylePath);\n var globalStyle = getStyle(styleModel);\n var decalOption = styleModel.getShallow('decal');\n\n if (decalOption) {\n data.setVisual('decal', decalOption);\n decalOption.dirty = true;\n } // TODO\n\n\n var colorKey = getDefaultColorKey(seriesModel, stylePath);\n var color = globalStyle[colorKey]; // TODO style callback\n\n var colorCallback = isFunction(color) ? color : null;\n var hasAutoColor = globalStyle.fill === 'auto' || globalStyle.stroke === 'auto'; // Get from color palette by default.\n\n if (!globalStyle[colorKey] || colorCallback || hasAutoColor) {\n // Note: if some series has color specified (e.g., by itemStyle.color), we DO NOT\n // make it effect palette. Bacause some scenarios users need to make some series\n // transparent or as background, which should better not effect the palette.\n var colorPalette = seriesModel.getColorFromPalette( // TODO series count changed.\n seriesModel.name, null, ecModel.getSeriesCount());\n\n if (!globalStyle[colorKey]) {\n globalStyle[colorKey] = colorPalette;\n data.setVisual('colorFromPalette', true);\n }\n\n globalStyle.fill = globalStyle.fill === 'auto' || typeof globalStyle.fill === 'function' ? colorPalette : globalStyle.fill;\n globalStyle.stroke = globalStyle.stroke === 'auto' || typeof globalStyle.stroke === 'function' ? colorPalette : globalStyle.stroke;\n }\n\n data.setVisual('style', globalStyle);\n data.setVisual('drawType', colorKey); // Only visible series has each data be visual encoded\n\n if (!ecModel.isSeriesFiltered(seriesModel) && colorCallback) {\n data.setVisual('colorFromPalette', false);\n return {\n dataEach: function (data, idx) {\n var dataParams = seriesModel.getDataParams(idx);\n var itemStyle = extend({}, globalStyle);\n itemStyle[colorKey] = colorCallback(dataParams);\n data.setItemVisual(idx, 'style', itemStyle);\n }\n };\n }\n }\n};\nvar sharedModel = new Model();\nvar dataStyleTask = {\n createOnAllSeries: true,\n performRawSeries: true,\n reset: function (seriesModel, ecModel) {\n if (seriesModel.ignoreStyleOnData || ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n\n var data = seriesModel.getData();\n var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle'; // Set in itemStyle\n\n var getStyle = getStyleMapper(seriesModel, stylePath);\n var colorKey = data.getVisual('drawType');\n return {\n dataEach: data.hasItemOption ? function (data, idx) {\n // Not use getItemModel for performance considuration\n var rawItem = data.getRawDataItem(idx);\n\n if (rawItem && rawItem[stylePath]) {\n sharedModel.option = rawItem[stylePath];\n var style = getStyle(sharedModel);\n var existsStyle = data.ensureUniqueItemVisual(idx, 'style');\n extend(existsStyle, style);\n\n if (sharedModel.option.decal) {\n data.setItemVisual(idx, 'decal', sharedModel.option.decal);\n sharedModel.option.decal.dirty = true;\n }\n\n if (colorKey in style) {\n data.setItemVisual(idx, 'colorFromPalette', false);\n }\n }\n } : null\n };\n }\n}; // Pick color from palette for the data which has not been set with color yet.\n// Note: do not support stream rendering. No such cases yet.\n\nvar dataColorPaletteTask = {\n performRawSeries: true,\n overallReset: function (ecModel) {\n // Each type of series use one scope.\n // Pie and funnel are using diferrent scopes\n var paletteScopeGroupByType = createHashMap();\n ecModel.eachSeries(function (seriesModel) {\n var colorBy = seriesModel.getColorBy();\n\n if (seriesModel.isColorBySeries()) {\n return;\n }\n\n var key = seriesModel.type + '-' + colorBy;\n var colorScope = paletteScopeGroupByType.get(key);\n\n if (!colorScope) {\n colorScope = {};\n paletteScopeGroupByType.set(key, colorScope);\n }\n\n inner(seriesModel).scope = colorScope;\n });\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.isColorBySeries() || ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n\n var dataAll = seriesModel.getRawData();\n var idxMap = {};\n var data = seriesModel.getData();\n var colorScope = inner(seriesModel).scope;\n var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle';\n var colorKey = getDefaultColorKey(seriesModel, stylePath);\n data.each(function (idx) {\n var rawIdx = data.getRawIndex(idx);\n idxMap[rawIdx] = idx;\n }); // Iterate on data before filtered. To make sure color from palette can be\n // Consistent when toggling legend.\n\n dataAll.each(function (rawIdx) {\n var idx = idxMap[rawIdx];\n var fromPalette = data.getItemVisual(idx, 'colorFromPalette'); // Get color from palette for each data only when the color is inherited from series color, which is\n // also picked from color palette. So following situation is not in the case:\n // 1. series.itemStyle.color is set\n // 2. color is encoded by visualMap\n\n if (fromPalette) {\n var itemStyle = data.ensureUniqueItemVisual(idx, 'style');\n var name_1 = dataAll.getName(rawIdx) || rawIdx + '';\n var dataCount = dataAll.count();\n itemStyle[colorKey] = seriesModel.getColorFromPalette(name_1, colorScope, dataCount);\n }\n });\n });\n }\n};\nexport { seriesStyleTask, dataStyleTask, dataColorPaletteTask };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Symbol factory\nimport { each, isArray, retrieve2 } from 'zrender/lib/core/util';\nimport * as graphic from './graphic';\nimport BoundingRect from 'zrender/lib/core/BoundingRect';\nimport { calculateTextPosition } from 'zrender/lib/contain/text';\nimport { parsePercent } from './number';\n/**\n * Triangle shape\n * @inner\n */\n\nvar Triangle = graphic.Path.extend({\n type: 'triangle',\n shape: {\n cx: 0,\n cy: 0,\n width: 0,\n height: 0\n },\n buildPath: function (path, shape) {\n var cx = shape.cx;\n var cy = shape.cy;\n var width = shape.width / 2;\n var height = shape.height / 2;\n path.moveTo(cx, cy - height);\n path.lineTo(cx + width, cy + height);\n path.lineTo(cx - width, cy + height);\n path.closePath();\n }\n});\n/**\n * Diamond shape\n * @inner\n */\n\nvar Diamond = graphic.Path.extend({\n type: 'diamond',\n shape: {\n cx: 0,\n cy: 0,\n width: 0,\n height: 0\n },\n buildPath: function (path, shape) {\n var cx = shape.cx;\n var cy = shape.cy;\n var width = shape.width / 2;\n var height = shape.height / 2;\n path.moveTo(cx, cy - height);\n path.lineTo(cx + width, cy);\n path.lineTo(cx, cy + height);\n path.lineTo(cx - width, cy);\n path.closePath();\n }\n});\n/**\n * Pin shape\n * @inner\n */\n\nvar Pin = graphic.Path.extend({\n type: 'pin',\n shape: {\n // x, y on the cusp\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n buildPath: function (path, shape) {\n var x = shape.x;\n var y = shape.y;\n var w = shape.width / 5 * 3; // Height must be larger than width\n\n var h = Math.max(w, shape.height);\n var r = w / 2; // Dist on y with tangent point and circle center\n\n var dy = r * r / (h - r);\n var cy = y - h + r + dy;\n var angle = Math.asin(dy / r); // Dist on x with tangent point and circle center\n\n var dx = Math.cos(angle) * r;\n var tanX = Math.sin(angle);\n var tanY = Math.cos(angle);\n var cpLen = r * 0.6;\n var cpLen2 = r * 0.7;\n path.moveTo(x - dx, cy + dy);\n path.arc(x, cy, r, Math.PI - angle, Math.PI * 2 + angle);\n path.bezierCurveTo(x + dx - tanX * cpLen, cy + dy + tanY * cpLen, x, y - cpLen2, x, y);\n path.bezierCurveTo(x, y - cpLen2, x - dx + tanX * cpLen, cy + dy + tanY * cpLen, x - dx, cy + dy);\n path.closePath();\n }\n});\n/**\n * Arrow shape\n * @inner\n */\n\nvar Arrow = graphic.Path.extend({\n type: 'arrow',\n shape: {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n buildPath: function (ctx, shape) {\n var height = shape.height;\n var width = shape.width;\n var x = shape.x;\n var y = shape.y;\n var dx = width / 3 * 2;\n ctx.moveTo(x, y);\n ctx.lineTo(x + dx, y + height);\n ctx.lineTo(x, y + height / 4 * 3);\n ctx.lineTo(x - dx, y + height);\n ctx.lineTo(x, y);\n ctx.closePath();\n }\n});\n/**\n * Map of path contructors\n */\n// TODO Use function to build symbol path.\n\nvar symbolCtors = {\n line: graphic.Line,\n rect: graphic.Rect,\n roundRect: graphic.Rect,\n square: graphic.Rect,\n circle: graphic.Circle,\n diamond: Diamond,\n pin: Pin,\n arrow: Arrow,\n triangle: Triangle\n};\nvar symbolShapeMakers = {\n line: function (x, y, w, h, shape) {\n shape.x1 = x;\n shape.y1 = y + h / 2;\n shape.x2 = x + w;\n shape.y2 = y + h / 2;\n },\n rect: function (x, y, w, h, shape) {\n shape.x = x;\n shape.y = y;\n shape.width = w;\n shape.height = h;\n },\n roundRect: function (x, y, w, h, shape) {\n shape.x = x;\n shape.y = y;\n shape.width = w;\n shape.height = h;\n shape.r = Math.min(w, h) / 4;\n },\n square: function (x, y, w, h, shape) {\n var size = Math.min(w, h);\n shape.x = x;\n shape.y = y;\n shape.width = size;\n shape.height = size;\n },\n circle: function (x, y, w, h, shape) {\n // Put circle in the center of square\n shape.cx = x + w / 2;\n shape.cy = y + h / 2;\n shape.r = Math.min(w, h) / 2;\n },\n diamond: function (x, y, w, h, shape) {\n shape.cx = x + w / 2;\n shape.cy = y + h / 2;\n shape.width = w;\n shape.height = h;\n },\n pin: function (x, y, w, h, shape) {\n shape.x = x + w / 2;\n shape.y = y + h / 2;\n shape.width = w;\n shape.height = h;\n },\n arrow: function (x, y, w, h, shape) {\n shape.x = x + w / 2;\n shape.y = y + h / 2;\n shape.width = w;\n shape.height = h;\n },\n triangle: function (x, y, w, h, shape) {\n shape.cx = x + w / 2;\n shape.cy = y + h / 2;\n shape.width = w;\n shape.height = h;\n }\n};\nexport var symbolBuildProxies = {};\neach(symbolCtors, function (Ctor, name) {\n symbolBuildProxies[name] = new Ctor();\n});\nvar SymbolClz = graphic.Path.extend({\n type: 'symbol',\n shape: {\n symbolType: '',\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n calculateTextPosition: function (out, config, rect) {\n var res = calculateTextPosition(out, config, rect);\n var shape = this.shape;\n\n if (shape && shape.symbolType === 'pin' && config.position === 'inside') {\n res.y = rect.y + rect.height * 0.4;\n }\n\n return res;\n },\n buildPath: function (ctx, shape, inBundle) {\n var symbolType = shape.symbolType;\n\n if (symbolType !== 'none') {\n var proxySymbol = symbolBuildProxies[symbolType];\n\n if (!proxySymbol) {\n // Default rect\n symbolType = 'rect';\n proxySymbol = symbolBuildProxies[symbolType];\n }\n\n symbolShapeMakers[symbolType](shape.x, shape.y, shape.width, shape.height, proxySymbol.shape);\n proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle);\n }\n }\n}); // Provide setColor helper method to avoid determine if set the fill or stroke outside\n\nfunction symbolPathSetColor(color, innerColor) {\n if (this.type !== 'image') {\n var symbolStyle = this.style;\n\n if (this.__isEmptyBrush) {\n symbolStyle.stroke = color;\n symbolStyle.fill = innerColor || '#fff'; // TODO Same width with lineStyle in LineView\n\n symbolStyle.lineWidth = 2;\n } else if (this.shape.symbolType === 'line') {\n symbolStyle.stroke = color;\n } else {\n symbolStyle.fill = color;\n }\n\n this.markRedraw();\n }\n}\n/**\n * Create a symbol element with given symbol configuration: shape, x, y, width, height, color\n */\n\n\nexport function createSymbol(symbolType, x, y, w, h, color, // whether to keep the ratio of w/h,\nkeepAspect) {\n // TODO Support image object, DynamicImage.\n var isEmpty = symbolType.indexOf('empty') === 0;\n\n if (isEmpty) {\n symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6);\n }\n\n var symbolPath;\n\n if (symbolType.indexOf('image://') === 0) {\n symbolPath = graphic.makeImage(symbolType.slice(8), new BoundingRect(x, y, w, h), keepAspect ? 'center' : 'cover');\n } else if (symbolType.indexOf('path://') === 0) {\n symbolPath = graphic.makePath(symbolType.slice(7), {}, new BoundingRect(x, y, w, h), keepAspect ? 'center' : 'cover');\n } else {\n symbolPath = new SymbolClz({\n shape: {\n symbolType: symbolType,\n x: x,\n y: y,\n width: w,\n height: h\n }\n });\n }\n\n symbolPath.__isEmptyBrush = isEmpty; // TODO Should deprecate setColor\n\n symbolPath.setColor = symbolPathSetColor;\n\n if (color) {\n symbolPath.setColor(color);\n }\n\n return symbolPath;\n}\nexport function normalizeSymbolSize(symbolSize) {\n if (!isArray(symbolSize)) {\n symbolSize = [+symbolSize, +symbolSize];\n }\n\n return [symbolSize[0] || 0, symbolSize[1] || 0];\n}\nexport function normalizeSymbolOffset(symbolOffset, symbolSize) {\n if (symbolOffset == null) {\n return;\n }\n\n if (!isArray(symbolOffset)) {\n symbolOffset = [symbolOffset, symbolOffset];\n }\n\n return [parsePercent(symbolOffset[0], symbolSize[0]) || 0, parsePercent(retrieve2(symbolOffset[1], symbolOffset[0]), symbolSize[1]) || 0];\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport Group from 'zrender/lib/graphic/Group';\nimport * as componentUtil from '../util/component';\nimport * as clazzUtil from '../util/clazz';\n\nvar ComponentView =\n/** @class */\nfunction () {\n function ComponentView() {\n this.group = new Group();\n this.uid = componentUtil.getUID('viewComponent');\n }\n\n ComponentView.prototype.init = function (ecModel, api) {};\n\n ComponentView.prototype.render = function (model, ecModel, api, payload) {};\n\n ComponentView.prototype.dispose = function (ecModel, api) {};\n\n ComponentView.prototype.updateView = function (model, ecModel, api, payload) {// Do nothing;\n };\n\n ComponentView.prototype.updateLayout = function (model, ecModel, api, payload) {// Do nothing;\n };\n\n ComponentView.prototype.updateVisual = function (model, ecModel, api, payload) {// Do nothing;\n };\n /**\n * Hook for blur target series.\n * Can be used in marker for blur the markers\n */\n\n\n ComponentView.prototype.blurSeries = function (seriesModels, ecModel) {// Do nothing;\n };\n\n return ComponentView;\n}();\n\n;\nclazzUtil.enableClassExtend(ComponentView);\nclazzUtil.enableClassManagement(ComponentView);\nexport default ComponentView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isFunction } from 'zrender/lib/core/util'; // Encoding visual for all series include which is filtered for legend drawing\n\nvar seriesSymbolTask = {\n createOnAllSeries: true,\n // For legend.\n performRawSeries: true,\n reset: function (seriesModel, ecModel) {\n var data = seriesModel.getData();\n\n if (seriesModel.legendIcon) {\n data.setVisual('legendIcon', seriesModel.legendIcon);\n }\n\n if (!seriesModel.hasSymbolVisual) {\n return;\n }\n\n var symbolType = seriesModel.get('symbol');\n var symbolSize = seriesModel.get('symbolSize');\n var keepAspect = seriesModel.get('symbolKeepAspect');\n var symbolRotate = seriesModel.get('symbolRotate');\n var symbolOffset = seriesModel.get('symbolOffset');\n var hasSymbolTypeCallback = isFunction(symbolType);\n var hasSymbolSizeCallback = isFunction(symbolSize);\n var hasSymbolRotateCallback = isFunction(symbolRotate);\n var hasSymbolOffsetCallback = isFunction(symbolOffset);\n var hasCallback = hasSymbolTypeCallback || hasSymbolSizeCallback || hasSymbolRotateCallback || hasSymbolOffsetCallback;\n var seriesSymbol = !hasSymbolTypeCallback && symbolType ? symbolType : seriesModel.defaultSymbol;\n var seriesSymbolSize = !hasSymbolSizeCallback ? symbolSize : null;\n var seriesSymbolRotate = !hasSymbolRotateCallback ? symbolRotate : null;\n var seriesSymbolOffset = !hasSymbolOffsetCallback ? symbolOffset : null;\n data.setVisual({\n legendIcon: seriesModel.legendIcon || seriesSymbol,\n // If seting callback functions on `symbol` or `symbolSize`, for simplicity and avoiding\n // to bring trouble, we do not pick a reuslt from one of its calling on data item here,\n // but just use the default value. Callback on `symbol` or `symbolSize` is convenient in\n // some cases but generally it is not recommanded.\n symbol: seriesSymbol,\n symbolSize: seriesSymbolSize,\n symbolKeepAspect: keepAspect,\n symbolRotate: seriesSymbolRotate,\n symbolOffset: seriesSymbolOffset\n }); // Only visible series has each data be visual encoded\n\n if (ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n\n function dataEach(data, idx) {\n var rawValue = seriesModel.getRawValue(idx);\n var params = seriesModel.getDataParams(idx);\n hasSymbolTypeCallback && data.setItemVisual(idx, 'symbol', symbolType(rawValue, params));\n hasSymbolSizeCallback && data.setItemVisual(idx, 'symbolSize', symbolSize(rawValue, params));\n hasSymbolRotateCallback && data.setItemVisual(idx, 'symbolRotate', symbolRotate(rawValue, params));\n hasSymbolOffsetCallback && data.setItemVisual(idx, 'symbolOffset', symbolOffset(rawValue, params));\n }\n\n return {\n dataEach: hasCallback ? dataEach : null\n };\n }\n};\nvar dataSymbolTask = {\n createOnAllSeries: true,\n // For legend.\n performRawSeries: true,\n reset: function (seriesModel, ecModel) {\n if (!seriesModel.hasSymbolVisual) {\n return;\n } // Only visible series has each data be visual encoded\n\n\n if (ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n\n var data = seriesModel.getData();\n\n function dataEach(data, idx) {\n var itemModel = data.getItemModel(idx);\n var itemSymbolType = itemModel.getShallow('symbol', true);\n var itemSymbolSize = itemModel.getShallow('symbolSize', true);\n var itemSymbolRotate = itemModel.getShallow('symbolRotate', true);\n var itemSymbolOffset = itemModel.getShallow('symbolOffset', true);\n var itemSymbolKeepAspect = itemModel.getShallow('symbolKeepAspect', true); // If has item symbol\n\n if (itemSymbolType != null) {\n data.setItemVisual(idx, 'symbol', itemSymbolType);\n }\n\n if (itemSymbolSize != null) {\n // PENDING Transform symbolSize ?\n data.setItemVisual(idx, 'symbolSize', itemSymbolSize);\n }\n\n if (itemSymbolRotate != null) {\n data.setItemVisual(idx, 'symbolRotate', itemSymbolRotate);\n }\n\n if (itemSymbolOffset != null) {\n data.setItemVisual(idx, 'symbolOffset', itemSymbolOffset);\n }\n\n if (itemSymbolKeepAspect != null) {\n data.setItemVisual(idx, 'symbolKeepAspect', itemSymbolKeepAspect);\n }\n }\n\n return {\n dataEach: data.hasItemOption ? dataEach : null\n };\n }\n};\nexport { seriesSymbolTask, dataSymbolTask };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { calculateTextPosition } from 'zrender/lib/contain/text';\nimport { isArray } from 'zrender/lib/core/util';\nexport function createSectorCalculateTextPosition(positionMapping, opts) {\n opts = opts || {};\n var isRoundCap = opts.isRoundCap;\n return function (out, opts, boundingRect) {\n var textPosition = opts.position;\n\n if (!textPosition || textPosition instanceof Array) {\n return calculateTextPosition(out, opts, boundingRect);\n }\n\n var mappedSectorPosition = positionMapping(textPosition);\n var distance = opts.distance != null ? opts.distance : 5;\n var sector = this.shape;\n var cx = sector.cx;\n var cy = sector.cy;\n var r = sector.r;\n var r0 = sector.r0;\n var middleR = (r + r0) / 2;\n var startAngle = sector.startAngle;\n var endAngle = sector.endAngle;\n var middleAngle = (startAngle + endAngle) / 2;\n var extraDist = isRoundCap ? Math.abs(r - r0) / 2 : 0;\n var mathCos = Math.cos;\n var mathSin = Math.sin; // base position: top-left\n\n var x = cx + r * mathCos(startAngle);\n var y = cy + r * mathSin(startAngle);\n var textAlign = 'left';\n var textVerticalAlign = 'top';\n\n switch (mappedSectorPosition) {\n case 'startArc':\n x = cx + (r0 - distance) * mathCos(middleAngle);\n y = cy + (r0 - distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'top';\n break;\n\n case 'insideStartArc':\n x = cx + (r0 + distance) * mathCos(middleAngle);\n y = cy + (r0 + distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'startAngle':\n x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, distance + extraDist, false);\n y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, distance + extraDist, false);\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideStartAngle':\n x = cx + middleR * mathCos(startAngle) + adjustAngleDistanceX(startAngle, -distance + extraDist, false);\n y = cy + middleR * mathSin(startAngle) + adjustAngleDistanceY(startAngle, -distance + extraDist, false);\n textAlign = 'left';\n textVerticalAlign = 'middle';\n break;\n\n case 'middle':\n x = cx + middleR * mathCos(middleAngle);\n y = cy + middleR * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n\n case 'endArc':\n x = cx + (r + distance) * mathCos(middleAngle);\n y = cy + (r + distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideEndArc':\n x = cx + (r - distance) * mathCos(middleAngle);\n y = cy + (r - distance) * mathSin(middleAngle);\n textAlign = 'center';\n textVerticalAlign = 'top';\n break;\n\n case 'endAngle':\n x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, distance + extraDist, true);\n y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, distance + extraDist, true);\n textAlign = 'left';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideEndAngle':\n x = cx + middleR * mathCos(endAngle) + adjustAngleDistanceX(endAngle, -distance + extraDist, true);\n y = cy + middleR * mathSin(endAngle) + adjustAngleDistanceY(endAngle, -distance + extraDist, true);\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n default:\n return calculateTextPosition(out, opts, boundingRect);\n }\n\n out = out || {};\n out.x = x;\n out.y = y;\n out.align = textAlign;\n out.verticalAlign = textVerticalAlign;\n return out;\n };\n}\nexport function setSectorTextRotation(sector, textPosition, positionMapping, rotateType) {\n if (typeof rotateType === 'number') {\n // user-set rotation\n sector.setTextConfig({\n rotation: rotateType\n });\n return;\n } else if (isArray(textPosition)) {\n // user-set position, use 0 as auto rotation\n sector.setTextConfig({\n rotation: 0\n });\n return;\n }\n\n var shape = sector.shape;\n var startAngle = shape.clockwise ? shape.startAngle : shape.endAngle;\n var endAngle = shape.clockwise ? shape.endAngle : shape.startAngle;\n var middleAngle = (startAngle + endAngle) / 2;\n var anchorAngle;\n var mappedSectorPosition = positionMapping(textPosition);\n\n switch (mappedSectorPosition) {\n case 'startArc':\n case 'insideStartArc':\n case 'middle':\n case 'insideEndArc':\n case 'endArc':\n anchorAngle = middleAngle;\n break;\n\n case 'startAngle':\n case 'insideStartAngle':\n anchorAngle = startAngle;\n break;\n\n case 'endAngle':\n case 'insideEndAngle':\n anchorAngle = endAngle;\n break;\n\n default:\n sector.setTextConfig({\n rotation: 0\n });\n return;\n }\n\n var rotate = Math.PI * 1.5 - anchorAngle;\n /**\n * TODO: labels with rotate > Math.PI / 2 should be rotate another\n * half round flipped to increase readability. However, only middle\n * position supports this for now, because in other positions, the\n * anchor point is not at the center of the text, so the positions\n * after rotating is not as expected.\n */\n\n if (mappedSectorPosition === 'middle' && rotate > Math.PI / 2 && rotate < Math.PI * 1.5) {\n rotate -= Math.PI;\n }\n\n sector.setTextConfig({\n rotation: rotate\n });\n}\n\nfunction adjustAngleDistanceX(angle, distance, isEnd) {\n return distance * Math.sin(angle) * (isEnd ? -1 : 1);\n}\n\nfunction adjustAngleDistanceY(angle, distance, isEnd) {\n return distance * Math.cos(angle) * (isEnd ? 1 : -1);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 modelUtil from '../../util/model';\nimport { deprecateLog, deprecateReplaceLog } from '../../util/log';\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\nvar POSSIBLE_STYLES = ['areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle', 'chordStyle', 'label', 'labelLine'];\n\nfunction compatEC2ItemStyle(opt) {\n var itemStyleOpt = opt && opt.itemStyle;\n\n if (!itemStyleOpt) {\n return;\n }\n\n for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) {\n var styleName = POSSIBLE_STYLES[i];\n var normalItemStyleOpt = itemStyleOpt.normal;\n var emphasisItemStyleOpt = itemStyleOpt.emphasis;\n\n if (normalItemStyleOpt && normalItemStyleOpt[styleName]) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog(\"itemStyle.normal.\" + styleName, styleName);\n }\n\n opt[styleName] = opt[styleName] || {};\n\n if (!opt[styleName].normal) {\n opt[styleName].normal = normalItemStyleOpt[styleName];\n } else {\n zrUtil.merge(opt[styleName].normal, normalItemStyleOpt[styleName]);\n }\n\n normalItemStyleOpt[styleName] = null;\n }\n\n if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog(\"itemStyle.emphasis.\" + styleName, \"emphasis.\" + styleName);\n }\n\n opt[styleName] = opt[styleName] || {};\n\n if (!opt[styleName].emphasis) {\n opt[styleName].emphasis = emphasisItemStyleOpt[styleName];\n } else {\n zrUtil.merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]);\n }\n\n emphasisItemStyleOpt[styleName] = null;\n }\n }\n}\n\nfunction convertNormalEmphasis(opt, optType, useExtend) {\n if (opt && opt[optType] && (opt[optType].normal || opt[optType].emphasis)) {\n var normalOpt = opt[optType].normal;\n var emphasisOpt = opt[optType].emphasis;\n\n if (normalOpt) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line max-len\n deprecateLog(\"'normal' hierarchy in \" + optType + \" has been removed since 4.0. All style properties are configured in \" + optType + \" directly now.\");\n } // Timeline controlStyle has other properties besides normal and emphasis\n\n\n if (useExtend) {\n opt[optType].normal = opt[optType].emphasis = null;\n zrUtil.defaults(opt[optType], normalOpt);\n } else {\n opt[optType] = normalOpt;\n }\n }\n\n if (emphasisOpt) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog(optType + \".emphasis has been changed to emphasis.\" + optType + \" since 4.0\");\n }\n\n opt.emphasis = opt.emphasis || {};\n opt.emphasis[optType] = emphasisOpt; // Also compat the case user mix the style and focus together in ec3 style\n // for example: { itemStyle: { normal: {}, emphasis: {focus, shadowBlur} } }\n\n if (emphasisOpt.focus) {\n opt.emphasis.focus = emphasisOpt.focus;\n }\n\n if (emphasisOpt.blurScope) {\n opt.emphasis.blurScope = emphasisOpt.blurScope;\n }\n }\n }\n}\n\nfunction removeEC3NormalStatus(opt) {\n convertNormalEmphasis(opt, 'itemStyle');\n convertNormalEmphasis(opt, 'lineStyle');\n convertNormalEmphasis(opt, 'areaStyle');\n convertNormalEmphasis(opt, 'label');\n convertNormalEmphasis(opt, 'labelLine'); // treemap\n\n convertNormalEmphasis(opt, 'upperLabel'); // graph\n\n convertNormalEmphasis(opt, 'edgeLabel');\n}\n\nfunction compatTextStyle(opt, propName) {\n // Check whether is not object (string\\null\\undefined ...)\n var labelOptSingle = isObject(opt) && opt[propName];\n var textStyle = isObject(labelOptSingle) && labelOptSingle.textStyle;\n\n if (textStyle) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line max-len\n deprecateLog(\"textStyle hierarchy in \" + propName + \" has been removed since 4.0. All textStyle properties are configured in \" + propName + \" directly now.\");\n }\n\n for (var i = 0, len = modelUtil.TEXT_STYLE_OPTIONS.length; i < len; i++) {\n var textPropName = modelUtil.TEXT_STYLE_OPTIONS[i];\n\n if (textStyle.hasOwnProperty(textPropName)) {\n labelOptSingle[textPropName] = textStyle[textPropName];\n }\n }\n }\n}\n\nfunction compatEC3CommonStyles(opt) {\n if (opt) {\n removeEC3NormalStatus(opt);\n compatTextStyle(opt, 'label');\n opt.emphasis && compatTextStyle(opt.emphasis, 'label');\n }\n}\n\nfunction processSeries(seriesOpt) {\n if (!isObject(seriesOpt)) {\n return;\n }\n\n compatEC2ItemStyle(seriesOpt);\n removeEC3NormalStatus(seriesOpt);\n compatTextStyle(seriesOpt, 'label'); // treemap\n\n compatTextStyle(seriesOpt, 'upperLabel'); // graph\n\n compatTextStyle(seriesOpt, 'edgeLabel');\n\n if (seriesOpt.emphasis) {\n compatTextStyle(seriesOpt.emphasis, 'label'); // treemap\n\n compatTextStyle(seriesOpt.emphasis, 'upperLabel'); // graph\n\n compatTextStyle(seriesOpt.emphasis, 'edgeLabel');\n }\n\n var markPoint = seriesOpt.markPoint;\n\n if (markPoint) {\n compatEC2ItemStyle(markPoint);\n compatEC3CommonStyles(markPoint);\n }\n\n var markLine = seriesOpt.markLine;\n\n if (markLine) {\n compatEC2ItemStyle(markLine);\n compatEC3CommonStyles(markLine);\n }\n\n var markArea = seriesOpt.markArea;\n\n if (markArea) {\n compatEC3CommonStyles(markArea);\n }\n\n var data = seriesOpt.data; // Break with ec3: if `setOption` again, there may be no `type` in option,\n // then the backward compat based on option type will not be performed.\n\n if (seriesOpt.type === 'graph') {\n data = data || seriesOpt.nodes;\n var edgeData = seriesOpt.links || seriesOpt.edges;\n\n if (edgeData && !zrUtil.isTypedArray(edgeData)) {\n for (var i = 0; i < edgeData.length; i++) {\n compatEC3CommonStyles(edgeData[i]);\n }\n }\n\n zrUtil.each(seriesOpt.categories, function (opt) {\n removeEC3NormalStatus(opt);\n });\n }\n\n if (data && !zrUtil.isTypedArray(data)) {\n for (var i = 0; i < data.length; i++) {\n compatEC3CommonStyles(data[i]);\n }\n } // mark point data\n\n\n markPoint = seriesOpt.markPoint;\n\n if (markPoint && markPoint.data) {\n var mpData = markPoint.data;\n\n for (var i = 0; i < mpData.length; i++) {\n compatEC3CommonStyles(mpData[i]);\n }\n } // mark line data\n\n\n markLine = seriesOpt.markLine;\n\n if (markLine && markLine.data) {\n var mlData = markLine.data;\n\n for (var i = 0; i < mlData.length; i++) {\n if (zrUtil.isArray(mlData[i])) {\n compatEC3CommonStyles(mlData[i][0]);\n compatEC3CommonStyles(mlData[i][1]);\n } else {\n compatEC3CommonStyles(mlData[i]);\n }\n }\n } // Series\n\n\n if (seriesOpt.type === 'gauge') {\n compatTextStyle(seriesOpt, 'axisLabel');\n compatTextStyle(seriesOpt, 'title');\n compatTextStyle(seriesOpt, 'detail');\n } else if (seriesOpt.type === 'treemap') {\n convertNormalEmphasis(seriesOpt.breadcrumb, 'itemStyle');\n zrUtil.each(seriesOpt.levels, function (opt) {\n removeEC3NormalStatus(opt);\n });\n } else if (seriesOpt.type === 'tree') {\n removeEC3NormalStatus(seriesOpt.leaves);\n } // sunburst starts from ec4, so it does not need to compat levels.\n\n}\n\nfunction toArr(o) {\n return zrUtil.isArray(o) ? o : o ? [o] : [];\n}\n\nfunction toObj(o) {\n return (zrUtil.isArray(o) ? o[0] : o) || {};\n}\n\nexport default function globalCompatStyle(option, isTheme) {\n each(toArr(option.series), function (seriesOpt) {\n isObject(seriesOpt) && processSeries(seriesOpt);\n });\n var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar'];\n isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis');\n each(axes, function (axisName) {\n each(toArr(option[axisName]), function (axisOpt) {\n if (axisOpt) {\n compatTextStyle(axisOpt, 'axisLabel');\n compatTextStyle(axisOpt.axisPointer, 'label');\n }\n });\n });\n each(toArr(option.parallel), function (parallelOpt) {\n var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault;\n compatTextStyle(parallelAxisDefault, 'axisLabel');\n compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label');\n });\n each(toArr(option.calendar), function (calendarOpt) {\n convertNormalEmphasis(calendarOpt, 'itemStyle');\n compatTextStyle(calendarOpt, 'dayLabel');\n compatTextStyle(calendarOpt, 'monthLabel');\n compatTextStyle(calendarOpt, 'yearLabel');\n }); // radar.name.textStyle\n\n each(toArr(option.radar), function (radarOpt) {\n compatTextStyle(radarOpt, 'name'); // Use axisName instead of name because component has name property\n\n if (radarOpt.name && radarOpt.axisName == null) {\n radarOpt.axisName = radarOpt.name;\n delete radarOpt.name;\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog('name property in radar component has been changed to axisName');\n }\n }\n\n if (radarOpt.nameGap != null && radarOpt.axisNameGap == null) {\n radarOpt.axisNameGap = radarOpt.nameGap;\n delete radarOpt.nameGap;\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog('nameGap property in radar component has been changed to axisNameGap');\n }\n }\n });\n each(toArr(option.geo), function (geoOpt) {\n if (isObject(geoOpt)) {\n compatEC3CommonStyles(geoOpt);\n each(toArr(geoOpt.regions), function (regionObj) {\n compatEC3CommonStyles(regionObj);\n });\n }\n });\n each(toArr(option.timeline), function (timelineOpt) {\n compatEC3CommonStyles(timelineOpt);\n convertNormalEmphasis(timelineOpt, 'label');\n convertNormalEmphasis(timelineOpt, 'itemStyle');\n convertNormalEmphasis(timelineOpt, 'controlStyle', true);\n var data = timelineOpt.data;\n zrUtil.isArray(data) && zrUtil.each(data, function (item) {\n if (zrUtil.isObject(item)) {\n convertNormalEmphasis(item, 'label');\n convertNormalEmphasis(item, 'itemStyle');\n }\n });\n });\n each(toArr(option.toolbox), function (toolboxOpt) {\n convertNormalEmphasis(toolboxOpt, 'iconStyle');\n each(toolboxOpt.feature, function (featureOpt) {\n convertNormalEmphasis(featureOpt, 'iconStyle');\n });\n });\n compatTextStyle(toObj(option.axisPointer), 'label');\n compatTextStyle(toObj(option.tooltip).axisPointer, 'label'); // Clean logs\n // storedLogs = {};\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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, isArray, isObject, isTypedArray, defaults } from 'zrender/lib/core/util';\nimport compatStyle from './helper/compatStyle';\nimport { normalizeToArray } from '../util/model';\nimport { deprecateLog, deprecateReplaceLog } from '../util/log';\n\nfunction get(opt, path) {\n var pathArr = path.split(',');\n var obj = opt;\n\n for (var i = 0; i < pathArr.length; i++) {\n obj = obj && obj[pathArr[i]];\n\n if (obj == null) {\n break;\n }\n }\n\n return obj;\n}\n\nfunction set(opt, path, val, overwrite) {\n var pathArr = path.split(',');\n var obj = opt;\n var key;\n var i = 0;\n\n for (; i < pathArr.length - 1; i++) {\n key = pathArr[i];\n\n if (obj[key] == null) {\n obj[key] = {};\n }\n\n obj = obj[key];\n }\n\n if (overwrite || obj[pathArr[i]] == null) {\n obj[pathArr[i]] = val;\n }\n}\n\nfunction compatLayoutProperties(option) {\n option && each(LAYOUT_PROPERTIES, function (prop) {\n if (prop[0] in option && !(prop[1] in option)) {\n option[prop[1]] = option[prop[0]];\n }\n });\n}\n\nvar LAYOUT_PROPERTIES = [['x', 'left'], ['y', 'top'], ['x2', 'right'], ['y2', 'bottom']];\nvar COMPATITABLE_COMPONENTS = ['grid', 'geo', 'parallel', 'legend', 'toolbox', 'title', 'visualMap', 'dataZoom', 'timeline'];\nvar BAR_ITEM_STYLE_MAP = [['borderRadius', 'barBorderRadius'], ['borderColor', 'barBorderColor'], ['borderWidth', 'barBorderWidth']];\n\nfunction compatBarItemStyle(option) {\n var itemStyle = option && option.itemStyle;\n\n if (itemStyle) {\n for (var i = 0; i < BAR_ITEM_STYLE_MAP.length; i++) {\n var oldName = BAR_ITEM_STYLE_MAP[i][1];\n var newName = BAR_ITEM_STYLE_MAP[i][0];\n\n if (itemStyle[oldName] != null) {\n itemStyle[newName] = itemStyle[oldName];\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog(oldName, newName);\n }\n }\n }\n }\n}\n\nfunction compatPieLabel(option) {\n if (!option) {\n return;\n }\n\n if (option.alignTo === 'edge' && option.margin != null && option.edgeDistance == null) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('label.margin', 'label.edgeDistance', 'pie');\n }\n\n option.edgeDistance = option.margin;\n }\n}\n\nfunction compatSunburstState(option) {\n if (!option) {\n return;\n }\n\n if (option.downplay && !option.blur) {\n option.blur = option.downplay;\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('downplay', 'blur', 'sunburst');\n }\n }\n}\n\nfunction compatGraphFocus(option) {\n if (!option) {\n return;\n }\n\n if (option.focusNodeAdjacency != null) {\n option.emphasis = option.emphasis || {};\n\n if (option.emphasis.focus == null) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('focusNodeAdjacency', 'emphasis: { focus: \\'adjacency\\'}', 'graph/sankey');\n }\n\n option.emphasis.focus = 'adjacency';\n }\n }\n}\n\nfunction traverseTree(data, cb) {\n if (data) {\n for (var i = 0; i < data.length; i++) {\n cb(data[i]);\n data[i] && traverseTree(data[i].children, cb);\n }\n }\n}\n\nexport default function globalBackwardCompat(option, isTheme) {\n compatStyle(option, isTheme); // Make sure series array for model initialization.\n\n option.series = normalizeToArray(option.series);\n each(option.series, function (seriesOpt) {\n if (!isObject(seriesOpt)) {\n return;\n }\n\n var seriesType = seriesOpt.type;\n\n if (seriesType === 'line') {\n if (seriesOpt.clipOverflow != null) {\n seriesOpt.clip = seriesOpt.clipOverflow;\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('clipOverflow', 'clip', 'line');\n }\n }\n } else if (seriesType === 'pie' || seriesType === 'gauge') {\n if (seriesOpt.clockWise != null) {\n seriesOpt.clockwise = seriesOpt.clockWise;\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('clockWise', 'clockwise');\n }\n }\n\n compatPieLabel(seriesOpt.label);\n var data = seriesOpt.data;\n\n if (data && !isTypedArray(data)) {\n for (var i = 0; i < data.length; i++) {\n compatPieLabel(data[i]);\n }\n }\n\n if (seriesOpt.hoverOffset != null) {\n seriesOpt.emphasis = seriesOpt.emphasis || {};\n\n if (seriesOpt.emphasis.scaleSize = null) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('hoverOffset', 'emphasis.scaleSize');\n }\n\n seriesOpt.emphasis.scaleSize = seriesOpt.hoverOffset;\n }\n }\n } else if (seriesType === 'gauge') {\n var pointerColor = get(seriesOpt, 'pointer.color');\n pointerColor != null && set(seriesOpt, 'itemStyle.color', pointerColor);\n } else if (seriesType === 'bar') {\n compatBarItemStyle(seriesOpt);\n compatBarItemStyle(seriesOpt.backgroundStyle);\n compatBarItemStyle(seriesOpt.emphasis);\n var data = seriesOpt.data;\n\n if (data && !isTypedArray(data)) {\n for (var i = 0; i < data.length; i++) {\n if (typeof data[i] === 'object') {\n compatBarItemStyle(data[i]);\n compatBarItemStyle(data[i] && data[i].emphasis);\n }\n }\n }\n } else if (seriesType === 'sunburst') {\n var highlightPolicy = seriesOpt.highlightPolicy;\n\n if (highlightPolicy) {\n seriesOpt.emphasis = seriesOpt.emphasis || {};\n\n if (!seriesOpt.emphasis.focus) {\n seriesOpt.emphasis.focus = highlightPolicy;\n\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('highlightPolicy', 'emphasis.focus', 'sunburst');\n }\n }\n }\n\n compatSunburstState(seriesOpt);\n traverseTree(seriesOpt.data, compatSunburstState);\n } else if (seriesType === 'graph' || seriesType === 'sankey') {\n compatGraphFocus(seriesOpt); // TODO nodes, edges?\n } else if (seriesType === 'map') {\n if (seriesOpt.mapType && !seriesOpt.map) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('mapType', 'map', 'map');\n }\n\n seriesOpt.map = seriesOpt.mapType;\n }\n\n if (seriesOpt.mapLocation) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog('`mapLocation` is not used anymore.');\n }\n\n defaults(seriesOpt, seriesOpt.mapLocation);\n }\n }\n\n if (seriesOpt.hoverAnimation != null) {\n seriesOpt.emphasis = seriesOpt.emphasis || {};\n\n if (seriesOpt.emphasis && seriesOpt.emphasis.scale == null) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('hoverAnimation', 'emphasis.scale');\n }\n\n seriesOpt.emphasis.scale = seriesOpt.hoverAnimation;\n }\n }\n\n compatLayoutProperties(seriesOpt);\n }); // dataRange has changed to visualMap\n\n if (option.dataRange) {\n option.visualMap = option.dataRange;\n }\n\n each(COMPATITABLE_COMPONENTS, function (componentName) {\n var options = option[componentName];\n\n if (options) {\n if (!isArray(options)) {\n options = [options];\n }\n\n each(options, function (option) {\n compatLayoutProperties(option);\n });\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embeded for some of the code in this file:\n* The method \"quantile\" was copied from \"d3.js\".\n* (See more details in the comment of the method below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* ).\n*/\nimport * as zrUtil from 'zrender/lib/core/util';\nvar RADIAN_EPSILON = 1e-4; // Although chrome already enlarge this number to 100 for `toFixed`, but\n// we sill follow the spec for compatibility.\n\nvar ROUND_SUPPORTED_PRECISION_MAX = 20;\n\nfunction _trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n}\n/**\n * Linear mapping a value from domain to range\n * @param val\n * @param domain Domain extent domain[0] can be bigger than domain[1]\n * @param range Range extent range[0] can be bigger than range[1]\n * @param clamp Default to be false\n */\n\n\nexport function linearMap(val, domain, range, clamp) {\n var d0 = domain[0];\n var d1 = domain[1];\n var r0 = range[0];\n var r1 = range[1];\n var subDomain = d1 - d0;\n var subRange = r1 - r0;\n\n if (subDomain === 0) {\n return subRange === 0 ? r0 : (r0 + r1) / 2;\n } // Avoid accuracy problem in edge, such as\n // 146.39 - 62.83 === 83.55999999999999.\n // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError\n // It is a little verbose for efficiency considering this method\n // is a hotspot.\n\n\n if (clamp) {\n if (subDomain > 0) {\n if (val <= d0) {\n return r0;\n } else if (val >= d1) {\n return r1;\n }\n } else {\n if (val >= d0) {\n return r0;\n } else if (val <= d1) {\n return r1;\n }\n }\n } else {\n if (val === d0) {\n return r0;\n }\n\n if (val === d1) {\n return r1;\n }\n }\n\n return (val - d0) / subDomain * subRange + r0;\n}\n/**\n * Convert a percent string to absolute number.\n * Returns NaN if percent is not a valid string or number\n */\n\nexport function parsePercent(percent, all) {\n switch (percent) {\n case 'center':\n case 'middle':\n percent = '50%';\n break;\n\n case 'left':\n case 'top':\n percent = '0%';\n break;\n\n case 'right':\n case 'bottom':\n percent = '100%';\n break;\n }\n\n if (typeof percent === 'string') {\n if (_trim(percent).match(/%$/)) {\n return parseFloat(percent) / 100 * all;\n }\n\n return parseFloat(percent);\n }\n\n return percent == null ? NaN : +percent;\n}\nexport function round(x, precision, returnStr) {\n if (precision == null) {\n precision = 10;\n } // Avoid range error\n\n\n precision = Math.min(Math.max(0, precision), ROUND_SUPPORTED_PRECISION_MAX); // PENDING: 1.005.toFixed(2) is '1.00' rather than '1.01'\n\n x = (+x).toFixed(precision);\n return returnStr ? x : +x;\n}\n/**\n * Inplacd asc sort arr.\n * The input arr will be modified.\n */\n\nexport function asc(arr) {\n arr.sort(function (a, b) {\n return a - b;\n });\n return arr;\n}\n/**\n * Get precision.\n */\n\nexport function getPrecision(val) {\n val = +val;\n\n if (isNaN(val)) {\n return 0;\n } // It is much faster than methods converting number to string as follows\n // let tmp = val.toString();\n // return tmp.length - 1 - tmp.indexOf('.');\n // especially when precision is low\n // Notice:\n // (1) If the loop count is over about 20, it is slower than `getPrecisionSafe`.\n // (see https://jsbench.me/2vkpcekkvw/1)\n // (2) If the val is less than for example 1e-15, the result may be incorrect.\n // (see test/ut/spec/util/number.test.ts `getPrecision_equal_random`)\n\n\n if (val > 1e-14) {\n var e = 1;\n\n for (var i = 0; i < 15; i++, e *= 10) {\n if (Math.round(val * e) / e === val) {\n return i;\n }\n }\n }\n\n return getPrecisionSafe(val);\n}\n/**\n * Get precision with slow but safe method\n */\n\nexport function getPrecisionSafe(val) {\n // toLowerCase for: '3.4E-12'\n var str = val.toString().toLowerCase(); // Consider scientific notation: '3.4e-12' '3.4e+12'\n\n var eIndex = str.indexOf('e');\n var exp = eIndex > 0 ? +str.slice(eIndex + 1) : 0;\n var significandPartLen = eIndex > 0 ? eIndex : str.length;\n var dotIndex = str.indexOf('.');\n var decimalPartLen = dotIndex < 0 ? 0 : significandPartLen - 1 - dotIndex;\n return Math.max(0, decimalPartLen - exp);\n}\n/**\n * Minimal dicernible data precisioin according to a single pixel.\n */\n\nexport function getPixelPrecision(dataExtent, pixelExtent) {\n var log = Math.log;\n var LN10 = Math.LN10;\n var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10);\n var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10); // toFixed() digits argument must be between 0 and 20.\n\n var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20);\n return !isFinite(precision) ? 20 : precision;\n}\n/**\n * Get a data of given precision, assuring the sum of percentages\n * in valueList is 1.\n * The largest remainer method is used.\n * https://en.wikipedia.org/wiki/Largest_remainder_method\n *\n * @param valueList a list of all data\n * @param idx index of the data to be processed in valueList\n * @param precision integer number showing digits of precision\n * @return percent ranging from 0 to 100\n */\n\nexport function getPercentWithPrecision(valueList, idx, precision) {\n if (!valueList[idx]) {\n return 0;\n }\n\n var sum = zrUtil.reduce(valueList, function (acc, val) {\n return acc + (isNaN(val) ? 0 : val);\n }, 0);\n\n if (sum === 0) {\n return 0;\n }\n\n var digits = Math.pow(10, precision);\n var votesPerQuota = zrUtil.map(valueList, function (val) {\n return (isNaN(val) ? 0 : val) / sum * digits * 100;\n });\n var targetSeats = digits * 100;\n var seats = zrUtil.map(votesPerQuota, function (votes) {\n // Assign automatic seats.\n return Math.floor(votes);\n });\n var currentSum = zrUtil.reduce(seats, function (acc, val) {\n return acc + val;\n }, 0);\n var remainder = zrUtil.map(votesPerQuota, function (votes, idx) {\n return votes - seats[idx];\n }); // Has remainding votes.\n\n while (currentSum < targetSeats) {\n // Find next largest remainder.\n var max = Number.NEGATIVE_INFINITY;\n var maxId = null;\n\n for (var i = 0, len = remainder.length; i < len; ++i) {\n if (remainder[i] > max) {\n max = remainder[i];\n maxId = i;\n }\n } // Add a vote to max remainder.\n\n\n ++seats[maxId];\n remainder[maxId] = 0;\n ++currentSum;\n }\n\n return seats[idx] / digits;\n}\n/**\n * Solve the floating point adding problem like 0.1 + 0.2 === 0.30000000000000004\n * See \n */\n\nexport function addSafe(val0, val1) {\n var maxPrecision = Math.max(getPrecision(val0), getPrecision(val1)); // const multiplier = Math.pow(10, maxPrecision);\n // return (Math.round(val0 * multiplier) + Math.round(val1 * multiplier)) / multiplier;\n\n var sum = val0 + val1; // // PENDING: support more?\n\n return maxPrecision > ROUND_SUPPORTED_PRECISION_MAX ? sum : round(sum, maxPrecision);\n} // Number.MAX_SAFE_INTEGER, ie do not support.\n\nexport var MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * To 0 - 2 * PI, considering negative radian.\n */\n\nexport function remRadian(radian) {\n var pi2 = Math.PI * 2;\n return (radian % pi2 + pi2) % pi2;\n}\n/**\n * @param {type} radian\n * @return {boolean}\n */\n\nexport function isRadianAroundZero(val) {\n return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;\n} // eslint-disable-next-line\n\nvar TIME_REG = /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // jshint ignore:line\n\n/**\n * @param value valid type: number | string | Date, otherwise return `new Date(NaN)`\n * These values can be accepted:\n * + An instance of Date, represent a time in its own time zone.\n * + Or string in a subset of ISO 8601, only including:\n * + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06',\n * + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123',\n * + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00',\n * all of which will be treated as local time if time zone is not specified\n * (see ).\n * + Or other string format, including (all of which will be treated as loacal time):\n * '2012', '2012-3-1', '2012/3/1', '2012/03/01',\n * '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123'\n * + a timestamp, which represent a time in UTC.\n * @return date Never be null/undefined. If invalid, return `new Date(NaN)`.\n */\n\nexport function parseDate(value) {\n if (value instanceof Date) {\n return value;\n } else if (typeof value === 'string') {\n // Different browsers parse date in different way, so we parse it manually.\n // Some other issues:\n // new Date('1970-01-01') is UTC,\n // new Date('1970/01/01') and new Date('1970-1-01') is local.\n // See issue #3623\n var match = TIME_REG.exec(value);\n\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n } // Use local time when no timezone offset specifed.\n\n\n if (!match[8]) {\n // match[n] can only be string or undefined.\n // But take care of '12' + 1 => '121'.\n return new Date(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0);\n } // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n // For example, system timezone is set as \"Time Zone: America/Toronto\",\n // then these code will get different result:\n // `new Date(1478411999999).getTimezoneOffset(); // get 240`\n // `new Date(1478412000000).getTimezoneOffset(); // get 300`\n // So we should not use `new Date`, but use `Date.UTC`.\n else {\n var hour = +match[4] || 0;\n\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n\n return new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0));\n }\n } else if (value == null) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(value));\n}\n/**\n * Quantity of a number. e.g. 0.1, 1, 10, 100\n *\n * @param val\n * @return\n */\n\nexport function quantity(val) {\n return Math.pow(10, quantityExponent(val));\n}\n/**\n * Exponent of the quantity of a number\n * e.g., 1234 equals to 1.234*10^3, so quantityExponent(1234) is 3\n *\n * @param val non-negative value\n * @return\n */\n\nexport function quantityExponent(val) {\n if (val === 0) {\n return 0;\n }\n\n var exp = Math.floor(Math.log(val) / Math.LN10);\n /**\n * exp is expected to be the rounded-down result of the base-10 log of val.\n * But due to the precision loss with Math.log(val), we need to restore it\n * using 10^exp to make sure we can get val back from exp. #11249\n */\n\n if (val / Math.pow(10, exp) >= 10) {\n exp++;\n }\n\n return exp;\n}\n/**\n * find a “nice” number approximately equal to x. Round the number if round = true,\n * take ceiling if round = false. The primary observation is that the “nicest”\n * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers.\n *\n * See \"Nice Numbers for Graph Labels\" of Graphic Gems.\n *\n * @param val Non-negative value.\n * @param round\n * @return Niced number\n */\n\nexport function nice(val, round) {\n var exponent = quantityExponent(val);\n var exp10 = Math.pow(10, exponent);\n var f = val / exp10; // 1 <= f < 10\n\n var nf;\n\n if (round) {\n if (f < 1.5) {\n nf = 1;\n } else if (f < 2.5) {\n nf = 2;\n } else if (f < 4) {\n nf = 3;\n } else if (f < 7) {\n nf = 5;\n } else {\n nf = 10;\n }\n } else {\n if (f < 1) {\n nf = 1;\n } else if (f < 2) {\n nf = 2;\n } else if (f < 3) {\n nf = 3;\n } else if (f < 5) {\n nf = 5;\n } else {\n nf = 10;\n }\n }\n\n val = nf * exp10; // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754).\n // 20 is the uppper bound of toFixed.\n\n return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;\n}\n/**\n * This code was copied from \"d3.js\"\n * .\n * See the license statement at the head of this file.\n * @param ascArr\n */\n\nexport function quantile(ascArr, p) {\n var H = (ascArr.length - 1) * p + 1;\n var h = Math.floor(H);\n var v = +ascArr[h - 1];\n var e = H - h;\n return e ? v + e * (ascArr[h] - v) : v;\n}\n/**\n * Order intervals asc, and split them when overlap.\n * expect(numberUtil.reformIntervals([\n * {interval: [18, 62], close: [1, 1]},\n * {interval: [-Infinity, -70], close: [0, 0]},\n * {interval: [-70, -26], close: [1, 1]},\n * {interval: [-26, 18], close: [1, 1]},\n * {interval: [62, 150], close: [1, 1]},\n * {interval: [106, 150], close: [1, 1]},\n * {interval: [150, Infinity], close: [0, 0]}\n * ])).toEqual([\n * {interval: [-Infinity, -70], close: [0, 0]},\n * {interval: [-70, -26], close: [1, 1]},\n * {interval: [-26, 18], close: [0, 1]},\n * {interval: [18, 62], close: [0, 1]},\n * {interval: [62, 150], close: [0, 1]},\n * {interval: [150, Infinity], close: [0, 0]}\n * ]);\n * @param list, where `close` mean open or close\n * of the interval, and Infinity can be used.\n * @return The origin list, which has been reformed.\n */\n\nexport function reformIntervals(list) {\n list.sort(function (a, b) {\n return littleThan(a, b, 0) ? -1 : 1;\n });\n var curr = -Infinity;\n var currClose = 1;\n\n for (var i = 0; i < list.length;) {\n var interval = list[i].interval;\n var close_1 = list[i].close;\n\n for (var lg = 0; lg < 2; lg++) {\n if (interval[lg] <= curr) {\n interval[lg] = curr;\n close_1[lg] = !lg ? 1 - currClose : 1;\n }\n\n curr = interval[lg];\n currClose = close_1[lg];\n }\n\n if (interval[0] === interval[1] && close_1[0] * close_1[1] !== 1) {\n list.splice(i, 1);\n } else {\n i++;\n }\n }\n\n return list;\n\n function littleThan(a, b, lg) {\n return a.interval[lg] < b.interval[lg] || a.interval[lg] === b.interval[lg] && (a.close[lg] - b.close[lg] === (!lg ? 1 : -1) || !lg && littleThan(a, b, 1));\n }\n}\n/**\n * [Numberic is defined as]:\n * `parseFloat(val) == val`\n * For example:\n * numeric:\n * typeof number except NaN, '-123', '123', '2e3', '-2e3', '011', 'Infinity', Infinity,\n * and they rounded by white-spaces or line-terminal like ' -123 \\n ' (see es spec)\n * not-numeric:\n * null, undefined, [], {}, true, false, 'NaN', NaN, '123ab',\n * empty string, string with only white-spaces or line-terminal (see es spec),\n * 0x12, '0x12', '-0x12', 012, '012', '-012',\n * non-string, ...\n *\n * @test See full test cases in `test/ut/spec/util/number.js`.\n * @return Must be a typeof number. If not numeric, return NaN.\n */\n\nexport function numericToNumber(val) {\n var valFloat = parseFloat(val);\n return valFloat == val // eslint-disable-line eqeqeq\n && (valFloat !== 0 || typeof val !== 'string' || val.indexOf('x') <= 0) // For case ' 0x0 '.\n ? valFloat : NaN;\n}\n/**\n * Definition of \"numeric\": see `numericToNumber`.\n */\n\nexport function isNumeric(val) {\n return !isNaN(numericToNumber(val));\n}\n/**\n * Use random base to prevent users hard code depending on\n * this auto generated marker id.\n * @return An positive integer.\n */\n\nexport function getRandomIdBase() {\n return Math.round(Math.random() * 9);\n}\n/**\n * Get the greatest common dividor\n *\n * @param {number} a one number\n * @param {number} b the other number\n */\n\nexport function getGreatestCommonDividor(a, b) {\n if (b === 0) {\n return a;\n }\n\n return getGreatestCommonDividor(b, a % b);\n}\n/**\n * Get the least common multiple\n *\n * @param {number} a one number\n * @param {number} b the other number\n */\n\nexport function getLeastCommonMultiple(a, b) {\n if (a == null) {\n return b;\n }\n\n if (b == null) {\n return a;\n }\n\n return a * b / getGreatestCommonDividor(a, b);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { Text } from '../util/graphic';\nimport { deprecateLog } from '../util/log';\nexport function getTextRect(text, font, align, verticalAlign, padding, rich, truncate, lineHeight) {\n deprecateLog('getTextRect is deprecated.');\n var textEl = new Text({\n style: {\n text: text,\n font: font,\n align: align,\n verticalAlign: verticalAlign,\n padding: padding,\n rich: rich,\n overflow: truncate ? 'truncate' : null,\n lineHeight: lineHeight\n }\n });\n return textEl.getBoundingRect();\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 { parseClassType } from './clazz';\n/**\n * Usage of query:\n * `chart.on('click', query, handler);`\n * The `query` can be:\n * + The component type query string, only `mainType` or `mainType.subType`,\n * like: 'xAxis', 'series', 'xAxis.category' or 'series.line'.\n * + The component query object, like:\n * `{seriesIndex: 2}`, `{seriesName: 'xx'}`, `{seriesId: 'some'}`,\n * `{xAxisIndex: 2}`, `{xAxisName: 'xx'}`, `{xAxisId: 'some'}`.\n * + The data query object, like:\n * `{dataIndex: 123}`, `{dataType: 'link'}`, `{name: 'some'}`.\n * + The other query object (cmponent customized query), like:\n * `{element: 'some'}` (only available in custom series).\n *\n * Caveat: If a prop in the `query` object is `null/undefined`, it is the\n * same as there is no such prop in the `query` object.\n */\n\nvar ECEventProcessor =\n/** @class */\nfunction () {\n function ECEventProcessor() {}\n\n ECEventProcessor.prototype.normalizeQuery = function (query) {\n var cptQuery = {};\n var dataQuery = {};\n var otherQuery = {}; // `query` is `mainType` or `mainType.subType` of component.\n\n if (zrUtil.isString(query)) {\n var condCptType = parseClassType(query); // `.main` and `.sub` may be ''.\n\n cptQuery.mainType = condCptType.main || null;\n cptQuery.subType = condCptType.sub || null;\n } // `query` is an object, convert to {mainType, index, name, id}.\n else {\n // `xxxIndex`, `xxxName`, `xxxId`, `name`, `dataIndex`, `dataType` is reserved,\n // can not be used in `compomentModel.filterForExposedEvent`.\n var suffixes_1 = ['Index', 'Name', 'Id'];\n var dataKeys_1 = {\n name: 1,\n dataIndex: 1,\n dataType: 1\n };\n zrUtil.each(query, function (val, key) {\n var reserved = false;\n\n for (var i = 0; i < suffixes_1.length; i++) {\n var propSuffix = suffixes_1[i];\n var suffixPos = key.lastIndexOf(propSuffix);\n\n if (suffixPos > 0 && suffixPos === key.length - propSuffix.length) {\n var mainType = key.slice(0, suffixPos); // Consider `dataIndex`.\n\n if (mainType !== 'data') {\n cptQuery.mainType = mainType;\n cptQuery[propSuffix.toLowerCase()] = val;\n reserved = true;\n }\n }\n }\n\n if (dataKeys_1.hasOwnProperty(key)) {\n dataQuery[key] = val;\n reserved = true;\n }\n\n if (!reserved) {\n otherQuery[key] = val;\n }\n });\n }\n\n return {\n cptQuery: cptQuery,\n dataQuery: dataQuery,\n otherQuery: otherQuery\n };\n };\n\n ECEventProcessor.prototype.filter = function (eventType, query) {\n // They should be assigned before each trigger call.\n var eventInfo = this.eventInfo;\n\n if (!eventInfo) {\n return true;\n }\n\n var targetEl = eventInfo.targetEl;\n var packedEvent = eventInfo.packedEvent;\n var model = eventInfo.model;\n var view = eventInfo.view; // For event like 'globalout'.\n\n if (!model || !view) {\n return true;\n }\n\n var cptQuery = query.cptQuery;\n var dataQuery = query.dataQuery;\n return check(cptQuery, model, 'mainType') && check(cptQuery, model, 'subType') && check(cptQuery, model, 'index', 'componentIndex') && check(cptQuery, model, 'name') && check(cptQuery, model, 'id') && check(dataQuery, packedEvent, 'name') && check(dataQuery, packedEvent, 'dataIndex') && check(dataQuery, packedEvent, 'dataType') && (!view.filterForExposedEvent || view.filterForExposedEvent(eventType, query.otherQuery, targetEl, packedEvent));\n\n function check(query, host, prop, propOnHost) {\n return query[prop] == null || host[propOnHost || prop] === query[prop];\n }\n };\n\n ECEventProcessor.prototype.afterTrigger = function () {\n // Make sure the eventInfo wont be used in next trigger.\n this.eventInfo = null;\n };\n\n return ECEventProcessor;\n}();\n\nexport { ECEventProcessor };\n;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Language: English.\n */\nexport default {\n time: {\n month: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthAbbr: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n dayOfWeek: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayOfWeekAbbr: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n },\n legend: {\n selector: {\n all: 'All',\n inverse: 'Inv'\n }\n },\n toolbox: {\n brush: {\n title: {\n rect: 'Box Select',\n polygon: 'Lasso Select',\n lineX: 'Horizontally Select',\n lineY: 'Vertically Select',\n keep: 'Keep Selections',\n clear: 'Clear Selections'\n }\n },\n dataView: {\n title: 'Data View',\n lang: ['Data View', 'Close', 'Refresh']\n },\n dataZoom: {\n title: {\n zoom: 'Zoom',\n back: 'Zoom Reset'\n }\n },\n magicType: {\n title: {\n line: 'Switch to Line Chart',\n bar: 'Switch to Bar Chart',\n stack: 'Stack',\n tiled: 'Tile'\n }\n },\n restore: {\n title: 'Restore'\n },\n saveAsImage: {\n title: 'Save as Image',\n lang: ['Right Click to Save Image']\n }\n },\n series: {\n typeNames: {\n pie: 'Pie chart',\n bar: 'Bar chart',\n line: 'Line chart',\n scatter: 'Scatter plot',\n effectScatter: 'Ripple scatter plot',\n radar: 'Radar chart',\n tree: 'Tree',\n treemap: 'Treemap',\n boxplot: 'Boxplot',\n candlestick: 'Candlestick',\n k: 'K line chart',\n heatmap: 'Heat map',\n map: 'Map',\n parallel: 'Parallel coordinate map',\n lines: 'Line graph',\n graph: 'Relationship graph',\n sankey: 'Sankey diagram',\n funnel: 'Funnel chart',\n gauge: 'Gauge',\n pictorialBar: 'Pictorial bar',\n themeRiver: 'Theme River Map',\n sunburst: 'Sunburst'\n }\n },\n aria: {\n general: {\n withTitle: 'This is a chart about \"{title}\"',\n withoutTitle: 'This is a chart'\n },\n series: {\n single: {\n prefix: '',\n withName: ' with type {seriesType} named {seriesName}.',\n withoutName: ' with type {seriesType}.'\n },\n multiple: {\n prefix: '. It consists of {seriesCount} series count.',\n withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.',\n withoutName: ' The {seriesId} series is a {seriesType}.',\n separator: {\n middle: '',\n end: ''\n }\n }\n },\n data: {\n allData: 'The data is as follows: ',\n partialData: 'The first {displayCnt} items are: ',\n withName: 'the data for {name} is {value}',\n withoutName: '{value}',\n separator: {\n middle: ', ',\n end: '. '\n }\n }\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 {\n time: {\n month: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n monthAbbr: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n dayOfWeek: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n dayOfWeekAbbr: ['日', '一', '二', '三', '四', '五', '六']\n },\n legend: {\n selector: {\n all: '全选',\n inverse: '反选'\n }\n },\n toolbox: {\n brush: {\n title: {\n rect: '矩形选择',\n polygon: '圈选',\n lineX: '横向选择',\n lineY: '纵向选择',\n keep: '保持选择',\n clear: '清除选择'\n }\n },\n dataView: {\n title: '数据视图',\n lang: ['数据视图', '关闭', '刷新']\n },\n dataZoom: {\n title: {\n zoom: '区域缩放',\n back: '区域缩放还原'\n }\n },\n magicType: {\n title: {\n line: '切换为折线图',\n bar: '切换为柱状图',\n stack: '切换为堆叠',\n tiled: '切换为平铺'\n }\n },\n restore: {\n title: '还原'\n },\n saveAsImage: {\n title: '保存为图片',\n lang: ['右键另存为图片']\n }\n },\n series: {\n typeNames: {\n pie: '饼图',\n bar: '柱状图',\n line: '折线图',\n scatter: '散点图',\n effectScatter: '涟漪散点图',\n radar: '雷达图',\n tree: '树图',\n treemap: '矩形树图',\n boxplot: '箱型图',\n candlestick: 'K线图',\n k: 'K线图',\n heatmap: '热力图',\n map: '地图',\n parallel: '平行坐标图',\n lines: '线图',\n graph: '关系图',\n sankey: '桑基图',\n funnel: '漏斗图',\n gauge: '仪表盘图',\n pictorialBar: '象形柱图',\n themeRiver: '主题河流图',\n sunburst: '旭日图'\n }\n },\n aria: {\n general: {\n withTitle: '这是一个关于“{title}”的图表。',\n withoutTitle: '这是一个图表,'\n },\n series: {\n single: {\n prefix: '',\n withName: '图表类型是{seriesType},表示{seriesName}。',\n withoutName: '图表类型是{seriesType}。'\n },\n multiple: {\n prefix: '它由{seriesCount}个图表系列组成。',\n withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},',\n withoutName: '第{seriesId}个系列是一个{seriesType},',\n separator: {\n middle: ';',\n end: '。'\n }\n }\n },\n data: {\n allData: '其数据是——',\n partialData: '其中,前{displayCnt}项是——',\n withName: '{name}的数据是{value}',\n withoutName: '{value}',\n separator: {\n middle: ',',\n end: ''\n }\n }\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { normalizeToArray // , MappingExistingItem, setComponentTypeToKeyInfo, mappingToExists\n} from '../util/model';\nimport { each, clone, map, isTypedArray, setAsPrimitive, isArray, isObject // , HashMap , createHashMap, extend, merge,\n} from 'zrender/lib/core/util';\nimport { error } from '../util/log';\nvar QUERY_REG = /^(min|max)?(.+)$/; // Key: mainType\n// type FakeComponentsMap = HashMap<(MappingExistingItem & { subType: string })[]>;\n\n/**\n * TERM EXPLANATIONS:\n * See `ECOption` and `ECUnitOption` in `src/util/types.ts`.\n */\n\nvar OptionManager =\n/** @class */\nfunction () {\n // timeline.notMerge is not supported in ec3. Firstly there is rearly\n // case that notMerge is needed. Secondly supporting 'notMerge' requires\n // rawOption cloned and backuped when timeline changed, which does no\n // good to performance. What's more, that both timeline and setOption\n // method supply 'notMerge' brings complex and some problems.\n // Consider this case:\n // (step1) chart.setOption({timeline: {notMerge: false}, ...}, false);\n // (step2) chart.setOption({timeline: {notMerge: true}, ...}, false);\n function OptionManager(api) {\n this._timelineOptions = [];\n this._mediaList = [];\n /**\n * -1, means default.\n * empty means no media.\n */\n\n this._currentMediaIndices = [];\n this._api = api;\n }\n\n OptionManager.prototype.setOption = function (rawOption, optionPreprocessorFuncs, opt) {\n if (rawOption) {\n // That set dat primitive is dangerous if user reuse the data when setOption again.\n each(normalizeToArray(rawOption.series), function (series) {\n series && series.data && isTypedArray(series.data) && setAsPrimitive(series.data);\n });\n each(normalizeToArray(rawOption.dataset), function (dataset) {\n dataset && dataset.source && isTypedArray(dataset.source) && setAsPrimitive(dataset.source);\n });\n } // Caution: some series modify option data, if do not clone,\n // it should ensure that the repeat modify correctly\n // (create a new object when modify itself).\n\n\n rawOption = clone(rawOption); // FIXME\n // If some property is set in timeline options or media option but\n // not set in baseOption, a warning should be given.\n\n var optionBackup = this._optionBackup;\n var newParsedOption = parseRawOption(rawOption, optionPreprocessorFuncs, !optionBackup);\n this._newBaseOption = newParsedOption.baseOption; // For setOption at second time (using merge mode);\n\n if (optionBackup) {\n // FIXME\n // the restore merge solution is essentially incorrect.\n // the mapping can not be 100% consistent with ecModel, which probably brings\n // potential bug!\n // The first merge is delayed, becuase in most cases, users do not call `setOption` twice.\n // let fakeCmptsMap = this._fakeCmptsMap;\n // if (!fakeCmptsMap) {\n // fakeCmptsMap = this._fakeCmptsMap = createHashMap();\n // mergeToBackupOption(fakeCmptsMap, null, optionBackup.baseOption, null);\n // }\n // mergeToBackupOption(\n // fakeCmptsMap, optionBackup.baseOption, newParsedOption.baseOption, opt\n // );\n // For simplicity, timeline options and media options do not support merge,\n // that is, if you `setOption` twice and both has timeline options, the latter\n // timeline opitons will not be merged to the formers, but just substitude them.\n if (newParsedOption.timelineOptions.length) {\n optionBackup.timelineOptions = newParsedOption.timelineOptions;\n }\n\n if (newParsedOption.mediaList.length) {\n optionBackup.mediaList = newParsedOption.mediaList;\n }\n\n if (newParsedOption.mediaDefault) {\n optionBackup.mediaDefault = newParsedOption.mediaDefault;\n }\n } else {\n this._optionBackup = newParsedOption;\n }\n };\n\n OptionManager.prototype.mountOption = function (isRecreate) {\n var optionBackup = this._optionBackup;\n this._timelineOptions = optionBackup.timelineOptions;\n this._mediaList = optionBackup.mediaList;\n this._mediaDefault = optionBackup.mediaDefault;\n this._currentMediaIndices = [];\n return clone(isRecreate // this._optionBackup.baseOption, which is created at the first `setOption`\n // called, and is merged into every new option by inner method `mergeToBackupOption`\n // each time `setOption` called, can be only used in `isRecreate`, because\n // its reliability is under suspicion. In other cases option merge is\n // performed by `model.mergeOption`.\n ? optionBackup.baseOption : this._newBaseOption);\n };\n\n OptionManager.prototype.getTimelineOption = function (ecModel) {\n var option;\n var timelineOptions = this._timelineOptions;\n\n if (timelineOptions.length) {\n // getTimelineOption can only be called after ecModel inited,\n // so we can get currentIndex from timelineModel.\n var timelineModel = ecModel.getComponent('timeline');\n\n if (timelineModel) {\n option = clone( // FIXME:TS as TimelineModel or quivlant interface\n timelineOptions[timelineModel.getCurrentIndex()]);\n }\n }\n\n return option;\n };\n\n OptionManager.prototype.getMediaOption = function (ecModel) {\n var ecWidth = this._api.getWidth();\n\n var ecHeight = this._api.getHeight();\n\n var mediaList = this._mediaList;\n var mediaDefault = this._mediaDefault;\n var indices = [];\n var result = []; // No media defined.\n\n if (!mediaList.length && !mediaDefault) {\n return result;\n } // Multi media may be applied, the latter defined media has higher priority.\n\n\n for (var i = 0, len = mediaList.length; i < len; i++) {\n if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) {\n indices.push(i);\n }\n } // FIXME\n // Whether mediaDefault should force users to provide? Otherwise\n // the change by media query can not be recorvered.\n\n\n if (!indices.length && mediaDefault) {\n indices = [-1];\n }\n\n if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) {\n result = map(indices, function (index) {\n return clone(index === -1 ? mediaDefault.option : mediaList[index].option);\n });\n } // Otherwise return nothing.\n\n\n this._currentMediaIndices = indices;\n return result;\n };\n\n return OptionManager;\n}();\n/**\n * [RAW_OPTION_PATTERNS]\n * (Note: \"series: []\" represents all other props in `ECUnitOption`)\n *\n * (1) No prop \"baseOption\" declared:\n * Root option is used as \"baseOption\" (except prop \"options\" and \"media\").\n * ```js\n * option = {\n * series: [],\n * timeline: {},\n * options: [],\n * };\n * option = {\n * series: [],\n * media: {},\n * };\n * option = {\n * series: [],\n * timeline: {},\n * options: [],\n * media: {},\n * }\n * ```\n *\n * (2) Prop \"baseOption\" declared:\n * If \"baseOption\" declared, `ECUnitOption` props can only be declared\n * inside \"baseOption\" except prop \"timeline\" (compat ec2).\n * ```js\n * option = {\n * baseOption: {\n * timeline: {},\n * series: [],\n * },\n * options: []\n * };\n * option = {\n * baseOption: {\n * series: [],\n * },\n * media: []\n * };\n * option = {\n * baseOption: {\n * timeline: {},\n * series: [],\n * },\n * options: []\n * media: []\n * };\n * option = {\n * // ec3 compat ec2: allow (only) `timeline` declared\n * // outside baseOption. Keep this setting for compat.\n * timeline: {},\n * baseOption: {\n * series: [],\n * },\n * options: [],\n * media: []\n * };\n * ```\n */\n\n\nfunction parseRawOption( // `rawOption` May be modified\nrawOption, optionPreprocessorFuncs, isNew) {\n var mediaList = [];\n var mediaDefault;\n var baseOption;\n var declaredBaseOption = rawOption.baseOption; // Compatible with ec2, [RAW_OPTION_PATTERNS] above.\n\n var timelineOnRoot = rawOption.timeline;\n var timelineOptionsOnRoot = rawOption.options;\n var mediaOnRoot = rawOption.media;\n var hasMedia = !!rawOption.media;\n var hasTimeline = !!(timelineOptionsOnRoot || timelineOnRoot || declaredBaseOption && declaredBaseOption.timeline);\n\n if (declaredBaseOption) {\n baseOption = declaredBaseOption; // For merge option.\n\n if (!baseOption.timeline) {\n baseOption.timeline = timelineOnRoot;\n }\n } // For convenience, enable to use the root option as the `baseOption`:\n // `{ ...normalOptionProps, media: [{ ... }, { ... }] }`\n else {\n if (hasTimeline || hasMedia) {\n rawOption.options = rawOption.media = null;\n }\n\n baseOption = rawOption;\n }\n\n if (hasMedia) {\n if (isArray(mediaOnRoot)) {\n each(mediaOnRoot, function (singleMedia) {\n if (process.env.NODE_ENV !== 'production') {\n // Real case of wrong config.\n if (singleMedia && !singleMedia.option && isObject(singleMedia.query) && isObject(singleMedia.query.option)) {\n error('Illegal media option. Must be like { media: [ { query: {}, option: {} } ] }');\n }\n }\n\n if (singleMedia && singleMedia.option) {\n if (singleMedia.query) {\n mediaList.push(singleMedia);\n } else if (!mediaDefault) {\n // Use the first media default.\n mediaDefault = singleMedia;\n }\n }\n });\n } else {\n if (process.env.NODE_ENV !== 'production') {\n // Real case of wrong config.\n error('Illegal media option. Must be an array. Like { media: [ {...}, {...} ] }');\n }\n }\n }\n\n doPreprocess(baseOption);\n each(timelineOptionsOnRoot, function (option) {\n return doPreprocess(option);\n });\n each(mediaList, function (media) {\n return doPreprocess(media.option);\n });\n\n function doPreprocess(option) {\n each(optionPreprocessorFuncs, function (preProcess) {\n preProcess(option, isNew);\n });\n }\n\n return {\n baseOption: baseOption,\n timelineOptions: timelineOptionsOnRoot || [],\n mediaDefault: mediaDefault,\n mediaList: mediaList\n };\n}\n/**\n * @see \n * Support: width, height, aspectRatio\n * Can use max or min as prefix.\n */\n\n\nfunction applyMediaQuery(query, ecWidth, ecHeight) {\n var realMap = {\n width: ecWidth,\n height: ecHeight,\n aspectratio: ecWidth / ecHeight // lowser case for convenientce.\n\n };\n var applicatable = true;\n each(query, function (value, attr) {\n var matched = attr.match(QUERY_REG);\n\n if (!matched || !matched[1] || !matched[2]) {\n return;\n }\n\n var operator = matched[1];\n var realAttr = matched[2].toLowerCase();\n\n if (!compare(realMap[realAttr], value, operator)) {\n applicatable = false;\n }\n });\n return applicatable;\n}\n\nfunction compare(real, expect, operator) {\n if (operator === 'min') {\n return real >= expect;\n } else if (operator === 'max') {\n return real <= expect;\n } else {\n // Equals\n return real === expect;\n }\n}\n\nfunction indicesEquals(indices1, indices2) {\n // indices is always order by asc and has only finite number.\n return indices1.join(',') === indices2.join(',');\n}\n/**\n * Consider case:\n * `chart.setOption(opt1);`\n * Then user do some interaction like dataZoom, dataView changing.\n * `chart.setOption(opt2);`\n * Then user press 'reset button' in toolbox.\n *\n * After doing that all of the interaction effects should be reset, the\n * chart should be the same as the result of invoke\n * `chart.setOption(opt1); chart.setOption(opt2);`.\n *\n * Although it is not able ensure that\n * `chart.setOption(opt1); chart.setOption(opt2);` is equivalents to\n * `chart.setOption(merge(opt1, opt2));` exactly,\n * this might be the only simple way to implement that feature.\n *\n * MEMO: We've considered some other approaches:\n * 1. Each model handle its self restoration but not uniform treatment.\n * (Too complex in logic and error-prone)\n * 2. Use a shadow ecModel. (Performace expensive)\n *\n * FIXME: A possible solution:\n * Add a extra level of model for each component model. The inheritance chain would be:\n * ecModel <- componentModel <- componentActionModel <- dataItemModel\n * And all of the actions can only modify the `componentActionModel` rather than\n * `componentModel`. `setOption` will only modify the `ecModel` and `componentModel`.\n * When \"resotre\" action triggered, model from `componentActionModel` will be discarded\n * instead of recreating the \"ecModel\" from the \"_optionBackup\".\n */\n// function mergeToBackupOption(\n// fakeCmptsMap: FakeComponentsMap,\n// // `tarOption` Can be null/undefined, means init\n// tarOption: ECUnitOption,\n// newOption: ECUnitOption,\n// // Can be null/undefined\n// opt: InnerSetOptionOpts\n// ): void {\n// newOption = newOption || {} as ECUnitOption;\n// const notInit = !!tarOption;\n// each(newOption, function (newOptsInMainType, mainType) {\n// if (newOptsInMainType == null) {\n// return;\n// }\n// if (!ComponentModel.hasClass(mainType)) {\n// if (tarOption) {\n// tarOption[mainType] = merge(tarOption[mainType], newOptsInMainType, true);\n// }\n// }\n// else {\n// const oldTarOptsInMainType = notInit ? normalizeToArray(tarOption[mainType]) : null;\n// const oldFakeCmptsInMainType = fakeCmptsMap.get(mainType) || [];\n// const resultTarOptsInMainType = notInit ? (tarOption[mainType] = [] as ComponentOption[]) : null;\n// const resultFakeCmptsInMainType = fakeCmptsMap.set(mainType, []);\n// const mappingResult = mappingToExists(\n// oldFakeCmptsInMainType,\n// normalizeToArray(newOptsInMainType),\n// (opt && opt.replaceMergeMainTypeMap.get(mainType)) ? 'replaceMerge' : 'normalMerge'\n// );\n// setComponentTypeToKeyInfo(mappingResult, mainType, ComponentModel as ComponentModelConstructor);\n// each(mappingResult, function (resultItem, index) {\n// // The same logic as `Global.ts#_mergeOption`.\n// let fakeCmpt = resultItem.existing;\n// const newOption = resultItem.newOption;\n// const keyInfo = resultItem.keyInfo;\n// let fakeCmptOpt;\n// if (!newOption) {\n// fakeCmptOpt = oldTarOptsInMainType[index];\n// }\n// else {\n// if (fakeCmpt && fakeCmpt.subType === keyInfo.subType) {\n// fakeCmpt.name = keyInfo.name;\n// if (notInit) {\n// fakeCmptOpt = merge(oldTarOptsInMainType[index], newOption, true);\n// }\n// }\n// else {\n// fakeCmpt = extend({}, keyInfo);\n// if (notInit) {\n// fakeCmptOpt = clone(newOption);\n// }\n// }\n// }\n// if (fakeCmpt) {\n// notInit && resultTarOptsInMainType.push(fakeCmptOpt);\n// resultFakeCmptsInMainType.push(fakeCmpt);\n// }\n// else {\n// notInit && resultTarOptsInMainType.push(void 0);\n// resultFakeCmptsInMainType.push(void 0);\n// }\n// });\n// }\n// });\n// }\n\n\nexport default OptionManager;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createOrUpdatePatternFromDecal } from '../util/decal';\nexport default function decalVisual(ecModel, api) {\n ecModel.eachRawSeries(function (seriesModel) {\n if (ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n\n var data = seriesModel.getData();\n\n if (data.hasItemVisual()) {\n data.each(function (idx) {\n var decal = data.getItemVisual(idx, 'decal');\n\n if (decal) {\n var itemStyle = data.ensureUniqueItemVisual(idx, 'style');\n itemStyle.decal = createOrUpdatePatternFromDecal(decal, api);\n }\n });\n }\n\n var decal = data.getVisual('decal');\n\n if (decal) {\n var style = data.getVisual('style');\n style.decal = createOrUpdatePatternFromDecal(decal, api);\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 { createHashMap, each } from 'zrender/lib/core/util';\nimport { addSafe } from '../util/number'; // (1) [Caution]: the logic is correct based on the premises:\n// data processing stage is blocked in stream.\n// See \n// (2) Only register once when import repeatly.\n// Should be executed after series filtered and before stack calculation.\n\nexport default function dataStack(ecModel) {\n var stackInfoMap = createHashMap();\n ecModel.eachSeries(function (seriesModel) {\n var stack = seriesModel.get('stack'); // Compatibal: when `stack` is set as '', do not stack.\n\n if (stack) {\n var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []);\n var data = seriesModel.getData();\n var stackInfo = {\n // Used for calculate axis extent automatically.\n // TODO: Type getCalculationInfo return more specific type?\n stackResultDimension: data.getCalculationInfo('stackResultDimension'),\n stackedOverDimension: data.getCalculationInfo('stackedOverDimension'),\n stackedDimension: data.getCalculationInfo('stackedDimension'),\n stackedByDimension: data.getCalculationInfo('stackedByDimension'),\n isStackedByIndex: data.getCalculationInfo('isStackedByIndex'),\n data: data,\n seriesModel: seriesModel\n }; // If stacked on axis that do not support data stack.\n\n if (!stackInfo.stackedDimension || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension)) {\n return;\n }\n\n stackInfoList.length && data.setCalculationInfo('stackedOnSeries', stackInfoList[stackInfoList.length - 1].seriesModel);\n stackInfoList.push(stackInfo);\n }\n });\n stackInfoMap.each(calculateStack);\n}\n\nfunction calculateStack(stackInfoList) {\n each(stackInfoList, function (targetStackInfo, idxInStack) {\n var resultVal = [];\n var resultNaN = [NaN, NaN];\n var dims = [targetStackInfo.stackResultDimension, targetStackInfo.stackedOverDimension];\n var targetData = targetStackInfo.data;\n var isStackedByIndex = targetStackInfo.isStackedByIndex; // Should not write on raw data, because stack series model list changes\n // depending on legend selection.\n\n targetData.modify(dims, function (v0, v1, dataIndex) {\n var sum = targetData.get(targetStackInfo.stackedDimension, dataIndex); // Consider `connectNulls` of line area, if value is NaN, stackedOver\n // should also be NaN, to draw a appropriate belt area.\n\n if (isNaN(sum)) {\n return resultNaN;\n }\n\n var byValue;\n var stackedDataRawIndex;\n\n if (isStackedByIndex) {\n stackedDataRawIndex = targetData.getRawIndex(dataIndex);\n } else {\n byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex);\n } // If stackOver is NaN, chart view will render point on value start.\n\n\n var stackedOver = NaN;\n\n for (var j = idxInStack - 1; j >= 0; j--) {\n var stackInfo = stackInfoList[j]; // Has been optimized by inverted indices on `stackedByDimension`.\n\n if (!isStackedByIndex) {\n stackedDataRawIndex = stackInfo.data.rawIndexOf(stackInfo.stackedByDimension, byValue);\n }\n\n if (stackedDataRawIndex >= 0) {\n var val = stackInfo.data.getByRawIndex(stackInfo.stackResultDimension, stackedDataRawIndex); // Considering positive stack, negative stack and empty data\n\n if (sum >= 0 && val > 0 || // Positive stack\n sum <= 0 && val < 0 // Negative stack\n ) {\n // The sum should be as less as possible to be effected\n // by floating arithmetic problem. A wrong result probably\n // filtered incorrectly by axis min/max.\n sum = addSafe(sum, val);\n stackedOver = val;\n break;\n }\n }\n }\n\n resultVal[0] = sum;\n resultVal[1] = stackedOver;\n return resultVal;\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 * as graphic from '../util/graphic';\nvar PI = Math.PI;\n/**\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} [opts]\n * @param {string} [opts.text]\n * @param {string} [opts.color]\n * @param {string} [opts.textColor]\n * @return {module:zrender/Element}\n */\n\nexport default function defaultLoading(api, opts) {\n opts = opts || {};\n zrUtil.defaults(opts, {\n text: 'loading',\n textColor: '#000',\n fontSize: 12,\n fontWeight: 'normal',\n fontStyle: 'normal',\n fontFamily: 'sans-serif',\n maskColor: 'rgba(255, 255, 255, 0.8)',\n showSpinner: true,\n color: '#5470c6',\n spinnerRadius: 10,\n lineWidth: 5,\n zlevel: 0\n });\n var group = new graphic.Group();\n var mask = new graphic.Rect({\n style: {\n fill: opts.maskColor\n },\n zlevel: opts.zlevel,\n z: 10000\n });\n group.add(mask);\n var textContent = new graphic.Text({\n style: {\n text: opts.text,\n fill: opts.textColor,\n fontSize: opts.fontSize,\n fontWeight: opts.fontWeight,\n fontStyle: opts.fontStyle,\n fontFamily: opts.fontFamily\n },\n zlevel: opts.zlevel,\n z: 10001\n });\n var labelRect = new graphic.Rect({\n style: {\n fill: 'none'\n },\n textContent: textContent,\n textConfig: {\n position: 'right',\n distance: 10\n },\n zlevel: opts.zlevel,\n z: 10001\n });\n group.add(labelRect);\n var arc;\n\n if (opts.showSpinner) {\n arc = new graphic.Arc({\n shape: {\n startAngle: -PI / 2,\n endAngle: -PI / 2 + 0.1,\n r: opts.spinnerRadius\n },\n style: {\n stroke: opts.color,\n lineCap: 'round',\n lineWidth: opts.lineWidth\n },\n zlevel: opts.zlevel,\n z: 10001\n });\n arc.animateShape(true).when(1000, {\n endAngle: PI * 3 / 2\n }).start('circularInOut');\n arc.animateShape(true).when(1000, {\n startAngle: PI * 3 / 2\n }).delay(300).start('circularInOut');\n group.add(arc);\n } // Inject resize\n\n\n group.resize = function () {\n var textWidth = textContent.getBoundingRect().width;\n var r = opts.showSpinner ? opts.spinnerRadius : 0; // cx = (containerWidth - arcDiameter - textDistance - textWidth) / 2\n // textDistance needs to be calculated when both animation and text exist\n\n var cx = (api.getWidth() - r * 2 - (opts.showSpinner && textWidth ? 10 : 0) - textWidth) / 2 - (opts.showSpinner && textWidth ? 0 : 5 + textWidth / 2) // only show the text\n + (opts.showSpinner ? 0 : textWidth / 2) // only show the spinner\n + (textWidth ? 0 : r);\n var cy = api.getHeight() / 2;\n opts.showSpinner && arc.setShape({\n cx: cx,\n cy: cy\n });\n labelRect.setShape({\n x: cx - r,\n y: cy - r,\n width: r * 2,\n height: r * 2\n });\n mask.setShape({\n x: 0,\n y: 0,\n width: api.getWidth(),\n height: api.getHeight()\n });\n };\n\n group.resize();\n return group;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar colorAll = ['#37A2DA', '#32C5E9', '#67E0E3', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#E062AE', '#E690D1', '#e7bcf3', '#9d96f5', '#8378EA', '#96BFFF'];\nexport default {\n color: colorAll,\n colorLayer: [['#37A2DA', '#ffd85c', '#fd7b5f'], ['#37A2DA', '#67E0E3', '#FFDB5C', '#ff9f7f', '#E062AE', '#9d96f5'], ['#37A2DA', '#32C5E9', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#e7bcf3', '#8378EA', '#96BFFF'], colorAll]\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar contrastColor = '#B9B8CE';\nvar backgroundColor = '#100C2A';\n\nvar axisCommon = function () {\n return {\n axisLine: {\n lineStyle: {\n color: contrastColor\n }\n },\n splitLine: {\n lineStyle: {\n color: '#484753'\n }\n },\n splitArea: {\n areaStyle: {\n color: ['rgba(255,255,255,0.02)', 'rgba(255,255,255,0.05)']\n }\n },\n minorSplitLine: {\n lineStyle: {\n color: '#20203B'\n }\n }\n };\n};\n\nvar colorPalette = ['#4992ff', '#7cffb2', '#fddd60', '#ff6e76', '#58d9f9', '#05c091', '#ff8a45', '#8d48e3', '#dd79ff'];\nvar theme = {\n darkMode: true,\n color: colorPalette,\n backgroundColor: backgroundColor,\n axisPointer: {\n lineStyle: {\n color: '#817f91'\n },\n crossStyle: {\n color: '#817f91'\n },\n label: {\n // TODO Contrast of label backgorundColor\n color: '#fff'\n }\n },\n legend: {\n textStyle: {\n color: contrastColor\n }\n },\n textStyle: {\n color: contrastColor\n },\n title: {\n textStyle: {\n color: '#EEF1FA'\n },\n subtextStyle: {\n color: '#B9B8CE'\n }\n },\n toolbox: {\n iconStyle: {\n borderColor: contrastColor\n }\n },\n dataZoom: {\n borderColor: '#71708A',\n textStyle: {\n color: contrastColor\n },\n brushStyle: {\n color: 'rgba(135,163,206,0.3)'\n },\n handleStyle: {\n color: '#353450',\n borderColor: '#C5CBE3'\n },\n moveHandleStyle: {\n color: '#B0B6C3',\n opacity: 0.3\n },\n fillerColor: 'rgba(135,163,206,0.2)',\n emphasis: {\n handleStyle: {\n borderColor: '#91B7F2',\n color: '#4D587D'\n },\n moveHandleStyle: {\n color: '#636D9A',\n opacity: 0.7\n }\n },\n dataBackground: {\n lineStyle: {\n color: '#71708A',\n width: 1\n },\n areaStyle: {\n color: '#71708A'\n }\n },\n selectedDataBackground: {\n lineStyle: {\n color: '#87A3CE'\n },\n areaStyle: {\n color: '#87A3CE'\n }\n }\n },\n visualMap: {\n textStyle: {\n color: contrastColor\n }\n },\n timeline: {\n lineStyle: {\n color: contrastColor\n },\n label: {\n color: contrastColor\n },\n controlStyle: {\n color: contrastColor,\n borderColor: contrastColor\n }\n },\n calendar: {\n itemStyle: {\n color: backgroundColor\n },\n dayLabel: {\n color: contrastColor\n },\n monthLabel: {\n color: contrastColor\n },\n yearLabel: {\n color: contrastColor\n }\n },\n timeAxis: axisCommon(),\n logAxis: axisCommon(),\n valueAxis: axisCommon(),\n categoryAxis: axisCommon(),\n line: {\n symbol: 'circle'\n },\n graph: {\n color: colorPalette\n },\n gauge: {\n title: {\n color: contrastColor\n },\n axisLine: {\n lineStyle: {\n color: [[1, 'rgba(207,212,219,0.2)']]\n }\n },\n axisLabel: {\n color: contrastColor\n },\n detail: {\n color: '#EEF1FA'\n }\n },\n candlestick: {\n itemStyle: {\n color: '#f64e56',\n color0: '#54ea92',\n borderColor: '#f64e56',\n borderColor0: '#54ea92' // borderColor: '#ca2824',\n // borderColor0: '#09a443'\n\n }\n }\n};\ntheme.categoryAxis.splitLine.show = false;\nexport default theme;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Helper for model references.\n * There are many manners to refer axis/coordSys.\n */\n// TODO\n// merge relevant logic to this file?\n// check: \"modelHelper\" of tooltip and \"BrushTargetManager\".\nimport { createHashMap, retrieve, each } from 'zrender/lib/core/util';\nimport { SINGLE_REFERRING } from '../util/model';\n/**\n * @class\n * For example:\n * {\n * coordSysName: 'cartesian2d',\n * coordSysDims: ['x', 'y', ...],\n * axisMap: HashMap({\n * x: xAxisModel,\n * y: yAxisModel\n * }),\n * categoryAxisMap: HashMap({\n * x: xAxisModel,\n * y: undefined\n * }),\n * // The index of the first category axis in `coordSysDims`.\n * // `null/undefined` means no category axis exists.\n * firstCategoryDimIndex: 1,\n * // To replace user specified encode.\n * }\n */\n\nvar CoordSysInfo =\n/** @class */\nfunction () {\n function CoordSysInfo(coordSysName) {\n this.coordSysDims = [];\n this.axisMap = createHashMap();\n this.categoryAxisMap = createHashMap();\n this.coordSysName = coordSysName;\n }\n\n return CoordSysInfo;\n}();\n\nexport function getCoordSysInfoBySeries(seriesModel) {\n var coordSysName = seriesModel.get('coordinateSystem');\n var result = new CoordSysInfo(coordSysName);\n var fetch = fetchers[coordSysName];\n\n if (fetch) {\n fetch(seriesModel, result, result.axisMap, result.categoryAxisMap);\n return result;\n }\n}\nvar fetchers = {\n cartesian2d: function (seriesModel, result, axisMap, categoryAxisMap) {\n var xAxisModel = seriesModel.getReferringComponents('xAxis', SINGLE_REFERRING).models[0];\n var yAxisModel = seriesModel.getReferringComponents('yAxis', SINGLE_REFERRING).models[0];\n\n if (process.env.NODE_ENV !== 'production') {\n if (!xAxisModel) {\n throw new Error('xAxis \"' + retrieve(seriesModel.get('xAxisIndex'), seriesModel.get('xAxisId'), 0) + '\" not found');\n }\n\n if (!yAxisModel) {\n throw new Error('yAxis \"' + retrieve(seriesModel.get('xAxisIndex'), seriesModel.get('yAxisId'), 0) + '\" not found');\n }\n }\n\n result.coordSysDims = ['x', 'y'];\n axisMap.set('x', xAxisModel);\n axisMap.set('y', yAxisModel);\n\n if (isCategory(xAxisModel)) {\n categoryAxisMap.set('x', xAxisModel);\n result.firstCategoryDimIndex = 0;\n }\n\n if (isCategory(yAxisModel)) {\n categoryAxisMap.set('y', yAxisModel);\n result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);\n }\n },\n singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) {\n var singleAxisModel = seriesModel.getReferringComponents('singleAxis', SINGLE_REFERRING).models[0];\n\n if (process.env.NODE_ENV !== 'production') {\n if (!singleAxisModel) {\n throw new Error('singleAxis should be specified.');\n }\n }\n\n result.coordSysDims = ['single'];\n axisMap.set('single', singleAxisModel);\n\n if (isCategory(singleAxisModel)) {\n categoryAxisMap.set('single', singleAxisModel);\n result.firstCategoryDimIndex = 0;\n }\n },\n polar: function (seriesModel, result, axisMap, categoryAxisMap) {\n var polarModel = seriesModel.getReferringComponents('polar', SINGLE_REFERRING).models[0];\n var radiusAxisModel = polarModel.findAxisModel('radiusAxis');\n var angleAxisModel = polarModel.findAxisModel('angleAxis');\n\n if (process.env.NODE_ENV !== 'production') {\n if (!angleAxisModel) {\n throw new Error('angleAxis option not found');\n }\n\n if (!radiusAxisModel) {\n throw new Error('radiusAxis option not found');\n }\n }\n\n result.coordSysDims = ['radius', 'angle'];\n axisMap.set('radius', radiusAxisModel);\n axisMap.set('angle', angleAxisModel);\n\n if (isCategory(radiusAxisModel)) {\n categoryAxisMap.set('radius', radiusAxisModel);\n result.firstCategoryDimIndex = 0;\n }\n\n if (isCategory(angleAxisModel)) {\n categoryAxisMap.set('angle', angleAxisModel);\n result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);\n }\n },\n geo: function (seriesModel, result, axisMap, categoryAxisMap) {\n result.coordSysDims = ['lng', 'lat'];\n },\n parallel: function (seriesModel, result, axisMap, categoryAxisMap) {\n var ecModel = seriesModel.ecModel;\n var parallelModel = ecModel.getComponent('parallel', seriesModel.get('parallelIndex'));\n var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice();\n each(parallelModel.parallelAxisIndex, function (axisIndex, index) {\n var axisModel = ecModel.getComponent('parallelAxis', axisIndex);\n var axisDim = coordSysDims[index];\n axisMap.set(axisDim, axisModel);\n\n if (isCategory(axisModel)) {\n categoryAxisMap.set(axisDim, axisModel);\n\n if (result.firstCategoryDimIndex == null) {\n result.firstCategoryDimIndex = index;\n }\n }\n });\n }\n};\n\nfunction isCategory(axisModel) {\n return axisModel.get('type') === 'category';\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either 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 Scale from './Scale';\nimport * as numberUtil from '../util/number';\nimport * as scaleHelper from './helper'; // Use some method of IntervalScale\n\nimport IntervalScale from './Interval';\nvar scaleProto = Scale.prototype; // FIXME:TS refactor: not good to call it directly with `this`?\n\nvar intervalScaleProto = IntervalScale.prototype;\nvar roundingErrorFix = numberUtil.round;\nvar mathFloor = Math.floor;\nvar mathCeil = Math.ceil;\nvar mathPow = Math.pow;\nvar mathLog = Math.log;\n\nvar LogScale =\n/** @class */\nfunction (_super) {\n __extends(LogScale, _super);\n\n function LogScale() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n\n _this.type = 'log';\n _this.base = 10;\n _this._originalScale = new IntervalScale(); // FIXME:TS actually used by `IntervalScale`\n\n _this._interval = 0;\n return _this;\n }\n /**\n * @param Whether expand the ticks to niced extent.\n */\n\n\n LogScale.prototype.getTicks = function (expandToNicedExtent) {\n var originalScale = this._originalScale;\n var extent = this._extent;\n var originalExtent = originalScale.getExtent();\n var ticks = intervalScaleProto.getTicks.call(this, expandToNicedExtent);\n return zrUtil.map(ticks, function (tick) {\n var val = tick.value;\n var powVal = numberUtil.round(mathPow(this.base, val)); // Fix #4158\n\n powVal = val === extent[0] && this._fixMin ? fixRoundingError(powVal, originalExtent[0]) : powVal;\n powVal = val === extent[1] && this._fixMax ? fixRoundingError(powVal, originalExtent[1]) : powVal;\n return {\n value: powVal\n };\n }, this);\n };\n\n LogScale.prototype.setExtent = function (start, end) {\n var base = this.base;\n start = mathLog(start) / mathLog(base);\n end = mathLog(end) / mathLog(base);\n intervalScaleProto.setExtent.call(this, start, end);\n };\n /**\n * @return {number} end\n */\n\n\n LogScale.prototype.getExtent = function () {\n var base = this.base;\n var extent = scaleProto.getExtent.call(this);\n extent[0] = mathPow(base, extent[0]);\n extent[1] = mathPow(base, extent[1]); // Fix #4158\n\n var originalScale = this._originalScale;\n var originalExtent = originalScale.getExtent();\n this._fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0]));\n this._fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1]));\n return extent;\n };\n\n LogScale.prototype.unionExtent = function (extent) {\n this._originalScale.unionExtent(extent);\n\n var base = this.base;\n extent[0] = mathLog(extent[0]) / mathLog(base);\n extent[1] = mathLog(extent[1]) / mathLog(base);\n scaleProto.unionExtent.call(this, extent);\n };\n\n LogScale.prototype.unionExtentFromData = function (data, dim) {\n // TODO\n // filter value that <= 0\n this.unionExtent(data.getApproximateExtent(dim));\n };\n /**\n * Update interval and extent of intervals for nice ticks\n * @param approxTickNum default 10 Given approx tick number\n */\n\n\n LogScale.prototype.niceTicks = function (approxTickNum) {\n approxTickNum = approxTickNum || 10;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n\n if (span === Infinity || span <= 0) {\n return;\n }\n\n var interval = numberUtil.quantity(span);\n var err = approxTickNum / span * interval; // Filter ticks to get closer to the desired count.\n\n if (err <= 0.5) {\n interval *= 10;\n } // Interval should be integer\n\n\n while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) {\n interval *= 10;\n }\n\n var niceExtent = [numberUtil.round(mathCeil(extent[0] / interval) * interval), numberUtil.round(mathFloor(extent[1] / interval) * interval)];\n this._interval = interval;\n this._niceExtent = niceExtent;\n };\n\n LogScale.prototype.niceExtent = function (opt) {\n intervalScaleProto.niceExtent.call(this, opt);\n this._fixMin = opt.fixMin;\n this._fixMax = opt.fixMax;\n };\n\n LogScale.prototype.parse = function (val) {\n return val;\n };\n\n LogScale.prototype.contain = function (val) {\n val = mathLog(val) / mathLog(this.base);\n return scaleHelper.contain(val, this._extent);\n };\n\n LogScale.prototype.normalize = function (val) {\n val = mathLog(val) / mathLog(this.base);\n return scaleHelper.normalize(val, this._extent);\n };\n\n LogScale.prototype.scale = function (val) {\n val = scaleHelper.scale(val, this._extent);\n return mathPow(this.base, val);\n };\n\n LogScale.type = 'log';\n return LogScale;\n}(Scale);\n\nvar proto = LogScale.prototype;\nproto.getMinorTicks = intervalScaleProto.getMinorTicks;\nproto.getLabel = intervalScaleProto.getLabel;\n\nfunction fixRoundingError(val, originalVal) {\n return roundingErrorFix(val, numberUtil.getPrecision(originalVal));\n}\n\nScale.registerClass(LogScale);\nexport default LogScale;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 negativeDataFilter(seriesType) {\n return {\n seriesType: seriesType,\n reset: function (seriesModel, ecModel) {\n var data = seriesModel.getData();\n data.filterSelf(function (idx) {\n // handle negative value condition\n var valueDim = data.mapDimension('value');\n var curValue = data.get(valueDim, idx);\n\n if (typeof curValue === 'number' && !isNaN(curValue) && curValue < 0) {\n return false;\n }\n\n return true;\n });\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Animate multiple elements with a single done-callback.\n *\n * @example\n * animation\n * .createWrap()\n * .add(el1, {x: 10, y: 10})\n * .add(el2, {shape: {width: 500}, style: {fill: 'red'}}, 400)\n * .done(function () { // done })\n * .start('cubicOut');\n */\nvar AnimationWrap =\n/** @class */\nfunction () {\n function AnimationWrap() {\n this._storage = [];\n this._elExistsMap = {};\n }\n /**\n * Caution: a el can only be added once, otherwise 'done'\n * might not be called. This method checks this (by el.id),\n * suppresses adding and returns false when existing el found.\n *\n * @return Whether adding succeeded.\n */\n\n\n AnimationWrap.prototype.add = function (el, target, duration, delay, easing) {\n if (this._elExistsMap[el.id]) {\n return false;\n }\n\n this._elExistsMap[el.id] = true;\n\n this._storage.push({\n el: el,\n target: target,\n duration: duration,\n delay: delay,\n easing: easing\n });\n\n return true;\n };\n /**\n * Only execute when animation done/aborted.\n */\n\n\n AnimationWrap.prototype.finished = function (callback) {\n this._finishedCallback = callback;\n return this;\n };\n /**\n * Will stop exist animation firstly.\n */\n\n\n AnimationWrap.prototype.start = function () {\n var _this = this;\n\n var count = this._storage.length;\n\n var checkTerminate = function () {\n count--;\n\n if (count <= 0) {\n // Guard.\n _this._storage.length = 0;\n _this._elExistsMap = {};\n _this._finishedCallback && _this._finishedCallback();\n }\n };\n\n for (var i = 0, len = this._storage.length; i < len; i++) {\n var item = this._storage[i];\n item.el.animateTo(item.target, {\n duration: item.duration,\n delay: item.delay,\n easing: item.easing,\n setToFinal: true,\n done: checkTerminate,\n aborted: checkTerminate\n });\n }\n\n return this;\n };\n\n return AnimationWrap;\n}();\n\nexport function createWrap() {\n return new AnimationWrap();\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { parsePercent } from '../util/number';\nimport { isDimensionStacked } from '../data/helper/dataStackHelper';\n\nfunction getSeriesStackId(seriesModel) {\n return seriesModel.get('stack') || '__ec_stack_' + seriesModel.seriesIndex;\n}\n\nfunction getAxisKey(polar, axis) {\n return axis.dim + polar.model.componentIndex;\n}\n\nfunction barLayoutPolar(seriesType, ecModel, api) {\n var lastStackCoords = {};\n var barWidthAndOffset = calRadialBar(zrUtil.filter(ecModel.getSeriesByType(seriesType), function (seriesModel) {\n return !ecModel.isSeriesFiltered(seriesModel) && seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'polar';\n }));\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n // Check series coordinate, do layout for polar only\n if (seriesModel.coordinateSystem.type !== 'polar') {\n return;\n }\n\n var data = seriesModel.getData();\n var polar = seriesModel.coordinateSystem;\n var baseAxis = polar.getBaseAxis();\n var axisKey = getAxisKey(polar, baseAxis);\n var stackId = getSeriesStackId(seriesModel);\n var columnLayoutInfo = barWidthAndOffset[axisKey][stackId];\n var columnOffset = columnLayoutInfo.offset;\n var columnWidth = columnLayoutInfo.width;\n var valueAxis = polar.getOtherAxis(baseAxis);\n var cx = seriesModel.coordinateSystem.cx;\n var cy = seriesModel.coordinateSystem.cy;\n var barMinHeight = seriesModel.get('barMinHeight') || 0;\n var barMinAngle = seriesModel.get('barMinAngle') || 0;\n lastStackCoords[stackId] = lastStackCoords[stackId] || [];\n var valueDim = data.mapDimension(valueAxis.dim);\n var baseDim = data.mapDimension(baseAxis.dim);\n var stacked = isDimensionStacked(data, valueDim\n /*, baseDim*/\n );\n var clampLayout = baseAxis.dim !== 'radius' || !seriesModel.get('roundCap', true);\n var valueAxisStart = valueAxis.dataToCoord(0);\n\n for (var idx = 0, len = data.count(); idx < len; idx++) {\n var value = data.get(valueDim, idx);\n var baseValue = data.get(baseDim, idx);\n var sign = value >= 0 ? 'p' : 'n';\n var baseCoord = valueAxisStart; // Because of the barMinHeight, we can not use the value in\n // stackResultDimension directly.\n // Only ordinal axis can be stacked.\n\n if (stacked) {\n if (!lastStackCoords[stackId][baseValue]) {\n lastStackCoords[stackId][baseValue] = {\n p: valueAxisStart,\n n: valueAxisStart // Negative stack\n\n };\n } // Should also consider #4243\n\n\n baseCoord = lastStackCoords[stackId][baseValue][sign];\n }\n\n var r0 = void 0;\n var r = void 0;\n var startAngle = void 0;\n var endAngle = void 0; // radial sector\n\n if (valueAxis.dim === 'radius') {\n var radiusSpan = valueAxis.dataToCoord(value) - valueAxisStart;\n var angle = baseAxis.dataToCoord(baseValue);\n\n if (Math.abs(radiusSpan) < barMinHeight) {\n radiusSpan = (radiusSpan < 0 ? -1 : 1) * barMinHeight;\n }\n\n r0 = baseCoord;\n r = baseCoord + radiusSpan;\n startAngle = angle - columnOffset;\n endAngle = startAngle - columnWidth;\n stacked && (lastStackCoords[stackId][baseValue][sign] = r);\n } // tangential sector\n else {\n var angleSpan = valueAxis.dataToCoord(value, clampLayout) - valueAxisStart;\n var radius = baseAxis.dataToCoord(baseValue);\n\n if (Math.abs(angleSpan) < barMinAngle) {\n angleSpan = (angleSpan < 0 ? -1 : 1) * barMinAngle;\n }\n\n r0 = radius + columnOffset;\n r = r0 + columnWidth;\n startAngle = baseCoord;\n endAngle = baseCoord + angleSpan; // if the previous stack is at the end of the ring,\n // add a round to differentiate it from origin\n // let extent = angleAxis.getExtent();\n // let stackCoord = angle;\n // if (stackCoord === extent[0] && value > 0) {\n // stackCoord = extent[1];\n // }\n // else if (stackCoord === extent[1] && value < 0) {\n // stackCoord = extent[0];\n // }\n\n stacked && (lastStackCoords[stackId][baseValue][sign] = endAngle);\n }\n\n data.setItemLayout(idx, {\n cx: cx,\n cy: cy,\n r0: r0,\n r: r,\n // Consider that positive angle is anti-clockwise,\n // while positive radian of sector is clockwise\n startAngle: -startAngle * Math.PI / 180,\n endAngle: -endAngle * Math.PI / 180\n });\n }\n });\n}\n/**\n * Calculate bar width and offset for radial bar charts\n */\n\n\nfunction calRadialBar(barSeries) {\n // Columns info on each category axis. Key is polar name\n var columnsMap = {};\n zrUtil.each(barSeries, function (seriesModel, idx) {\n var data = seriesModel.getData();\n var polar = seriesModel.coordinateSystem;\n var baseAxis = polar.getBaseAxis();\n var axisKey = getAxisKey(polar, baseAxis);\n var axisExtent = baseAxis.getExtent();\n var bandWidth = baseAxis.type === 'category' ? baseAxis.getBandWidth() : Math.abs(axisExtent[1] - axisExtent[0]) / data.count();\n var columnsOnAxis = columnsMap[axisKey] || {\n bandWidth: bandWidth,\n remainedWidth: bandWidth,\n autoWidthCount: 0,\n categoryGap: '20%',\n gap: '30%',\n stacks: {}\n };\n var stacks = columnsOnAxis.stacks;\n columnsMap[axisKey] = columnsOnAxis;\n var stackId = getSeriesStackId(seriesModel);\n\n if (!stacks[stackId]) {\n columnsOnAxis.autoWidthCount++;\n }\n\n stacks[stackId] = stacks[stackId] || {\n width: 0,\n maxWidth: 0\n };\n var barWidth = parsePercent(seriesModel.get('barWidth'), bandWidth);\n var barMaxWidth = parsePercent(seriesModel.get('barMaxWidth'), bandWidth);\n var barGap = seriesModel.get('barGap');\n var barCategoryGap = seriesModel.get('barCategoryGap');\n\n if (barWidth && !stacks[stackId].width) {\n barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n stacks[stackId].width = barWidth;\n columnsOnAxis.remainedWidth -= barWidth;\n }\n\n barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n barGap != null && (columnsOnAxis.gap = barGap);\n barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap);\n });\n var result = {};\n zrUtil.each(columnsMap, function (columnsOnAxis, coordSysName) {\n result[coordSysName] = {};\n var stacks = columnsOnAxis.stacks;\n var bandWidth = columnsOnAxis.bandWidth;\n var categoryGap = parsePercent(columnsOnAxis.categoryGap, bandWidth);\n var barGapPercent = parsePercent(columnsOnAxis.gap, 1);\n var remainedWidth = columnsOnAxis.remainedWidth;\n var autoWidthCount = columnsOnAxis.autoWidthCount;\n var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0); // Find if any auto calculated bar exceeded maxBarWidth\n\n zrUtil.each(stacks, function (column, stack) {\n var maxWidth = column.maxWidth;\n\n if (maxWidth && maxWidth < autoWidth) {\n maxWidth = Math.min(maxWidth, remainedWidth);\n\n if (column.width) {\n maxWidth = Math.min(maxWidth, column.width);\n }\n\n remainedWidth -= maxWidth;\n column.width = maxWidth;\n autoWidthCount--;\n }\n }); // Recalculate width again\n\n autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0);\n var widthSum = 0;\n var lastColumn;\n zrUtil.each(stacks, function (column, idx) {\n if (!column.width) {\n column.width = autoWidth;\n }\n\n lastColumn = column;\n widthSum += column.width * (1 + barGapPercent);\n });\n\n if (lastColumn) {\n widthSum -= lastColumn.width * barGapPercent;\n }\n\n var offset = -widthSum / 2;\n zrUtil.each(stacks, function (column, stackId) {\n result[coordSysName][stackId] = result[coordSysName][stackId] || {\n offset: offset,\n width: column.width\n };\n offset += column.width * (1 + barGapPercent);\n });\n });\n return result;\n}\n\nexport default barLayoutPolar;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { retrieveRawValue } from '../data/helper/dataProvider';\nimport { makeInner } from '../util/model';\nimport { getDecalFromPalette } from '../model/mixin/palette';\nvar DEFAULT_OPTION = {\n label: {\n enabled: true\n },\n decal: {\n show: false\n }\n};\nvar inner = makeInner();\nvar decalPaletteScope = {};\nexport default function ariaVisual(ecModel, api) {\n var ariaModel = ecModel.getModel('aria'); // See \"area enabled\" detection code in `GlobalModel.ts`.\n\n if (!ariaModel.get('enabled')) {\n return;\n }\n\n var defaultOption = zrUtil.clone(DEFAULT_OPTION);\n zrUtil.merge(defaultOption.label, ecModel.getLocaleModel().get('aria'), false);\n zrUtil.merge(ariaModel.option, defaultOption, false);\n setDecal();\n setLabel();\n\n function setDecal() {\n var decalModel = ariaModel.getModel('decal');\n var useDecal = decalModel.get('show');\n\n if (useDecal) {\n // Each type of series use one scope.\n // Pie and funnel are using diferrent scopes\n var paletteScopeGroupByType_1 = zrUtil.createHashMap();\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.isColorBySeries()) {\n return;\n }\n\n var decalScope = paletteScopeGroupByType_1.get(seriesModel.type);\n\n if (!decalScope) {\n decalScope = {};\n paletteScopeGroupByType_1.set(seriesModel.type, decalScope);\n }\n\n inner(seriesModel).scope = decalScope;\n });\n ecModel.eachRawSeries(function (seriesModel) {\n if (ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n\n if (typeof seriesModel.enableAriaDecal === 'function') {\n // Let series define how to use decal palette on data\n seriesModel.enableAriaDecal();\n return;\n }\n\n var data = seriesModel.getData();\n\n if (!seriesModel.isColorBySeries()) {\n var dataAll_1 = seriesModel.getRawData();\n var idxMap_1 = {};\n var decalScope_1 = inner(seriesModel).scope;\n data.each(function (idx) {\n var rawIdx = data.getRawIndex(idx);\n idxMap_1[rawIdx] = idx;\n });\n var dataCount_1 = dataAll_1.count();\n dataAll_1.each(function (rawIdx) {\n var idx = idxMap_1[rawIdx];\n var name = dataAll_1.getName(rawIdx) || rawIdx + '';\n var paletteDecal = getDecalFromPalette(seriesModel.ecModel, name, decalScope_1, dataCount_1);\n var specifiedDecal = data.getItemVisual(idx, 'decal');\n data.setItemVisual(idx, 'decal', mergeDecal(specifiedDecal, paletteDecal));\n });\n } else {\n var paletteDecal = getDecalFromPalette(seriesModel.ecModel, seriesModel.name, decalPaletteScope, ecModel.getSeriesCount());\n var specifiedDecal = data.getVisual('decal');\n data.setVisual('decal', mergeDecal(specifiedDecal, paletteDecal));\n }\n\n function mergeDecal(specifiedDecal, paletteDecal) {\n // Merge decal from palette to decal from itemStyle.\n // User do not need to specify all of the decal props.\n var resultDecal = specifiedDecal ? zrUtil.extend(zrUtil.extend({}, paletteDecal), specifiedDecal) : paletteDecal;\n resultDecal.dirty = true;\n return resultDecal;\n }\n });\n }\n }\n\n function setLabel() {\n var labelLocale = ecModel.getLocaleModel().get('aria');\n var labelModel = ariaModel.getModel('label');\n labelModel.option = zrUtil.defaults(labelModel.option, labelLocale);\n\n if (!labelModel.get('enabled')) {\n return;\n }\n\n var dom = api.getZr().dom;\n\n if (labelModel.get('description')) {\n dom.setAttribute('aria-label', labelModel.get('description'));\n return;\n }\n\n var seriesCnt = ecModel.getSeriesCount();\n var maxDataCnt = labelModel.get(['data', 'maxCount']) || 10;\n var maxSeriesCnt = labelModel.get(['series', 'maxCount']) || 10;\n var displaySeriesCnt = Math.min(seriesCnt, maxSeriesCnt);\n var ariaLabel;\n\n if (seriesCnt < 1) {\n // No series, no aria label\n return;\n } else {\n var title = getTitle();\n\n if (title) {\n var withTitle = labelModel.get(['general', 'withTitle']);\n ariaLabel = replace(withTitle, {\n title: title\n });\n } else {\n ariaLabel = labelModel.get(['general', 'withoutTitle']);\n }\n\n var seriesLabels_1 = [];\n var prefix = seriesCnt > 1 ? labelModel.get(['series', 'multiple', 'prefix']) : labelModel.get(['series', 'single', 'prefix']);\n ariaLabel += replace(prefix, {\n seriesCount: seriesCnt\n });\n ecModel.eachSeries(function (seriesModel, idx) {\n if (idx < displaySeriesCnt) {\n var seriesLabel = void 0;\n var seriesName = seriesModel.get('name');\n var withName = seriesName ? 'withName' : 'withoutName';\n seriesLabel = seriesCnt > 1 ? labelModel.get(['series', 'multiple', withName]) : labelModel.get(['series', 'single', withName]);\n seriesLabel = replace(seriesLabel, {\n seriesId: seriesModel.seriesIndex,\n seriesName: seriesModel.get('name'),\n seriesType: getSeriesTypeName(seriesModel.subType)\n });\n var data = seriesModel.getData();\n\n if (data.count() > maxDataCnt) {\n // Show part of data\n var partialLabel = labelModel.get(['data', 'partialData']);\n seriesLabel += replace(partialLabel, {\n displayCnt: maxDataCnt\n });\n } else {\n seriesLabel += labelModel.get(['data', 'allData']);\n }\n\n var dataLabels = [];\n\n for (var i = 0; i < data.count(); i++) {\n if (i < maxDataCnt) {\n var name_1 = data.getName(i);\n var value = retrieveRawValue(data, i);\n var dataLabel = labelModel.get(['data', name_1 ? 'withName' : 'withoutName']);\n dataLabels.push(replace(dataLabel, {\n name: name_1,\n value: value\n }));\n }\n }\n\n var middleSeparator_1 = labelModel.get(['data', 'separator', 'middle']);\n var endSeparator_1 = labelModel.get(['data', 'separator', 'end']);\n seriesLabel += dataLabels.join(middleSeparator_1) + endSeparator_1;\n seriesLabels_1.push(seriesLabel);\n }\n });\n var separatorModel = labelModel.getModel(['series', 'multiple', 'separator']);\n var middleSeparator = separatorModel.get('middle');\n var endSeparator = separatorModel.get('end');\n ariaLabel += seriesLabels_1.join(middleSeparator) + endSeparator;\n dom.setAttribute('aria-label', ariaLabel);\n }\n }\n\n function replace(str, keyValues) {\n if (typeof str !== 'string') {\n return str;\n }\n\n var result = str;\n zrUtil.each(keyValues, function (value, key) {\n result = result.replace(new RegExp('\\\\{\\\\s*' + key + '\\\\s*\\\\}', 'g'), value);\n });\n return result;\n }\n\n function getTitle() {\n var title = ecModel.get('title');\n\n if (title && title.length) {\n title = title[0];\n }\n\n return title && title.text;\n }\n\n function getSeriesTypeName(type) {\n return ecModel.getLocaleModel().get(['series', 'typeNames'])[type] || '自定义图';\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { keys, isArray, map, isObject, isString, isRegExp, isArrayLike, hasOwn } from 'zrender/lib/core/util';\nimport { throwError, makePrintable } from './log';\nimport { getRawValueParser, createFilterComparator } from '../data/helper/dataValueHelper';\n;\nvar RELATIONAL_EXPRESSION_OP_ALIAS_MAP = {\n value: 'eq',\n // PENDING: not good for literal semantic?\n '<': 'lt',\n '<=': 'lte',\n '>': 'gt',\n '>=': 'gte',\n '=': 'eq',\n '!=': 'ne',\n '<>': 'ne' // Might mileading for sake of the different between '==' and '===',\n // So dont support them.\n // '==': 'eq',\n // '===': 'seq',\n // '!==': 'sne'\n // PENDING: Whether support some common alias \"ge\", \"le\", \"neq\"?\n // ge: 'gte',\n // le: 'lte',\n // neq: 'ne',\n\n}; // type RelationalExpressionOpEvaluate = (tarVal: unknown, condVal: unknown) => boolean;\n\nvar RegExpEvaluator =\n/** @class */\nfunction () {\n function RegExpEvaluator(rVal) {\n // Support condVal: RegExp | string\n var condValue = this._condVal = isString(rVal) ? new RegExp(rVal) : isRegExp(rVal) ? rVal : null;\n\n if (condValue == null) {\n var errMsg = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Illegal regexp', rVal, 'in');\n }\n\n throwError(errMsg);\n }\n }\n\n RegExpEvaluator.prototype.evaluate = function (lVal) {\n var type = typeof lVal;\n return type === 'string' ? this._condVal.test(lVal) : type === 'number' ? this._condVal.test(lVal + '') : false;\n };\n\n return RegExpEvaluator;\n}();\n\nvar ConstConditionInternal =\n/** @class */\nfunction () {\n function ConstConditionInternal() {}\n\n ConstConditionInternal.prototype.evaluate = function () {\n return this.value;\n };\n\n return ConstConditionInternal;\n}();\n\nvar AndConditionInternal =\n/** @class */\nfunction () {\n function AndConditionInternal() {}\n\n AndConditionInternal.prototype.evaluate = function () {\n var children = this.children;\n\n for (var i = 0; i < children.length; i++) {\n if (!children[i].evaluate()) {\n return false;\n }\n }\n\n return true;\n };\n\n return AndConditionInternal;\n}();\n\nvar OrConditionInternal =\n/** @class */\nfunction () {\n function OrConditionInternal() {}\n\n OrConditionInternal.prototype.evaluate = function () {\n var children = this.children;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].evaluate()) {\n return true;\n }\n }\n\n return false;\n };\n\n return OrConditionInternal;\n}();\n\nvar NotConditionInternal =\n/** @class */\nfunction () {\n function NotConditionInternal() {}\n\n NotConditionInternal.prototype.evaluate = function () {\n return !this.child.evaluate();\n };\n\n return NotConditionInternal;\n}();\n\nvar RelationalConditionInternal =\n/** @class */\nfunction () {\n function RelationalConditionInternal() {}\n\n RelationalConditionInternal.prototype.evaluate = function () {\n var needParse = !!this.valueParser; // Call getValue with no `this`.\n\n var getValue = this.getValue;\n var tarValRaw = getValue(this.valueGetterParam);\n var tarValParsed = needParse ? this.valueParser(tarValRaw) : null; // Relational cond follow \"and\" logic internally.\n\n for (var i = 0; i < this.subCondList.length; i++) {\n if (!this.subCondList[i].evaluate(needParse ? tarValParsed : tarValRaw)) {\n return false;\n }\n }\n\n return true;\n };\n\n return RelationalConditionInternal;\n}();\n\nfunction parseOption(exprOption, getters) {\n if (exprOption === true || exprOption === false) {\n var cond = new ConstConditionInternal();\n cond.value = exprOption;\n return cond;\n }\n\n var errMsg = '';\n\n if (!isObjectNotArray(exprOption)) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Illegal config. Expect a plain object but actually', exprOption);\n }\n\n throwError(errMsg);\n }\n\n if (exprOption.and) {\n return parseAndOrOption('and', exprOption, getters);\n } else if (exprOption.or) {\n return parseAndOrOption('or', exprOption, getters);\n } else if (exprOption.not) {\n return parseNotOption(exprOption, getters);\n }\n\n return parseRelationalOption(exprOption, getters);\n}\n\nfunction parseAndOrOption(op, exprOption, getters) {\n var subOptionArr = exprOption[op];\n var errMsg = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('\"and\"/\"or\" condition should only be `' + op + ': [...]` and must not be empty array.', 'Illegal condition:', exprOption);\n }\n\n if (!isArray(subOptionArr)) {\n throwError(errMsg);\n }\n\n if (!subOptionArr.length) {\n throwError(errMsg);\n }\n\n var cond = op === 'and' ? new AndConditionInternal() : new OrConditionInternal();\n cond.children = map(subOptionArr, function (subOption) {\n return parseOption(subOption, getters);\n });\n\n if (!cond.children.length) {\n throwError(errMsg);\n }\n\n return cond;\n}\n\nfunction parseNotOption(exprOption, getters) {\n var subOption = exprOption.not;\n var errMsg = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('\"not\" condition should only be `not: {}`.', 'Illegal condition:', exprOption);\n }\n\n if (!isObjectNotArray(subOption)) {\n throwError(errMsg);\n }\n\n var cond = new NotConditionInternal();\n cond.child = parseOption(subOption, getters);\n\n if (!cond.child) {\n throwError(errMsg);\n }\n\n return cond;\n}\n\nfunction parseRelationalOption(exprOption, getters) {\n var errMsg = '';\n var valueGetterParam = getters.prepareGetValue(exprOption);\n var subCondList = [];\n var exprKeys = keys(exprOption);\n var parserName = exprOption.parser;\n var valueParser = parserName ? getRawValueParser(parserName) : null;\n\n for (var i = 0; i < exprKeys.length; i++) {\n var keyRaw = exprKeys[i];\n\n if (keyRaw === 'parser' || getters.valueGetterAttrMap.get(keyRaw)) {\n continue;\n }\n\n var op = hasOwn(RELATIONAL_EXPRESSION_OP_ALIAS_MAP, keyRaw) ? RELATIONAL_EXPRESSION_OP_ALIAS_MAP[keyRaw] : keyRaw;\n var condValueRaw = exprOption[keyRaw];\n var condValueParsed = valueParser ? valueParser(condValueRaw) : condValueRaw;\n var evaluator = createFilterComparator(op, condValueParsed) || op === 'reg' && new RegExpEvaluator(condValueParsed);\n\n if (!evaluator) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Illegal relational operation: \"' + keyRaw + '\" in condition:', exprOption);\n }\n\n throwError(errMsg);\n }\n\n subCondList.push(evaluator);\n }\n\n if (!subCondList.length) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Relational condition must have at least one operator.', 'Illegal condition:', exprOption);\n } // No relational operator always disabled in case of dangers result.\n\n\n throwError(errMsg);\n }\n\n var cond = new RelationalConditionInternal();\n cond.valueGetterParam = valueGetterParam;\n cond.valueParser = valueParser;\n cond.getValue = getters.getValue;\n cond.subCondList = subCondList;\n return cond;\n}\n\nfunction isObjectNotArray(val) {\n return isObject(val) && !isArrayLike(val);\n}\n\nvar ConditionalExpressionParsed =\n/** @class */\nfunction () {\n function ConditionalExpressionParsed(exprOption, getters) {\n this._cond = parseOption(exprOption, getters);\n }\n\n ConditionalExpressionParsed.prototype.evaluate = function () {\n return this._cond.evaluate();\n };\n\n return ConditionalExpressionParsed;\n}();\n\n;\nexport function parseConditionalExpression(exprOption, getters) {\n return new ConditionalExpressionParsed(exprOption, getters);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO: move labels out of viewport.\nimport { BoundingRect, updateProps, initProps, isElementRemoved } from '../util/graphic';\nimport { getECData } from '../util/innerStore';\nimport { parsePercent } from '../util/number';\nimport Transformable from 'zrender/lib/core/Transformable';\nimport { updateLabelLinePoints, setLabelLineStyle, getLabelLineStatesModels } from './labelGuideHelper';\nimport { makeInner } from '../util/model';\nimport { retrieve2, each, keys, isFunction, filter, indexOf } from 'zrender/lib/core/util';\nimport { prepareLayoutList, hideOverlap, shiftLayoutOnX, shiftLayoutOnY } from './labelLayoutHelper';\nimport { labelInner, animateLabelValue } from './labelStyle';\n\nfunction cloneArr(points) {\n if (points) {\n var newPoints = [];\n\n for (var i = 0; i < points.length; i++) {\n newPoints.push(points[i].slice());\n }\n\n return newPoints;\n }\n}\n\nfunction prepareLayoutCallbackParams(labelItem, hostEl) {\n var label = labelItem.label;\n var labelLine = hostEl && hostEl.getTextGuideLine();\n return {\n dataIndex: labelItem.dataIndex,\n dataType: labelItem.dataType,\n seriesIndex: labelItem.seriesModel.seriesIndex,\n text: labelItem.label.style.text,\n rect: labelItem.hostRect,\n labelRect: labelItem.rect,\n // x: labelAttr.x,\n // y: labelAttr.y,\n align: label.style.align,\n verticalAlign: label.style.verticalAlign,\n labelLinePoints: cloneArr(labelLine && labelLine.shape.points)\n };\n}\n\nvar LABEL_OPTION_TO_STYLE_KEYS = ['align', 'verticalAlign', 'width', 'height', 'fontSize'];\nvar dummyTransformable = new Transformable();\nvar labelLayoutInnerStore = makeInner();\nvar labelLineAnimationStore = makeInner();\n\nfunction extendWithKeys(target, source, keys) {\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (source[key] != null) {\n target[key] = source[key];\n }\n }\n}\n\nvar LABEL_LAYOUT_PROPS = ['x', 'y', 'rotation'];\n\nvar LabelManager =\n/** @class */\nfunction () {\n function LabelManager() {\n this._labelList = [];\n this._chartViewList = [];\n }\n\n LabelManager.prototype.clearLabels = function () {\n this._labelList = [];\n this._chartViewList = [];\n };\n /**\n * Add label to manager\n */\n\n\n LabelManager.prototype._addLabel = function (dataIndex, dataType, seriesModel, label, layoutOption) {\n var labelStyle = label.style;\n var hostEl = label.__hostTarget;\n var textConfig = hostEl.textConfig || {}; // TODO: If label is in other state.\n\n var labelTransform = label.getComputedTransform();\n var labelRect = label.getBoundingRect().plain();\n BoundingRect.applyTransform(labelRect, labelRect, labelTransform);\n\n if (labelTransform) {\n dummyTransformable.setLocalTransform(labelTransform);\n } else {\n // Identity transform.\n dummyTransformable.x = dummyTransformable.y = dummyTransformable.rotation = dummyTransformable.originX = dummyTransformable.originY = 0;\n dummyTransformable.scaleX = dummyTransformable.scaleY = 1;\n }\n\n var host = label.__hostTarget;\n var hostRect;\n\n if (host) {\n hostRect = host.getBoundingRect().plain();\n var transform = host.getComputedTransform();\n BoundingRect.applyTransform(hostRect, hostRect, transform);\n }\n\n var labelGuide = hostRect && host.getTextGuideLine();\n\n this._labelList.push({\n label: label,\n labelLine: labelGuide,\n seriesModel: seriesModel,\n dataIndex: dataIndex,\n dataType: dataType,\n layoutOption: layoutOption,\n computedLayoutOption: null,\n rect: labelRect,\n hostRect: hostRect,\n // Label with lower priority will be hidden when overlapped\n // Use rect size as default priority\n priority: hostRect ? hostRect.width * hostRect.height : 0,\n // Save default label attributes.\n // For restore if developers want get back to default value in callback.\n defaultAttr: {\n ignore: label.ignore,\n labelGuideIgnore: labelGuide && labelGuide.ignore,\n x: dummyTransformable.x,\n y: dummyTransformable.y,\n scaleX: dummyTransformable.scaleX,\n scaleY: dummyTransformable.scaleY,\n rotation: dummyTransformable.rotation,\n style: {\n x: labelStyle.x,\n y: labelStyle.y,\n align: labelStyle.align,\n verticalAlign: labelStyle.verticalAlign,\n width: labelStyle.width,\n height: labelStyle.height,\n fontSize: labelStyle.fontSize\n },\n cursor: label.cursor,\n attachedPos: textConfig.position,\n attachedRot: textConfig.rotation\n }\n });\n };\n\n LabelManager.prototype.addLabelsOfSeries = function (chartView) {\n var _this = this;\n\n this._chartViewList.push(chartView);\n\n var seriesModel = chartView.__model;\n var layoutOption = seriesModel.get('labelLayout');\n /**\n * Ignore layouting if it's not specified anything.\n */\n\n if (!(isFunction(layoutOption) || keys(layoutOption).length)) {\n return;\n }\n\n chartView.group.traverse(function (child) {\n if (child.ignore) {\n return true; // Stop traverse descendants.\n } // Only support label being hosted on graphic elements.\n\n\n var textEl = child.getTextContent();\n var ecData = getECData(child); // Can only attach the text on the element with dataIndex\n\n if (textEl && !textEl.disableLabelLayout) {\n _this._addLabel(ecData.dataIndex, ecData.dataType, seriesModel, textEl, layoutOption);\n }\n });\n };\n\n LabelManager.prototype.updateLayoutConfig = function (api) {\n var width = api.getWidth();\n var height = api.getHeight();\n\n function createDragHandler(el, labelLineModel) {\n return function () {\n updateLabelLinePoints(el, labelLineModel);\n };\n }\n\n for (var i = 0; i < this._labelList.length; i++) {\n var labelItem = this._labelList[i];\n var label = labelItem.label;\n var hostEl = label.__hostTarget;\n var defaultLabelAttr = labelItem.defaultAttr;\n var layoutOption = void 0; // TODO A global layout option?\n\n if (typeof labelItem.layoutOption === 'function') {\n layoutOption = labelItem.layoutOption(prepareLayoutCallbackParams(labelItem, hostEl));\n } else {\n layoutOption = labelItem.layoutOption;\n }\n\n layoutOption = layoutOption || {};\n labelItem.computedLayoutOption = layoutOption;\n var degreeToRadian = Math.PI / 180; // TODO hostEl should always exists.\n // Or label should not have parent because the x, y is all in global space.\n\n if (hostEl) {\n hostEl.setTextConfig({\n // Force to set local false.\n local: false,\n // Ignore position and rotation config on the host el if x or y is changed.\n position: layoutOption.x != null || layoutOption.y != null ? null : defaultLabelAttr.attachedPos,\n // Ignore rotation config on the host el if rotation is changed.\n rotation: layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.attachedRot,\n offset: [layoutOption.dx || 0, layoutOption.dy || 0]\n });\n }\n\n var needsUpdateLabelLine = false;\n\n if (layoutOption.x != null) {\n // TODO width of chart view.\n label.x = parsePercent(layoutOption.x, width);\n label.setStyle('x', 0); // Ignore movement in style. TODO: origin.\n\n needsUpdateLabelLine = true;\n } else {\n label.x = defaultLabelAttr.x;\n label.setStyle('x', defaultLabelAttr.style.x);\n }\n\n if (layoutOption.y != null) {\n // TODO height of chart view.\n label.y = parsePercent(layoutOption.y, height);\n label.setStyle('y', 0); // Ignore movement in style.\n\n needsUpdateLabelLine = true;\n } else {\n label.y = defaultLabelAttr.y;\n label.setStyle('y', defaultLabelAttr.style.y);\n }\n\n if (layoutOption.labelLinePoints) {\n var guideLine = hostEl.getTextGuideLine();\n\n if (guideLine) {\n guideLine.setShape({\n points: layoutOption.labelLinePoints\n }); // Not update\n\n needsUpdateLabelLine = false;\n }\n }\n\n var labelLayoutStore = labelLayoutInnerStore(label);\n labelLayoutStore.needsUpdateLabelLine = needsUpdateLabelLine;\n label.rotation = layoutOption.rotate != null ? layoutOption.rotate * degreeToRadian : defaultLabelAttr.rotation;\n label.scaleX = defaultLabelAttr.scaleX;\n label.scaleY = defaultLabelAttr.scaleY;\n\n for (var k = 0; k < LABEL_OPTION_TO_STYLE_KEYS.length; k++) {\n var key = LABEL_OPTION_TO_STYLE_KEYS[k];\n label.setStyle(key, layoutOption[key] != null ? layoutOption[key] : defaultLabelAttr.style[key]);\n }\n\n if (layoutOption.draggable) {\n label.draggable = true;\n label.cursor = 'move';\n\n if (hostEl) {\n var hostModel = labelItem.seriesModel;\n\n if (labelItem.dataIndex != null) {\n var data = labelItem.seriesModel.getData(labelItem.dataType);\n hostModel = data.getItemModel(labelItem.dataIndex);\n }\n\n label.on('drag', createDragHandler(hostEl, hostModel.getModel('labelLine')));\n }\n } else {\n // TODO Other drag functions?\n label.off('drag');\n label.cursor = defaultLabelAttr.cursor;\n }\n }\n };\n\n LabelManager.prototype.layout = function (api) {\n var width = api.getWidth();\n var height = api.getHeight();\n var labelList = prepareLayoutList(this._labelList);\n var labelsNeedsAdjustOnX = filter(labelList, function (item) {\n return item.layoutOption.moveOverlap === 'shiftX';\n });\n var labelsNeedsAdjustOnY = filter(labelList, function (item) {\n return item.layoutOption.moveOverlap === 'shiftY';\n });\n shiftLayoutOnX(labelsNeedsAdjustOnX, 0, width);\n shiftLayoutOnY(labelsNeedsAdjustOnY, 0, height);\n var labelsNeedsHideOverlap = filter(labelList, function (item) {\n return item.layoutOption.hideOverlap;\n });\n hideOverlap(labelsNeedsHideOverlap);\n };\n /**\n * Process all labels. Not only labels with layoutOption.\n */\n\n\n LabelManager.prototype.processLabelsOverall = function () {\n var _this = this;\n\n each(this._chartViewList, function (chartView) {\n var seriesModel = chartView.__model;\n var ignoreLabelLineUpdate = chartView.ignoreLabelLineUpdate;\n var animationEnabled = seriesModel.isAnimationEnabled();\n chartView.group.traverse(function (child) {\n if (child.ignore) {\n return true; // Stop traverse descendants.\n }\n\n var needsUpdateLabelLine = !ignoreLabelLineUpdate;\n var label = child.getTextContent();\n\n if (!needsUpdateLabelLine && label) {\n needsUpdateLabelLine = labelLayoutInnerStore(label).needsUpdateLabelLine;\n }\n\n if (needsUpdateLabelLine) {\n _this._updateLabelLine(child, seriesModel);\n }\n\n if (animationEnabled) {\n _this._animateLabels(child, seriesModel);\n }\n });\n });\n };\n\n LabelManager.prototype._updateLabelLine = function (el, seriesModel) {\n // Only support label being hosted on graphic elements.\n var textEl = el.getTextContent(); // Update label line style.\n\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex; // Only support labelLine on the labels represent data.\n\n if (textEl && dataIndex != null) {\n var data = seriesModel.getData(ecData.dataType);\n var itemModel = data.getItemModel(dataIndex);\n var defaultStyle = {};\n var visualStyle = data.getItemVisual(dataIndex, 'style');\n var visualType = data.getVisual('drawType'); // Default to be same with main color\n\n defaultStyle.stroke = visualStyle[visualType];\n var labelLineModel = itemModel.getModel('labelLine');\n setLabelLineStyle(el, getLabelLineStatesModels(itemModel), defaultStyle);\n updateLabelLinePoints(el, labelLineModel);\n }\n };\n\n LabelManager.prototype._animateLabels = function (el, seriesModel) {\n var textEl = el.getTextContent();\n var guideLine = el.getTextGuideLine(); // Animate\n\n if (textEl && !textEl.ignore && !textEl.invisible && !el.disableLabelAnimation && !isElementRemoved(el)) {\n var layoutStore = labelLayoutInnerStore(textEl);\n var oldLayout = layoutStore.oldLayout;\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex;\n var newProps = {\n x: textEl.x,\n y: textEl.y,\n rotation: textEl.rotation\n };\n var data = seriesModel.getData(ecData.dataType);\n\n if (!oldLayout) {\n textEl.attr(newProps); // Disable fade in animation if value animation is enabled.\n\n if (!labelInner(textEl).valueAnimation) {\n var oldOpacity = retrieve2(textEl.style.opacity, 1); // Fade in animation\n\n textEl.style.opacity = 0;\n initProps(textEl, {\n style: {\n opacity: oldOpacity\n }\n }, seriesModel, dataIndex);\n }\n } else {\n textEl.attr(oldLayout); // Make sure the animation from is in the right status.\n\n var prevStates = el.prevStates;\n\n if (prevStates) {\n if (indexOf(prevStates, 'select') >= 0) {\n textEl.attr(layoutStore.oldLayoutSelect);\n }\n\n if (indexOf(prevStates, 'emphasis') >= 0) {\n textEl.attr(layoutStore.oldLayoutEmphasis);\n }\n }\n\n updateProps(textEl, newProps, seriesModel, dataIndex);\n }\n\n layoutStore.oldLayout = newProps;\n\n if (textEl.states.select) {\n var layoutSelect = layoutStore.oldLayoutSelect = {};\n extendWithKeys(layoutSelect, newProps, LABEL_LAYOUT_PROPS);\n extendWithKeys(layoutSelect, textEl.states.select, LABEL_LAYOUT_PROPS);\n }\n\n if (textEl.states.emphasis) {\n var layoutEmphasis = layoutStore.oldLayoutEmphasis = {};\n extendWithKeys(layoutEmphasis, newProps, LABEL_LAYOUT_PROPS);\n extendWithKeys(layoutEmphasis, textEl.states.emphasis, LABEL_LAYOUT_PROPS);\n }\n\n animateLabelValue(textEl, dataIndex, data, seriesModel, seriesModel);\n }\n\n if (guideLine && !guideLine.ignore && !guideLine.invisible) {\n var layoutStore = labelLineAnimationStore(guideLine);\n var oldLayout = layoutStore.oldLayout;\n var newLayout = {\n points: guideLine.shape.points\n };\n\n if (!oldLayout) {\n guideLine.setShape(newLayout);\n guideLine.style.strokePercent = 0;\n initProps(guideLine, {\n style: {\n strokePercent: 1\n }\n }, seriesModel);\n } else {\n guideLine.attr({\n shape: oldLayout\n });\n updateProps(guideLine, {\n shape: newLayout\n }, seriesModel);\n }\n\n layoutStore.oldLayout = newLayout;\n }\n };\n\n return LabelManager;\n}();\n\nexport default LabelManager;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { makeInner } from '../util/model';\nimport LabelManager from './LabelManager';\nvar getLabelManager = makeInner();\nexport function installLabelLayout(registers) {\n registers.registerUpdateLifecycle('series:beforeupdate', function (ecModel, api, params) {\n // TODO api provide an namespace that can save stuff per instance\n var labelManager = getLabelManager(api).labelManager;\n\n if (!labelManager) {\n labelManager = getLabelManager(api).labelManager = new LabelManager();\n }\n\n labelManager.clearLabels();\n });\n registers.registerUpdateLifecycle('series:layoutlabels', function (ecModel, api, params) {\n var labelManager = getLabelManager(api).labelManager;\n params.updatedSeries.forEach(function (series) {\n labelManager.addLabelsOfSeries(api.getViewOfSeriesModel(series));\n });\n labelManager.updateLayoutConfig(api);\n labelManager.layout(api);\n labelManager.processLabelsOverall();\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util';\nimport { parseClassType } from './clazz';\nimport { makePrintable } from './log'; // A random offset\n\nvar base = Math.round(Math.random() * 10);\n/**\n * @public\n * @param {string} type\n * @return {string}\n */\n\nexport function getUID(type) {\n // Considering the case of crossing js context,\n // use Math.random to make id as unique as possible.\n return [type || '', base++].join('_');\n}\n/**\n * Implements `SubTypeDefaulterManager` for `target`.\n */\n\nexport function enableSubTypeDefaulter(target) {\n var subTypeDefaulters = {};\n\n target.registerSubTypeDefaulter = function (componentType, defaulter) {\n var componentTypeInfo = parseClassType(componentType);\n subTypeDefaulters[componentTypeInfo.main] = defaulter;\n };\n\n target.determineSubType = function (componentType, option) {\n var type = option.type;\n\n if (!type) {\n var componentTypeMain = parseClassType(componentType).main;\n\n if (target.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) {\n type = subTypeDefaulters[componentTypeMain](option);\n }\n }\n\n return type;\n };\n}\n/**\n * Implements `TopologicalTravelable` for `entity`.\n *\n * Topological travel on Activity Network (Activity On Vertices).\n * Dependencies is defined in Model.prototype.dependencies, like ['xAxis', 'yAxis'].\n * If 'xAxis' or 'yAxis' is absent in componentTypeList, just ignore it in topology.\n * If there is circular dependencey, Error will be thrown.\n */\n\nexport function enableTopologicalTravel(entity, dependencyGetter) {\n /**\n * @param targetNameList Target Component type list.\n * Can be ['aa', 'bb', 'aa.xx']\n * @param fullNameList By which we can build dependency graph.\n * @param callback Params: componentType, dependencies.\n * @param context Scope of callback.\n */\n entity.topologicalTravel = function (targetNameList, fullNameList, callback, context) {\n if (!targetNameList.length) {\n return;\n }\n\n var result = makeDepndencyGraph(fullNameList);\n var graph = result.graph;\n var noEntryList = result.noEntryList;\n var targetNameSet = {};\n zrUtil.each(targetNameList, function (name) {\n targetNameSet[name] = true;\n });\n\n while (noEntryList.length) {\n var currComponentType = noEntryList.pop();\n var currVertex = graph[currComponentType];\n var isInTargetNameSet = !!targetNameSet[currComponentType];\n\n if (isInTargetNameSet) {\n callback.call(context, currComponentType, currVertex.originalDeps.slice());\n delete targetNameSet[currComponentType];\n }\n\n zrUtil.each(currVertex.successor, isInTargetNameSet ? removeEdgeAndAdd : removeEdge);\n }\n\n zrUtil.each(targetNameSet, function () {\n var errMsg = '';\n\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Circular dependency may exists: ', targetNameSet, targetNameList, fullNameList);\n }\n\n throw new Error(errMsg);\n });\n\n function removeEdge(succComponentType) {\n graph[succComponentType].entryCount--;\n\n if (graph[succComponentType].entryCount === 0) {\n noEntryList.push(succComponentType);\n }\n } // Consider this case: legend depends on series, and we call\n // chart.setOption({series: [...]}), where only series is in option.\n // If we do not have 'removeEdgeAndAdd', legendModel.mergeOption will\n // not be called, but only sereis.mergeOption is called. Thus legend\n // have no chance to update its local record about series (like which\n // name of series is available in legend).\n\n\n function removeEdgeAndAdd(succComponentType) {\n targetNameSet[succComponentType] = true;\n removeEdge(succComponentType);\n }\n };\n\n function makeDepndencyGraph(fullNameList) {\n var graph = {};\n var noEntryList = [];\n zrUtil.each(fullNameList, function (name) {\n var thisItem = createDependencyGraphItem(graph, name);\n var originalDeps = thisItem.originalDeps = dependencyGetter(name);\n var availableDeps = getAvailableDependencies(originalDeps, fullNameList);\n thisItem.entryCount = availableDeps.length;\n\n if (thisItem.entryCount === 0) {\n noEntryList.push(name);\n }\n\n zrUtil.each(availableDeps, function (dependentName) {\n if (zrUtil.indexOf(thisItem.predecessor, dependentName) < 0) {\n thisItem.predecessor.push(dependentName);\n }\n\n var thatItem = createDependencyGraphItem(graph, dependentName);\n\n if (zrUtil.indexOf(thatItem.successor, dependentName) < 0) {\n thatItem.successor.push(name);\n }\n });\n });\n return {\n graph: graph,\n noEntryList: noEntryList\n };\n }\n\n function createDependencyGraphItem(graph, name) {\n if (!graph[name]) {\n graph[name] = {\n predecessor: [],\n successor: []\n };\n }\n\n return graph[name];\n }\n\n function getAvailableDependencies(originalDeps, fullNameList) {\n var availableDeps = [];\n zrUtil.each(originalDeps, function (dep) {\n zrUtil.indexOf(fullNameList, dep) >= 0 && availableDeps.push(dep);\n });\n return availableDeps;\n }\n}\nexport function inheritDefaultOption(superOption, subOption) {\n // See also `model/Component.ts#getDefaultOption`\n return zrUtil.merge(zrUtil.merge({}, superOption, true), subOption, true);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __spreadArray } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util';\nvar TYPE_DELIMITER = '.';\nvar IS_CONTAINER = '___EC__COMPONENT__CONTAINER___';\nvar IS_EXTENDED_CLASS = '___EC__EXTENDED_CLASS___';\n/**\n * Notice, parseClassType('') should returns {main: '', sub: ''}\n * @public\n */\n\nexport function parseClassType(componentType) {\n var ret = {\n main: '',\n sub: ''\n };\n\n if (componentType) {\n var typeArr = componentType.split(TYPE_DELIMITER);\n ret.main = typeArr[0] || '';\n ret.sub = typeArr[1] || '';\n }\n\n return ret;\n}\n/**\n * @public\n */\n\nfunction checkClassType(componentType) {\n zrUtil.assert(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType), 'componentType \"' + componentType + '\" illegal');\n}\n\nexport function isExtendedClass(clz) {\n return !!(clz && clz[IS_EXTENDED_CLASS]);\n}\n/**\n * Implements `ExtendableConstructor` for `rootClz`.\n *\n * @usage\n * ```ts\n * class Xxx {}\n * type XxxConstructor = typeof Xxx & ExtendableConstructor\n * enableClassExtend(Xxx as XxxConstructor);\n * ```\n */\n\nexport function enableClassExtend(rootClz, mandatoryMethods) {\n rootClz.$constructor = rootClz; // FIXME: not necessary?\n\n rootClz.extend = function (proto) {\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.each(mandatoryMethods, function (method) {\n if (!proto[method]) {\n console.warn('Method `' + method + '` should be implemented' + (proto.type ? ' in ' + proto.type : '') + '.');\n }\n });\n }\n\n var superClass = this; // For backward compat, we both support ts class inheritance and this\n // \"extend\" approach.\n // The constructor should keep the same behavior as ts class inheritance:\n // If this constructor/$constructor is not declared, auto invoke the super\n // constructor.\n // If this constructor/$constructor is declared, it is responsible for\n // calling the super constructor.\n\n function ExtendedClass() {\n var args = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n\n if (!proto.$constructor) {\n if (!isESClass(superClass)) {\n // Will throw error if superClass is an es6 native class.\n superClass.apply(this, arguments);\n } else {\n var ins = zrUtil.createObject( // @ts-ignore\n ExtendedClass.prototype, new (superClass.bind.apply(superClass, __spreadArray([void 0], args)))());\n return ins;\n }\n } else {\n proto.$constructor.apply(this, arguments);\n }\n }\n\n ExtendedClass[IS_EXTENDED_CLASS] = true;\n zrUtil.extend(ExtendedClass.prototype, proto);\n ExtendedClass.extend = this.extend;\n ExtendedClass.superCall = superCall;\n ExtendedClass.superApply = superApply;\n zrUtil.inherits(ExtendedClass, this);\n ExtendedClass.superClass = superClass;\n return ExtendedClass;\n };\n}\n\nfunction isESClass(fn) {\n return typeof fn === 'function' && /^class\\s/.test(Function.prototype.toString.call(fn));\n}\n/**\n * A work around to both support ts extend and this extend mechanism.\n * on sub-class.\n * @usage\n * ```ts\n * class Component { ... }\n * classUtil.enableClassExtend(Component);\n * classUtil.enableClassManagement(Component, {registerWhenExtend: true});\n *\n * class Series extends Component { ... }\n * // Without calling `markExtend`, `registerWhenExtend` will not work.\n * Component.markExtend(Series);\n * ```\n */\n\n\nexport function mountExtend(SubClz, SupperClz) {\n SubClz.extend = SupperClz.extend;\n} // A random offset.\n\nvar classBase = Math.round(Math.random() * 10);\n/**\n * Implements `CheckableConstructor` for `target`.\n * Can not use instanceof, consider different scope by\n * cross domain or es module import in ec extensions.\n * Mount a method \"isInstance()\" to Clz.\n *\n * @usage\n * ```ts\n * class Xxx {}\n * type XxxConstructor = typeof Xxx & CheckableConstructor;\n * enableClassCheck(Xxx as XxxConstructor)\n * ```\n */\n\nexport function enableClassCheck(target) {\n var classAttr = ['__\\0is_clz', classBase++].join('_');\n target.prototype[classAttr] = true;\n\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.assert(!target.isInstance, 'The method \"is\" can not be defined.');\n }\n\n target.isInstance = function (obj) {\n return !!(obj && obj[classAttr]);\n };\n} // superCall should have class info, which can not be fetch from 'this'.\n// Consider this case:\n// class A has method f,\n// class B inherits class A, overrides method f, f call superApply('f'),\n// class C inherits class B, do not overrides method f,\n// then when method of class C is called, dead loop occured.\n\nfunction superCall(context, methodName) {\n var args = [];\n\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n\n return this.superClass.prototype[methodName].apply(context, args);\n}\n\nfunction superApply(context, methodName, args) {\n return this.superClass.prototype[methodName].apply(context, args);\n}\n/**\n * Implements `ClassManager` for `target`\n *\n * @usage\n * ```ts\n * class Xxx {}\n * type XxxConstructor = typeof Xxx & ClassManager\n * enableClassManagement(Xxx as XxxConstructor);\n * ```\n */\n\n\nexport function enableClassManagement(target) {\n /**\n * Component model classes\n * key: componentType,\n * value:\n * componentClass, when componentType is 'xxx'\n * or Object., when componentType is 'xxx.yy'\n */\n var storage = {};\n\n target.registerClass = function (clz) {\n // `type` should not be a \"instance memeber\".\n // If using TS class, should better declared as `static type = 'series.pie'`.\n // otherwise users have to mount `type` on prototype manually.\n // For backward compat and enable instance visit type via `this.type`,\n // we stil support fetch `type` from prototype.\n var componentFullType = clz.type || clz.prototype.type;\n\n if (componentFullType) {\n checkClassType(componentFullType); // If only static type declared, we assign it to prototype mandatorily.\n\n clz.prototype.type = componentFullType;\n var componentTypeInfo = parseClassType(componentFullType);\n\n if (!componentTypeInfo.sub) {\n if (process.env.NODE_ENV !== 'production') {\n if (storage[componentTypeInfo.main]) {\n console.warn(componentTypeInfo.main + ' exists.');\n }\n }\n\n storage[componentTypeInfo.main] = clz;\n } else if (componentTypeInfo.sub !== IS_CONTAINER) {\n var container = makeContainer(componentTypeInfo);\n container[componentTypeInfo.sub] = clz;\n }\n }\n\n return clz;\n };\n\n target.getClass = function (mainType, subType, throwWhenNotFound) {\n var clz = storage[mainType];\n\n if (clz && clz[IS_CONTAINER]) {\n clz = subType ? clz[subType] : null;\n }\n\n if (throwWhenNotFound && !clz) {\n throw new Error(!subType ? mainType + '.' + 'type should be specified.' : 'Component ' + mainType + '.' + (subType || '') + ' is used but not imported.');\n }\n\n return clz;\n };\n\n target.getClassesByMainType = function (componentType) {\n var componentTypeInfo = parseClassType(componentType);\n var result = [];\n var obj = storage[componentTypeInfo.main];\n\n if (obj && obj[IS_CONTAINER]) {\n zrUtil.each(obj, function (o, type) {\n type !== IS_CONTAINER && result.push(o);\n });\n } else {\n result.push(obj);\n }\n\n return result;\n };\n\n target.hasClass = function (componentType) {\n // Just consider componentType.main.\n var componentTypeInfo = parseClassType(componentType);\n return !!storage[componentTypeInfo.main];\n };\n /**\n * @return Like ['aa', 'bb'], but can not be ['aa.xx']\n */\n\n\n target.getAllClassMainTypes = function () {\n var types = [];\n zrUtil.each(storage, function (obj, type) {\n types.push(type);\n });\n return types;\n };\n /**\n * If a main type is container and has sub types\n */\n\n\n target.hasSubTypes = function (componentType) {\n var componentTypeInfo = parseClassType(componentType);\n var obj = storage[componentTypeInfo.main];\n return obj && obj[IS_CONTAINER];\n };\n\n function makeContainer(componentTypeInfo) {\n var container = storage[componentTypeInfo.main];\n\n if (!container || !container[IS_CONTAINER]) {\n container = storage[componentTypeInfo.main] = {};\n container[IS_CONTAINER] = true;\n }\n\n return container;\n }\n} // /**\n// * @param {string|Array.} properties\n// */\n// export function setReadOnly(obj, properties) {\n// FIXME It seems broken in IE8 simulation of IE11\n// if (!zrUtil.isArray(properties)) {\n// properties = properties != null ? [properties] : [];\n// }\n// zrUtil.each(properties, function (prop) {\n// let value = obj[prop];\n// Object.defineProperty\n// && Object.defineProperty(obj, prop, {\n// value: value, writable: false\n// });\n// zrUtil.isArray(obj[prop])\n// && Object.freeze\n// && Object.freeze(obj[prop]);\n// });\n// }","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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 zrColor from 'zrender/lib/tool/color';\nimport { linearMap } from '../util/number';\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\nvar CATEGORY_DEFAULT_VISUAL_INDEX = -1;\n\nvar VisualMapping =\n/** @class */\nfunction () {\n function VisualMapping(option) {\n var mappingMethod = option.mappingMethod;\n var visualType = option.type;\n var thisOption = this.option = zrUtil.clone(option);\n this.type = visualType;\n this.mappingMethod = mappingMethod;\n this._normalizeData = normalizers[mappingMethod];\n var visualHandler = VisualMapping.visualHandlers[visualType];\n this.applyVisual = visualHandler.applyVisual;\n this.getColorMapper = visualHandler.getColorMapper;\n this._normalizedToVisual = visualHandler._normalizedToVisual[mappingMethod];\n\n if (mappingMethod === 'piecewise') {\n normalizeVisualRange(thisOption);\n preprocessForPiecewise(thisOption);\n } else if (mappingMethod === 'category') {\n thisOption.categories ? preprocessForSpecifiedCategory(thisOption) // categories is ordinal when thisOption.categories not specified,\n // which need no more preprocess except normalize visual.\n : normalizeVisualRange(thisOption, true);\n } else {\n // mappingMethod === 'linear' or 'fixed'\n zrUtil.assert(mappingMethod !== 'linear' || thisOption.dataExtent);\n normalizeVisualRange(thisOption);\n }\n }\n\n VisualMapping.prototype.mapValueToVisual = function (value) {\n var normalized = this._normalizeData(value);\n\n return this._normalizedToVisual(normalized, value);\n };\n\n VisualMapping.prototype.getNormalizer = function () {\n return zrUtil.bind(this._normalizeData, this);\n };\n /**\n * List available visual types.\n *\n * @public\n * @return {Array.}\n */\n\n\n VisualMapping.listVisualTypes = function () {\n return zrUtil.keys(VisualMapping.visualHandlers);\n }; // /**\n // * @public\n // */\n // static addVisualHandler(name, handler) {\n // visualHandlers[name] = handler;\n // }\n\n /**\n * @public\n */\n\n\n VisualMapping.isValidType = function (visualType) {\n return VisualMapping.visualHandlers.hasOwnProperty(visualType);\n };\n /**\n * Convinent method.\n * Visual can be Object or Array or primary type.\n */\n\n\n VisualMapping.eachVisual = function (visual, callback, context) {\n if (zrUtil.isObject(visual)) {\n zrUtil.each(visual, callback, context);\n } else {\n callback.call(context, visual);\n }\n };\n\n VisualMapping.mapVisual = function (visual, callback, context) {\n var isPrimary;\n var newVisual = zrUtil.isArray(visual) ? [] : zrUtil.isObject(visual) ? {} : (isPrimary = true, null);\n VisualMapping.eachVisual(visual, function (v, key) {\n var newVal = callback.call(context, v, key);\n isPrimary ? newVisual = newVal : newVisual[key] = newVal;\n });\n return newVisual;\n };\n /**\n * Retrieve visual properties from given object.\n */\n\n\n VisualMapping.retrieveVisuals = function (obj) {\n var ret = {};\n var hasVisual;\n obj && each(VisualMapping.visualHandlers, function (h, visualType) {\n if (obj.hasOwnProperty(visualType)) {\n ret[visualType] = obj[visualType];\n hasVisual = true;\n }\n });\n return hasVisual ? ret : null;\n };\n /**\n * Give order to visual types, considering colorSaturation, colorAlpha depends on color.\n *\n * @public\n * @param {(Object|Array)} visualTypes If Object, like: {color: ..., colorSaturation: ...}\n * IF Array, like: ['color', 'symbol', 'colorSaturation']\n * @return {Array.} Sorted visual types.\n */\n\n\n VisualMapping.prepareVisualTypes = function (visualTypes) {\n if (zrUtil.isArray(visualTypes)) {\n visualTypes = visualTypes.slice();\n } else if (isObject(visualTypes)) {\n var types_1 = [];\n each(visualTypes, function (item, type) {\n types_1.push(type);\n });\n visualTypes = types_1;\n } else {\n return [];\n }\n\n visualTypes.sort(function (type1, type2) {\n // color should be front of colorSaturation, colorAlpha, ...\n // symbol and symbolSize do not matter.\n return type2 === 'color' && type1 !== 'color' && type1.indexOf('color') === 0 ? 1 : -1;\n });\n return visualTypes;\n };\n /**\n * 'color', 'colorSaturation', 'colorAlpha', ... are depends on 'color'.\n * Other visuals are only depends on themself.\n */\n\n\n VisualMapping.dependsOn = function (visualType1, visualType2) {\n return visualType2 === 'color' ? !!(visualType1 && visualType1.indexOf(visualType2) === 0) : visualType1 === visualType2;\n };\n /**\n * @param value\n * @param pieceList [{value: ..., interval: [min, max]}, ...]\n * Always from small to big.\n * @param findClosestWhenOutside Default to be false\n * @return index\n */\n\n\n VisualMapping.findPieceIndex = function (value, pieceList, findClosestWhenOutside) {\n var possibleI;\n var abs = Infinity; // value has the higher priority.\n\n for (var i = 0, len = pieceList.length; i < len; i++) {\n var pieceValue = pieceList[i].value;\n\n if (pieceValue != null) {\n if (pieceValue === value // FIXME\n // It is supposed to compare value according to value type of dimension,\n // but currently value type can exactly be string or number.\n // Compromise for numeric-like string (like '12'), especially\n // in the case that visualMap.categories is ['22', '33'].\n || typeof pieceValue === 'string' && pieceValue === value + '') {\n return i;\n }\n\n findClosestWhenOutside && updatePossible(pieceValue, i);\n }\n }\n\n for (var i = 0, len = pieceList.length; i < len; i++) {\n var piece = pieceList[i];\n var interval = piece.interval;\n var close_1 = piece.close;\n\n if (interval) {\n if (interval[0] === -Infinity) {\n if (littleThan(close_1[1], value, interval[1])) {\n return i;\n }\n } else if (interval[1] === Infinity) {\n if (littleThan(close_1[0], interval[0], value)) {\n return i;\n }\n } else if (littleThan(close_1[0], interval[0], value) && littleThan(close_1[1], value, interval[1])) {\n return i;\n }\n\n findClosestWhenOutside && updatePossible(interval[0], i);\n findClosestWhenOutside && updatePossible(interval[1], i);\n }\n }\n\n if (findClosestWhenOutside) {\n return value === Infinity ? pieceList.length - 1 : value === -Infinity ? 0 : possibleI;\n }\n\n function updatePossible(val, index) {\n var newAbs = Math.abs(val - value);\n\n if (newAbs < abs) {\n abs = newAbs;\n possibleI = index;\n }\n }\n };\n\n VisualMapping.visualHandlers = {\n color: {\n applyVisual: makeApplyVisual('color'),\n getColorMapper: function () {\n var thisOption = this.option;\n return zrUtil.bind(thisOption.mappingMethod === 'category' ? function (value, isNormalized) {\n !isNormalized && (value = this._normalizeData(value));\n return doMapCategory.call(this, value);\n } : function (value, isNormalized, out) {\n // If output rgb array\n // which will be much faster and useful in pixel manipulation\n var returnRGBArray = !!out;\n !isNormalized && (value = this._normalizeData(value));\n out = zrColor.fastLerp(value, thisOption.parsedVisual, out);\n return returnRGBArray ? out : zrColor.stringify(out, 'rgba');\n }, this);\n },\n _normalizedToVisual: {\n linear: function (normalized) {\n return zrColor.stringify(zrColor.fastLerp(normalized, this.option.parsedVisual), 'rgba');\n },\n category: doMapCategory,\n piecewise: function (normalized, value) {\n var result = getSpecifiedVisual.call(this, value);\n\n if (result == null) {\n result = zrColor.stringify(zrColor.fastLerp(normalized, this.option.parsedVisual), 'rgba');\n }\n\n return result;\n },\n fixed: doMapFixed\n }\n },\n colorHue: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyHSL(color, value);\n }),\n colorSaturation: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyHSL(color, null, value);\n }),\n colorLightness: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyHSL(color, null, null, value);\n }),\n colorAlpha: makePartialColorVisualHandler(function (color, value) {\n return zrColor.modifyAlpha(color, value);\n }),\n decal: {\n applyVisual: makeApplyVisual('decal'),\n _normalizedToVisual: {\n linear: null,\n category: doMapCategory,\n piecewise: null,\n fixed: null\n }\n },\n opacity: {\n applyVisual: makeApplyVisual('opacity'),\n _normalizedToVisual: createNormalizedToNumericVisual([0, 1])\n },\n liftZ: {\n applyVisual: makeApplyVisual('liftZ'),\n _normalizedToVisual: {\n linear: doMapFixed,\n category: doMapFixed,\n piecewise: doMapFixed,\n fixed: doMapFixed\n }\n },\n symbol: {\n applyVisual: function (value, getter, setter) {\n var symbolCfg = this.mapValueToVisual(value);\n setter('symbol', symbolCfg);\n },\n _normalizedToVisual: {\n linear: doMapToArray,\n category: doMapCategory,\n piecewise: function (normalized, value) {\n var result = getSpecifiedVisual.call(this, value);\n\n if (result == null) {\n result = doMapToArray.call(this, normalized);\n }\n\n return result;\n },\n fixed: doMapFixed\n }\n },\n symbolSize: {\n applyVisual: makeApplyVisual('symbolSize'),\n _normalizedToVisual: createNormalizedToNumericVisual([0, 1])\n }\n };\n return VisualMapping;\n}();\n\nfunction preprocessForPiecewise(thisOption) {\n var pieceList = thisOption.pieceList;\n thisOption.hasSpecialVisual = false;\n zrUtil.each(pieceList, function (piece, index) {\n piece.originIndex = index; // piece.visual is \"result visual value\" but not\n // a visual range, so it does not need to be normalized.\n\n if (piece.visual != null) {\n thisOption.hasSpecialVisual = true;\n }\n });\n}\n\nfunction preprocessForSpecifiedCategory(thisOption) {\n // Hash categories.\n var categories = thisOption.categories;\n var categoryMap = thisOption.categoryMap = {};\n var visual = thisOption.visual;\n each(categories, function (cate, index) {\n categoryMap[cate] = index;\n }); // Process visual map input.\n\n if (!zrUtil.isArray(visual)) {\n var visualArr_1 = [];\n\n if (zrUtil.isObject(visual)) {\n each(visual, function (v, cate) {\n var index = categoryMap[cate];\n visualArr_1[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v;\n });\n } else {\n // Is primary type, represents default visual.\n visualArr_1[CATEGORY_DEFAULT_VISUAL_INDEX] = visual;\n }\n\n visual = setVisualToOption(thisOption, visualArr_1);\n } // Remove categories that has no visual,\n // then we can mapping them to CATEGORY_DEFAULT_VISUAL_INDEX.\n\n\n for (var i = categories.length - 1; i >= 0; i--) {\n if (visual[i] == null) {\n delete categoryMap[categories[i]];\n categories.pop();\n }\n }\n}\n\nfunction normalizeVisualRange(thisOption, isCategory) {\n var visual = thisOption.visual;\n var visualArr = [];\n\n if (zrUtil.isObject(visual)) {\n each(visual, function (v) {\n visualArr.push(v);\n });\n } else if (visual != null) {\n visualArr.push(visual);\n }\n\n var doNotNeedPair = {\n color: 1,\n symbol: 1\n };\n\n if (!isCategory && visualArr.length === 1 && !doNotNeedPair.hasOwnProperty(thisOption.type)) {\n // Do not care visualArr.length === 0, which is illegal.\n visualArr[1] = visualArr[0];\n }\n\n setVisualToOption(thisOption, visualArr);\n}\n\nfunction makePartialColorVisualHandler(applyValue) {\n return {\n applyVisual: function (value, getter, setter) {\n // Only used in HSL\n var colorChannel = this.mapValueToVisual(value); // Must not be array value\n\n setter('color', applyValue(getter('color'), colorChannel));\n },\n _normalizedToVisual: createNormalizedToNumericVisual([0, 1])\n };\n}\n\nfunction doMapToArray(normalized) {\n var visual = this.option.visual;\n return visual[Math.round(linearMap(normalized, [0, 1], [0, visual.length - 1], true))] || {}; // TODO {}?\n}\n\nfunction makeApplyVisual(visualType) {\n return function (value, getter, setter) {\n setter(visualType, this.mapValueToVisual(value));\n };\n}\n\nfunction doMapCategory(normalized) {\n var visual = this.option.visual;\n return visual[this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX ? normalized % visual.length : normalized];\n}\n\nfunction doMapFixed() {\n // visual will be convert to array.\n return this.option.visual[0];\n}\n/**\n * Create mapped to numeric visual\n */\n\n\nfunction createNormalizedToNumericVisual(sourceExtent) {\n return {\n linear: function (normalized) {\n return linearMap(normalized, sourceExtent, this.option.visual, true);\n },\n category: doMapCategory,\n piecewise: function (normalized, value) {\n var result = getSpecifiedVisual.call(this, value);\n\n if (result == null) {\n result = linearMap(normalized, sourceExtent, this.option.visual, true);\n }\n\n return result;\n },\n fixed: doMapFixed\n };\n}\n\nfunction getSpecifiedVisual(value) {\n var thisOption = this.option;\n var pieceList = thisOption.pieceList;\n\n if (thisOption.hasSpecialVisual) {\n var pieceIndex = VisualMapping.findPieceIndex(value, pieceList);\n var piece = pieceList[pieceIndex];\n\n if (piece && piece.visual) {\n return piece.visual[this.type];\n }\n }\n}\n\nfunction setVisualToOption(thisOption, visualArr) {\n thisOption.visual = visualArr;\n\n if (thisOption.type === 'color') {\n thisOption.parsedVisual = zrUtil.map(visualArr, function (item) {\n return zrColor.parse(item);\n });\n }\n\n return visualArr;\n}\n/**\n * Normalizers by mapping methods.\n */\n\n\nvar normalizers = {\n linear: function (value) {\n return linearMap(value, this.option.dataExtent, [0, 1], true);\n },\n piecewise: function (value) {\n var pieceList = this.option.pieceList;\n var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true);\n\n if (pieceIndex != null) {\n return linearMap(pieceIndex, [0, pieceList.length - 1], [0, 1], true);\n }\n },\n category: function (value) {\n var index = this.option.categories ? this.option.categoryMap[value] : value; // ordinal value\n\n return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index;\n },\n fixed: zrUtil.noop\n};\n\nfunction littleThan(close, a, b) {\n return close ? a <= b : a < b;\n}\n\nexport default VisualMapping;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, isObject, isArray, createHashMap, map, assert, isString, indexOf, isStringSafe } from 'zrender/lib/core/util';\nimport env from 'zrender/lib/core/env';\nimport { isNumeric, getRandomIdBase, getPrecision, round } from './number';\nimport { interpolateNumber } from 'zrender/lib/animation/Animator';\nimport { warn } from './log';\n/**\n * Make the name displayable. But we should\n * make sure it is not duplicated with user\n * specified name, so use '\\0';\n */\n\nvar DUMMY_COMPONENT_NAME_PREFIX = 'series\\0';\nvar INTERNAL_COMPONENT_ID_PREFIX = '\\0_ec_\\0';\n/**\n * If value is not array, then translate it to array.\n * @param {*} value\n * @return {Array} [value] or value\n */\n\nexport function normalizeToArray(value) {\n return value instanceof Array ? value : value == null ? [] : [value];\n}\n/**\n * Sync default option between normal and emphasis like `position` and `show`\n * In case some one will write code like\n * label: {\n * show: false,\n * position: 'outside',\n * fontSize: 18\n * },\n * emphasis: {\n * label: { show: true }\n * }\n */\n\nexport function defaultEmphasis(opt, key, subOpts) {\n // Caution: performance sensitive.\n if (opt) {\n opt[key] = opt[key] || {};\n opt.emphasis = opt.emphasis || {};\n opt.emphasis[key] = opt.emphasis[key] || {}; // Default emphasis option from normal\n\n for (var i = 0, len = subOpts.length; i < len; i++) {\n var subOptName = subOpts[i];\n\n if (!opt.emphasis[key].hasOwnProperty(subOptName) && opt[key].hasOwnProperty(subOptName)) {\n opt.emphasis[key][subOptName] = opt[key][subOptName];\n }\n }\n }\n}\nexport var TEXT_STYLE_OPTIONS = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'rich', 'tag', 'color', 'textBorderColor', 'textBorderWidth', 'width', 'height', 'lineHeight', 'align', 'verticalAlign', 'baseline', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY', 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY', 'backgroundColor', 'borderColor', 'borderWidth', 'borderRadius', 'padding']; // modelUtil.LABEL_OPTIONS = modelUtil.TEXT_STYLE_OPTIONS.concat([\n// 'position', 'offset', 'rotate', 'origin', 'show', 'distance', 'formatter',\n// 'fontStyle', 'fontWeight', 'fontSize', 'fontFamily',\n// // FIXME: deprecated, check and remove it.\n// 'textStyle'\n// ]);\n\n/**\n * The method do not ensure performance.\n * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]\n * This helper method retieves value from data.\n */\n\nexport function getDataItemValue(dataItem) {\n return isObject(dataItem) && !isArray(dataItem) && !(dataItem instanceof Date) ? dataItem.value : dataItem;\n}\n/**\n * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]\n * This helper method determine if dataItem has extra option besides value\n */\n\nexport function isDataItemOption(dataItem) {\n return isObject(dataItem) && !(dataItem instanceof Array); // // markLine data can be array\n // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array));\n}\n;\n/**\n * Mapping to existings for merge.\n *\n * Mode \"normalMege\":\n * The mapping result (merge result) will keep the order of the existing\n * component, rather than the order of new option. Because we should ensure\n * some specified index reference (like xAxisIndex) keep work.\n * And in most cases, \"merge option\" is used to update partial option but not\n * be expected to change the order.\n *\n * Mode \"replaceMege\":\n * (1) Only the id mapped components will be merged.\n * (2) Other existing components (except internal compoonets) will be removed.\n * (3) Other new options will be used to create new component.\n * (4) The index of the existing compoents will not be modified.\n * That means their might be \"hole\" after the removal.\n * The new components are created first at those available index.\n *\n * Mode \"replaceAll\":\n * This mode try to support that reproduce an echarts instance from another\n * echarts instance (via `getOption`) in some simple cases.\n * In this senario, the `result` index are exactly the consistent with the `newCmptOptions`,\n * which ensures the compoennt index referring (like `xAxisIndex: ?`) corrent. That is,\n * the \"hole\" in `newCmptOptions` will also be kept.\n * On the contrary, other modes try best to eliminate holes.\n * PENDING: This is an experimental mode yet.\n *\n * @return See the comment of .\n */\n\nexport function mappingToExists(existings, newCmptOptions, mode) {\n var isNormalMergeMode = mode === 'normalMerge';\n var isReplaceMergeMode = mode === 'replaceMerge';\n var isReplaceAllMode = mode === 'replaceAll';\n existings = existings || [];\n newCmptOptions = (newCmptOptions || []).slice();\n var existingIdIdxMap = createHashMap(); // Validate id and name on user input option.\n\n each(newCmptOptions, function (cmptOption, index) {\n if (!isObject(cmptOption)) {\n newCmptOptions[index] = null;\n return;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n // There is some legacy case that name is set as `false`.\n // But should work normally rather than throw error.\n if (cmptOption.id != null && !isValidIdOrName(cmptOption.id)) {\n warnInvalidateIdOrName(cmptOption.id);\n }\n\n if (cmptOption.name != null && !isValidIdOrName(cmptOption.name)) {\n warnInvalidateIdOrName(cmptOption.name);\n }\n }\n });\n var result = prepareResult(existings, existingIdIdxMap, mode);\n\n if (isNormalMergeMode || isReplaceMergeMode) {\n mappingById(result, existings, existingIdIdxMap, newCmptOptions);\n }\n\n if (isNormalMergeMode) {\n mappingByName(result, newCmptOptions);\n }\n\n if (isNormalMergeMode || isReplaceMergeMode) {\n mappingByIndex(result, newCmptOptions, isReplaceMergeMode);\n } else if (isReplaceAllMode) {\n mappingInReplaceAllMode(result, newCmptOptions);\n }\n\n makeIdAndName(result); // The array `result` MUST NOT contain elided items, otherwise the\n // forEach will ommit those items and result in incorrect result.\n\n return result;\n}\n\nfunction prepareResult(existings, existingIdIdxMap, mode) {\n var result = [];\n\n if (mode === 'replaceAll') {\n return result;\n } // Do not use native `map` to in case that the array `existings`\n // contains elided items, which will be ommited.\n\n\n for (var index = 0; index < existings.length; index++) {\n var existing = existings[index]; // Because of replaceMerge, `existing` may be null/undefined.\n\n if (existing && existing.id != null) {\n existingIdIdxMap.set(existing.id, index);\n } // For non-internal-componnets:\n // Mode \"normalMerge\": all existings kept.\n // Mode \"replaceMerge\": all existing removed unless mapped by id.\n // For internal-components:\n // go with \"replaceMerge\" approach in both mode.\n\n\n result.push({\n existing: mode === 'replaceMerge' || isComponentIdInternal(existing) ? null : existing,\n newOption: null,\n keyInfo: null,\n brandNew: null\n });\n }\n\n return result;\n}\n\nfunction mappingById(result, existings, existingIdIdxMap, newCmptOptions) {\n // Mapping by id if specified.\n each(newCmptOptions, function (cmptOption, index) {\n if (!cmptOption || cmptOption.id == null) {\n return;\n }\n\n var optionId = makeComparableKey(cmptOption.id);\n var existingIdx = existingIdIdxMap.get(optionId);\n\n if (existingIdx != null) {\n var resultItem = result[existingIdx];\n assert(!resultItem.newOption, 'Duplicated option on id \"' + optionId + '\".');\n resultItem.newOption = cmptOption; // In both mode, if id matched, new option will be merged to\n // the existings rather than creating new component model.\n\n resultItem.existing = existings[existingIdx];\n newCmptOptions[index] = null;\n }\n });\n}\n\nfunction mappingByName(result, newCmptOptions) {\n // Mapping by name if specified.\n each(newCmptOptions, function (cmptOption, index) {\n if (!cmptOption || cmptOption.name == null) {\n return;\n }\n\n for (var i = 0; i < result.length; i++) {\n var existing = result[i].existing;\n\n if (!result[i].newOption // Consider name: two map to one.\n // Can not match when both ids existing but different.\n && existing && (existing.id == null || cmptOption.id == null) && !isComponentIdInternal(cmptOption) && !isComponentIdInternal(existing) && keyExistAndEqual('name', existing, cmptOption)) {\n result[i].newOption = cmptOption;\n newCmptOptions[index] = null;\n return;\n }\n }\n });\n}\n\nfunction mappingByIndex(result, newCmptOptions, brandNew) {\n each(newCmptOptions, function (cmptOption) {\n if (!cmptOption) {\n return;\n } // Find the first place that not mapped by id and not internal component (consider the \"hole\").\n\n\n var resultItem;\n var nextIdx = 0;\n\n while ( // Be `!resultItem` only when `nextIdx >= result.length`.\n (resultItem = result[nextIdx]) && ( // (1) Existing models that already have id should be able to mapped to. Because\n // after mapping performed, model will always be assigned with an id if user not given.\n // After that all models have id.\n // (2) If new option has id, it can only set to a hole or append to the last. It should\n // not be merged to the existings with different id. Because id should not be overwritten.\n // (3) Name can be overwritten, because axis use name as 'show label text'.\n resultItem.newOption || isComponentIdInternal(resultItem.existing) || // In mode \"replaceMerge\", here no not-mapped-non-internal-existing.\n resultItem.existing && cmptOption.id != null && !keyExistAndEqual('id', cmptOption, resultItem.existing))) {\n nextIdx++;\n }\n\n if (resultItem) {\n resultItem.newOption = cmptOption;\n resultItem.brandNew = brandNew;\n } else {\n result.push({\n newOption: cmptOption,\n brandNew: brandNew,\n existing: null,\n keyInfo: null\n });\n }\n\n nextIdx++;\n });\n}\n\nfunction mappingInReplaceAllMode(result, newCmptOptions) {\n each(newCmptOptions, function (cmptOption) {\n // The feature \"reproduce\" requires \"hole\" will also reproduced\n // in case that compoennt index referring are broken.\n result.push({\n newOption: cmptOption,\n brandNew: true,\n existing: null,\n keyInfo: null\n });\n });\n}\n/**\n * Make id and name for mapping result (result of mappingToExists)\n * into `keyInfo` field.\n */\n\n\nfunction makeIdAndName(mapResult) {\n // We use this id to hash component models and view instances\n // in echarts. id can be specified by user, or auto generated.\n // The id generation rule ensures new view instance are able\n // to mapped to old instance when setOption are called in\n // no-merge mode. So we generate model id by name and plus\n // type in view id.\n // name can be duplicated among components, which is convenient\n // to specify multi components (like series) by one name.\n // Ensure that each id is distinct.\n var idMap = createHashMap();\n each(mapResult, function (item) {\n var existing = item.existing;\n existing && idMap.set(existing.id, item);\n });\n each(mapResult, function (item) {\n var opt = item.newOption; // Force ensure id not duplicated.\n\n assert(!opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item, 'id duplicates: ' + (opt && opt.id));\n opt && opt.id != null && idMap.set(opt.id, item);\n !item.keyInfo && (item.keyInfo = {});\n }); // Make name and id.\n\n each(mapResult, function (item, index) {\n var existing = item.existing;\n var opt = item.newOption;\n var keyInfo = item.keyInfo;\n\n if (!isObject(opt)) {\n return;\n } // name can be overwitten. Consider case: axis.name = '20km'.\n // But id generated by name will not be changed, which affect\n // only in that case: setOption with 'not merge mode' and view\n // instance will be recreated, which can be accepted.\n\n\n keyInfo.name = opt.name != null ? makeComparableKey(opt.name) : existing ? existing.name // Avoid diffferent series has the same name,\n // because name may be used like in color pallet.\n : DUMMY_COMPONENT_NAME_PREFIX + index;\n\n if (existing) {\n keyInfo.id = makeComparableKey(existing.id);\n } else if (opt.id != null) {\n keyInfo.id = makeComparableKey(opt.id);\n } else {\n // Consider this situatoin:\n // optionA: [{name: 'a'}, {name: 'a'}, {..}]\n // optionB [{..}, {name: 'a'}, {name: 'a'}]\n // Series with the same name between optionA and optionB\n // should be mapped.\n var idNum = 0;\n\n do {\n keyInfo.id = '\\0' + keyInfo.name + '\\0' + idNum++;\n } while (idMap.get(keyInfo.id));\n }\n\n idMap.set(keyInfo.id, item);\n });\n}\n\nfunction keyExistAndEqual(attr, obj1, obj2) {\n var key1 = convertOptionIdName(obj1[attr], null);\n var key2 = convertOptionIdName(obj2[attr], null); // See `MappingExistingItem`. `id` and `name` trade string equals to number.\n\n return key1 != null && key2 != null && key1 === key2;\n}\n/**\n * @return return null if not exist.\n */\n\n\nfunction makeComparableKey(val) {\n if (process.env.NODE_ENV !== 'production') {\n if (val == null) {\n throw new Error();\n }\n }\n\n return convertOptionIdName(val, '');\n}\n\nexport function convertOptionIdName(idOrName, defaultValue) {\n if (idOrName == null) {\n return defaultValue;\n }\n\n var type = typeof idOrName;\n return type === 'string' ? idOrName : type === 'number' || isStringSafe(idOrName) ? idOrName + '' : defaultValue;\n}\n\nfunction warnInvalidateIdOrName(idOrName) {\n if (process.env.NODE_ENV !== 'production') {\n warn('`' + idOrName + '` is invalid id or name. Must be a string or number.');\n }\n}\n\nfunction isValidIdOrName(idOrName) {\n return isStringSafe(idOrName) || isNumeric(idOrName);\n}\n\nexport function isNameSpecified(componentModel) {\n var name = componentModel.name; // Is specified when `indexOf` get -1 or > 0.\n\n return !!(name && name.indexOf(DUMMY_COMPONENT_NAME_PREFIX));\n}\n/**\n * @public\n * @param {Object} cmptOption\n * @return {boolean}\n */\n\nexport function isComponentIdInternal(cmptOption) {\n return cmptOption && cmptOption.id != null && makeComparableKey(cmptOption.id).indexOf(INTERNAL_COMPONENT_ID_PREFIX) === 0;\n}\nexport function makeInternalComponentId(idSuffix) {\n return INTERNAL_COMPONENT_ID_PREFIX + idSuffix;\n}\nexport function setComponentTypeToKeyInfo(mappingResult, mainType, componentModelCtor) {\n // Set mainType and complete subType.\n each(mappingResult, function (item) {\n var newOption = item.newOption;\n\n if (isObject(newOption)) {\n item.keyInfo.mainType = mainType;\n item.keyInfo.subType = determineSubType(mainType, newOption, item.existing, componentModelCtor);\n }\n });\n}\n\nfunction determineSubType(mainType, newCmptOption, existComponent, componentModelCtor) {\n var subType = newCmptOption.type ? newCmptOption.type : existComponent ? existComponent.subType // Use determineSubType only when there is no existComponent.\n : componentModelCtor.determineSubType(mainType, newCmptOption); // tooltip, markline, markpoint may always has no subType\n\n return subType;\n}\n/**\n * A helper for removing duplicate items between batchA and batchB,\n * and in themselves, and categorize by series.\n *\n * @param batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @param batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @return result: [resultBatchA, resultBatchB]\n */\n\n\nexport function compressBatches(batchA, batchB) {\n var mapA = {};\n var mapB = {};\n makeMap(batchA || [], mapA);\n makeMap(batchB || [], mapB, mapA);\n return [mapToArray(mapA), mapToArray(mapB)];\n\n function makeMap(sourceBatch, map, otherMap) {\n for (var i = 0, len = sourceBatch.length; i < len; i++) {\n var seriesId = convertOptionIdName(sourceBatch[i].seriesId, null);\n\n if (seriesId == null) {\n return;\n }\n\n var dataIndices = normalizeToArray(sourceBatch[i].dataIndex);\n var otherDataIndices = otherMap && otherMap[seriesId];\n\n for (var j = 0, lenj = dataIndices.length; j < lenj; j++) {\n var dataIndex = dataIndices[j];\n\n if (otherDataIndices && otherDataIndices[dataIndex]) {\n otherDataIndices[dataIndex] = null;\n } else {\n (map[seriesId] || (map[seriesId] = {}))[dataIndex] = 1;\n }\n }\n }\n }\n\n function mapToArray(map, isData) {\n var result = [];\n\n for (var i in map) {\n if (map.hasOwnProperty(i) && map[i] != null) {\n if (isData) {\n result.push(+i);\n } else {\n var dataIndices = mapToArray(map[i], true);\n dataIndices.length && result.push({\n seriesId: i,\n dataIndex: dataIndices\n });\n }\n }\n }\n\n return result;\n }\n}\n/**\n * @param payload Contains dataIndex (means rawIndex) / dataIndexInside / name\n * each of which can be Array or primary type.\n * @return dataIndex If not found, return undefined/null.\n */\n\nexport function queryDataIndex(data, payload) {\n if (payload.dataIndexInside != null) {\n return payload.dataIndexInside;\n } else if (payload.dataIndex != null) {\n return isArray(payload.dataIndex) ? map(payload.dataIndex, function (value) {\n return data.indexOfRawIndex(value);\n }) : data.indexOfRawIndex(payload.dataIndex);\n } else if (payload.name != null) {\n return isArray(payload.name) ? map(payload.name, function (value) {\n return data.indexOfName(value);\n }) : data.indexOfName(payload.name);\n }\n}\n/**\n * Enable property storage to any host object.\n * Notice: Serialization is not supported.\n *\n * For example:\n * let inner = zrUitl.makeInner();\n *\n * function some1(hostObj) {\n * inner(hostObj).someProperty = 1212;\n * ...\n * }\n * function some2() {\n * let fields = inner(this);\n * fields.someProperty1 = 1212;\n * fields.someProperty2 = 'xx';\n * ...\n * }\n *\n * @return {Function}\n */\n\nexport function makeInner() {\n var key = '__ec_inner_' + innerUniqueIndex++;\n return function (hostObj) {\n return hostObj[key] || (hostObj[key] = {});\n };\n}\nvar innerUniqueIndex = getRandomIdBase();\n/**\n * The same behavior as `component.getReferringComponents`.\n */\n\nexport function parseFinder(ecModel, finderInput, opt) {\n var _a = preParseFinder(finderInput, opt),\n mainTypeSpecified = _a.mainTypeSpecified,\n queryOptionMap = _a.queryOptionMap,\n others = _a.others;\n\n var result = others;\n var defaultMainType = opt ? opt.defaultMainType : null;\n\n if (!mainTypeSpecified && defaultMainType) {\n queryOptionMap.set(defaultMainType, {});\n }\n\n queryOptionMap.each(function (queryOption, mainType) {\n var queryResult = queryReferringComponents(ecModel, mainType, queryOption, {\n useDefault: defaultMainType === mainType,\n enableAll: opt && opt.enableAll != null ? opt.enableAll : true,\n enableNone: opt && opt.enableNone != null ? opt.enableNone : true\n });\n result[mainType + 'Models'] = queryResult.models;\n result[mainType + 'Model'] = queryResult.models[0];\n });\n return result;\n}\nexport function preParseFinder(finderInput, opt) {\n var finder;\n\n if (isString(finderInput)) {\n var obj = {};\n obj[finderInput + 'Index'] = 0;\n finder = obj;\n } else {\n finder = finderInput;\n }\n\n var queryOptionMap = createHashMap();\n var others = {};\n var mainTypeSpecified = false;\n each(finder, function (value, key) {\n // Exclude 'dataIndex' and other illgal keys.\n if (key === 'dataIndex' || key === 'dataIndexInside') {\n others[key] = value;\n return;\n }\n\n var parsedKey = key.match(/^(\\w+)(Index|Id|Name)$/) || [];\n var mainType = parsedKey[1];\n var queryType = (parsedKey[2] || '').toLowerCase();\n\n if (!mainType || !queryType || opt && opt.includeMainTypes && indexOf(opt.includeMainTypes, mainType) < 0) {\n return;\n }\n\n mainTypeSpecified = mainTypeSpecified || !!mainType;\n var queryOption = queryOptionMap.get(mainType) || queryOptionMap.set(mainType, {});\n queryOption[queryType] = value;\n });\n return {\n mainTypeSpecified: mainTypeSpecified,\n queryOptionMap: queryOptionMap,\n others: others\n };\n}\nexport var SINGLE_REFERRING = {\n useDefault: true,\n enableAll: false,\n enableNone: false\n};\nexport var MULTIPLE_REFERRING = {\n useDefault: false,\n enableAll: true,\n enableNone: true\n};\nexport function queryReferringComponents(ecModel, mainType, userOption, opt) {\n opt = opt || SINGLE_REFERRING;\n var indexOption = userOption.index;\n var idOption = userOption.id;\n var nameOption = userOption.name;\n var result = {\n models: null,\n specified: indexOption != null || idOption != null || nameOption != null\n };\n\n if (!result.specified) {\n // Use the first as default if `useDefault`.\n var firstCmpt = void 0;\n result.models = opt.useDefault && (firstCmpt = ecModel.getComponent(mainType)) ? [firstCmpt] : [];\n return result;\n }\n\n if (indexOption === 'none' || indexOption === false) {\n assert(opt.enableNone, '`\"none\"` or `false` is not a valid value on index option.');\n result.models = [];\n return result;\n } // `queryComponents` will return all components if\n // both all of index/id/name are null/undefined.\n\n\n if (indexOption === 'all') {\n assert(opt.enableAll, '`\"all\"` is not a valid value on index option.');\n indexOption = idOption = nameOption = null;\n }\n\n result.models = ecModel.queryComponents({\n mainType: mainType,\n index: indexOption,\n id: idOption,\n name: nameOption\n });\n return result;\n}\nexport function setAttribute(dom, key, value) {\n dom.setAttribute ? dom.setAttribute(key, value) : dom[key] = value;\n}\nexport function getAttribute(dom, key) {\n return dom.getAttribute ? dom.getAttribute(key) : dom[key];\n}\nexport function getTooltipRenderMode(renderModeOption) {\n if (renderModeOption === 'auto') {\n // Using html when `document` exists, use richText otherwise\n return env.domSupported ? 'html' : 'richText';\n } else {\n return renderModeOption || 'html';\n }\n}\n/**\n * Group a list by key.\n */\n\nexport function groupData(array, getKey // return key\n) {\n var buckets = createHashMap();\n var keys = [];\n each(array, function (item) {\n var key = getKey(item);\n (buckets.get(key) || (keys.push(key), buckets.set(key, []))).push(item);\n });\n return {\n keys: keys,\n buckets: buckets\n };\n}\n/**\n * Interpolate raw values of a series with percent\n *\n * @param data data\n * @param labelModel label model of the text element\n * @param sourceValue start value. May be null/undefined when init.\n * @param targetValue end value\n * @param percent 0~1 percentage; 0 uses start value while 1 uses end value\n * @return interpolated values\n * If `sourceValue` and `targetValue` are `number`, return `number`.\n * If `sourceValue` and `targetValue` are `string`, return `string`.\n * If `sourceValue` and `targetValue` are `(string | number)[]`, return `(string | number)[]`.\n * Other cases do not supported.\n */\n\nexport function interpolateRawValues(data, precision, sourceValue, targetValue, percent) {\n var isAutoPrecision = precision == null || precision === 'auto';\n\n if (targetValue == null) {\n return targetValue;\n }\n\n if (typeof targetValue === 'number') {\n var value = interpolateNumber(sourceValue || 0, targetValue, percent);\n return round(value, isAutoPrecision ? Math.max(getPrecision(sourceValue || 0), getPrecision(targetValue)) : precision);\n } else if (typeof targetValue === 'string') {\n return percent < 1 ? sourceValue : targetValue;\n } else {\n var interpolated = [];\n var leftArr = sourceValue;\n var rightArr = targetValue;\n var length_1 = Math.max(leftArr ? leftArr.length : 0, rightArr.length);\n\n for (var i = 0; i < length_1; ++i) {\n var info = data.getDimensionInfo(i); // Don't interpolate ordinal dims\n\n if (info && info.type === 'ordinal') {\n // In init, there is no `sourceValue`, but should better not to get undefined result.\n interpolated[i] = (percent < 1 && leftArr ? leftArr : rightArr)[i];\n } else {\n var leftVal = leftArr && leftArr[i] ? leftArr[i] : 0;\n var rightVal = rightArr[i];\n var value = interpolateNumber(leftVal, rightVal, percent);\n interpolated[i] = round(value, isAutoPrecision ? Math.max(getPrecision(leftVal), getPrecision(rightVal)) : precision);\n }\n }\n\n return interpolated;\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport CanvasPainter from 'zrender/lib/canvas/Painter';\nexport function install(registers) {\n registers.registerPainter('canvas', CanvasPainter);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport SVGPainter from 'zrender/lib/svg/Painter';\nexport function install(registers) {\n registers.registerPainter('svg', SVGPainter);\n}"],"sourceRoot":""}