1 |
- {"version":3,"file":"js/chunk-vendors-25555775.f76afaa2.js","mappings":"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","sources":["webpack://app/./node_modules/echarts/lib/util/graphic.js","webpack://app/./node_modules/echarts/lib/util/layout.js","webpack://app/./node_modules/echarts/lib/util/model.js","webpack://app/./node_modules/echarts/lib/util/number.js","webpack://app/./node_modules/echarts/lib/util/shape/sausage.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\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar pathTool = require(\"zrender/lib/tool/path\");\n\nvar colorTool = require(\"zrender/lib/tool/color\");\n\nvar matrix = require(\"zrender/lib/core/matrix\");\n\nvar vector = require(\"zrender/lib/core/vector\");\n\nvar Path = require(\"zrender/lib/graphic/Path\");\n\nvar Transformable = require(\"zrender/lib/mixin/Transformable\");\n\nvar ZImage = require(\"zrender/lib/graphic/Image\");\n\nexports.Image = ZImage;\n\nvar Group = require(\"zrender/lib/container/Group\");\n\nexports.Group = Group;\n\nvar Text = require(\"zrender/lib/graphic/Text\");\n\nexports.Text = Text;\n\nvar Circle = require(\"zrender/lib/graphic/shape/Circle\");\n\nexports.Circle = Circle;\n\nvar Sector = require(\"zrender/lib/graphic/shape/Sector\");\n\nexports.Sector = Sector;\n\nvar Ring = require(\"zrender/lib/graphic/shape/Ring\");\n\nexports.Ring = Ring;\n\nvar Polygon = require(\"zrender/lib/graphic/shape/Polygon\");\n\nexports.Polygon = Polygon;\n\nvar Polyline = require(\"zrender/lib/graphic/shape/Polyline\");\n\nexports.Polyline = Polyline;\n\nvar Rect = require(\"zrender/lib/graphic/shape/Rect\");\n\nexports.Rect = Rect;\n\nvar Line = require(\"zrender/lib/graphic/shape/Line\");\n\nexports.Line = Line;\n\nvar BezierCurve = require(\"zrender/lib/graphic/shape/BezierCurve\");\n\nexports.BezierCurve = BezierCurve;\n\nvar Arc = require(\"zrender/lib/graphic/shape/Arc\");\n\nexports.Arc = Arc;\n\nvar CompoundPath = require(\"zrender/lib/graphic/CompoundPath\");\n\nexports.CompoundPath = CompoundPath;\n\nvar LinearGradient = require(\"zrender/lib/graphic/LinearGradient\");\n\nexports.LinearGradient = LinearGradient;\n\nvar RadialGradient = require(\"zrender/lib/graphic/RadialGradient\");\n\nexports.RadialGradient = RadialGradient;\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nexports.BoundingRect = BoundingRect;\n\nvar IncrementalDisplayable = require(\"zrender/lib/graphic/IncrementalDisplayable\");\n\nexports.IncrementalDisplayable = IncrementalDisplayable;\n\nvar subPixelOptimizeUtil = require(\"zrender/lib/graphic/helper/subPixelOptimize\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 mathMax = Math.max;\nvar mathMin = Math.min;\nvar EMPTY_OBJ = {};\nvar Z2_EMPHASIS_LIFT = 1; // key: label model property nane, value: style property name.\n\nvar CACHED_LABEL_STYLE_PROPERTIES = {\n color: 'textFill',\n textBorderColor: 'textStroke',\n textBorderWidth: 'textStrokeWidth'\n};\nvar EMPHASIS = 'emphasis';\nvar NORMAL = 'normal'; // Reserve 0 as default.\n\nvar _highlightNextDigit = 1;\nvar _highlightKeyMap = {};\nvar _customShapeMap = {};\n/**\n * Extend shape with parameters\n */\n\nfunction extendShape(opts) {\n return Path.extend(opts);\n}\n/**\n * Extend path\n */\n\n\nfunction extendPath(pathData, opts) {\n return pathTool.extendFromString(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 {string} name\n * @param {Object} ShapeClass Can be generated by `extendShape`.\n */\n\n\nfunction 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 {string} name\n * @return {Object} The shape class. If not found, return nothing.\n */\n\n\nfunction 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 {string} pathData\n * @param {Object} opts\n * @param {module:zrender/core/BoundingRect} rect\n * @param {string} [layout=cover] 'center' or 'cover'\n */\n\n\nfunction 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 {string} imageUrl image url\n * @param {Object} opts options\n * @param {module:zrender/core/BoundingRect} rect constrain rect\n * @param {string} [layout=cover] 'center' or 'cover'\n */\n\n\nfunction makeImage(imageUrl, rect, layout) {\n var path = new ZImage({\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 path.setStyle(centerGraphic(rect, boundingRect));\n }\n }\n });\n return path;\n}\n/**\n * Get position of centered element in bounding box.\n *\n * @param {Object} rect element local bounding box\n * @param {Object} boundingRect constraint bounding box\n * @return {Object} element position containing x, y, width, and height\n */\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\nvar mergePath = pathTool.mergePath;\n/**\n * Resize a path to fit the rect\n * @param {module:zrender/graphic/Path} path\n * @param {Object} rect\n */\n\nfunction 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 * @param {Object} param\n * @param {Object} [param.shape]\n * @param {number} [param.shape.x1]\n * @param {number} [param.shape.y1]\n * @param {number} [param.shape.x2]\n * @param {number} [param.shape.y2]\n * @param {Object} [param.style]\n * @param {number} [param.style.lineWidth]\n * @return {Object} Modified param\n */\n\n\nfunction 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 * @param {Object} param\n * @param {Object} [param.shape]\n * @param {number} [param.shape.x]\n * @param {number} [param.shape.y]\n * @param {number} [param.shape.width]\n * @param {number} [param.shape.height]\n * @param {Object} [param.style]\n * @param {number} [param.style.lineWidth]\n * @return {Object} Modified param\n */\n\n\nfunction 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 {number} position Coordinate, such as x, y\n * @param {number} lineWidth Should be nonnegative integer.\n * @param {boolean=} positiveOrNegative Default false (negative).\n * @return {number} Optimized position.\n */\n\n\nvar subPixelOptimize = subPixelOptimizeUtil.subPixelOptimize;\n\nfunction hasFillOrStroke(fillOrStroke) {\n return fillOrStroke != null && fillOrStroke !== 'none';\n} // Most lifted color are duplicated.\n\n\nvar liftedColorMap = zrUtil.createHashMap();\nvar liftedColorCount = 0;\n\nfunction liftColor(color) {\n if (typeof color !== 'string') {\n return color;\n }\n\n var liftedColor = liftedColorMap.get(color);\n\n if (!liftedColor) {\n liftedColor = colorTool.lift(color, -0.1);\n\n if (liftedColorCount < 10000) {\n liftedColorMap.set(color, liftedColor);\n liftedColorCount++;\n }\n }\n\n return liftedColor;\n}\n\nfunction cacheElementStl(el) {\n if (!el.__hoverStlDirty) {\n return;\n }\n\n el.__hoverStlDirty = false;\n var hoverStyle = el.__hoverStl;\n\n if (!hoverStyle) {\n el.__cachedNormalStl = el.__cachedNormalZ2 = null;\n return;\n }\n\n var normalStyle = el.__cachedNormalStl = {};\n el.__cachedNormalZ2 = el.z2;\n var elStyle = el.style;\n\n for (var name in hoverStyle) {\n // See comment in `singleEnterEmphasis`.\n if (hoverStyle[name] != null) {\n normalStyle[name] = elStyle[name];\n }\n } // Always cache fill and stroke to normalStyle for lifting color.\n\n\n normalStyle.fill = elStyle.fill;\n normalStyle.stroke = elStyle.stroke;\n}\n\nfunction singleEnterEmphasis(el) {\n var hoverStl = el.__hoverStl;\n\n if (!hoverStl || el.__highlighted) {\n return;\n }\n\n var zr = el.__zr;\n var useHoverLayer = el.useHoverLayer && zr && zr.painter.type === 'canvas';\n el.__highlighted = useHoverLayer ? 'layer' : 'plain';\n\n if (el.isGroup || !zr && el.useHoverLayer) {\n return;\n }\n\n var elTarget = el;\n var targetStyle = el.style;\n\n if (useHoverLayer) {\n elTarget = zr.addHover(el);\n targetStyle = elTarget.style;\n }\n\n rollbackDefaultTextStyle(targetStyle);\n\n if (!useHoverLayer) {\n cacheElementStl(elTarget);\n } // styles can be:\n // {\n // label: {\n // show: false,\n // position: 'outside',\n // fontSize: 18\n // },\n // emphasis: {\n // label: {\n // show: true\n // }\n // }\n // },\n // where properties of `emphasis` may not appear in `normal`. We previously use\n // module:echarts/util/model#defaultEmphasis to merge `normal` to `emphasis`.\n // But consider rich text and setOption in merge mode, it is impossible to cover\n // all properties in merge. So we use merge mode when setting style here.\n // But we choose the merge strategy that only properties that is not `null/undefined`.\n // Because when making a textStyle (espacially rich text), it is not easy to distinguish\n // `hasOwnProperty` and `null/undefined` in code, so we trade them as the same for simplicity.\n // But this strategy brings a trouble that `null/undefined` can not be used to remove\n // style any more in `emphasis`. Users can both set properties directly on normal and\n // emphasis to avoid this issue, or we might support `'none'` for this case if required.\n\n\n targetStyle.extendFrom(hoverStl);\n setDefaultHoverFillStroke(targetStyle, hoverStl, 'fill');\n setDefaultHoverFillStroke(targetStyle, hoverStl, 'stroke');\n applyDefaultTextStyle(targetStyle);\n\n if (!useHoverLayer) {\n el.dirty(false);\n el.z2 += Z2_EMPHASIS_LIFT;\n }\n}\n\nfunction setDefaultHoverFillStroke(targetStyle, hoverStyle, prop) {\n if (!hasFillOrStroke(hoverStyle[prop]) && hasFillOrStroke(targetStyle[prop])) {\n targetStyle[prop] = liftColor(targetStyle[prop]);\n }\n}\n\nfunction singleEnterNormal(el) {\n var highlighted = el.__highlighted;\n\n if (!highlighted) {\n return;\n }\n\n el.__highlighted = false;\n\n if (el.isGroup) {\n return;\n }\n\n if (highlighted === 'layer') {\n el.__zr && el.__zr.removeHover(el);\n } else {\n var style = el.style;\n var normalStl = el.__cachedNormalStl;\n\n if (normalStl) {\n rollbackDefaultTextStyle(style);\n el.setStyle(normalStl);\n applyDefaultTextStyle(style);\n } // `__cachedNormalZ2` will not be reset if calling `setElementHoverStyle`\n // when `el` is on emphasis state. So here by comparing with 1, we try\n // hard to make the bug case rare.\n\n\n var normalZ2 = el.__cachedNormalZ2;\n\n if (normalZ2 != null && el.z2 - normalZ2 === Z2_EMPHASIS_LIFT) {\n el.z2 = normalZ2;\n }\n }\n}\n\nfunction traverseUpdate(el, updater, commonParam) {\n // If root is group, also enter updater for `highDownOnUpdate`.\n var fromState = NORMAL;\n var toState = NORMAL;\n var trigger; // See the rule of `highDownOnUpdate` on `graphic.setAsHighDownDispatcher`.\n\n el.__highlighted && (fromState = EMPHASIS, trigger = true);\n updater(el, commonParam);\n el.__highlighted && (toState = EMPHASIS, trigger = true);\n el.isGroup && el.traverse(function (child) {\n !child.isGroup && updater(child, commonParam);\n });\n trigger && el.__highDownOnUpdate && el.__highDownOnUpdate(fromState, toState);\n}\n/**\n * Set hover style (namely \"emphasis style\") of element, based on the current\n * style of the given `el`.\n * This method should be called after all of the normal styles have been adopted\n * to the `el`. See the reason on `setHoverStyle`.\n *\n * @param {module:zrender/Element} el Should not be `zrender/container/Group`.\n * @param {Object} [el.hoverStyle] Can be set on el or its descendants,\n * e.g., `el.hoverStyle = ...; graphic.setHoverStyle(el); `.\n * Often used when item group has a label element and it's hoverStyle is different.\n * @param {Object|boolean} [hoverStl] The specified hover style.\n * If set as `false`, disable the hover style.\n * Similarly, The `el.hoverStyle` can alse be set\n * as `false` to disable the hover style.\n * Otherwise, use the default hover style if not provided.\n */\n\n\nfunction setElementHoverStyle(el, hoverStl) {\n // For performance consideration, it might be better to make the \"hover style\" only the\n // difference properties from the \"normal style\", but not a entire copy of all styles.\n hoverStl = el.__hoverStl = hoverStl !== false && (el.hoverStyle || hoverStl || {});\n el.__hoverStlDirty = true; // FIXME\n // It is not completely right to save \"normal\"/\"emphasis\" flag on elements.\n // It probably should be saved on `data` of series. Consider the cases:\n // (1) A highlighted elements are moved out of the view port and re-enter\n // again by dataZoom.\n // (2) call `setOption` and replace elements totally when they are highlighted.\n\n if (el.__highlighted) {\n // Consider the case:\n // The styles of a highlighted `el` is being updated. The new \"emphasis style\"\n // should be adapted to the `el`. Notice here new \"normal styles\" should have\n // been set outside and the cached \"normal style\" is out of date.\n el.__cachedNormalStl = null; // Do not clear `__cachedNormalZ2` here, because setting `z2` is not a constraint\n // of this method. In most cases, `z2` is not set and hover style should be able\n // to rollback. Of course, that would bring bug, but only in a rare case, see\n // `doSingleLeaveHover` for details.\n\n singleEnterNormal(el);\n singleEnterEmphasis(el);\n }\n}\n\nfunction onElementMouseOver(e) {\n !shouldSilent(this, e) // \"emphasis\" event highlight has higher priority than mouse highlight.\n && !this.__highByOuter && traverseUpdate(this, singleEnterEmphasis);\n}\n\nfunction onElementMouseOut(e) {\n !shouldSilent(this, e) // \"emphasis\" event highlight has higher priority than mouse highlight.\n && !this.__highByOuter && traverseUpdate(this, singleEnterNormal);\n}\n\nfunction onElementEmphasisEvent(highlightDigit) {\n this.__highByOuter |= 1 << (highlightDigit || 0);\n traverseUpdate(this, singleEnterEmphasis);\n}\n\nfunction onElementNormalEvent(highlightDigit) {\n !(this.__highByOuter &= ~(1 << (highlightDigit || 0))) && traverseUpdate(this, singleEnterNormal);\n}\n\nfunction shouldSilent(el, e) {\n return el.__highDownSilentOnTouch && e.zrByTouch;\n}\n/**\n * Set hover style (namely \"emphasis style\") of element,\n * based on the current style of the given `el`.\n *\n * (1)\n * **CONSTRAINTS** for this method:\n * <A> This method MUST be called after all of the normal styles having been adopted\n * to the `el`.\n * <B> The input `hoverStyle` (that is, \"emphasis style\") MUST be the subset of the\n * \"normal style\" having been set to the el.\n * <C> `color` MUST be one of the \"normal styles\" (because color might be lifted as\n * a default hover style).\n *\n * The reason: this method treat the current style of the `el` as the \"normal style\"\n * and cache them when enter/update the \"emphasis style\". Consider the case: the `el`\n * is in \"emphasis\" state and `setOption`/`dispatchAction` trigger the style updating\n * logic, where the el should shift from the original emphasis style to the new\n * \"emphasis style\" and should be able to \"downplay\" back to the new \"normal style\".\n *\n * Indeed, it is error-prone to make a interface has so many constraints, but I have\n * not found a better solution yet to fit the backward compatibility, performance and\n * the current programming style.\n *\n * (2)\n * Call the method for a \"root\" element once. Do not call it for each descendants.\n * If the descendants elemenets of a group has itself hover style different from the\n * root group, we can simply mount the style on `el.hoverStyle` for them, but should\n * not call this method for them.\n *\n * (3) These input parameters can be set directly on `el`:\n *\n * @param {module:zrender/Element} el\n * @param {Object} [el.hoverStyle] See `graphic.setElementHoverStyle`.\n * @param {boolean} [el.highDownSilentOnTouch=false] See `graphic.setAsHighDownDispatcher`.\n * @param {Function} [el.highDownOnUpdate] See `graphic.setAsHighDownDispatcher`.\n * @param {Object|boolean} [hoverStyle] See `graphic.setElementHoverStyle`.\n */\n\n\nfunction setHoverStyle(el, hoverStyle) {\n setAsHighDownDispatcher(el, true);\n traverseUpdate(el, setElementHoverStyle, hoverStyle);\n}\n/**\n * @param {module:zrender/Element} el\n * @param {Function} [el.highDownOnUpdate] Called when state updated.\n * Since `setHoverStyle` has the constraint that it must be called after\n * all of the normal style updated, `highDownOnUpdate` is not needed to\n * trigger if both `fromState` and `toState` is 'normal', and needed to\n * trigger if both `fromState` and `toState` is 'emphasis', which enables\n * to sync outside style settings to \"emphasis\" state.\n * @this {string} This dispatcher `el`.\n * @param {string} fromState Can be \"normal\" or \"emphasis\".\n * `fromState` might equal to `toState`,\n * for example, when this method is called when `el` is\n * on \"emphasis\" state.\n * @param {string} toState Can be \"normal\" or \"emphasis\".\n *\n * FIXME\n * CAUTION: Do not expose `highDownOnUpdate` outside echarts.\n * Because it is not a complete solution. The update\n * listener should not have been mount in element,\n * and the normal/emphasis state should not have\n * mantained on elements.\n *\n * @param {boolean} [el.highDownSilentOnTouch=false]\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 {boolean} [asDispatcher=true] If `false`, do not set as \"highDownDispatcher\".\n */\n\n\nfunction setAsHighDownDispatcher(el, asDispatcher) {\n var disable = asDispatcher === false; // Make `highDownSilentOnTouch` and `highDownOnUpdate` only work after\n // `setAsHighDownDispatcher` called. Avoid it is modified by user unexpectedly.\n\n el.__highDownSilentOnTouch = el.highDownSilentOnTouch;\n el.__highDownOnUpdate = el.highDownOnUpdate; // Simple optimize, since this method might be\n // called for each elements of a group in some cases.\n\n if (!disable || el.__highDownDispatcher) {\n var method = disable ? 'off' : 'on'; // Duplicated function will be auto-ignored, see Eventful.js.\n\n el[method]('mouseover', onElementMouseOver)[method]('mouseout', onElementMouseOut); // Emphasis, normal can be triggered manually by API or other components like hover link.\n\n el[method]('emphasis', onElementEmphasisEvent)[method]('normal', onElementNormalEvent); // Also keep previous record.\n\n el.__highByOuter = el.__highByOuter || 0;\n el.__highDownDispatcher = !disable;\n }\n}\n/**\n * @param {module:zrender/src/Element} el\n * @return {boolean}\n */\n\n\nfunction isHighDownDispatcher(el) {\n return !!(el && el.__highDownDispatcher);\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\n\nfunction 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}\n/**\n * See more info in `setTextStyleCommon`.\n * @param {Object|module:zrender/graphic/Style} normalStyle\n * @param {Object} emphasisStyle\n * @param {module:echarts/model/Model} normalModel\n * @param {module:echarts/model/Model} emphasisModel\n * @param {Object} opt Check `opt` of `setTextStyleCommon` to find other props.\n * @param {string|Function} [opt.defaultText]\n * @param {module:echarts/model/Model} [opt.labelFetcher] Fetch text by\n * `opt.labelFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex, opt.labelProp)`\n * @param {number} [opt.labelDataIndex] Fetch text by\n * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex, opt.labelProp)`\n * @param {number} [opt.labelDimIndex] Fetch text by\n * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex, opt.labelProp)`\n * @param {string} [opt.labelProp] Fetch text by\n * `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex, opt.labelProp)`\n * @param {Object} [normalSpecified]\n * @param {Object} [emphasisSpecified]\n */\n\n\nfunction setLabelStyle(normalStyle, emphasisStyle, normalModel, emphasisModel, opt, normalSpecified, emphasisSpecified) {\n opt = opt || EMPTY_OBJ;\n var labelFetcher = opt.labelFetcher;\n var labelDataIndex = opt.labelDataIndex;\n var labelDimIndex = opt.labelDimIndex;\n var labelProp = opt.labelProp; // This scenario, `label.normal.show = true; label.emphasis.show = false`,\n // is not supported util someone requests.\n\n var showNormal = normalModel.getShallow('show');\n var showEmphasis = emphasisModel.getShallow('show'); // Consider performance, only fetch label when necessary.\n // If `normal.show` is `false` and `emphasis.show` is `true` and `emphasis.formatter` is not set,\n // label should be displayed, where text is fetched by `normal.formatter` or `opt.defaultText`.\n\n var baseText;\n\n if (showNormal || showEmphasis) {\n if (labelFetcher) {\n baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex, labelProp);\n }\n\n if (baseText == null) {\n baseText = zrUtil.isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt) : opt.defaultText;\n }\n }\n\n var normalStyleText = showNormal ? baseText : null;\n var emphasisStyleText = showEmphasis ? zrUtil.retrieve2(labelFetcher ? labelFetcher.getFormattedLabel(labelDataIndex, 'emphasis', null, labelDimIndex, labelProp) : null, baseText) : null; // Optimize: If style.text is null, text will not be drawn.\n\n if (normalStyleText != null || emphasisStyleText != null) {\n // Always set `textStyle` even if `normalStyle.text` is null, because default\n // values have to be set on `normalStyle`.\n // If we set default values on `emphasisStyle`, consider case:\n // Firstly, `setOption(... label: {normal: {text: null}, emphasis: {show: true}} ...);`\n // Secondly, `setOption(... label: {noraml: {show: true, text: 'abc', color: 'red'} ...);`\n // Then the 'red' will not work on emphasis.\n setTextStyle(normalStyle, normalModel, normalSpecified, opt);\n setTextStyle(emphasisStyle, emphasisModel, emphasisSpecified, opt, true);\n }\n\n normalStyle.text = normalStyleText;\n emphasisStyle.text = emphasisStyleText;\n}\n/**\n * Modify label style manually.\n * Only works after `setLabelStyle` and `setElementHoverStyle` called.\n *\n * @param {module:zrender/src/Element} el\n * @param {Object} [normalStyleProps] optional\n * @param {Object} [emphasisStyleProps] optional\n */\n\n\nfunction modifyLabelStyle(el, normalStyleProps, emphasisStyleProps) {\n var elStyle = el.style;\n\n if (normalStyleProps) {\n rollbackDefaultTextStyle(elStyle);\n el.setStyle(normalStyleProps);\n applyDefaultTextStyle(elStyle);\n }\n\n elStyle = el.__hoverStl;\n\n if (emphasisStyleProps && elStyle) {\n rollbackDefaultTextStyle(elStyle);\n zrUtil.extend(elStyle, emphasisStyleProps);\n applyDefaultTextStyle(elStyle);\n }\n}\n/**\n * Set basic textStyle properties.\n * See more info in `setTextStyleCommon`.\n * @param {Object|module:zrender/graphic/Style} textStyle\n * @param {module:echarts/model/Model} model\n * @param {Object} [specifiedTextStyle] Can be overrided by settings in model.\n * @param {Object} [opt] See `opt` of `setTextStyleCommon`.\n * @param {boolean} [isEmphasis]\n */\n\n\nfunction setTextStyle(textStyle, textStyleModel, specifiedTextStyle, opt, isEmphasis) {\n setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis);\n specifiedTextStyle && zrUtil.extend(textStyle, specifiedTextStyle); // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n\n return textStyle;\n}\n/**\n * Set text option in the style.\n * See more info in `setTextStyleCommon`.\n * @deprecated\n * @param {Object} textStyle\n * @param {module:echarts/model/Model} labelModel\n * @param {string|boolean} defaultColor Default text color.\n * If set as false, it will be processed as a emphasis style.\n */\n\n\nfunction setText(textStyle, labelModel, defaultColor) {\n var opt = {\n isRectText: true\n };\n var isEmphasis;\n\n if (defaultColor === false) {\n isEmphasis = true;\n } else {\n // Support setting color as 'auto' to get visual color.\n opt.autoColor = defaultColor;\n }\n\n setTextStyleCommon(textStyle, labelModel, opt, isEmphasis); // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n}\n/**\n * The uniform entry of set text style, that is, retrieve style definitions\n * from `model` and set to `textStyle` object.\n *\n * Never in merge mode, but in overwrite mode, that is, all of the text style\n * properties will be set. (Consider the states of normal and emphasis and\n * default value can be adopted, merge would make the logic too complicated\n * to manage.)\n *\n * The `textStyle` object can either be a plain object or an instance of\n * `zrender/src/graphic/Style`, and either be the style of normal or emphasis.\n * After this mothod called, the `textStyle` object can then be used in\n * `el.setStyle(textStyle)` or `el.hoverStyle = textStyle`.\n *\n * Default value will be adopted and `insideRollbackOpt` will be created.\n * See `applyDefaultTextStyle` `rollbackDefaultTextStyle` for more details.\n *\n * opt: {\n * disableBox: boolean, Whether diable drawing box of block (outer most).\n * isRectText: boolean,\n * autoColor: string, specify a color when color is 'auto',\n * for textFill, textStroke, textBackgroundColor, and textBorderColor.\n * If autoColor specified, it is used as default textFill.\n * useInsideStyle:\n * `true`: Use inside style (textFill, textStroke, textStrokeWidth)\n * if `textFill` is not specified.\n * `false`: Do not use inside style.\n * `null/undefined`: use inside style if `isRectText` is true and\n * `textFill` is not specified and textPosition contains `'inside'`.\n * forceRich: boolean\n * }\n */\n\n\nfunction setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis) {\n // Consider there will be abnormal when merge hover style to normal style if given default value.\n opt = opt || EMPTY_OBJ;\n\n if (opt.isRectText) {\n var textPosition;\n\n if (opt.getTextPosition) {\n textPosition = opt.getTextPosition(textStyleModel, isEmphasis);\n } else {\n textPosition = textStyleModel.getShallow('position') || (isEmphasis ? null : 'inside'); // 'outside' is not a valid zr textPostion value, but used\n // in bar series, and magric type should be considered.\n\n textPosition === 'outside' && (textPosition = 'top');\n }\n\n textStyle.textPosition = textPosition;\n textStyle.textOffset = textStyleModel.getShallow('offset');\n var labelRotate = textStyleModel.getShallow('rotate');\n labelRotate != null && (labelRotate *= Math.PI / 180);\n textStyle.textRotation = labelRotate;\n textStyle.textDistance = zrUtil.retrieve2(textStyleModel.getShallow('distance'), isEmphasis ? null : 5);\n }\n\n var ecModel = textStyleModel.ecModel;\n var globalTextStyle = ecModel && ecModel.option.textStyle; // Consider case:\n // {\n // data: [{\n // value: 12,\n // label: {\n // rich: {\n // // no 'a' here but using parent 'a'.\n // }\n // }\n // }],\n // rich: {\n // a: { ... }\n // }\n // }\n\n var richItemNames = getRichItemNames(textStyleModel);\n var richResult;\n\n if (richItemNames) {\n richResult = {};\n\n for (var name in richItemNames) {\n if (richItemNames.hasOwnProperty(name)) {\n // Cascade is supported in rich.\n var richTextStyle = textStyleModel.getModel(['rich', name]); // In rich, never `disableBox`.\n // FIXME: consider `label: {formatter: '{a|xx}', color: 'blue', rich: {a: {}}}`,\n // the default color `'blue'` will not be adopted if no color declared in `rich`.\n // That might confuses users. So probably we should put `textStyleModel` as the\n // root ancestor of the `richTextStyle`. But that would be a break change.\n\n setTokenTextStyle(richResult[name] = {}, richTextStyle, globalTextStyle, opt, isEmphasis);\n }\n }\n }\n\n textStyle.rich = richResult;\n setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, true);\n\n if (opt.forceRich && !opt.textStyle) {\n opt.textStyle = {};\n }\n\n return textStyle;\n} // Consider case:\n// {\n// data: [{\n// value: 12,\n// label: {\n// rich: {\n// // no 'a' here but using parent 'a'.\n// }\n// }\n// }],\n// rich: {\n// a: { ... }\n// }\n// }\n\n\nfunction getRichItemNames(textStyleModel) {\n // Use object to remove duplicated names.\n var richItemNameMap;\n\n while (textStyleModel && textStyleModel !== textStyleModel.ecModel) {\n var rich = (textStyleModel.option || EMPTY_OBJ).rich;\n\n if (rich) {\n richItemNameMap = richItemNameMap || {};\n\n for (var name in rich) {\n if (rich.hasOwnProperty(name)) {\n richItemNameMap[name] = 1;\n }\n }\n }\n\n textStyleModel = textStyleModel.parentModel;\n }\n\n return richItemNameMap;\n}\n\nfunction setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, isBlock) {\n // In merge mode, default value should not be given.\n globalTextStyle = !isEmphasis && globalTextStyle || EMPTY_OBJ;\n textStyle.textFill = getAutoColor(textStyleModel.getShallow('color'), opt) || globalTextStyle.color;\n textStyle.textStroke = getAutoColor(textStyleModel.getShallow('textBorderColor'), opt) || globalTextStyle.textBorderColor;\n textStyle.textStrokeWidth = zrUtil.retrieve2(textStyleModel.getShallow('textBorderWidth'), globalTextStyle.textBorderWidth);\n\n if (!isEmphasis) {\n if (isBlock) {\n textStyle.insideRollbackOpt = opt;\n applyDefaultTextStyle(textStyle);\n } // Set default finally.\n\n\n if (textStyle.textFill == null) {\n textStyle.textFill = opt.autoColor;\n }\n } // Do not use `getFont` here, because merge should be supported, where\n // part of these properties may be changed in emphasis style, and the\n // others should remain their original value got from normal style.\n\n\n textStyle.fontStyle = textStyleModel.getShallow('fontStyle') || globalTextStyle.fontStyle;\n textStyle.fontWeight = textStyleModel.getShallow('fontWeight') || globalTextStyle.fontWeight;\n textStyle.fontSize = textStyleModel.getShallow('fontSize') || globalTextStyle.fontSize;\n textStyle.fontFamily = textStyleModel.getShallow('fontFamily') || globalTextStyle.fontFamily;\n textStyle.textAlign = textStyleModel.getShallow('align');\n textStyle.textVerticalAlign = textStyleModel.getShallow('verticalAlign') || textStyleModel.getShallow('baseline');\n textStyle.textLineHeight = textStyleModel.getShallow('lineHeight');\n textStyle.textWidth = textStyleModel.getShallow('width');\n textStyle.textHeight = textStyleModel.getShallow('height');\n textStyle.textTag = textStyleModel.getShallow('tag');\n\n if (!isBlock || !opt.disableBox) {\n textStyle.textBackgroundColor = getAutoColor(textStyleModel.getShallow('backgroundColor'), opt);\n textStyle.textPadding = textStyleModel.getShallow('padding');\n textStyle.textBorderColor = getAutoColor(textStyleModel.getShallow('borderColor'), opt);\n textStyle.textBorderWidth = textStyleModel.getShallow('borderWidth');\n textStyle.textBorderRadius = textStyleModel.getShallow('borderRadius');\n textStyle.textBoxShadowColor = textStyleModel.getShallow('shadowColor');\n textStyle.textBoxShadowBlur = textStyleModel.getShallow('shadowBlur');\n textStyle.textBoxShadowOffsetX = textStyleModel.getShallow('shadowOffsetX');\n textStyle.textBoxShadowOffsetY = textStyleModel.getShallow('shadowOffsetY');\n }\n\n textStyle.textShadowColor = textStyleModel.getShallow('textShadowColor') || globalTextStyle.textShadowColor;\n textStyle.textShadowBlur = textStyleModel.getShallow('textShadowBlur') || globalTextStyle.textShadowBlur;\n textStyle.textShadowOffsetX = textStyleModel.getShallow('textShadowOffsetX') || globalTextStyle.textShadowOffsetX;\n textStyle.textShadowOffsetY = textStyleModel.getShallow('textShadowOffsetY') || globalTextStyle.textShadowOffsetY;\n}\n\nfunction getAutoColor(color, opt) {\n return color !== 'auto' ? color : opt && opt.autoColor ? opt.autoColor : null;\n}\n/**\n * Give some default value to the input `textStyle` object, based on the current settings\n * in this `textStyle` object.\n *\n * The Scenario:\n * when text position is `inside` and `textFill` is not specified, we show\n * text border by default for better view. But it should be considered that text position\n * might be changed when hovering or being emphasis, where the `insideRollback` is used to\n * restore the style.\n *\n * Usage (& NOTICE):\n * When a style object (eithor plain object or instance of `zrender/src/graphic/Style`) is\n * about to be modified on its text related properties, `rollbackDefaultTextStyle` should\n * be called before the modification and `applyDefaultTextStyle` should be called after that.\n * (For the case that all of the text related properties is reset, like `setTextStyleCommon`\n * does, `rollbackDefaultTextStyle` is not needed to be called).\n */\n\n\nfunction applyDefaultTextStyle(textStyle) {\n var textPosition = textStyle.textPosition;\n var opt = textStyle.insideRollbackOpt;\n var insideRollback;\n\n if (opt && textStyle.textFill == null) {\n var autoColor = opt.autoColor;\n var isRectText = opt.isRectText;\n var useInsideStyle = opt.useInsideStyle;\n var useInsideStyleCache = useInsideStyle !== false && (useInsideStyle === true || isRectText && textPosition // textPosition can be [10, 30]\n && typeof textPosition === 'string' && textPosition.indexOf('inside') >= 0);\n var useAutoColorCache = !useInsideStyleCache && autoColor != null; // All of the props declared in `CACHED_LABEL_STYLE_PROPERTIES` are to be cached.\n\n if (useInsideStyleCache || useAutoColorCache) {\n insideRollback = {\n textFill: textStyle.textFill,\n textStroke: textStyle.textStroke,\n textStrokeWidth: textStyle.textStrokeWidth\n };\n }\n\n if (useInsideStyleCache) {\n textStyle.textFill = '#fff'; // Consider text with #fff overflow its container.\n\n if (textStyle.textStroke == null) {\n textStyle.textStroke = autoColor;\n textStyle.textStrokeWidth == null && (textStyle.textStrokeWidth = 2);\n }\n }\n\n if (useAutoColorCache) {\n textStyle.textFill = autoColor;\n }\n } // Always set `insideRollback`, so that the previous one can be cleared.\n\n\n textStyle.insideRollback = insideRollback;\n}\n/**\n * Consider the case: in a scatter,\n * label: {\n * normal: {position: 'inside'},\n * emphasis: {position: 'top'}\n * }\n * In the normal state, the `textFill` will be set as '#fff' for pretty view (see\n * `applyDefaultTextStyle`), but when switching to emphasis state, the `textFill`\n * should be retured to 'autoColor', but not keep '#fff'.\n */\n\n\nfunction rollbackDefaultTextStyle(style) {\n var insideRollback = style.insideRollback;\n\n if (insideRollback) {\n // Reset all of the props in `CACHED_LABEL_STYLE_PROPERTIES`.\n style.textFill = insideRollback.textFill;\n style.textStroke = insideRollback.textStroke;\n style.textStrokeWidth = insideRollback.textStrokeWidth;\n style.insideRollback = null;\n }\n}\n\nfunction getFont(opt, ecModel) {\n var gTextStyleModel = ecModel && ecModel.getModel('textStyle');\n return zrUtil.trim([// FIXME in node-canvas fontWeight is before fontStyle\n opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '', opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '', (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px', opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'].join(' '));\n}\n\nfunction animateOrSetProps(isUpdate, el, props, animatableModel, dataIndex, cb) {\n if (typeof dataIndex === 'function') {\n cb = dataIndex;\n dataIndex = null;\n } // Do not check 'animation' property directly here. Consider this case:\n // animation model is an `itemModel`, whose does not have `isAnimationEnabled`\n // but its parent model (`seriesModel`) does.\n\n\n var animationEnabled = animatableModel && animatableModel.isAnimationEnabled();\n\n if (animationEnabled) {\n var postfix = isUpdate ? 'Update' : '';\n var duration = animatableModel.getShallow('animationDuration' + postfix);\n var animationEasing = animatableModel.getShallow('animationEasing' + postfix);\n var animationDelay = animatableModel.getShallow('animationDelay' + postfix);\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 ? el.animateTo(props, duration, animationDelay || 0, animationEasing, cb, !!cb) : (el.stopAnimation(), el.attr(props), cb && cb());\n } else {\n el.stopAnimation();\n el.attr(props);\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 *\n * @param {module:zrender/Element} el\n * @param {Object} props\n * @param {module:echarts/model/Model} [animatableModel]\n * @param {number} [dataIndex]\n * @param {Function} [cb]\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, animatableModel, dataIndex, cb) {\n animateOrSetProps(true, el, props, animatableModel, dataIndex, cb);\n}\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 * @param {module:zrender/Element} el\n * @param {Object} props\n * @param {module:echarts/model/Model} [animatableModel]\n * @param {number} [dataIndex]\n * @param {Function} cb\n */\n\n\nfunction initProps(el, props, animatableModel, dataIndex, cb) {\n animateOrSetProps(false, el, props, animatableModel, dataIndex, cb);\n}\n/**\n * Get transform matrix of target (param target),\n * in coordinate of its ancestor (param ancestor)\n *\n * @param {module:zrender/mixin/Transformable} target\n * @param {module:zrender/mixin/Transformable} [ancestor]\n */\n\n\nfunction 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 {Array.<number>} target [x, y]\n * @param {Array.<number>|TypedArray.<number>|Object} transform Can be:\n * + Transform matrix: like [1, 0, 0, 1, 0, 0]\n * + {position, rotation, scale}, the same as `zrender/Transformable`.\n * @param {boolean=} invert Whether use invert matrix.\n * @return {Array.<number>} [x, y]\n */\n\n\nfunction applyTransform(target, transform, invert) {\n if (transform && !zrUtil.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 {string} direction 'left' 'right' 'top' 'bottom'\n * @param {Array.<number>} transform Transform matrix: like [1, 0, 0, 1, 0, 0]\n * @param {boolean=} invert Whether use invert matrix.\n * @return {string} Transformed direction. 'left' 'right' 'top' 'bottom'\n */\n\n\nfunction 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/**\n * Apply group transition animation from g1 to g2.\n * If no animatableModel, no animation.\n */\n\n\nfunction groupTransition(g1, g2, animatableModel, cb) {\n if (!g1 || !g2) {\n return;\n }\n\n function getElMap(g) {\n var elMap = {};\n g.traverse(function (el) {\n if (!el.isGroup && el.anid) {\n elMap[el.anid] = el;\n }\n });\n return elMap;\n }\n\n function getAnimatableProps(el) {\n var obj = {\n position: vector.clone(el.position),\n rotation: el.rotation\n };\n\n if (el.shape) {\n obj.shape = zrUtil.extend({}, el.shape);\n }\n\n return obj;\n }\n\n var elMap1 = getElMap(g1);\n g2.traverse(function (el) {\n if (!el.isGroup && 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, el.dataIndex);\n } // else {\n // if (el.previousProps) {\n // graphic.updateProps\n // }\n // }\n\n }\n });\n}\n/**\n * @param {Array.<Array.<number>>} points Like: [[23, 44], [53, 66], ...]\n * @param {Object} rect {x, y, width, height}\n * @return {Array.<Array.<number>>} A new clipped points.\n */\n\n\nfunction clipPointsByRect(points, rect) {\n // FIXME: this way migth be incorrect when grpahic clipped by a corner.\n // and when element have border.\n return zrUtil.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 * @param {Object} targetRect {x, y, width, height}\n * @param {Object} rect {x, y, width, height}\n * @return {Object} A new clipped rect. If rect size are negative, return undefined.\n */\n\n\nfunction 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}\n/**\n * @param {string} iconStr Support 'image://' or 'path://' or direct svg path.\n * @param {Object} [opt] Properties of `module:zrender/Element`, except `style`.\n * @param {Object} [rect] {x, y, width, height}\n * @return {module:zrender/Element} Icon path or image element.\n */\n\n\nfunction createIcon(iconStr, opt, rect) {\n opt = zrUtil.extend({\n rectHover: true\n }, opt);\n var style = opt.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), zrUtil.defaults(style, rect), new ZImage(opt)) : makePath(iconStr.replace('path://', ''), opt, 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 * @param {number} a1x\n * @param {number} a1y\n * @param {number} a2x\n * @param {number} a2y\n * @param {Array.<Array.<number>>} points Points of the polygon.\n * @return {boolean}\n */\n\n\nfunction 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 * @param {number} a1x\n * @param {number} a1y\n * @param {number} a2x\n * @param {number} a2y\n * @param {number} b1x\n * @param {number} b1y\n * @param {number} b2x\n * @param {number} b2y\n * @return {boolean}\n */\n\n\nfunction 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\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} // Register built-in shapes. These shapes might be overwirtten\n// by users, although we do not recommend that.\n\n\nregisterShape('circle', Circle);\nregisterShape('sector', Sector);\nregisterShape('ring', Ring);\nregisterShape('polygon', Polygon);\nregisterShape('polyline', Polyline);\nregisterShape('rect', Rect);\nregisterShape('line', Line);\nregisterShape('bezierCurve', BezierCurve);\nregisterShape('arc', Arc);\nexports.Z2_EMPHASIS_LIFT = Z2_EMPHASIS_LIFT;\nexports.CACHED_LABEL_STYLE_PROPERTIES = CACHED_LABEL_STYLE_PROPERTIES;\nexports.extendShape = extendShape;\nexports.extendPath = extendPath;\nexports.registerShape = registerShape;\nexports.getShapeClass = getShapeClass;\nexports.makePath = makePath;\nexports.makeImage = makeImage;\nexports.mergePath = mergePath;\nexports.resizePath = resizePath;\nexports.subPixelOptimizeLine = subPixelOptimizeLine;\nexports.subPixelOptimizeRect = subPixelOptimizeRect;\nexports.subPixelOptimize = subPixelOptimize;\nexports.setElementHoverStyle = setElementHoverStyle;\nexports.setHoverStyle = setHoverStyle;\nexports.setAsHighDownDispatcher = setAsHighDownDispatcher;\nexports.isHighDownDispatcher = isHighDownDispatcher;\nexports.getHighlightDigit = getHighlightDigit;\nexports.setLabelStyle = setLabelStyle;\nexports.modifyLabelStyle = modifyLabelStyle;\nexports.setTextStyle = setTextStyle;\nexports.setText = setText;\nexports.getFont = getFont;\nexports.updateProps = updateProps;\nexports.initProps = initProps;\nexports.getTransform = getTransform;\nexports.applyTransform = applyTransform;\nexports.transformDirection = transformDirection;\nexports.groupTransition = groupTransition;\nexports.clipPointsByRect = clipPointsByRect;\nexports.clipRectByRect = clipRectByRect;\nexports.createIcon = createIcon;\nexports.linePolygonIntersect = linePolygonIntersect;\nexports.lineLineIntersect = lineLineIntersect;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar BoundingRect = require(\"zrender/lib/core/BoundingRect\");\n\nvar _number = require(\"./number\");\n\nvar parsePercent = _number.parsePercent;\n\nvar formatUtil = require(\"./format\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\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\nvar each = zrUtil.each;\n/**\n * @public\n */\n\nvar LOCATION_PARAMS = ['left', 'right', 'top', 'bottom', 'width', 'height'];\n/**\n * @public\n */\n\nvar 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 position = child.position;\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 position[0] = x;\n position[1] = y;\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/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\n\n\nvar box = boxLayout;\n/**\n * VBox layouting\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\n\nvar vbox = zrUtil.curry(boxLayout, 'vertical');\n/**\n * HBox layouting\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\n\nvar 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 * @param {Object} positionInfo\n * @param {number|string} [positionInfo.x]\n * @param {number|string} [positionInfo.y]\n * @param {number|string} [positionInfo.x2]\n * @param {number|string} [positionInfo.y2]\n * @param {Object} containerRect {width, height}\n * @param {string|number} margin\n * @return {Object} {width, height}\n */\n\nfunction getAvailableSize(positionInfo, containerRect, margin) {\n var containerWidth = containerRect.width;\n var containerHeight = containerRect.height;\n var x = parsePercent(positionInfo.x, containerWidth);\n var y = parsePercent(positionInfo.y, containerHeight);\n var x2 = parsePercent(positionInfo.x2, containerWidth);\n var y2 = parsePercent(positionInfo.y2, containerHeight);\n (isNaN(x) || isNaN(parseFloat(positionInfo.x))) && (x = 0);\n (isNaN(x2) || isNaN(parseFloat(positionInfo.x2))) && (x2 = containerWidth);\n (isNaN(y) || isNaN(parseFloat(positionInfo.y))) && (y = 0);\n (isNaN(y2) || isNaN(parseFloat(positionInfo.y2))) && (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 * @param {Object} positionInfo\n * @param {number|string} [positionInfo.left]\n * @param {number|string} [positionInfo.top]\n * @param {number|string} [positionInfo.right]\n * @param {number|string} [positionInfo.bottom]\n * @param {number|string} [positionInfo.width]\n * @param {number|string} [positionInfo.height]\n * @param {number|string} [positionInfo.aspect] Aspect is width / height\n * @param {Object} containerRect\n * @param {string|number} [margin]\n *\n * @return {module:zrender/core/BoundingRect}\n */\n\n\nfunction 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 {module:zrender/Element} el Should have `getBoundingRect` method.\n * @param {Object} positionInfo\n * @param {number|string} [positionInfo.left]\n * @param {number|string} [positionInfo.top]\n * @param {number|string} [positionInfo.right]\n * @param {number|string} [positionInfo.bottom]\n * @param {number|string} [positionInfo.width] Only for opt.boundingModel: 'raw'\n * @param {number|string} [positionInfo.height] Only for opt.boundingModel: 'raw'\n * @param {Object} containerRect\n * @param {string|number} margin\n * @param {Object} [opt]\n * @param {Array.<number>} [opt.hv=[1,1]] Only horizontal or only vertical.\n * @param {Array.<number>} [opt.boundingMode='all']\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\n\nfunction 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 positionInfo = 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 elPos = el.position;\n var dx = h ? positionInfo.x - rect.x : 0;\n var dy = v ? positionInfo.y - rect.y : 0;\n el.attr('position', boundingMode === 'raw' ? [dx, dy] : [elPos[0] + dx, elPos[1] + dy]);\n}\n/**\n * @param {Object} option Contains some of the properties in HV_NAMES.\n * @param {number} hvIdx 0: horizontal; 1: vertical.\n */\n\n\nfunction sizeCalculable(option, hvIdx) {\n return option[HV_NAMES[hvIdx][0]] != null || option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null;\n}\n/**\n * Consider Case:\n * When defulat 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 * var 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 {Object} targetOption\n * @param {Object} newOption\n * @param {Object|string} [opt]\n * @param {boolean|Array.<boolean>} [opt.ignoreSize=false] Used for the components\n * that width (or height) should not be calculated by left and right (or top and bottom).\n */\n\n\nfunction mergeLayoutParam(targetOption, newOption, opt) {\n !zrUtil.isObject(opt) && (opt = {});\n var ignoreSize = 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 = names[i];\n\n if (!hasProp(newParams, name) && hasProp(targetOption, name)) {\n newParams[name] = targetOption[name];\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 * @param {Object} source\n * @return {Object} Result contains those props.\n */\n\n\nfunction 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\n\nfunction 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\nexports.LOCATION_PARAMS = LOCATION_PARAMS;\nexports.HV_NAMES = HV_NAMES;\nexports.box = box;\nexports.vbox = vbox;\nexports.hbox = hbox;\nexports.getAvailableSize = getAvailableSize;\nexports.getLayoutRect = getLayoutRect;\nexports.positionElement = positionElement;\nexports.sizeCalculable = sizeCalculable;\nexports.mergeLayoutParam = mergeLayoutParam;\nexports.getLayoutParams = getLayoutParams;\nexports.copyLayoutParams = copyLayoutParams;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\nvar env = require(\"zrender/lib/core/env\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 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 each = zrUtil.each;\nvar isObject = zrUtil.isObject;\nvar isArray = zrUtil.isArray;\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';\n/**\n * If value is not array, then translate it to array.\n * @param {*} value\n * @return {Array} [value] or value\n */\n\nfunction 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 * @param {Object} opt\n * @param {string} key\n * @param {Array.<string>} subOpts\n */\n\n\nfunction 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}\n\nvar 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 * @param {string|number|Date|Array|Object} dataItem\n * @return {number|string|Date|Array.<number|string|Date>}\n */\n\nfunction 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 * @param {string|number|Date|Array|Object} dataItem\n */\n\n\nfunction 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 * Mapping to exists for merge.\n *\n * @public\n * @param {Array.<Object>|Array.<module:echarts/model/Component>} exists\n * @param {Object|Array.<Object>} newCptOptions\n * @return {Array.<Object>} Result, like [{exist: ..., option: ...}, {}],\n * index of which is the same as exists.\n */\n\n\nfunction mappingToExists(exists, newCptOptions) {\n // Mapping by the order by original option (but not order of\n // new option) in merge mode. Because we should ensure\n // some specified index (like xAxisIndex) is consistent with\n // original option, which is easy to understand, espatially in\n // media query. And in most case, merge option is used to\n // update partial option but not be expected to change order.\n newCptOptions = (newCptOptions || []).slice();\n var result = zrUtil.map(exists || [], function (obj, index) {\n return {\n exist: obj\n };\n }); // Mapping by id or name if specified.\n\n each(newCptOptions, function (cptOption, index) {\n if (!isObject(cptOption)) {\n return;\n } // id has highest priority.\n\n\n for (var i = 0; i < result.length; i++) {\n if (!result[i].option // Consider name: two map to one.\n && cptOption.id != null && result[i].exist.id === cptOption.id + '') {\n result[i].option = cptOption;\n newCptOptions[index] = null;\n return;\n }\n }\n\n for (var i = 0; i < result.length; i++) {\n var exist = result[i].exist;\n\n if (!result[i].option // Consider name: two map to one.\n // Can not match when both ids exist but different.\n && (exist.id == null || cptOption.id == null) && cptOption.name != null && !isIdInner(cptOption) && !isIdInner(exist) && exist.name === cptOption.name + '') {\n result[i].option = cptOption;\n newCptOptions[index] = null;\n return;\n }\n }\n }); // Otherwise mapping by index.\n\n each(newCptOptions, function (cptOption, index) {\n if (!isObject(cptOption)) {\n return;\n }\n\n var i = 0;\n\n for (; i < result.length; i++) {\n var exist = result[i].exist;\n\n if (!result[i].option // Existing model that already has id should be able to\n // mapped to (because after mapping performed model may\n // be assigned with a id, whish should not affect next\n // mapping), except those has inner id.\n && !isIdInner(exist) // Caution:\n // Do not overwrite id. But name can be overwritten,\n // because axis use name as 'show label text'.\n // 'exist' always has id and name and we dont\n // need to check it.\n && cptOption.id == null) {\n result[i].option = cptOption;\n break;\n }\n }\n\n if (i >= result.length) {\n result.push({\n option: cptOption\n });\n }\n });\n return result;\n}\n/**\n * Make id and name for mapping result (result of mappingToExists)\n * into `keyInfo` field.\n *\n * @public\n * @param {Array.<Object>} Result, like [{exist: ..., option: ...}, {}],\n * which order is the same as exists.\n * @return {Array.<Object>} The input.\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 = zrUtil.createHashMap();\n each(mapResult, function (item, index) {\n var existCpt = item.exist;\n existCpt && idMap.set(existCpt.id, item);\n });\n each(mapResult, function (item, index) {\n var opt = item.option;\n zrUtil.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 existCpt = item.exist;\n var opt = item.option;\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 ? opt.name + '' : existCpt ? existCpt.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 (existCpt) {\n keyInfo.id = existCpt.id;\n } else if (opt.id != null) {\n keyInfo.id = 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 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} cptOption\n * @return {boolean}\n */\n\n\nfunction isIdInner(cptOption) {\n return isObject(cptOption) && cptOption.id && (cptOption.id + '').indexOf('\\0_ec_\\0') === 0;\n}\n/**\n * A helper for removing duplicate items between batchA and batchB,\n * and in themselves, and categorize by series.\n *\n * @param {Array.<Object>} batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @param {Array.<Object>} batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @return {Array.<Array.<Object>, Array.<Object>>} result: [resultBatchA, resultBatchB]\n */\n\n\nfunction 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 = sourceBatch[i].seriesId;\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 {module:echarts/data/List} data\n * @param {Object} payload Contains dataIndex (means rawIndex) / dataIndexInside / name\n * each of which can be Array or primary type.\n * @return {number|Array.<number>} dataIndex If not found, return undefined/null.\n */\n\n\nfunction queryDataIndex(data, payload) {\n if (payload.dataIndexInside != null) {\n return payload.dataIndexInside;\n } else if (payload.dataIndex != null) {\n return zrUtil.isArray(payload.dataIndex) ? zrUtil.map(payload.dataIndex, function (value) {\n return data.indexOfRawIndex(value);\n }) : data.indexOfRawIndex(payload.dataIndex);\n } else if (payload.name != null) {\n return zrUtil.isArray(payload.name) ? zrUtil.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 * var inner = zrUitl.makeInner();\n *\n * function some1(hostObj) {\n * inner(hostObj).someProperty = 1212;\n * ...\n * }\n * function some2() {\n * var fields = inner(this);\n * fields.someProperty1 = 1212;\n * fields.someProperty2 = 'xx';\n * ...\n * }\n *\n * @return {Function}\n */\n\n\nfunction makeInner() {\n // Consider different scope by es module import.\n var key = '__\\0ec_inner_' + innerUniqueIndex++ + '_' + Math.random().toFixed(5);\n return function (hostObj) {\n return hostObj[key] || (hostObj[key] = {});\n };\n}\n\nvar innerUniqueIndex = 0;\n/**\n * @param {module:echarts/model/Global} ecModel\n * @param {string|Object} finder\n * If string, e.g., 'geo', means {geoIndex: 0}.\n * If Object, could contain some of these properties below:\n * {\n * seriesIndex, seriesId, seriesName,\n * geoIndex, geoId, geoName,\n * bmapIndex, bmapId, bmapName,\n * xAxisIndex, xAxisId, xAxisName,\n * yAxisIndex, yAxisId, yAxisName,\n * gridIndex, gridId, gridName,\n * ... (can be extended)\n * }\n * Each properties can be number|string|Array.<number>|Array.<string>\n * For example, a finder could be\n * {\n * seriesIndex: 3,\n * geoId: ['aa', 'cc'],\n * gridName: ['xx', 'rr']\n * }\n * xxxIndex can be set as 'all' (means all xxx) or 'none' (means not specify)\n * If nothing or null/undefined specified, return nothing.\n * @param {Object} [opt]\n * @param {string} [opt.defaultMainType]\n * @param {Array.<string>} [opt.includeMainTypes]\n * @return {Object} result like:\n * {\n * seriesModels: [seriesModel1, seriesModel2],\n * seriesModel: seriesModel1, // The first model\n * geoModels: [geoModel1, geoModel2],\n * geoModel: geoModel1, // The first model\n * ...\n * }\n */\n\nfunction parseFinder(ecModel, finder, opt) {\n if (zrUtil.isString(finder)) {\n var obj = {};\n obj[finder + 'Index'] = 0;\n finder = obj;\n }\n\n var defaultMainType = opt && opt.defaultMainType;\n\n if (defaultMainType && !has(finder, defaultMainType + 'Index') && !has(finder, defaultMainType + 'Id') && !has(finder, defaultMainType + 'Name')) {\n finder[defaultMainType + 'Index'] = 0;\n }\n\n var result = {};\n each(finder, function (value, key) {\n var value = finder[key]; // Exclude 'dataIndex' and other illgal keys.\n\n if (key === 'dataIndex' || key === 'dataIndexInside') {\n result[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 || value == null || queryType === 'index' && value === 'none' || opt && opt.includeMainTypes && zrUtil.indexOf(opt.includeMainTypes, mainType) < 0) {\n return;\n }\n\n var queryParam = {\n mainType: mainType\n };\n\n if (queryType !== 'index' || value !== 'all') {\n queryParam[queryType] = value;\n }\n\n var models = ecModel.queryComponents(queryParam);\n result[mainType + 'Models'] = models;\n result[mainType + 'Model'] = models[0];\n });\n return result;\n}\n\nfunction has(obj, prop) {\n return obj && obj.hasOwnProperty(prop);\n}\n\nfunction setAttribute(dom, key, value) {\n dom.setAttribute ? dom.setAttribute(key, value) : dom[key] = value;\n}\n\nfunction getAttribute(dom, key) {\n return dom.getAttribute ? dom.getAttribute(key) : dom[key];\n}\n\nfunction 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 * @param {Array} array\n * @param {Function} getKey\n * param {*} Array item\n * return {string} key\n * @return {Object} Result\n * {Array}: keys,\n * {module:zrender/core/util/HashMap} buckets: {key -> Array}\n */\n\n\nfunction groupData(array, getKey) {\n var buckets = zrUtil.createHashMap();\n var keys = [];\n zrUtil.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\nexports.normalizeToArray = normalizeToArray;\nexports.defaultEmphasis = defaultEmphasis;\nexports.TEXT_STYLE_OPTIONS = TEXT_STYLE_OPTIONS;\nexports.getDataItemValue = getDataItemValue;\nexports.isDataItemOption = isDataItemOption;\nexports.mappingToExists = mappingToExists;\nexports.makeIdAndName = makeIdAndName;\nexports.isNameSpecified = isNameSpecified;\nexports.isIdInner = isIdInner;\nexports.compressBatches = compressBatches;\nexports.queryDataIndex = queryDataIndex;\nexports.makeInner = makeInner;\nexports.parseFinder = parseFinder;\nexports.setAttribute = setAttribute;\nexports.getAttribute = getAttribute;\nexports.getTooltipRenderMode = getTooltipRenderMode;\nexports.groupData = groupData;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar zrUtil = require(\"zrender/lib/core/util\");\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, 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* </licenses/LICENSE-d3>).\n*/\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 * @memberOf module:echarts/util/number\n * @param {(number|Array.<number>)} val\n * @param {Array.<number>} domain Domain extent domain[0] can be bigger than domain[1]\n * @param {Array.<number>} range Range extent range[0] can be bigger than range[1]\n * @param {boolean} clamp\n * @return {(number|Array.<number>}\n */\n\n\nfunction 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 * @memberOf module:echarts/util/number\n * @param {string|number} percent\n * @param {number} all\n * @return {number}\n */\n\n\nfunction 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}\n/**\n * (1) Fix rounding error of float numbers.\n * (2) Support return string to avoid scientific notation like '3.5e-7'.\n *\n * @param {number} x\n * @param {number} [precision]\n * @param {boolean} [returnStr]\n * @return {number|string}\n */\n\n\nfunction 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 * asc sort arr.\n * The input arr will be modified.\n *\n * @param {Array} arr\n * @return {Array} The input arr.\n */\n\n\nfunction asc(arr) {\n arr.sort(function (a, b) {\n return a - b;\n });\n return arr;\n}\n/**\n * Get precision\n * @param {number} val\n */\n\n\nfunction 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 // var 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 * @param {string|number} val\n * @return {number}\n */\n\n\nfunction 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 * @param {Array.<number>} dataExtent\n * @param {Array.<number>} pixelExtent\n * @return {number} precision\n */\n\n\nfunction 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 {Array.<number>} valueList a list of all data\n * @param {number} idx index of the data to be processed in valueList\n * @param {number} precision integer number showing digits of precision\n * @return {number} percent ranging from 0 to 100\n */\n\n\nfunction 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\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * To 0 - 2 * PI, considering negative radian.\n * @param {number} radian\n * @return {number}\n */\n\nfunction 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\n\nfunction isRadianAroundZero(val) {\n return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;\n}\n/* eslint-disable */\n\n\nvar TIME_REG = /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d\\d)(?::(\\d\\d)(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // jshint ignore:line\n\n/* eslint-enable */\n\n/**\n * @param {string|Date|number} value 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 <https://momentjs.com/>).\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} date\n */\n\nfunction 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 {number} val\n * @return {number}\n */\n\n\nfunction 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 {number} val non-negative value\n * @return {number}\n */\n\n\nfunction 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 {number} val Non-negative value.\n * @param {boolean} round\n * @return {number}\n */\n\n\nfunction 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 * <https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/arrays/quantile.js>.\n * See the license statement at the head of this file.\n * @param {Array.<number>} ascArr\n */\n\n\nfunction 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 {Array.<Object>} list, where `close` mean open or close\n * of the interval, and Infinity can be used.\n * @return {Array.<Object>} The origin list, which has been reformed.\n */\n\n\nfunction 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 = list[i].close;\n\n for (var lg = 0; lg < 2; lg++) {\n if (interval[lg] <= curr) {\n interval[lg] = curr;\n close[lg] = !lg ? 1 - currClose : 1;\n }\n\n curr = interval[lg];\n currClose = close[lg];\n }\n\n if (interval[0] === interval[1] && close[0] * close[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 * parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n * ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n * subtraction forces infinities to NaN\n *\n * @param {*} v\n * @return {boolean}\n */\n\n\nfunction isNumeric(v) {\n return v - parseFloat(v) >= 0;\n}\n\nexports.linearMap = linearMap;\nexports.parsePercent = parsePercent;\nexports.round = round;\nexports.asc = asc;\nexports.getPrecision = getPrecision;\nexports.getPrecisionSafe = getPrecisionSafe;\nexports.getPixelPrecision = getPixelPrecision;\nexports.getPercentWithPrecision = getPercentWithPrecision;\nexports.MAX_SAFE_INTEGER = MAX_SAFE_INTEGER;\nexports.remRadian = remRadian;\nexports.isRadianAroundZero = isRadianAroundZero;\nexports.parseDate = parseDate;\nexports.quantity = quantity;\nexports.quantityExponent = quantityExponent;\nexports.nice = nice;\nexports.quantile = quantile;\nexports.reformIntervals = reformIntervals;\nexports.isNumeric = isNumeric;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar _graphic = require(\"../graphic\");\n\nvar extendShape = _graphic.extendShape;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Sausage: similar to sector, but have half circle on both sides\n * @public\n */\nvar _default = extendShape({\n type: 'sausage',\n shape: {\n cx: 0,\n cy: 0,\n r0: 0,\n r: 0,\n startAngle: 0,\n endAngle: Math.PI * 2,\n clockwise: true\n },\n 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\nmodule.exports = _default;"],"names":["zrUtil","pathTool","colorTool","matrix","vector","Path","Transformable","ZImage","exports","Image","Group","Text","Circle","Sector","Ring","Polygon","Polyline","Rect","Line","BezierCurve","Arc","CompoundPath","LinearGradient","RadialGradient","BoundingRect","IncrementalDisplayable","subPixelOptimizeUtil","mathMax","Math","max","mathMin","min","EMPTY_OBJ","Z2_EMPHASIS_LIFT","CACHED_LABEL_STYLE_PROPERTIES","color","textBorderColor","textBorderWidth","EMPHASIS","NORMAL","_highlightNextDigit","_highlightKeyMap","_customShapeMap","extendShape","opts","extend","extendPath","pathData","extendFromString","registerShape","name","ShapeClass","getShapeClass","hasOwnProperty","makePath","rect","layout","path","createFromString","centerGraphic","getBoundingRect","resizePath","makeImage","imageUrl","style","image","x","y","width","height","onload","img","boundingRect","setStyle","aspect","cx","cy","mergePath","applyTransform","pathRect","m","calculateTransform","subPixelOptimizeLine","param","shape","subPixelOptimizeRect","subPixelOptimize","hasFillOrStroke","fillOrStroke","liftedColorMap","createHashMap","liftedColorCount","liftColor","liftedColor","get","lift","set","cacheElementStl","el","__hoverStlDirty","hoverStyle","__hoverStl","normalStyle","__cachedNormalStl","__cachedNormalZ2","z2","elStyle","fill","stroke","singleEnterEmphasis","hoverStl","__highlighted","zr","__zr","useHoverLayer","painter","type","isGroup","elTarget","targetStyle","addHover","rollbackDefaultTextStyle","extendFrom","setDefaultHoverFillStroke","applyDefaultTextStyle","dirty","prop","singleEnterNormal","highlighted","removeHover","normalStl","normalZ2","traverseUpdate","updater","commonParam","trigger","fromState","toState","traverse","child","__highDownOnUpdate","setElementHoverStyle","onElementMouseOver","e","shouldSilent","this","__highByOuter","onElementMouseOut","onElementEmphasisEvent","highlightDigit","onElementNormalEvent","__highDownSilentOnTouch","zrByTouch","setHoverStyle","setAsHighDownDispatcher","asDispatcher","disable","highDownSilentOnTouch","highDownOnUpdate","__highDownDispatcher","method","isHighDownDispatcher","getHighlightDigit","highlightKey","setLabelStyle","emphasisStyle","normalModel","emphasisModel","opt","normalSpecified","emphasisSpecified","baseText","labelFetcher","labelDataIndex","labelDimIndex","labelProp","showNormal","getShallow","showEmphasis","getFormattedLabel","isFunction","defaultText","normalStyleText","emphasisStyleText","retrieve2","setTextStyle","text","modifyLabelStyle","normalStyleProps","emphasisStyleProps","textStyle","textStyleModel","specifiedTextStyle","isEmphasis","setTextStyleCommon","setText","labelModel","defaultColor","isRectText","autoColor","textPosition","getTextPosition","textOffset","labelRotate","PI","textRotation","textDistance","richResult","ecModel","globalTextStyle","option","richItemNames","getRichItemNames","richTextStyle","getModel","setTokenTextStyle","rich","forceRich","richItemNameMap","parentModel","isBlock","textFill","getAutoColor","textStroke","textStrokeWidth","insideRollbackOpt","fontStyle","fontWeight","fontSize","fontFamily","textAlign","textVerticalAlign","textLineHeight","textWidth","textHeight","textTag","disableBox","textBackgroundColor","textPadding","textBorderRadius","textBoxShadowColor","textBoxShadowBlur","textBoxShadowOffsetX","textBoxShadowOffsetY","textShadowColor","textShadowBlur","textShadowOffsetX","textShadowOffsetY","insideRollback","useInsideStyle","useInsideStyleCache","indexOf","useAutoColorCache","getFont","gTextStyleModel","trim","join","animateOrSetProps","isUpdate","props","animatableModel","dataIndex","cb","animationEnabled","isAnimationEnabled","postfix","duration","animationEasing","animationDelay","getAnimationDelayParams","animateTo","stopAnimation","attr","updateProps","initProps","getTransform","target","ancestor","mat","identity","mul","getLocalTransform","parent","transform","invert","isArrayLike","transformDirection","direction","hBase","abs","vBase","vertex","groupTransition","g1","g2","elMap1","getElMap","anid","oldEl","newProp","getAnimatableProps","g","elMap","obj","position","clone","rotation","clipPointsByRect","points","map","point","clipRectByRect","targetRect","x2","y2","createIcon","iconStr","rectHover","strokeNoScale","slice","defaults","replace","linePolygonIntersect","a1x","a1y","a2x","a2y","i","p2","length","p","lineLineIntersect","b1x","b1y","b2x","b2y","mx","my","nx","ny","nmCrossProduct","crossProduct2d","nearZero","b1a1x","b1a1y","q","x1","y1","val","_number","parsePercent","formatUtil","each","LOCATION_PARAMS","HV_NAMES","boxLayout","orient","group","gap","maxWidth","maxHeight","Infinity","currentLineMaxSize","eachChild","idx","nextX","nextY","nextChild","childAt","nextChildRect","moveX","newline","moveY","box","vbox","curry","hbox","getAvailableSize","positionInfo","containerRect","margin","containerWidth","containerHeight","isNaN","parseFloat","normalizeCssArray","getLayoutRect","left","top","right","bottom","verticalMargin","horizontalMargin","positionElement","h","hv","v","boundingMode","needLocalTransform","elPos","dx","dy","sizeCalculable","hvIdx","mergeLayoutParam","targetOption","newOption","isObject","ignoreSize","isArray","hResult","merge","vResult","names","newParams","newValueCount","merged","mergedValueCount","enoughParamNumber","hasProp","hasValue","copy","source","getLayoutParams","copyLayoutParams","env","DUMMY_COMPONENT_NAME_PREFIX","normalizeToArray","value","Array","defaultEmphasis","key","subOpts","emphasis","len","subOptName","TEXT_STYLE_OPTIONS","getDataItemValue","dataItem","Date","isDataItemOption","mappingToExists","exists","newCptOptions","result","index","exist","cptOption","id","isIdInner","push","makeIdAndName","mapResult","idMap","item","existCpt","assert","keyInfo","idNum","isNameSpecified","componentModel","compressBatches","batchA","batchB","mapA","mapB","makeMap","mapToArray","sourceBatch","otherMap","seriesId","dataIndices","otherDataIndices","j","lenj","isData","queryDataIndex","data","payload","dataIndexInside","indexOfRawIndex","indexOfName","makeInner","innerUniqueIndex","random","toFixed","hostObj","parseFinder","finder","isString","defaultMainType","has","parsedKey","match","mainType","queryType","toLowerCase","includeMainTypes","queryParam","models","queryComponents","setAttribute","dom","getAttribute","getTooltipRenderMode","renderModeOption","domSupported","groupData","array","getKey","buckets","keys","RADIAN_EPSILON","_trim","str","linearMap","domain","range","clamp","subDomain","subRange","percent","all","NaN","round","precision","returnStr","asc","arr","sort","a","b","getPrecision","count","getPrecisionSafe","toString","eIndex","dotIndex","getPixelPrecision","dataExtent","pixelExtent","log","LN10","dataQuantity","floor","sizeQuantity","isFinite","getPercentWithPrecision","valueList","sum","reduce","acc","digits","pow","votesPerQuota","targetSeats","seats","votes","currentSum","remainder","Number","NEGATIVE_INFINITY","maxId","MAX_SAFE_INTEGER","remRadian","radian","pi2","isRadianAroundZero","TIME_REG","parseDate","exec","hour","toUpperCase","UTC","quantity","quantityExponent","exp","nice","nf","exponent","exp10","f","quantile","ascArr","H","reformIntervals","list","littleThan","curr","currClose","interval","close","lg","splice","isNumeric","_graphic","_default","r0","r","startAngle","endAngle","clockwise","buildPath","ctx","dr","rCenter","unitStartX","cos","unitStartY","sin","unitEndX","unitEndY","lessThanCircle","moveTo","arc","closePath","module"],"sourceRoot":""}
|