{"version":3,"file":"js/chunk-vendors-edefa0e2.8a61e85d.js","mappings":"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","sources":["webpack://app/./node_modules/zrender/lib/config.js","webpack://app/./node_modules/zrender/lib/contain/arc.js","webpack://app/./node_modules/zrender/lib/contain/cubic.js","webpack://app/./node_modules/zrender/lib/contain/line.js","webpack://app/./node_modules/zrender/lib/contain/path.js","webpack://app/./node_modules/zrender/lib/contain/polygon.js","webpack://app/./node_modules/zrender/lib/contain/quadratic.js","webpack://app/./node_modules/zrender/lib/contain/text.js","webpack://app/./node_modules/zrender/lib/contain/util.js","webpack://app/./node_modules/zrender/lib/contain/windingLine.js","webpack://app/./node_modules/zrender/lib/container/Group.js","webpack://app/./node_modules/zrender/lib/core/BoundingRect.js","webpack://app/./node_modules/zrender/lib/core/GestureMgr.js","webpack://app/./node_modules/zrender/lib/core/LRU.js","webpack://app/./node_modules/zrender/lib/core/PathProxy.js","webpack://app/./node_modules/zrender/lib/core/arrayDiff2.js"],"sourcesContent":["var dpr = 1; // If in browser environment\n\nif (typeof window !== 'undefined') {\n dpr = Math.max(window.devicePixelRatio || 1, 1);\n}\n/**\n * config默认配置项\n * @exports zrender/config\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n */\n\n/**\n * Debug log mode:\n * 0: Do nothing, for release.\n * 1: console.error, for debug.\n */\n\n\nvar debugMode = 0; // retina 屏幕优化\n\nvar devicePixelRatio = dpr;\nexports.debugMode = debugMode;\nexports.devicePixelRatio = devicePixelRatio;","var _util = require(\"./util\");\n\nvar normalizeRadian = _util.normalizeRadian;\nvar PI2 = Math.PI * 2;\n/**\n * 圆弧描边包含判断\n * @param {number} cx\n * @param {number} cy\n * @param {number} r\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean} anticlockwise\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {Boolean}\n */\n\nfunction containStroke(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth;\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n\n if (d - _l > r || d + _l < r) {\n return false;\n }\n\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n return true;\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var angle = Math.atan2(y, x);\n\n if (angle < 0) {\n angle += PI2;\n }\n\n return angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle;\n}\n\nexports.containStroke = containStroke;","var curve = require(\"../core/curve\");\n\n/**\n * 三次贝塞尔曲线描边包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nfunction containStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l) {\n return false;\n }\n\n var d = curve.cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);\n return d <= _l / 2;\n}\n\nexports.containStroke = containStroke;","/**\n * 线段包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nfunction containStroke(x0, y0, x1, y1, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth;\n var _a = 0;\n var _b = x0; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l || y < y0 - _l && y < y1 - _l || x > x0 + _l && x > x1 + _l || x < x0 - _l && x < x1 - _l) {\n return false;\n }\n\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n } else {\n return Math.abs(x - x0) <= _l / 2;\n }\n\n var tmp = _a * x - y + _b;\n\n var _s = tmp * tmp / (_a * _a + 1);\n\n return _s <= _l / 2 * _l / 2;\n}\n\nexports.containStroke = containStroke;","var PathProxy = require(\"../core/PathProxy\");\n\nvar line = require(\"./line\");\n\nvar cubic = require(\"./cubic\");\n\nvar quadratic = require(\"./quadratic\");\n\nvar arc = require(\"./arc\");\n\nvar _util = require(\"./util\");\n\nvar normalizeRadian = _util.normalizeRadian;\n\nvar curve = require(\"../core/curve\");\n\nvar windingLine = require(\"./windingLine\");\n\nvar CMD = PathProxy.CMD;\nvar PI2 = Math.PI * 2;\nvar EPSILON = 1e-4;\n\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n} // 临时数组\n\n\nvar roots = [-1, -1, -1];\nvar extrema = [-1, -1];\n\nfunction swapExtrema() {\n var tmp = extrema[0];\n extrema[0] = extrema[1];\n extrema[1] = tmp;\n}\n\nfunction windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {\n // Quick reject\n if (y > y0 && y > y1 && y > y2 && y > y3 || y < y0 && y < y1 && y < y2 && y < y3) {\n return 0;\n }\n\n var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\n\n if (nRoots === 0) {\n return 0;\n } else {\n var w = 0;\n var nExtrema = -1;\n var y0_;\n var y1_;\n\n for (var i = 0; i < nRoots; i++) {\n var t = roots[i]; // Avoid winding error when intersection point is the connect point of two line of polygon\n\n var unit = t === 0 || t === 1 ? 0.5 : 1;\n var x_ = curve.cubicAt(x0, x1, x2, x3, t);\n\n if (x_ < x) {\n // Quick reject\n continue;\n }\n\n if (nExtrema < 0) {\n nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);\n\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n\n y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);\n\n if (nExtrema > 1) {\n y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n\n if (nExtrema === 2) {\n // 分成三段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n } else {\n w += y3 < y1_ ? unit : -unit;\n }\n } else {\n // 分成两段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n } else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n\n return w;\n }\n}\n\nfunction windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {\n // Quick reject\n if (y > y0 && y > y1 && y > y2 || y < y0 && y < y1 && y < y2) {\n return 0;\n }\n\n var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\n\n if (nRoots === 0) {\n return 0;\n } else {\n var t = curve.quadraticExtremum(y0, y1, y2);\n\n if (t >= 0 && t <= 1) {\n var w = 0;\n var y_ = curve.quadraticAt(y0, y1, y2, t);\n\n for (var i = 0; i < nRoots; i++) {\n // Remove one endpoint.\n var unit = roots[i] === 0 || roots[i] === 1 ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[i]);\n\n if (x_ < x) {\n // Quick reject\n continue;\n }\n\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n } else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n\n return w;\n } else {\n // Remove one endpoint.\n var unit = roots[0] === 0 || roots[0] === 1 ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[0]);\n\n if (x_ < x) {\n // Quick reject\n return 0;\n }\n\n return y2 < y0 ? unit : -unit;\n }\n }\n} // TODO\n// Arc 旋转\n\n\nfunction windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) {\n y -= cy;\n\n if (y > r || y < -r) {\n return 0;\n }\n\n var tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n var diff = Math.abs(startAngle - endAngle);\n\n if (diff < 1e-4) {\n return 0;\n }\n\n if (diff % PI2 < 1e-4) {\n // Is a circle\n startAngle = 0;\n endAngle = PI2;\n var dir = anticlockwise ? 1 : -1;\n\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n } else {\n return 0;\n }\n }\n\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n var w = 0;\n\n for (var i = 0; i < 2; i++) {\n var x_ = roots[i];\n\n if (x_ + cx > x) {\n var angle = Math.atan2(y, x_);\n var dir = anticlockwise ? 1 : -1;\n\n if (angle < 0) {\n angle = PI2 + angle;\n }\n\n if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {\n if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\n dir = -dir;\n }\n\n w += dir;\n }\n }\n }\n\n return w;\n}\n\nfunction containPath(data, lineWidth, isStroke, x, y) {\n var w = 0;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++]; // Begin a new subpath\n\n if (cmd === CMD.M && i > 1) {\n // Close previous subpath\n if (!isStroke) {\n w += windingLine(xi, yi, x0, y0, x, y);\n } // 如果被任何一个 subpath 包含\n // if (w !== 0) {\n // return true;\n // }\n\n }\n\n if (i === 1) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n break;\n\n case CMD.L:\n if (isStroke) {\n if (line.containStroke(xi, yi, data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n if (isStroke) {\n if (cubic.containStroke(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n if (isStroke) {\n if (quadratic.containStroke(xi, yi, data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n } else {\n w += windingQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++]; // TODO Arc 旋转\n\n i += 1;\n var anticlockwise = 1 - data[i++];\n var x1 = Math.cos(theta) * rx + cx;\n var y1 = Math.sin(theta) * ry + cy; // 不是直接使用 arc 命令\n\n if (i > 1) {\n w += windingLine(xi, yi, x1, y1, x, y);\n } else {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n } // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n\n\n var _x = (x - cx) * ry / rx + cx;\n\n if (isStroke) {\n if (arc.containStroke(cx, cy, ry, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) {\n return true;\n }\n } else {\n w += windingArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y);\n }\n\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n var x1 = x0 + width;\n var y1 = y0 + height;\n\n if (isStroke) {\n if (line.containStroke(x0, y0, x1, y0, lineWidth, x, y) || line.containStroke(x1, y0, x1, y1, lineWidth, x, y) || line.containStroke(x1, y1, x0, y1, lineWidth, x, y) || line.containStroke(x0, y1, x0, y0, lineWidth, x, y)) {\n return true;\n }\n } else {\n // FIXME Clockwise ?\n w += windingLine(x1, y0, x1, y1, x, y);\n w += windingLine(x0, y1, x0, y0, x, y);\n }\n\n break;\n\n case CMD.Z:\n if (isStroke) {\n if (line.containStroke(xi, yi, x0, y0, lineWidth, x, y)) {\n return true;\n }\n } else {\n // Close a subpath\n w += windingLine(xi, yi, x0, y0, x, y); // 如果被任何一个 subpath 包含\n // FIXME subpaths may overlap\n // if (w !== 0) {\n // return true;\n // }\n }\n\n xi = x0;\n yi = y0;\n break;\n }\n }\n\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += windingLine(xi, yi, x0, y0, x, y) || 0;\n }\n\n return w !== 0;\n}\n\nfunction contain(pathData, x, y) {\n return containPath(pathData, 0, false, x, y);\n}\n\nfunction containStroke(pathData, lineWidth, x, y) {\n return containPath(pathData, lineWidth, true, x, y);\n}\n\nexports.contain = contain;\nexports.containStroke = containStroke;","var windingLine = require(\"./windingLine\");\n\nvar EPSILON = 1e-8;\n\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n}\n\nfunction contain(points, x, y) {\n var w = 0;\n var p = points[0];\n\n if (!p) {\n return false;\n }\n\n for (var i = 1; i < points.length; i++) {\n var p2 = points[i];\n w += windingLine(p[0], p[1], p2[0], p2[1], x, y);\n p = p2;\n } // Close polygon\n\n\n var p0 = points[0];\n\n if (!isAroundEqual(p[0], p0[0]) || !isAroundEqual(p[1], p0[1])) {\n w += windingLine(p[0], p[1], p0[0], p0[1], x, y);\n }\n\n return w !== 0;\n}\n\nexports.contain = contain;","var _curve = require(\"../core/curve\");\n\nvar quadraticProjectPoint = _curve.quadraticProjectPoint;\n\n/**\n * 二次贝塞尔曲线描边包含判断\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} lineWidth\n * @param {number} x\n * @param {number} y\n * @return {boolean}\n */\nfunction containStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n\n var _l = lineWidth; // Quick reject\n\n if (y > y0 + _l && y > y1 + _l && y > y2 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l) {\n return false;\n }\n\n var d = quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);\n return d <= _l / 2;\n}\n\nexports.containStroke = containStroke;","var BoundingRect = require(\"../core/BoundingRect\");\n\nvar imageHelper = require(\"../graphic/helper/image\");\n\nvar _util = require(\"../core/util\");\n\nvar getContext = _util.getContext;\nvar extend = _util.extend;\nvar retrieve2 = _util.retrieve2;\nvar retrieve3 = _util.retrieve3;\nvar trim = _util.trim;\nvar textWidthCache = {};\nvar textWidthCacheCounter = 0;\nvar TEXT_CACHE_MAX = 5000;\nvar STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\nvar DEFAULT_FONT = '12px sans-serif'; // Avoid assign to an exported variable, for transforming to cjs.\n\nvar methods = {};\n\nfunction $override(name, fn) {\n methods[name] = fn;\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {number} width\n */\n\n\nfunction getWidth(text, font) {\n font = font || DEFAULT_FONT;\n var key = text + ':' + font;\n\n if (textWidthCache[key]) {\n return textWidthCache[key];\n }\n\n var textLines = (text + '').split('\\n');\n var width = 0;\n\n for (var i = 0, l = textLines.length; i < l; i++) {\n // textContain.measureText may be overrided in SVG or VML\n width = Math.max(measureText(textLines[i], font).width, width);\n }\n\n if (textWidthCacheCounter > TEXT_CACHE_MAX) {\n textWidthCacheCounter = 0;\n textWidthCache = {};\n }\n\n textWidthCacheCounter++;\n textWidthCache[key] = width;\n return width;\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {string} [textAlign='left']\n * @param {string} [textVerticalAlign='top']\n * @param {Array.} [textPadding]\n * @param {Object} [rich]\n * @param {Object} [truncate]\n * @return {Object} {x, y, width, height, lineHeight}\n */\n\n\nfunction getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) {\n return rich ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) : getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, truncate);\n}\n\nfunction getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, truncate) {\n var contentBlock = parsePlainText(text, font, textPadding, textLineHeight, truncate);\n var outerWidth = getWidth(text, font);\n\n if (textPadding) {\n outerWidth += textPadding[1] + textPadding[3];\n }\n\n var outerHeight = contentBlock.outerHeight;\n var x = adjustTextX(0, outerWidth, textAlign);\n var y = adjustTextY(0, outerHeight, textVerticalAlign);\n var rect = new BoundingRect(x, y, outerWidth, outerHeight);\n rect.lineHeight = contentBlock.lineHeight;\n return rect;\n}\n\nfunction getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) {\n var contentBlock = parseRichText(text, {\n rich: rich,\n truncate: truncate,\n font: font,\n textAlign: textAlign,\n textPadding: textPadding,\n textLineHeight: textLineHeight\n });\n var outerWidth = contentBlock.outerWidth;\n var outerHeight = contentBlock.outerHeight;\n var x = adjustTextX(0, outerWidth, textAlign);\n var y = adjustTextY(0, outerHeight, textVerticalAlign);\n return new BoundingRect(x, y, outerWidth, outerHeight);\n}\n/**\n * @public\n * @param {number} x\n * @param {number} width\n * @param {string} [textAlign='left']\n * @return {number} Adjusted x.\n */\n\n\nfunction adjustTextX(x, width, textAlign) {\n // FIXME Right to left language\n if (textAlign === 'right') {\n x -= width;\n } else if (textAlign === 'center') {\n x -= width / 2;\n }\n\n return x;\n}\n/**\n * @public\n * @param {number} y\n * @param {number} height\n * @param {string} [textVerticalAlign='top']\n * @return {number} Adjusted y.\n */\n\n\nfunction adjustTextY(y, height, textVerticalAlign) {\n if (textVerticalAlign === 'middle') {\n y -= height / 2;\n } else if (textVerticalAlign === 'bottom') {\n y -= height;\n }\n\n return y;\n}\n/**\n * Follow same interface to `Displayable.prototype.calculateTextPosition`.\n * @public\n * @param {Obejct} [out] Prepared out object. If not input, auto created in the method.\n * @param {module:zrender/graphic/Style} style where `textPosition` and `textDistance` are visited.\n * @param {Object} rect {x, y, width, height} Rect of the host elment, according to which the text positioned.\n * @return {Object} The input `out`. Set: {x, y, textAlign, textVerticalAlign}\n */\n\n\nfunction calculateTextPosition(out, style, rect) {\n var textPosition = style.textPosition;\n var distance = style.textDistance;\n var x = rect.x;\n var y = rect.y;\n distance = distance || 0;\n var height = rect.height;\n var width = rect.width;\n var halfHeight = height / 2;\n var textAlign = 'left';\n var textVerticalAlign = 'top';\n\n switch (textPosition) {\n case 'left':\n x -= distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n case 'right':\n x += distance + width;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n\n case 'top':\n x += width / 2;\n y -= distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'bottom':\n x += width / 2;\n y += height + distance;\n textAlign = 'center';\n break;\n\n case 'inside':\n x += width / 2;\n y += halfHeight;\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideLeft':\n x += distance;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n\n case 'insideRight':\n x += width - distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n\n case 'insideTop':\n x += width / 2;\n y += distance;\n textAlign = 'center';\n break;\n\n case 'insideBottom':\n x += width / 2;\n y += height - distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideTopLeft':\n x += distance;\n y += distance;\n break;\n\n case 'insideTopRight':\n x += width - distance;\n y += distance;\n textAlign = 'right';\n break;\n\n case 'insideBottomLeft':\n x += distance;\n y += height - distance;\n textVerticalAlign = 'bottom';\n break;\n\n case 'insideBottomRight':\n x += width - distance;\n y += height - distance;\n textAlign = 'right';\n textVerticalAlign = 'bottom';\n break;\n }\n\n out = out || {};\n out.x = x;\n out.y = y;\n out.textAlign = textAlign;\n out.textVerticalAlign = textVerticalAlign;\n return out;\n}\n/**\n * To be removed. But still do not remove in case that some one has imported it.\n * @deprecated\n * @public\n * @param {stirng} textPosition\n * @param {Object} rect {x, y, width, height}\n * @param {number} distance\n * @return {Object} {x, y, textAlign, textVerticalAlign}\n */\n\n\nfunction adjustTextPositionOnRect(textPosition, rect, distance) {\n var dummyStyle = {\n textPosition: textPosition,\n textDistance: distance\n };\n return calculateTextPosition({}, dummyStyle, rect);\n}\n/**\n * Show ellipsis if overflow.\n *\n * @public\n * @param {string} text\n * @param {string} containerWidth\n * @param {string} font\n * @param {number} [ellipsis='...']\n * @param {Object} [options]\n * @param {number} [options.maxIterations=3]\n * @param {number} [options.minChar=0] If truncate result are less\n * then minChar, ellipsis will not show, which is\n * better for user hint in some cases.\n * @param {number} [options.placeholder=''] When all truncated, use the placeholder.\n * @return {string}\n */\n\n\nfunction truncateText(text, containerWidth, font, ellipsis, options) {\n if (!containerWidth) {\n return '';\n }\n\n var textLines = (text + '').split('\\n');\n options = prepareTruncateOptions(containerWidth, font, ellipsis, options); // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n\n for (var i = 0, len = textLines.length; i < len; i++) {\n textLines[i] = truncateSingleLine(textLines[i], options);\n }\n\n return textLines.join('\\n');\n}\n\nfunction prepareTruncateOptions(containerWidth, font, ellipsis, options) {\n options = extend({}, options);\n options.font = font;\n var ellipsis = retrieve2(ellipsis, '...');\n options.maxIterations = retrieve2(options.maxIterations, 2);\n var minChar = options.minChar = retrieve2(options.minChar, 0); // FIXME\n // Other languages?\n\n options.cnCharWidth = getWidth('国', font); // FIXME\n // Consider proportional font?\n\n var ascCharWidth = options.ascCharWidth = getWidth('a', font);\n options.placeholder = retrieve2(options.placeholder, ''); // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.\n // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.\n\n var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n\n for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n contentWidth -= ascCharWidth;\n }\n\n var ellipsisWidth = getWidth(ellipsis, font);\n\n if (ellipsisWidth > contentWidth) {\n ellipsis = '';\n ellipsisWidth = 0;\n }\n\n contentWidth = containerWidth - ellipsisWidth;\n options.ellipsis = ellipsis;\n options.ellipsisWidth = ellipsisWidth;\n options.contentWidth = contentWidth;\n options.containerWidth = containerWidth;\n return options;\n}\n\nfunction truncateSingleLine(textLine, options) {\n var containerWidth = options.containerWidth;\n var font = options.font;\n var contentWidth = options.contentWidth;\n\n if (!containerWidth) {\n return '';\n }\n\n var lineWidth = getWidth(textLine, font);\n\n if (lineWidth <= containerWidth) {\n return textLine;\n }\n\n for (var j = 0;; j++) {\n if (lineWidth <= contentWidth || j >= options.maxIterations) {\n textLine += options.ellipsis;\n break;\n }\n\n var subLength = j === 0 ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth) : lineWidth > 0 ? Math.floor(textLine.length * contentWidth / lineWidth) : 0;\n textLine = textLine.substr(0, subLength);\n lineWidth = getWidth(textLine, font);\n }\n\n if (textLine === '') {\n textLine = options.placeholder;\n }\n\n return textLine;\n}\n\nfunction estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) {\n var width = 0;\n var i = 0;\n\n for (var len = text.length; i < len && width < contentWidth; i++) {\n var charCode = text.charCodeAt(i);\n width += 0 <= charCode && charCode <= 127 ? ascCharWidth : cnCharWidth;\n }\n\n return i;\n}\n/**\n * @public\n * @param {string} font\n * @return {number} line height\n */\n\n\nfunction getLineHeight(font) {\n // FIXME A rough approach.\n return getWidth('国', font);\n}\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {Object} width\n */\n\n\nfunction measureText(text, font) {\n return methods.measureText(text, font);\n} // Avoid assign to an exported variable, for transforming to cjs.\n\n\nmethods.measureText = function (text, font) {\n var ctx = getContext();\n ctx.font = font || DEFAULT_FONT;\n return ctx.measureText(text);\n};\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {Object} [truncate]\n * @return {Object} block: {lineHeight, lines, height, outerHeight, canCacheByTextString}\n * Notice: for performance, do not calculate outerWidth util needed.\n * `canCacheByTextString` means the result `lines` is only determined by the input `text`.\n * Thus we can simply comparing the `input` text to determin whether the result changed,\n * without travel the result `lines`.\n */\n\n\nfunction parsePlainText(text, font, padding, textLineHeight, truncate) {\n text != null && (text += '');\n var lineHeight = retrieve2(textLineHeight, getLineHeight(font));\n var lines = text ? text.split('\\n') : [];\n var height = lines.length * lineHeight;\n var outerHeight = height;\n var canCacheByTextString = true;\n\n if (padding) {\n outerHeight += padding[0] + padding[2];\n }\n\n if (text && truncate) {\n canCacheByTextString = false;\n var truncOuterHeight = truncate.outerHeight;\n var truncOuterWidth = truncate.outerWidth;\n\n if (truncOuterHeight != null && outerHeight > truncOuterHeight) {\n text = '';\n lines = [];\n } else if (truncOuterWidth != null) {\n var options = prepareTruncateOptions(truncOuterWidth - (padding ? padding[1] + padding[3] : 0), font, truncate.ellipsis, {\n minChar: truncate.minChar,\n placeholder: truncate.placeholder\n }); // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n\n for (var i = 0, len = lines.length; i < len; i++) {\n lines[i] = truncateSingleLine(lines[i], options);\n }\n }\n }\n\n return {\n lines: lines,\n height: height,\n outerHeight: outerHeight,\n lineHeight: lineHeight,\n canCacheByTextString: canCacheByTextString\n };\n}\n/**\n * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx'\n * Also consider 'bbbb{a|xxx\\nzzz}xxxx\\naaaa'.\n *\n * @public\n * @param {string} text\n * @param {Object} style\n * @return {Object} block\n * {\n * width,\n * height,\n * lines: [{\n * lineHeight,\n * width,\n * tokens: [[{\n * styleName,\n * text,\n * width, // include textPadding\n * height, // include textPadding\n * textWidth, // pure text width\n * textHeight, // pure text height\n * lineHeihgt,\n * font,\n * textAlign,\n * textVerticalAlign\n * }], [...], ...]\n * }, ...]\n * }\n * If styleName is undefined, it is plain text.\n */\n\n\nfunction parseRichText(text, style) {\n var contentBlock = {\n lines: [],\n width: 0,\n height: 0\n };\n text != null && (text += '');\n\n if (!text) {\n return contentBlock;\n }\n\n var lastIndex = STYLE_REG.lastIndex = 0;\n var result;\n\n while ((result = STYLE_REG.exec(text)) != null) {\n var matchedIndex = result.index;\n\n if (matchedIndex > lastIndex) {\n pushTokens(contentBlock, text.substring(lastIndex, matchedIndex));\n }\n\n pushTokens(contentBlock, result[2], result[1]);\n lastIndex = STYLE_REG.lastIndex;\n }\n\n if (lastIndex < text.length) {\n pushTokens(contentBlock, text.substring(lastIndex, text.length));\n }\n\n var lines = contentBlock.lines;\n var contentHeight = 0;\n var contentWidth = 0; // For `textWidth: 100%`\n\n var pendingList = [];\n var stlPadding = style.textPadding;\n var truncate = style.truncate;\n var truncateWidth = truncate && truncate.outerWidth;\n var truncateHeight = truncate && truncate.outerHeight;\n\n if (stlPadding) {\n truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]);\n truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]);\n } // Calculate layout info of tokens.\n\n\n for (var i = 0; i < lines.length; i++) {\n var line = lines[i];\n var lineHeight = 0;\n var lineWidth = 0;\n\n for (var j = 0; j < line.tokens.length; j++) {\n var token = line.tokens[j];\n var tokenStyle = token.styleName && style.rich[token.styleName] || {}; // textPadding should not inherit from style.\n\n var textPadding = token.textPadding = tokenStyle.textPadding; // textFont has been asigned to font by `normalizeStyle`.\n\n var font = token.font = tokenStyle.font || style.font; // textHeight can be used when textVerticalAlign is specified in token.\n\n var tokenHeight = token.textHeight = retrieve2( // textHeight should not be inherited, consider it can be specified\n // as box height of the block.\n tokenStyle.textHeight, getLineHeight(font));\n textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n token.height = tokenHeight;\n token.lineHeight = retrieve3(tokenStyle.textLineHeight, style.textLineHeight, tokenHeight);\n token.textAlign = tokenStyle && tokenStyle.textAlign || style.textAlign;\n token.textVerticalAlign = tokenStyle && tokenStyle.textVerticalAlign || 'middle';\n\n if (truncateHeight != null && contentHeight + token.lineHeight > truncateHeight) {\n return {\n lines: [],\n width: 0,\n height: 0\n };\n }\n\n token.textWidth = getWidth(token.text, font);\n var tokenWidth = tokenStyle.textWidth;\n var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === 'auto'; // Percent width, can be `100%`, can be used in drawing separate\n // line when box width is needed to be auto.\n\n if (typeof tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') {\n token.percentWidth = tokenWidth;\n pendingList.push(token);\n tokenWidth = 0; // Do not truncate in this case, because there is no user case\n // and it is too complicated.\n } else {\n if (tokenWidthNotSpecified) {\n tokenWidth = token.textWidth; // FIXME: If image is not loaded and textWidth is not specified, calling\n // `getBoundingRect()` will not get correct result.\n\n var textBackgroundColor = tokenStyle.textBackgroundColor;\n var bgImg = textBackgroundColor && textBackgroundColor.image; // Use cases:\n // (1) If image is not loaded, it will be loaded at render phase and call\n // `dirty()` and `textBackgroundColor.image` will be replaced with the loaded\n // image, and then the right size will be calculated here at the next tick.\n // See `graphic/helper/text.js`.\n // (2) If image loaded, and `textBackgroundColor.image` is image src string,\n // use `imageHelper.findExistImage` to find cached image.\n // `imageHelper.findExistImage` will always be called here before\n // `imageHelper.createOrUpdateImage` in `graphic/helper/text.js#renderRichText`\n // which ensures that image will not be rendered before correct size calcualted.\n\n if (bgImg) {\n bgImg = imageHelper.findExistImage(bgImg);\n\n if (imageHelper.isImageReady(bgImg)) {\n tokenWidth = Math.max(tokenWidth, bgImg.width * tokenHeight / bgImg.height);\n }\n }\n }\n\n var paddingW = textPadding ? textPadding[1] + textPadding[3] : 0;\n tokenWidth += paddingW;\n var remianTruncWidth = truncateWidth != null ? truncateWidth - lineWidth : null;\n\n if (remianTruncWidth != null && remianTruncWidth < tokenWidth) {\n if (!tokenWidthNotSpecified || remianTruncWidth < paddingW) {\n token.text = '';\n token.textWidth = tokenWidth = 0;\n } else {\n token.text = truncateText(token.text, remianTruncWidth - paddingW, font, truncate.ellipsis, {\n minChar: truncate.minChar\n });\n token.textWidth = getWidth(token.text, font);\n tokenWidth = token.textWidth + paddingW;\n }\n }\n }\n\n lineWidth += token.width = tokenWidth;\n tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n }\n\n line.width = lineWidth;\n line.lineHeight = lineHeight;\n contentHeight += lineHeight;\n contentWidth = Math.max(contentWidth, lineWidth);\n }\n\n contentBlock.outerWidth = contentBlock.width = retrieve2(style.textWidth, contentWidth);\n contentBlock.outerHeight = contentBlock.height = retrieve2(style.textHeight, contentHeight);\n\n if (stlPadding) {\n contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n }\n\n for (var i = 0; i < pendingList.length; i++) {\n var token = pendingList[i];\n var percentWidth = token.percentWidth; // Should not base on outerWidth, because token can not be placed out of padding.\n\n token.width = parseInt(percentWidth, 10) / 100 * contentWidth;\n }\n\n return contentBlock;\n}\n\nfunction pushTokens(block, str, styleName) {\n var isEmptyStr = str === '';\n var strs = str.split('\\n');\n var lines = block.lines;\n\n for (var i = 0; i < strs.length; i++) {\n var text = strs[i];\n var token = {\n styleName: styleName,\n text: text,\n isLineHolder: !text && !isEmptyStr\n }; // The first token should be appended to the last line.\n\n if (!i) {\n var tokens = (lines[lines.length - 1] || (lines[0] = {\n tokens: []\n })).tokens; // Consider cases:\n // (1) ''.split('\\n') => ['', '\\n', ''], the '' at the first item\n // (which is a placeholder) should be replaced by new token.\n // (2) A image backage, where token likes {a|}.\n // (3) A redundant '' will affect textAlign in line.\n // (4) tokens with the same tplName should not be merged, because\n // they should be displayed in different box (with border and padding).\n\n var tokensLen = tokens.length;\n tokensLen === 1 && tokens[0].isLineHolder ? tokens[0] = token : // Consider text is '', only insert when it is the \"lineHolder\" or\n // \"emptyStr\". Otherwise a redundant '' will affect textAlign in line.\n (text || !tokensLen || isEmptyStr) && tokens.push(token);\n } // Other tokens always start a new line.\n else {\n // If there is '', insert it as a placeholder.\n lines.push({\n tokens: [token]\n });\n }\n }\n}\n\nfunction makeFont(style) {\n // FIXME in node-canvas fontWeight is before fontStyle\n // Use `fontSize` `fontFamily` to check whether font properties are defined.\n var font = (style.fontSize || style.fontFamily) && [style.fontStyle, style.fontWeight, (style.fontSize || 12) + 'px', // If font properties are defined, `fontFamily` should not be ignored.\n style.fontFamily || 'sans-serif'].join(' ');\n return font && trim(font) || style.textFont || style.font;\n}\n\nexports.DEFAULT_FONT = DEFAULT_FONT;\nexports.$override = $override;\nexports.getWidth = getWidth;\nexports.getBoundingRect = getBoundingRect;\nexports.adjustTextX = adjustTextX;\nexports.adjustTextY = adjustTextY;\nexports.calculateTextPosition = calculateTextPosition;\nexports.adjustTextPositionOnRect = adjustTextPositionOnRect;\nexports.truncateText = truncateText;\nexports.getLineHeight = getLineHeight;\nexports.measureText = measureText;\nexports.parsePlainText = parsePlainText;\nexports.parseRichText = parseRichText;\nexports.makeFont = makeFont;","var PI2 = Math.PI * 2;\n\nfunction normalizeRadian(angle) {\n angle %= PI2;\n\n if (angle < 0) {\n angle += PI2;\n }\n\n return angle;\n}\n\nexports.normalizeRadian = normalizeRadian;","function windingLine(x0, y0, x1, y1, x, y) {\n if (y > y0 && y > y1 || y < y0 && y < y1) {\n return 0;\n } // Ignore horizontal line\n\n\n if (y1 === y0) {\n return 0;\n }\n\n var dir = y1 < y0 ? 1 : -1;\n var t = (y - y0) / (y1 - y0); // Avoid winding error when intersection point is the connect point of two line of polygon\n\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n\n var x_ = t * (x1 - x0) + x0; // If (x, y) on the line, considered as \"contain\".\n\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}\n\nmodule.exports = windingLine;","var zrUtil = require(\"../core/util\");\n\nvar Element = require(\"../Element\");\n\nvar BoundingRect = require(\"../core/BoundingRect\");\n\n/**\n * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上\n * @module zrender/graphic/Group\n * @example\n * var Group = require('zrender/container/Group');\n * var Circle = require('zrender/graphic/shape/Circle');\n * var g = new Group();\n * g.position[0] = 100;\n * g.position[1] = 100;\n * g.add(new Circle({\n * style: {\n * x: 100,\n * y: 100,\n * r: 20,\n * }\n * }));\n * zr.add(g);\n */\n\n/**\n * @alias module:zrender/graphic/Group\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @extends module:zrender/mixin/Eventful\n */\nvar Group = function (opts) {\n opts = opts || {};\n Element.call(this, opts);\n\n for (var key in opts) {\n if (opts.hasOwnProperty(key)) {\n this[key] = opts[key];\n }\n }\n\n this._children = [];\n this.__storage = null;\n this.__dirty = true;\n};\n\nGroup.prototype = {\n constructor: Group,\n isGroup: true,\n\n /**\n * @type {string}\n */\n type: 'group',\n\n /**\n * 所有子孙元素是否响应鼠标事件\n * @name module:/zrender/container/Group#silent\n * @type {boolean}\n * @default false\n */\n silent: false,\n\n /**\n * @return {Array.}\n */\n children: function () {\n return this._children.slice();\n },\n\n /**\n * 获取指定 index 的儿子节点\n * @param {number} idx\n * @return {module:zrender/Element}\n */\n childAt: function (idx) {\n return this._children[idx];\n },\n\n /**\n * 获取指定名字的儿子节点\n * @param {string} name\n * @return {module:zrender/Element}\n */\n childOfName: function (name) {\n var children = this._children;\n\n for (var i = 0; i < children.length; i++) {\n if (children[i].name === name) {\n return children[i];\n }\n }\n },\n\n /**\n * @return {number}\n */\n childCount: function () {\n return this._children.length;\n },\n\n /**\n * 添加子节点到最后\n * @param {module:zrender/Element} child\n */\n add: function (child) {\n if (child && child !== this && child.parent !== this) {\n this._children.push(child);\n\n this._doAdd(child);\n }\n\n return this;\n },\n\n /**\n * 添加子节点在 nextSibling 之前\n * @param {module:zrender/Element} child\n * @param {module:zrender/Element} nextSibling\n */\n addBefore: function (child, nextSibling) {\n if (child && child !== this && child.parent !== this && nextSibling && nextSibling.parent === this) {\n var children = this._children;\n var idx = children.indexOf(nextSibling);\n\n if (idx >= 0) {\n children.splice(idx, 0, child);\n\n this._doAdd(child);\n }\n }\n\n return this;\n },\n _doAdd: function (child) {\n if (child.parent) {\n child.parent.remove(child);\n }\n\n child.parent = this;\n var storage = this.__storage;\n var zr = this.__zr;\n\n if (storage && storage !== child.__storage) {\n storage.addToStorage(child);\n\n if (child instanceof Group) {\n child.addChildrenToStorage(storage);\n }\n }\n\n zr && zr.refresh();\n },\n\n /**\n * 移除子节点\n * @param {module:zrender/Element} child\n */\n remove: function (child) {\n var zr = this.__zr;\n var storage = this.__storage;\n var children = this._children;\n var idx = zrUtil.indexOf(children, child);\n\n if (idx < 0) {\n return this;\n }\n\n children.splice(idx, 1);\n child.parent = null;\n\n if (storage) {\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n\n zr && zr.refresh();\n return this;\n },\n\n /**\n * 移除所有子节点\n */\n removeAll: function () {\n var children = this._children;\n var storage = this.__storage;\n var child;\n var i;\n\n for (i = 0; i < children.length; i++) {\n child = children[i];\n\n if (storage) {\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n\n child.parent = null;\n }\n\n children.length = 0;\n return this;\n },\n\n /**\n * 遍历所有子节点\n * @param {Function} cb\n * @param {} context\n */\n eachChild: function (cb, context) {\n var children = this._children;\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n cb.call(context, child, i);\n }\n\n return this;\n },\n\n /**\n * 深度优先遍历所有子孙节点\n * @param {Function} cb\n * @param {} context\n */\n traverse: function (cb, context) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n cb.call(context, child);\n\n if (child.type === 'group') {\n child.traverse(cb, context);\n }\n }\n\n return this;\n },\n addChildrenToStorage: function (storage) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n storage.addToStorage(child);\n\n if (child instanceof Group) {\n child.addChildrenToStorage(storage);\n }\n }\n },\n delChildrenFromStorage: function (storage) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n storage.delFromStorage(child);\n\n if (child instanceof Group) {\n child.delChildrenFromStorage(storage);\n }\n }\n },\n dirty: function () {\n this.__dirty = true;\n this.__zr && this.__zr.refresh();\n return this;\n },\n\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n getBoundingRect: function (includeChildren) {\n // TODO Caching\n var rect = null;\n var tmpRect = new BoundingRect(0, 0, 0, 0);\n var children = includeChildren || this._children;\n var tmpMat = [];\n\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n\n if (child.ignore || child.invisible) {\n continue;\n }\n\n var childRect = child.getBoundingRect();\n var transform = child.getLocalTransform(tmpMat); // TODO\n // The boundingRect cacluated by transforming original\n // rect may be bigger than the actual bundingRect when rotation\n // is used. (Consider a circle rotated aginst its center, where\n // the actual boundingRect should be the same as that not be\n // rotated.) But we can not find better approach to calculate\n // actual boundingRect yet, considering performance.\n\n if (transform) {\n tmpRect.copy(childRect);\n tmpRect.applyTransform(transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n } else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n\n return rect || tmpRect;\n }\n};\nzrUtil.inherits(Group, Element);\nvar _default = Group;\nmodule.exports = _default;","var vec2 = require(\"./vector\");\n\nvar matrix = require(\"./matrix\");\n\n/**\n * @module echarts/core/BoundingRect\n */\nvar v2ApplyTransform = vec2.applyTransform;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\n/**\n * @alias module:echarts/core/BoundingRect\n */\n\nfunction BoundingRect(x, y, width, height) {\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n /**\n * @type {number}\n */\n\n\n this.x = x;\n /**\n * @type {number}\n */\n\n this.y = y;\n /**\n * @type {number}\n */\n\n this.width = width;\n /**\n * @type {number}\n */\n\n this.height = height;\n}\n\nBoundingRect.prototype = {\n constructor: BoundingRect,\n\n /**\n * @param {module:echarts/core/BoundingRect} other\n */\n union: function (other) {\n var x = mathMin(other.x, this.x);\n var y = mathMin(other.y, this.y);\n this.width = mathMax(other.x + other.width, this.x + this.width) - x;\n this.height = mathMax(other.y + other.height, this.y + this.height) - y;\n this.x = x;\n this.y = y;\n },\n\n /**\n * @param {Array.} m\n * @methods\n */\n applyTransform: function () {\n var lt = [];\n var rb = [];\n var lb = [];\n var rt = [];\n return function (m) {\n // In case usage like this\n // el.getBoundingRect().applyTransform(el.transform)\n // And element has no transform\n if (!m) {\n return;\n }\n\n lt[0] = lb[0] = this.x;\n lt[1] = rt[1] = this.y;\n rb[0] = rt[0] = this.x + this.width;\n rb[1] = lb[1] = this.y + this.height;\n v2ApplyTransform(lt, lt, m);\n v2ApplyTransform(rb, rb, m);\n v2ApplyTransform(lb, lb, m);\n v2ApplyTransform(rt, rt, m);\n this.x = mathMin(lt[0], rb[0], lb[0], rt[0]);\n this.y = mathMin(lt[1], rb[1], lb[1], rt[1]);\n var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]);\n var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]);\n this.width = maxX - this.x;\n this.height = maxY - this.y;\n };\n }(),\n\n /**\n * Calculate matrix of transforming from self to target rect\n * @param {module:zrender/core/BoundingRect} b\n * @return {Array.}\n */\n calculateTransform: function (b) {\n var a = this;\n var sx = b.width / a.width;\n var sy = b.height / a.height;\n var m = matrix.create(); // 矩阵右乘\n\n matrix.translate(m, m, [-a.x, -a.y]);\n matrix.scale(m, m, [sx, sy]);\n matrix.translate(m, m, [b.x, b.y]);\n return m;\n },\n\n /**\n * @param {(module:echarts/core/BoundingRect|Object)} b\n * @return {boolean}\n */\n intersect: function (b) {\n if (!b) {\n return false;\n }\n\n if (!(b instanceof BoundingRect)) {\n // Normalize negative width/height.\n b = BoundingRect.create(b);\n }\n\n var a = this;\n var ax0 = a.x;\n var ax1 = a.x + a.width;\n var ay0 = a.y;\n var ay1 = a.y + a.height;\n var bx0 = b.x;\n var bx1 = b.x + b.width;\n var by0 = b.y;\n var by1 = b.y + b.height;\n return !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n },\n contain: function (x, y) {\n var rect = this;\n return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;\n },\n\n /**\n * @return {module:echarts/core/BoundingRect}\n */\n clone: function () {\n return new BoundingRect(this.x, this.y, this.width, this.height);\n },\n\n /**\n * Copy from another rect\n */\n copy: function (other) {\n this.x = other.x;\n this.y = other.y;\n this.width = other.width;\n this.height = other.height;\n },\n plain: function () {\n return {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height\n };\n }\n};\n/**\n * @param {Object|module:zrender/core/BoundingRect} rect\n * @param {number} rect.x\n * @param {number} rect.y\n * @param {number} rect.width\n * @param {number} rect.height\n * @return {module:zrender/core/BoundingRect}\n */\n\nBoundingRect.create = function (rect) {\n return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n};\n\nvar _default = BoundingRect;\nmodule.exports = _default;","var eventUtil = require(\"./event\");\n\n/**\n * Only implements needed gestures for mobile.\n */\nvar GestureMgr = function () {\n /**\n * @private\n * @type {Array.}\n */\n this._track = [];\n};\n\nGestureMgr.prototype = {\n constructor: GestureMgr,\n recognize: function (event, target, root) {\n this._doTrack(event, target, root);\n\n return this._recognize(event);\n },\n clear: function () {\n this._track.length = 0;\n return this;\n },\n _doTrack: function (event, target, root) {\n var touches = event.touches;\n\n if (!touches) {\n return;\n }\n\n var trackItem = {\n points: [],\n touches: [],\n target: target,\n event: event\n };\n\n for (var i = 0, len = touches.length; i < len; i++) {\n var touch = touches[i];\n var pos = eventUtil.clientToLocal(root, touch, {});\n trackItem.points.push([pos.zrX, pos.zrY]);\n trackItem.touches.push(touch);\n }\n\n this._track.push(trackItem);\n },\n _recognize: function (event) {\n for (var eventName in recognizers) {\n if (recognizers.hasOwnProperty(eventName)) {\n var gestureInfo = recognizers[eventName](this._track, event);\n\n if (gestureInfo) {\n return gestureInfo;\n }\n }\n }\n }\n};\n\nfunction dist(pointPair) {\n var dx = pointPair[1][0] - pointPair[0][0];\n var dy = pointPair[1][1] - pointPair[0][1];\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction center(pointPair) {\n return [(pointPair[0][0] + pointPair[1][0]) / 2, (pointPair[0][1] + pointPair[1][1]) / 2];\n}\n\nvar recognizers = {\n pinch: function (track, event) {\n var trackLen = track.length;\n\n if (!trackLen) {\n return;\n }\n\n var pinchEnd = (track[trackLen - 1] || {}).points;\n var pinchPre = (track[trackLen - 2] || {}).points || pinchEnd;\n\n if (pinchPre && pinchPre.length > 1 && pinchEnd && pinchEnd.length > 1) {\n var pinchScale = dist(pinchEnd) / dist(pinchPre);\n !isFinite(pinchScale) && (pinchScale = 1);\n event.pinchScale = pinchScale;\n var pinchCenter = center(pinchEnd);\n event.pinchX = pinchCenter[0];\n event.pinchY = pinchCenter[1];\n return {\n type: 'pinch',\n target: track[0].target,\n event: event\n };\n }\n } // Only pinch currently.\n\n};\nvar _default = GestureMgr;\nmodule.exports = _default;","// Simple LRU cache use doubly linked list\n// @module zrender/core/LRU\n\n/**\n * Simple double linked list. Compared with array, it has O(1) remove operation.\n * @constructor\n */\nvar LinkedList = function () {\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n this.head = null;\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n\n this.tail = null;\n this._len = 0;\n};\n\nvar linkedListProto = LinkedList.prototype;\n/**\n * Insert a new value at the tail\n * @param {} val\n * @return {module:zrender/core/LRU~Entry}\n */\n\nlinkedListProto.insert = function (val) {\n var entry = new Entry(val);\n this.insertEntry(entry);\n return entry;\n};\n/**\n * Insert an entry at the tail\n * @param {module:zrender/core/LRU~Entry} entry\n */\n\n\nlinkedListProto.insertEntry = function (entry) {\n if (!this.head) {\n this.head = this.tail = entry;\n } else {\n this.tail.next = entry;\n entry.prev = this.tail;\n entry.next = null;\n this.tail = entry;\n }\n\n this._len++;\n};\n/**\n * Remove entry.\n * @param {module:zrender/core/LRU~Entry} entry\n */\n\n\nlinkedListProto.remove = function (entry) {\n var prev = entry.prev;\n var next = entry.next;\n\n if (prev) {\n prev.next = next;\n } else {\n // Is head\n this.head = next;\n }\n\n if (next) {\n next.prev = prev;\n } else {\n // Is tail\n this.tail = prev;\n }\n\n entry.next = entry.prev = null;\n this._len--;\n};\n/**\n * @return {number}\n */\n\n\nlinkedListProto.len = function () {\n return this._len;\n};\n/**\n * Clear list\n */\n\n\nlinkedListProto.clear = function () {\n this.head = this.tail = null;\n this._len = 0;\n};\n/**\n * @constructor\n * @param {} val\n */\n\n\nvar Entry = function (val) {\n /**\n * @type {}\n */\n this.value = val;\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n\n this.next;\n /**\n * @type {module:zrender/core/LRU~Entry}\n */\n\n this.prev;\n};\n/**\n * LRU Cache\n * @constructor\n * @alias module:zrender/core/LRU\n */\n\n\nvar LRU = function (maxSize) {\n this._list = new LinkedList();\n this._map = {};\n this._maxSize = maxSize || 10;\n this._lastRemovedEntry = null;\n};\n\nvar LRUProto = LRU.prototype;\n/**\n * @param {string} key\n * @param {} value\n * @return {} Removed value\n */\n\nLRUProto.put = function (key, value) {\n var list = this._list;\n var map = this._map;\n var removed = null;\n\n if (map[key] == null) {\n var len = list.len(); // Reuse last removed entry\n\n var entry = this._lastRemovedEntry;\n\n if (len >= this._maxSize && len > 0) {\n // Remove the least recently used\n var leastUsedEntry = list.head;\n list.remove(leastUsedEntry);\n delete map[leastUsedEntry.key];\n removed = leastUsedEntry.value;\n this._lastRemovedEntry = leastUsedEntry;\n }\n\n if (entry) {\n entry.value = value;\n } else {\n entry = new Entry(value);\n }\n\n entry.key = key;\n list.insertEntry(entry);\n map[key] = entry;\n }\n\n return removed;\n};\n/**\n * @param {string} key\n * @return {}\n */\n\n\nLRUProto.get = function (key) {\n var entry = this._map[key];\n var list = this._list;\n\n if (entry != null) {\n // Put the latest used entry in the tail\n if (entry !== list.tail) {\n list.remove(entry);\n list.insertEntry(entry);\n }\n\n return entry.value;\n }\n};\n/**\n * Clear the cache\n */\n\n\nLRUProto.clear = function () {\n this._list.clear();\n\n this._map = {};\n};\n\nvar _default = LRU;\nmodule.exports = _default;","var curve = require(\"./curve\");\n\nvar vec2 = require(\"./vector\");\n\nvar bbox = require(\"./bbox\");\n\nvar BoundingRect = require(\"./BoundingRect\");\n\nvar _config = require(\"../config\");\n\nvar dpr = _config.devicePixelRatio;\n\n/**\n * Path 代理,可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中\n * 可以用于 isInsidePath 判断以及获取boundingRect\n *\n * @module zrender/core/PathProxy\n * @author Yi Shen (http://www.github.com/pissang)\n */\n// TODO getTotalLength, getPointAtLength\n\n/* global Float32Array */\nvar CMD = {\n M: 1,\n L: 2,\n C: 3,\n Q: 4,\n A: 5,\n Z: 6,\n // Rect\n R: 7\n}; // var CMD_MEM_SIZE = {\n// M: 3,\n// L: 3,\n// C: 7,\n// Q: 5,\n// A: 9,\n// R: 5,\n// Z: 1\n// };\n\nvar min = [];\nvar max = [];\nvar min2 = [];\nvar max2 = [];\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathCos = Math.cos;\nvar mathSin = Math.sin;\nvar mathSqrt = Math.sqrt;\nvar mathAbs = Math.abs;\nvar hasTypedArray = typeof Float32Array !== 'undefined';\n/**\n * @alias module:zrender/core/PathProxy\n * @constructor\n */\n\nvar PathProxy = function (notSaveData) {\n this._saveData = !(notSaveData || false);\n\n if (this._saveData) {\n /**\n * Path data. Stored as flat array\n * @type {Array.}\n */\n this.data = [];\n }\n\n this._ctx = null;\n};\n/**\n * 快速计算Path包围盒(并不是最小包围盒)\n * @return {Object}\n */\n\n\nPathProxy.prototype = {\n constructor: PathProxy,\n _xi: 0,\n _yi: 0,\n _x0: 0,\n _y0: 0,\n // Unit x, Unit y. Provide for avoiding drawing that too short line segment\n _ux: 0,\n _uy: 0,\n _len: 0,\n _lineDash: null,\n _dashOffset: 0,\n _dashIdx: 0,\n _dashSum: 0,\n\n /**\n * @readOnly\n */\n setScale: function (sx, sy, segmentIgnoreThreshold) {\n // Compat. Previously there is no segmentIgnoreThreshold.\n segmentIgnoreThreshold = segmentIgnoreThreshold || 0;\n this._ux = mathAbs(segmentIgnoreThreshold / dpr / sx) || 0;\n this._uy = mathAbs(segmentIgnoreThreshold / dpr / sy) || 0;\n },\n getContext: function () {\n return this._ctx;\n },\n\n /**\n * @param {CanvasRenderingContext2D} ctx\n * @return {module:zrender/core/PathProxy}\n */\n beginPath: function (ctx) {\n this._ctx = ctx;\n ctx && ctx.beginPath();\n ctx && (this.dpr = ctx.dpr); // Reset\n\n if (this._saveData) {\n this._len = 0;\n }\n\n if (this._lineDash) {\n this._lineDash = null;\n this._dashOffset = 0;\n }\n\n return this;\n },\n\n /**\n * @param {number} x\n * @param {number} y\n * @return {module:zrender/core/PathProxy}\n */\n moveTo: function (x, y) {\n this.addData(CMD.M, x, y);\n this._ctx && this._ctx.moveTo(x, y); // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用\n // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。\n // 有可能在 beginPath 之后直接调用 lineTo,这时候 x0, y0 需要\n // 在 lineTo 方法中记录,这里先不考虑这种情况,dashed line 也只在 IE10- 中不支持\n\n this._x0 = x;\n this._y0 = y;\n this._xi = x;\n this._yi = y;\n return this;\n },\n\n /**\n * @param {number} x\n * @param {number} y\n * @return {module:zrender/core/PathProxy}\n */\n lineTo: function (x, y) {\n var exceedUnit = mathAbs(x - this._xi) > this._ux || mathAbs(y - this._yi) > this._uy // Force draw the first segment\n || this._len < 5;\n this.addData(CMD.L, x, y);\n\n if (this._ctx && exceedUnit) {\n this._needsDash() ? this._dashedLineTo(x, y) : this._ctx.lineTo(x, y);\n }\n\n if (exceedUnit) {\n this._xi = x;\n this._yi = y;\n }\n\n return this;\n },\n\n /**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @return {module:zrender/core/PathProxy}\n */\n bezierCurveTo: function (x1, y1, x2, y2, x3, y3) {\n this.addData(CMD.C, x1, y1, x2, y2, x3, y3);\n\n if (this._ctx) {\n this._needsDash() ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3) : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n\n this._xi = x3;\n this._yi = y3;\n return this;\n },\n\n /**\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @return {module:zrender/core/PathProxy}\n */\n quadraticCurveTo: function (x1, y1, x2, y2) {\n this.addData(CMD.Q, x1, y1, x2, y2);\n\n if (this._ctx) {\n this._needsDash() ? this._dashedQuadraticTo(x1, y1, x2, y2) : this._ctx.quadraticCurveTo(x1, y1, x2, y2);\n }\n\n this._xi = x2;\n this._yi = y2;\n return this;\n },\n\n /**\n * @param {number} cx\n * @param {number} cy\n * @param {number} r\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {boolean} anticlockwise\n * @return {module:zrender/core/PathProxy}\n */\n arc: function (cx, cy, r, startAngle, endAngle, anticlockwise) {\n this.addData(CMD.A, cx, cy, r, r, startAngle, endAngle - startAngle, 0, anticlockwise ? 0 : 1);\n this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n this._xi = mathCos(endAngle) * r + cx;\n this._yi = mathSin(endAngle) * r + cy;\n return this;\n },\n // TODO\n arcTo: function (x1, y1, x2, y2, radius) {\n if (this._ctx) {\n this._ctx.arcTo(x1, y1, x2, y2, radius);\n }\n\n return this;\n },\n // TODO\n rect: function (x, y, w, h) {\n this._ctx && this._ctx.rect(x, y, w, h);\n this.addData(CMD.R, x, y, w, h);\n return this;\n },\n\n /**\n * @return {module:zrender/core/PathProxy}\n */\n closePath: function () {\n this.addData(CMD.Z);\n var ctx = this._ctx;\n var x0 = this._x0;\n var y0 = this._y0;\n\n if (ctx) {\n this._needsDash() && this._dashedLineTo(x0, y0);\n ctx.closePath();\n }\n\n this._xi = x0;\n this._yi = y0;\n return this;\n },\n\n /**\n * Context 从外部传入,因为有可能是 rebuildPath 完之后再 fill。\n * stroke 同样\n * @param {CanvasRenderingContext2D} ctx\n * @return {module:zrender/core/PathProxy}\n */\n fill: function (ctx) {\n ctx && ctx.fill();\n this.toStatic();\n },\n\n /**\n * @param {CanvasRenderingContext2D} ctx\n * @return {module:zrender/core/PathProxy}\n */\n stroke: function (ctx) {\n ctx && ctx.stroke();\n this.toStatic();\n },\n\n /**\n * 必须在其它绘制命令前调用\n * Must be invoked before all other path drawing methods\n * @return {module:zrender/core/PathProxy}\n */\n setLineDash: function (lineDash) {\n if (lineDash instanceof Array) {\n this._lineDash = lineDash;\n this._dashIdx = 0;\n var lineDashSum = 0;\n\n for (var i = 0; i < lineDash.length; i++) {\n lineDashSum += lineDash[i];\n }\n\n this._dashSum = lineDashSum;\n }\n\n return this;\n },\n\n /**\n * 必须在其它绘制命令前调用\n * Must be invoked before all other path drawing methods\n * @return {module:zrender/core/PathProxy}\n */\n setLineDashOffset: function (offset) {\n this._dashOffset = offset;\n return this;\n },\n\n /**\n *\n * @return {boolean}\n */\n len: function () {\n return this._len;\n },\n\n /**\n * 直接设置 Path 数据\n */\n setData: function (data) {\n var len = data.length;\n\n if (!(this.data && this.data.length === len) && hasTypedArray) {\n this.data = new Float32Array(len);\n }\n\n for (var i = 0; i < len; i++) {\n this.data[i] = data[i];\n }\n\n this._len = len;\n },\n\n /**\n * 添加子路径\n * @param {module:zrender/core/PathProxy|Array.} path\n */\n appendPath: function (path) {\n if (!(path instanceof Array)) {\n path = [path];\n }\n\n var len = path.length;\n var appendSize = 0;\n var offset = this._len;\n\n for (var i = 0; i < len; i++) {\n appendSize += path[i].len();\n }\n\n if (hasTypedArray && this.data instanceof Float32Array) {\n this.data = new Float32Array(offset + appendSize);\n }\n\n for (var i = 0; i < len; i++) {\n var appendPathData = path[i].data;\n\n for (var k = 0; k < appendPathData.length; k++) {\n this.data[offset++] = appendPathData[k];\n }\n }\n\n this._len = offset;\n },\n\n /**\n * 填充 Path 数据。\n * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。\n */\n addData: function (cmd) {\n if (!this._saveData) {\n return;\n }\n\n var data = this.data;\n\n if (this._len + arguments.length > data.length) {\n // 因为之前的数组已经转换成静态的 Float32Array\n // 所以不够用时需要扩展一个新的动态数组\n this._expandData();\n\n data = this.data;\n }\n\n for (var i = 0; i < arguments.length; i++) {\n data[this._len++] = arguments[i];\n }\n\n this._prevCmd = cmd;\n },\n _expandData: function () {\n // Only if data is Float32Array\n if (!(this.data instanceof Array)) {\n var newData = [];\n\n for (var i = 0; i < this._len; i++) {\n newData[i] = this.data[i];\n }\n\n this.data = newData;\n }\n },\n\n /**\n * If needs js implemented dashed line\n * @return {boolean}\n * @private\n */\n _needsDash: function () {\n return this._lineDash;\n },\n _dashedLineTo: function (x1, y1) {\n var dashSum = this._dashSum;\n var offset = this._dashOffset;\n var lineDash = this._lineDash;\n var ctx = this._ctx;\n var x0 = this._xi;\n var y0 = this._yi;\n var dx = x1 - x0;\n var dy = y1 - y0;\n var dist = mathSqrt(dx * dx + dy * dy);\n var x = x0;\n var y = y0;\n var dash;\n var nDash = lineDash.length;\n var idx;\n dx /= dist;\n dy /= dist;\n\n if (offset < 0) {\n // Convert to positive offset\n offset = dashSum + offset;\n }\n\n offset %= dashSum;\n x -= offset * dx;\n y -= offset * dy;\n\n while (dx > 0 && x <= x1 || dx < 0 && x >= x1 || dx === 0 && (dy > 0 && y <= y1 || dy < 0 && y >= y1)) {\n idx = this._dashIdx;\n dash = lineDash[idx];\n x += dx * dash;\n y += dy * dash;\n this._dashIdx = (idx + 1) % nDash; // Skip positive offset\n\n if (dx > 0 && x < x0 || dx < 0 && x > x0 || dy > 0 && y < y0 || dy < 0 && y > y0) {\n continue;\n }\n\n ctx[idx % 2 ? 'moveTo' : 'lineTo'](dx >= 0 ? mathMin(x, x1) : mathMax(x, x1), dy >= 0 ? mathMin(y, y1) : mathMax(y, y1));\n } // Offset for next lineTo\n\n\n dx = x - x1;\n dy = y - y1;\n this._dashOffset = -mathSqrt(dx * dx + dy * dy);\n },\n // Not accurate dashed line to\n _dashedBezierTo: function (x1, y1, x2, y2, x3, y3) {\n var dashSum = this._dashSum;\n var offset = this._dashOffset;\n var lineDash = this._lineDash;\n var ctx = this._ctx;\n var x0 = this._xi;\n var y0 = this._yi;\n var t;\n var dx;\n var dy;\n var cubicAt = curve.cubicAt;\n var bezierLen = 0;\n var idx = this._dashIdx;\n var nDash = lineDash.length;\n var x;\n var y;\n var tmpLen = 0;\n\n if (offset < 0) {\n // Convert to positive offset\n offset = dashSum + offset;\n }\n\n offset %= dashSum; // Bezier approx length\n\n for (t = 0; t < 1; t += 0.1) {\n dx = cubicAt(x0, x1, x2, x3, t + 0.1) - cubicAt(x0, x1, x2, x3, t);\n dy = cubicAt(y0, y1, y2, y3, t + 0.1) - cubicAt(y0, y1, y2, y3, t);\n bezierLen += mathSqrt(dx * dx + dy * dy);\n } // Find idx after add offset\n\n\n for (; idx < nDash; idx++) {\n tmpLen += lineDash[idx];\n\n if (tmpLen > offset) {\n break;\n }\n }\n\n t = (tmpLen - offset) / bezierLen;\n\n while (t <= 1) {\n x = cubicAt(x0, x1, x2, x3, t);\n y = cubicAt(y0, y1, y2, y3, t); // Use line to approximate dashed bezier\n // Bad result if dash is long\n\n idx % 2 ? ctx.moveTo(x, y) : ctx.lineTo(x, y);\n t += lineDash[idx] / bezierLen;\n idx = (idx + 1) % nDash;\n } // Finish the last segment and calculate the new offset\n\n\n idx % 2 !== 0 && ctx.lineTo(x3, y3);\n dx = x3 - x;\n dy = y3 - y;\n this._dashOffset = -mathSqrt(dx * dx + dy * dy);\n },\n _dashedQuadraticTo: function (x1, y1, x2, y2) {\n // Convert quadratic to cubic using degree elevation\n var x3 = x2;\n var y3 = y2;\n x2 = (x2 + 2 * x1) / 3;\n y2 = (y2 + 2 * y1) / 3;\n x1 = (this._xi + 2 * x1) / 3;\n y1 = (this._yi + 2 * y1) / 3;\n\n this._dashedBezierTo(x1, y1, x2, y2, x3, y3);\n },\n\n /**\n * 转成静态的 Float32Array 减少堆内存占用\n * Convert dynamic array to static Float32Array\n */\n toStatic: function () {\n var data = this.data;\n\n if (data instanceof Array) {\n data.length = this._len;\n\n if (hasTypedArray) {\n this.data = new Float32Array(data);\n }\n }\n },\n\n /**\n * @return {module:zrender/core/BoundingRect}\n */\n getBoundingRect: function () {\n min[0] = min[1] = min2[0] = min2[1] = Number.MAX_VALUE;\n max[0] = max[1] = max2[0] = max2[1] = -Number.MAX_VALUE;\n var data = this.data;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n\n for (var i = 0; i < data.length;) {\n var cmd = data[i++];\n\n if (i === 1) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n min2[0] = x0;\n min2[1] = y0;\n max2[0] = x0;\n max2[1] = y0;\n break;\n\n case CMD.L:\n bbox.fromLine(xi, yi, data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.C:\n bbox.fromCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.Q:\n bbox.fromQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var startAngle = data[i++];\n var endAngle = data[i++] + startAngle; // TODO Arc 旋转\n\n i += 1;\n var anticlockwise = 1 - data[i++];\n\n if (i === 1) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n\n bbox.fromArc(cx, cy, rx, ry, startAngle, endAngle, anticlockwise, min2, max2);\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++]; // Use fromLine\n\n bbox.fromLine(x0, y0, x0 + width, y0 + height, min2, max2);\n break;\n\n case CMD.Z:\n xi = x0;\n yi = y0;\n break;\n } // Union\n\n\n vec2.min(min, min, min2);\n vec2.max(max, max, max2);\n } // No data\n\n\n if (i === 0) {\n min[0] = min[1] = max[0] = max[1] = 0;\n }\n\n return new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n },\n\n /**\n * Rebuild path from current data\n * Rebuild path will not consider javascript implemented line dash.\n * @param {CanvasRenderingContext2D} ctx\n */\n rebuildPath: function (ctx) {\n var d = this.data;\n var x0;\n var y0;\n var xi;\n var yi;\n var x;\n var y;\n var ux = this._ux;\n var uy = this._uy;\n var len = this._len;\n\n for (var i = 0; i < len;) {\n var cmd = d[i++];\n\n if (i === 1) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = d[i];\n yi = d[i + 1];\n x0 = xi;\n y0 = yi;\n }\n\n switch (cmd) {\n case CMD.M:\n x0 = xi = d[i++];\n y0 = yi = d[i++];\n ctx.moveTo(xi, yi);\n break;\n\n case CMD.L:\n x = d[i++];\n y = d[i++]; // Not draw too small seg between\n\n if (mathAbs(x - xi) > ux || mathAbs(y - yi) > uy || i === len - 1) {\n ctx.lineTo(x, y);\n xi = x;\n yi = y;\n }\n\n break;\n\n case CMD.C:\n ctx.bezierCurveTo(d[i++], d[i++], d[i++], d[i++], d[i++], d[i++]);\n xi = d[i - 2];\n yi = d[i - 1];\n break;\n\n case CMD.Q:\n ctx.quadraticCurveTo(d[i++], d[i++], d[i++], d[i++]);\n xi = d[i - 2];\n yi = d[i - 1];\n break;\n\n case CMD.A:\n var cx = d[i++];\n var cy = d[i++];\n var rx = d[i++];\n var ry = d[i++];\n var theta = d[i++];\n var dTheta = d[i++];\n var psi = d[i++];\n var fs = d[i++];\n var r = rx > ry ? rx : ry;\n var scaleX = rx > ry ? 1 : rx / ry;\n var scaleY = rx > ry ? ry / rx : 1;\n var isEllipse = Math.abs(rx - ry) > 1e-3;\n var endAngle = theta + dTheta;\n\n if (isEllipse) {\n ctx.translate(cx, cy);\n ctx.rotate(psi);\n ctx.scale(scaleX, scaleY);\n ctx.arc(0, 0, r, theta, endAngle, 1 - fs);\n ctx.scale(1 / scaleX, 1 / scaleY);\n ctx.rotate(-psi);\n ctx.translate(-cx, -cy);\n } else {\n ctx.arc(cx, cy, r, theta, endAngle, 1 - fs);\n }\n\n if (i === 1) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = mathCos(theta) * rx + cx;\n y0 = mathSin(theta) * ry + cy;\n }\n\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n\n case CMD.R:\n x0 = xi = d[i];\n y0 = yi = d[i + 1];\n ctx.rect(d[i++], d[i++], d[i++], d[i++]);\n break;\n\n case CMD.Z:\n ctx.closePath();\n xi = x0;\n yi = y0;\n }\n }\n }\n};\nPathProxy.CMD = CMD;\nvar _default = PathProxy;\nmodule.exports = _default;","// Myers' Diff Algorithm\n// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js\nfunction Diff() {}\n\nDiff.prototype = {\n diff: function (oldArr, newArr, equals) {\n if (!equals) {\n equals = function (a, b) {\n return a === b;\n };\n }\n\n this.equals = equals;\n var self = this;\n oldArr = oldArr.slice();\n newArr = newArr.slice(); // Allow subclasses to massage the input prior to running\n\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n var bestPath = [{\n newPos: -1,\n components: []\n }]; // Seed editLength = 0, i.e. the content starts with the same values\n\n var oldPos = this.extractCommon(bestPath[0], newArr, oldArr, 0);\n\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n var indices = [];\n\n for (var i = 0; i < newArr.length; i++) {\n indices.push(i);\n } // Identity per the equality and tokenizer\n\n\n return [{\n indices: indices,\n count: newArr.length\n }];\n } // Main worker method. checks all permutations of a given edit length for acceptance.\n\n\n function execEditLength() {\n for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n var basePath;\n var addPath = bestPath[diagonalPath - 1];\n var removePath = bestPath[diagonalPath + 1];\n var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath - 1] = undefined;\n }\n\n var canAdd = addPath && addPath.newPos + 1 < newLen;\n var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n } // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n\n\n if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {\n basePath = clonePath(removePath);\n self.pushComponent(basePath.components, undefined, true);\n } else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n\n basePath.newPos++;\n self.pushComponent(basePath.components, true, undefined);\n }\n\n oldPos = self.extractCommon(basePath, newArr, oldArr, diagonalPath); // If we have hit the end of both strings, then we are done\n\n if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n return buildValues(self, basePath.components, newArr, oldArr);\n } else {\n // Otherwise track this path as a potential candidate and continue.\n bestPath[diagonalPath] = basePath;\n }\n }\n\n editLength++;\n }\n\n while (editLength <= maxEditLength) {\n var ret = execEditLength();\n\n if (ret) {\n return ret;\n }\n }\n },\n pushComponent: function (components, added, removed) {\n var last = components[components.length - 1];\n\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length - 1] = {\n count: last.count + 1,\n added: added,\n removed: removed\n };\n } else {\n components.push({\n count: 1,\n added: added,\n removed: removed\n });\n }\n },\n extractCommon: function (basePath, newArr, oldArr, diagonalPath) {\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var newPos = basePath.newPos;\n var oldPos = newPos - diagonalPath;\n var commonCount = 0;\n\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newArr[newPos + 1], oldArr[oldPos + 1])) {\n newPos++;\n oldPos++;\n commonCount++;\n }\n\n if (commonCount) {\n basePath.components.push({\n count: commonCount\n });\n }\n\n basePath.newPos = newPos;\n return oldPos;\n },\n tokenize: function (value) {\n return value.slice();\n },\n join: function (value) {\n return value.slice();\n }\n};\n\nfunction buildValues(diff, components, newArr, oldArr) {\n var componentPos = 0;\n var componentLen = components.length;\n var newPos = 0;\n var oldPos = 0;\n\n for (; componentPos < componentLen; componentPos++) {\n var component = components[componentPos];\n\n if (!component.removed) {\n var indices = [];\n\n for (var i = newPos; i < newPos + component.count; i++) {\n indices.push(i);\n }\n\n component.indices = indices;\n newPos += component.count; // Common case\n\n if (!component.added) {\n oldPos += component.count;\n }\n } else {\n var indices = [];\n\n for (var i = oldPos; i < oldPos + component.count; i++) {\n indices.push(i);\n }\n\n component.indices = indices;\n oldPos += component.count;\n }\n }\n\n return components;\n}\n\nfunction clonePath(path) {\n return {\n newPos: path.newPos,\n components: path.components.slice(0)\n };\n}\n\nvar arrayDiff = new Diff();\n\nfunction _default(oldArr, newArr, callback) {\n return arrayDiff.diff(oldArr, newArr, callback);\n}\n\nmodule.exports = _default;"],"names":["dpr","window","Math","max","devicePixelRatio","debugMode","exports","_util","normalizeRadian","PI2","PI","containStroke","cx","cy","r","startAngle","endAngle","anticlockwise","lineWidth","x","y","_l","d","sqrt","abs","tmp","angle","atan2","curve","x0","y0","x1","y1","x2","y2","x3","y3","cubicProjectPoint","_a","_b","_s","PathProxy","line","cubic","quadratic","arc","windingLine","CMD","EPSILON","isAroundEqual","a","b","roots","extrema","swapExtrema","windingCubic","nRoots","cubicRootAt","y0_","y1_","w","nExtrema","i","t","unit","x_","cubicAt","cubicExtrema","windingQuadratic","quadraticRootAt","quadraticExtremum","y_","quadraticAt","windingArc","diff","dir","containPath","data","isStroke","xi","yi","length","cmd","M","L","C","Q","A","rx","ry","theta","dTheta","cos","sin","_x","R","width","height","Z","contain","pathData","points","p","p2","p0","_curve","quadraticProjectPoint","BoundingRect","imageHelper","getContext","extend","retrieve2","retrieve3","trim","textWidthCache","textWidthCacheCounter","TEXT_CACHE_MAX","STYLE_REG","DEFAULT_FONT","methods","$override","name","fn","getWidth","text","font","key","textLines","split","l","measureText","getBoundingRect","textAlign","textVerticalAlign","textPadding","textLineHeight","rich","truncate","getRichTextRect","getPlainTextRect","contentBlock","parsePlainText","outerWidth","outerHeight","adjustTextX","adjustTextY","rect","lineHeight","parseRichText","calculateTextPosition","out","style","textPosition","distance","textDistance","halfHeight","adjustTextPositionOnRect","dummyStyle","truncateText","containerWidth","ellipsis","options","prepareTruncateOptions","len","truncateSingleLine","join","maxIterations","minChar","cnCharWidth","ascCharWidth","placeholder","contentWidth","ellipsisWidth","textLine","j","subLength","estimateLength","floor","substr","charCode","charCodeAt","getLineHeight","padding","lines","canCacheByTextString","truncOuterHeight","truncOuterWidth","result","lastIndex","exec","matchedIndex","index","pushTokens","substring","contentHeight","pendingList","stlPadding","truncateWidth","truncateHeight","tokens","token","tokenStyle","styleName","tokenHeight","textHeight","textWidth","tokenWidth","tokenWidthNotSpecified","charAt","percentWidth","push","textBackgroundColor","bgImg","image","findExistImage","isImageReady","paddingW","remianTruncWidth","parseInt","block","str","isEmptyStr","strs","isLineHolder","tokensLen","makeFont","fontSize","fontFamily","fontStyle","fontWeight","textFont","ctx","Infinity","module","zrUtil","Element","Group","opts","call","this","hasOwnProperty","_children","__storage","__dirty","prototype","constructor","isGroup","type","silent","children","slice","childAt","idx","childOfName","childCount","add","child","parent","_doAdd","addBefore","nextSibling","indexOf","splice","remove","storage","zr","__zr","addToStorage","addChildrenToStorage","refresh","delFromStorage","delChildrenFromStorage","removeAll","eachChild","cb","context","traverse","dirty","includeChildren","tmpRect","tmpMat","ignore","invisible","childRect","transform","getLocalTransform","copy","applyTransform","clone","union","inherits","_default","vec2","matrix","v2ApplyTransform","mathMin","min","mathMax","other","lt","rb","lb","rt","m","maxX","maxY","calculateTransform","sx","sy","create","translate","scale","intersect","ax0","ax1","ay0","ay1","bx0","bx1","by0","by1","plain","eventUtil","GestureMgr","_track","dist","pointPair","dx","dy","center","recognize","event","target","root","_doTrack","_recognize","clear","touches","trackItem","touch","pos","clientToLocal","zrX","zrY","eventName","recognizers","gestureInfo","pinch","track","trackLen","pinchEnd","pinchPre","pinchScale","isFinite","pinchCenter","pinchX","pinchY","LinkedList","head","tail","_len","linkedListProto","insert","val","entry","Entry","insertEntry","next","prev","value","LRU","maxSize","_list","_map","_maxSize","_lastRemovedEntry","LRUProto","put","list","map","removed","leastUsedEntry","get","bbox","_config","min2","max2","mathCos","mathSin","mathSqrt","mathAbs","hasTypedArray","Float32Array","notSaveData","_saveData","_ctx","_xi","_yi","_x0","_y0","_ux","_uy","_lineDash","_dashOffset","_dashIdx","_dashSum","setScale","segmentIgnoreThreshold","beginPath","moveTo","addData","lineTo","exceedUnit","_needsDash","_dashedLineTo","bezierCurveTo","_dashedBezierTo","quadraticCurveTo","_dashedQuadraticTo","arcTo","radius","h","closePath","fill","toStatic","stroke","setLineDash","lineDash","Array","lineDashSum","setLineDashOffset","offset","setData","appendPath","path","appendSize","appendPathData","k","arguments","_expandData","_prevCmd","newData","dash","dashSum","nDash","bezierLen","tmpLen","Number","MAX_VALUE","fromLine","fromCubic","fromQuadratic","fromArc","rebuildPath","ux","uy","psi","fs","scaleX","scaleY","isEllipse","rotate","Diff","buildValues","components","newArr","oldArr","componentPos","componentLen","newPos","oldPos","component","indices","count","added","clonePath","equals","self","newLen","oldLen","editLength","maxEditLength","bestPath","extractCommon","execEditLength","diagonalPath","basePath","addPath","removePath","undefined","canAdd","canRemove","pushComponent","ret","last","commonCount","tokenize","arrayDiff","callback"],"sourceRoot":""}