{"version":3,"sources":["webpack:///./node_modules/echarts/lib/util/model.js","webpack:///./node_modules/echarts/lib/util/states.js","webpack:///./node_modules/echarts/lib/view/Chart.js","webpack:///./node_modules/echarts/lib/util/symbol.js","webpack:///./node_modules/echarts/lib/util/graphic.js","webpack:///./node_modules/echarts/lib/util/time.js","webpack:///./node_modules/echarts/lib/util/event.js","webpack:///./node_modules/echarts/lib/util/throttle.js","webpack:///./node_modules/echarts/lib/util/innerStore.js","webpack:///./node_modules/echarts/lib/util/format.js","webpack:///./node_modules/echarts/lib/util/layout.js","webpack:///./node_modules/echarts/lib/util/decal.js","webpack:///./node_modules/echarts/lib/util/log.js","webpack:///./node_modules/echarts/lib/util/shape/sausage.js","webpack:///./node_modules/echarts/lib/util/clazz.js","webpack:///./node_modules/echarts/lib/util/number.js","webpack:///./node_modules/echarts/lib/view/Component.js","webpack:///./node_modules/echarts/lib/util/types.js","webpack:///./node_modules/echarts/lib/util/component.js"],"names":["DUMMY_COMPONENT_NAME_PREFIX","INTERNAL_COMPONENT_ID_PREFIX","normalizeToArray","value","Array","defaultEmphasis","opt","key","subOpts","emphasis","i","len","length","subOptName","hasOwnProperty","TEXT_STYLE_OPTIONS","getDataItemValue","dataItem","Date","isDataItemOption","mappingToExists","existings","newCmptOptions","mode","isNormalMergeMode","isReplaceMergeMode","isReplaceAllMode","slice","existingIdIdxMap","cmptOption","index","mapResult","idMap","result","existing","id","set","push","isComponentIdInternal","newOption","keyInfo","brandNew","prepareResult","optionId","makeComparableKey","existingIdx","get","resultItem","mappingById","name","keyExistAndEqual","mappingByName","nextIdx","mappingByIndex","mappingInReplaceAllMode","item","idNum","attr","obj1","obj2","key1","convertOptionIdName","key2","val","idOrName","defaultValue","type","isNameSpecified","componentModel","indexOf","setComponentTypeToKeyInfo","mappingResult","mainType","componentModelCtor","subType","newCmptOption","existComponent","determineSubType","queryDataIndex","data","payload","dataIndexInside","dataIndex","indexOfRawIndex","indexOfName","makeInner","innerUniqueIndex","hostObj","parseFinder","ecModel","finderInput","_a","preParseFinder","mainTypeSpecified","queryOptionMap","others","defaultMainType","each","queryOption","queryResult","queryReferringComponents","useDefault","enableAll","enableNone","models","finder","obj","parsedKey","match","queryType","toLowerCase","includeMainTypes","SINGLE_REFERRING","userOption","indexOption","idOption","nameOption","specified","firstCmpt","getComponent","queryComponents","setAttribute","dom","getAttribute","getTooltipRenderMode","renderModeOption","domSupported","interpolateRawValues","precision","sourceValue","targetValue","percent","isAutoPrecision","Math","max","interpolated","leftArr","rightArr","length_1","getDimensionInfo","leftVal","rightVal","_highlightNextDigit","_highlightKeyMap","getSavedStates","HOVER_STATE_NORMAL","HOVER_STATE_BLUR","HOVER_STATE_EMPHASIS","SPECIAL_STATES","DISPLAY_STATES","Z2_EMPHASIS_LIFT","Z2_SELECT_LIFT","HIGHLIGHT_ACTION_TYPE","DOWNPLAY_ACTION_TYPE","SELECT_ACTION_TYPE","UNSELECT_ACTION_TYPE","TOGGLE_SELECT_ACTION_TYPE","hasFillOrStroke","fillOrStroke","liftedColorCache","liftColor","color","liftedColor","put","doChangeHoverState","el","stateName","hoverStateEnum","onHoverStateChange","hoverState","singleEnterEmphasis","singleLeaveEmphasis","singleEnterBlur","singleLeaveBlur","singleEnterSelect","selected","singleLeaveSelect","updateElementState","updater","commonParam","traverseUpdateState","isGroup","traverse","child","elementStateProxy","targetStates","state","this","states","style","hasSelect","cloned","store","fromFill","selectFill","normalFill","fromStroke","selectStroke","normalStroke","emphasisStyle","fill","stroke","z2","z2EmphasisLift","createEmphasisDefaultState","hasBlur","currentStates","currentOpacity","opacity","fromState","props","toStateName","propName","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","getViewOfSeriesModel","getViewOfComponentModel","group","blurSeries","targetSeriesIndex","focus","blurScope","leaveBlurOfIndices","dataIndices","itemEl","getItemGraphicEl","targetSeriesModel","getSeriesByIndex","targetCoordSys","coordinateSystem","master","blurredSeries","eachSeries","seriesModel","sameSeries","coordSys","getData","dataTypes","d","view","blurComponent","componentMainType","componentIndex","focusBlurEnabled","blurSeriesFromHighlightPayload","seriesIndex","dataType","count","current","ecData","focus_1","findComponentHighDownDispatchers","ret","focusSelf","dispatchers","findHighDownDispatchers","handleGlobalMouseOverForHighDown","dispatcher","componentHighDownName","handleGlboalMouseOutForHighDown","toggleSelectionFromPayload","isSelectChangePayload","updateSeriesElementSelection","allData","getAllData","eachItemGraphicEl","idx","isSelected","getAllSelectedIndices","getSelectedDataIndices","enableHoverEmphasis","asDispatcher","disable","extendedEl","highDownSilentOnTouch","__highDownDispatcher","setAsHighDownDispatcher","enableHoverFocus","OTHER_STATES","defaultStyleGetterMap","itemStyle","lineStyle","areaStyle","setStatesStylesFromModel","itemModel","styleType","getter","model","ensureState","isHighDownDispatcher","getHighlightDigit","highlightKey","payloadType","isHighDownPayload","savePathStates","selectState","select","inner","renderPlanner","ChartView","uid","renderTask","plan","renderTaskPlan","reset","renderTaskReset","context","prototype","init","render","highlight","toggleHighlight","downplay","remove","removeAll","dispose","updateView","updateLayout","updateVisual","markUpdateMethod","methodName","updateMethod","protoInitialize","elSetState","dataIdx","progressiveRender","pipelineContext","progressMethodMap","incrementalPrepareRender","progress","params","incrementalRender","forceFirstProgress","Triangle","extend","shape","cx","cy","width","height","buildPath","path","moveTo","lineTo","closePath","Diamond","Pin","x","y","w","h","r","dy","angle","asin","dx","cos","tanX","sin","tanY","cpLen","cpLen2","arc","PI","bezierCurveTo","Arrow","ctx","symbolCtors","line","rect","roundRect","square","circle","diamond","pin","arrow","triangle","symbolShapeMakers","x1","y1","x2","y2","min","size","symbolBuildProxies","Ctor","SymbolClz","symbolType","calculateTextPosition","out","config","res","position","inBundle","proxySymbol","symbolPathSetColor","innerColor","symbolStyle","__isEmptyBrush","lineWidth","markRedraw","createSymbol","keepAspect","symbolPath","isEmpty","substr","setColor","mathMax","mathMin","_customShapeMap","extendShape","opts","extendPathFromString","extendPath","pathData","registerShape","ShapeClass","getShapeClass","makePath","layout","centerGraphic","getBoundingRect","resizePath","makeImage","imageUrl","zrImg","image","onload","img","boundingRect","setStyle","aspect","mergePath","applyTransform","m","calculateTransform","subPixelOptimizeLine","param","subPixelOptimizeRect","subPixelOptimize","animateOrSetProps","animationType","animatableModel","cb","during","removeOpt","isFrom","animationPayload","isUpdate","isRemove","updatePayload","getUpdatePayload","animation","animationEnabled","isAnimationEnabled","stopAnimation","duration","animationEasing","animationDelay","easing","delay","getShallow","getAnimationDelayParams","animateFrom","done","force","scope","animateTo","setToFinal","updateProps","initProps","removeElement","isElementRemoved","fadeOutDisplayable","removeTextContent","removeTextGuideLine","removeElementWithFadeOut","doRemove","parent","disp","__zr","getTransform","target","ancestor","mat","getLocalTransform","transform","invert","transformDirection","direction","hBase","abs","vBase","vertex","isNotGroup","groupTransition","g1","g2","elMap","elMap1","anid","oldEl","newProp","getAnimatableProps","rotation","isPath","clipPointsByRect","points","point","clipRectByRect","targetRect","createIcon","iconStr","innerOpts","rectHover","strokeNoScale","replace","linePolygonIntersect","a1x","a1y","a2x","a2y","p2","p","lineLineIntersect","b1x","b1y","b2x","b2y","mx","my","nx","ny","nmCrossProduct","crossProduct2d","b1a1x","b1a1y","q","setTooltipConfig","itemTooltipOption","itemName","itemTooltipOptionObj","formatter","formatterParams","$vars","formatterParamsExtra","tooltipConfig","option","content","ONE_SECOND","ONE_MINUTE","ONE_HOUR","ONE_DAY","ONE_YEAR","defaultLeveledFormatter","year","month","day","hour","minute","second","millisecond","none","fullLeveledFormatter","fullDayFormatter","primaryTimeUnits","timeUnits","pad","str","getPrimaryTimeUnit","timeUnit","isPrimaryTimeUnit","getDefaultFormatPrecisionOfInterval","format","time","template","isUTC","lang","date","fullYearGetterName","M","monthGetterName","floor","dateGetterName","H","hoursGetterName","minutesGetterName","s","secondsGetterName","S","millisecondsGetterName","timeModel","monthAbbr","dayOfWeek","dayOfWeekAbbr","leveledFormat","tick","level","defaults","mergedFormatter","inherit","unit","getUnitFromValue","levelId","isSecond","isMinute","isHour","isDay","isMonth","getUnitValue","fullYearSetterName","monthSetterName","dateSetterName","hoursSetterName","minutesSetterName","secondsSetterName","millisecondsSetterName","findEventDispatcher","det","returnFirstMatch","found","__hostTarget","ORIGIN_METHOD","RATE","THROTTLE_TYPE","throttle","fn","debounce","currCall","diff","args","debounceNextCall","lastCall","lastExec","timer","exec","getTime","apply","cbArgs","_i","arguments","thisDelay","thisDebounce","clearTimeout","setTimeout","clear","debounceDelay","createOrUpdate","fnAttr","rate","throttleType","originFn","lastThrottleType","getECData","addCommas","parts","split","toCamelCase","upperCaseFirst","group1","toUpperCase","charAt","normalizeCssArray","replaceReg","replaceMap","'","encodeHTML","source","c","makeValueReadable","valueType","useUTC","stringToUserReadable","isNumberUserReadable","num","isNaN","isFinite","isTypeTime","isValueDate","numericResult","TPL_VAR_ALIAS","wrapVar","varName","seriesIdx","formatTpl","tpl","paramsList","encode","seriesLen","alias","k","getTooltipMarker","inOpt","extraCssText","renderMode","markerId","borderRadius","backgroundColor","convertToColorString","defaultColor","colorStops","windowOpen","link","blank","window","open","opener","location","href","LOCATION_PARAMS","HV_NAMES","boxLayout","orient","gap","maxWidth","maxHeight","Infinity","currentLineMaxSize","eachChild","nextX","nextY","nextChild","childAt","nextChildRect","moveX","newline","moveY","box","getLayoutRect","positionInfo","containerRect","margin","containerWidth","containerHeight","left","top","right","bottom","verticalMargin","horizontalMargin","positionElement","hv","v","boundingMode","needLocalTransform","clone","layoutRect","fetchLayoutMode","ins","layoutMode","constructor","mergeLayoutParam","targetOption","ignoreSize","hResult","merge","vResult","names","hvIdx","newParams","newValueCount","merged","mergedValueCount","hasProp","hasValue","name_1","copy","getLayoutParams","copyLayoutParams","decalMap","decalCache","decalKeys","createOrUpdatePatternFromDecal","decalObject","dpr","getDevicePixelRatio","zr","getZr","isSVG","painter","dirty","oldPattern","decalOpt","symbol","symbolSize","symbolKeepAspect","dashArrayX","dashArrayY","maxTileWidth","maxTileHeight","pattern","repeat","cacheKey","keys","isValidKey","join","cache","svgElement","normalizeDashArrayX","dash","dashValue","ceil","isAllNumber","n","concat","dashValue_1","normalizeDashArrayY","symbolArray","normalizeSymbolArray","isAllString","lineBlockLengthsX","getLineBlockLengthY","lineBlockLengthY","canvas","svgRoot","createSVGElement","pSize","xlen","symbolRepeats","getPatternSize","getContext","clearRect","fillStyle","fillRect","ySum","yId","yIdTotal","xId0","symbolYId","xId1","xId1Total","xSum","top_1","symbolXId","brushSymbol","scale","appendChild","paintOne","brushDecal","svgWidth","svgHeight","setPatternnSource","scaleX","scaleY","blockLength","console","warn","log","deprecateLog","throwError","msg","Error","SausageShape","r0","startAngle","endAngle","clockwise","SausagePath","_super","_this","call","getDefaultShape","dr","rCenter","unitStartX","unitStartY","unitEndX","unitEndY","TYPE_DELIMITER","IS_CONTAINER","IS_EXTENDED_CLASS","parseClassType","main","sub","typeArr","isExtendedClass","clz","enableClassExtend","rootClz","mandatoryMethods","$constructor","proto","superClass","ExtendedClass","test","Function","toString","bind","superCall","superApply","mountExtend","SubClz","SupperClz","classBase","round","random","enableClassCheck","classAttr","isInstance","enableClassManagement","storage","registerClass","componentFullType","componentTypeInfo","container","makeContainer","getClass","throwWhenNotFound","getClassesByMainType","o","hasClass","getAllClassMainTypes","types","hasSubTypes","RADIAN_EPSILON","linearMap","domain","range","clamp","subDomain","subRange","parsePercent","all","parseFloat","NaN","returnStr","toFixed","getPrecisionSafe","eIndex","dotIndex","getPixelPrecision","dataExtent","pixelExtent","LN10","dataQuantity","sizeQuantity","remRadian","radian","pi2","isRadianAroundZero","TIME_REG","parseDate","UTC","quantity","pow","quantityExponent","exp","nice","exponent","exp10","f","numericToNumber","valFloat","isNumeric","getRandomIdBase","getLeastCommonMultiple","a","b","getGreatestCommonDividor","ComponentView","seriesModels","VISUAL_DIMENSIONS","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","base","getUID","enableSubTypeDefaulter","subTypeDefaulters","registerSubTypeDefaulter","defaulter","componentTypeMain","enableTopologicalTravel","entity","dependencyGetter","createDependencyGraphItem","graph","predecessor","successor","topologicalTravel","targetNameList","fullNameList","callback","noEntryList","thisItem","availableDeps","originalDeps","dep","getAvailableDependencies","entryCount","dependentName","thatItem","makeDepndencyGraph","targetNameSet","currComponentType","pop","currVertex","isInTargetNameSet","removeEdgeAndAdd","removeEdge","succComponentType","inheritDefaultOption","superOption","subOption"],"mappings":"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","file":"vendors~app~89affa73.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 { each, isObject, isArray, createHashMap, map, assert, isString, indexOf, isStringSafe } from 'zrender/lib/core/util';\nimport env from 'zrender/lib/core/env';\nimport { isNumeric, getRandomIdBase, getPrecisionSafe, 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(getPrecisionSafe(sourceValue || 0), getPrecisionSafe(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.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(getPrecisionSafe(leftVal), getPrecisionSafe(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 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 || {}; // Apply default color lift\n\n var emphasisStyle = state.style || {};\n\n 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 { 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*/\n// Symbol factory\nimport * as zrUtil from 'zrender/lib/core/util';\nimport * as graphic from './graphic';\nimport BoundingRect from 'zrender/lib/core/BoundingRect';\nimport { calculateTextPosition } from 'zrender/lib/contain/text';\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 = {};\nzrUtil.each(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}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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, isObject, retrieve2, isString, keys, each, hasOwn } from 'zrender/lib/core/util';\nimport { getECData } from './innerStore';\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\nfunction animateOrSetProps(animationType, el, props, animatableModel, dataIndex, cb, during) {\n var isFrom = false;\n var removeOpt;\n\n if (typeof dataIndex === 'function') {\n during = cb;\n cb = dataIndex;\n dataIndex = null;\n } else if (isObject(dataIndex)) {\n cb = dataIndex.cb;\n during = dataIndex.during;\n isFrom = dataIndex.isFrom;\n removeOpt = dataIndex.removeOpt;\n dataIndex = dataIndex.dataIndex;\n }\n\n var isUpdate = animationType === 'update';\n var isRemove = animationType === 'remove';\n var animationPayload; // Check if there is global animation configuration from dataZoom/resize can override the config in option.\n // If animation is enabled. Will use this animation config in payload.\n // If animation is disabled. Just ignore it.\n\n if (animatableModel && animatableModel.ecModel) {\n var updatePayload = animatableModel.ecModel.getUpdatePayload();\n animationPayload = updatePayload && updatePayload.animation;\n }\n\n var animationEnabled = animatableModel && animatableModel.isAnimationEnabled();\n\n if (!isRemove) {\n // Must stop the remove animation.\n el.stopAnimation('remove');\n }\n\n if (animationEnabled) {\n var duration = void 0;\n var animationEasing = void 0;\n var animationDelay = void 0;\n\n if (animationPayload) {\n duration = animationPayload.duration || 0;\n animationEasing = animationPayload.easing || 'cubicOut';\n animationDelay = animationPayload.delay || 0;\n } else if (isRemove) {\n removeOpt = removeOpt || {};\n duration = retrieve2(removeOpt.duration, 200);\n animationEasing = retrieve2(removeOpt.easing, 'cubicOut');\n animationDelay = 0;\n } else {\n duration = animatableModel.getShallow(isUpdate ? 'animationDurationUpdate' : 'animationDuration');\n animationEasing = animatableModel.getShallow(isUpdate ? 'animationEasingUpdate' : 'animationEasing');\n animationDelay = animatableModel.getShallow(isUpdate ? 'animationDelayUpdate' : 'animationDelay');\n }\n\n if (typeof animationDelay === 'function') {\n animationDelay = animationDelay(dataIndex, animatableModel.getAnimationDelayParams ? animatableModel.getAnimationDelayParams(el, dataIndex) : null);\n }\n\n if (typeof duration === 'function') {\n duration = duration(dataIndex);\n }\n\n duration > 0 ? isFrom ? el.animateFrom(props, {\n duration: duration,\n delay: animationDelay || 0,\n easing: animationEasing,\n done: cb,\n force: !!cb || !!during,\n scope: animationType,\n during: during\n }) : el.animateTo(props, {\n duration: duration,\n delay: animationDelay || 0,\n easing: animationEasing,\n done: cb,\n force: !!cb || !!during,\n setToFinal: true,\n scope: animationType,\n during: during\n }) : ( // FIXME:\n // If `duration` is 0, only the animation on props\n // can be stoped, other animation should be continued?\n // But at present using duration 0 in `animateTo`, `animateFrom`\n // might cause unexpected behavior.\n el.stopAnimation(), // If `isFrom`, the props is the \"from\" props.\n !isFrom && el.attr(props), cb && cb());\n } else {\n el.stopAnimation();\n !isFrom && el.attr(props); // Call during once.\n\n during && during(1);\n cb && cb();\n }\n}\n/**\n * Update graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n * @example\n * graphic.updateProps(el, {\n * position: [100, 100]\n * }, seriesModel, dataIndex, function () { console.log('Animation done!'); });\n * // Or\n * graphic.updateProps(el, {\n * position: [100, 100]\n * }, seriesModel, function () { console.log('Animation done!'); });\n */\n\n\nfunction updateProps(el, props, // TODO: TYPE AnimatableModel\nanimatableModel, dataIndex, cb, during) {\n animateOrSetProps('update', el, props, animatableModel, dataIndex, cb, during);\n}\n\nexport { updateProps };\n/**\n * Init graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n */\n\nexport function initProps(el, props, animatableModel, dataIndex, cb, during) {\n animateOrSetProps('init', el, props, animatableModel, dataIndex, cb, during);\n}\n/**\n * Remove graphic element\n */\n\nexport function removeElement(el, props, animatableModel, dataIndex, cb, during) {\n // Don't do remove animation twice.\n if (isElementRemoved(el)) {\n return;\n }\n\n animateOrSetProps('remove', el, props, animatableModel, dataIndex, cb, during);\n}\n\nfunction fadeOutDisplayable(el, animatableModel, dataIndex, done) {\n el.removeTextContent();\n el.removeTextGuideLine();\n removeElement(el, {\n style: {\n opacity: 0\n }\n }, animatableModel, dataIndex, done);\n}\n\nexport function removeElementWithFadeOut(el, animatableModel, dataIndex) {\n function doRemove() {\n el.parent && el.parent.remove(el);\n } // Hide label and labelLine first\n // TODO Also use fade out animation?\n\n\n if (!el.isGroup) {\n fadeOutDisplayable(el, animatableModel, dataIndex, doRemove);\n } else {\n el.traverse(function (disp) {\n if (!disp.isGroup) {\n // Can invoke doRemove multiple times.\n fadeOutDisplayable(disp, animatableModel, dataIndex, doRemove);\n }\n });\n }\n}\n/**\n * If element is removed.\n * It can determine if element is having remove animation.\n */\n\nexport function isElementRemoved(el) {\n if (!el.__zr) {\n return true;\n }\n\n for (var i = 0; i < el.animators.length; i++) {\n var animator = el.animators[i];\n\n if (animator.scope === 'remove') {\n return true;\n }\n }\n\n return false;\n}\n/**\n * 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 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 ? 'getUTCSeconds' : 'getSeconds';\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 ? 'setUTCSeconds' : 'setSeconds';\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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*/\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*/\nimport { makeInner } from './model';\nexport var getECData = makeInner();","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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*/\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 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*/\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\";\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 { __spreadArrays } 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, __spreadArrays([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*/\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;\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 subDomain = domain[1] - domain[0];\n var subRange = range[1] - range[0];\n\n if (subDomain === 0) {\n return subRange === 0 ? range[0] : (range[0] + range[1]) / 2;\n } // Avoid accuracy problem in edge, such as\n // 146.39 - 62.83 === 83.55999999999999.\n // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError\n // It is a little verbose for efficiency considering this method\n // is a hotspot.\n\n\n if (clamp) {\n if (subDomain > 0) {\n if (val <= domain[0]) {\n return range[0];\n } else if (val >= domain[1]) {\n return range[1];\n }\n } else {\n if (val >= domain[0]) {\n return range[0];\n } else if (val <= domain[1]) {\n return range[1];\n }\n }\n } else {\n if (val === domain[0]) {\n return range[0];\n }\n\n if (val === domain[1]) {\n return range[1];\n }\n }\n\n return (val - domain[0]) / subDomain * subRange + range[0];\n}\n/**\n * Convert a percent string to absolute number.\n * Returns NaN if percent is not a valid string or number\n */\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), 20);\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\n\n var e = 1;\n var count = 0;\n\n while (Math.round(val * e) / e !== val) {\n e *= 10;\n count++;\n }\n\n return count;\n}\n/**\n * Get precision with slow but safe method\n */\n\nexport function getPrecisionSafe(val) {\n var str = val.toString(); // Consider scientific notation: '3.4e-12' '3.4e+12'\n\n var eIndex = str.indexOf('e');\n\n if (eIndex > 0) {\n var precision = +str.slice(eIndex + 1);\n return precision < 0 ? -precision : 0;\n } else {\n var dotIndex = str.indexOf('.');\n return dotIndex < 0 ? 0 : str.length - 1 - dotIndex;\n }\n}\n/**\n * Minimal dicernible data precisioin according to a single pixel.\n */\n\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} // 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] || 0);\n } // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n // For example, system timezone is set as \"Time Zone: America/Toronto\",\n // then these code will get different result:\n // `new Date(1478411999999).getTimezoneOffset(); // get 240`\n // `new Date(1478412000000).getTimezoneOffset(); // get 300`\n // So we should not use `new Date`, but use `Date.UTC`.\n else {\n var hour = +match[4] || 0;\n\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n\n return new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, +match[7] || 0));\n }\n } else if (value == null) {\n return new Date(NaN);\n }\n\n return new Date(Math.round(value));\n}\n/**\n * Quantity of a number. e.g. 0.1, 1, 10, 100\n *\n * @param 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 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 { createHashMap } from 'zrender/lib/core/util';\n;\n;\n;\nexport var VISUAL_DIMENSIONS = createHashMap(['tooltip', 'label', 'itemName', 'itemId', '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 { 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}"],"sourceRoot":""}