diff --git a/dist/zrender.js b/dist/zrender.js index f7b36b634..0c8c99e34 100644 --- a/dist/zrender.js +++ b/dist/zrender.js @@ -987,13 +987,16 @@ return this; }; Eventful.prototype.triggerWithContext = function (type) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } if (!this._$handlers) { return this; } var _h = this._$handlers[type]; var eventProcessor = this._$eventProcessor; if (_h) { - var args = arguments; var argLen = args.length; var ctx = args[argLen - 1]; var len = _h.length; @@ -3244,7 +3247,10 @@ } }; Track.prototype.needsAnimate = function () { - return !this._isAllValueEqual && this.keyframes.length >= 2 && this.interpolable; + return !this._isAllValueEqual + && this.keyframes.length >= 2 + && this.interpolable + && this.maxTime > 0; }; Track.prototype.getAdditiveTrack = function () { return this._additiveTrack; @@ -3350,8 +3356,8 @@ for (var i = 0; i < kfsLen; i++) { if (arrDim === 0) { if (this.isValueColor) { - kfs[i].additiveValue - = add1DArray([], kfs[i].value, startValue, -1); + kfs[i].additiveValue = + add1DArray([], kfs[i].value, startValue, -1); } else { kfs[i].additiveValue = kfs[i].value - startValue; @@ -3577,7 +3583,7 @@ Animator.prototype._doneCallback = function () { this._setTracksFinished(); this._clip = null; - var doneList = this._doneList; + var doneList = this._doneCbs; if (doneList) { var len = doneList.length; for (var i = 0; i < len; i++) { @@ -3588,7 +3594,7 @@ Animator.prototype._abortedCallback = function () { this._setTracksFinished(); var animation = this.animation; - var abortedList = this._abortedList; + var abortedList = this._abortedCbs; if (animation) { animation.removeClip(this._clip); } @@ -3665,7 +3671,7 @@ for (var i = 0; i < tracks.length; i++) { tracks[i].step(self._target, percent); } - var onframeList = self._onframeList; + var onframeList = self._onframeCbs; if (onframeList) { for (var i = 0; i < onframeList.length; i++) { onframeList[i](self._target, percent); @@ -3705,28 +3711,28 @@ }; Animator.prototype.during = function (cb) { if (cb) { - if (!this._onframeList) { - this._onframeList = []; + if (!this._onframeCbs) { + this._onframeCbs = []; } - this._onframeList.push(cb); + this._onframeCbs.push(cb); } return this; }; Animator.prototype.done = function (cb) { if (cb) { - if (!this._doneList) { - this._doneList = []; + if (!this._doneCbs) { + this._doneCbs = []; } - this._doneList.push(cb); + this._doneCbs.push(cb); } return this; }; Animator.prototype.aborted = function (cb) { if (cb) { - if (!this._abortedList) { - this._abortedList = []; + if (!this._abortedCbs) { + this._abortedCbs = []; } - this._abortedList.push(cb); + this._abortedCbs.push(cb); } return this; }; @@ -4373,6 +4379,9 @@ var Transformable = (function () { function Transformable() { } + Transformable.prototype.getLocalTransform = function (m) { + return Transformable.getLocalTransform(this, m); + }; Transformable.prototype.setPosition = function (arr) { this.x = arr[0]; this.y = arr[1]; @@ -4397,11 +4406,10 @@ || isNotAroundZero(this.scaleY - 1); }; Transformable.prototype.updateTransform = function () { - var parent = this.parent; - var parentHasTransform = parent && parent.transform; + var parentTransform = this.parent && this.parent.transform; var needLocalTransform = this.needLocalTransform(); var m = this.transform; - if (!(needLocalTransform || parentHasTransform)) { + if (!(needLocalTransform || parentTransform)) { m && mIdentity(m); return; } @@ -4412,12 +4420,12 @@ else { mIdentity(m); } - if (parentHasTransform) { + if (parentTransform) { if (needLocalTransform) { - mul$1(m, parent.transform, m); + mul$1(m, parentTransform, m); } else { - copy$1(m, parent.transform); + copy$1(m, parentTransform); } } this.transform = m; @@ -4439,9 +4447,6 @@ this.invTransform = this.invTransform || create$1(); invert(this.invTransform, m); }; - Transformable.prototype.getLocalTransform = function (m) { - return Transformable.getLocalTransform(this, m); - }; Transformable.prototype.getComputedTransform = function () { var transformNode = this; var ancestors = []; @@ -4536,6 +4541,13 @@ ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1])) : 1; }; + Transformable.prototype.copyTransform = function (source) { + var target = this; + for (var i = 0; i < TRANSFORMABLE_PROPS.length; i++) { + var propName = TRANSFORMABLE_PROPS[i]; + target[propName] = source[propName]; + } + }; Transformable.getLocalTransform = function (target, m) { m = m || []; var ox = target.originX || 0; @@ -4577,7 +4589,10 @@ proto.globalScaleRatio = 1; })(); return Transformable; - }()); + }()); + var TRANSFORMABLE_PROPS = [ + 'x', 'y', 'originX', 'originY', 'rotation', 'scaleX', 'scaleY', 'skewX', 'skewY' + ]; var Point = (function () { function Point(x, y) { @@ -5160,24 +5175,13 @@ } var textConfig = this.textConfig; var isLocal = textConfig.local; - var attachedTransform = textEl.attachedTransform; + var innerTransformable = textEl.innerTransformable; var textAlign = void 0; var textVerticalAlign = void 0; var textStyleChanged = false; - if (isLocal) { - attachedTransform.parent = this; - } - else { - attachedTransform.parent = null; - } + innerTransformable.parent = isLocal ? this : null; var innerOrigin = false; - attachedTransform.x = textEl.x; - attachedTransform.y = textEl.y; - attachedTransform.originX = textEl.originX; - attachedTransform.originY = textEl.originY; - attachedTransform.rotation = textEl.rotation; - attachedTransform.scaleX = textEl.scaleX; - attachedTransform.scaleY = textEl.scaleY; + innerTransformable.copyTransform(textEl); if (textConfig.position != null) { var layoutRect = tmpBoundingRect; if (textConfig.layoutRect) { @@ -5195,8 +5199,8 @@ else { calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect); } - attachedTransform.x = tmpTextPosCalcRes.x; - attachedTransform.y = tmpTextPosCalcRes.y; + innerTransformable.x = tmpTextPosCalcRes.x; + innerTransformable.y = tmpTextPosCalcRes.y; textAlign = tmpTextPosCalcRes.align; textVerticalAlign = tmpTextPosCalcRes.verticalAlign; var textOrigin = textConfig.origin; @@ -5212,20 +5216,20 @@ relOriginY = parsePercent(textOrigin[1], layoutRect.height); } innerOrigin = true; - attachedTransform.originX = -attachedTransform.x + relOriginX + (isLocal ? 0 : layoutRect.x); - attachedTransform.originY = -attachedTransform.y + relOriginY + (isLocal ? 0 : layoutRect.y); + innerTransformable.originX = -innerTransformable.x + relOriginX + (isLocal ? 0 : layoutRect.x); + innerTransformable.originY = -innerTransformable.y + relOriginY + (isLocal ? 0 : layoutRect.y); } } if (textConfig.rotation != null) { - attachedTransform.rotation = textConfig.rotation; + innerTransformable.rotation = textConfig.rotation; } var textOffset = textConfig.offset; if (textOffset) { - attachedTransform.x += textOffset[0]; - attachedTransform.y += textOffset[1]; + innerTransformable.x += textOffset[0]; + innerTransformable.y += textOffset[1]; if (!innerOrigin) { - attachedTransform.originX = -textOffset[0]; - attachedTransform.originY = -textOffset[1]; + innerTransformable.originX = -textOffset[0]; + innerTransformable.originY = -textOffset[1]; } } var isInside = textConfig.inside == null @@ -5672,7 +5676,7 @@ if (textEl.__zr && !textEl.__hostTarget) { throw new Error('Text element has been added to zrender.'); } - textEl.attachedTransform = new Transformable(); + textEl.innerTransformable = new Transformable(); this._attachComponent(textEl); this._textContent = textEl; this.markRedraw(); @@ -5691,7 +5695,7 @@ Element.prototype.removeTextContent = function () { var textEl = this._textContent; if (textEl) { - textEl.attachedTransform = null; + textEl.innerTransformable = null; this._detachComponent(textEl); this._textContent = null; this._innerTextDefaultStyle = null; @@ -5747,6 +5751,9 @@ } }; Element.prototype.addSelfToZr = function (zr) { + if (this.__zr === zr) { + return; + } this.__zr = zr; var animators = this.animators; if (animators) { @@ -5765,6 +5772,9 @@ } }; Element.prototype.removeSelfFromZr = function (zr) { + if (!this.__zr) { + return; + } this.__zr = null; var animators = this.animators; if (animators) { @@ -6157,6 +6167,13 @@ } return this; }; + Group.prototype.replace = function (oldChild, newChild) { + var idx = indexOf(this._children, oldChild); + if (idx >= 0) { + this.replaceAt(newChild, idx); + } + return this; + }; Group.prototype.replaceAt = function (child, index) { var children = this._children; var old = children[index]; @@ -6525,7 +6542,7 @@ function registerPainter(name, Ctor) { painterCtors[name] = Ctor; } - var version = '5.1.1'; + var version = '5.2.0'; var STYLE_MAGIC_KEY = '__zr_style_' + Math.round((Math.random() * 10)); var DEFAULT_COMMON_STYLE = { @@ -7199,6 +7216,27 @@ var start = create(); var end = create(); var extremity = create(); + function fromPoints(points, min, max) { + if (points.length === 0) { + return; + } + var p = points[0]; + var left = p[0]; + var right = p[0]; + var top = p[1]; + var bottom = p[1]; + for (var i = 1; i < points.length; i++) { + p = points[i]; + left = mathMin$1(left, p[0]); + right = mathMax$1(right, p[0]); + top = mathMin$1(top, p[1]); + bottom = mathMax$1(bottom, p[1]); + } + min[0] = left; + min[1] = top; + max[0] = right; + max[1] = bottom; + } function fromLine(x0, y0, x1, y1, min, max) { min[0] = mathMin$1(x0, x1); min[1] = mathMin$1(y0, y1); @@ -7436,6 +7474,7 @@ return this; }; PathProxy.prototype.bezierCurveTo = function (x1, y1, x2, y2, x3, y3) { + this._drawPendingPt(); this.addData(CMD.C, x1, y1, x2, y2, x3, y3); if (this._ctx) { this._needsDash ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3) @@ -7446,6 +7485,7 @@ return this; }; PathProxy.prototype.quadraticCurveTo = function (x1, y1, x2, y2) { + this._drawPendingPt(); this.addData(CMD.Q, x1, y1, x2, y2); if (this._ctx) { this._needsDash ? this._dashedQuadraticTo(x1, y1, x2, y2) @@ -7456,6 +7496,7 @@ return this; }; PathProxy.prototype.arc = function (cx, cy, r, startAngle, endAngle, anticlockwise) { + this._drawPendingPt(); tmpAngles[0] = startAngle; tmpAngles[1] = endAngle; normalizeArcAngles(tmpAngles, anticlockwise); @@ -7469,12 +7510,14 @@ return this; }; PathProxy.prototype.arcTo = function (x1, y1, x2, y2, radius) { + this._drawPendingPt(); if (this._ctx) { this._ctx.arcTo(x1, y1, x2, y2, radius); } return this; }; PathProxy.prototype.rect = function (x, y, w, h) { + this._drawPendingPt(); this._ctx && this._ctx.rect(x, y, w, h); this.addData(CMD.R, x, y, w, h); return this; @@ -7918,12 +7961,12 @@ x0 = xi; y0 = yi; } + if (cmd !== CMD.L && pendingPtDist > 0) { + ctx.lineTo(pendingPtX, pendingPtY); + pendingPtDist = 0; + } switch (cmd) { case CMD.M: - if (pendingPtDist > 0) { - ctx.lineTo(pendingPtX, pendingPtY); - pendingPtDist = 0; - } x0 = xi = d[i++]; y0 = yi = d[i++]; ctx.moveTo(xi, yi); @@ -8071,10 +8114,6 @@ ctx.rect(x, y, width, height); break; case CMD.Z: - if (pendingPtDist > 0) { - ctx.lineTo(pendingPtX, pendingPtY); - pendingPtDist = 0; - } if (drawPart) { var l = pathSegLen[segCount++]; if (accumLength + l > displayedLength) { @@ -8090,6 +8129,14 @@ } } }; + PathProxy.prototype.clone = function () { + var newProxy = new PathProxy(); + var data = this.data; + newProxy.data = data.slice ? data.slice() + : Array.prototype.slice.call(data); + newProxy._len = this._len; + return newProxy; + }; PathProxy.CMD = CMD; PathProxy.initDefaultProps = (function () { var proto = PathProxy.prototype; @@ -8658,10 +8705,16 @@ } } }; - Path.prototype.buildPath = function (ctx, shapeCfg, inBundle) { }; + Path.prototype.buildPath = function (ctx, shapeCfg, inBatch) { }; Path.prototype.pathUpdated = function () { this.__dirty &= ~SHAPE_CHANGED_BIT; }; + Path.prototype.getUpdatedPathProxy = function (inBatch) { + !this.path && this.createPathProxy(); + this.path.beginPath(); + this.buildPath(this.path, this.shape, inBatch); + return this.path; + }; Path.prototype.createPathProxy = function () { this.path = new PathProxy(false); }; @@ -8911,6 +8964,9 @@ var mathSqrt$2 = Math.sqrt; var mathAtan2 = Math.atan2; function transformPath(path, m) { + if (!m) { + return; + } var data = path.data; var len = path.len(); var cmd; @@ -9307,13 +9363,7 @@ var len = pathEls.length; for (var i = 0; i < len; i++) { var pathEl = pathEls[i]; - if (!pathEl.path) { - pathEl.createPathProxy(); - } - if (pathEl.shapeChanged()) { - pathEl.buildPath(pathEl.path, pathEl.shape, true); - } - pathList.push(pathEl.path); + pathList.push(pathEl.getUpdatedPathProxy(true)); } var pathBundle = new Path(opts); pathBundle.createPathProxy(); @@ -9327,13 +9377,39 @@ } }; return pathBundle; + } + function clonePath(sourcePath, opts) { + opts = opts || {}; + var path = new Path(); + if (sourcePath.shape) { + path.setShape(sourcePath.shape); + } + path.setStyle(sourcePath.style); + if (opts.bakeTransform) { + transformPath(path.path, sourcePath.getComputedTransform()); + } + else { + if (opts.toLocal) { + path.setLocalTransform(sourcePath.getComputedTransform()); + } + else { + path.copyTransform(sourcePath); + } + } + path.buildPath = sourcePath.buildPath; + path.applyTransform = path.applyTransform; + path.z = sourcePath.z; + path.z2 = sourcePath.z2; + path.zlevel = sourcePath.zlevel; + return path; } var path = /*#__PURE__*/Object.freeze({ __proto__: null, createFromString: createFromString, extendFromString: extendFromString, - mergePath: mergePath + mergePath: mergePath, + clonePath: clonePath }); var DEFAULT_IMAGE_STYLE = defaults({ @@ -10852,14 +10928,13 @@ Sector.prototype.type = 'sector'; var CMD$3 = PathProxy.CMD; - var tmpArr = []; function aroundEqual(a, b) { return Math.abs(a - b) < 1e-5; } function pathToBezierCurves(path) { var data = path.data; var len = path.len(); - var bezierArray = []; + var bezierArrayGroups = []; var currentSubpath; var xi = 0; var yi = 0; @@ -10867,7 +10942,7 @@ var y0 = 0; function createNewSubpath(x, y) { if (currentSubpath && currentSubpath.length > 2) { - bezierArray.push(currentSubpath); + bezierArrayGroups.push(currentSubpath); } currentSubpath = [x, y]; } @@ -10980,16 +11055,385 @@ } } if (currentSubpath && currentSubpath.length > 2) { - bezierArray.push(currentSubpath); + bezierArrayGroups.push(currentSubpath); + } + return bezierArrayGroups; + } + function adpativeBezier(x0, y0, x1, y1, x2, y2, x3, y3, out, scale) { + if (aroundEqual(x0, x1) && aroundEqual(y0, y1) && aroundEqual(x2, x3) && aroundEqual(y2, y3)) { + out.push(x3, y3); + return; + } + var PIXEL_DISTANCE = 2 / scale; + var PIXEL_DISTANCE_SQR = PIXEL_DISTANCE * PIXEL_DISTANCE; + var dx = x3 - x0; + var dy = y3 - y0; + var d = Math.sqrt(dx * dx + dy * dy); + dx /= d; + dy /= d; + var dx1 = x1 - x0; + var dy1 = y1 - y0; + var dx2 = x2 - x3; + var dy2 = y2 - y3; + var cp1LenSqr = dx1 * dx1 + dy1 * dy1; + var cp2LenSqr = dx2 * dx2 + dy2 * dy2; + if (cp1LenSqr < PIXEL_DISTANCE_SQR && cp2LenSqr < PIXEL_DISTANCE_SQR) { + out.push(x3, y3); + return; } - return bezierArray; + var projLen1 = dx * dx1 + dy * dy1; + var projLen2 = -dx * dx2 - dy * dy2; + var d1Sqr = cp1LenSqr - projLen1 * projLen1; + var d2Sqr = cp2LenSqr - projLen2 * projLen2; + if (d1Sqr < PIXEL_DISTANCE_SQR && projLen1 >= 0 + && d2Sqr < PIXEL_DISTANCE_SQR && projLen2 >= 0) { + out.push(x3, y3); + return; + } + var tmpSegX = []; + var tmpSegY = []; + cubicSubdivide(x0, x1, x2, x3, 0.5, tmpSegX); + cubicSubdivide(y0, y1, y2, y3, 0.5, tmpSegY); + adpativeBezier(tmpSegX[0], tmpSegY[0], tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], tmpSegX[3], tmpSegY[3], out, scale); + adpativeBezier(tmpSegX[4], tmpSegY[4], tmpSegX[5], tmpSegY[5], tmpSegX[6], tmpSegY[6], tmpSegX[7], tmpSegY[7], out, scale); + } + function pathToPolygons(path, scale) { + var bezierArrayGroups = pathToBezierCurves(path); + var polygons = []; + scale = scale || 1; + for (var i = 0; i < bezierArrayGroups.length; i++) { + var beziers = bezierArrayGroups[i]; + var polygon = []; + var x0 = beziers[0]; + var y0 = beziers[1]; + polygon.push(x0, y0); + for (var k = 2; k < beziers.length;) { + var x1 = beziers[k++]; + var y1 = beziers[k++]; + var x2 = beziers[k++]; + var y2 = beziers[k++]; + var x3 = beziers[k++]; + var y3 = beziers[k++]; + adpativeBezier(x0, y0, x1, y1, x2, y2, x3, y3, polygon, scale); + x0 = x3; + y0 = y3; + } + polygons.push(polygon); + } + return polygons; + } + + function getDividingGrids(dimSize, rowDim, count) { + var rowSize = dimSize[rowDim]; + var columnSize = dimSize[1 - rowDim]; + var ratio = Math.abs(rowSize / columnSize); + var rowCount = Math.ceil(Math.sqrt(ratio * count)); + var columnCount = Math.floor(count / rowCount); + if (columnCount === 0) { + columnCount = 1; + rowCount = count; + } + var grids = []; + for (var i = 0; i < rowCount; i++) { + grids.push(columnCount); + } + var currentCount = rowCount * columnCount; + var remained = count - currentCount; + if (remained > 0) { + for (var i = 0; i < remained; i++) { + grids[i % rowCount] += 1; + } + } + return grids; + } + function divideSector(sectorShape, count, outShapes) { + var r0 = sectorShape.r0; + var r = sectorShape.r; + var startAngle = sectorShape.startAngle; + var endAngle = sectorShape.endAngle; + var angle = Math.abs(endAngle - startAngle); + var arcLen = angle * r; + var deltaR = r - r0; + var isAngleRow = arcLen > Math.abs(deltaR); + var grids = getDividingGrids([arcLen, deltaR], isAngleRow ? 0 : 1, count); + var rowSize = (isAngleRow ? angle : deltaR) / grids.length; + for (var row = 0; row < grids.length; row++) { + var columnSize = (isAngleRow ? deltaR : angle) / grids[row]; + for (var column = 0; column < grids[row]; column++) { + var newShape = {}; + if (isAngleRow) { + newShape.startAngle = startAngle + rowSize * row; + newShape.endAngle = startAngle + rowSize * (row + 1); + newShape.r0 = r0 + columnSize * column; + newShape.r = r0 + columnSize * (column + 1); + } + else { + newShape.startAngle = startAngle + columnSize * column; + newShape.endAngle = startAngle + columnSize * (column + 1); + newShape.r0 = r0 + rowSize * row; + newShape.r = r0 + rowSize * (row + 1); + } + newShape.clockwise = sectorShape.clockwise; + newShape.cx = sectorShape.cx; + newShape.cy = sectorShape.cy; + outShapes.push(newShape); + } + } + } + function divideRect(rectShape, count, outShapes) { + var width = rectShape.width; + var height = rectShape.height; + var isHorizontalRow = width > height; + var grids = getDividingGrids([width, height], isHorizontalRow ? 0 : 1, count); + var rowSizeDim = isHorizontalRow ? 'width' : 'height'; + var columnSizeDim = isHorizontalRow ? 'height' : 'width'; + var rowDim = isHorizontalRow ? 'x' : 'y'; + var columnDim = isHorizontalRow ? 'y' : 'x'; + var rowSize = rectShape[rowSizeDim] / grids.length; + for (var row = 0; row < grids.length; row++) { + var columnSize = rectShape[columnSizeDim] / grids[row]; + for (var column = 0; column < grids[row]; column++) { + var newShape = {}; + newShape[rowDim] = row * rowSize; + newShape[columnDim] = column * columnSize; + newShape[rowSizeDim] = rowSize; + newShape[columnSizeDim] = columnSize; + newShape.x += rectShape.x; + newShape.y += rectShape.y; + outShapes.push(newShape); + } + } + } + function crossProduct2d(x1, y1, x2, y2) { + return x1 * y2 - x2 * y1; + } + function lineLineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) { + var mx = a2x - a1x; + var my = a2y - a1y; + var nx = b2x - b1x; + var ny = b2y - b1y; + var nmCrossProduct = crossProduct2d(nx, ny, mx, my); + if (Math.abs(nmCrossProduct) < 1e-6) { + return null; + } + var b1a1x = a1x - b1x; + var b1a1y = a1y - b1y; + var p = crossProduct2d(b1a1x, b1a1y, nx, ny) / nmCrossProduct; + if (p < 0 || p > 1) { + return null; + } + return new Point(p * mx + a1x, p * my + a1y); + } + function projPtOnLine(pt, lineA, lineB) { + var dir = new Point(); + Point.sub(dir, lineB, lineA); + dir.normalize(); + var dir2 = new Point(); + Point.sub(dir2, pt, lineA); + var len = dir2.dot(dir); + return len; } + function addToPoly(poly, pt) { + var last = poly[poly.length - 1]; + if (last && last[0] === pt[0] && last[1] === pt[1]) { + return; + } + poly.push(pt); + } + function splitPolygonByLine(points, lineA, lineB) { + var len = points.length; + var intersections = []; + for (var i = 0; i < len; i++) { + var p0 = points[i]; + var p1 = points[(i + 1) % len]; + var intersectionPt = lineLineIntersect(p0[0], p0[1], p1[0], p1[1], lineA.x, lineA.y, lineB.x, lineB.y); + if (intersectionPt) { + intersections.push({ + projPt: projPtOnLine(intersectionPt, lineA, lineB), + pt: intersectionPt, + idx: i + }); + } + } + if (intersections.length < 2) { + return [{ points: points }, { points: points }]; + } + intersections.sort(function (a, b) { + return a.projPt - b.projPt; + }); + var splitPt0 = intersections[0]; + var splitPt1 = intersections[intersections.length - 1]; + if (splitPt1.idx < splitPt0.idx) { + var tmp = splitPt0; + splitPt0 = splitPt1; + splitPt1 = tmp; + } + var splitPt0Arr = [splitPt0.pt.x, splitPt0.pt.y]; + var splitPt1Arr = [splitPt1.pt.x, splitPt1.pt.y]; + var newPolyA = [splitPt0Arr]; + var newPolyB = [splitPt1Arr]; + for (var i = splitPt0.idx + 1; i <= splitPt1.idx; i++) { + addToPoly(newPolyA, points[i].slice()); + } + addToPoly(newPolyA, splitPt1Arr); + addToPoly(newPolyA, splitPt0Arr); + for (var i = splitPt1.idx + 1; i <= splitPt0.idx + len; i++) { + addToPoly(newPolyB, points[i % len].slice()); + } + addToPoly(newPolyB, splitPt0Arr); + addToPoly(newPolyB, splitPt1Arr); + return [{ + points: newPolyA + }, { + points: newPolyB + }]; + } + function binaryDividePolygon(polygonShape) { + var points = polygonShape.points; + var min = []; + var max = []; + fromPoints(points, min, max); + var boundingRect = new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]); + var width = boundingRect.width; + var height = boundingRect.height; + var x = boundingRect.x; + var y = boundingRect.y; + var pt0 = new Point(); + var pt1 = new Point(); + if (width > height) { + pt0.x = pt1.x = x + width / 2; + pt0.y = y; + pt1.y = y + height; + } + else { + pt0.y = pt1.y = y + height / 2; + pt0.x = x; + pt1.x = x + width; + } + return splitPolygonByLine(points, pt0, pt1); + } + function binaryDivideRecursive(divider, shape, count, out) { + if (count === 1) { + out.push(shape); + } + else { + var mid = Math.floor(count / 2); + var sub = divider(shape); + binaryDivideRecursive(divider, sub[0], mid, out); + binaryDivideRecursive(divider, sub[1], count - mid, out); + } + return out; + } + function clone$3(path, count) { + var paths = []; + for (var i = 0; i < count; i++) { + paths.push(clonePath(path)); + } + return paths; + } + function copyPathProps(source, target) { + target.setStyle(source.style); + target.z = source.z; + target.z2 = source.z2; + target.zlevel = source.zlevel; + } + function polygonConvert(points) { + var out = []; + for (var i = 0; i < points.length;) { + out.push([points[i++], points[i++]]); + } + return out; + } + function split(path, count) { + var outShapes = []; + var shape = path.shape; + var OutShapeCtor; + switch (path.type) { + case 'rect': + divideRect(shape, count, outShapes); + OutShapeCtor = Rect; + break; + case 'sector': + divideSector(shape, count, outShapes); + OutShapeCtor = Sector; + break; + case 'circle': + divideSector({ + r0: 0, r: shape.r, startAngle: 0, endAngle: Math.PI * 2, + cx: shape.cx, cy: shape.cy + }, count, outShapes); + OutShapeCtor = Sector; + break; + default: + var m = path.getComputedTransform(); + var scale = m ? Math.sqrt(Math.max(m[0] * m[0] + m[1] * m[1], m[2] * m[2] + m[3] * m[3])) : 1; + var polygons = map(pathToPolygons(path.getUpdatedPathProxy(), scale), function (poly) { return polygonConvert(poly); }); + var polygonCount = polygons.length; + if (polygonCount === 0) { + binaryDivideRecursive(binaryDividePolygon, { + points: polygons[0] + }, count, outShapes); + } + else if (polygonCount === count) { + for (var i = 0; i < polygonCount; i++) { + outShapes.push({ + points: polygons[i] + }); + } + } + else { + var totalArea_1 = 0; + var items = map(polygons, function (poly) { + var min = []; + var max = []; + fromPoints(poly, min, max); + var area = (max[1] - min[1]) * (max[0] - min[0]); + totalArea_1 += area; + return { poly: poly, area: area }; + }); + items.sort(function (a, b) { return b.area - a.area; }); + var left = count; + for (var i = 0; i < polygonCount; i++) { + var item = items[i]; + if (left <= 0) { + break; + } + var selfCount = i === polygonCount - 1 + ? left + : Math.ceil(item.area / totalArea_1 * count); + if (selfCount < 0) { + continue; + } + binaryDivideRecursive(binaryDividePolygon, { + points: item.poly + }, selfCount, outShapes); + left -= selfCount; + } + } + OutShapeCtor = Polygon; + break; + } + if (!OutShapeCtor) { + return clone$3(path, count); + } + var out = []; + for (var i = 0; i < outShapes.length; i++) { + var subPath = new OutShapeCtor(); + subPath.setShape(outShapes[i]); + copyPathProps(path, subPath); + out.push(subPath); + } + return out; + } + function alignSubpath(subpath1, subpath2) { var len1 = subpath1.length; var len2 = subpath2.length; if (len1 === len2) { return [subpath1, subpath2]; } + var tmpSegX = []; + var tmpSegY = []; var shorterPath = len1 < len2 ? subpath1 : subpath2; var shorterLen = Math.min(len1, len2); var diff = Math.abs(len2 - len1) / 6; @@ -10997,8 +11441,6 @@ var eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount) + 1; var newSubpath = [shorterPath[0], shorterPath[1]]; var remained = diff; - var tmpSegX = []; - var tmpSegY = []; for (var i = 2; i < shorterLen;) { var x0 = shorterPath[i - 2]; var y0 = shorterPath[i - 1]; @@ -11139,7 +11581,7 @@ var newToSubpathBezier = []; var bestAngle = 0; var bestScore = Infinity; - var tmpArr_1 = []; + var tmpArr = []; var len = fromSubpathBezier.length; if (fromNeedsReverse) { fromSubpathBezier = reverse(fromSubpathBezier); @@ -11166,8 +11608,8 @@ var y1 = toSubpathBezier[k + 1] - toCp[1]; var newX1 = x1 * ca - y1 * sa; var newY1 = x1 * sa + y1 * ca; - tmpArr_1[k] = newX1; - tmpArr_1[k + 1] = newY1; + tmpArr[k] = newX1; + tmpArr[k + 1] = newY1; var dx = newX1 - x0; var dy = newY1 - y0; score += dx * dx + dy * dy; @@ -11175,8 +11617,8 @@ if (score < bestScore) { bestScore = score; bestAngle = angle; - for (var m = 0; m < tmpArr_1.length; m++) { - newToSubpathBezier[m] = tmpArr_1[m]; + for (var m = 0; m < tmpArr.length; m++) { + newToSubpathBezier[m] = tmpArr[m]; } } } @@ -11197,32 +11639,130 @@ } return result; } + function isCombineMorphing(path) { + return path.__isCombineMorphing; + } + function isMorphing(el) { + return el.__morphT >= 0; + } + var SAVED_METHOD_PREFIX = '__mOriginal_'; + function saveAndModifyMethod(obj, methodName, modifiers) { + var savedMethodName = SAVED_METHOD_PREFIX + methodName; + var originalMethod = obj[savedMethodName] || obj[methodName]; + if (!obj[savedMethodName]) { + obj[savedMethodName] = obj[methodName]; + } + var replace = modifiers.replace; + var after = modifiers.after; + var before = modifiers.before; + obj[methodName] = function () { + var args = arguments; + var res; + before && before.apply(this, args); + if (replace) { + res = replace.apply(this, args); + } + else { + res = originalMethod.apply(this, args); + } + after && after.apply(this, args); + return res; + }; + } + function restoreMethod(obj, methodName) { + var savedMethodName = SAVED_METHOD_PREFIX + methodName; + if (obj[savedMethodName]) { + obj[methodName] = obj[savedMethodName]; + obj[savedMethodName] = null; + } + } + function applyTransformOnBeziers(bezierCurves, mm) { + for (var i = 0; i < bezierCurves.length; i++) { + var subBeziers = bezierCurves[i]; + for (var k = 0; k < subBeziers.length;) { + var x = subBeziers[k]; + var y = subBeziers[k + 1]; + subBeziers[k++] = mm[0] * x + mm[2] * y + mm[4]; + subBeziers[k++] = mm[1] * x + mm[3] * y + mm[5]; + } + } + } + function prepareMorphPath(fromPath, toPath) { + var fromPathProxy = fromPath.getUpdatedPathProxy(); + var toPathProxy = toPath.getUpdatedPathProxy(); + var _a = alignBezierCurves(pathToBezierCurves(fromPathProxy), pathToBezierCurves(toPathProxy)), fromBezierCurves = _a[0], toBezierCurves = _a[1]; + var fromPathTransform = fromPath.getComputedTransform(); + var toPathTransform = toPath.getComputedTransform(); + function updateIdentityTransform() { + this.transform = null; + } + fromPathTransform && applyTransformOnBeziers(fromBezierCurves, fromPathTransform); + toPathTransform && applyTransformOnBeziers(toBezierCurves, toPathTransform); + saveAndModifyMethod(toPath, 'updateTransform', { replace: updateIdentityTransform }); + toPath.transform = null; + var morphingData = findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI); + var tmpArr = []; + saveAndModifyMethod(toPath, 'buildPath', { replace: function (path) { + var t = toPath.__morphT; + var onet = 1 - t; + var newCp = []; + for (var i = 0; i < morphingData.length; i++) { + var item = morphingData[i]; + var from = item.from; + var to = item.to; + var angle = item.rotation * t; + var fromCp = item.fromCp; + var toCp = item.toCp; + var sa = Math.sin(angle); + var ca = Math.cos(angle); + lerp(newCp, fromCp, toCp, t); + for (var m = 0; m < from.length; m += 2) { + var x0_1 = from[m]; + var y0_1 = from[m + 1]; + var x1 = to[m]; + var y1 = to[m + 1]; + var x = x0_1 * onet + x1 * t; + var y = y0_1 * onet + y1 * t; + tmpArr[m] = (x * ca - y * sa) + newCp[0]; + tmpArr[m + 1] = (x * sa + y * ca) + newCp[1]; + } + var x0 = tmpArr[0]; + var y0 = tmpArr[1]; + path.moveTo(x0, y0); + for (var m = 2; m < from.length;) { + var x1 = tmpArr[m++]; + var y1 = tmpArr[m++]; + var x2 = tmpArr[m++]; + var y2 = tmpArr[m++]; + var x3 = tmpArr[m++]; + var y3 = tmpArr[m++]; + if (x0 === x1 && y0 === y1 && x2 === x3 && y2 === y3) { + path.lineTo(x3, y3); + } + else { + path.bezierCurveTo(x1, y1, x2, y2, x3, y3); + } + x0 = x3; + y0 = y3; + } + } + } }); + } function morphPath(fromPath, toPath, animationOpts) { - var fromPathProxy; - var toPathProxy; if (!fromPath || !toPath) { return toPath; } - !fromPath.path && fromPath.createPathProxy(); - fromPathProxy = fromPath.path; - fromPathProxy.beginPath(); - fromPath.buildPath(fromPathProxy, fromPath.shape); - !toPath.path && toPath.createPathProxy(); - toPathProxy = toPath.path; - toPathProxy === fromPathProxy && (toPathProxy = new PathProxy(false)); - toPathProxy.beginPath(); - if (isIndividualMorphingPath(toPath)) { - toPath.__oldBuildPath(toPathProxy, toPath.shape); - } - else { - toPath.buildPath(toPathProxy, toPath.shape); + var oldDone = animationOpts.done; + var oldDuring = animationOpts.during; + prepareMorphPath(fromPath, toPath); + toPath.__morphT = 0; + function restoreToPath() { + restoreMethod(toPath, 'buildPath'); + restoreMethod(toPath, 'updateTransform'); + toPath.__morphT = -1; + toPath.createPathProxy(); + toPath.dirtyShape(); } - var _a = alignBezierCurves(pathToBezierCurves(fromPathProxy), pathToBezierCurves(toPathProxy)), fromBezierCurves = _a[0], toBezierCurves = _a[1]; - var morphingData = findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI); - becomeIndividualMorphingPath(toPath, morphingData, 0); - var oldDone = animationOpts && animationOpts.done; - var oldAborted = animationOpts && animationOpts.aborted; - var oldDuring = animationOpts && animationOpts.during; toPath.animateTo({ __morphT: 1 }, defaults({ @@ -11231,74 +11771,258 @@ oldDuring && oldDuring(p); }, done: function () { - restoreIndividualMorphingPath(toPath); - toPath.createPathProxy(); - toPath.dirtyShape(); + restoreToPath(); oldDone && oldDone(); - }, - aborted: function () { - oldAborted && oldAborted(); } }, animationOpts)); return toPath; } - function morphingPathBuildPath(path) { - var morphingData = this.__morphingData; - var t = this.__morphT; - var onet = 1 - t; - var newCp = []; - for (var i = 0; i < morphingData.length; i++) { - var item = morphingData[i]; - var from = item.from; - var to = item.to; - var angle = item.rotation * t; - var fromCp = item.fromCp; - var toCp = item.toCp; - var sa = Math.sin(angle); - var ca = Math.cos(angle); - lerp(newCp, fromCp, toCp, t); - for (var m = 0; m < from.length; m += 2) { - var x0 = from[m]; - var y0 = from[m + 1]; - var x1 = to[m]; - var y1 = to[m + 1]; - var x = x0 * onet + x1 * t; - var y = y0 * onet + y1 * t; - tmpArr[m] = (x * ca - y * sa) + newCp[0]; - tmpArr[m + 1] = (x * sa + y * ca) + newCp[1]; - } - for (var m = 0; m < from.length;) { - if (m === 0) { - path.moveTo(tmpArr[m++], tmpArr[m++]); - } - path.bezierCurveTo(tmpArr[m++], tmpArr[m++], tmpArr[m++], tmpArr[m++], tmpArr[m++], tmpArr[m++]); - } - } - } - function becomeIndividualMorphingPath(path, morphingData, morphT) { - if (isIndividualMorphingPath(path)) { - updateIndividualMorphingPath(path, morphingData, morphT); - return; + function hilbert(x, y, minX, minY, maxX, maxY) { + var bits = 16; + x = (maxX === minX) ? 0 : Math.round(32767 * (x - minX) / (maxX - minX)); + y = (maxY === minY) ? 0 : Math.round(32767 * (y - minY) / (maxY - minY)); + var d = 0; + var tmp; + for (var s = (1 << bits) / 2; s > 0; s /= 2) { + var rx = 0; + var ry = 0; + if ((x & s) > 0) { + rx = 1; + } + if ((y & s) > 0) { + ry = 1; + } + d += s * s * ((3 * rx) ^ ry); + if (ry === 0) { + if (rx === 1) { + x = s - 1 - x; + y = s - 1 - y; + } + tmp = x; + x = y; + y = tmp; + } } - var morphingPath = path; - morphingPath.__oldBuildPath = morphingPath.buildPath; - morphingPath.buildPath = morphingPathBuildPath; - updateIndividualMorphingPath(morphingPath, morphingData, morphT); + return d; + } + function sortPaths(pathList) { + var xMin = Infinity; + var yMin = Infinity; + var xMax = -Infinity; + var yMax = -Infinity; + var cps = map(pathList, function (path) { + var rect = path.getBoundingRect(); + var m = path.getComputedTransform(); + var x = rect.x + rect.width / 2 + (m ? m[4] : 0); + var y = rect.y + rect.height / 2 + (m ? m[5] : 0); + xMin = Math.min(x, xMin); + yMin = Math.min(y, yMin); + xMax = Math.max(x, xMax); + yMax = Math.max(y, yMax); + return [x, y]; + }); + var items = map(cps, function (cp, idx) { + return { + cp: cp, + z: hilbert(cp[0], cp[1], xMin, yMin, xMax, yMax), + path: pathList[idx] + }; + }); + return items.sort(function (a, b) { return a.z - b.z; }).map(function (item) { return item.path; }); + } + function defaultDividePath(param) { + return split(param.path, param.count); } - function updateIndividualMorphingPath(morphingPath, morphingData, morphT) { - morphingPath.__morphingData = morphingData; - morphingPath.__morphT = morphT; + function createEmptyReturn() { + return { + fromIndividuals: [], + toIndividuals: [], + count: 0 + }; } - function restoreIndividualMorphingPath(path) { - if (isIndividualMorphingPath(path)) { - path.buildPath = path.__oldBuildPath; - path.__oldBuildPath = path.__morphingData = null; + function combineMorph(fromList, toPath, animationOpts) { + var fromPathList = []; + function addFromPath(fromList) { + for (var i = 0; i < fromList.length; i++) { + var from = fromList[i]; + if (isCombineMorphing(from)) { + addFromPath(from.childrenRef()); + } + else if (from instanceof Path) { + fromPathList.push(from); + } + } } + addFromPath(fromList); + var separateCount = fromPathList.length; + if (!separateCount) { + return createEmptyReturn(); + } + var dividePath = animationOpts.dividePath || defaultDividePath; + var toSubPathList = dividePath({ + path: toPath, count: separateCount + }); + if (toSubPathList.length !== separateCount) { + console.error('Invalid morphing: unmatched splitted path'); + return createEmptyReturn(); + } + fromPathList = sortPaths(fromPathList); + toSubPathList = sortPaths(toSubPathList); + var oldDone = animationOpts.done; + var oldDuring = animationOpts.during; + var individualDelay = animationOpts.individualDelay; + var identityTransform = new Transformable(); + for (var i = 0; i < separateCount; i++) { + var from = fromPathList[i]; + var to = toSubPathList[i]; + to.parent = toPath; + to.copyTransform(identityTransform); + if (!individualDelay) { + prepareMorphPath(from, to); + } + } + toPath.__isCombineMorphing = true; + toPath.childrenRef = function () { + return toSubPathList; + }; + function addToSubPathListToZr(zr) { + for (var i = 0; i < toSubPathList.length; i++) { + toSubPathList[i].addSelfToZr(zr); + } + } + saveAndModifyMethod(toPath, 'addSelfToZr', { + after: function (zr) { + addToSubPathListToZr(zr); + } + }); + saveAndModifyMethod(toPath, 'removeSelfFromZr', { + after: function (zr) { + for (var i = 0; i < toSubPathList.length; i++) { + toSubPathList[i].removeSelfFromZr(zr); + } + } + }); + function restoreToPath() { + toPath.__isCombineMorphing = false; + toPath.__morphT = -1; + toPath.childrenRef = null; + restoreMethod(toPath, 'addSelfToZr'); + restoreMethod(toPath, 'removeSelfFromZr'); + } + var toLen = toSubPathList.length; + if (individualDelay) { + var animating_1 = toLen; + var eachDone = function () { + animating_1--; + if (animating_1 === 0) { + restoreToPath(); + oldDone && oldDone(); + } + }; + for (var i = 0; i < toLen; i++) { + var indivdualAnimationOpts = individualDelay ? defaults({ + delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toSubPathList[i]), + done: eachDone + }, animationOpts) : animationOpts; + morphPath(fromPathList[i], toSubPathList[i], indivdualAnimationOpts); + } + } + else { + toPath.__morphT = 0; + toPath.animateTo({ + __morphT: 1 + }, defaults({ + during: function (p) { + for (var i = 0; i < toLen; i++) { + var child = toSubPathList[i]; + child.__morphT = toPath.__morphT; + child.dirtyShape(); + } + oldDuring && oldDuring(p); + }, + done: function () { + restoreToPath(); + for (var i = 0; i < fromList.length; i++) { + restoreMethod(fromList[i], 'updateTransform'); + } + oldDone && oldDone(); + } + }, animationOpts)); + } + if (toPath.__zr) { + addToSubPathListToZr(toPath.__zr); + } + return { + fromIndividuals: fromPathList, + toIndividuals: toSubPathList, + count: toLen + }; } - function isIndividualMorphingPath(path) { - return path.__oldBuildPath != null; + function separateMorph(fromPath, toPathList, animationOpts) { + var toLen = toPathList.length; + var fromPathList = []; + var dividePath = animationOpts.dividePath || defaultDividePath; + function addFromPath(fromList) { + for (var i = 0; i < fromList.length; i++) { + var from = fromList[i]; + if (isCombineMorphing(from)) { + addFromPath(from.childrenRef()); + } + else if (from instanceof Path) { + fromPathList.push(from); + } + } + } + if (isCombineMorphing(fromPath)) { + addFromPath(fromPath.childrenRef()); + var fromLen = fromPathList.length; + if (fromLen < toLen) { + var k = 0; + for (var i = fromLen; i < toLen; i++) { + fromPathList.push(clonePath(fromPathList[k++ % fromLen])); + } + } + fromPathList.length = toLen; + } + else { + fromPathList = dividePath({ path: fromPath, count: toLen }); + var fromPathTransform = fromPath.getComputedTransform(); + for (var i = 0; i < fromPathList.length; i++) { + fromPathList[i].setLocalTransform(fromPathTransform); + } + if (fromPathList.length !== toLen) { + console.error('Invalid morphing: unmatched splitted path'); + return createEmptyReturn(); + } + } + fromPathList = sortPaths(fromPathList); + toPathList = sortPaths(toPathList); + var individualDelay = animationOpts.individualDelay; + for (var i = 0; i < toLen; i++) { + var indivdualAnimationOpts = individualDelay ? defaults({ + delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toPathList[i]) + }, animationOpts) : animationOpts; + morphPath(fromPathList[i], toPathList[i], indivdualAnimationOpts); + } + return { + fromIndividuals: fromPathList, + toIndividuals: toPathList, + count: toPathList.length + }; } + var morphPath$1 = /*#__PURE__*/Object.freeze({ + __proto__: null, + alignBezierCurves: alignBezierCurves, + centroid: centroid, + isCombineMorphing: isCombineMorphing, + isMorphing: isMorphing, + morphPath: morphPath, + combineMorph: combineMorph, + separateMorph: separateMorph, + defaultDividePath: split + }); + var CompoundPath = (function (_super) { __extends(CompoundPath, _super); function CompoundPath() { @@ -12008,6 +12732,7 @@ return this._children; }; ZRText.prototype.update = function () { + _super.prototype.update.call(this); if (this.styleChanged()) { this._updateSubTexts(); } @@ -12020,29 +12745,31 @@ child.cursor = this.cursor; child.invisible = this.invisible; } - var attachedTransform = this.attachedTransform; - if (attachedTransform) { - attachedTransform.updateTransform(); - var m = attachedTransform.transform; - if (m) { - this.transform = this.transform || []; - copy$1(this.transform, m); - } - else { - this.transform = null; + }; + ZRText.prototype.updateTransform = function () { + var innerTransformable = this.innerTransformable; + if (innerTransformable) { + innerTransformable.updateTransform(); + if (innerTransformable.transform) { + this.transform = innerTransformable.transform; } } else { - _super.prototype.update.call(this); + _super.prototype.updateTransform.call(this); } }; + ZRText.prototype.getLocalTransform = function (m) { + var innerTransformable = this.innerTransformable; + return innerTransformable + ? innerTransformable.getLocalTransform(m) + : _super.prototype.getLocalTransform.call(this, m); + }; ZRText.prototype.getComputedTransform = function () { if (this.__hostTarget) { this.__hostTarget.getComputedTransform(); this.__hostTarget.updateInnerText(true); } - return this.attachedTransform ? this.attachedTransform.getComputedTransform() - : _super.prototype.getComputedTransform.call(this); + return _super.prototype.getComputedTransform.call(this); }; ZRText.prototype._updateSubTexts = function () { this._childCursor = 0; @@ -12311,7 +13038,7 @@ var defaultStyle = this._defaultStyle; var useDefaultFill = false; var defaultLineWidth = 0; - var textFill = getStroke('fill' in tokenStyle ? tokenStyle.fill + var textFill = getFill('fill' in tokenStyle ? tokenStyle.fill : 'fill' in style ? style.fill : (useDefaultFill = true, defaultStyle.fill)); var textStroke = getStroke('stroke' in tokenStyle ? tokenStyle.stroke @@ -12358,7 +13085,7 @@ var self = this; var rectEl; var imgEl; - if (isPlainOrGradientBg || (textBorderWidth && textBorderColor)) { + if (isPlainOrGradientBg || style.lineHeight || (textBorderWidth && textBorderColor)) { rectEl = this._getOrCreateChild(Rect); rectEl.useStyle(rectEl.createStyle()); rectEl.style.fill = null; @@ -12484,6 +13211,7 @@ } function needDrawBackground(style) { return !!(style.backgroundColor + || style.lineHeight || (style.borderWidth && style.borderColor)); } @@ -13220,6 +13948,9 @@ var stroke = style.stroke; return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0)); } + function isValidStrokeFillStyle(strokeOrFill) { + return typeof strokeOrFill === 'string' && strokeOrFill !== 'none'; + } function styleHasFill(style) { var fill = style.fill; return fill != null && fill !== 'none'; @@ -13537,14 +14268,14 @@ flushPathDrawn(ctx, scope); styleChanged = true; } - ctx.fillStyle = style.fill; + isValidStrokeFillStyle(style.fill) && (ctx.fillStyle = style.fill); } if (forceSetAll || style.stroke !== prevStyle.stroke) { if (!styleChanged) { flushPathDrawn(ctx, scope); styleChanged = true; } - ctx.strokeStyle = style.stroke; + isValidStrokeFillStyle(style.stroke) && (ctx.strokeStyle = style.stroke); } if (forceSetAll || style.opacity !== prevStyle.opacity) { if (!styleChanged) { @@ -14769,6 +15500,23 @@ function createElement(name) { return document.createElementNS('http://www.w3.org/2000/svg', name); + } + function normalizeColor(color) { + var opacity; + if (!color || color === 'transparent') { + color = 'none'; + } + else if (typeof color === 'string' && color.indexOf('rgba') > -1) { + var arr = parse(color); + if (arr) { + color = 'rgb(' + arr[0] + ',' + arr[1] + ',' + arr[2] + ')'; + opacity = arr[3]; + } + } + return { + color: color, + opacity: opacity == null ? 1 : opacity + }; } function diff(oldArr, newArr, equals) { @@ -14813,7 +15561,7 @@ continue; } if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) { - basePath = clonePath(removePath); + basePath = clonePath$1(removePath); pushComponent(basePath.components, false, true); } else { @@ -14906,7 +15654,7 @@ } return components; } - function clonePath(path) { + function clonePath$1(path) { return { newPos: path.newPos, components: path.components.slice(0) }; } function arrayDiff(oldArr, newArr, equal) { @@ -14968,25 +15716,27 @@ return; } if (pathHasFill(style)) { - var fill = style.fill; - fill = fill === 'transparent' ? NONE : fill; - attr(svgEl, 'fill', fill); - attr(svgEl, 'fill-opacity', (style.fillOpacity != null ? style.fillOpacity * opacity : opacity) + ''); + var fill = normalizeColor(style.fill); + attr(svgEl, 'fill', fill.color); + attr(svgEl, 'fill-opacity', (style.fillOpacity != null + ? style.fillOpacity * fill.opacity * opacity + : fill.opacity * opacity) + ''); } else { attr(svgEl, 'fill', NONE); } if (pathHasStroke(style)) { - var stroke = style.stroke; - stroke = stroke === 'transparent' ? NONE : stroke; - attr(svgEl, 'stroke', stroke); + var stroke = normalizeColor(style.stroke); + attr(svgEl, 'stroke', stroke.color); var strokeWidth = style.lineWidth; var strokeScale_1 = style.strokeNoScale ? el.getLineScale() : 1; attr(svgEl, 'stroke-width', (strokeScale_1 ? strokeWidth / strokeScale_1 : 0) + ''); attr(svgEl, 'paint-order', style.strokeFirst ? 'stroke' : 'fill'); - attr(svgEl, 'stroke-opacity', (style.strokeOpacity != null ? style.strokeOpacity * opacity : opacity) + ''); + attr(svgEl, 'stroke-opacity', (style.strokeOpacity != null + ? style.strokeOpacity * stroke.opacity * opacity + : stroke.opacity * opacity) + ''); var lineDash = style.lineDash && strokeWidth > 0 && normalizeLineDash(style.lineDash, strokeWidth); if (lineDash) { var lineDashOffset = style.lineDashOffset; @@ -15080,6 +15830,7 @@ this._add('L', x + w, y + h); this._add('L', x, y + h); this._add('L', x, y); + this._add('Z'); }; SVGPathRebuilder.prototype.closePath = function () { if (this._d.length > 0) { @@ -15499,6 +16250,7 @@ }(Definable)); var wmUniqueIndex = Math.round(Math.random() * 9); + var supportDefineProperty = typeof Object.defineProperty === 'function'; var WeakMap = (function () { function WeakMap() { this._id = '__ec_inner_' + wmUniqueIndex++; @@ -15508,7 +16260,7 @@ }; WeakMap.prototype.set = function (key, value) { var target = this._guard(key); - if (typeof Object.defineProperty === 'function') { + if (supportDefineProperty) { Object.defineProperty(target, this._id, { value: value, enumerable: false, @@ -15698,8 +16450,11 @@ } ClippathManager.prototype.markAllUnused = function () { _super.prototype.markAllUnused.call(this); - for (var key in this._refGroups) { - this.markDomUnused(this._refGroups[key]); + var refGroups = this._refGroups; + for (var key in refGroups) { + if (refGroups.hasOwnProperty(key)) { + this.markDomUnused(refGroups[key]); + } } this._keyDuplicateCount = {}; }; @@ -15776,13 +16531,16 @@ ClippathManager.prototype.removeUnused = function () { _super.prototype.removeUnused.call(this); var newRefGroupsMap = {}; - for (var key in this._refGroups) { - var group = this._refGroups[key]; - if (!this.isDomUnused(group)) { - newRefGroupsMap[key] = group; - } - else if (group.parentNode) { - group.parentNode.removeChild(group); + var refGroups = this._refGroups; + for (var key in refGroups) { + if (refGroups.hasOwnProperty(key)) { + var group = refGroups[key]; + if (!this.isDomUnused(group)) { + newRefGroupsMap[key] = group; + } + else if (group.parentNode) { + group.parentNode.removeChild(group); + } } } this._refGroups = newRefGroupsMap; @@ -15842,10 +16600,11 @@ var offsetX = style.shadowOffsetX || 0; var offsetY = style.shadowOffsetY || 0; var blur = style.shadowBlur; - var color = style.shadowColor; + var normalizedColor = normalizeColor(style.shadowColor); domChild.setAttribute('dx', offsetX / scaleX + ''); domChild.setAttribute('dy', offsetY / scaleY + ''); - domChild.setAttribute('flood-color', color); + domChild.setAttribute('flood-color', normalizedColor.color); + domChild.setAttribute('flood-opacity', normalizedColor.opacity + ''); var stdDx = blur / 2 / scaleX; var stdDy = blur / 2 / scaleY; var stdDeviation = stdDx + ' ' + stdDy; @@ -15864,9 +16623,11 @@ return; } var shadowDomsPool = this._shadowDomPool; - for (var key in this._shadowDomMap) { - var dom = this._shadowDomMap[key]; - shadowDomsPool.push(dom); + var shadowDomMap = this._shadowDomMap; + for (var key in shadowDomMap) { + if (shadowDomMap.hasOwnProperty(key)) { + shadowDomsPool.push(shadowDomMap[key]); + } } this._shadowDomMap = {}; }; @@ -16005,7 +16766,9 @@ bgNode.setAttribute('x', 0); bgNode.setAttribute('y', 0); bgNode.setAttribute('id', 0); - bgNode.style.fill = backgroundColor; + var _a = normalizeColor(backgroundColor), color = _a.color, opacity = _a.opacity; + bgNode.setAttribute('fill', color); + bgNode.setAttribute('fill-opacity', opacity); this._backgroundRoot.appendChild(bgNode); this._backgroundNode = bgNode; }; @@ -16155,13 +16918,11 @@ }; SVGPainter.prototype.dispose = function () { this.root.innerHTML = ''; - this._svgRoot - = this._backgroundRoot - = this._svgDom - = this._backgroundNode - = this._viewport - = this.storage - = null; + this._svgRoot = + this._backgroundRoot = + this._svgDom = + this._backgroundNode = + this._viewport = this.storage = null; }; SVGPainter.prototype.clear = function () { var viewportNode = this._viewport; @@ -16240,7 +17001,7 @@ exports.getInstance = getInstance; exports.init = init; exports.matrix = matrix; - exports.morphPath = morphPath; + exports.morph = morphPath$1; exports.parseSVG = parseSVG; exports.path = path; exports.registerPainter = registerPainter; diff --git a/dist/zrender.js.map b/dist/zrender.js.map index b27bd0aa4..2b58a465e 100644 --- a/dist/zrender.js.map +++ b/dist/zrender.js.map @@ -1 +1 @@ -{"version":3,"file":"zrender.js","sources":["../src/core/env.ts","../src/core/util.ts","../src/core/vector.ts","../src/mixin/Draggable.ts","../src/core/Eventful.ts","../src/core/fourPointsTransform.ts","../src/core/dom.ts","../src/core/event.ts","../src/core/GestureMgr.ts","../src/Handler.ts","../src/core/timsort.ts","../src/graphic/constants.ts","../src/Storage.ts","../src/animation/requestAnimationFrame.ts","../src/animation/easing.ts","../src/animation/Clip.ts","../src/core/LRU.ts","../src/tool/color.ts","../src/animation/Animator.ts","../src/animation/Animation.ts","../src/dom/HandlerProxy.ts","../src/config.ts","../src/core/matrix.ts","../src/core/Transformable.ts","../src/core/Point.ts","../src/core/BoundingRect.ts","../src/contain/text.ts","../src/Element.ts","../src/graphic/Group.ts","../src/zrender.ts","../src/graphic/Displayable.ts","../src/core/curve.ts","../src/core/bbox.ts","../src/core/PathProxy.ts","../src/contain/line.ts","../src/contain/cubic.ts","../src/contain/quadratic.ts","../src/contain/util.ts","../src/contain/arc.ts","../src/contain/windingLine.ts","../src/contain/path.ts","../src/graphic/Path.ts","../src/tool/transformPath.ts","../src/tool/path.ts","../src/graphic/Image.ts","../src/graphic/shape/Circle.ts","../src/graphic/helper/roundRect.ts","../src/graphic/helper/subPixelOptimize.ts","../src/graphic/shape/Rect.ts","../src/graphic/shape/Ellipse.ts","../src/graphic/shape/Line.ts","../src/graphic/helper/smoothSpline.ts","../src/graphic/helper/smoothBezier.ts","../src/graphic/helper/poly.ts","../src/graphic/shape/Polygon.ts","../src/graphic/shape/Polyline.ts","../src/graphic/Gradient.ts","../src/graphic/LinearGradient.ts","../src/graphic/RadialGradient.ts","../src/graphic/TSpan.ts","../src/tool/parseXML.ts","../src/tool/parseSVG.ts","../src/graphic/helper/roundSector.ts","../src/graphic/shape/Sector.ts","../src/tool/morphPath.ts","../src/graphic/CompoundPath.ts","../src/graphic/IncrementalDisplayable.ts","../src/graphic/helper/image.ts","../src/graphic/helper/parseText.ts","../src/graphic/Text.ts","../src/graphic/shape/Arc.ts","../src/graphic/shape/BezierCurve.ts","../src/graphic/shape/Droplet.ts","../src/graphic/shape/Heart.ts","../src/graphic/shape/Isogon.ts","../src/graphic/shape/Ring.ts","../src/graphic/shape/Rose.ts","../src/graphic/shape/Star.ts","../src/graphic/shape/Trochoid.ts","../src/graphic/Pattern.ts","../src/core/OrientedBoundingRect.ts","../src/debug/showDebugDirtyRect.ts","../src/canvas/helper.ts","../src/graphic/helper/dashStyle.ts","../src/canvas/graphic.ts","../src/canvas/Layer.ts","../src/canvas/Painter.ts","../src/svg/core.ts","../src/core/arrayDiff.ts","../src/svg/graphic.ts","../src/svg/helper/Definable.ts","../src/svg/helper/GradientManager.ts","../src/core/WeakMap.ts","../src/svg/helper/PatternManager.ts","../src/svg/helper/ClippathManager.ts","../src/svg/helper/ShadowManager.ts","../src/svg/Painter.ts","../index.ts"],"sourcesContent":["declare const wx: {\n getSystemInfoSync: Function\n};\n\nclass Browser {\n firefox = false\n ie = false\n edge = false\n newEdge = false\n weChat = false\n version: string | number\n}\n\nclass Env {\n browser = new Browser()\n node = false\n wxa = false\n worker = false\n\n canvasSupported = false\n svgSupported = false\n touchEventsSupported = false\n pointerEventsSupported = false\n domSupported = false\n transformSupported = false\n transform3dSupported = false\n}\n\nconst env = new Env();\n\nif (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') {\n env.wxa = true;\n env.canvasSupported = true;\n env.touchEventsSupported = true;\n}\nelse if (typeof document === 'undefined' && typeof self !== 'undefined') {\n // In worker\n env.worker = true;\n env.canvasSupported = true;\n}\nelse if (typeof navigator === 'undefined') {\n // In node\n env.node = true;\n env.canvasSupported = true;\n env.svgSupported = true;\n}\nelse {\n detect(navigator.userAgent, env);\n}\n\n// Zepto.js\n// (c) 2010-2013 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\n\nfunction detect(ua: string, env: Env) {\n const browser = env.browser;\n const firefox = ua.match(/Firefox\\/([\\d.]+)/);\n const ie = ua.match(/MSIE\\s([\\d.]+)/)\n // IE 11 Trident/7.0; rv:11.0\n || ua.match(/Trident\\/.+?rv:(([\\d.]+))/);\n const edge = ua.match(/Edge?\\/([\\d.]+)/); // IE 12 and 12+\n\n const weChat = (/micromessenger/i).test(ua);\n\n if (firefox) {\n browser.firefox = true;\n browser.version = firefox[1];\n }\n if (ie) {\n browser.ie = true;\n browser.version = ie[1];\n }\n\n if (edge) {\n browser.edge = true;\n browser.version = edge[1];\n browser.newEdge = +edge[1].split('.')[0] > 18; \n }\n\n // It is difficult to detect WeChat in Win Phone precisely, because ua can\n // not be set on win phone. So we do not consider Win Phone.\n if (weChat) {\n browser.weChat = true;\n }\n\n env.canvasSupported = !!document.createElement('canvas').getContext;\n env.svgSupported = typeof SVGRect !== 'undefined';\n env.touchEventsSupported = 'ontouchstart' in window && !browser.ie && !browser.edge;\n env.pointerEventsSupported = 'onpointerdown' in window\n && (browser.edge || (browser.ie && +browser.version >= 11));\n env.domSupported = typeof document !== 'undefined';\n\n const style = document.documentElement.style;\n\n env.transform3dSupported = (\n // IE9 only supports transform 2D\n // transform 3D supported since IE10\n // we detect it by whether 'transition' is in style\n (browser.ie && 'transition' in style)\n // edge\n || browser.edge\n // webkit\n || (('WebKitCSSMatrix' in window) && ('m11' in new WebKitCSSMatrix()))\n // gecko-based browsers\n || 'MozPerspective' in style\n ) // Opera supports CSS transforms after version 12\n && !('OTransition' in style);\n\n // except IE 6-8 and very old firefox 2-3 & opera 10.1\n // other browsers all support `transform`\n env.transformSupported = env.transform3dSupported \n // transform 2D is supported in IE9\n || (browser.ie && +browser.version >= 9);\n\n}\n\n\nexport default env;\n","import { Dictionary, ArrayLike, KeyOfDistributive } from './types';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ImagePatternObject } from '../graphic/Pattern';\n\n\n// 用于处理merge时无法遍历Date等对象的问题\nconst BUILTIN_OBJECT: {[key: string]: boolean} = {\n '[object Function]': true,\n '[object RegExp]': true,\n '[object Date]': true,\n '[object Error]': true,\n '[object CanvasGradient]': true,\n '[object CanvasPattern]': true,\n // For node-canvas\n '[object Image]': true,\n '[object Canvas]': true\n};\n\nconst TYPED_ARRAY: {[key: string]: boolean} = {\n '[object Int8Array]': true,\n '[object Uint8Array]': true,\n '[object Uint8ClampedArray]': true,\n '[object Int16Array]': true,\n '[object Uint16Array]': true,\n '[object Int32Array]': true,\n '[object Uint32Array]': true,\n '[object Float32Array]': true,\n '[object Float64Array]': true\n};\n\nconst objToString = Object.prototype.toString;\n\nconst arrayProto = Array.prototype;\nconst nativeForEach = arrayProto.forEach;\nconst nativeFilter = arrayProto.filter;\nconst nativeSlice = arrayProto.slice;\nconst nativeMap = arrayProto.map;\n// In case some env may redefine the global variable `Function`.\nconst ctorFunction = function () {}.constructor;\nconst protoFunction = ctorFunction ? ctorFunction.prototype : null;\n\n// Avoid assign to an exported constiable, for transforming to cjs.\nconst methods: {[key: string]: Function} = {};\n\nexport function $override(name: string, fn: Function) {\n methods[name] = fn;\n}\n\nlet idStart = 0x0907;\n/**\n * Generate unique id\n */\nexport function guid(): number {\n return idStart++;\n}\n\nexport function logError(...args: any[]) {\n if (typeof console !== 'undefined') {\n console.error.apply(console, args);\n }\n}\n/**\n * Those data types can be cloned:\n * Plain object, Array, TypedArray, number, string, null, undefined.\n * Those data types will be assgined using the orginal data:\n * BUILTIN_OBJECT\n * Instance of user defined class will be cloned to a plain object, without\n * properties in prototype.\n * Other data types is not supported (not sure what will happen).\n *\n * Caution: do not support clone Date, for performance consideration.\n * (There might be a large number of date in `series.data`).\n * So date should not be modified in and out of echarts.\n */\nexport function clone(source: T): T {\n if (source == null || typeof source !== 'object') {\n return source;\n }\n\n let result = source as any;\n const typeStr = objToString.call(source);\n\n if (typeStr === '[object Array]') {\n if (!isPrimitive(source)) {\n result = [] as any;\n for (let i = 0, len = (source as any[]).length; i < len; i++) {\n result[i] = clone((source as any[])[i]);\n }\n }\n }\n else if (TYPED_ARRAY[typeStr]) {\n if (!isPrimitive(source)) {\n /* eslint-disable-next-line */\n const Ctor = source.constructor as typeof Float32Array;\n if (Ctor.from) {\n result = Ctor.from(source as Float32Array);\n }\n else {\n result = new Ctor((source as Float32Array).length);\n for (let i = 0, len = (source as Float32Array).length; i < len; i++) {\n result[i] = clone((source as Float32Array)[i]);\n }\n }\n }\n }\n else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) {\n result = {} as any;\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n result[key] = clone(source[key]);\n }\n }\n }\n\n return result;\n}\n\nexport function merge<\n T extends Dictionary,\n S extends Dictionary\n>(target: T, source: S, overwrite?: boolean): T & S;\nexport function merge<\n T extends any,\n S extends any\n>(target: T, source: S, overwrite?: boolean): T | S;\nexport function merge(target: any, source: any, overwrite?: boolean): any {\n // We should escapse that source is string\n // and enter for ... in ...\n if (!isObject(source) || !isObject(target)) {\n return overwrite ? clone(source) : target;\n }\n\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n const targetProp = target[key];\n const sourceProp = source[key];\n\n if (isObject(sourceProp)\n && isObject(targetProp)\n && !isArray(sourceProp)\n && !isArray(targetProp)\n && !isDom(sourceProp)\n && !isDom(targetProp)\n && !isBuiltInObject(sourceProp)\n && !isBuiltInObject(targetProp)\n && !isPrimitive(sourceProp)\n && !isPrimitive(targetProp)\n ) {\n // 如果需要递归覆盖,就递归调用merge\n merge(targetProp, sourceProp, overwrite);\n }\n else if (overwrite || !(key in target)) {\n // 否则只处理overwrite为true,或者在目标对象中没有此属性的情况\n // NOTE,在 target[key] 不存在的时候也是直接覆盖\n target[key] = clone(source[key]);\n }\n }\n }\n\n return target;\n}\n\n/**\n * @param targetAndSources The first item is target, and the rests are source.\n * @param overwrite\n * @return Merged result\n */\nexport function mergeAll(targetAndSources: any[], overwrite?: boolean): any {\n let result = targetAndSources[0];\n for (let i = 1, len = targetAndSources.length; i < len; i++) {\n result = merge(result, targetAndSources[i], overwrite);\n }\n return result;\n}\n\nexport function extend<\n T extends Dictionary,\n S extends Dictionary\n>(target: T, source: S): T & S {\n // @ts-ignore\n if (Object.assign) {\n // @ts-ignore\n Object.assign(target, source);\n }\n else {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n (target as S & T)[key] = (source as T & S)[key];\n }\n }\n }\n return target as T & S;\n}\n\nexport function defaults<\n T extends Dictionary,\n S extends Dictionary\n>(target: T, source: S, overlay?: boolean): T & S {\n const keysArr = keys(source);\n for (let i = 0; i < keysArr.length; i++) {\n let key = keysArr[i];\n if ((overlay ? source[key] != null : (target as T & S)[key] == null)) {\n (target as S & T)[key] = (source as T & S)[key];\n }\n }\n return target as T & S;\n}\n\nexport const createCanvas = function (): HTMLCanvasElement {\n return methods.createCanvas();\n};\n\nmethods.createCanvas = function (): HTMLCanvasElement {\n return document.createElement('canvas');\n};\n\n/**\n * 查询数组中元素的index\n */\nexport function indexOf(array: T[] | readonly T[] | ArrayLike, value: T): number {\n if (array) {\n if ((array as T[]).indexOf) {\n return (array as T[]).indexOf(value);\n }\n for (let i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n }\n return -1;\n}\n\n/**\n * 构造类继承关系\n *\n * @param clazz 源类\n * @param baseClazz 基类\n */\nexport function inherits(clazz: Function, baseClazz: Function) {\n const clazzPrototype = clazz.prototype;\n function F() {}\n F.prototype = baseClazz.prototype;\n clazz.prototype = new (F as any)();\n\n for (let prop in clazzPrototype) {\n if (clazzPrototype.hasOwnProperty(prop)) {\n clazz.prototype[prop] = clazzPrototype[prop];\n }\n }\n clazz.prototype.constructor = clazz;\n (clazz as any).superClass = baseClazz;\n}\n\nexport function mixin(target: T | Function, source: S | Function, override?: boolean) {\n target = 'prototype' in target ? target.prototype : target;\n source = 'prototype' in source ? source.prototype : source;\n // If build target is ES6 class. prototype methods is not enumerable. Use getOwnPropertyNames instead\n // TODO: Determine if source is ES6 class?\n if (Object.getOwnPropertyNames) {\n const keyList = Object.getOwnPropertyNames(source);\n for (let i = 0; i < keyList.length; i++) {\n const key = keyList[i];\n if (key !== 'constructor') {\n if ((override ? (source as any)[key] != null : (target as any)[key] == null)) {\n (target as any)[key] = (source as any)[key];\n }\n }\n }\n }\n else {\n defaults(target, source, override);\n }\n}\n\n/**\n * Consider typed array.\n * @param data\n */\nexport function isArrayLike(data: any): data is ArrayLike {\n if (!data) {\n return false;\n }\n if (typeof data === 'string') {\n return false;\n }\n return typeof data.length === 'number';\n}\n\n/**\n * 数组或对象遍历\n */\nexport function each | any[] | readonly any[] | ArrayLike, Context>(\n arr: I,\n cb: (\n this: Context,\n // Use unknown to avoid to infer to \"any\", which may disable typo check.\n value: I extends (infer T)[] | readonly (infer T)[] | ArrayLike ? T\n // Use Dictionary may cause infer fail when I is an interface.\n // So here use a Record to infer type.\n : I extends Dictionary ? I extends Record ? T : unknown : unknown,\n index?: I extends any[] | readonly any[] | ArrayLike ? number : keyof I & string, // keyof Dictionary will return number | string\n arr?: I\n ) => void,\n context?: Context\n) {\n if (!(arr && cb)) {\n return;\n }\n if ((arr as any).forEach && (arr as any).forEach === nativeForEach) {\n (arr as any).forEach(cb, context);\n }\n else if (arr.length === +arr.length) {\n for (let i = 0, len = arr.length; i < len; i++) {\n // FIXME: should the elided item be travelled? like `[33,,55]`.\n cb.call(context, (arr as any[])[i], i as any, arr);\n }\n }\n else {\n for (let key in arr) {\n if (arr.hasOwnProperty(key)) {\n cb.call(context, (arr as Dictionary)[key], key as any, arr);\n }\n }\n }\n}\n\n/**\n * Array mapping.\n * @typeparam T Type in Array\n * @typeparam R Type Returned\n * @return Must be an array.\n */\nexport function map(\n arr: readonly T[],\n cb: (this: Context, val: T, index?: number, arr?: readonly T[]) => R,\n context?: Context\n): R[] {\n // Take the same behavior with lodash when !arr and !cb,\n // which might be some common sense.\n if (!arr) {\n return [];\n }\n if (!cb) {\n return slice(arr) as unknown[] as R[];\n }\n if (arr.map && arr.map === nativeMap) {\n return arr.map(cb, context);\n }\n else {\n const result = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n // FIXME: should the elided item be travelled, like `[33,,55]`.\n result.push(cb.call(context, arr[i], i, arr));\n }\n return result;\n }\n}\n\nexport function reduce(\n arr: readonly T[],\n cb: (this: Context, previousValue: S, currentValue: T, currentIndex?: number, arr?: readonly T[]) => S,\n memo?: S,\n context?: Context\n): S {\n if (!(arr && cb)) {\n return;\n }\n for (let i = 0, len = arr.length; i < len; i++) {\n memo = cb.call(context, memo, arr[i], i, arr);\n }\n return memo;\n}\n\n/**\n * Array filtering.\n * @return Must be an array.\n */\nexport function filter(\n arr: readonly T[],\n cb: (this: Context, value: T, index: number, arr: readonly T[]) => boolean,\n context?: Context\n): T[] {\n // Take the same behavior with lodash when !arr and !cb,\n // which might be some common sense.\n if (!arr) {\n return [];\n }\n if (!cb) {\n return slice(arr);\n }\n if (arr.filter && arr.filter === nativeFilter) {\n return arr.filter(cb, context);\n }\n else {\n const result = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n // FIXME: should the elided items be travelled? like `[33,,55]`.\n if (cb.call(context, arr[i], i, arr)) {\n result.push(arr[i]);\n }\n }\n return result;\n }\n}\n\n/**\n * 数组项查找\n */\nexport function find(\n arr: readonly T[],\n cb: (this: Context, value: T, index?: number, arr?: readonly T[]) => boolean,\n context?: Context\n): T {\n if (!(arr && cb)) {\n return;\n }\n for (let i = 0, len = arr.length; i < len; i++) {\n if (cb.call(context, arr[i], i, arr)) {\n return arr[i];\n }\n }\n}\n\n/**\n * Get all object keys\n *\n * Will return an empty array if obj is null/undefined\n */\nexport function keys(obj: T): (KeyOfDistributive & string)[] {\n if (!obj) {\n return [];\n }\n // Return type should be `keyof T` but exclude `number`, becuase\n // `Object.keys` only return string rather than `number | string`.\n type TKeys = KeyOfDistributive & string;\n if (Object.keys) {\n return Object.keys(obj) as TKeys[];\n }\n let keyList: TKeys[] = [];\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n keyList.push(key as any);\n }\n }\n return keyList;\n}\n\n\n// Remove this type in returned function. Or it will conflicts wicth callback with given context. Like Eventful.\n// According to lib.es5.d.ts\n/* eslint-disable max-len*/\nexport type Bind1 = F extends (this: Ctx, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind2 = F extends (this: Ctx, a: T1, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind3 = F extends (this: Ctx, a: T1, b: T2, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind4 = F extends (this: Ctx, a: T1, b: T2, c: T3, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind5 = F extends (this: Ctx, a: T1, b: T2, c: T3, d: T4, ...args: infer A) => infer R ? (...args: A) => R : unknown;\ntype BindFunc = (this: Ctx, ...arg: any[]) => any\n\ninterface FunctionBind {\n , Ctx>(func: F, ctx: Ctx): Bind1\n , Ctx, T1 extends Parameters[0]>(func: F, ctx: Ctx, a: T1): Bind2\n , Ctx, T1 extends Parameters[0], T2 extends Parameters[1]>(func: F, ctx: Ctx, a: T1, b: T2): Bind3\n , Ctx, T1 extends Parameters[0], T2 extends Parameters[1], T3 extends Parameters[2]>(func: F, ctx: Ctx, a: T1, b: T2, c: T3): Bind4\n , Ctx, T1 extends Parameters[0], T2 extends Parameters[1], T3 extends Parameters[2], T4 extends Parameters[3]>(func: F, ctx: Ctx, a: T1, b: T2, c: T3, d: T4): Bind5\n}\nfunction bindPolyfill any>(\n func: Fn, context: Ctx, ...args: any[]\n): (...args: Parameters) => ReturnType {\n return function (this: Ctx) {\n return func.apply(context, args.concat(nativeSlice.call(arguments)));\n };\n}\nexport const bind: FunctionBind = (protoFunction && isFunction(protoFunction.bind))\n ? protoFunction.call.bind(protoFunction.bind)\n : bindPolyfill;\n\nexport type Curry1 = F extends (a: T1, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Curry2 = F extends (a: T1, b: T2, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Curry3 = F extends (a: T1, b: T2, c: T3, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Curry4 = F extends (a: T1, b: T2, c: T3, d: T4, ...args: infer A) => infer R ? (...args: A) => R : unknown;\ntype CurryFunc = (...arg: any[]) => any\n\nfunction curry[0]>(func: F, a: T1): Curry1\nfunction curry[0], T2 extends Parameters[1]>(func: F, a: T1, b: T2): Curry2\nfunction curry[0], T2 extends Parameters[1], T3 extends Parameters[2]>(func: F, a: T1, b: T2, c: T3): Curry3\nfunction curry[0], T2 extends Parameters[1], T3 extends Parameters[2], T4 extends Parameters[3]>(func: F, a: T1, b: T2, c: T3, d: T4): Curry4\nfunction curry(func: Function, ...args: any[]): Function {\n return function (this: any) {\n return func.apply(this, args.concat(nativeSlice.call(arguments)));\n };\n}\nexport {curry};\n/* eslint-enable max-len*/\n\nexport function isArray(value: any): value is any[] {\n if (Array.isArray) {\n return Array.isArray(value);\n }\n return objToString.call(value) === '[object Array]';\n}\n\nexport function isFunction(value: any): value is Function {\n return typeof value === 'function';\n}\n\nexport function isString(value: any): value is string {\n // Faster than `objToString.call` several times in chromium and webkit.\n // And `new String()` is rarely used.\n return typeof value === 'string';\n}\n\nexport function isStringSafe(value: any): value is string {\n return objToString.call(value) === '[object String]';\n}\n\nexport function isNumber(value: any): value is number {\n // Faster than `objToString.call` several times in chromium and webkit.\n // And `new Number()` is rarely used.\n return typeof value === 'number';\n}\n\n// Usage: `isObject(xxx)` or `isObject(SomeType)(xxx)`\n// Generic T can be used to avoid \"ts type gruards\" casting the `value` from its original\n// type `Object` implicitly so that loose its original type info in the subsequent code.\nexport function isObject(value: T): value is (object & T) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n const type = typeof value;\n return type === 'function' || (!!value && type === 'object');\n}\n\nexport function isBuiltInObject(value: any): boolean {\n return !!BUILTIN_OBJECT[objToString.call(value)];\n}\n\nexport function isTypedArray(value: any): boolean {\n return !!TYPED_ARRAY[objToString.call(value)];\n}\n\nexport function isDom(value: any): value is HTMLElement {\n return typeof value === 'object'\n && typeof value.nodeType === 'number'\n && typeof value.ownerDocument === 'object';\n}\n\nexport function isGradientObject(value: any): value is GradientObject {\n return (value as GradientObject).colorStops != null;\n}\n\nexport function isImagePatternObject(value: any): value is ImagePatternObject {\n return (value as ImagePatternObject).image != null;\n}\n\nexport function isRegExp(value: unknown): value is RegExp {\n return objToString.call(value) === '[object RegExp]';\n}\n\n/**\n * Whether is exactly NaN. Notice isNaN('a') returns true.\n */\nexport function eqNaN(value: any): boolean {\n /* eslint-disable-next-line no-self-compare */\n return value !== value;\n}\n\n/**\n * If value1 is not null, then return value1, otherwise judget rest of values.\n * Low performance.\n * @return Final value\n */\nexport function retrieve(...args: T[]): T {\n for (let i = 0, len = args.length; i < len; i++) {\n if (args[i] != null) {\n return args[i];\n }\n }\n}\n\nexport function retrieve2(value0: T, value1: R): T | R {\n return value0 != null\n ? value0\n : value1;\n}\n\nexport function retrieve3(value0: T, value1: R, value2: W): T | R | W {\n return value0 != null\n ? value0\n : value1 != null\n ? value1\n : value2;\n}\n\ntype SliceParams = Parameters;\nexport function slice(arr: ArrayLike, ...args: SliceParams): T[] {\n return nativeSlice.apply(arr, args as any[]);\n}\n\n/**\n * Normalize css liked array configuration\n * e.g.\n * 3 => [3, 3, 3, 3]\n * [4, 2] => [4, 2, 4, 2]\n * [4, 3, 2] => [4, 3, 2, 3]\n */\nexport function normalizeCssArray(val: number | number[]) {\n if (typeof (val) === 'number') {\n return [val, val, val, val];\n }\n const len = val.length;\n if (len === 2) {\n // vertical | horizontal\n return [val[0], val[1], val[0], val[1]];\n }\n else if (len === 3) {\n // top | horizontal | bottom\n return [val[0], val[1], val[2], val[1]];\n }\n return val;\n}\n\nexport function assert(condition: any, message?: string) {\n if (!condition) {\n throw new Error(message);\n }\n}\n\n/**\n * @param str string to be trimed\n * @return trimed string\n */\nexport function trim(str: string): string {\n if (str == null) {\n return null;\n }\n else if (typeof str.trim === 'function') {\n return str.trim();\n }\n else {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n}\n\nconst primitiveKey = '__ec_primitive__';\n/**\n * Set an object as primitive to be ignored traversing children in clone or merge\n */\nexport function setAsPrimitive(obj: any) {\n obj[primitiveKey] = true;\n}\n\nexport function isPrimitive(obj: any): boolean {\n return obj[primitiveKey];\n}\n\n\n/**\n * @constructor\n * @param {Object} obj Only apply `ownProperty`.\n */\nexport class HashMap {\n\n data: {[key in KEY]: T} = {} as {[key in KEY]: T};\n\n constructor(obj?: HashMap | { [key in KEY]?: T } | KEY[]) {\n const isArr = isArray(obj);\n // Key should not be set on this, otherwise\n // methods get/set/... may be overrided.\n this.data = {} as {[key in KEY]: T};\n const thisMap = this;\n\n (obj instanceof HashMap)\n ? obj.each(visit)\n : (obj && each(obj, visit));\n\n function visit(value: any, key: any) {\n isArr ? thisMap.set(value, key) : thisMap.set(key, value);\n }\n }\n\n // Do not provide `has` method to avoid defining what is `has`.\n // (We usually treat `null` and `undefined` as the same, different\n // from ES6 Map).\n get(key: KEY): T {\n return this.data.hasOwnProperty(key) ? this.data[key] : null;\n }\n set(key: KEY, value: T): T {\n // Comparing with invocation chaining, `return value` is more commonly\n // used in this case: `const someVal = map.set('a', genVal());`\n return (this.data[key] = value);\n }\n // Although util.each can be performed on this hashMap directly, user\n // should not use the exposed keys, who are prefixed.\n each(\n cb: (this: Context, value?: T, key?: KEY) => void,\n context?: Context\n ) {\n for (let key in this.data) {\n if (this.data.hasOwnProperty(key)) {\n cb.call(context, this.data[key], key);\n }\n }\n }\n keys(): KEY[] {\n return keys(this.data);\n }\n // Do not use this method if performance sensitive.\n removeKey(key: KEY) {\n delete this.data[key];\n }\n}\n\nexport function createHashMap(\n obj?: HashMap | { [key in KEY]?: T } | KEY[]\n) {\n return new HashMap(obj);\n}\n\nexport function concatArray(a: ArrayLike, b: ArrayLike): ArrayLike {\n const newArray = new (a as any).constructor(a.length + b.length);\n for (let i = 0; i < a.length; i++) {\n newArray[i] = a[i];\n }\n const offset = a.length;\n for (let i = 0; i < b.length; i++) {\n newArray[i + offset] = b[i];\n }\n return newArray;\n}\n\n/**\n * Change prototype of object.\n * It will replace the prototype if Object.setPrototypeOf is supported by browser.\n * Otherwise it will create a new object and return.\n */\n// export function changePrototype(obj: T, proto: object): T {\n// if (Object.setPrototypeOf) {\n// Object.setPrototypeOf(obj, proto);\n// return obj;\n// }\n// else {\n// const StyleCtor = function () {};\n// StyleCtor.prototype = proto;\n// const newObj = new (StyleCtor as any)();\n// extend(newObj, obj);\n// return newObj;\n// }\n// }\n\n\nexport function createObject(proto?: object, properties?: T): T {\n // Performance of Object.create\n // https://jsperf.com/style-strategy-proto-or-others\n let obj: T;\n if (Object.create) {\n obj = Object.create(proto);\n }\n else {\n const StyleCtor = function () {};\n StyleCtor.prototype = proto;\n obj = new (StyleCtor as any)();\n }\n if (properties) {\n extend(obj, properties);\n }\n\n return obj;\n}\n\nexport function hasOwn(own: object, prop: string): boolean {\n return own.hasOwnProperty(prop);\n}\n\nexport function noop() {}\n","/**\n * @deprecated\n * Use zrender.Point class instead\n */\nimport { MatrixArray } from './matrix';\n\n/* global Float32Array */\n\n// const ArrayCtor = typeof Float32Array === 'undefined'\n// ? Array\n// : Float32Array;\n\nexport type VectorArray = number[]\n/**\n * 创建一个向量\n */\nexport function create(x?: number, y?: number): VectorArray {\n if (x == null) {\n x = 0;\n }\n if (y == null) {\n y = 0;\n }\n return [x, y];\n}\n\n/**\n * 复制向量数据\n */\nexport function copy(out: T, v: VectorArray): T {\n out[0] = v[0];\n out[1] = v[1];\n return out;\n}\n\n/**\n * 克隆一个向量\n */\nexport function clone(v: VectorArray): VectorArray {\n return [v[0], v[1]];\n}\n\n/**\n * 设置向量的两个项\n */\nexport function set(out: T, a: number, b: number): T {\n out[0] = a;\n out[1] = b;\n return out;\n}\n\n/**\n * 向量相加\n */\nexport function add(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = v1[0] + v2[0];\n out[1] = v1[1] + v2[1];\n return out;\n}\n\n/**\n * 向量缩放后相加\n */\nexport function scaleAndAdd(out: T, v1: VectorArray, v2: VectorArray, a: number): T {\n out[0] = v1[0] + v2[0] * a;\n out[1] = v1[1] + v2[1] * a;\n return out;\n}\n\n/**\n * 向量相减\n */\nexport function sub(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n return out;\n}\n\n/**\n * 向量长度\n */\nexport function len(v: VectorArray): number {\n return Math.sqrt(lenSquare(v));\n}\nexport const length = len;\n\n/**\n * 向量长度平方\n */\nexport function lenSquare(v: VectorArray): number {\n return v[0] * v[0] + v[1] * v[1];\n}\nexport const lengthSquare = lenSquare;\n\n/**\n * 向量乘法\n */\nexport function mul(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = v1[0] * v2[0];\n out[1] = v1[1] * v2[1];\n return out;\n}\n\n/**\n * 向量除法\n */\nexport function div(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = v1[0] / v2[0];\n out[1] = v1[1] / v2[1];\n return out;\n}\n\n/**\n * 向量点乘\n */\nexport function dot(v1: VectorArray, v2: VectorArray) {\n return v1[0] * v2[0] + v1[1] * v2[1];\n}\n\n/**\n * 向量缩放\n */\nexport function scale(out: T, v: VectorArray, s: number): T {\n out[0] = v[0] * s;\n out[1] = v[1] * s;\n return out;\n}\n\n/**\n * 向量归一化\n */\nexport function normalize(out: T, v: VectorArray): T {\n const d = len(v);\n if (d === 0) {\n out[0] = 0;\n out[1] = 0;\n }\n else {\n out[0] = v[0] / d;\n out[1] = v[1] / d;\n }\n return out;\n}\n\n/**\n * 计算向量间距离\n */\nexport function distance(v1: VectorArray, v2: VectorArray): number {\n return Math.sqrt(\n (v1[0] - v2[0]) * (v1[0] - v2[0])\n + (v1[1] - v2[1]) * (v1[1] - v2[1])\n );\n}\nexport const dist = distance;\n\n/**\n * 向量距离平方\n */\nexport function distanceSquare(v1: VectorArray, v2: VectorArray): number {\n return (v1[0] - v2[0]) * (v1[0] - v2[0])\n + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\nexport const distSquare = distanceSquare;\n\n/**\n * 求负向量\n */\nexport function negate(out: T, v: VectorArray): T {\n out[0] = -v[0];\n out[1] = -v[1];\n return out;\n}\n\n/**\n * 插值两个点\n */\nexport function lerp(out: T, v1: VectorArray, v2: VectorArray, t: number): T {\n out[0] = v1[0] + t * (v2[0] - v1[0]);\n out[1] = v1[1] + t * (v2[1] - v1[1]);\n return out;\n}\n\n/**\n * 矩阵左乘向量\n */\nexport function applyTransform(out: T, v: VectorArray, m: MatrixArray): T {\n const x = v[0];\n const y = v[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n\n/**\n * 求两个向量最小值\n */\nexport function min(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = Math.min(v1[0], v2[0]);\n out[1] = Math.min(v1[1], v2[1]);\n return out;\n}\n\n/**\n * 求两个向量最大值\n */\nexport function max(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = Math.max(v1[0], v2[0]);\n out[1] = Math.max(v1[1], v2[1]);\n return out;\n}\n","import Handler from '../Handler';\nimport Element, { ElementEvent } from '../Element';\nimport Displayable from '../graphic/Displayable';\n\nclass Param {\n\n target: Element\n topTarget: Element\n\n constructor(target: Element, e?: ElementEvent) {\n this.target = target;\n this.topTarget = e && e.topTarget;\n }\n}\n\n// FIXME Draggable on element which has parent rotation or scale\nexport default class Draggable {\n\n handler: Handler\n\n _draggingTarget: Element\n _dropTarget: Element\n\n _x: number\n _y: number\n\n constructor(handler: Handler) {\n this.handler = handler;\n\n handler.on('mousedown', this._dragStart, this);\n handler.on('mousemove', this._drag, this);\n handler.on('mouseup', this._dragEnd, this);\n // `mosuemove` and `mouseup` can be continue to fire when dragging.\n // See [DRAG_OUTSIDE] in `Handler.js`. So we do not need to trigger\n // `_dragEnd` when globalout. That would brings better user experience.\n // this.on('globalout', this._dragEnd, this);\n\n // this._dropTarget = null;\n // this._draggingTarget = null;\n\n // this._x = 0;\n // this._y = 0;\n }\n\n _dragStart(e: ElementEvent) {\n let draggingTarget = e.target;\n // Find if there is draggable in the ancestor\n while (draggingTarget && !draggingTarget.draggable) {\n draggingTarget = draggingTarget.parent;\n }\n if (draggingTarget) {\n this._draggingTarget = draggingTarget;\n draggingTarget.dragging = true;\n this._x = e.offsetX;\n this._y = e.offsetY;\n\n this.handler.dispatchToElement(\n new Param(draggingTarget, e), 'dragstart', e.event\n );\n }\n }\n\n _drag(e: ElementEvent) {\n const draggingTarget = this._draggingTarget;\n if (draggingTarget) {\n\n const x = e.offsetX;\n const y = e.offsetY;\n\n const dx = x - this._x;\n const dy = y - this._y;\n this._x = x;\n this._y = y;\n\n draggingTarget.drift(dx, dy, e);\n this.handler.dispatchToElement(\n new Param(draggingTarget, e), 'drag', e.event\n );\n\n const dropTarget = this.handler.findHover(\n x, y, draggingTarget as Displayable // PENDING\n ).target;\n const lastDropTarget = this._dropTarget;\n this._dropTarget = dropTarget;\n\n if (draggingTarget !== dropTarget) {\n if (lastDropTarget && dropTarget !== lastDropTarget) {\n this.handler.dispatchToElement(\n new Param(lastDropTarget, e), 'dragleave', e.event\n );\n }\n if (dropTarget && dropTarget !== lastDropTarget) {\n this.handler.dispatchToElement(\n new Param(dropTarget, e), 'dragenter', e.event\n );\n }\n }\n }\n }\n\n _dragEnd(e: ElementEvent) {\n const draggingTarget = this._draggingTarget;\n\n if (draggingTarget) {\n draggingTarget.dragging = false;\n }\n\n this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragend', e.event);\n\n if (this._dropTarget) {\n this.handler.dispatchToElement(new Param(this._dropTarget, e), 'drop', e.event);\n }\n\n this._draggingTarget = null;\n this._dropTarget = null;\n }\n\n}","// Return true to cancel bubble\nexport type EventCallback = (\n this: CbThis, eventParam: EvtParam, ...args: unknown[]\n) => boolean | void\nexport type EventQuery = string | Object\n\ntype CbThis = unknown extends Ctx ? Impl : Ctx;\n\ntype EventHandler = {\n h: EventCallback\n ctx: CbThis\n query: EventQuery\n\n callAtLast: boolean\n}\n\ntype DefaultEventDefinition = {[eventName: string]: unknown};\n\nexport interface EventProcessor {\n normalizeQuery?: (query: EventQuery) => EventQuery\n filter?: (eventType: keyof EvtDef, query: EventQuery) => boolean\n afterTrigger?: (eventType: keyof EvtDef) => void\n}\n\n/**\n * Event dispatcher.\n *\n * Event can be defined in EvtDef to enable type check. For example:\n * ```ts\n * interface FooEvents {\n * // key: event name, value: the first event param in `trigger` and `callback`.\n * myevent: {\n * aa: string;\n * bb: number;\n * };\n * }\n * class Foo extends Eventful {\n * fn() {\n * // Type check of event name and the first event param is enabled here.\n * this.trigger('myevent', {aa: 'xx', bb: 3});\n * }\n * }\n * let foo = new Foo();\n * // Type check of event name and the first event param is enabled here.\n * foo.on('myevent', (eventParam) => { ... });\n * ```\n *\n * @param eventProcessor The object eventProcessor is the scope when\n * `eventProcessor.xxx` called.\n * @param eventProcessor.normalizeQuery\n * param: {string|Object} Raw query.\n * return: {string|Object} Normalized query.\n * @param eventProcessor.filter Event will be dispatched only\n * if it returns `true`.\n * param: {string} eventType\n * param: {string|Object} query\n * return: {boolean}\n * @param eventProcessor.afterTrigger Called after all handlers called.\n * param: {string} eventType\n */\nexport default class Eventful {\n\n private _$handlers: {[key: string]: EventHandler[]}\n\n protected _$eventProcessor: EventProcessor\n\n constructor(eventProcessors?: EventProcessor) {\n if (eventProcessors) {\n this._$eventProcessor = eventProcessors;\n }\n }\n\n on(\n event: EvtNm,\n handler: EventCallback,\n context?: Ctx\n ): this\n on(\n event: EvtNm,\n query: EventQuery,\n handler: EventCallback,\n context?: Ctx\n ): this\n /**\n * Bind a handler.\n *\n * @param event The event name.\n * @param Condition used on event filter.\n * @param handler The event handler.\n * @param context\n */\n on(\n event: EvtNm,\n query: EventQuery | EventCallback,\n handler?: EventCallback | Ctx,\n context?: Ctx\n ): this {\n if (!this._$handlers) {\n this._$handlers = {};\n }\n\n const _h = this._$handlers;\n\n if (typeof query === 'function') {\n context = handler as Ctx;\n handler = query as EventCallback;\n query = null;\n }\n\n if (!handler || !event) {\n return this;\n }\n\n const eventProcessor = this._$eventProcessor;\n if (query != null && eventProcessor && eventProcessor.normalizeQuery) {\n query = eventProcessor.normalizeQuery(query);\n }\n\n if (!_h[event as string]) {\n _h[event as string] = [];\n }\n\n for (let i = 0; i < _h[event as string].length; i++) {\n if (_h[event as string][i].h === handler) {\n return this;\n }\n }\n\n const wrap: EventHandler = {\n h: handler as EventCallback,\n query: query,\n ctx: (context || this) as CbThis,\n // FIXME\n // Do not publish this feature util it is proved that it makes sense.\n callAtLast: (handler as any).zrEventfulCallAtLast\n };\n\n const lastIndex = _h[event as string].length - 1;\n const lastWrap = _h[event as string][lastIndex];\n (lastWrap && lastWrap.callAtLast)\n ? _h[event as string].splice(lastIndex, 0, wrap)\n : _h[event as string].push(wrap);\n\n return this;\n }\n\n /**\n * Whether any handler has bound.\n */\n isSilent(eventName: keyof EvtDef): boolean {\n const _h = this._$handlers;\n return !_h || !_h[eventName as string] || !_h[eventName as string].length;\n }\n\n /**\n * Unbind a event.\n *\n * @param eventType The event name.\n * If no `event` input, \"off\" all listeners.\n * @param handler The event handler.\n * If no `handler` input, \"off\" all listeners of the `event`.\n */\n off(eventType?: keyof EvtDef, handler?: Function): this {\n const _h = this._$handlers;\n\n if (!_h) {\n return this;\n }\n\n if (!eventType) {\n this._$handlers = {};\n return this;\n }\n\n if (handler) {\n if (_h[eventType as string]) {\n const newList = [];\n for (let i = 0, l = _h[eventType as string].length; i < l; i++) {\n if (_h[eventType as string][i].h !== handler) {\n newList.push(_h[eventType as string][i]);\n }\n }\n _h[eventType as string] = newList;\n }\n\n if (_h[eventType as string] && _h[eventType as string].length === 0) {\n delete _h[eventType as string];\n }\n }\n else {\n delete _h[eventType as string];\n }\n\n return this;\n }\n\n /**\n * Dispatch a event.\n *\n * @param {string} eventType The event name.\n */\n trigger(eventType: keyof EvtDef, eventParam?: EvtDef[keyof EvtDef], ...args: any[]): this;\n trigger(eventType: keyof EvtDef, ...args: any[]): this {\n if (!this._$handlers) {\n return this;\n }\n\n const _h = this._$handlers[eventType as string];\n const eventProcessor = this._$eventProcessor;\n\n if (_h) {\n const argLen = args.length;\n\n const len = _h.length;\n for (let i = 0; i < len; i++) {\n const hItem = _h[i];\n if (eventProcessor\n && eventProcessor.filter\n && hItem.query != null\n && !eventProcessor.filter(eventType, hItem.query)\n ) {\n continue;\n }\n\n // Optimize advise from backbone\n switch (argLen) {\n case 0:\n // @ts-ignore\n hItem.h.call(hItem.ctx);\n break;\n case 1:\n hItem.h.call(hItem.ctx, args[0]);\n break;\n case 2:\n hItem.h.call(hItem.ctx, args[0], args[1]);\n break;\n default:\n // have more than 2 given arguments\n hItem.h.apply(hItem.ctx, args);\n break;\n }\n }\n }\n\n eventProcessor && eventProcessor.afterTrigger\n && eventProcessor.afterTrigger(eventType);\n\n return this;\n }\n\n /**\n * Dispatch a event with context, which is specified at the last parameter.\n *\n * @param {string} type The event name.\n */\n triggerWithContext(type: keyof EvtDef) {\n if (!this._$handlers) {\n return this;\n }\n\n const _h = this._$handlers[type as string];\n const eventProcessor = this._$eventProcessor;\n\n if (_h) {\n const args: any = arguments;\n const argLen = args.length;\n const ctx = args[argLen - 1];\n\n const len = _h.length;\n for (let i = 0; i < len; i++) {\n const hItem = _h[i];\n if (eventProcessor\n && eventProcessor.filter\n && hItem.query != null\n && !eventProcessor.filter(type, hItem.query)\n ) {\n continue;\n }\n\n // Optimize advise from backbone\n switch (argLen) {\n case 0:\n // @ts-ignore\n hItem.h.call(ctx);\n break;\n case 1:\n hItem.h.call(ctx, args[0]);\n break;\n case 2:\n hItem.h.call(ctx, args[0], args[1]);\n break;\n default:\n // have more than 2 given arguments\n hItem.h.apply(ctx, args.slice(1, argLen - 1));\n break;\n }\n }\n }\n\n eventProcessor && eventProcessor.afterTrigger\n && eventProcessor.afterTrigger(type);\n\n return this;\n }\n\n}\n","/**\n * The algoritm is learnt from\n * https://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * And we made some optimization for matrix inversion.\n * Other similar approaches:\n * \"cv::getPerspectiveTransform\", \"Direct Linear Transformation\".\n */\n\nconst LN2 = Math.log(2);\n\nfunction determinant(\n rows: number[][],\n rank: number,\n rowStart: number,\n rowMask: number,\n colMask: number,\n detCache: {[key: string]: number}\n) {\n const cacheKey = rowMask + '-' + colMask;\n const fullRank = rows.length;\n\n if (detCache.hasOwnProperty(cacheKey)) {\n return detCache[cacheKey];\n }\n\n if (rank === 1) {\n // In this case the colMask must be like: `11101111`. We can find the place of `0`.\n const colStart = Math.round(Math.log(((1 << fullRank) - 1) & ~colMask) / LN2);\n return rows[rowStart][colStart];\n }\n\n const subRowMask = rowMask | (1 << rowStart);\n let subRowStart = rowStart + 1;\n while (rowMask & (1 << subRowStart)) {\n subRowStart++;\n }\n\n let sum = 0;\n for (let j = 0, colLocalIdx = 0; j < fullRank; j++) {\n const colTag = 1 << j;\n if (!(colTag & colMask)) {\n sum += (colLocalIdx % 2 ? -1 : 1) * rows[rowStart][j]\n // det(subMatrix(0, j))\n * determinant(rows, rank - 1, subRowStart, subRowMask, colMask | colTag, detCache);\n colLocalIdx++;\n }\n }\n\n detCache[cacheKey] = sum;\n\n return sum;\n}\n\n/**\n * Usage:\n * ```js\n * const transformer = buildTransformer(\n * [10, 44, 100, 44, 100, 300, 10, 300],\n * [50, 54, 130, 14, 140, 330, 14, 220]\n * );\n * const out = [];\n * transformer && transformer([11, 33], out);\n * ```\n *\n * Notice: `buildTransformer` may take more than 10ms in some Android device.\n *\n * @param src source four points, [x0, y0, x1, y1, x2, y2, x3, y3]\n * @param dest destination four points, [x0, y0, x1, y1, x2, y2, x3, y3]\n * @return transformer If fail, return null/undefined.\n */\nexport function buildTransformer(src: number[], dest: number[]) {\n const mA = [\n [src[0], src[1], 1, 0, 0, 0, -dest[0] * src[0], -dest[0] * src[1]],\n [0, 0, 0, src[0], src[1], 1, -dest[1] * src[0], -dest[1] * src[1]],\n [src[2], src[3], 1, 0, 0, 0, -dest[2] * src[2], -dest[2] * src[3]],\n [0, 0, 0, src[2], src[3], 1, -dest[3] * src[2], -dest[3] * src[3]],\n [src[4], src[5], 1, 0, 0, 0, -dest[4] * src[4], -dest[4] * src[5]],\n [0, 0, 0, src[4], src[5], 1, -dest[5] * src[4], -dest[5] * src[5]],\n [src[6], src[7], 1, 0, 0, 0, -dest[6] * src[6], -dest[6] * src[7]],\n [0, 0, 0, src[6], src[7], 1, -dest[7] * src[6], -dest[7] * src[7]]\n ];\n\n const detCache = {};\n const det = determinant(mA, 8, 0, 0, 0, detCache);\n if (det === 0) {\n // can not make transformer when and only when\n // any three of the markers are collinear.\n return;\n }\n\n // `invert(mA) * dest`, that is, `adj(mA) / det * dest`.\n const vh: number[] = [];\n for (let i = 0; i < 8; i++) {\n for (let j = 0; j < 8; j++) {\n vh[j] == null && (vh[j] = 0);\n vh[j] += ((i + j) % 2 ? -1 : 1)\n // det(subMatrix(i, j))\n * determinant(mA, 7, i === 0 ? 1 : 0, 1 << i, 1 << j, detCache)\n / det * dest[i];\n }\n }\n\n return function (out: number[], srcPointX: number, srcPointY: number) {\n const pk = srcPointX * vh[6] + srcPointY * vh[7] + 1;\n out[0] = (srcPointX * vh[0] + srcPointY * vh[1] + vh[2]) / pk;\n out[1] = (srcPointX * vh[3] + srcPointY * vh[4] + vh[5]) / pk;\n };\n}\n","\nimport env from './env';\nimport {buildTransformer} from './fourPointsTransform';\n\nconst EVENT_SAVED_PROP = '___zrEVENTSAVED';\nconst _calcOut: number[] = [];\n\ntype SavedInfo = {\n markers?: HTMLDivElement[]\n trans?: ReturnType\n invTrans?: ReturnType\n srcCoords?: number[]\n}\n\n/**\n * Transform \"local coord\" from `elFrom` to `elTarget`.\n * \"local coord\": the coord based on the input `el`. The origin point is at\n * the position of \"left: 0; top: 0;\" in the `el`.\n *\n * Support when CSS transform is used.\n *\n * Having the `out` (that is, `[outX, outY]`), we can create an DOM element\n * and set the CSS style as \"left: outX; top: outY;\" and append it to `elTarge`\n * to locate the element.\n *\n * For example, this code below positions a child of `document.body` on the event\n * point, no matter whether `body` has `margin`/`paddin`/`transfrom`/... :\n * ```js\n * transformLocalCoord(out, container, document.body, event.offsetX, event.offsetY);\n * if (!eqNaN(out[0])) {\n * // Then locate the tip element on the event point.\n * var tipEl = document.createElement('div');\n * tipEl.style.cssText = 'position: absolute; left:' + out[0] + ';top:' + out[1] + ';';\n * document.body.appendChild(tipEl);\n * }\n * ```\n *\n * Notice: In some env this method is not supported. If called, `out` will be `[NaN, NaN]`.\n *\n * @param {Array.} out [inX: number, inY: number] The output..\n * If can not transform, `out` will not be modified but return `false`.\n * @param {HTMLElement} elFrom The `[inX, inY]` is based on elFrom.\n * @param {HTMLElement} elTarget The `out` is based on elTarget.\n * @param {number} inX\n * @param {number} inY\n * @return {boolean} Whether transform successfully.\n */\nexport function transformLocalCoord(\n out: number[],\n elFrom: HTMLElement,\n elTarget: HTMLElement,\n inX: number,\n inY: number\n) {\n return transformCoordWithViewport(_calcOut, elFrom, inX, inY, true)\n && transformCoordWithViewport(out, elTarget, _calcOut[0], _calcOut[1]);\n}\n\n/**\n * Transform between a \"viewport coord\" and a \"local coord\".\n * \"viewport coord\": the coord based on the left-top corner of the viewport\n * of the browser.\n * \"local coord\": the coord based on the input `el`. The origin point is at\n * the position of \"left: 0; top: 0;\" in the `el`.\n *\n * Support the case when CSS transform is used on el.\n *\n * @param out [inX: number, inY: number] The output. If `inverse: false`,\n * it represents \"local coord\", otherwise \"vireport coord\".\n * If can not transform, `out` will not be modified but return `false`.\n * @param el The \"local coord\" is based on the `el`, see comment above.\n * @param inX If `inverse: false`,\n * it represents \"vireport coord\", otherwise \"local coord\".\n * @param inY If `inverse: false`,\n * it represents \"vireport coord\", otherwise \"local coord\".\n * @param inverse\n * `true`: from \"viewport coord\" to \"local coord\".\n * `false`: from \"local coord\" to \"viewport coord\".\n * @return {boolean} Whether transform successfully.\n */\nexport function transformCoordWithViewport(\n out: number[],\n el: HTMLElement,\n inX: number,\n inY: number,\n inverse?: boolean\n) {\n if (el.getBoundingClientRect && env.domSupported && !isCanvasEl(el)) {\n const saved = (el as any)[EVENT_SAVED_PROP] || ((el as any)[EVENT_SAVED_PROP] = {});\n const markers = prepareCoordMarkers(el, saved);\n const transformer = preparePointerTransformer(markers, saved, inverse);\n if (transformer) {\n transformer(out, inX, inY);\n return true;\n }\n }\n return false;\n}\n\nfunction prepareCoordMarkers(el: HTMLElement, saved: SavedInfo) {\n let markers = saved.markers;\n if (markers) {\n return markers;\n }\n\n markers = saved.markers = [];\n const propLR = ['left', 'right'];\n const propTB = ['top', 'bottom'];\n\n for (let i = 0; i < 4; i++) {\n const marker = document.createElement('div');\n const stl = marker.style;\n const idxLR = i % 2;\n const idxTB = (i >> 1) % 2;\n stl.cssText = [\n 'position: absolute',\n 'visibility: hidden',\n 'padding: 0',\n 'margin: 0',\n 'border-width: 0',\n 'user-select: none',\n 'width:0',\n 'height:0',\n // 'width: 5px',\n // 'height: 5px',\n propLR[idxLR] + ':0',\n propTB[idxTB] + ':0',\n propLR[1 - idxLR] + ':auto',\n propTB[1 - idxTB] + ':auto',\n ''\n ].join('!important;');\n el.appendChild(marker);\n markers.push(marker);\n }\n\n return markers;\n}\n\nfunction preparePointerTransformer(markers: HTMLDivElement[], saved: SavedInfo, inverse?: boolean) {\n const transformerName: 'invTrans' | 'trans' = inverse ? 'invTrans' : 'trans';\n const transformer = saved[transformerName];\n const oldSrcCoords = saved.srcCoords;\n const srcCoords = [];\n const destCoords = [];\n let oldCoordTheSame = true;\n\n for (let i = 0; i < 4; i++) {\n const rect = markers[i].getBoundingClientRect();\n const ii = 2 * i;\n const x = rect.left;\n const y = rect.top;\n srcCoords.push(x, y);\n oldCoordTheSame = oldCoordTheSame && oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1];\n destCoords.push(markers[i].offsetLeft, markers[i].offsetTop);\n }\n // Cache to avoid time consuming of `buildTransformer`.\n return (oldCoordTheSame && transformer)\n ? transformer\n : (\n saved.srcCoords = srcCoords,\n saved[transformerName] = inverse\n ? buildTransformer(destCoords, srcCoords)\n : buildTransformer(srcCoords, destCoords)\n );\n}\n\nexport function isCanvasEl(el: HTMLElement): el is HTMLCanvasElement {\n return el.nodeName.toUpperCase() === 'CANVAS';\n}\n","/**\n * Utilities for mouse or touch events.\n */\n\nimport Eventful from './Eventful';\nimport env from './env';\nimport { ZRRawEvent } from './types';\nimport {isCanvasEl, transformCoordWithViewport} from './dom';\n\nconst isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener;\n\nconst MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;\nconst _calcOut: number[] = [];\n\ntype FirefoxMouseEvent = {\n layerX: number\n layerY: number\n}\n\n\n/**\n * Get the `zrX` and `zrY`, which are relative to the top-left of\n * the input `el`.\n * CSS transform (2D & 3D) is supported.\n *\n * The strategy to fetch the coords:\n * + If `calculate` is not set as `true`, users of this method should\n * ensure that `el` is the same or the same size & location as `e.target`.\n * Otherwise the result coords are probably not expected. Because we\n * firstly try to get coords from e.offsetX/e.offsetY.\n * + If `calculate` is set as `true`, the input `el` can be any element\n * and we force to calculate the coords based on `el`.\n * + The input `el` should be positionable (not position:static).\n *\n * The force `calculate` can be used in case like:\n * When mousemove event triggered on ec tooltip, `e.target` is not `el`(zr painter.dom).\n *\n * @param el DOM element.\n * @param e Mouse event or touch event.\n * @param out Get `out.zrX` and `out.zrY` as the result.\n * @param calculate Whether to force calculate\n * the coordinates but not use ones provided by browser.\n */\nexport function clientToLocal(\n el: HTMLElement,\n e: ZRRawEvent | FirefoxMouseEvent | Touch,\n out: {zrX?: number, zrY?: number},\n calculate?: boolean\n) {\n out = out || {};\n\n // According to the W3C Working Draft, offsetX and offsetY should be relative\n // to the padding edge of the target element. The only browser using this convention\n // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does\n // not support the properties.\n // (see http://www.jacklmoore.com/notes/mouse-position/)\n // In zr painter.dom, padding edge equals to border edge.\n\n if (calculate || !env.canvasSupported) {\n calculateZrXY(el, e as ZRRawEvent, out);\n }\n // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned\n // ancestor element, so we should make sure el is positioned (e.g., not position:static).\n // BTW1, Webkit don't return the same results as FF in non-simple cases (like add\n // zoom-factor, overflow / opacity layers, transforms ...)\n // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d.\n // \n // BTW3, In ff, offsetX/offsetY is always 0.\n else if (env.browser.firefox\n && (e as FirefoxMouseEvent).layerX != null\n && (e as FirefoxMouseEvent).layerX !== (e as MouseEvent).offsetX\n ) {\n out.zrX = (e as FirefoxMouseEvent).layerX;\n out.zrY = (e as FirefoxMouseEvent).layerY;\n }\n // For IE6+, chrome, safari, opera. (When will ff support offsetX?)\n else if ((e as MouseEvent).offsetX != null) {\n out.zrX = (e as MouseEvent).offsetX;\n out.zrY = (e as MouseEvent).offsetY;\n }\n // For some other device, e.g., IOS safari.\n else {\n calculateZrXY(el, e as ZRRawEvent, out);\n }\n\n return out;\n}\n\nfunction calculateZrXY(\n el: HTMLElement,\n e: ZRRawEvent,\n out: {zrX?: number, zrY?: number}\n) {\n // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect.\n if (env.domSupported && el.getBoundingClientRect) {\n const ex = (e as MouseEvent).clientX;\n const ey = (e as MouseEvent).clientY;\n\n if (isCanvasEl(el)) {\n // Original approach, which do not support CSS transform.\n // marker can not be locationed in a canvas container\n // (getBoundingClientRect is always 0). We do not support\n // that input a pre-created canvas to zr while using css\n // transform in iOS.\n const box = el.getBoundingClientRect();\n out.zrX = ex - box.left;\n out.zrY = ey - box.top;\n return;\n }\n else {\n if (transformCoordWithViewport(_calcOut, el, ex, ey)) {\n out.zrX = _calcOut[0];\n out.zrY = _calcOut[1];\n return;\n }\n }\n }\n out.zrX = out.zrY = 0;\n}\n\n/**\n * Find native event compat for legency IE.\n * Should be called at the begining of a native event listener.\n *\n * @param e Mouse event or touch event or pointer event.\n * For lagency IE, we use `window.event` is used.\n * @return The native event.\n */\nexport function getNativeEvent(e: ZRRawEvent): ZRRawEvent {\n return e\n || (window.event as any); // For IE\n}\n\n/**\n * Normalize the coordinates of the input event.\n *\n * Get the `e.zrX` and `e.zrY`, which are relative to the top-left of\n * the input `el`.\n * Get `e.zrDelta` if using mouse wheel.\n * Get `e.which`, see the comment inside this function.\n *\n * Do not calculate repeatly if `zrX` and `zrY` already exist.\n *\n * Notice: see comments in `clientToLocal`. check the relationship\n * between the result coords and the parameters `el` and `calculate`.\n *\n * @param el DOM element.\n * @param e See `getNativeEvent`.\n * @param calculate Whether to force calculate\n * the coordinates but not use ones provided by browser.\n * @return The normalized native UIEvent.\n */\nexport function normalizeEvent(\n el: HTMLElement,\n e: ZRRawEvent,\n calculate?: boolean\n) {\n\n e = getNativeEvent(e);\n\n if (e.zrX != null) {\n return e;\n }\n\n const eventType = e.type;\n const isTouch = eventType && eventType.indexOf('touch') >= 0;\n\n if (!isTouch) {\n clientToLocal(el, e, e, calculate);\n const wheelDelta = getWheelDeltaMayPolyfill(e);\n // FIXME: IE8- has \"wheelDeta\" in event \"mousewheel\" but hat different value (120 times)\n // with Chrome and Safari. It's not correct for zrender event but we left it as it was.\n e.zrDelta = wheelDelta ? wheelDelta / 120 : -(e.detail || 0) / 3;\n }\n else {\n const touch = eventType !== 'touchend'\n ? (e).targetTouches[0]\n : (e).changedTouches[0];\n touch && clientToLocal(el, touch, e, calculate);\n }\n\n // Add which for click: 1 === left; 2 === middle; 3 === right; otherwise: 0;\n // See jQuery: https://github.com/jquery/jquery/blob/master/src/event.js\n // If e.which has been defined, it may be readonly,\n // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which\n const button = (e).button;\n if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {\n (e as any).which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n }\n // [Caution]: `e.which` from browser is not always reliable. For example,\n // when press left button and `mousemove (pointermove)` in Edge, the `e.which`\n // is 65536 and the `e.button` is -1. But the `mouseup (pointerup)` and\n // `mousedown (pointerdown)` is the same as Chrome does.\n\n return e;\n}\n\n// TODO: also provide prop \"deltaX\" \"deltaY\" in zrender \"mousewheel\" event.\nfunction getWheelDeltaMayPolyfill(e: ZRRawEvent): number {\n // Although event \"wheel\" do not has the prop \"wheelDelta\" in spec,\n // agent like Chrome and Safari still provide \"wheelDelta\" like\n // event \"mousewheel\" did (perhaps for backward compat).\n // Since zrender has been using \"wheelDeta\" in zrender event \"mousewheel\".\n // we currently do not break it.\n // But event \"wheel\" in firefox do not has \"wheelDelta\", so we calculate\n // \"wheelDeta\" from \"deltaX\", \"deltaY\" (which is the props in spec).\n\n const rawWheelDelta = (e as any).wheelDelta;\n // Theroetically `e.wheelDelta` won't be 0 unless some day it has been deprecated\n // by agent like Chrome or Safari. So we also calculate it if rawWheelDelta is 0.\n if (rawWheelDelta) {\n return rawWheelDelta;\n }\n\n const deltaX = (e as any).deltaX;\n const deltaY = (e as any).deltaY;\n if (deltaX == null || deltaY == null) {\n return rawWheelDelta;\n }\n\n // Test in Chrome and Safari (MacOS):\n // The sign is corrent.\n // The abs value is 99% corrent (inconsist case only like 62~63, 125~126 ...)\n const delta = deltaY !== 0 ? Math.abs(deltaY) : Math.abs(deltaX);\n const sign = deltaY > 0 ? -1\n : deltaY < 0 ? 1\n : deltaX > 0 ? -1\n : 1;\n return 3 * delta * sign;\n}\n\n\ntype AddEventListenerParams = Parameters\ntype RemoveEventListenerParams = Parameters\n/**\n * @param el\n * @param name\n * @param handler\n * @param opt If boolean, means `opt.capture`\n * @param opt.capture\n * @param opt.passive\n */\nexport function addEventListener(\n el: HTMLElement | HTMLDocument,\n name: AddEventListenerParams[0],\n handler: AddEventListenerParams[1],\n opt?: AddEventListenerParams[2]\n) {\n if (isDomLevel2) {\n // Reproduct the console warning:\n // [Violation] Added non-passive event listener to a scroll-blocking event.\n // Consider marking event handler as 'passive' to make the page more responsive.\n // Just set console log level: verbose in chrome dev tool.\n // then the warning log will be printed when addEventListener called.\n // See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // We have not yet found a neat way to using passive. Because in zrender the dom event\n // listener delegate all of the upper events of element. Some of those events need\n // to prevent default. For example, the feature `preventDefaultMouseMove` of echarts.\n // Before passive can be adopted, these issues should be considered:\n // (1) Whether and how a zrender user specifies an event listener passive. And by default,\n // passive or not.\n // (2) How to tread that some zrender event listener is passive, and some is not. If\n // we use other way but not preventDefault of mousewheel and touchmove, browser\n // compatibility should be handled.\n\n // const opts = (env.passiveSupported && name === 'mousewheel')\n // ? {passive: true}\n // // By default, the third param of el.addEventListener is `capture: false`.\n // : void 0;\n // el.addEventListener(name, handler /* , opts */);\n el.addEventListener(name, handler, opt);\n }\n else {\n // For simplicity, do not implement `setCapture` for IE9-.\n (el as any).attachEvent('on' + name, handler);\n }\n}\n\n/**\n * Parameter are the same as `addEventListener`.\n *\n * Notice that if a listener is registered twice, one with capture and one without,\n * remove each one separately. Removal of a capturing listener does not affect a\n * non-capturing version of the same listener, and vice versa.\n */\nexport function removeEventListener(\n el: HTMLElement | HTMLDocument,\n name: RemoveEventListenerParams[0],\n handler: RemoveEventListenerParams[1],\n opt: RemoveEventListenerParams[2]\n) {\n if (isDomLevel2) {\n el.removeEventListener(name, handler, opt);\n }\n else {\n (el as any).detachEvent('on' + name, handler);\n }\n}\n\n/**\n * preventDefault and stopPropagation.\n * Notice: do not use this method in zrender. It can only be\n * used by upper applications if necessary.\n *\n * @param {Event} e A mouse or touch event.\n */\nexport const stop = isDomLevel2\n ? function (e: MouseEvent | TouchEvent | PointerEvent) {\n e.preventDefault();\n e.stopPropagation();\n e.cancelBubble = true;\n }\n : function (e: MouseEvent | TouchEvent | PointerEvent) {\n e.returnValue = false;\n e.cancelBubble = true;\n };\n\n/**\n * This method only works for mouseup and mousedown. The functionality is restricted\n * for fault tolerance, See the `e.which` compatibility above.\n *\n * params can be MouseEvent or ElementEvent\n */\nexport function isMiddleOrRightButtonOnMouseUpDown(e: { which: number }) {\n return e.which === 2 || e.which === 3;\n}\n\n/**\n * To be removed.\n * @deprecated\n */\nexport function notLeftMouse(e: MouseEvent) {\n // If e.which is undefined, considered as left mouse event.\n return e.which > 1;\n}\n\n\n// For backward compatibility\nexport {Eventful as Dispatcher};\n","/**\n * Only implements needed gestures for mobile.\n */\n\nimport * as eventUtil from './event';\nimport { ZRRawTouchEvent, ZRPinchEvent, Dictionary } from './types';\nimport Displayable from '../graphic/Displayable';\n\ninterface TrackItem {\n points: number[][]\n touches: Touch[]\n target: Displayable,\n event: ZRRawTouchEvent\n}\n\nexport class GestureMgr {\n\n private _track: TrackItem[] = []\n\n constructor() {}\n\n recognize(event: ZRRawTouchEvent, target: Displayable, root: HTMLElement) {\n this._doTrack(event, target, root);\n return this._recognize(event);\n }\n\n clear() {\n this._track.length = 0;\n return this;\n }\n\n _doTrack(event: ZRRawTouchEvent, target: Displayable, root: HTMLElement) {\n const touches = event.touches;\n\n if (!touches) {\n return;\n }\n\n const trackItem: TrackItem = {\n points: [],\n touches: [],\n target: target,\n event: event\n };\n\n for (let i = 0, len = touches.length; i < len; i++) {\n const touch = touches[i];\n const 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\n _recognize(event: ZRRawTouchEvent) {\n for (let eventName in recognizers) {\n if (recognizers.hasOwnProperty(eventName)) {\n const gestureInfo = recognizers[eventName](this._track, event);\n if (gestureInfo) {\n return gestureInfo;\n }\n }\n }\n }\n}\n\nfunction dist(pointPair: number[][]): number {\n const dx = pointPair[1][0] - pointPair[0][0];\n const dy = pointPair[1][1] - pointPair[0][1];\n\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction center(pointPair: number[][]): number[] {\n return [\n (pointPair[0][0] + pointPair[1][0]) / 2,\n (pointPair[0][1] + pointPair[1][1]) / 2\n ];\n}\n\ntype Recognizer = (tracks: TrackItem[], event: ZRRawTouchEvent) => {\n type: string\n target: Displayable\n event: ZRRawTouchEvent\n}\n\nconst recognizers: Dictionary = {\n\n pinch: function (tracks: TrackItem[], event: ZRRawTouchEvent) {\n const trackLen = tracks.length;\n\n if (!trackLen) {\n return;\n }\n\n const pinchEnd = (tracks[trackLen - 1] || {}).points;\n const pinchPre = (tracks[trackLen - 2] || {}).points || pinchEnd;\n\n if (pinchPre\n && pinchPre.length > 1\n && pinchEnd\n && pinchEnd.length > 1\n ) {\n let pinchScale = dist(pinchEnd) / dist(pinchPre);\n !isFinite(pinchScale) && (pinchScale = 1);\n\n (event as ZRPinchEvent).pinchScale = pinchScale;\n\n const pinchCenter = center(pinchEnd);\n (event as ZRPinchEvent).pinchX = pinchCenter[0];\n (event as ZRPinchEvent).pinchY = pinchCenter[1];\n\n return {\n type: 'pinch',\n target: tracks[0].target,\n event: event\n };\n }\n }\n\n // Only pinch currently.\n};","import * as util from './core/util';\nimport * as vec2 from './core/vector';\nimport Draggable from './mixin/Draggable';\nimport Eventful from './core/Eventful';\nimport * as eventTool from './core/event';\nimport {GestureMgr} from './core/GestureMgr';\nimport Displayable from './graphic/Displayable';\nimport {PainterBase} from './PainterBase';\nimport HandlerDomProxy, { HandlerProxyInterface } from './dom/HandlerProxy';\nimport { ZRRawEvent, ZRPinchEvent, ElementEventName, ElementEventNameWithOn, ZRRawTouchEvent } from './core/types';\nimport Storage from './Storage';\nimport Element, {ElementEvent} from './Element';\nimport CanvasPainter from './canvas/Painter';\n\n\n/**\n * [The interface between `Handler` and `HandlerProxy`]:\n *\n * The default `HandlerProxy` only support the common standard web environment\n * (e.g., standalone browser, headless browser, embed browser in mobild APP, ...).\n * But `HandlerProxy` can be replaced to support more non-standard environment\n * (e.g., mini app), or to support more feature that the default `HandlerProxy`\n * not provided (like echarts-gl did).\n * So the interface between `Handler` and `HandlerProxy` should be stable. Do not\n * make break changes util inevitable. The interface include the public methods\n * of `Handler` and the events listed in `handlerNames` below, by which `HandlerProxy`\n * drives `Handler`.\n */\n\n/**\n * [DRAG_OUTSIDE]:\n *\n * That is, triggering `mousemove` and `mouseup` event when the pointer is out of the\n * zrender area when dragging. That is important for the improvement of the user experience\n * when dragging something near the boundary without being terminated unexpectedly.\n *\n * We originally consider to introduce new events like `pagemovemove` and `pagemouseup`\n * to resolve this issue. But some drawbacks of it is described in\n * https://github.com/ecomfe/zrender/pull/536#issuecomment-560286899\n *\n * Instead, we referenced the specifications:\n * https://www.w3.org/TR/touch-events/#the-touchmove-event\n * https://www.w3.org/TR/2014/WD-DOM-Level-3-Events-20140925/#event-type-mousemove\n * where the the mousemove/touchmove can be continue to fire if the user began a drag\n * operation and the pointer has left the boundary. (for the mouse event, browsers\n * only do it on `document` and when the pointer has left the boundary of the browser.)\n *\n * So the default `HandlerProxy` supports this feature similarly: if it is in the dragging\n * state (see `pointerCapture` in `HandlerProxy`), the `mousemove` and `mouseup` continue\n * to fire until release the pointer. That is implemented by listen to those event on\n * `document`.\n * If we implement some other `HandlerProxy` only for touch device, that would be easier.\n * The touch event support this feature by default.\n * The term \"pointer capture\" is from the spec:\n * https://www.w3.org/TR/pointerevents2/#idl-def-element-setpointercapture-pointerid\n *\n * Note:\n * There might be some cases that the mouse event can not be received on `document`.\n * For example,\n * (A) When `useCapture` is not supported and some user defined event listeners on the ancestor\n * of zr dom throw Error.\n * (B) When `useCapture` is not supported and some user defined event listeners on the ancestor of\n * zr dom call `stopPropagation`.\n * In these cases, the `mousemove` event might be keep triggering event when the mouse is released.\n * We try to reduce the side-effect in those cases, that is, use `isOutsideBoundary` to prevent\n * it from do anything (especially, `findHover`).\n * (`useCapture` mean, `addEvnetListener(listener, {capture: true})`, althought it may not be\n * suppported in some environments.)\n *\n * Note:\n * If `HandlerProxy` listens to `document` with `useCapture`, `HandlerProxy` needs to\n * prevent user-registered-handler from calling `stopPropagation` and `preventDefault`\n * when the `event.target` is not a zrender dom element. Otherwise the user-registered-handler\n * may be able to prevent other elements (that not relevant to zrender) in the web page from receiving\n * dom events.\n */\n\nconst SILENT = 'silent';\n\nfunction makeEventPacket(eveType: ElementEventName, targetInfo: {\n target?: Element\n topTarget?: Element\n}, event: ZRRawEvent): ElementEvent {\n return {\n type: eveType,\n event: event,\n // target can only be an element that is not silent.\n target: targetInfo.target,\n // topTarget can be a silent element.\n topTarget: targetInfo.topTarget,\n cancelBubble: false,\n offsetX: event.zrX,\n offsetY: event.zrY,\n gestureEvent: (event as ZRPinchEvent).gestureEvent,\n pinchX: (event as ZRPinchEvent).pinchX,\n pinchY: (event as ZRPinchEvent).pinchY,\n pinchScale: (event as ZRPinchEvent).pinchScale,\n wheelDelta: event.zrDelta,\n zrByTouch: event.zrByTouch,\n which: event.which,\n stop: stopEvent\n };\n}\n\nfunction stopEvent(this: ElementEvent) {\n eventTool.stop(this.event);\n}\n\nclass EmptyProxy extends Eventful {\n handler: Handler = null\n dispose() {}\n setCursor() {}\n}\n\nclass HoveredResult {\n x: number\n y: number\n target: Displayable\n topTarget: Displayable\n constructor(x?: number, y?: number) {\n this.x = x;\n this.y = y;\n }\n}\n\nconst handlerNames = [\n 'click', 'dblclick', 'mousewheel', 'mouseout',\n 'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\n\ntype HandlerName = 'click' |'dblclick' |'mousewheel' |'mouseout' |\n 'mouseup' |'mousedown' |'mousemove' |'contextmenu';\n\n\n// TODO draggable\nclass Handler extends Eventful {\n\n storage: Storage\n painter: PainterBase\n painterRoot: HTMLElement\n\n proxy: HandlerProxyInterface\n\n private _hovered = new HoveredResult(0, 0)\n\n private _gestureMgr: GestureMgr\n\n private _draggingMgr: Draggable\n\n _downEl: Element\n _upEl: Element\n _downPoint: [number, number]\n\n constructor(\n storage: Storage,\n painter: PainterBase,\n proxy: HandlerProxyInterface,\n painterRoot: HTMLElement\n ) {\n super();\n\n this.storage = storage;\n\n this.painter = painter;\n\n this.painterRoot = painterRoot;\n\n proxy = proxy || new EmptyProxy();\n\n /**\n * Proxy of event. can be Dom, WebGLSurface, etc.\n */\n this.proxy = null;\n\n this.setHandlerProxy(proxy);\n\n this._draggingMgr = new Draggable(this);\n }\n\n setHandlerProxy(proxy: HandlerProxyInterface) {\n if (this.proxy) {\n this.proxy.dispose();\n }\n\n if (proxy) {\n util.each(handlerNames, function (name) {\n proxy.on && proxy.on(name, this[name as HandlerName], this);\n }, this);\n // Attach handler\n proxy.handler = this;\n }\n this.proxy = proxy;\n }\n\n mousemove(event: ZRRawEvent) {\n const x = event.zrX;\n const y = event.zrY;\n\n const isOutside = isOutsideBoundary(this, x, y);\n\n let lastHovered = this._hovered;\n let lastHoveredTarget = lastHovered.target;\n\n // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call\n // (like 'setOption' or 'dispatchAction') in event handlers, we should find\n // lastHovered again here. Otherwise 'mouseout' can not be triggered normally.\n // See #6198.\n if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n lastHoveredTarget = lastHovered.target;\n }\n\n const hovered = this._hovered = isOutside ? new HoveredResult(x, y) : this.findHover(x, y);\n const hoveredTarget = hovered.target;\n\n const proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default');\n\n // Mouse out on previous hovered element\n if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(lastHovered, 'mouseout', event);\n }\n\n // Mouse moving on one element\n this.dispatchToElement(hovered, 'mousemove', event);\n\n // Mouse over on a new element\n if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(hovered, 'mouseover', event);\n }\n }\n\n mouseout(event: ZRRawEvent) {\n const eventControl = event.zrEventControl;\n\n if (eventControl !== 'only_globalout') {\n this.dispatchToElement(this._hovered, 'mouseout', event);\n }\n\n if (eventControl !== 'no_globalout') {\n // FIXME: if the pointer moving from the extra doms to realy \"outside\",\n // the `globalout` should have been triggered. But currently not.\n this.trigger('globalout', {type: 'globalout', event: event});\n }\n }\n\n /**\n * Resize\n */\n resize() {\n this._hovered = new HoveredResult(0, 0);\n }\n\n /**\n * Dispatch event\n */\n dispatch(eventName: HandlerName, eventArgs?: any) {\n const handler = this[eventName];\n handler && handler.call(this, eventArgs);\n }\n\n /**\n * Dispose\n */\n dispose() {\n\n this.proxy.dispose();\n\n this.storage = null;\n this.proxy = null;\n this.painter = null;\n }\n\n /**\n * 设置默认的cursor style\n * @param cursorStyle 例如 crosshair,默认为 'default'\n */\n setCursorStyle(cursorStyle: string) {\n const proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(cursorStyle);\n }\n\n /**\n * 事件分发代理\n *\n * @private\n * @param {Object} targetInfo {target, topTarget} 目标图形元素\n * @param {string} eventName 事件名称\n * @param {Object} event 事件对象\n */\n dispatchToElement(targetInfo: {\n target?: Element\n topTarget?: Element\n }, eventName: ElementEventName, event: ZRRawEvent) {\n\n targetInfo = targetInfo || {};\n\n let el = targetInfo.target as Element;\n if (el && el.silent) {\n return;\n }\n const eventKey = ('on' + eventName) as ElementEventNameWithOn;\n const eventPacket = makeEventPacket(eventName, targetInfo, event);\n\n while (el) {\n el[eventKey]\n && (eventPacket.cancelBubble = !!el[eventKey].call(el, eventPacket));\n\n el.trigger(eventName, eventPacket);\n\n // Bubble to the host if on the textContent.\n // PENDING\n el = el.__hostTarget ? el.__hostTarget : el.parent;\n\n if (eventPacket.cancelBubble) {\n break;\n }\n }\n\n if (!eventPacket.cancelBubble) {\n // 冒泡到顶级 zrender 对象\n this.trigger(eventName, eventPacket);\n // 分发事件到用户自定义层\n // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在\n if (this.painter && (this.painter as CanvasPainter).eachOtherLayer) {\n (this.painter as CanvasPainter).eachOtherLayer(function (layer) {\n if (typeof (layer[eventKey]) === 'function') {\n layer[eventKey].call(layer, eventPacket);\n }\n if (layer.trigger) {\n layer.trigger(eventName, eventPacket);\n }\n });\n }\n }\n }\n\n findHover(x: number, y: number, exclude?: Displayable): HoveredResult {\n const list = this.storage.getDisplayList();\n const out = new HoveredResult(x, y);\n\n for (let i = list.length - 1; i >= 0; i--) {\n let hoverCheckResult;\n if (list[i] !== exclude\n // getDisplayList may include ignored item in VML mode\n && !list[i].ignore\n && (hoverCheckResult = isHover(list[i], x, y))\n ) {\n !out.topTarget && (out.topTarget = list[i]);\n if (hoverCheckResult !== SILENT) {\n out.target = list[i];\n break;\n }\n }\n }\n\n return out;\n }\n\n processGesture(event: ZRRawEvent, stage?: 'start' | 'end' | 'change') {\n if (!this._gestureMgr) {\n this._gestureMgr = new GestureMgr();\n }\n const gestureMgr = this._gestureMgr;\n\n stage === 'start' && gestureMgr.clear();\n\n const gestureInfo = gestureMgr.recognize(\n event as ZRRawTouchEvent,\n this.findHover(event.zrX, event.zrY, null).target,\n (this.proxy as HandlerDomProxy).dom\n );\n\n stage === 'end' && gestureMgr.clear();\n\n // Do not do any preventDefault here. Upper application do that if necessary.\n if (gestureInfo) {\n const type = gestureInfo.type;\n (event as ZRPinchEvent).gestureEvent = type;\n\n let res = new HoveredResult();\n res.target = gestureInfo.target;\n this.dispatchToElement(res, type as ElementEventName, gestureInfo.event as ZRRawEvent);\n }\n }\n\n click: (event: ZRRawEvent) => void\n mousedown: (event: ZRRawEvent) => void\n mouseup: (event: ZRRawEvent) => void\n mousewheel: (event: ZRRawEvent) => void\n dblclick: (event: ZRRawEvent) => void\n contextmenu: (event: ZRRawEvent) => void\n}\n\n// Common handlers\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name: HandlerName) {\n Handler.prototype[name] = function (event) {\n const x = event.zrX;\n const y = event.zrY;\n const isOutside = isOutsideBoundary(this, x, y);\n\n let hovered;\n let hoveredTarget;\n\n if (name !== 'mouseup' || !isOutside) {\n // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover\n hovered = this.findHover(x, y);\n hoveredTarget = hovered.target;\n }\n\n if (name === 'mousedown') {\n this._downEl = hoveredTarget;\n this._downPoint = [event.zrX, event.zrY];\n // In case click triggered before mouseup\n this._upEl = hoveredTarget;\n }\n else if (name === 'mouseup') {\n this._upEl = hoveredTarget;\n }\n else if (name === 'click') {\n if (this._downEl !== this._upEl\n // Original click event is triggered on the whole canvas element,\n // including the case that `mousedown` - `mousemove` - `mouseup`,\n // which should be filtered, otherwise it will bring trouble to\n // pan and zoom.\n || !this._downPoint\n // Arbitrary value\n || vec2.dist(this._downPoint, [event.zrX, event.zrY]) > 4\n ) {\n return;\n }\n this._downPoint = null;\n }\n\n this.dispatchToElement(hovered, name, event);\n };\n});\n\nfunction isHover(displayable: Displayable, x: number, y: number) {\n if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n let el: Element = displayable;\n let isSilent;\n let ignoreClip = false;\n while (el) {\n // Ignore clip on any ancestors.\n if (el.ignoreClip) {\n ignoreClip = true;\n }\n if (!ignoreClip) {\n let clipPath = el.getClipPath();\n // If clipped by ancestor.\n // FIXME: If clipPath has neither stroke nor fill,\n // el.clipPath.contain(x, y) will always return false.\n if (clipPath && !clipPath.contain(x, y)) {\n return false;\n }\n if (el.silent) {\n isSilent = true;\n }\n }\n // Consider when el is textContent, also need to be silent\n // if any of its host el and its ancestors is silent.\n const hostEl = el.__hostTarget;\n el = hostEl ? hostEl : el.parent;\n }\n return isSilent ? SILENT : true;\n }\n\n return false;\n}\n\n/**\n * See [DRAG_OUTSIDE].\n */\nfunction isOutsideBoundary(handlerInstance: Handler, x: number, y: number) {\n const painter = handlerInstance.painter;\n return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight();\n}\n\nexport default Handler;\n","// https://github.com/mziccard/node-timsort\nconst DEFAULT_MIN_MERGE = 32;\n\nconst DEFAULT_MIN_GALLOPING = 7;\n\nconst DEFAULT_TMP_STORAGE_LENGTH = 256;\n\ntype CompareFunc =(a: T, b: T) => number\n\nfunction minRunLength(n: number): number {\n var r = 0;\n\n while (n >= DEFAULT_MIN_MERGE) {\n r |= n & 1;\n n >>= 1;\n }\n\n return n + r;\n}\n\nfunction makeAscendingRun(array: T[], lo: number, hi: number, compare: CompareFunc) {\n var runHi = lo + 1;\n\n if (runHi === hi) {\n return 1;\n }\n\n if (compare(array[runHi++], array[lo]) < 0) {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n runHi++;\n }\n\n reverseRun(array, lo, runHi);\n }\n else {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n runHi++;\n }\n }\n\n return runHi - lo;\n}\n\nfunction reverseRun(array: T[], lo: number, hi: number) {\n hi--;\n\n while (lo < hi) {\n var t = array[lo];\n array[lo++] = array[hi];\n array[hi--] = t;\n }\n}\n\nfunction binaryInsertionSort(array: T[], lo: number, hi: number, start: number, compare: CompareFunc) {\n if (start === lo) {\n start++;\n }\n\n for (; start < hi; start++) {\n var pivot = array[start];\n\n var left = lo;\n var right = start;\n var mid;\n\n while (left < right) {\n mid = left + right >>> 1;\n\n if (compare(pivot, array[mid]) < 0) {\n right = mid;\n }\n else {\n left = mid + 1;\n }\n }\n\n var n = start - left;\n\n switch (n) {\n case 3:\n array[left + 3] = array[left + 2];\n\n case 2:\n array[left + 2] = array[left + 1];\n\n case 1:\n array[left + 1] = array[left];\n break;\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n n--;\n }\n }\n\n array[left] = pivot;\n }\n}\n\nfunction gallopLeft(value: T, array: T[], start: number, length: number, hint: number, compare: CompareFunc) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n\n if (compare(value, array[start + hint]) > 0) {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n lastOffset += hint;\n offset += hint;\n }\n else {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n\n if (compare(value, array[start + m]) > 0) {\n lastOffset = m + 1;\n }\n else {\n offset = m;\n }\n }\n return offset;\n}\n\nfunction gallopRight(value: T, array: T[], start: number, length: number, hint: number, compare: CompareFunc) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n\n if (compare(value, array[start + hint]) < 0) {\n maxOffset = hint + 1;\n\n while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n else {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n lastOffset += hint;\n offset += hint;\n }\n\n lastOffset++;\n\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n\n if (compare(value, array[start + m]) < 0) {\n offset = m;\n }\n else {\n lastOffset = m + 1;\n }\n }\n\n return offset;\n}\n\nfunction TimSort(array: T[], compare: CompareFunc) {\n let minGallop = DEFAULT_MIN_GALLOPING;\n let length = 0;\n let tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n let stackLength = 0;\n let runStart: number[];\n let runLength: number[];\n let stackSize = 0;\n\n length = array.length;\n\n if (length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n tmpStorageLength = length >>> 1;\n }\n\n var tmp: T[] = [];\n\n stackLength = length < 120 ? 5 : length < 1542 ? 10 : length < 119151 ? 19 : 40;\n\n runStart = [];\n runLength = [];\n\n function pushRun(_runStart: number, _runLength: number) {\n runStart[stackSize] = _runStart;\n runLength[stackSize] = _runLength;\n stackSize += 1;\n }\n\n function mergeRuns() {\n while (stackSize > 1) {\n var n = stackSize - 2;\n\n if (\n (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1])\n || (n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1])\n ) {\n if (runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n }\n else if (runLength[n] > runLength[n + 1]) {\n break;\n }\n mergeAt(n);\n }\n }\n\n function forceMergeRuns() {\n while (stackSize > 1) {\n var n = stackSize - 2;\n\n if (n > 0 && runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n\n mergeAt(n);\n }\n }\n\n function mergeAt(i: number) {\n var start1 = runStart[i];\n var length1 = runLength[i];\n var start2 = runStart[i + 1];\n var length2 = runLength[i + 1];\n\n runLength[i] = length1 + length2;\n\n if (i === stackSize - 3) {\n runStart[i + 1] = runStart[i + 2];\n runLength[i + 1] = runLength[i + 2];\n }\n\n stackSize--;\n\n var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n start1 += k;\n length1 -= k;\n\n if (length1 === 0) {\n return;\n }\n\n length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n\n if (length2 === 0) {\n return;\n }\n\n if (length1 <= length2) {\n mergeLow(start1, length1, start2, length2);\n }\n else {\n mergeHigh(start1, length1, start2, length2);\n }\n }\n\n function mergeLow(start1: number, length1: number, start2: number, length2: number) {\n var i = 0;\n\n for (i = 0; i < length1; i++) {\n tmp[i] = array[start1 + i];\n }\n\n var cursor1 = 0;\n var cursor2 = start2;\n var dest = start1;\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n return;\n }\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n return;\n }\n\n var _minGallop = minGallop;\n var count1;\n var count2;\n var exit;\n\n while (1) {\n count1 = 0;\n count2 = 0;\n exit = false;\n\n do {\n if (compare(array[cursor2], tmp[cursor1]) < 0) {\n array[dest++] = array[cursor2++];\n count2++;\n count1 = 0;\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n }\n else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n if (--length1 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < _minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n\n if (count1 !== 0) {\n for (i = 0; i < count1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n\n dest += count1;\n cursor1 += count1;\n length1 -= count1;\n if (length1 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n\n count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n\n if (count2 !== 0) {\n for (i = 0; i < count2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n\n dest += count2;\n cursor2 += count2;\n length2 -= count2;\n\n if (length2 === 0) {\n exit = true;\n break;\n }\n }\n array[dest++] = tmp[cursor1++];\n\n if (--length1 === 1) {\n exit = true;\n break;\n }\n\n _minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (_minGallop < 0) {\n _minGallop = 0;\n }\n\n _minGallop += 2;\n }\n\n minGallop = _minGallop;\n\n minGallop < 1 && (minGallop = 1);\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n }\n else if (length1 === 0) {\n throw new Error();\n // throw new Error('mergeLow preconditions were not respected');\n }\n else {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n }\n }\n\n function mergeHigh(start1: number, length1: number, start2: number, length2: number) {\n var i = 0;\n\n for (i = 0; i < length2; i++) {\n tmp[i] = array[start2 + i];\n }\n\n var cursor1 = start1 + length1 - 1;\n var cursor2 = length2 - 1;\n var dest = start2 + length2 - 1;\n var customCursor = 0;\n var customDest = 0;\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n customCursor = dest - (length2 - 1);\n\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n\n return;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n return;\n }\n\n var _minGallop = minGallop;\n\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n\n do {\n if (compare(tmp[cursor2], array[cursor1]) < 0) {\n array[dest--] = array[cursor1--];\n count1++;\n count2 = 0;\n if (--length1 === 0) {\n exit = true;\n break;\n }\n }\n else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n if (--length2 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < _minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n\n if (count1 !== 0) {\n dest -= count1;\n cursor1 -= count1;\n length1 -= count1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = count1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n if (length1 === 0) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = tmp[cursor2--];\n\n if (--length2 === 1) {\n exit = true;\n break;\n }\n\n count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n\n if (count2 !== 0) {\n dest -= count2;\n cursor2 -= count2;\n length2 -= count2;\n customDest = dest + 1;\n customCursor = cursor2 + 1;\n\n for (i = 0; i < count2; i++) {\n array[customDest + i] = tmp[customCursor + i];\n }\n\n if (length2 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n exit = true;\n break;\n }\n\n _minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (_minGallop < 0) {\n _minGallop = 0;\n }\n\n _minGallop += 2;\n }\n\n minGallop = _minGallop;\n\n if (minGallop < 1) {\n minGallop = 1;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n }\n else if (length2 === 0) {\n throw new Error();\n // throw new Error('mergeHigh preconditions were not respected');\n }\n else {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n }\n }\n\n return {\n mergeRuns,\n forceMergeRuns,\n pushRun\n };\n}\n\nexport default function sort(\n array: T[],\n compare: CompareFunc,\n lo?: number, hi?: number\n) {\n if (!lo) {\n lo = 0;\n }\n if (!hi) {\n hi = array.length;\n }\n\n var remaining = hi - lo;\n\n if (remaining < 2) {\n return;\n }\n\n var runLength = 0;\n\n if (remaining < DEFAULT_MIN_MERGE) {\n runLength = makeAscendingRun(array, lo, hi, compare);\n binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n return;\n }\n\n var ts = TimSort(array, compare);\n\n var minRun = minRunLength(remaining);\n\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n if (runLength < minRun) {\n var force = remaining;\n if (force > minRun) {\n force = minRun;\n }\n\n binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n runLength = force;\n }\n\n ts.pushRun(lo, runLength);\n ts.mergeRuns();\n\n remaining -= runLength;\n lo += runLength;\n } while (remaining !== 0);\n\n ts.forceMergeRuns();\n}\n","// Bit masks to check which parts of element needs to be updated.\nexport const REDARAW_BIT = 1;\nexport const STYLE_CHANGED_BIT = 2;\nexport const SHAPE_CHANGED_BIT = 4;\n","import * as util from './core/util';\nimport env from './core/env';\nimport Group from './graphic/Group';\nimport Element from './Element';\n\n// Use timsort because in most case elements are partially sorted\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\nimport timsort from './core/timsort';\nimport Displayable from './graphic/Displayable';\nimport Path from './graphic/Path';\nimport { REDARAW_BIT } from './graphic/constants';\n\nlet invalidZErrorLogged = false;\nfunction logInvalidZError() {\n if (invalidZErrorLogged) {\n return;\n }\n invalidZErrorLogged = true;\n console.warn('z / z2 / zlevel of displayable is invalid, which may cause unexpected errors');\n}\n\nfunction shapeCompareFunc(a: Displayable, b: Displayable) {\n if (a.zlevel === b.zlevel) {\n if (a.z === b.z) {\n // if (a.z2 === b.z2) {\n // // FIXME Slow has renderidx compare\n // // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement\n // // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012\n // return a.__renderidx - b.__renderidx;\n // }\n return a.z2 - b.z2;\n }\n return a.z - b.z;\n }\n return a.zlevel - b.zlevel;\n}\n\nexport default class Storage {\n\n private _roots: Element[] = []\n\n private _displayList: Displayable[] = []\n\n private _displayListLen = 0\n\n traverse(\n cb: (this: T, el: Element) => void,\n context?: T\n ) {\n for (let i = 0; i < this._roots.length; i++) {\n this._roots[i].traverse(cb, context);\n }\n }\n\n /**\n * get a list of elements to be rendered\n *\n * @param {boolean} update whether to update elements before return\n * @param {DisplayParams} params options\n * @return {Displayable[]} a list of elements\n */\n getDisplayList(update?: boolean, includeIgnore?: boolean): Displayable[] {\n includeIgnore = includeIgnore || false;\n const displayList = this._displayList;\n // If displaylist is not created yet. Update force\n if (update || !displayList.length) {\n this.updateDisplayList(includeIgnore);\n }\n return displayList;\n }\n\n /**\n * 更新图形的绘制队列。\n * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中,\n * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列\n */\n updateDisplayList(includeIgnore?: boolean) {\n this._displayListLen = 0;\n\n const roots = this._roots;\n const displayList = this._displayList;\n for (let i = 0, len = roots.length; i < len; i++) {\n this._updateAndAddDisplayable(roots[i], null, includeIgnore);\n }\n\n displayList.length = this._displayListLen;\n\n env.canvasSupported && timsort(displayList, shapeCompareFunc);\n }\n\n private _updateAndAddDisplayable(\n el: Element,\n clipPaths: Path[],\n includeIgnore?: boolean\n ) {\n if (el.ignore && !includeIgnore) {\n return;\n }\n\n el.beforeUpdate();\n el.update();\n el.afterUpdate();\n\n const userSetClipPath = el.getClipPath();\n\n if (el.ignoreClip) {\n clipPaths = null;\n }\n else if (userSetClipPath) {\n\n // FIXME 效率影响\n if (clipPaths) {\n clipPaths = clipPaths.slice();\n }\n else {\n clipPaths = [];\n }\n\n let currentClipPath = userSetClipPath;\n let parentClipPath = el;\n // Recursively add clip path\n while (currentClipPath) {\n // clipPath 的变换是基于使用这个 clipPath 的元素\n // TODO: parent should be group type.\n currentClipPath.parent = parentClipPath as Group;\n currentClipPath.updateTransform();\n\n clipPaths.push(currentClipPath);\n\n parentClipPath = currentClipPath;\n currentClipPath = currentClipPath.getClipPath();\n }\n }\n\n // ZRText and Group and combining morphing Path may use children\n if ((el as Group).childrenRef) {\n const children = (el as Group).childrenRef();\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n\n // Force to mark as dirty if group is dirty\n if (el.__dirty) {\n child.__dirty |= REDARAW_BIT;\n }\n\n this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n }\n\n // Mark group clean here\n el.__dirty = 0;\n\n }\n else {\n const disp = el as Displayable;\n // Element is displayable\n if (clipPaths && clipPaths.length) {\n disp.__clipPaths = clipPaths;\n }\n else if (disp.__clipPaths && disp.__clipPaths.length > 0) {\n disp.__clipPaths = [];\n }\n\n // Avoid invalid z, z2, zlevel cause sorting error.\n if (isNaN(disp.z)) {\n logInvalidZError();\n disp.z = 0;\n }\n if (isNaN(disp.z2)) {\n logInvalidZError();\n disp.z2 = 0;\n }\n if (isNaN(disp.zlevel)) {\n logInvalidZError();\n disp.zlevel = 0;\n }\n\n this._displayList[this._displayListLen++] = disp;\n }\n\n // Add decal\n const decalEl = (el as Path).getDecalElement && (el as Path).getDecalElement();\n if (decalEl) {\n this._updateAndAddDisplayable(decalEl, clipPaths, includeIgnore);\n }\n\n // Add attached text element and guide line.\n const textGuide = el.getTextGuideLine();\n if (textGuide) {\n this._updateAndAddDisplayable(textGuide, clipPaths, includeIgnore);\n }\n\n const textEl = el.getTextContent();\n if (textEl) {\n this._updateAndAddDisplayable(textEl, clipPaths, includeIgnore);\n }\n }\n\n /**\n * 添加图形(Displayable)或者组(Group)到根节点\n */\n addRoot(el: Element) {\n if (el.__zr && el.__zr.storage === this) {\n return;\n }\n\n this._roots.push(el);\n }\n\n /**\n * 删除指定的图形(Displayable)或者组(Group)\n * @param el\n */\n delRoot(el: Element | Element[]) {\n\n if (el instanceof Array) {\n for (let i = 0, l = el.length; i < l; i++) {\n this.delRoot(el[i]);\n }\n return;\n }\n\n const idx = util.indexOf(this._roots, el);\n if (idx >= 0) {\n this._roots.splice(idx, 1);\n }\n }\n\n delAllRoots() {\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n\n return;\n }\n\n getRoots() {\n return this._roots;\n }\n\n /**\n * 清空并且释放Storage\n */\n dispose() {\n this._displayList = null;\n this._roots = null;\n }\n\n displayableSortFunc = shapeCompareFunc\n}","type RequestAnimationFrameType = typeof window.requestAnimationFrame\n\nlet requestAnimationFrame: RequestAnimationFrameType;\n\nrequestAnimationFrame = (\n\ttypeof window !== 'undefined'\n\t\t&& (\n\t\t\t(window.requestAnimationFrame && window.requestAnimationFrame.bind(window))\n\t\t\t// https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809\n\t\t\t|| ((window as any).msRequestAnimationFrame && (window as any).msRequestAnimationFrame.bind(window))\n\t\t\t|| (window as any).mozRequestAnimationFrame\n\t\t\t|| window.webkitRequestAnimationFrame\n\t\t)\n) || function (func: Parameters[0]): number {\n\treturn setTimeout(func, 16) as any;\n};\n\nexport default requestAnimationFrame;\n","/**\n * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js\n * @see http://sole.github.io/tween.js/examples/03_graphs.html\n * @exports zrender/animation/easing\n */\n\ntype easingFunc = (percent: number) => number;\n\nexport type AnimationEasing = keyof typeof easing | easingFunc | 'spline';\n\nconst easing = {\n /**\n * @param {number} k\n * @return {number}\n */\n linear(k: number) {\n return k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticIn(k: number) {\n return k * k;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticOut(k: number) {\n return k * (2 - k);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticInOut(k: number) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k;\n }\n return -0.5 * (--k * (k - 2) - 1);\n },\n\n // 三次方的缓动(t^3)\n /**\n * @param {number} k\n * @return {number}\n */\n cubicIn(k: number) {\n return k * k * k;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n cubicOut(k: number) {\n return --k * k * k + 1;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n cubicInOut(k: number) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k;\n }\n return 0.5 * ((k -= 2) * k * k + 2);\n },\n\n // 四次方的缓动(t^4)\n /**\n * @param {number} k\n * @return {number}\n */\n quarticIn(k: number) {\n return k * k * k * k;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quarticOut(k: number) {\n return 1 - (--k * k * k * k);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quarticInOut(k: number) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k;\n }\n return -0.5 * ((k -= 2) * k * k * k - 2);\n },\n\n // 五次方的缓动(t^5)\n /**\n * @param {number} k\n * @return {number}\n */\n quinticIn(k: number) {\n return k * k * k * k * k;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quinticOut(k: number) {\n return --k * k * k * k * k + 1;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quinticInOut(k: number) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k * k;\n }\n return 0.5 * ((k -= 2) * k * k * k * k + 2);\n },\n\n // 正弦曲线的缓动(sin(t))\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalIn(k: number) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalOut(k: number) {\n return Math.sin(k * Math.PI / 2);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalInOut(k: number) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n },\n\n // 指数曲线的缓动(2^t)\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialIn(k: number) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialOut(k: number) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialInOut(k: number) {\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if ((k *= 2) < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n },\n\n // 圆形曲线的缓动(sqrt(1-t^2))\n /**\n * @param {number} k\n * @return {number}\n */\n circularIn(k: number) {\n return 1 - Math.sqrt(1 - k * k);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n circularOut(k: number) {\n return Math.sqrt(1 - (--k * k));\n },\n /**\n * @param {number} k\n * @return {number}\n */\n circularInOut(k: number) {\n if ((k *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n },\n\n // 创建类似于弹簧在停止前来回振荡的动画\n /**\n * @param {number} k\n * @return {number}\n */\n elasticIn(k: number) {\n let s;\n let a = 0.1;\n let p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n return -(a * Math.pow(2, 10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n /**\n * @param {number} k\n * @return {number}\n */\n elasticOut(k: number) {\n let s;\n let a = 0.1;\n let p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n return (a * Math.pow(2, -10 * k)\n * Math.sin((k - s) * (2 * Math.PI) / p) + 1);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n elasticInOut(k: number) {\n let s;\n let a = 0.1;\n let p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n if ((k *= 2) < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n return a * Math.pow(2, -10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\n },\n\n // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动\n /**\n * @param {number} k\n * @return {number}\n */\n backIn(k: number) {\n let s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n backOut(k: number) {\n let s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n backInOut(k: number) {\n let s = 1.70158 * 1.525;\n if ((k *= 2) < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n },\n\n // 创建弹跳效果\n /**\n * @param {number} k\n * @return {number}\n */\n bounceIn(k: number) {\n return 1 - easing.bounceOut(1 - k);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n bounceOut(k: number) {\n if (k < (1 / 2.75)) {\n return 7.5625 * k * k;\n }\n else if (k < (2 / 2.75)) {\n return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n }\n else if (k < (2.5 / 2.75)) {\n return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n }\n else {\n return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n }\n },\n /**\n * @param {number} k\n * @return {number}\n */\n bounceInOut(k: number) {\n if (k < 0.5) {\n return easing.bounceIn(k * 2) * 0.5;\n }\n return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n }\n};\n\nexport default easing;","/**\n * 动画主控制器\n * @config target 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件\n * @config life(1000) 动画时长\n * @config delay(0) 动画延迟时间\n * @config loop(true)\n * @config gap(0) 循环的间隔时间\n * @config onframe\n * @config easing(optional)\n * @config ondestroy(optional)\n * @config onrestart(optional)\n *\n * TODO pause\n */\n\nimport easingFuncs, {AnimationEasing} from './easing';\nimport type Animation from './Animation';\n\ntype OnframeCallback = (percent: number) => void;\ntype ondestroyCallback = () => void\ntype onrestartCallback = () => void\n\nexport type DeferredEventTypes = 'destroy' | 'restart'\ntype DeferredEventKeys = 'ondestroy' | 'onrestart'\n\nexport interface ClipProps {\n life?: number\n delay?: number\n loop?: boolean\n gap?: number\n easing?: AnimationEasing\n\n onframe?: OnframeCallback\n ondestroy?: ondestroyCallback\n onrestart?: onrestartCallback\n}\n\nexport default class Clip {\n\n // 生命周期\n private _life: number\n // 延时\n private _delay: number\n\n private _initialized: boolean = false\n // 开始时间\n private _startTime = 0 // 开始时间单位毫秒\n\n private _pausedTime = 0\n private _paused = false\n\n animation: Animation\n\n loop: boolean\n gap: number\n easing: AnimationEasing\n\n // For linked list. Readonly\n next: Clip\n prev: Clip\n\n onframe: OnframeCallback\n ondestroy: ondestroyCallback\n onrestart: onrestartCallback\n\n constructor(opts: ClipProps) {\n\n this._life = opts.life || 1000;\n\n this._delay = opts.delay || 0;\n\n // this._startTime = new Date().getTime() + this._delay;\n\n // 是否循环\n this.loop = opts.loop == null ? false : opts.loop;\n\n this.gap = opts.gap || 0;\n\n this.easing = opts.easing || 'linear';\n\n this.onframe = opts.onframe;\n this.ondestroy = opts.ondestroy;\n this.onrestart = opts.onrestart;\n }\n\n step(globalTime: number, deltaTime: number): boolean {\n // Set startTime on first step, or _startTime may has milleseconds different between clips\n // PENDING\n if (!this._initialized) {\n this._startTime = globalTime + this._delay;\n this._initialized = true;\n }\n\n if (this._paused) {\n this._pausedTime += deltaTime;\n return;\n }\n\n let percent = (globalTime - this._startTime - this._pausedTime) / this._life;\n\n // PENDING: Not begin yet. Still run the loop.\n // In the case callback needs to be invoked.\n // Or want to update to the begin state at next frame when `setToFinal` and `delay` are both used.\n // To avoid the unexpected blink.\n if (percent < 0) {\n percent = 0;\n }\n\n percent = Math.min(percent, 1);\n\n const easing = this.easing;\n const easingFunc = typeof easing === 'string'\n ? easingFuncs[easing as keyof typeof easingFuncs] : easing;\n const schedule = typeof easingFunc === 'function'\n ? easingFunc(percent)\n : percent;\n\n this.onframe && this.onframe(schedule);\n\n // 结束\n if (percent === 1) {\n if (this.loop) {\n this._restart(globalTime);\n this.onrestart && this.onrestart();\n }\n else {\n return true;\n }\n }\n\n return false;\n }\n\n private _restart(globalTime: number) {\n const remainder = (globalTime - this._startTime - this._pausedTime) % this._life;\n this._startTime = globalTime - remainder + this.gap;\n this._pausedTime = 0;\n }\n\n pause() {\n this._paused = true;\n }\n\n resume() {\n this._paused = false;\n }\n}","import { Dictionary } from './types';\n\n// Simple LRU cache use doubly linked list\n// @module zrender/core/LRU\n\nexport class Entry {\n\n value: T\n\n key: string | number\n\n next: Entry\n\n prev: Entry\n\n constructor(val: T) {\n this.value = val;\n }\n}\n/**\n * Simple double linked list. Compared with array, it has O(1) remove operation.\n * @constructor\n */\nexport class LinkedList {\n\n head: Entry\n tail: Entry\n\n private _len = 0\n\n /**\n * Insert a new value at the tail\n */\n insert(val: T): Entry {\n const entry = new Entry(val);\n this.insertEntry(entry);\n return entry;\n }\n\n /**\n * Insert an entry at the tail\n */\n insertEntry(entry: Entry) {\n if (!this.head) {\n this.head = this.tail = entry;\n }\n else {\n this.tail.next = entry;\n entry.prev = this.tail;\n entry.next = null;\n this.tail = entry;\n }\n this._len++;\n }\n\n /**\n * Remove entry.\n */\n remove(entry: Entry) {\n const prev = entry.prev;\n const next = entry.next;\n if (prev) {\n prev.next = next;\n }\n else {\n // Is head\n this.head = next;\n }\n if (next) {\n next.prev = prev;\n }\n else {\n // Is tail\n this.tail = prev;\n }\n entry.next = entry.prev = null;\n this._len--;\n }\n\n /**\n * Get length\n */\n len(): number {\n return this._len;\n }\n\n /**\n * Clear list\n */\n clear() {\n this.head = this.tail = null;\n this._len = 0;\n }\n\n}\n\n/**\n * LRU Cache\n */\nexport default class LRU {\n\n private _list = new LinkedList()\n\n private _maxSize = 10\n\n private _lastRemovedEntry: Entry\n\n private _map: Dictionary> = {}\n\n constructor(maxSize: number) {\n this._maxSize = maxSize;\n }\n\n /**\n * @return Removed value\n */\n put(key: string | number, value: T): T {\n const list = this._list;\n const map = this._map;\n let removed = null;\n if (map[key] == null) {\n const len = list.len();\n // Reuse last removed entry\n let entry = this._lastRemovedEntry;\n\n if (len >= this._maxSize && len > 0) {\n // Remove the least recently used\n const leastUsedEntry = list.head;\n list.remove(leastUsedEntry);\n delete map[leastUsedEntry.key];\n\n removed = leastUsedEntry.value;\n this._lastRemovedEntry = leastUsedEntry;\n }\n\n if (entry) {\n entry.value = value;\n }\n else {\n entry = new Entry(value);\n }\n entry.key = key;\n list.insertEntry(entry);\n map[key] = entry;\n }\n\n return removed;\n }\n\n get(key: string | number): T {\n const entry = this._map[key];\n const list = this._list;\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 /**\n * Clear the cache\n */\n clear() {\n this._list.clear();\n this._map = {};\n }\n\n len() {\n return this._list.len();\n }\n}","import LRU from '../core/LRU';\n\nconst kCSSColorTable = {\n 'transparent': [0, 0, 0, 0], 'aliceblue': [240, 248, 255, 1],\n 'antiquewhite': [250, 235, 215, 1], 'aqua': [0, 255, 255, 1],\n 'aquamarine': [127, 255, 212, 1], 'azure': [240, 255, 255, 1],\n 'beige': [245, 245, 220, 1], 'bisque': [255, 228, 196, 1],\n 'black': [0, 0, 0, 1], 'blanchedalmond': [255, 235, 205, 1],\n 'blue': [0, 0, 255, 1], 'blueviolet': [138, 43, 226, 1],\n 'brown': [165, 42, 42, 1], 'burlywood': [222, 184, 135, 1],\n 'cadetblue': [95, 158, 160, 1], 'chartreuse': [127, 255, 0, 1],\n 'chocolate': [210, 105, 30, 1], 'coral': [255, 127, 80, 1],\n 'cornflowerblue': [100, 149, 237, 1], 'cornsilk': [255, 248, 220, 1],\n 'crimson': [220, 20, 60, 1], 'cyan': [0, 255, 255, 1],\n 'darkblue': [0, 0, 139, 1], 'darkcyan': [0, 139, 139, 1],\n 'darkgoldenrod': [184, 134, 11, 1], 'darkgray': [169, 169, 169, 1],\n 'darkgreen': [0, 100, 0, 1], 'darkgrey': [169, 169, 169, 1],\n 'darkkhaki': [189, 183, 107, 1], 'darkmagenta': [139, 0, 139, 1],\n 'darkolivegreen': [85, 107, 47, 1], 'darkorange': [255, 140, 0, 1],\n 'darkorchid': [153, 50, 204, 1], 'darkred': [139, 0, 0, 1],\n 'darksalmon': [233, 150, 122, 1], 'darkseagreen': [143, 188, 143, 1],\n 'darkslateblue': [72, 61, 139, 1], 'darkslategray': [47, 79, 79, 1],\n 'darkslategrey': [47, 79, 79, 1], 'darkturquoise': [0, 206, 209, 1],\n 'darkviolet': [148, 0, 211, 1], 'deeppink': [255, 20, 147, 1],\n 'deepskyblue': [0, 191, 255, 1], 'dimgray': [105, 105, 105, 1],\n 'dimgrey': [105, 105, 105, 1], 'dodgerblue': [30, 144, 255, 1],\n 'firebrick': [178, 34, 34, 1], 'floralwhite': [255, 250, 240, 1],\n 'forestgreen': [34, 139, 34, 1], 'fuchsia': [255, 0, 255, 1],\n 'gainsboro': [220, 220, 220, 1], 'ghostwhite': [248, 248, 255, 1],\n 'gold': [255, 215, 0, 1], 'goldenrod': [218, 165, 32, 1],\n 'gray': [128, 128, 128, 1], 'green': [0, 128, 0, 1],\n 'greenyellow': [173, 255, 47, 1], 'grey': [128, 128, 128, 1],\n 'honeydew': [240, 255, 240, 1], 'hotpink': [255, 105, 180, 1],\n 'indianred': [205, 92, 92, 1], 'indigo': [75, 0, 130, 1],\n 'ivory': [255, 255, 240, 1], 'khaki': [240, 230, 140, 1],\n 'lavender': [230, 230, 250, 1], 'lavenderblush': [255, 240, 245, 1],\n 'lawngreen': [124, 252, 0, 1], 'lemonchiffon': [255, 250, 205, 1],\n 'lightblue': [173, 216, 230, 1], 'lightcoral': [240, 128, 128, 1],\n 'lightcyan': [224, 255, 255, 1], 'lightgoldenrodyellow': [250, 250, 210, 1],\n 'lightgray': [211, 211, 211, 1], 'lightgreen': [144, 238, 144, 1],\n 'lightgrey': [211, 211, 211, 1], 'lightpink': [255, 182, 193, 1],\n 'lightsalmon': [255, 160, 122, 1], 'lightseagreen': [32, 178, 170, 1],\n 'lightskyblue': [135, 206, 250, 1], 'lightslategray': [119, 136, 153, 1],\n 'lightslategrey': [119, 136, 153, 1], 'lightsteelblue': [176, 196, 222, 1],\n 'lightyellow': [255, 255, 224, 1], 'lime': [0, 255, 0, 1],\n 'limegreen': [50, 205, 50, 1], 'linen': [250, 240, 230, 1],\n 'magenta': [255, 0, 255, 1], 'maroon': [128, 0, 0, 1],\n 'mediumaquamarine': [102, 205, 170, 1], 'mediumblue': [0, 0, 205, 1],\n 'mediumorchid': [186, 85, 211, 1], 'mediumpurple': [147, 112, 219, 1],\n 'mediumseagreen': [60, 179, 113, 1], 'mediumslateblue': [123, 104, 238, 1],\n 'mediumspringgreen': [0, 250, 154, 1], 'mediumturquoise': [72, 209, 204, 1],\n 'mediumvioletred': [199, 21, 133, 1], 'midnightblue': [25, 25, 112, 1],\n 'mintcream': [245, 255, 250, 1], 'mistyrose': [255, 228, 225, 1],\n 'moccasin': [255, 228, 181, 1], 'navajowhite': [255, 222, 173, 1],\n 'navy': [0, 0, 128, 1], 'oldlace': [253, 245, 230, 1],\n 'olive': [128, 128, 0, 1], 'olivedrab': [107, 142, 35, 1],\n 'orange': [255, 165, 0, 1], 'orangered': [255, 69, 0, 1],\n 'orchid': [218, 112, 214, 1], 'palegoldenrod': [238, 232, 170, 1],\n 'palegreen': [152, 251, 152, 1], 'paleturquoise': [175, 238, 238, 1],\n 'palevioletred': [219, 112, 147, 1], 'papayawhip': [255, 239, 213, 1],\n 'peachpuff': [255, 218, 185, 1], 'peru': [205, 133, 63, 1],\n 'pink': [255, 192, 203, 1], 'plum': [221, 160, 221, 1],\n 'powderblue': [176, 224, 230, 1], 'purple': [128, 0, 128, 1],\n 'red': [255, 0, 0, 1], 'rosybrown': [188, 143, 143, 1],\n 'royalblue': [65, 105, 225, 1], 'saddlebrown': [139, 69, 19, 1],\n 'salmon': [250, 128, 114, 1], 'sandybrown': [244, 164, 96, 1],\n 'seagreen': [46, 139, 87, 1], 'seashell': [255, 245, 238, 1],\n 'sienna': [160, 82, 45, 1], 'silver': [192, 192, 192, 1],\n 'skyblue': [135, 206, 235, 1], 'slateblue': [106, 90, 205, 1],\n 'slategray': [112, 128, 144, 1], 'slategrey': [112, 128, 144, 1],\n 'snow': [255, 250, 250, 1], 'springgreen': [0, 255, 127, 1],\n 'steelblue': [70, 130, 180, 1], 'tan': [210, 180, 140, 1],\n 'teal': [0, 128, 128, 1], 'thistle': [216, 191, 216, 1],\n 'tomato': [255, 99, 71, 1], 'turquoise': [64, 224, 208, 1],\n 'violet': [238, 130, 238, 1], 'wheat': [245, 222, 179, 1],\n 'white': [255, 255, 255, 1], 'whitesmoke': [245, 245, 245, 1],\n 'yellow': [255, 255, 0, 1], 'yellowgreen': [154, 205, 50, 1]\n};\n\nfunction clampCssByte(i: number): number { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clampCssAngle(i: number): number { // Clamp to integer 0 .. 360.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 360 ? 360 : i;\n}\n\nfunction clampCssFloat(f: number): number { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parseCssInt(val: string | number): number { // int or percentage.\n let str = val as string;\n if (str.length && str.charAt(str.length - 1) === '%') {\n return clampCssByte(parseFloat(str) / 100 * 255);\n }\n return clampCssByte(parseInt(str, 10));\n}\n\nfunction parseCssFloat(val: string | number): number { // float or percentage.\n let str = val as string;\n if (str.length && str.charAt(str.length - 1) === '%') {\n return clampCssFloat(parseFloat(str) / 100);\n }\n return clampCssFloat(parseFloat(str));\n}\n\nfunction cssHueToRgb(m1: number, m2: number, h: number): number {\n if (h < 0) {\n h += 1;\n }\n else if (h > 1) {\n h -= 1;\n }\n\n if (h * 6 < 1) {\n return m1 + (m2 - m1) * h * 6;\n }\n if (h * 2 < 1) {\n return m2;\n }\n if (h * 3 < 2) {\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n }\n return m1;\n}\n\nfunction lerpNumber(a: number, b: number, p: number): number {\n return a + (b - a) * p;\n}\n\nfunction setRgba(out: number[], r: number, g: number, b: number, a: number): number[] {\n out[0] = r;\n out[1] = g;\n out[2] = b;\n out[3] = a;\n return out;\n}\nfunction copyRgba(out: number[], a: number[]) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n\nconst colorCache = new LRU(20);\nlet lastRemovedArr: number[] = null;\n\nfunction putToCache(colorStr: string, rgbaArr: number[]) {\n // Reuse removed array\n if (lastRemovedArr) {\n copyRgba(lastRemovedArr, rgbaArr);\n }\n lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice()));\n}\n\nexport function parse(colorStr: string, rgbaArr?: number[]): number[] {\n if (!colorStr) {\n return;\n }\n rgbaArr = rgbaArr || [];\n\n let cached = colorCache.get(colorStr);\n if (cached) {\n return copyRgba(rgbaArr, cached);\n }\n\n // colorStr may be not string\n colorStr = colorStr + '';\n // Remove all whitespace, not compliant, but should just be more accepting.\n let str = colorStr.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) {\n copyRgba(rgbaArr, kCSSColorTable[str as keyof typeof kCSSColorTable]);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n\n // supports the forms #rgb, #rrggbb, #rgba, #rrggbbaa\n // #rrggbbaa(use the last pair of digits as alpha)\n // see https://drafts.csswg.org/css-color/#hex-notation\n const strLen = str.length;\n if (str.charAt(0) === '#') {\n if (strLen === 4 || strLen === 5) {\n const iv = parseInt(str.slice(1, 4), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return; // Covers NaN.\n }\n // interpret values of the form #rgb as #rrggbb and #rgba as #rrggbbaa\n setRgba(rgbaArr,\n ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n strLen === 5 ? parseInt(str.slice(4), 16) / 0xf : 1\n );\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n else if (strLen === 7 || strLen === 9) {\n const iv = parseInt(str.slice(1, 7), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return; // Covers NaN.\n }\n setRgba(rgbaArr,\n (iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n strLen === 9 ? parseInt(str.slice(7), 16) / 0xff : 1\n );\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n\n return;\n }\n let op = str.indexOf('(');\n let ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === strLen) {\n let fname = str.substr(0, op);\n let params: (number | string)[] = str.substr(op + 1, ep - (op + 1)).split(',');\n let alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) {\n return params.length === 3\n // to be compatible with rgb\n ? setRgba(rgbaArr, +params[0], +params[1], +params[2], 1)\n : setRgba(rgbaArr, 0, 0, 0, 1);\n }\n alpha = parseCssFloat(params.pop() as string); // jshint ignore:line\n // Fall through.\n case 'rgb':\n if (params.length !== 3) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n setRgba(rgbaArr,\n parseCssInt(params[0]),\n parseCssInt(params[1]),\n parseCssInt(params[2]),\n alpha\n );\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n case 'hsla':\n if (params.length !== 4) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n params[3] = parseCssFloat(params[3] as string);\n hsla2rgba(params, rgbaArr);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n case 'hsl':\n if (params.length !== 3) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n hsla2rgba(params, rgbaArr);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n default:\n return;\n }\n }\n\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n}\n\nfunction hsla2rgba(hsla: (number | string) [], rgba?: number[]): number[] {\n const h = (((parseFloat(hsla[0] as string) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n const s = parseCssFloat(hsla[1]);\n const l = parseCssFloat(hsla[2]);\n const m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n const m1 = l * 2 - m2;\n\n rgba = rgba || [];\n setRgba(rgba,\n clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255),\n clampCssByte(cssHueToRgb(m1, m2, h) * 255),\n clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255),\n 1\n );\n\n if (hsla.length === 4) {\n rgba[3] = hsla[3] as number;\n }\n\n return rgba;\n}\n\nfunction rgba2hsla(rgba: number[]): number[] {\n if (!rgba) {\n return;\n }\n\n // RGB from 0 to 255\n const R = rgba[0] / 255;\n const G = rgba[1] / 255;\n const B = rgba[2] / 255;\n\n const vMin = Math.min(R, G, B); // Min. value of RGB\n const vMax = Math.max(R, G, B); // Max. value of RGB\n const delta = vMax - vMin; // Delta RGB value\n\n const L = (vMax + vMin) / 2;\n let H;\n let S;\n // HSL results from 0 to 1\n if (delta === 0) {\n H = 0;\n S = 0;\n }\n else {\n if (L < 0.5) {\n S = delta / (vMax + vMin);\n }\n else {\n S = delta / (2 - vMax - vMin);\n }\n\n const deltaR = (((vMax - R) / 6) + (delta / 2)) / delta;\n const deltaG = (((vMax - G) / 6) + (delta / 2)) / delta;\n const deltaB = (((vMax - B) / 6) + (delta / 2)) / delta;\n\n if (R === vMax) {\n H = deltaB - deltaG;\n }\n else if (G === vMax) {\n H = (1 / 3) + deltaR - deltaB;\n }\n else if (B === vMax) {\n H = (2 / 3) + deltaG - deltaR;\n }\n\n if (H < 0) {\n H += 1;\n }\n\n if (H > 1) {\n H -= 1;\n }\n }\n\n const hsla = [H * 360, S, L];\n\n if (rgba[3] != null) {\n hsla.push(rgba[3]);\n }\n\n return hsla;\n}\n\nexport function lift(color: string, level: number) {\n const colorArr = parse(color);\n if (colorArr) {\n for (let i = 0; i < 3; i++) {\n if (level < 0) {\n colorArr[i] = colorArr[i] * (1 - level) | 0;\n }\n else {\n colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0;\n }\n if (colorArr[i] > 255) {\n colorArr[i] = 255;\n }\n else if (colorArr[i] < 0) {\n colorArr[i] = 0;\n }\n }\n return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb');\n }\n}\n\nexport function toHex(color: string): string {\n const colorArr = parse(color);\n if (colorArr) {\n return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1);\n }\n}\n\n/**\n * Map value to color. Faster than lerp methods because color is represented by rgba array.\n * @param normalizedValue A float between 0 and 1.\n * @param colors List of rgba color array\n * @param out Mapped gba color array\n * @return will be null/undefined if input illegal.\n */\nexport function fastLerp(\n normalizedValue: number,\n colors: number[][],\n out?: number[]\n): number[] {\n if (!(colors && colors.length)\n || !(normalizedValue >= 0 && normalizedValue <= 1)\n ) {\n return;\n }\n\n out = out || [];\n\n const value = normalizedValue * (colors.length - 1);\n const leftIndex = Math.floor(value);\n const rightIndex = Math.ceil(value);\n const leftColor = colors[leftIndex];\n const rightColor = colors[rightIndex];\n const dv = value - leftIndex;\n out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv));\n out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv));\n out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv));\n out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv));\n\n return out;\n}\n\n/**\n * @deprecated\n */\nexport const fastMapToColor = fastLerp;\n\ntype LerpFullOutput = {\n color: string\n leftIndex: number\n rightIndex: number\n value: number\n}\n/**\n * @param normalizedValue A float between 0 and 1.\n * @param colors Color list.\n * @param fullOutput Default false.\n * @return Result color. If fullOutput,\n return {color: ..., leftIndex: ..., rightIndex: ..., value: ...},\n */\nexport function lerp(\n normalizedValue: number,\n colors: string[],\n fullOutput?: boolean\n): string | LerpFullOutput {\n if (!(colors && colors.length)\n || !(normalizedValue >= 0 && normalizedValue <= 1)\n ) {\n return;\n }\n\n const value = normalizedValue * (colors.length - 1);\n const leftIndex = Math.floor(value);\n const rightIndex = Math.ceil(value);\n const leftColor = parse(colors[leftIndex]);\n const rightColor = parse(colors[rightIndex]);\n const dv = value - leftIndex;\n\n const color = stringify(\n [\n clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)),\n clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)),\n clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)),\n clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv))\n ],\n 'rgba'\n );\n\n return fullOutput\n ? {\n color: color,\n leftIndex: leftIndex,\n rightIndex: rightIndex,\n value: value\n }\n : color;\n}\n\n/**\n * @deprecated\n */\nexport const mapToColor = lerp;\n\n/**\n * @param color\n * @param h 0 ~ 360, ignore when null.\n * @param s 0 ~ 1, ignore when null.\n * @param l 0 ~ 1, ignore when null.\n * @return Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nexport function modifyHSL(color: string, h?: number, s?: number, l?: number): string {\n let colorArr = parse(color);\n\n if (color) {\n colorArr = rgba2hsla(colorArr);\n h != null && (colorArr[0] = clampCssAngle(h));\n s != null && (colorArr[1] = parseCssFloat(s));\n l != null && (colorArr[2] = parseCssFloat(l));\n\n return stringify(hsla2rgba(colorArr), 'rgba');\n }\n}\n\n/**\n * @param color\n * @param alpha 0 ~ 1\n * @return Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nexport function modifyAlpha(color: string, alpha?: number): string {\n const colorArr = parse(color);\n\n if (colorArr && alpha != null) {\n colorArr[3] = clampCssFloat(alpha);\n return stringify(colorArr, 'rgba');\n }\n}\n\n/**\n * @param arrColor like [12,33,44,0.4]\n * @param type 'rgba', 'hsva', ...\n * @return Result color. (If input illegal, return undefined).\n */\nexport function stringify(arrColor: number[], type: string): string {\n if (!arrColor || !arrColor.length) {\n return;\n }\n let colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2];\n if (type === 'rgba' || type === 'hsva' || type === 'hsla') {\n colorStr += ',' + arrColor[3];\n }\n return type + '(' + colorStr + ')';\n}\n\n/**\n * Calculate luminance. It will include alpha.\n */\nexport function lum(color: string, backgroundLum: number) {\n const arr = parse(color);\n return arr\n ? (0.299 * arr[0] + 0.587 * arr[1] + 0.114 * arr[2]) * arr[3] / 255\n + (1 - arr[3]) * backgroundLum // Blending with assumed white background.\n : 0;\n}\n\n/**\n * Generate a random color\n */\nexport function random(): string {\n let r = Math.round(Math.random() * 255);\n let g = Math.round(Math.random() * 255);\n let b = Math.round(Math.random() * 255);\n\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n}","/**\n * @module echarts/animation/Animator\n */\n\nimport Clip from './Clip';\nimport * as color from '../tool/color';\nimport {isArrayLike, keys, logError} from '../core/util';\nimport {ArrayLike, Dictionary} from '../core/types';\nimport { AnimationEasing } from './easing';\nimport Animation from './Animation';\n\ntype NumberArray = ArrayLike\ntype InterpolatableType = string | number | NumberArray | NumberArray[];\n\nconst arraySlice = Array.prototype.slice;\n\nexport function interpolateNumber(p0: number, p1: number, percent: number): number {\n return (p1 - p0) * percent + p0;\n}\n\nexport function step(p0: any, p1: any, percent: number): any {\n return percent > 0.5 ? p1 : p0;\n}\n\nexport function interpolate1DArray(\n out: NumberArray,\n p0: NumberArray,\n p1: NumberArray,\n percent: number\n) {\n // TODO Handling different length TypedArray\n const len = p0.length;\n for (let i = 0; i < len; i++) {\n out[i] = interpolateNumber(p0[i], p1[i], percent);\n }\n}\n\nexport function interpolate2DArray(\n out: NumberArray[],\n p0: NumberArray[],\n p1: NumberArray[],\n percent: number\n) {\n const len = p0.length;\n // TODO differnt length on each item?\n const len2 = len && p0[0].length;\n for (let i = 0; i < len; i++) {\n if (!out[i]) {\n out[i] = [];\n }\n for (let j = 0; j < len2; j++) {\n out[i][j] = interpolateNumber(p0[i][j], p1[i][j], percent);\n }\n }\n}\n\nfunction add1DArray(\n out: NumberArray,\n p0: NumberArray,\n p1: NumberArray,\n sign: 1 | -1\n) {\n const len = p0.length;\n for (let i = 0; i < len; i++) {\n out[i] = p0[i] + p1[i] * sign;\n }\n return out;\n}\n\nfunction add2DArray(\n out: NumberArray[],\n p0: NumberArray[],\n p1: NumberArray[],\n sign: 1 | -1\n) {\n const len = p0.length;\n const len2 = len && p0[0].length;\n for (let i = 0; i < len; i++) {\n if (!out[i]) {\n out[i] = [];\n }\n for (let j = 0; j < len2; j++) {\n out[i][j] = p0[i][j] + p1[i][j] * sign;\n }\n }\n return out;\n}\n// arr0 is source array, arr1 is target array.\n// Do some preprocess to avoid error happened when interpolating from arr0 to arr1\nfunction fillArray(\n val0: NumberArray | NumberArray[],\n val1: NumberArray | NumberArray[],\n arrDim: number\n) {\n // TODO Handling different length TypedArray\n let arr0 = val0 as (number | number[])[];\n let arr1 = val1 as (number | number[])[];\n if (!arr0.push || !arr1.push) {\n return;\n }\n const arr0Len = arr0.length;\n const arr1Len = arr1.length;\n if (arr0Len !== arr1Len) {\n // FIXME Not work for TypedArray\n const isPreviousLarger = arr0Len > arr1Len;\n if (isPreviousLarger) {\n // Cut the previous\n arr0.length = arr1Len;\n }\n else {\n // Fill the previous\n for (let i = arr0Len; i < arr1Len; i++) {\n arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]));\n }\n }\n }\n // Handling NaN value\n const len2 = arr0[0] && (arr0[0] as number[]).length;\n for (let i = 0; i < arr0.length; i++) {\n if (arrDim === 1) {\n if (isNaN(arr0[i] as number)) {\n arr0[i] = arr1[i];\n }\n }\n else {\n for (let j = 0; j < len2; j++) {\n if (isNaN((arr0 as number[][])[i][j])) {\n (arr0 as number[][])[i][j] = (arr1 as number[][])[i][j];\n }\n }\n }\n }\n}\n\nfunction is1DArraySame(arr0: NumberArray, arr1: NumberArray) {\n const len = arr0.length;\n if (len !== arr1.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (arr0[i] !== arr1[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction is2DArraySame(arr0: NumberArray[], arr1: NumberArray[]) {\n const len = arr0.length;\n if (len !== arr1.length) {\n return false;\n }\n const len2 = arr0[0].length;\n for (let i = 0; i < len; i++) {\n for (let j = 0; j < len2; j++) {\n if (arr0[i][j] !== arr1[i][j]) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Catmull Rom interpolate number\n */\nfunction catmullRomInterpolate(\n p0: number, p1: number, p2: number, p3: number, t: number, t2: number, t3: number\n) {\n const v0 = (p2 - p0) * 0.5;\n const v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3\n + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n + v0 * t + p1;\n}\n/**\n * Catmull Rom interpolate 1D array\n */\nfunction catmullRomInterpolate1DArray(\n out: NumberArray,\n p0: NumberArray,\n p1: NumberArray,\n p2: NumberArray,\n p3: NumberArray,\n t: number,\n t2: number,\n t3: number\n) {\n const len = p0.length;\n for (let i = 0; i < len; i++) {\n out[i] = catmullRomInterpolate(\n p0[i], p1[i], p2[i], p3[i], t, t2, t3\n );\n }\n}\n\n/**\n * Catmull Rom interpolate 2D array\n */\nfunction catmullRomInterpolate2DArray(\n out: NumberArray[],\n p0: NumberArray[],\n p1: NumberArray[],\n p2: NumberArray[],\n p3: NumberArray[],\n t: number,\n t2: number,\n t3: number\n) {\n const len = p0.length;\n const len2 = p0[0].length;\n for (let i = 0; i < len; i++) {\n if (!out[i]) {\n out[1] = [];\n }\n for (let j = 0; j < len2; j++) {\n out[i][j] = catmullRomInterpolate(\n p0[i][j], p1[i][j], p2[i][j], p3[i][j],\n t, t2, t3\n );\n }\n }\n}\n\n\nexport function cloneValue(value: InterpolatableType) {\n if (isArrayLike(value)) {\n const len = value.length;\n if (isArrayLike(value[0])) {\n const ret = [];\n for (let i = 0; i < len; i++) {\n ret.push(arraySlice.call(value[i]));\n }\n return ret;\n }\n\n return arraySlice.call(value);\n }\n\n return value;\n}\n\nfunction rgba2String(rgba: number[]): string {\n rgba[0] = Math.floor(rgba[0]);\n rgba[1] = Math.floor(rgba[1]);\n rgba[2] = Math.floor(rgba[2]);\n\n return 'rgba(' + rgba.join(',') + ')';\n}\n\nfunction guessArrayDim(value: ArrayLike): number {\n return isArrayLike(value && (value as ArrayLike)[0]) ? 2 : 1;\n}\n\ntype Keyframe = {\n time: number\n value: unknown\n percent: number\n\n additiveValue?: unknown\n}\n\nlet tmpRgba: number[] = [0, 0, 0, 0];\nclass Track {\n\n keyframes: Keyframe[] = []\n maxTime: number = 0\n\n propName: string\n\n /**\n * If use spline interpolate\n */\n useSpline: boolean\n\n // Larger than 0 if value is array\n arrDim: number = 0\n isValueColor: boolean\n\n interpolable: boolean = true\n\n private _finished: boolean\n\n private _needsSort: boolean = false\n\n private _isAllValueEqual = true\n\n private _additiveTrack: Track\n // Temporal storage for interpolated additive value.\n private _additiveValue: unknown\n\n // Info for run\n private _lastFrame = 0\n private _lastFramePercent = 0\n\n constructor(propName: string) {\n this.propName = propName;\n }\n\n isFinished() {\n return this._finished;\n }\n\n setFinished() {\n this._finished = true;\n // Also set additive track to finished.\n // Make sure the final value stopped on the latest track\n if (this._additiveTrack) {\n this._additiveTrack.setFinished();\n }\n }\n\n needsAnimate() {\n // return this.keyframes.length >= 2;\n return !this._isAllValueEqual && this.keyframes.length >= 2 && this.interpolable;\n }\n\n getAdditiveTrack() {\n return this._additiveTrack;\n }\n\n addKeyframe(time: number, value: unknown) {\n if (time >= this.maxTime) {\n this.maxTime = time;\n }\n else {\n this._needsSort = true;\n }\n\n let keyframes = this.keyframes;\n\n let len = keyframes.length;\n\n if (this.interpolable) {\n // Handling values only if it's possible to be interpolated.\n if (isArrayLike(value)) {\n let arrayDim = guessArrayDim(value);\n if (len > 0 && this.arrDim !== arrayDim) { // Two values has differnt dimension.\n this.interpolable = false;\n return;\n }\n // Not a number array.\n if (arrayDim === 1 && typeof value[0] !== 'number'\n || arrayDim === 2 && typeof value[0][0] !== 'number') {\n this.interpolable = false;\n return;\n }\n if (len > 0) {\n let lastFrame = keyframes[len - 1];\n\n // For performance consideration. only check 1d array\n if (this._isAllValueEqual) {\n if (arrayDim === 1) {\n if (!is1DArraySame(value, lastFrame.value as number[])) {\n this._isAllValueEqual = false;\n }\n }\n else {\n this._isAllValueEqual = false;\n }\n }\n }\n this.arrDim = arrayDim;\n }\n else {\n if (this.arrDim > 0) { // Previous value is array.\n this.interpolable = false;\n return;\n }\n\n if (typeof value === 'string') {\n const colorArray = color.parse(value);\n if (colorArray) {\n value = colorArray;\n this.isValueColor = true;\n }\n else {\n this.interpolable = false;\n }\n }\n else if (typeof value !== 'number' || isNaN(value)) {\n this.interpolable = false;\n return;\n }\n\n if (this._isAllValueEqual && len > 0) {\n let lastFrame = keyframes[len - 1];\n if (this.isValueColor && !is1DArraySame(lastFrame.value as number[], value as number[])) {\n this._isAllValueEqual = false;\n }\n else if (lastFrame.value !== value) {\n this._isAllValueEqual = false;\n }\n }\n }\n }\n\n const kf = {\n time,\n value,\n percent: 0\n };\n // Not check if value equal here.\n this.keyframes.push(kf);\n return kf;\n }\n\n prepare(additiveTrack?: Track) {\n let kfs = this.keyframes;\n if (this._needsSort) {\n // Sort keyframe as ascending\n kfs.sort(function (a: Keyframe, b: Keyframe) {\n return a.time - b.time;\n });\n }\n\n const arrDim = this.arrDim;\n const kfsLen = kfs.length;\n const lastKf = kfs[kfsLen - 1];\n\n for (let i = 0; i < kfsLen; i++) {\n kfs[i].percent = kfs[i].time / this.maxTime;\n\n if (arrDim > 0 && i !== kfsLen - 1) {\n // Align array with target frame.\n fillArray(kfs[i].value as NumberArray, lastKf.value as NumberArray, arrDim);\n }\n }\n\n // Only apply additive animaiton on INTERPOLABLE SAME TYPE values.\n if (additiveTrack\n // If two track both will be animated and have same value format.\n && this.needsAnimate()\n && additiveTrack.needsAnimate()\n && arrDim === additiveTrack.arrDim\n && this.isValueColor === additiveTrack.isValueColor\n && !additiveTrack._finished\n ) {\n this._additiveTrack = additiveTrack;\n\n const startValue = kfs[0].value;\n // Calculate difference\n for (let i = 0; i < kfsLen; i++) {\n if (arrDim === 0) {\n if (this.isValueColor) {\n kfs[i].additiveValue\n = add1DArray([], kfs[i].value as NumberArray, startValue as NumberArray, -1);\n }\n else {\n kfs[i].additiveValue = kfs[i].value as number - (startValue as number);\n }\n }\n else if (arrDim === 1) {\n kfs[i].additiveValue = add1DArray(\n [],\n kfs[i].value as NumberArray,\n startValue as NumberArray,\n -1\n );\n }\n else if (arrDim === 2) {\n kfs[i].additiveValue = add2DArray(\n [],\n kfs[i].value as NumberArray[],\n startValue as NumberArray[],\n -1\n );\n }\n }\n }\n }\n\n step(target: any, percent: number) {\n if (this._finished) { // Track may be set to finished.\n return;\n }\n\n if (this._additiveTrack && this._additiveTrack._finished) {\n // Remove additive track if it's finished.\n this._additiveTrack = null;\n }\n const isAdditive = this._additiveTrack != null;\n const valueKey = isAdditive ? 'additiveValue' : 'value';\n\n const keyframes = this.keyframes;\n const kfsNum = this.keyframes.length;\n const propName = this.propName;\n const arrDim = this.arrDim;\n const isValueColor = this.isValueColor;\n // Find the range keyframes\n // kf1-----kf2---------current--------kf3\n // find kf2 and kf3 and do interpolation\n let frameIdx;\n // In the easing function like elasticOut, percent may less than 0\n if (percent < 0) {\n frameIdx = 0;\n }\n else if (percent < this._lastFramePercent) {\n // Start from next key\n // PENDING start from lastFrame ?\n const start = Math.min(this._lastFrame + 1, kfsNum - 1);\n for (frameIdx = start; frameIdx >= 0; frameIdx--) {\n if (keyframes[frameIdx].percent <= percent) {\n break;\n }\n }\n // PENDING really need to do this ?\n frameIdx = Math.min(frameIdx, kfsNum - 2);\n }\n else {\n for (frameIdx = this._lastFrame; frameIdx < kfsNum; frameIdx++) {\n if (keyframes[frameIdx].percent > percent) {\n break;\n }\n }\n frameIdx = Math.min(frameIdx - 1, kfsNum - 2);\n }\n let nextFrame = keyframes[frameIdx + 1];\n let frame = keyframes[frameIdx];\n\n // Defensive coding.\n if (!(frame && nextFrame)) {\n return;\n }\n\n this._lastFrame = frameIdx;\n this._lastFramePercent = percent;\n\n\n const range = (nextFrame.percent - frame.percent);\n if (range === 0) {\n return;\n }\n const w = (percent - frame.percent) / range;\n\n // If value is arr\n let targetArr = isAdditive ? this._additiveValue\n : (isValueColor ? tmpRgba : target[propName]);\n\n if ((arrDim > 0 || isValueColor) && !targetArr) {\n targetArr = this._additiveValue = [];\n }\n if (this.useSpline) {\n const p1 = keyframes[frameIdx][valueKey];\n const p0 = keyframes[frameIdx === 0 ? frameIdx : frameIdx - 1][valueKey];\n const p2 = keyframes[frameIdx > kfsNum - 2 ? kfsNum - 1 : frameIdx + 1][valueKey];\n const p3 = keyframes[frameIdx > kfsNum - 3 ? kfsNum - 1 : frameIdx + 2][valueKey];\n\n if (arrDim > 0) {\n arrDim === 1\n ? catmullRomInterpolate1DArray(\n targetArr as NumberArray,\n p0 as NumberArray,\n p1 as NumberArray,\n p2 as NumberArray,\n p3 as NumberArray,\n w, w * w, w * w * w\n )\n : catmullRomInterpolate2DArray(\n targetArr as NumberArray[],\n p0 as NumberArray[], p1 as NumberArray[], p2 as NumberArray[], p3 as NumberArray[],\n w, w * w, w * w * w\n );\n }\n else if (isValueColor) {\n catmullRomInterpolate1DArray(\n targetArr,\n p0 as NumberArray, p1 as NumberArray, p2 as NumberArray, p3 as NumberArray,\n w, w * w, w * w * w\n );\n if (!isAdditive) { // Convert to string later:)\n target[propName] = rgba2String(targetArr);\n }\n }\n else {\n let value;\n if (!this.interpolable) {\n // String is step(0.5)\n // value = step(p1, p2, w);\n value = p2;\n }\n else {\n value = catmullRomInterpolate(\n p0 as number, p1 as number, p2 as number, p3 as number,\n w, w * w, w * w * w\n );\n }\n if (isAdditive) {\n this._additiveValue = value;\n }\n else {\n target[propName] = value;\n }\n }\n }\n else {\n if (arrDim > 0) {\n arrDim === 1\n ? interpolate1DArray(\n targetArr as NumberArray,\n frame[valueKey] as NumberArray,\n nextFrame[valueKey] as NumberArray,\n w\n )\n : interpolate2DArray(\n targetArr as NumberArray[],\n frame[valueKey] as NumberArray[],\n nextFrame[valueKey] as NumberArray[],\n w\n );\n }\n else if (isValueColor) {\n interpolate1DArray(\n targetArr,\n frame[valueKey] as NumberArray,\n nextFrame[valueKey] as NumberArray,\n w\n );\n if (!isAdditive) { // Convert to string later:)\n target[propName] = rgba2String(targetArr);\n }\n }\n else {\n let value;\n if (!this.interpolable) {\n // String is step(0.5)\n value = step(frame[valueKey], nextFrame[valueKey], w);\n }\n else {\n value = interpolateNumber(frame[valueKey] as number, nextFrame[valueKey] as number, w);\n }\n if (isAdditive) {\n this._additiveValue = value;\n }\n else {\n target[propName] = value;\n }\n }\n }\n\n // Add additive to target\n if (isAdditive) {\n this._addToTarget(target);\n }\n }\n\n private _addToTarget(target: any) {\n const arrDim = this.arrDim;\n const propName = this.propName;\n const additiveValue = this._additiveValue;\n\n if (arrDim === 0) {\n if (this.isValueColor) {\n // TODO reduce unnecessary parse\n color.parse(target[propName], tmpRgba);\n add1DArray(tmpRgba, tmpRgba, additiveValue as NumberArray, 1);\n target[propName] = rgba2String(tmpRgba);\n }\n else {\n // Add a difference value based on the change of previous frame.\n target[propName] = target[propName] + additiveValue;\n }\n }\n else if (arrDim === 1) {\n add1DArray(target[propName], target[propName], additiveValue as NumberArray, 1);\n }\n else if (arrDim === 2) {\n add2DArray(target[propName], target[propName], additiveValue as NumberArray[], 1);\n }\n }\n}\n\n\ntype DoneCallback = () => void;\ntype AbortCallback = () => void;\nexport type OnframeCallback = (target: T, percent: number) => void;\n\nexport type AnimationPropGetter = (target: T, key: string) => InterpolatableType;\nexport type AnimationPropSetter = (target: T, key: string, value: InterpolatableType) => void;\n\nexport default class Animator {\n\n animation?: Animation\n\n targetName?: string\n\n scope?: string\n\n __fromStateTransition?: string\n\n private _tracks: Dictionary = {}\n private _trackKeys: string[] = []\n\n private _target: T\n\n private _loop: boolean\n private _delay = 0\n private _maxTime = 0\n\n // Some status\n private _paused = false\n // 0: Not started\n // 1: Invoked started\n // 2: Has been run for at least one frame.\n private _started = 0\n\n private _additiveAnimators: Animator[]\n\n private _doneList: DoneCallback[]\n private _onframeList: OnframeCallback[]\n\n private _abortedList: AbortCallback[]\n\n private _clip: Clip = null\n\n constructor(target: T, loop: boolean, additiveTo?: Animator[]) {\n this._target = target;\n this._loop = loop;\n if (loop && additiveTo) {\n logError('Can\\' use additive animation on looped animation.');\n return;\n }\n this._additiveAnimators = additiveTo;\n }\n\n getTarget() {\n return this._target;\n }\n\n /**\n * Target can be changed during animation\n * For example if style is changed during state change.\n * We need to change target to the new style object.\n */\n changeTarget(target: T) {\n this._target = target;\n }\n\n /**\n * Set Animation keyframe\n * @param time 关键帧时间,单位是ms\n * @param props 关键帧的属性值,key-value表示\n */\n when(time: number, props: Dictionary) {\n return this.whenWithKeys(time, props, keys(props) as string[]);\n }\n\n\n // Fast path for add keyframes of aniamteTo\n whenWithKeys(time: number, props: Dictionary, propNames: string[]) {\n const tracks = this._tracks;\n for (let i = 0; i < propNames.length; i++) {\n const propName = propNames[i];\n\n let track = tracks[propName];\n if (!track) {\n track = tracks[propName] = new Track(propName);\n\n let initialValue;\n const additiveTrack = this._getAdditiveTrack(propName);\n if (additiveTrack) {\n const lastFinalKf = additiveTrack.keyframes[additiveTrack.keyframes.length - 1];\n // Use the last state of additived animator.\n initialValue = lastFinalKf && lastFinalKf.value;\n if (additiveTrack.isValueColor && initialValue) {\n // Convert to rgba string\n initialValue = rgba2String(initialValue as number[]);\n }\n }\n else {\n initialValue = (this._target as any)[propName];\n }\n // Invalid value\n if (initialValue == null) {\n // zrLog('Invalid property ' + propName);\n continue;\n }\n // If time is 0\n // Then props is given initialize value\n // Else\n // Initialize value from current prop value\n if (time !== 0) {\n track.addKeyframe(0, cloneValue(initialValue));\n }\n\n this._trackKeys.push(propName);\n }\n // PENDING\n track.addKeyframe(time, cloneValue(props[propName]));\n }\n this._maxTime = Math.max(this._maxTime, time);\n return this;\n }\n\n pause() {\n this._clip.pause();\n this._paused = true;\n }\n\n resume() {\n this._clip.resume();\n this._paused = false;\n }\n\n isPaused(): boolean {\n return !!this._paused;\n }\n\n private _doneCallback() {\n this._setTracksFinished();\n // Clear clip\n this._clip = null;\n\n const doneList = this._doneList;\n if (doneList) {\n const len = doneList.length;\n for (let i = 0; i < len; i++) {\n doneList[i].call(this);\n }\n }\n }\n private _abortedCallback() {\n this._setTracksFinished();\n\n const animation = this.animation;\n const abortedList = this._abortedList;\n\n if (animation) {\n animation.removeClip(this._clip);\n }\n this._clip = null;\n\n if (abortedList) {\n for (let i = 0; i < abortedList.length; i++) {\n abortedList[i].call(this);\n }\n }\n }\n private _setTracksFinished() {\n const tracks = this._tracks;\n const tracksKeys = this._trackKeys;\n for (let i = 0; i < tracksKeys.length; i++) {\n tracks[tracksKeys[i]].setFinished();\n }\n }\n\n private _getAdditiveTrack(trackName: string): Track {\n let additiveTrack;\n const additiveAnimators = this._additiveAnimators;\n if (additiveAnimators) {\n for (let i = 0; i < additiveAnimators.length; i++) {\n const track = additiveAnimators[i].getTrack(trackName);\n if (track) {\n // Use the track of latest animator.\n additiveTrack = track;\n }\n }\n }\n return additiveTrack;\n }\n\n /**\n * Start the animation\n * @param easing\n * @param forceAnimate\n * @return\n */\n start(easing?: AnimationEasing, forceAnimate?: boolean) {\n if (this._started > 0) {\n return;\n }\n this._started = 1;\n\n const self = this;\n\n let tracks: Track[] = [];\n for (let i = 0; i < this._trackKeys.length; i++) {\n const propName = this._trackKeys[i];\n const track = this._tracks[propName];\n const additiveTrack = this._getAdditiveTrack(propName)\n const kfs = track.keyframes;\n track.prepare(additiveTrack);\n if (track.needsAnimate()) {\n tracks.push(track);\n }\n else if (!track.interpolable) {\n const lastKf = kfs[kfs.length - 1];\n // Set final value.\n if (lastKf) {\n (self._target as any)[track.propName] = lastKf.value;\n }\n }\n }\n // Add during callback on the last clip\n if (tracks.length || forceAnimate) {\n const clip = new Clip({\n life: this._maxTime,\n loop: this._loop,\n delay: this._delay,\n onframe(percent: number) {\n self._started = 2;\n // Remove additived animator if it's finished.\n // For the purpose of memory effeciency.\n const additiveAnimators = self._additiveAnimators;\n if (additiveAnimators) {\n let stillHasAdditiveAnimator = false;\n for (let i = 0; i < additiveAnimators.length; i++) {\n if (additiveAnimators[i]._clip) {\n stillHasAdditiveAnimator = true;\n break;\n }\n }\n if (!stillHasAdditiveAnimator) {\n self._additiveAnimators = null;\n }\n }\n\n for (let i = 0; i < tracks.length; i++) {\n // NOTE: don't cache target outside.\n // Because target may be changed.\n tracks[i].step(self._target, percent);\n }\n const onframeList = self._onframeList;\n if (onframeList) {\n for (let i = 0; i < onframeList.length; i++) {\n onframeList[i](self._target, percent);\n }\n }\n },\n ondestroy() {\n self._doneCallback();\n }\n });\n this._clip = clip;\n\n if (this.animation) {\n this.animation.addClip(clip);\n }\n\n if (easing && easing !== 'spline') {\n clip.easing = easing;\n }\n }\n else {\n // This optimization will help the case that in the upper application\n // the view may be refreshed frequently, where animation will be\n // called repeatly but nothing changed.\n this._doneCallback();\n }\n\n return this;\n }\n /**\n * Stop animation\n * @param {boolean} forwardToLast If move to last frame before stop\n */\n stop(forwardToLast?: boolean) {\n if (!this._clip) {\n return;\n }\n const clip = this._clip;\n if (forwardToLast) {\n // Move to last frame before stop\n clip.onframe(1);\n }\n\n this._abortedCallback();\n }\n /**\n * Set when animation delay starts\n * @param time 单位ms\n */\n delay(time: number) {\n this._delay = time;\n return this;\n }\n /**\n * 添加动画每一帧的回调函数\n * @param callback\n */\n during(cb: OnframeCallback) {\n if (cb) {\n if (!this._onframeList) {\n this._onframeList = [];\n }\n this._onframeList.push(cb);\n }\n return this;\n }\n /**\n * Add callback for animation end\n * @param cb\n */\n done(cb: DoneCallback) {\n if (cb) {\n if (!this._doneList) {\n this._doneList = [];\n }\n this._doneList.push(cb);\n }\n return this;\n }\n\n aborted(cb: AbortCallback) {\n if (cb) {\n if (!this._abortedList) {\n this._abortedList = [];\n }\n this._abortedList.push(cb);\n }\n return this;\n }\n\n getClip() {\n return this._clip;\n }\n\n getTrack(propName: string) {\n return this._tracks[propName];\n }\n\n /**\n * Return true if animator is not available anymore.\n */\n stopTracks(propNames: string[], forwardToLast?: boolean): boolean {\n if (!propNames.length || !this._clip) {\n return true;\n }\n const tracks = this._tracks;\n const tracksKeys = this._trackKeys;\n\n for (let i = 0; i < propNames.length; i++) {\n const track = tracks[propNames[i]];\n if (track) {\n if (forwardToLast) {\n track.step(this._target, 1);\n }\n // If the track has not been run for at least wrong frame.\n // The property may be stayed at the final state. when setToFinal is set true.\n // For example:\n // Animate x from 0 to 100, then animate to 150 immediately.\n // We want the x is translated from 0 to 150, not 100 to 150.\n else if (this._started === 1) {\n track.step(this._target, 0);\n }\n // Set track to finished\n track.setFinished();\n }\n }\n let allAborted = true;\n for (let i = 0; i < tracksKeys.length; i++) {\n if (!tracks[tracksKeys[i]].isFinished()) {\n allAborted = false;\n break;\n }\n }\n // Remove clip if all tracks has been aborted.\n if (allAborted) {\n this._abortedCallback();\n }\n\n return allAborted;\n }\n\n /**\n * Save values of final state to target.\n * It is mainly used in state mangement. When state is switching during animation.\n * We need to save final state of animation to the normal state. Not interpolated value.\n */\n saveFinalToTarget(target: T, trackKeys?: readonly string[]) {\n if (!target) { // DO nothing if target is not given.\n return;\n }\n\n trackKeys = trackKeys || this._trackKeys;\n\n for (let i = 0; i < trackKeys.length; i++) {\n const propName = trackKeys[i];\n const track = this._tracks[propName];\n if (!track || track.isFinished()) { // Ignore finished track.\n continue;\n }\n const kfs = track.keyframes;\n const lastKf = kfs[kfs.length - 1];\n if (lastKf) {\n // TODO CLONE?\n let val: unknown = cloneValue(lastKf.value as any);\n if (track.isValueColor) {\n val = rgba2String(val as number[]);\n }\n\n (target as any)[propName] = val;\n }\n }\n }\n\n // Change final value after animator has been started.\n // NOTE: Be careful to use it.\n __changeFinalValue(finalProps: Dictionary, trackKeys?: readonly string[]) {\n trackKeys = trackKeys || keys(finalProps);\n\n for (let i = 0; i < trackKeys.length; i++) {\n const propName = trackKeys[i];\n\n const track = this._tracks[propName];\n if (!track) {\n continue;\n }\n\n const kfs = track.keyframes;\n if (kfs.length > 1) {\n // Remove the original last kf and add again.\n const lastKf = kfs.pop();\n\n track.addKeyframe(lastKf.time, finalProps[propName]);\n // Prepare again.\n track.prepare(track.getAdditiveTrack());\n }\n }\n }\n\n}","/**\n * Animation main class, dispatch and manage all animation controllers\n *\n */\n// TODO Additive animation\n// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/\n// https://developer.apple.com/videos/wwdc2014/#236\n\nimport Eventful from '../core/Eventful';\nimport requestAnimationFrame from './requestAnimationFrame';\nimport Animator from './Animator';\nimport Clip from './Clip';\n\n\ninterface Stage {\n update?: () => void\n}\ntype OnframeCallback = (deltaTime: number) => void\n\ninterface AnimationOption {\n stage?: Stage\n onframe?: OnframeCallback\n}\n/**\n * @example\n * const animation = new Animation();\n * const obj = {\n * x: 100,\n * y: 100\n * };\n * animation.animate(node.position)\n * .when(1000, {\n * x: 500,\n * y: 500\n * })\n * .when(2000, {\n * x: 100,\n * y: 100\n * })\n * .start('spline');\n */\n\nexport default class Animation extends Eventful {\n\n stage: Stage\n\n onframe: OnframeCallback\n\n // Use linked list to store clip\n private _clipsHead: Clip\n private _clipsTail: Clip\n\n private _running: boolean = false\n\n private _time: number = 0\n private _pausedTime: number = 0\n private _pauseStart: number = 0\n\n private _paused = false;\n\n constructor(opts?: AnimationOption) {\n super();\n\n opts = opts || {};\n\n this.stage = opts.stage || {};\n\n this.onframe = opts.onframe || function () {};\n }\n\n /**\n * Add clip\n */\n addClip(clip: Clip) {\n if (clip.animation) {\n // Clip has been added\n this.removeClip(clip);\n }\n\n if (!this._clipsHead) {\n this._clipsHead = this._clipsTail = clip;\n }\n else {\n this._clipsTail.next = clip;\n clip.prev = this._clipsTail;\n clip.next = null;\n this._clipsTail = clip;\n }\n clip.animation = this;\n }\n /**\n * Add animator\n */\n addAnimator(animator: Animator) {\n animator.animation = this;\n const clip = animator.getClip();\n if (clip) {\n this.addClip(clip);\n }\n }\n /**\n * Delete animation clip\n */\n removeClip(clip: Clip) {\n if (!clip.animation) {\n return;\n }\n const prev = clip.prev;\n const next = clip.next;\n if (prev) {\n prev.next = next;\n }\n else {\n // Is head\n this._clipsHead = next;\n }\n if (next) {\n next.prev = prev;\n }\n else {\n // Is tail\n this._clipsTail = prev;\n }\n clip.next = clip.prev = clip.animation = null;\n }\n\n /**\n * Delete animation clip\n */\n removeAnimator(animator: Animator) {\n const clip = animator.getClip();\n if (clip) {\n this.removeClip(clip);\n }\n animator.animation = null;\n }\n\n update(notTriggerFrameAndStageUpdate?: boolean) {\n const time = new Date().getTime() - this._pausedTime;\n const delta = time - this._time;\n let clip = this._clipsHead;\n\n while (clip) {\n // Save the nextClip before step.\n // So the loop will not been affected if the clip is removed in the callback\n const nextClip = clip.next;\n let finished = clip.step(time, delta);\n if (finished) {\n clip.ondestroy && clip.ondestroy();\n this.removeClip(clip);\n clip = nextClip;\n }\n else {\n clip = nextClip;\n }\n }\n\n this._time = time;\n\n if (!notTriggerFrameAndStageUpdate) {\n this.onframe(delta);\n\n // 'frame' should be triggered before stage, because upper application\n // depends on the sequence (e.g., echarts-stream and finish\n // event judge)\n this.trigger('frame', delta);\n\n this.stage.update && this.stage.update();\n }\n }\n\n _startLoop() {\n const self = this;\n\n this._running = true;\n\n function step() {\n if (self._running) {\n\n requestAnimationFrame(step);\n\n !self._paused && self.update();\n }\n }\n\n requestAnimationFrame(step);\n }\n\n /**\n * Start animation.\n */\n start() {\n if (this._running) {\n return;\n }\n\n this._time = new Date().getTime();\n this._pausedTime = 0;\n\n this._startLoop();\n }\n\n /**\n * Stop animation.\n */\n stop() {\n this._running = false;\n }\n\n /**\n * Pause animation.\n */\n pause() {\n if (!this._paused) {\n this._pauseStart = new Date().getTime();\n this._paused = true;\n }\n }\n\n /**\n * Resume animation.\n */\n resume() {\n if (this._paused) {\n this._pausedTime += (new Date().getTime()) - this._pauseStart;\n this._paused = false;\n }\n }\n\n /**\n * Clear animation.\n */\n clear() {\n let clip = this._clipsHead;\n\n while (clip) {\n let nextClip = clip.next;\n clip.prev = clip.next = clip.animation = null;\n clip = nextClip;\n }\n\n this._clipsHead = this._clipsTail = null;\n }\n\n /**\n * Whether animation finished.\n */\n isFinished() {\n return this._clipsHead == null;\n }\n\n /**\n * Creat animator for a target, whose props can be animated.\n */\n // TODO Gap\n animate(target: T, options: {\n loop?: boolean // Whether loop animation.\n }) {\n options = options || {};\n\n // Start animation loop\n this.start();\n\n const animator = new Animator(\n target,\n options.loop\n );\n\n this.addAnimator(animator);\n\n return animator;\n }\n}","\n/* global document */\n\nimport {\n addEventListener,\n removeEventListener,\n normalizeEvent,\n getNativeEvent\n} from '../core/event';\nimport * as zrUtil from '../core/util';\nimport Eventful from '../core/Eventful';\nimport env from '../core/env';\nimport { Dictionary, ZRRawEvent, ZRRawMouseEvent } from '../core/types';\nimport { VectorArray } from '../core/vector';\nimport Handler from '../Handler';\n\ntype DomHandlersMap = Dictionary<(this: HandlerDomProxy, event: ZRRawEvent) => void>\n\ntype DomExtended = Node & {\n domBelongToZr: boolean\n}\n\nconst TOUCH_CLICK_DELAY = 300;\n\nconst globalEventSupported = env.domSupported;\n\n\nconst localNativeListenerNames = (function () {\n const mouseHandlerNames = [\n 'click', 'dblclick', 'mousewheel', 'wheel', 'mouseout',\n 'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n ];\n const touchHandlerNames = [\n 'touchstart', 'touchend', 'touchmove'\n ];\n const pointerEventNameMap = {\n pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1\n };\n const pointerHandlerNames = zrUtil.map(mouseHandlerNames, function (name) {\n const nm = name.replace('mouse', 'pointer');\n return pointerEventNameMap.hasOwnProperty(nm) ? nm : name;\n });\n\n return {\n mouse: mouseHandlerNames,\n touch: touchHandlerNames,\n pointer: pointerHandlerNames\n };\n})();\n\nconst globalNativeListenerNames = {\n mouse: ['mousemove', 'mouseup'],\n pointer: ['pointermove', 'pointerup']\n};\n\nlet wheelEventSupported = false;\n\n\n// Although firfox has 'DOMMouseScroll' event and do not has 'mousewheel' event,\n// the 'DOMMouseScroll' event do not performe the same behavior on touch pad device\n// (like on Mac) ('DOMMouseScroll' will be triggered only if a big wheel delta).\n// So we should not use it.\n// function eventNameFix(name: string) {\n// return (name === 'mousewheel' && env.browser.firefox) ? 'DOMMouseScroll' : name;\n// }\n\nfunction isPointerFromTouch(event: ZRRawEvent) {\n const pointerType = (event as any).pointerType;\n return pointerType === 'pen' || pointerType === 'touch';\n}\n\n// function useMSGuesture(handlerProxy, event) {\n// return isPointerFromTouch(event) && !!handlerProxy._msGesture;\n// }\n\n// function onMSGestureChange(proxy, event) {\n// if (event.translationX || event.translationY) {\n// // mousemove is carried by MSGesture to reduce the sensitivity.\n// proxy.handler.dispatchToElement(event.target, 'mousemove', event);\n// }\n// if (event.scale !== 1) {\n// event.pinchX = event.offsetX;\n// event.pinchY = event.offsetY;\n// event.pinchScale = event.scale;\n// proxy.handler.dispatchToElement(event.target, 'pinch', event);\n// }\n// }\n\n/**\n * Prevent mouse event from being dispatched after Touch Events action\n * @see \n * 1. Mobile browsers dispatch mouse events 300ms after touchend.\n * 2. Chrome for Android dispatch mousedown for long-touch about 650ms\n * Result: Blocking Mouse Events for 700ms.\n *\n * @param {DOMHandlerScope} scope\n */\nfunction setTouchTimer(scope: DOMHandlerScope) {\n scope.touching = true;\n if (scope.touchTimer != null) {\n clearTimeout(scope.touchTimer);\n scope.touchTimer = null;\n }\n scope.touchTimer = setTimeout(function () {\n scope.touching = false;\n scope.touchTimer = null;\n }, 700);\n}\n\n// Mark touch, which is useful in distinguish touch and\n// mouse event in upper applicatoin.\nfunction markTouch(event: ZRRawEvent) {\n event && (event.zrByTouch = true);\n}\n\n\n// function markTriggeredFromLocal(event) {\n// event && (event.__zrIsFromLocal = true);\n// }\n\n// function isTriggeredFromLocal(instance, event) {\n// return !!(event && event.__zrIsFromLocal);\n// }\n\nfunction normalizeGlobalEvent(instance: HandlerDomProxy, event: ZRRawEvent) {\n // offsetX, offsetY still need to be calculated. They are necessary in the event\n // handlers of the upper applications. Set `true` to force calculate them.\n return normalizeEvent(\n instance.dom,\n // TODO ANY TYPE\n new FakeGlobalEvent(instance, event) as any as ZRRawEvent,\n true\n );\n}\n\n/**\n * Detect whether the given el is in `painterRoot`.\n */\nfunction isLocalEl(instance: HandlerDomProxy, el: Node) {\n let elTmp = el;\n let isLocal = false;\n while (elTmp && elTmp.nodeType !== 9\n && !(\n isLocal = (elTmp as DomExtended).domBelongToZr\n || (elTmp !== el && elTmp === instance.painterRoot)\n )\n ) {\n elTmp = elTmp.parentNode;\n }\n return isLocal;\n}\n\n/**\n * Make a fake event but not change the original event,\n * becuase the global event probably be used by other\n * listeners not belonging to zrender.\n * @class\n */\nclass FakeGlobalEvent {\n type: string\n target: HTMLElement\n currentTarget: HTMLElement\n\n pointerType: string\n clientX: number\n clientY: number\n\n constructor(instance: HandlerDomProxy, event: ZRRawEvent) {\n this.type = event.type;\n this.target = this.currentTarget = instance.dom;\n this.pointerType = (event as any).pointerType;\n // Necessray for the force calculation of zrX, zrY\n this.clientX = (event as ZRRawMouseEvent).clientX;\n this.clientY = (event as ZRRawMouseEvent).clientY;\n // Because we do not mount global listeners to touch events,\n // we do not copy `targetTouches` and `changedTouches` here.\n }\n\n // we make the default methods on the event do nothing,\n // otherwise it is dangerous. See more details in\n // [DRAG_OUTSIDE] in `Handler.js`.\n stopPropagation = zrUtil.noop\n stopImmediatePropagation = zrUtil.noop\n preventDefault = zrUtil.noop\n}\n\n\n/**\n * Local DOM Handlers\n * @this {HandlerProxy}\n */\nconst localDOMHandlers: DomHandlersMap = {\n\n mousedown(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n this.__mayPointerCapture = [event.zrX, event.zrY];\n\n this.trigger('mousedown', event);\n },\n\n mousemove(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n const downPoint = this.__mayPointerCapture;\n if (downPoint && (event.zrX !== downPoint[0] || event.zrY !== downPoint[1])) {\n this.__togglePointerCapture(true);\n }\n\n this.trigger('mousemove', event);\n },\n\n mouseup(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n this.__togglePointerCapture(false);\n\n this.trigger('mouseup', event);\n },\n\n mouseout(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n // There might be some doms created by upper layer application\n // at the same level of painter.getViewportRoot() (e.g., tooltip\n // dom created by echarts), where 'globalout' event should not\n // be triggered when mouse enters these doms. (But 'mouseout'\n // should be triggered at the original hovered element as usual).\n const element = (event as any).toElement || (event as ZRRawMouseEvent).relatedTarget;\n\n // For SVG rendering, there are SVG elements inside `this.dom`.\n // (especially in decal case). Should not to handle those \"mouseout\"..\n if (!isLocalEl(this, element)) {\n // Similarly to the browser did on `document` and touch event,\n // `globalout` will be delayed to final pointer cature release.\n if (this.__pointerCapturing) {\n event.zrEventControl = 'no_globalout';\n }\n\n this.trigger('mouseout', event);\n }\n },\n\n wheel(event: ZRRawEvent) {\n // Morden agent has supported event `wheel` instead of `mousewheel`.\n // About the polyfill of the props \"delta\", see \"arc/core/event.ts\".\n\n // Firefox only support `wheel` rather than `mousewheel`. Although firfox has been supporting\n // event `DOMMouseScroll`, it do not act the same behavior as `wheel` on touch pad device\n // like on Mac, where `DOMMouseScroll` will be triggered only if a big wheel delta occurs,\n // and it results in no chance to \"preventDefault\". So we should not use `DOMMouseScroll`.\n\n wheelEventSupported = true;\n event = normalizeEvent(this.dom, event);\n // Follow the definition of the previous version, the zrender event name is still 'mousewheel'.\n this.trigger('mousewheel', event);\n },\n\n mousewheel(event: ZRRawEvent) {\n // IE8- and some other lagacy agent do not support event `wheel`, so we still listen\n // to the legacy event `mouseevent`.\n // Typically if event `wheel` is suppored and the handler has been mounted on a\n // DOM element, the lagecy `mousewheel` event will not be triggered (Chrome and Safari).\n // But we still do this guard to avoid to duplicated handle.\n if (wheelEventSupported) {\n return;\n }\n event = normalizeEvent(this.dom, event);\n this.trigger('mousewheel', event);\n },\n\n touchstart(event: ZRRawEvent) {\n // Default mouse behaviour should not be disabled here.\n // For example, page may needs to be slided.\n event = normalizeEvent(this.dom, event);\n\n markTouch(event);\n\n this.__lastTouchMoment = new Date();\n\n this.handler.processGesture(event, 'start');\n\n // For consistent event listener for both touch device and mouse device,\n // we simulate \"mouseover-->mousedown\" in touch device. So we trigger\n // `mousemove` here (to trigger `mouseover` inside), and then trigger\n // `mousedown`.\n localDOMHandlers.mousemove.call(this, event);\n localDOMHandlers.mousedown.call(this, event);\n },\n\n touchmove(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n markTouch(event);\n\n this.handler.processGesture(event, 'change');\n\n // Mouse move should always be triggered no matter whether\n // there is gestrue event, because mouse move and pinch may\n // be used at the same time.\n localDOMHandlers.mousemove.call(this, event);\n },\n\n touchend(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n markTouch(event);\n\n this.handler.processGesture(event, 'end');\n\n localDOMHandlers.mouseup.call(this, event);\n\n // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is\n // triggered in `touchstart`. This seems to be illogical, but by this mechanism,\n // we can conveniently implement \"hover style\" in both PC and touch device just\n // by listening to `mouseover` to add \"hover style\" and listening to `mouseout`\n // to remove \"hover style\" on an element, without any additional code for\n // compatibility. (`mouseout` will not be triggered in `touchend`, so \"hover\n // style\" will remain for user view)\n\n // click event should always be triggered no matter whether\n // there is gestrue event. System click can not be prevented.\n if (+new Date() - (+this.__lastTouchMoment) < TOUCH_CLICK_DELAY) {\n localDOMHandlers.click.call(this, event);\n }\n },\n\n pointerdown(event: ZRRawEvent) {\n localDOMHandlers.mousedown.call(this, event);\n\n // if (useMSGuesture(this, event)) {\n // this._msGesture.addPointer(event.pointerId);\n // }\n },\n\n pointermove(event: ZRRawEvent) {\n // FIXME\n // pointermove is so sensitive that it always triggered when\n // tap(click) on touch screen, which affect some judgement in\n // upper application. So, we dont support mousemove on MS touch\n // device yet.\n if (!isPointerFromTouch(event)) {\n localDOMHandlers.mousemove.call(this, event);\n }\n },\n\n pointerup(event: ZRRawEvent) {\n localDOMHandlers.mouseup.call(this, event);\n },\n\n pointerout(event: ZRRawEvent) {\n // pointerout will be triggered when tap on touch screen\n // (IE11+/Edge on MS Surface) after click event triggered,\n // which is inconsistent with the mousout behavior we defined\n // in touchend. So we unify them.\n // (check localDOMHandlers.touchend for detailed explanation)\n if (!isPointerFromTouch(event)) {\n localDOMHandlers.mouseout.call(this, event);\n }\n }\n\n};\n\n/**\n * Othere DOM UI Event handlers for zr dom.\n * @this {HandlerProxy}\n */\nzrUtil.each(['click', 'dblclick', 'contextmenu'], function (name) {\n localDOMHandlers[name] = function (event) {\n event = normalizeEvent(this.dom, event);\n this.trigger(name, event);\n };\n});\n\n\n/**\n * DOM UI Event handlers for global page.\n *\n * [Caution]:\n * those handlers should both support in capture phase and bubble phase!\n */\nconst globalDOMHandlers: DomHandlersMap = {\n\n pointermove: function (event: ZRRawEvent) {\n // FIXME\n // pointermove is so sensitive that it always triggered when\n // tap(click) on touch screen, which affect some judgement in\n // upper application. So, we dont support mousemove on MS touch\n // device yet.\n if (!isPointerFromTouch(event)) {\n globalDOMHandlers.mousemove.call(this, event);\n }\n },\n\n pointerup: function (event: ZRRawEvent) {\n globalDOMHandlers.mouseup.call(this, event);\n },\n\n mousemove: function (event: ZRRawEvent) {\n this.trigger('mousemove', event);\n },\n\n mouseup: function (event: ZRRawEvent) {\n const pointerCaptureReleasing = this.__pointerCapturing;\n\n this.__togglePointerCapture(false);\n\n this.trigger('mouseup', event);\n\n if (pointerCaptureReleasing) {\n event.zrEventControl = 'only_globalout';\n this.trigger('mouseout', event);\n }\n }\n\n};\n\n\nfunction mountLocalDOMEventListeners(instance: HandlerDomProxy, scope: DOMHandlerScope) {\n const domHandlers = scope.domHandlers;\n\n if (env.pointerEventsSupported) { // Only IE11+/Edge\n // 1. On devices that both enable touch and mouse (e.g., MS Surface and lenovo X240),\n // IE11+/Edge do not trigger touch event, but trigger pointer event and mouse event\n // at the same time.\n // 2. On MS Surface, it probablely only trigger mousedown but no mouseup when tap on\n // screen, which do not occurs in pointer event.\n // So we use pointer event to both detect touch gesture and mouse behavior.\n zrUtil.each(localNativeListenerNames.pointer, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n // markTriggeredFromLocal(event);\n domHandlers[nativeEventName].call(instance, event);\n });\n });\n\n // FIXME\n // Note: MS Gesture require CSS touch-action set. But touch-action is not reliable,\n // which does not prevent defuault behavior occasionally (which may cause view port\n // zoomed in but use can not zoom it back). And event.preventDefault() does not work.\n // So we have to not to use MSGesture and not to support touchmove and pinch on MS\n // touch screen. And we only support click behavior on MS touch screen now.\n\n // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+.\n // We dont support touch on IE on win7.\n // See \n // if (typeof MSGesture === 'function') {\n // (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line\n // dom.addEventListener('MSGestureChange', onMSGestureChange);\n // }\n }\n else {\n if (env.touchEventsSupported) {\n zrUtil.each(localNativeListenerNames.touch, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n // markTriggeredFromLocal(event);\n domHandlers[nativeEventName].call(instance, event);\n setTouchTimer(scope);\n });\n });\n // Handler of 'mouseout' event is needed in touch mode, which will be mounted below.\n // addEventListener(root, 'mouseout', this._mouseoutHandler);\n }\n\n // 1. Considering some devices that both enable touch and mouse event (like on MS Surface\n // and lenovo X240, @see #2350), we make mouse event be always listened, otherwise\n // mouse event can not be handle in those devices.\n // 2. On MS Surface, Chrome will trigger both touch event and mouse event. How to prevent\n // mouseevent after touch event triggered, see `setTouchTimer`.\n zrUtil.each(localNativeListenerNames.mouse, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event: ZRRawEvent) {\n event = getNativeEvent(event);\n if (!scope.touching) {\n // markTriggeredFromLocal(event);\n domHandlers[nativeEventName].call(instance, event);\n }\n });\n });\n }\n}\n\nfunction mountGlobalDOMEventListeners(instance: HandlerDomProxy, scope: DOMHandlerScope) {\n // Only IE11+/Edge. See the comment in `mountLocalDOMEventListeners`.\n if (env.pointerEventsSupported) {\n zrUtil.each(globalNativeListenerNames.pointer, mount);\n }\n // Touch event has implemented \"drag outside\" so we do not mount global listener for touch event.\n // (see https://www.w3.org/TR/touch-events/#the-touchmove-event) (see also `DRAG_OUTSIDE`).\n // We do not consider \"both-support-touch-and-mouse device\" for this feature (see the comment of\n // `mountLocalDOMEventListeners`) to avoid bugs util some requirements come.\n else if (!env.touchEventsSupported) {\n zrUtil.each(globalNativeListenerNames.mouse, mount);\n }\n\n function mount(nativeEventName: string) {\n function nativeEventListener(event: ZRRawEvent) {\n event = getNativeEvent(event);\n // See the reason in [DRAG_OUTSIDE] in `Handler.js`\n // This checking supports both `useCapture` or not.\n // PENDING: if there is performance issue in some devices,\n // we probably can not use `useCapture` and change a easier\n // to judes whether local (mark).\n if (!isLocalEl(instance, event.target as Node)) {\n event = normalizeGlobalEvent(instance, event);\n scope.domHandlers[nativeEventName].call(instance, event);\n }\n }\n mountSingleDOMEventListener(\n scope, nativeEventName, nativeEventListener,\n {capture: true} // See [DRAG_OUTSIDE] in `Handler.js`\n );\n }\n}\n\nfunction mountSingleDOMEventListener(\n scope: DOMHandlerScope,\n nativeEventName: string,\n listener: EventListener,\n opt?: boolean | AddEventListenerOptions\n) {\n scope.mounted[nativeEventName] = listener;\n scope.listenerOpts[nativeEventName] = opt;\n addEventListener(scope.domTarget, nativeEventName, listener, opt);\n}\n\nfunction unmountDOMEventListeners(scope: DOMHandlerScope) {\n const mounted = scope.mounted;\n for (let nativeEventName in mounted) {\n if (mounted.hasOwnProperty(nativeEventName)) {\n removeEventListener(\n scope.domTarget, nativeEventName, mounted[nativeEventName],\n scope.listenerOpts[nativeEventName]\n );\n }\n }\n scope.mounted = {};\n}\n\n\nclass DOMHandlerScope {\n domTarget: HTMLElement | HTMLDocument\n domHandlers: DomHandlersMap\n\n // Key: eventName, value: mounted handler funcitons.\n // Used for unmount.\n mounted: Dictionary = {};\n\n listenerOpts: Dictionary = {};\n\n touchTimer: ReturnType;\n touching = false;\n\n constructor(\n domTarget: HTMLElement | HTMLDocument,\n domHandlers: DomHandlersMap\n ) {\n this.domTarget = domTarget;\n this.domHandlers = domHandlers;\n\n }\n}\n\n\nexport default class HandlerDomProxy extends Eventful {\n\n dom: HTMLElement\n painterRoot: HTMLElement\n\n handler: Handler\n\n private _localHandlerScope: DOMHandlerScope\n private _globalHandlerScope: DOMHandlerScope\n\n __lastTouchMoment: Date\n\n // See [DRAG_OUTSIDE] in `Handler.ts`.\n __pointerCapturing = false\n // [x, y]\n __mayPointerCapture: VectorArray\n\n\n constructor(dom: HTMLElement, painterRoot: HTMLElement) {\n super();\n\n this.dom = dom;\n this.painterRoot = painterRoot;\n\n this._localHandlerScope = new DOMHandlerScope(dom, localDOMHandlers);\n\n if (globalEventSupported) {\n this._globalHandlerScope = new DOMHandlerScope(document, globalDOMHandlers);\n }\n\n mountLocalDOMEventListeners(this, this._localHandlerScope);\n }\n\n dispose() {\n unmountDOMEventListeners(this._localHandlerScope);\n if (globalEventSupported) {\n unmountDOMEventListeners(this._globalHandlerScope);\n }\n }\n\n setCursor(cursorStyle: string) {\n this.dom.style && (this.dom.style.cursor = cursorStyle || 'default');\n }\n\n /**\n * See [DRAG_OUTSIDE] in `Handler.js`.\n * @implement\n * @param isPointerCapturing Should never be `null`/`undefined`.\n * `true`: start to capture pointer if it is not capturing.\n * `false`: end the capture if it is capturing.\n */\n __togglePointerCapture(isPointerCapturing?: boolean) {\n this.__mayPointerCapture = null;\n\n if (globalEventSupported\n && ((+this.__pointerCapturing) ^ (+isPointerCapturing))\n ) {\n this.__pointerCapturing = isPointerCapturing;\n\n const globalHandlerScope = this._globalHandlerScope;\n isPointerCapturing\n ? mountGlobalDOMEventListeners(this, globalHandlerScope)\n : unmountDOMEventListeners(globalHandlerScope);\n }\n }\n}\n\nexport interface HandlerProxyInterface extends Eventful {\n handler: Handler\n dispose: () => void\n setCursor: (cursorStyle?: string) => void\n}","let dpr = 1;\n\n// If in browser environment\nif (typeof window !== 'undefined') {\n dpr = Math.max(window.devicePixelRatio \n \t|| (window.screen && (window.screen as any).deviceXDPI / (window.screen as any).logicalXDPI) \n \t|| 1, 1);\n}\n\n/**\n * Debug log mode:\n * 0: Do nothing, for release.\n * 1: console.error, for debug.\n */\nexport const debugMode = 0;\n\n// retina 屏幕优化\nexport const devicePixelRatio = dpr;\n\n\n/**\n * Determine when to turn on dark mode based on the luminance of backgroundColor\n */\nexport const DARK_MODE_THRESHOLD = 0.4;\n\n/**\n * Color of default dark label.\n */\nexport const DARK_LABEL_COLOR = '#333';\n\n/**\n * Color of default light label.\n */\nexport const LIGHT_LABEL_COLOR = '#ccc';\n\n/**\n * Color of default light label.\n */\nexport const LIGHTER_LABEL_COLOR = '#eee';\n","/**\n * 3x2矩阵操作类\n * @exports zrender/tool/matrix\n */\n\n/* global Float32Array */\n\nimport {VectorArray} from './vector';\n\nexport type MatrixArray = number[]\n/**\n * Create a identity matrix.\n */\nexport function create(): MatrixArray {\n return [1, 0, 0, 1, 0, 0];\n}\n\n/**\n * 设置矩阵为单位矩阵\n */\nexport function identity(out: MatrixArray): MatrixArray {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n}\n\n/**\n * 复制矩阵\n */\nexport function copy(out: MatrixArray, m: MatrixArray): MatrixArray {\n out[0] = m[0];\n out[1] = m[1];\n out[2] = m[2];\n out[3] = m[3];\n out[4] = m[4];\n out[5] = m[5];\n return out;\n}\n\n/**\n * 矩阵相乘\n */\nexport function mul(out: MatrixArray, m1: MatrixArray, m2: MatrixArray): MatrixArray {\n // Consider matrix.mul(m, m2, m);\n // where out is the same as m2.\n // So use temp constiable to escape error.\n const out0 = m1[0] * m2[0] + m1[2] * m2[1];\n const out1 = m1[1] * m2[0] + m1[3] * m2[1];\n const out2 = m1[0] * m2[2] + m1[2] * m2[3];\n const out3 = m1[1] * m2[2] + m1[3] * m2[3];\n const out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];\n const out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = out3;\n out[4] = out4;\n out[5] = out5;\n return out;\n}\n\n/**\n * 平移变换\n */\nexport function translate(out: MatrixArray, a: MatrixArray, v: VectorArray): MatrixArray {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4] + v[0];\n out[5] = a[5] + v[1];\n return out;\n}\n\n/**\n * 旋转变换\n */\nexport function rotate(out: MatrixArray, a: MatrixArray, rad: number): MatrixArray {\n const aa = a[0];\n const ac = a[2];\n const atx = a[4];\n const ab = a[1];\n const ad = a[3];\n const aty = a[5];\n const st = Math.sin(rad);\n const ct = Math.cos(rad);\n\n out[0] = aa * ct + ab * st;\n out[1] = -aa * st + ab * ct;\n out[2] = ac * ct + ad * st;\n out[3] = -ac * st + ct * ad;\n out[4] = ct * atx + st * aty;\n out[5] = ct * aty - st * atx;\n return out;\n}\n\n/**\n * 缩放变换\n */\nexport function scale(out: MatrixArray, a: MatrixArray, v: VectorArray): MatrixArray {\n const vx = v[0];\n const vy = v[1];\n out[0] = a[0] * vx;\n out[1] = a[1] * vy;\n out[2] = a[2] * vx;\n out[3] = a[3] * vy;\n out[4] = a[4] * vx;\n out[5] = a[5] * vy;\n return out;\n}\n\n/**\n * 求逆矩阵\n */\nexport function invert(out: MatrixArray, a: MatrixArray): MatrixArray {\n\n const aa = a[0];\n const ac = a[2];\n const atx = a[4];\n const ab = a[1];\n const ad = a[3];\n const aty = a[5];\n\n let det = aa * ad - ab * ac;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n\n out[0] = ad * det;\n out[1] = -ab * det;\n out[2] = -ac * det;\n out[3] = aa * det;\n out[4] = (ac * aty - ad * atx) * det;\n out[5] = (ab * atx - aa * aty) * det;\n return out;\n}\n\n/**\n * Clone a new matrix.\n */\nexport function clone(a: MatrixArray): MatrixArray {\n const b = create();\n copy(b, a);\n return b;\n}","import * as matrix from './matrix';\nimport * as vector from './vector';\n\nconst mIdentity = matrix.identity;\n\nconst EPSILON = 5e-5;\n\nfunction isNotAroundZero(val: number) {\n return val > EPSILON || val < -EPSILON;\n}\n\nconst scaleTmp: vector.VectorArray = [];\nconst tmpTransform: matrix.MatrixArray = [];\nconst originTransform = matrix.create();\nconst abs = Math.abs;\n\nclass Transformable {\n\n parent: Transformable\n\n x: number\n y: number\n\n scaleX: number\n scaleY: number\n\n skewX: number\n skewY: number\n\n rotation: number\n /**\n * Origin of scale, rotation, skew\n */\n originX: number\n originY: number\n\n /**\n * Scale ratio\n */\n globalScaleRatio: number\n\n transform: matrix.MatrixArray\n invTransform: matrix.MatrixArray\n\n /**\n * Set position from array\n */\n setPosition(arr: number[]) {\n this.x = arr[0];\n this.y = arr[1];\n }\n /**\n * Set scale from array\n */\n setScale(arr: number[]) {\n this.scaleX = arr[0];\n this.scaleY = arr[1];\n }\n\n /**\n * Set skew from array\n */\n setSkew(arr: number[]) {\n this.skewX = arr[0];\n this.skewY = arr[1];\n }\n\n /**\n * Set origin from array\n */\n setOrigin(arr: number[]) {\n this.originX = arr[0];\n this.originY = arr[1];\n }\n\n /**\n * If needs to compute transform\n */\n needLocalTransform(): boolean {\n return isNotAroundZero(this.rotation)\n || isNotAroundZero(this.x)\n || isNotAroundZero(this.y)\n || isNotAroundZero(this.scaleX - 1)\n || isNotAroundZero(this.scaleY - 1);\n }\n\n /**\n * Update global transform\n */\n updateTransform() {\n const parent = this.parent;\n const parentHasTransform = parent && parent.transform;\n const needLocalTransform = this.needLocalTransform();\n\n let m = this.transform;\n if (!(needLocalTransform || parentHasTransform)) {\n m && mIdentity(m);\n return;\n }\n\n m = m || matrix.create();\n\n if (needLocalTransform) {\n this.getLocalTransform(m);\n }\n else {\n mIdentity(m);\n }\n\n // 应用父节点变换\n if (parentHasTransform) {\n if (needLocalTransform) {\n matrix.mul(m, parent.transform, m);\n }\n else {\n matrix.copy(m, parent.transform);\n }\n }\n // 保存这个变换矩阵\n this.transform = m;\n\n this._resolveGlobalScaleRatio(m);\n }\n\n private _resolveGlobalScaleRatio(m: matrix.MatrixArray) {\n const globalScaleRatio = this.globalScaleRatio;\n if (globalScaleRatio != null && globalScaleRatio !== 1) {\n this.getGlobalScale(scaleTmp);\n const relX = scaleTmp[0] < 0 ? -1 : 1;\n const relY = scaleTmp[1] < 0 ? -1 : 1;\n const sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0;\n const sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0;\n\n m[0] *= sx;\n m[1] *= sx;\n m[2] *= sy;\n m[3] *= sy;\n }\n\n this.invTransform = this.invTransform || matrix.create();\n matrix.invert(this.invTransform, m);\n }\n /**\n * Get computed local transform\n */\n getLocalTransform(m?: matrix.MatrixArray) {\n return Transformable.getLocalTransform(this, m);\n }\n\n /**\n * Get computed global transform\n * NOTE: this method will force update transform on all ancestors.\n * Please be aware of the potential performance cost.\n */\n getComputedTransform() {\n let transformNode: Transformable = this;\n const ancestors: Transformable[] = [];\n while (transformNode) {\n ancestors.push(transformNode);\n transformNode = transformNode.parent;\n }\n\n // Update from topdown.\n while (transformNode = ancestors.pop()) {\n transformNode.updateTransform();\n }\n\n return this.transform;\n }\n\n setLocalTransform(m: vector.VectorArray) {\n if (!m) {\n // TODO return or set identity?\n return;\n }\n let sx = m[0] * m[0] + m[1] * m[1];\n let sy = m[2] * m[2] + m[3] * m[3];\n\n const rotation = Math.atan2(m[1], m[0]);\n\n\n\n const shearX = Math.PI / 2 + rotation - Math.atan2(m[3], m[2]);\n sy = Math.sqrt(sy) * Math.cos(shearX);\n sx = Math.sqrt(sx);\n\n this.skewX = shearX;\n this.skewY = 0;\n this.rotation = -rotation;\n\n this.x = +m[4];\n this.y = +m[5];\n this.scaleX = sx;\n this.scaleY = sy;\n\n this.originX = 0;\n this.originY = 0;\n }\n /**\n * 分解`transform`矩阵到`position`, `rotation`, `scale`\n */\n decomposeTransform() {\n if (!this.transform) {\n return;\n }\n const parent = this.parent;\n let m = this.transform;\n if (parent && parent.transform) {\n // Get local transform and decompose them to position, scale, rotation\n matrix.mul(tmpTransform, parent.invTransform, m);\n m = tmpTransform;\n }\n const ox = this.originX;\n const oy = this.originY;\n if (ox || oy) {\n originTransform[4] = ox;\n originTransform[5] = oy;\n matrix.mul(tmpTransform, m, originTransform);\n tmpTransform[4] -= ox;\n tmpTransform[5] -= oy;\n m = tmpTransform;\n }\n\n this.setLocalTransform(m);\n }\n\n /**\n * Get global scale\n */\n getGlobalScale(out?: vector.VectorArray): vector.VectorArray {\n const m = this.transform;\n out = out || [];\n if (!m) {\n out[0] = 1;\n out[1] = 1;\n return out;\n }\n out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]);\n out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]);\n if (m[0] < 0) {\n out[0] = -out[0];\n }\n if (m[3] < 0) {\n out[1] = -out[1];\n }\n return out;\n }\n /**\n * 变换坐标位置到 shape 的局部坐标空间\n */\n transformCoordToLocal(x: number, y: number): number[] {\n const v2 = [x, y];\n const invTransform = this.invTransform;\n if (invTransform) {\n vector.applyTransform(v2, v2, invTransform);\n }\n return v2;\n }\n\n /**\n * 变换局部坐标位置到全局坐标空间\n */\n transformCoordToGlobal(x: number, y: number): number[] {\n const v2 = [x, y];\n const transform = this.transform;\n if (transform) {\n vector.applyTransform(v2, v2, transform);\n }\n return v2;\n }\n\n\n getLineScale() {\n const m = this.transform;\n // Get the line scale.\n // Determinant of `m` means how much the area is enlarged by the\n // transformation. So its square root can be used as a scale factor\n // for width.\n return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10\n ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1]))\n : 1;\n }\n\n\n static getLocalTransform(target: Transformable, m?: matrix.MatrixArray): matrix.MatrixArray {\n m = m || [];\n\n const ox = target.originX || 0;\n const oy = target.originY || 0;\n const sx = target.scaleX;\n const sy = target.scaleY;\n const rotation = target.rotation || 0;\n const x = target.x;\n const y = target.y;\n const skewX = target.skewX ? Math.tan(target.skewX) : 0;\n // TODO: zrender use different hand in coordinate system and y axis is inversed.\n const skewY = target.skewY ? Math.tan(-target.skewY) : 0;\n\n // The order of transform (-origin * scale * skew * rotate * origin * translate).\n // We merge (-origin * scale * skew) into one. Also did identity in these operations.\n // origin\n if (ox || oy) {\n m[4] = -ox * sx - skewX * oy * sy;\n m[5] = -oy * sy - skewY * ox * sx;\n }\n else {\n m[4] = m[5] = 0;\n }\n // scale\n m[0] = sx;\n m[3] = sy;\n // skew\n m[1] = skewY * sx;\n m[2] = skewX * sy;\n\n // Apply rotation\n rotation && matrix.rotate(m, m, rotation);\n\n // Translate back from origin and apply translation\n m[4] += ox + x;\n m[5] += oy + y;\n\n return m;\n }\n\n private static initDefaultProps = (function () {\n const proto = Transformable.prototype;\n proto.x = 0;\n proto.y = 0;\n proto.scaleX = 1;\n proto.scaleY = 1;\n proto.originX = 0;\n proto.originY = 0;\n proto.skewX = 0;\n proto.skewY = 0;\n proto.rotation = 0;\n proto.globalScaleRatio = 1;\n })()\n};\n\nexport default Transformable;","import { MatrixArray } from \"./matrix\";\n\nexport interface PointLike {\n x: number\n y: number\n}\nexport default class Point {\n\n x: number\n\n y: number\n\n constructor(x?: number, y?: number) {\n this.x = x || 0;\n this.y = y || 0;\n }\n\n /**\n * Copy from another point\n */\n copy(other: PointLike) {\n this.x = other.x;\n this.y = other.y;\n return this;\n }\n\n /**\n * Clone a point\n */\n clone() {\n return new Point(this.x, this.y);\n }\n\n /**\n * Set x and y\n */\n set(x: number, y: number) {\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * If equal to another point\n */\n equal(other: PointLike) {\n return other.x === this.x && other.y === this.y;\n }\n\n /**\n * Add another point\n */\n add(other: PointLike) {\n this.x += other.x;\n this.y += other.y;\n return this;\n }\n\n scale(scalar: number) {\n this.x *= scalar;\n this.y *= scalar;\n }\n\n scaleAndAdd(other: PointLike, scalar: number) {\n this.x += other.x * scalar;\n this.y += other.y * scalar;\n }\n\n /**\n * Sub another point\n */\n sub(other: PointLike) {\n this.x -= other.x;\n this.y -= other.y;\n return this;\n }\n\n /**\n * Dot product with other point\n */\n dot(other: PointLike) {\n return this.x * other.x + this.y * other.y;\n }\n\n /**\n * Get length of point\n */\n len() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * Get squared length\n */\n lenSquare() {\n return this.x * this.x + this.y * this.y;\n }\n\n /**\n * Normalize\n */\n normalize() {\n const len = this.len();\n this.x /= len;\n this.y /= len;\n return this;\n }\n\n /**\n * Distance to another point\n */\n distance(other: PointLike) {\n const dx = this.x - other.x;\n const dy = this.y - other.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /**\n * Square distance to another point\n */\n distanceSquare(other: Point) {\n const dx = this.x - other.x;\n const dy = this.y - other.y;\n return dx * dx + dy * dy;\n }\n\n /**\n * Negate\n */\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n /**\n * Apply a transform matrix array.\n */\n transform(m: MatrixArray) {\n if (!m) {\n return;\n }\n const x = this.x;\n const y = this.y;\n this.x = m[0] * x + m[2] * y + m[4];\n this.y = m[1] * x + m[3] * y + m[5];\n return this;\n }\n\n toArray(out: number[]) {\n out[0] = this.x;\n out[1] = this.y;\n return out;\n }\n\n fromArray(input: number[]) {\n this.x = input[0];\n this.y = input[1];\n }\n\n static set(p: PointLike, x: number, y: number) {\n p.x = x;\n p.y = y;\n }\n\n static copy(p: PointLike, p2: PointLike) {\n p.x = p2.x;\n p.y = p2.y;\n }\n\n static len(p: PointLike) {\n return Math.sqrt(p.x * p.x + p.y * p.y);\n }\n\n static lenSquare(p: PointLike) {\n return p.x * p.x + p.y * p.y;\n }\n\n static dot(p0: PointLike, p1: PointLike) {\n return p0.x * p1.x + p0.y * p1.y;\n }\n\n static add(out: PointLike, p0: PointLike, p1: PointLike) {\n out.x = p0.x + p1.x;\n out.y = p0.y + p1.y;\n }\n\n static sub(out: PointLike, p0: PointLike, p1: PointLike) {\n out.x = p0.x - p1.x;\n out.y = p0.y - p1.y;\n }\n\n static scale(out: PointLike, p0: PointLike, scalar: number) {\n out.x = p0.x * scalar;\n out.y = p0.y * scalar;\n }\n\n static scaleAndAdd(out: PointLike, p0: PointLike, p1: PointLike, scalar: number) {\n out.x = p0.x + p1.x * scalar;\n out.y = p0.y + p1.y * scalar;\n }\n\n static lerp(out: PointLike, p0: PointLike, p1: PointLike, t: number) {\n const onet = 1 - t;\n out.x = onet * p0.x + t * p1.x;\n out.y = onet * p0.y + t * p1.y;\n }\n}","/**\n * @module echarts/core/BoundingRect\n */\n\nimport * as matrix from './matrix';\nimport Point, { PointLike } from './Point';\n\nconst mathMin = Math.min;\nconst mathMax = Math.max;\n\nconst lt = new Point();\nconst rb = new Point();\nconst lb = new Point();\nconst rt = new Point();\n\nconst minTv = new Point();\nconst maxTv = new Point();\n\nclass BoundingRect {\n\n x: number\n y: number\n width: number\n height: number\n\n constructor(x: number, y: number, width: number, height: number) {\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n union(other: BoundingRect) {\n const x = mathMin(other.x, this.x);\n const y = mathMin(other.y, this.y);\n\n // If x is -Infinity and width is Infinity (like in the case of\n // IncrementalDisplayble), x + width would be NaN\n if (isFinite(this.x) && isFinite(this.width)) {\n this.width = mathMax(\n other.x + other.width,\n this.x + this.width\n ) - x;\n }\n else {\n this.width = other.width;\n }\n\n if (isFinite(this.y) && isFinite(this.height)) {\n this.height = mathMax(\n other.y + other.height,\n this.y + this.height\n ) - y;\n }\n else {\n this.height = other.height;\n }\n\n this.x = x;\n this.y = y;\n }\n\n applyTransform(m: matrix.MatrixArray) {\n BoundingRect.applyTransform(this, this, m);\n }\n\n calculateTransform(b: RectLike): matrix.MatrixArray {\n const a = this;\n const sx = b.width / a.width;\n const sy = b.height / a.height;\n\n const m = matrix.create();\n\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\n return m;\n }\n\n intersect(b: RectLike, mtv?: PointLike): boolean {\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 const a = this;\n const ax0 = a.x;\n const ax1 = a.x + a.width;\n const ay0 = a.y;\n const ay1 = a.y + a.height;\n\n const bx0 = b.x;\n const bx1 = b.x + b.width;\n const by0 = b.y;\n const by1 = b.y + b.height;\n\n let overlap = !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n if (mtv) {\n let dMin = Infinity;\n let dMax = 0;\n const d0 = Math.abs(ax1 - bx0);\n const d1 = Math.abs(bx1 - ax0);\n const d2 = Math.abs(ay1 - by0);\n const d3 = Math.abs(by1 - ay0);\n const dx = Math.min(d0, d1);\n const dy = Math.min(d2, d3);\n // On x axis\n if (ax1 < bx0 || bx1 < ax0) {\n if (dx > dMax) {\n dMax = dx;\n if (d0 < d1) {\n Point.set(maxTv, -d0, 0); // b is on the right\n }\n else {\n Point.set(maxTv, d1, 0); // b is on the left\n }\n }\n }\n else {\n if (dx < dMin) {\n dMin = dx;\n if (d0 < d1) {\n Point.set(minTv, d0, 0); // b is on the right\n }\n else {\n Point.set(minTv, -d1, 0); // b is on the left\n }\n }\n }\n\n // On y axis\n if (ay1 < by0 || by1 < ay0) {\n if (dy > dMax) {\n dMax = dy;\n if (d2 < d3) {\n Point.set(maxTv, 0, -d2); // b is on the bottom(larger y)\n }\n else {\n Point.set(maxTv, 0, d3); // b is on the top(smaller y)\n }\n }\n }\n else {\n if (dx < dMin) {\n dMin = dx;\n if (d2 < d3) {\n Point.set(minTv, 0, d2); // b is on the bottom\n }\n else {\n Point.set(minTv, 0, -d3); // b is on the top\n }\n }\n }\n }\n\n if (mtv) {\n Point.copy(mtv, overlap ? minTv : maxTv);\n }\n return overlap;\n }\n\n contain(x: number, y: number): boolean {\n const rect = this;\n return x >= rect.x\n && x <= (rect.x + rect.width)\n && y >= rect.y\n && y <= (rect.y + rect.height);\n }\n\n clone() {\n return new BoundingRect(this.x, this.y, this.width, this.height);\n }\n\n /**\n * Copy from another rect\n */\n copy(other: RectLike) {\n BoundingRect.copy(this, other);\n }\n\n plain(): RectLike {\n return {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height\n };\n }\n\n /**\n * If not having NaN or Infinity with attributes\n */\n isFinite(): boolean {\n return isFinite(this.x)\n && isFinite(this.y)\n && isFinite(this.width)\n && isFinite(this.height);\n }\n\n isZero(): boolean {\n return this.width === 0 || this.height === 0;\n }\n\n static create(rect: RectLike): BoundingRect {\n return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n }\n\n static copy(target: RectLike, source: RectLike) {\n target.x = source.x;\n target.y = source.y;\n target.width = source.width;\n target.height = source.height;\n }\n\n static applyTransform(target: RectLike, source: RectLike, m: matrix.MatrixArray) {\n // In case usage like this\n // el.getBoundingRect().applyTransform(el.transform)\n // And element has no transform\n if (!m) {\n if (target !== source) {\n BoundingRect.copy(target, source);\n }\n return;\n }\n // Fast path when there is no rotation in matrix.\n if (m[1] < 1e-5 && m[1] > -1e-5 && m[2] < 1e-5 && m[2] > -1e-5) {\n const sx = m[0];\n const sy = m[3];\n const tx = m[4];\n const ty = m[5];\n target.x = source.x * sx + tx;\n target.y = source.y * sy + ty;\n target.width = source.width * sx;\n target.height = source.height * sy;\n if (target.width < 0) {\n target.x += target.width;\n target.width = -target.width;\n }\n if (target.height < 0) {\n target.y += target.height;\n target.height = -target.height;\n }\n return;\n }\n\n // source and target can be same instance.\n lt.x = lb.x = source.x;\n lt.y = rt.y = source.y;\n rb.x = rt.x = source.x + source.width;\n rb.y = lb.y = source.y + source.height;\n\n lt.transform(m);\n rt.transform(m);\n rb.transform(m);\n lb.transform(m);\n\n target.x = mathMin(lt.x, rb.x, lb.x, rt.x);\n target.y = mathMin(lt.y, rb.y, lb.y, rt.y);\n const maxX = mathMax(lt.x, rb.x, lb.x, rt.x);\n const maxY = mathMax(lt.y, rb.y, lb.y, rt.y);\n target.width = maxX - target.x;\n target.height = maxY - target.y;\n }\n}\n\n\nexport type RectLike = {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport default BoundingRect;","import BoundingRect, { RectLike } from '../core/BoundingRect';\nimport { createCanvas } from '../core/util';\nimport { Dictionary, PropType, TextAlign, TextVerticalAlign, BuiltinTextPosition } from '../core/types';\nimport LRU from '../core/LRU';\n\nlet textWidthCache: Dictionary> = {};\n\nexport const DEFAULT_FONT = '12px sans-serif';\n\nlet _ctx: CanvasRenderingContext2D;\nlet _cachedFont: string;\n\nfunction defaultMeasureText(text: string, font?: string): { width: number } {\n if (!_ctx) {\n _ctx = createCanvas().getContext('2d');\n }\n if (_cachedFont !== font) {\n _cachedFont = _ctx.font = font || DEFAULT_FONT;\n }\n return _ctx.measureText(text);\n}\n\nlet methods: {\n measureText: (text: string, font?: string) => { width: number }\n} = {\n measureText: defaultMeasureText\n};\n\nexport function $override(\n name: keyof typeof methods,\n fn: PropType\n) {\n methods[name] = fn;\n}\n\n// let cacheMissCount = 0;\n// let totalCount = 0;\n\nexport function getWidth(text: string, font: string): number {\n font = font || DEFAULT_FONT;\n let cacheOfFont = textWidthCache[font];\n if (!cacheOfFont) {\n cacheOfFont = textWidthCache[font] = new LRU(500);\n }\n let width = cacheOfFont.get(text);\n if (width == null) {\n width = methods.measureText(text, font).width;\n cacheOfFont.put(text, width);\n // cacheMissCount++;\n }\n // totalCount++;\n\n return width;\n}\n\n/**\n *\n * Get bounding rect for inner usage(TSpan)\n * Which not include text newline.\n */\nexport function innerGetBoundingRect(\n text: string,\n font: string,\n textAlign?: TextAlign,\n textBaseline?: TextVerticalAlign\n): BoundingRect {\n const width = getWidth(text, font);\n const height = getLineHeight(font);\n\n const x = adjustTextX(0, width, textAlign);\n const y = adjustTextY(0, height, textBaseline);\n\n const rect = new BoundingRect(x, y, width, height);\n\n return rect;\n}\n\n/**\n *\n * Get bounding rect for outer usage. Compatitable with old implementation\n * Which includes text newline.\n */\nexport function getBoundingRect(\n text: string,\n font: string,\n textAlign?: TextAlign,\n textBaseline?: TextVerticalAlign\n) {\n const textLines = ((text || '') + '').split('\\n');\n const len = textLines.length;\n if (len === 1) {\n return innerGetBoundingRect(textLines[0], font, textAlign, textBaseline);\n }\n else {\n const uniondRect = new BoundingRect(0, 0, 0, 0);\n for (let i = 0; i < textLines.length; i++) {\n const rect = innerGetBoundingRect(textLines[i], font, textAlign, textBaseline);\n i === 0 ? uniondRect.copy(rect) : uniondRect.union(rect);\n }\n return uniondRect;\n }\n}\n\nexport function adjustTextX(x: number, width: number, textAlign: TextAlign): number {\n // TODO Right to left language\n if (textAlign === 'right') {\n x -= width;\n }\n else if (textAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\n\nexport function adjustTextY(y: number, height: number, verticalAlign: TextVerticalAlign): number {\n if (verticalAlign === 'middle') {\n y -= height / 2;\n }\n else if (verticalAlign === 'bottom') {\n y -= height;\n }\n return y;\n}\n\n\nexport function getLineHeight(font?: string): number {\n // FIXME A rough approach.\n return getWidth('国', font);\n}\n\nexport function measureText(text: string, font?: string): {\n width: number\n} {\n return methods.measureText(text, font);\n}\n\n\nexport function parsePercent(value: number | string, maxValue: number): number {\n if (typeof value === 'string') {\n if (value.lastIndexOf('%') >= 0) {\n return parseFloat(value) / 100 * maxValue;\n }\n return parseFloat(value);\n }\n return value;\n}\n\nexport interface TextPositionCalculationResult {\n x: number\n y: number\n align: TextAlign\n verticalAlign: TextVerticalAlign\n}\n/**\n * Follow same interface to `Displayable.prototype.calculateTextPosition`.\n * @public\n * @param out Prepared out object. If not input, auto created in the method.\n * @param style where `textPosition` and `textDistance` are visited.\n * @param rect {x, y, width, height} Rect of the host elment, according to which the text positioned.\n * @return The input `out`. Set: {x, y, textAlign, textVerticalAlign}\n */\nexport function calculateTextPosition(\n out: TextPositionCalculationResult,\n opts: {\n position?: BuiltinTextPosition | (number | string)[]\n distance?: number // Default 5\n global?: boolean\n },\n rect: RectLike\n): TextPositionCalculationResult {\n const textPosition = opts.position || 'inside';\n const distance = opts.distance != null ? opts.distance : 5;\n\n const height = rect.height;\n const width = rect.width;\n const halfHeight = height / 2;\n\n let x = rect.x;\n let y = rect.y;\n\n let textAlign: TextAlign = 'left';\n let textVerticalAlign: TextVerticalAlign = 'top';\n\n if (textPosition instanceof Array) {\n x += parsePercent(textPosition[0], rect.width);\n y += parsePercent(textPosition[1], rect.height);\n // Not use textAlign / textVerticalAlign\n textAlign = null;\n textVerticalAlign = null;\n }\n else {\n switch (textPosition) {\n case 'left':\n x -= distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n case 'right':\n x += distance + width;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n case 'top':\n x += width / 2;\n y -= distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n case 'bottom':\n x += width / 2;\n y += height + distance;\n textAlign = 'center';\n break;\n case 'inside':\n x += width / 2;\n y += halfHeight;\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n case 'insideLeft':\n x += distance;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n case 'insideRight':\n x += width - distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n case 'insideTop':\n x += width / 2;\n y += distance;\n textAlign = 'center';\n break;\n case 'insideBottom':\n x += width / 2;\n y += height - distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n case 'insideTopLeft':\n x += distance;\n y += distance;\n break;\n case 'insideTopRight':\n x += width - distance;\n y += distance;\n textAlign = 'right';\n break;\n case 'insideBottomLeft':\n x += distance;\n y += height - distance;\n textVerticalAlign = 'bottom';\n break;\n case 'insideBottomRight':\n x += width - distance;\n y += height - distance;\n textAlign = 'right';\n textVerticalAlign = 'bottom';\n break;\n }\n }\n\n out = out || {} as TextPositionCalculationResult;\n out.x = x;\n out.y = y;\n out.align = textAlign;\n out.verticalAlign = textVerticalAlign;\n\n return out;\n}\n","import Transformable from './core/Transformable';\nimport { AnimationEasing } from './animation/easing';\nimport Animator, {cloneValue} from './animation/Animator';\nimport { ZRenderType } from './zrender';\nimport {\n Dictionary, ElementEventName, ZRRawEvent, BuiltinTextPosition, AllPropTypes,\n TextVerticalAlign, TextAlign, MapToType\n} from './core/types';\nimport Path from './graphic/Path';\nimport BoundingRect, { RectLike } from './core/BoundingRect';\nimport Eventful, {EventQuery, EventCallback} from './core/Eventful';\nimport ZRText, { DefaultTextStyle } from './graphic/Text';\nimport { calculateTextPosition, TextPositionCalculationResult, parsePercent } from './contain/text';\nimport {\n guid,\n isObject,\n keys,\n extend,\n indexOf,\n logError,\n mixin,\n isArrayLike,\n isTypedArray\n} from './core/util';\nimport Polyline from './graphic/shape/Polyline';\nimport Group from './graphic/Group';\nimport Point from './core/Point';\nimport { LIGHT_LABEL_COLOR, DARK_LABEL_COLOR } from './config';\nimport { parse, stringify } from './tool/color';\nimport env from './core/env';\nimport { REDARAW_BIT, STYLE_CHANGED_BIT } from './graphic/constants';\n\nexport interface ElementAnimateConfig {\n duration?: number\n delay?: number\n easing?: AnimationEasing\n during?: (percent: number) => void\n\n // `done` will be called when all of the animations of the target props are\n // \"done\" or \"aborted\", and at least one \"done\" happened.\n // Common cases: animations declared, but some of them are aborted (e.g., by state change).\n // The calling of `animationTo` done rather than aborted if at least one done happened.\n done?: Function\n // `aborted` will be called when all of the animations of the target props are \"aborted\".\n aborted?: Function\n\n scope?: string\n /**\n * If force animate\n * Prevent stop animation and callback\n * immediently when target values are the same as current values.\n */\n force?: boolean\n /**\n * If use additive animation.\n */\n additive?: boolean\n /**\n * If set to final state before animation started.\n * It can be useful if something you want to calcuate depends on the final state of element.\n * Like bounding rect for text layouting.\n *\n * Only available in animateTo\n */\n setToFinal?: boolean\n}\n\nexport interface ElementTextConfig {\n /**\n * Position relative to the element bounding rect\n * @default 'inside'\n */\n position?: BuiltinTextPosition | (number | string)[]\n\n /**\n * Rotation of the label.\n */\n rotation?: number\n\n /**\n * Rect that text will be positioned.\n * Default to be the rect of element.\n */\n layoutRect?: RectLike\n\n /**\n * Offset of the label.\n * The difference of offset and position is that it will be applied\n * in the rotation\n */\n offset?: number[]\n\n /**\n * Origin or rotation. Which is relative to the bounding box of the attached element.\n * Can be percent value. Relative to the bounding box.\n * If specified center. It will be center of the bounding box.\n *\n * Only available when position and rotation are both set.\n */\n origin?: (number | string)[] | 'center'\n\n /**\n * Distance to the rect\n * @default 5\n */\n distance?: number\n\n /**\n * If use local user space. Which will apply host's transform\n * @default false\n */\n local?: boolean\n\n /**\n * `insideFill` is a color string or left empty.\n * If a `textContent` is \"inside\", its final `fill` will be picked by this priority:\n * `textContent.style.fill` > `textConfig.insideFill` > \"auto-calculated-fill\"\n * In most cases, \"auto-calculated-fill\" is white.\n */\n insideFill?: string\n\n /**\n * `insideStroke` is a color string or left empty.\n * If a `textContent` is \"inside\", its final `stroke` will be picked by this priority:\n * `textContent.style.stroke` > `textConfig.insideStroke` > \"auto-calculated-stroke\"\n *\n * The rule of getting \"auto-calculated-stroke\":\n * If (A) the `fill` is specified in style (either in `textContent.style` or `textContent.style.rich`)\n * or (B) needed to draw text background (either defined in `textContent.style` or `textContent.style.rich`)\n * \"auto-calculated-stroke\" will be null.\n * Otherwise, \"auto-calculated-stroke\" will be the same as `fill` of this element if possible, or null.\n *\n * The reason of (A) is not decisive:\n * 1. If users specify `fill` in style and still use \"auto-calculated-stroke\", the effect\n * is not good and unexpected in some cases. It not easy and seams uncessary to auto calculate\n * a proper `stroke` for the given `fill`, since they can specify `stroke` themselve.\n * 2. Backward compat.\n */\n insideStroke?: string\n\n /**\n * `outsideFill` is a color string or left empty.\n * If a `textContent` is \"inside\", its final `fill` will be picked by this priority:\n * `textContent.style.fill` > `textConfig.outsideFill` > #000\n */\n outsideFill?: string\n\n /**\n * `outsideStroke` is a color string or left empth.\n * If a `textContent` is not \"inside\", its final `stroke` will be picked by this priority:\n * `textContent.style.stroke` > `textConfig.outsideStroke` > \"auto-calculated-stroke\"\n *\n * The rule of getting \"auto-calculated-stroke\":\n * If (A) the `fill` is specified in style (either in `textContent.style` or `textContent.style.rich`)\n * or (B) needed to draw text background (either defined in `textContent.style` or `textContent.style.rich`)\n * \"auto-calculated-stroke\" will be null.\n * Otherwise, \"auto-calculated-stroke\" will be a neer white color to distinguish \"front end\"\n * label with messy background (like other text label, line or other graphic).\n */\n outsideStroke?: string\n\n /**\n * Tell zrender I can sure this text is inside or not.\n * In case position is not using builtin `inside` hints.\n */\n inside?: boolean\n}\nexport interface ElementTextGuideLineConfig {\n /**\n * Anchor for text guide line.\n * Notice: Won't work\n */\n anchor?: Point\n\n /**\n * If above the target element.\n */\n showAbove?: boolean\n\n /**\n * Candidates of connectors. Used when autoCalculate is true and anchor is not specified.\n */\n candidates?: ('left' | 'top' | 'right' | 'bottom')[]\n}\n\nexport interface ElementEvent {\n type: ElementEventName,\n event: ZRRawEvent,\n // target can only be an element that is not silent.\n target: Element,\n // topTarget can be a silent element.\n topTarget: Element,\n cancelBubble: boolean,\n offsetX: number,\n offsetY: number,\n gestureEvent: string,\n pinchX: number,\n pinchY: number,\n pinchScale: number,\n wheelDelta: number,\n zrByTouch: boolean,\n which: number,\n stop: (this: ElementEvent) => void\n}\n\nexport type ElementEventCallback = (\n this: CbThis, e: ElementEvent\n) => boolean | void\ntype CbThis = unknown extends Ctx ? Impl : Ctx;\n\ninterface ElementEventHandlerProps {\n // Events\n onclick: ElementEventCallback\n ondblclick: ElementEventCallback\n onmouseover: ElementEventCallback\n onmouseout: ElementEventCallback\n onmousemove: ElementEventCallback\n onmousewheel: ElementEventCallback\n onmousedown: ElementEventCallback\n onmouseup: ElementEventCallback\n oncontextmenu: ElementEventCallback\n\n ondrag: ElementEventCallback\n ondragstart: ElementEventCallback\n ondragend: ElementEventCallback\n ondragenter: ElementEventCallback\n ondragleave: ElementEventCallback\n ondragover: ElementEventCallback\n ondrop: ElementEventCallback\n}\n\nexport interface ElementProps extends Partial {\n name?: string\n ignore?: boolean\n isGroup?: boolean\n draggable?: boolean | 'horizontal' | 'vertical'\n\n silent?: boolean\n\n ignoreClip?: boolean\n // From transform\n x?: number\n y?: number\n scaleX?: number\n scaleY?: number\n originX?: number\n originY?: number\n rotation?: number\n\n globalScaleRatio?: number\n\n textConfig?: ElementTextConfig\n textContent?: ZRText\n\n clipPath?: Path\n drift?: Element['drift']\n\n extra?: Dictionary\n\n // For echarts animation.\n anid?: string\n}\n\n// Properties can be used in state.\nexport const PRESERVED_NORMAL_STATE = '__zr_normal__';\n// export const PRESERVED_MERGED_STATE = '__zr_merged__';\n\nconst PRIMARY_STATES_KEYS = ['x', 'y', 'scaleX', 'scaleY', 'originX', 'originY', 'rotation', 'ignore'] as const;\nconst DEFAULT_ANIMATABLE_MAP: Partial> = {\n x: true,\n y: true,\n scaleX: true,\n scaleY: true,\n originX: true,\n originY: true,\n rotation: true,\n ignore: false\n};\n\nexport type ElementStatePropNames = (typeof PRIMARY_STATES_KEYS)[number] | 'textConfig';\nexport type ElementState = Pick & ElementCommonState\n\nexport type ElementCommonState = {\n hoverLayer?: boolean\n}\n\nlet tmpTextPosCalcRes = {} as TextPositionCalculationResult;\nlet tmpBoundingRect = new BoundingRect(0, 0, 0, 0);\n\ninterface Element extends Transformable, Eventful, ElementEventHandlerProps {\n // Provide more typed event callback params for mouse events.\n on(event: ElementEventName, handler: ElementEventCallback, context?: Ctx): this\n on(event: string, handler: EventCallback, context?: Ctx): this\n\n on(event: ElementEventName, query: EventQuery, handler: ElementEventCallback, context?: Ctx): this\n on(event: string, query: EventQuery, handler: EventCallback, context?: Ctx): this\n}\n\nclass Element {\n\n id: number = guid()\n /**\n * Element type\n */\n type: string\n\n /**\n * Element name\n */\n name: string\n\n /**\n * If ignore drawing and events of the element object\n */\n ignore: boolean\n\n /**\n * Whether to respond to mouse events.\n */\n silent: boolean\n\n /**\n * 是否是 Group\n */\n isGroup: boolean\n\n /**\n * Whether it can be dragged.\n */\n draggable: boolean | 'horizontal' | 'vertical'\n\n /**\n * Whether is it dragging.\n */\n dragging: boolean\n\n parent: Group\n\n animators: Animator[] = []\n\n /**\n * If ignore clip from it's parent or hosts.\n * Applied on itself and all it's children.\n *\n * NOTE: It won't affect the clipPath set on the children.\n */\n ignoreClip: boolean\n\n /**\n * If element is used as a component of other element.\n */\n __hostTarget: Element\n\n /**\n * ZRender instance will be assigned when element is associated with zrender\n */\n __zr: ZRenderType\n\n /**\n * Dirty bits.\n * From which painter will determine if this displayable object needs brush.\n */\n __dirty: number\n\n /**\n * If element was painted on the screen\n */\n __isRendered: boolean;\n\n /**\n * If element has been moved to the hover layer.\n *\n * If so, dirty will only trigger the zrender refresh hover layer\n */\n __inHover: boolean\n\n /**\n * path to clip the elements and its children, if it is a group.\n * @see http://www.w3.org/TR/2dcontext/#clipping-region\n */\n private _clipPath?: Path\n\n /**\n * Attached text element.\n * `position`, `style.textAlign`, `style.textVerticalAlign`\n * of element will be ignored if textContent.position is set\n */\n private _textContent?: ZRText\n\n /**\n * Text guide line.\n */\n private _textGuide?: Polyline\n\n /**\n * Config of textContent. Inlcuding layout, color, ...etc.\n */\n textConfig?: ElementTextConfig\n\n /**\n * Config for guide line calculating.\n *\n * NOTE: This is just a property signature. READ and WRITE are all done in echarts.\n */\n textGuideLineConfig?: ElementTextGuideLineConfig\n\n // FOR ECHARTS\n /**\n * Id for mapping animation\n */\n anid: string\n\n extra: Dictionary\n\n currentStates?: string[] = []\n // prevStates is for storager in echarts.\n prevStates?: string[]\n /**\n * Store of element state.\n * '__normal__' key is preserved for default properties.\n */\n states: Dictionary = {}\n\n /**\n * Animation config applied on state switching.\n */\n stateTransition: ElementAnimateConfig\n\n /**\n * Proxy function for getting state with given stateName.\n * ZRender will first try to get with stateProxy. Then find from states if stateProxy returns nothing\n *\n * targetStates will be given in useStates\n */\n stateProxy?: (stateName: string, targetStates?: string[]) => ElementState\n\n protected _normalState: ElementState\n\n // Temporary storage for inside text color configuration.\n private _innerTextDefaultStyle: DefaultTextStyle\n\n constructor(props?: Props) {\n this._init(props);\n }\n\n protected _init(props?: Props) {\n // Init default properties\n this.attr(props);\n }\n\n /**\n * Drift element\n * @param {number} dx dx on the global space\n * @param {number} dy dy on the global space\n */\n drift(dx: number, dy: number, e?: ElementEvent) {\n switch (this.draggable) {\n case 'horizontal':\n dy = 0;\n break;\n case 'vertical':\n dx = 0;\n break;\n }\n\n let m = this.transform;\n if (!m) {\n m = this.transform = [1, 0, 0, 1, 0, 0];\n }\n m[4] += dx;\n m[5] += dy;\n\n this.decomposeTransform();\n this.markRedraw();\n }\n\n /**\n * Hook before update\n */\n beforeUpdate() {}\n /**\n * Hook after update\n */\n afterUpdate() {}\n /**\n * Update each frame\n */\n update() {\n this.updateTransform();\n if (this.__dirty) {\n this.updateInnerText();\n }\n }\n\n updateInnerText(forceUpdate?: boolean) {\n // Update textContent\n const textEl = this._textContent;\n if (textEl && (!textEl.ignore || forceUpdate)) {\n if (!this.textConfig) {\n this.textConfig = {};\n }\n const textConfig = this.textConfig;\n const isLocal = textConfig.local;\n const attachedTransform = textEl.attachedTransform;\n\n let textAlign: TextAlign;\n let textVerticalAlign: TextVerticalAlign;\n\n let textStyleChanged = false;\n\n // TODO Restore the element after textConfig changed.\n\n // NOTE: Can't be used both as normal element and as textContent.\n if (isLocal) {\n // Apply host's transform.\n // TODO parent is always be group for developers. But can be displayble inside.\n attachedTransform.parent = this as unknown as Group;\n }\n else {\n attachedTransform.parent = null;\n }\n\n let innerOrigin = false;\n\n // Reset x/y/rotation\n attachedTransform.x = textEl.x;\n attachedTransform.y = textEl.y;\n attachedTransform.originX = textEl.originX;\n attachedTransform.originY = textEl.originY;\n attachedTransform.rotation = textEl.rotation;\n attachedTransform.scaleX = textEl.scaleX;\n attachedTransform.scaleY = textEl.scaleY;\n // Force set attached text's position if `position` is in config.\n if (textConfig.position != null) {\n let layoutRect = tmpBoundingRect;\n if (textConfig.layoutRect) {\n layoutRect.copy(textConfig.layoutRect);\n }\n else {\n layoutRect.copy(this.getBoundingRect());\n }\n if (!isLocal) {\n layoutRect.applyTransform(this.transform);\n }\n\n if (this.calculateTextPosition) {\n this.calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect);\n }\n else {\n calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect);\n }\n\n // TODO Should modify back if textConfig.position is set to null again.\n // Or textContent is detached.\n attachedTransform.x = tmpTextPosCalcRes.x;\n attachedTransform.y = tmpTextPosCalcRes.y;\n\n // User specified align/verticalAlign has higher priority, which is\n // useful in the case that attached text is rotated 90 degree.\n textAlign = tmpTextPosCalcRes.align;\n textVerticalAlign = tmpTextPosCalcRes.verticalAlign;\n\n const textOrigin = textConfig.origin;\n if (textOrigin && textConfig.rotation != null) {\n let relOriginX;\n let relOriginY;\n if (textOrigin === 'center') {\n relOriginX = layoutRect.width * 0.5;\n relOriginY = layoutRect.height * 0.5;\n }\n else {\n relOriginX = parsePercent(textOrigin[0], layoutRect.width);\n relOriginY = parsePercent(textOrigin[1], layoutRect.height);\n }\n\n innerOrigin = true;\n attachedTransform.originX = -attachedTransform.x + relOriginX + (isLocal ? 0 : layoutRect.x);\n attachedTransform.originY = -attachedTransform.y + relOriginY + (isLocal ? 0 : layoutRect.y);\n }\n }\n\n\n if (textConfig.rotation != null) {\n attachedTransform.rotation = textConfig.rotation;\n }\n\n // TODO\n const textOffset = textConfig.offset;\n if (textOffset) {\n attachedTransform.x += textOffset[0];\n attachedTransform.y += textOffset[1];\n\n // Not change the user set origin.\n if (!innerOrigin) {\n attachedTransform.originX = -textOffset[0];\n attachedTransform.originY = -textOffset[1];\n }\n }\n\n // Calculate text color\n const isInside = textConfig.inside == null // Force to be inside or not.\n ? (typeof textConfig.position === 'string' && textConfig.position.indexOf('inside') >= 0)\n : textConfig.inside;\n const innerTextDefaultStyle = this._innerTextDefaultStyle || (this._innerTextDefaultStyle = {});\n\n let textFill;\n let textStroke;\n let autoStroke;\n if (isInside && this.canBeInsideText()) {\n // In most cases `textContent` need this \"auto\" strategy.\n // So by default be 'auto'. Otherwise users need to literally\n // set `insideFill: 'auto', insideStroke: 'auto'` each time.\n textFill = textConfig.insideFill;\n textStroke = textConfig.insideStroke;\n\n if (textFill == null || textFill === 'auto') {\n textFill = this.getInsideTextFill();\n }\n if (textStroke == null || textStroke === 'auto') {\n textStroke = this.getInsideTextStroke(textFill);\n autoStroke = true;\n }\n }\n else {\n textFill = textConfig.outsideFill;\n textStroke = textConfig.outsideStroke;\n\n if (textFill == null || textFill === 'auto') {\n textFill = this.getOutsideFill();\n }\n // By default give a stroke to distinguish \"front end\" label with\n // messy background (like other text label, line or other graphic).\n // If textContent.style.fill specified, this auto stroke will not be used.\n if (textStroke == null || textStroke === 'auto') {\n // If some time need to customize the default stroke getter,\n // add some kind of override method.\n textStroke = this.getOutsideStroke(textFill);\n autoStroke = true;\n }\n }\n // Default `textFill` should must have a value to ensure text can be displayed.\n textFill = textFill || '#000';\n\n if (textFill !== innerTextDefaultStyle.fill\n || textStroke !== innerTextDefaultStyle.stroke\n || autoStroke !== innerTextDefaultStyle.autoStroke\n || textAlign !== innerTextDefaultStyle.align\n || textVerticalAlign !== innerTextDefaultStyle.verticalAlign\n ) {\n\n textStyleChanged = true;\n\n innerTextDefaultStyle.fill = textFill;\n innerTextDefaultStyle.stroke = textStroke;\n innerTextDefaultStyle.autoStroke = autoStroke;\n innerTextDefaultStyle.align = textAlign;\n innerTextDefaultStyle.verticalAlign = textVerticalAlign;\n\n textEl.setDefaultTextStyle(innerTextDefaultStyle);\n }\n\n // Mark textEl to update transform.\n // DON'T use markRedraw. It will cause Element itself to dirty again.\n textEl.__dirty |= REDARAW_BIT;\n\n if (textStyleChanged) {\n // Only mark style dirty if necessary. Update ZRText is costly.\n textEl.dirtyStyle(true);\n }\n }\n }\n\n protected canBeInsideText() {\n return true;\n }\n\n protected getInsideTextFill(): string | undefined {\n return '#fff';\n }\n\n protected getInsideTextStroke(textFill: string): string | undefined {\n return '#000';\n }\n\n protected getOutsideFill(): string | undefined {\n return this.__zr && this.__zr.isDarkMode() ? LIGHT_LABEL_COLOR : DARK_LABEL_COLOR;\n }\n\n protected getOutsideStroke(textFill: string): string {\n const backgroundColor = this.__zr && this.__zr.getBackgroundColor();\n let colorArr = typeof backgroundColor === 'string' && parse(backgroundColor as string);\n if (!colorArr) {\n colorArr = [255, 255, 255, 1];\n }\n // Assume blending on a white / black(dark) background.\n const alpha = colorArr[3];\n const isDark = this.__zr.isDarkMode();\n for (let i = 0; i < 3; i++) {\n colorArr[i] = colorArr[i] * alpha + (isDark ? 0 : 255) * (1 - alpha);\n }\n colorArr[3] = 1;\n return stringify(colorArr, 'rgba');\n }\n\n traverse(\n cb: (this: Context, el: Element) => void,\n context?: Context\n ) {}\n\n protected attrKV(key: string, value: unknown) {\n if (key === 'textConfig') {\n this.setTextConfig(value as ElementTextConfig);\n }\n else if (key === 'textContent') {\n this.setTextContent(value as ZRText);\n }\n else if (key === 'clipPath') {\n this.setClipPath(value as Path);\n }\n else if (key === 'extra') {\n this.extra = this.extra || {};\n extend(this.extra, value);\n }\n else {\n (this as any)[key] = value;\n }\n }\n\n /**\n * Hide the element\n */\n hide() {\n this.ignore = true;\n this.markRedraw();\n }\n\n /**\n * Show the element\n */\n show() {\n this.ignore = false;\n this.markRedraw();\n }\n\n attr(keyOrObj: Props): this\n attr(keyOrObj: T, value: Props[T]): this\n attr(keyOrObj: keyof Props | Props, value?: unknown): this {\n if (typeof keyOrObj === 'string') {\n this.attrKV(keyOrObj as keyof ElementProps, value as AllPropTypes);\n }\n else if (isObject(keyOrObj)) {\n let obj = keyOrObj as object;\n let keysArr = keys(obj);\n for (let i = 0; i < keysArr.length; i++) {\n let key = keysArr[i];\n this.attrKV(key as keyof ElementProps, keyOrObj[key]);\n }\n }\n this.markRedraw();\n return this;\n }\n\n // Save current state to normal\n saveCurrentToNormalState(toState: ElementState) {\n this._innerSaveToNormal(toState);\n\n // If we are switching from normal to other state during animation.\n // We need to save final value of animation to the normal state. Not interpolated value.\n const normalState = this._normalState;\n for (let i = 0; i < this.animators.length; i++) {\n const animator = this.animators[i];\n const fromStateTransition = animator.__fromStateTransition;\n // Ignore animation from state transition(except normal).\n if (fromStateTransition && fromStateTransition !== PRESERVED_NORMAL_STATE) {\n continue;\n }\n\n const targetName = animator.targetName;\n // Respecting the order of animation if multiple animator is\n // animating on the same property(If additive animation is used)\n const target = targetName\n ? (normalState as any)[targetName] : normalState;\n // Only save keys that are changed by the states.\n animator.saveFinalToTarget(target);\n }\n }\n\n protected _innerSaveToNormal(toState: ElementState) {\n let normalState = this._normalState;\n if (!normalState) {\n // Clear previous stored normal states when switching from normalState to otherState.\n normalState = this._normalState = {};\n }\n if (toState.textConfig && !normalState.textConfig) {\n normalState.textConfig = this.textConfig;\n }\n\n this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS);\n }\n\n protected _savePrimaryToNormal(\n toState: Dictionary, normalState: Dictionary, primaryKeys: readonly string[]\n ) {\n for (let i = 0; i < primaryKeys.length; i++) {\n let key = primaryKeys[i];\n // Only save property that will be changed by toState\n // and has not been saved to normalState yet.\n if (toState[key] != null && !(key in normalState)) {\n (normalState as any)[key] = (this as any)[key];\n }\n }\n }\n\n /**\n * If has any state.\n */\n hasState() {\n return this.currentStates.length > 0;\n }\n\n /**\n * Get state object\n */\n getState(name: string) {\n return this.states[name];\n }\n\n\n /**\n * Ensure state exists. If not, will create one and return.\n */\n ensureState(name: string) {\n const states = this.states;\n if (!states[name]) {\n states[name] = {};\n }\n return states[name];\n }\n\n /**\n * Clear all states.\n */\n clearStates(noAnimation?: boolean) {\n this.useState(PRESERVED_NORMAL_STATE, false, noAnimation);\n // TODO set _normalState to null?\n }\n /**\n * Use state. State is a collection of properties.\n * Will return current state object if state exists and stateName has been changed.\n *\n * @param stateName State name to be switched to\n * @param keepCurrentState If keep current states.\n * If not, it will inherit from the normal state.\n */\n useState(stateName: string, keepCurrentStates?: boolean, noAnimation?: boolean, forceUseHoverLayer?: boolean) {\n // Use preserved word __normal__\n // TODO: Only restore changed properties when restore to normal???\n const toNormalState = stateName === PRESERVED_NORMAL_STATE;\n const hasStates = this.hasState();\n\n if (!hasStates && toNormalState) {\n // If switched from normal to normal.\n return;\n }\n\n const currentStates = this.currentStates;\n const animationCfg = this.stateTransition;\n\n // No need to change in following cases:\n // 1. Keep current states. and already being applied before.\n // 2. Don't keep current states. And new state is same with the only one exists state.\n if (indexOf(currentStates, stateName) >= 0 && (keepCurrentStates || currentStates.length === 1)) {\n return;\n }\n\n let state;\n if (this.stateProxy && !toNormalState) {\n state = this.stateProxy(stateName);\n }\n\n if (!state) {\n state = (this.states && this.states[stateName]);\n }\n\n if (!state && !toNormalState) {\n logError(`State ${stateName} not exists.`);\n return;\n }\n\n if (!toNormalState) {\n this.saveCurrentToNormalState(state);\n }\n\n const useHoverLayer = !!((state && state.hoverLayer) || forceUseHoverLayer);\n\n if (useHoverLayer) {\n // Enter hover layer before states update.\n this._toggleHoverLayerFlag(true);\n }\n\n this._applyStateObj(\n stateName,\n state,\n this._normalState,\n keepCurrentStates,\n !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0,\n animationCfg\n );\n\n // Also set text content.\n const textContent = this._textContent;\n const textGuide = this._textGuide;\n if (textContent) {\n // Force textContent use hover layer if self is using it.\n textContent.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer);\n }\n if (textGuide) {\n textGuide.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer);\n }\n\n if (toNormalState) {\n // Clear state\n this.currentStates = [];\n // Reset normal state.\n this._normalState = {};\n }\n else {\n if (!keepCurrentStates) {\n this.currentStates = [stateName];\n }\n else {\n this.currentStates.push(stateName);\n }\n }\n\n // Update animating target to the new object after state changed.\n this._updateAnimationTargets();\n\n this.markRedraw();\n\n if (!useHoverLayer && this.__inHover) {\n // Leave hover layer after states update and markRedraw.\n this._toggleHoverLayerFlag(false);\n // NOTE: avoid unexpected refresh when moving out from hover layer!!\n // Only clear from hover layer.\n this.__dirty &= ~REDARAW_BIT;\n }\n\n // Return used state.\n return state;\n }\n\n /**\n * Apply multiple states.\n * @param states States list.\n */\n useStates(states: string[], noAnimation?: boolean, forceUseHoverLayer?: boolean) {\n if (!states.length) {\n this.clearStates();\n }\n else {\n const stateObjects: ElementState[] = [];\n const currentStates = this.currentStates;\n const len = states.length;\n let notChange = len === currentStates.length;\n if (notChange) {\n for (let i = 0; i < len; i++) {\n if (states[i] !== currentStates[i]) {\n notChange = false;\n break;\n }\n }\n }\n if (notChange) {\n return;\n }\n\n for (let i = 0; i < len; i++) {\n const stateName = states[i];\n let stateObj: ElementState;\n if (this.stateProxy) {\n stateObj = this.stateProxy(stateName, states);\n }\n if (!stateObj) {\n stateObj = this.states[stateName];\n }\n if (stateObj) {\n stateObjects.push(stateObj);\n }\n }\n\n const lastStateObj = stateObjects[len - 1];\n const useHoverLayer = !!((lastStateObj && lastStateObj.hoverLayer) || forceUseHoverLayer);\n if (useHoverLayer) {\n // Enter hover layer before states update.\n this._toggleHoverLayerFlag(true);\n }\n\n const mergedState = this._mergeStates(stateObjects);\n const animationCfg = this.stateTransition;\n\n this.saveCurrentToNormalState(mergedState);\n\n this._applyStateObj(\n states.join(','),\n mergedState,\n this._normalState,\n false,\n !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0,\n animationCfg\n );\n\n const textContent = this._textContent;\n const textGuide = this._textGuide;\n if (textContent) {\n textContent.useStates(states, noAnimation, useHoverLayer);\n }\n if (textGuide) {\n textGuide.useStates(states, noAnimation, useHoverLayer);\n }\n\n this._updateAnimationTargets();\n\n // Create a copy\n this.currentStates = states.slice();\n this.markRedraw();\n\n if (!useHoverLayer && this.__inHover) {\n // Leave hover layer after states update and markRedraw.\n this._toggleHoverLayerFlag(false);\n // NOTE: avoid unexpected refresh when moving out from hover layer!!\n // Only clear from hover layer.\n this.__dirty &= ~REDARAW_BIT;\n }\n }\n }\n\n /**\n * Update animation targets when reference is changed.\n */\n private _updateAnimationTargets() {\n for (let i = 0; i < this.animators.length; i++) {\n const animator = this.animators[i];\n if (animator.targetName) {\n animator.changeTarget((this as any)[animator.targetName]);\n }\n }\n }\n\n /**\n * Remove state\n * @param state State to remove\n */\n removeState(state: string) {\n const idx = indexOf(this.currentStates, state);\n if (idx >= 0) {\n const currentStates = this.currentStates.slice();\n currentStates.splice(idx, 1);\n this.useStates(currentStates);\n }\n }\n\n /**\n * Replace exists state.\n * @param oldState\n * @param newState\n * @param forceAdd If still add when even if replaced target not exists.\n */\n replaceState(oldState: string, newState: string, forceAdd: boolean) {\n const currentStates = this.currentStates.slice();\n const idx = indexOf(currentStates, oldState);\n const newStateExists = indexOf(currentStates, newState) >= 0;\n if (idx >= 0) {\n if (!newStateExists) {\n // Replace the old with the new one.\n currentStates[idx] = newState;\n }\n else {\n // Only remove the old one.\n currentStates.splice(idx, 1);\n }\n }\n else if (forceAdd && !newStateExists) {\n currentStates.push(newState);\n }\n this.useStates(currentStates);\n }\n\n /**\n * Toogle state.\n */\n toggleState(state: string, enable: boolean) {\n if (enable) {\n this.useState(state, true);\n }\n else {\n this.removeState(state);\n }\n }\n\n protected _mergeStates(states: ElementState[]) {\n const mergedState: ElementState = {};\n let mergedTextConfig: ElementTextConfig;\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n extend(mergedState, state);\n\n if (state.textConfig) {\n mergedTextConfig = mergedTextConfig || {};\n extend(mergedTextConfig, state.textConfig);\n }\n }\n if (mergedTextConfig) {\n mergedState.textConfig = mergedTextConfig;\n }\n\n return mergedState;\n }\n\n protected _applyStateObj(\n stateName: string,\n state: ElementState,\n normalState: ElementState,\n keepCurrentStates: boolean,\n transition: boolean,\n animationCfg: ElementAnimateConfig\n ) {\n const needsRestoreToNormal = !(state && keepCurrentStates);\n\n // TODO: Save current state to normal?\n // TODO: Animation\n if (state && state.textConfig) {\n // Inherit from current state or normal state.\n this.textConfig = extend(\n {},\n keepCurrentStates ? this.textConfig : normalState.textConfig\n );\n extend(this.textConfig, state.textConfig);\n }\n else if (needsRestoreToNormal) {\n if (normalState.textConfig) { // Only restore if changed and saved.\n this.textConfig = normalState.textConfig;\n }\n }\n\n const transitionTarget: Dictionary = {};\n let hasTransition = false;\n\n for (let i = 0; i < PRIMARY_STATES_KEYS.length; i++) {\n const key = PRIMARY_STATES_KEYS[i];\n const propNeedsTransition = transition && DEFAULT_ANIMATABLE_MAP[key];\n\n if (state && state[key] != null) {\n if (propNeedsTransition) {\n hasTransition = true;\n transitionTarget[key] = state[key];\n }\n else {\n // Replace if it exist in target state\n (this as any)[key] = state[key];\n }\n }\n else if (needsRestoreToNormal) {\n if (normalState[key] != null) {\n if (propNeedsTransition) {\n hasTransition = true;\n transitionTarget[key] = normalState[key];\n }\n else {\n // Restore to normal state\n (this as any)[key] = normalState[key];\n }\n }\n }\n }\n\n if (!transition) {\n // Keep the running animation to the new values after states changed.\n // Not simply stop animation. Or it may have jump effect.\n for (let i = 0; i < this.animators.length; i++) {\n const animator = this.animators[i];\n const targetName = animator.targetName;\n animator.__changeFinalValue(targetName\n ? ((state || normalState) as any)[targetName]\n : (state || normalState)\n );\n }\n }\n\n if (hasTransition) {\n this._transitionState(\n stateName,\n transitionTarget as Props,\n animationCfg\n );\n }\n }\n\n /**\n * Component is some elements attached on this element for specific purpose.\n * Like clipPath, textContent\n */\n private _attachComponent(componentEl: Element) {\n if (componentEl.__zr && !componentEl.__hostTarget) {\n throw new Error('Text element has been added to zrender.');\n }\n\n if (componentEl === this) {\n throw new Error('Recursive component attachment.');\n }\n\n const zr = this.__zr;\n if (zr) {\n // Needs to add self to zrender. For rerender triggering, or animation.\n componentEl.addSelfToZr(zr);\n }\n\n componentEl.__zr = zr;\n componentEl.__hostTarget = this as unknown as Element;\n }\n\n private _detachComponent(componentEl: Element) {\n if (componentEl.__zr) {\n componentEl.removeSelfFromZr(componentEl.__zr);\n }\n\n componentEl.__zr = null;\n componentEl.__hostTarget = null;\n }\n\n /**\n * Get clip path\n */\n getClipPath() {\n return this._clipPath;\n }\n\n /**\n * Set clip path\n *\n * clipPath can't be shared between two elements.\n */\n setClipPath(clipPath: Path) {\n // Remove previous clip path\n if (this._clipPath && this._clipPath !== clipPath) {\n this.removeClipPath();\n }\n\n this._attachComponent(clipPath);\n\n this._clipPath = clipPath;\n this.markRedraw();\n }\n\n /**\n * Remove clip path\n */\n removeClipPath() {\n const clipPath = this._clipPath;\n if (clipPath) {\n this._detachComponent(clipPath);\n this._clipPath = null;\n this.markRedraw();\n }\n }\n\n /**\n * Get attached text content.\n */\n getTextContent(): ZRText {\n return this._textContent;\n }\n\n /**\n * Attach text on element\n */\n setTextContent(textEl: ZRText) {\n const previousTextContent = this._textContent;\n if (previousTextContent === textEl) {\n return;\n }\n // Remove previous textContent\n if (previousTextContent && previousTextContent !== textEl) {\n this.removeTextContent();\n }\n\n if (textEl.__zr && !textEl.__hostTarget) {\n throw new Error('Text element has been added to zrender.');\n }\n\n textEl.attachedTransform = new Transformable();\n\n this._attachComponent(textEl);\n\n this._textContent = textEl;\n\n this.markRedraw();\n }\n\n /**\n * Set layout of attached text. Will merge with the previous.\n */\n setTextConfig(cfg: ElementTextConfig) {\n // TODO hide cfg property?\n if (!this.textConfig) {\n this.textConfig = {};\n }\n extend(this.textConfig, cfg);\n this.markRedraw();\n }\n\n /**\n * Remove text config\n */\n removeTextConfig() {\n this.textConfig = null;\n this.markRedraw();\n }\n\n /**\n * Remove attached text element.\n */\n removeTextContent() {\n const textEl = this._textContent;\n if (textEl) {\n textEl.attachedTransform = null;\n this._detachComponent(textEl);\n this._textContent = null;\n this._innerTextDefaultStyle = null;\n this.markRedraw();\n }\n }\n\n getTextGuideLine(): Polyline {\n return this._textGuide;\n }\n\n setTextGuideLine(guideLine: Polyline) {\n // Remove previous clip path\n if (this._textGuide && this._textGuide !== guideLine) {\n this.removeTextGuideLine();\n }\n\n this._attachComponent(guideLine);\n\n this._textGuide = guideLine;\n\n this.markRedraw();\n }\n\n removeTextGuideLine() {\n const textGuide = this._textGuide;\n if (textGuide) {\n this._detachComponent(textGuide);\n this._textGuide = null;\n this.markRedraw();\n }\n }\n /**\n * Mark element needs to be repainted\n */\n markRedraw() {\n this.__dirty |= REDARAW_BIT;\n const zr = this.__zr;\n if (zr) {\n if (this.__inHover) {\n zr.refreshHover();\n }\n else {\n zr.refresh();\n }\n }\n\n // Used as a clipPath or textContent\n if (this.__hostTarget) {\n this.__hostTarget.markRedraw();\n }\n }\n\n /**\n * Besides marking elements to be refreshed.\n * It will also invalid all cache and doing recalculate next frame.\n */\n dirty() {\n this.markRedraw();\n }\n\n private _toggleHoverLayerFlag(inHover: boolean) {\n this.__inHover = inHover;\n const textContent = this._textContent;\n const textGuide = this._textGuide;\n if (textContent) {\n textContent.__inHover = inHover;\n }\n if (textGuide) {\n textGuide.__inHover = inHover;\n }\n }\n\n /**\n * Add self from zrender instance.\n * Not recursively because it will be invoked when element added to storage.\n */\n addSelfToZr(zr: ZRenderType) {\n this.__zr = zr;\n // 添加动画\n const animators = this.animators;\n if (animators) {\n for (let i = 0; i < animators.length; i++) {\n zr.animation.addAnimator(animators[i]);\n }\n }\n\n if (this._clipPath) {\n this._clipPath.addSelfToZr(zr);\n }\n if (this._textContent) {\n this._textContent.addSelfToZr(zr);\n }\n if (this._textGuide) {\n this._textGuide.addSelfToZr(zr);\n }\n }\n\n /**\n * Remove self from zrender instance.\n * Not recursively because it will be invoked when element added to storage.\n */\n removeSelfFromZr(zr: ZRenderType) {\n this.__zr = null;\n // Remove animation\n const animators = this.animators;\n if (animators) {\n for (let i = 0; i < animators.length; i++) {\n zr.animation.removeAnimator(animators[i]);\n }\n }\n\n if (this._clipPath) {\n this._clipPath.removeSelfFromZr(zr);\n }\n if (this._textContent) {\n this._textContent.removeSelfFromZr(zr);\n }\n if (this._textGuide) {\n this._textGuide.removeSelfFromZr(zr);\n }\n }\n\n /**\n * 动画\n *\n * @param path The key to fetch value from object. Mostly style or shape.\n * @param loop Whether to loop animation.\n * @example:\n * el.animate('style', false)\n * .when(1000, {x: 10} )\n * .done(function(){ // Animation done })\n * .start()\n */\n animate(key?: string, loop?: boolean) {\n let target = key ? (this as any)[key] : this;\n\n if (!target) {\n logError(\n 'Property \"'\n + key\n + '\" is not existed in element '\n + this.id\n );\n return;\n }\n\n const animator = new Animator(target, loop);\n this.addAnimator(animator, key);\n return animator;\n }\n\n addAnimator(animator: Animator, key: string): void {\n const zr = this.__zr;\n\n const el = this;\n\n animator.during(function () {\n el.updateDuringAnimation(key as string);\n }).done(function () {\n const animators = el.animators;\n // FIXME Animator will not be removed if use `Animator#stop` to stop animation\n const idx = indexOf(animators, animator);\n if (idx >= 0) {\n animators.splice(idx, 1);\n }\n });\n\n this.animators.push(animator);\n\n // If animate after added to the zrender\n if (zr) {\n zr.animation.addAnimator(animator);\n }\n\n // Wake up zrender to start the animation loop.\n zr && zr.wakeUp();\n }\n\n updateDuringAnimation(key: string) {\n this.markRedraw();\n }\n\n /**\n * 停止动画\n * @param {boolean} forwardToLast If move to last frame before stop\n */\n stopAnimation(scope?: string, forwardToLast?: boolean) {\n const animators = this.animators;\n const len = animators.length;\n const leftAnimators: Animator[] = [];\n for (let i = 0; i < len; i++) {\n const animator = animators[i];\n if (!scope || scope === animator.scope) {\n animator.stop(forwardToLast);\n }\n else {\n leftAnimators.push(animator);\n }\n }\n this.animators = leftAnimators;\n\n return this;\n }\n\n /**\n * @param animationProps A map to specify which property to animate. If not specified, will animate all.\n * @example\n * // Animate position\n * el.animateTo({\n * position: [10, 10]\n * }, { done: () => { // done } })\n *\n * // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing\n * el.animateTo({\n * shape: {\n * width: 500\n * },\n * style: {\n * fill: 'red'\n * }\n * position: [10, 10]\n * }, {\n * duration: 100,\n * delay: 100,\n * easing: 'cubicOut',\n * done: () => { // done }\n * })\n */\n animateTo(target: Props, cfg?: ElementAnimateConfig, animationProps?: MapToType) {\n animateTo(this, target, cfg, animationProps);\n }\n\n /**\n * Animate from the target state to current state.\n * The params and the value are the same as `this.animateTo`.\n */\n\n // Overload definitions\n animateFrom(\n target: Props, cfg: Omit, animationProps?: MapToType\n ) {\n animateTo(this, target, cfg, animationProps, true);\n }\n\n protected _transitionState(\n stateName: string, target: Props, cfg?: ElementAnimateConfig, animationProps?: MapToType\n ) {\n const animators = animateTo(this, target, cfg, animationProps);\n for (let i = 0; i < animators.length; i++) {\n animators[i].__fromStateTransition = stateName;\n }\n }\n\n /**\n * Interface of getting the minimum bounding box.\n */\n getBoundingRect(): BoundingRect {\n return null;\n }\n\n getPaintRect(): BoundingRect {\n return null;\n }\n\n /**\n * The string value of `textPosition` needs to be calculated to a real postion.\n * For example, `'inside'` is calculated to `[rect.width/2, rect.height/2]`\n * by default. See `contain/text.js#calculateTextPosition` for more details.\n * But some coutom shapes like \"pin\", \"flag\" have center that is not exactly\n * `[width/2, height/2]`. So we provide this hook to customize the calculation\n * for those shapes. It will be called if the `style.textPosition` is a string.\n * @param {Obejct} [out] Prepared out object. If not provided, this method should\n * be responsible for creating one.\n * @param {module:zrender/graphic/Style} style\n * @param {Object} rect {x, y, width, height}\n * @return {Obejct} out The same as the input out.\n * {\n * x: number. mandatory.\n * y: number. mandatory.\n * align: string. optional. use style.textAlign by default.\n * verticalAlign: string. optional. use style.textVerticalAlign by default.\n * }\n */\n calculateTextPosition: (\n out: TextPositionCalculationResult, style: ElementTextConfig, rect: RectLike\n ) => TextPositionCalculationResult\n\n protected static initDefaultProps = (function () {\n const elProto = Element.prototype;\n elProto.type = 'element';\n elProto.name = '';\n elProto.ignore = false;\n elProto.silent = false;\n elProto.isGroup = false;\n elProto.draggable = false;\n elProto.dragging = false;\n elProto.ignoreClip = false;\n elProto.__inHover = false;\n elProto.__dirty = REDARAW_BIT;\n\n\n const logs: Dictionary = {};\n function logDeprecatedError(key: string, xKey: string, yKey: string) {\n if (!logs[key + xKey + yKey]) {\n console.warn(`DEPRECATED: '${key}' has been deprecated. use '${xKey}', '${yKey}' instead`);\n logs[key + xKey + yKey] = true;\n }\n }\n // Legacy transform properties. position and scale\n function createLegacyProperty(\n key: string,\n privateKey: string,\n xKey: string,\n yKey: string\n ) {\n Object.defineProperty(elProto, key, {\n get() {\n logDeprecatedError(key, xKey, yKey);\n if (!this[privateKey]) {\n const pos: number[] = this[privateKey] = [];\n enhanceArray(this, pos);\n }\n return this[privateKey];\n },\n set(pos: number[]) {\n logDeprecatedError(key, xKey, yKey);\n this[xKey] = pos[0];\n this[yKey] = pos[1];\n this[privateKey] = pos;\n enhanceArray(this, pos);\n }\n });\n function enhanceArray(self: any, pos: number[]) {\n Object.defineProperty(pos, 0, {\n get() {\n return self[xKey];\n },\n set(val: number) {\n self[xKey] = val;\n }\n });\n Object.defineProperty(pos, 1, {\n get() {\n return self[yKey];\n },\n set(val: number) {\n self[yKey] = val;\n }\n });\n }\n }\n if (Object.defineProperty && (!(env as any).browser.ie || (env as any).browser.version > 8)) {\n createLegacyProperty('position', '_legacyPos', 'x', 'y');\n createLegacyProperty('scale', '_legacyScale', 'scaleX', 'scaleY');\n createLegacyProperty('origin', '_legacyOrigin', 'originX', 'originY');\n }\n })()\n}\n\nmixin(Element, Eventful);\nmixin(Element, Transformable);\n\nfunction animateTo(\n animatable: Element,\n target: Dictionary,\n cfg: ElementAnimateConfig,\n animationProps: Dictionary,\n reverse?: boolean\n) {\n cfg = cfg || {};\n const animators: Animator[] = [];\n animateToShallow(\n animatable,\n '',\n animatable,\n target,\n cfg,\n animationProps,\n animators,\n reverse\n );\n\n let finishCount = animators.length;\n let doneHappened = false;\n const cfgDone = cfg.done;\n const cfgAborted = cfg.aborted;\n\n const doneCb = () => {\n doneHappened = true;\n finishCount--;\n if (finishCount <= 0) {\n doneHappened\n ? (cfgDone && cfgDone())\n : (cfgAborted && cfgAborted());\n }\n };\n\n const abortedCb = () => {\n finishCount--;\n if (finishCount <= 0) {\n doneHappened\n ? (cfgDone && cfgDone())\n : (cfgAborted && cfgAborted());\n }\n };\n\n // No animators. This should be checked before animators[i].start(),\n // because 'done' may be executed immediately if no need to animate.\n if (!finishCount) {\n cfgDone && cfgDone();\n }\n\n // Adding during callback to the first animator\n if (animators.length > 0 && cfg.during) {\n // TODO If there are two animators in animateTo, and the first one is stopped by other animator.\n animators[0].during((target, percent) => {\n cfg.during(percent);\n });\n }\n\n // Start after all animators created\n // Incase any animator is done immediately when all animation properties are not changed\n for (let i = 0; i < animators.length; i++) {\n const animator = animators[i];\n if (doneCb) {\n animator.done(doneCb);\n }\n if (abortedCb) {\n animator.aborted(abortedCb);\n }\n animator.start(cfg.easing, cfg.force);\n }\n\n return animators;\n}\n\nfunction copyArrShallow(source: number[], target: number[], len: number) {\n for (let i = 0; i < len; i++) {\n source[i] = target[i];\n }\n}\n\nfunction is2DArray(value: any[]): value is number[][] {\n return isArrayLike(value[0]);\n}\n\nfunction copyValue(target: Dictionary, source: Dictionary, key: string) {\n if (isArrayLike(source[key])) {\n if (!isArrayLike(target[key])) {\n target[key] = [];\n }\n\n if (isTypedArray(source[key])) {\n const len = source[key].length;\n if (target[key].length !== len) {\n target[key] = new (source[key].constructor)(len);\n copyArrShallow(target[key], source[key], len);\n }\n }\n else {\n const sourceArr = source[key] as any[];\n const targetArr = target[key] as any[];\n\n const len0 = sourceArr.length;\n if (is2DArray(sourceArr)) {\n // NOTE: each item should have same length\n const len1 = sourceArr[0].length;\n\n for (let i = 0; i < len0; i++) {\n if (!targetArr[i]) {\n targetArr[i] = Array.prototype.slice.call(sourceArr[i]);\n }\n else {\n copyArrShallow(targetArr[i], sourceArr[i], len1);\n }\n }\n }\n else {\n copyArrShallow(targetArr, sourceArr, len0);\n }\n\n targetArr.length = sourceArr.length;\n }\n }\n else {\n target[key] = source[key];\n }\n}\n\nfunction animateToShallow(\n animatable: Element,\n topKey: string,\n source: Dictionary,\n target: Dictionary,\n cfg: ElementAnimateConfig,\n animationProps: Dictionary | true,\n animators: Animator[],\n reverse: boolean // If `true`, animate from the `target` to current state.\n) {\n const animatableKeys: string[] = [];\n const changedKeys: string[] = [];\n const targetKeys = keys(target);\n const duration = cfg.duration;\n const delay = cfg.delay;\n const additive = cfg.additive;\n const setToFinal = cfg.setToFinal;\n const animateAll = !isObject(animationProps);\n for (let k = 0; k < targetKeys.length; k++) {\n const innerKey = targetKeys[k] as string;\n\n if (source[innerKey] != null\n && target[innerKey] != null // Can't animate between null value. assign directly. For example. stroke animate from #fff to null.\n && (animateAll || (animationProps as Dictionary)[innerKey])\n ) {\n if (isObject(target[innerKey]) && !isArrayLike(target[innerKey])) {\n if (topKey) {\n // logError('Only support 1 depth nest object animation.');\n // Assign directly.\n // TODO richText?\n if (!reverse) {\n source[innerKey] = target[innerKey];\n animatable.updateDuringAnimation(topKey);\n }\n continue;\n }\n animateToShallow(\n animatable,\n innerKey,\n source[innerKey],\n target[innerKey],\n cfg,\n animationProps && (animationProps as Dictionary)[innerKey],\n animators,\n reverse\n );\n }\n else {\n animatableKeys.push(innerKey);\n changedKeys.push(innerKey);\n }\n }\n else if (!reverse) {\n // Assign target value directly.\n source[innerKey] = target[innerKey];\n animatable.updateDuringAnimation(topKey);\n // Previous animation will be stopped on the changed keys.\n // So direct assign is also included.\n changedKeys.push(innerKey);\n }\n }\n\n const keyLen = animatableKeys.length;\n\n if (keyLen > 0\n // cfg.force is mainly for keep invoking onframe and ondone callback even if animation is not necessary.\n // So if there is already has animators. There is no need to create another animator if not necessary.\n // Or it will always add one more with empty target.\n || (cfg.force && !animators.length)\n ) {\n // Find last animator animating same prop.\n const existsAnimators = animatable.animators;\n let existsAnimatorsOnSameTarget: Animator[] = [];\n for (let i = 0; i < existsAnimators.length; i++) {\n // Use key string instead object reference because ref may be changed.\n if (existsAnimators[i].targetName === topKey) {\n existsAnimatorsOnSameTarget.push(existsAnimators[i]);\n }\n }\n\n if (!additive && existsAnimatorsOnSameTarget.length) {\n // Stop exists animation on specific tracks. Only one animator available for each property.\n // TODO Should invoke previous animation callback?\n for (let i = 0; i < existsAnimatorsOnSameTarget.length; i++) {\n const allAborted = existsAnimatorsOnSameTarget[i].stopTracks(changedKeys);\n if (allAborted) { // This animator can't be used.\n const idx = indexOf(existsAnimators, existsAnimatorsOnSameTarget[i]);\n existsAnimators.splice(idx, 1);\n }\n }\n }\n\n let revertedSource: Dictionary;\n let reversedTarget: Dictionary;\n let sourceClone: Dictionary;\n if (reverse) {\n reversedTarget = {};\n if (setToFinal) {\n revertedSource = {};\n }\n for (let i = 0; i < keyLen; i++) {\n const innerKey = animatableKeys[i];\n reversedTarget[innerKey] = source[innerKey];\n if (setToFinal) {\n revertedSource[innerKey] = target[innerKey];\n }\n else {\n // The usage of \"animateFrom\" expects that the element props has been updated dirctly to\n // \"final\" values outside, and input the \"from\" values here (i.e., in variable `target` here).\n // So here we assign the \"from\" values directly to element here (rather that in the next frame)\n // to prevent the \"final\" values from being read in any other places (like other running\n // animator during callbacks).\n // But if `setToFinal: true` this feature can not be satisfied.\n source[innerKey] = target[innerKey];\n }\n }\n }\n else if (setToFinal) {\n sourceClone = {};\n for (let i = 0; i < keyLen; i++) {\n const innerKey = animatableKeys[i];\n // NOTE: Must clone source after the stopTracks. The property may be modified in stopTracks.\n sourceClone[innerKey] = cloneValue(source[innerKey]);\n // Use copy, not change the original reference\n // Copy from target to source.\n copyValue(source, target, innerKey);\n }\n }\n\n const animator = new Animator(source, false, additive ? existsAnimatorsOnSameTarget : null);\n animator.targetName = topKey;\n if (cfg.scope) {\n animator.scope = cfg.scope;\n }\n\n if (setToFinal && revertedSource) {\n animator.whenWithKeys(0, revertedSource, animatableKeys);\n }\n if (sourceClone) {\n animator.whenWithKeys(0, sourceClone, animatableKeys);\n }\n\n animator.whenWithKeys(\n duration == null ? 500 : duration,\n reverse ? reversedTarget : target,\n animatableKeys\n ).delay(delay || 0);\n\n animatable.addAnimator(animator, topKey);\n animators.push(animator);\n }\n}\n\n\nexport default Element;\n","/**\n * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上\n * @module zrender/graphic/Group\n * @example\n * const Group = require('zrender/graphic/Group');\n * const Circle = require('zrender/graphic/shape/Circle');\n * const 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\nimport * as zrUtil from '../core/util';\nimport Element, { ElementProps } from '../Element';\nimport BoundingRect from '../core/BoundingRect';\nimport { MatrixArray } from '../core/matrix';\nimport Displayable from './Displayable';\nimport { ZRenderType } from '../zrender';\n\nexport interface GroupProps extends ElementProps {\n}\n\nclass Group extends Element {\n\n readonly isGroup = true\n\n private _children: Element[] = []\n\n\n constructor(opts?: GroupProps) {\n super();\n\n this.attr(opts);\n }\n\n /**\n * Get children reference.\n */\n childrenRef() {\n return this._children;\n }\n\n /**\n * Get children copy.\n */\n children() {\n return this._children.slice();\n }\n\n /**\n * 获取指定 index 的儿子节点\n */\n childAt(idx: number): Element {\n return this._children[idx];\n }\n\n /**\n * 获取指定名字的儿子节点\n */\n childOfName(name: string): Element {\n const children = this._children;\n for (let i = 0; i < children.length; i++) {\n if (children[i].name === name) {\n return children[i];\n }\n }\n }\n\n childCount(): number {\n return this._children.length;\n }\n\n /**\n * 添加子节点到最后\n */\n add(child: Element): Group {\n if (child) {\n if (child !== this && child.parent !== this) {\n this._children.push(child);\n this._doAdd(child);\n }\n if (child.__hostTarget) {\n throw 'This elemenet has been used as an attachment';\n }\n }\n\n return this;\n }\n\n /**\n * 添加子节点在 nextSibling 之前\n */\n addBefore(child: Element, nextSibling: Element) {\n if (child && child !== this && child.parent !== this\n && nextSibling && nextSibling.parent === this) {\n\n const children = this._children;\n const idx = children.indexOf(nextSibling);\n\n if (idx >= 0) {\n children.splice(idx, 0, child);\n this._doAdd(child);\n }\n }\n\n return this;\n }\n\n replaceAt(child: Element, index: number) {\n const children = this._children;\n const old = children[index];\n\n if (child && child !== this && child.parent !== this && child !== old) {\n children[index] = child;\n\n old.parent = null;\n const zr = this.__zr;\n if (zr) {\n old.removeSelfFromZr(zr);\n }\n\n this._doAdd(child);\n }\n\n return this;\n }\n\n _doAdd(child: Element) {\n if (child.parent) {\n // Parent must be a group\n (child.parent as Group).remove(child);\n }\n\n child.parent = this;\n\n const zr = this.__zr;\n if (zr && zr !== (child as Group).__zr) { // Only group has __storage\n\n child.addSelfToZr(zr);\n }\n\n zr && zr.refresh();\n }\n\n /**\n * Remove child\n * @param child\n */\n remove(child: Element) {\n const zr = this.__zr;\n const children = this._children;\n\n const idx = zrUtil.indexOf(children, child);\n if (idx < 0) {\n return this;\n }\n children.splice(idx, 1);\n\n child.parent = null;\n\n if (zr) {\n\n child.removeSelfFromZr(zr);\n }\n\n zr && zr.refresh();\n\n return this;\n }\n\n /**\n * Remove all children\n */\n removeAll() {\n const children = this._children;\n const zr = this.__zr;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (zr) {\n child.removeSelfFromZr(zr);\n }\n child.parent = null;\n }\n children.length = 0;\n\n return this;\n }\n\n /**\n * 遍历所有子节点\n */\n eachChild(\n cb: (this: Context, el: Element, index?: number) => void,\n context?: Context\n ) {\n const children = this._children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n cb.call(context, child, i);\n }\n return this;\n }\n\n /**\n * Visit all descendants.\n * Return false in callback to stop visit descendants of current node\n */\n traverse(\n cb: (this: T, el: Element) => boolean | void,\n context?: T\n ) {\n for (let i = 0; i < this._children.length; i++) {\n const child = this._children[i];\n const stopped = cb.call(context, child);\n\n if (child.isGroup && !stopped) {\n child.traverse(cb, context);\n }\n }\n return this;\n }\n\n addSelfToZr(zr: ZRenderType) {\n super.addSelfToZr(zr);\n for (let i = 0; i < this._children.length; i++) {\n const child = this._children[i];\n child.addSelfToZr(zr);\n }\n }\n\n removeSelfFromZr(zr: ZRenderType) {\n super.removeSelfFromZr(zr);\n for (let i = 0; i < this._children.length; i++) {\n const child = this._children[i];\n child.removeSelfFromZr(zr);\n }\n }\n\n getBoundingRect(includeChildren?: Element[]): BoundingRect {\n // TODO Caching\n const tmpRect = new BoundingRect(0, 0, 0, 0);\n const children = includeChildren || this._children;\n const tmpMat: MatrixArray = [];\n let rect = null;\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n // TODO invisible?\n if (child.ignore || (child as Displayable).invisible) {\n continue;\n }\n\n const childRect = child.getBoundingRect();\n const transform = child.getLocalTransform(tmpMat);\n // 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 if (transform) {\n BoundingRect.applyTransform(tmpRect, childRect, transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n }\n else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n return rect || tmpRect;\n }\n}\n\nGroup.prototype.type = 'group';\n\nexport default Group;","/*!\n* ZRender, a high performance 2d drawing library.\n*\n* Copyright (c) 2013, Baidu Inc.\n* All rights reserved.\n*\n* LICENSE\n* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt\n*/\n\nimport env from './core/env';\nimport * as zrUtil from './core/util';\nimport Handler from './Handler';\nimport Storage from './Storage';\nimport {PainterBase} from './PainterBase';\nimport Animation from './animation/Animation';\nimport HandlerProxy from './dom/HandlerProxy';\nimport Element, {ElementEventCallback, ElementEvent} from './Element';\nimport { Dictionary, ElementEventName, RenderedEvent } from './core/types';\nimport { LayerConfig } from './canvas/Layer';\nimport { GradientObject } from './graphic/Gradient';\nimport { PatternObject } from './graphic/Pattern';\nimport { EventCallback } from './core/Eventful';\nimport TSpan from './graphic/TSpan';\nimport ZRImage from './graphic/Image';\nimport Displayable from './graphic/Displayable';\nimport { lum } from './tool/color';\nimport { DARK_MODE_THRESHOLD } from './config';\nimport Path from './graphic/Path';\nimport Group from './graphic/Group';\n\n\nconst useVML = !env.canvasSupported;\n\ntype PainterBaseCtor = {\n new(dom: HTMLElement, storage: Storage, ...args: any[]): PainterBase\n}\n\nconst painterCtors: Dictionary = {};\n\nlet instances: { [key: number]: ZRender } = {};\n\nfunction delInstance(id: number) {\n delete instances[id];\n}\n\nfunction isDarkMode(backgroundColor: string | GradientObject | PatternObject): boolean {\n if (!backgroundColor) {\n return false;\n }\n if (typeof backgroundColor === 'string') {\n return lum(backgroundColor, 1) < DARK_MODE_THRESHOLD;\n }\n else if ((backgroundColor as GradientObject).colorStops) {\n const colorStops = (backgroundColor as GradientObject).colorStops;\n let totalLum = 0;\n const len = colorStops.length;\n // Simply do the math of average the color. Not consider the offset\n for (let i = 0; i < len; i++) {\n totalLum += lum(colorStops[i].color, 1);\n }\n totalLum /= len;\n\n return totalLum < DARK_MODE_THRESHOLD;\n }\n // Can't determine\n return false;\n}\n\nclass ZRender {\n\n dom: HTMLElement\n\n id: number\n\n storage: Storage\n painter: PainterBase\n handler: Handler\n animation: Animation\n\n private _sleepAfterStill = 10;\n\n private _stillFrameAccum = 0;\n\n private _needsRefresh = true\n private _needsRefreshHover = true\n\n /**\n * If theme is dark mode. It will determine the color strategy for labels.\n */\n private _darkMode = false;\n\n private _backgroundColor: string | GradientObject | PatternObject;\n\n constructor(id: number, dom: HTMLElement, opts?: ZRenderInitOpt) {\n opts = opts || {};\n\n /**\n * @type {HTMLDomElement}\n */\n this.dom = dom;\n\n this.id = id;\n\n const storage = new Storage();\n\n let rendererType = opts.renderer || 'canvas';\n\n // TODO WebGL\n if (useVML) {\n throw new Error('IE8 support has been dropped since 5.0');\n }\n\n if (!painterCtors[rendererType]) {\n // Use the first registered renderer.\n rendererType = zrUtil.keys(painterCtors)[0];\n }\n if (!painterCtors[rendererType]) {\n throw new Error(`Renderer '${rendererType}' is not imported. Please import it first.`);\n }\n\n opts.useDirtyRect = opts.useDirtyRect == null\n ? false\n : opts.useDirtyRect;\n\n const painter = new painterCtors[rendererType](dom, storage, opts, id);\n\n this.storage = storage;\n this.painter = painter;\n\n const handerProxy = (!env.node && !env.worker)\n ? new HandlerProxy(painter.getViewportRoot(), painter.root)\n : null;\n this.handler = new Handler(storage, painter, handerProxy, painter.root);\n\n this.animation = new Animation({\n stage: {\n update: () => this._flush(true)\n }\n });\n this.animation.start();\n }\n\n /**\n * 添加元素\n */\n add(el: Element) {\n if (!el) {\n return;\n }\n this.storage.addRoot(el);\n el.addSelfToZr(this);\n this.refresh();\n }\n\n /**\n * 删除元素\n */\n remove(el: Element) {\n if (!el) {\n return;\n }\n this.storage.delRoot(el);\n el.removeSelfFromZr(this);\n this.refresh();\n }\n\n /**\n * Change configuration of layer\n */\n configLayer(zLevel: number, config: LayerConfig) {\n if (this.painter.configLayer) {\n this.painter.configLayer(zLevel, config);\n }\n this.refresh();\n }\n\n /**\n * Set background color\n */\n setBackgroundColor(backgroundColor: string | GradientObject | PatternObject) {\n if (this.painter.setBackgroundColor) {\n this.painter.setBackgroundColor(backgroundColor);\n }\n this.refresh();\n this._backgroundColor = backgroundColor;\n this._darkMode = isDarkMode(backgroundColor);\n }\n\n getBackgroundColor() {\n return this._backgroundColor;\n }\n\n /**\n * Force to set dark mode\n */\n setDarkMode(darkMode: boolean) {\n this._darkMode = darkMode;\n }\n\n isDarkMode() {\n return this._darkMode;\n }\n\n /**\n * Repaint the canvas immediately\n */\n refreshImmediately(fromInside?: boolean) {\n // const start = new Date();\n\n if (!fromInside) {\n // Update animation if refreshImmediately is invoked from outside.\n // Not trigger stage update to call flush again. Which may refresh twice\n this.animation.update(true);\n }\n\n // Clear needsRefresh ahead to avoid something wrong happens in refresh\n // Or it will cause zrender refreshes again and again.\n this._needsRefresh = false;\n this.painter.refresh();\n // Avoid trigger zr.refresh in Element#beforeUpdate hook\n this._needsRefresh = false;\n\n // const end = new Date();\n // const log = document.getElementById('log');\n // if (log) {\n // log.innerHTML = log.innerHTML + '
' + (end - start);\n // }\n }\n\n /**\n * Mark and repaint the canvas in the next frame of browser\n */\n refresh() {\n this._needsRefresh = true;\n // Active the animation again.\n this.animation.start();\n }\n\n /**\n * Perform all refresh\n */\n flush() {\n this._flush(false);\n }\n\n private _flush(fromInside?: boolean) {\n let triggerRendered;\n\n const start = new Date().getTime();\n if (this._needsRefresh) {\n triggerRendered = true;\n this.refreshImmediately(fromInside);\n }\n\n if (this._needsRefreshHover) {\n triggerRendered = true;\n this.refreshHoverImmediately();\n }\n const end = new Date().getTime();\n\n if (triggerRendered) {\n this._stillFrameAccum = 0;\n this.trigger('rendered', {\n elapsedTime: end - start\n } as RenderedEvent);\n }\n else if (this._sleepAfterStill > 0) {\n this._stillFrameAccum++;\n // Stop the animiation after still for 10 frames.\n if (this._stillFrameAccum > this._sleepAfterStill) {\n this.animation.stop();\n }\n }\n }\n\n /**\n * Set sleep after still for frames.\n * Disable auto sleep when it's 0.\n */\n setSleepAfterStill(stillFramesCount: number) {\n this._sleepAfterStill = stillFramesCount;\n }\n\n /**\n * Wake up animation loop. But not render.\n */\n wakeUp() {\n this.animation.start();\n // Reset the frame count.\n this._stillFrameAccum = 0;\n }\n\n /**\n * Add element to hover layer\n */\n addHover(el: Displayable) {\n // deprecated.\n }\n\n /**\n * Add element from hover layer\n */\n removeHover(el: Path | TSpan | ZRImage) {\n // deprecated.\n }\n\n /**\n * Clear all hover elements in hover layer\n */\n clearHover() {\n // deprecated.\n }\n\n /**\n * Refresh hover in next frame\n */\n refreshHover() {\n this._needsRefreshHover = true;\n }\n\n /**\n * Refresh hover immediately\n */\n refreshHoverImmediately() {\n this._needsRefreshHover = false;\n if (this.painter.refreshHover && this.painter.getType() === 'canvas') {\n this.painter.refreshHover();\n }\n }\n\n /**\n * Resize the canvas.\n * Should be invoked when container size is changed\n */\n resize(opts?: {\n width?: number| string\n height?: number | string\n }) {\n opts = opts || {};\n this.painter.resize(opts.width, opts.height);\n this.handler.resize();\n }\n\n /**\n * Stop and clear all animation immediately\n */\n clearAnimation() {\n this.animation.clear();\n }\n\n /**\n * Get container width\n */\n getWidth(): number {\n return this.painter.getWidth();\n }\n\n /**\n * Get container height\n */\n getHeight(): number {\n return this.painter.getHeight();\n }\n\n /**\n * Export the canvas as Base64 URL\n * @param {string} type\n * @param {string} [backgroundColor='#fff']\n * @return {string} Base64 URL\n */\n // toDataURL: function(type, backgroundColor) {\n // return this.painter.getRenderedCanvas({\n // backgroundColor: backgroundColor\n // }).toDataURL(type);\n // },\n\n /**\n * Converting a path to image.\n * It has much better performance of drawing image rather than drawing a vector path.\n */\n pathToImage(e: Path, dpr: number) {\n if (this.painter.pathToImage) {\n return this.painter.pathToImage(e, dpr);\n }\n }\n\n /**\n * Set default cursor\n * @param cursorStyle='default' 例如 crosshair\n */\n setCursorStyle(cursorStyle: string) {\n this.handler.setCursorStyle(cursorStyle);\n }\n\n /**\n * Find hovered element\n * @param x\n * @param y\n * @return {target, topTarget}\n */\n findHover(x: number, y: number): {\n target: Displayable\n topTarget: Displayable\n } {\n return this.handler.findHover(x, y);\n }\n\n on(eventName: ElementEventName, eventHandler: ElementEventCallback, context?: Ctx): this\n on(eventName: string, eventHandler: EventCallback, context?: Ctx): this\n // eslint-disable-next-line max-len\n on(eventName: string, eventHandler: EventCallback | EventCallback, context?: Ctx): this {\n this.handler.on(eventName, eventHandler, context);\n return this;\n }\n\n /**\n * Unbind event\n * @param eventName Event name\n * @param eventHandler Handler function\n */\n // eslint-disable-next-line max-len\n off(eventName?: string, eventHandler?: EventCallback | EventCallback) {\n this.handler.off(eventName, eventHandler);\n }\n\n /**\n * Trigger event manually\n *\n * @param eventName Event name\n * @param event Event object\n */\n trigger(eventName: string, event?: unknown) {\n this.handler.trigger(eventName, event);\n }\n\n\n /**\n * Clear all objects and the canvas.\n */\n clear() {\n const roots = this.storage.getRoots();\n for (let i = 0; i < roots.length; i++) {\n if (roots[i] instanceof Group) {\n roots[i].removeSelfFromZr(this);\n }\n }\n this.storage.delAllRoots();\n this.painter.clear();\n }\n\n /**\n * Dispose self.\n */\n dispose() {\n this.animation.stop();\n\n this.clear();\n this.storage.dispose();\n this.painter.dispose();\n this.handler.dispose();\n\n this.animation =\n this.storage =\n this.painter =\n this.handler = null;\n\n delInstance(this.id);\n }\n}\n\n\nexport interface ZRenderInitOpt {\n renderer?: string // 'canvas' or 'svg\n devicePixelRatio?: number\n width?: number | string // 10, 10px, 'auto'\n height?: number | string\n useDirtyRect?: boolean\n}\n\n/**\n * Initializing a zrender instance\n */\nexport function init(dom: HTMLElement, opts?: ZRenderInitOpt) {\n const zr = new ZRender(zrUtil.guid(), dom, opts);\n instances[zr.id] = zr;\n return zr;\n}\n\n/**\n * Dispose zrender instance\n */\nexport function dispose(zr: ZRender) {\n zr.dispose();\n}\n\n/**\n * Dispose all zrender instances\n */\nexport function disposeAll() {\n for (let key in instances) {\n if (instances.hasOwnProperty(key)) {\n instances[key].dispose();\n }\n }\n instances = {};\n}\n\n/**\n * Get zrender instance by id\n */\nexport function getInstance(id: number): ZRender {\n return instances[id];\n}\n\nexport function registerPainter(name: string, Ctor: PainterBaseCtor) {\n painterCtors[name] = Ctor;\n}\n\n/**\n * @type {string}\n */\nexport const version = '5.1.1';\n\n\nexport interface ZRenderType extends ZRender {};","/**\n * Base class of all displayable graphic objects\n */\n\nimport Element, {ElementProps, ElementStatePropNames, ElementAnimateConfig, ElementCommonState} from '../Element';\nimport BoundingRect from '../core/BoundingRect';\nimport { PropType, Dictionary, MapToType } from '../core/types';\nimport Path from './Path';\nimport { keys, extend, createObject } from '../core/util';\nimport Animator from '../animation/Animator';\nimport { REDARAW_BIT, STYLE_CHANGED_BIT } from './constants';\n\n// type CalculateTextPositionResult = ReturnType\n\nconst STYLE_MAGIC_KEY = '__zr_style_' + Math.round((Math.random() * 10));\n\nexport interface CommonStyleProps {\n shadowBlur?: number\n shadowOffsetX?: number\n shadowOffsetY?: number\n shadowColor?: string\n\n opacity?: number\n /**\n * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n */\n blend?: string\n}\n\nexport const DEFAULT_COMMON_STYLE: CommonStyleProps = {\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: '#000',\n opacity: 1,\n blend: 'source-over'\n};\n\nexport const DEFAULT_COMMON_ANIMATION_PROPS: MapToType = {\n style: {\n shadowBlur: true,\n shadowOffsetX: true,\n shadowOffsetY: true,\n shadowColor: true,\n opacity: true\n }\n };\n\n(DEFAULT_COMMON_STYLE as any)[STYLE_MAGIC_KEY] = true;\n\nexport interface DisplayableProps extends ElementProps {\n style?: Dictionary\n\n zlevel?: number\n z?: number\n z2?: number\n\n culling?: boolean\n\n // TODO list all cursors\n cursor?: string\n\n rectHover?: boolean\n\n progressive?: boolean\n\n incremental?: boolean\n\n batch?: boolean\n invisible?: boolean\n}\n\ntype DisplayableKey = keyof DisplayableProps\ntype DisplayablePropertyType = PropType\n\nexport type DisplayableStatePropNames = ElementStatePropNames | 'style' | 'z' | 'z2' | 'invisible';\nexport type DisplayableState = Pick & ElementCommonState;\n\nconst PRIMARY_STATES_KEYS = ['z', 'z2', 'invisible'] as const;\nconst PRIMARY_STATES_KEYS_IN_HOVER_LAYER = ['invisible'] as const;\n\ninterface Displayable {\n animate(key?: '', loop?: boolean): Animator\n animate(key: 'style', loop?: boolean): Animator\n\n getState(stateName: string): DisplayableState\n ensureState(stateName: string): DisplayableState\n\n states: Dictionary\n stateProxy: (stateName: string) => DisplayableState\n}\n\nclass Displayable extends Element {\n\n /**\n * Whether the displayable object is visible. when it is true, the displayable object\n * is not drawn, but the mouse event can still trigger the object.\n */\n invisible: boolean\n\n z: number\n\n z2: number\n\n /**\n * The z level determines the displayable object can be drawn in which layer canvas.\n */\n zlevel: number\n\n /**\n * If enable culling\n */\n culling: boolean\n\n /**\n * Mouse cursor when hovered\n */\n cursor: string\n\n /**\n * If hover area is bounding rect\n */\n rectHover: boolean\n /**\n * For increamental rendering\n */\n incremental: boolean\n\n style: Dictionary\n\n protected _normalState: DisplayableState\n\n protected _rect: BoundingRect\n protected _paintRect: BoundingRect\n protected _prevPaintRect: BoundingRect\n\n dirtyRectTolerance: number\n\n /************* Properties will be inejected in other modules. *******************/\n\n // @deprecated.\n useHoverLayer?: boolean\n\n __hoverStyle?: CommonStyleProps\n\n // TODO use WeakMap?\n\n // Shapes for cascade clipping.\n // Can only be `null`/`undefined` or an non-empty array, MUST NOT be an empty array.\n // because it is easy to only using null to check whether clipPaths changed.\n __clipPaths?: Path[]\n\n // FOR CANVAS PAINTER\n __canvasFillGradient: CanvasGradient\n __canvasStrokeGradient: CanvasGradient\n __canvasFillPattern: CanvasPattern\n __canvasStrokePattern: CanvasPattern\n\n // FOR SVG PAINTER\n __svgEl: SVGElement\n\n constructor(props?: Props) {\n super(props);\n }\n\n protected _init(props?: Props) {\n // Init default properties\n const keysArr = keys(props);\n for (let i = 0; i < keysArr.length; i++) {\n const key = keysArr[i];\n if (key === 'style') {\n this.useStyle(props[key] as Props['style']);\n }\n else {\n super.attrKV(key as any, props[key]);\n }\n }\n // Give a empty style\n if (!this.style) {\n this.useStyle({});\n }\n }\n\n // Hook provided to developers.\n beforeBrush() {}\n afterBrush() {}\n\n // Hook provided to inherited classes.\n // Executed between beforeBrush / afterBrush\n innerBeforeBrush() {}\n innerAfterBrush() {}\n\n shouldBePainted(\n viewWidth: number,\n viewHeight: number,\n considerClipPath: boolean,\n considerAncestors: boolean\n ) {\n const m = this.transform;\n if (\n this.ignore\n // Ignore invisible element\n || this.invisible\n // Ignore transparent element\n || this.style.opacity === 0\n // Ignore culled element\n || (this.culling\n && isDisplayableCulled(this, viewWidth, viewHeight)\n )\n // Ignore scale 0 element, in some environment like node-canvas\n // Draw a scale 0 element can cause all following draw wrong\n // And setTransform with scale 0 will cause set back transform failed.\n || (m && !m[0] && !m[3])\n ) {\n return false;\n }\n\n if (considerClipPath && this.__clipPaths) {\n for (let i = 0; i < this.__clipPaths.length; ++i) {\n if (this.__clipPaths[i].isZeroArea()) {\n return false;\n }\n }\n }\n\n if (considerAncestors && this.parent) {\n let parent = this.parent;\n while (parent) {\n if (parent.ignore) {\n return false;\n }\n parent = parent.parent;\n }\n }\n\n return true;\n }\n\n /**\n * If displayable element contain coord x, y\n */\n contain(x: number, y: number) {\n return this.rectContain(x, y);\n }\n\n traverse(\n cb: (this: Context, el: this) => void,\n context?: Context\n ) {\n cb.call(context, this);\n }\n\n /**\n * If bounding rect of element contain coord x, y\n */\n rectContain(x: number, y: number) {\n const coord = this.transformCoordToLocal(x, y);\n const rect = this.getBoundingRect();\n return rect.contain(coord[0], coord[1]);\n }\n\n getPaintRect(): BoundingRect {\n let rect = this._paintRect;\n if (!this._paintRect || this.__dirty) {\n const transform = this.transform;\n const elRect = this.getBoundingRect();\n\n const style = this.style;\n const shadowSize = style.shadowBlur || 0;\n const shadowOffsetX = style.shadowOffsetX || 0;\n const shadowOffsetY = style.shadowOffsetY || 0;\n\n rect = this._paintRect || (this._paintRect = new BoundingRect(0, 0, 0, 0));\n if (transform) {\n BoundingRect.applyTransform(rect, elRect, transform);\n }\n else {\n rect.copy(elRect);\n }\n\n if (shadowSize || shadowOffsetX || shadowOffsetY) {\n rect.width += shadowSize * 2 + Math.abs(shadowOffsetX);\n rect.height += shadowSize * 2 + Math.abs(shadowOffsetY);\n rect.x = Math.min(rect.x, rect.x + shadowOffsetX - shadowSize);\n rect.y = Math.min(rect.y, rect.y + shadowOffsetY - shadowSize);\n\n }\n\n // For the accuracy tolerance of text height or line joint point\n const tolerance = this.dirtyRectTolerance;\n if (!rect.isZero()) {\n rect.x = Math.floor(rect.x - tolerance);\n rect.y = Math.floor(rect.y - tolerance);\n rect.width = Math.ceil(rect.width + 1 + tolerance * 2);\n rect.height = Math.ceil(rect.height + 1 + tolerance * 2);\n }\n }\n return rect;\n }\n\n setPrevPaintRect(paintRect: BoundingRect) {\n if (paintRect) {\n this._prevPaintRect = this._prevPaintRect || new BoundingRect(0, 0, 0, 0);\n this._prevPaintRect.copy(paintRect);\n }\n else {\n this._prevPaintRect = null;\n }\n }\n\n getPrevPaintRect(): BoundingRect {\n return this._prevPaintRect;\n }\n\n /**\n * Alias for animate('style')\n * @param loop\n */\n animateStyle(loop: boolean) {\n return this.animate('style', loop);\n }\n\n // Override updateDuringAnimation\n updateDuringAnimation(targetKey: string) {\n if (targetKey === 'style') {\n this.dirtyStyle();\n }\n else {\n this.markRedraw();\n }\n }\n\n attrKV(key: DisplayableKey, value: DisplayablePropertyType) {\n if (key !== 'style') {\n super.attrKV(key as keyof DisplayableProps, value);\n }\n else {\n if (!this.style) {\n this.useStyle(value as Dictionary);\n }\n else {\n this.setStyle(value as Dictionary);\n }\n }\n }\n\n setStyle(obj: Props['style']): this\n setStyle(obj: T, value: Props['style'][T]): this\n setStyle(keyOrObj: keyof Props['style'] | Props['style'], value?: unknown): this {\n if (typeof keyOrObj === 'string') {\n this.style[keyOrObj] = value;\n }\n else {\n extend(this.style, keyOrObj as Props['style']);\n }\n this.dirtyStyle();\n return this;\n }\n\n // getDefaultStyleValue(key: T): Props['style'][T] {\n // // Default value is on the prototype.\n // return this.style.prototype[key];\n // }\n\n dirtyStyle(notRedraw?: boolean) {\n if (!notRedraw) {\n this.markRedraw();\n }\n this.__dirty |= STYLE_CHANGED_BIT;\n // Clear bounding rect.\n if (this._rect) {\n this._rect = null;\n }\n }\n\n dirty() {\n this.dirtyStyle();\n }\n\n /**\n * Is style changed. Used with dirtyStyle.\n */\n styleChanged() {\n return !!(this.__dirty & STYLE_CHANGED_BIT);\n }\n\n /**\n * Mark style updated. Only useful when style is used for caching. Like in the text.\n */\n styleUpdated() {\n this.__dirty &= ~STYLE_CHANGED_BIT;\n }\n\n /**\n * Create a style object with default values in it's prototype.\n */\n createStyle(obj?: Props['style']) {\n return createObject(DEFAULT_COMMON_STYLE, obj);\n }\n\n /**\n * Replace style property.\n * It will create a new style if given obj is not a valid style object.\n */\n // PENDING should not createStyle if it's an style object.\n useStyle(obj: Props['style']) {\n if (!obj[STYLE_MAGIC_KEY]) {\n obj = this.createStyle(obj);\n }\n if (this.__inHover) {\n this.__hoverStyle = obj; // Not affect exists style.\n }\n else {\n this.style = obj;\n }\n this.dirtyStyle();\n }\n\n /**\n * Determine if an object is a valid style object.\n * Which means it is created by `createStyle.`\n *\n * A valid style object will have all default values in it's prototype.\n * To avoid get null/undefined values.\n */\n isStyleObject(obj: Props['style']) {\n return obj[STYLE_MAGIC_KEY];\n }\n\n protected _innerSaveToNormal(toState: DisplayableState) {\n super._innerSaveToNormal(toState);\n\n const normalState = this._normalState;\n if (toState.style && !normalState.style) {\n // Clone style object.\n // TODO: Only save changed style.\n normalState.style = this._mergeStyle(this.createStyle(), this.style);\n }\n\n this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS);\n }\n\n protected _applyStateObj(\n stateName: string,\n state: DisplayableState,\n normalState: DisplayableState,\n keepCurrentStates: boolean,\n transition: boolean,\n animationCfg: ElementAnimateConfig\n ) {\n super._applyStateObj(stateName, state, normalState, keepCurrentStates, transition, animationCfg);\n\n const needsRestoreToNormal = !(state && keepCurrentStates);\n let targetStyle: Props['style'];\n if (state && state.style) {\n // Only animate changed properties.\n if (transition) {\n if (keepCurrentStates) {\n targetStyle = state.style;\n }\n else {\n targetStyle = this._mergeStyle(this.createStyle(), normalState.style);\n this._mergeStyle(targetStyle, state.style);\n }\n }\n else {\n targetStyle = this._mergeStyle(\n this.createStyle(),\n keepCurrentStates ? this.style : normalState.style\n );\n this._mergeStyle(targetStyle, state.style);\n }\n }\n else if (needsRestoreToNormal) {\n targetStyle = normalState.style;\n }\n\n if (targetStyle) {\n if (transition) {\n // Clone a new style. Not affect the original one.\n const sourceStyle = this.style;\n\n this.style = this.createStyle(needsRestoreToNormal ? {} : sourceStyle);\n // const sourceStyle = this.style = this.createStyle(this.style);\n\n if (needsRestoreToNormal) {\n const changedKeys = keys(sourceStyle);\n for (let i = 0; i < changedKeys.length; i++) {\n const key = changedKeys[i];\n if (key in targetStyle) { // Not use `key == null` because == null may means no stroke/fill.\n // Pick out from prototype. Or the property won't be animated.\n (targetStyle as any)[key] = targetStyle[key];\n // Omit the property has no default value.\n (this.style as any)[key] = sourceStyle[key];\n }\n }\n }\n\n // If states is switched twice in ONE FRAME, for example:\n // one property(for example shadowBlur) changed from default value to a specifed value,\n // then switched back in immediately. this.style may don't set this property yet when switching back.\n // It won't treat it as an changed property when switching back. And it won't be animated.\n // So here we make sure the properties will be animated from default value to a specifed value are set.\n const targetKeys = keys(targetStyle);\n for (let i = 0; i < targetKeys.length; i++) {\n const key = targetKeys[i];\n this.style[key] = this.style[key];\n }\n\n this._transitionState(stateName, {\n style: targetStyle\n } as Props, animationCfg, this.getAnimationStyleProps() as MapToType);\n }\n else {\n this.useStyle(targetStyle);\n }\n }\n\n // Don't change z, z2 for element moved into hover layer.\n // It's not necessary and will cause paint list order changed.\n const statesKeys = this.__inHover ? PRIMARY_STATES_KEYS_IN_HOVER_LAYER : PRIMARY_STATES_KEYS;\n for (let i = 0; i < statesKeys.length; i++) {\n let key = statesKeys[i];\n if (state && state[key] != null) {\n // Replace if it exist in target state\n (this as any)[key] = state[key];\n }\n else if (needsRestoreToNormal) {\n // Restore to normal state\n if (normalState[key] != null) {\n (this as any)[key] = normalState[key];\n }\n }\n }\n }\n\n protected _mergeStates(states: DisplayableState[]) {\n const mergedState = super._mergeStates(states) as DisplayableState;\n let mergedStyle: Props['style'];\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n if (state.style) {\n mergedStyle = mergedStyle || {};\n this._mergeStyle(mergedStyle, state.style);\n }\n }\n if (mergedStyle) {\n mergedState.style = mergedStyle;\n }\n return mergedState;\n }\n\n protected _mergeStyle(\n targetStyle: CommonStyleProps,\n sourceStyle: CommonStyleProps\n ) {\n extend(targetStyle, sourceStyle);\n return targetStyle;\n }\n\n getAnimationStyleProps() {\n return DEFAULT_COMMON_ANIMATION_PROPS;\n }\n\n /**\n * The string value of `textPosition` needs to be calculated to a real postion.\n * For example, `'inside'` is calculated to `[rect.width/2, rect.height/2]`\n * by default. See `contain/text.js#calculateTextPosition` for more details.\n * But some coutom shapes like \"pin\", \"flag\" have center that is not exactly\n * `[width/2, height/2]`. So we provide this hook to customize the calculation\n * for those shapes. It will be called if the `style.textPosition` is a string.\n * @param out Prepared out object. If not provided, this method should\n * be responsible for creating one.\n * @param style\n * @param rect {x, y, width, height}\n * @return out The same as the input out.\n * {\n * x: number. mandatory.\n * y: number. mandatory.\n * textAlign: string. optional. use style.textAlign by default.\n * textVerticalAlign: string. optional. use style.textVerticalAlign by default.\n * }\n */\n // calculateTextPosition: (out: CalculateTextPositionResult, style: Dictionary, rect: RectLike) => CalculateTextPositionResult\n\n protected static initDefaultProps = (function () {\n const dispProto = Displayable.prototype;\n dispProto.type = 'displayable';\n dispProto.invisible = false;\n dispProto.z = 0;\n dispProto.z2 = 0;\n dispProto.zlevel = 0;\n dispProto.culling = false;\n dispProto.cursor = 'pointer';\n dispProto.rectHover = false;\n dispProto.incremental = false;\n dispProto._rect = null;\n dispProto.dirtyRectTolerance = 0;\n\n dispProto.__dirty = REDARAW_BIT | STYLE_CHANGED_BIT;\n })()\n}\n\nconst tmpRect = new BoundingRect(0, 0, 0, 0);\nconst viewRect = new BoundingRect(0, 0, 0, 0);\nfunction isDisplayableCulled(el: Displayable, width: number, height: number) {\n tmpRect.copy(el.getBoundingRect());\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\n viewRect.width = width;\n viewRect.height = height;\n return !tmpRect.intersect(viewRect);\n}\n\nexport default Displayable;","/**\n * 曲线辅助模块\n */\n\nimport {\n create as v2Create,\n distSquare as v2DistSquare,\n VectorArray\n} from './vector';\n\nconst mathPow = Math.pow;\nconst mathSqrt = Math.sqrt;\n\nconst EPSILON = 1e-8;\nconst EPSILON_NUMERIC = 1e-4;\n\nconst THREE_SQRT = mathSqrt(3);\nconst ONE_THIRD = 1 / 3;\n\n// 临时变量\nconst _v0 = v2Create();\nconst _v1 = v2Create();\nconst _v2 = v2Create();\n\nfunction isAroundZero(val: number) {\n return val > -EPSILON && val < EPSILON;\n}\nfunction isNotAroundZero(val: number) {\n return val > EPSILON || val < -EPSILON;\n}\n/**\n * 计算三次贝塞尔值\n */\nexport function cubicAt(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const onet = 1 - t;\n return onet * onet * (onet * p0 + 3 * t * p1)\n + t * t * (t * p3 + 3 * onet * p2);\n}\n\n/**\n * 计算三次贝塞尔导数值\n */\nexport function cubicDerivativeAt(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const onet = 1 - t;\n return 3 * (\n ((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet\n + (p3 - p2) * t * t\n );\n}\n\n/**\n * 计算三次贝塞尔方程根,使用盛金公式\n */\nexport function cubicRootAt(p0: number, p1: number, p2: number, p3: number, val: number, roots: number[]): number {\n // Evaluate roots of cubic functions\n const a = p3 + 3 * (p1 - p2) - p0;\n const b = 3 * (p2 - p1 * 2 + p0);\n const c = 3 * (p1 - p0);\n const d = p0 - val;\n\n const A = b * b - 3 * a * c;\n const B = b * c - 9 * a * d;\n const C = c * c - 3 * b * d;\n\n let n = 0;\n\n if (isAroundZero(A) && isAroundZero(B)) {\n if (isAroundZero(b)) {\n roots[0] = 0;\n }\n else {\n const t1 = -c / b; //t1, t2, t3, b is not zero\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n }\n else {\n const disc = B * B - 4 * A * C;\n\n if (isAroundZero(disc)) {\n const K = B / A;\n const t1 = -b / a + K; // t1, a is not zero\n const t2 = -K / 2; // t2, t3\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n else if (disc > 0) {\n const discSqrt = mathSqrt(disc);\n let Y1 = A * b + 1.5 * a * (-B + discSqrt);\n let Y2 = A * b + 1.5 * a * (-B - discSqrt);\n if (Y1 < 0) {\n Y1 = -mathPow(-Y1, ONE_THIRD);\n }\n else {\n Y1 = mathPow(Y1, ONE_THIRD);\n }\n if (Y2 < 0) {\n Y2 = -mathPow(-Y2, ONE_THIRD);\n }\n else {\n Y2 = mathPow(Y2, ONE_THIRD);\n }\n const t1 = (-b - (Y1 + Y2)) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n else {\n const T = (2 * A * b - 3 * a * B) / (2 * mathSqrt(A * A * A));\n const theta = Math.acos(T) / 3;\n const ASqrt = mathSqrt(A);\n const tmp = Math.cos(theta);\n\n const t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n const t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n const t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n if (t3 >= 0 && t3 <= 1) {\n roots[n++] = t3;\n }\n }\n }\n return n;\n}\n\n/**\n * 计算三次贝塞尔方程极限值的位置\n * @return 有效数目\n */\nexport function cubicExtrema(p0: number, p1: number, p2: number, p3: number, extrema: number[]): number {\n const b = 6 * p2 - 12 * p1 + 6 * p0;\n const a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n const c = 3 * p1 - 3 * p0;\n\n let n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n const t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n }\n }\n else {\n const disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n extrema[0] = -b / (2 * a);\n }\n else if (disc > 0) {\n const discSqrt = mathSqrt(disc);\n const t1 = (-b + discSqrt) / (2 * a);\n const t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n extrema[n++] = t2;\n }\n }\n }\n return n;\n}\n\n/**\n * 细分三次贝塞尔曲线\n */\nexport function cubicSubdivide(p0: number, p1: number, p2: number, p3: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p23 = (p3 - p2) * t + p2;\n\n const p012 = (p12 - p01) * t + p01;\n const p123 = (p23 - p12) * t + p12;\n\n const p0123 = (p123 - p012) * t + p012;\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n // Seg1\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\n\n/**\n * 投射点到三次贝塞尔曲线上,返回投射距离。\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\n */\nexport function cubicProjectPoint(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n x: number, y: number, out: VectorArray\n): number {\n // http://pomax.github.io/bezierinfo/#projections\n let t;\n let interval = 0.005;\n let d = Infinity;\n let prev;\n let next;\n let d1;\n let d2;\n\n _v0[0] = x;\n _v0[1] = y;\n\n // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n for (let _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = cubicAt(x0, x1, x2, x3, _t);\n _v1[1] = cubicAt(y0, y1, y2, y3, _t);\n d1 = v2DistSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n // At most 32 iteration\n for (let i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n prev = t - interval;\n next = t + interval;\n // t - interval\n _v1[0] = cubicAt(x0, x1, x2, x3, prev);\n _v1[1] = cubicAt(y0, y1, y2, y3, prev);\n\n d1 = v2DistSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n }\n else {\n // t + interval\n _v2[0] = cubicAt(x0, x1, x2, x3, next);\n _v2[1] = cubicAt(y0, y1, y2, y3, next);\n d2 = v2DistSquare(_v2, _v0);\n\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n }\n else {\n interval *= 0.5;\n }\n }\n }\n // t\n if (out) {\n out[0] = cubicAt(x0, x1, x2, x3, t);\n out[1] = cubicAt(y0, y1, y2, y3, t);\n }\n // console.log(interval, i);\n return mathSqrt(d);\n}\n\n/**\n * 计算三次贝塞尔曲线长度\n */\nexport function cubicLength(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n iteration: number\n) {\n let px = x0;\n let py = y0;\n\n let d = 0;\n\n const step = 1 / iteration;\n\n for (let i = 1; i <= iteration; i++) {\n let t = i * step;\n const x = cubicAt(x0, x1, x2, x3, t);\n const y = cubicAt(y0, y1, y2, y3, t);\n\n const dx = x - px;\n const dy = y - py;\n\n d += Math.sqrt(dx * dx + dy * dy);\n\n px = x;\n py = y;\n }\n\n return d;\n}\n\n/**\n * 计算二次方贝塞尔值\n */\nexport function quadraticAt(p0: number, p1: number, p2: number, t: number): number {\n const onet = 1 - t;\n return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\n\n/**\n * 计算二次方贝塞尔导数值\n */\nexport function quadraticDerivativeAt(p0: number, p1: number, p2: number, t: number): number {\n return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));\n}\n\n/**\n * 计算二次方贝塞尔方程根\n * @return 有效根数目\n */\nexport function quadraticRootAt(p0: number, p1: number, p2: number, val: number, roots: number[]): number {\n const a = p0 - 2 * p1 + p2;\n const b = 2 * (p1 - p0);\n const c = p0 - val;\n\n let n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n const t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n }\n else {\n const disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n const t1 = -b / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n else if (disc > 0) {\n const discSqrt = mathSqrt(disc);\n const t1 = (-b + discSqrt) / (2 * a);\n const t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n }\n return n;\n}\n\n/**\n * 计算二次贝塞尔方程极限值\n */\nexport function quadraticExtremum(p0: number, p1: number, p2: number): number {\n const divider = p0 + p2 - 2 * p1;\n if (divider === 0) {\n // p1 is center of p0 and p2\n return 0.5;\n }\n else {\n return (p0 - p1) / divider;\n }\n}\n\n/**\n * 细分二次贝塞尔曲线\n */\nexport function quadraticSubdivide(p0: number, p1: number, p2: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p012 = (p12 - p01) * t + p01;\n\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n\n // Seg1\n out[3] = p012;\n out[4] = p12;\n out[5] = p2;\n}\n\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} x\n * @param {number} y\n * @param {Array.} out 投射点\n * @return {number}\n */\nexport function quadraticProjectPoint(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\n x: number, y: number, out: VectorArray\n): number {\n // http://pomax.github.io/bezierinfo/#projections\n let t: number;\n let interval = 0.005;\n let d = Infinity;\n\n _v0[0] = x;\n _v0[1] = y;\n\n // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n for (let _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = quadraticAt(x0, x1, x2, _t);\n _v1[1] = quadraticAt(y0, y1, y2, _t);\n const d1 = v2DistSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n // At most 32 iteration\n for (let i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n const prev = t - interval;\n const next = t + interval;\n // t - interval\n _v1[0] = quadraticAt(x0, x1, x2, prev);\n _v1[1] = quadraticAt(y0, y1, y2, prev);\n\n const d1 = v2DistSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n }\n else {\n // t + interval\n _v2[0] = quadraticAt(x0, x1, x2, next);\n _v2[1] = quadraticAt(y0, y1, y2, next);\n const d2 = v2DistSquare(_v2, _v0);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n }\n else {\n interval *= 0.5;\n }\n }\n }\n // t\n if (out) {\n out[0] = quadraticAt(x0, x1, x2, t);\n out[1] = quadraticAt(y0, y1, y2, t);\n }\n // console.log(interval, i);\n return mathSqrt(d);\n}\n\n/**\n * 计算二次贝塞尔曲线长度\n */\nexport function quadraticLength(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\n iteration: number\n) {\n let px = x0;\n let py = y0;\n\n let d = 0;\n\n const step = 1 / iteration;\n\n for (let i = 1; i <= iteration; i++) {\n let t = i * step;\n const x = quadraticAt(x0, x1, x2, t);\n const y = quadraticAt(y0, y1, y2, t);\n\n const dx = x - px;\n const dy = y - py;\n\n d += Math.sqrt(dx * dx + dy * dy);\n\n px = x;\n py = y;\n }\n\n return d;\n}\n","/**\n * @author Yi Shen(https://github.com/pissang)\n */\n\nimport * as vec2 from './vector';\nimport * as curve from './curve';\n\nconst mathMin = Math.min;\nconst mathMax = Math.max;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst PI2 = Math.PI * 2;\n\nconst start = vec2.create();\nconst end = vec2.create();\nconst extremity = vec2.create();\n\n/**\n * 从顶点数组中计算出最小包围盒,写入`min`和`max`中\n */\nexport function fromPoints(points: ArrayLike[], min: vec2.VectorArray, max: vec2.VectorArray) {\n if (points.length === 0) {\n return;\n }\n let p = points[0];\n let left = p[0];\n let right = p[0];\n let top = p[1];\n let bottom = p[1];\n\n for (let i = 1; i < points.length; i++) {\n p = points[i];\n left = mathMin(left, p[0]);\n right = mathMax(right, p[0]);\n top = mathMin(top, p[1]);\n bottom = mathMax(bottom, p[1]);\n }\n\n min[0] = left;\n min[1] = top;\n max[0] = right;\n max[1] = bottom;\n}\n\nexport function fromLine(\n x0: number, y0: number, x1: number, y1: number,\n min: vec2.VectorArray, max: vec2.VectorArray\n) {\n min[0] = mathMin(x0, x1);\n min[1] = mathMin(y0, y1);\n max[0] = mathMax(x0, x1);\n max[1] = mathMax(y0, y1);\n}\n\nconst xDim: number[] = [];\nconst yDim: number[] = [];\n/**\n * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒,写入`min`和`max`中\n */\nexport function fromCubic(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n min: vec2.VectorArray, max: vec2.VectorArray\n) {\n const cubicExtrema = curve.cubicExtrema;\n const cubicAt = curve.cubicAt;\n let n = cubicExtrema(x0, x1, x2, x3, xDim);\n min[0] = Infinity;\n min[1] = Infinity;\n max[0] = -Infinity;\n max[1] = -Infinity;\n\n for (let i = 0; i < n; i++) {\n const x = cubicAt(x0, x1, x2, x3, xDim[i]);\n min[0] = mathMin(x, min[0]);\n max[0] = mathMax(x, max[0]);\n }\n n = cubicExtrema(y0, y1, y2, y3, yDim);\n for (let i = 0; i < n; i++) {\n const y = cubicAt(y0, y1, y2, y3, yDim[i]);\n min[1] = mathMin(y, min[1]);\n max[1] = mathMax(y, max[1]);\n }\n\n min[0] = mathMin(x0, min[0]);\n max[0] = mathMax(x0, max[0]);\n min[0] = mathMin(x3, min[0]);\n max[0] = mathMax(x3, max[0]);\n\n min[1] = mathMin(y0, min[1]);\n max[1] = mathMax(y0, max[1]);\n min[1] = mathMin(y3, min[1]);\n max[1] = mathMax(y3, max[1]);\n}\n\n/**\n * 从二阶贝塞尔曲线(p0, p1, p2)中计算出最小包围盒,写入`min`和`max`中\n */\nexport function fromQuadratic(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\n min: vec2.VectorArray, max: vec2.VectorArray\n) {\n const quadraticExtremum = curve.quadraticExtremum;\n const quadraticAt = curve.quadraticAt;\n // Find extremities, where derivative in x dim or y dim is zero\n const tx =\n mathMax(\n mathMin(quadraticExtremum(x0, x1, x2), 1), 0\n );\n const ty =\n mathMax(\n mathMin(quadraticExtremum(y0, y1, y2), 1), 0\n );\n\n const x = quadraticAt(x0, x1, x2, tx);\n const y = quadraticAt(y0, y1, y2, ty);\n\n min[0] = mathMin(x0, x2, x);\n min[1] = mathMin(y0, y2, y);\n max[0] = mathMax(x0, x2, x);\n max[1] = mathMax(y0, y2, y);\n}\n\n/**\n * 从圆弧中计算出最小包围盒,写入`min`和`max`中\n */\nexport function fromArc(\n x: number, y: number, rx: number, ry: number, startAngle: number, endAngle: number, anticlockwise: boolean,\n min: vec2.VectorArray, max: vec2.VectorArray\n) {\n const vec2Min = vec2.min;\n const vec2Max = vec2.max;\n\n const diff = Math.abs(startAngle - endAngle);\n\n\n if (diff % PI2 < 1e-4 && diff > 1e-4) {\n // Is a circle\n min[0] = x - rx;\n min[1] = y - ry;\n max[0] = x + rx;\n max[1] = y + ry;\n return;\n }\n\n start[0] = mathCos(startAngle) * rx + x;\n start[1] = mathSin(startAngle) * ry + y;\n\n end[0] = mathCos(endAngle) * rx + x;\n end[1] = mathSin(endAngle) * ry + y;\n\n vec2Min(min, start, end);\n vec2Max(max, start, end);\n\n // Thresh to [0, Math.PI * 2]\n startAngle = startAngle % (PI2);\n if (startAngle < 0) {\n startAngle = startAngle + PI2;\n }\n endAngle = endAngle % (PI2);\n if (endAngle < 0) {\n endAngle = endAngle + PI2;\n }\n\n if (startAngle > endAngle && !anticlockwise) {\n endAngle += PI2;\n }\n else if (startAngle < endAngle && anticlockwise) {\n startAngle += PI2;\n }\n if (anticlockwise) {\n const tmp = endAngle;\n endAngle = startAngle;\n startAngle = tmp;\n }\n\n // const number = 0;\n // const step = (anticlockwise ? -Math.PI : Math.PI) / 2;\n for (let angle = 0; angle < endAngle; angle += Math.PI / 2) {\n if (angle > startAngle) {\n extremity[0] = mathCos(angle) * rx + x;\n extremity[1] = mathSin(angle) * ry + y;\n\n vec2Min(min, extremity, min);\n vec2Max(max, extremity, max);\n }\n }\n}\n","/**\n * Path 代理,可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中\n * 可以用于 isInsidePath 判断以及获取boundingRect\n */\n\n// TODO getTotalLength, getPointAtLength, arcTo\n\n/* global Float32Array */\n\nimport * as vec2 from './vector';\nimport BoundingRect from './BoundingRect';\nimport {devicePixelRatio as dpr} from '../config';\nimport { fromLine, fromCubic, fromQuadratic, fromArc } from './bbox';\nimport { cubicAt, cubicLength, cubicSubdivide, quadraticLength, quadraticSubdivide } from './curve';\n\nconst 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};\n\n// const 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\ninterface ExtendedCanvasRenderingContext2D extends CanvasRenderingContext2D {\n dpr?: number\n}\n\nconst tmpOutX: number[] = [];\nconst tmpOutY: number[] = [];\n\nconst min: number[] = [];\nconst max: number[] = [];\nconst min2: number[] = [];\nconst max2: number[] = [];\nconst mathMin = Math.min;\nconst mathMax = Math.max;\nconst mathCos = Math.cos;\nconst mathSin = Math.sin;\nconst mathSqrt = Math.sqrt;\nconst mathAbs = Math.abs;\n\nconst PI = Math.PI;\nconst PI2 = PI * 2;\n\nconst hasTypedArray = typeof Float32Array !== 'undefined';\n\nconst tmpAngles: number[] = [];\n\nfunction modPI2(radian: number) {\n // It's much more stable to mod N instedof PI\n const n = Math.round(radian / PI * 1e8) / 1e8;\n return (n % 2) * PI;\n}\n/**\n * Normalize start and end angles.\n * startAngle will be normalized to 0 ~ PI*2\n * sweepAngle(endAngle - startAngle) will be normalized to 0 ~ PI*2 if clockwise.\n * -PI*2 ~ 0 if anticlockwise.\n */\nexport function normalizeArcAngles(angles: number[], anticlockwise: boolean): void {\n let newStartAngle = modPI2(angles[0]);\n if (newStartAngle < 0) {\n // Normlize to 0 - PI2\n newStartAngle += PI2;\n }\n\n let delta = newStartAngle - angles[0];\n let newEndAngle = angles[1];\n newEndAngle += delta;\n\n // https://github.com/chromium/chromium/blob/c20d681c9c067c4e15bb1408f17114b9e8cba294/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc#L184\n // Is circle\n if (!anticlockwise && newEndAngle - newStartAngle >= PI2) {\n newEndAngle = newStartAngle + PI2;\n }\n else if (anticlockwise && newStartAngle - newEndAngle >= PI2) {\n newEndAngle = newStartAngle - PI2;\n }\n // Make startAngle < endAngle when clockwise, otherwise endAngle < startAngle.\n // The sweep angle can never been larger than P2.\n else if (!anticlockwise && newStartAngle > newEndAngle) {\n newEndAngle = newStartAngle + (PI2 - modPI2(newStartAngle - newEndAngle));\n }\n else if (anticlockwise && newStartAngle < newEndAngle) {\n newEndAngle = newStartAngle - (PI2 - modPI2(newEndAngle - newStartAngle));\n }\n\n angles[0] = newStartAngle;\n angles[1] = newEndAngle;\n}\n\n\nexport default class PathProxy {\n\n dpr = 1\n\n data: number[] | Float32Array\n\n /**\n * Version is for tracking if the path has been changed.\n */\n private _version: number\n\n /**\n * If save path data.\n */\n private _saveData: boolean\n\n /**\n * If the line segment is too small to draw. It will be added to the pending pt.\n * It will be added if the subpath needs to be finished before stroke, fill, or starting a new subpath.\n */\n private _pendingPtX: number;\n private _pendingPtY: number;\n // Distance of pending pt to previous point.\n // 0 if there is no pending point.\n // Only update the pending pt when distance is larger.\n private _pendingPtDist: number;\n\n private _ctx: ExtendedCanvasRenderingContext2D\n\n private _xi = 0\n private _yi = 0\n\n private _x0 = 0\n private _y0 = 0\n\n private _len = 0\n\n // Calculating path len and seg len.\n private _pathSegLen: number[]\n private _pathLen: number\n // Unit x, Unit y. Provide for avoiding drawing that too short line segment\n private _ux: number\n private _uy: number\n\n // For dash shim.\n private _lineDash: number[]\n private _needsDash: boolean\n private _dashOffset: number\n private _dashIdx: number\n private _dashSum: number\n\n static CMD = CMD\n\n constructor(notSaveData?: boolean) {\n if (notSaveData) {\n this._saveData = false;\n }\n\n if (this._saveData) {\n this.data = [];\n }\n }\n\n increaseVersion() {\n this._version++;\n }\n\n /**\n * Version can be used outside for compare if the path is changed.\n * For example to determine if need to update svg d str in svg renderer.\n */\n getVersion() {\n return this._version;\n }\n\n /**\n * @readOnly\n */\n setScale(sx: number, sy: number, segmentIgnoreThreshold?: number) {\n // Compat. Previously there is no segmentIgnoreThreshold.\n segmentIgnoreThreshold = segmentIgnoreThreshold || 0;\n if (segmentIgnoreThreshold > 0) {\n this._ux = mathAbs(segmentIgnoreThreshold / dpr / sx) || 0;\n this._uy = mathAbs(segmentIgnoreThreshold / dpr / sy) || 0;\n }\n }\n\n setDPR(dpr: number) {\n this.dpr = dpr;\n }\n\n setContext(ctx: ExtendedCanvasRenderingContext2D) {\n this._ctx = ctx;\n }\n\n getContext(): ExtendedCanvasRenderingContext2D {\n return this._ctx;\n }\n\n beginPath() {\n this._ctx && this._ctx.beginPath();\n this.reset();\n return this;\n }\n\n /**\n * Reset path data.\n */\n reset() {\n // Reset\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 if (this._pathSegLen) {\n this._pathSegLen = null;\n this._pathLen = 0;\n }\n\n // Update version\n this._version++;\n }\n\n moveTo(x: number, y: number) {\n // Add pending point for previous path.\n this._drawPendingPt();\n\n this.addData(CMD.M, x, y);\n this._ctx && this._ctx.moveTo(x, y);\n\n // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用\n // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。\n // 有可能在 beginPath 之后直接调用 lineTo,这时候 x0, y0 需要\n // 在 lineTo 方法中记录,这里先不考虑这种情况,dashed line 也只在 IE10- 中不支持\n this._x0 = x;\n this._y0 = y;\n\n this._xi = x;\n this._yi = y;\n\n return this;\n }\n\n lineTo(x: number, y: number) {\n const dx = mathAbs(x - this._xi);\n const dy = mathAbs(y - this._yi);\n const exceedUnit = dx > this._ux || dy > this._uy;\n\n this.addData(CMD.L, x, y);\n\n if (this._ctx && exceedUnit) {\n this._needsDash ? this._dashedLineTo(x, y)\n : this._ctx.lineTo(x, y);\n }\n if (exceedUnit) {\n this._xi = x;\n this._yi = y;\n this._pendingPtDist = 0;\n }\n else {\n const d2 = dx * dx + dy * dy;\n // Only use the farthest pending point.\n if (d2 > this._pendingPtDist) {\n this._pendingPtX = x;\n this._pendingPtY = y;\n this._pendingPtDist = d2;\n }\n }\n\n return this;\n }\n\n bezierCurveTo(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number) {\n this.addData(CMD.C, x1, y1, x2, y2, x3, y3);\n if (this._ctx) {\n this._needsDash ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3)\n : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n this._xi = x3;\n this._yi = y3;\n return this;\n }\n\n quadraticCurveTo(x1: number, y1: number, x2: number, y2: number) {\n this.addData(CMD.Q, x1, y1, x2, y2);\n if (this._ctx) {\n this._needsDash ? this._dashedQuadraticTo(x1, y1, x2, y2)\n : this._ctx.quadraticCurveTo(x1, y1, x2, y2);\n }\n this._xi = x2;\n this._yi = y2;\n return this;\n }\n\n arc(cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise?: boolean) {\n tmpAngles[0] = startAngle;\n tmpAngles[1] = endAngle;\n normalizeArcAngles(tmpAngles, anticlockwise);\n\n startAngle = tmpAngles[0];\n endAngle = tmpAngles[1];\n\n let delta = endAngle - startAngle;\n\n\n this.addData(\n CMD.A, cx, cy, r, r, startAngle, delta, 0, anticlockwise ? 0 : 1\n );\n this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n\n this._xi = mathCos(endAngle) * r + cx;\n this._yi = mathSin(endAngle) * r + cy;\n return this;\n }\n\n // TODO\n arcTo(x1: number, y1: number, x2: number, y2: number, radius: number) {\n if (this._ctx) {\n this._ctx.arcTo(x1, y1, x2, y2, radius);\n }\n return this;\n }\n\n // TODO\n rect(x: number, y: number, w: number, h: number) {\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 closePath() {\n // Add pending point for previous path.\n this._drawPendingPt();\n\n this.addData(CMD.Z);\n\n const ctx = this._ctx;\n const x0 = this._x0;\n const y0 = this._y0;\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 fill(ctx: CanvasRenderingContext2D) {\n ctx && ctx.fill();\n this.toStatic();\n }\n\n stroke(ctx: CanvasRenderingContext2D) {\n ctx && ctx.stroke();\n this.toStatic();\n }\n\n /**\n * 必须在其它绘制命令前调用\n * Must be invoked before all other path drawing methods\n */\n setLineDash(lineDash: number[] | false) {\n if (lineDash instanceof Array) {\n this._lineDash = lineDash;\n\n this._dashIdx = 0;\n\n let lineDashSum = 0;\n for (let i = 0; i < lineDash.length; i++) {\n lineDashSum += lineDash[i];\n }\n this._dashSum = lineDashSum;\n\n this._needsDash = true;\n }\n else {\n // Clear\n this._lineDash = null;\n this._needsDash = false;\n }\n return this;\n }\n\n /**\n * 必须在其它绘制命令前调用\n * Must be invoked before all other path drawing methods\n */\n setLineDashOffset(offset: number) {\n this._dashOffset = offset;\n return this;\n }\n\n len() {\n return this._len;\n }\n\n setData(data: Float32Array | number[]) {\n\n const len = data.length;\n\n if (!(this.data && this.data.length === len) && hasTypedArray) {\n this.data = new Float32Array(len);\n }\n\n for (let i = 0; i < len; i++) {\n this.data[i] = data[i];\n }\n\n this._len = len;\n }\n\n appendPath(path: PathProxy | PathProxy[]) {\n if (!(path instanceof Array)) {\n path = [path];\n }\n const len = path.length;\n let appendSize = 0;\n let offset = this._len;\n for (let i = 0; i < len; i++) {\n appendSize += path[i].len();\n }\n if (hasTypedArray && (this.data instanceof Float32Array)) {\n this.data = new Float32Array(offset + appendSize);\n }\n for (let i = 0; i < len; i++) {\n const appendPathData = path[i].data;\n for (let k = 0; k < appendPathData.length; k++) {\n this.data[offset++] = appendPathData[k];\n }\n }\n this._len = offset;\n }\n\n /**\n * 填充 Path 数据。\n * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。\n */\n addData(\n cmd: number,\n a?: number,\n b?: number,\n c?: number,\n d?: number,\n e?: number,\n f?: number,\n g?: number,\n h?: number\n ) {\n if (!this._saveData) {\n return;\n }\n\n let data = this.data;\n if (this._len + arguments.length > data.length) {\n // 因为之前的数组已经转换成静态的 Float32Array\n // 所以不够用时需要扩展一个新的动态数组\n this._expandData();\n data = this.data;\n }\n for (let i = 0; i < arguments.length; i++) {\n data[this._len++] = arguments[i];\n }\n }\n\n private _drawPendingPt() {\n if (this._pendingPtDist > 0) {\n this._ctx && this._ctx.lineTo(this._pendingPtX, this._pendingPtY);\n this._pendingPtDist = 0;\n }\n }\n\n private _expandData() {\n // Only if data is Float32Array\n if (!(this.data instanceof Array)) {\n const newData = [];\n for (let i = 0; i < this._len; i++) {\n newData[i] = this.data[i];\n }\n this.data = newData;\n }\n }\n\n private _dashedLineTo(x1: number, y1: number) {\n const dashSum = this._dashSum;\n const lineDash = this._lineDash;\n const ctx = this._ctx;\n let offset = this._dashOffset;\n\n let x0 = this._xi;\n let y0 = this._yi;\n let dx = x1 - x0;\n let dy = y1 - y0;\n let dist = mathSqrt(dx * dx + dy * dy);\n let x = x0;\n let y = y0;\n let nDash = lineDash.length;\n let dash;\n let idx;\n dx /= dist;\n dy /= dist;\n\n if (offset < 0) {\n // Convert to positive offset\n offset = dashSum + offset;\n }\n offset %= dashSum;\n x -= offset * dx;\n y -= offset * dy;\n\n while ((dx > 0 && x <= x1) || (dx < 0 && x >= x1)\n || (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;\n // Skip positive offset\n if ((dx > 0 && x < x0) || (dx < 0 && x > x0) || (dy > 0 && y < y0) || (dy < 0 && y > y0)) {\n continue;\n }\n ctx[idx % 2 ? 'moveTo' : 'lineTo'](\n dx >= 0 ? mathMin(x, x1) : mathMax(x, x1),\n dy >= 0 ? mathMin(y, y1) : mathMax(y, y1)\n );\n }\n // Offset for next lineTo\n dx = x - x1;\n dy = y - y1;\n this._dashOffset = -mathSqrt(dx * dx + dy * dy);\n }\n\n // Not accurate dashed line to\n private _dashedBezierTo(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number) {\n const ctx = this._ctx;\n\n let dashSum = this._dashSum;\n let offset = this._dashOffset;\n let lineDash = this._lineDash;\n\n let x0 = this._xi;\n let y0 = this._yi;\n let bezierLen = 0;\n let idx = this._dashIdx;\n let nDash = lineDash.length;\n\n let t;\n let dx;\n let dy;\n\n let x;\n let y;\n\n let tmpLen = 0;\n\n if (offset < 0) {\n // Convert to positive offset\n offset = dashSum + offset;\n }\n offset %= dashSum;\n // Bezier approx length\n for (t = 0; t < 1; t += 0.1) {\n dx = cubicAt(x0, x1, x2, x3, t + 0.1)\n - cubicAt(x0, x1, x2, x3, t);\n dy = cubicAt(y0, y1, y2, y3, t + 0.1)\n - cubicAt(y0, y1, y2, y3, t);\n bezierLen += mathSqrt(dx * dx + dy * dy);\n }\n\n // Find idx after add offset\n for (; idx < nDash; idx++) {\n tmpLen += lineDash[idx];\n if (tmpLen > offset) {\n break;\n }\n }\n t = (tmpLen - offset) / bezierLen;\n\n while (t <= 1) {\n\n x = cubicAt(x0, x1, x2, x3, t);\n y = cubicAt(y0, y1, y2, y3, t);\n\n // Use line to approximate dashed bezier\n // Bad result if dash is long\n idx % 2 ? ctx.moveTo(x, y)\n : ctx.lineTo(x, y);\n\n t += lineDash[idx] / bezierLen;\n\n idx = (idx + 1) % nDash;\n }\n\n // Finish the last segment and calculate the new offset\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\n private _dashedQuadraticTo(x1: number, y1: number, x2: number, y2: number) {\n // Convert quadratic to cubic using degree elevation\n const x3 = x2;\n const 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 * Convert dynamic array to static Float32Array\n *\n * It will still use a normal array if command buffer length is less than 10\n * Because Float32Array itself may take more memory than a normal array.\n *\n * 10 length will make sure at least one M command and one A(arc) command.\n */\n toStatic() {\n if (!this._saveData) {\n return;\n }\n\n this._drawPendingPt();\n\n const data = this.data;\n if (data instanceof Array) {\n data.length = this._len;\n if (hasTypedArray && this._len > 11) {\n this.data = new Float32Array(data);\n }\n }\n }\n\n\n getBoundingRect() {\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\n const data = this.data;\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n\n let i;\n for (i = 0; i < this._len;) {\n const cmd = data[i++] as number;\n\n const isFirst = i === 1;\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n\n x0 = xi;\n y0 = yi;\n }\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n min2[0] = x0;\n min2[1] = y0;\n max2[0] = x0;\n max2[1] = y0;\n break;\n case CMD.L:\n fromLine(xi, yi, data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.C:\n fromCubic(\n xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n min2, max2\n );\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.Q:\n fromQuadratic(\n xi, yi, data[i++], data[i++], data[i], data[i + 1],\n min2, max2\n );\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.A:\n const cx = data[i++];\n const cy = data[i++];\n const rx = data[i++];\n const ry = data[i++];\n const startAngle = data[i++];\n const endAngle = data[i++] + startAngle;\n // TODO Arc 旋转\n i += 1;\n const anticlockwise = !data[i++];\n\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n\n fromArc(\n cx, cy, rx, ry, startAngle, endAngle,\n anticlockwise, min2, max2\n );\n\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n const width = data[i++];\n const height = data[i++];\n // Use fromLine\n fromLine(x0, y0, x0 + width, y0 + height, min2, max2);\n break;\n case CMD.Z:\n xi = x0;\n yi = y0;\n break;\n }\n\n // Union\n vec2.min(min, min, min2);\n vec2.max(max, max, max2);\n }\n\n // No data\n if (i === 0) {\n min[0] = min[1] = max[0] = max[1] = 0;\n }\n\n return new BoundingRect(\n min[0], min[1], max[0] - min[0], max[1] - min[1]\n );\n }\n\n private _calculateLength(): number {\n const data = this.data;\n const len = this._len;\n const ux = this._ux;\n const uy = this._uy;\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n\n if (!this._pathSegLen) {\n this._pathSegLen = [];\n }\n const pathSegLen = this._pathSegLen;\n let pathTotalLen = 0;\n let segCount = 0;\n\n for (let i = 0; i < len;) {\n const cmd = data[i++] as number;\n const isFirst = i === 1;\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n\n x0 = xi;\n y0 = yi;\n }\n\n let l = -1;\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n break;\n case CMD.L: {\n const x2 = data[i++];\n const y2 = data[i++];\n const dx = x2 - xi;\n const dy = y2 - yi;\n if (mathAbs(dx) > ux || mathAbs(dy) > uy || i === len - 1) {\n l = Math.sqrt(dx * dx + dy * dy);\n xi = x2;\n yi = y2;\n }\n break;\n }\n case CMD.C: {\n const x1 = data[i++];\n const y1 = data[i++];\n const x2 = data[i++];\n const y2 = data[i++];\n const x3 = data[i++];\n const y3 = data[i++];\n // TODO adaptive iteration\n l = cubicLength(xi, yi, x1, y1, x2, y2, x3, y3, 10);\n xi = x3;\n yi = y3;\n break;\n }\n case CMD.Q: {\n const x1 = data[i++];\n const y1 = data[i++];\n const x2 = data[i++];\n const y2 = data[i++];\n l = quadraticLength(xi, yi, x1, y1, x2, y2, 10);\n xi = x2;\n yi = y2;\n break;\n }\n case CMD.A:\n // TODO Arc 判断的开销比较大\n const cx = data[i++];\n const cy = data[i++];\n const rx = data[i++];\n const ry = data[i++];\n const startAngle = data[i++];\n let delta = data[i++];\n const endAngle = delta + startAngle;\n // TODO Arc 旋转\n i += 1;\n const anticlockwise = !data[i++];\n\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n\n // TODO Ellipse\n l = mathMax(rx, ry) * mathMin(PI2, Math.abs(delta));\n\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R: {\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n const width = data[i++];\n const height = data[i++];\n l = width * 2 + height * 2;\n break;\n }\n case CMD.Z: {\n const dx = x0 - xi;\n const dy = y0 - yi;\n l = Math.sqrt(dx * dx + dy * dy);\n\n xi = x0;\n yi = y0;\n break;\n }\n }\n\n if (l >= 0) {\n pathSegLen[segCount++] = l;\n pathTotalLen += l;\n }\n }\n\n // TODO Optimize memory cost.\n this._pathLen = pathTotalLen;\n\n return pathTotalLen;\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(ctx: PathRebuilder, percent: number) {\n const d = this.data;\n const ux = this._ux;\n const uy = this._uy;\n const len = this._len;\n let x0;\n let y0;\n let xi;\n let yi;\n let x;\n let y;\n\n const drawPart = percent < 1;\n let pathSegLen;\n let pathTotalLen;\n let accumLength = 0;\n let segCount = 0;\n let displayedLength;\n\n let pendingPtDist = 0;\n let pendingPtX: number;\n let pendingPtY: number;\n\n\n if (drawPart) {\n if (!this._pathSegLen) {\n this._calculateLength();\n }\n pathSegLen = this._pathSegLen;\n pathTotalLen = this._pathLen;\n displayedLength = percent * pathTotalLen;\n\n if (!displayedLength) {\n return;\n }\n }\n\n lo: for (let i = 0; i < len;) {\n const cmd = d[i++];\n const isFirst = i === 1;\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = d[i];\n yi = d[i + 1];\n\n x0 = xi;\n y0 = yi;\n }\n switch (cmd) {\n case CMD.M:\n if (pendingPtDist > 0) {\n ctx.lineTo(pendingPtX, pendingPtY);\n pendingPtDist = 0;\n }\n x0 = xi = d[i++];\n y0 = yi = d[i++];\n ctx.moveTo(xi, yi);\n break;\n case CMD.L: {\n x = d[i++];\n y = d[i++];\n const dx = mathAbs(x - xi);\n const dy = mathAbs(y - yi);\n // Not draw too small seg between\n if (dx > ux || dy > uy) {\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n const t = (displayedLength - accumLength) / l;\n ctx.lineTo(xi * (1 - t) + x * t, yi * (1 - t) + y * t);\n break lo;\n }\n accumLength += l;\n }\n\n ctx.lineTo(x, y);\n xi = x;\n yi = y;\n pendingPtDist = 0;\n }\n else {\n const d2 = dx * dx + dy * dy;\n // Only use the farthest pending point.\n if (d2 > pendingPtDist) {\n pendingPtX = x;\n pendingPtY = y;\n pendingPtDist = d2;\n }\n }\n break;\n }\n case CMD.C: {\n const x1 = d[i++];\n const y1 = d[i++];\n const x2 = d[i++];\n const y2 = d[i++];\n const x3 = d[i++];\n const y3 = d[i++];\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n const t = (displayedLength - accumLength) / l;\n cubicSubdivide(xi, x1, x2, x3, t, tmpOutX);\n cubicSubdivide(yi, y1, y2, y3, t, tmpOutY);\n ctx.bezierCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2], tmpOutX[3], tmpOutY[3]);\n break lo;\n }\n accumLength += l;\n }\n\n ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n xi = x3;\n yi = y3;\n break;\n }\n case CMD.Q: {\n const x1 = d[i++];\n const y1 = d[i++];\n const x2 = d[i++];\n const y2 = d[i++];\n\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n const t = (displayedLength - accumLength) / l;\n quadraticSubdivide(xi, x1, x2, t, tmpOutX);\n quadraticSubdivide(yi, y1, y2, t, tmpOutY);\n ctx.quadraticCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2]);\n break lo;\n }\n accumLength += l;\n }\n\n ctx.quadraticCurveTo(x1, y1, x2, y2);\n xi = x2;\n yi = y2;\n break;\n }\n case CMD.A:\n const cx = d[i++];\n const cy = d[i++];\n const rx = d[i++];\n const ry = d[i++];\n let startAngle = d[i++];\n let delta = d[i++];\n const psi = d[i++];\n const anticlockwise = !d[i++];\n const r = (rx > ry) ? rx : ry;\n const scaleX = (rx > ry) ? 1 : rx / ry;\n const scaleY = (rx > ry) ? ry / rx : 1;\n const isEllipse = mathAbs(rx - ry) > 1e-3;\n let endAngle = startAngle + delta;\n let breakBuild = false;\n\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n endAngle = startAngle + delta * (displayedLength - accumLength) / l;\n breakBuild = true;\n }\n accumLength += l;\n }\n if (isEllipse && ctx.ellipse) {\n ctx.ellipse(cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise);\n }\n else {\n ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n }\n\n if (breakBuild) {\n break lo;\n }\n\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = d[i];\n y0 = yi = d[i + 1];\n\n x = d[i++];\n y = d[i++];\n const width = d[i++];\n const height = d[i++];\n\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n let d = displayedLength - accumLength;\n ctx.moveTo(x, y);\n ctx.lineTo(x + mathMin(d, width), y);\n d -= width;\n if (d > 0) {\n ctx.lineTo(x + width, y + mathMin(d, height));\n }\n d -= height;\n if (d > 0) {\n ctx.lineTo(x + mathMax(width - d, 0), y + height);\n }\n d -= width;\n if (d > 0) {\n ctx.lineTo(x, y + mathMax(height - d, 0));\n }\n break lo;\n }\n accumLength += l;\n }\n ctx.rect(x, y, width, height);\n break;\n case CMD.Z:\n if (pendingPtDist > 0) {\n ctx.lineTo(pendingPtX, pendingPtY);\n pendingPtDist = 0;\n }\n\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n const t = (displayedLength - accumLength) / l;\n ctx.lineTo(xi * (1 - t) + x0 * t, yi * (1 - t) + y0 * t);\n break lo;\n }\n accumLength += l;\n }\n\n ctx.closePath();\n xi = x0;\n yi = y0;\n }\n }\n }\n\n private static initDefaultProps = (function () {\n const proto = PathProxy.prototype;\n proto._saveData = true;\n proto._needsDash = false;\n proto._dashOffset = 0;\n proto._dashIdx = 0;\n proto._dashSum = 0;\n proto._ux = 0;\n proto._uy = 0;\n proto._pendingPtDist = 0;\n proto._version = 0;\n })()\n}\n\n\nexport interface PathRebuilder {\n moveTo(x: number, y: number): void\n lineTo(x: number, y: number): void\n bezierCurveTo(x: number, y: number, x2: number, y2: number, x3: number, y3: number): void\n quadraticCurveTo(x: number, y: number, x2: number, y2: number): void\n arc(cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean): void\n ellipse(cx: number, cy: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise: boolean): void\n rect(x: number, y: number, width: number, height: number): void\n closePath(): void\n}","\n/**\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 */\nexport function containStroke(\n x0: number, y0: number, x1: number, y1: number,\n lineWidth: number, x: number, y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n let _a = 0;\n let _b = x0;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l)\n || (y < y0 - _l && y < y1 - _l)\n || (x > x0 + _l && x > x1 + _l)\n || (x < x0 - _l && x < x1 - _l)\n ) {\n return false;\n }\n\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n }\n else {\n return Math.abs(x - x0) <= _l / 2;\n }\n const tmp = _a * x - y + _b;\n const _s = tmp * tmp / (_a * _a + 1);\n return _s <= _l / 2 * _l / 2;\n}","\nimport * as curve from '../core/curve';\n\n/**\n * 三次贝塞尔曲线描边包含判断\n */\nexport function containStroke(\n x0: number, y0: number, x1: number, y1: number,\n x2: number, y2: number, x3: number, y3: number,\n lineWidth: number, x: number, y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l)\n || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l)\n || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l)\n || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)\n ) {\n return false;\n }\n const d = curve.cubicProjectPoint(\n x0, y0, x1, y1, x2, y2, x3, y3,\n x, y, null\n );\n return d <= _l / 2;\n}","import {quadraticProjectPoint} from '../core/curve';\n\n/**\n * 二次贝塞尔曲线描边包含判断\n */\nexport function containStroke(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\n lineWidth: number, x: number, y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l && y > y2 + _l)\n || (y < y0 - _l && y < y1 - _l && y < y2 - _l)\n || (x > x0 + _l && x > x1 + _l && x > x2 + _l)\n || (x < x0 - _l && x < x1 - _l && x < x2 - _l)\n ) {\n return false;\n }\n const d = quadraticProjectPoint(\n x0, y0, x1, y1, x2, y2,\n x, y, null\n );\n return d <= _l / 2;\n}\n","\nconst PI2 = Math.PI * 2;\n\nexport function normalizeRadian(angle: number): number {\n angle %= PI2;\n if (angle < 0) {\n angle += PI2;\n }\n return angle;\n}","\nimport {normalizeRadian} from './util';\n\nconst PI2 = Math.PI * 2;\n\n/**\n * 圆弧描边包含判断\n */\nexport function containStroke(\n cx: number, cy: number, r: number, startAngle: number, endAngle: number,\n anticlockwise: boolean,\n lineWidth: number, x: number, y: number\n): boolean {\n\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n\n x -= cx;\n y -= cy;\n const d = Math.sqrt(x * x + y * y);\n\n if ((d - _l > r) || (d + _l < r)) {\n return false;\n }\n // TODO\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n return true;\n }\n if (anticlockwise) {\n const tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n }\n else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n let angle = Math.atan2(y, x);\n if (angle < 0) {\n angle += PI2;\n }\n return (angle >= startAngle && angle <= endAngle)\n || (angle + PI2 >= startAngle && angle + PI2 <= endAngle);\n}","\nexport default function windingLine(\n x0: number, y0: number, x1: number, y1: number, x: number, y: number\n): number {\n if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n return 0;\n }\n // Ignore horizontal line\n if (y1 === y0) {\n return 0;\n }\n const t = (y - y0) / (y1 - y0);\n\n let dir = y1 < y0 ? 1 : -1;\n // Avoid winding error when intersection point is the connect point of two line of polygon\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n\n const x_ = t * (x1 - x0) + x0;\n\n // If (x, y) on the line, considered as \"contain\".\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}","import PathProxy from '../core/PathProxy';\nimport * as line from './line';\nimport * as cubic from './cubic';\nimport * as quadratic from './quadratic';\nimport * as arc from './arc';\nimport * as curve from '../core/curve';\nimport windingLine from './windingLine';\n\nconst CMD = PathProxy.CMD;\nconst PI2 = Math.PI * 2;\n\nconst EPSILON = 1e-4;\n\ntype PathData = Float32Array | number[];\n\nfunction isAroundEqual(a: number, b: number) {\n return Math.abs(a - b) < EPSILON;\n}\n\n// 临时数组\nconst roots = [-1, -1, -1];\nconst extrema = [-1, -1];\n\nfunction swapExtrema() {\n const tmp = extrema[0];\n extrema[0] = extrema[1];\n extrema[1] = tmp;\n}\n\nfunction windingCubic(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n x: number, y: number\n): number {\n // Quick reject\n if (\n (y > y0 && y > y1 && y > y2 && y > y3)\n || (y < y0 && y < y1 && y < y2 && y < y3)\n ) {\n return 0;\n }\n const nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n else {\n let w = 0;\n let nExtrema = -1;\n let y0_;\n let y1_;\n for (let i = 0; i < nRoots; i++) {\n let t = roots[i];\n\n // Avoid winding error when intersection point is the connect point of two line of polygon\n let unit = (t === 0 || t === 1) ? 0.5 : 1;\n\n let x_ = curve.cubicAt(x0, x1, x2, x3, t);\n if (x_ < x) { // Quick reject\n continue;\n }\n if (nExtrema < 0) {\n nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);\n if (nExtrema > 1) {\n y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n if (nExtrema === 2) {\n // 分成三段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n }\n else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n }\n else {\n w += y3 < y1_ ? unit : -unit;\n }\n }\n else {\n // 分成两段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n }\n else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n return w;\n }\n}\n\nfunction windingQuadratic(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\n x: number, y: number\n): number {\n // Quick reject\n if (\n (y > y0 && y > y1 && y > y2)\n || (y < y0 && y < y1 && y < y2)\n ) {\n return 0;\n }\n const nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n else {\n const t = curve.quadraticExtremum(y0, y1, y2);\n if (t >= 0 && t <= 1) {\n let w = 0;\n let y_ = curve.quadraticAt(y0, y1, y2, t);\n for (let i = 0; i < nRoots; i++) {\n // Remove one endpoint.\n let unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1;\n\n let x_ = curve.quadraticAt(x0, x1, x2, roots[i]);\n if (x_ < x) { // Quick reject\n continue;\n }\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n }\n else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n return w;\n }\n else {\n // Remove one endpoint.\n const unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1;\n\n const x_ = curve.quadraticAt(x0, x1, x2, roots[0]);\n if (x_ < x) { // Quick reject\n return 0;\n }\n return y2 < y0 ? unit : -unit;\n }\n }\n}\n// TODO\n// Arc 旋转\n// startAngle, endAngle has been normalized by normalizeArcAngles\nfunction windingArc(\n cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean,\n x: number, y: number\n) {\n y -= cy;\n if (y > r || y < -r) {\n return 0;\n }\n const tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n\n const dTheta = Math.abs(startAngle - endAngle);\n if (dTheta < 1e-4) {\n return 0;\n }\n if (dTheta >= PI2 - 1e-4) {\n // Is a circle\n startAngle = 0;\n endAngle = PI2;\n const dir = anticlockwise ? 1 : -1;\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n }\n else {\n return 0;\n }\n }\n\n if (startAngle > endAngle) {\n // Swap, make sure startAngle is smaller than endAngle.\n const tmp = startAngle;\n startAngle = endAngle;\n endAngle = tmp;\n }\n // endAngle - startAngle is normalized to 0 - 2*PI.\n // So following will normalize them to 0 - 4*PI\n if (startAngle < 0) {\n startAngle += PI2;\n endAngle += PI2;\n }\n\n let w = 0;\n for (let i = 0; i < 2; i++) {\n const x_ = roots[i];\n if (x_ + cx > x) {\n let angle = Math.atan2(y, x_);\n let dir = anticlockwise ? 1 : -1;\n if (angle < 0) {\n angle = PI2 + angle;\n }\n if (\n (angle >= startAngle && angle <= endAngle)\n || (angle + PI2 >= startAngle && angle + PI2 <= endAngle)\n ) {\n if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\n dir = -dir;\n }\n w += dir;\n }\n }\n }\n return w;\n}\n\n\nfunction containPath(\n path: PathProxy, lineWidth: number, isStroke: boolean, x: number, y: number\n): boolean {\n const data = path.data;\n const len = path.len();\n let w = 0;\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n let x1;\n let y1;\n\n for (let i = 0; i < len;) {\n const cmd = data[i++];\n const isFirst = i === 1;\n // Begin a new subpath\n if (cmd === CMD.M && i > 1) {\n // Close previous subpath\n if (!isStroke) {\n w += windingLine(xi, yi, x0, y0, x, y);\n }\n // 如果被任何一个 subpath 包含\n // if (w !== 0) {\n // return true;\n // }\n }\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n\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 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 }\n else {\n // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.C:\n if (isStroke) {\n if (cubic.containStroke(xi, yi,\n data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n lineWidth, x, y\n )) {\n return true;\n }\n }\n else {\n w += windingCubic(\n xi, yi,\n data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n x, y\n ) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.Q:\n if (isStroke) {\n if (quadratic.containStroke(xi, yi,\n data[i++], data[i++], data[i], data[i + 1],\n lineWidth, x, y\n )) {\n return true;\n }\n }\n else {\n w += windingQuadratic(\n xi, yi,\n data[i++], data[i++], data[i], data[i + 1],\n x, y\n ) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.A:\n // TODO Arc 判断的开销比较大\n const cx = data[i++];\n const cy = data[i++];\n const rx = data[i++];\n const ry = data[i++];\n const theta = data[i++];\n const dTheta = data[i++];\n // TODO Arc 旋转\n i += 1;\n const anticlockwise = !!(1 - data[i++]);\n x1 = Math.cos(theta) * rx + cx;\n y1 = Math.sin(theta) * ry + cy;\n // 不是直接使用 arc 命令\n if (!isFirst) {\n w += windingLine(xi, yi, x1, y1, x, y);\n }\n else {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n }\n // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n const _x = (x - cx) * ry / rx + cx;\n if (isStroke) {\n if (arc.containStroke(\n cx, cy, ry, theta, theta + dTheta, anticlockwise,\n lineWidth, _x, y\n )) {\n return true;\n }\n }\n else {\n w += windingArc(\n cx, cy, ry, theta, theta + dTheta, anticlockwise,\n _x, y\n );\n }\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n const width = data[i++];\n const height = data[i++];\n x1 = x0 + width;\n y1 = y0 + height;\n if (isStroke) {\n if (line.containStroke(x0, y0, x1, y0, lineWidth, x, y)\n || line.containStroke(x1, y0, x1, y1, lineWidth, x, y)\n || line.containStroke(x1, y1, x0, y1, lineWidth, x, y)\n || line.containStroke(x0, y1, x0, y0, lineWidth, x, y)\n ) {\n return true;\n }\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 break;\n case CMD.Z:\n if (isStroke) {\n if (line.containStroke(\n xi, yi, x0, y0, lineWidth, x, y\n )) {\n return true;\n }\n }\n else {\n // Close a subpath\n w += windingLine(xi, yi, x0, y0, x, y);\n // 如果被任何一个 subpath 包含\n // FIXME subpaths may overlap\n // if (w !== 0) {\n // return true;\n // }\n }\n xi = x0;\n yi = y0;\n break;\n }\n }\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += windingLine(xi, yi, x0, y0, x, y) || 0;\n }\n return w !== 0;\n}\n\nexport function contain(pathProxy: PathProxy, x: number, y: number): boolean {\n return containPath(pathProxy, 0, false, x, y);\n}\n\nexport function containStroke(pathProxy: PathProxy, lineWidth: number, x: number, y: number): boolean {\n return containPath(pathProxy, lineWidth, true, x, y);\n}","import Displayable, { DisplayableProps,\n CommonStyleProps,\n DEFAULT_COMMON_STYLE,\n DisplayableStatePropNames,\n DEFAULT_COMMON_ANIMATION_PROPS\n} from './Displayable';\nimport Element, { ElementAnimateConfig } from '../Element';\nimport PathProxy from '../core/PathProxy';\nimport * as pathContain from '../contain/path';\nimport { PatternObject } from './Pattern';\nimport { Dictionary, PropType, MapToType } from '../core/types';\nimport BoundingRect from '../core/BoundingRect';\nimport { LinearGradientObject } from './LinearGradient';\nimport { RadialGradientObject } from './RadialGradient';\nimport { defaults, keys, extend, clone, isString, createObject } from '../core/util';\nimport Animator from '../animation/Animator';\nimport { lum } from '../tool/color';\nimport { DARK_LABEL_COLOR, LIGHT_LABEL_COLOR, DARK_MODE_THRESHOLD, LIGHTER_LABEL_COLOR } from '../config';\nimport { REDARAW_BIT, SHAPE_CHANGED_BIT, STYLE_CHANGED_BIT } from './constants';\n\n\nexport interface PathStyleProps extends CommonStyleProps {\n fill?: string | PatternObject | LinearGradientObject | RadialGradientObject\n stroke?: string | PatternObject | LinearGradientObject | RadialGradientObject\n decal?: PatternObject\n\n /**\n * Still experimental, not works weel on arc with edge cases(large angle).\n */\n strokePercent?: number\n strokeNoScale?: boolean\n fillOpacity?: number\n strokeOpacity?: number\n\n /**\n * `true` is not supported.\n * `false`/`null`/`undefined` are the same.\n * `false` is used to remove lineDash in some\n * case that `null`/`undefined` can not be set.\n * (e.g., emphasis.lineStyle in echarts)\n */\n lineDash?: false | number[] | 'solid' | 'dashed' | 'dotted'\n lineDashOffset?: number\n\n lineWidth?: number\n lineCap?: CanvasLineCap\n lineJoin?: CanvasLineJoin\n\n miterLimit?: number\n /**\n * Paint order, if do stroke first. Similar to SVG paint-order\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/paint-order\n */\n strokeFirst?: boolean\n}\n\nexport const DEFAULT_PATH_STYLE: PathStyleProps = defaults({\n fill: '#000',\n stroke: null,\n strokePercent: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n\n lineDashOffset: 0,\n lineWidth: 1,\n lineCap: 'butt',\n miterLimit: 10,\n\n strokeNoScale: false,\n strokeFirst: false\n} as PathStyleProps, DEFAULT_COMMON_STYLE);\n\n\nexport const DEFAULT_PATH_ANIMATION_PROPS: MapToType = {\n style: defaults, MapToType>({\n fill: true,\n stroke: true,\n strokePercent: true,\n fillOpacity: true,\n strokeOpacity: true,\n lineDashOffset: true,\n lineWidth: true,\n miterLimit: true\n } as MapToType, DEFAULT_COMMON_ANIMATION_PROPS.style)\n };\n\nexport interface PathProps extends DisplayableProps {\n strokeContainThreshold?: number\n segmentIgnoreThreshold?: number\n subPixelOptimize?: boolean\n\n style?: PathStyleProps\n shape?: Dictionary\n\n autoBatch?: boolean\n\n __value?: (string | number)[] | (string | number)\n\n buildPath?: (\n ctx: PathProxy | CanvasRenderingContext2D,\n shapeCfg: Dictionary,\n inBundle?: boolean\n ) => void\n}\n\n\ntype PathKey = keyof PathProps\ntype PathPropertyType = PropType\n\ninterface Path {\n animate(key?: '', loop?: boolean): Animator\n animate(key: 'style', loop?: boolean): Animator\n animate(key: 'shape', loop?: boolean): Animator\n\n getState(stateName: string): PathState\n ensureState(stateName: string): PathState\n\n states: Dictionary\n stateProxy: (stateName: string) => PathState\n}\n\nexport type PathStatePropNames = DisplayableStatePropNames | 'shape';\nexport type PathState = Pick & {\n hoverLayer?: boolean\n}\n\nconst pathCopyParams = [\n 'x', 'y', 'rotation', 'scaleX', 'scaleY', 'originX', 'originY', 'invisible',\n 'culling', 'z', 'z2', 'zlevel', 'parent'\n] as const;\n\nclass Path extends Displayable {\n\n path: PathProxy\n\n strokeContainThreshold: number\n\n // This item default to be false. But in map series in echarts,\n // in order to improve performance, it should be set to true,\n // so the shorty segment won't draw.\n segmentIgnoreThreshold: number\n\n subPixelOptimize: boolean\n\n style: PathStyleProps\n /**\n * If element can be batched automatically\n */\n autoBatch: boolean\n\n private _rectWithStroke: BoundingRect\n\n protected _normalState: PathState\n\n protected _decalEl: Path\n\n // Must have an initial value on shape.\n // It will be assigned by default value.\n shape: Dictionary\n\n constructor(opts?: Props) {\n super(opts);\n }\n\n update() {\n super.update();\n\n const style = this.style;\n if (style.decal) {\n const decalEl: Path = this._decalEl = this._decalEl || new Path();\n if (decalEl.buildPath === Path.prototype.buildPath) {\n decalEl.buildPath = ctx => {\n this.buildPath(ctx, this.shape);\n };\n }\n\n decalEl.silent = true;\n\n const decalElStyle = decalEl.style;\n\n for (let key in style) {\n if ((decalElStyle as any)[key] !== (style as any)[key]) {\n (decalElStyle as any)[key] = (style as any)[key];\n }\n }\n decalElStyle.fill = style.fill ? style.decal : null;\n decalElStyle.decal = null;\n decalElStyle.shadowColor = null;\n style.strokeFirst && (decalElStyle.stroke = null);\n\n for (let i = 0; i < pathCopyParams.length; ++i) {\n (decalEl as any)[pathCopyParams[i]] = this[pathCopyParams[i]];\n }\n\n decalEl.__dirty |= REDARAW_BIT;\n }\n else if (this._decalEl) {\n this._decalEl = null;\n }\n }\n\n getDecalElement() {\n return this._decalEl;\n }\n\n protected _init(props?: Props) {\n // Init default properties\n const keysArr = keys(props);\n\n this.shape = this.getDefaultShape();\n const defaultStyle = this.getDefaultStyle();\n if (defaultStyle) {\n this.useStyle(defaultStyle);\n }\n\n for (let i = 0; i < keysArr.length; i++) {\n const key = keysArr[i];\n const value = props[key];\n if (key === 'style') {\n if (!this.style) {\n // PENDING Reuse style object if possible?\n this.useStyle(value as Props['style']);\n }\n else {\n extend(this.style, value as Props['style']);\n }\n }\n else if (key === 'shape') {\n // this.shape = value;\n extend(this.shape, value as Props['shape']);\n }\n else {\n super.attrKV(key as any, value);\n }\n }\n\n // Create an empty one if no style object exists.\n if (!this.style) {\n this.useStyle({});\n }\n // const defaultShape = this.getDefaultShape();\n // if (!this.shape) {\n // this.shape = defaultShape;\n // }\n // else {\n // defaults(this.shape, defaultShape);\n // }\n }\n\n protected getDefaultStyle(): Props['style'] {\n return null;\n }\n\n // Needs to override\n protected getDefaultShape() {\n return {};\n }\n\n protected canBeInsideText() {\n return this.hasFill();\n }\n\n protected getInsideTextFill() {\n const pathFill = this.style.fill;\n if (pathFill !== 'none') {\n if (isString(pathFill)) {\n const fillLum = lum(pathFill, 0);\n // Determin text color based on the lum of path fill.\n // TODO use (1 - DARK_MODE_THRESHOLD)?\n if (fillLum > 0.5) { // TODO Consider background lum?\n return DARK_LABEL_COLOR;\n }\n else if (fillLum > 0.2) {\n return LIGHTER_LABEL_COLOR;\n }\n return LIGHT_LABEL_COLOR;\n }\n else if (pathFill) {\n return LIGHT_LABEL_COLOR;\n }\n\n }\n return DARK_LABEL_COLOR;\n }\n\n protected getInsideTextStroke(textFill?: string) {\n const pathFill = this.style.fill;\n // Not stroke on none fill object or gradient object\n if (isString(pathFill)) {\n const zr = this.__zr;\n const isDarkMode = !!(zr && zr.isDarkMode());\n const isDarkLabel = lum(textFill, 0) < DARK_MODE_THRESHOLD;\n // All dark or all light.\n if (isDarkMode === isDarkLabel) {\n return pathFill;\n }\n }\n }\n\n // When bundling path, some shape may decide if use moveTo to begin a new subpath or closePath\n // Like in circle\n buildPath(\n ctx: PathProxy | CanvasRenderingContext2D,\n shapeCfg: Dictionary,\n inBundle?: boolean\n ) {}\n\n pathUpdated() {\n this.__dirty &= ~SHAPE_CHANGED_BIT;\n }\n\n createPathProxy() {\n this.path = new PathProxy(false);\n }\n\n hasStroke() {\n const style = this.style;\n const stroke = style.stroke;\n return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\n }\n\n hasFill() {\n const style = this.style;\n const fill = style.fill;\n return fill != null && fill !== 'none';\n }\n\n getBoundingRect(): BoundingRect {\n let rect = this._rect;\n const style = this.style;\n const needsUpdateRect = !rect;\n if (needsUpdateRect) {\n let firstInvoke = false;\n if (!this.path) {\n firstInvoke = true;\n // Create path on demand.\n this.createPathProxy();\n }\n let path = this.path;\n if (firstInvoke || (this.__dirty & SHAPE_CHANGED_BIT)) {\n path.beginPath();\n this.buildPath(path, this.shape, false);\n this.pathUpdated();\n }\n rect = path.getBoundingRect();\n }\n this._rect = rect;\n\n if (this.hasStroke() && this.path && this.path.len() > 0) {\n // Needs update rect with stroke lineWidth when\n // 1. Element changes scale or lineWidth\n // 2. Shape is changed\n const rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone());\n if (this.__dirty || needsUpdateRect) {\n rectWithStroke.copy(rect);\n // PENDING, Min line width is needed when line is horizontal or vertical\n const lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n // FIXME Must after updateTransform\n let w = style.lineWidth;\n\n // Only add extra hover lineWidth when there are no fill\n if (!this.hasFill()) {\n const strokeContainThreshold = this.strokeContainThreshold;\n w = Math.max(w, strokeContainThreshold == null ? 4 : strokeContainThreshold);\n }\n // Consider line width\n // Line scale can't be 0;\n if (lineScale > 1e-10) {\n rectWithStroke.width += w / lineScale;\n rectWithStroke.height += w / lineScale;\n rectWithStroke.x -= w / lineScale / 2;\n rectWithStroke.y -= w / lineScale / 2;\n }\n }\n\n // Return rect with stroke\n return rectWithStroke;\n }\n\n return rect;\n }\n\n contain(x: number, y: number): boolean {\n const localPos = this.transformCoordToLocal(x, y);\n const rect = this.getBoundingRect();\n const style = this.style;\n x = localPos[0];\n y = localPos[1];\n\n if (rect.contain(x, y)) {\n const pathProxy = this.path;\n if (this.hasStroke()) {\n let lineWidth = style.lineWidth;\n let lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n // Line scale can't be 0;\n if (lineScale > 1e-10) {\n // Only add extra hover lineWidth when there are no fill\n if (!this.hasFill()) {\n lineWidth = Math.max(lineWidth, this.strokeContainThreshold);\n }\n if (pathContain.containStroke(\n pathProxy, lineWidth / lineScale, x, y\n )) {\n return true;\n }\n }\n }\n if (this.hasFill()) {\n return pathContain.contain(pathProxy, x, y);\n }\n }\n return false;\n }\n\n /**\n * Shape changed\n */\n dirtyShape() {\n this.__dirty |= SHAPE_CHANGED_BIT;\n if (this._rect) {\n this._rect = null;\n }\n if (this._decalEl) {\n this._decalEl.dirtyShape();\n }\n this.markRedraw();\n }\n\n dirty() {\n this.dirtyStyle();\n this.dirtyShape();\n }\n\n /**\n * Alias for animate('shape')\n * @param {boolean} loop\n */\n animateShape(loop: boolean) {\n return this.animate('shape', loop);\n }\n\n // Override updateDuringAnimation\n updateDuringAnimation(targetKey: string) {\n if (targetKey === 'style') {\n this.dirtyStyle();\n }\n else if (targetKey === 'shape') {\n this.dirtyShape();\n }\n else {\n this.markRedraw();\n }\n }\n\n // Overwrite attrKV\n attrKV(key: PathKey, value: PathPropertyType) {\n // FIXME\n if (key === 'shape') {\n this.setShape(value as Props['shape']);\n }\n else {\n super.attrKV(key as keyof DisplayableProps, value);\n }\n }\n\n setShape(obj: Props['shape']): this\n setShape(obj: T, value: Props['shape'][T]): this\n setShape(keyOrObj: keyof Props['shape'] | Props['shape'], value?: unknown): this {\n let shape = this.shape;\n if (!shape) {\n shape = this.shape = {};\n }\n // Path from string may not have shape\n if (typeof keyOrObj === 'string') {\n shape[keyOrObj] = value;\n }\n else {\n extend(shape, keyOrObj as Props['shape']);\n }\n this.dirtyShape();\n\n return this;\n }\n\n /**\n * If shape changed. used with dirtyShape\n */\n shapeChanged() {\n return !!(this.__dirty & SHAPE_CHANGED_BIT);\n }\n\n /**\n * Create a path style object with default values in it's prototype.\n * @override\n */\n createStyle(obj?: Props['style']) {\n return createObject(DEFAULT_PATH_STYLE, obj);\n }\n\n protected _innerSaveToNormal(toState: PathState) {\n super._innerSaveToNormal(toState);\n\n const normalState = this._normalState;\n // Clone a new one. DON'T share object reference between states and current using.\n // TODO: Clone array in shape?.\n // TODO: Only save changed shape.\n if (toState.shape && !normalState.shape) {\n normalState.shape = extend({}, this.shape);\n }\n }\n\n protected _applyStateObj(\n stateName: string,\n state: PathState,\n normalState: PathState,\n keepCurrentStates: boolean,\n transition: boolean,\n animationCfg: ElementAnimateConfig\n ) {\n super._applyStateObj(stateName, state, normalState, keepCurrentStates, transition, animationCfg);\n const needsRestoreToNormal = !(state && keepCurrentStates);\n let targetShape: Props['shape'];\n if (state && state.shape) {\n // Only animate changed properties.\n if (transition) {\n if (keepCurrentStates) {\n targetShape = state.shape;\n }\n else {\n // Inherits from normal state.\n targetShape = extend({}, normalState.shape);\n extend(targetShape, state.shape);\n }\n }\n else {\n // Because the shape will be replaced. So inherits from current shape.\n targetShape = extend({}, keepCurrentStates ? this.shape : normalState.shape);\n extend(targetShape, state.shape);\n }\n }\n else if (needsRestoreToNormal) {\n targetShape = normalState.shape;\n }\n\n if (targetShape) {\n if (transition) {\n // Clone a new shape.\n this.shape = extend({}, this.shape);\n // Only supports transition on primary props. Because shape is not deep cloned.\n const targetShapePrimaryProps: Props['shape'] = {};\n const shapeKeys = keys(targetShape);\n for (let i = 0; i < shapeKeys.length; i++) {\n const key = shapeKeys[i];\n if (typeof targetShape[key] === 'object') {\n (this.shape as Props['shape'])[key] = targetShape[key];\n }\n else {\n targetShapePrimaryProps[key] = targetShape[key];\n }\n }\n this._transitionState(stateName, {\n shape: targetShapePrimaryProps\n } as Props, animationCfg);\n }\n else {\n this.shape = targetShape;\n this.dirtyShape();\n }\n }\n }\n\n protected _mergeStates(states: PathState[]) {\n const mergedState = super._mergeStates(states) as PathState;\n let mergedShape: Props['shape'];\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n if (state.shape) {\n mergedShape = mergedShape || {};\n this._mergeStyle(mergedShape, state.shape);\n }\n }\n if (mergedShape) {\n mergedState.shape = mergedShape;\n }\n return mergedState;\n }\n\n getAnimationStyleProps() {\n return DEFAULT_PATH_ANIMATION_PROPS;\n }\n /**\n * If path shape is zero area\n */\n isZeroArea(): boolean {\n return false;\n }\n /**\n * 扩展一个 Path element, 比如星形,圆等。\n * Extend a path element\n * @DEPRECATED Use class extends\n * @param props\n * @param props.type Path type\n * @param props.init Initialize\n * @param props.buildPath Overwrite buildPath method\n * @param props.style Extended default style config\n * @param props.shape Extended default shape config\n */\n static extend>(defaultProps: {\n type?: string\n shape?: Shape\n style?: PathStyleProps\n beforeBrush?: Displayable['beforeBrush']\n afterBrush?: Displayable['afterBrush']\n getBoundingRect?: Displayable['getBoundingRect']\n\n calculateTextPosition?: Element['calculateTextPosition']\n buildPath(this: Path, ctx: CanvasRenderingContext2D | PathProxy, shape: Shape, inBundle?: boolean): void\n init?(this: Path, opts: PathProps): void // TODO Should be SubPathOption\n }): {\n new(opts?: PathProps & {shape: Shape}): Path\n } {\n interface SubPathOption extends PathProps {\n shape: Shape\n }\n\n class Sub extends Path {\n\n shape: Shape\n\n getDefaultStyle() {\n return clone(defaultProps.style);\n }\n\n getDefaultShape() {\n return clone(defaultProps.shape);\n }\n\n constructor(opts?: SubPathOption) {\n super(opts);\n defaultProps.init && defaultProps.init.call(this as any, opts);\n }\n }\n\n // TODO Legacy usage. Extend functions\n for (let key in defaultProps) {\n if (typeof (defaultProps as any)[key] === 'function') {\n (Sub.prototype as any)[key] = (defaultProps as any)[key];\n }\n }\n // Sub.prototype.buildPath = defaultProps.buildPath;\n // Sub.prototype.beforeBrush = defaultProps.beforeBrush;\n // Sub.prototype.afterBrush = defaultProps.afterBrush;\n\n return Sub as any;\n }\n\n protected static initDefaultProps = (function () {\n const pathProto = Path.prototype;\n pathProto.type = 'path';\n pathProto.strokeContainThreshold = 5;\n pathProto.segmentIgnoreThreshold = 0;\n pathProto.subPixelOptimize = false;\n pathProto.autoBatch = false;\n pathProto.__dirty = REDARAW_BIT | STYLE_CHANGED_BIT | SHAPE_CHANGED_BIT;\n })()\n}\n\nexport default Path;","import PathProxy from '../core/PathProxy';\nimport {applyTransform as v2ApplyTransform, VectorArray} from '../core/vector';\nimport { MatrixArray } from '../core/matrix';\n\nconst CMD = PathProxy.CMD;\n\nconst points: VectorArray[] = [[], [], []];\nconst mathSqrt = Math.sqrt;\nconst mathAtan2 = Math.atan2;\n\nexport default function transformPath(path: PathProxy, m: MatrixArray) {\n let data = path.data;\n const len = path.len();\n let cmd;\n let nPoint: number;\n let i: number;\n let j: number;\n let k: number;\n let p: VectorArray;\n\n const M = CMD.M;\n const C = CMD.C;\n const L = CMD.L;\n const R = CMD.R;\n const A = CMD.A;\n const Q = CMD.Q;\n\n for (i = 0, j = 0; i < len;) {\n cmd = data[i++];\n j = i;\n nPoint = 0;\n\n switch (cmd) {\n case M:\n nPoint = 1;\n break;\n case L:\n nPoint = 1;\n break;\n case C:\n nPoint = 3;\n break;\n case Q:\n nPoint = 2;\n break;\n case A:\n const x = m[4];\n const y = m[5];\n const sx = mathSqrt(m[0] * m[0] + m[1] * m[1]);\n const sy = mathSqrt(m[2] * m[2] + m[3] * m[3]);\n const angle = mathAtan2(-m[1] / sy, m[0] / sx);\n // cx\n data[i] *= sx;\n data[i++] += x;\n // cy\n data[i] *= sy;\n data[i++] += y;\n // Scale rx and ry\n // FIXME Assume psi is 0 here\n data[i++] *= sx;\n data[i++] *= sy;\n\n // Start angle\n data[i++] += angle;\n // end angle\n data[i++] += angle;\n // FIXME psi\n i += 2;\n j = i;\n break;\n case R:\n // x0, y0\n p[0] = data[i++];\n p[1] = data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1];\n // x1, y1\n p[0] += data[i++];\n p[1] += data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1];\n }\n\n for (k = 0; k < nPoint; k++) {\n let p = points[k];\n p[0] = data[i++];\n p[1] = data[i++];\n\n v2ApplyTransform(p, p, m);\n // Write back\n data[j++] = p[0];\n data[j++] = p[1];\n }\n }\n\n path.increaseVersion();\n}\n","import Path, { PathProps } from '../graphic/Path';\nimport PathProxy from '../core/PathProxy';\nimport transformPath from './transformPath';\nimport { VectorArray } from '../core/vector';\nimport { MatrixArray } from '../core/matrix';\nimport { extend } from '../core/util';\n\n// command chars\n// const cc = [\n// 'm', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z',\n// 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'\n// ];\n\nconst mathSqrt = Math.sqrt;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst PI = Math.PI;\n\nfunction vMag(v: VectorArray): number {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n};\nfunction vRatio(u: VectorArray, v: VectorArray): number {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n};\nfunction vAngle(u: VectorArray, v: VectorArray): number {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1)\n * Math.acos(vRatio(u, v));\n};\n\nfunction processArc(\n x1: number, y1: number, x2: number, y2: number, fa: number, fs: number,\n rx: number, ry: number, psiDeg: number, cmd: number, path: PathProxy\n) {\n // https://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n const psi = psiDeg * (PI / 180.0);\n const xp = mathCos(psi) * (x1 - x2) / 2.0\n + mathSin(psi) * (y1 - y2) / 2.0;\n const yp = -1 * mathSin(psi) * (x1 - x2) / 2.0\n + mathCos(psi) * (y1 - y2) / 2.0;\n\n const lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n\n if (lambda > 1) {\n rx *= mathSqrt(lambda);\n ry *= mathSqrt(lambda);\n }\n\n const f = (fa === fs ? -1 : 1)\n * mathSqrt((((rx * rx) * (ry * ry))\n - ((rx * rx) * (yp * yp))\n - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp)\n + (ry * ry) * (xp * xp))\n ) || 0;\n\n const cxp = f * rx * yp / ry;\n const cyp = f * -ry * xp / rx;\n\n const cx = (x1 + x2) / 2.0\n + mathCos(psi) * cxp\n - mathSin(psi) * cyp;\n const cy = (y1 + y2) / 2.0\n + mathSin(psi) * cxp\n + mathCos(psi) * cyp;\n\n const theta = vAngle([ 1, 0 ], [ (xp - cxp) / rx, (yp - cyp) / ry ]);\n const u = [ (xp - cxp) / rx, (yp - cyp) / ry ];\n const v = [ (-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry ];\n let dTheta = vAngle(u, v);\n\n if (vRatio(u, v) <= -1) {\n dTheta = PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n\n if (dTheta < 0) {\n const n = Math.round(dTheta / PI * 1e6) / 1e6;\n // Convert to positive\n dTheta = PI * 2 + (n % 2) * PI;\n }\n\n path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);\n}\n\n\nconst commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig;\n// Consider case:\n// (1) delimiter can be comma or space, where continuous commas\n// or spaces should be seen as one comma.\n// (2) value can be like:\n// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983',\n// 'l-.5E1,54', '121-23-44-11' (no delimiter)\nconst numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\n// const valueSplitReg = /[\\s,]+/;\n\nfunction createPathProxyFromString(data: string) {\n const path = new PathProxy();\n\n if (!data) {\n return path;\n }\n\n // const data = data.replace(/-/g, ' -')\n // .replace(/ /g, ' ')\n // .replace(/ /g, ',')\n // .replace(/,,/g, ',');\n\n // const n;\n // create pipes so that we can split the data\n // for (n = 0; n < cc.length; n++) {\n // cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);\n // }\n\n // data = data.replace(/-/g, ',-');\n\n // create array\n // const arr = cs.split('|');\n // init context point\n let cpx = 0;\n let cpy = 0;\n let subpathX = cpx;\n let subpathY = cpy;\n let prevCmd;\n\n const CMD = PathProxy.CMD;\n\n // commandReg.lastIndex = 0;\n // const cmdResult;\n // while ((cmdResult = commandReg.exec(data)) != null) {\n // const cmdStr = cmdResult[1];\n // const cmdContent = cmdResult[2];\n\n const cmdList = data.match(commandReg);\n if (!cmdList) {\n // Invalid svg path.\n return path;\n }\n\n for (let l = 0; l < cmdList.length; l++) {\n const cmdText = cmdList[l];\n let cmdStr = cmdText.charAt(0);\n\n let cmd;\n\n // String#split is faster a little bit than String#replace or RegExp#exec.\n // const p = cmdContent.split(valueSplitReg);\n // const pLen = 0;\n // for (let i = 0; i < p.length; i++) {\n // // '' and other invalid str => NaN\n // const val = parseFloat(p[i]);\n // !isNaN(val) && (p[pLen++] = val);\n // }\n\n\n // Following code will convert string to number. So convert type to number here\n const p = cmdText.match(numberReg) as any[] as number[] || [];\n const pLen = p.length;\n for (let i = 0; i < pLen; i++) {\n p[i] = parseFloat(p[i] as any as string);\n }\n\n let off = 0;\n while (off < pLen) {\n let ctlPtx;\n let ctlPty;\n\n let rx;\n let ry;\n let psi;\n let fa;\n let fs;\n\n let x1 = cpx;\n let y1 = cpy;\n\n let len: number;\n let pathData: number[] | Float32Array;\n // convert l, H, h, V, and v to L\n switch (cmdStr) {\n case 'l':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'L':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'm':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n subpathX = cpx;\n subpathY = cpy;\n cmdStr = 'l';\n break;\n case 'M':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n subpathX = cpx;\n subpathY = cpy;\n cmdStr = 'L';\n break;\n case 'h':\n cpx += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'H':\n cpx = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'v':\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'V':\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'C':\n cmd = CMD.C;\n path.addData(\n cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]\n );\n cpx = p[off - 2];\n cpy = p[off - 1];\n break;\n case 'c':\n cmd = CMD.C;\n path.addData(\n cmd,\n p[off++] + cpx, p[off++] + cpy,\n p[off++] + cpx, p[off++] + cpy,\n p[off++] + cpx, p[off++] + cpy\n );\n cpx += p[off - 2];\n cpy += p[off - 1];\n break;\n case 'S':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cmd = CMD.C;\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n case 's':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cmd = CMD.C;\n x1 = cpx + p[off++];\n y1 = cpy + p[off++];\n cpx += p[off++];\n cpy += p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n case 'Q':\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n case 'q':\n x1 = p[off++] + cpx;\n y1 = p[off++] + cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n case 'T':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n case 't':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n case 'A':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n\n x1 = cpx, y1 = cpy;\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.A;\n processArc(\n x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path\n );\n break;\n case 'a':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n\n x1 = cpx, y1 = cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.A;\n processArc(\n x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path\n );\n break;\n }\n }\n\n if (cmdStr === 'z' || cmdStr === 'Z') {\n cmd = CMD.Z;\n path.addData(cmd);\n // z may be in the middle of the path.\n cpx = subpathX;\n cpy = subpathY;\n }\n\n prevCmd = cmd;\n }\n\n path.toStatic();\n\n return path;\n}\n\ntype SVGPathOption = Omit\ninterface InnerSVGPathOption extends PathProps {\n applyTransform?: (m: MatrixArray) => void\n}\nclass SVGPath extends Path {\n applyTransform(m: MatrixArray) {}\n}\n\nfunction isPathProxy(path: PathProxy | CanvasRenderingContext2D): path is PathProxy {\n return (path as PathProxy).setData != null;\n}\n// TODO Optimize double memory cost problem\nfunction createPathOptions(str: string, opts: SVGPathOption): InnerSVGPathOption {\n const pathProxy = createPathProxyFromString(str);\n const innerOpts: InnerSVGPathOption = extend({}, opts);\n innerOpts.buildPath = function (path: PathProxy | CanvasRenderingContext2D) {\n if (isPathProxy(path)) {\n path.setData(pathProxy.data);\n // Svg and vml renderer don't have context\n const ctx = path.getContext();\n if (ctx) {\n path.rebuildPath(ctx, 1);\n }\n }\n else {\n const ctx = path;\n pathProxy.rebuildPath(ctx, 1);\n }\n };\n\n innerOpts.applyTransform = function (this: SVGPath, m: MatrixArray) {\n transformPath(pathProxy, m);\n this.dirtyShape();\n };\n\n return innerOpts;\n}\n\n/**\n * Create a Path object from path string data\n * http://www.w3.org/TR/SVG/paths.html#PathData\n * @param opts Other options\n */\nexport function createFromString(str: string, opts?: SVGPathOption): SVGPath {\n // PENDING\n return new SVGPath(createPathOptions(str, opts));\n}\n\n/**\n * Create a Path class from path string data\n * @param str\n * @param opts Other options\n */\nexport function extendFromString(str: string, defaultOpts?: SVGPathOption): typeof SVGPath {\n const innerOpts = createPathOptions(str, defaultOpts);\n class Sub extends SVGPath {\n constructor(opts: InnerSVGPathOption) {\n super(opts);\n this.applyTransform = innerOpts.applyTransform;\n this.buildPath = innerOpts.buildPath;\n }\n }\n return Sub;\n}\n\n/**\n * Merge multiple paths\n */\n// TODO Apply transform\n// TODO stroke dash\n// TODO Optimize double memory cost problem\nexport function mergePath(pathEls: Path[], opts: PathProps) {\n const pathList: PathProxy[] = [];\n const len = pathEls.length;\n for (let i = 0; i < len; i++) {\n const pathEl = pathEls[i];\n if (!pathEl.path) {\n pathEl.createPathProxy();\n }\n if (pathEl.shapeChanged()) {\n pathEl.buildPath(pathEl.path, pathEl.shape, true);\n }\n pathList.push(pathEl.path);\n }\n\n const pathBundle = new Path(opts);\n // Need path proxy.\n pathBundle.createPathProxy();\n pathBundle.buildPath = function (path: PathProxy | CanvasRenderingContext2D) {\n if (isPathProxy(path)) {\n path.appendPath(pathList);\n // Svg and vml renderer don't have context\n const ctx = path.getContext();\n if (ctx) {\n // Path bundle not support percent draw.\n path.rebuildPath(ctx, 1);\n }\n }\n };\n\n return pathBundle;\n}","import Displayable, { DisplayableProps,\n CommonStyleProps,\n DEFAULT_COMMON_STYLE,\n DisplayableStatePropNames,\n DEFAULT_COMMON_ANIMATION_PROPS\n} from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport { ImageLike, MapToType } from '../core/types';\nimport { defaults, createObject } from '../core/util';\nimport { ElementCommonState } from '../Element';\n\nexport interface ImageStyleProps extends CommonStyleProps {\n image?: string | ImageLike\n x?: number\n y?: number\n width?: number\n height?: number\n sx?: number\n sy?: number\n sWidth?: number\n sHeight?: number\n}\n\nexport const DEFAULT_IMAGE_STYLE: CommonStyleProps = defaults({\n x: 0,\n y: 0\n}, DEFAULT_COMMON_STYLE);\n\nexport const DEFAULT_IMAGE_ANIMATION_PROPS: MapToType = {\n style: defaults, MapToType>({\n x: true,\n y: true,\n width: true,\n height: true,\n sx: true,\n sy: true,\n sWidth: true,\n sHeight: true\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n };\n\nexport interface ImageProps extends DisplayableProps {\n style?: ImageStyleProps\n\n onload?: (image: ImageLike) => void\n}\n\nexport type ImageState = Pick & ElementCommonState\n\nfunction isImageLike(source: unknown): source is HTMLImageElement {\n return !!(source\n && typeof source !== 'string'\n // Image source is an image, canvas, video.\n && (source as HTMLImageElement).width && (source as HTMLImageElement).height);\n}\n\nclass ZRImage extends Displayable {\n\n style: ImageStyleProps\n\n // FOR CANVAS RENDERER\n __image: ImageLike\n // FOR SVG RENDERER\n __imageSrc: string\n\n onload: (image: ImageLike) => void\n\n /**\n * Create an image style object with default values in it's prototype.\n * @override\n */\n createStyle(obj?: ImageStyleProps) {\n return createObject(DEFAULT_IMAGE_STYLE, obj);\n }\n\n private _getSize(dim: 'width' | 'height') {\n const style = this.style;\n\n let size = style[dim];\n if (size != null) {\n return size;\n }\n\n const imageSource = isImageLike(style.image)\n ? style.image : this.__image;\n\n if (!imageSource) {\n return 0;\n }\n\n const otherDim = dim === 'width' ? 'height' : 'width';\n let otherDimSize = style[otherDim];\n if (otherDimSize == null) {\n return imageSource[dim];\n }\n else {\n return imageSource[dim] / imageSource[otherDim] * otherDimSize;\n }\n }\n\n getWidth(): number {\n return this._getSize('width');\n }\n\n getHeight(): number {\n return this._getSize('height');\n }\n\n getAnimationStyleProps() {\n return DEFAULT_IMAGE_ANIMATION_PROPS;\n }\n\n getBoundingRect(): BoundingRect {\n const style = this.style;\n if (!this._rect) {\n this._rect = new BoundingRect(\n style.x || 0, style.y || 0, this.getWidth(), this.getHeight()\n );\n }\n return this._rect;\n }\n}\n\nZRImage.prototype.type = 'image';\n\nexport default ZRImage;","/**\n * 圆形\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class CircleShape {\n cx = 0\n cy = 0\n r = 0\n}\n\nexport interface CircleProps extends PathProps {\n shape?: Partial\n}\nclass Circle extends Path {\n\n shape: CircleShape\n\n constructor(opts?: CircleProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new CircleShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: CircleShape, inBundle: boolean) {\n // Better stroking in ShapeBundle\n // Always do it may have performence issue ( fill may be 2x more cost)\n if (inBundle) {\n ctx.moveTo(shape.cx + shape.r, shape.cy);\n }\n // else {\n // if (ctx.allocate && !ctx.data.length) {\n // ctx.allocate(ctx.CMD_MEM_SIZE.A);\n // }\n // }\n // Better stroking in ShapeBundle\n // ctx.moveTo(shape.cx + shape.r, shape.cy);\n ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2);\n }\n};\n\nCircle.prototype.type = 'circle';\n\nexport default Circle;","import PathProxy from '../../core/PathProxy';\n\nexport function buildPath(ctx: CanvasRenderingContext2D | PathProxy, shape: {\n x: number\n y: number\n width: number\n height: number\n r?: number | number[]\n}) {\n let x = shape.x;\n let y = shape.y;\n let width = shape.width;\n let height = shape.height;\n let r = shape.r;\n let r1;\n let r2;\n let r3;\n let r4;\n\n // Convert width and height to positive for better borderRadius\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n\n if (typeof r === 'number') {\n r1 = r2 = r3 = r4 = r;\n }\n else if (r instanceof Array) {\n if (r.length === 1) {\n r1 = r2 = r3 = r4 = r[0];\n }\n else if (r.length === 2) {\n r1 = r3 = r[0];\n r2 = r4 = r[1];\n }\n else if (r.length === 3) {\n r1 = r[0];\n r2 = r4 = r[1];\n r3 = r[2];\n }\n else {\n r1 = r[0];\n r2 = r[1];\n r3 = r[2];\n r4 = r[3];\n }\n }\n else {\n r1 = r2 = r3 = r4 = 0;\n }\n\n let total;\n if (r1 + r2 > width) {\n total = r1 + r2;\n r1 *= width / total;\n r2 *= width / total;\n }\n if (r3 + r4 > width) {\n total = r3 + r4;\n r3 *= width / total;\n r4 *= width / total;\n }\n if (r2 + r3 > height) {\n total = r2 + r3;\n r2 *= height / total;\n r3 *= height / total;\n }\n if (r1 + r4 > height) {\n total = r1 + r4;\n r1 *= height / total;\n r4 *= height / total;\n }\n ctx.moveTo(x + r1, y);\n ctx.lineTo(x + width - r2, y);\n r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n ctx.lineTo(x + width, y + height - r3);\n r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n ctx.lineTo(x + r4, y + height);\n r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n ctx.lineTo(x, y + r1);\n r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n}\n","import { PathStyleProps } from '../Path';\n\n/**\n * Sub-pixel optimize for canvas rendering, prevent from blur\n * when rendering a thin vertical/horizontal line.\n */\n\nconst round = Math.round;\n\ntype LineShape = {\n x1: number\n y1: number\n x2: number\n y2: number\n}\n\ntype RectShape = {\n x: number\n y: number\n width: number\n height: number\n r?: number | number[]\n}\n/**\n * Sub pixel optimize line for canvas\n *\n * @param outputShape The modification will be performed on `outputShape`.\n * `outputShape` and `inputShape` can be the same object.\n * `outputShape` object can be used repeatly, because all of\n * the `x1`, `x2`, `y1`, `y2` will be assigned in this method.\n */\nexport function subPixelOptimizeLine(\n outputShape: Partial,\n inputShape: LineShape,\n style: Pick // DO not optimize when lineWidth is 0\n): LineShape {\n if (!inputShape) {\n return;\n }\n\n const x1 = inputShape.x1;\n const x2 = inputShape.x2;\n const y1 = inputShape.y1;\n const y2 = inputShape.y2;\n\n outputShape.x1 = x1;\n outputShape.x2 = x2;\n outputShape.y1 = y1;\n outputShape.y2 = y2;\n\n const lineWidth = style && style.lineWidth;\n if (!lineWidth) {\n return outputShape as LineShape;\n }\n\n if (round(x1 * 2) === round(x2 * 2)) {\n outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true);\n }\n if (round(y1 * 2) === round(y2 * 2)) {\n outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true);\n }\n\n return outputShape as LineShape;\n}\n\n/**\n * Sub pixel optimize rect for canvas\n *\n * @param outputShape The modification will be performed on `outputShape`.\n * `outputShape` and `inputShape` can be the same object.\n * `outputShape` object can be used repeatly, because all of\n * the `x`, `y`, `width`, `height` will be assigned in this method.\n */\nexport function subPixelOptimizeRect(\n outputShape: Partial,\n inputShape: RectShape,\n style: Pick // DO not optimize when lineWidth is 0\n): RectShape {\n if (!inputShape) {\n return;\n }\n\n const originX = inputShape.x;\n const originY = inputShape.y;\n const originWidth = inputShape.width;\n const originHeight = inputShape.height;\n\n outputShape.x = originX;\n outputShape.y = originY;\n outputShape.width = originWidth;\n outputShape.height = originHeight;\n\n const lineWidth = style && style.lineWidth;\n if (!lineWidth) {\n return outputShape as RectShape;\n }\n\n outputShape.x = subPixelOptimize(originX, lineWidth, true);\n outputShape.y = subPixelOptimize(originY, lineWidth, true);\n outputShape.width = Math.max(\n subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x,\n originWidth === 0 ? 0 : 1\n );\n outputShape.height = Math.max(\n subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y,\n originHeight === 0 ? 0 : 1\n );\n\n return outputShape as RectShape;\n}\n\n/**\n * Sub pixel optimize for canvas\n *\n * @param position Coordinate, such as x, y\n * @param lineWidth If `null`/`undefined`/`0`, do not optimize.\n * @param positiveOrNegative Default false (negative).\n * @return Optimized position.\n */\nexport function subPixelOptimize(\n position: number,\n lineWidth?: number,\n positiveOrNegative?: boolean\n) {\n if (!lineWidth) {\n return position;\n }\n // Assure that (position + lineWidth / 2) is near integer edge,\n // otherwise line will be fuzzy in canvas.\n const doubledPosition = round(position * 2);\n return (doubledPosition + round(lineWidth)) % 2 === 0\n ? doubledPosition / 2\n : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;\n}\n","/**\n * 矩形\n * @module zrender/graphic/shape/Rect\n */\n\nimport Path, { PathProps } from '../Path';\nimport * as roundRectHelper from '../helper/roundRect';\nimport {subPixelOptimizeRect} from '../helper/subPixelOptimize';\n\nexport class RectShape {\n // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4\n // r缩写为1 相当于 [1, 1, 1, 1]\n // r缩写为[1] 相当于 [1, 1, 1, 1]\n // r缩写为[1, 2] 相当于 [1, 2, 1, 2]\n // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2]\n r?: number | number[]\n\n x = 0\n y = 0\n width = 0\n height = 0\n}\n\nexport interface RectProps extends PathProps {\n shape?: Partial\n}\n// Avoid create repeatly.\nconst subPixelOptimizeOutputShape = {};\n\nclass Rect extends Path {\n\n shape: RectShape\n\n constructor(opts?: RectProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new RectShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: RectShape) {\n let x: number;\n let y: number;\n let width: number;\n let height: number;\n\n if (this.subPixelOptimize) {\n const optimizedShape = subPixelOptimizeRect(subPixelOptimizeOutputShape, shape, this.style);\n x = optimizedShape.x;\n y = optimizedShape.y;\n width = optimizedShape.width;\n height = optimizedShape.height;\n optimizedShape.r = shape.r;\n shape = optimizedShape;\n }\n else {\n x = shape.x;\n y = shape.y;\n width = shape.width;\n height = shape.height;\n }\n\n if (!shape.r) {\n ctx.rect(x, y, width, height);\n }\n else {\n roundRectHelper.buildPath(ctx, shape);\n }\n }\n\n isZeroArea() {\n return !this.shape.width || !this.shape.height;\n }\n}\n\nRect.prototype.type = 'rect';\n\nexport default Rect;","/**\n * 椭圆形状\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class EllipseShape {\n cx = 0\n cy = 0\n rx = 0\n ry = 0\n}\n\nexport interface EllipseProps extends PathProps {\n shape?: Partial\n}\nclass Ellipse extends Path {\n\n shape: EllipseShape\n\n constructor(opts?: EllipseProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new EllipseShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: EllipseShape) {\n const k = 0.5522848;\n const x = shape.cx;\n const y = shape.cy;\n const a = shape.rx;\n const b = shape.ry;\n const ox = a * k; // 水平控制点偏移量\n const oy = b * k; // 垂直控制点偏移量\n // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线\n ctx.moveTo(x - a, y);\n ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);\n ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);\n ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);\n ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);\n ctx.closePath();\n }\n}\n\nEllipse.prototype.type = 'ellipse';\n\nexport default Ellipse;","/**\n * 直线\n * @module zrender/graphic/shape/Line\n */\n\nimport Path, { PathProps } from '../Path';\nimport {subPixelOptimizeLine} from '../helper/subPixelOptimize';\nimport { VectorArray } from '../../core/vector';\n\n// Avoid create repeatly.\nconst subPixelOptimizeOutputShape = {};\n\nexport class LineShape {\n // Start point\n x1 = 0\n y1 = 0\n // End point\n x2 = 0\n y2 = 0\n\n percent = 1\n}\n\nexport interface LineProps extends PathProps {\n shape?: Partial\n}\nclass Line extends Path {\n\n shape: LineShape\n\n constructor(opts?: LineProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new LineShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: LineShape) {\n let x1;\n let y1;\n let x2;\n let y2;\n\n if (this.subPixelOptimize) {\n const optimizedShape = subPixelOptimizeLine(\n subPixelOptimizeOutputShape, shape, this.style\n );\n x1 = optimizedShape.x1;\n y1 = optimizedShape.y1;\n x2 = optimizedShape.x2;\n y2 = optimizedShape.y2;\n }\n else {\n x1 = shape.x1;\n y1 = shape.y1;\n x2 = shape.x2;\n y2 = shape.y2;\n }\n\n const percent = shape.percent;\n\n if (percent === 0) {\n return;\n }\n\n ctx.moveTo(x1, y1);\n\n if (percent < 1) {\n x2 = x1 * (1 - percent) + x2 * percent;\n y2 = y1 * (1 - percent) + y2 * percent;\n }\n ctx.lineTo(x2, y2);\n }\n\n /**\n * Get point at percent\n */\n pointAt(p: number): VectorArray {\n const shape = this.shape;\n return [\n shape.x1 * (1 - p) + shape.x2 * p,\n shape.y1 * (1 - p) + shape.y2 * p\n ];\n }\n}\n\nLine.prototype.type = 'line';\nexport default Line;","/**\n * Catmull-Rom spline 插值折线\n */\n\nimport {distance as v2Distance, VectorArray} from '../../core/vector';\n\nfunction interpolate(\n p0: number, p1: number, p2: number, p3: number, t: number, t2: number, t3: number\n) {\n const v0 = (p2 - p0) * 0.5;\n const v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3\n + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n + v0 * t + p1;\n}\n\nexport default function smoothSpline(points: VectorArray[], isLoop?: boolean): VectorArray[] {\n const len = points.length;\n const ret = [];\n\n let distance = 0;\n for (let i = 1; i < len; i++) {\n distance += v2Distance(points[i - 1], points[i]);\n }\n\n let segs = distance / 2;\n segs = segs < len ? len : segs;\n for (let i = 0; i < segs; i++) {\n const pos = i / (segs - 1) * (isLoop ? len : len - 1);\n const idx = Math.floor(pos);\n\n const w = pos - idx;\n\n let p0;\n let p1 = points[idx % len];\n let p2;\n let p3;\n if (!isLoop) {\n p0 = points[idx === 0 ? idx : idx - 1];\n p2 = points[idx > len - 2 ? len - 1 : idx + 1];\n p3 = points[idx > len - 3 ? len - 1 : idx + 2];\n }\n else {\n p0 = points[(idx - 1 + len) % len];\n p2 = points[(idx + 1) % len];\n p3 = points[(idx + 2) % len];\n }\n\n const w2 = w * w;\n const w3 = w * w2;\n\n ret.push([\n interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3),\n interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)\n ]);\n }\n return ret;\n}","/**\n * 贝塞尔平滑曲线\n */\n\nimport {\n min as v2Min,\n max as v2Max,\n scale as v2Scale,\n distance as v2Distance,\n add as v2Add,\n clone as v2Clone,\n sub as v2Sub,\n VectorArray\n} from '../../core/vector';\n\n/**\n * 贝塞尔平滑曲线\n * @param points 线段顶点数组\n * @param smooth 平滑等级, 0-1\n * @param isLoop\n * @param constraint 将计算出来的控制点约束在一个包围盒内\n * 比如 [[0, 0], [100, 100]], 这个包围盒会与\n * 整个折线的包围盒做一个并集用来约束控制点。\n * @param 计算出来的控制点数组\n */\nexport default function smoothBezier(\n points: VectorArray[],\n smooth?: number,\n isLoop?: boolean,\n constraint?: VectorArray[]\n) {\n const cps = [];\n\n const v: VectorArray = [];\n const v1: VectorArray = [];\n const v2: VectorArray = [];\n let prevPoint;\n let nextPoint;\n\n let min;\n let max;\n if (constraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n for (let i = 0, len = points.length; i < len; i++) {\n v2Min(min, min, points[i]);\n v2Max(max, max, points[i]);\n }\n // 与指定的包围盒做并集\n v2Min(min, min, constraint[0]);\n v2Max(max, max, constraint[1]);\n }\n\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n\n if (isLoop) {\n prevPoint = points[i ? i - 1 : len - 1];\n nextPoint = points[(i + 1) % len];\n }\n else {\n if (i === 0 || i === len - 1) {\n cps.push(v2Clone(points[i]));\n continue;\n }\n else {\n prevPoint = points[i - 1];\n nextPoint = points[i + 1];\n }\n }\n\n v2Sub(v, nextPoint, prevPoint);\n\n // use degree to scale the handle length\n v2Scale(v, v, smooth);\n\n let d0 = v2Distance(point, prevPoint);\n let d1 = v2Distance(point, nextPoint);\n const sum = d0 + d1;\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n\n v2Scale(v1, v, -d0);\n v2Scale(v2, v, d1);\n const cp0 = v2Add([], point, v1);\n const cp1 = v2Add([], point, v2);\n if (constraint) {\n v2Max(cp0, cp0, min);\n v2Min(cp0, cp0, max);\n v2Max(cp1, cp1, min);\n v2Min(cp1, cp1, max);\n }\n cps.push(cp0);\n cps.push(cp1);\n }\n\n if (isLoop) {\n cps.push(cps.shift());\n }\n\n return cps;\n}","\nimport smoothSpline from './smoothSpline';\nimport smoothBezier from './smoothBezier';\nimport { VectorArray } from '../../core/vector';\nimport PathProxy from '../../core/PathProxy';\n\nexport function buildPath(\n ctx: CanvasRenderingContext2D | PathProxy,\n shape: {\n points: VectorArray[],\n smooth?: number | 'spline'\n smoothConstraint?: VectorArray[]\n },\n closePath: boolean\n) {\n const smooth = shape.smooth;\n let points = shape.points;\n if (points && points.length >= 2) {\n if (smooth && smooth !== 'spline') {\n const controlPoints = smoothBezier(\n points, smooth, closePath, shape.smoothConstraint\n );\n\n ctx.moveTo(points[0][0], points[0][1]);\n const len = points.length;\n for (let i = 0; i < (closePath ? len : len - 1); i++) {\n const cp1 = controlPoints[i * 2];\n const cp2 = controlPoints[i * 2 + 1];\n const p = points[(i + 1) % len];\n ctx.bezierCurveTo(\n cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]\n );\n }\n }\n else {\n if (smooth === 'spline') {\n points = smoothSpline(points, closePath);\n }\n\n ctx.moveTo(points[0][0], points[0][1]);\n for (let i = 1, l = points.length; i < l; i++) {\n ctx.lineTo(points[i][0], points[i][1]);\n }\n }\n\n closePath && ctx.closePath();\n }\n}\n","/**\n * 多边形\n * @module zrender/shape/Polygon\n */\n\nimport Path, { PathProps } from '../Path';\nimport * as polyHelper from '../helper/poly';\nimport { VectorArray } from '../../core/vector';\n\nexport class PolygonShape {\n points: VectorArray[] = null\n smooth?: number | 'spline' = 0\n smoothConstraint?: VectorArray[] = null\n}\n\nexport interface PolygonProps extends PathProps {\n shape?: Partial\n}\nclass Polygon extends Path {\n\n shape: PolygonShape\n\n constructor(opts?: PolygonProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new PolygonShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: PolygonShape) {\n polyHelper.buildPath(ctx, shape, true);\n }\n};\n\nPolygon.prototype.type = 'polygon';\n\nexport default Polygon;","/**\n * @module zrender/graphic/shape/Polyline\n */\n\nimport Path, { PathProps } from '../Path';\nimport * as polyHelper from '../helper/poly';\nimport { VectorArray } from '../../core/vector';\n\nexport class PolylineShape {\n points: VectorArray[] = null\n // Percent of displayed polyline. For animating purpose\n percent?: number = 1\n smooth?: number | 'spline' = 0\n smoothConstraint?: VectorArray[] = null\n}\n\nexport interface PolylineProps extends PathProps {\n shape?: Partial\n}\nclass Polyline extends Path {\n\n shape: PolylineShape\n\n constructor(opts?: PolylineProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new PolylineShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: PolylineShape) {\n polyHelper.buildPath(ctx, shape, false);\n }\n}\n\nPolyline.prototype.type = 'polyline';\nexport default Polyline;","// TODO Should GradientObject been LinearGradientObject | RadialGradientObject\nexport interface GradientObject {\n\n id?: number\n\n type: string\n\n colorStops: GradientColorStop[]\n\n global: boolean\n}\n\nexport interface InnerGradientObject extends GradientObject {\n __canvasGradient: CanvasGradient\n}\n\nexport interface GradientColorStop {\n offset: number\n color: string\n}\n\nexport default class Gradient {\n\n id?: number\n\n type: string\n\n colorStops: GradientColorStop[]\n\n global: boolean\n\n constructor(colorStops: GradientColorStop[]) {\n this.colorStops = colorStops || [];\n }\n\n addColorStop(offset: number, color: string) {\n this.colorStops.push({\n offset,\n color\n });\n }\n}","import Gradient, {GradientObject, GradientColorStop} from './Gradient';\n\nexport interface LinearGradientObject extends GradientObject {\n type: 'linear'\n\n x: number\n y: number\n x2: number\n y2: number\n}\n/**\n * x, y, x2, y2 are all percent from 0 to 1 when globalCoord is false\n */\n\nexport default class LinearGradient extends Gradient {\n\n type: 'linear'\n\n x: number\n y: number\n x2: number\n y2: number\n\n constructor(\n x: number, y: number, x2: number, y2: number,\n colorStops?: GradientColorStop[], globalCoord?: boolean\n ) {\n\n super(colorStops);\n\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {type: 'linear', colorStops: ...}`, where\n // this constructor will not be called.\n\n this.x = x == null ? 0 : x;\n\n this.y = y == null ? 0 : y;\n\n this.x2 = x2 == null ? 1 : x2;\n\n this.y2 = y2 == null ? 0 : y2;\n\n // Can be cloned\n this.type = 'linear';\n\n // If use global coord\n this.global = globalCoord || false;\n }\n};\n","import Gradient, {GradientColorStop, GradientObject} from './Gradient';\n\nexport interface RadialGradientObject extends GradientObject {\n type: 'radial'\n\n x: number\n y: number\n r: number\n}\n/**\n * x, y, r are all percent from 0 to 1 when globalCoord is false\n */\nclass RadialGradient extends Gradient {\n\n type: 'radial'\n\n x: number\n y: number\n r: number\n\n constructor(\n x: number, y: number, r: number,\n colorStops?: GradientColorStop[], globalCoord?: boolean\n ) {\n super(colorStops);\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {type: 'radial', colorStops: ...}`, where\n // this constructor will not be called.\n this.x = x == null ? 0.5 : x;\n\n this.y = y == null ? 0.5 : y;\n\n this.r = r == null ? 0.5 : r;\n\n // Can be cloned\n this.type = 'radial';\n\n // If use global coord\n this.global = globalCoord || false;\n }\n}\n\nexport default RadialGradient;","import Displayable, { DisplayableProps, DisplayableStatePropNames } from './Displayable';\nimport { getBoundingRect, DEFAULT_FONT } from '../contain/text';\nimport BoundingRect from '../core/BoundingRect';\nimport { PathStyleProps, DEFAULT_PATH_STYLE } from './Path';\nimport { createObject, defaults } from '../core/util';\nimport { TextAlign, TextVerticalAlign } from '../core/types';\n\nexport interface TSpanStyleProps extends PathStyleProps {\n\n x?: number\n y?: number\n\n // TODO Text is assigned inside zrender\n text?: string\n\n font?: string\n\n textAlign?: CanvasTextAlign\n\n textBaseline?: CanvasTextBaseline\n}\n\nexport const DEFAULT_TSPAN_STYLE: TSpanStyleProps = defaults({\n strokeFirst: true,\n font: DEFAULT_FONT,\n x: 0,\n y: 0,\n textAlign: 'left',\n textBaseline: 'top',\n miterLimit: 2\n} as TSpanStyleProps, DEFAULT_PATH_STYLE);\n\n\nexport interface TSpanProps extends DisplayableProps {\n style?: TSpanStyleProps\n}\n\nexport type TSpanState = Pick\n\nclass TSpan extends Displayable {\n\n style: TSpanStyleProps\n\n hasStroke() {\n const style = this.style;\n const stroke = style.stroke;\n return stroke != null && stroke !== 'none' && style.lineWidth > 0;\n }\n\n hasFill() {\n const style = this.style;\n const fill = style.fill;\n return fill != null && fill !== 'none';\n }\n\n /**\n * Create an image style object with default values in it's prototype.\n * @override\n */\n createStyle(obj?: TSpanStyleProps) {\n return createObject(DEFAULT_TSPAN_STYLE, obj);\n }\n\n /**\n * Set bounding rect calculated from Text\n * For reducing time of calculating bounding rect.\n */\n setBoundingRect(rect: BoundingRect) {\n this._rect = rect;\n }\n\n getBoundingRect(): BoundingRect {\n const style = this.style;\n\n if (!this._rect) {\n let text = style.text;\n text != null ? (text += '') : (text = '');\n\n const rect = getBoundingRect(\n text,\n style.font,\n style.textAlign as TextAlign,\n style.textBaseline as TextVerticalAlign\n );\n\n rect.x += style.x || 0;\n rect.y += style.y || 0;\n\n if (this.hasStroke()) {\n const w = style.lineWidth;\n rect.x -= w / 2;\n rect.y -= w / 2;\n rect.width += w;\n rect.height += w;\n }\n\n this._rect = rect;\n }\n\n return this._rect;\n }\n\n protected static initDefaultProps = (function () {\n const tspanProto = TSpan.prototype;\n // TODO Calculate tolerance smarter\n tspanProto.dirtyRectTolerance = 10;\n })()\n}\n\nTSpan.prototype.type = 'tspan';\n\nexport default TSpan;","import { isString } from '../core/util';\n\n/**\n * For big svg string, this method might be time consuming.\n */\nexport function parseXML(svg: Document | string | SVGElement): SVGElement {\n if (isString(svg)) {\n const parser = new DOMParser();\n svg = parser.parseFromString(svg, 'text/xml');\n }\n let svgNode: Node = svg;\n // Document node. If using $.get, doc node may be input.\n if (svgNode.nodeType === 9) {\n svgNode = svgNode.firstChild;\n }\n // nodeName of is also 'svg'.\n while (svgNode.nodeName.toLowerCase() !== 'svg' || svgNode.nodeType !== 1) {\n svgNode = svgNode.nextSibling;\n }\n\n return svgNode as SVGElement;\n}\n","import Group from '../graphic/Group';\nimport ZRImage from '../graphic/Image';\nimport Circle from '../graphic/shape/Circle';\nimport Rect from '../graphic/shape/Rect';\nimport Ellipse from '../graphic/shape/Ellipse';\nimport Line from '../graphic/shape/Line';\nimport Polygon from '../graphic/shape/Polygon';\nimport Polyline from '../graphic/shape/Polyline';\nimport * as matrix from '../core/matrix';\nimport { createFromString } from './path';\nimport { defaults, trim, each, map, keys, hasOwn } from '../core/util';\nimport Displayable from '../graphic/Displayable';\nimport Element from '../Element';\nimport { RectLike } from '../core/BoundingRect';\nimport { Dictionary } from '../core/types';\nimport { PatternObject } from '../graphic/Pattern';\nimport LinearGradient, { LinearGradientObject } from '../graphic/LinearGradient';\nimport RadialGradient, { RadialGradientObject } from '../graphic/RadialGradient';\nimport Gradient, { GradientObject } from '../graphic/Gradient';\nimport TSpan, { TSpanStyleProps } from '../graphic/TSpan';\nimport { parseXML } from './parseXML';\n\n\ninterface SVGParserOption {\n // Default width if svg width not specified or is a percent value.\n width?: number;\n // Default height if svg height not specified or is a percent value.\n height?: number;\n ignoreViewBox?: boolean;\n ignoreRootClip?: boolean;\n}\n\nexport interface SVGParserResult {\n // Group, The root of the the result tree of zrender shapes\n root: Group;\n // number, the viewport width of the SVG\n width: number;\n // number, the viewport height of the SVG\n height: number;\n // {x, y, width, height}, the declared viewBox rect of the SVG, if exists\n viewBoxRect: RectLike;\n // the {scale, position} calculated by viewBox and viewport, is exists\n viewBoxTransform: {\n x: number;\n y: number;\n scale: number;\n };\n named: SVGParserResultNamedItem[];\n}\nexport interface SVGParserResultNamedItem {\n name: string;\n // If a tag has no name attribute but its ancester is named,\n // `namedFrom` is set to the named item of the ancester .\n // Otherwise null/undefined\n namedFrom: SVGParserResultNamedItem;\n svgNodeTagLower: SVGNodeTagLower;\n el: Element;\n};\n\nexport type SVGNodeTagLower =\n 'g' | 'rect' | 'circle' | 'line' | 'ellipse' | 'polygon'\n | 'polyline' | 'image' | 'text' | 'tspan' | 'path' | 'defs' | 'switch';\n\n\ntype DefsId = string;\ntype DefsMap = { [id in DefsId]: LinearGradientObject | RadialGradientObject | PatternObject };\ntype DefsUsePending = [Displayable, 'fill' | 'stroke', DefsId][];\n\ntype ElementExtended = Element & {\n __inheritedStyle?: InheritedStyleByZRKey;\n __selfStyle?: SelfStyleByZRKey;\n}\ntype DisplayableExtended = Displayable & {\n __inheritedStyle?: InheritedStyleByZRKey;\n __selfStyle?: SelfStyleByZRKey;\n}\n\ntype TextStyleOptionExtended = TSpanStyleProps & {\n fontSize: number;\n fontFamily: string;\n fontWeight: string;\n fontStyle: string;\n}\nlet nodeParsers: {[name in SVGNodeTagLower]?: (\n this: SVGParser, xmlNode: SVGElement, parentGroup: Group\n) => Element};\n\ntype InheritedStyleByZRKey = {[name in InheritableStyleZRKey]?: string};\ntype InheritableStyleZRKey =\n typeof INHERITABLE_STYLE_ATTRIBUTES_MAP[keyof typeof INHERITABLE_STYLE_ATTRIBUTES_MAP];\nconst INHERITABLE_STYLE_ATTRIBUTES_MAP = {\n 'fill': 'fill',\n 'stroke': 'stroke',\n 'stroke-width': 'lineWidth',\n 'opacity': 'opacity',\n 'fill-opacity': 'fillOpacity',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-dasharray': 'lineDash',\n 'stroke-dashoffset': 'lineDashOffset',\n 'stroke-linecap': 'lineCap',\n 'stroke-linejoin': 'lineJoin',\n 'stroke-miterlimit': 'miterLimit',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'text-anchor': 'textAlign',\n 'visibility': 'visibility',\n 'display': 'display'\n} as const;\nconst INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS = keys(INHERITABLE_STYLE_ATTRIBUTES_MAP);\n\ntype SelfStyleByZRKey = {[name in SelfStyleZRKey]?: string};\ntype SelfStyleZRKey =\n typeof SELF_STYLE_ATTRIBUTES_MAP[keyof typeof SELF_STYLE_ATTRIBUTES_MAP];\nconst SELF_STYLE_ATTRIBUTES_MAP = {\n 'alignment-baseline': 'textBaseline',\n 'stop-color': 'stopColor'\n};\nconst SELF_STYLE_ATTRIBUTES_MAP_KEYS = keys(SELF_STYLE_ATTRIBUTES_MAP);\n\n\nclass SVGParser {\n\n private _defs: DefsMap = {};\n // The use of can be in front of declared.\n // So save them temporarily in `_defsUsePending`.\n private _defsUsePending: DefsUsePending;\n private _root: Group = null;\n\n private _textX: number;\n private _textY: number;\n\n parse(xml: string | Document | SVGElement, opt: SVGParserOption): SVGParserResult {\n opt = opt || {};\n\n const svg = parseXML(xml);\n\n if (!svg) {\n throw new Error('Illegal svg');\n }\n\n this._defsUsePending = [];\n let root = new Group();\n this._root = root;\n const named: SVGParserResult['named'] = [];\n // parse view port\n const viewBox = svg.getAttribute('viewBox') || '';\n\n // If width/height not specified, means \"100%\" of `opt.width/height`.\n // TODO: Other percent value not supported yet.\n let width = parseFloat((svg.getAttribute('width') || opt.width) as string);\n let height = parseFloat((svg.getAttribute('height') || opt.height) as string);\n // If width/height not specified, set as null for output.\n isNaN(width) && (width = null);\n isNaN(height) && (height = null);\n\n // Apply inline style on svg element.\n parseAttributes(svg, root, null, true, false);\n\n let child = svg.firstChild as SVGElement;\n while (child) {\n this._parseNode(child, root, named, null, false, false);\n child = child.nextSibling as SVGElement;\n }\n\n applyDefs(this._defs, this._defsUsePending);\n this._defsUsePending = [];\n\n let viewBoxRect;\n let viewBoxTransform;\n\n if (viewBox) {\n const viewBoxArr = splitNumberSequence(viewBox);\n // Some invalid case like viewBox: 'none'.\n if (viewBoxArr.length >= 4) {\n viewBoxRect = {\n x: parseFloat((viewBoxArr[0] || 0) as string),\n y: parseFloat((viewBoxArr[1] || 0) as string),\n width: parseFloat(viewBoxArr[2]),\n height: parseFloat(viewBoxArr[3])\n };\n }\n }\n\n if (viewBoxRect && width != null && height != null) {\n viewBoxTransform = makeViewBoxTransform(viewBoxRect, { x: 0, y: 0, width: width, height: height });\n\n if (!opt.ignoreViewBox) {\n // If set transform on the output group, it probably bring trouble when\n // some users only intend to show the clipped content inside the viewBox,\n // but not intend to transform the output group. So we keep the output\n // group no transform. If the user intend to use the viewBox as a\n // camera, just set `opt.ignoreViewBox` as `true` and set transfrom\n // manually according to the viewBox info in the output of this method.\n const elRoot = root;\n root = new Group();\n root.add(elRoot);\n elRoot.scaleX = elRoot.scaleY = viewBoxTransform.scale;\n elRoot.x = viewBoxTransform.x;\n elRoot.y = viewBoxTransform.y;\n }\n }\n\n // Some shapes might be overflow the viewport, which should be\n // clipped despite whether the viewBox is used, as the SVG does.\n if (!opt.ignoreRootClip && width != null && height != null) {\n root.setClipPath(new Rect({\n shape: {x: 0, y: 0, width: width, height: height}\n }));\n }\n\n // Set width/height on group just for output the viewport size.\n return {\n root: root,\n width: width,\n height: height,\n viewBoxRect: viewBoxRect,\n viewBoxTransform: viewBoxTransform,\n named: named\n };\n }\n\n private _parseNode(\n xmlNode: SVGElement,\n parentGroup: Group,\n named: SVGParserResultNamedItem[],\n namedFrom: SVGParserResultNamedItem['namedFrom'],\n isInDefs: boolean,\n isInText: boolean\n ): void {\n\n const nodeName = xmlNode.nodeName.toLowerCase() as SVGNodeTagLower;\n\n // TODO:\n // support in svg, where nodeName is 'style',\n // CSS classes is defined globally wherever the style tags are declared.\n\n let el;\n let namedFromForSub = namedFrom;\n\n if (nodeName === 'defs') {\n isInDefs = true;\n }\n if (nodeName === 'text') {\n isInText = true;\n }\n\n if (nodeName === 'defs' || nodeName === 'switch') {\n // Just make displayable. Do not support\n // the full feature of it.\n el = parentGroup;\n }\n else {\n // In , elments will not be rendered.\n // TODO:\n // do not support elements in yet, until requirement come.\n // other graphic elements can also be in and referenced by\n // \n // multiple times\n if (!isInDefs) {\n const parser = nodeParsers[nodeName];\n if (parser && hasOwn(nodeParsers, nodeName)) {\n\n el = parser.call(this, xmlNode, parentGroup);\n\n // Do not support empty string;\n const nameAttr = xmlNode.getAttribute('name');\n if (nameAttr) {\n const newNamed: SVGParserResultNamedItem = {\n name: nameAttr,\n namedFrom: null,\n svgNodeTagLower: nodeName,\n el: el\n };\n named.push(newNamed);\n if (nodeName === 'g') {\n namedFromForSub = newNamed;\n }\n }\n else if (namedFrom) {\n named.push({\n name: namedFrom.name,\n namedFrom: namedFrom,\n svgNodeTagLower: nodeName,\n el: el\n });\n }\n\n parentGroup.add(el);\n }\n }\n\n // Whether gradients/patterns are declared in or not,\n // they all work.\n const parser = paintServerParsers[nodeName];\n if (parser && hasOwn(paintServerParsers, nodeName)) {\n const def = parser.call(this, xmlNode);\n const id = xmlNode.getAttribute('id');\n if (id) {\n this._defs[id] = def;\n }\n }\n }\n\n // If xmlNode is , , , , ,\n // el will be a group, and traverse the children.\n if (el && el.isGroup) {\n let child = xmlNode.firstChild as SVGElement;\n while (child) {\n if (child.nodeType === 1) {\n this._parseNode(child, el as Group, named, namedFromForSub, isInDefs, isInText);\n }\n // Is plain text rather than a tagged node.\n else if (child.nodeType === 3 && isInText) {\n this._parseText(child, el as Group);\n }\n child = child.nextSibling as SVGElement;\n }\n }\n\n }\n\n private _parseText(xmlNode: SVGElement, parentGroup: Group): TSpan {\n const text = new TSpan({\n style: {\n text: xmlNode.textContent\n },\n silent: true,\n x: this._textX || 0,\n y: this._textY || 0\n });\n\n inheritStyle(parentGroup, text);\n\n parseAttributes(xmlNode, text, this._defsUsePending, false, false);\n\n applyTextAlignment(text, parentGroup);\n\n const textStyle = text.style as TextStyleOptionExtended;\n const fontSize = textStyle.fontSize;\n if (fontSize && fontSize < 9) {\n // PENDING\n textStyle.fontSize = 9;\n text.scaleX *= fontSize / 9;\n text.scaleY *= fontSize / 9;\n }\n\n const font = (textStyle.fontSize || textStyle.fontFamily) && [\n textStyle.fontStyle,\n textStyle.fontWeight,\n (textStyle.fontSize || 12) + 'px',\n // If font properties are defined, `fontFamily` should not be ignored.\n textStyle.fontFamily || 'sans-serif'\n ].join(' ');\n // Make font\n textStyle.font = font;\n\n const rect = text.getBoundingRect();\n this._textX += rect.width;\n\n parentGroup.add(text);\n\n return text;\n }\n\n static internalField = (function () {\n\n nodeParsers = {\n 'g': function (xmlNode, parentGroup) {\n const g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defsUsePending, false, false);\n\n return g;\n },\n 'rect': function (xmlNode, parentGroup) {\n const rect = new Rect();\n inheritStyle(parentGroup, rect);\n parseAttributes(xmlNode, rect, this._defsUsePending, false, false);\n\n rect.setShape({\n x: parseFloat(xmlNode.getAttribute('x') || '0'),\n y: parseFloat(xmlNode.getAttribute('y') || '0'),\n width: parseFloat(xmlNode.getAttribute('width') || '0'),\n height: parseFloat(xmlNode.getAttribute('height') || '0')\n });\n\n rect.silent = true;\n\n return rect;\n },\n 'circle': function (xmlNode, parentGroup) {\n const circle = new Circle();\n inheritStyle(parentGroup, circle);\n parseAttributes(xmlNode, circle, this._defsUsePending, false, false);\n\n circle.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || '0'),\n cy: parseFloat(xmlNode.getAttribute('cy') || '0'),\n r: parseFloat(xmlNode.getAttribute('r') || '0')\n });\n\n circle.silent = true;\n\n return circle;\n },\n 'line': function (xmlNode, parentGroup) {\n const line = new Line();\n inheritStyle(parentGroup, line);\n parseAttributes(xmlNode, line, this._defsUsePending, false, false);\n\n line.setShape({\n x1: parseFloat(xmlNode.getAttribute('x1') || '0'),\n y1: parseFloat(xmlNode.getAttribute('y1') || '0'),\n x2: parseFloat(xmlNode.getAttribute('x2') || '0'),\n y2: parseFloat(xmlNode.getAttribute('y2') || '0')\n });\n\n line.silent = true;\n\n return line;\n },\n 'ellipse': function (xmlNode, parentGroup) {\n const ellipse = new Ellipse();\n inheritStyle(parentGroup, ellipse);\n parseAttributes(xmlNode, ellipse, this._defsUsePending, false, false);\n\n ellipse.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || '0'),\n cy: parseFloat(xmlNode.getAttribute('cy') || '0'),\n rx: parseFloat(xmlNode.getAttribute('rx') || '0'),\n ry: parseFloat(xmlNode.getAttribute('ry') || '0')\n });\n\n ellipse.silent = true;\n\n return ellipse;\n },\n 'polygon': function (xmlNode, parentGroup) {\n const pointsStr = xmlNode.getAttribute('points');\n let pointsArr;\n if (pointsStr) {\n pointsArr = parsePoints(pointsStr);\n }\n const polygon = new Polygon({\n shape: {\n points: pointsArr || []\n },\n silent: true\n });\n\n inheritStyle(parentGroup, polygon);\n parseAttributes(xmlNode, polygon, this._defsUsePending, false, false);\n\n return polygon;\n },\n 'polyline': function (xmlNode, parentGroup) {\n const pointsStr = xmlNode.getAttribute('points');\n let pointsArr;\n if (pointsStr) {\n pointsArr = parsePoints(pointsStr);\n }\n const polyline = new Polyline({\n shape: {\n points: pointsArr || []\n },\n silent: true\n });\n\n inheritStyle(parentGroup, polyline);\n parseAttributes(xmlNode, polyline, this._defsUsePending, false, false);\n\n return polyline;\n },\n 'image': function (xmlNode, parentGroup) {\n const img = new ZRImage();\n inheritStyle(parentGroup, img);\n parseAttributes(xmlNode, img, this._defsUsePending, false, false);\n\n img.setStyle({\n image: xmlNode.getAttribute('xlink:href'),\n x: +xmlNode.getAttribute('x'),\n y: +xmlNode.getAttribute('y'),\n width: +xmlNode.getAttribute('width'),\n height: +xmlNode.getAttribute('height')\n });\n img.silent = true;\n\n return img;\n },\n 'text': function (xmlNode, parentGroup) {\n const x = xmlNode.getAttribute('x') || '0';\n const y = xmlNode.getAttribute('y') || '0';\n const dx = xmlNode.getAttribute('dx') || '0';\n const dy = xmlNode.getAttribute('dy') || '0';\n\n this._textX = parseFloat(x) + parseFloat(dx);\n this._textY = parseFloat(y) + parseFloat(dy);\n\n const g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defsUsePending, false, true);\n\n return g;\n },\n 'tspan': function (xmlNode, parentGroup) {\n const x = xmlNode.getAttribute('x');\n const y = xmlNode.getAttribute('y');\n if (x != null) {\n // new offset x\n this._textX = parseFloat(x);\n }\n if (y != null) {\n // new offset y\n this._textY = parseFloat(y);\n }\n const dx = xmlNode.getAttribute('dx') || '0';\n const dy = xmlNode.getAttribute('dy') || '0';\n\n const g = new Group();\n\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defsUsePending, false, true);\n\n this._textX += parseFloat(dx);\n this._textY += parseFloat(dy);\n\n return g;\n },\n 'path': function (xmlNode, parentGroup) {\n // TODO svg fill rule\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule\n // path.style.globalCompositeOperation = 'xor';\n const d = xmlNode.getAttribute('d') || '';\n\n // Performance sensitive.\n\n const path = createFromString(d);\n\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defsUsePending, false, false);\n\n path.silent = true;\n\n return path;\n }\n };\n\n\n })();\n}\n\nconst paintServerParsers: Dictionary<(xmlNode: SVGElement) => any> = {\n\n 'lineargradient': function (xmlNode: SVGElement) {\n // TODO:\n // Support that x1,y1,x2,y2 are not declared lineargradient but in node.\n const x1 = parseInt(xmlNode.getAttribute('x1') || '0', 10);\n const y1 = parseInt(xmlNode.getAttribute('y1') || '0', 10);\n const x2 = parseInt(xmlNode.getAttribute('x2') || '10', 10);\n const y2 = parseInt(xmlNode.getAttribute('y2') || '0', 10);\n\n const gradient = new LinearGradient(x1, y1, x2, y2);\n\n parsePaintServerUnit(xmlNode, gradient);\n\n parseGradientColorStops(xmlNode, gradient);\n\n return gradient;\n },\n\n 'radialgradient': function (xmlNode) {\n // TODO:\n // Support that x1,y1,x2,y2 are not declared radialgradient but in node.\n // TODO:\n // Support fx, fy, fr.\n const cx = parseInt(xmlNode.getAttribute('cx') || '0', 10);\n const cy = parseInt(xmlNode.getAttribute('cy') || '0', 10);\n const r = parseInt(xmlNode.getAttribute('r') || '0', 10);\n\n const gradient = new RadialGradient(cx, cy, r);\n\n parsePaintServerUnit(xmlNode, gradient);\n\n parseGradientColorStops(xmlNode, gradient);\n\n return gradient;\n }\n\n // TODO\n // 'pattern': function (xmlNode: SVGElement) {\n // }\n};\n\nfunction parsePaintServerUnit(xmlNode: SVGElement, gradient: Gradient) {\n const gradientUnits = xmlNode.getAttribute('gradientUnits');\n if (gradientUnits === 'userSpaceOnUse') {\n gradient.global = true;\n }\n}\n\nfunction parseGradientColorStops(xmlNode: SVGElement, gradient: GradientObject): void {\n\n let stop = xmlNode.firstChild as SVGStopElement;\n\n while (stop) {\n if (stop.nodeType === 1\n // there might be some other irrelevant tags used by editor.\n && stop.nodeName.toLocaleLowerCase() === 'stop'\n ) {\n const offsetStr = stop.getAttribute('offset');\n let offset: number;\n if (offsetStr && offsetStr.indexOf('%') > 0) { // percentage\n offset = parseInt(offsetStr, 10) / 100;\n }\n else if (offsetStr) { // number from 0 to 1\n offset = parseFloat(offsetStr);\n }\n else {\n offset = 0;\n }\n\n // has higher priority than\n // \n const styleVals = {} as Dictionary;\n parseInlineStyle(stop, styleVals, styleVals);\n const stopColor = styleVals.stopColor\n || stop.getAttribute('stop-color')\n || '#000000';\n\n gradient.colorStops.push({\n offset: offset,\n color: stopColor\n });\n }\n stop = stop.nextSibling as SVGStopElement;\n }\n}\n\nfunction inheritStyle(parent: Element, child: Element): void {\n if (parent && (parent as ElementExtended).__inheritedStyle) {\n if (!(child as ElementExtended).__inheritedStyle) {\n (child as ElementExtended).__inheritedStyle = {};\n }\n defaults((child as ElementExtended).__inheritedStyle, (parent as ElementExtended).__inheritedStyle);\n }\n}\n\nfunction parsePoints(pointsString: string): number[][] {\n const list = splitNumberSequence(pointsString);\n const points = [];\n\n for (let i = 0; i < list.length; i += 2) {\n const x = parseFloat(list[i]);\n const y = parseFloat(list[i + 1]);\n points.push([x, y]);\n }\n return points;\n}\n\nfunction parseAttributes(\n xmlNode: SVGElement,\n el: Element,\n defsUsePending: DefsUsePending,\n onlyInlineStyle: boolean,\n isTextGroup: boolean\n): void {\n const disp = el as DisplayableExtended;\n const inheritedStyle = disp.__inheritedStyle = disp.__inheritedStyle || {};\n const selfStyle: SelfStyleByZRKey = {};\n\n // TODO Shadow\n if (xmlNode.nodeType === 1) {\n parseTransformAttribute(xmlNode, el);\n\n parseInlineStyle(xmlNode, inheritedStyle, selfStyle);\n\n if (!onlyInlineStyle) {\n parseAttributeStyle(xmlNode, inheritedStyle, selfStyle);\n }\n }\n\n disp.style = disp.style || {};\n\n if (inheritedStyle.fill != null) {\n disp.style.fill = getFillStrokeStyle(disp, 'fill', inheritedStyle.fill, defsUsePending);\n }\n if (inheritedStyle.stroke != null) {\n disp.style.stroke = getFillStrokeStyle(disp, 'stroke', inheritedStyle.stroke, defsUsePending);\n }\n\n each([\n 'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'\n ] as const, function (propName) {\n if (inheritedStyle[propName] != null) {\n disp.style[propName] = parseFloat(inheritedStyle[propName]);\n }\n });\n\n each([\n 'lineDashOffset', 'lineCap', 'lineJoin', 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign'\n ] as const, function (propName) {\n if (inheritedStyle[propName] != null) {\n disp.style[propName] = inheritedStyle[propName];\n }\n });\n\n // Because selfStyle only support textBaseline, so only text group need it.\n // in other cases selfStyle can be released.\n if (isTextGroup) {\n disp.__selfStyle = selfStyle;\n }\n\n if (inheritedStyle.lineDash) {\n disp.style.lineDash = map(splitNumberSequence(inheritedStyle.lineDash), function (str) {\n return parseFloat(str);\n });\n }\n\n if (inheritedStyle.visibility === 'hidden' || inheritedStyle.visibility === 'collapse') {\n disp.invisible = true;\n }\n\n if (inheritedStyle.display === 'none') {\n disp.ignore = true;\n }\n}\n\nfunction applyTextAlignment(\n text: TSpan,\n parentGroup: Group\n): void {\n const parentSelfStyle = (parentGroup as ElementExtended).__selfStyle;\n if (parentSelfStyle) {\n const textBaseline = parentSelfStyle.textBaseline;\n let zrTextBaseline = textBaseline as CanvasTextBaseline;\n if (!textBaseline || textBaseline === 'auto') {\n // FIXME: 'auto' means the value is the dominant-baseline of the script to\n // which the character belongs - i.e., use the dominant-baseline of the parent.\n zrTextBaseline = 'alphabetic';\n }\n else if (textBaseline === 'baseline') {\n zrTextBaseline = 'alphabetic';\n }\n else if (textBaseline === 'before-edge' || textBaseline === 'text-before-edge') {\n zrTextBaseline = 'top';\n }\n else if (textBaseline === 'after-edge' || textBaseline === 'text-after-edge') {\n zrTextBaseline = 'bottom';\n }\n else if (textBaseline === 'central' || textBaseline === 'mathematical') {\n zrTextBaseline = 'middle';\n }\n text.style.textBaseline = zrTextBaseline;\n }\n\n const parentInheritedStyle = (parentGroup as ElementExtended).__inheritedStyle;\n if (parentInheritedStyle) {\n // PENDING:\n // canvas `direction` is an experimental attribute.\n // so we do not support SVG direction \"rtl\" for text-anchor yet.\n const textAlign = parentInheritedStyle.textAlign;\n let zrTextAlign = textAlign as CanvasTextAlign;\n if (textAlign) {\n if (textAlign === 'middle') {\n zrTextAlign = 'center';\n }\n text.style.textAlign = zrTextAlign;\n }\n }\n}\n\n// Support `fill:url(#someId)`.\nconst urlRegex = /^url\\(\\s*#(.*?)\\)/;\nfunction getFillStrokeStyle(\n el: Displayable,\n method: 'fill' | 'stroke',\n str: string,\n defsUsePending: DefsUsePending\n): string {\n const urlMatch = str && str.match(urlRegex);\n if (urlMatch) {\n const url = trim(urlMatch[1]);\n defsUsePending.push([el, method, url]);\n return;\n }\n // SVG fill and stroke can be 'none'.\n if (str === 'none') {\n str = null;\n }\n return str;\n}\n\nfunction applyDefs(\n defs: DefsMap,\n defsUsePending: DefsUsePending\n): void {\n for (let i = 0; i < defsUsePending.length; i++) {\n const item = defsUsePending[i];\n item[0].style[item[1]] = defs[item[2]];\n }\n}\n\n// value can be like:\n// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983',\n// 'l-.5E1,54', '121-23-44-11' (no delimiter)\n// PENDING: here continuous commas are treat as one comma, but the\n// browser SVG parser treats this by printing error.\nconst numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\nfunction splitNumberSequence(rawStr: string): string[] {\n return rawStr.match(numberReg) || [];\n}\n// Most of the values can be separated by comma and/or white space.\n// const DILIMITER_REG = /[\\s,]+/;\n\n\nconst transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\\(([\\-\\s0-9\\.eE,]*)\\)/g;\nconst DEGREE_TO_ANGLE = Math.PI / 180;\n\nfunction parseTransformAttribute(xmlNode: SVGElement, node: Element): void {\n let transform = xmlNode.getAttribute('transform');\n if (transform) {\n transform = transform.replace(/,/g, ' ');\n const transformOps: string[] = [];\n let mt = null;\n transform.replace(transformRegex, function (str: string, type: string, value: string) {\n transformOps.push(type, value);\n return '';\n });\n\n for (let i = transformOps.length - 1; i > 0; i -= 2) {\n const value = transformOps[i];\n const type = transformOps[i - 1];\n const valueArr: string[] = splitNumberSequence(value);\n mt = mt || matrix.create();\n switch (type) {\n case 'translate':\n matrix.translate(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || '0')]);\n break;\n case 'scale':\n matrix.scale(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || valueArr[0])]);\n break;\n case 'rotate':\n // TODO: zrender use different hand in coordinate system.\n matrix.rotate(mt, mt, -parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n break;\n case 'skewX':\n const sx = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n matrix.mul(mt, [1, 0, sx, 1, 0, 0], mt);\n break;\n case 'skewY':\n const sy = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n matrix.mul(mt, [1, sy, 0, 1, 0, 0], mt);\n break;\n case 'matrix':\n mt[0] = parseFloat(valueArr[0]);\n mt[1] = parseFloat(valueArr[1]);\n mt[2] = parseFloat(valueArr[2]);\n mt[3] = parseFloat(valueArr[3]);\n mt[4] = parseFloat(valueArr[4]);\n mt[5] = parseFloat(valueArr[5]);\n break;\n }\n }\n node.setLocalTransform(mt);\n }\n}\n\n// Value may contain space.\nconst styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\nfunction parseInlineStyle(\n xmlNode: SVGElement,\n inheritableStyleResult: Dictionary,\n selfStyleResult: Dictionary\n): void {\n const style = xmlNode.getAttribute('style');\n\n if (!style) {\n return;\n }\n\n styleRegex.lastIndex = 0;\n let styleRegResult;\n while ((styleRegResult = styleRegex.exec(style)) != null) {\n const svgStlAttr = styleRegResult[1];\n\n const zrInheritableStlAttr = hasOwn(INHERITABLE_STYLE_ATTRIBUTES_MAP, svgStlAttr)\n ? INHERITABLE_STYLE_ATTRIBUTES_MAP[svgStlAttr as keyof typeof INHERITABLE_STYLE_ATTRIBUTES_MAP]\n : null;\n if (zrInheritableStlAttr) {\n inheritableStyleResult[zrInheritableStlAttr] = styleRegResult[2];\n }\n\n const zrSelfStlAttr = hasOwn(SELF_STYLE_ATTRIBUTES_MAP, svgStlAttr)\n ? SELF_STYLE_ATTRIBUTES_MAP[svgStlAttr as keyof typeof SELF_STYLE_ATTRIBUTES_MAP]\n : null;\n if (zrSelfStlAttr) {\n selfStyleResult[zrSelfStlAttr] = styleRegResult[2];\n }\n }\n}\n\nfunction parseAttributeStyle(\n xmlNode: SVGElement,\n inheritableStyleResult: Dictionary,\n selfStyleResult: Dictionary\n): void {\n for (let i = 0; i < INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) {\n const svgAttrName = INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS[i];\n const attrValue = xmlNode.getAttribute(svgAttrName);\n if (attrValue != null) {\n inheritableStyleResult[INHERITABLE_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue;\n }\n }\n for (let i = 0; i < SELF_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) {\n const svgAttrName = SELF_STYLE_ATTRIBUTES_MAP_KEYS[i];\n const attrValue = xmlNode.getAttribute(svgAttrName);\n if (attrValue != null) {\n selfStyleResult[SELF_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue;\n }\n }\n}\n\nexport function makeViewBoxTransform(viewBoxRect: RectLike, boundingRect: RectLike): {\n scale: number;\n x: number;\n y: number;\n} {\n const scaleX = boundingRect.width / viewBoxRect.width;\n const scaleY = boundingRect.height / viewBoxRect.height;\n const scale = Math.min(scaleX, scaleY);\n // preserveAspectRatio 'xMidYMid'\n\n return {\n scale,\n x: -(viewBoxRect.x + viewBoxRect.width / 2) * scale + (boundingRect.x + boundingRect.width / 2),\n y: -(viewBoxRect.y + viewBoxRect.height / 2) * scale + (boundingRect.y + boundingRect.height / 2)\n };\n}\n\nexport function parseSVG(xml: string | Document | SVGElement, opt: SVGParserOption): SVGParserResult {\n const parser = new SVGParser();\n return parser.parse(xml, opt);\n}\n\n\n// Also export parseXML to avoid breaking change.\nexport {parseXML};\n","import PathProxy, { normalizeArcAngles } from '../../core/PathProxy';\n\nconst PI = Math.PI;\nconst PI2 = PI * 2;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst mathACos = Math.acos;\nconst mathATan2 = Math.atan2;\nconst mathAbs = Math.abs;\nconst mathSqrt = Math.sqrt;\nconst mathMax = Math.max;\nconst mathMin = Math.min;\nconst e = 1e-4;\n\ntype CornerTangents = {\n cx: number\n cy: number\n x01: number\n y01: number\n x11: number\n y11: number\n};\n\nfunction intersect(\n x0: number, y0: number, \n x1: number, y1: number, \n x2: number, y2: number, \n x3: number, y3: number\n): [number, number] {\n const x10 = x1 - x0;\n const y10 = y1 - y0;\n const x32 = x3 - x2;\n const y32 = y3 - y2;\n let t = y32 * x10 - x32 * y10;\n if (t * t < e) {\n return;\n }\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\nfunction computeCornerTangents(\n x0: number, y0: number, \n x1: number, y1: number, \n radius: number, cr: number, \n clockwise: boolean\n): CornerTangents {\n const x01 = x0 - x1;\n const y01 = y0 - y1;\n const lo = (clockwise ? cr : -cr) / mathSqrt(x01 * x01 + y01 * y01);\n const ox = lo * y01;\n const oy = -lo * x01;\n const x11 = x0 + ox;\n const y11 = y0 + oy;\n const x10 = x1 + ox;\n const y10 = y1 + oy;\n const x00 = (x11 + x10) / 2;\n const y00 = (y11 + y10) / 2;\n const dx = x10 - x11;\n const dy = y10 - y11;\n const d2 = dx * dx + dy * dy;\n const r = radius - cr;\n const s = x11 * y10 - x10 * y11;\n const d = (dy < 0 ? -1 : 1) * mathSqrt(mathMax(0, r * r * d2 - s * s));\n let cx0 = (s * dy - dx * d) / d2;\n let cy0 = (-s * dx - dy * d) / d2;\n const cx1 = (s * dy + dx * d) / d2;\n const cy1 = (-s * dx + dy * d) / d2;\n const dx0 = cx0 - x00;\n const dy0 = cy0 - y00;\n const dx1 = cx1 - x00;\n const dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points\n // TODO: Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) {\n cx0 = cx1;\n cy0 = cy1;\n }\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (radius / r - 1),\n y11: cy0 * (radius / r - 1)\n };\n}\n\nexport function buildPath(ctx: CanvasRenderingContext2D | PathProxy, shape: {\n cx: number\n cy: number\n startAngle: number\n endAngle: number\n clockwise?: boolean,\n r?: number,\n r0?: number,\n cornerRadius?: number,\n innerCornerRadius?: number\n}) {\n let radius = mathMax(shape.r, 0);\n let innerRadius = mathMax(shape.r0 || 0, 0);\n const hasRadius = radius > 0;\n const hasInnerRadius = innerRadius > 0;\n\n if (!hasRadius && !hasInnerRadius) {\n return;\n }\n\n if (!hasRadius) {\n // use innerRadius as radius if no radius\n radius = innerRadius;\n innerRadius = 0;\n }\n\n if (innerRadius > radius) {\n // swap, ensure that radius is always larger than innerRadius\n const tmp = radius;\n radius = innerRadius;\n innerRadius = tmp;\n }\n\n const clockwise = !!shape.clockwise;\n const startAngle = shape.startAngle;\n const endAngle = shape.endAngle;\n\n // PENDING: whether normalizing angles is required?\n let arc: number;\n // FIXME: there may be a precision issue in `normalizeArcAngles`\n if (startAngle === endAngle) {\n arc = 0;\n }\n else {\n const tmpAngles = [startAngle, endAngle];\n normalizeArcAngles(tmpAngles, !clockwise);\n arc = mathAbs(tmpAngles[0] - tmpAngles[1]);\n }\n\n const x = shape.cx;\n const y = shape.cy;\n const cornerRadius = shape.cornerRadius || 0;\n const innerCornerRadius = shape.innerCornerRadius || 0;\n\n // is a point\n if (!(radius > e)) {\n ctx.moveTo(x, y);\n }\n // is a circle or annulus\n else if (arc > PI2 - e) {\n ctx.moveTo(\n x + radius * mathCos(startAngle), \n y + radius * mathSin(startAngle)\n );\n ctx.arc(x, y, radius, startAngle, endAngle, !clockwise);\n\n if (innerRadius > e) {\n ctx.moveTo(\n x + innerRadius * mathCos(endAngle), \n y + innerRadius * mathSin(endAngle)\n );\n ctx.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n }\n }\n // is a circular or annular sector\n else {\n const halfRd = mathAbs(radius - innerRadius) / 2;\n const cr = mathMin(halfRd, cornerRadius);\n const icr = mathMin(halfRd, innerCornerRadius);\n let cr0 = icr;\n let cr1 = cr;\n\n const xrs = radius * mathCos(startAngle);\n const yrs = radius * mathSin(startAngle);\n const xire = innerRadius * mathCos(endAngle);\n const yire = innerRadius * mathSin(endAngle);\n\n let xre;\n let yre;\n let xirs;\n let yirs;\n\n // draw corner radius\n if (cr > e || icr > e) {\n xre = radius * mathCos(endAngle);\n yre = radius * mathSin(endAngle);\n xirs = innerRadius * mathCos(startAngle);\n yirs = innerRadius * mathSin(startAngle);\n\n // restrict the max value of corner radius\n if (arc < PI) {\n const it = intersect(xrs, yrs, xirs, yirs, xre, yre, xire, yire);\n if (it) {\n const x0 = xrs - it[0];\n const y0 = yrs - it[1];\n const x1 = xre - it[0];\n const y1 = yre - it[1];\n const a = 1 / mathSin(\n mathACos((x0 * x1 + y0 * y1) / (mathSqrt(x0 * x0 + y0 * y0) * mathSqrt(x1 * x1 + y1 * y1))) / 2\n );\n const b = mathSqrt(it[0] * it[0] + it[1] * it[1]);\n cr0 = mathMin(icr, (innerRadius - b) / (a - 1));\n cr1 = mathMin(cr, (radius - b) / (a + 1));\n }\n }\n }\n\n // the sector is collapsed to a line\n if (!(arc > e)) {\n ctx.moveTo(x + xrs, y + yrs);\n }\n // the outer ring has corners\n else if (cr1 > e) {\n const ct0 = computeCornerTangents(xirs, yirs, xrs, yrs, radius, cr1, clockwise);\n const ct1 = computeCornerTangents(xre, yre, xire, yire, radius, cr1, clockwise);\n\n ctx.moveTo(x + ct0.cx + ct0.x01, y + ct0.cy + ct0.y01);\n\n // Have the corners merged?\n if (cr1 < cr) {\n ctx.arc(x + ct0.cx, y + ct0.cy, cr1, mathATan2(ct0.y01, ct0.x01), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n else {\n // draw the two corners and the ring\n ctx.arc(x + ct0.cx, y + ct0.cy, cr1, mathATan2(ct0.y01, ct0.x01), mathATan2(ct0.y11, ct0.x11), !clockwise);\n\n ctx.arc(x, y, radius, mathATan2(ct0.cy + ct0.y11, ct0.cx + ct0.x11), mathATan2(ct1.cy + ct1.y11, ct1.cx + ct1.x11), !clockwise);\n\n ctx.arc(x + ct1.cx, y + ct1.cy, cr1, mathATan2(ct1.y11, ct1.x11), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n }\n // the outer ring is a circular arc\n else {\n ctx.moveTo(x + xrs, y + yrs);\n ctx.arc(x, y, radius, startAngle, endAngle, !clockwise);\n }\n\n // no inner ring, is a circular sector\n if (!(innerRadius > e) || !(arc > e)) {\n ctx.lineTo(x + xire, y + yire);\n }\n // the inner ring has corners\n else if (cr0 > e) {\n const ct0 = computeCornerTangents(xire, yire, xre, yre, innerRadius, -cr0, clockwise);\n const ct1 = computeCornerTangents(xrs, yrs, xirs, yirs, innerRadius, -cr0, clockwise);\n ctx.lineTo(x + ct0.cx + ct0.x01, y + ct0.cy + ct0.y01);\n\n // Have the corners merged?\n if (cr0 < icr) {\n ctx.arc(x + ct0.cx, y + ct0.cy, cr0, mathATan2(ct0.y01, ct0.x01), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n // draw the two corners and the ring\n else {\n ctx.arc(x + ct0.cx, y + ct0.cy, cr0, mathATan2(ct0.y01, ct0.x01), mathATan2(ct0.y11, ct0.x11), !clockwise);\n\n ctx.arc(x, y, innerRadius, mathATan2(ct0.cy + ct0.y11, ct0.cx + ct0.x11), mathATan2(ct1.cy + ct1.y11, ct1.cx + ct1.x11), clockwise);\n\n ctx.arc(x + ct1.cx, y + ct1.cy, cr0, mathATan2(ct1.y11, ct1.x11), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n }\n // the inner ring is just a circular arc\n else {\n // FIXME: if no lineTo, svg renderer will perform an abnormal drawing behavior.\n ctx.lineTo(x + xire, y + yire);\n\n ctx.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n }\n }\n\n ctx.closePath();\n}\n","import Path, { PathProps } from '../Path';\nimport * as roundSectorHelper from '../helper/roundSector';\n\nexport class SectorShape {\n cx = 0\n cy = 0\n r0 = 0\n r = 0\n startAngle = 0\n endAngle = Math.PI * 2\n clockwise = true\n cornerRadius = 0\n innerCornerRadius = 0\n}\n\nexport interface SectorProps extends PathProps {\n shape?: Partial\n}\n\nclass Sector extends Path {\n\n shape: SectorShape\n\n constructor(opts?: SectorProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new SectorShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: SectorShape) {\n roundSectorHelper.buildPath(ctx, shape)\n }\n\n isZeroArea() {\n return this.shape.startAngle === this.shape.endAngle\n || this.shape.r === this.shape.r0;\n }\n}\n\nSector.prototype.type = 'sector';\n\nexport default Sector;\n","import PathProxy from '../core/PathProxy';\nimport { cubicSubdivide } from '../core/curve';\nimport Path from '../graphic/Path';\nimport Element, { ElementAnimateConfig } from '../Element';\nimport { defaults, assert, noop, clone } from '../core/util';\nimport { lerp } from '../core/vector';\nimport Rect from '../graphic/shape/Rect';\nimport Sector from '../graphic/shape/Sector';\nimport { ZRenderType } from '../zrender';\nimport Group from '../graphic/Group';\n\nconst CMD = PathProxy.CMD;\nconst PI2 = Math.PI * 2;\n\nconst PROP_XY = ['x', 'y'] as const;\nconst PROP_WH = ['width', 'height'] as const;\n\nconst tmpArr: number[] = [];\n\n\ninterface CombiningPath extends Path {\n __combiningSubList: Path[];\n __oldAddSelfToZr: Element['addSelfToZr'];\n __oldRemoveSelfFromZr: Element['removeSelfFromZr'];\n __oldBuildPath: Path['buildPath'];\n // See `Stroage['_updateAndAddDisplayable']`\n childrenRef(): Path[];\n}\n\nexport type MorphDividingMethod = 'split' | 'duplicate';\n\nexport interface CombineSeparateConfig extends ElementAnimateConfig {\n dividingMethod?: MorphDividingMethod;\n}\n\nexport interface CombineSeparateResult {\n // The length of `fromIndividuals`, `toIndividuals`\n // are the same as `count`.\n fromIndividuals: Path[];\n toIndividuals: Path[];\n count: number;\n}\n\nfunction aroundEqual(a: number, b: number) {\n return Math.abs(a - b) < 1e-5;\n}\n\nexport function pathToBezierCurves(path: PathProxy) {\n\n const data = path.data;\n const len = path.len();\n\n const bezierArray: number[][] = [];\n let currentSubpath: number[];\n\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n\n function createNewSubpath(x: number, y: number) {\n // More than one M command\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArray.push(currentSubpath);\n }\n currentSubpath = [x, y];\n }\n\n function addLine(x0: number, y0: number, x1: number, y1: number) {\n if (!(aroundEqual(x0, x1) && aroundEqual(y0, y1))) {\n currentSubpath.push(x0, y0, x1, y1, x1, y1);\n }\n }\n\n function addArc(startAngle: number, endAngle: number, cx: number, cy: number, rx: number, ry: number) {\n // https://stackoverflow.com/questions/1734745/how-to-create-circle-with-b%C3%A9zier-curves\n const delta = Math.abs(endAngle - startAngle);\n const len = Math.tan(delta / 4) * 4 / 3;\n const dir = endAngle < startAngle ? -1 : 1;\n\n const c1 = Math.cos(startAngle);\n const s1 = Math.sin(startAngle);\n const c2 = Math.cos(endAngle);\n const s2 = Math.sin(endAngle);\n\n const x1 = c1 * rx + cx;\n const y1 = s1 * ry + cy;\n\n const x4 = c2 * rx + cx;\n const y4 = s2 * ry + cy;\n\n const hx = rx * len * dir;\n const hy = ry * len * dir;\n currentSubpath.push(\n // Move control points on tangent.\n x1 - hx * s1, y1 + hy * c1,\n x4 + hx * s2, y4 - hy * c2,\n x4, y4\n );\n }\n\n let x1;\n let y1;\n let x2;\n let y2;\n\n for (let i = 0; i < len;) {\n const cmd = data[i++];\n const isFirst = i === 1;\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n\n x0 = xi;\n y0 = yi;\n\n if (cmd === CMD.L || cmd === CMD.C || cmd === CMD.Q) {\n // Start point\n currentSubpath = [x0, y0];\n }\n }\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n\n createNewSubpath(x0, y0);\n break;\n case CMD.L:\n x1 = data[i++];\n y1 = data[i++];\n addLine(xi, yi, x1, y1);\n xi = x1;\n yi = y1;\n break;\n case CMD.C:\n currentSubpath.push(\n data[i++], data[i++], data[i++], data[i++],\n xi = data[i++], yi = data[i++]\n );\n break;\n case CMD.Q:\n x1 = data[i++];\n y1 = data[i++];\n x2 = data[i++];\n y2 = data[i++];\n currentSubpath.push(\n // Convert quadratic to cubic\n xi + 2 / 3 * (x1 - xi), yi + 2 / 3 * (y1 - yi),\n x2 + 2 / 3 * (x1 - x2), y2 + 2 / 3 * (y1 - y2),\n x2, y2\n );\n xi = x2;\n yi = y2;\n break;\n case CMD.A:\n const cx = data[i++];\n const cy = data[i++];\n const rx = data[i++];\n const ry = data[i++];\n const startAngle = data[i++];\n const endAngle = data[i++] + startAngle;\n\n // TODO Arc rotation\n i += 1;\n const anticlockwise = !data[i++];\n\n x1 = Math.cos(startAngle) * rx + cx;\n y1 = Math.sin(startAngle) * ry + cy;\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n }\n else {\n // Connect a line between current point to arc start point.\n addLine(xi, yi, x1, y1);\n }\n\n xi = Math.cos(endAngle) * rx + cx;\n yi = Math.sin(endAngle) * ry + cy;\n\n const step = (anticlockwise ? -1 : 1) * Math.PI / 2;\n\n for (let angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {\n const nextAngle = anticlockwise ? Math.max(angle + step, endAngle)\n : Math.min(angle + step, endAngle);\n addArc(angle, nextAngle, cx, cy, rx, ry);\n }\n\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n x1 = x0 + data[i++];\n y1 = y0 + data[i++];\n\n // rect is an individual path.\n createNewSubpath(x1, y0);\n addLine(x1, y0, x1, y1);\n addLine(x1, y1, x0, y1);\n addLine(x0, y1, x0, y0);\n addLine(x0, y0, x1, y0);\n break;\n case CMD.Z:\n currentSubpath && addLine(xi, yi, x0, y0);\n xi = x0;\n yi = y0;\n break;\n }\n }\n\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArray.push(currentSubpath);\n }\n\n return bezierArray;\n}\n\nfunction alignSubpath(subpath1: number[], subpath2: number[]): [number[], number[]] {\n const len1 = subpath1.length;\n const len2 = subpath2.length;\n if (len1 === len2) {\n return [subpath1, subpath2];\n }\n\n const shorterPath = len1 < len2 ? subpath1 : subpath2;\n const shorterLen = Math.min(len1, len2);\n // Should divide excatly\n const diff = Math.abs(len2 - len1) / 6;\n const shorterBezierCount = (shorterLen - 2) / 6;\n // Add `diff` number of beziers\n const eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount) + 1;\n\n const newSubpath = [shorterPath[0], shorterPath[1]];\n let remained = diff;\n\n const tmpSegX: number[] = [];\n const tmpSegY: number[] = [];\n\n for (let i = 2; i < shorterLen;) {\n let x0 = shorterPath[i - 2];\n let y0 = shorterPath[i - 1];\n let x1 = shorterPath[i++];\n let y1 = shorterPath[i++];\n let x2 = shorterPath[i++];\n let y2 = shorterPath[i++];\n let x3 = shorterPath[i++];\n let y3 = shorterPath[i++];\n\n if (remained <= 0) {\n newSubpath.push(x1, y1, x2, y2, x3, y3);\n continue;\n }\n\n let actualSubDivCount = Math.min(remained, eachCurveSubDivCount - 1) + 1;\n for (let k = 1; k <= actualSubDivCount; k++) {\n const p = k / actualSubDivCount;\n\n cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\n\n // tmpSegX[3] === tmpSegX[4]\n x0 = tmpSegX[3];\n y0 = tmpSegY[3];\n\n newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\n x1 = tmpSegX[5];\n y1 = tmpSegY[5];\n x2 = tmpSegX[6];\n y2 = tmpSegY[6];\n // The last point (x3, y3) is still the same.\n }\n remained -= actualSubDivCount - 1;\n }\n\n return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\n}\n\nfunction createSubpath(lastSubpathSubpath: number[], otherSubpath: number[]) {\n const len = lastSubpathSubpath.length;\n const lastX = lastSubpathSubpath[len - 2];\n const lastY = lastSubpathSubpath[len - 1];\n\n const newSubpath: number[] = [];\n for (let i = 0; i < otherSubpath.length;) {\n newSubpath[i++] = lastX;\n newSubpath[i++] = lastY;\n }\n return newSubpath;\n}\n\n/**\n * Make two bezier arrays aligns on structure. To have better animation.\n *\n * It will:\n * Make two bezier arrays have same number of subpaths.\n * Make each subpath has equal number of bezier curves.\n *\n * array is the convert result of pathToBezierCurves.\n */\nexport function alignBezierCurves(array1: number[][], array2: number[][]) {\n\n let lastSubpath1;\n let lastSubpath2;\n\n let newArray1 = [];\n let newArray2 = [];\n\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\n const subpath1 = array1[i];\n const subpath2 = array2[i];\n\n let newSubpath1;\n let newSubpath2;\n\n if (!subpath1) {\n newSubpath1 = createSubpath(lastSubpath1 || subpath2, subpath2);\n newSubpath2 = subpath2;\n }\n else if (!subpath2) {\n newSubpath2 = createSubpath(lastSubpath2 || subpath1, subpath1);\n newSubpath1 = subpath1;\n }\n else {\n [newSubpath1, newSubpath2] = alignSubpath(subpath1, subpath2);\n lastSubpath1 = newSubpath1;\n lastSubpath2 = newSubpath2;\n }\n\n newArray1.push(newSubpath1);\n newArray2.push(newSubpath2);\n }\n\n return [newArray1, newArray2];\n}\n\ninterface MorphingPath extends Path {\n __morphT: number;\n __oldBuildPath: Path['buildPath'];\n __morphingData: MorphingData;\n}\n\nexport function centroid(array: number[]) {\n // https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n let signedArea = 0;\n let cx = 0;\n let cy = 0;\n const len = array.length;\n // Polygon should been closed.\n for (let i = 0, j = len - 2; i < len; j = i, i += 2) {\n const x0 = array[j];\n const y0 = array[j + 1];\n const x1 = array[i];\n const y1 = array[i + 1];\n const a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n }\n\n if (signedArea === 0) {\n return [array[0] || 0, array[1] || 0];\n }\n\n return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\n}\n\n/**\n * Offset the points to find the nearest morphing distance.\n * Return beziers count needs to be offset.\n */\nfunction findBestRingOffset(\n fromSubBeziers: number[],\n toSubBeziers: number[],\n fromCp: number[],\n toCp: number[]\n) {\n const bezierCount = (fromSubBeziers.length - 2) / 6;\n let bestScore = Infinity;\n let bestOffset = 0;\n\n const len = fromSubBeziers.length;\n const len2 = len - 2;\n for (let offset = 0; offset < bezierCount; offset++) {\n const cursorOffset = offset * 6;\n let score = 0;\n\n for (let k = 0; k < len; k += 2) {\n let idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2 + 2);\n\n const x0 = fromSubBeziers[idx] - fromCp[0];\n const y0 = fromSubBeziers[idx + 1] - fromCp[1];\n const x1 = toSubBeziers[k] - toCp[0];\n const y1 = toSubBeziers[k + 1] - toCp[1];\n\n const dx = x1 - x0;\n const dy = y1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestOffset = offset;\n }\n }\n\n return bestOffset;\n}\n\nfunction reverse(array: number[]) {\n const newArr: number[] = [];\n const len = array.length;\n for (let i = 0; i < len; i += 2) {\n newArr[i] = array[len - i - 2];\n newArr[i + 1] = array[len - i - 1];\n }\n return newArr;\n}\n\ntype MorphingData = {\n from: number[];\n to: number[];\n fromCp: number[];\n toCp: number[];\n rotation: number;\n}[];\n\n/**\n * If we interpolating between two bezier curve arrays.\n * It will have many broken effects during the transition.\n * So we try to apply an extra rotation which can make each bezier curve morph as small as possible.\n */\nfunction findBestMorphingRotation(\n fromArr: number[][],\n toArr: number[][],\n searchAngleIteration: number,\n searchAngleRange: number\n): MorphingData {\n const result = [];\n\n let fromNeedsReverse: boolean;\n\n for (let i = 0; i < fromArr.length; i++) {\n let fromSubpathBezier = fromArr[i];\n const toSubpathBezier = toArr[i];\n\n const fromCp = centroid(fromSubpathBezier);\n const toCp = centroid(toSubpathBezier);\n\n if (fromNeedsReverse == null) {\n // Reverse from array if two have different directions.\n // Determine the clockwise based on the first subpath.\n // Reverse all subpaths or not. Avoid winding rule changed.\n fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\n }\n\n const newFromSubpathBezier: number[] = [];\n const newToSubpathBezier: number[] = [];\n let bestAngle = 0;\n let bestScore = Infinity;\n let tmpArr: number[] = [];\n\n const len = fromSubpathBezier.length;\n if (fromNeedsReverse) {\n // Make sure clockwise\n fromSubpathBezier = reverse(fromSubpathBezier);\n }\n const offset = findBestRingOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\n\n const len2 = len - 2;\n for (let k = 0; k < len2; k += 2) {\n // Not include the start point.\n const idx = (offset + k) % len2 + 2;\n newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\n newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\n }\n newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\n newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\n\n if (searchAngleIteration > 0) {\n const step = searchAngleRange / searchAngleIteration;\n for (let angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n let score = 0;\n\n for (let k = 0; k < fromSubpathBezier.length; k += 2) {\n const x0 = newFromSubpathBezier[k];\n const y0 = newFromSubpathBezier[k + 1];\n const x1 = toSubpathBezier[k] - toCp[0];\n const y1 = toSubpathBezier[k + 1] - toCp[1];\n\n // Apply rotation on the target point.\n const newX1 = x1 * ca - y1 * sa;\n const newY1 = x1 * sa + y1 * ca;\n\n tmpArr[k] = newX1;\n tmpArr[k + 1] = newY1;\n\n const dx = newX1 - x0;\n const dy = newY1 - y0;\n\n // Use dot product to have min direction change.\n // const d = Math.sqrt(x0 * x0 + y0 * y0);\n // score += x0 * dx / d + y0 * dy / d;\n score += dx * dx + dy * dy;\n }\n\n if (score < bestScore) {\n bestScore = score;\n bestAngle = angle;\n // Copy.\n for (let m = 0; m < tmpArr.length; m++) {\n newToSubpathBezier[m] = tmpArr[m];\n }\n }\n }\n }\n else {\n for (let i = 0; i < len; i += 2) {\n newToSubpathBezier[i] = toSubpathBezier[i] - toCp[0];\n newToSubpathBezier[i + 1] = toSubpathBezier[i + 1] - toCp[1];\n }\n }\n\n result.push({\n from: newFromSubpathBezier,\n to: newToSubpathBezier,\n fromCp,\n toCp,\n rotation: -bestAngle\n });\n }\n return result;\n}\n\n/**\n * Morphing from old path to new path.\n */\nexport function morphPath(\n // `fromPath` only provides the current path state, which will\n // not be rendered or kept.\n // Note:\n // should be able to handle `isIndividualMorphingPath(fromPath)` is `ture`.\n fromPath: Path,\n // `toPath` is the target path that will be rendered and kept.\n // Note:\n // (1) `toPath` and `fromPath` might be the same.\n // e.g., when triggering the same transition repeatly.\n // (2) should be able to handle `isIndividualMorphingPath(toPath)` is `ture`.\n toPath: Path,\n animationOpts: ElementAnimateConfig\n): Path {\n let fromPathProxy: PathProxy;\n let toPathProxy: PathProxy;\n\n if (!fromPath || !toPath) {\n return toPath;\n }\n\n // Calculate the current path into `fromPathProxy` from `fromPathInput`.\n !fromPath.path && fromPath.createPathProxy();\n fromPathProxy = fromPath.path;\n fromPathProxy.beginPath();\n fromPath.buildPath(fromPathProxy, fromPath.shape);\n\n // Calculate the target path into `toPathProxy` from `toPath`.\n !toPath.path && toPath.createPathProxy();\n toPathProxy = toPath.path;\n // From and to might be the same path.\n toPathProxy === fromPathProxy && (toPathProxy = new PathProxy(false));\n toPathProxy.beginPath();\n // toPath should always calculate the final state rather than morphing state.\n if (isIndividualMorphingPath(toPath)) {\n toPath.__oldBuildPath(toPathProxy, toPath.shape);\n }\n else {\n toPath.buildPath(toPathProxy, toPath.shape);\n }\n\n const [fromBezierCurves, toBezierCurves] =\n alignBezierCurves(pathToBezierCurves(fromPathProxy), pathToBezierCurves(toPathProxy));\n\n const morphingData = findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI);\n becomeIndividualMorphingPath(toPath, morphingData, 0);\n\n const oldDone = animationOpts && animationOpts.done;\n const oldAborted = animationOpts && animationOpts.aborted;\n const oldDuring = animationOpts && animationOpts.during;\n\n toPath.animateTo({\n __morphT: 1\n } as any, defaults({\n during(p) {\n toPath.dirtyShape();\n oldDuring && oldDuring(p);\n },\n done() {\n restoreIndividualMorphingPath(toPath);\n // Cleanup.\n toPath.createPathProxy();\n toPath.dirtyShape();\n oldDone && oldDone();\n },\n aborted() {\n oldAborted && oldAborted();\n }\n } as ElementAnimateConfig, animationOpts));\n\n return toPath;\n}\n\nfunction morphingPathBuildPath(\n this: Pick,\n path: PathProxy\n): void {\n const morphingData = this.__morphingData;\n const t = this.__morphT;\n const onet = 1 - t;\n\n const newCp: number[] = [];\n for (let i = 0; i < morphingData.length; i++) {\n const item = morphingData[i];\n const from = item.from;\n const to = item.to;\n const angle = item.rotation * t;\n const fromCp = item.fromCp;\n const toCp = item.toCp;\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n\n lerp(newCp, fromCp, toCp, t);\n\n for (let m = 0; m < from.length; m += 2) {\n const x0 = from[m];\n const y0 = from[m + 1];\n const x1 = to[m];\n const y1 = to[m + 1];\n\n const x = x0 * onet + x1 * t;\n const y = y0 * onet + y1 * t;\n\n tmpArr[m] = (x * ca - y * sa) + newCp[0];\n tmpArr[m + 1] = (x * sa + y * ca) + newCp[1];\n }\n\n for (let m = 0; m < from.length;) {\n if (m === 0) {\n path.moveTo(tmpArr[m++], tmpArr[m++]);\n }\n path.bezierCurveTo(\n tmpArr[m++], tmpArr[m++],\n tmpArr[m++], tmpArr[m++],\n tmpArr[m++], tmpArr[m++]\n );\n }\n }\n};\n\nfunction becomeIndividualMorphingPath(\n path: Path,\n morphingData: MorphingData,\n morphT: number\n): void {\n if (isIndividualMorphingPath(path)) {\n updateIndividualMorphingPath(path, morphingData, morphT);\n return;\n }\n\n const morphingPath = path as MorphingPath;\n morphingPath.__oldBuildPath = morphingPath.buildPath;\n morphingPath.buildPath = morphingPathBuildPath;\n updateIndividualMorphingPath(morphingPath, morphingData, morphT);\n}\n\nfunction updateIndividualMorphingPath(\n morphingPath: MorphingPath,\n morphingData: MorphingData,\n morphT: number\n): void {\n morphingPath.__morphingData = morphingData;\n morphingPath.__morphT = morphT;\n}\n\nfunction restoreIndividualMorphingPath(path: Path): void {\n if (isIndividualMorphingPath(path)) {\n path.buildPath = path.__oldBuildPath;\n path.__oldBuildPath = path.__morphingData = null;\n }\n}\n\nfunction isIndividualMorphingPath(path: Path): path is MorphingPath {\n return (path as MorphingPath).__oldBuildPath != null;\n}\n\nexport function isCombiningPath(path: Path): path is CombiningPath {\n return !!(path as CombiningPath).__combiningSubList;\n}\n\nexport function isInAnyMorphing(path: Path): boolean {\n return isIndividualMorphingPath(path) || isCombiningPath(path);\n}\n\n\n/**\n * Make combining morphing from many paths to one.\n * Make the MorphingKind of `toPath` become `'COMBINING'`.\n */\nexport function combine(\n fromPathList: Path[],\n toPath: Path,\n animationOpts: CombineSeparateConfig,\n copyPropsIfDivided?: (srcPath: Path, tarPath: Path, needClone: boolean) => void\n): CombineSeparateResult {\n\n const fromIndividuals: Path[] = [];\n let separateCount = 0;\n for (let i = 0; i < fromPathList.length; i++) {\n const fromPath = fromPathList[i];\n if (isCombiningPath(fromPath)) {\n // If fromPath is combining, use the combineFromList as the from.\n const fromCombiningSubList = fromPath.__combiningSubList;\n for (let j = 0; j < fromCombiningSubList.length; j++) {\n fromIndividuals.push(fromCombiningSubList[j]);\n }\n separateCount += fromCombiningSubList.length;\n }\n else {\n fromIndividuals.push(fromPath);\n separateCount++;\n }\n }\n\n // fromPathList.length is 0.\n if (!separateCount) {\n return;\n }\n\n // PENDING: more separate strategies other than `divideShape`?\n const dividingMethod = animationOpts ? animationOpts.dividingMethod : null;\n const toPathSplittedList = divideShape(toPath, separateCount, dividingMethod);\n assert(toPathSplittedList.length === separateCount);\n\n const oldDone = animationOpts && animationOpts.done;\n const oldAborted = animationOpts && animationOpts.aborted;\n const oldDuring = animationOpts && animationOpts.during;\n\n let doneCount = 0;\n let abortedCalled = false;\n const morphAnimationOpts = defaults({\n during(p) {\n oldDuring && oldDuring(p);\n },\n done() {\n doneCount++;\n if (doneCount === toPathSplittedList.length) {\n restoreCombiningPath(toPath);\n oldDone && oldDone();\n }\n },\n aborted() {\n // PENDING: is it logically correct?\n if (!abortedCalled) {\n abortedCalled = true;\n oldAborted && oldAborted();\n }\n }\n } as ElementAnimateConfig, animationOpts);\n\n for (let i = 0; i < separateCount; i++) {\n const from = fromIndividuals[i];\n const to = toPathSplittedList[i];\n copyPropsIfDivided && copyPropsIfDivided(toPath, to, true);\n morphPath(from, to, morphAnimationOpts);\n }\n\n becomeCombiningPath(toPath, toPathSplittedList);\n\n return {\n fromIndividuals: fromIndividuals,\n toIndividuals: toPathSplittedList,\n count: separateCount\n };\n}\n\n\n// PENDING: This is NOT a good implementation to decorate path methods.\n// Potential flaw: when get path by `group.childAt(i)`,\n// it might return the `combiningSubList` group, which is not expected.\n// Probably this feature should be implemented same as the way of rich text?\nfunction becomeCombiningPath(path: Path, combiningSubList: Path[]): void {\n if (isCombiningPath(path)) {\n updateCombiningPathSubList(path, combiningSubList);\n return;\n }\n\n const combiningPath = path as CombiningPath;\n\n updateCombiningPathSubList(combiningPath, combiningSubList);\n\n // PENDING: Too tricky. error-prone.\n // Decorate methods. Do not do it repeatly.\n combiningPath.__oldAddSelfToZr = path.addSelfToZr;\n combiningPath.__oldRemoveSelfFromZr = path.removeSelfFromZr;\n combiningPath.addSelfToZr = combiningAddSelfToZr;\n combiningPath.removeSelfFromZr = combiningRemoveSelfFromZr;\n combiningPath.__oldBuildPath = combiningPath.buildPath;\n combiningPath.buildPath = noop;\n combiningPath.childrenRef = combiningChildrenRef;\n\n // PENDING: bounding rect?\n}\n\nfunction restoreCombiningPath(path: Path): void {\n if (!isCombiningPath(path)) {\n return;\n }\n\n const combiningPath = path as CombiningPath;\n\n updateCombiningPathSubList(combiningPath, null);\n\n combiningPath.addSelfToZr = combiningPath.__oldAddSelfToZr;\n combiningPath.removeSelfFromZr = combiningPath.__oldRemoveSelfFromZr;\n combiningPath.buildPath = combiningPath.__oldBuildPath;\n combiningPath.childrenRef =\n combiningPath.__combiningSubList =\n combiningPath.__oldAddSelfToZr =\n combiningPath.__oldRemoveSelfFromZr =\n combiningPath.__oldBuildPath = null;\n}\n\nfunction updateCombiningPathSubList(\n combiningPath: CombiningPath,\n // Especially, `combiningSubList` is null/undefined means that remove sub list.\n combiningSubList: Path[]\n): void {\n if (combiningPath.__combiningSubList !== combiningSubList) {\n combiningPathSubListAddRemoveWithZr(combiningPath, 'removeSelfFromZr');\n combiningPath.__combiningSubList = combiningSubList;\n if (combiningSubList) {\n for (let i = 0; i < combiningSubList.length; i++) {\n // Tricky: make `updateTransform` work in `Transformable`. The parent can only be Group.\n combiningSubList[i].parent = combiningPath as unknown as Group;\n }\n }\n combiningPathSubListAddRemoveWithZr(combiningPath, 'addSelfToZr');\n }\n}\n\nfunction combiningAddSelfToZr(this: CombiningPath, zr: ZRenderType): void {\n this.__oldAddSelfToZr(zr);\n combiningPathSubListAddRemoveWithZr(this, 'addSelfToZr');\n}\n\nfunction combiningPathSubListAddRemoveWithZr(\n path: CombiningPath,\n method: 'addSelfToZr' | 'removeSelfFromZr'\n): void {\n const combiningSubList = path.__combiningSubList;\n const zr = path.__zr;\n if (combiningSubList && zr) {\n for (let i = 0; i < combiningSubList.length; i++) {\n const child = combiningSubList[i];\n child[method](zr);\n }\n }\n}\n\nfunction combiningRemoveSelfFromZr(this: CombiningPath, zr: ZRenderType): void {\n this.__oldRemoveSelfFromZr(zr);\n const combiningSubList = this.__combiningSubList;\n for (let i = 0; i < combiningSubList.length; i++) {\n const child = combiningSubList[i];\n child.removeSelfFromZr(zr);\n }\n}\n\nfunction combiningChildrenRef(this: CombiningPath): Path[] {\n return this.__combiningSubList;\n}\n\n\n/**\n * Make separate morphing from one path to many paths.\n * Make the MorphingKind of `toPath` become `'ONE_ONE'`.\n */\nexport function separate(\n fromPath: Path,\n toPathList: Path[],\n animationOpts: CombineSeparateConfig,\n copyPropsIfDivided?: (srcPath: Path, tarPath: Path, needClone: boolean) => void\n): CombineSeparateResult {\n const toPathListLen = toPathList.length;\n let fromPathList: Path[];\n const dividingMethod = animationOpts ? animationOpts.dividingMethod : null;\n let copyProps = false;\n\n // This case most happen when a combining path is called to reverse the animation\n // to its original separated state.\n if (isCombiningPath(fromPath)) {\n // [CATEAT]:\n // do not `restoreCombiningPath`, because it will cause the sub paths been removed\n // from its host, so that the original \"global transform\" can not be gotten any more.\n\n const fromCombiningSubList = fromPath.__combiningSubList;\n if (fromCombiningSubList.length === toPathListLen) {\n fromPathList = fromCombiningSubList;\n }\n // The fromPath is a `CombiningPath` and its combiningSubCount is different from toPathList.length\n // At present we do not make \"continuous\" animation for this case. It's might bring complicated logic.\n else {\n fromPathList = divideShape(fromPath, toPathListLen, dividingMethod);\n copyProps = true;\n }\n }\n else {\n fromPathList = divideShape(fromPath, toPathListLen, dividingMethod);\n copyProps = true;\n }\n\n assert(fromPathList.length === toPathListLen);\n for (let i = 0; i < toPathListLen; i++) {\n if (copyProps && copyPropsIfDivided) {\n copyPropsIfDivided(fromPath, fromPathList[i], false);\n }\n morphPath(fromPathList[i], toPathList[i], animationOpts);\n }\n\n return {\n fromIndividuals: fromPathList,\n toIndividuals: toPathList,\n count: toPathListLen\n };\n}\n\n\n/**\n * TODO: triangulate separate\n *\n * @return Never be null/undefined, may empty [].\n */\nfunction divideShape(\n path: Path,\n separateCount: number,\n // By default 'split'.\n dividingMethod?: MorphDividingMethod\n): Path[] {\n return dividingMethod === 'duplicate'\n ? duplicateShape(path, separateCount)\n : splitShape(path, separateCount);\n}\n\n/**\n * @return Never be null/undefined, may empty [].\n */\nfunction splitShape(\n path: Path,\n separateCount: number\n): Path[] {\n const resultPaths: Path[] = [];\n if (separateCount <= 0) {\n return resultPaths;\n }\n if (separateCount === 1) {\n return duplicateShape(path, separateCount);\n }\n\n if (path instanceof Rect) {\n const toPathShape = path.shape;\n const splitPropIdx = toPathShape.height > toPathShape.width ? 1 : 0;\n const propWH = PROP_WH[splitPropIdx];\n const propXY = PROP_XY[splitPropIdx];\n const subWH = toPathShape[propWH] / separateCount;\n let xyCurr = toPathShape[propXY];\n\n for (let i = 0; i < separateCount; i++, xyCurr += subWH) {\n const subShape = {\n x: toPathShape.x,\n y: toPathShape.y,\n width: toPathShape.width,\n height: toPathShape.height\n };\n subShape[propXY] = xyCurr;\n subShape[propWH] = i < separateCount - 1\n ? subWH\n : toPathShape[propXY] + toPathShape[propWH] - xyCurr;\n const splitted = new Rect({ shape: subShape });\n resultPaths.push(splitted);\n }\n }\n else if (path instanceof Sector) {\n const toPathShape = path.shape;\n const clockwise = toPathShape.clockwise;\n const startAngle = toPathShape.startAngle;\n const endAngle = toPathShape.endAngle;\n const endAngleNormalized = normalizeRadian(startAngle, toPathShape.endAngle, clockwise);\n const step = (endAngleNormalized - startAngle) / separateCount;\n let angleCurr = startAngle;\n for (let i = 0; i < separateCount; i++, angleCurr += step) {\n const splitted = new Sector({\n shape: {\n cx: toPathShape.cx,\n cy: toPathShape.cy,\n r: toPathShape.r,\n r0: toPathShape.r0,\n clockwise: clockwise,\n startAngle: angleCurr,\n endAngle: i === separateCount - 1 ? endAngle : angleCurr + step\n }\n });\n resultPaths.push(splitted);\n }\n }\n // TODO: triangulate path and split.\n // And should consider path is morphing.\n else {\n return duplicateShape(path, separateCount);\n }\n\n return resultPaths;\n}\n\n/**\n * @return Never be null/undefined, may empty [].\n */\nfunction duplicateShape(\n path: Path,\n separateCount: number\n): Path[] {\n const resultPaths: Path[] = [];\n if (separateCount <= 0) {\n return resultPaths;\n }\n const ctor = path.constructor;\n for (let i = 0; i < separateCount; i++) {\n const sub = new (ctor as any)({\n shape: clone(path.shape)\n });\n resultPaths.push(sub);\n }\n return resultPaths;\n}\n\n/**\n * If `clockwise`, normalize the `end` to the interval `[start, start + 2 * PI)` and return.\n * else, normalize the `end` to the interval `(start - 2 * PI, start]` and return.\n */\nfunction normalizeRadian(start: number, end: number, clockwise: boolean): number {\n return end + PI2 * (\n Math[clockwise ? 'ceil' : 'floor']((start - end) / PI2)\n );\n}\n","// CompoundPath to improve performance\n\nimport Path from './Path';\nimport PathProxy from '../core/PathProxy';\n\nexport interface CompoundPathShape {\n paths: Path[]\n}\n\nexport default class CompoundPath extends Path {\n\n type = 'compound'\n\n shape: CompoundPathShape\n\n private _updatePathDirty() {\n const paths = this.shape.paths;\n let dirtyPath = this.shapeChanged();\n for (let i = 0; i < paths.length; i++) {\n // Mark as dirty if any subpath is dirty\n dirtyPath = dirtyPath || paths[i].shapeChanged();\n }\n if (dirtyPath) {\n this.dirtyShape();\n }\n }\n\n beforeBrush() {\n this._updatePathDirty();\n const paths = this.shape.paths || [];\n const scale = this.getGlobalScale();\n // Update path scale\n for (let i = 0; i < paths.length; i++) {\n if (!paths[i].path) {\n paths[i].createPathProxy();\n }\n paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);\n }\n }\n\n buildPath(ctx: PathProxy | CanvasRenderingContext2D, shape: CompoundPathShape) {\n const paths = shape.paths || [];\n for (let i = 0; i < paths.length; i++) {\n paths[i].buildPath(ctx, paths[i].shape, true);\n }\n }\n\n afterBrush() {\n const paths = this.shape.paths || [];\n for (let i = 0; i < paths.length; i++) {\n paths[i].pathUpdated();\n }\n }\n\n getBoundingRect() {\n this._updatePathDirty.call(this);\n return Path.prototype.getBoundingRect.call(this);\n }\n}","/**\n * Displayable for incremental rendering. It will be rendered in a separate layer\n * IncrementalDisplay have two main methods. `clearDisplayables` and `addDisplayables`\n * addDisplayables will render the added displayables incremetally.\n *\n * It use a notClear flag to tell the painter don't clear the layer if it's the first element.\n *\n * It's not available for SVG rendering.\n */\nimport Displayble from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport { MatrixArray } from '../core/matrix';\nimport Group from './Group';\n\nconst m: MatrixArray = [];\n// TODO Style override ?\n\nexport default class IncrementalDisplayable extends Displayble {\n\n notClear: boolean = true\n\n incremental = true\n\n private _displayables: Displayble[] = []\n private _temporaryDisplayables: Displayble[] = []\n\n private _cursor = 0\n\n traverse(\n cb: (this: T, el: this) => void,\n context: T\n ) {\n cb.call(context, this);\n }\n\n useStyle() {\n // Use an empty style\n // PENDING\n this.style = {};\n }\n // getCurrentCursor / updateCursorAfterBrush\n // is used in graphic.ts. It's not provided for developers\n getCursor() {\n return this._cursor;\n }\n // Update cursor after brush.\n innerAfterBrush() {\n this._cursor = this._displayables.length;\n }\n\n clearDisplaybles() {\n this._displayables = [];\n this._temporaryDisplayables = [];\n this._cursor = 0;\n this.markRedraw();\n\n this.notClear = false;\n }\n\n clearTemporalDisplayables() {\n this._temporaryDisplayables = [];\n }\n\n addDisplayable(displayable: Displayble, notPersistent?: boolean) {\n if (notPersistent) {\n this._temporaryDisplayables.push(displayable);\n }\n else {\n this._displayables.push(displayable);\n }\n this.markRedraw();\n }\n\n addDisplayables(displayables: Displayble[], notPersistent?: boolean) {\n notPersistent = notPersistent || false;\n for (let i = 0; i < displayables.length; i++) {\n this.addDisplayable(displayables[i], notPersistent);\n }\n }\n\n getDisplayables(): Displayble[] {\n return this._displayables;\n }\n\n getTemporalDisplayables(): Displayble[] {\n return this._temporaryDisplayables;\n }\n\n eachPendingDisplayable(cb: (displayable: Displayble) => void) {\n for (let i = this._cursor; i < this._displayables.length; i++) {\n cb && cb(this._displayables[i]);\n }\n for (let i = 0; i < this._temporaryDisplayables.length; i++) {\n cb && cb(this._temporaryDisplayables[i]);\n }\n }\n\n update() {\n this.updateTransform();\n for (let i = this._cursor; i < this._displayables.length; i++) {\n const displayable = this._displayables[i];\n // PENDING\n displayable.parent = this as unknown as Group;\n displayable.update();\n displayable.parent = null;\n }\n for (let i = 0; i < this._temporaryDisplayables.length; i++) {\n const displayable = this._temporaryDisplayables[i];\n // PENDING\n displayable.parent = this as unknown as Group;\n displayable.update();\n displayable.parent = null;\n }\n }\n\n getBoundingRect() {\n if (!this._rect) {\n const rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\n for (let i = 0; i < this._displayables.length; i++) {\n const displayable = this._displayables[i];\n const childRect = displayable.getBoundingRect().clone();\n if (displayable.needLocalTransform()) {\n childRect.applyTransform(displayable.getLocalTransform(m));\n }\n rect.union(childRect);\n }\n this._rect = rect;\n }\n return this._rect;\n }\n\n contain(x: number, y: number): boolean {\n const localPos = this.transformCoordToLocal(x, y);\n const rect = this.getBoundingRect();\n\n if (rect.contain(localPos[0], localPos[1])) {\n for (let i = 0; i < this._displayables.length; i++) {\n const displayable = this._displayables[i];\n if (displayable.contain(x, y)) {\n return true;\n }\n }\n }\n return false;\n }\n\n}","\nimport LRU from '../../core/LRU';\nimport { ImageLike } from '../../core/types';\n\nconst globalImageCache = new LRU(50);\n\ntype PendingWrap = {\n hostEl: {dirty: () => void}\n cb: (image: ImageLike, payload: any) => void\n cbPayload: any\n}\n\ntype CachedImageObj = {\n image: ImageLike\n pending: PendingWrap[]\n}\n\nexport function findExistImage(newImageOrSrc: string | ImageLike): ImageLike {\n if (typeof newImageOrSrc === 'string') {\n const cachedImgObj = globalImageCache.get(newImageOrSrc);\n return cachedImgObj && cachedImgObj.image;\n }\n else {\n return newImageOrSrc;\n }\n}\n\n/**\n * Caution: User should cache loaded images, but not just count on LRU.\n * Consider if required images more than LRU size, will dead loop occur?\n *\n * @param newImageOrSrc\n * @param image Existent image.\n * @param hostEl For calling `dirty`.\n * @param onload params: (image, cbPayload)\n * @param cbPayload Payload on cb calling.\n * @return image\n */\nexport function createOrUpdateImage(\n newImageOrSrc: string | ImageLike,\n image: ImageLike,\n hostEl: { dirty: () => void },\n onload?: (image: ImageLike, payload: T) => void,\n cbPayload?: T\n) {\n if (!newImageOrSrc) {\n return image;\n }\n else if (typeof newImageOrSrc === 'string') {\n\n // Image should not be loaded repeatly.\n if ((image && (image as any).__zrImageSrc === newImageOrSrc) || !hostEl) {\n return image;\n }\n\n // Only when there is no existent image or existent image src\n // is different, this method is responsible for load.\n const cachedImgObj = globalImageCache.get(newImageOrSrc);\n\n const pendingWrap = {hostEl: hostEl, cb: onload, cbPayload: cbPayload};\n\n if (cachedImgObj) {\n image = cachedImgObj.image;\n !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\n }\n else {\n image = new Image();\n image.onload = image.onerror = imageOnLoad;\n\n globalImageCache.put(\n newImageOrSrc,\n (image as any).__cachedImgObj = {\n image: image,\n pending: [pendingWrap]\n }\n );\n\n image.src = (image as any).__zrImageSrc = newImageOrSrc;\n }\n\n return image;\n }\n // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas\n else {\n return newImageOrSrc;\n }\n}\n\nfunction imageOnLoad(this: any) {\n const cachedImgObj = this.__cachedImgObj;\n this.onload = this.onerror = this.__cachedImgObj = null;\n\n for (let i = 0; i < cachedImgObj.pending.length; i++) {\n const pendingWrap = cachedImgObj.pending[i];\n const cb = pendingWrap.cb;\n cb && cb(this, pendingWrap.cbPayload);\n pendingWrap.hostEl.dirty();\n }\n cachedImgObj.pending.length = 0;\n}\n\nexport function isImageReady(image: ImageLike) {\n return image && image.width && image.height;\n}\n\n","import * as imageHelper from '../helper/image';\nimport {\n extend,\n retrieve2,\n retrieve3,\n reduce\n} from '../../core/util';\nimport { TextAlign, TextVerticalAlign, ImageLike, Dictionary } from '../../core/types';\nimport { TextStyleProps } from '../Text';\nimport { getLineHeight, getWidth, parsePercent } from '../../contain/text';\n\nconst STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\n\ninterface InnerTruncateOption {\n maxIteration?: number\n // If truncate result are less than minChar, ellipsis will not show\n // which is better for user hint in some cases\n minChar?: number\n // When all truncated, use the placeholder\n placeholder?: string\n\n maxIterations?: number\n}\n\ninterface InnerPreparedTruncateOption extends Required {\n font: string\n\n ellipsis: string\n ellipsisWidth: number\n contentWidth: number\n\n containerWidth: number\n cnCharWidth: number\n ascCharWidth: number\n}\n\n/**\n * Show ellipsis if overflow.\n */\nexport function truncateText(\n text: string,\n containerWidth: number,\n font: string,\n ellipsis: string,\n options: InnerTruncateOption\n): string {\n if (!containerWidth) {\n return '';\n }\n\n const textLines = (text + '').split('\\n');\n options = prepareTruncateOptions(containerWidth, font, ellipsis, options);\n\n // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n for (let i = 0, len = textLines.length; i < len; i++) {\n textLines[i] = truncateSingleLine(textLines[i], options as InnerPreparedTruncateOption);\n }\n\n return textLines.join('\\n');\n}\n\nfunction prepareTruncateOptions(\n containerWidth: number,\n font: string,\n ellipsis: string,\n options: InnerTruncateOption\n): InnerPreparedTruncateOption {\n options = options || {};\n let preparedOpts = extend({}, options) as InnerPreparedTruncateOption;\n\n preparedOpts.font = font;\n ellipsis = retrieve2(ellipsis, '...');\n preparedOpts.maxIterations = retrieve2(options.maxIterations, 2);\n const minChar = preparedOpts.minChar = retrieve2(options.minChar, 0);\n // FIXME\n // Other languages?\n preparedOpts.cnCharWidth = getWidth('国', font);\n // FIXME\n // Consider proportional font?\n const ascCharWidth = preparedOpts.ascCharWidth = getWidth('a', font);\n preparedOpts.placeholder = retrieve2(options.placeholder, '');\n\n // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.\n // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.\n let contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n for (let i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n contentWidth -= ascCharWidth;\n }\n\n let ellipsisWidth = getWidth(ellipsis, font);\n if (ellipsisWidth > contentWidth) {\n ellipsis = '';\n ellipsisWidth = 0;\n }\n\n contentWidth = containerWidth - ellipsisWidth;\n\n preparedOpts.ellipsis = ellipsis;\n preparedOpts.ellipsisWidth = ellipsisWidth;\n preparedOpts.contentWidth = contentWidth;\n preparedOpts.containerWidth = containerWidth;\n\n return preparedOpts;\n}\n\nfunction truncateSingleLine(textLine: string, options: InnerPreparedTruncateOption): string {\n const containerWidth = options.containerWidth;\n const font = options.font;\n const contentWidth = options.contentWidth;\n\n if (!containerWidth) {\n return '';\n }\n\n let lineWidth = getWidth(textLine, font);\n\n if (lineWidth <= containerWidth) {\n return textLine;\n }\n\n for (let j = 0; ; j++) {\n if (lineWidth <= contentWidth || j >= options.maxIterations) {\n textLine += options.ellipsis;\n break;\n }\n\n const subLength = j === 0\n ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth)\n : lineWidth > 0\n ? Math.floor(textLine.length * contentWidth / lineWidth)\n : 0;\n\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(\n text: string, contentWidth: number, ascCharWidth: number, cnCharWidth: number\n): number {\n let width = 0;\n let i = 0;\n for (let len = text.length; i < len && width < contentWidth; i++) {\n const charCode = text.charCodeAt(i);\n width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth;\n }\n return i;\n}\n\nexport interface PlainTextContentBlock {\n lineHeight: number\n contentHeight: number\n // Line height of actual content.\n calculatedLineHeight: number\n\n height: number\n outerHeight: number\n\n width: number\n\n lines: string[]\n}\n\nexport function parsePlainText(\n text: string,\n style?: TextStyleProps\n): PlainTextContentBlock {\n text != null && (text += '');\n\n // textPadding has been normalized\n const overflow = style.overflow;\n const padding = style.padding as number[];\n const font = style.font;\n const truncate = overflow === 'truncate';\n const calculatedLineHeight = getLineHeight(font);\n const lineHeight = retrieve2(style.lineHeight, calculatedLineHeight);\n\n const truncateLineOverflow = style.lineOverflow === 'truncate';\n\n let width = style.width;\n let lines: string[];\n\n if (width != null && overflow === 'break' || overflow === 'breakAll') {\n lines = text ? wrapText(text, style.font, width, overflow === 'breakAll', 0).lines : [];\n }\n else {\n lines = text ? text.split('\\n') : [];\n }\n\n const contentHeight = lines.length * lineHeight;\n const height = retrieve2(style.height, contentHeight);\n\n // Truncate lines.\n if (contentHeight > height && truncateLineOverflow) {\n const lineCount = Math.floor(height / lineHeight);\n\n lines = lines.slice(0, lineCount);\n\n // TODO If show ellipse for line truncate\n // if (style.ellipsis) {\n // const options = prepareTruncateOptions(width, font, style.ellipsis, {\n // minChar: style.truncateMinChar,\n // placeholder: style.placeholder\n // });\n // lines[lineCount - 1] = truncateSingleLine(lastLine, options);\n // }\n }\n\n let outerHeight = height;\n let outerWidth = width;\n if (padding) {\n outerHeight += padding[0] + padding[2];\n if (outerWidth != null) {\n outerWidth += padding[1] + padding[3];\n }\n }\n\n\n if (text && truncate && outerWidth != null) {\n const options = prepareTruncateOptions(width, font, style.ellipsis, {\n minChar: style.truncateMinChar,\n placeholder: style.placeholder\n });\n // Having every line has '...' when truncate multiple lines.\n for (let i = 0; i < lines.length; i++) {\n lines[i] = truncateSingleLine(lines[i], options);\n }\n }\n\n if (width == null) {\n let maxWidth = 0;\n // Calculate width\n for (let i = 0; i < lines.length; i++) {\n maxWidth = Math.max(getWidth(lines[i], font), maxWidth);\n }\n width = maxWidth;\n }\n\n return {\n lines: lines,\n height: height,\n outerHeight: outerHeight,\n lineHeight: lineHeight,\n calculatedLineHeight: calculatedLineHeight,\n contentHeight: contentHeight,\n width: width\n };\n}\n\nclass RichTextToken {\n styleName: string\n text: string\n width: number\n height: number\n\n // Inner height exclude padding\n innerHeight: number\n\n // Width and height of actual text content.\n contentHeight: number\n contentWidth: number\n\n lineHeight: number\n font: string\n align: TextAlign\n verticalAlign: TextVerticalAlign\n\n textPadding: number[]\n percentWidth?: string\n\n isLineHolder: boolean\n}\nclass RichTextLine {\n lineHeight: number\n width: number\n tokens: RichTextToken[] = []\n\n constructor(tokens?: RichTextToken[]) {\n if (tokens) {\n this.tokens = tokens;\n }\n }\n}\nexport class RichTextContentBlock {\n // width/height of content\n width: number = 0\n height: number = 0\n // Calculated text height\n contentWidth: number = 0\n contentHeight: number = 0\n // outerWidth/outerHeight with padding\n outerWidth: number = 0\n outerHeight: number = 0\n lines: RichTextLine[] = []\n}\n\ntype WrapInfo = {\n width: number,\n accumWidth: number,\n breakAll: boolean\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 * If styleName is undefined, it is plain text.\n */\nexport function parseRichText(text: string, style: TextStyleProps) {\n const contentBlock = new RichTextContentBlock();\n\n text != null && (text += '');\n if (!text) {\n return contentBlock;\n }\n\n const topWidth = style.width;\n const topHeight = style.height;\n const overflow = style.overflow;\n let wrapInfo: WrapInfo = (overflow === 'break' || overflow === 'breakAll') && topWidth != null\n ? {width: topWidth, accumWidth: 0, breakAll: overflow === 'breakAll'}\n : null;\n\n let lastIndex = STYLE_REG.lastIndex = 0;\n let result;\n while ((result = STYLE_REG.exec(text)) != null) {\n const matchedIndex = result.index;\n if (matchedIndex > lastIndex) {\n pushTokens(contentBlock, text.substring(lastIndex, matchedIndex), style, wrapInfo);\n }\n pushTokens(contentBlock, result[2], style, wrapInfo, result[1]);\n lastIndex = STYLE_REG.lastIndex;\n }\n\n if (lastIndex < text.length) {\n pushTokens(contentBlock, text.substring(lastIndex, text.length), style, wrapInfo);\n }\n\n // For `textWidth: xx%`\n let pendingList = [];\n\n let calculatedHeight = 0;\n let calculatedWidth = 0;\n\n const stlPadding = style.padding as number[];\n\n const truncate = overflow === 'truncate';\n const truncateLine = style.lineOverflow === 'truncate';\n\n // let prevToken: RichTextToken;\n\n function finishLine(line: RichTextLine, lineWidth: number, lineHeight: number) {\n line.width = lineWidth;\n line.lineHeight = lineHeight;\n calculatedHeight += lineHeight;\n calculatedWidth = Math.max(calculatedWidth, lineWidth);\n }\n // Calculate layout info of tokens.\n outer: for (let i = 0; i < contentBlock.lines.length; i++) {\n const line = contentBlock.lines[i];\n let lineHeight = 0;\n let lineWidth = 0;\n\n for (let j = 0; j < line.tokens.length; j++) {\n const token = line.tokens[j];\n const tokenStyle = token.styleName && style.rich[token.styleName] || {};\n // textPadding should not inherit from style.\n const textPadding = token.textPadding = tokenStyle.padding as number[];\n const paddingH = textPadding ? textPadding[1] + textPadding[3] : 0;\n\n const font = token.font = tokenStyle.font || style.font;\n\n token.contentHeight = getLineHeight(font);\n // textHeight can be used when textVerticalAlign is specified in token.\n let tokenHeight = retrieve2(\n // textHeight should not be inherited, consider it can be specified\n // as box height of the block.\n tokenStyle.height, token.contentHeight\n );\n token.innerHeight = tokenHeight;\n\n textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n token.height = tokenHeight;\n // Inlcude padding in lineHeight.\n token.lineHeight = retrieve3(\n tokenStyle.lineHeight, style.lineHeight, tokenHeight\n );\n\n token.align = tokenStyle && tokenStyle.align || style.align;\n token.verticalAlign = tokenStyle && tokenStyle.verticalAlign || 'middle';\n\n if (truncateLine && topHeight != null && calculatedHeight + token.lineHeight > topHeight) {\n // TODO Add ellipsis on the previous token.\n // prevToken.text =\n if (j > 0) {\n line.tokens = line.tokens.slice(0, j);\n finishLine(line, lineWidth, lineHeight);\n contentBlock.lines = contentBlock.lines.slice(0, i + 1);\n }\n else {\n contentBlock.lines = contentBlock.lines.slice(0, i);\n }\n break outer;\n }\n\n let styleTokenWidth = tokenStyle.width;\n let tokenWidthNotSpecified = styleTokenWidth == null || styleTokenWidth === 'auto';\n\n // Percent width, can be `100%`, can be used in drawing separate\n // line when box width is needed to be auto.\n if (typeof styleTokenWidth === 'string' && styleTokenWidth.charAt(styleTokenWidth.length - 1) === '%') {\n token.percentWidth = styleTokenWidth;\n pendingList.push(token);\n\n token.contentWidth = getWidth(token.text, font);\n // Do not truncate in this case, because there is no user case\n // and it is too complicated.\n }\n else {\n if (tokenWidthNotSpecified) {\n // FIXME: If image is not loaded and textWidth is not specified, calling\n // `getBoundingRect()` will not get correct result.\n const textBackgroundColor = tokenStyle.backgroundColor;\n let bgImg = textBackgroundColor && (textBackgroundColor as { image: ImageLike }).image;\n\n if (bgImg) {\n bgImg = imageHelper.findExistImage(bgImg);\n if (imageHelper.isImageReady(bgImg)) {\n // Update token width from image size.\n token.width = Math.max(token.width, bgImg.width * tokenHeight / bgImg.height);\n }\n }\n }\n\n const remainTruncWidth = truncate && topWidth != null\n ? topWidth - lineWidth : null;\n\n if (remainTruncWidth != null && remainTruncWidth < token.width) {\n if (!tokenWidthNotSpecified || remainTruncWidth < paddingH) {\n token.text = '';\n token.width = token.contentWidth = 0;\n }\n else {\n token.text = truncateText(\n token.text, remainTruncWidth - paddingH, font, style.ellipsis,\n {minChar: style.truncateMinChar}\n );\n token.width = token.contentWidth = getWidth(token.text, font);\n }\n }\n else {\n token.contentWidth = getWidth(token.text, font);\n }\n }\n\n token.width += paddingH;\n\n lineWidth += token.width;\n tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n\n // prevToken = token;\n }\n\n finishLine(line, lineWidth, lineHeight);\n }\n\n contentBlock.outerWidth = contentBlock.width = retrieve2(topWidth, calculatedWidth);\n contentBlock.outerHeight = contentBlock.height = retrieve2(topHeight, calculatedHeight);\n contentBlock.contentHeight = calculatedHeight;\n contentBlock.contentWidth = calculatedWidth;\n\n if (stlPadding) {\n contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n }\n\n for (let i = 0; i < pendingList.length; i++) {\n const token = pendingList[i];\n const percentWidth = token.percentWidth;\n // Should not base on outerWidth, because token can not be placed out of padding.\n token.width = parseInt(percentWidth, 10) / 100 * contentBlock.width;\n }\n\n return contentBlock;\n}\n\ntype TokenStyle = TextStyleProps['rich'][string];\n\nfunction pushTokens(\n block: RichTextContentBlock,\n str: string,\n style: TextStyleProps,\n wrapInfo: WrapInfo,\n styleName?: string\n) {\n const isEmptyStr = str === '';\n const tokenStyle: TokenStyle = styleName && style.rich[styleName] || {};\n const lines = block.lines;\n const font = tokenStyle.font || style.font;\n let newLine = false;\n let strLines;\n let linesWidths;\n\n if (wrapInfo) {\n const tokenPadding = tokenStyle.padding as number[];\n let tokenPaddingH = tokenPadding ? tokenPadding[1] + tokenPadding[3] : 0;\n if (tokenStyle.width != null && tokenStyle.width !== 'auto') {\n // Wrap the whole token if tokenWidth if fixed.\n const outerWidth = parsePercent(tokenStyle.width, wrapInfo.width) + tokenPaddingH;\n if (lines.length > 0) { // Not first line\n if (outerWidth + wrapInfo.accumWidth > wrapInfo.width) {\n // TODO Support wrap text in token.\n strLines = str.split('\\n');\n newLine = true;\n }\n }\n\n wrapInfo.accumWidth = outerWidth;\n }\n else {\n const res = wrapText(str, font, wrapInfo.width, wrapInfo.breakAll, wrapInfo.accumWidth);\n wrapInfo.accumWidth = res.accumWidth + tokenPaddingH;\n linesWidths = res.linesWidths;\n strLines = res.lines;\n }\n }\n else {\n strLines = str.split('\\n');\n }\n\n for (let i = 0; i < strLines.length; i++) {\n const text = strLines[i];\n const token = new RichTextToken();\n token.styleName = styleName;\n token.text = text;\n token.isLineHolder = !text && !isEmptyStr;\n\n if (typeof tokenStyle.width === 'number') {\n token.width = tokenStyle.width;\n }\n else {\n token.width = linesWidths\n ? linesWidths[i] // Caculated width in the wrap\n : getWidth(text, font);\n }\n\n // The first token should be appended to the last line if not new line.\n if (!i && !newLine) {\n const tokens = (lines[lines.length - 1] || (lines[0] = new RichTextLine())).tokens;\n\n // 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 const tokensLen = tokens.length;\n (tokensLen === 1 && tokens[0].isLineHolder)\n ? (tokens[0] = token)\n // 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 }\n // Other tokens always start a new line.\n else {\n // If there is '', insert it as a placeholder.\n lines.push(new RichTextLine([token]));\n }\n }\n}\n\n\nfunction isLatin(ch: string) {\n let code = ch.charCodeAt(0);\n return code >= 0x21 && code <= 0xFF;\n}\n\nconst breakCharMap = reduce(',&?/;] '.split(''), function (obj, ch) {\n obj[ch] = true;\n return obj;\n}, {} as Dictionary);\n/**\n * If break by word. For latin languages.\n */\nfunction isWordBreakChar(ch: string) {\n if (isLatin(ch)) {\n if (breakCharMap[ch]) {\n return true;\n }\n return false;\n }\n return true;\n}\n\nfunction wrapText(\n text: string,\n font: string,\n lineWidth: number,\n isBreakAll: boolean,\n lastAccumWidth: number\n) {\n let lines: string[] = [];\n let linesWidths: number[] = [];\n let line = '';\n let currentWord = '';\n let currentWordWidth = 0;\n let accumWidth = 0;\n\n for (let i = 0; i < text.length; i++) {\n\n const ch = text.charAt(i);\n if (ch === '\\n') {\n if (currentWord) {\n line += currentWord;\n accumWidth += currentWordWidth;\n }\n lines.push(line);\n linesWidths.push(accumWidth);\n // Reset\n line = '';\n currentWord = '';\n currentWordWidth = 0;\n accumWidth = 0;\n continue;\n }\n\n const chWidth = getWidth(ch, font);\n const inWord = isBreakAll ? false : !isWordBreakChar(ch);\n\n if (!lines.length\n ? lastAccumWidth + accumWidth + chWidth > lineWidth\n : accumWidth + chWidth > lineWidth\n ) {\n if (!accumWidth) { // If nothing appended yet.\n if (inWord) {\n // The word length is still too long for one line\n // Force break the word\n lines.push(currentWord);\n linesWidths.push(currentWordWidth);\n\n currentWord = ch;\n currentWordWidth = chWidth;\n }\n else {\n // lineWidth is too small for ch\n lines.push(ch);\n linesWidths.push(chWidth);\n }\n }\n else if (line || currentWord) {\n if (inWord) {\n if (!line) {\n // The one word is still too long for one line\n // Force break the word\n // TODO Keep the word?\n line = currentWord;\n currentWord = '';\n currentWordWidth = 0;\n accumWidth = currentWordWidth;\n }\n\n lines.push(line);\n linesWidths.push(accumWidth - currentWordWidth);\n\n // Break the whole word\n currentWord += ch;\n currentWordWidth += chWidth;\n line = '';\n accumWidth = currentWordWidth;\n }\n else {\n // Append lastWord if have\n if (currentWord) {\n line += currentWord;\n accumWidth += currentWordWidth;\n currentWord = '';\n currentWordWidth = 0;\n }\n lines.push(line);\n linesWidths.push(accumWidth);\n\n line = ch;\n accumWidth = chWidth;\n }\n }\n\n continue;\n }\n\n accumWidth += chWidth;\n\n if (inWord) {\n currentWord += ch;\n currentWordWidth += chWidth;\n }\n else {\n // Append whole word\n if (currentWord) {\n line += currentWord;\n // Reset\n currentWord = '';\n currentWordWidth = 0;\n }\n\n // Append character\n line += ch;\n }\n }\n\n if (!lines.length && !line) {\n line = text;\n currentWord = '';\n currentWordWidth = 0;\n }\n\n // Append last line.\n if (currentWord) {\n line += currentWord;\n }\n if (line) {\n lines.push(line);\n linesWidths.push(accumWidth);\n }\n\n if (lines.length === 1) {\n // No new line.\n accumWidth += lastAccumWidth;\n }\n\n return {\n // Accum width of last line\n accumWidth,\n lines: lines,\n linesWidths\n };\n}","/**\n * RichText is a container that manages complex text label.\n * It will parse text string and create sub displayble elements respectively.\n */\nimport { TextAlign, TextVerticalAlign, ImageLike, Dictionary, MapToType } from '../core/types';\nimport { parseRichText, parsePlainText } from './helper/parseText';\nimport TSpan, { TSpanStyleProps } from './TSpan';\nimport { retrieve2, each, normalizeCssArray, trim, retrieve3, extend, keys, defaults } from '../core/util';\nimport { DEFAULT_FONT, adjustTextX, adjustTextY } from '../contain/text';\nimport ZRImage from './Image';\nimport Rect from './shape/Rect';\nimport BoundingRect from '../core/BoundingRect';\nimport { MatrixArray, copy } from '../core/matrix';\nimport Displayable, { DisplayableStatePropNames, DisplayableProps, DEFAULT_COMMON_ANIMATION_PROPS } from './Displayable';\nimport { ZRenderType } from '../zrender';\nimport Animator from '../animation/Animator';\nimport Transformable from '../core/Transformable';\nimport { ElementCommonState } from '../Element';\n\ntype TextContentBlock = ReturnType\ntype TextLine = TextContentBlock['lines'][0]\ntype TextToken = TextLine['tokens'][0]\n\n// TODO Default value?\nexport interface TextStylePropsPart {\n // TODO Text is assigned inside zrender\n text?: string\n\n fill?: string\n stroke?: string\n\n opacity?: number\n fillOpacity?: number\n strokeOpacity?: number\n /**\n * textStroke may be set as some color as a default\n * value in upper applicaion, where the default value\n * of lineWidth should be 0 to make sure that\n * user can choose to do not use text stroke.\n */\n lineWidth?: number\n lineDash?: false | number[]\n lineDashOffset?: number\n borderDash?: false | number[]\n borderDashOffset?: number\n\n /**\n * If `fontSize` or `fontFamily` exists, `font` will be reset by\n * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`.\n * So do not visit it directly in upper application (like echarts),\n * but use `contain/text#makeFont` instead.\n */\n font?: string\n /**\n * The same as font. Use font please.\n * @deprecated\n */\n textFont?: string\n\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n */\n fontStyle?: 'normal' | 'italic' | 'oblique'\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n */\n fontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | number\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n */\n fontFamily?: string\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n * Should be 12 but not '12px'.\n */\n fontSize?: number | string\n\n align?: TextAlign\n verticalAlign?: TextVerticalAlign\n\n /**\n * Line height. Default to be text height of '国'\n */\n lineHeight?: number\n /**\n * Width of text block. Not include padding\n * Used for background, truncate, wrap\n */\n width?: number | string\n /**\n * Height of text block. Not include padding\n * Used for background, truncate\n */\n height?: number\n /**\n * Reserved for special functinality, like 'hr'.\n */\n tag?: string\n\n textShadowColor?: string\n textShadowBlur?: number\n textShadowOffsetX?: number\n textShadowOffsetY?: number\n\n // Shadow, background, border of text box.\n backgroundColor?: string | {\n image: ImageLike | string\n }\n\n /**\n * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]`\n */\n padding?: number | number[]\n /**\n * Margin of label. Used when layouting the label.\n */\n margin?: number\n\n borderColor?: string\n borderWidth?: number\n borderRadius?: number | number[]\n\n /**\n * Shadow color for background box.\n */\n shadowColor?: string\n /**\n * Shadow blur for background box.\n */\n shadowBlur?: number\n /**\n * Shadow offset x for background box.\n */\n shadowOffsetX?: number\n /**\n * Shadow offset y for background box.\n */\n shadowOffsetY?: number\n}\nexport interface TextStyleProps extends TextStylePropsPart {\n\n text?: string\n\n x?: number\n y?: number\n\n /**\n * Only support number in the top block.\n */\n width?: number\n /**\n * Text styles for rich text.\n */\n rich?: Dictionary\n\n /**\n * Strategy when calculated text width exceeds textWidth.\n * break: break by word\n * break: will break inside the word\n * truncate: truncate the text and show ellipsis\n * Do nothing if not set\n */\n overflow?: 'break' | 'breakAll' | 'truncate' | 'none'\n\n /**\n * Strategy when text lines exceeds textHeight.\n * Do nothing if not set\n */\n lineOverflow?: 'truncate'\n\n /**\n * Epllipsis used if text is truncated\n */\n ellipsis?: string\n /**\n * Placeholder used if text is truncated to empty\n */\n placeholder?: string\n /**\n * Min characters for truncating\n */\n truncateMinChar?: number\n}\n\nexport interface TextProps extends DisplayableProps {\n style?: TextStyleProps\n\n zlevel?: number\n z?: number\n z2?: number\n\n culling?: boolean\n cursor?: string\n}\n\nexport type TextState = Pick & ElementCommonState\n\nexport type DefaultTextStyle = Pick & {\n autoStroke?: boolean\n};\n\nconst DEFAULT_RICH_TEXT_COLOR = {\n fill: '#000'\n};\nconst DEFAULT_STROKE_LINE_WIDTH = 2;\n\n// const DEFAULT_TEXT_STYLE: TextStyleProps = {\n// x: 0,\n// y: 0,\n// fill: '#000',\n// stroke: null,\n// opacity: 0,\n// fillOpacity:\n// }\n\nexport const DEFAULT_TEXT_ANIMATION_PROPS: MapToType = {\n style: defaults, MapToType>({\n fill: true,\n stroke: true,\n fillOpacity: true,\n strokeOpacity: true,\n lineWidth: true,\n fontSize: true,\n lineHeight: true,\n width: true,\n height: true,\n textShadowColor: true,\n textShadowBlur: true,\n textShadowOffsetX: true,\n textShadowOffsetY: true,\n backgroundColor: true,\n padding: true, // TODO needs normalize padding before animate\n borderColor: true,\n borderWidth: true,\n borderRadius: true // TODO needs normalize radius before animate\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n };\n\n\ninterface ZRText {\n animate(key?: '', loop?: boolean): Animator\n animate(key: 'style', loop?: boolean): Animator\n\n getState(stateName: string): TextState\n ensureState(stateName: string): TextState\n\n states: Dictionary\n stateProxy: (stateName: string) => TextState\n}\n\nclass ZRText extends Displayable {\n\n type = 'text'\n\n style: TextStyleProps\n\n /**\n * How to handling label overlap\n *\n * hidden:\n */\n overlap: 'hidden' | 'show' | 'blur'\n\n /**\n * Calculated transform after the text is attached on some element.\n * Will override the default transform.\n */\n attachedTransform: Transformable\n\n private _children: (ZRImage | Rect | TSpan)[] = []\n\n private _childCursor: 0\n\n private _defaultStyle: DefaultTextStyle = DEFAULT_RICH_TEXT_COLOR\n\n constructor(opts?: TextProps) {\n super();\n this.attr(opts);\n }\n\n childrenRef() {\n return this._children;\n }\n\n update() {\n // Update children\n if (this.styleChanged()) {\n this._updateSubTexts();\n }\n\n\n for (let i = 0; i < this._children.length; i++) {\n const child = this._children[i];\n // Set common properties.\n child.zlevel = this.zlevel;\n child.z = this.z;\n child.z2 = this.z2;\n child.culling = this.culling;\n child.cursor = this.cursor;\n child.invisible = this.invisible;\n }\n\n const attachedTransform = this.attachedTransform;\n if (attachedTransform) {\n attachedTransform.updateTransform();\n const m = attachedTransform.transform;\n if (m) {\n this.transform = this.transform || [];\n // Copy to the transform will be actually used.\n copy(this.transform, m);\n }\n else {\n this.transform = null;\n }\n }\n else {\n super.update();\n }\n }\n\n getComputedTransform() {\n if (this.__hostTarget) {\n // Update host target transform\n this.__hostTarget.getComputedTransform();\n // Update text position.\n this.__hostTarget.updateInnerText(true);\n }\n\n return this.attachedTransform ? this.attachedTransform.getComputedTransform()\n : super.getComputedTransform();\n }\n\n private _updateSubTexts() {\n // Reset child visit cursor\n this._childCursor = 0;\n\n normalizeTextStyle(this.style);\n this.style.rich\n ? this._updateRichTexts()\n : this._updatePlainTexts();\n\n this._children.length = this._childCursor;\n\n this.styleUpdated();\n }\n\n addSelfToZr(zr: ZRenderType) {\n super.addSelfToZr(zr);\n for (let i = 0; i < this._children.length; i++) {\n // Also need mount __zr for case like hover detection.\n // The case: hover on a label (position: 'top') causes host el\n // scaled and label Y position lifts a bit so that out of the\n // pointer, then mouse move should be able to trigger \"mouseout\".\n this._children[i].__zr = zr;\n }\n }\n\n removeSelfFromZr(zr: ZRenderType) {\n super.removeSelfFromZr(zr);\n for (let i = 0; i < this._children.length; i++) {\n this._children[i].__zr = null;\n }\n }\n\n getBoundingRect(): BoundingRect {\n if (this.styleChanged()) {\n this._updateSubTexts();\n }\n if (!this._rect) {\n // TODO: Optimize when using width and overflow: wrap/truncate\n const tmpRect = new BoundingRect(0, 0, 0, 0);\n const children = this._children;\n const tmpMat: MatrixArray = [];\n let rect = null;\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const childRect = child.getBoundingRect();\n const transform = child.getLocalTransform(tmpMat);\n\n if (transform) {\n tmpRect.copy(childRect);\n tmpRect.applyTransform(transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n }\n else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n this._rect = rect || tmpRect;\n }\n return this._rect;\n }\n\n // Can be set in Element. To calculate text fill automatically when textContent is inside element\n setDefaultTextStyle(defaultTextStyle: DefaultTextStyle) {\n // Use builtin if defaultTextStyle is not given.\n this._defaultStyle = defaultTextStyle || DEFAULT_RICH_TEXT_COLOR;\n }\n\n setTextContent(textContent: never) {\n throw new Error('Can\\'t attach text on another text');\n }\n\n // getDefaultStyleValue(key: T): TextStyleProps[T] {\n // // Default value is on the prototype.\n // return this.style.prototype[key];\n // }\n\n protected _mergeStyle(targetStyle: TextStyleProps, sourceStyle: TextStyleProps) {\n if (!sourceStyle) {\n return targetStyle;\n }\n\n // DO deep merge on rich configurations.\n const sourceRich = sourceStyle.rich;\n const targetRich = targetStyle.rich || (sourceRich && {}); // Create a new one if source have rich but target don't\n\n extend(targetStyle, sourceStyle);\n\n if (sourceRich && targetRich) {\n // merge rich and assign rich again.\n this._mergeRich(targetRich, sourceRich);\n targetStyle.rich = targetRich;\n }\n else if (targetRich) {\n // If source rich not exists. DON'T override the target rich\n targetStyle.rich = targetRich;\n }\n\n return targetStyle;\n }\n\n private _mergeRich(targetRich: TextStyleProps['rich'], sourceRich: TextStyleProps['rich']) {\n const richNames = keys(sourceRich);\n // Merge by rich names.\n for (let i = 0; i < richNames.length; i++) {\n const richName = richNames[i];\n targetRich[richName] = targetRich[richName] || {};\n extend(targetRich[richName], sourceRich[richName]);\n }\n }\n\n getAnimationStyleProps() {\n return DEFAULT_TEXT_ANIMATION_PROPS;\n }\n\n\n private _getOrCreateChild(Ctor: {new(): TSpan}): TSpan\n private _getOrCreateChild(Ctor: {new(): ZRImage}): ZRImage\n private _getOrCreateChild(Ctor: {new(): Rect}): Rect\n private _getOrCreateChild(Ctor: {new(): TSpan | Rect | ZRImage}): TSpan | Rect | ZRImage {\n let child = this._children[this._childCursor];\n if (!child || !(child instanceof Ctor)) {\n child = new Ctor();\n }\n this._children[this._childCursor++] = child;\n child.__zr = this.__zr;\n // TODO to users parent can only be group.\n child.parent = this as any;\n return child;\n }\n\n private _updatePlainTexts() {\n const style = this.style;\n const textFont = style.font || DEFAULT_FONT;\n const textPadding = style.padding as number[];\n\n const text = getStyleText(style);\n const contentBlock = parsePlainText(text, style);\n const needDrawBg = needDrawBackground(style);\n const bgColorDrawn = !!(style.backgroundColor);\n\n let outerHeight = contentBlock.outerHeight;\n\n const textLines = contentBlock.lines;\n const lineHeight = contentBlock.lineHeight;\n\n const defaultStyle = this._defaultStyle;\n\n const baseX = style.x || 0;\n const baseY = style.y || 0;\n const textAlign = style.align || defaultStyle.align || 'left';\n const verticalAlign = style.verticalAlign || defaultStyle.verticalAlign || 'top';\n\n let textX = baseX;\n let textY = adjustTextY(baseY, contentBlock.contentHeight, verticalAlign);\n\n if (needDrawBg || textPadding) {\n // Consider performance, do not call getTextWidth util necessary.\n let outerWidth = contentBlock.width;\n textPadding && (outerWidth += textPadding[1] + textPadding[3]);\n const boxX = adjustTextX(baseX, outerWidth, textAlign);\n const boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n\n needDrawBg && this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);\n }\n\n // `textBaseline` is set as 'middle'.\n textY += lineHeight / 2;\n\n if (textPadding) {\n textX = getTextXForPadding(baseX, textAlign, textPadding);\n if (verticalAlign === 'top') {\n textY += textPadding[0];\n }\n else if (verticalAlign === 'bottom') {\n textY -= textPadding[2];\n }\n }\n\n let defaultLineWidth = 0;\n let useDefaultFill = false;\n const textFill = getFill(\n 'fill' in style\n ? style.fill\n : (useDefaultFill = true, defaultStyle.fill)\n );\n const textStroke = getStroke(\n 'stroke' in style\n ? style.stroke\n : (!bgColorDrawn\n // If we use \"auto lineWidth\" widely, it probably bring about some bad case.\n // So the current strategy is:\n // If `style.fill` is specified (i.e., `useDefaultFill` is `false`)\n // (A) And if `textConfig.insideStroke/outsideStroke` is not specified as a color\n // (i.e., `defaultStyle.autoStroke` is `true`), we do not actually display\n // the auto stroke because we can not make sure wether the stoke is approperiate to\n // the given `fill`.\n // (B) But if `textConfig.insideStroke/outsideStroke` is specified as a color,\n // we give the auto lineWidth to display the given stoke color.\n && (!defaultStyle.autoStroke || useDefaultFill)\n )\n ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n : null\n );\n\n const hasShadow = style.textShadowBlur > 0;\n\n const fixedBoundingRect = style.width != null\n && (style.overflow === 'truncate' || style.overflow === 'break' || style.overflow === 'breakAll');\n const calculatedLineHeight = contentBlock.calculatedLineHeight;\n\n for (let i = 0; i < textLines.length; i++) {\n const el = this._getOrCreateChild(TSpan);\n // Always create new style.\n const subElStyle: TSpanStyleProps = el.createStyle();\n el.useStyle(subElStyle);\n subElStyle.text = textLines[i];\n subElStyle.x = textX;\n subElStyle.y = textY;\n // Always set textAlign and textBase line, because it is difficute to calculate\n // textAlign from prevEl, and we dont sure whether textAlign will be reset if\n // font set happened.\n if (textAlign) {\n subElStyle.textAlign = textAlign;\n }\n // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n subElStyle.textBaseline = 'middle';\n subElStyle.opacity = style.opacity;\n // Fill after stroke so the outline will not cover the main part.\n subElStyle.strokeFirst = true;\n\n if (hasShadow) {\n subElStyle.shadowBlur = style.textShadowBlur || 0;\n subElStyle.shadowColor = style.textShadowColor || 'transparent';\n subElStyle.shadowOffsetX = style.textShadowOffsetX || 0;\n subElStyle.shadowOffsetY = style.textShadowOffsetY || 0;\n }\n\n if (textStroke) {\n subElStyle.stroke = textStroke as string;\n subElStyle.lineWidth = style.lineWidth || defaultLineWidth;\n subElStyle.lineDash = style.lineDash;\n subElStyle.lineDashOffset = style.lineDashOffset || 0;\n }\n if (textFill) {\n subElStyle.fill = textFill as string;\n }\n\n subElStyle.font = textFont;\n\n textY += lineHeight;\n\n if (fixedBoundingRect) {\n el.setBoundingRect(new BoundingRect(\n adjustTextX(subElStyle.x, style.width, subElStyle.textAlign as TextAlign),\n adjustTextY(subElStyle.y, calculatedLineHeight, subElStyle.textBaseline as TextVerticalAlign),\n style.width,\n calculatedLineHeight\n ));\n }\n }\n }\n\n\n private _updateRichTexts() {\n const style = this.style;\n\n // TODO Only parse when text changed?\n const text = getStyleText(style);\n const contentBlock = parseRichText(text, style);\n\n const contentWidth = contentBlock.width;\n const outerWidth = contentBlock.outerWidth;\n const outerHeight = contentBlock.outerHeight;\n const textPadding = style.padding as number[];\n\n const baseX = style.x || 0;\n const baseY = style.y || 0;\n const defaultStyle = this._defaultStyle;\n const textAlign = style.align || defaultStyle.align;\n const verticalAlign = style.verticalAlign || defaultStyle.verticalAlign;\n\n const boxX = adjustTextX(baseX, outerWidth, textAlign);\n const boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n let xLeft = boxX;\n let lineTop = boxY;\n\n if (textPadding) {\n xLeft += textPadding[3];\n lineTop += textPadding[0];\n }\n\n let xRight = xLeft + contentWidth;\n\n if (needDrawBackground(style)) {\n this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);\n }\n const bgColorDrawn = !!(style.backgroundColor);\n\n for (let i = 0; i < contentBlock.lines.length; i++) {\n const line = contentBlock.lines[i];\n const tokens = line.tokens;\n const tokenCount = tokens.length;\n const lineHeight = line.lineHeight;\n\n let remainedWidth = line.width;\n let leftIndex = 0;\n let lineXLeft = xLeft;\n let lineXRight = xRight;\n let rightIndex = tokenCount - 1;\n let token;\n\n while (\n leftIndex < tokenCount\n && (token = tokens[leftIndex], !token.align || token.align === 'left')\n ) {\n this._placeToken(token, style, lineHeight, lineTop, lineXLeft, 'left', bgColorDrawn);\n remainedWidth -= token.width;\n lineXLeft += token.width;\n leftIndex++;\n }\n\n while (\n rightIndex >= 0\n && (token = tokens[rightIndex], token.align === 'right')\n ) {\n this._placeToken(token, style, lineHeight, lineTop, lineXRight, 'right', bgColorDrawn);\n remainedWidth -= token.width;\n lineXRight -= token.width;\n rightIndex--;\n }\n\n // The other tokens are placed as textAlign 'center' if there is enough space.\n lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - remainedWidth) / 2;\n while (leftIndex <= rightIndex) {\n token = tokens[leftIndex];\n // Consider width specified by user, use 'center' rather than 'left'.\n this._placeToken(\n token, style, lineHeight, lineTop,\n lineXLeft + token.width / 2, 'center', bgColorDrawn\n );\n lineXLeft += token.width;\n leftIndex++;\n }\n\n lineTop += lineHeight;\n }\n }\n\n private _placeToken(\n token: TextToken,\n style: TextStyleProps,\n lineHeight: number,\n lineTop: number,\n x: number,\n textAlign: string,\n parentBgColorDrawn: boolean\n ) {\n const tokenStyle = style.rich[token.styleName] || {};\n tokenStyle.text = token.text;\n\n // 'ctx.textBaseline' is always set as 'middle', for sake of\n // the bias of \"Microsoft YaHei\".\n const verticalAlign = token.verticalAlign;\n let y = lineTop + lineHeight / 2;\n if (verticalAlign === 'top') {\n y = lineTop + token.height / 2;\n }\n else if (verticalAlign === 'bottom') {\n y = lineTop + lineHeight - token.height / 2;\n }\n\n const needDrawBg = !token.isLineHolder && needDrawBackground(tokenStyle);\n needDrawBg && this._renderBackground(\n tokenStyle,\n style,\n textAlign === 'right'\n ? x - token.width\n : textAlign === 'center'\n ? x - token.width / 2\n : x,\n y - token.height / 2,\n token.width,\n token.height\n );\n const bgColorDrawn = !!tokenStyle.backgroundColor;\n\n const textPadding = token.textPadding;\n if (textPadding) {\n x = getTextXForPadding(x, textAlign, textPadding);\n y -= token.height / 2 - textPadding[0] - token.innerHeight / 2;\n }\n\n const el = this._getOrCreateChild(TSpan);\n const subElStyle: TSpanStyleProps = el.createStyle();\n // Always create new style.\n el.useStyle(subElStyle);\n\n const defaultStyle = this._defaultStyle;\n let useDefaultFill = false;\n let defaultLineWidth = 0;\n const textFill = getStroke(\n 'fill' in tokenStyle ? tokenStyle.fill\n : 'fill' in style ? style.fill\n : (useDefaultFill = true, defaultStyle.fill)\n );\n const textStroke = getStroke(\n 'stroke' in tokenStyle ? tokenStyle.stroke\n : 'stroke' in style ? style.stroke\n : (\n !bgColorDrawn\n && !parentBgColorDrawn\n // See the strategy explained above.\n && (!defaultStyle.autoStroke || useDefaultFill)\n ) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n : null\n );\n\n const hasShadow = tokenStyle.textShadowBlur > 0\n || style.textShadowBlur > 0;\n\n subElStyle.text = token.text;\n subElStyle.x = x;\n subElStyle.y = y;\n if (hasShadow) {\n subElStyle.shadowBlur = tokenStyle.textShadowBlur || style.textShadowBlur || 0;\n subElStyle.shadowColor = tokenStyle.textShadowColor || style.textShadowColor || 'transparent';\n subElStyle.shadowOffsetX = tokenStyle.textShadowOffsetX || style.textShadowOffsetX || 0;\n subElStyle.shadowOffsetY = tokenStyle.textShadowOffsetY || style.textShadowOffsetY || 0;\n }\n\n subElStyle.textAlign = textAlign as CanvasTextAlign;\n // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n subElStyle.textBaseline = 'middle';\n subElStyle.font = token.font || DEFAULT_FONT;\n subElStyle.opacity = retrieve3(tokenStyle.opacity, style.opacity, 1);\n\n if (textStroke) {\n subElStyle.lineWidth = retrieve3(tokenStyle.lineWidth, style.lineWidth, defaultLineWidth);\n subElStyle.lineDash = retrieve2(tokenStyle.lineDash, style.lineDash);\n subElStyle.lineDashOffset = style.lineDashOffset || 0;\n subElStyle.stroke = textStroke;\n }\n if (textFill) {\n subElStyle.fill = textFill;\n }\n\n const textWidth = token.contentWidth;\n const textHeight = token.contentHeight;\n // NOTE: Should not call dirtyStyle after setBoundingRect. Or it will be cleared.\n el.setBoundingRect(new BoundingRect(\n adjustTextX(subElStyle.x, textWidth, subElStyle.textAlign as TextAlign),\n adjustTextY(subElStyle.y, textHeight, subElStyle.textBaseline as TextVerticalAlign),\n textWidth,\n textHeight\n ));\n }\n\n private _renderBackground(\n style: TextStylePropsPart,\n topStyle: TextStylePropsPart,\n x: number,\n y: number,\n width: number,\n height: number\n ) {\n const textBackgroundColor = style.backgroundColor;\n const textBorderWidth = style.borderWidth;\n const textBorderColor = style.borderColor;\n const isImageBg = textBackgroundColor && (textBackgroundColor as {image: ImageLike}).image;\n const isPlainOrGradientBg = textBackgroundColor && !isImageBg;\n const textBorderRadius = style.borderRadius;\n const self = this;\n\n let rectEl: Rect;\n let imgEl: ZRImage;\n if (isPlainOrGradientBg || (textBorderWidth && textBorderColor)) {\n // Background is color\n rectEl = this._getOrCreateChild(Rect);\n rectEl.useStyle(rectEl.createStyle()); // Create an empty style.\n rectEl.style.fill = null;\n const rectShape = rectEl.shape;\n rectShape.x = x;\n rectShape.y = y;\n rectShape.width = width;\n rectShape.height = height;\n rectShape.r = textBorderRadius;\n rectEl.dirtyShape();\n }\n\n if (isPlainOrGradientBg) {\n const rectStyle = rectEl.style;\n rectStyle.fill = textBackgroundColor as string || null;\n rectStyle.fillOpacity = retrieve2(style.fillOpacity, 1);\n }\n else if (isImageBg) {\n imgEl = this._getOrCreateChild(ZRImage);\n imgEl.onload = function () {\n // Refresh and relayout after image loaded.\n self.dirtyStyle();\n };\n const imgStyle = imgEl.style;\n imgStyle.image = (textBackgroundColor as {image: ImageLike}).image;\n imgStyle.x = x;\n imgStyle.y = y;\n imgStyle.width = width;\n imgStyle.height = height;\n }\n\n if (textBorderWidth && textBorderColor) {\n const rectStyle = rectEl.style;\n rectStyle.lineWidth = textBorderWidth;\n rectStyle.stroke = textBorderColor;\n rectStyle.strokeOpacity = retrieve2(style.strokeOpacity, 1);\n rectStyle.lineDash = style.borderDash;\n rectStyle.lineDashOffset = style.borderDashOffset || 0;\n rectEl.strokeContainThreshold = 0;\n\n // Making shadow looks better.\n if (rectEl.hasFill() && rectEl.hasStroke()) {\n rectStyle.strokeFirst = true;\n rectStyle.lineWidth *= 2;\n }\n }\n\n const commonStyle = (rectEl || imgEl).style;\n commonStyle.shadowBlur = style.shadowBlur || 0;\n commonStyle.shadowColor = style.shadowColor || 'transparent';\n commonStyle.shadowOffsetX = style.shadowOffsetX || 0;\n commonStyle.shadowOffsetY = style.shadowOffsetY || 0;\n commonStyle.opacity = retrieve3(style.opacity, topStyle.opacity, 1);\n }\n\n static makeFont(style: TextStylePropsPart): string {\n // FIXME in node-canvas fontWeight is before fontStyle\n // Use `fontSize` `fontFamily` to check whether font properties are defined.\n let font = '';\n if (style.fontSize || style.fontFamily || style.fontWeight) {\n let fontSize = '';\n if (\n typeof style.fontSize === 'string'\n && (\n style.fontSize.indexOf('px') !== -1\n || style.fontSize.indexOf('rem') !== -1\n || style.fontSize.indexOf('em') !== -1\n )\n ) {\n fontSize = style.fontSize;\n }\n else if (!isNaN(+style.fontSize)) {\n fontSize = style.fontSize + 'px';\n }\n else {\n fontSize = '12px';\n }\n font = [\n style.fontStyle,\n style.fontWeight,\n fontSize,\n // If font properties are defined, `fontFamily` should not be ignored.\n style.fontFamily || 'sans-serif'\n ].join(' ');\n }\n return font && trim(font) || style.textFont || style.font;\n }\n}\n\n\nconst VALID_TEXT_ALIGN = {left: true, right: 1, center: 1};\nconst VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1};\n\nexport function normalizeTextStyle(style: TextStyleProps): TextStyleProps {\n normalizeStyle(style);\n each(style.rich, normalizeStyle);\n return style;\n}\n\nfunction normalizeStyle(style: TextStylePropsPart) {\n if (style) {\n style.font = ZRText.makeFont(style);\n let textAlign = style.align;\n // 'middle' is invalid, convert it to 'center'\n (textAlign as string) === 'middle' && (textAlign = 'center');\n style.align = (\n textAlign == null || VALID_TEXT_ALIGN[textAlign]\n ) ? textAlign : 'left';\n\n // Compatible with textBaseline.\n let verticalAlign = style.verticalAlign;\n (verticalAlign as string) === 'center' && (verticalAlign = 'middle');\n style.verticalAlign = (\n verticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[verticalAlign]\n ) ? verticalAlign : 'top';\n\n // TODO Should not change the orignal value.\n const textPadding = style.padding;\n if (textPadding) {\n style.padding = normalizeCssArray(style.padding);\n }\n }\n}\n\n/**\n * @param stroke If specified, do not check style.textStroke.\n * @param lineWidth If specified, do not check style.textStroke.\n */\nfunction getStroke(\n stroke?: TextStylePropsPart['stroke'],\n lineWidth?: number\n) {\n return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')\n ? null\n : ((stroke as any).image || (stroke as any).colorStops)\n ? '#000'\n : stroke;\n}\n\nfunction getFill(\n fill?: TextStylePropsPart['fill']\n) {\n return (fill == null || fill === 'none')\n ? null\n // TODO pattern and gradient?\n : ((fill as any).image || (fill as any).colorStops)\n ? '#000'\n : fill;\n}\n\nfunction getTextXForPadding(x: number, textAlign: string, textPadding: number[]): number {\n return textAlign === 'right'\n ? (x - textPadding[1])\n : textAlign === 'center'\n ? (x + textPadding[3] / 2 - textPadding[1] / 2)\n : (x + textPadding[3]);\n}\n\nfunction getStyleText(style: TextStylePropsPart): string {\n // Compat: set number to text is supported.\n // set null/undefined to text is supported.\n let text = style.text;\n text != null && (text += '');\n return text;\n}\n\n/**\n * If needs draw background\n * @param style Style of element\n */\nfunction needDrawBackground(style: TextStylePropsPart): boolean {\n return !!(\n style.backgroundColor\n || (style.borderWidth && style.borderColor)\n );\n}\n\nexport default ZRText;","/**\n * 圆弧\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class ArcShape {\n cx = 0;\n cy = 0;\n r = 0;\n startAngle = 0;\n endAngle = Math.PI * 2\n clockwise? = true\n}\n\nexport interface ArcProps extends PathProps {\n shape?: Partial\n}\n\nclass Arc extends Path {\n\n shape: ArcShape\n\n constructor(opts?: ArcProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new ArcShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: ArcShape) {\n\n const x = shape.cx;\n const y = shape.cy;\n const r = Math.max(shape.r, 0);\n const startAngle = shape.startAngle;\n const endAngle = shape.endAngle;\n const clockwise = shape.clockwise;\n\n const unitX = Math.cos(startAngle);\n const unitY = Math.sin(startAngle);\n\n ctx.moveTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n }\n}\n\nArc.prototype.type = 'arc';\n\nexport default Arc;","/**\n * 贝塞尔曲线\n */\n\nimport Path, { PathProps } from '../Path';\nimport * as vec2 from '../../core/vector';\nimport {\n quadraticSubdivide,\n cubicSubdivide,\n quadraticAt,\n cubicAt,\n quadraticDerivativeAt,\n cubicDerivativeAt\n} from '../../core/curve';\n\nconst out: number[] = [];\n\nexport class BezierCurveShape {\n x1 = 0\n y1 = 0\n x2 = 0\n y2 = 0\n cpx1 = 0\n cpy1 = 0\n cpx2?: number\n cpy2?: number\n // Curve show percent, for animating\n percent = 1\n}\n\nfunction someVectorAt(shape: BezierCurveShape, t: number, isTangent: boolean) {\n const cpx2 = shape.cpx2;\n const cpy2 = shape.cpy2;\n if (cpx2 === null || cpy2 === null) {\n return [\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t),\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)\n ];\n }\n else {\n return [\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t),\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)\n ];\n }\n}\n\nexport interface BezierCurveProps extends PathProps {\n shape?: Partial\n}\nclass BezierCurve extends Path {\n\n shape: BezierCurveShape\n\n constructor(opts?: BezierCurveProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new BezierCurveShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: BezierCurveShape) {\n let x1 = shape.x1;\n let y1 = shape.y1;\n let x2 = shape.x2;\n let y2 = shape.y2;\n let cpx1 = shape.cpx1;\n let cpy1 = shape.cpy1;\n let cpx2 = shape.cpx2;\n let cpy2 = shape.cpy2;\n let percent = shape.percent;\n if (percent === 0) {\n return;\n }\n\n ctx.moveTo(x1, y1);\n\n if (cpx2 == null || cpy2 == null) {\n if (percent < 1) {\n quadraticSubdivide(x1, cpx1, x2, percent, out);\n cpx1 = out[1];\n x2 = out[2];\n quadraticSubdivide(y1, cpy1, y2, percent, out);\n cpy1 = out[1];\n y2 = out[2];\n }\n\n ctx.quadraticCurveTo(\n cpx1, cpy1,\n x2, y2\n );\n }\n else {\n if (percent < 1) {\n cubicSubdivide(x1, cpx1, cpx2, x2, percent, out);\n cpx1 = out[1];\n cpx2 = out[2];\n x2 = out[3];\n cubicSubdivide(y1, cpy1, cpy2, y2, percent, out);\n cpy1 = out[1];\n cpy2 = out[2];\n y2 = out[3];\n }\n ctx.bezierCurveTo(\n cpx1, cpy1,\n cpx2, cpy2,\n x2, y2\n );\n }\n }\n\n /**\n * Get point at percent\n */\n pointAt(t: number) {\n return someVectorAt(this.shape, t, false);\n }\n\n /**\n * Get tangent at percent\n */\n tangentAt(t: number) {\n const p = someVectorAt(this.shape, t, true);\n return vec2.normalize(p, p);\n }\n};\n\nBezierCurve.prototype.type = 'bezier-curve';\n\nexport default BezierCurve;\n","/**\n * 水滴形状\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class DropletShape {\n cx = 0\n cy = 0\n width = 0\n height = 0\n}\n\nexport interface DropletProps extends PathProps {\n shape?: Partial\n}\nclass Droplet extends Path {\n\n shape: DropletShape\n\n constructor(opts?: DropletProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new DropletShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: DropletShape) {\n const x = shape.cx;\n const y = shape.cy;\n const a = shape.width;\n const b = shape.height;\n\n ctx.moveTo(x, y + a);\n ctx.bezierCurveTo(\n x + a,\n y + a,\n x + a * 3 / 2,\n y - a / 3,\n x,\n y - b\n );\n ctx.bezierCurveTo(\n x - a * 3 / 2,\n y - a / 3,\n x - a,\n y + a,\n x,\n y + a\n );\n ctx.closePath();\n }\n}\n\nDroplet.prototype.type = 'droplet';\n\nexport default Droplet;\n","/**\n * 心形\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class HeartShape {\n cx = 0\n cy = 0\n width = 0\n height = 0\n}\n\nexport interface HeartProps extends PathProps {\n shape?: Partial\n}\nclass Heart extends Path {\n\n shape: HeartShape\n\n constructor(opts?: HeartProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new HeartShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: HeartShape) {\n const x = shape.cx;\n const y = shape.cy;\n const a = shape.width;\n const b = shape.height;\n ctx.moveTo(x, y);\n ctx.bezierCurveTo(\n x + a / 2, y - b * 2 / 3,\n x + a * 2, y + b / 3,\n x, y + b\n );\n ctx.bezierCurveTo(\n x - a * 2, y + b / 3,\n x - a / 2, y - b * 2 / 3,\n x, y\n );\n }\n}\n\n\nHeart.prototype.type = 'heart';\n\nexport default Heart;","/**\n * 正多边形\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst PI = Math.PI;\nconst sin = Math.sin;\nconst cos = Math.cos;\n\nexport class IsogonShape {\n x = 0\n y = 0\n r = 0\n n = 0\n}\n\nexport interface IsogonProps extends PathProps {\n shape?: Partial\n}\nclass Isogon extends Path {\n\n shape: IsogonShape\n\n constructor(opts?: IsogonProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new IsogonShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: IsogonShape) {\n const n = shape.n;\n if (!n || n < 2) {\n return;\n }\n\n const x = shape.x;\n const y = shape.y;\n const r = shape.r;\n\n const dStep = 2 * PI / n;\n let deg = -PI / 2;\n\n ctx.moveTo(x + r * cos(deg), y + r * sin(deg));\n for (let i = 0, end = n - 1; i < end; i++) {\n deg += dStep;\n ctx.lineTo(x + r * cos(deg), y + r * sin(deg));\n }\n\n ctx.closePath();\n\n return;\n }\n}\n\nIsogon.prototype.type = 'isogon';\n\nexport default Isogon;\n","/**\n * 圆环\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class RingShape {\n cx = 0\n cy = 0\n r = 0\n r0 = 0\n}\n\nexport interface RingProps extends PathProps {\n shape?: Partial\n}\nclass Ring extends Path {\n\n shape: RingShape\n\n constructor(opts?: RingProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new RingShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: RingShape) {\n const x = shape.cx;\n const y = shape.cy;\n const PI2 = Math.PI * 2;\n ctx.moveTo(x + shape.r, y);\n ctx.arc(x, y, shape.r, 0, PI2, false);\n ctx.moveTo(x + shape.r0, y);\n ctx.arc(x, y, shape.r0, 0, PI2, true);\n }\n}\n\nRing.prototype.type = 'ring';\nexport default Ring;","/**\n * 玫瑰线\n * @module zrender/graphic/shape/Rose\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst sin = Math.sin;\nconst cos = Math.cos;\nconst radian = Math.PI / 180;\n\nexport class RoseShape {\n cx = 0\n cy = 0\n r: number[] = []\n k = 0\n n = 1\n}\n\nexport interface RoseProps extends PathProps {\n shape?: Partial\n}\nclass Rose extends Path {\n\n shape: RoseShape\n\n constructor(opts?: RoseProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new RoseShape();\n }\n\n\n buildPath(ctx: CanvasRenderingContext2D, shape: RoseShape) {\n const R = shape.r;\n const k = shape.k;\n const n = shape.n;\n const x0 = shape.cx;\n const y0 = shape.cy;\n let x;\n let y;\n let r;\n\n\n ctx.moveTo(x0, y0);\n\n for (let i = 0, len = R.length; i < len; i++) {\n r = R[i];\n\n for (let j = 0; j <= 360 * n; j++) {\n x = r\n * sin(k / n * j % 360 * radian)\n * cos(j * radian)\n + x0;\n y = r\n * sin(k / n * j % 360 * radian)\n * sin(j * radian)\n + y0;\n ctx.lineTo(x, y);\n }\n }\n }\n}\n\nRose.prototype.type = 'rose';\n\nexport default Rose;","/**\n * n角星(n>3)\n * @module zrender/graphic/shape/Star\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst PI = Math.PI;\nconst cos = Math.cos;\nconst sin = Math.sin;\n\nexport class StarShape {\n cx = 0\n cy = 0\n n = 3\n r0: number\n r = 0\n}\n\nexport interface StarProps extends PathProps {\n shape?: Partial\n}\nclass Star extends Path {\n\n shape: StarShape\n\n constructor(opts?: StarProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new StarShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: StarShape) {\n\n const n = shape.n;\n if (!n || n < 2) {\n return;\n }\n\n const x = shape.cx;\n const y = shape.cy;\n const r = shape.r;\n let r0 = shape.r0;\n\n // 如果未指定内部顶点外接圆半径,则自动计算\n if (r0 == null) {\n r0 = n > 4\n // 相隔的外部顶点的连线的交点,\n // 被取为内部交点,以此计算r0\n ? r * cos(2 * PI / n) / cos(PI / n)\n // 二三四角星的特殊处理\n : r / 3;\n }\n\n const dStep = PI / n;\n let deg = -PI / 2;\n const xStart = x + r * cos(deg);\n const yStart = y + r * sin(deg);\n deg += dStep;\n\n // 记录边界点,用于判断inside\n ctx.moveTo(xStart, yStart);\n for (let i = 0, end = n * 2 - 1, ri; i < end; i++) {\n ri = i % 2 === 0 ? r0 : r;\n ctx.lineTo(x + ri * cos(deg), y + ri * sin(deg));\n deg += dStep;\n }\n\n ctx.closePath();\n }\n}\n\nStar.prototype.type = 'star';\nexport default Star;","/**\n * 内外旋轮曲线\n * @module zrender/graphic/shape/Trochold\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst cos = Math.cos;\nconst sin = Math.sin;\n\nexport class TrochoidShape {\n cx = 0\n cy = 0\n r = 0\n r0 = 0\n d = 0\n location = 'out'\n}\n\nexport interface TrochoidProps extends PathProps {\n shape?: Partial\n}\nclass Trochoid extends Path {\n\n shape: TrochoidShape\n\n constructor(opts?: TrochoidProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new TrochoidShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: TrochoidShape) {\n const R = shape.r;\n const r = shape.r0;\n const d = shape.d;\n const offsetX = shape.cx;\n const offsetY = shape.cy;\n const delta = shape.location === 'out' ? 1 : -1;\n let x1;\n let y1;\n let x2;\n let y2;\n\n if (shape.location && R <= r) {\n return;\n }\n\n let num = 0;\n let i = 1;\n let theta;\n\n x1 = (R + delta * r) * cos(0)\n - delta * d * cos(0) + offsetX;\n y1 = (R + delta * r) * sin(0)\n - d * sin(0) + offsetY;\n\n ctx.moveTo(x1, y1);\n\n // 计算结束时的i\n do {\n num++;\n }\n while ((r * num) % (R + delta * r) !== 0);\n\n do {\n theta = Math.PI / 180 * i;\n x2 = (R + delta * r) * cos(theta)\n - delta * d * cos((R / r + delta) * theta)\n + offsetX;\n y2 = (R + delta * r) * sin(theta)\n - d * sin((R / r + delta) * theta)\n + offsetY;\n ctx.lineTo(x2, y2);\n i++;\n }\n while (i <= (r * num) / (R + delta * r) * 360);\n\n }\n}\n\nTrochoid.prototype.type = 'trochoid';\nexport default Trochoid;","import { ImageLike } from '../core/types';\n\ntype ImagePatternRepeat = 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'\n\nexport interface PatternObjectBase {\n id?: number\n // type is now unused, so make it optional\n type?: 'pattern'\n\n x?: number\n y?: number\n rotation?: number\n scaleX?: number\n scaleY?: number\n}\n\nexport interface ImagePatternObject extends PatternObjectBase {\n image: ImageLike | string\n repeat?: ImagePatternRepeat\n}\n\nexport interface InnerImagePatternObject extends ImagePatternObject {\n // Cached image. Which is created in the canvas painter.\n __image?: ImageLike\n}\n\nexport interface SVGPatternObject extends PatternObjectBase {\n /**\n * svg element can only be used in svg renderer currently.\n * svgWidth, svgHeight defines width and height used for pattern.\n */\n svgElement?: SVGElement\n svgWidth?: number\n svgHeight?: number\n}\n\nexport type PatternObject = ImagePatternObject | SVGPatternObject\n\nclass Pattern {\n\n type: 'pattern'\n\n image: ImageLike | string\n /**\n * svg element can only be used in svg renderer currently.\n */\n svgElement: SVGElement\n\n repeat: ImagePatternRepeat\n\n x: number\n y: number\n rotation: number\n scaleX: number\n scaleY: number\n\n constructor(image: ImageLike | string, repeat: ImagePatternRepeat) {\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {image: ...}`, where this constructor will not be called.\n this.image = image;\n this.repeat = repeat;\n\n this.x = 0;\n this.y = 0;\n this.rotation = 0;\n this.scaleX = 1;\n this.scaleY = 1;\n }\n}\n\nexport default Pattern;","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport Point, { PointLike } from './Point';\nimport BoundingRect from './BoundingRect';\nimport { MatrixArray } from './matrix';\n\nconst extent = [0, 0];\nconst extent2 = [0, 0];\n\nconst minTv = new Point();\nconst maxTv = new Point();\n\nclass OrientedBoundingRect {\n\n // lt, rt, rb, lb\n private _corners: Point[] = [];\n\n private _axes: Point[] = [];\n\n private _origin: number[] = [0, 0];\n\n constructor(rect?: BoundingRect, transform?: MatrixArray) {\n for (let i = 0; i < 4; i++) {\n this._corners[i] = new Point();\n }\n for (let i = 0; i < 2; i++) {\n this._axes[i] = new Point();\n }\n\n if (rect) {\n this.fromBoundingRect(rect, transform);\n }\n }\n\n fromBoundingRect(rect: BoundingRect, transform?: MatrixArray) {\n const corners = this._corners;\n const axes = this._axes;\n const x = rect.x;\n const y = rect.y;\n const x2 = x + rect.width;\n const y2 = y + rect.height;\n corners[0].set(x, y);\n corners[1].set(x2, y);\n corners[2].set(x2, y2);\n corners[3].set(x, y2);\n\n if (transform) {\n for (let i = 0; i < 4; i++) {\n corners[i].transform(transform);\n }\n }\n\n // Calculate axes\n Point.sub(axes[0], corners[1], corners[0]);\n Point.sub(axes[1], corners[3], corners[0]);\n axes[0].normalize();\n axes[1].normalize();\n\n // Calculate projected origin\n for (let i = 0; i < 2; i++) {\n this._origin[i] = axes[i].dot(corners[0]);\n }\n }\n\n /**\n * If intersect with another OBB\n * @param other Bounding rect to be intersected with\n * @param mtv Calculated .\n * If it's not overlapped. it means needs to move given rect with Maximum Translation Vector to be overlapped.\n * Else it means needs to move given rect with Minimum Translation Vector to be not overlapped.\n */\n intersect(other: OrientedBoundingRect, mtv?: PointLike): boolean {\n // OBB collision with SAT method\n\n let overlapped = true;\n const noMtv = !mtv;\n minTv.set(Infinity, Infinity);\n maxTv.set(0, 0);\n // Check two axes for both two obb.\n if (!this._intersectCheckOneSide(this, other, minTv, maxTv, noMtv, 1)) {\n overlapped = false;\n if (noMtv) {\n // Early return if no need to calculate mtv\n return overlapped;\n }\n }\n if (!this._intersectCheckOneSide(other, this, minTv, maxTv, noMtv, -1)) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n }\n\n if (!noMtv) {\n Point.copy(mtv, overlapped ? minTv : maxTv);\n }\n\n return overlapped;\n }\n\n\n private _intersectCheckOneSide(\n self: OrientedBoundingRect,\n other: OrientedBoundingRect,\n minTv: Point,\n maxTv: Point,\n noMtv: boolean,\n inverse: 1 | -1\n ): boolean {\n let overlapped = true;\n for (let i = 0; i < 2; i++) {\n const axis = this._axes[i];\n this._getProjMinMaxOnAxis(i, self._corners, extent);\n this._getProjMinMaxOnAxis(i, other._corners, extent2);\n\n // Not overlap on the any axis.\n if (extent[1] < extent2[0] || extent[0] > extent2[1]) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n const dist0 = Math.abs(extent2[0] - extent[1]);\n const dist1 = Math.abs(extent[0] - extent2[1]);\n\n // Find longest distance of all axes.\n if (Math.min(dist0, dist1) > maxTv.len()) {\n if (dist0 < dist1) {\n Point.scale(maxTv, axis, -dist0 * inverse);\n }\n else {\n Point.scale(maxTv, axis, dist1 * inverse);\n }\n }\n }\n else if (minTv) {\n const dist0 = Math.abs(extent2[0] - extent[1]);\n const dist1 = Math.abs(extent[0] - extent2[1]);\n\n if (Math.min(dist0, dist1) < minTv.len()) {\n if (dist0 < dist1) {\n Point.scale(minTv, axis, dist0 * inverse);\n }\n else {\n Point.scale(minTv, axis, -dist1 * inverse);\n }\n }\n }\n }\n return overlapped;\n }\n\n private _getProjMinMaxOnAxis(dim: number, corners: Point[], out: number[]) {\n const axis = this._axes[dim];\n const origin = this._origin;\n const proj = corners[0].dot(axis) + origin[dim];\n let min = proj;\n let max = proj;\n\n for (let i = 1; i < corners.length; i++) {\n const proj = corners[i].dot(axis) + origin[dim];\n min = Math.min(proj, min);\n max = Math.max(proj, max);\n }\n\n out[0] = min;\n out[1] = max;\n }\n}\n\nexport default OrientedBoundingRect;","import type { ZRenderType } from '../zrender';\nimport type CanvasPainter from '../canvas/Painter';\nimport type BoundingRect from '../core/BoundingRect';\nimport { extend } from '../core/util';\n\nclass DebugRect {\n\n dom: HTMLDivElement\n\n private _hideTimeout: number\n\n constructor(style: Opts['style']) {\n const dom = this.dom = document.createElement('div');\n dom.className = 'ec-debug-dirty-rect';\n\n style = extend({}, style);\n extend(style, {\n backgroundColor: 'rgba(0, 0, 255, 0.2)',\n border: '1px solid #00f'\n })\n dom.style.cssText = `\nposition: absolute;\nopacity: 0;\ntransition: opacity 0.5s linear;\npointer-events: none;\n`;\n\n for (let key in style) {\n if (style.hasOwnProperty(key)) {\n (dom.style as any)[key] = (style as any)[key];\n }\n }\n }\n\n update(rect: BoundingRect) {\n const domStyle = this.dom.style;\n domStyle.width = rect.width + 'px';\n domStyle.height = rect.height + 'px';\n domStyle.left = rect.x + 'px';\n domStyle.top = rect.y + 'px';\n }\n\n hide() {\n this.dom.style.opacity = '0';\n }\n show(autoHideDelay?: number) {\n clearTimeout(this._hideTimeout);\n\n this.dom.style.opacity = '1';\n\n // Auto hide after 2 second\n this._hideTimeout = setTimeout(() => {\n this.hide();\n }, autoHideDelay || 1000) as unknown as number;\n }\n\n}\n\ninterface Opts {\n style?: {\n backgroundColor?: string\n color?: string\n }\n\n autoHideDelay?: number\n}\n\nexport default function showDebugDirtyRect(zr: ZRenderType, opts?: Opts) {\n opts = opts || {};\n const painter = zr.painter as CanvasPainter;\n if (!painter.getLayers) {\n throw new Error('Debug dirty rect can only been used on canvas renderer.');\n }\n if (painter.isSingleCanvas()) {\n throw new Error('Debug dirty rect can only been used on zrender inited with container.');\n }\n const debugViewRoot = document.createElement('div');\n debugViewRoot.style.cssText = `\nposition:absolute;\nleft:0;\ntop:0;\nright:0;\nbottom:0;\npointer-events:none;\n`;\n debugViewRoot.className = 'ec-debug-dirty-rect-container';\n\n const debugRects: DebugRect[] = [];\n const dom = zr.dom;\n dom.appendChild(debugViewRoot);\n const computedStyle = getComputedStyle(dom);\n if (computedStyle.position === 'static') {\n dom.style.position = 'relative';\n }\n\n zr.on('rendered', function () {\n if (painter.getLayers) {\n let idx = 0;\n painter.eachBuiltinLayer((layer) => {\n if (!layer.debugGetPaintRects) {\n return;\n }\n const paintRects = layer.debugGetPaintRects();\n for (let i = 0; i < paintRects.length; i++) {\n if (!paintRects[i].width || !paintRects[i].height) {\n continue;\n }\n\n if (!debugRects[idx]) {\n debugRects[idx] = new DebugRect(opts.style);\n debugViewRoot.appendChild(debugRects[idx].dom);\n }\n debugRects[idx].show(opts.autoHideDelay);\n debugRects[idx].update(paintRects[i]);\n idx++;\n }\n });\n for (let i = idx; i < debugRects.length; i++) {\n debugRects[i].hide();\n }\n }\n });\n}","import { LinearGradientObject } from '../graphic/LinearGradient';\nimport { RadialGradientObject } from '../graphic/RadialGradient';\nimport { GradientObject } from '../graphic/Gradient';\nimport { RectLike } from '../core/BoundingRect';\nimport Path from '../graphic/Path';\n\nexport function createLinearGradient(\n this: void,\n ctx: CanvasRenderingContext2D,\n obj: LinearGradientObject,\n rect: RectLike\n) {\n let x = obj.x == null ? 0 : obj.x;\n let x2 = obj.x2 == null ? 1 : obj.x2;\n let y = obj.y == null ? 0 : obj.y;\n let y2 = obj.y2 == null ? 0 : obj.y2;\n\n if (!obj.global) {\n x = x * rect.width + rect.x;\n x2 = x2 * rect.width + rect.x;\n y = y * rect.height + rect.y;\n y2 = y2 * rect.height + rect.y;\n }\n\n // Fix NaN when rect is Infinity\n x = isNaN(x) ? 0 : x;\n x2 = isNaN(x2) ? 1 : x2;\n y = isNaN(y) ? 0 : y;\n y2 = isNaN(y2) ? 0 : y2;\n\n const canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\n\n return canvasGradient;\n}\n\nexport function createRadialGradient(\n this: void,\n ctx: CanvasRenderingContext2D,\n obj: RadialGradientObject,\n rect: RectLike\n) {\n const width = rect.width;\n const height = rect.height;\n const min = Math.min(width, height);\n\n let x = obj.x == null ? 0.5 : obj.x;\n let y = obj.y == null ? 0.5 : obj.y;\n let r = obj.r == null ? 0.5 : obj.r;\n if (!obj.global) {\n x = x * width + rect.x;\n y = y * height + rect.y;\n r = r * min;\n }\n\n const canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);\n\n return canvasGradient;\n}\n\nexport function getCanvasGradient(this: void, ctx: CanvasRenderingContext2D, obj: GradientObject, rect: RectLike) {\n // TODO Cache?\n const canvasGradient = obj.type === 'radial'\n ? createRadialGradient(ctx, obj as RadialGradientObject, rect)\n : createLinearGradient(ctx, obj as LinearGradientObject, rect);\n\n const colorStops = obj.colorStops;\n for (let i = 0; i < colorStops.length; i++) {\n canvasGradient.addColorStop(\n colorStops[i].offset, colorStops[i].color\n );\n }\n return canvasGradient;\n}\n\nexport function isClipPathChanged(clipPaths: Path[], prevClipPaths: Path[]): boolean {\n // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n if (clipPaths === prevClipPaths || (!clipPaths && !prevClipPaths)) {\n return false;\n }\n if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {\n return true;\n }\n for (let i = 0; i < clipPaths.length; i++) {\n if (clipPaths[i] !== prevClipPaths[i]) {\n return true;\n }\n }\n return false;\n}","import { isArray, isNumber } from '../../core/util';\n\nexport function normalizeLineDash(lineType: any, lineWidth?: number): number[] | false {\n if (!lineType || lineType === 'solid' || !(lineWidth > 0)) {\n return null;\n }\n lineWidth = lineWidth || 1;\n return lineType === 'dashed' \n ? [4 * lineWidth, 2 * lineWidth]\n : lineType === 'dotted' \n ? [lineWidth]\n : isNumber(lineType)\n ? [lineType] : isArray(lineType) ? lineType : null;\n}","import Displayable, { DEFAULT_COMMON_STYLE } from '../graphic/Displayable';\nimport PathProxy from '../core/PathProxy';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ImagePatternObject, InnerImagePatternObject } from '../graphic/Pattern';\nimport { LinearGradientObject } from '../graphic/LinearGradient';\nimport { RadialGradientObject } from '../graphic/RadialGradient';\nimport { ZRCanvasRenderingContext } from '../core/types';\nimport { createOrUpdateImage, isImageReady } from '../graphic/helper/image';\nimport { getCanvasGradient, isClipPathChanged } from './helper';\nimport Path, { PathStyleProps } from '../graphic/Path';\nimport ZRImage, { ImageStyleProps } from '../graphic/Image';\nimport TSpan, {TSpanStyleProps} from '../graphic/TSpan';\nimport { DEFAULT_FONT } from '../contain/text';\nimport { MatrixArray } from '../core/matrix';\nimport { map } from '../core/util';\nimport { normalizeLineDash } from '../graphic/helper/dashStyle';\nimport IncrementalDisplayable from '../graphic/IncrementalDisplayable';\nimport { REDARAW_BIT, SHAPE_CHANGED_BIT } from '../graphic/constants';\n\nconst pathProxyForDraw = new PathProxy(true);\n\n// Not use el#hasStroke because style may be different.\nfunction styleHasStroke(style: PathStyleProps) {\n const stroke = style.stroke;\n return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\n}\n\nfunction styleHasFill(style: PathStyleProps) {\n const fill = style.fill;\n return fill != null && fill !== 'none';\n}\nfunction doFillPath(ctx: CanvasRenderingContext2D, style: PathStyleProps) {\n if (style.fillOpacity != null && style.fillOpacity !== 1) {\n const originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.fillOpacity * style.opacity;\n ctx.fill();\n // Set back globalAlpha\n ctx.globalAlpha = originalGlobalAlpha;\n }\n else {\n ctx.fill();\n }\n}\n\nfunction doStrokePath(ctx: CanvasRenderingContext2D, style: PathStyleProps) {\n if (style.strokeOpacity != null && style.strokeOpacity !== 1) {\n const originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.strokeOpacity * style.opacity;\n ctx.stroke();\n // Set back globalAlpha\n ctx.globalAlpha = originalGlobalAlpha;\n }\n else {\n ctx.stroke();\n }\n}\n\nexport function createCanvasPattern(\n this: void,\n ctx: CanvasRenderingContext2D,\n pattern: ImagePatternObject,\n el: {dirty: () => void}\n): CanvasPattern {\n const image = createOrUpdateImage(pattern.image, (pattern as InnerImagePatternObject).__image, el);\n if (isImageReady(image)) {\n const canvasPattern = ctx.createPattern(image, pattern.repeat || 'repeat');\n if (\n typeof DOMMatrix === 'function'\n && canvasPattern.setTransform // setTransform may not be supported in some old devices.\n ) {\n const matrix = new DOMMatrix();\n matrix.rotateSelf(0, 0, (pattern.rotation || 0) / Math.PI * 180);\n matrix.scaleSelf((pattern.scaleX || 1), (pattern.scaleY || 1));\n matrix.translateSelf((pattern.x || 0), (pattern.y || 0));\n canvasPattern.setTransform(matrix);\n }\n return canvasPattern;\n }\n}\n\n// Draw Path Elements\nfunction brushPath(ctx: CanvasRenderingContext2D, el: Path, style: PathStyleProps, inBatch: boolean) {\n let hasStroke = styleHasStroke(style);\n let hasFill = styleHasFill(style);\n\n const strokePercent = style.strokePercent;\n const strokePart = strokePercent < 1;\n\n // TODO Reduce path memory cost.\n const firstDraw = !el.path;\n // Create path for each element when:\n // 1. Element has interactions.\n // 2. Element draw part of the line.\n if ((!el.silent || strokePart) && firstDraw) {\n el.createPathProxy();\n }\n\n const path = el.path || pathProxyForDraw;\n\n if (!inBatch) {\n const fill = style.fill;\n const stroke = style.stroke;\n\n const hasFillGradient = hasFill && !!(fill as GradientObject).colorStops;\n const hasStrokeGradient = hasStroke && !!(stroke as GradientObject).colorStops;\n const hasFillPattern = hasFill && !!(fill as ImagePatternObject).image;\n const hasStrokePattern = hasStroke && !!(stroke as ImagePatternObject).image;\n\n let fillGradient;\n let strokeGradient;\n let fillPattern;\n let strokePattern;\n let rect;\n if (hasFillGradient || hasStrokeGradient) {\n rect = el.getBoundingRect();\n }\n // Update gradient because bounding rect may changed\n if (hasFillGradient) {\n fillGradient = el.__dirty\n ? getCanvasGradient(ctx, fill as (LinearGradientObject | RadialGradientObject), rect)\n : el.__canvasFillGradient;\n // No need to clear cache when fill is not gradient.\n // It will always been updated when fill changed back to gradient.\n el.__canvasFillGradient = fillGradient;\n }\n if (hasStrokeGradient) {\n strokeGradient = el.__dirty\n ? getCanvasGradient(ctx, stroke as (LinearGradientObject | RadialGradientObject), rect)\n : el.__canvasStrokeGradient;\n el.__canvasStrokeGradient = strokeGradient;\n }\n if (hasFillPattern) {\n // Pattern might be null if image not ready (even created from dataURI)\n fillPattern = (el.__dirty || !el.__canvasFillPattern)\n ? createCanvasPattern(ctx, fill as ImagePatternObject, el)\n : el.__canvasFillPattern;\n el.__canvasFillPattern = fillPattern;\n }\n if (hasStrokePattern) {\n // Pattern might be null if image not ready (even created from dataURI)\n strokePattern = (el.__dirty || !el.__canvasStrokePattern)\n ? createCanvasPattern(ctx, stroke as ImagePatternObject, el)\n : el.__canvasStrokePattern;\n el.__canvasStrokePattern = fillPattern;\n }\n // Use the gradient or pattern\n if (hasFillGradient) {\n // PENDING If may have affect the state\n ctx.fillStyle = fillGradient;\n }\n else if (hasFillPattern) {\n if (fillPattern) { // createCanvasPattern may return false if image is not ready.\n ctx.fillStyle = fillPattern;\n }\n else {\n // Don't fill if image is not ready\n hasFill = false;\n }\n }\n if (hasStrokeGradient) {\n ctx.strokeStyle = strokeGradient;\n }\n else if (hasStrokePattern) {\n if (strokePattern) {\n ctx.strokeStyle = strokePattern;\n }\n else {\n // Don't stroke if image is not ready\n hasStroke = false;\n }\n }\n }\n\n let lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth);\n let lineDashOffset = style.lineDashOffset;\n\n const ctxLineDash = !!ctx.setLineDash;\n\n // Update path sx, sy\n const scale = el.getGlobalScale();\n path.setScale(scale[0], scale[1], el.segmentIgnoreThreshold);\n\n if (lineDash) {\n const lineScale = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1;\n if (lineScale && lineScale !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / lineScale;\n });\n lineDashOffset /= lineScale;\n }\n }\n\n let needsRebuild = true;\n // Proxy context\n // Rebuild path in following 2 cases\n // 1. Path is dirty\n // 2. Path needs javascript implemented lineDash stroking.\n // In this case, lineDash information will not be saved in PathProxy\n if (firstDraw || (el.__dirty & SHAPE_CHANGED_BIT)\n || (lineDash && !ctxLineDash && hasStroke)\n ) {\n path.setDPR((ctx as any).dpr);\n if (strokePart) {\n // Use rebuildPath for percent stroke, so no context.\n path.setContext(null);\n }\n else {\n path.setContext(ctx);\n needsRebuild = false;\n }\n path.reset();\n\n // Setting line dash before build path\n if (lineDash && !ctxLineDash) {\n path.setLineDash(lineDash);\n path.setLineDashOffset(lineDashOffset);\n }\n\n el.buildPath(path, el.shape, inBatch);\n path.toStatic();\n\n // Clear path dirty flag\n el.pathUpdated();\n }\n\n // Not support separate fill and stroke. For the compatibility of SVG\n if (needsRebuild) {\n path.rebuildPath(ctx, strokePart ? strokePercent : 1);\n }\n\n if (lineDash && ctxLineDash) {\n ctx.setLineDash(lineDash);\n ctx.lineDashOffset = lineDashOffset;\n }\n\n if (!inBatch) {\n if (style.strokeFirst) {\n if (hasStroke) {\n doStrokePath(ctx, style);\n }\n if (hasFill) {\n doFillPath(ctx, style);\n }\n }\n else {\n if (hasFill) {\n doFillPath(ctx, style);\n }\n if (hasStroke) {\n doStrokePath(ctx, style);\n }\n }\n }\n\n if (lineDash && ctxLineDash) {\n // PENDING\n // Remove lineDash\n ctx.setLineDash([]);\n }\n}\n\n// Draw Image Elements\nfunction brushImage(ctx: CanvasRenderingContext2D, el: ZRImage, style: ImageStyleProps) {\n const image = el.__image = createOrUpdateImage(\n style.image,\n el.__image,\n el,\n el.onload\n );\n\n if (!image || !isImageReady(image)) {\n return;\n }\n\n const x = style.x || 0;\n const y = style.y || 0;\n let width = el.getWidth();\n let height = el.getHeight();\n const aspect = image.width / image.height;\n if (width == null && height != null) {\n // Keep image/height ratio\n width = height * aspect;\n }\n else if (height == null && width != null) {\n height = width / aspect;\n }\n else if (width == null && height == null) {\n width = image.width;\n height = image.height;\n }\n\n if (style.sWidth && style.sHeight) {\n const sx = style.sx || 0;\n const sy = style.sy || 0;\n ctx.drawImage(\n image,\n sx, sy, style.sWidth, style.sHeight,\n x, y, width, height\n );\n }\n else if (style.sx && style.sy) {\n const sx = style.sx;\n const sy = style.sy;\n const sWidth = width - sx;\n const sHeight = height - sy;\n ctx.drawImage(\n image,\n sx, sy, sWidth, sHeight,\n x, y, width, height\n );\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n}\n\n// Draw Text Elements\nfunction brushText(ctx: CanvasRenderingContext2D, el: TSpan, style: TSpanStyleProps) {\n\n let text = style.text;\n // Convert to string\n text != null && (text += '');\n\n if (text) {\n ctx.font = style.font || DEFAULT_FONT;\n ctx.textAlign = style.textAlign;\n ctx.textBaseline = style.textBaseline;\n\n let hasLineDash;\n if (ctx.setLineDash) {\n let lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth);\n let lineDashOffset = style.lineDashOffset;\n if (lineDash) {\n const lineScale = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1;\n if (lineScale && lineScale !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / lineScale;\n });\n lineDashOffset /= lineScale;\n }\n ctx.setLineDash(lineDash);\n ctx.lineDashOffset = lineDashOffset;\n\n hasLineDash = true;\n }\n }\n\n if (style.strokeFirst) {\n if (styleHasStroke(style)) {\n ctx.strokeText(text, style.x, style.y);\n }\n if (styleHasFill(style)) {\n ctx.fillText(text, style.x, style.y);\n }\n }\n else {\n if (styleHasFill(style)) {\n ctx.fillText(text, style.x, style.y);\n }\n if (styleHasStroke(style)) {\n ctx.strokeText(text, style.x, style.y);\n }\n }\n\n if (hasLineDash) {\n // Remove lineDash\n ctx.setLineDash([]);\n }\n }\n\n}\n\nconst SHADOW_NUMBER_PROPS = ['shadowBlur', 'shadowOffsetX', 'shadowOffsetY'] as const;\nconst STROKE_PROPS = [\n ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]\n] as const;\n\ntype AllStyleOption = PathStyleProps | TSpanStyleProps | ImageStyleProps;\n// type ShadowPropNames = typeof SHADOW_PROPS[number][0];\n// type StrokePropNames = typeof STROKE_PROPS[number][0];\n// type DrawPropNames = typeof DRAW_PROPS[number][0];\n\nfunction bindCommonProps(\n ctx: CanvasRenderingContext2D,\n style: AllStyleOption,\n prevStyle: AllStyleOption,\n forceSetAll: boolean,\n scope: BrushScope\n): boolean {\n let styleChanged = false;\n\n if (!forceSetAll) {\n prevStyle = prevStyle || {};\n\n // Shared same style.\n if (style === prevStyle) {\n return false;\n }\n }\n if (forceSetAll || style.opacity !== prevStyle.opacity) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n // Ensure opacity is between 0 ~ 1. Invalid opacity will lead to a failure set and use the leaked opacity from the previous.\n const opacity = Math.max(Math.min(style.opacity, 1), 0);\n ctx.globalAlpha = isNaN(opacity) ? DEFAULT_COMMON_STYLE.opacity : opacity;\n }\n\n if (forceSetAll || style.blend !== prevStyle.blend) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalCompositeOperation = style.blend || DEFAULT_COMMON_STYLE.blend;\n }\n for (let i = 0; i < SHADOW_NUMBER_PROPS.length; i++) {\n const propName = SHADOW_NUMBER_PROPS[i];\n if (forceSetAll || style[propName] !== prevStyle[propName]) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n // FIXME Invalid property value will cause style leak from previous element.\n ctx[propName] = (ctx as ZRCanvasRenderingContext).dpr * (style[propName] || 0);\n }\n }\n if (forceSetAll || style.shadowColor !== prevStyle.shadowColor) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.shadowColor = style.shadowColor || DEFAULT_COMMON_STYLE.shadowColor;\n }\n return styleChanged;\n}\n\nfunction bindPathAndTextCommonStyle(\n ctx: CanvasRenderingContext2D,\n el: TSpan | Path,\n prevEl: TSpan | Path,\n forceSetAll: boolean,\n scope: BrushScope\n) {\n const style = getStyle(el, scope.inHover);\n const prevStyle = forceSetAll\n ? null\n : (prevEl && getStyle(prevEl, scope.inHover) || {});\n // Shared same style. prevStyle will be null if forceSetAll.\n if (style === prevStyle) {\n return false;\n }\n\n let styleChanged = bindCommonProps(ctx, style, prevStyle, forceSetAll, scope);\n\n if (forceSetAll || style.fill !== prevStyle.fill) {\n if (!styleChanged) {\n // Flush before set\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.fillStyle = style.fill as string;\n }\n if (forceSetAll || style.stroke !== prevStyle.stroke) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.strokeStyle = style.stroke as string;\n }\n if (forceSetAll || style.opacity !== prevStyle.opacity) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;\n }\n if (el.hasStroke()) {\n const lineWidth = style.lineWidth;\n const newLineWidth = lineWidth / (\n (style.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1\n );\n if (ctx.lineWidth !== newLineWidth) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.lineWidth = newLineWidth;\n }\n }\n\n for (let i = 0; i < STROKE_PROPS.length; i++) {\n const prop = STROKE_PROPS[i];\n const propName = prop[0];\n if (forceSetAll || style[propName] !== prevStyle[propName]) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n // FIXME Invalid property value will cause style leak from previous element.\n (ctx as any)[propName] = style[propName] || prop[1];\n }\n }\n\n return styleChanged;\n}\n\nfunction bindImageStyle(\n ctx: CanvasRenderingContext2D,\n el: ZRImage,\n prevEl: ZRImage,\n // forceSetAll must be true if prevEl is null\n forceSetAll: boolean,\n scope: BrushScope\n) {\n return bindCommonProps(\n ctx,\n getStyle(el, scope.inHover),\n prevEl && getStyle(prevEl, scope.inHover),\n forceSetAll,\n scope\n );\n}\n\nfunction setContextTransform(ctx: CanvasRenderingContext2D, el: Displayable) {\n const m = el.transform;\n const dpr = (ctx as ZRCanvasRenderingContext).dpr || 1;\n if (m) {\n ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);\n }\n else {\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n}\n\nfunction updateClipStatus(clipPaths: Path[], ctx: CanvasRenderingContext2D, scope: BrushScope) {\n let allClipped = false;\n for (let i = 0; i < clipPaths.length; i++) {\n const clipPath = clipPaths[i];\n // Ignore draw following elements if clipPath has zero area.\n allClipped = allClipped || clipPath.isZeroArea();\n\n setContextTransform(ctx, clipPath);\n ctx.beginPath();\n clipPath.buildPath(ctx, clipPath.shape);\n ctx.clip();\n }\n scope.allClipped = allClipped;\n}\n\nfunction isTransformChanged(m0: MatrixArray, m1: MatrixArray): boolean {\n if (m0 && m1) {\n return m0[0] !== m1[0]\n || m0[1] !== m1[1]\n || m0[2] !== m1[2]\n || m0[3] !== m1[3]\n || m0[4] !== m1[4]\n || m0[5] !== m1[5];\n }\n else if (!m0 && !m1) { // All identity matrix.\n return false;\n }\n\n return true;\n}\n\nconst DRAW_TYPE_PATH = 1;\nconst DRAW_TYPE_IMAGE = 2;\nconst DRAW_TYPE_TEXT = 3;\nconst DRAW_TYPE_INCREMENTAL = 4;\n\nexport type BrushScope = {\n inHover: boolean\n\n // width / height of viewport\n viewWidth: number\n viewHeight: number\n\n // Status for clipping\n prevElClipPaths?: Path[]\n prevEl?: Displayable\n allClipped?: boolean // If the whole element can be clipped\n\n // Status for batching\n batchFill?: string\n batchStroke?: string\n\n lastDrawType?: number\n}\n\n// If path can be batched\nfunction canPathBatch(style: PathStyleProps) {\n\n const hasFill = styleHasFill(style);\n const hasStroke = styleHasStroke(style);\n\n return !(\n // Line dash is dynamically set in brush function.\n style.lineDash\n // Can't batch if element is both set fill and stroke. Or both not set\n || !(+hasFill ^ +hasStroke)\n // Can't batch if element is drawn with gradient or pattern.\n || (hasFill && typeof style.fill !== 'string')\n || (hasStroke && typeof style.stroke !== 'string')\n // Can't batch if element only stroke part of line.\n || style.strokePercent < 1\n // Has stroke or fill opacity\n || style.strokeOpacity < 1\n || style.fillOpacity < 1\n );\n}\n\nfunction flushPathDrawn(ctx: CanvasRenderingContext2D, scope: BrushScope) {\n // Force flush all after drawn last element\n scope.batchFill && ctx.fill();\n scope.batchStroke && ctx.stroke();\n scope.batchFill = '';\n scope.batchStroke = '';\n}\n\nfunction getStyle(el: Displayable, inHover?: boolean) {\n return inHover ? (el.__hoverStyle || el.style) : el.style;\n}\n\nexport function brushSingle(ctx: CanvasRenderingContext2D, el: Displayable) {\n brush(ctx, el, { inHover: false, viewWidth: 0, viewHeight: 0 }, true);\n}\n\n// Brush different type of elements.\nexport function brush(\n ctx: CanvasRenderingContext2D,\n el: Displayable,\n scope: BrushScope,\n isLast: boolean\n) {\n const m = el.transform;\n\n if (!el.shouldBePainted(scope.viewWidth, scope.viewHeight, false, false)) {\n // Needs to mark el rendered.\n // Or this element will always been rendered in progressive rendering.\n // But other dirty bit should not be cleared, otherwise it cause the shape\n // can not be updated in this case.\n el.__dirty &= ~REDARAW_BIT;\n el.__isRendered = false;\n return;\n }\n\n // HANDLE CLIPPING\n const clipPaths = el.__clipPaths;\n const prevElClipPaths = scope.prevElClipPaths;\n\n let forceSetTransform = false;\n let forceSetStyle = false;\n // Optimize when clipping on group with several elements\n if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n // If has previous clipping state, restore from it\n if (prevElClipPaths && prevElClipPaths.length) {\n // Flush restore\n flushPathDrawn(ctx, scope);\n\n ctx.restore();\n // Must set all style and transform because context changed by restore\n forceSetStyle = forceSetTransform = true;\n\n scope.prevElClipPaths = null;\n scope.allClipped = false;\n // Reset prevEl since context has been restored\n scope.prevEl = null;\n }\n // New clipping state\n if (clipPaths && clipPaths.length) {\n // Flush before clip\n flushPathDrawn(ctx, scope);\n\n ctx.save();\n updateClipStatus(clipPaths, ctx, scope);\n // Must set transform because it's changed when clip.\n forceSetTransform = true;\n }\n scope.prevElClipPaths = clipPaths;\n }\n\n // Not rendering elements if it's clipped by a zero area path.\n // Or it may cause bug on some version of IE11 (like 11.0.9600.178**),\n // where exception \"unexpected call to method or property access\"\n // might be thrown when calling ctx.fill or ctx.stroke after a path\n // whose area size is zero is drawn and ctx.clip() is called and\n // shadowBlur is set. See #4572, #3112, #5777.\n // (e.g.,\n // ctx.moveTo(10, 10);\n // ctx.lineTo(20, 10);\n // ctx.closePath();\n // ctx.clip();\n // ctx.shadowBlur = 10;\n // ...\n // ctx.fill();\n // )\n if (scope.allClipped) {\n el.__isRendered = false;\n return;\n }\n\n // START BRUSH\n el.beforeBrush && el.beforeBrush();\n el.innerBeforeBrush();\n\n const prevEl = scope.prevEl;\n // TODO el type changed.\n if (!prevEl) {\n forceSetStyle = forceSetTransform = true;\n }\n\n let canBatchPath = el instanceof Path // Only path supports batch\n && el.autoBatch\n && canPathBatch(el.style);\n\n if (forceSetTransform || isTransformChanged(m, prevEl.transform)) {\n // Flush\n flushPathDrawn(ctx, scope);\n setContextTransform(ctx, el);\n }\n else if (!canBatchPath) {\n // Flush\n flushPathDrawn(ctx, scope);\n }\n\n const style = getStyle(el, scope.inHover);\n if (el instanceof Path) {\n // PENDING do we need to rebind all style if displayable type changed?\n if (scope.lastDrawType !== DRAW_TYPE_PATH) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_PATH;\n }\n\n bindPathAndTextCommonStyle(ctx, el as Path, prevEl as Path, forceSetStyle, scope);\n // Begin path at start\n if (!canBatchPath || (!scope.batchFill && !scope.batchStroke)) {\n ctx.beginPath();\n }\n brushPath(ctx, el as Path, style, canBatchPath);\n\n if (canBatchPath) {\n scope.batchFill = style.fill as string || '';\n scope.batchStroke = style.stroke as string || '';\n }\n }\n else {\n if (el instanceof TSpan) {\n if (scope.lastDrawType !== DRAW_TYPE_TEXT) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_TEXT;\n }\n\n bindPathAndTextCommonStyle(ctx, el as TSpan, prevEl as TSpan, forceSetStyle, scope);\n brushText(ctx, el as TSpan, style);\n }\n else if (el instanceof ZRImage) {\n if (scope.lastDrawType !== DRAW_TYPE_IMAGE) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_IMAGE;\n }\n\n bindImageStyle(ctx, el as ZRImage, prevEl as ZRImage, forceSetStyle, scope);\n brushImage(ctx, el as ZRImage, style);\n }\n else if (el instanceof IncrementalDisplayable) {\n if (scope.lastDrawType !== DRAW_TYPE_INCREMENTAL) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_INCREMENTAL;\n }\n\n brushIncremental(ctx, el, scope);\n }\n\n }\n\n if (canBatchPath && isLast) {\n flushPathDrawn(ctx, scope);\n }\n\n el.innerAfterBrush();\n el.afterBrush && el.afterBrush();\n\n scope.prevEl = el;\n\n // Mark as painted.\n el.__dirty = 0;\n el.__isRendered = true;\n}\n\nfunction brushIncremental(\n ctx: CanvasRenderingContext2D,\n el: IncrementalDisplayable,\n scope: BrushScope\n) {\n let displayables = el.getDisplayables();\n let temporalDisplayables = el.getTemporalDisplayables();\n // Provide an inner scope.\n // Save current context and restore after brushed.\n ctx.save();\n let innerScope: BrushScope = {\n prevElClipPaths: null,\n prevEl: null,\n allClipped: false,\n viewWidth: scope.viewWidth,\n viewHeight: scope.viewHeight,\n inHover: scope.inHover\n };\n let i;\n let len;\n // Render persistant displayables.\n for (i = el.getCursor(), len = displayables.length; i < len; i++) {\n const displayable = displayables[i];\n displayable.beforeBrush && displayable.beforeBrush();\n displayable.innerBeforeBrush();\n brush(ctx, displayable, innerScope, i === len - 1);\n displayable.innerAfterBrush();\n displayable.afterBrush && displayable.afterBrush();\n innerScope.prevEl = displayable;\n }\n // Render temporary displayables.\n for (let i = 0, len = temporalDisplayables.length; i < len; i++) {\n const displayable = temporalDisplayables[i];\n displayable.beforeBrush && displayable.beforeBrush();\n displayable.innerBeforeBrush();\n brush(ctx, displayable, innerScope, i === len - 1);\n displayable.innerAfterBrush();\n displayable.afterBrush && displayable.afterBrush();\n innerScope.prevEl = displayable;\n }\n el.clearTemporalDisplayables();\n el.notClear = true;\n\n ctx.restore();\n}","import * as util from '../core/util';\nimport {devicePixelRatio} from '../config';\nimport { ImagePatternObject } from '../graphic/Pattern';\nimport CanvasPainter from './Painter';\nimport { GradientObject, InnerGradientObject } from '../graphic/Gradient';\nimport { ZRCanvasRenderingContext } from '../core/types';\nimport Eventful from '../core/Eventful';\nimport { ElementEventCallback } from '../Element';\nimport { getCanvasGradient } from './helper';\nimport { createCanvasPattern } from './graphic';\nimport Displayable from '../graphic/Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport { REDARAW_BIT } from '../graphic/constants';\n\nfunction returnFalse() {\n return false;\n}\n\nfunction createDom(id: string, painter: CanvasPainter, dpr: number) {\n const newDom = util.createCanvas();\n const width = painter.getWidth();\n const height = painter.getHeight();\n\n const newDomStyle = newDom.style;\n if (newDomStyle) { // In node or some other non-browser environment\n newDomStyle.position = 'absolute';\n newDomStyle.left = '0';\n newDomStyle.top = '0';\n newDomStyle.width = width + 'px';\n newDomStyle.height = height + 'px';\n\n newDom.setAttribute('data-zr-dom-id', id);\n }\n\n newDom.width = width * dpr;\n newDom.height = height * dpr;\n\n return newDom;\n}\n\nexport interface LayerConfig {\n // 每次清空画布的颜色\n clearColor?: string | GradientObject | ImagePatternObject\n // 是否开启动态模糊\n motionBlur?: boolean\n // 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n lastFrameAlpha?: number\n};\n\nexport default class Layer extends Eventful {\n\n id: string\n\n dom: HTMLCanvasElement\n domBack: HTMLCanvasElement\n\n ctx: CanvasRenderingContext2D\n ctxBack: CanvasRenderingContext2D\n\n painter: CanvasPainter\n\n // Configs\n /**\n * 每次清空画布的颜色\n */\n clearColor: string | GradientObject | ImagePatternObject\n /**\n * 是否开启动态模糊\n */\n motionBlur = false\n /**\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n */\n lastFrameAlpha = 0.7\n /**\n * Layer dpr\n */\n dpr = 1\n\n /**\n * Virtual layer will not be inserted into dom.\n */\n virtual = false\n\n config = {}\n\n incremental = false\n\n zlevel = 0\n\n maxRepaintRectCount = 5\n\n private _paintRects: BoundingRect[]\n\n __painter: CanvasPainter\n\n __dirty = true\n __firstTimePaint = true\n\n __used = false\n\n __drawIndex = 0\n __startIndex = 0\n __endIndex = 0\n\n // indices in the previous frame\n __prevStartIndex: number = null\n __prevEndIndex: number = null\n\n __builtin__: boolean\n\n constructor(id: string | HTMLCanvasElement, painter: CanvasPainter, dpr?: number) {\n super();\n\n let dom;\n dpr = dpr || devicePixelRatio;\n if (typeof id === 'string') {\n dom = createDom(id, painter, dpr);\n }\n // Not using isDom because in node it will return false\n else if (util.isObject(id)) {\n dom = id;\n id = dom.id;\n }\n this.id = id as string;\n this.dom = dom;\n\n const domStyle = dom.style;\n if (domStyle) { // Not in node\n dom.onselectstart = returnFalse; // 避免页面选中的尴尬\n domStyle.webkitUserSelect = 'none';\n domStyle.userSelect = 'none';\n domStyle.webkitTapHighlightColor = 'rgba(0,0,0,0)';\n (domStyle as any)['-webkit-touch-callout'] = 'none';\n domStyle.padding = '0';\n domStyle.margin = '0';\n domStyle.borderWidth = '0';\n }\n\n this.domBack = null;\n this.ctxBack = null;\n\n this.painter = painter;\n\n this.config = null;\n\n this.dpr = dpr;\n }\n\n getElementCount() {\n return this.__endIndex - this.__startIndex;\n }\n\n afterBrush() {\n this.__prevStartIndex = this.__startIndex;\n this.__prevEndIndex = this.__endIndex;\n }\n\n initContext() {\n this.ctx = this.dom.getContext('2d');\n (this.ctx as ZRCanvasRenderingContext).dpr = this.dpr;\n }\n\n setUnpainted() {\n this.__firstTimePaint = true;\n }\n\n createBackBuffer() {\n const dpr = this.dpr;\n\n this.domBack = createDom('back-' + this.id, this.painter, dpr);\n this.ctxBack = this.domBack.getContext('2d');\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n\n /**\n * Create repaint list when using dirty rect rendering.\n *\n * @param displayList current rendering list\n * @param prevList last frame rendering list\n * @return repaint rects. null for the first frame, [] for no element dirty\n */\n createRepaintRects(\n displayList: Displayable[],\n prevList: Displayable[],\n viewWidth: number,\n viewHeight: number\n ) {\n if (this.__firstTimePaint) {\n this.__firstTimePaint = false;\n return null;\n }\n\n const mergedRepaintRects: BoundingRect[] = [];\n const maxRepaintRectCount = this.maxRepaintRectCount;\n let full = false;\n const pendingRect = new BoundingRect(0, 0, 0, 0);\n\n function addRectToMergePool(rect: BoundingRect) {\n if (!rect.isFinite() || rect.isZero()) {\n return;\n }\n\n if (mergedRepaintRects.length === 0) {\n // First rect, create new merged rect\n const boundingRect = new BoundingRect(0, 0, 0, 0);\n boundingRect.copy(rect);\n mergedRepaintRects.push(boundingRect);\n }\n else {\n let isMerged = false;\n let minDeltaArea = Infinity;\n let bestRectToMergeIdx = 0;\n for (let i = 0; i < mergedRepaintRects.length; ++i) {\n const mergedRect = mergedRepaintRects[i];\n\n // Merge if has intersection\n if (mergedRect.intersect(rect)) {\n const pendingRect = new BoundingRect(0, 0, 0, 0);\n pendingRect.copy(mergedRect);\n pendingRect.union(rect);\n mergedRepaintRects[i] = pendingRect;\n isMerged = true;\n break;\n }\n else if (full) {\n // Merged to exists rectangles if full\n pendingRect.copy(rect);\n pendingRect.union(mergedRect);\n const aArea = rect.width * rect.height;\n const bArea = mergedRect.width * mergedRect.height;\n const pendingArea = pendingRect.width * pendingRect.height;\n const deltaArea = pendingArea - aArea - bArea;\n if (deltaArea < minDeltaArea) {\n minDeltaArea = deltaArea;\n bestRectToMergeIdx = i;\n }\n }\n }\n\n if (full) {\n mergedRepaintRects[bestRectToMergeIdx].union(rect);\n isMerged = true;\n }\n\n if (!isMerged) {\n // Create new merged rect if cannot merge with current\n const boundingRect = new BoundingRect(0, 0, 0, 0);\n boundingRect.copy(rect);\n mergedRepaintRects.push(boundingRect);\n }\n if (!full) {\n full = mergedRepaintRects.length >= maxRepaintRectCount;\n }\n }\n }\n\n /**\n * Loop the paint list of this frame and get the dirty rects of elements\n * in this frame.\n */\n for (let i = this.__startIndex; i < this.__endIndex; ++i) {\n const el = displayList[i];\n if (el) {\n /**\n * `shouldPaint` is true only when the element is not ignored or\n * invisible and all its ancestors are not ignored.\n * `shouldPaint` being true means it will be brushed this frame.\n *\n * `__isRendered` being true means the element is currently on\n * the canvas.\n *\n * `__dirty` being true means the element should be brushed this\n * frame.\n *\n * We only need to repaint the element's previous painting rect\n * if it's currently on the canvas and needs repaint this frame\n * or not painted this frame.\n */\n const shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true);\n const prevRect = el.__isRendered && ((el.__dirty & REDARAW_BIT) || !shouldPaint)\n ? el.getPrevPaintRect()\n : null;\n if (prevRect) {\n addRectToMergePool(prevRect);\n }\n\n /**\n * On the other hand, we only need to paint the current rect\n * if the element should be brushed this frame and either being\n * dirty or not rendered before.\n */\n const curRect = shouldPaint && ((el.__dirty & REDARAW_BIT) || !el.__isRendered)\n ? el.getPaintRect()\n : null;\n if (curRect) {\n addRectToMergePool(curRect);\n }\n }\n }\n\n /**\n * The above loop calculates the dirty rects of elements that are in the\n * paint list this frame, which does not include those elements removed\n * in this frame. So we loop the `prevList` to get the removed elements.\n */\n for (let i = this.__prevStartIndex; i < this.__prevEndIndex; ++i) {\n const el = prevList[i];\n /**\n * Consider the elements whose ancestors are invisible, they should\n * not be painted and their previous painting rects should be\n * cleared if they are rendered on the canvas (`__isRendered` being\n * true). `!shouldPaint` means the element is not brushed in this\n * frame.\n *\n * `!el.__zr` means it's removed from the storage.\n *\n * In conclusion, an element needs to repaint the previous painting\n * rect if and only if it's not painted this frame and was\n * previously painted on the canvas.\n */\n const shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true);\n if (el && (!shouldPaint || !el.__zr) && el.__isRendered) {\n // el was removed\n const prevRect = el.getPrevPaintRect();\n if (prevRect) {\n addRectToMergePool(prevRect);\n }\n }\n }\n\n // Merge intersected rects in the result\n let hasIntersections;\n do {\n hasIntersections = false;\n for (let i = 0; i < mergedRepaintRects.length;) {\n if (mergedRepaintRects[i].isZero()) {\n mergedRepaintRects.splice(i, 1);\n continue;\n }\n for (let j = i + 1; j < mergedRepaintRects.length;) {\n if (mergedRepaintRects[i].intersect(mergedRepaintRects[j])) {\n hasIntersections = true;\n mergedRepaintRects[i].union(mergedRepaintRects[j]);\n mergedRepaintRects.splice(j, 1);\n }\n else {\n j++;\n }\n }\n i++;\n }\n } while (hasIntersections);\n\n this._paintRects = mergedRepaintRects;\n\n return mergedRepaintRects;\n }\n\n /**\n * Get paint rects for debug usage.\n */\n debugGetPaintRects() {\n return (this._paintRects || []).slice();\n }\n\n resize(width: number, height: number) {\n const dpr = this.dpr;\n\n const dom = this.dom;\n const domStyle = dom.style;\n const domBack = this.domBack;\n\n if (domStyle) {\n domStyle.width = width + 'px';\n domStyle.height = height + 'px';\n }\n\n dom.width = width * dpr;\n dom.height = height * dpr;\n\n if (domBack) {\n domBack.width = width * dpr;\n domBack.height = height * dpr;\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n }\n\n /**\n * 清空该层画布\n */\n clear(\n clearAll?: boolean,\n clearColor?: string | GradientObject | ImagePatternObject,\n repaintRects?: BoundingRect[]\n ) {\n const dom = this.dom;\n const ctx = this.ctx;\n const width = dom.width;\n const height = dom.height;\n\n clearColor = clearColor || this.clearColor;\n const haveMotionBLur = this.motionBlur && !clearAll;\n const lastFrameAlpha = this.lastFrameAlpha;\n\n const dpr = this.dpr;\n const self = this;\n\n if (haveMotionBLur) {\n if (!this.domBack) {\n this.createBackBuffer();\n }\n\n this.ctxBack.globalCompositeOperation = 'copy';\n this.ctxBack.drawImage(\n dom, 0, 0,\n width / dpr,\n height / dpr\n );\n }\n\n const domBack = this.domBack;\n\n function doClear(x: number, y: number, width: number, height: number) {\n ctx.clearRect(x, y, width, height);\n if (clearColor && clearColor !== 'transparent') {\n let clearColorGradientOrPattern;\n // Gradient\n if (util.isGradientObject(clearColor)) {\n // Cache canvas gradient\n clearColorGradientOrPattern = (clearColor as InnerGradientObject).__canvasGradient\n || getCanvasGradient(ctx, clearColor, {\n x: 0,\n y: 0,\n width: width,\n height: height\n });\n\n (clearColor as InnerGradientObject).__canvasGradient = clearColorGradientOrPattern;\n }\n // Pattern\n else if (util.isImagePatternObject(clearColor)) {\n clearColorGradientOrPattern = createCanvasPattern(\n ctx, clearColor, {\n dirty() {\n // TODO\n self.setUnpainted();\n self.__painter.refresh();\n }\n }\n );\n }\n ctx.save();\n ctx.fillStyle = clearColorGradientOrPattern || (clearColor as string);\n ctx.fillRect(x, y, width, height);\n ctx.restore();\n }\n\n if (haveMotionBLur) {\n ctx.save();\n ctx.globalAlpha = lastFrameAlpha;\n ctx.drawImage(domBack, x, y, width, height);\n ctx.restore();\n }\n };\n\n if (!repaintRects || haveMotionBLur) {\n // Clear the full canvas\n doClear(0, 0, width, height);\n }\n else if (repaintRects.length) {\n // Clear the repaint areas\n util.each(repaintRects, rect => {\n doClear(\n rect.x * dpr,\n rect.y * dpr,\n rect.width * dpr,\n rect.height * dpr\n );\n });\n }\n }\n\n // Iterface of refresh\n refresh: (clearColor?: string | GradientObject | ImagePatternObject) => void\n\n // Interface of renderToCanvas in getRenderedCanvas\n renderToCanvas: (ctx: CanvasRenderingContext2D) => void\n\n // Events\n onclick: ElementEventCallback\n ondblclick: ElementEventCallback\n onmouseover: ElementEventCallback\n onmouseout: ElementEventCallback\n onmousemove: ElementEventCallback\n onmousewheel: ElementEventCallback\n onmousedown: ElementEventCallback\n onmouseup: ElementEventCallback\n oncontextmenu: ElementEventCallback\n\n ondrag: ElementEventCallback\n ondragstart: ElementEventCallback\n ondragend: ElementEventCallback\n ondragenter: ElementEventCallback\n ondragleave: ElementEventCallback\n ondragover: ElementEventCallback\n ondrop: ElementEventCallback\n}","import {devicePixelRatio} from '../config';\nimport * as util from '../core/util';\nimport Layer, { LayerConfig } from './Layer';\nimport requestAnimationFrame from '../animation/requestAnimationFrame';\nimport ZRImage from '../graphic/Image';\nimport env from '../core/env';\nimport Displayable from '../graphic/Displayable';\nimport { WXCanvasRenderingContext, ZRCanvasRenderingContext } from '../core/types';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ImagePatternObject } from '../graphic/Pattern';\nimport Storage from '../Storage';\nimport { brush, BrushScope, brushSingle } from './graphic';\nimport { PainterBase } from '../PainterBase';\nimport BoundingRect from '../core/BoundingRect';\nimport IncrementalDisplayable from '../graphic/IncrementalDisplayable';\nimport Path from '../graphic/Path';\nimport { REDARAW_BIT } from '../graphic/constants';\n\nconst HOVER_LAYER_ZLEVEL = 1e5;\nconst CANVAS_ZLEVEL = 314159;\n\nconst EL_AFTER_INCREMENTAL_INC = 0.01;\nconst INCREMENTAL_INC = 0.001;\n\nfunction parseInt10(val: string) {\n return parseInt(val, 10);\n}\n\nfunction isLayerValid(layer: Layer) {\n if (!layer) {\n return false;\n }\n\n if (layer.__builtin__) {\n return true;\n }\n\n if (typeof (layer.resize) !== 'function'\n || typeof (layer.refresh) !== 'function'\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction createRoot(width: number, height: number) {\n const domRoot = document.createElement('div');\n\n // domRoot.onselectstart = returnFalse; // Avoid page selected\n domRoot.style.cssText = [\n 'position:relative',\n // IOS13 safari probably has a compositing bug (z order of the canvas and the consequent\n // dom does not act as expected) when some of the parent dom has\n // `-webkit-overflow-scrolling: touch;` and the webpage is longer than one screen and\n // the canvas is not at the top part of the page.\n // Check `https://bugs.webkit.org/show_bug.cgi?id=203681` for more details. We remove\n // this `overflow:hidden` to avoid the bug.\n // 'overflow:hidden',\n 'width:' + width + 'px',\n 'height:' + height + 'px',\n 'padding:0',\n 'margin:0',\n 'border-width:0'\n ].join(';') + ';';\n\n return domRoot;\n}\n\ninterface CanvasPainterOption {\n devicePixelRatio?: number\n width?: number | string // Can be 10 / 10px / auto\n height?: number | string,\n useDirtyRect?: boolean\n}\n\nexport default class CanvasPainter implements PainterBase {\n\n type = 'canvas'\n\n root: HTMLElement\n\n dpr: number\n\n storage: Storage\n\n private _singleCanvas: boolean\n\n private _opts: CanvasPainterOption\n\n private _zlevelList: number[] = []\n\n private _prevDisplayList: Displayable[] = []\n\n private _layers: {[key: number]: Layer} = {} // key is zlevel\n\n private _layerConfig: {[key: number]: LayerConfig} = {} // key is zlevel\n\n /**\n * zrender will do compositing when root is a canvas and have multiple zlevels.\n */\n private _needsManuallyCompositing = false\n\n private _width: number\n private _height: number\n\n private _domRoot: HTMLElement\n\n private _hoverlayer: Layer\n\n private _redrawId: number\n\n private _backgroundColor: string | GradientObject | ImagePatternObject\n\n\n constructor(root: HTMLElement, storage: Storage, opts: CanvasPainterOption, id: number) {\n\n this.type = 'canvas';\n\n // In node environment using node-canvas\n const singleCanvas = !root.nodeName // In node ?\n || root.nodeName.toUpperCase() === 'CANVAS';\n\n this._opts = opts = util.extend({}, opts || {}) as CanvasPainterOption;\n\n /**\n * @type {number}\n */\n this.dpr = opts.devicePixelRatio || devicePixelRatio;\n /**\n * @type {boolean}\n * @private\n */\n this._singleCanvas = singleCanvas;\n /**\n * 绘图容器\n * @type {HTMLElement}\n */\n this.root = root;\n\n const rootStyle = root.style;\n\n if (rootStyle) {\n rootStyle.webkitTapHighlightColor = 'transparent';\n rootStyle.webkitUserSelect = 'none';\n rootStyle.userSelect = 'none';\n (rootStyle as any)['-webkit-touch-callout'] = 'none';\n\n root.innerHTML = '';\n }\n\n /**\n * @type {module:zrender/Storage}\n */\n this.storage = storage;\n\n const zlevelList: number[] = this._zlevelList;\n\n this._prevDisplayList = [];\n\n const layers = this._layers;\n\n if (!singleCanvas) {\n this._width = this._getSize(0);\n this._height = this._getSize(1);\n\n const domRoot = this._domRoot = createRoot(\n this._width, this._height\n );\n root.appendChild(domRoot);\n }\n else {\n const rootCanvas = root as HTMLCanvasElement;\n let width = rootCanvas.width;\n let height = rootCanvas.height;\n\n if (opts.width != null) {\n // TODO sting?\n width = opts.width as number;\n }\n if (opts.height != null) {\n // TODO sting?\n height = opts.height as number;\n }\n this.dpr = opts.devicePixelRatio || 1;\n\n // Use canvas width and height directly\n rootCanvas.width = width * this.dpr;\n rootCanvas.height = height * this.dpr;\n\n this._width = width;\n this._height = height;\n\n // Create layer if only one given canvas\n // Device can be specified to create a high dpi image.\n const mainLayer = new Layer(rootCanvas, this, this.dpr);\n mainLayer.__builtin__ = true;\n mainLayer.initContext();\n // FIXME Use canvas width and height\n // mainLayer.resize(width, height);\n layers[CANVAS_ZLEVEL] = mainLayer;\n mainLayer.zlevel = CANVAS_ZLEVEL;\n // Not use common zlevel.\n zlevelList.push(CANVAS_ZLEVEL);\n\n this._domRoot = root;\n }\n }\n\n\n getType() {\n return 'canvas';\n }\n\n /**\n * If painter use a single canvas\n */\n isSingleCanvas() {\n return this._singleCanvas;\n }\n\n getViewportRoot() {\n return this._domRoot;\n }\n\n getViewportRootOffset() {\n const viewportRoot = this.getViewportRoot();\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n }\n\n /**\n * 刷新\n * @param paintAll 强制绘制所有displayable\n */\n refresh(paintAll?: boolean) {\n const list = this.storage.getDisplayList(true);\n const prevList = this._prevDisplayList;\n\n const zlevelList = this._zlevelList;\n\n this._redrawId = Math.random();\n\n this._paintList(list, prevList, paintAll, this._redrawId);\n\n // Paint custum layers\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n const layer = this._layers[z];\n if (!layer.__builtin__ && layer.refresh) {\n const clearColor = i === 0 ? this._backgroundColor : null;\n layer.refresh(clearColor);\n }\n }\n\n if (this._opts.useDirtyRect) {\n this._prevDisplayList = list.slice();\n }\n\n return this;\n }\n\n\n refreshHover() {\n this._paintHoverList(this.storage.getDisplayList(false));\n }\n\n private _paintHoverList(list: Displayable[]) {\n let len = list.length;\n let hoverLayer = this._hoverlayer;\n hoverLayer && hoverLayer.clear();\n\n if (!len) {\n return;\n }\n\n const scope: BrushScope = {\n inHover: true,\n viewWidth: this._width,\n viewHeight: this._height\n };\n\n let ctx;\n for (let i = 0; i < len; i++) {\n const el = list[i];\n if (el.__inHover) {\n // Use a extream large zlevel\n // FIXME?\n if (!hoverLayer) {\n hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n\n if (!ctx) {\n ctx = hoverLayer.ctx;\n ctx.save();\n }\n\n brush(ctx, el, scope, i === len - 1);\n }\n }\n if (ctx) {\n ctx.restore();\n }\n }\n\n getHoverLayer() {\n return this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n\n paintOne(ctx: CanvasRenderingContext2D, el: Displayable) {\n brushSingle(ctx, el);\n }\n\n private _paintList(list: Displayable[], prevList: Displayable[], paintAll: boolean, redrawId?: number) {\n if (this._redrawId !== redrawId) {\n return;\n }\n\n paintAll = paintAll || false;\n\n this._updateLayerStatus(list);\n\n const {finished, needsRefreshHover} = this._doPaintList(list, prevList, paintAll);\n\n if (this._needsManuallyCompositing) {\n this._compositeManually();\n }\n\n if (needsRefreshHover) {\n this._paintHoverList(list);\n }\n\n if (!finished) {\n const self = this;\n requestAnimationFrame(function () {\n self._paintList(list, prevList, paintAll, redrawId);\n });\n }\n else {\n this.eachLayer(layer => {\n layer.afterBrush && layer.afterBrush();\n });\n }\n }\n\n private _compositeManually() {\n const ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n const width = (this._domRoot as HTMLCanvasElement).width;\n const height = (this._domRoot as HTMLCanvasElement).height;\n ctx.clearRect(0, 0, width, height);\n // PENDING, If only builtin layer?\n this.eachBuiltinLayer(function (layer) {\n if (layer.virtual) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n });\n }\n\n private _doPaintList(\n list: Displayable[],\n prevList: Displayable[],\n paintAll?: boolean\n ): {\n finished: boolean\n needsRefreshHover: boolean\n } {\n const layerList = [];\n const useDirtyRect = this._opts.useDirtyRect;\n for (let zi = 0; zi < this._zlevelList.length; zi++) {\n const zlevel = this._zlevelList[zi];\n const layer = this._layers[zlevel];\n if (layer.__builtin__\n && layer !== this._hoverlayer\n && (layer.__dirty || paintAll)\n // Layer with hover elements can't be redrawn.\n // && !layer.__hasHoverLayerELement\n ) {\n layerList.push(layer);\n }\n }\n\n let finished = true;\n let needsRefreshHover = false;\n\n for (let k = 0; k < layerList.length; k++) {\n const layer = layerList[k];\n const ctx = layer.ctx;\n\n const repaintRects = useDirtyRect\n && layer.createRepaintRects(list, prevList, this._width, this._height);\n\n let start = paintAll ? layer.__startIndex : layer.__drawIndex;\n\n const useTimer = !paintAll && layer.incremental && Date.now;\n const startTime = useTimer && Date.now();\n\n const clearColor = layer.zlevel === this._zlevelList[0]\n ? this._backgroundColor : null;\n\n // All elements in this layer are cleared.\n if (layer.__startIndex === layer.__endIndex) {\n layer.clear(false, clearColor, repaintRects);\n }\n else if (start === layer.__startIndex) {\n const firstEl = list[start];\n if (!firstEl.incremental || !(firstEl as IncrementalDisplayable).notClear || paintAll) {\n layer.clear(false, clearColor, repaintRects);\n }\n }\n if (start === -1) {\n console.error('For some unknown reason. drawIndex is -1');\n start = layer.__startIndex;\n }\n let i: number;\n /* eslint-disable-next-line */\n const repaint = (repaintRect?: BoundingRect) => {\n const scope: BrushScope = {\n inHover: false,\n allClipped: false,\n prevEl: null,\n viewWidth: this._width,\n viewHeight: this._height\n };\n\n for (i = start; i < layer.__endIndex; i++) {\n const el = list[i];\n\n if (el.__inHover) {\n needsRefreshHover = true;\n }\n\n this._doPaintEl(el, layer, useDirtyRect, repaintRect, scope, i === layer.__endIndex - 1);\n\n if (useTimer) {\n // Date.now can be executed in 13,025,305 ops/second.\n const dTime = Date.now() - startTime;\n // Give 15 millisecond to draw.\n // The rest elements will be drawn in the next frame.\n if (dTime > 15) {\n break;\n }\n }\n }\n\n if (scope.prevElClipPaths) {\n // Needs restore the state. If last drawn element is in the clipping area.\n ctx.restore();\n }\n };\n\n if (repaintRects) {\n if (repaintRects.length === 0) {\n // Nothing to repaint, mark as finished\n i = layer.__endIndex;\n }\n else {\n const dpr = this.dpr;\n // Set repaintRect as clipPath\n for (var r = 0; r < repaintRects.length; ++r) {\n const rect = repaintRects[r];\n\n ctx.save();\n ctx.beginPath();\n ctx.rect(\n rect.x * dpr,\n rect.y * dpr,\n rect.width * dpr,\n rect.height * dpr\n );\n ctx.clip();\n\n repaint(rect);\n ctx.restore();\n }\n }\n }\n else {\n // Paint all once\n ctx.save();\n repaint();\n ctx.restore();\n }\n\n layer.__drawIndex = i;\n\n if (layer.__drawIndex < layer.__endIndex) {\n finished = false;\n }\n }\n\n if (env.wxa) {\n // Flush for weixin application\n util.each(this._layers, function (layer) {\n if (layer && layer.ctx && (layer.ctx as WXCanvasRenderingContext).draw) {\n (layer.ctx as WXCanvasRenderingContext).draw();\n }\n });\n }\n\n return {\n finished,\n needsRefreshHover\n };\n }\n\n private _doPaintEl(\n el: Displayable,\n currentLayer: Layer,\n useDirtyRect: boolean,\n repaintRect: BoundingRect,\n scope: BrushScope,\n isLast: boolean\n ) {\n const ctx = currentLayer.ctx;\n if (useDirtyRect) {\n const paintRect = el.getPaintRect();\n if (!repaintRect || paintRect && paintRect.intersect(repaintRect)) {\n brush(ctx, el, scope, isLast);\n el.setPrevPaintRect(paintRect);\n }\n }\n else {\n brush(ctx, el, scope, isLast);\n }\n }\n\n /**\n * 获取 zlevel 所在层,如果不存在则会创建一个新的层\n * @param zlevel\n * @param virtual Virtual layer will not be inserted into dom.\n */\n getLayer(zlevel: number, virtual?: boolean) {\n if (this._singleCanvas && !this._needsManuallyCompositing) {\n zlevel = CANVAS_ZLEVEL;\n }\n let layer = this._layers[zlevel];\n if (!layer) {\n // Create a new layer\n layer = new Layer('zr_' + zlevel, this, this.dpr);\n layer.zlevel = zlevel;\n layer.__builtin__ = true;\n\n if (this._layerConfig[zlevel]) {\n util.merge(layer, this._layerConfig[zlevel], true);\n }\n // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) {\n util.merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true);\n }\n\n if (virtual) {\n layer.virtual = virtual;\n }\n\n this.insertLayer(zlevel, layer);\n\n // Context is created after dom inserted to document\n // Or excanvas will get 0px clientWidth and clientHeight\n layer.initContext();\n }\n\n return layer;\n }\n\n insertLayer(zlevel: number, layer: Layer) {\n\n const layersMap = this._layers;\n const zlevelList = this._zlevelList;\n const len = zlevelList.length;\n const domRoot = this._domRoot;\n let prevLayer = null;\n let i = -1;\n\n if (layersMap[zlevel]) {\n util.logError('ZLevel ' + zlevel + ' has been used already');\n return;\n }\n // Check if is a valid layer\n if (!isLayerValid(layer)) {\n util.logError('Layer of zlevel ' + zlevel + ' is not valid');\n return;\n }\n\n if (len > 0 && zlevel > zlevelList[0]) {\n for (i = 0; i < len - 1; i++) {\n if (\n zlevelList[i] < zlevel\n && zlevelList[i + 1] > zlevel\n ) {\n break;\n }\n }\n prevLayer = layersMap[zlevelList[i]];\n }\n zlevelList.splice(i + 1, 0, zlevel);\n\n layersMap[zlevel] = layer;\n\n // Vitual layer will not directly show on the screen.\n // (It can be a WebGL layer and assigned to a ZRImage element)\n // But it still under management of zrender.\n if (!layer.virtual) {\n if (prevLayer) {\n const prevDom = prevLayer.dom;\n if (prevDom.nextSibling) {\n domRoot.insertBefore(\n layer.dom,\n prevDom.nextSibling\n );\n }\n else {\n domRoot.appendChild(layer.dom);\n }\n }\n else {\n if (domRoot.firstChild) {\n domRoot.insertBefore(layer.dom, domRoot.firstChild);\n }\n else {\n domRoot.appendChild(layer.dom);\n }\n }\n }\n\n layer.__painter = this;\n }\n\n // Iterate each layer\n eachLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n const zlevelList = this._zlevelList;\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n cb.call(context, this._layers[z], z);\n }\n }\n\n // Iterate each buildin layer\n eachBuiltinLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n const zlevelList = this._zlevelList;\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n const layer = this._layers[z];\n if (layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n }\n\n // Iterate each other layer except buildin layer\n eachOtherLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n const zlevelList = this._zlevelList;\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n const layer = this._layers[z];\n if (!layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n }\n\n /**\n * 获取所有已创建的层\n * @param prevLayer\n */\n getLayers() {\n return this._layers;\n }\n\n _updateLayerStatus(list: Displayable[]) {\n\n this.eachBuiltinLayer(function (layer, z) {\n layer.__dirty = layer.__used = false;\n });\n\n function updatePrevLayer(idx: number) {\n if (prevLayer) {\n if (prevLayer.__endIndex !== idx) {\n prevLayer.__dirty = true;\n }\n prevLayer.__endIndex = idx;\n }\n }\n\n if (this._singleCanvas) {\n for (let i = 1; i < list.length; i++) {\n const el = list[i];\n if (el.zlevel !== list[i - 1].zlevel || el.incremental) {\n this._needsManuallyCompositing = true;\n break;\n }\n }\n }\n\n let prevLayer: Layer = null;\n let incrementalLayerCount = 0;\n let prevZlevel;\n let i;\n\n for (i = 0; i < list.length; i++) {\n const el = list[i];\n const zlevel = el.zlevel;\n let layer;\n\n if (prevZlevel !== zlevel) {\n prevZlevel = zlevel;\n incrementalLayerCount = 0;\n }\n\n // TODO Not use magic number on zlevel.\n\n // Each layer with increment element can be separated to 3 layers.\n // (Other Element drawn after incremental element)\n // -----------------zlevel + EL_AFTER_INCREMENTAL_INC--------------------\n // (Incremental element)\n // ----------------------zlevel + INCREMENTAL_INC------------------------\n // (Element drawn before incremental element)\n // --------------------------------zlevel--------------------------------\n if (el.incremental) {\n layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n layer.incremental = true;\n incrementalLayerCount = 1;\n }\n else {\n layer = this.getLayer(\n zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0),\n this._needsManuallyCompositing\n );\n }\n\n if (!layer.__builtin__) {\n util.logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n }\n\n if (layer !== prevLayer) {\n layer.__used = true;\n if (layer.__startIndex !== i) {\n layer.__dirty = true;\n }\n layer.__startIndex = i;\n if (!layer.incremental) {\n layer.__drawIndex = i;\n }\n else {\n // Mark layer draw index needs to update.\n layer.__drawIndex = -1;\n }\n updatePrevLayer(i);\n prevLayer = layer;\n }\n if ((el.__dirty & REDARAW_BIT) && !el.__inHover) { // Ignore dirty elements in hover layer.\n layer.__dirty = true;\n if (layer.incremental && layer.__drawIndex < 0) {\n // Start draw from the first dirty element.\n layer.__drawIndex = i;\n }\n }\n }\n\n updatePrevLayer(i);\n\n this.eachBuiltinLayer(function (layer, z) {\n // Used in last frame but not in this frame. Needs clear\n if (!layer.__used && layer.getElementCount() > 0) {\n layer.__dirty = true;\n layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n }\n // For incremental layer. In case start index changed and no elements are dirty.\n if (layer.__dirty && layer.__drawIndex < 0) {\n layer.__drawIndex = layer.__startIndex;\n }\n });\n }\n\n /**\n * 清除hover层外所有内容\n */\n clear() {\n this.eachBuiltinLayer(this._clearLayer);\n return this;\n }\n\n _clearLayer(layer: Layer) {\n layer.clear();\n }\n\n setBackgroundColor(backgroundColor: string | GradientObject | ImagePatternObject) {\n this._backgroundColor = backgroundColor;\n\n util.each(this._layers, layer => {\n layer.setUnpainted();\n });\n }\n\n /**\n * 修改指定zlevel的绘制参数\n */\n configLayer(zlevel: number, config: LayerConfig) {\n if (config) {\n const layerConfig = this._layerConfig;\n if (!layerConfig[zlevel]) {\n layerConfig[zlevel] = config;\n }\n else {\n util.merge(layerConfig[zlevel], config, true);\n }\n\n for (let i = 0; i < this._zlevelList.length; i++) {\n const _zlevel = this._zlevelList[i];\n // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n const layer = this._layers[_zlevel];\n util.merge(layer, layerConfig[zlevel], true);\n }\n }\n }\n }\n\n /**\n * 删除指定层\n * @param zlevel 层所在的zlevel\n */\n delLayer(zlevel: number) {\n const layers = this._layers;\n const zlevelList = this._zlevelList;\n const layer = layers[zlevel];\n if (!layer) {\n return;\n }\n layer.dom.parentNode.removeChild(layer.dom);\n delete layers[zlevel];\n\n zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n }\n\n /**\n * 区域大小变化后重绘\n */\n resize(\n width?: number | string,\n height?: number | string\n ) {\n if (!this._domRoot.style) { // Maybe in node or worker\n if (width == null || height == null) {\n return;\n }\n // TODO width / height may be string\n this._width = width as number;\n this._height = height as number;\n\n this.getLayer(CANVAS_ZLEVEL).resize(width as number, height as number);\n }\n else {\n const domRoot = this._domRoot;\n // FIXME Why ?\n domRoot.style.display = 'none';\n\n // Save input w/h\n const opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n\n width = this._getSize(0);\n height = this._getSize(1);\n\n domRoot.style.display = '';\n\n // 优化没有实际改变的resize\n if (this._width !== width || height !== this._height) {\n domRoot.style.width = width + 'px';\n domRoot.style.height = height + 'px';\n\n for (let id in this._layers) {\n if (this._layers.hasOwnProperty(id)) {\n this._layers[id].resize(width, height);\n }\n }\n\n this.refresh(true);\n }\n\n this._width = width;\n this._height = height;\n\n }\n return this;\n }\n\n /**\n * 清除单独的一个层\n * @param {number} zlevel\n */\n clearLayer(zlevel: number) {\n const layer = this._layers[zlevel];\n if (layer) {\n layer.clear();\n }\n }\n\n /**\n * 释放\n */\n dispose() {\n this.root.innerHTML = '';\n\n this.root =\n this.storage =\n\n this._domRoot =\n this._layers = null;\n }\n\n /**\n * Get canvas which has all thing rendered\n */\n getRenderedCanvas(opts?: {\n backgroundColor?: string | GradientObject | ImagePatternObject\n pixelRatio?: number\n }) {\n opts = opts || {};\n if (this._singleCanvas && !this._compositeManually) {\n return this._layers[CANVAS_ZLEVEL].dom;\n }\n\n const imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n imageLayer.initContext();\n imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n\n const ctx = imageLayer.ctx;\n\n if (opts.pixelRatio <= this.dpr) {\n this.refresh();\n\n const width = imageLayer.dom.width;\n const height = imageLayer.dom.height;\n this.eachLayer(function (layer) {\n if (layer.__builtin__) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n else if (layer.renderToCanvas) {\n ctx.save();\n layer.renderToCanvas(ctx);\n ctx.restore();\n }\n });\n }\n else {\n // PENDING, echarts-gl and incremental rendering.\n const scope = {\n inHover: false,\n viewWidth: this._width,\n viewHeight: this._height\n };\n const displayList = this.storage.getDisplayList(true);\n for (let i = 0, len = displayList.length; i < len; i++) {\n const el = displayList[i];\n brush(ctx, el, scope, i === len - 1);\n }\n }\n\n return imageLayer.dom;\n }\n /**\n * 获取绘图区域宽度\n */\n getWidth() {\n return this._width;\n }\n\n /**\n * 获取绘图区域高度\n */\n getHeight() {\n return this._height;\n }\n\n _getSize(whIdx: number) {\n const opts = this._opts;\n const wh = ['width', 'height'][whIdx] as 'width' | 'height';\n const cwh = ['clientWidth', 'clientHeight'][whIdx] as 'clientWidth' | 'clientHeight';\n const plt = ['paddingLeft', 'paddingTop'][whIdx] as 'paddingLeft' | 'paddingTop';\n const prb = ['paddingRight', 'paddingBottom'][whIdx] as 'paddingRight' | 'paddingBottom';\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh] as string);\n }\n\n const root = this.root;\n // IE8 does not support getComputedStyle, but it use VML.\n const stl = document.defaultView.getComputedStyle(root);\n\n return (\n (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n - (parseInt10(stl[plt]) || 0)\n - (parseInt10(stl[prb]) || 0)\n ) | 0;\n }\n\n pathToImage(path: Path, dpr?: number): ZRImage {\n dpr = dpr || this.dpr;\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const rect = path.getBoundingRect();\n const style = path.style;\n const shadowBlurSize = style.shadowBlur * dpr;\n const shadowOffsetX = style.shadowOffsetX * dpr;\n const shadowOffsetY = style.shadowOffsetY * dpr;\n const lineWidth = path.hasStroke() ? style.lineWidth : 0;\n\n const leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n const rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n const topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n const bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n const width = rect.width + leftMargin + rightMargin;\n const height = rect.height + topMargin + bottomMargin;\n\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, width, height);\n (ctx as ZRCanvasRenderingContext).dpr = dpr;\n\n const pathTransform = {\n x: path.x,\n y: path.y,\n scaleX: path.scaleX,\n scaleY: path.scaleY,\n rotation: path.rotation,\n originX: path.originX,\n originY: path.originY\n };\n path.x = leftMargin - rect.x;\n path.y = topMargin - rect.y;\n path.rotation = 0;\n path.scaleX = 1;\n path.scaleY = 1;\n path.updateTransform();\n if (path) {\n brush(ctx, path, {\n inHover: false,\n viewWidth: this._width,\n viewHeight: this._height\n }, true);\n }\n\n const imgShape = new ZRImage({\n style: {\n x: 0,\n y: 0,\n image: canvas\n }\n });\n\n util.extend(path, pathTransform);\n\n return imgShape;\n }\n};","export function createElement(name: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}","// Myers' Diff Algorithm\n// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js\ntype EqualFunc = (a: T, b: T) => boolean;\n\ntype DiffComponent = {\n count: number\n added: boolean\n removed: boolean,\n indices: number[]\n}\n\ntype DiffPath = {\n components: DiffComponent[],\n newPos: number\n}\n\nfunction diff(oldArr: T[], newArr: T[], equals: EqualFunc): DiffComponent[] {\n if (!equals) {\n equals = function (a, b) {\n return a === b;\n };\n }\n\n oldArr = oldArr.slice();\n newArr = newArr.slice();\n // Allow subclasses to massage the input prior to running\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n var bestPath: DiffPath[] = [{ newPos: -1, components: [] }];\n\n // Seed editLength = 0, i.e. the content starts with the same values\n var oldPos = extractCommon(bestPath[0], newArr, oldArr, 0, equals);\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n var indices = [];\n for (let i = 0; i < newArr.length; i++) {\n indices.push(i);\n }\n // Identity per the equality and tokenizer\n return [{\n indices: indices,\n count: newArr.length,\n added: false,\n removed: false\n }];\n }\n\n // Main worker method. checks all permutations of a given edit length for acceptance.\n function execEditLength() {\n for (let 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 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 if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n }\n\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 if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n basePath = clonePath(removePath);\n pushComponent(basePath.components, false, true);\n }\n else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n basePath.newPos++;\n pushComponent(basePath.components, true, false);\n }\n\n oldPos = extractCommon(basePath, newArr, oldArr, diagonalPath, equals);\n\n // If we have hit the end of both strings, then we are done\n if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n return buildValues(basePath.components);\n }\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 if (ret) {\n return ret;\n }\n }\n}\n\nfunction extractCommon(basePath: DiffPath, newArr: T[], oldArr: T[], diagonalPath: number, equals: EqualFunc) {\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 && 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 added: false,\n removed: false,\n indices: []\n });\n }\n\n basePath.newPos = newPos;\n return oldPos;\n}\n\nfunction pushComponent(components: DiffComponent[], added: boolean, removed: boolean) {\n var last = components[components.length - 1];\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,\n removed,\n indices: []\n };\n }\n else {\n components.push({\n count: 1,\n added,\n removed,\n indices: []\n });\n }\n}\n\nfunction buildValues(components: DiffComponent[]) {\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 if (!component.removed) {\n var indices = [];\n for (let i = newPos; i < newPos + component.count; i++) {\n indices.push(i);\n }\n component.indices = indices;\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n for (let i = oldPos; i < oldPos + component.count; i++) {\n component.indices.push(i);\n }\n oldPos += component.count;\n }\n }\n\n return components;\n}\n\nfunction clonePath(path: DiffPath) {\n return { newPos: path.newPos, components: path.components.slice(0) };\n}\n\nexport default function arrayDiff (oldArr: T[], newArr: T[], equal?: EqualFunc): DiffComponent[] {\n return diff(oldArr, newArr, equal);\n}","// TODO\n// 1. shadow\n// 2. Image: sx, sy, sw, sh\n\nimport {createElement} from './core';\nimport { PathRebuilder } from '../core/PathProxy';\nimport * as matrix from '../core/matrix';\nimport Path, { PathStyleProps } from '../graphic/Path';\nimport ZRImage, { ImageStyleProps } from '../graphic/Image';\nimport { DEFAULT_FONT, getLineHeight } from '../contain/text';\nimport TSpan, { TSpanStyleProps } from '../graphic/TSpan';\nimport { map } from '../core/util';\nimport { normalizeLineDash } from '../graphic/helper/dashStyle';\n\nexport interface SVGProxy {\n brush(el: T): void\n}\n\nconst NONE = 'none';\nconst mathRound = Math.round;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst PI = Math.PI;\nconst PI2 = Math.PI * 2;\nconst degree = 180 / PI;\n\nconst EPSILON = 1e-4;\n\ntype AllStyleOption = PathStyleProps | TSpanStyleProps | ImageStyleProps;\n\nfunction round3(val: number) {\n return mathRound(val * 1e3) / 1e3;\n}\nfunction round4(val: number) {\n return mathRound(val * 1e4) / 1e4;\n}\n\nfunction isAroundZero(val: number) {\n return val < EPSILON && val > -EPSILON;\n}\n\nfunction pathHasFill(style: AllStyleOption): style is PathStyleProps {\n const fill = (style as PathStyleProps).fill;\n return fill != null && fill !== NONE;\n}\n\nfunction pathHasStroke(style: AllStyleOption): style is PathStyleProps {\n const stroke = (style as PathStyleProps).stroke;\n return stroke != null && stroke !== NONE;\n}\n\nfunction setTransform(svgEl: SVGElement, m: matrix.MatrixArray) {\n if (m) {\n attr(svgEl, 'transform', 'matrix('\n // Avoid large string of matrix\n // PENDING If have precision issue when scaled\n + round3(m[0]) + ','\n + round3(m[1]) + ','\n + round3(m[2]) + ','\n + round3(m[3]) + ','\n + round4(m[4]) + ','\n + round4(m[5])\n + ')');\n }\n}\n\nfunction attr(el: SVGElement, key: string, val: string) {\n if (!val || (val as any).type !== 'linear' && (val as any).type !== 'radial') {\n // Don't set attribute for gradient, since it need new dom nodes\n el.setAttribute(key, val);\n }\n}\n\nfunction attrXLink(el: SVGElement, key: string, val: string) {\n el.setAttributeNS('http://www.w3.org/1999/xlink', key, val);\n}\n\nfunction attrXML(el: SVGElement, key: string, val: string) {\n el.setAttributeNS('http://www.w3.org/XML/1998/namespace', key, val);\n}\n\nfunction bindStyle(svgEl: SVGElement, style: PathStyleProps, el?: Path): void\nfunction bindStyle(svgEl: SVGElement, style: TSpanStyleProps, el?: TSpan): void\nfunction bindStyle(svgEl: SVGElement, style: ImageStyleProps, el?: ZRImage): void\nfunction bindStyle(svgEl: SVGElement, style: AllStyleOption, el?: Path | TSpan | ZRImage) {\n const opacity = style.opacity == null ? 1 : style.opacity;\n\n // only set opacity. stroke and fill cannot be applied to svg image\n if (el instanceof ZRImage) {\n svgEl.style.opacity = opacity + '';\n return;\n }\n\n if (pathHasFill(style)) {\n let fill = style.fill;\n fill = fill === 'transparent' ? NONE : fill;\n attr(svgEl, 'fill', fill as string);\n attr(svgEl,\n 'fill-opacity',\n (style.fillOpacity != null ? style.fillOpacity * opacity : opacity) + ''\n );\n }\n else {\n attr(svgEl, 'fill', NONE);\n }\n\n if (pathHasStroke(style)) {\n let stroke = style.stroke;\n stroke = stroke === 'transparent' ? NONE : stroke;\n attr(svgEl, 'stroke', stroke as string);\n const strokeWidth = style.lineWidth;\n const strokeScale = style.strokeNoScale\n ? (el as Path).getLineScale()\n : 1;\n attr(svgEl, 'stroke-width', (strokeScale ? strokeWidth / strokeScale : 0) + '');\n // stroke then fill for text; fill then stroke for others\n attr(svgEl, 'paint-order', style.strokeFirst ? 'stroke' : 'fill');\n attr(svgEl, 'stroke-opacity', (style.strokeOpacity != null ? style.strokeOpacity * opacity : opacity) + '');\n let lineDash = style.lineDash && strokeWidth > 0 && normalizeLineDash(style.lineDash, strokeWidth);\n if (lineDash) {\n let lineDashOffset = style.lineDashOffset;\n if (strokeScale && strokeScale !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / strokeScale;\n });\n if (lineDashOffset) {\n lineDashOffset /= strokeScale;\n lineDashOffset = mathRound(lineDashOffset);\n }\n }\n attr(svgEl, 'stroke-dasharray', lineDash.join(','));\n attr(svgEl, 'stroke-dashoffset', (lineDashOffset || 0) + '');\n }\n else {\n attr(svgEl, 'stroke-dasharray', '');\n }\n\n // PENDING\n style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap);\n style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin);\n style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit + '');\n }\n else {\n attr(svgEl, 'stroke', NONE);\n }\n}\n\nclass SVGPathRebuilder implements PathRebuilder {\n _d: (string | number)[]\n _str: string\n _invalid: boolean\n\n reset() {\n this._d = [];\n this._str = '';\n }\n moveTo(x: number, y: number) {\n this._add('M', x, y);\n }\n lineTo(x: number, y: number) {\n this._add('L', x, y);\n }\n bezierCurveTo(x: number, y: number, x2: number, y2: number, x3: number, y3: number) {\n this._add('C', x, y, x2, y2, x3, y3);\n }\n quadraticCurveTo(x: number, y: number, x2: number, y2: number) {\n this._add('Q', x, y, x2, y2);\n }\n arc(cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean) {\n this.ellipse(cx, cy, r, r, 0, startAngle, endAngle, anticlockwise);\n }\n ellipse(cx: number, cy: number, rx: number, ry: number, psi: number, startAngle: number, endAngle: number, anticlockwise: boolean) {\n\n const firstCmd = this._d.length === 0;\n\n let dTheta = endAngle - startAngle;\n const clockwise = !anticlockwise;\n\n const dThetaPositive = Math.abs(dTheta);\n const isCircle = isAroundZero(dThetaPositive - PI2)\n || (clockwise ? dTheta >= PI2 : -dTheta >= PI2);\n\n // Mapping to 0~2PI\n const unifiedTheta = dTheta > 0 ? dTheta % PI2 : (dTheta % PI2 + PI2);\n\n let large = false;\n if (isCircle) {\n large = true;\n }\n else if (isAroundZero(dThetaPositive)) {\n large = false;\n }\n else {\n large = (unifiedTheta >= PI) === !!clockwise;\n }\n\n const x0 = round4(cx + rx * mathCos(startAngle));\n const y0 = round4(cy + ry * mathSin(startAngle));\n\n // It will not draw if start point and end point are exactly the same\n // We need to shift the end point with a small value\n // FIXME A better way to draw circle ?\n if (isCircle) {\n if (clockwise) {\n dTheta = PI2 - 1e-4;\n }\n else {\n dTheta = -PI2 + 1e-4;\n }\n\n large = true;\n\n if (firstCmd) {\n // Move to (x0, y0) only when CMD.A comes at the\n // first position of a shape.\n // For instance, when drawing a ring, CMD.A comes\n // after CMD.M, so it's unnecessary to move to\n // (x0, y0).\n this._d.push('M', x0, y0);\n }\n }\n\n const x = round4(cx + rx * mathCos(startAngle + dTheta));\n const y = round4(cy + ry * mathSin(startAngle + dTheta));\n\n if (isNaN(x0) || isNaN(y0) || isNaN(rx) || isNaN(ry) || isNaN(psi) || isNaN(degree) || isNaN(x) || isNaN(y)) {\n return '';\n }\n\n // FIXME Ellipse\n this._d.push('A', round4(rx), round4(ry),\n mathRound(psi * degree), +large, +clockwise, x, y);\n }\n rect(x: number, y: number, w: number, h: number) {\n this._add('M', x, y);\n this._add('L', x + w, y);\n this._add('L', x + w, y + h);\n this._add('L', x, y + h);\n this._add('L', x, y);\n }\n closePath() {\n // Not use Z as first command\n if (this._d.length > 0) {\n this._add('Z');\n }\n }\n\n _add(cmd: string, a?: number, b?: number, c?: number, d?: number, e?: number, f?: number, g?: number, h?: number) {\n this._d.push(cmd);\n for (let i = 1; i < arguments.length; i++) {\n const val = arguments[i];\n if (isNaN(val)) {\n this._invalid = true;\n return;\n }\n this._d.push(round4(val));\n }\n }\n\n generateStr() {\n this._str = this._invalid ? '' : this._d.join(' ');\n this._d = [];\n }\n getStr() {\n return this._str;\n }\n}\n\ninterface PathWithSVGBuildPath extends Path {\n __svgPathVersion: number\n __svgPathBuilder: SVGPathRebuilder\n}\n\nconst svgPath: SVGProxy = {\n brush(el: Path) {\n const style = el.style;\n\n let svgEl = el.__svgEl;\n if (!svgEl) {\n svgEl = createElement('path');\n el.__svgEl = svgEl;\n }\n\n if (!el.path) {\n el.createPathProxy();\n }\n const path = el.path;\n\n if (el.shapeChanged()) {\n path.beginPath();\n el.buildPath(path, el.shape);\n el.pathUpdated();\n }\n\n const pathVersion = path.getVersion();\n const elExt = el as PathWithSVGBuildPath;\n let svgPathBuilder = elExt.__svgPathBuilder;\n if (elExt.__svgPathVersion !== pathVersion || !svgPathBuilder || el.style.strokePercent < 1) {\n if (!svgPathBuilder) {\n svgPathBuilder = elExt.__svgPathBuilder = new SVGPathRebuilder();\n }\n svgPathBuilder.reset();\n path.rebuildPath(svgPathBuilder, el.style.strokePercent);\n svgPathBuilder.generateStr();\n elExt.__svgPathVersion = pathVersion;\n }\n\n attr(svgEl, 'd', svgPathBuilder.getStr());\n\n bindStyle(svgEl, style, el);\n setTransform(svgEl, el.transform);\n }\n};\n\nexport {svgPath as path};\n\n/***************************************************\n * IMAGE\n **************************************************/\nconst svgImage: SVGProxy = {\n brush(el: ZRImage) {\n const style = el.style;\n let image = style.image;\n\n if (image instanceof HTMLImageElement) {\n image = image.src;\n }\n // heatmap layer in geo may be a canvas\n else if (image instanceof HTMLCanvasElement) {\n image = image.toDataURL();\n }\n if (!image) {\n return;\n }\n\n const x = style.x || 0;\n const y = style.y || 0;\n\n const dw = style.width;\n const dh = style.height;\n\n let svgEl = el.__svgEl;\n if (!svgEl) {\n svgEl = createElement('image');\n el.__svgEl = svgEl;\n }\n\n if (image !== el.__imageSrc) {\n attrXLink(svgEl, 'href', image as string);\n // Caching image src\n el.__imageSrc = image as string;\n }\n\n attr(svgEl, 'width', dw + '');\n attr(svgEl, 'height', dh + '');\n\n attr(svgEl, 'x', x + '');\n attr(svgEl, 'y', y + '');\n\n bindStyle(svgEl, style, el);\n setTransform(svgEl, el.transform);\n }\n};\nexport {svgImage as image};\n\n/***************************************************\n * TEXT\n **************************************************/\nconst TEXT_ALIGN_TO_ANCHOR = {\n left: 'start',\n right: 'end',\n center: 'middle',\n middle: 'middle'\n};\n\nfunction adjustTextY(y: number, lineHeight: number, textBaseline: CanvasTextBaseline): number {\n // TODO Other values.\n if (textBaseline === 'top') {\n y += lineHeight / 2;\n }\n else if (textBaseline === 'bottom') {\n y -= lineHeight / 2;\n }\n return y;\n}\n\nconst svgText: SVGProxy = {\n brush(el: TSpan) {\n const style = el.style;\n\n let text = style.text;\n // Convert to string\n text != null && (text += '');\n if (!text || isNaN(style.x) || isNaN(style.y)) {\n return;\n }\n\n let textSvgEl = el.__svgEl as SVGTextElement;\n if (!textSvgEl) {\n textSvgEl = createElement('text') as SVGTextElement;\n attrXML(textSvgEl, 'xml:space', 'preserve');\n el.__svgEl = textSvgEl;\n }\n\n const font = style.font || DEFAULT_FONT;\n\n // style.font has been normalized by `normalizeTextStyle`.\n const textSvgElStyle = textSvgEl.style;\n textSvgElStyle.font = font;\n\n textSvgEl.textContent = text;\n\n bindStyle(textSvgEl, style, el);\n setTransform(textSvgEl, el.transform);\n\n // Consider different font display differently in vertial align, we always\n // set vertialAlign as 'middle', and use 'y' to locate text vertically.\n const x = style.x || 0;\n const y = adjustTextY(style.y || 0, getLineHeight(font), style.textBaseline);\n const textAlign = TEXT_ALIGN_TO_ANCHOR[style.textAlign as keyof typeof TEXT_ALIGN_TO_ANCHOR]\n || style.textAlign;\n\n attr(textSvgEl, 'dominant-baseline', 'central');\n attr(textSvgEl, 'text-anchor', textAlign);\n attr(textSvgEl, 'x', x + '');\n attr(textSvgEl, 'y', y + '');\n }\n};\nexport {svgText as text};\n","/**\n * @file Manages elements that can be defined in in SVG,\n * e.g., gradients, clip path, etc.\n * @author Zhang Wenli\n */\n\nimport {createElement} from '../core';\nimport * as zrUtil from '../../core/util';\nimport Path from '../../graphic/Path';\nimport ZRImage from '../../graphic/Image';\nimport TSpan from '../../graphic/TSpan';\nimport {\n path as svgPath,\n image as svgImage,\n text as svgText\n} from '../graphic';\nimport Displayable from '../../graphic/Displayable';\n\n\nconst MARK_UNUSED = '0';\nconst MARK_USED = '1';\n\n/**\n * Manages elements that can be defined in in SVG,\n * e.g., gradients, clip path, etc.\n */\nexport default class Definable {\n\n nextId = 0\n\n protected _zrId: number\n protected _svgRoot: SVGElement\n protected _tagNames: string[]\n protected _markLabel: string\n protected _domName: string = '_dom'\n\n constructor(\n zrId: number, // zrender instance id\n svgRoot: SVGElement, // root of SVG document\n tagNames: string | string[], // possible tag names\n markLabel: string, // label name to make if the element\n domName?: string\n ) {\n this._zrId = zrId;\n this._svgRoot = svgRoot;\n this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames;\n this._markLabel = markLabel;\n\n if (domName) {\n this._domName = domName;\n }\n }\n\n createElement = createElement\n\n\n /**\n * Get the tag for svgRoot; optionally creates one if not exists.\n *\n * @param isForceCreating if need to create when not exists\n * @return SVG element, null if it doesn't\n * exist and isForceCreating is false\n */\n getDefs(isForceCreating?: boolean): SVGDefsElement {\n let svgRoot = this._svgRoot;\n let defs = this._svgRoot.getElementsByTagName('defs');\n if (defs.length === 0) {\n // Not exist\n if (isForceCreating) {\n let defs = svgRoot.insertBefore(\n this.createElement('defs'), // Create new tag\n svgRoot.firstChild // Insert in the front of svg\n ) as SVGDefsElement;\n if (!defs.contains) {\n // IE doesn't support contains method\n defs.contains = function (el) {\n const children = defs.children;\n if (!children) {\n return false;\n }\n for (let i = children.length - 1; i >= 0; --i) {\n if (children[i] === el) {\n return true;\n }\n }\n return false;\n };\n }\n return defs;\n }\n else {\n return null;\n }\n }\n else {\n return defs[0];\n }\n }\n\n\n /**\n * Update DOM element if necessary.\n *\n * @param element style element. e.g., for gradient,\n * it may be '#ccc' or {type: 'linear', ...}\n * @param onUpdate update callback\n */\n doUpdate(target: T, onUpdate?: (target: T) => void) {\n if (!target) {\n return;\n }\n\n const defs = this.getDefs(false);\n if ((target as any)[this._domName] && defs.contains((target as any)[this._domName])) {\n // Update DOM\n if (typeof onUpdate === 'function') {\n onUpdate(target);\n }\n }\n else {\n // No previous dom, create new\n const dom = this.add(target);\n if (dom) {\n (target as any)[this._domName] = dom;\n }\n }\n }\n\n add(target: any): SVGElement {\n return null;\n }\n\n /**\n * Add gradient dom to defs\n *\n * @param dom DOM to be added to \n */\n addDom(dom: SVGElement) {\n const defs = this.getDefs(true);\n if (dom.parentNode !== defs) {\n defs.appendChild(dom);\n }\n }\n\n\n /**\n * Remove DOM of a given element.\n *\n * @param target Target where to attach the dom\n */\n removeDom(target: T) {\n const defs = this.getDefs(false);\n if (defs && (target as any)[this._domName]) {\n defs.removeChild((target as any)[this._domName]);\n (target as any)[this._domName] = null;\n }\n }\n\n\n /**\n * Get DOMs of this element.\n *\n * @return doms of this defineable elements in \n */\n getDoms() {\n const defs = this.getDefs(false);\n if (!defs) {\n // No dom when defs is not defined\n return [];\n }\n\n let doms: SVGElement[] = [];\n zrUtil.each(this._tagNames, function (tagName) {\n const tags = defs.getElementsByTagName(tagName) as HTMLCollectionOf;\n // Note that tags is HTMLCollection, which is array-like\n // rather than real array.\n // So `doms.concat(tags)` add tags as one object.\n for (let i = 0; i < tags.length; i++) {\n doms.push(tags[i]);\n }\n });\n\n return doms;\n }\n\n\n /**\n * Mark DOMs to be unused before painting, and clear unused ones at the end\n * of the painting.\n */\n markAllUnused() {\n const doms = this.getDoms();\n const that = this;\n zrUtil.each(doms, function (dom) {\n (dom as any)[that._markLabel] = MARK_UNUSED;\n });\n }\n\n\n /**\n * Mark a single DOM to be used.\n *\n * @param dom DOM to mark\n */\n markDomUsed(dom: SVGElement) {\n dom && ((dom as any)[this._markLabel] = MARK_USED);\n };\n\n markDomUnused(dom: SVGElement) {\n dom && ((dom as any)[this._markLabel] = MARK_UNUSED);\n };\n\n isDomUnused(dom: SVGElement) {\n return dom && (dom as any)[this._markLabel] !== MARK_USED;\n }\n\n /**\n * Remove unused DOMs defined in \n */\n removeUnused() {\n const defs = this.getDefs(false);\n if (!defs) {\n // Nothing to remove\n return;\n }\n\n const doms = this.getDoms();\n zrUtil.each(doms, (dom) => {\n if (this.isDomUnused(dom)) {\n // Remove gradient\n defs.removeChild(dom);\n }\n });\n }\n\n\n /**\n * Get SVG proxy.\n *\n * @param displayable displayable element\n * @return svg proxy of given element\n */\n getSvgProxy(displayable: Displayable) {\n if (displayable instanceof Path) {\n return svgPath;\n }\n else if (displayable instanceof ZRImage) {\n return svgImage;\n }\n else if (displayable instanceof TSpan) {\n return svgText;\n }\n else {\n return svgPath;\n }\n }\n\n\n /**\n * Get SVG element.\n *\n * @param displayable displayable element\n * @return SVG element\n */\n getSvgElement(displayable: Displayable): SVGElement {\n return displayable.__svgEl;\n }\n\n}","/**\n * @file Manages SVG gradient elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport * as colorTool from '../../tool/color';\nimport Displayable from '../../graphic/Displayable';\nimport { GradientObject } from '../../graphic/Gradient';\nimport { LinearGradientObject } from '../../graphic/LinearGradient';\nimport { RadialGradientObject } from '../../graphic/RadialGradient';\n\nfunction isLinearGradient(value: GradientObject): value is LinearGradientObject {\n return value.type === 'linear';\n}\n\nfunction isRadialGradient(value: GradientObject): value is RadialGradientObject {\n return value.type === 'radial';\n}\n\nfunction isGradient(value: GradientObject | string): value is GradientObject {\n return value && (\n (value as GradientObject).type === 'linear'\n || (value as GradientObject).type === 'radial'\n );\n}\n\n\ntype GradientObjectExtended = GradientObject & {\n __dom: SVGElement\n}\n\n/**\n * Manages SVG gradient elements.\n *\n * @param zrId zrender instance id\n * @param svgRoot root of SVG document\n */\nexport default class GradientManager extends Definable {\n\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, ['linearGradient', 'radialGradient'], '__gradient_in_use__');\n }\n\n\n /**\n * Create new gradient DOM for fill or stroke if not exist,\n * but will not update gradient if exists.\n *\n * @param svgElement SVG element to paint\n * @param displayable zrender displayable element\n */\n addWithoutUpdate(\n svgElement: SVGElement,\n displayable: Displayable\n ) {\n if (displayable && displayable.style) {\n const that = this;\n zrUtil.each(['fill', 'stroke'], function (fillOrStroke: 'fill' | 'stroke') {\n let value = displayable.style[fillOrStroke] as GradientObject;\n if (isGradient(value)) {\n const gradient = value as GradientObjectExtended;\n const defs = that.getDefs(true);\n\n // Create dom in if not exists\n let dom;\n if (gradient.__dom) {\n // Gradient exists\n dom = gradient.__dom;\n if (!defs.contains(gradient.__dom)) {\n // __dom is no longer in defs, recreate\n that.addDom(dom);\n }\n }\n else {\n // New dom\n dom = that.add(gradient);\n }\n\n that.markUsed(displayable);\n\n const id = dom.getAttribute('id');\n svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n }\n });\n }\n }\n\n\n /**\n * Add a new gradient tag in \n *\n * @param gradient zr gradient instance\n */\n add(gradient: GradientObject): SVGElement {\n let dom;\n if (isLinearGradient(gradient)) {\n dom = this.createElement('linearGradient');\n }\n else if (isRadialGradient(gradient)) {\n dom = this.createElement('radialGradient');\n }\n else {\n zrUtil.logError('Illegal gradient type.');\n return null;\n }\n\n // Set dom id with gradient id, since each gradient instance\n // will have no more than one dom element.\n // id may exists before for those dirty elements, in which case\n // id should remain the same, and other attributes should be\n // updated.\n gradient.id = gradient.id || this.nextId++;\n dom.setAttribute('id', 'zr' + this._zrId\n + '-gradient-' + gradient.id);\n\n this.updateDom(gradient, dom);\n this.addDom(dom);\n\n return dom;\n }\n\n\n /**\n * Update gradient.\n *\n * @param gradient zr gradient instance or color string\n */\n update(gradient: GradientObject | string) {\n if (!isGradient(gradient)) {\n return;\n }\n\n const that = this;\n this.doUpdate(gradient, function () {\n const dom = (gradient as GradientObjectExtended).__dom;\n if (!dom) {\n return;\n }\n\n const tagName = dom.tagName;\n const type = gradient.type;\n if (type === 'linear' && tagName === 'linearGradient'\n || type === 'radial' && tagName === 'radialGradient'\n ) {\n // Gradient type is not changed, update gradient\n that.updateDom(gradient, (gradient as GradientObjectExtended).__dom);\n }\n else {\n // Remove and re-create if type is changed\n that.removeDom(gradient);\n that.add(gradient);\n }\n });\n }\n\n\n /**\n * Update gradient dom\n *\n * @param gradient zr gradient instance\n * @param dom DOM to update\n */\n updateDom(gradient: GradientObject, dom: SVGElement) {\n if (isLinearGradient(gradient)) {\n dom.setAttribute('x1', gradient.x + '');\n dom.setAttribute('y1', gradient.y + '');\n dom.setAttribute('x2', gradient.x2 + '');\n dom.setAttribute('y2', gradient.y2 + '');\n }\n else if (isRadialGradient(gradient)) {\n dom.setAttribute('cx', gradient.x + '');\n dom.setAttribute('cy', gradient.y + '');\n dom.setAttribute('r', gradient.r + '');\n }\n else {\n zrUtil.logError('Illegal gradient type.');\n return;\n }\n\n if (gradient.global) {\n // x1, x2, y1, y2 in range of 0 to canvas width or height\n dom.setAttribute('gradientUnits', 'userSpaceOnUse');\n }\n else {\n // x1, x2, y1, y2 in range of 0 to 1\n dom.setAttribute('gradientUnits', 'objectBoundingBox');\n }\n\n // Remove color stops if exists\n dom.innerHTML = '';\n\n // Add color stops\n const colors = gradient.colorStops;\n for (let i = 0, len = colors.length; i < len; ++i) {\n const stop = this.createElement('stop');\n stop.setAttribute('offset', colors[i].offset * 100 + '%');\n\n const color = colors[i].color;\n if (color.indexOf('rgba') > -1) {\n // Fix Safari bug that stop-color not recognizing alpha #9014\n const opacity = colorTool.parse(color)[3];\n const hex = colorTool.toHex(color);\n\n // stop-color cannot be color, since:\n // The opacity value used for the gradient calculation is the\n // *product* of the value of stop-opacity and the opacity of the\n // value of stop-color.\n // See https://www.w3.org/TR/SVG2/pservers.html#StopOpacityProperty\n stop.setAttribute('stop-color', '#' + hex);\n stop.setAttribute('stop-opacity', opacity + '');\n }\n else {\n stop.setAttribute('stop-color', colors[i].color);\n }\n\n dom.appendChild(stop);\n }\n\n // Store dom element in gradient, to avoid creating multiple\n // dom instances for the same gradient element\n (gradient as GradientObject as GradientObjectExtended).__dom = dom;\n }\n\n /**\n * Mark a single gradient to be used\n *\n * @param displayable displayable element\n */\n markUsed(displayable: Displayable) {\n if (displayable.style) {\n let gradient = displayable.style.fill as GradientObject as GradientObjectExtended;\n if (gradient && gradient.__dom) {\n super.markDomUsed(gradient.__dom);\n }\n\n gradient = displayable.style.stroke as GradientObject as GradientObjectExtended;\n if (gradient && gradient.__dom) {\n super.markDomUsed(gradient.__dom);\n }\n }\n }\n\n\n}","let wmUniqueIndex = Math.round(Math.random() * 9);\n\nexport default class WeakMap {\n\n protected _id: string;\n\n constructor() {\n this._id = '__ec_inner_' + wmUniqueIndex++;\n }\n\n get(key: K): V {\n return (this._guard(key) as any)[this._id];\n }\n\n set(key: K, value: V): WeakMap {\n const target = this._guard(key) as any;\n if (typeof Object.defineProperty === 'function') {\n Object.defineProperty(target, this._id, {\n value: value,\n enumerable: false,\n configurable: true\n });\n }\n else {\n target[this._id] = value;\n }\n return this;\n }\n\n delete(key: K): boolean {\n if (this.has(key)) {\n delete (this._guard(key) as any)[this._id];\n return true;\n }\n return false;\n }\n\n has(key: K): boolean {\n return !!(this._guard(key) as any)[this._id];\n }\n\n protected _guard(key: K): K {\n if (key !== Object(key)) {\n throw TypeError('Value of WeakMap is not a non-null object.');\n }\n return key;\n }\n}\n","/**\n * @file Manages SVG pattern elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport Displayable from '../../graphic/Displayable';\nimport {PatternObject, ImagePatternObject, SVGPatternObject} from '../../graphic/Pattern';\nimport {createOrUpdateImage} from '../../graphic/helper/image';\nimport WeakMap from '../../core/WeakMap';\n\nfunction isPattern(value: PatternObject | string): value is PatternObject {\n return value && (!!(value as ImagePatternObject).image || !!(value as SVGPatternObject).svgElement);\n}\n\nconst patternDomMap = new WeakMap();\n\n/**\n * Manages SVG pattern elements.\n *\n * @param zrId zrender instance id\n * @param svgRoot root of SVG document\n */\nexport default class PatternManager extends Definable {\n\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, ['pattern'], '__pattern_in_use__');\n }\n\n\n /**\n * Create new pattern DOM for fill or stroke if not exist,\n * but will not update pattern if exists.\n *\n * @param svgElement SVG element to paint\n * @param displayable zrender displayable element\n */\n addWithoutUpdate(\n svgElement: SVGElement,\n displayable: Displayable\n ) {\n if (displayable && displayable.style) {\n const that = this;\n zrUtil.each(['fill', 'stroke'], function (fillOrStroke: 'fill' | 'stroke') {\n const pattern = displayable.style[fillOrStroke] as PatternObject;\n if (isPattern(pattern)) {\n const defs = that.getDefs(true);\n\n // Create dom in if not exists\n let dom = patternDomMap.get(pattern);\n if (dom) {\n // Pattern exists\n if (!defs.contains(dom)) {\n // __dom is no longer in defs, recreate\n that.addDom(dom);\n }\n }\n else {\n // New dom\n dom = that.add(pattern);\n }\n\n that.markUsed(displayable);\n\n const id = dom.getAttribute('id');\n svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n }\n });\n }\n }\n\n\n /**\n * Add a new pattern tag in \n *\n * @param pattern zr pattern instance\n */\n add(pattern: PatternObject): SVGElement {\n if (!isPattern(pattern)) {\n return;\n }\n\n let dom = this.createElement('pattern');\n\n pattern.id = pattern.id == null ? this.nextId++ : pattern.id;\n dom.setAttribute('id', 'zr' + this._zrId\n + '-pattern-' + pattern.id);\n\n dom.setAttribute('x', '0');\n dom.setAttribute('y', '0');\n dom.setAttribute('patternUnits', 'userSpaceOnUse');\n\n this.updateDom(pattern, dom);\n this.addDom(dom);\n\n return dom;\n }\n\n\n /**\n * Update pattern.\n *\n * @param pattern zr pattern instance or color string\n */\n update(pattern: PatternObject | string) {\n if (!isPattern(pattern)) {\n return;\n }\n\n const that = this;\n this.doUpdate(pattern, function () {\n const dom = patternDomMap.get(pattern);\n that.updateDom(pattern, dom);\n });\n }\n\n\n /**\n * Update pattern dom\n *\n * @param pattern zr pattern instance\n * @param patternDom DOM to update\n */\n updateDom(pattern: PatternObject, patternDom: SVGElement) {\n const svgElement = (pattern as SVGPatternObject).svgElement;\n\n if (svgElement instanceof SVGElement) {\n if (svgElement.parentNode !== patternDom) {\n patternDom.innerHTML = '';\n patternDom.appendChild(svgElement);\n\n patternDom.setAttribute('width', (pattern as SVGPatternObject).svgWidth + '');\n patternDom.setAttribute('height', (pattern as SVGPatternObject).svgHeight + '');\n }\n }\n else {\n let img: SVGElement;\n const prevImage = patternDom.getElementsByTagName('image');\n if (prevImage.length) {\n if ((pattern as ImagePatternObject).image) {\n // Update\n img = prevImage[0];\n }\n else {\n // Remove\n patternDom.removeChild(prevImage[0]);\n return;\n }\n }\n else if ((pattern as ImagePatternObject).image) {\n // Create\n img = this.createElement('image');\n }\n\n if (img) {\n let imageSrc;\n const patternImage = (pattern as ImagePatternObject).image;\n if (typeof patternImage === 'string') {\n imageSrc = patternImage;\n }\n else if (patternImage instanceof HTMLImageElement) {\n imageSrc = patternImage.src;\n }\n else if (patternImage instanceof HTMLCanvasElement) {\n imageSrc = patternImage.toDataURL();\n }\n\n if (imageSrc) {\n img.setAttribute('href', imageSrc);\n img.setAttribute('x', '0');\n img.setAttribute('y', '0');\n\n // No need to re-render so dirty is empty\n const hostEl = {\n dirty: () => {}\n };\n const createdImage = createOrUpdateImage(imageSrc, img as any, hostEl, img => {\n patternDom.setAttribute('width', img.width + '');\n patternDom.setAttribute('height', img.height + '');\n });\n if (createdImage && createdImage.width && createdImage.height) {\n // Loaded before\n patternDom.setAttribute('width', createdImage.width + '');\n patternDom.setAttribute('height', createdImage.height + '');\n }\n\n patternDom.appendChild(img);\n }\n }\n }\n\n const x = pattern.x || 0;\n const y = pattern.y || 0;\n const rotation = (pattern.rotation || 0) / Math.PI * 180;\n const scaleX = pattern.scaleX || 1;\n const scaleY = pattern.scaleY || 1;\n const transform = `translate(${x}, ${y}) rotate(${rotation}) scale(${scaleX}, ${scaleY})`;\n patternDom.setAttribute('patternTransform', transform);\n patternDomMap.set(pattern, patternDom);\n }\n\n /**\n * Mark a single pattern to be used\n *\n * @param displayable displayable element\n */\n markUsed(displayable: Displayable) {\n if (displayable.style) {\n if (isPattern(displayable.style.fill)) {\n super.markDomUsed(patternDomMap.get(displayable.style.fill));\n }\n if (isPattern(displayable.style.stroke)) {\n super.markDomUsed(patternDomMap.get(displayable.style.stroke));\n }\n }\n }\n\n}\n","/**\n * @file Manages SVG clipPath elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport Displayable from '../../graphic/Displayable';\nimport Path from '../../graphic/Path';\nimport {SVGProxy} from '../graphic';\nimport { Dictionary } from '../../core/types';\nimport { isClipPathChanged } from '../../canvas/helper';\n\ntype PathExtended = Path & {\n _dom: SVGElement\n}\n\nfunction generateClipPathsKey(clipPaths: Path[]) {\n let key: number[] = [];\n if (clipPaths) {\n for (let i = 0; i < clipPaths.length; i++) {\n const clipPath = clipPaths[i];\n key.push(clipPath.id);\n }\n }\n return key.join(',');\n}\n\nexport function hasClipPath(displayable: Displayable) {\n const clipPaths = displayable.__clipPaths;\n return clipPaths && clipPaths.length > 0;\n}\n/**\n * Manages SVG clipPath elements.\n */\nexport default class ClippathManager extends Definable {\n\n private _refGroups: Dictionary = {};\n private _keyDuplicateCount: Dictionary = {};\n\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, 'clipPath', '__clippath_in_use__');\n }\n\n markAllUnused() {\n super.markAllUnused();\n for (let key in this._refGroups) {\n this.markDomUnused(this._refGroups[key]);\n }\n this._keyDuplicateCount = {};\n }\n\n\n private _getClipPathGroup(displayable: Displayable, prevDisplayable: Displayable) {\n if (!hasClipPath(displayable)) {\n return;\n }\n const clipPaths = displayable.__clipPaths;\n\n const keyDuplicateCount = this._keyDuplicateCount;\n let clipPathKey = generateClipPathsKey(clipPaths);\n if (isClipPathChanged(clipPaths, prevDisplayable && prevDisplayable.__clipPaths)) {\n keyDuplicateCount[clipPathKey] = keyDuplicateCount[clipPathKey] || 0;\n keyDuplicateCount[clipPathKey] && (clipPathKey += '-' + keyDuplicateCount[clipPathKey]);\n keyDuplicateCount[clipPathKey]++;\n }\n\n return this._refGroups[clipPathKey]\n || (this._refGroups[clipPathKey] = this.createElement('g'));\n }\n\n /**\n * Update clipPath.\n *\n * @param displayable displayable element\n */\n update(displayable: Displayable, prevDisplayable: Displayable) {\n const clipGroup = this._getClipPathGroup(displayable, prevDisplayable);\n if (clipGroup) {\n this.markDomUsed(clipGroup);\n this.updateDom(clipGroup, displayable.__clipPaths);\n }\n return clipGroup;\n };\n\n\n /**\n * Create an SVGElement of displayable and create a of its\n * clipPath\n */\n updateDom(parentEl: SVGElement, clipPaths: Path[]) {\n if (clipPaths && clipPaths.length > 0) {\n // Has clipPath, create with the first clipPath\n const defs = this.getDefs(true);\n const clipPath = clipPaths[0] as PathExtended;\n let clipPathEl;\n let id;\n\n if (clipPath._dom) {\n // Use a dom that is already in \n id = clipPath._dom.getAttribute('id');\n clipPathEl = clipPath._dom;\n\n // Use a dom that is already in \n if (!defs.contains(clipPathEl)) {\n // This happens when set old clipPath that has\n // been previously removed\n defs.appendChild(clipPathEl);\n }\n }\n else {\n // New \n id = 'zr' + this._zrId + '-clip-' + this.nextId;\n ++this.nextId;\n clipPathEl = this.createElement('clipPath');\n clipPathEl.setAttribute('id', id);\n defs.appendChild(clipPathEl);\n\n clipPath._dom = clipPathEl;\n }\n\n // Build path and add to \n const svgProxy = this.getSvgProxy(clipPath);\n (svgProxy as SVGProxy).brush(clipPath);\n\n const pathEl = this.getSvgElement(clipPath);\n\n clipPathEl.innerHTML = '';\n clipPathEl.appendChild(pathEl);\n\n parentEl.setAttribute('clip-path', 'url(#' + id + ')');\n\n if (clipPaths.length > 1) {\n // Make the other clipPaths recursively\n this.updateDom(clipPathEl, clipPaths.slice(1));\n }\n }\n else {\n // No clipPath\n if (parentEl) {\n parentEl.setAttribute('clip-path', 'none');\n }\n }\n };\n\n /**\n * Mark a single clipPath to be used\n *\n * @param displayable displayable element\n */\n markUsed(displayable: Displayable) {\n // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n if (displayable.__clipPaths) {\n zrUtil.each(displayable.__clipPaths, (clipPath: PathExtended) => {\n if (clipPath._dom) {\n super.markDomUsed(clipPath._dom);\n }\n });\n }\n };\n\n removeUnused() {\n super.removeUnused();\n\n const newRefGroupsMap: Dictionary = {};\n for (let key in this._refGroups) {\n const group = this._refGroups[key];\n if (!this.isDomUnused(group)) {\n newRefGroupsMap[key] = group;\n }\n else if (group.parentNode) {\n group.parentNode.removeChild(group);\n }\n }\n this._refGroups = newRefGroupsMap;\n }\n}\n","/**\n * @file Manages SVG shadow elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport Displayable from '../../graphic/Displayable';\nimport { PathStyleProps } from '../../graphic/Path';\nimport { Dictionary } from '../../core/types';\n\ntype DisplayableExtended = Displayable & {\n _shadowDom: SVGElement\n}\n/**\n * Manages SVG shadow elements.\n *\n */\nexport default class ShadowManager extends Definable {\n\n private _shadowDomMap: Dictionary = {}\n private _shadowDomPool: SVGFilterElement[] = []\n\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, ['filter'], '__filter_in_use__', '_shadowDom');\n }\n\n /**\n * Add a new shadow tag in \n *\n * @param displayable zrender displayable element\n * @return created DOM\n */\n private _getFromPool(): SVGFilterElement {\n let shadowDom = this._shadowDomPool.pop(); // Try to get one from trash.\n if (!shadowDom) {\n shadowDom = this.createElement('filter') as SVGFilterElement;\n shadowDom.setAttribute('id', 'zr' + this._zrId + '-shadow-' + this.nextId++);\n const domChild = this.createElement('feDropShadow')\n shadowDom.appendChild(domChild);\n this.addDom(shadowDom);\n }\n\n return shadowDom;\n }\n\n\n /**\n * Update shadow.\n */\n update(svgElement: SVGElement, displayable: Displayable) {\n const style = displayable.style;\n if (hasShadow(style)) {\n // Try getting shadow from cache.\n const shadowKey = getShadowKey(displayable);\n let shadowDom = (displayable as DisplayableExtended)._shadowDom = this._shadowDomMap[shadowKey];\n if (!shadowDom) {\n shadowDom = this._getFromPool();\n this._shadowDomMap[shadowKey] = shadowDom;\n }\n this.updateDom(svgElement, displayable, shadowDom);\n }\n else {\n // Remove shadow\n this.remove(svgElement, displayable);\n }\n }\n\n\n /**\n * Remove DOM and clear parent filter\n */\n remove(svgElement: SVGElement, displayable: Displayable) {\n if ((displayable as DisplayableExtended)._shadowDom != null) {\n (displayable as DisplayableExtended)._shadowDom = null;\n svgElement.style.filter = '';\n }\n }\n\n\n /**\n * Update shadow dom\n *\n * @param displayable zrender displayable element\n * @param shadowDom DOM to update\n */\n updateDom(svgElement: SVGElement, displayable: Displayable, shadowDom: SVGElement) {\n let domChild = shadowDom.children[0];\n\n const style = displayable.style;\n const globalScale = displayable.getGlobalScale();\n const scaleX = globalScale[0];\n const scaleY = globalScale[1];\n if (!scaleX || !scaleY) {\n return;\n }\n\n // TODO: textBoxShadowBlur is not supported yet\n let offsetX = style.shadowOffsetX || 0;\n let offsetY = style.shadowOffsetY || 0;\n let blur = style.shadowBlur;\n let color = style.shadowColor;\n\n domChild.setAttribute('dx', offsetX / scaleX + '');\n domChild.setAttribute('dy', offsetY / scaleY + '');\n domChild.setAttribute('flood-color', color);\n\n // Divide by two here so that it looks the same as in canvas\n // See: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowblur\n const stdDx = blur / 2 / scaleX;\n const stdDy = blur / 2 / scaleY;\n const stdDeviation = stdDx + ' ' + stdDy;\n domChild.setAttribute('stdDeviation', stdDeviation);\n\n // Fix filter clipping problem\n shadowDom.setAttribute('x', '-100%');\n shadowDom.setAttribute('y', '-100%');\n shadowDom.setAttribute('width', '300%');\n shadowDom.setAttribute('height', '300%');\n\n // Store dom element in shadow, to avoid creating multiple\n // dom instances for the same shadow element\n (displayable as DisplayableExtended)._shadowDom = shadowDom;\n\n const id = shadowDom.getAttribute('id');\n svgElement.style.filter = 'url(#' + id + ')';\n }\n\n removeUnused() {\n const defs = this.getDefs(false);\n if (!defs) {\n // Nothing to remove\n return;\n }\n let shadowDomsPool = this._shadowDomPool;\n\n // let currentUsedShadow = 0;\n for (let key in this._shadowDomMap) {\n const dom = this._shadowDomMap[key];\n shadowDomsPool.push(dom);\n // currentUsedShadow++;\n }\n\n // Reset the map.\n this._shadowDomMap = {};\n }\n}\n\n\nfunction hasShadow(style: PathStyleProps) {\n // TODO: textBoxShadowBlur is not supported yet\n return style\n && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY);\n}\n\nfunction getShadowKey(displayable: Displayable) {\n const style = displayable.style;\n const globalScale = displayable.getGlobalScale();\n return [\n style.shadowColor,\n (style.shadowBlur || 0).toFixed(2), // Reduce the precision\n (style.shadowOffsetX || 0).toFixed(2),\n (style.shadowOffsetY || 0).toFixed(2),\n globalScale[0],\n globalScale[1]\n ].join(',');\n}","/**\n * SVG Painter\n * @module zrender/svg/Painter\n */\n\nimport {createElement} from './core';\nimport * as util from '../core/util';\nimport Path from '../graphic/Path';\nimport ZRImage from '../graphic/Image';\nimport TSpan from '../graphic/TSpan';\nimport arrayDiff from '../core/arrayDiff';\nimport GradientManager from './helper/GradientManager';\nimport PatternManager from './helper/PatternManager';\nimport ClippathManager, {hasClipPath} from './helper/ClippathManager';\nimport ShadowManager from './helper/ShadowManager';\nimport {\n path as svgPath,\n image as svgImage,\n text as svgText,\n SVGProxy\n} from './graphic';\nimport Displayable from '../graphic/Displayable';\nimport Storage from '../Storage';\nimport { PainterBase } from '../PainterBase';\n\nfunction parseInt10(val: string) {\n return parseInt(val, 10);\n}\n\nfunction getSvgProxy(el: Displayable) {\n if (el instanceof Path) {\n return svgPath;\n }\n else if (el instanceof ZRImage) {\n return svgImage;\n }\n else if (el instanceof TSpan) {\n return svgText;\n }\n else {\n return svgPath;\n }\n}\n\nfunction checkParentAvailable(parent: SVGElement, child: SVGElement) {\n return child && parent && child.parentNode !== parent;\n}\n\nfunction insertAfter(parent: SVGElement, child: SVGElement, prevSibling: SVGElement) {\n if (checkParentAvailable(parent, child) && prevSibling) {\n const nextSibling = prevSibling.nextSibling;\n nextSibling ? parent.insertBefore(child, nextSibling)\n : parent.appendChild(child);\n }\n}\n\nfunction prepend(parent: SVGElement, child: SVGElement) {\n if (checkParentAvailable(parent, child)) {\n const firstChild = parent.firstChild;\n firstChild ? parent.insertBefore(child, firstChild)\n : parent.appendChild(child);\n }\n}\n\nfunction remove(parent: SVGElement, child: SVGElement) {\n if (child && parent && child.parentNode === parent) {\n parent.removeChild(child);\n }\n}\nfunction removeFromMyParent(child: SVGElement) {\n if (child && child.parentNode) {\n child.parentNode.removeChild(child);\n }\n}\n\nfunction getSvgElement(displayable: Displayable) {\n return displayable.__svgEl;\n}\n\ninterface SVGPainterOption {\n width?: number | string\n height?: number | string\n}\n\nclass SVGPainter implements PainterBase {\n\n type = 'svg'\n\n root: HTMLElement\n\n storage: Storage\n\n private _opts: SVGPainterOption\n\n private _svgDom: SVGElement\n private _svgRoot: SVGGElement\n private _backgroundRoot: SVGGElement\n private _backgroundNode: SVGRectElement\n\n private _gradientManager: GradientManager\n private _patternManager: PatternManager\n private _clipPathManager: ClippathManager\n private _shadowManager: ShadowManager\n\n private _viewport: HTMLDivElement\n private _visibleList: Displayable[]\n\n private _width: number\n private _height: number\n\n constructor(root: HTMLElement, storage: Storage, opts: SVGPainterOption, zrId: number) {\n this.root = root;\n this.storage = storage;\n this._opts = opts = util.extend({}, opts || {});\n\n const svgDom = createElement('svg');\n svgDom.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns', 'http://www.w3.org/2000/svg');\n svgDom.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n svgDom.setAttribute('version', '1.1');\n svgDom.setAttribute('baseProfile', 'full');\n svgDom.style.cssText = 'user-select:none;position:absolute;left:0;top:0;';\n\n const bgRoot = createElement('g') as SVGGElement;\n svgDom.appendChild(bgRoot);\n const svgRoot = createElement('g') as SVGGElement;\n svgDom.appendChild(svgRoot);\n\n this._gradientManager = new GradientManager(zrId, svgRoot);\n this._patternManager = new PatternManager(zrId, svgRoot);\n this._clipPathManager = new ClippathManager(zrId, svgRoot);\n this._shadowManager = new ShadowManager(zrId, svgRoot);\n\n const viewport = document.createElement('div');\n viewport.style.cssText = 'overflow:hidden;position:relative';\n\n this._svgDom = svgDom;\n this._svgRoot = svgRoot;\n this._backgroundRoot = bgRoot;\n this._viewport = viewport;\n\n root.appendChild(viewport);\n viewport.appendChild(svgDom);\n\n this.resize(opts.width, opts.height);\n\n this._visibleList = [];\n }\n\n getType() {\n return 'svg';\n }\n\n getViewportRoot() {\n return this._viewport;\n }\n\n getSvgDom() {\n return this._svgDom;\n }\n\n getSvgRoot() {\n return this._svgRoot;\n }\n\n getViewportRootOffset() {\n const viewportRoot = this.getViewportRoot();\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n }\n\n refresh() {\n\n const list = this.storage.getDisplayList(true);\n\n this._paintList(list);\n }\n\n setBackgroundColor(backgroundColor: string) {\n // TODO gradient\n // Insert a bg rect instead of setting background to viewport.\n // Otherwise, the exported SVG don't have background.\n if (this._backgroundRoot && this._backgroundNode) {\n this._backgroundRoot.removeChild(this._backgroundNode);\n }\n\n const bgNode = createElement('rect') as SVGRectElement;\n bgNode.setAttribute('width', this.getWidth() as any);\n bgNode.setAttribute('height', this.getHeight() as any);\n bgNode.setAttribute('x', 0 as any);\n bgNode.setAttribute('y', 0 as any);\n bgNode.setAttribute('id', 0 as any);\n bgNode.style.fill = backgroundColor;\n this._backgroundRoot.appendChild(bgNode);\n this._backgroundNode = bgNode;\n }\n\n createSVGElement(tag: string): SVGElement {\n return createElement(tag);\n }\n\n paintOne(el: Displayable): SVGElement {\n const svgProxy = getSvgProxy(el);\n svgProxy && (svgProxy as SVGProxy).brush(el);\n return getSvgElement(el);\n }\n\n _paintList(list: Displayable[]) {\n const gradientManager = this._gradientManager;\n const patternManager = this._patternManager;\n const clipPathManager = this._clipPathManager;\n const shadowManager = this._shadowManager;\n\n gradientManager.markAllUnused();\n patternManager.markAllUnused();\n clipPathManager.markAllUnused();\n shadowManager.markAllUnused();\n\n const svgRoot = this._svgRoot;\n const visibleList = this._visibleList;\n const listLen = list.length;\n\n const newVisibleList = [];\n\n for (let i = 0; i < listLen; i++) {\n const displayable = list[i];\n const svgProxy = getSvgProxy(displayable);\n let svgElement = getSvgElement(displayable);\n if (!displayable.invisible) {\n if (displayable.__dirty || !svgElement) {\n svgProxy && (svgProxy as SVGProxy).brush(displayable);\n svgElement = getSvgElement(displayable);\n // Update gradient and shadow\n if (svgElement && displayable.style) {\n gradientManager.update(displayable.style.fill);\n gradientManager.update(displayable.style.stroke);\n patternManager.update(displayable.style.fill);\n patternManager.update(displayable.style.stroke);\n shadowManager.update(svgElement, displayable);\n }\n\n displayable.__dirty = 0;\n }\n\n // May have optimizations and ignore brush(like empty string in TSpan)\n if (svgElement) {\n newVisibleList.push(displayable);\n }\n\n }\n }\n\n const diff = arrayDiff(visibleList, newVisibleList);\n let prevSvgElement;\n let topPrevSvgElement;\n\n // NOTE: First do remove, in case element moved to the head and do remove\n // after add\n for (let i = 0; i < diff.length; i++) {\n const item = diff[i];\n if (item.removed) {\n for (let k = 0; k < item.count; k++) {\n const displayable = visibleList[item.indices[k]];\n const svgElement = getSvgElement(displayable);\n hasClipPath(displayable) ? removeFromMyParent(svgElement)\n : remove(svgRoot, svgElement);\n }\n }\n }\n\n let prevDisplayable;\n let currentClipGroup;\n for (let i = 0; i < diff.length; i++) {\n const item = diff[i];\n // const isAdd = item.added;\n if (item.removed) {\n continue;\n }\n for (let k = 0; k < item.count; k++) {\n const displayable = newVisibleList[item.indices[k]];\n // Update clipPath\n const clipGroup = clipPathManager.update(displayable, prevDisplayable);\n if (clipGroup !== currentClipGroup) {\n // First pop to top level.\n prevSvgElement = topPrevSvgElement;\n if (clipGroup) {\n // Enter second level of clipping group.\n prevSvgElement ? insertAfter(svgRoot, clipGroup, prevSvgElement)\n : prepend(svgRoot, clipGroup);\n topPrevSvgElement = clipGroup;\n // Reset prevSvgElement in second level.\n prevSvgElement = null;\n }\n currentClipGroup = clipGroup;\n }\n\n const svgElement = getSvgElement(displayable);\n // if (isAdd) {\n prevSvgElement\n ? insertAfter(currentClipGroup || svgRoot, svgElement, prevSvgElement)\n : prepend(currentClipGroup || svgRoot, svgElement);\n // }\n\n prevSvgElement = svgElement || prevSvgElement;\n if (!currentClipGroup) {\n topPrevSvgElement = prevSvgElement;\n }\n\n gradientManager.markUsed(displayable);\n gradientManager.addWithoutUpdate(svgElement, displayable);\n\n patternManager.markUsed(displayable);\n patternManager.addWithoutUpdate(svgElement, displayable);\n\n clipPathManager.markUsed(displayable);\n\n prevDisplayable = displayable;\n }\n }\n\n gradientManager.removeUnused();\n patternManager.removeUnused();\n clipPathManager.removeUnused();\n shadowManager.removeUnused();\n\n this._visibleList = newVisibleList;\n }\n\n // Not used any more\n // _getDefs(isForceCreating?: boolean) {\n // let svgRoot = this._svgDom;\n // let defs = svgRoot.getElementsByTagName('defs');\n // if (defs.length === 0) {\n // // Not exist\n // if (isForceCreating) {\n // let defs = svgRoot.insertBefore(\n // createElement('defs'), // Create new tag\n // svgRoot.firstChild // Insert in the front of svg\n // );\n // if (!defs.contains) {\n // // IE doesn't support contains method\n // defs.contains = function (el) {\n // const children = defs.children;\n // if (!children) {\n // return false;\n // }\n // for (let i = children.length - 1; i >= 0; --i) {\n // if (children[i] === el) {\n // return true;\n // }\n // }\n // return false;\n // };\n // }\n // return defs;\n // }\n // else {\n // return null;\n // }\n // }\n // else {\n // return defs[0];\n // }\n // }\n\n resize(width: number | string, height: number | string) {\n const viewport = this._viewport;\n // FIXME Why ?\n viewport.style.display = 'none';\n\n // Save input w/h\n const opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n\n width = this._getSize(0);\n height = this._getSize(1);\n\n viewport.style.display = '';\n\n if (this._width !== width || this._height !== height) {\n this._width = width;\n this._height = height;\n\n const viewportStyle = viewport.style;\n viewportStyle.width = width + 'px';\n viewportStyle.height = height + 'px';\n\n const svgRoot = this._svgDom;\n // Set width by 'svgRoot.width = width' is invalid\n svgRoot.setAttribute('width', width + '');\n svgRoot.setAttribute('height', height + '');\n }\n\n if (this._backgroundNode) {\n this._backgroundNode.setAttribute('width', width as any);\n this._backgroundNode.setAttribute('height', height as any);\n }\n }\n\n /**\n * 获取绘图区域宽度\n */\n getWidth() {\n return this._width;\n }\n\n /**\n * 获取绘图区域高度\n */\n getHeight() {\n return this._height;\n }\n\n _getSize(whIdx: number) {\n const opts = this._opts;\n const wh = ['width', 'height'][whIdx] as 'width' | 'height';\n const cwh = ['clientWidth', 'clientHeight'][whIdx] as 'clientWidth' | 'clientHeight';\n const plt = ['paddingLeft', 'paddingTop'][whIdx] as 'paddingLeft' | 'paddingTop';\n const prb = ['paddingRight', 'paddingBottom'][whIdx] as 'paddingRight' | 'paddingBottom';\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh] as string);\n }\n\n const root = this.root;\n // IE8 does not support getComputedStyle, but it use VML.\n const stl = document.defaultView.getComputedStyle(root);\n\n return (\n (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n - (parseInt10(stl[plt]) || 0)\n - (parseInt10(stl[prb]) || 0)\n ) | 0;\n }\n\n dispose() {\n this.root.innerHTML = '';\n\n this._svgRoot\n = this._backgroundRoot\n = this._svgDom\n = this._backgroundNode\n = this._viewport\n = this.storage\n = null;\n }\n\n clear() {\n const viewportNode = this._viewport;\n if (viewportNode && viewportNode.parentNode) {\n viewportNode.parentNode.removeChild(viewportNode);\n }\n }\n\n toDataURL() {\n this.refresh();\n const svgDom = this._svgDom;\n const outerHTML = svgDom.outerHTML\n // outerHTML of `svg` tag is not supported in IE, use `parentNode.innerHTML` instead\n // PENDING: Or use `new XMLSerializer().serializeToString(svg)`?\n || (svgDom.parentNode && svgDom.parentNode as HTMLElement).innerHTML;\n const html = encodeURIComponent(outerHTML.replace(/>\\n\\r<'));\n return 'data:image/svg+xml;charset=UTF-8,' + html;\n }\n refreshHover = createMethodNotSupport('refreshHover') as PainterBase['refreshHover'];\n pathToImage = createMethodNotSupport('pathToImage') as PainterBase['pathToImage'];\n configLayer = createMethodNotSupport('configLayer') as PainterBase['configLayer'];\n}\n\n\n// Not supported methods\nfunction createMethodNotSupport(method: string): any {\n return function () {\n util.logError('In SVG mode painter not support method \"' + method + '\"');\n };\n}\n\n\nexport default SVGPainter;","export * from './src/zrender';\nexport * from './src/export';\n\nimport {registerPainter} from './src/zrender';\nimport CanvasPainter from './src/canvas/Painter';\nimport SVGPainter from './src/svg/Painter';\nregisterPainter('canvas', CanvasPainter);\nregisterPainter('svg', SVGPainter);\n// import './src/vml/vml';\n"],"names":["clone","eventUtil.clientToLocal","dist","eventTool.stop","util.each","vec2.dist","timsort","util.indexOf","easing","easingFuncs","lerp","color.parse","requestAnimationFrame","zrUtil.map","zrUtil.noop","zrUtil.each","create","copy","mul","scale","matrix.identity","matrix.create","matrix.mul","matrix.copy","matrix.invert","vector.applyTransform","matrix.rotate","matrix.translate","matrix.scale","methods","zrUtil.indexOf","zrUtil.keys","HandlerProxy","zrUtil.guid","PRIMARY_STATES_KEYS","EPSILON","v2Create","isNotAroundZero","v2DistSquare","mathMin","mathMax","vec2.create","cubicExtrema","curve.cubicExtrema","cubicAt","curve.cubicAt","quadraticExtremum","curve.quadraticExtremum","quadraticAt","curve.quadraticAt","min","max","vec2.min","vec2.max","mathCos","mathSin","mathSqrt","PI2","dpr","containStroke","curve.cubicProjectPoint","CMD","curve.cubicRootAt","curve.quadraticRootAt","line.containStroke","cubic.containStroke","quadratic.containStroke","arc.containStroke","pathContain.containStroke","pathContain.contain","v2ApplyTransform","PI","roundRectHelper.buildPath","subPixelOptimizeOutputShape","distance","v2Distance","v2Min","v2Max","v2Clone","v2Sub","v2Scale","v2Add","buildPath","polyHelper.buildPath","numberReg","mathAbs","roundSectorHelper.buildPath","Displayble","imageHelper.findExistImage","imageHelper.isImageReady","vec2.normalize","sin","cos","minTv","maxTv","util.createCanvas","util.isObject","util.isGradientObject","util.isImagePatternObject","util.extend","util.merge","util.logError","isAroundZero","adjustTextY","zrUtil.logError","color","colorTool.parse","colorTool.toHex","parseInt10"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"zrender.js","sources":["../src/core/env.ts","../src/core/util.ts","../src/core/vector.ts","../src/mixin/Draggable.ts","../src/core/Eventful.ts","../src/core/fourPointsTransform.ts","../src/core/dom.ts","../src/core/event.ts","../src/core/GestureMgr.ts","../src/Handler.ts","../src/core/timsort.ts","../src/graphic/constants.ts","../src/Storage.ts","../src/animation/requestAnimationFrame.ts","../src/animation/easing.ts","../src/animation/Clip.ts","../src/core/LRU.ts","../src/tool/color.ts","../src/animation/Animator.ts","../src/animation/Animation.ts","../src/dom/HandlerProxy.ts","../src/config.ts","../src/core/matrix.ts","../src/core/Transformable.ts","../src/core/Point.ts","../src/core/BoundingRect.ts","../src/contain/text.ts","../src/Element.ts","../src/graphic/Group.ts","../src/zrender.ts","../src/graphic/Displayable.ts","../src/core/curve.ts","../src/core/bbox.ts","../src/core/PathProxy.ts","../src/contain/line.ts","../src/contain/cubic.ts","../src/contain/quadratic.ts","../src/contain/util.ts","../src/contain/arc.ts","../src/contain/windingLine.ts","../src/contain/path.ts","../src/graphic/Path.ts","../src/tool/transformPath.ts","../src/tool/path.ts","../src/graphic/Image.ts","../src/graphic/shape/Circle.ts","../src/graphic/helper/roundRect.ts","../src/graphic/helper/subPixelOptimize.ts","../src/graphic/shape/Rect.ts","../src/graphic/shape/Ellipse.ts","../src/graphic/shape/Line.ts","../src/graphic/helper/smoothSpline.ts","../src/graphic/helper/smoothBezier.ts","../src/graphic/helper/poly.ts","../src/graphic/shape/Polygon.ts","../src/graphic/shape/Polyline.ts","../src/graphic/Gradient.ts","../src/graphic/LinearGradient.ts","../src/graphic/RadialGradient.ts","../src/graphic/TSpan.ts","../src/tool/parseXML.ts","../src/tool/parseSVG.ts","../src/graphic/helper/roundSector.ts","../src/graphic/shape/Sector.ts","../src/tool/convertPath.ts","../src/tool/dividePath.ts","../src/tool/morphPath.ts","../src/graphic/CompoundPath.ts","../src/graphic/IncrementalDisplayable.ts","../src/graphic/helper/image.ts","../src/graphic/helper/parseText.ts","../src/graphic/Text.ts","../src/graphic/shape/Arc.ts","../src/graphic/shape/BezierCurve.ts","../src/graphic/shape/Droplet.ts","../src/graphic/shape/Heart.ts","../src/graphic/shape/Isogon.ts","../src/graphic/shape/Ring.ts","../src/graphic/shape/Rose.ts","../src/graphic/shape/Star.ts","../src/graphic/shape/Trochoid.ts","../src/graphic/Pattern.ts","../src/core/OrientedBoundingRect.ts","../src/debug/showDebugDirtyRect.ts","../src/canvas/helper.ts","../src/graphic/helper/dashStyle.ts","../src/canvas/graphic.ts","../src/canvas/Layer.ts","../src/canvas/Painter.ts","../src/svg/core.ts","../src/core/arrayDiff.ts","../src/svg/graphic.ts","../src/svg/helper/Definable.ts","../src/svg/helper/GradientManager.ts","../src/core/WeakMap.ts","../src/svg/helper/PatternManager.ts","../src/svg/helper/ClippathManager.ts","../src/svg/helper/ShadowManager.ts","../src/svg/Painter.ts","../index.ts"],"sourcesContent":["declare const wx: {\n getSystemInfoSync: Function\n};\n\nclass Browser {\n firefox = false\n ie = false\n edge = false\n newEdge = false\n weChat = false\n version: string | number\n}\n\nclass Env {\n browser = new Browser()\n node = false\n wxa = false\n worker = false\n\n canvasSupported = false\n svgSupported = false\n touchEventsSupported = false\n pointerEventsSupported = false\n domSupported = false\n transformSupported = false\n transform3dSupported = false\n}\n\nconst env = new Env();\n\nif (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') {\n env.wxa = true;\n env.canvasSupported = true;\n env.touchEventsSupported = true;\n}\nelse if (typeof document === 'undefined' && typeof self !== 'undefined') {\n // In worker\n env.worker = true;\n env.canvasSupported = true;\n}\nelse if (typeof navigator === 'undefined') {\n // In node\n env.node = true;\n env.canvasSupported = true;\n env.svgSupported = true;\n}\nelse {\n detect(navigator.userAgent, env);\n}\n\n// Zepto.js\n// (c) 2010-2013 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\n\nfunction detect(ua: string, env: Env) {\n const browser = env.browser;\n const firefox = ua.match(/Firefox\\/([\\d.]+)/);\n const ie = ua.match(/MSIE\\s([\\d.]+)/)\n // IE 11 Trident/7.0; rv:11.0\n || ua.match(/Trident\\/.+?rv:(([\\d.]+))/);\n const edge = ua.match(/Edge?\\/([\\d.]+)/); // IE 12 and 12+\n\n const weChat = (/micromessenger/i).test(ua);\n\n if (firefox) {\n browser.firefox = true;\n browser.version = firefox[1];\n }\n if (ie) {\n browser.ie = true;\n browser.version = ie[1];\n }\n\n if (edge) {\n browser.edge = true;\n browser.version = edge[1];\n browser.newEdge = +edge[1].split('.')[0] > 18;\n }\n\n // It is difficult to detect WeChat in Win Phone precisely, because ua can\n // not be set on win phone. So we do not consider Win Phone.\n if (weChat) {\n browser.weChat = true;\n }\n\n env.canvasSupported = !!document.createElement('canvas').getContext;\n env.svgSupported = typeof SVGRect !== 'undefined';\n env.touchEventsSupported = 'ontouchstart' in window && !browser.ie && !browser.edge;\n env.pointerEventsSupported = 'onpointerdown' in window\n && (browser.edge || (browser.ie && +browser.version >= 11));\n env.domSupported = typeof document !== 'undefined';\n\n const style = document.documentElement.style;\n\n env.transform3dSupported = (\n // IE9 only supports transform 2D\n // transform 3D supported since IE10\n // we detect it by whether 'transition' is in style\n (browser.ie && 'transition' in style)\n // edge\n || browser.edge\n // webkit\n || (('WebKitCSSMatrix' in window) && ('m11' in new WebKitCSSMatrix()))\n // gecko-based browsers\n || 'MozPerspective' in style\n ) // Opera supports CSS transforms after version 12\n && !('OTransition' in style);\n\n // except IE 6-8 and very old firefox 2-3 & opera 10.1\n // other browsers all support `transform`\n env.transformSupported = env.transform3dSupported\n // transform 2D is supported in IE9\n || (browser.ie && +browser.version >= 9);\n\n}\n\n\nexport default env;\n","import { Dictionary, ArrayLike, KeyOfDistributive } from './types';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ImagePatternObject } from '../graphic/Pattern';\n\n\n// 用于处理merge时无法遍历Date等对象的问题\nconst BUILTIN_OBJECT: {[key: string]: boolean} = {\n '[object Function]': true,\n '[object RegExp]': true,\n '[object Date]': true,\n '[object Error]': true,\n '[object CanvasGradient]': true,\n '[object CanvasPattern]': true,\n // For node-canvas\n '[object Image]': true,\n '[object Canvas]': true\n};\n\nconst TYPED_ARRAY: {[key: string]: boolean} = {\n '[object Int8Array]': true,\n '[object Uint8Array]': true,\n '[object Uint8ClampedArray]': true,\n '[object Int16Array]': true,\n '[object Uint16Array]': true,\n '[object Int32Array]': true,\n '[object Uint32Array]': true,\n '[object Float32Array]': true,\n '[object Float64Array]': true\n};\n\nconst objToString = Object.prototype.toString;\n\nconst arrayProto = Array.prototype;\nconst nativeForEach = arrayProto.forEach;\nconst nativeFilter = arrayProto.filter;\nconst nativeSlice = arrayProto.slice;\nconst nativeMap = arrayProto.map;\n// In case some env may redefine the global variable `Function`.\nconst ctorFunction = function () {}.constructor;\nconst protoFunction = ctorFunction ? ctorFunction.prototype : null;\n\n// Avoid assign to an exported constiable, for transforming to cjs.\nconst methods: {[key: string]: Function} = {};\n\nexport function $override(name: string, fn: Function) {\n methods[name] = fn;\n}\n\nlet idStart = 0x0907;\n/**\n * Generate unique id\n */\nexport function guid(): number {\n return idStart++;\n}\n\nexport function logError(...args: any[]) {\n if (typeof console !== 'undefined') {\n console.error.apply(console, args);\n }\n}\n/**\n * Those data types can be cloned:\n * Plain object, Array, TypedArray, number, string, null, undefined.\n * Those data types will be assgined using the orginal data:\n * BUILTIN_OBJECT\n * Instance of user defined class will be cloned to a plain object, without\n * properties in prototype.\n * Other data types is not supported (not sure what will happen).\n *\n * Caution: do not support clone Date, for performance consideration.\n * (There might be a large number of date in `series.data`).\n * So date should not be modified in and out of echarts.\n */\nexport function clone(source: T): T {\n if (source == null || typeof source !== 'object') {\n return source;\n }\n\n let result = source as any;\n const typeStr = objToString.call(source);\n\n if (typeStr === '[object Array]') {\n if (!isPrimitive(source)) {\n result = [] as any;\n for (let i = 0, len = (source as any[]).length; i < len; i++) {\n result[i] = clone((source as any[])[i]);\n }\n }\n }\n else if (TYPED_ARRAY[typeStr]) {\n if (!isPrimitive(source)) {\n /* eslint-disable-next-line */\n const Ctor = source.constructor as typeof Float32Array;\n if (Ctor.from) {\n result = Ctor.from(source as Float32Array);\n }\n else {\n result = new Ctor((source as Float32Array).length);\n for (let i = 0, len = (source as Float32Array).length; i < len; i++) {\n result[i] = clone((source as Float32Array)[i]);\n }\n }\n }\n }\n else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) {\n result = {} as any;\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n result[key] = clone(source[key]);\n }\n }\n }\n\n return result;\n}\n\nexport function merge<\n T extends Dictionary,\n S extends Dictionary\n>(target: T, source: S, overwrite?: boolean): T & S;\nexport function merge<\n T extends any,\n S extends any\n>(target: T, source: S, overwrite?: boolean): T | S;\nexport function merge(target: any, source: any, overwrite?: boolean): any {\n // We should escapse that source is string\n // and enter for ... in ...\n if (!isObject(source) || !isObject(target)) {\n return overwrite ? clone(source) : target;\n }\n\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n const targetProp = target[key];\n const sourceProp = source[key];\n\n if (isObject(sourceProp)\n && isObject(targetProp)\n && !isArray(sourceProp)\n && !isArray(targetProp)\n && !isDom(sourceProp)\n && !isDom(targetProp)\n && !isBuiltInObject(sourceProp)\n && !isBuiltInObject(targetProp)\n && !isPrimitive(sourceProp)\n && !isPrimitive(targetProp)\n ) {\n // 如果需要递归覆盖,就递归调用merge\n merge(targetProp, sourceProp, overwrite);\n }\n else if (overwrite || !(key in target)) {\n // 否则只处理overwrite为true,或者在目标对象中没有此属性的情况\n // NOTE,在 target[key] 不存在的时候也是直接覆盖\n target[key] = clone(source[key]);\n }\n }\n }\n\n return target;\n}\n\n/**\n * @param targetAndSources The first item is target, and the rests are source.\n * @param overwrite\n * @return Merged result\n */\nexport function mergeAll(targetAndSources: any[], overwrite?: boolean): any {\n let result = targetAndSources[0];\n for (let i = 1, len = targetAndSources.length; i < len; i++) {\n result = merge(result, targetAndSources[i], overwrite);\n }\n return result;\n}\n\nexport function extend<\n T extends Dictionary,\n S extends Dictionary\n>(target: T, source: S): T & S {\n // @ts-ignore\n if (Object.assign) {\n // @ts-ignore\n Object.assign(target, source);\n }\n else {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n (target as S & T)[key] = (source as T & S)[key];\n }\n }\n }\n return target as T & S;\n}\n\nexport function defaults<\n T extends Dictionary,\n S extends Dictionary\n>(target: T, source: S, overlay?: boolean): T & S {\n const keysArr = keys(source);\n for (let i = 0; i < keysArr.length; i++) {\n let key = keysArr[i];\n if ((overlay ? source[key] != null : (target as T & S)[key] == null)) {\n (target as S & T)[key] = (source as T & S)[key];\n }\n }\n return target as T & S;\n}\n\nexport const createCanvas = function (): HTMLCanvasElement {\n return methods.createCanvas();\n};\n\nmethods.createCanvas = function (): HTMLCanvasElement {\n return document.createElement('canvas');\n};\n\n/**\n * 查询数组中元素的index\n */\nexport function indexOf(array: T[] | readonly T[] | ArrayLike, value: T): number {\n if (array) {\n if ((array as T[]).indexOf) {\n return (array as T[]).indexOf(value);\n }\n for (let i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n }\n return -1;\n}\n\n/**\n * 构造类继承关系\n *\n * @param clazz 源类\n * @param baseClazz 基类\n */\nexport function inherits(clazz: Function, baseClazz: Function) {\n const clazzPrototype = clazz.prototype;\n function F() {}\n F.prototype = baseClazz.prototype;\n clazz.prototype = new (F as any)();\n\n for (let prop in clazzPrototype) {\n if (clazzPrototype.hasOwnProperty(prop)) {\n clazz.prototype[prop] = clazzPrototype[prop];\n }\n }\n clazz.prototype.constructor = clazz;\n (clazz as any).superClass = baseClazz;\n}\n\nexport function mixin(target: T | Function, source: S | Function, override?: boolean) {\n target = 'prototype' in target ? target.prototype : target;\n source = 'prototype' in source ? source.prototype : source;\n // If build target is ES6 class. prototype methods is not enumerable. Use getOwnPropertyNames instead\n // TODO: Determine if source is ES6 class?\n if (Object.getOwnPropertyNames) {\n const keyList = Object.getOwnPropertyNames(source);\n for (let i = 0; i < keyList.length; i++) {\n const key = keyList[i];\n if (key !== 'constructor') {\n if ((override ? (source as any)[key] != null : (target as any)[key] == null)) {\n (target as any)[key] = (source as any)[key];\n }\n }\n }\n }\n else {\n defaults(target, source, override);\n }\n}\n\n/**\n * Consider typed array.\n * @param data\n */\nexport function isArrayLike(data: any): data is ArrayLike {\n if (!data) {\n return false;\n }\n if (typeof data === 'string') {\n return false;\n }\n return typeof data.length === 'number';\n}\n\n/**\n * 数组或对象遍历\n */\nexport function each | any[] | readonly any[] | ArrayLike, Context>(\n arr: I,\n cb: (\n this: Context,\n // Use unknown to avoid to infer to \"any\", which may disable typo check.\n value: I extends (infer T)[] | readonly (infer T)[] | ArrayLike ? T\n // Use Dictionary may cause infer fail when I is an interface.\n // So here use a Record to infer type.\n : I extends Dictionary ? I extends Record ? T : unknown : unknown,\n index?: I extends any[] | readonly any[] | ArrayLike ? number : keyof I & string, // keyof Dictionary will return number | string\n arr?: I\n ) => void,\n context?: Context\n) {\n if (!(arr && cb)) {\n return;\n }\n if ((arr as any).forEach && (arr as any).forEach === nativeForEach) {\n (arr as any).forEach(cb, context);\n }\n else if (arr.length === +arr.length) {\n for (let i = 0, len = arr.length; i < len; i++) {\n // FIXME: should the elided item be travelled? like `[33,,55]`.\n cb.call(context, (arr as any[])[i], i as any, arr);\n }\n }\n else {\n for (let key in arr) {\n if (arr.hasOwnProperty(key)) {\n cb.call(context, (arr as Dictionary)[key], key as any, arr);\n }\n }\n }\n}\n\n/**\n * Array mapping.\n * @typeparam T Type in Array\n * @typeparam R Type Returned\n * @return Must be an array.\n */\nexport function map(\n arr: readonly T[],\n cb: (this: Context, val: T, index?: number, arr?: readonly T[]) => R,\n context?: Context\n): R[] {\n // Take the same behavior with lodash when !arr and !cb,\n // which might be some common sense.\n if (!arr) {\n return [];\n }\n if (!cb) {\n return slice(arr) as unknown[] as R[];\n }\n if (arr.map && arr.map === nativeMap) {\n return arr.map(cb, context);\n }\n else {\n const result = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n // FIXME: should the elided item be travelled, like `[33,,55]`.\n result.push(cb.call(context, arr[i], i, arr));\n }\n return result;\n }\n}\n\nexport function reduce(\n arr: readonly T[],\n cb: (this: Context, previousValue: S, currentValue: T, currentIndex?: number, arr?: readonly T[]) => S,\n memo?: S,\n context?: Context\n): S {\n if (!(arr && cb)) {\n return;\n }\n for (let i = 0, len = arr.length; i < len; i++) {\n memo = cb.call(context, memo, arr[i], i, arr);\n }\n return memo;\n}\n\n/**\n * Array filtering.\n * @return Must be an array.\n */\nexport function filter(\n arr: readonly T[],\n cb: (this: Context, value: T, index: number, arr: readonly T[]) => boolean,\n context?: Context\n): T[] {\n // Take the same behavior with lodash when !arr and !cb,\n // which might be some common sense.\n if (!arr) {\n return [];\n }\n if (!cb) {\n return slice(arr);\n }\n if (arr.filter && arr.filter === nativeFilter) {\n return arr.filter(cb, context);\n }\n else {\n const result = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n // FIXME: should the elided items be travelled? like `[33,,55]`.\n if (cb.call(context, arr[i], i, arr)) {\n result.push(arr[i]);\n }\n }\n return result;\n }\n}\n\n/**\n * 数组项查找\n */\nexport function find(\n arr: readonly T[],\n cb: (this: Context, value: T, index?: number, arr?: readonly T[]) => boolean,\n context?: Context\n): T {\n if (!(arr && cb)) {\n return;\n }\n for (let i = 0, len = arr.length; i < len; i++) {\n if (cb.call(context, arr[i], i, arr)) {\n return arr[i];\n }\n }\n}\n\n/**\n * Get all object keys\n *\n * Will return an empty array if obj is null/undefined\n */\nexport function keys(obj: T): (KeyOfDistributive & string)[] {\n if (!obj) {\n return [];\n }\n // Return type should be `keyof T` but exclude `number`, becuase\n // `Object.keys` only return string rather than `number | string`.\n type TKeys = KeyOfDistributive & string;\n if (Object.keys) {\n return Object.keys(obj) as TKeys[];\n }\n let keyList: TKeys[] = [];\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n keyList.push(key as any);\n }\n }\n return keyList;\n}\n\n\n// Remove this type in returned function. Or it will conflicts wicth callback with given context. Like Eventful.\n// According to lib.es5.d.ts\n/* eslint-disable max-len*/\nexport type Bind1 = F extends (this: Ctx, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind2 = F extends (this: Ctx, a: T1, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind3 = F extends (this: Ctx, a: T1, b: T2, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind4 = F extends (this: Ctx, a: T1, b: T2, c: T3, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Bind5 = F extends (this: Ctx, a: T1, b: T2, c: T3, d: T4, ...args: infer A) => infer R ? (...args: A) => R : unknown;\ntype BindFunc = (this: Ctx, ...arg: any[]) => any\n\ninterface FunctionBind {\n , Ctx>(func: F, ctx: Ctx): Bind1\n , Ctx, T1 extends Parameters[0]>(func: F, ctx: Ctx, a: T1): Bind2\n , Ctx, T1 extends Parameters[0], T2 extends Parameters[1]>(func: F, ctx: Ctx, a: T1, b: T2): Bind3\n , Ctx, T1 extends Parameters[0], T2 extends Parameters[1], T3 extends Parameters[2]>(func: F, ctx: Ctx, a: T1, b: T2, c: T3): Bind4\n , Ctx, T1 extends Parameters[0], T2 extends Parameters[1], T3 extends Parameters[2], T4 extends Parameters[3]>(func: F, ctx: Ctx, a: T1, b: T2, c: T3, d: T4): Bind5\n}\nfunction bindPolyfill any>(\n func: Fn, context: Ctx, ...args: any[]\n): (...args: Parameters) => ReturnType {\n return function (this: Ctx) {\n return func.apply(context, args.concat(nativeSlice.call(arguments)));\n };\n}\nexport const bind: FunctionBind = (protoFunction && isFunction(protoFunction.bind))\n ? protoFunction.call.bind(protoFunction.bind)\n : bindPolyfill;\n\nexport type Curry1 = F extends (a: T1, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Curry2 = F extends (a: T1, b: T2, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Curry3 = F extends (a: T1, b: T2, c: T3, ...args: infer A) => infer R ? (...args: A) => R : unknown;\nexport type Curry4 = F extends (a: T1, b: T2, c: T3, d: T4, ...args: infer A) => infer R ? (...args: A) => R : unknown;\ntype CurryFunc = (...arg: any[]) => any\n\nfunction curry[0]>(func: F, a: T1): Curry1\nfunction curry[0], T2 extends Parameters[1]>(func: F, a: T1, b: T2): Curry2\nfunction curry[0], T2 extends Parameters[1], T3 extends Parameters[2]>(func: F, a: T1, b: T2, c: T3): Curry3\nfunction curry[0], T2 extends Parameters[1], T3 extends Parameters[2], T4 extends Parameters[3]>(func: F, a: T1, b: T2, c: T3, d: T4): Curry4\nfunction curry(func: Function, ...args: any[]): Function {\n return function (this: any) {\n return func.apply(this, args.concat(nativeSlice.call(arguments)));\n };\n}\nexport {curry};\n/* eslint-enable max-len*/\n\nexport function isArray(value: any): value is any[] {\n if (Array.isArray) {\n return Array.isArray(value);\n }\n return objToString.call(value) === '[object Array]';\n}\n\nexport function isFunction(value: any): value is Function {\n return typeof value === 'function';\n}\n\nexport function isString(value: any): value is string {\n // Faster than `objToString.call` several times in chromium and webkit.\n // And `new String()` is rarely used.\n return typeof value === 'string';\n}\n\nexport function isStringSafe(value: any): value is string {\n return objToString.call(value) === '[object String]';\n}\n\nexport function isNumber(value: any): value is number {\n // Faster than `objToString.call` several times in chromium and webkit.\n // And `new Number()` is rarely used.\n return typeof value === 'number';\n}\n\n// Usage: `isObject(xxx)` or `isObject(SomeType)(xxx)`\n// Generic T can be used to avoid \"ts type gruards\" casting the `value` from its original\n// type `Object` implicitly so that loose its original type info in the subsequent code.\nexport function isObject(value: T): value is (object & T) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n const type = typeof value;\n return type === 'function' || (!!value && type === 'object');\n}\n\nexport function isBuiltInObject(value: any): boolean {\n return !!BUILTIN_OBJECT[objToString.call(value)];\n}\n\nexport function isTypedArray(value: any): boolean {\n return !!TYPED_ARRAY[objToString.call(value)];\n}\n\nexport function isDom(value: any): value is HTMLElement {\n return typeof value === 'object'\n && typeof value.nodeType === 'number'\n && typeof value.ownerDocument === 'object';\n}\n\nexport function isGradientObject(value: any): value is GradientObject {\n return (value as GradientObject).colorStops != null;\n}\n\nexport function isImagePatternObject(value: any): value is ImagePatternObject {\n return (value as ImagePatternObject).image != null;\n}\n\nexport function isRegExp(value: unknown): value is RegExp {\n return objToString.call(value) === '[object RegExp]';\n}\n\n/**\n * Whether is exactly NaN. Notice isNaN('a') returns true.\n */\nexport function eqNaN(value: any): boolean {\n /* eslint-disable-next-line no-self-compare */\n return value !== value;\n}\n\n/**\n * If value1 is not null, then return value1, otherwise judget rest of values.\n * Low performance.\n * @return Final value\n */\nexport function retrieve(...args: T[]): T {\n for (let i = 0, len = args.length; i < len; i++) {\n if (args[i] != null) {\n return args[i];\n }\n }\n}\n\nexport function retrieve2(value0: T, value1: R): T | R {\n return value0 != null\n ? value0\n : value1;\n}\n\nexport function retrieve3(value0: T, value1: R, value2: W): T | R | W {\n return value0 != null\n ? value0\n : value1 != null\n ? value1\n : value2;\n}\n\ntype SliceParams = Parameters;\nexport function slice(arr: ArrayLike, ...args: SliceParams): T[] {\n return nativeSlice.apply(arr, args as any[]);\n}\n\n/**\n * Normalize css liked array configuration\n * e.g.\n * 3 => [3, 3, 3, 3]\n * [4, 2] => [4, 2, 4, 2]\n * [4, 3, 2] => [4, 3, 2, 3]\n */\nexport function normalizeCssArray(val: number | number[]) {\n if (typeof (val) === 'number') {\n return [val, val, val, val];\n }\n const len = val.length;\n if (len === 2) {\n // vertical | horizontal\n return [val[0], val[1], val[0], val[1]];\n }\n else if (len === 3) {\n // top | horizontal | bottom\n return [val[0], val[1], val[2], val[1]];\n }\n return val;\n}\n\nexport function assert(condition: any, message?: string) {\n if (!condition) {\n throw new Error(message);\n }\n}\n\n/**\n * @param str string to be trimed\n * @return trimed string\n */\nexport function trim(str: string): string {\n if (str == null) {\n return null;\n }\n else if (typeof str.trim === 'function') {\n return str.trim();\n }\n else {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n}\n\nconst primitiveKey = '__ec_primitive__';\n/**\n * Set an object as primitive to be ignored traversing children in clone or merge\n */\nexport function setAsPrimitive(obj: any) {\n obj[primitiveKey] = true;\n}\n\nexport function isPrimitive(obj: any): boolean {\n return obj[primitiveKey];\n}\n\n\n/**\n * @constructor\n * @param {Object} obj Only apply `ownProperty`.\n */\nexport class HashMap {\n\n data: {[key in KEY]: T} = {} as {[key in KEY]: T};\n\n constructor(obj?: HashMap | { [key in KEY]?: T } | KEY[]) {\n const isArr = isArray(obj);\n // Key should not be set on this, otherwise\n // methods get/set/... may be overrided.\n this.data = {} as {[key in KEY]: T};\n const thisMap = this;\n\n (obj instanceof HashMap)\n ? obj.each(visit)\n : (obj && each(obj, visit));\n\n function visit(value: any, key: any) {\n isArr ? thisMap.set(value, key) : thisMap.set(key, value);\n }\n }\n\n // Do not provide `has` method to avoid defining what is `has`.\n // (We usually treat `null` and `undefined` as the same, different\n // from ES6 Map).\n get(key: KEY): T {\n return this.data.hasOwnProperty(key) ? this.data[key] : null;\n }\n set(key: KEY, value: T): T {\n // Comparing with invocation chaining, `return value` is more commonly\n // used in this case: `const someVal = map.set('a', genVal());`\n return (this.data[key] = value);\n }\n // Although util.each can be performed on this hashMap directly, user\n // should not use the exposed keys, who are prefixed.\n each(\n cb: (this: Context, value?: T, key?: KEY) => void,\n context?: Context\n ) {\n for (let key in this.data) {\n if (this.data.hasOwnProperty(key)) {\n cb.call(context, this.data[key], key);\n }\n }\n }\n keys(): KEY[] {\n return keys(this.data);\n }\n // Do not use this method if performance sensitive.\n removeKey(key: KEY) {\n delete this.data[key];\n }\n}\n\nexport function createHashMap(\n obj?: HashMap | { [key in KEY]?: T } | KEY[]\n) {\n return new HashMap(obj);\n}\n\nexport function concatArray(a: ArrayLike, b: ArrayLike): ArrayLike {\n const newArray = new (a as any).constructor(a.length + b.length);\n for (let i = 0; i < a.length; i++) {\n newArray[i] = a[i];\n }\n const offset = a.length;\n for (let i = 0; i < b.length; i++) {\n newArray[i + offset] = b[i];\n }\n return newArray;\n}\n\nexport function createObject(proto?: object, properties?: T): T {\n // Performance of Object.create\n // https://jsperf.com/style-strategy-proto-or-others\n let obj: T;\n if (Object.create) {\n obj = Object.create(proto);\n }\n else {\n const StyleCtor = function () {};\n StyleCtor.prototype = proto;\n obj = new (StyleCtor as any)();\n }\n if (properties) {\n extend(obj, properties);\n }\n\n return obj;\n}\n\nexport function hasOwn(own: object, prop: string): boolean {\n return own.hasOwnProperty(prop);\n}\n\nexport function noop() {}\n","/**\n * @deprecated\n * Use zrender.Point class instead\n */\nimport { MatrixArray } from './matrix';\n\n/* global Float32Array */\n\n// const ArrayCtor = typeof Float32Array === 'undefined'\n// ? Array\n// : Float32Array;\n\nexport type VectorArray = number[]\n/**\n * 创建一个向量\n */\nexport function create(x?: number, y?: number): VectorArray {\n if (x == null) {\n x = 0;\n }\n if (y == null) {\n y = 0;\n }\n return [x, y];\n}\n\n/**\n * 复制向量数据\n */\nexport function copy(out: T, v: VectorArray): T {\n out[0] = v[0];\n out[1] = v[1];\n return out;\n}\n\n/**\n * 克隆一个向量\n */\nexport function clone(v: VectorArray): VectorArray {\n return [v[0], v[1]];\n}\n\n/**\n * 设置向量的两个项\n */\nexport function set(out: T, a: number, b: number): T {\n out[0] = a;\n out[1] = b;\n return out;\n}\n\n/**\n * 向量相加\n */\nexport function add(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = v1[0] + v2[0];\n out[1] = v1[1] + v2[1];\n return out;\n}\n\n/**\n * 向量缩放后相加\n */\nexport function scaleAndAdd(out: T, v1: VectorArray, v2: VectorArray, a: number): T {\n out[0] = v1[0] + v2[0] * a;\n out[1] = v1[1] + v2[1] * a;\n return out;\n}\n\n/**\n * 向量相减\n */\nexport function sub(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n return out;\n}\n\n/**\n * 向量长度\n */\nexport function len(v: VectorArray): number {\n return Math.sqrt(lenSquare(v));\n}\nexport const length = len;\n\n/**\n * 向量长度平方\n */\nexport function lenSquare(v: VectorArray): number {\n return v[0] * v[0] + v[1] * v[1];\n}\nexport const lengthSquare = lenSquare;\n\n/**\n * 向量乘法\n */\nexport function mul(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = v1[0] * v2[0];\n out[1] = v1[1] * v2[1];\n return out;\n}\n\n/**\n * 向量除法\n */\nexport function div(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = v1[0] / v2[0];\n out[1] = v1[1] / v2[1];\n return out;\n}\n\n/**\n * 向量点乘\n */\nexport function dot(v1: VectorArray, v2: VectorArray) {\n return v1[0] * v2[0] + v1[1] * v2[1];\n}\n\n/**\n * 向量缩放\n */\nexport function scale(out: T, v: VectorArray, s: number): T {\n out[0] = v[0] * s;\n out[1] = v[1] * s;\n return out;\n}\n\n/**\n * 向量归一化\n */\nexport function normalize(out: T, v: VectorArray): T {\n const d = len(v);\n if (d === 0) {\n out[0] = 0;\n out[1] = 0;\n }\n else {\n out[0] = v[0] / d;\n out[1] = v[1] / d;\n }\n return out;\n}\n\n/**\n * 计算向量间距离\n */\nexport function distance(v1: VectorArray, v2: VectorArray): number {\n return Math.sqrt(\n (v1[0] - v2[0]) * (v1[0] - v2[0])\n + (v1[1] - v2[1]) * (v1[1] - v2[1])\n );\n}\nexport const dist = distance;\n\n/**\n * 向量距离平方\n */\nexport function distanceSquare(v1: VectorArray, v2: VectorArray): number {\n return (v1[0] - v2[0]) * (v1[0] - v2[0])\n + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\nexport const distSquare = distanceSquare;\n\n/**\n * 求负向量\n */\nexport function negate(out: T, v: VectorArray): T {\n out[0] = -v[0];\n out[1] = -v[1];\n return out;\n}\n\n/**\n * 插值两个点\n */\nexport function lerp(out: T, v1: VectorArray, v2: VectorArray, t: number): T {\n out[0] = v1[0] + t * (v2[0] - v1[0]);\n out[1] = v1[1] + t * (v2[1] - v1[1]);\n return out;\n}\n\n/**\n * 矩阵左乘向量\n */\nexport function applyTransform(out: T, v: VectorArray, m: MatrixArray): T {\n const x = v[0];\n const y = v[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\n\n/**\n * 求两个向量最小值\n */\nexport function min(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = Math.min(v1[0], v2[0]);\n out[1] = Math.min(v1[1], v2[1]);\n return out;\n}\n\n/**\n * 求两个向量最大值\n */\nexport function max(out: T, v1: VectorArray, v2: VectorArray): T {\n out[0] = Math.max(v1[0], v2[0]);\n out[1] = Math.max(v1[1], v2[1]);\n return out;\n}\n","import Handler from '../Handler';\nimport Element, { ElementEvent } from '../Element';\nimport Displayable from '../graphic/Displayable';\n\nclass Param {\n\n target: Element\n topTarget: Element\n\n constructor(target: Element, e?: ElementEvent) {\n this.target = target;\n this.topTarget = e && e.topTarget;\n }\n}\n\n// FIXME Draggable on element which has parent rotation or scale\nexport default class Draggable {\n\n handler: Handler\n\n _draggingTarget: Element\n _dropTarget: Element\n\n _x: number\n _y: number\n\n constructor(handler: Handler) {\n this.handler = handler;\n\n handler.on('mousedown', this._dragStart, this);\n handler.on('mousemove', this._drag, this);\n handler.on('mouseup', this._dragEnd, this);\n // `mosuemove` and `mouseup` can be continue to fire when dragging.\n // See [DRAG_OUTSIDE] in `Handler.js`. So we do not need to trigger\n // `_dragEnd` when globalout. That would brings better user experience.\n // this.on('globalout', this._dragEnd, this);\n\n // this._dropTarget = null;\n // this._draggingTarget = null;\n\n // this._x = 0;\n // this._y = 0;\n }\n\n _dragStart(e: ElementEvent) {\n let draggingTarget = e.target;\n // Find if there is draggable in the ancestor\n while (draggingTarget && !draggingTarget.draggable) {\n draggingTarget = draggingTarget.parent;\n }\n if (draggingTarget) {\n this._draggingTarget = draggingTarget;\n draggingTarget.dragging = true;\n this._x = e.offsetX;\n this._y = e.offsetY;\n\n this.handler.dispatchToElement(\n new Param(draggingTarget, e), 'dragstart', e.event\n );\n }\n }\n\n _drag(e: ElementEvent) {\n const draggingTarget = this._draggingTarget;\n if (draggingTarget) {\n\n const x = e.offsetX;\n const y = e.offsetY;\n\n const dx = x - this._x;\n const dy = y - this._y;\n this._x = x;\n this._y = y;\n\n draggingTarget.drift(dx, dy, e);\n this.handler.dispatchToElement(\n new Param(draggingTarget, e), 'drag', e.event\n );\n\n const dropTarget = this.handler.findHover(\n x, y, draggingTarget as Displayable // PENDING\n ).target;\n const lastDropTarget = this._dropTarget;\n this._dropTarget = dropTarget;\n\n if (draggingTarget !== dropTarget) {\n if (lastDropTarget && dropTarget !== lastDropTarget) {\n this.handler.dispatchToElement(\n new Param(lastDropTarget, e), 'dragleave', e.event\n );\n }\n if (dropTarget && dropTarget !== lastDropTarget) {\n this.handler.dispatchToElement(\n new Param(dropTarget, e), 'dragenter', e.event\n );\n }\n }\n }\n }\n\n _dragEnd(e: ElementEvent) {\n const draggingTarget = this._draggingTarget;\n\n if (draggingTarget) {\n draggingTarget.dragging = false;\n }\n\n this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragend', e.event);\n\n if (this._dropTarget) {\n this.handler.dispatchToElement(new Param(this._dropTarget, e), 'drop', e.event);\n }\n\n this._draggingTarget = null;\n this._dropTarget = null;\n }\n\n}","import { Dictionary, WithThisType } from './types';\n\n// Return true to cancel bubble\nexport type EventCallbackSingleParam = EvtParam extends any\n ? (params: EvtParam) => boolean | void\n : never\n\nexport type EventCallback = EvtParams extends any[]\n ? (...args: EvtParams) => boolean | void\n : never\nexport type EventQuery = string | Object\n\ntype CbThis = unknown extends Ctx ? Impl : Ctx;\n\ntype EventHandler = {\n h: EventCallback\n ctx: CbThis\n query: EventQuery\n\n callAtLast: boolean\n}\n\ntype DefaultEventDefinition = Dictionary>;\n\nexport interface EventProcessor {\n normalizeQuery?: (query: EventQuery) => EventQuery\n filter?: (eventType: keyof EvtDef, query: EventQuery) => boolean\n afterTrigger?: (eventType: keyof EvtDef) => void\n}\n\n/**\n * Event dispatcher.\n *\n * Event can be defined in EvtDef to enable type check. For example:\n * ```ts\n * interface FooEvents {\n * // key: event name, value: the first event param in `trigger` and `callback`.\n * myevent: {\n * aa: string;\n * bb: number;\n * };\n * }\n * class Foo extends Eventful {\n * fn() {\n * // Type check of event name and the first event param is enabled here.\n * this.trigger('myevent', {aa: 'xx', bb: 3});\n * }\n * }\n * let foo = new Foo();\n * // Type check of event name and the first event param is enabled here.\n * foo.on('myevent', (eventParam) => { ... });\n * ```\n *\n * @param eventProcessor The object eventProcessor is the scope when\n * `eventProcessor.xxx` called.\n * @param eventProcessor.normalizeQuery\n * param: {string|Object} Raw query.\n * return: {string|Object} Normalized query.\n * @param eventProcessor.filter Event will be dispatched only\n * if it returns `true`.\n * param: {string} eventType\n * param: {string|Object} query\n * return: {boolean}\n * @param eventProcessor.afterTrigger Called after all handlers called.\n * param: {string} eventType\n */\nexport default class Eventful {\n\n private _$handlers: Dictionary[]>\n\n protected _$eventProcessor: EventProcessor\n\n constructor(eventProcessors?: EventProcessor) {\n if (eventProcessors) {\n this._$eventProcessor = eventProcessors;\n }\n }\n\n on(\n event: EvtNm,\n handler: WithThisType>,\n context?: Ctx\n ): this\n on(\n event: EvtNm,\n query: EventQuery,\n handler: WithThisType>,\n context?: Ctx\n ): this\n /**\n * Bind a handler.\n *\n * @param event The event name.\n * @param Condition used on event filter.\n * @param handler The event handler.\n * @param context\n */\n on(\n event: EvtNm,\n query: EventQuery | WithThisType, CbThis>,\n handler?: WithThisType, CbThis> | Ctx,\n context?: Ctx\n ): this {\n if (!this._$handlers) {\n this._$handlers = {};\n }\n\n const _h = this._$handlers;\n\n if (typeof query === 'function') {\n context = handler as Ctx;\n handler = query as (...args: any) => any;\n query = null;\n }\n\n if (!handler || !event) {\n return this;\n }\n\n const eventProcessor = this._$eventProcessor;\n if (query != null && eventProcessor && eventProcessor.normalizeQuery) {\n query = eventProcessor.normalizeQuery(query);\n }\n\n if (!_h[event as string]) {\n _h[event as string] = [];\n }\n\n for (let i = 0; i < _h[event as string].length; i++) {\n if (_h[event as string][i].h === handler) {\n return this;\n }\n }\n\n const wrap: EventHandler = {\n h: handler as EventCallback,\n query: query,\n ctx: (context || this) as CbThis,\n // FIXME\n // Do not publish this feature util it is proved that it makes sense.\n callAtLast: (handler as any).zrEventfulCallAtLast\n };\n\n const lastIndex = _h[event as string].length - 1;\n const lastWrap = _h[event as string][lastIndex];\n (lastWrap && lastWrap.callAtLast)\n ? _h[event as string].splice(lastIndex, 0, wrap)\n : _h[event as string].push(wrap);\n\n return this;\n }\n\n /**\n * Whether any handler has bound.\n */\n isSilent(eventName: keyof EvtDef): boolean {\n const _h = this._$handlers;\n return !_h || !_h[eventName as string] || !_h[eventName as string].length;\n }\n\n /**\n * Unbind a event.\n *\n * @param eventType The event name.\n * If no `event` input, \"off\" all listeners.\n * @param handler The event handler.\n * If no `handler` input, \"off\" all listeners of the `event`.\n */\n off(eventType?: keyof EvtDef, handler?: Function): this {\n const _h = this._$handlers;\n\n if (!_h) {\n return this;\n }\n\n if (!eventType) {\n this._$handlers = {};\n return this;\n }\n\n if (handler) {\n if (_h[eventType as string]) {\n const newList = [];\n for (let i = 0, l = _h[eventType as string].length; i < l; i++) {\n if (_h[eventType as string][i].h !== handler) {\n newList.push(_h[eventType as string][i]);\n }\n }\n _h[eventType as string] = newList;\n }\n\n if (_h[eventType as string] && _h[eventType as string].length === 0) {\n delete _h[eventType as string];\n }\n }\n else {\n delete _h[eventType as string];\n }\n\n return this;\n }\n\n /**\n * Dispatch a event.\n *\n * @param {string} eventType The event name.\n */\n trigger(\n eventType: EvtNm,\n ...args: Parameters\n ): this {\n if (!this._$handlers) {\n return this;\n }\n\n const _h = this._$handlers[eventType as string];\n const eventProcessor = this._$eventProcessor;\n\n if (_h) {\n const argLen = args.length;\n\n const len = _h.length;\n for (let i = 0; i < len; i++) {\n const hItem = _h[i];\n if (eventProcessor\n && eventProcessor.filter\n && hItem.query != null\n && !eventProcessor.filter(eventType, hItem.query)\n ) {\n continue;\n }\n\n // Optimize advise from backbone\n switch (argLen) {\n case 0:\n hItem.h.call(hItem.ctx);\n break;\n case 1:\n hItem.h.call(hItem.ctx, args[0]);\n break;\n case 2:\n hItem.h.call(hItem.ctx, args[0], args[1]);\n break;\n default:\n // have more than 2 given arguments\n hItem.h.apply(hItem.ctx, args);\n break;\n }\n }\n }\n\n eventProcessor && eventProcessor.afterTrigger\n && eventProcessor.afterTrigger(eventType);\n\n return this;\n }\n\n /**\n * Dispatch a event with context, which is specified at the last parameter.\n *\n * @param {string} type The event name.\n */\n triggerWithContext(type: keyof EvtDef, ...args: any[]): this {\n if (!this._$handlers) {\n return this;\n }\n\n const _h = this._$handlers[type as string];\n const eventProcessor = this._$eventProcessor;\n\n if (_h) {\n const argLen = args.length;\n const ctx = args[argLen - 1];\n\n const len = _h.length;\n for (let i = 0; i < len; i++) {\n const hItem = _h[i];\n if (eventProcessor\n && eventProcessor.filter\n && hItem.query != null\n && !eventProcessor.filter(type, hItem.query)\n ) {\n continue;\n }\n\n // Optimize advise from backbone\n switch (argLen) {\n case 0:\n hItem.h.call(ctx);\n break;\n case 1:\n hItem.h.call(ctx, args[0]);\n break;\n case 2:\n hItem.h.call(ctx, args[0], args[1]);\n break;\n default:\n // have more than 2 given arguments\n hItem.h.apply(ctx, args.slice(1, argLen - 1));\n break;\n }\n }\n }\n\n eventProcessor && eventProcessor.afterTrigger\n && eventProcessor.afterTrigger(type);\n\n return this;\n }\n\n}\n","/**\n * The algoritm is learnt from\n * https://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * And we made some optimization for matrix inversion.\n * Other similar approaches:\n * \"cv::getPerspectiveTransform\", \"Direct Linear Transformation\".\n */\n\nconst LN2 = Math.log(2);\n\nfunction determinant(\n rows: number[][],\n rank: number,\n rowStart: number,\n rowMask: number,\n colMask: number,\n detCache: {[key: string]: number}\n) {\n const cacheKey = rowMask + '-' + colMask;\n const fullRank = rows.length;\n\n if (detCache.hasOwnProperty(cacheKey)) {\n return detCache[cacheKey];\n }\n\n if (rank === 1) {\n // In this case the colMask must be like: `11101111`. We can find the place of `0`.\n const colStart = Math.round(Math.log(((1 << fullRank) - 1) & ~colMask) / LN2);\n return rows[rowStart][colStart];\n }\n\n const subRowMask = rowMask | (1 << rowStart);\n let subRowStart = rowStart + 1;\n while (rowMask & (1 << subRowStart)) {\n subRowStart++;\n }\n\n let sum = 0;\n for (let j = 0, colLocalIdx = 0; j < fullRank; j++) {\n const colTag = 1 << j;\n if (!(colTag & colMask)) {\n sum += (colLocalIdx % 2 ? -1 : 1) * rows[rowStart][j]\n // det(subMatrix(0, j))\n * determinant(rows, rank - 1, subRowStart, subRowMask, colMask | colTag, detCache);\n colLocalIdx++;\n }\n }\n\n detCache[cacheKey] = sum;\n\n return sum;\n}\n\n/**\n * Usage:\n * ```js\n * const transformer = buildTransformer(\n * [10, 44, 100, 44, 100, 300, 10, 300],\n * [50, 54, 130, 14, 140, 330, 14, 220]\n * );\n * const out = [];\n * transformer && transformer([11, 33], out);\n * ```\n *\n * Notice: `buildTransformer` may take more than 10ms in some Android device.\n *\n * @param src source four points, [x0, y0, x1, y1, x2, y2, x3, y3]\n * @param dest destination four points, [x0, y0, x1, y1, x2, y2, x3, y3]\n * @return transformer If fail, return null/undefined.\n */\nexport function buildTransformer(src: number[], dest: number[]) {\n const mA = [\n [src[0], src[1], 1, 0, 0, 0, -dest[0] * src[0], -dest[0] * src[1]],\n [0, 0, 0, src[0], src[1], 1, -dest[1] * src[0], -dest[1] * src[1]],\n [src[2], src[3], 1, 0, 0, 0, -dest[2] * src[2], -dest[2] * src[3]],\n [0, 0, 0, src[2], src[3], 1, -dest[3] * src[2], -dest[3] * src[3]],\n [src[4], src[5], 1, 0, 0, 0, -dest[4] * src[4], -dest[4] * src[5]],\n [0, 0, 0, src[4], src[5], 1, -dest[5] * src[4], -dest[5] * src[5]],\n [src[6], src[7], 1, 0, 0, 0, -dest[6] * src[6], -dest[6] * src[7]],\n [0, 0, 0, src[6], src[7], 1, -dest[7] * src[6], -dest[7] * src[7]]\n ];\n\n const detCache = {};\n const det = determinant(mA, 8, 0, 0, 0, detCache);\n if (det === 0) {\n // can not make transformer when and only when\n // any three of the markers are collinear.\n return;\n }\n\n // `invert(mA) * dest`, that is, `adj(mA) / det * dest`.\n const vh: number[] = [];\n for (let i = 0; i < 8; i++) {\n for (let j = 0; j < 8; j++) {\n vh[j] == null && (vh[j] = 0);\n vh[j] += ((i + j) % 2 ? -1 : 1)\n // det(subMatrix(i, j))\n * determinant(mA, 7, i === 0 ? 1 : 0, 1 << i, 1 << j, detCache)\n / det * dest[i];\n }\n }\n\n return function (out: number[], srcPointX: number, srcPointY: number) {\n const pk = srcPointX * vh[6] + srcPointY * vh[7] + 1;\n out[0] = (srcPointX * vh[0] + srcPointY * vh[1] + vh[2]) / pk;\n out[1] = (srcPointX * vh[3] + srcPointY * vh[4] + vh[5]) / pk;\n };\n}\n","\nimport env from './env';\nimport {buildTransformer} from './fourPointsTransform';\n\nconst EVENT_SAVED_PROP = '___zrEVENTSAVED';\nconst _calcOut: number[] = [];\n\ntype SavedInfo = {\n markers?: HTMLDivElement[]\n trans?: ReturnType\n invTrans?: ReturnType\n srcCoords?: number[]\n}\n\n/**\n * Transform \"local coord\" from `elFrom` to `elTarget`.\n * \"local coord\": the coord based on the input `el`. The origin point is at\n * the position of \"left: 0; top: 0;\" in the `el`.\n *\n * Support when CSS transform is used.\n *\n * Having the `out` (that is, `[outX, outY]`), we can create an DOM element\n * and set the CSS style as \"left: outX; top: outY;\" and append it to `elTarge`\n * to locate the element.\n *\n * For example, this code below positions a child of `document.body` on the event\n * point, no matter whether `body` has `margin`/`paddin`/`transfrom`/... :\n * ```js\n * transformLocalCoord(out, container, document.body, event.offsetX, event.offsetY);\n * if (!eqNaN(out[0])) {\n * // Then locate the tip element on the event point.\n * var tipEl = document.createElement('div');\n * tipEl.style.cssText = 'position: absolute; left:' + out[0] + ';top:' + out[1] + ';';\n * document.body.appendChild(tipEl);\n * }\n * ```\n *\n * Notice: In some env this method is not supported. If called, `out` will be `[NaN, NaN]`.\n *\n * @param {Array.} out [inX: number, inY: number] The output..\n * If can not transform, `out` will not be modified but return `false`.\n * @param {HTMLElement} elFrom The `[inX, inY]` is based on elFrom.\n * @param {HTMLElement} elTarget The `out` is based on elTarget.\n * @param {number} inX\n * @param {number} inY\n * @return {boolean} Whether transform successfully.\n */\nexport function transformLocalCoord(\n out: number[],\n elFrom: HTMLElement,\n elTarget: HTMLElement,\n inX: number,\n inY: number\n) {\n return transformCoordWithViewport(_calcOut, elFrom, inX, inY, true)\n && transformCoordWithViewport(out, elTarget, _calcOut[0], _calcOut[1]);\n}\n\n/**\n * Transform between a \"viewport coord\" and a \"local coord\".\n * \"viewport coord\": the coord based on the left-top corner of the viewport\n * of the browser.\n * \"local coord\": the coord based on the input `el`. The origin point is at\n * the position of \"left: 0; top: 0;\" in the `el`.\n *\n * Support the case when CSS transform is used on el.\n *\n * @param out [inX: number, inY: number] The output. If `inverse: false`,\n * it represents \"local coord\", otherwise \"vireport coord\".\n * If can not transform, `out` will not be modified but return `false`.\n * @param el The \"local coord\" is based on the `el`, see comment above.\n * @param inX If `inverse: false`,\n * it represents \"vireport coord\", otherwise \"local coord\".\n * @param inY If `inverse: false`,\n * it represents \"vireport coord\", otherwise \"local coord\".\n * @param inverse\n * `true`: from \"viewport coord\" to \"local coord\".\n * `false`: from \"local coord\" to \"viewport coord\".\n * @return {boolean} Whether transform successfully.\n */\nexport function transformCoordWithViewport(\n out: number[],\n el: HTMLElement,\n inX: number,\n inY: number,\n inverse?: boolean\n) {\n if (el.getBoundingClientRect && env.domSupported && !isCanvasEl(el)) {\n const saved = (el as any)[EVENT_SAVED_PROP] || ((el as any)[EVENT_SAVED_PROP] = {});\n const markers = prepareCoordMarkers(el, saved);\n const transformer = preparePointerTransformer(markers, saved, inverse);\n if (transformer) {\n transformer(out, inX, inY);\n return true;\n }\n }\n return false;\n}\n\nfunction prepareCoordMarkers(el: HTMLElement, saved: SavedInfo) {\n let markers = saved.markers;\n if (markers) {\n return markers;\n }\n\n markers = saved.markers = [];\n const propLR = ['left', 'right'];\n const propTB = ['top', 'bottom'];\n\n for (let i = 0; i < 4; i++) {\n const marker = document.createElement('div');\n const stl = marker.style;\n const idxLR = i % 2;\n const idxTB = (i >> 1) % 2;\n stl.cssText = [\n 'position: absolute',\n 'visibility: hidden',\n 'padding: 0',\n 'margin: 0',\n 'border-width: 0',\n 'user-select: none',\n 'width:0',\n 'height:0',\n // 'width: 5px',\n // 'height: 5px',\n propLR[idxLR] + ':0',\n propTB[idxTB] + ':0',\n propLR[1 - idxLR] + ':auto',\n propTB[1 - idxTB] + ':auto',\n ''\n ].join('!important;');\n el.appendChild(marker);\n markers.push(marker);\n }\n\n return markers;\n}\n\nfunction preparePointerTransformer(markers: HTMLDivElement[], saved: SavedInfo, inverse?: boolean) {\n const transformerName: 'invTrans' | 'trans' = inverse ? 'invTrans' : 'trans';\n const transformer = saved[transformerName];\n const oldSrcCoords = saved.srcCoords;\n const srcCoords = [];\n const destCoords = [];\n let oldCoordTheSame = true;\n\n for (let i = 0; i < 4; i++) {\n const rect = markers[i].getBoundingClientRect();\n const ii = 2 * i;\n const x = rect.left;\n const y = rect.top;\n srcCoords.push(x, y);\n oldCoordTheSame = oldCoordTheSame && oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1];\n destCoords.push(markers[i].offsetLeft, markers[i].offsetTop);\n }\n // Cache to avoid time consuming of `buildTransformer`.\n return (oldCoordTheSame && transformer)\n ? transformer\n : (\n saved.srcCoords = srcCoords,\n saved[transformerName] = inverse\n ? buildTransformer(destCoords, srcCoords)\n : buildTransformer(srcCoords, destCoords)\n );\n}\n\nexport function isCanvasEl(el: HTMLElement): el is HTMLCanvasElement {\n return el.nodeName.toUpperCase() === 'CANVAS';\n}\n","/**\n * Utilities for mouse or touch events.\n */\n\nimport Eventful from './Eventful';\nimport env from './env';\nimport { ZRRawEvent } from './types';\nimport {isCanvasEl, transformCoordWithViewport} from './dom';\n\nconst isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener;\n\nconst MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;\nconst _calcOut: number[] = [];\n\ntype FirefoxMouseEvent = {\n layerX: number\n layerY: number\n}\n\n\n/**\n * Get the `zrX` and `zrY`, which are relative to the top-left of\n * the input `el`.\n * CSS transform (2D & 3D) is supported.\n *\n * The strategy to fetch the coords:\n * + If `calculate` is not set as `true`, users of this method should\n * ensure that `el` is the same or the same size & location as `e.target`.\n * Otherwise the result coords are probably not expected. Because we\n * firstly try to get coords from e.offsetX/e.offsetY.\n * + If `calculate` is set as `true`, the input `el` can be any element\n * and we force to calculate the coords based on `el`.\n * + The input `el` should be positionable (not position:static).\n *\n * The force `calculate` can be used in case like:\n * When mousemove event triggered on ec tooltip, `e.target` is not `el`(zr painter.dom).\n *\n * @param el DOM element.\n * @param e Mouse event or touch event.\n * @param out Get `out.zrX` and `out.zrY` as the result.\n * @param calculate Whether to force calculate\n * the coordinates but not use ones provided by browser.\n */\nexport function clientToLocal(\n el: HTMLElement,\n e: ZRRawEvent | FirefoxMouseEvent | Touch,\n out: {zrX?: number, zrY?: number},\n calculate?: boolean\n) {\n out = out || {};\n\n // According to the W3C Working Draft, offsetX and offsetY should be relative\n // to the padding edge of the target element. The only browser using this convention\n // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does\n // not support the properties.\n // (see http://www.jacklmoore.com/notes/mouse-position/)\n // In zr painter.dom, padding edge equals to border edge.\n\n if (calculate || !env.canvasSupported) {\n calculateZrXY(el, e as ZRRawEvent, out);\n }\n // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned\n // ancestor element, so we should make sure el is positioned (e.g., not position:static).\n // BTW1, Webkit don't return the same results as FF in non-simple cases (like add\n // zoom-factor, overflow / opacity layers, transforms ...)\n // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d.\n // \n // BTW3, In ff, offsetX/offsetY is always 0.\n else if (env.browser.firefox\n && (e as FirefoxMouseEvent).layerX != null\n && (e as FirefoxMouseEvent).layerX !== (e as MouseEvent).offsetX\n ) {\n out.zrX = (e as FirefoxMouseEvent).layerX;\n out.zrY = (e as FirefoxMouseEvent).layerY;\n }\n // For IE6+, chrome, safari, opera. (When will ff support offsetX?)\n else if ((e as MouseEvent).offsetX != null) {\n out.zrX = (e as MouseEvent).offsetX;\n out.zrY = (e as MouseEvent).offsetY;\n }\n // For some other device, e.g., IOS safari.\n else {\n calculateZrXY(el, e as ZRRawEvent, out);\n }\n\n return out;\n}\n\nfunction calculateZrXY(\n el: HTMLElement,\n e: ZRRawEvent,\n out: {zrX?: number, zrY?: number}\n) {\n // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect.\n if (env.domSupported && el.getBoundingClientRect) {\n const ex = (e as MouseEvent).clientX;\n const ey = (e as MouseEvent).clientY;\n\n if (isCanvasEl(el)) {\n // Original approach, which do not support CSS transform.\n // marker can not be locationed in a canvas container\n // (getBoundingClientRect is always 0). We do not support\n // that input a pre-created canvas to zr while using css\n // transform in iOS.\n const box = el.getBoundingClientRect();\n out.zrX = ex - box.left;\n out.zrY = ey - box.top;\n return;\n }\n else {\n if (transformCoordWithViewport(_calcOut, el, ex, ey)) {\n out.zrX = _calcOut[0];\n out.zrY = _calcOut[1];\n return;\n }\n }\n }\n out.zrX = out.zrY = 0;\n}\n\n/**\n * Find native event compat for legency IE.\n * Should be called at the begining of a native event listener.\n *\n * @param e Mouse event or touch event or pointer event.\n * For lagency IE, we use `window.event` is used.\n * @return The native event.\n */\nexport function getNativeEvent(e: ZRRawEvent): ZRRawEvent {\n return e\n || (window.event as any); // For IE\n}\n\n/**\n * Normalize the coordinates of the input event.\n *\n * Get the `e.zrX` and `e.zrY`, which are relative to the top-left of\n * the input `el`.\n * Get `e.zrDelta` if using mouse wheel.\n * Get `e.which`, see the comment inside this function.\n *\n * Do not calculate repeatly if `zrX` and `zrY` already exist.\n *\n * Notice: see comments in `clientToLocal`. check the relationship\n * between the result coords and the parameters `el` and `calculate`.\n *\n * @param el DOM element.\n * @param e See `getNativeEvent`.\n * @param calculate Whether to force calculate\n * the coordinates but not use ones provided by browser.\n * @return The normalized native UIEvent.\n */\nexport function normalizeEvent(\n el: HTMLElement,\n e: ZRRawEvent,\n calculate?: boolean\n) {\n\n e = getNativeEvent(e);\n\n if (e.zrX != null) {\n return e;\n }\n\n const eventType = e.type;\n const isTouch = eventType && eventType.indexOf('touch') >= 0;\n\n if (!isTouch) {\n clientToLocal(el, e, e, calculate);\n const wheelDelta = getWheelDeltaMayPolyfill(e);\n // FIXME: IE8- has \"wheelDeta\" in event \"mousewheel\" but hat different value (120 times)\n // with Chrome and Safari. It's not correct for zrender event but we left it as it was.\n e.zrDelta = wheelDelta ? wheelDelta / 120 : -(e.detail || 0) / 3;\n }\n else {\n const touch = eventType !== 'touchend'\n ? (e).targetTouches[0]\n : (e).changedTouches[0];\n touch && clientToLocal(el, touch, e, calculate);\n }\n\n // Add which for click: 1 === left; 2 === middle; 3 === right; otherwise: 0;\n // See jQuery: https://github.com/jquery/jquery/blob/master/src/event.js\n // If e.which has been defined, it may be readonly,\n // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which\n const button = (e).button;\n if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {\n (e as any).which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n }\n // [Caution]: `e.which` from browser is not always reliable. For example,\n // when press left button and `mousemove (pointermove)` in Edge, the `e.which`\n // is 65536 and the `e.button` is -1. But the `mouseup (pointerup)` and\n // `mousedown (pointerdown)` is the same as Chrome does.\n\n return e;\n}\n\n// TODO: also provide prop \"deltaX\" \"deltaY\" in zrender \"mousewheel\" event.\nfunction getWheelDeltaMayPolyfill(e: ZRRawEvent): number {\n // Although event \"wheel\" do not has the prop \"wheelDelta\" in spec,\n // agent like Chrome and Safari still provide \"wheelDelta\" like\n // event \"mousewheel\" did (perhaps for backward compat).\n // Since zrender has been using \"wheelDeta\" in zrender event \"mousewheel\".\n // we currently do not break it.\n // But event \"wheel\" in firefox do not has \"wheelDelta\", so we calculate\n // \"wheelDeta\" from \"deltaX\", \"deltaY\" (which is the props in spec).\n\n const rawWheelDelta = (e as any).wheelDelta;\n // Theroetically `e.wheelDelta` won't be 0 unless some day it has been deprecated\n // by agent like Chrome or Safari. So we also calculate it if rawWheelDelta is 0.\n if (rawWheelDelta) {\n return rawWheelDelta;\n }\n\n const deltaX = (e as any).deltaX;\n const deltaY = (e as any).deltaY;\n if (deltaX == null || deltaY == null) {\n return rawWheelDelta;\n }\n\n // Test in Chrome and Safari (MacOS):\n // The sign is corrent.\n // The abs value is 99% corrent (inconsist case only like 62~63, 125~126 ...)\n const delta = deltaY !== 0 ? Math.abs(deltaY) : Math.abs(deltaX);\n const sign = deltaY > 0 ? -1\n : deltaY < 0 ? 1\n : deltaX > 0 ? -1\n : 1;\n return 3 * delta * sign;\n}\n\n\ntype AddEventListenerParams = Parameters\ntype RemoveEventListenerParams = Parameters\n/**\n * @param el\n * @param name\n * @param handler\n * @param opt If boolean, means `opt.capture`\n * @param opt.capture\n * @param opt.passive\n */\nexport function addEventListener(\n el: HTMLElement | HTMLDocument,\n name: AddEventListenerParams[0],\n handler: AddEventListenerParams[1],\n opt?: AddEventListenerParams[2]\n) {\n if (isDomLevel2) {\n // Reproduct the console warning:\n // [Violation] Added non-passive event listener to a scroll-blocking event.\n // Consider marking event handler as 'passive' to make the page more responsive.\n // Just set console log level: verbose in chrome dev tool.\n // then the warning log will be printed when addEventListener called.\n // See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // We have not yet found a neat way to using passive. Because in zrender the dom event\n // listener delegate all of the upper events of element. Some of those events need\n // to prevent default. For example, the feature `preventDefaultMouseMove` of echarts.\n // Before passive can be adopted, these issues should be considered:\n // (1) Whether and how a zrender user specifies an event listener passive. And by default,\n // passive or not.\n // (2) How to tread that some zrender event listener is passive, and some is not. If\n // we use other way but not preventDefault of mousewheel and touchmove, browser\n // compatibility should be handled.\n\n // const opts = (env.passiveSupported && name === 'mousewheel')\n // ? {passive: true}\n // // By default, the third param of el.addEventListener is `capture: false`.\n // : void 0;\n // el.addEventListener(name, handler /* , opts */);\n el.addEventListener(name, handler, opt);\n }\n else {\n // For simplicity, do not implement `setCapture` for IE9-.\n (el as any).attachEvent('on' + name, handler);\n }\n}\n\n/**\n * Parameter are the same as `addEventListener`.\n *\n * Notice that if a listener is registered twice, one with capture and one without,\n * remove each one separately. Removal of a capturing listener does not affect a\n * non-capturing version of the same listener, and vice versa.\n */\nexport function removeEventListener(\n el: HTMLElement | HTMLDocument,\n name: RemoveEventListenerParams[0],\n handler: RemoveEventListenerParams[1],\n opt: RemoveEventListenerParams[2]\n) {\n if (isDomLevel2) {\n el.removeEventListener(name, handler, opt);\n }\n else {\n (el as any).detachEvent('on' + name, handler);\n }\n}\n\n/**\n * preventDefault and stopPropagation.\n * Notice: do not use this method in zrender. It can only be\n * used by upper applications if necessary.\n *\n * @param {Event} e A mouse or touch event.\n */\nexport const stop = isDomLevel2\n ? function (e: MouseEvent | TouchEvent | PointerEvent) {\n e.preventDefault();\n e.stopPropagation();\n e.cancelBubble = true;\n }\n : function (e: MouseEvent | TouchEvent | PointerEvent) {\n e.returnValue = false;\n e.cancelBubble = true;\n };\n\n/**\n * This method only works for mouseup and mousedown. The functionality is restricted\n * for fault tolerance, See the `e.which` compatibility above.\n *\n * params can be MouseEvent or ElementEvent\n */\nexport function isMiddleOrRightButtonOnMouseUpDown(e: { which: number }) {\n return e.which === 2 || e.which === 3;\n}\n\n/**\n * To be removed.\n * @deprecated\n */\nexport function notLeftMouse(e: MouseEvent) {\n // If e.which is undefined, considered as left mouse event.\n return e.which > 1;\n}\n\n\n// For backward compatibility\nexport {Eventful as Dispatcher};\n","/**\n * Only implements needed gestures for mobile.\n */\n\nimport * as eventUtil from './event';\nimport { ZRRawTouchEvent, ZRPinchEvent, Dictionary } from './types';\nimport Displayable from '../graphic/Displayable';\n\ninterface TrackItem {\n points: number[][]\n touches: Touch[]\n target: Displayable,\n event: ZRRawTouchEvent\n}\n\nexport class GestureMgr {\n\n private _track: TrackItem[] = []\n\n constructor() {}\n\n recognize(event: ZRRawTouchEvent, target: Displayable, root: HTMLElement) {\n this._doTrack(event, target, root);\n return this._recognize(event);\n }\n\n clear() {\n this._track.length = 0;\n return this;\n }\n\n _doTrack(event: ZRRawTouchEvent, target: Displayable, root: HTMLElement) {\n const touches = event.touches;\n\n if (!touches) {\n return;\n }\n\n const trackItem: TrackItem = {\n points: [],\n touches: [],\n target: target,\n event: event\n };\n\n for (let i = 0, len = touches.length; i < len; i++) {\n const touch = touches[i];\n const 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\n _recognize(event: ZRRawTouchEvent) {\n for (let eventName in recognizers) {\n if (recognizers.hasOwnProperty(eventName)) {\n const gestureInfo = recognizers[eventName](this._track, event);\n if (gestureInfo) {\n return gestureInfo;\n }\n }\n }\n }\n}\n\nfunction dist(pointPair: number[][]): number {\n const dx = pointPair[1][0] - pointPair[0][0];\n const dy = pointPair[1][1] - pointPair[0][1];\n\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction center(pointPair: number[][]): number[] {\n return [\n (pointPair[0][0] + pointPair[1][0]) / 2,\n (pointPair[0][1] + pointPair[1][1]) / 2\n ];\n}\n\ntype Recognizer = (tracks: TrackItem[], event: ZRRawTouchEvent) => {\n type: string\n target: Displayable\n event: ZRRawTouchEvent\n}\n\nconst recognizers: Dictionary = {\n\n pinch: function (tracks: TrackItem[], event: ZRRawTouchEvent) {\n const trackLen = tracks.length;\n\n if (!trackLen) {\n return;\n }\n\n const pinchEnd = (tracks[trackLen - 1] || {}).points;\n const pinchPre = (tracks[trackLen - 2] || {}).points || pinchEnd;\n\n if (pinchPre\n && pinchPre.length > 1\n && pinchEnd\n && pinchEnd.length > 1\n ) {\n let pinchScale = dist(pinchEnd) / dist(pinchPre);\n !isFinite(pinchScale) && (pinchScale = 1);\n\n (event as ZRPinchEvent).pinchScale = pinchScale;\n\n const pinchCenter = center(pinchEnd);\n (event as ZRPinchEvent).pinchX = pinchCenter[0];\n (event as ZRPinchEvent).pinchY = pinchCenter[1];\n\n return {\n type: 'pinch',\n target: tracks[0].target,\n event: event\n };\n }\n }\n\n // Only pinch currently.\n};","import * as util from './core/util';\nimport * as vec2 from './core/vector';\nimport Draggable from './mixin/Draggable';\nimport Eventful from './core/Eventful';\nimport * as eventTool from './core/event';\nimport {GestureMgr} from './core/GestureMgr';\nimport Displayable from './graphic/Displayable';\nimport {PainterBase} from './PainterBase';\nimport HandlerDomProxy, { HandlerProxyInterface } from './dom/HandlerProxy';\nimport { ZRRawEvent, ZRPinchEvent, ElementEventName, ElementEventNameWithOn, ZRRawTouchEvent } from './core/types';\nimport Storage from './Storage';\nimport Element, {ElementEvent} from './Element';\nimport CanvasPainter from './canvas/Painter';\n\n\n/**\n * [The interface between `Handler` and `HandlerProxy`]:\n *\n * The default `HandlerProxy` only support the common standard web environment\n * (e.g., standalone browser, headless browser, embed browser in mobild APP, ...).\n * But `HandlerProxy` can be replaced to support more non-standard environment\n * (e.g., mini app), or to support more feature that the default `HandlerProxy`\n * not provided (like echarts-gl did).\n * So the interface between `Handler` and `HandlerProxy` should be stable. Do not\n * make break changes util inevitable. The interface include the public methods\n * of `Handler` and the events listed in `handlerNames` below, by which `HandlerProxy`\n * drives `Handler`.\n */\n\n/**\n * [DRAG_OUTSIDE]:\n *\n * That is, triggering `mousemove` and `mouseup` event when the pointer is out of the\n * zrender area when dragging. That is important for the improvement of the user experience\n * when dragging something near the boundary without being terminated unexpectedly.\n *\n * We originally consider to introduce new events like `pagemovemove` and `pagemouseup`\n * to resolve this issue. But some drawbacks of it is described in\n * https://github.com/ecomfe/zrender/pull/536#issuecomment-560286899\n *\n * Instead, we referenced the specifications:\n * https://www.w3.org/TR/touch-events/#the-touchmove-event\n * https://www.w3.org/TR/2014/WD-DOM-Level-3-Events-20140925/#event-type-mousemove\n * where the the mousemove/touchmove can be continue to fire if the user began a drag\n * operation and the pointer has left the boundary. (for the mouse event, browsers\n * only do it on `document` and when the pointer has left the boundary of the browser.)\n *\n * So the default `HandlerProxy` supports this feature similarly: if it is in the dragging\n * state (see `pointerCapture` in `HandlerProxy`), the `mousemove` and `mouseup` continue\n * to fire until release the pointer. That is implemented by listen to those event on\n * `document`.\n * If we implement some other `HandlerProxy` only for touch device, that would be easier.\n * The touch event support this feature by default.\n * The term \"pointer capture\" is from the spec:\n * https://www.w3.org/TR/pointerevents2/#idl-def-element-setpointercapture-pointerid\n *\n * Note:\n * There might be some cases that the mouse event can not be received on `document`.\n * For example,\n * (A) When `useCapture` is not supported and some user defined event listeners on the ancestor\n * of zr dom throw Error.\n * (B) When `useCapture` is not supported and some user defined event listeners on the ancestor of\n * zr dom call `stopPropagation`.\n * In these cases, the `mousemove` event might be keep triggering event when the mouse is released.\n * We try to reduce the side-effect in those cases, that is, use `isOutsideBoundary` to prevent\n * it from do anything (especially, `findHover`).\n * (`useCapture` mean, `addEvnetListener(listener, {capture: true})`, althought it may not be\n * suppported in some environments.)\n *\n * Note:\n * If `HandlerProxy` listens to `document` with `useCapture`, `HandlerProxy` needs to\n * prevent user-registered-handler from calling `stopPropagation` and `preventDefault`\n * when the `event.target` is not a zrender dom element. Otherwise the user-registered-handler\n * may be able to prevent other elements (that not relevant to zrender) in the web page from receiving\n * dom events.\n */\n\nconst SILENT = 'silent';\n\nfunction makeEventPacket(eveType: ElementEventName, targetInfo: {\n target?: Element\n topTarget?: Element\n}, event: ZRRawEvent): ElementEvent {\n return {\n type: eveType,\n event: event,\n // target can only be an element that is not silent.\n target: targetInfo.target,\n // topTarget can be a silent element.\n topTarget: targetInfo.topTarget,\n cancelBubble: false,\n offsetX: event.zrX,\n offsetY: event.zrY,\n gestureEvent: (event as ZRPinchEvent).gestureEvent,\n pinchX: (event as ZRPinchEvent).pinchX,\n pinchY: (event as ZRPinchEvent).pinchY,\n pinchScale: (event as ZRPinchEvent).pinchScale,\n wheelDelta: event.zrDelta,\n zrByTouch: event.zrByTouch,\n which: event.which,\n stop: stopEvent\n };\n}\n\nfunction stopEvent(this: ElementEvent) {\n eventTool.stop(this.event);\n}\n\nclass EmptyProxy extends Eventful {\n handler: Handler = null\n dispose() {}\n setCursor() {}\n}\n\nclass HoveredResult {\n x: number\n y: number\n target: Displayable\n topTarget: Displayable\n constructor(x?: number, y?: number) {\n this.x = x;\n this.y = y;\n }\n}\n\nconst handlerNames = [\n 'click', 'dblclick', 'mousewheel', 'mouseout',\n 'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\n\ntype HandlerName = 'click' |'dblclick' |'mousewheel' |'mouseout' |\n 'mouseup' |'mousedown' |'mousemove' |'contextmenu';\n\n\n// TODO draggable\nclass Handler extends Eventful {\n\n storage: Storage\n painter: PainterBase\n painterRoot: HTMLElement\n\n proxy: HandlerProxyInterface\n\n private _hovered = new HoveredResult(0, 0)\n\n private _gestureMgr: GestureMgr\n\n private _draggingMgr: Draggable\n\n _downEl: Element\n _upEl: Element\n _downPoint: [number, number]\n\n constructor(\n storage: Storage,\n painter: PainterBase,\n proxy: HandlerProxyInterface,\n painterRoot: HTMLElement\n ) {\n super();\n\n this.storage = storage;\n\n this.painter = painter;\n\n this.painterRoot = painterRoot;\n\n proxy = proxy || new EmptyProxy();\n\n /**\n * Proxy of event. can be Dom, WebGLSurface, etc.\n */\n this.proxy = null;\n\n this.setHandlerProxy(proxy);\n\n this._draggingMgr = new Draggable(this);\n }\n\n setHandlerProxy(proxy: HandlerProxyInterface) {\n if (this.proxy) {\n this.proxy.dispose();\n }\n\n if (proxy) {\n util.each(handlerNames, function (name) {\n proxy.on && proxy.on(name, this[name as HandlerName], this);\n }, this);\n // Attach handler\n proxy.handler = this;\n }\n this.proxy = proxy;\n }\n\n mousemove(event: ZRRawEvent) {\n const x = event.zrX;\n const y = event.zrY;\n\n const isOutside = isOutsideBoundary(this, x, y);\n\n let lastHovered = this._hovered;\n let lastHoveredTarget = lastHovered.target;\n\n // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call\n // (like 'setOption' or 'dispatchAction') in event handlers, we should find\n // lastHovered again here. Otherwise 'mouseout' can not be triggered normally.\n // See #6198.\n if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n lastHoveredTarget = lastHovered.target;\n }\n\n const hovered = this._hovered = isOutside ? new HoveredResult(x, y) : this.findHover(x, y);\n const hoveredTarget = hovered.target;\n\n const proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default');\n\n // Mouse out on previous hovered element\n if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(lastHovered, 'mouseout', event);\n }\n\n // Mouse moving on one element\n this.dispatchToElement(hovered, 'mousemove', event);\n\n // Mouse over on a new element\n if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(hovered, 'mouseover', event);\n }\n }\n\n mouseout(event: ZRRawEvent) {\n const eventControl = event.zrEventControl;\n\n if (eventControl !== 'only_globalout') {\n this.dispatchToElement(this._hovered, 'mouseout', event);\n }\n\n if (eventControl !== 'no_globalout') {\n // FIXME: if the pointer moving from the extra doms to realy \"outside\",\n // the `globalout` should have been triggered. But currently not.\n this.trigger('globalout', {type: 'globalout', event: event});\n }\n }\n\n /**\n * Resize\n */\n resize() {\n this._hovered = new HoveredResult(0, 0);\n }\n\n /**\n * Dispatch event\n */\n dispatch(eventName: HandlerName, eventArgs?: any) {\n const handler = this[eventName];\n handler && handler.call(this, eventArgs);\n }\n\n /**\n * Dispose\n */\n dispose() {\n\n this.proxy.dispose();\n\n this.storage = null;\n this.proxy = null;\n this.painter = null;\n }\n\n /**\n * 设置默认的cursor style\n * @param cursorStyle 例如 crosshair,默认为 'default'\n */\n setCursorStyle(cursorStyle: string) {\n const proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(cursorStyle);\n }\n\n /**\n * 事件分发代理\n *\n * @private\n * @param {Object} targetInfo {target, topTarget} 目标图形元素\n * @param {string} eventName 事件名称\n * @param {Object} event 事件对象\n */\n dispatchToElement(targetInfo: {\n target?: Element\n topTarget?: Element\n }, eventName: ElementEventName, event: ZRRawEvent) {\n\n targetInfo = targetInfo || {};\n\n let el = targetInfo.target as Element;\n if (el && el.silent) {\n return;\n }\n const eventKey = ('on' + eventName) as ElementEventNameWithOn;\n const eventPacket = makeEventPacket(eventName, targetInfo, event);\n\n while (el) {\n el[eventKey]\n && (eventPacket.cancelBubble = !!el[eventKey].call(el, eventPacket));\n\n el.trigger(eventName, eventPacket);\n\n // Bubble to the host if on the textContent.\n // PENDING\n el = el.__hostTarget ? el.__hostTarget : el.parent;\n\n if (eventPacket.cancelBubble) {\n break;\n }\n }\n\n if (!eventPacket.cancelBubble) {\n // 冒泡到顶级 zrender 对象\n this.trigger(eventName, eventPacket);\n // 分发事件到用户自定义层\n // 用户有可能在全局 click 事件中 dispose,所以需要判断下 painter 是否存在\n if (this.painter && (this.painter as CanvasPainter).eachOtherLayer) {\n (this.painter as CanvasPainter).eachOtherLayer(function (layer) {\n if (typeof (layer[eventKey]) === 'function') {\n layer[eventKey].call(layer, eventPacket);\n }\n if (layer.trigger) {\n layer.trigger(eventName, eventPacket);\n }\n });\n }\n }\n }\n\n findHover(x: number, y: number, exclude?: Displayable): HoveredResult {\n const list = this.storage.getDisplayList();\n const out = new HoveredResult(x, y);\n\n for (let i = list.length - 1; i >= 0; i--) {\n let hoverCheckResult;\n if (list[i] !== exclude\n // getDisplayList may include ignored item in VML mode\n && !list[i].ignore\n && (hoverCheckResult = isHover(list[i], x, y))\n ) {\n !out.topTarget && (out.topTarget = list[i]);\n if (hoverCheckResult !== SILENT) {\n out.target = list[i];\n break;\n }\n }\n }\n\n return out;\n }\n\n processGesture(event: ZRRawEvent, stage?: 'start' | 'end' | 'change') {\n if (!this._gestureMgr) {\n this._gestureMgr = new GestureMgr();\n }\n const gestureMgr = this._gestureMgr;\n\n stage === 'start' && gestureMgr.clear();\n\n const gestureInfo = gestureMgr.recognize(\n event as ZRRawTouchEvent,\n this.findHover(event.zrX, event.zrY, null).target,\n (this.proxy as HandlerDomProxy).dom\n );\n\n stage === 'end' && gestureMgr.clear();\n\n // Do not do any preventDefault here. Upper application do that if necessary.\n if (gestureInfo) {\n const type = gestureInfo.type;\n (event as ZRPinchEvent).gestureEvent = type;\n\n let res = new HoveredResult();\n res.target = gestureInfo.target;\n this.dispatchToElement(res, type as ElementEventName, gestureInfo.event as ZRRawEvent);\n }\n }\n\n click: (event: ZRRawEvent) => void\n mousedown: (event: ZRRawEvent) => void\n mouseup: (event: ZRRawEvent) => void\n mousewheel: (event: ZRRawEvent) => void\n dblclick: (event: ZRRawEvent) => void\n contextmenu: (event: ZRRawEvent) => void\n}\n\n// Common handlers\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name: HandlerName) {\n Handler.prototype[name] = function (event) {\n const x = event.zrX;\n const y = event.zrY;\n const isOutside = isOutsideBoundary(this, x, y);\n\n let hovered;\n let hoveredTarget;\n\n if (name !== 'mouseup' || !isOutside) {\n // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover\n hovered = this.findHover(x, y);\n hoveredTarget = hovered.target;\n }\n\n if (name === 'mousedown') {\n this._downEl = hoveredTarget;\n this._downPoint = [event.zrX, event.zrY];\n // In case click triggered before mouseup\n this._upEl = hoveredTarget;\n }\n else if (name === 'mouseup') {\n this._upEl = hoveredTarget;\n }\n else if (name === 'click') {\n if (this._downEl !== this._upEl\n // Original click event is triggered on the whole canvas element,\n // including the case that `mousedown` - `mousemove` - `mouseup`,\n // which should be filtered, otherwise it will bring trouble to\n // pan and zoom.\n || !this._downPoint\n // Arbitrary value\n || vec2.dist(this._downPoint, [event.zrX, event.zrY]) > 4\n ) {\n return;\n }\n this._downPoint = null;\n }\n\n this.dispatchToElement(hovered, name, event);\n };\n});\n\nfunction isHover(displayable: Displayable, x: number, y: number) {\n if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n let el: Element = displayable;\n let isSilent;\n let ignoreClip = false;\n while (el) {\n // Ignore clip on any ancestors.\n if (el.ignoreClip) {\n ignoreClip = true;\n }\n if (!ignoreClip) {\n let clipPath = el.getClipPath();\n // If clipped by ancestor.\n // FIXME: If clipPath has neither stroke nor fill,\n // el.clipPath.contain(x, y) will always return false.\n if (clipPath && !clipPath.contain(x, y)) {\n return false;\n }\n if (el.silent) {\n isSilent = true;\n }\n }\n // Consider when el is textContent, also need to be silent\n // if any of its host el and its ancestors is silent.\n const hostEl = el.__hostTarget;\n el = hostEl ? hostEl : el.parent;\n }\n return isSilent ? SILENT : true;\n }\n\n return false;\n}\n\n/**\n * See [DRAG_OUTSIDE].\n */\nfunction isOutsideBoundary(handlerInstance: Handler, x: number, y: number) {\n const painter = handlerInstance.painter;\n return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight();\n}\n\nexport default Handler;\n","// https://github.com/mziccard/node-timsort\nconst DEFAULT_MIN_MERGE = 32;\n\nconst DEFAULT_MIN_GALLOPING = 7;\n\nconst DEFAULT_TMP_STORAGE_LENGTH = 256;\n\ntype CompareFunc =(a: T, b: T) => number\n\nfunction minRunLength(n: number): number {\n var r = 0;\n\n while (n >= DEFAULT_MIN_MERGE) {\n r |= n & 1;\n n >>= 1;\n }\n\n return n + r;\n}\n\nfunction makeAscendingRun(array: T[], lo: number, hi: number, compare: CompareFunc) {\n var runHi = lo + 1;\n\n if (runHi === hi) {\n return 1;\n }\n\n if (compare(array[runHi++], array[lo]) < 0) {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n runHi++;\n }\n\n reverseRun(array, lo, runHi);\n }\n else {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n runHi++;\n }\n }\n\n return runHi - lo;\n}\n\nfunction reverseRun(array: T[], lo: number, hi: number) {\n hi--;\n\n while (lo < hi) {\n var t = array[lo];\n array[lo++] = array[hi];\n array[hi--] = t;\n }\n}\n\nfunction binaryInsertionSort(array: T[], lo: number, hi: number, start: number, compare: CompareFunc) {\n if (start === lo) {\n start++;\n }\n\n for (; start < hi; start++) {\n var pivot = array[start];\n\n var left = lo;\n var right = start;\n var mid;\n\n while (left < right) {\n mid = left + right >>> 1;\n\n if (compare(pivot, array[mid]) < 0) {\n right = mid;\n }\n else {\n left = mid + 1;\n }\n }\n\n var n = start - left;\n\n switch (n) {\n case 3:\n array[left + 3] = array[left + 2];\n\n case 2:\n array[left + 2] = array[left + 1];\n\n case 1:\n array[left + 1] = array[left];\n break;\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n n--;\n }\n }\n\n array[left] = pivot;\n }\n}\n\nfunction gallopLeft(value: T, array: T[], start: number, length: number, hint: number, compare: CompareFunc) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n\n if (compare(value, array[start + hint]) > 0) {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n lastOffset += hint;\n offset += hint;\n }\n else {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n\n if (compare(value, array[start + m]) > 0) {\n lastOffset = m + 1;\n }\n else {\n offset = m;\n }\n }\n return offset;\n}\n\nfunction gallopRight(value: T, array: T[], start: number, length: number, hint: number, compare: CompareFunc) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n\n if (compare(value, array[start + hint]) < 0) {\n maxOffset = hint + 1;\n\n while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n else {\n maxOffset = length - hint;\n\n while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n\n lastOffset += hint;\n offset += hint;\n }\n\n lastOffset++;\n\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n\n if (compare(value, array[start + m]) < 0) {\n offset = m;\n }\n else {\n lastOffset = m + 1;\n }\n }\n\n return offset;\n}\n\nfunction TimSort(array: T[], compare: CompareFunc) {\n let minGallop = DEFAULT_MIN_GALLOPING;\n let length = 0;\n let tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n let stackLength = 0;\n let runStart: number[];\n let runLength: number[];\n let stackSize = 0;\n\n length = array.length;\n\n if (length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n tmpStorageLength = length >>> 1;\n }\n\n var tmp: T[] = [];\n\n stackLength = length < 120 ? 5 : length < 1542 ? 10 : length < 119151 ? 19 : 40;\n\n runStart = [];\n runLength = [];\n\n function pushRun(_runStart: number, _runLength: number) {\n runStart[stackSize] = _runStart;\n runLength[stackSize] = _runLength;\n stackSize += 1;\n }\n\n function mergeRuns() {\n while (stackSize > 1) {\n var n = stackSize - 2;\n\n if (\n (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1])\n || (n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1])\n ) {\n if (runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n }\n else if (runLength[n] > runLength[n + 1]) {\n break;\n }\n mergeAt(n);\n }\n }\n\n function forceMergeRuns() {\n while (stackSize > 1) {\n var n = stackSize - 2;\n\n if (n > 0 && runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n\n mergeAt(n);\n }\n }\n\n function mergeAt(i: number) {\n var start1 = runStart[i];\n var length1 = runLength[i];\n var start2 = runStart[i + 1];\n var length2 = runLength[i + 1];\n\n runLength[i] = length1 + length2;\n\n if (i === stackSize - 3) {\n runStart[i + 1] = runStart[i + 2];\n runLength[i + 1] = runLength[i + 2];\n }\n\n stackSize--;\n\n var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n start1 += k;\n length1 -= k;\n\n if (length1 === 0) {\n return;\n }\n\n length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n\n if (length2 === 0) {\n return;\n }\n\n if (length1 <= length2) {\n mergeLow(start1, length1, start2, length2);\n }\n else {\n mergeHigh(start1, length1, start2, length2);\n }\n }\n\n function mergeLow(start1: number, length1: number, start2: number, length2: number) {\n var i = 0;\n\n for (i = 0; i < length1; i++) {\n tmp[i] = array[start1 + i];\n }\n\n var cursor1 = 0;\n var cursor2 = start2;\n var dest = start1;\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n return;\n }\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n return;\n }\n\n var _minGallop = minGallop;\n var count1;\n var count2;\n var exit;\n\n while (1) {\n count1 = 0;\n count2 = 0;\n exit = false;\n\n do {\n if (compare(array[cursor2], tmp[cursor1]) < 0) {\n array[dest++] = array[cursor2++];\n count2++;\n count1 = 0;\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n }\n else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n if (--length1 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < _minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n\n if (count1 !== 0) {\n for (i = 0; i < count1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n\n dest += count1;\n cursor1 += count1;\n length1 -= count1;\n if (length1 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest++] = array[cursor2++];\n\n if (--length2 === 0) {\n exit = true;\n break;\n }\n\n count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n\n if (count2 !== 0) {\n for (i = 0; i < count2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n\n dest += count2;\n cursor2 += count2;\n length2 -= count2;\n\n if (length2 === 0) {\n exit = true;\n break;\n }\n }\n array[dest++] = tmp[cursor1++];\n\n if (--length1 === 1) {\n exit = true;\n break;\n }\n\n _minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (_minGallop < 0) {\n _minGallop = 0;\n }\n\n _minGallop += 2;\n }\n\n minGallop = _minGallop;\n\n minGallop < 1 && (minGallop = 1);\n\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n }\n else if (length1 === 0) {\n throw new Error();\n // throw new Error('mergeLow preconditions were not respected');\n }\n else {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n }\n }\n\n function mergeHigh(start1: number, length1: number, start2: number, length2: number) {\n var i = 0;\n\n for (i = 0; i < length2; i++) {\n tmp[i] = array[start2 + i];\n }\n\n var cursor1 = start1 + length1 - 1;\n var cursor2 = length2 - 1;\n var dest = start2 + length2 - 1;\n var customCursor = 0;\n var customDest = 0;\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n customCursor = dest - (length2 - 1);\n\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n\n return;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n return;\n }\n\n var _minGallop = minGallop;\n\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n\n do {\n if (compare(tmp[cursor2], array[cursor1]) < 0) {\n array[dest--] = array[cursor1--];\n count1++;\n count2 = 0;\n if (--length1 === 0) {\n exit = true;\n break;\n }\n }\n else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n if (--length2 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < _minGallop);\n\n if (exit) {\n break;\n }\n\n do {\n count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n\n if (count1 !== 0) {\n dest -= count1;\n cursor1 -= count1;\n length1 -= count1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = count1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n if (length1 === 0) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = tmp[cursor2--];\n\n if (--length2 === 1) {\n exit = true;\n break;\n }\n\n count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n\n if (count2 !== 0) {\n dest -= count2;\n cursor2 -= count2;\n length2 -= count2;\n customDest = dest + 1;\n customCursor = cursor2 + 1;\n\n for (i = 0; i < count2; i++) {\n array[customDest + i] = tmp[customCursor + i];\n }\n\n if (length2 <= 1) {\n exit = true;\n break;\n }\n }\n\n array[dest--] = array[cursor1--];\n\n if (--length1 === 0) {\n exit = true;\n break;\n }\n\n _minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n if (exit) {\n break;\n }\n\n if (_minGallop < 0) {\n _minGallop = 0;\n }\n\n _minGallop += 2;\n }\n\n minGallop = _minGallop;\n\n if (minGallop < 1) {\n minGallop = 1;\n }\n\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n\n array[dest] = tmp[cursor2];\n }\n else if (length2 === 0) {\n throw new Error();\n // throw new Error('mergeHigh preconditions were not respected');\n }\n else {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n }\n }\n\n return {\n mergeRuns,\n forceMergeRuns,\n pushRun\n };\n}\n\nexport default function sort(\n array: T[],\n compare: CompareFunc,\n lo?: number, hi?: number\n) {\n if (!lo) {\n lo = 0;\n }\n if (!hi) {\n hi = array.length;\n }\n\n var remaining = hi - lo;\n\n if (remaining < 2) {\n return;\n }\n\n var runLength = 0;\n\n if (remaining < DEFAULT_MIN_MERGE) {\n runLength = makeAscendingRun(array, lo, hi, compare);\n binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n return;\n }\n\n var ts = TimSort(array, compare);\n\n var minRun = minRunLength(remaining);\n\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n if (runLength < minRun) {\n var force = remaining;\n if (force > minRun) {\n force = minRun;\n }\n\n binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n runLength = force;\n }\n\n ts.pushRun(lo, runLength);\n ts.mergeRuns();\n\n remaining -= runLength;\n lo += runLength;\n } while (remaining !== 0);\n\n ts.forceMergeRuns();\n}\n","// Bit masks to check which parts of element needs to be updated.\nexport const REDARAW_BIT = 1;\nexport const STYLE_CHANGED_BIT = 2;\nexport const SHAPE_CHANGED_BIT = 4;\n","import * as util from './core/util';\nimport env from './core/env';\nimport Group, { GroupLike } from './graphic/Group';\nimport Element from './Element';\n\n// Use timsort because in most case elements are partially sorted\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\nimport timsort from './core/timsort';\nimport Displayable from './graphic/Displayable';\nimport Path from './graphic/Path';\nimport { REDARAW_BIT } from './graphic/constants';\n\nlet invalidZErrorLogged = false;\nfunction logInvalidZError() {\n if (invalidZErrorLogged) {\n return;\n }\n invalidZErrorLogged = true;\n console.warn('z / z2 / zlevel of displayable is invalid, which may cause unexpected errors');\n}\n\nfunction shapeCompareFunc(a: Displayable, b: Displayable) {\n if (a.zlevel === b.zlevel) {\n if (a.z === b.z) {\n // if (a.z2 === b.z2) {\n // // FIXME Slow has renderidx compare\n // // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement\n // // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012\n // return a.__renderidx - b.__renderidx;\n // }\n return a.z2 - b.z2;\n }\n return a.z - b.z;\n }\n return a.zlevel - b.zlevel;\n}\n\nexport default class Storage {\n\n private _roots: Element[] = []\n\n private _displayList: Displayable[] = []\n\n private _displayListLen = 0\n\n traverse(\n cb: (this: T, el: Element) => void,\n context?: T\n ) {\n for (let i = 0; i < this._roots.length; i++) {\n this._roots[i].traverse(cb, context);\n }\n }\n\n /**\n * get a list of elements to be rendered\n *\n * @param {boolean} update whether to update elements before return\n * @param {DisplayParams} params options\n * @return {Displayable[]} a list of elements\n */\n getDisplayList(update?: boolean, includeIgnore?: boolean): Displayable[] {\n includeIgnore = includeIgnore || false;\n const displayList = this._displayList;\n // If displaylist is not created yet. Update force\n if (update || !displayList.length) {\n this.updateDisplayList(includeIgnore);\n }\n return displayList;\n }\n\n /**\n * 更新图形的绘制队列。\n * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中,\n * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列\n */\n updateDisplayList(includeIgnore?: boolean) {\n this._displayListLen = 0;\n\n const roots = this._roots;\n const displayList = this._displayList;\n for (let i = 0, len = roots.length; i < len; i++) {\n this._updateAndAddDisplayable(roots[i], null, includeIgnore);\n }\n\n displayList.length = this._displayListLen;\n\n env.canvasSupported && timsort(displayList, shapeCompareFunc);\n }\n\n private _updateAndAddDisplayable(\n el: Element,\n clipPaths: Path[],\n includeIgnore?: boolean\n ) {\n if (el.ignore && !includeIgnore) {\n return;\n }\n\n el.beforeUpdate();\n el.update();\n el.afterUpdate();\n\n const userSetClipPath = el.getClipPath();\n\n if (el.ignoreClip) {\n clipPaths = null;\n }\n else if (userSetClipPath) {\n\n // FIXME 效率影响\n if (clipPaths) {\n clipPaths = clipPaths.slice();\n }\n else {\n clipPaths = [];\n }\n\n let currentClipPath = userSetClipPath;\n let parentClipPath = el;\n // Recursively add clip path\n while (currentClipPath) {\n // clipPath 的变换是基于使用这个 clipPath 的元素\n // TODO: parent should be group type.\n currentClipPath.parent = parentClipPath as Group;\n currentClipPath.updateTransform();\n\n clipPaths.push(currentClipPath);\n\n parentClipPath = currentClipPath;\n currentClipPath = currentClipPath.getClipPath();\n }\n }\n\n // ZRText and Group and combining morphing Path may use children\n if ((el as GroupLike).childrenRef) {\n const children = (el as GroupLike).childrenRef();\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n\n // Force to mark as dirty if group is dirty\n if (el.__dirty) {\n child.__dirty |= REDARAW_BIT;\n }\n\n this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n }\n\n // Mark group clean here\n el.__dirty = 0;\n\n }\n else {\n const disp = el as Displayable;\n // Element is displayable\n if (clipPaths && clipPaths.length) {\n disp.__clipPaths = clipPaths;\n }\n else if (disp.__clipPaths && disp.__clipPaths.length > 0) {\n disp.__clipPaths = [];\n }\n\n // Avoid invalid z, z2, zlevel cause sorting error.\n if (isNaN(disp.z)) {\n logInvalidZError();\n disp.z = 0;\n }\n if (isNaN(disp.z2)) {\n logInvalidZError();\n disp.z2 = 0;\n }\n if (isNaN(disp.zlevel)) {\n logInvalidZError();\n disp.zlevel = 0;\n }\n\n this._displayList[this._displayListLen++] = disp;\n }\n\n // Add decal\n const decalEl = (el as Path).getDecalElement && (el as Path).getDecalElement();\n if (decalEl) {\n this._updateAndAddDisplayable(decalEl, clipPaths, includeIgnore);\n }\n\n // Add attached text element and guide line.\n const textGuide = el.getTextGuideLine();\n if (textGuide) {\n this._updateAndAddDisplayable(textGuide, clipPaths, includeIgnore);\n }\n\n const textEl = el.getTextContent();\n if (textEl) {\n this._updateAndAddDisplayable(textEl, clipPaths, includeIgnore);\n }\n }\n\n /**\n * 添加图形(Displayable)或者组(Group)到根节点\n */\n addRoot(el: Element) {\n if (el.__zr && el.__zr.storage === this) {\n return;\n }\n\n this._roots.push(el);\n }\n\n /**\n * 删除指定的图形(Displayable)或者组(Group)\n * @param el\n */\n delRoot(el: Element | Element[]) {\n\n if (el instanceof Array) {\n for (let i = 0, l = el.length; i < l; i++) {\n this.delRoot(el[i]);\n }\n return;\n }\n\n const idx = util.indexOf(this._roots, el);\n if (idx >= 0) {\n this._roots.splice(idx, 1);\n }\n }\n\n delAllRoots() {\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n\n return;\n }\n\n getRoots() {\n return this._roots;\n }\n\n /**\n * 清空并且释放Storage\n */\n dispose() {\n this._displayList = null;\n this._roots = null;\n }\n\n displayableSortFunc = shapeCompareFunc\n}","type RequestAnimationFrameType = typeof window.requestAnimationFrame\n\nlet requestAnimationFrame: RequestAnimationFrameType;\n\nrequestAnimationFrame = (\n\ttypeof window !== 'undefined'\n\t\t&& (\n\t\t\t(window.requestAnimationFrame && window.requestAnimationFrame.bind(window))\n\t\t\t// https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809\n\t\t\t|| ((window as any).msRequestAnimationFrame && (window as any).msRequestAnimationFrame.bind(window))\n\t\t\t|| (window as any).mozRequestAnimationFrame\n\t\t\t|| window.webkitRequestAnimationFrame\n\t\t)\n) || function (func: Parameters[0]): number {\n\treturn setTimeout(func, 16) as any;\n};\n\nexport default requestAnimationFrame;\n","/**\n * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js\n * @see http://sole.github.io/tween.js/examples/03_graphs.html\n * @exports zrender/animation/easing\n */\n\ntype easingFunc = (percent: number) => number;\n\nexport type AnimationEasing = keyof typeof easing | easingFunc | 'spline';\n\nconst easing = {\n /**\n * @param {number} k\n * @return {number}\n */\n linear(k: number) {\n return k;\n },\n\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticIn(k: number) {\n return k * k;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticOut(k: number) {\n return k * (2 - k);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quadraticInOut(k: number) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k;\n }\n return -0.5 * (--k * (k - 2) - 1);\n },\n\n // 三次方的缓动(t^3)\n /**\n * @param {number} k\n * @return {number}\n */\n cubicIn(k: number) {\n return k * k * k;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n cubicOut(k: number) {\n return --k * k * k + 1;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n cubicInOut(k: number) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k;\n }\n return 0.5 * ((k -= 2) * k * k + 2);\n },\n\n // 四次方的缓动(t^4)\n /**\n * @param {number} k\n * @return {number}\n */\n quarticIn(k: number) {\n return k * k * k * k;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quarticOut(k: number) {\n return 1 - (--k * k * k * k);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quarticInOut(k: number) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k;\n }\n return -0.5 * ((k -= 2) * k * k * k - 2);\n },\n\n // 五次方的缓动(t^5)\n /**\n * @param {number} k\n * @return {number}\n */\n quinticIn(k: number) {\n return k * k * k * k * k;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quinticOut(k: number) {\n return --k * k * k * k * k + 1;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n quinticInOut(k: number) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k * k;\n }\n return 0.5 * ((k -= 2) * k * k * k * k + 2);\n },\n\n // 正弦曲线的缓动(sin(t))\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalIn(k: number) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalOut(k: number) {\n return Math.sin(k * Math.PI / 2);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n sinusoidalInOut(k: number) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n },\n\n // 指数曲线的缓动(2^t)\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialIn(k: number) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialOut(k: number) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n exponentialInOut(k: number) {\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if ((k *= 2) < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n },\n\n // 圆形曲线的缓动(sqrt(1-t^2))\n /**\n * @param {number} k\n * @return {number}\n */\n circularIn(k: number) {\n return 1 - Math.sqrt(1 - k * k);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n circularOut(k: number) {\n return Math.sqrt(1 - (--k * k));\n },\n /**\n * @param {number} k\n * @return {number}\n */\n circularInOut(k: number) {\n if ((k *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n },\n\n // 创建类似于弹簧在停止前来回振荡的动画\n /**\n * @param {number} k\n * @return {number}\n */\n elasticIn(k: number) {\n let s;\n let a = 0.1;\n let p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n return -(a * Math.pow(2, 10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n /**\n * @param {number} k\n * @return {number}\n */\n elasticOut(k: number) {\n let s;\n let a = 0.1;\n let p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n return (a * Math.pow(2, -10 * k)\n * Math.sin((k - s) * (2 * Math.PI) / p) + 1);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n elasticInOut(k: number) {\n let s;\n let a = 0.1;\n let p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n if ((k *= 2) < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n return a * Math.pow(2, -10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\n },\n\n // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动\n /**\n * @param {number} k\n * @return {number}\n */\n backIn(k: number) {\n let s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n backOut(k: number) {\n let s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n /**\n * @param {number} k\n * @return {number}\n */\n backInOut(k: number) {\n let s = 1.70158 * 1.525;\n if ((k *= 2) < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n },\n\n // 创建弹跳效果\n /**\n * @param {number} k\n * @return {number}\n */\n bounceIn(k: number) {\n return 1 - easing.bounceOut(1 - k);\n },\n /**\n * @param {number} k\n * @return {number}\n */\n bounceOut(k: number) {\n if (k < (1 / 2.75)) {\n return 7.5625 * k * k;\n }\n else if (k < (2 / 2.75)) {\n return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n }\n else if (k < (2.5 / 2.75)) {\n return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n }\n else {\n return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n }\n },\n /**\n * @param {number} k\n * @return {number}\n */\n bounceInOut(k: number) {\n if (k < 0.5) {\n return easing.bounceIn(k * 2) * 0.5;\n }\n return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n }\n};\n\nexport default easing;","/**\n * 动画主控制器\n * @config target 动画对象,可以是数组,如果是数组的话会批量分发onframe等事件\n * @config life(1000) 动画时长\n * @config delay(0) 动画延迟时间\n * @config loop(true)\n * @config gap(0) 循环的间隔时间\n * @config onframe\n * @config easing(optional)\n * @config ondestroy(optional)\n * @config onrestart(optional)\n *\n * TODO pause\n */\n\nimport easingFuncs, {AnimationEasing} from './easing';\nimport type Animation from './Animation';\n\ntype OnframeCallback = (percent: number) => void;\ntype ondestroyCallback = () => void\ntype onrestartCallback = () => void\n\nexport type DeferredEventTypes = 'destroy' | 'restart'\n// type DeferredEventKeys = 'ondestroy' | 'onrestart'\n\nexport interface ClipProps {\n life?: number\n delay?: number\n loop?: boolean\n gap?: number\n easing?: AnimationEasing\n\n onframe?: OnframeCallback\n ondestroy?: ondestroyCallback\n onrestart?: onrestartCallback\n}\n\nexport default class Clip {\n\n // 生命周期\n private _life: number\n // 延时\n private _delay: number\n\n private _initialized: boolean = false\n // 开始时间\n private _startTime = 0 // 开始时间单位毫秒\n\n private _pausedTime = 0\n private _paused = false\n\n animation: Animation\n\n loop: boolean\n gap: number\n easing: AnimationEasing\n\n // For linked list. Readonly\n next: Clip\n prev: Clip\n\n onframe: OnframeCallback\n ondestroy: ondestroyCallback\n onrestart: onrestartCallback\n\n constructor(opts: ClipProps) {\n\n this._life = opts.life || 1000;\n\n this._delay = opts.delay || 0;\n\n // this._startTime = new Date().getTime() + this._delay;\n\n // 是否循环\n this.loop = opts.loop == null ? false : opts.loop;\n\n this.gap = opts.gap || 0;\n\n this.easing = opts.easing || 'linear';\n\n this.onframe = opts.onframe;\n this.ondestroy = opts.ondestroy;\n this.onrestart = opts.onrestart;\n }\n\n step(globalTime: number, deltaTime: number): boolean {\n // Set startTime on first step, or _startTime may has milleseconds different between clips\n // PENDING\n if (!this._initialized) {\n this._startTime = globalTime + this._delay;\n this._initialized = true;\n }\n\n if (this._paused) {\n this._pausedTime += deltaTime;\n return;\n }\n\n let percent = (globalTime - this._startTime - this._pausedTime) / this._life;\n\n // PENDING: Not begin yet. Still run the loop.\n // In the case callback needs to be invoked.\n // Or want to update to the begin state at next frame when `setToFinal` and `delay` are both used.\n // To avoid the unexpected blink.\n if (percent < 0) {\n percent = 0;\n }\n\n percent = Math.min(percent, 1);\n\n const easing = this.easing;\n const easingFunc = typeof easing === 'string'\n ? easingFuncs[easing as keyof typeof easingFuncs] : easing;\n const schedule = typeof easingFunc === 'function'\n ? easingFunc(percent)\n : percent;\n\n this.onframe && this.onframe(schedule);\n\n // 结束\n if (percent === 1) {\n if (this.loop) {\n this._restart(globalTime);\n this.onrestart && this.onrestart();\n }\n else {\n return true;\n }\n }\n\n return false;\n }\n\n private _restart(globalTime: number) {\n const remainder = (globalTime - this._startTime - this._pausedTime) % this._life;\n this._startTime = globalTime - remainder + this.gap;\n this._pausedTime = 0;\n }\n\n pause() {\n this._paused = true;\n }\n\n resume() {\n this._paused = false;\n }\n}","import { Dictionary } from './types';\n\n// Simple LRU cache use doubly linked list\n// @module zrender/core/LRU\n\nexport class Entry {\n\n value: T\n\n key: string | number\n\n next: Entry\n\n prev: Entry\n\n constructor(val: T) {\n this.value = val;\n }\n}\n/**\n * Simple double linked list. Compared with array, it has O(1) remove operation.\n * @constructor\n */\nexport class LinkedList {\n\n head: Entry\n tail: Entry\n\n private _len = 0\n\n /**\n * Insert a new value at the tail\n */\n insert(val: T): Entry {\n const entry = new Entry(val);\n this.insertEntry(entry);\n return entry;\n }\n\n /**\n * Insert an entry at the tail\n */\n insertEntry(entry: Entry) {\n if (!this.head) {\n this.head = this.tail = entry;\n }\n else {\n this.tail.next = entry;\n entry.prev = this.tail;\n entry.next = null;\n this.tail = entry;\n }\n this._len++;\n }\n\n /**\n * Remove entry.\n */\n remove(entry: Entry) {\n const prev = entry.prev;\n const next = entry.next;\n if (prev) {\n prev.next = next;\n }\n else {\n // Is head\n this.head = next;\n }\n if (next) {\n next.prev = prev;\n }\n else {\n // Is tail\n this.tail = prev;\n }\n entry.next = entry.prev = null;\n this._len--;\n }\n\n /**\n * Get length\n */\n len(): number {\n return this._len;\n }\n\n /**\n * Clear list\n */\n clear() {\n this.head = this.tail = null;\n this._len = 0;\n }\n\n}\n\n/**\n * LRU Cache\n */\nexport default class LRU {\n\n private _list = new LinkedList()\n\n private _maxSize = 10\n\n private _lastRemovedEntry: Entry\n\n private _map: Dictionary> = {}\n\n constructor(maxSize: number) {\n this._maxSize = maxSize;\n }\n\n /**\n * @return Removed value\n */\n put(key: string | number, value: T): T {\n const list = this._list;\n const map = this._map;\n let removed = null;\n if (map[key] == null) {\n const len = list.len();\n // Reuse last removed entry\n let entry = this._lastRemovedEntry;\n\n if (len >= this._maxSize && len > 0) {\n // Remove the least recently used\n const leastUsedEntry = list.head;\n list.remove(leastUsedEntry);\n delete map[leastUsedEntry.key];\n\n removed = leastUsedEntry.value;\n this._lastRemovedEntry = leastUsedEntry;\n }\n\n if (entry) {\n entry.value = value;\n }\n else {\n entry = new Entry(value);\n }\n entry.key = key;\n list.insertEntry(entry);\n map[key] = entry;\n }\n\n return removed;\n }\n\n get(key: string | number): T {\n const entry = this._map[key];\n const list = this._list;\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 /**\n * Clear the cache\n */\n clear() {\n this._list.clear();\n this._map = {};\n }\n\n len() {\n return this._list.len();\n }\n}","import LRU from '../core/LRU';\n\nconst kCSSColorTable = {\n 'transparent': [0, 0, 0, 0], 'aliceblue': [240, 248, 255, 1],\n 'antiquewhite': [250, 235, 215, 1], 'aqua': [0, 255, 255, 1],\n 'aquamarine': [127, 255, 212, 1], 'azure': [240, 255, 255, 1],\n 'beige': [245, 245, 220, 1], 'bisque': [255, 228, 196, 1],\n 'black': [0, 0, 0, 1], 'blanchedalmond': [255, 235, 205, 1],\n 'blue': [0, 0, 255, 1], 'blueviolet': [138, 43, 226, 1],\n 'brown': [165, 42, 42, 1], 'burlywood': [222, 184, 135, 1],\n 'cadetblue': [95, 158, 160, 1], 'chartreuse': [127, 255, 0, 1],\n 'chocolate': [210, 105, 30, 1], 'coral': [255, 127, 80, 1],\n 'cornflowerblue': [100, 149, 237, 1], 'cornsilk': [255, 248, 220, 1],\n 'crimson': [220, 20, 60, 1], 'cyan': [0, 255, 255, 1],\n 'darkblue': [0, 0, 139, 1], 'darkcyan': [0, 139, 139, 1],\n 'darkgoldenrod': [184, 134, 11, 1], 'darkgray': [169, 169, 169, 1],\n 'darkgreen': [0, 100, 0, 1], 'darkgrey': [169, 169, 169, 1],\n 'darkkhaki': [189, 183, 107, 1], 'darkmagenta': [139, 0, 139, 1],\n 'darkolivegreen': [85, 107, 47, 1], 'darkorange': [255, 140, 0, 1],\n 'darkorchid': [153, 50, 204, 1], 'darkred': [139, 0, 0, 1],\n 'darksalmon': [233, 150, 122, 1], 'darkseagreen': [143, 188, 143, 1],\n 'darkslateblue': [72, 61, 139, 1], 'darkslategray': [47, 79, 79, 1],\n 'darkslategrey': [47, 79, 79, 1], 'darkturquoise': [0, 206, 209, 1],\n 'darkviolet': [148, 0, 211, 1], 'deeppink': [255, 20, 147, 1],\n 'deepskyblue': [0, 191, 255, 1], 'dimgray': [105, 105, 105, 1],\n 'dimgrey': [105, 105, 105, 1], 'dodgerblue': [30, 144, 255, 1],\n 'firebrick': [178, 34, 34, 1], 'floralwhite': [255, 250, 240, 1],\n 'forestgreen': [34, 139, 34, 1], 'fuchsia': [255, 0, 255, 1],\n 'gainsboro': [220, 220, 220, 1], 'ghostwhite': [248, 248, 255, 1],\n 'gold': [255, 215, 0, 1], 'goldenrod': [218, 165, 32, 1],\n 'gray': [128, 128, 128, 1], 'green': [0, 128, 0, 1],\n 'greenyellow': [173, 255, 47, 1], 'grey': [128, 128, 128, 1],\n 'honeydew': [240, 255, 240, 1], 'hotpink': [255, 105, 180, 1],\n 'indianred': [205, 92, 92, 1], 'indigo': [75, 0, 130, 1],\n 'ivory': [255, 255, 240, 1], 'khaki': [240, 230, 140, 1],\n 'lavender': [230, 230, 250, 1], 'lavenderblush': [255, 240, 245, 1],\n 'lawngreen': [124, 252, 0, 1], 'lemonchiffon': [255, 250, 205, 1],\n 'lightblue': [173, 216, 230, 1], 'lightcoral': [240, 128, 128, 1],\n 'lightcyan': [224, 255, 255, 1], 'lightgoldenrodyellow': [250, 250, 210, 1],\n 'lightgray': [211, 211, 211, 1], 'lightgreen': [144, 238, 144, 1],\n 'lightgrey': [211, 211, 211, 1], 'lightpink': [255, 182, 193, 1],\n 'lightsalmon': [255, 160, 122, 1], 'lightseagreen': [32, 178, 170, 1],\n 'lightskyblue': [135, 206, 250, 1], 'lightslategray': [119, 136, 153, 1],\n 'lightslategrey': [119, 136, 153, 1], 'lightsteelblue': [176, 196, 222, 1],\n 'lightyellow': [255, 255, 224, 1], 'lime': [0, 255, 0, 1],\n 'limegreen': [50, 205, 50, 1], 'linen': [250, 240, 230, 1],\n 'magenta': [255, 0, 255, 1], 'maroon': [128, 0, 0, 1],\n 'mediumaquamarine': [102, 205, 170, 1], 'mediumblue': [0, 0, 205, 1],\n 'mediumorchid': [186, 85, 211, 1], 'mediumpurple': [147, 112, 219, 1],\n 'mediumseagreen': [60, 179, 113, 1], 'mediumslateblue': [123, 104, 238, 1],\n 'mediumspringgreen': [0, 250, 154, 1], 'mediumturquoise': [72, 209, 204, 1],\n 'mediumvioletred': [199, 21, 133, 1], 'midnightblue': [25, 25, 112, 1],\n 'mintcream': [245, 255, 250, 1], 'mistyrose': [255, 228, 225, 1],\n 'moccasin': [255, 228, 181, 1], 'navajowhite': [255, 222, 173, 1],\n 'navy': [0, 0, 128, 1], 'oldlace': [253, 245, 230, 1],\n 'olive': [128, 128, 0, 1], 'olivedrab': [107, 142, 35, 1],\n 'orange': [255, 165, 0, 1], 'orangered': [255, 69, 0, 1],\n 'orchid': [218, 112, 214, 1], 'palegoldenrod': [238, 232, 170, 1],\n 'palegreen': [152, 251, 152, 1], 'paleturquoise': [175, 238, 238, 1],\n 'palevioletred': [219, 112, 147, 1], 'papayawhip': [255, 239, 213, 1],\n 'peachpuff': [255, 218, 185, 1], 'peru': [205, 133, 63, 1],\n 'pink': [255, 192, 203, 1], 'plum': [221, 160, 221, 1],\n 'powderblue': [176, 224, 230, 1], 'purple': [128, 0, 128, 1],\n 'red': [255, 0, 0, 1], 'rosybrown': [188, 143, 143, 1],\n 'royalblue': [65, 105, 225, 1], 'saddlebrown': [139, 69, 19, 1],\n 'salmon': [250, 128, 114, 1], 'sandybrown': [244, 164, 96, 1],\n 'seagreen': [46, 139, 87, 1], 'seashell': [255, 245, 238, 1],\n 'sienna': [160, 82, 45, 1], 'silver': [192, 192, 192, 1],\n 'skyblue': [135, 206, 235, 1], 'slateblue': [106, 90, 205, 1],\n 'slategray': [112, 128, 144, 1], 'slategrey': [112, 128, 144, 1],\n 'snow': [255, 250, 250, 1], 'springgreen': [0, 255, 127, 1],\n 'steelblue': [70, 130, 180, 1], 'tan': [210, 180, 140, 1],\n 'teal': [0, 128, 128, 1], 'thistle': [216, 191, 216, 1],\n 'tomato': [255, 99, 71, 1], 'turquoise': [64, 224, 208, 1],\n 'violet': [238, 130, 238, 1], 'wheat': [245, 222, 179, 1],\n 'white': [255, 255, 255, 1], 'whitesmoke': [245, 245, 245, 1],\n 'yellow': [255, 255, 0, 1], 'yellowgreen': [154, 205, 50, 1]\n};\n\nfunction clampCssByte(i: number): number { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clampCssAngle(i: number): number { // Clamp to integer 0 .. 360.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 360 ? 360 : i;\n}\n\nfunction clampCssFloat(f: number): number { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parseCssInt(val: string | number): number { // int or percentage.\n let str = val as string;\n if (str.length && str.charAt(str.length - 1) === '%') {\n return clampCssByte(parseFloat(str) / 100 * 255);\n }\n return clampCssByte(parseInt(str, 10));\n}\n\nfunction parseCssFloat(val: string | number): number { // float or percentage.\n let str = val as string;\n if (str.length && str.charAt(str.length - 1) === '%') {\n return clampCssFloat(parseFloat(str) / 100);\n }\n return clampCssFloat(parseFloat(str));\n}\n\nfunction cssHueToRgb(m1: number, m2: number, h: number): number {\n if (h < 0) {\n h += 1;\n }\n else if (h > 1) {\n h -= 1;\n }\n\n if (h * 6 < 1) {\n return m1 + (m2 - m1) * h * 6;\n }\n if (h * 2 < 1) {\n return m2;\n }\n if (h * 3 < 2) {\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n }\n return m1;\n}\n\nfunction lerpNumber(a: number, b: number, p: number): number {\n return a + (b - a) * p;\n}\n\nfunction setRgba(out: number[], r: number, g: number, b: number, a: number): number[] {\n out[0] = r;\n out[1] = g;\n out[2] = b;\n out[3] = a;\n return out;\n}\nfunction copyRgba(out: number[], a: number[]) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n return out;\n}\n\nconst colorCache = new LRU(20);\nlet lastRemovedArr: number[] = null;\n\nfunction putToCache(colorStr: string, rgbaArr: number[]) {\n // Reuse removed array\n if (lastRemovedArr) {\n copyRgba(lastRemovedArr, rgbaArr);\n }\n lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice()));\n}\n\nexport function parse(colorStr: string, rgbaArr?: number[]): number[] {\n if (!colorStr) {\n return;\n }\n rgbaArr = rgbaArr || [];\n\n let cached = colorCache.get(colorStr);\n if (cached) {\n return copyRgba(rgbaArr, cached);\n }\n\n // colorStr may be not string\n colorStr = colorStr + '';\n // Remove all whitespace, not compliant, but should just be more accepting.\n let str = colorStr.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) {\n copyRgba(rgbaArr, kCSSColorTable[str as keyof typeof kCSSColorTable]);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n\n // supports the forms #rgb, #rrggbb, #rgba, #rrggbbaa\n // #rrggbbaa(use the last pair of digits as alpha)\n // see https://drafts.csswg.org/css-color/#hex-notation\n const strLen = str.length;\n if (str.charAt(0) === '#') {\n if (strLen === 4 || strLen === 5) {\n const iv = parseInt(str.slice(1, 4), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return; // Covers NaN.\n }\n // interpret values of the form #rgb as #rrggbb and #rgba as #rrggbbaa\n setRgba(rgbaArr,\n ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n strLen === 5 ? parseInt(str.slice(4), 16) / 0xf : 1\n );\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n else if (strLen === 7 || strLen === 9) {\n const iv = parseInt(str.slice(1, 7), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return; // Covers NaN.\n }\n setRgba(rgbaArr,\n (iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n strLen === 9 ? parseInt(str.slice(7), 16) / 0xff : 1\n );\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n\n return;\n }\n let op = str.indexOf('(');\n let ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === strLen) {\n let fname = str.substr(0, op);\n let params: (number | string)[] = str.substr(op + 1, ep - (op + 1)).split(',');\n let alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) {\n return params.length === 3\n // to be compatible with rgb\n ? setRgba(rgbaArr, +params[0], +params[1], +params[2], 1)\n : setRgba(rgbaArr, 0, 0, 0, 1);\n }\n alpha = parseCssFloat(params.pop() as string); // jshint ignore:line\n // Fall through.\n case 'rgb':\n if (params.length !== 3) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n setRgba(rgbaArr,\n parseCssInt(params[0]),\n parseCssInt(params[1]),\n parseCssInt(params[2]),\n alpha\n );\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n case 'hsla':\n if (params.length !== 4) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n params[3] = parseCssFloat(params[3] as string);\n hsla2rgba(params, rgbaArr);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n case 'hsl':\n if (params.length !== 3) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n hsla2rgba(params, rgbaArr);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n default:\n return;\n }\n }\n\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n}\n\nfunction hsla2rgba(hsla: (number | string) [], rgba?: number[]): number[] {\n const h = (((parseFloat(hsla[0] as string) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n const s = parseCssFloat(hsla[1]);\n const l = parseCssFloat(hsla[2]);\n const m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n const m1 = l * 2 - m2;\n\n rgba = rgba || [];\n setRgba(rgba,\n clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255),\n clampCssByte(cssHueToRgb(m1, m2, h) * 255),\n clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255),\n 1\n );\n\n if (hsla.length === 4) {\n rgba[3] = hsla[3] as number;\n }\n\n return rgba;\n}\n\nfunction rgba2hsla(rgba: number[]): number[] {\n if (!rgba) {\n return;\n }\n\n // RGB from 0 to 255\n const R = rgba[0] / 255;\n const G = rgba[1] / 255;\n const B = rgba[2] / 255;\n\n const vMin = Math.min(R, G, B); // Min. value of RGB\n const vMax = Math.max(R, G, B); // Max. value of RGB\n const delta = vMax - vMin; // Delta RGB value\n\n const L = (vMax + vMin) / 2;\n let H;\n let S;\n // HSL results from 0 to 1\n if (delta === 0) {\n H = 0;\n S = 0;\n }\n else {\n if (L < 0.5) {\n S = delta / (vMax + vMin);\n }\n else {\n S = delta / (2 - vMax - vMin);\n }\n\n const deltaR = (((vMax - R) / 6) + (delta / 2)) / delta;\n const deltaG = (((vMax - G) / 6) + (delta / 2)) / delta;\n const deltaB = (((vMax - B) / 6) + (delta / 2)) / delta;\n\n if (R === vMax) {\n H = deltaB - deltaG;\n }\n else if (G === vMax) {\n H = (1 / 3) + deltaR - deltaB;\n }\n else if (B === vMax) {\n H = (2 / 3) + deltaG - deltaR;\n }\n\n if (H < 0) {\n H += 1;\n }\n\n if (H > 1) {\n H -= 1;\n }\n }\n\n const hsla = [H * 360, S, L];\n\n if (rgba[3] != null) {\n hsla.push(rgba[3]);\n }\n\n return hsla;\n}\n\nexport function lift(color: string, level: number) {\n const colorArr = parse(color);\n if (colorArr) {\n for (let i = 0; i < 3; i++) {\n if (level < 0) {\n colorArr[i] = colorArr[i] * (1 - level) | 0;\n }\n else {\n colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0;\n }\n if (colorArr[i] > 255) {\n colorArr[i] = 255;\n }\n else if (colorArr[i] < 0) {\n colorArr[i] = 0;\n }\n }\n return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb');\n }\n}\n\nexport function toHex(color: string): string {\n const colorArr = parse(color);\n if (colorArr) {\n return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1);\n }\n}\n\n/**\n * Map value to color. Faster than lerp methods because color is represented by rgba array.\n * @param normalizedValue A float between 0 and 1.\n * @param colors List of rgba color array\n * @param out Mapped gba color array\n * @return will be null/undefined if input illegal.\n */\nexport function fastLerp(\n normalizedValue: number,\n colors: number[][],\n out?: number[]\n): number[] {\n if (!(colors && colors.length)\n || !(normalizedValue >= 0 && normalizedValue <= 1)\n ) {\n return;\n }\n\n out = out || [];\n\n const value = normalizedValue * (colors.length - 1);\n const leftIndex = Math.floor(value);\n const rightIndex = Math.ceil(value);\n const leftColor = colors[leftIndex];\n const rightColor = colors[rightIndex];\n const dv = value - leftIndex;\n out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv));\n out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv));\n out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv));\n out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv));\n\n return out;\n}\n\n/**\n * @deprecated\n */\nexport const fastMapToColor = fastLerp;\n\ntype LerpFullOutput = {\n color: string\n leftIndex: number\n rightIndex: number\n value: number\n}\n/**\n * @param normalizedValue A float between 0 and 1.\n * @param colors Color list.\n * @param fullOutput Default false.\n * @return Result color. If fullOutput,\n return {color: ..., leftIndex: ..., rightIndex: ..., value: ...},\n */\nexport function lerp(\n normalizedValue: number,\n colors: string[],\n fullOutput?: boolean\n): string | LerpFullOutput {\n if (!(colors && colors.length)\n || !(normalizedValue >= 0 && normalizedValue <= 1)\n ) {\n return;\n }\n\n const value = normalizedValue * (colors.length - 1);\n const leftIndex = Math.floor(value);\n const rightIndex = Math.ceil(value);\n const leftColor = parse(colors[leftIndex]);\n const rightColor = parse(colors[rightIndex]);\n const dv = value - leftIndex;\n\n const color = stringify(\n [\n clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)),\n clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)),\n clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)),\n clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv))\n ],\n 'rgba'\n );\n\n return fullOutput\n ? {\n color: color,\n leftIndex: leftIndex,\n rightIndex: rightIndex,\n value: value\n }\n : color;\n}\n\n/**\n * @deprecated\n */\nexport const mapToColor = lerp;\n\n/**\n * @param color\n * @param h 0 ~ 360, ignore when null.\n * @param s 0 ~ 1, ignore when null.\n * @param l 0 ~ 1, ignore when null.\n * @return Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nexport function modifyHSL(color: string, h?: number, s?: number, l?: number): string {\n let colorArr = parse(color);\n\n if (color) {\n colorArr = rgba2hsla(colorArr);\n h != null && (colorArr[0] = clampCssAngle(h));\n s != null && (colorArr[1] = parseCssFloat(s));\n l != null && (colorArr[2] = parseCssFloat(l));\n\n return stringify(hsla2rgba(colorArr), 'rgba');\n }\n}\n\n/**\n * @param color\n * @param alpha 0 ~ 1\n * @return Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nexport function modifyAlpha(color: string, alpha?: number): string {\n const colorArr = parse(color);\n\n if (colorArr && alpha != null) {\n colorArr[3] = clampCssFloat(alpha);\n return stringify(colorArr, 'rgba');\n }\n}\n\n/**\n * @param arrColor like [12,33,44,0.4]\n * @param type 'rgba', 'hsva', ...\n * @return Result color. (If input illegal, return undefined).\n */\nexport function stringify(arrColor: number[], type: string): string {\n if (!arrColor || !arrColor.length) {\n return;\n }\n let colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2];\n if (type === 'rgba' || type === 'hsva' || type === 'hsla') {\n colorStr += ',' + arrColor[3];\n }\n return type + '(' + colorStr + ')';\n}\n\n/**\n * Calculate luminance. It will include alpha.\n */\nexport function lum(color: string, backgroundLum: number) {\n const arr = parse(color);\n return arr\n ? (0.299 * arr[0] + 0.587 * arr[1] + 0.114 * arr[2]) * arr[3] / 255\n + (1 - arr[3]) * backgroundLum // Blending with assumed white background.\n : 0;\n}\n\n/**\n * Generate a random color\n */\nexport function random(): string {\n let r = Math.round(Math.random() * 255);\n let g = Math.round(Math.random() * 255);\n let b = Math.round(Math.random() * 255);\n\n return 'rgb(' + r + ',' + g + ',' + b + ')';\n}","/**\n * @module echarts/animation/Animator\n */\n\nimport Clip from './Clip';\nimport * as color from '../tool/color';\nimport {isArrayLike, keys, logError} from '../core/util';\nimport {ArrayLike, Dictionary} from '../core/types';\nimport { AnimationEasing } from './easing';\nimport Animation from './Animation';\n\ntype NumberArray = ArrayLike\ntype InterpolatableType = string | number | NumberArray | NumberArray[];\n\nconst arraySlice = Array.prototype.slice;\n\nexport function interpolateNumber(p0: number, p1: number, percent: number): number {\n return (p1 - p0) * percent + p0;\n}\n\nexport function step(p0: any, p1: any, percent: number): any {\n return percent > 0.5 ? p1 : p0;\n}\n\nexport function interpolate1DArray(\n out: NumberArray,\n p0: NumberArray,\n p1: NumberArray,\n percent: number\n) {\n // TODO Handling different length TypedArray\n const len = p0.length;\n for (let i = 0; i < len; i++) {\n out[i] = interpolateNumber(p0[i], p1[i], percent);\n }\n}\n\nexport function interpolate2DArray(\n out: NumberArray[],\n p0: NumberArray[],\n p1: NumberArray[],\n percent: number\n) {\n const len = p0.length;\n // TODO differnt length on each item?\n const len2 = len && p0[0].length;\n for (let i = 0; i < len; i++) {\n if (!out[i]) {\n out[i] = [];\n }\n for (let j = 0; j < len2; j++) {\n out[i][j] = interpolateNumber(p0[i][j], p1[i][j], percent);\n }\n }\n}\n\nfunction add1DArray(\n out: NumberArray,\n p0: NumberArray,\n p1: NumberArray,\n sign: 1 | -1\n) {\n const len = p0.length;\n for (let i = 0; i < len; i++) {\n out[i] = p0[i] + p1[i] * sign;\n }\n return out;\n}\n\nfunction add2DArray(\n out: NumberArray[],\n p0: NumberArray[],\n p1: NumberArray[],\n sign: 1 | -1\n) {\n const len = p0.length;\n const len2 = len && p0[0].length;\n for (let i = 0; i < len; i++) {\n if (!out[i]) {\n out[i] = [];\n }\n for (let j = 0; j < len2; j++) {\n out[i][j] = p0[i][j] + p1[i][j] * sign;\n }\n }\n return out;\n}\n// arr0 is source array, arr1 is target array.\n// Do some preprocess to avoid error happened when interpolating from arr0 to arr1\nfunction fillArray(\n val0: NumberArray | NumberArray[],\n val1: NumberArray | NumberArray[],\n arrDim: number\n) {\n // TODO Handling different length TypedArray\n let arr0 = val0 as (number | number[])[];\n let arr1 = val1 as (number | number[])[];\n if (!arr0.push || !arr1.push) {\n return;\n }\n const arr0Len = arr0.length;\n const arr1Len = arr1.length;\n if (arr0Len !== arr1Len) {\n // FIXME Not work for TypedArray\n const isPreviousLarger = arr0Len > arr1Len;\n if (isPreviousLarger) {\n // Cut the previous\n arr0.length = arr1Len;\n }\n else {\n // Fill the previous\n for (let i = arr0Len; i < arr1Len; i++) {\n arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]));\n }\n }\n }\n // Handling NaN value\n const len2 = arr0[0] && (arr0[0] as number[]).length;\n for (let i = 0; i < arr0.length; i++) {\n if (arrDim === 1) {\n if (isNaN(arr0[i] as number)) {\n arr0[i] = arr1[i];\n }\n }\n else {\n for (let j = 0; j < len2; j++) {\n if (isNaN((arr0 as number[][])[i][j])) {\n (arr0 as number[][])[i][j] = (arr1 as number[][])[i][j];\n }\n }\n }\n }\n}\n\nfunction is1DArraySame(arr0: NumberArray, arr1: NumberArray) {\n const len = arr0.length;\n if (len !== arr1.length) {\n return false;\n }\n for (let i = 0; i < len; i++) {\n if (arr0[i] !== arr1[i]) {\n return false;\n }\n }\n return true;\n}\n\n\n/**\n * Catmull Rom interpolate number\n */\nfunction catmullRomInterpolate(\n p0: number, p1: number, p2: number, p3: number, t: number, t2: number, t3: number\n) {\n const v0 = (p2 - p0) * 0.5;\n const v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3\n + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n + v0 * t + p1;\n}\n/**\n * Catmull Rom interpolate 1D array\n */\nfunction catmullRomInterpolate1DArray(\n out: NumberArray,\n p0: NumberArray,\n p1: NumberArray,\n p2: NumberArray,\n p3: NumberArray,\n t: number,\n t2: number,\n t3: number\n) {\n const len = p0.length;\n for (let i = 0; i < len; i++) {\n out[i] = catmullRomInterpolate(\n p0[i], p1[i], p2[i], p3[i], t, t2, t3\n );\n }\n}\n\n/**\n * Catmull Rom interpolate 2D array\n */\nfunction catmullRomInterpolate2DArray(\n out: NumberArray[],\n p0: NumberArray[],\n p1: NumberArray[],\n p2: NumberArray[],\n p3: NumberArray[],\n t: number,\n t2: number,\n t3: number\n) {\n const len = p0.length;\n const len2 = p0[0].length;\n for (let i = 0; i < len; i++) {\n if (!out[i]) {\n out[1] = [];\n }\n for (let j = 0; j < len2; j++) {\n out[i][j] = catmullRomInterpolate(\n p0[i][j], p1[i][j], p2[i][j], p3[i][j],\n t, t2, t3\n );\n }\n }\n}\n\n\nexport function cloneValue(value: InterpolatableType) {\n if (isArrayLike(value)) {\n const len = value.length;\n if (isArrayLike(value[0])) {\n const ret = [];\n for (let i = 0; i < len; i++) {\n ret.push(arraySlice.call(value[i]));\n }\n return ret;\n }\n\n return arraySlice.call(value);\n }\n\n return value;\n}\n\nfunction rgba2String(rgba: number[]): string {\n rgba[0] = Math.floor(rgba[0]);\n rgba[1] = Math.floor(rgba[1]);\n rgba[2] = Math.floor(rgba[2]);\n\n return 'rgba(' + rgba.join(',') + ')';\n}\n\nfunction guessArrayDim(value: ArrayLike): number {\n return isArrayLike(value && (value as ArrayLike)[0]) ? 2 : 1;\n}\n\ntype Keyframe = {\n time: number\n value: unknown\n percent: number\n\n additiveValue?: unknown\n}\n\nlet tmpRgba: number[] = [0, 0, 0, 0];\nclass Track {\n\n keyframes: Keyframe[] = []\n maxTime: number = 0\n\n propName: string\n\n /**\n * If use spline interpolate\n */\n useSpline: boolean\n\n // Larger than 0 if value is array\n arrDim: number = 0\n isValueColor: boolean\n\n interpolable: boolean = true\n\n private _finished: boolean\n\n private _needsSort: boolean = false\n\n private _isAllValueEqual = true\n\n private _additiveTrack: Track\n // Temporal storage for interpolated additive value.\n private _additiveValue: unknown\n\n // Info for run\n private _lastFrame = 0\n private _lastFramePercent = 0\n\n constructor(propName: string) {\n this.propName = propName;\n }\n\n isFinished() {\n return this._finished;\n }\n\n setFinished() {\n this._finished = true;\n // Also set additive track to finished.\n // Make sure the final value stopped on the latest track\n if (this._additiveTrack) {\n this._additiveTrack.setFinished();\n }\n }\n\n needsAnimate() {\n return !this._isAllValueEqual\n && this.keyframes.length >= 2\n && this.interpolable\n && this.maxTime > 0;\n }\n\n getAdditiveTrack() {\n return this._additiveTrack;\n }\n\n addKeyframe(time: number, value: unknown) {\n if (time >= this.maxTime) {\n this.maxTime = time;\n }\n else {\n this._needsSort = true;\n }\n\n let keyframes = this.keyframes;\n\n let len = keyframes.length;\n\n if (this.interpolable) {\n // Handling values only if it's possible to be interpolated.\n if (isArrayLike(value)) {\n let arrayDim = guessArrayDim(value);\n if (len > 0 && this.arrDim !== arrayDim) { // Two values has differnt dimension.\n this.interpolable = false;\n return;\n }\n // Not a number array.\n if (arrayDim === 1 && typeof value[0] !== 'number'\n || arrayDim === 2 && typeof value[0][0] !== 'number') {\n this.interpolable = false;\n return;\n }\n if (len > 0) {\n let lastFrame = keyframes[len - 1];\n\n // For performance consideration. only check 1d array\n if (this._isAllValueEqual) {\n if (arrayDim === 1) {\n if (!is1DArraySame(value, lastFrame.value as number[])) {\n this._isAllValueEqual = false;\n }\n }\n else {\n this._isAllValueEqual = false;\n }\n }\n }\n this.arrDim = arrayDim;\n }\n else {\n if (this.arrDim > 0) { // Previous value is array.\n this.interpolable = false;\n return;\n }\n\n if (typeof value === 'string') {\n const colorArray = color.parse(value);\n if (colorArray) {\n value = colorArray;\n this.isValueColor = true;\n }\n else {\n this.interpolable = false;\n }\n }\n else if (typeof value !== 'number' || isNaN(value)) {\n this.interpolable = false;\n return;\n }\n\n if (this._isAllValueEqual && len > 0) {\n let lastFrame = keyframes[len - 1];\n if (this.isValueColor && !is1DArraySame(lastFrame.value as number[], value as number[])) {\n this._isAllValueEqual = false;\n }\n else if (lastFrame.value !== value) {\n this._isAllValueEqual = false;\n }\n }\n }\n }\n\n const kf = {\n time,\n value,\n percent: 0\n };\n // Not check if value equal here.\n this.keyframes.push(kf);\n return kf;\n }\n\n prepare(additiveTrack?: Track) {\n let kfs = this.keyframes;\n if (this._needsSort) {\n // Sort keyframe as ascending\n kfs.sort(function (a: Keyframe, b: Keyframe) {\n return a.time - b.time;\n });\n }\n\n const arrDim = this.arrDim;\n const kfsLen = kfs.length;\n const lastKf = kfs[kfsLen - 1];\n\n for (let i = 0; i < kfsLen; i++) {\n kfs[i].percent = kfs[i].time / this.maxTime;\n\n if (arrDim > 0 && i !== kfsLen - 1) {\n // Align array with target frame.\n fillArray(kfs[i].value as NumberArray, lastKf.value as NumberArray, arrDim);\n }\n }\n\n // Only apply additive animaiton on INTERPOLABLE SAME TYPE values.\n if (additiveTrack\n // If two track both will be animated and have same value format.\n && this.needsAnimate()\n && additiveTrack.needsAnimate()\n && arrDim === additiveTrack.arrDim\n && this.isValueColor === additiveTrack.isValueColor\n && !additiveTrack._finished\n ) {\n this._additiveTrack = additiveTrack;\n\n const startValue = kfs[0].value;\n // Calculate difference\n for (let i = 0; i < kfsLen; i++) {\n if (arrDim === 0) {\n if (this.isValueColor) {\n kfs[i].additiveValue =\n add1DArray([], kfs[i].value as NumberArray, startValue as NumberArray, -1);\n }\n else {\n kfs[i].additiveValue = kfs[i].value as number - (startValue as number);\n }\n }\n else if (arrDim === 1) {\n kfs[i].additiveValue = add1DArray(\n [],\n kfs[i].value as NumberArray,\n startValue as NumberArray,\n -1\n );\n }\n else if (arrDim === 2) {\n kfs[i].additiveValue = add2DArray(\n [],\n kfs[i].value as NumberArray[],\n startValue as NumberArray[],\n -1\n );\n }\n }\n }\n }\n\n step(target: any, percent: number) {\n if (this._finished) { // Track may be set to finished.\n return;\n }\n\n if (this._additiveTrack && this._additiveTrack._finished) {\n // Remove additive track if it's finished.\n this._additiveTrack = null;\n }\n const isAdditive = this._additiveTrack != null;\n const valueKey = isAdditive ? 'additiveValue' : 'value';\n\n const keyframes = this.keyframes;\n const kfsNum = this.keyframes.length;\n const propName = this.propName;\n const arrDim = this.arrDim;\n const isValueColor = this.isValueColor;\n // Find the range keyframes\n // kf1-----kf2---------current--------kf3\n // find kf2 and kf3 and do interpolation\n let frameIdx;\n // In the easing function like elasticOut, percent may less than 0\n if (percent < 0) {\n frameIdx = 0;\n }\n else if (percent < this._lastFramePercent) {\n // Start from next key\n // PENDING start from lastFrame ?\n const start = Math.min(this._lastFrame + 1, kfsNum - 1);\n for (frameIdx = start; frameIdx >= 0; frameIdx--) {\n if (keyframes[frameIdx].percent <= percent) {\n break;\n }\n }\n // PENDING really need to do this ?\n frameIdx = Math.min(frameIdx, kfsNum - 2);\n }\n else {\n for (frameIdx = this._lastFrame; frameIdx < kfsNum; frameIdx++) {\n if (keyframes[frameIdx].percent > percent) {\n break;\n }\n }\n frameIdx = Math.min(frameIdx - 1, kfsNum - 2);\n }\n let nextFrame = keyframes[frameIdx + 1];\n let frame = keyframes[frameIdx];\n\n // Defensive coding.\n if (!(frame && nextFrame)) {\n return;\n }\n\n this._lastFrame = frameIdx;\n this._lastFramePercent = percent;\n\n\n const range = (nextFrame.percent - frame.percent);\n if (range === 0) {\n return;\n }\n const w = (percent - frame.percent) / range;\n\n // If value is arr\n let targetArr = isAdditive ? this._additiveValue\n : (isValueColor ? tmpRgba : target[propName]);\n\n if ((arrDim > 0 || isValueColor) && !targetArr) {\n targetArr = this._additiveValue = [];\n }\n if (this.useSpline) {\n const p1 = keyframes[frameIdx][valueKey];\n const p0 = keyframes[frameIdx === 0 ? frameIdx : frameIdx - 1][valueKey];\n const p2 = keyframes[frameIdx > kfsNum - 2 ? kfsNum - 1 : frameIdx + 1][valueKey];\n const p3 = keyframes[frameIdx > kfsNum - 3 ? kfsNum - 1 : frameIdx + 2][valueKey];\n\n if (arrDim > 0) {\n arrDim === 1\n ? catmullRomInterpolate1DArray(\n targetArr as NumberArray,\n p0 as NumberArray,\n p1 as NumberArray,\n p2 as NumberArray,\n p3 as NumberArray,\n w, w * w, w * w * w\n )\n : catmullRomInterpolate2DArray(\n targetArr as NumberArray[],\n p0 as NumberArray[], p1 as NumberArray[], p2 as NumberArray[], p3 as NumberArray[],\n w, w * w, w * w * w\n );\n }\n else if (isValueColor) {\n catmullRomInterpolate1DArray(\n targetArr,\n p0 as NumberArray, p1 as NumberArray, p2 as NumberArray, p3 as NumberArray,\n w, w * w, w * w * w\n );\n if (!isAdditive) { // Convert to string later:)\n target[propName] = rgba2String(targetArr);\n }\n }\n else {\n let value;\n if (!this.interpolable) {\n // String is step(0.5)\n // value = step(p1, p2, w);\n value = p2;\n }\n else {\n value = catmullRomInterpolate(\n p0 as number, p1 as number, p2 as number, p3 as number,\n w, w * w, w * w * w\n );\n }\n if (isAdditive) {\n this._additiveValue = value;\n }\n else {\n target[propName] = value;\n }\n }\n }\n else {\n if (arrDim > 0) {\n arrDim === 1\n ? interpolate1DArray(\n targetArr as NumberArray,\n frame[valueKey] as NumberArray,\n nextFrame[valueKey] as NumberArray,\n w\n )\n : interpolate2DArray(\n targetArr as NumberArray[],\n frame[valueKey] as NumberArray[],\n nextFrame[valueKey] as NumberArray[],\n w\n );\n }\n else if (isValueColor) {\n interpolate1DArray(\n targetArr,\n frame[valueKey] as NumberArray,\n nextFrame[valueKey] as NumberArray,\n w\n );\n if (!isAdditive) { // Convert to string later:)\n target[propName] = rgba2String(targetArr);\n }\n }\n else {\n let value;\n if (!this.interpolable) {\n // String is step(0.5)\n value = step(frame[valueKey], nextFrame[valueKey], w);\n }\n else {\n value = interpolateNumber(frame[valueKey] as number, nextFrame[valueKey] as number, w);\n }\n if (isAdditive) {\n this._additiveValue = value;\n }\n else {\n target[propName] = value;\n }\n }\n }\n\n // Add additive to target\n if (isAdditive) {\n this._addToTarget(target);\n }\n }\n\n private _addToTarget(target: any) {\n const arrDim = this.arrDim;\n const propName = this.propName;\n const additiveValue = this._additiveValue;\n\n if (arrDim === 0) {\n if (this.isValueColor) {\n // TODO reduce unnecessary parse\n color.parse(target[propName], tmpRgba);\n add1DArray(tmpRgba, tmpRgba, additiveValue as NumberArray, 1);\n target[propName] = rgba2String(tmpRgba);\n }\n else {\n // Add a difference value based on the change of previous frame.\n target[propName] = target[propName] + additiveValue;\n }\n }\n else if (arrDim === 1) {\n add1DArray(target[propName], target[propName], additiveValue as NumberArray, 1);\n }\n else if (arrDim === 2) {\n add2DArray(target[propName], target[propName], additiveValue as NumberArray[], 1);\n }\n }\n}\n\n\ntype DoneCallback = () => void;\ntype AbortCallback = () => void;\nexport type OnframeCallback = (target: T, percent: number) => void;\n\nexport type AnimationPropGetter = (target: T, key: string) => InterpolatableType;\nexport type AnimationPropSetter = (target: T, key: string, value: InterpolatableType) => void;\n\nexport default class Animator {\n\n animation?: Animation\n\n targetName?: string\n\n scope?: string\n\n __fromStateTransition?: string\n\n private _tracks: Dictionary = {}\n private _trackKeys: string[] = []\n\n private _target: T\n\n private _loop: boolean\n private _delay = 0\n private _maxTime = 0\n\n // Some status\n private _paused = false\n // 0: Not started\n // 1: Invoked started\n // 2: Has been run for at least one frame.\n private _started = 0\n\n private _additiveAnimators: Animator[]\n\n private _doneCbs: DoneCallback[]\n private _onframeCbs: OnframeCallback[]\n\n private _abortedCbs: AbortCallback[]\n\n private _clip: Clip = null\n\n constructor(target: T, loop: boolean, additiveTo?: Animator[]) {\n this._target = target;\n this._loop = loop;\n if (loop && additiveTo) {\n logError('Can\\' use additive animation on looped animation.');\n return;\n }\n this._additiveAnimators = additiveTo;\n }\n\n getTarget() {\n return this._target;\n }\n\n /**\n * Target can be changed during animation\n * For example if style is changed during state change.\n * We need to change target to the new style object.\n */\n changeTarget(target: T) {\n this._target = target;\n }\n\n /**\n * Set Animation keyframe\n * @param time 关键帧时间,单位是ms\n * @param props 关键帧的属性值,key-value表示\n */\n when(time: number, props: Dictionary) {\n return this.whenWithKeys(time, props, keys(props) as string[]);\n }\n\n\n // Fast path for add keyframes of aniamteTo\n whenWithKeys(time: number, props: Dictionary, propNames: string[]) {\n const tracks = this._tracks;\n for (let i = 0; i < propNames.length; i++) {\n const propName = propNames[i];\n\n let track = tracks[propName];\n if (!track) {\n track = tracks[propName] = new Track(propName);\n\n let initialValue;\n const additiveTrack = this._getAdditiveTrack(propName);\n if (additiveTrack) {\n const lastFinalKf = additiveTrack.keyframes[additiveTrack.keyframes.length - 1];\n // Use the last state of additived animator.\n initialValue = lastFinalKf && lastFinalKf.value;\n if (additiveTrack.isValueColor && initialValue) {\n // Convert to rgba string\n initialValue = rgba2String(initialValue as number[]);\n }\n }\n else {\n initialValue = (this._target as any)[propName];\n }\n // Invalid value\n if (initialValue == null) {\n // zrLog('Invalid property ' + propName);\n continue;\n }\n // If time is 0\n // Then props is given initialize value\n // Else\n // Initialize value from current prop value\n if (time !== 0) {\n track.addKeyframe(0, cloneValue(initialValue));\n }\n\n this._trackKeys.push(propName);\n }\n // PENDING\n track.addKeyframe(time, cloneValue(props[propName]));\n }\n this._maxTime = Math.max(this._maxTime, time);\n return this;\n }\n\n pause() {\n this._clip.pause();\n this._paused = true;\n }\n\n resume() {\n this._clip.resume();\n this._paused = false;\n }\n\n isPaused(): boolean {\n return !!this._paused;\n }\n\n private _doneCallback() {\n this._setTracksFinished();\n // Clear clip\n this._clip = null;\n\n const doneList = this._doneCbs;\n if (doneList) {\n const len = doneList.length;\n for (let i = 0; i < len; i++) {\n doneList[i].call(this);\n }\n }\n }\n private _abortedCallback() {\n this._setTracksFinished();\n\n const animation = this.animation;\n const abortedList = this._abortedCbs;\n\n if (animation) {\n animation.removeClip(this._clip);\n }\n this._clip = null;\n\n if (abortedList) {\n for (let i = 0; i < abortedList.length; i++) {\n abortedList[i].call(this);\n }\n }\n }\n private _setTracksFinished() {\n const tracks = this._tracks;\n const tracksKeys = this._trackKeys;\n for (let i = 0; i < tracksKeys.length; i++) {\n tracks[tracksKeys[i]].setFinished();\n }\n }\n\n private _getAdditiveTrack(trackName: string): Track {\n let additiveTrack;\n const additiveAnimators = this._additiveAnimators;\n if (additiveAnimators) {\n for (let i = 0; i < additiveAnimators.length; i++) {\n const track = additiveAnimators[i].getTrack(trackName);\n if (track) {\n // Use the track of latest animator.\n additiveTrack = track;\n }\n }\n }\n return additiveTrack;\n }\n\n /**\n * Start the animation\n * @param easing\n * @param forceAnimate\n * @return\n */\n start(easing?: AnimationEasing, forceAnimate?: boolean) {\n if (this._started > 0) {\n return;\n }\n this._started = 1;\n\n const self = this;\n\n let tracks: Track[] = [];\n for (let i = 0; i < this._trackKeys.length; i++) {\n const propName = this._trackKeys[i];\n const track = this._tracks[propName];\n const additiveTrack = this._getAdditiveTrack(propName);\n const kfs = track.keyframes;\n track.prepare(additiveTrack);\n if (track.needsAnimate()) {\n tracks.push(track);\n }\n else if (!track.interpolable) {\n const lastKf = kfs[kfs.length - 1];\n // Set final value.\n if (lastKf) {\n (self._target as any)[track.propName] = lastKf.value;\n }\n }\n }\n // Add during callback on the last clip\n if (tracks.length || forceAnimate) {\n const clip = new Clip({\n life: this._maxTime,\n loop: this._loop,\n delay: this._delay,\n onframe(percent: number) {\n self._started = 2;\n // Remove additived animator if it's finished.\n // For the purpose of memory effeciency.\n const additiveAnimators = self._additiveAnimators;\n if (additiveAnimators) {\n let stillHasAdditiveAnimator = false;\n for (let i = 0; i < additiveAnimators.length; i++) {\n if (additiveAnimators[i]._clip) {\n stillHasAdditiveAnimator = true;\n break;\n }\n }\n if (!stillHasAdditiveAnimator) {\n self._additiveAnimators = null;\n }\n }\n\n for (let i = 0; i < tracks.length; i++) {\n // NOTE: don't cache target outside.\n // Because target may be changed.\n tracks[i].step(self._target, percent);\n }\n const onframeList = self._onframeCbs;\n if (onframeList) {\n for (let i = 0; i < onframeList.length; i++) {\n onframeList[i](self._target, percent);\n }\n }\n },\n ondestroy() {\n self._doneCallback();\n }\n });\n this._clip = clip;\n\n if (this.animation) {\n this.animation.addClip(clip);\n }\n\n if (easing && easing !== 'spline') {\n clip.easing = easing;\n }\n }\n else {\n // This optimization will help the case that in the upper application\n // the view may be refreshed frequently, where animation will be\n // called repeatly but nothing changed.\n this._doneCallback();\n }\n\n return this;\n }\n /**\n * Stop animation\n * @param {boolean} forwardToLast If move to last frame before stop\n */\n stop(forwardToLast?: boolean) {\n if (!this._clip) {\n return;\n }\n const clip = this._clip;\n if (forwardToLast) {\n // Move to last frame before stop\n clip.onframe(1);\n }\n\n this._abortedCallback();\n }\n /**\n * Set when animation delay starts\n * @param time 单位ms\n */\n delay(time: number) {\n this._delay = time;\n return this;\n }\n /**\n * 添加动画每一帧的回调函数\n * @param callback\n */\n during(cb: OnframeCallback) {\n if (cb) {\n if (!this._onframeCbs) {\n this._onframeCbs = [];\n }\n this._onframeCbs.push(cb);\n }\n return this;\n }\n /**\n * Add callback for animation end\n * @param cb\n */\n done(cb: DoneCallback) {\n if (cb) {\n if (!this._doneCbs) {\n this._doneCbs = [];\n }\n this._doneCbs.push(cb);\n }\n return this;\n }\n\n aborted(cb: AbortCallback) {\n if (cb) {\n if (!this._abortedCbs) {\n this._abortedCbs = [];\n }\n this._abortedCbs.push(cb);\n }\n return this;\n }\n\n getClip() {\n return this._clip;\n }\n\n getTrack(propName: string) {\n return this._tracks[propName];\n }\n\n /**\n * Return true if animator is not available anymore.\n */\n stopTracks(propNames: string[], forwardToLast?: boolean): boolean {\n if (!propNames.length || !this._clip) {\n return true;\n }\n const tracks = this._tracks;\n const tracksKeys = this._trackKeys;\n\n for (let i = 0; i < propNames.length; i++) {\n const track = tracks[propNames[i]];\n if (track) {\n if (forwardToLast) {\n track.step(this._target, 1);\n }\n // If the track has not been run for at least wrong frame.\n // The property may be stayed at the final state. when setToFinal is set true.\n // For example:\n // Animate x from 0 to 100, then animate to 150 immediately.\n // We want the x is translated from 0 to 150, not 100 to 150.\n else if (this._started === 1) {\n track.step(this._target, 0);\n }\n // Set track to finished\n track.setFinished();\n }\n }\n let allAborted = true;\n for (let i = 0; i < tracksKeys.length; i++) {\n if (!tracks[tracksKeys[i]].isFinished()) {\n allAborted = false;\n break;\n }\n }\n // Remove clip if all tracks has been aborted.\n if (allAborted) {\n this._abortedCallback();\n }\n\n return allAborted;\n }\n\n /**\n * Save values of final state to target.\n * It is mainly used in state mangement. When state is switching during animation.\n * We need to save final state of animation to the normal state. Not interpolated value.\n */\n saveFinalToTarget(target: T, trackKeys?: readonly string[]) {\n if (!target) { // DO nothing if target is not given.\n return;\n }\n\n trackKeys = trackKeys || this._trackKeys;\n\n for (let i = 0; i < trackKeys.length; i++) {\n const propName = trackKeys[i];\n const track = this._tracks[propName];\n if (!track || track.isFinished()) { // Ignore finished track.\n continue;\n }\n const kfs = track.keyframes;\n const lastKf = kfs[kfs.length - 1];\n if (lastKf) {\n // TODO CLONE?\n let val: unknown = cloneValue(lastKf.value as any);\n if (track.isValueColor) {\n val = rgba2String(val as number[]);\n }\n\n (target as any)[propName] = val;\n }\n }\n }\n\n // Change final value after animator has been started.\n // NOTE: Be careful to use it.\n __changeFinalValue(finalProps: Dictionary, trackKeys?: readonly string[]) {\n trackKeys = trackKeys || keys(finalProps);\n\n for (let i = 0; i < trackKeys.length; i++) {\n const propName = trackKeys[i];\n\n const track = this._tracks[propName];\n if (!track) {\n continue;\n }\n\n const kfs = track.keyframes;\n if (kfs.length > 1) {\n // Remove the original last kf and add again.\n const lastKf = kfs.pop();\n\n track.addKeyframe(lastKf.time, finalProps[propName]);\n // Prepare again.\n track.prepare(track.getAdditiveTrack());\n }\n }\n }\n\n}","/**\n * Animation main class, dispatch and manage all animation controllers\n *\n */\n// TODO Additive animation\n// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/\n// https://developer.apple.com/videos/wwdc2014/#236\n\nimport Eventful from '../core/Eventful';\nimport requestAnimationFrame from './requestAnimationFrame';\nimport Animator from './Animator';\nimport Clip from './Clip';\n\n\ninterface Stage {\n update?: () => void\n}\ntype OnframeCallback = (deltaTime: number) => void\n\ninterface AnimationOption {\n stage?: Stage\n onframe?: OnframeCallback\n}\n/**\n * @example\n * const animation = new Animation();\n * const obj = {\n * x: 100,\n * y: 100\n * };\n * animation.animate(node.position)\n * .when(1000, {\n * x: 500,\n * y: 500\n * })\n * .when(2000, {\n * x: 100,\n * y: 100\n * })\n * .start('spline');\n */\n\nexport default class Animation extends Eventful {\n\n stage: Stage\n\n onframe: OnframeCallback\n\n // Use linked list to store clip\n private _clipsHead: Clip\n private _clipsTail: Clip\n\n private _running: boolean = false\n\n private _time: number = 0\n private _pausedTime: number = 0\n private _pauseStart: number = 0\n\n private _paused = false;\n\n constructor(opts?: AnimationOption) {\n super();\n\n opts = opts || {};\n\n this.stage = opts.stage || {};\n\n this.onframe = opts.onframe || function () {};\n }\n\n /**\n * Add clip\n */\n addClip(clip: Clip) {\n if (clip.animation) {\n // Clip has been added\n this.removeClip(clip);\n }\n\n if (!this._clipsHead) {\n this._clipsHead = this._clipsTail = clip;\n }\n else {\n this._clipsTail.next = clip;\n clip.prev = this._clipsTail;\n clip.next = null;\n this._clipsTail = clip;\n }\n clip.animation = this;\n }\n /**\n * Add animator\n */\n addAnimator(animator: Animator) {\n animator.animation = this;\n const clip = animator.getClip();\n if (clip) {\n this.addClip(clip);\n }\n }\n /**\n * Delete animation clip\n */\n removeClip(clip: Clip) {\n if (!clip.animation) {\n return;\n }\n const prev = clip.prev;\n const next = clip.next;\n if (prev) {\n prev.next = next;\n }\n else {\n // Is head\n this._clipsHead = next;\n }\n if (next) {\n next.prev = prev;\n }\n else {\n // Is tail\n this._clipsTail = prev;\n }\n clip.next = clip.prev = clip.animation = null;\n }\n\n /**\n * Delete animation clip\n */\n removeAnimator(animator: Animator) {\n const clip = animator.getClip();\n if (clip) {\n this.removeClip(clip);\n }\n animator.animation = null;\n }\n\n update(notTriggerFrameAndStageUpdate?: boolean) {\n const time = new Date().getTime() - this._pausedTime;\n const delta = time - this._time;\n let clip = this._clipsHead;\n\n while (clip) {\n // Save the nextClip before step.\n // So the loop will not been affected if the clip is removed in the callback\n const nextClip = clip.next;\n let finished = clip.step(time, delta);\n if (finished) {\n clip.ondestroy && clip.ondestroy();\n this.removeClip(clip);\n clip = nextClip;\n }\n else {\n clip = nextClip;\n }\n }\n\n this._time = time;\n\n if (!notTriggerFrameAndStageUpdate) {\n this.onframe(delta);\n\n // 'frame' should be triggered before stage, because upper application\n // depends on the sequence (e.g., echarts-stream and finish\n // event judge)\n this.trigger('frame', delta);\n\n this.stage.update && this.stage.update();\n }\n }\n\n _startLoop() {\n const self = this;\n\n this._running = true;\n\n function step() {\n if (self._running) {\n\n requestAnimationFrame(step);\n\n !self._paused && self.update();\n }\n }\n\n requestAnimationFrame(step);\n }\n\n /**\n * Start animation.\n */\n start() {\n if (this._running) {\n return;\n }\n\n this._time = new Date().getTime();\n this._pausedTime = 0;\n\n this._startLoop();\n }\n\n /**\n * Stop animation.\n */\n stop() {\n this._running = false;\n }\n\n /**\n * Pause animation.\n */\n pause() {\n if (!this._paused) {\n this._pauseStart = new Date().getTime();\n this._paused = true;\n }\n }\n\n /**\n * Resume animation.\n */\n resume() {\n if (this._paused) {\n this._pausedTime += (new Date().getTime()) - this._pauseStart;\n this._paused = false;\n }\n }\n\n /**\n * Clear animation.\n */\n clear() {\n let clip = this._clipsHead;\n\n while (clip) {\n let nextClip = clip.next;\n clip.prev = clip.next = clip.animation = null;\n clip = nextClip;\n }\n\n this._clipsHead = this._clipsTail = null;\n }\n\n /**\n * Whether animation finished.\n */\n isFinished() {\n return this._clipsHead == null;\n }\n\n /**\n * Creat animator for a target, whose props can be animated.\n */\n // TODO Gap\n animate(target: T, options: {\n loop?: boolean // Whether loop animation.\n }) {\n options = options || {};\n\n // Start animation loop\n this.start();\n\n const animator = new Animator(\n target,\n options.loop\n );\n\n this.addAnimator(animator);\n\n return animator;\n }\n}","\n/* global document */\n\nimport {\n addEventListener,\n removeEventListener,\n normalizeEvent,\n getNativeEvent\n} from '../core/event';\nimport * as zrUtil from '../core/util';\nimport Eventful from '../core/Eventful';\nimport env from '../core/env';\nimport { Dictionary, ZRRawEvent, ZRRawMouseEvent } from '../core/types';\nimport { VectorArray } from '../core/vector';\nimport Handler from '../Handler';\n\ntype DomHandlersMap = Dictionary<(this: HandlerDomProxy, event: ZRRawEvent) => void>\n\ntype DomExtended = Node & {\n domBelongToZr: boolean\n}\n\nconst TOUCH_CLICK_DELAY = 300;\n\nconst globalEventSupported = env.domSupported;\n\n\nconst localNativeListenerNames = (function () {\n const mouseHandlerNames = [\n 'click', 'dblclick', 'mousewheel', 'wheel', 'mouseout',\n 'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n ];\n const touchHandlerNames = [\n 'touchstart', 'touchend', 'touchmove'\n ];\n const pointerEventNameMap = {\n pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1\n };\n const pointerHandlerNames = zrUtil.map(mouseHandlerNames, function (name) {\n const nm = name.replace('mouse', 'pointer');\n return pointerEventNameMap.hasOwnProperty(nm) ? nm : name;\n });\n\n return {\n mouse: mouseHandlerNames,\n touch: touchHandlerNames,\n pointer: pointerHandlerNames\n };\n})();\n\nconst globalNativeListenerNames = {\n mouse: ['mousemove', 'mouseup'],\n pointer: ['pointermove', 'pointerup']\n};\n\nlet wheelEventSupported = false;\n\n\n// Although firfox has 'DOMMouseScroll' event and do not has 'mousewheel' event,\n// the 'DOMMouseScroll' event do not performe the same behavior on touch pad device\n// (like on Mac) ('DOMMouseScroll' will be triggered only if a big wheel delta).\n// So we should not use it.\n// function eventNameFix(name: string) {\n// return (name === 'mousewheel' && env.browser.firefox) ? 'DOMMouseScroll' : name;\n// }\n\nfunction isPointerFromTouch(event: ZRRawEvent) {\n const pointerType = (event as any).pointerType;\n return pointerType === 'pen' || pointerType === 'touch';\n}\n\n// function useMSGuesture(handlerProxy, event) {\n// return isPointerFromTouch(event) && !!handlerProxy._msGesture;\n// }\n\n// function onMSGestureChange(proxy, event) {\n// if (event.translationX || event.translationY) {\n// // mousemove is carried by MSGesture to reduce the sensitivity.\n// proxy.handler.dispatchToElement(event.target, 'mousemove', event);\n// }\n// if (event.scale !== 1) {\n// event.pinchX = event.offsetX;\n// event.pinchY = event.offsetY;\n// event.pinchScale = event.scale;\n// proxy.handler.dispatchToElement(event.target, 'pinch', event);\n// }\n// }\n\n/**\n * Prevent mouse event from being dispatched after Touch Events action\n * @see \n * 1. Mobile browsers dispatch mouse events 300ms after touchend.\n * 2. Chrome for Android dispatch mousedown for long-touch about 650ms\n * Result: Blocking Mouse Events for 700ms.\n *\n * @param {DOMHandlerScope} scope\n */\nfunction setTouchTimer(scope: DOMHandlerScope) {\n scope.touching = true;\n if (scope.touchTimer != null) {\n clearTimeout(scope.touchTimer);\n scope.touchTimer = null;\n }\n scope.touchTimer = setTimeout(function () {\n scope.touching = false;\n scope.touchTimer = null;\n }, 700);\n}\n\n// Mark touch, which is useful in distinguish touch and\n// mouse event in upper applicatoin.\nfunction markTouch(event: ZRRawEvent) {\n event && (event.zrByTouch = true);\n}\n\n\n// function markTriggeredFromLocal(event) {\n// event && (event.__zrIsFromLocal = true);\n// }\n\n// function isTriggeredFromLocal(instance, event) {\n// return !!(event && event.__zrIsFromLocal);\n// }\n\nfunction normalizeGlobalEvent(instance: HandlerDomProxy, event: ZRRawEvent) {\n // offsetX, offsetY still need to be calculated. They are necessary in the event\n // handlers of the upper applications. Set `true` to force calculate them.\n return normalizeEvent(\n instance.dom,\n // TODO ANY TYPE\n new FakeGlobalEvent(instance, event) as any as ZRRawEvent,\n true\n );\n}\n\n/**\n * Detect whether the given el is in `painterRoot`.\n */\nfunction isLocalEl(instance: HandlerDomProxy, el: Node) {\n let elTmp = el;\n let isLocal = false;\n while (elTmp && elTmp.nodeType !== 9\n && !(\n isLocal = (elTmp as DomExtended).domBelongToZr\n || (elTmp !== el && elTmp === instance.painterRoot)\n )\n ) {\n elTmp = elTmp.parentNode;\n }\n return isLocal;\n}\n\n/**\n * Make a fake event but not change the original event,\n * becuase the global event probably be used by other\n * listeners not belonging to zrender.\n * @class\n */\nclass FakeGlobalEvent {\n type: string\n target: HTMLElement\n currentTarget: HTMLElement\n\n pointerType: string\n clientX: number\n clientY: number\n\n constructor(instance: HandlerDomProxy, event: ZRRawEvent) {\n this.type = event.type;\n this.target = this.currentTarget = instance.dom;\n this.pointerType = (event as any).pointerType;\n // Necessray for the force calculation of zrX, zrY\n this.clientX = (event as ZRRawMouseEvent).clientX;\n this.clientY = (event as ZRRawMouseEvent).clientY;\n // Because we do not mount global listeners to touch events,\n // we do not copy `targetTouches` and `changedTouches` here.\n }\n\n // we make the default methods on the event do nothing,\n // otherwise it is dangerous. See more details in\n // [DRAG_OUTSIDE] in `Handler.js`.\n stopPropagation = zrUtil.noop\n stopImmediatePropagation = zrUtil.noop\n preventDefault = zrUtil.noop\n}\n\n\n/**\n * Local DOM Handlers\n * @this {HandlerProxy}\n */\nconst localDOMHandlers: DomHandlersMap = {\n\n mousedown(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n this.__mayPointerCapture = [event.zrX, event.zrY];\n\n this.trigger('mousedown', event);\n },\n\n mousemove(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n const downPoint = this.__mayPointerCapture;\n if (downPoint && (event.zrX !== downPoint[0] || event.zrY !== downPoint[1])) {\n this.__togglePointerCapture(true);\n }\n\n this.trigger('mousemove', event);\n },\n\n mouseup(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n this.__togglePointerCapture(false);\n\n this.trigger('mouseup', event);\n },\n\n mouseout(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n // There might be some doms created by upper layer application\n // at the same level of painter.getViewportRoot() (e.g., tooltip\n // dom created by echarts), where 'globalout' event should not\n // be triggered when mouse enters these doms. (But 'mouseout'\n // should be triggered at the original hovered element as usual).\n const element = (event as any).toElement || (event as ZRRawMouseEvent).relatedTarget;\n\n // For SVG rendering, there are SVG elements inside `this.dom`.\n // (especially in decal case). Should not to handle those \"mouseout\"..\n if (!isLocalEl(this, element)) {\n // Similarly to the browser did on `document` and touch event,\n // `globalout` will be delayed to final pointer cature release.\n if (this.__pointerCapturing) {\n event.zrEventControl = 'no_globalout';\n }\n\n this.trigger('mouseout', event);\n }\n },\n\n wheel(event: ZRRawEvent) {\n // Morden agent has supported event `wheel` instead of `mousewheel`.\n // About the polyfill of the props \"delta\", see \"arc/core/event.ts\".\n\n // Firefox only support `wheel` rather than `mousewheel`. Although firfox has been supporting\n // event `DOMMouseScroll`, it do not act the same behavior as `wheel` on touch pad device\n // like on Mac, where `DOMMouseScroll` will be triggered only if a big wheel delta occurs,\n // and it results in no chance to \"preventDefault\". So we should not use `DOMMouseScroll`.\n\n wheelEventSupported = true;\n event = normalizeEvent(this.dom, event);\n // Follow the definition of the previous version, the zrender event name is still 'mousewheel'.\n this.trigger('mousewheel', event);\n },\n\n mousewheel(event: ZRRawEvent) {\n // IE8- and some other lagacy agent do not support event `wheel`, so we still listen\n // to the legacy event `mouseevent`.\n // Typically if event `wheel` is suppored and the handler has been mounted on a\n // DOM element, the lagecy `mousewheel` event will not be triggered (Chrome and Safari).\n // But we still do this guard to avoid to duplicated handle.\n if (wheelEventSupported) {\n return;\n }\n event = normalizeEvent(this.dom, event);\n this.trigger('mousewheel', event);\n },\n\n touchstart(event: ZRRawEvent) {\n // Default mouse behaviour should not be disabled here.\n // For example, page may needs to be slided.\n event = normalizeEvent(this.dom, event);\n\n markTouch(event);\n\n this.__lastTouchMoment = new Date();\n\n this.handler.processGesture(event, 'start');\n\n // For consistent event listener for both touch device and mouse device,\n // we simulate \"mouseover-->mousedown\" in touch device. So we trigger\n // `mousemove` here (to trigger `mouseover` inside), and then trigger\n // `mousedown`.\n localDOMHandlers.mousemove.call(this, event);\n localDOMHandlers.mousedown.call(this, event);\n },\n\n touchmove(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n markTouch(event);\n\n this.handler.processGesture(event, 'change');\n\n // Mouse move should always be triggered no matter whether\n // there is gestrue event, because mouse move and pinch may\n // be used at the same time.\n localDOMHandlers.mousemove.call(this, event);\n },\n\n touchend(event: ZRRawEvent) {\n event = normalizeEvent(this.dom, event);\n\n markTouch(event);\n\n this.handler.processGesture(event, 'end');\n\n localDOMHandlers.mouseup.call(this, event);\n\n // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is\n // triggered in `touchstart`. This seems to be illogical, but by this mechanism,\n // we can conveniently implement \"hover style\" in both PC and touch device just\n // by listening to `mouseover` to add \"hover style\" and listening to `mouseout`\n // to remove \"hover style\" on an element, without any additional code for\n // compatibility. (`mouseout` will not be triggered in `touchend`, so \"hover\n // style\" will remain for user view)\n\n // click event should always be triggered no matter whether\n // there is gestrue event. System click can not be prevented.\n if (+new Date() - (+this.__lastTouchMoment) < TOUCH_CLICK_DELAY) {\n localDOMHandlers.click.call(this, event);\n }\n },\n\n pointerdown(event: ZRRawEvent) {\n localDOMHandlers.mousedown.call(this, event);\n\n // if (useMSGuesture(this, event)) {\n // this._msGesture.addPointer(event.pointerId);\n // }\n },\n\n pointermove(event: ZRRawEvent) {\n // FIXME\n // pointermove is so sensitive that it always triggered when\n // tap(click) on touch screen, which affect some judgement in\n // upper application. So, we dont support mousemove on MS touch\n // device yet.\n if (!isPointerFromTouch(event)) {\n localDOMHandlers.mousemove.call(this, event);\n }\n },\n\n pointerup(event: ZRRawEvent) {\n localDOMHandlers.mouseup.call(this, event);\n },\n\n pointerout(event: ZRRawEvent) {\n // pointerout will be triggered when tap on touch screen\n // (IE11+/Edge on MS Surface) after click event triggered,\n // which is inconsistent with the mousout behavior we defined\n // in touchend. So we unify them.\n // (check localDOMHandlers.touchend for detailed explanation)\n if (!isPointerFromTouch(event)) {\n localDOMHandlers.mouseout.call(this, event);\n }\n }\n\n};\n\n/**\n * Othere DOM UI Event handlers for zr dom.\n * @this {HandlerProxy}\n */\nzrUtil.each(['click', 'dblclick', 'contextmenu'], function (name) {\n localDOMHandlers[name] = function (event) {\n event = normalizeEvent(this.dom, event);\n this.trigger(name, event);\n };\n});\n\n\n/**\n * DOM UI Event handlers for global page.\n *\n * [Caution]:\n * those handlers should both support in capture phase and bubble phase!\n */\nconst globalDOMHandlers: DomHandlersMap = {\n\n pointermove: function (event: ZRRawEvent) {\n // FIXME\n // pointermove is so sensitive that it always triggered when\n // tap(click) on touch screen, which affect some judgement in\n // upper application. So, we dont support mousemove on MS touch\n // device yet.\n if (!isPointerFromTouch(event)) {\n globalDOMHandlers.mousemove.call(this, event);\n }\n },\n\n pointerup: function (event: ZRRawEvent) {\n globalDOMHandlers.mouseup.call(this, event);\n },\n\n mousemove: function (event: ZRRawEvent) {\n this.trigger('mousemove', event);\n },\n\n mouseup: function (event: ZRRawEvent) {\n const pointerCaptureReleasing = this.__pointerCapturing;\n\n this.__togglePointerCapture(false);\n\n this.trigger('mouseup', event);\n\n if (pointerCaptureReleasing) {\n event.zrEventControl = 'only_globalout';\n this.trigger('mouseout', event);\n }\n }\n\n};\n\n\nfunction mountLocalDOMEventListeners(instance: HandlerDomProxy, scope: DOMHandlerScope) {\n const domHandlers = scope.domHandlers;\n\n if (env.pointerEventsSupported) { // Only IE11+/Edge\n // 1. On devices that both enable touch and mouse (e.g., MS Surface and lenovo X240),\n // IE11+/Edge do not trigger touch event, but trigger pointer event and mouse event\n // at the same time.\n // 2. On MS Surface, it probablely only trigger mousedown but no mouseup when tap on\n // screen, which do not occurs in pointer event.\n // So we use pointer event to both detect touch gesture and mouse behavior.\n zrUtil.each(localNativeListenerNames.pointer, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n // markTriggeredFromLocal(event);\n domHandlers[nativeEventName].call(instance, event);\n });\n });\n\n // FIXME\n // Note: MS Gesture require CSS touch-action set. But touch-action is not reliable,\n // which does not prevent defuault behavior occasionally (which may cause view port\n // zoomed in but use can not zoom it back). And event.preventDefault() does not work.\n // So we have to not to use MSGesture and not to support touchmove and pinch on MS\n // touch screen. And we only support click behavior on MS touch screen now.\n\n // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+.\n // We dont support touch on IE on win7.\n // See \n // if (typeof MSGesture === 'function') {\n // (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line\n // dom.addEventListener('MSGestureChange', onMSGestureChange);\n // }\n }\n else {\n if (env.touchEventsSupported) {\n zrUtil.each(localNativeListenerNames.touch, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n // markTriggeredFromLocal(event);\n domHandlers[nativeEventName].call(instance, event);\n setTouchTimer(scope);\n });\n });\n // Handler of 'mouseout' event is needed in touch mode, which will be mounted below.\n // addEventListener(root, 'mouseout', this._mouseoutHandler);\n }\n\n // 1. Considering some devices that both enable touch and mouse event (like on MS Surface\n // and lenovo X240, @see #2350), we make mouse event be always listened, otherwise\n // mouse event can not be handle in those devices.\n // 2. On MS Surface, Chrome will trigger both touch event and mouse event. How to prevent\n // mouseevent after touch event triggered, see `setTouchTimer`.\n zrUtil.each(localNativeListenerNames.mouse, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event: ZRRawEvent) {\n event = getNativeEvent(event);\n if (!scope.touching) {\n // markTriggeredFromLocal(event);\n domHandlers[nativeEventName].call(instance, event);\n }\n });\n });\n }\n}\n\nfunction mountGlobalDOMEventListeners(instance: HandlerDomProxy, scope: DOMHandlerScope) {\n // Only IE11+/Edge. See the comment in `mountLocalDOMEventListeners`.\n if (env.pointerEventsSupported) {\n zrUtil.each(globalNativeListenerNames.pointer, mount);\n }\n // Touch event has implemented \"drag outside\" so we do not mount global listener for touch event.\n // (see https://www.w3.org/TR/touch-events/#the-touchmove-event) (see also `DRAG_OUTSIDE`).\n // We do not consider \"both-support-touch-and-mouse device\" for this feature (see the comment of\n // `mountLocalDOMEventListeners`) to avoid bugs util some requirements come.\n else if (!env.touchEventsSupported) {\n zrUtil.each(globalNativeListenerNames.mouse, mount);\n }\n\n function mount(nativeEventName: string) {\n function nativeEventListener(event: ZRRawEvent) {\n event = getNativeEvent(event);\n // See the reason in [DRAG_OUTSIDE] in `Handler.js`\n // This checking supports both `useCapture` or not.\n // PENDING: if there is performance issue in some devices,\n // we probably can not use `useCapture` and change a easier\n // to judes whether local (mark).\n if (!isLocalEl(instance, event.target as Node)) {\n event = normalizeGlobalEvent(instance, event);\n scope.domHandlers[nativeEventName].call(instance, event);\n }\n }\n mountSingleDOMEventListener(\n scope, nativeEventName, nativeEventListener,\n {capture: true} // See [DRAG_OUTSIDE] in `Handler.js`\n );\n }\n}\n\nfunction mountSingleDOMEventListener(\n scope: DOMHandlerScope,\n nativeEventName: string,\n listener: EventListener,\n opt?: boolean | AddEventListenerOptions\n) {\n scope.mounted[nativeEventName] = listener;\n scope.listenerOpts[nativeEventName] = opt;\n addEventListener(scope.domTarget, nativeEventName, listener, opt);\n}\n\nfunction unmountDOMEventListeners(scope: DOMHandlerScope) {\n const mounted = scope.mounted;\n for (let nativeEventName in mounted) {\n if (mounted.hasOwnProperty(nativeEventName)) {\n removeEventListener(\n scope.domTarget, nativeEventName, mounted[nativeEventName],\n scope.listenerOpts[nativeEventName]\n );\n }\n }\n scope.mounted = {};\n}\n\n\nclass DOMHandlerScope {\n domTarget: HTMLElement | HTMLDocument\n domHandlers: DomHandlersMap\n\n // Key: eventName, value: mounted handler funcitons.\n // Used for unmount.\n mounted: Dictionary = {};\n\n listenerOpts: Dictionary = {};\n\n touchTimer: ReturnType;\n touching = false;\n\n constructor(\n domTarget: HTMLElement | HTMLDocument,\n domHandlers: DomHandlersMap\n ) {\n this.domTarget = domTarget;\n this.domHandlers = domHandlers;\n\n }\n}\n\n\nexport default class HandlerDomProxy extends Eventful {\n\n dom: HTMLElement\n painterRoot: HTMLElement\n\n handler: Handler\n\n private _localHandlerScope: DOMHandlerScope\n private _globalHandlerScope: DOMHandlerScope\n\n __lastTouchMoment: Date\n\n // See [DRAG_OUTSIDE] in `Handler.ts`.\n __pointerCapturing = false\n // [x, y]\n __mayPointerCapture: VectorArray\n\n\n constructor(dom: HTMLElement, painterRoot: HTMLElement) {\n super();\n\n this.dom = dom;\n this.painterRoot = painterRoot;\n\n this._localHandlerScope = new DOMHandlerScope(dom, localDOMHandlers);\n\n if (globalEventSupported) {\n this._globalHandlerScope = new DOMHandlerScope(document, globalDOMHandlers);\n }\n\n mountLocalDOMEventListeners(this, this._localHandlerScope);\n }\n\n dispose() {\n unmountDOMEventListeners(this._localHandlerScope);\n if (globalEventSupported) {\n unmountDOMEventListeners(this._globalHandlerScope);\n }\n }\n\n setCursor(cursorStyle: string) {\n this.dom.style && (this.dom.style.cursor = cursorStyle || 'default');\n }\n\n /**\n * See [DRAG_OUTSIDE] in `Handler.js`.\n * @implement\n * @param isPointerCapturing Should never be `null`/`undefined`.\n * `true`: start to capture pointer if it is not capturing.\n * `false`: end the capture if it is capturing.\n */\n __togglePointerCapture(isPointerCapturing?: boolean) {\n this.__mayPointerCapture = null;\n\n if (globalEventSupported\n && ((+this.__pointerCapturing) ^ (+isPointerCapturing))\n ) {\n this.__pointerCapturing = isPointerCapturing;\n\n const globalHandlerScope = this._globalHandlerScope;\n isPointerCapturing\n ? mountGlobalDOMEventListeners(this, globalHandlerScope)\n : unmountDOMEventListeners(globalHandlerScope);\n }\n }\n}\n\nexport interface HandlerProxyInterface extends Eventful {\n handler: Handler\n dispose: () => void\n setCursor: (cursorStyle?: string) => void\n}","let dpr = 1;\n\n// If in browser environment\nif (typeof window !== 'undefined') {\n dpr = Math.max(\n window.devicePixelRatio\n || (window.screen && (window.screen as any).deviceXDPI / (window.screen as any).logicalXDPI)\n || 1, 1\n );\n}\n\n/**\n * Debug log mode:\n * 0: Do nothing, for release.\n * 1: console.error, for debug.\n */\nexport const debugMode = 0;\n\n// retina 屏幕优化\nexport const devicePixelRatio = dpr;\n\n\n/**\n * Determine when to turn on dark mode based on the luminance of backgroundColor\n */\nexport const DARK_MODE_THRESHOLD = 0.4;\n\n/**\n * Color of default dark label.\n */\nexport const DARK_LABEL_COLOR = '#333';\n\n/**\n * Color of default light label.\n */\nexport const LIGHT_LABEL_COLOR = '#ccc';\n\n/**\n * Color of default light label.\n */\nexport const LIGHTER_LABEL_COLOR = '#eee';\n","/**\n * 3x2矩阵操作类\n * @exports zrender/tool/matrix\n */\n\n/* global Float32Array */\n\nimport {VectorArray} from './vector';\n\nexport type MatrixArray = number[]\n/**\n * Create a identity matrix.\n */\nexport function create(): MatrixArray {\n return [1, 0, 0, 1, 0, 0];\n}\n\n/**\n * 设置矩阵为单位矩阵\n */\nexport function identity(out: MatrixArray): MatrixArray {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 1;\n out[4] = 0;\n out[5] = 0;\n return out;\n}\n\n/**\n * 复制矩阵\n */\nexport function copy(out: MatrixArray, m: MatrixArray): MatrixArray {\n out[0] = m[0];\n out[1] = m[1];\n out[2] = m[2];\n out[3] = m[3];\n out[4] = m[4];\n out[5] = m[5];\n return out;\n}\n\n/**\n * 矩阵相乘\n */\nexport function mul(out: MatrixArray, m1: MatrixArray, m2: MatrixArray): MatrixArray {\n // Consider matrix.mul(m, m2, m);\n // where out is the same as m2.\n // So use temp constiable to escape error.\n const out0 = m1[0] * m2[0] + m1[2] * m2[1];\n const out1 = m1[1] * m2[0] + m1[3] * m2[1];\n const out2 = m1[0] * m2[2] + m1[2] * m2[3];\n const out3 = m1[1] * m2[2] + m1[3] * m2[3];\n const out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];\n const out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = out3;\n out[4] = out4;\n out[5] = out5;\n return out;\n}\n\n/**\n * 平移变换\n */\nexport function translate(out: MatrixArray, a: MatrixArray, v: VectorArray): MatrixArray {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4] + v[0];\n out[5] = a[5] + v[1];\n return out;\n}\n\n/**\n * 旋转变换\n */\nexport function rotate(out: MatrixArray, a: MatrixArray, rad: number): MatrixArray {\n const aa = a[0];\n const ac = a[2];\n const atx = a[4];\n const ab = a[1];\n const ad = a[3];\n const aty = a[5];\n const st = Math.sin(rad);\n const ct = Math.cos(rad);\n\n out[0] = aa * ct + ab * st;\n out[1] = -aa * st + ab * ct;\n out[2] = ac * ct + ad * st;\n out[3] = -ac * st + ct * ad;\n out[4] = ct * atx + st * aty;\n out[5] = ct * aty - st * atx;\n return out;\n}\n\n/**\n * 缩放变换\n */\nexport function scale(out: MatrixArray, a: MatrixArray, v: VectorArray): MatrixArray {\n const vx = v[0];\n const vy = v[1];\n out[0] = a[0] * vx;\n out[1] = a[1] * vy;\n out[2] = a[2] * vx;\n out[3] = a[3] * vy;\n out[4] = a[4] * vx;\n out[5] = a[5] * vy;\n return out;\n}\n\n/**\n * 求逆矩阵\n */\nexport function invert(out: MatrixArray, a: MatrixArray): MatrixArray | null {\n\n const aa = a[0];\n const ac = a[2];\n const atx = a[4];\n const ab = a[1];\n const ad = a[3];\n const aty = a[5];\n\n let det = aa * ad - ab * ac;\n if (!det) {\n return null;\n }\n det = 1.0 / det;\n\n out[0] = ad * det;\n out[1] = -ab * det;\n out[2] = -ac * det;\n out[3] = aa * det;\n out[4] = (ac * aty - ad * atx) * det;\n out[5] = (ab * atx - aa * aty) * det;\n return out;\n}\n\n/**\n * Clone a new matrix.\n */\nexport function clone(a: MatrixArray): MatrixArray {\n const b = create();\n copy(b, a);\n return b;\n}\n","import * as matrix from './matrix';\nimport * as vector from './vector';\n\nconst mIdentity = matrix.identity;\n\nconst EPSILON = 5e-5;\n\nfunction isNotAroundZero(val: number) {\n return val > EPSILON || val < -EPSILON;\n}\n\nconst scaleTmp: vector.VectorArray = [];\nconst tmpTransform: matrix.MatrixArray = [];\nconst originTransform = matrix.create();\nconst abs = Math.abs;\n\nclass Transformable {\n\n parent: Transformable\n\n x: number\n y: number\n\n scaleX: number\n scaleY: number\n\n skewX: number\n skewY: number\n\n rotation: number\n /**\n * Origin of scale, rotation, skew\n */\n originX: number\n originY: number\n\n /**\n * Scale ratio\n */\n globalScaleRatio: number\n\n transform: matrix.MatrixArray\n invTransform: matrix.MatrixArray\n\n /**\n * Get computed local transform\n */\n getLocalTransform(m?: matrix.MatrixArray) {\n return Transformable.getLocalTransform(this, m);\n }\n\n /**\n * Set position from array\n */\n setPosition(arr: number[]) {\n this.x = arr[0];\n this.y = arr[1];\n }\n /**\n * Set scale from array\n */\n setScale(arr: number[]) {\n this.scaleX = arr[0];\n this.scaleY = arr[1];\n }\n\n /**\n * Set skew from array\n */\n setSkew(arr: number[]) {\n this.skewX = arr[0];\n this.skewY = arr[1];\n }\n\n /**\n * Set origin from array\n */\n setOrigin(arr: number[]) {\n this.originX = arr[0];\n this.originY = arr[1];\n }\n\n /**\n * If needs to compute transform\n */\n needLocalTransform(): boolean {\n return isNotAroundZero(this.rotation)\n || isNotAroundZero(this.x)\n || isNotAroundZero(this.y)\n || isNotAroundZero(this.scaleX - 1)\n || isNotAroundZero(this.scaleY - 1);\n }\n\n /**\n * Update global transform\n */\n updateTransform() {\n const parentTransform = this.parent && this.parent.transform;\n const needLocalTransform = this.needLocalTransform();\n\n let m = this.transform;\n if (!(needLocalTransform || parentTransform)) {\n m && mIdentity(m);\n return;\n }\n\n m = m || matrix.create();\n\n if (needLocalTransform) {\n this.getLocalTransform(m);\n }\n else {\n mIdentity(m);\n }\n\n // 应用父节点变换\n if (parentTransform) {\n if (needLocalTransform) {\n matrix.mul(m, parentTransform, m);\n }\n else {\n matrix.copy(m, parentTransform);\n }\n }\n // 保存这个变换矩阵\n this.transform = m;\n\n this._resolveGlobalScaleRatio(m);\n }\n\n private _resolveGlobalScaleRatio(m: matrix.MatrixArray) {\n const globalScaleRatio = this.globalScaleRatio;\n if (globalScaleRatio != null && globalScaleRatio !== 1) {\n this.getGlobalScale(scaleTmp);\n const relX = scaleTmp[0] < 0 ? -1 : 1;\n const relY = scaleTmp[1] < 0 ? -1 : 1;\n const sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0;\n const sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0;\n\n m[0] *= sx;\n m[1] *= sx;\n m[2] *= sy;\n m[3] *= sy;\n }\n\n this.invTransform = this.invTransform || matrix.create();\n matrix.invert(this.invTransform, m);\n }\n\n /**\n * Get computed global transform\n * NOTE: this method will force update transform on all ancestors.\n * Please be aware of the potential performance cost.\n */\n getComputedTransform() {\n let transformNode: Transformable = this;\n const ancestors: Transformable[] = [];\n while (transformNode) {\n ancestors.push(transformNode);\n transformNode = transformNode.parent;\n }\n\n // Update from topdown.\n while (transformNode = ancestors.pop()) {\n transformNode.updateTransform();\n }\n\n return this.transform;\n }\n\n setLocalTransform(m: vector.VectorArray) {\n if (!m) {\n // TODO return or set identity?\n return;\n }\n let sx = m[0] * m[0] + m[1] * m[1];\n let sy = m[2] * m[2] + m[3] * m[3];\n\n const rotation = Math.atan2(m[1], m[0]);\n\n const shearX = Math.PI / 2 + rotation - Math.atan2(m[3], m[2]);\n sy = Math.sqrt(sy) * Math.cos(shearX);\n sx = Math.sqrt(sx);\n\n this.skewX = shearX;\n this.skewY = 0;\n this.rotation = -rotation;\n\n this.x = +m[4];\n this.y = +m[5];\n this.scaleX = sx;\n this.scaleY = sy;\n\n this.originX = 0;\n this.originY = 0;\n }\n /**\n * 分解`transform`矩阵到`position`, `rotation`, `scale`\n */\n decomposeTransform() {\n if (!this.transform) {\n return;\n }\n const parent = this.parent;\n let m = this.transform;\n if (parent && parent.transform) {\n // Get local transform and decompose them to position, scale, rotation\n matrix.mul(tmpTransform, parent.invTransform, m);\n m = tmpTransform;\n }\n const ox = this.originX;\n const oy = this.originY;\n if (ox || oy) {\n originTransform[4] = ox;\n originTransform[5] = oy;\n matrix.mul(tmpTransform, m, originTransform);\n tmpTransform[4] -= ox;\n tmpTransform[5] -= oy;\n m = tmpTransform;\n }\n\n this.setLocalTransform(m);\n }\n\n /**\n * Get global scale\n */\n getGlobalScale(out?: vector.VectorArray): vector.VectorArray {\n const m = this.transform;\n out = out || [];\n if (!m) {\n out[0] = 1;\n out[1] = 1;\n return out;\n }\n out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]);\n out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]);\n if (m[0] < 0) {\n out[0] = -out[0];\n }\n if (m[3] < 0) {\n out[1] = -out[1];\n }\n return out;\n }\n /**\n * 变换坐标位置到 shape 的局部坐标空间\n */\n transformCoordToLocal(x: number, y: number): number[] {\n const v2 = [x, y];\n const invTransform = this.invTransform;\n if (invTransform) {\n vector.applyTransform(v2, v2, invTransform);\n }\n return v2;\n }\n\n /**\n * 变换局部坐标位置到全局坐标空间\n */\n transformCoordToGlobal(x: number, y: number): number[] {\n const v2 = [x, y];\n const transform = this.transform;\n if (transform) {\n vector.applyTransform(v2, v2, transform);\n }\n return v2;\n }\n\n\n getLineScale() {\n const m = this.transform;\n // Get the line scale.\n // Determinant of `m` means how much the area is enlarged by the\n // transformation. So its square root can be used as a scale factor\n // for width.\n return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10\n ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1]))\n : 1;\n }\n\n copyTransform(source: Transformable) {\n const target = this;\n\n for (let i = 0; i < TRANSFORMABLE_PROPS.length; i++) {\n const propName = TRANSFORMABLE_PROPS[i];\n target[propName] = source[propName];\n }\n }\n\n\n static getLocalTransform(target: Transformable, m?: matrix.MatrixArray): matrix.MatrixArray {\n m = m || [];\n\n const ox = target.originX || 0;\n const oy = target.originY || 0;\n const sx = target.scaleX;\n const sy = target.scaleY;\n const rotation = target.rotation || 0;\n const x = target.x;\n const y = target.y;\n const skewX = target.skewX ? Math.tan(target.skewX) : 0;\n // TODO: zrender use different hand in coordinate system and y axis is inversed.\n const skewY = target.skewY ? Math.tan(-target.skewY) : 0;\n\n // The order of transform (-origin * scale * skew * rotate * origin * translate).\n // We merge (-origin * scale * skew) into one. Also did identity in these operations.\n // origin\n if (ox || oy) {\n m[4] = -ox * sx - skewX * oy * sy;\n m[5] = -oy * sy - skewY * ox * sx;\n }\n else {\n m[4] = m[5] = 0;\n }\n // scale\n m[0] = sx;\n m[3] = sy;\n // skew\n m[1] = skewY * sx;\n m[2] = skewX * sy;\n\n // Apply rotation\n rotation && matrix.rotate(m, m, rotation);\n\n // Translate back from origin and apply translation\n m[4] += ox + x;\n m[5] += oy + y;\n\n return m;\n }\n\n private static initDefaultProps = (function () {\n const proto = Transformable.prototype;\n proto.x = 0;\n proto.y = 0;\n proto.scaleX = 1;\n proto.scaleY = 1;\n proto.originX = 0;\n proto.originY = 0;\n proto.skewX = 0;\n proto.skewY = 0;\n proto.rotation = 0;\n proto.globalScaleRatio = 1;\n })()\n};\n\nexport const TRANSFORMABLE_PROPS = [\n 'x', 'y', 'originX', 'originY', 'rotation', 'scaleX', 'scaleY', 'skewX', 'skewY'\n] as const;\n\nexport default Transformable;","import { MatrixArray } from './matrix';\n\nexport interface PointLike {\n x: number\n y: number\n}\nexport default class Point {\n\n x: number\n\n y: number\n\n constructor(x?: number, y?: number) {\n this.x = x || 0;\n this.y = y || 0;\n }\n\n /**\n * Copy from another point\n */\n copy(other: PointLike) {\n this.x = other.x;\n this.y = other.y;\n return this;\n }\n\n /**\n * Clone a point\n */\n clone() {\n return new Point(this.x, this.y);\n }\n\n /**\n * Set x and y\n */\n set(x: number, y: number) {\n this.x = x;\n this.y = y;\n return this;\n }\n\n /**\n * If equal to another point\n */\n equal(other: PointLike) {\n return other.x === this.x && other.y === this.y;\n }\n\n /**\n * Add another point\n */\n add(other: PointLike) {\n this.x += other.x;\n this.y += other.y;\n return this;\n }\n\n scale(scalar: number) {\n this.x *= scalar;\n this.y *= scalar;\n }\n\n scaleAndAdd(other: PointLike, scalar: number) {\n this.x += other.x * scalar;\n this.y += other.y * scalar;\n }\n\n /**\n * Sub another point\n */\n sub(other: PointLike) {\n this.x -= other.x;\n this.y -= other.y;\n return this;\n }\n\n /**\n * Dot product with other point\n */\n dot(other: PointLike) {\n return this.x * other.x + this.y * other.y;\n }\n\n /**\n * Get length of point\n */\n len() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * Get squared length\n */\n lenSquare() {\n return this.x * this.x + this.y * this.y;\n }\n\n /**\n * Normalize\n */\n normalize() {\n const len = this.len();\n this.x /= len;\n this.y /= len;\n return this;\n }\n\n /**\n * Distance to another point\n */\n distance(other: PointLike) {\n const dx = this.x - other.x;\n const dy = this.y - other.y;\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /**\n * Square distance to another point\n */\n distanceSquare(other: Point) {\n const dx = this.x - other.x;\n const dy = this.y - other.y;\n return dx * dx + dy * dy;\n }\n\n /**\n * Negate\n */\n negate() {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n }\n\n /**\n * Apply a transform matrix array.\n */\n transform(m: MatrixArray) {\n if (!m) {\n return;\n }\n const x = this.x;\n const y = this.y;\n this.x = m[0] * x + m[2] * y + m[4];\n this.y = m[1] * x + m[3] * y + m[5];\n return this;\n }\n\n toArray(out: number[]) {\n out[0] = this.x;\n out[1] = this.y;\n return out;\n }\n\n fromArray(input: number[]) {\n this.x = input[0];\n this.y = input[1];\n }\n\n static set(p: PointLike, x: number, y: number) {\n p.x = x;\n p.y = y;\n }\n\n static copy(p: PointLike, p2: PointLike) {\n p.x = p2.x;\n p.y = p2.y;\n }\n\n static len(p: PointLike) {\n return Math.sqrt(p.x * p.x + p.y * p.y);\n }\n\n static lenSquare(p: PointLike) {\n return p.x * p.x + p.y * p.y;\n }\n\n static dot(p0: PointLike, p1: PointLike) {\n return p0.x * p1.x + p0.y * p1.y;\n }\n\n static add(out: PointLike, p0: PointLike, p1: PointLike) {\n out.x = p0.x + p1.x;\n out.y = p0.y + p1.y;\n }\n\n static sub(out: PointLike, p0: PointLike, p1: PointLike) {\n out.x = p0.x - p1.x;\n out.y = p0.y - p1.y;\n }\n\n static scale(out: PointLike, p0: PointLike, scalar: number) {\n out.x = p0.x * scalar;\n out.y = p0.y * scalar;\n }\n\n static scaleAndAdd(out: PointLike, p0: PointLike, p1: PointLike, scalar: number) {\n out.x = p0.x + p1.x * scalar;\n out.y = p0.y + p1.y * scalar;\n }\n\n static lerp(out: PointLike, p0: PointLike, p1: PointLike, t: number) {\n const onet = 1 - t;\n out.x = onet * p0.x + t * p1.x;\n out.y = onet * p0.y + t * p1.y;\n }\n}","/**\n * @module echarts/core/BoundingRect\n */\n\nimport * as matrix from './matrix';\nimport Point, { PointLike } from './Point';\n\nconst mathMin = Math.min;\nconst mathMax = Math.max;\n\nconst lt = new Point();\nconst rb = new Point();\nconst lb = new Point();\nconst rt = new Point();\n\nconst minTv = new Point();\nconst maxTv = new Point();\n\nclass BoundingRect {\n\n x: number\n y: number\n width: number\n height: number\n\n constructor(x: number, y: number, width: number, height: number) {\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n union(other: BoundingRect) {\n const x = mathMin(other.x, this.x);\n const y = mathMin(other.y, this.y);\n\n // If x is -Infinity and width is Infinity (like in the case of\n // IncrementalDisplayble), x + width would be NaN\n if (isFinite(this.x) && isFinite(this.width)) {\n this.width = mathMax(\n other.x + other.width,\n this.x + this.width\n ) - x;\n }\n else {\n this.width = other.width;\n }\n\n if (isFinite(this.y) && isFinite(this.height)) {\n this.height = mathMax(\n other.y + other.height,\n this.y + this.height\n ) - y;\n }\n else {\n this.height = other.height;\n }\n\n this.x = x;\n this.y = y;\n }\n\n applyTransform(m: matrix.MatrixArray) {\n BoundingRect.applyTransform(this, this, m);\n }\n\n calculateTransform(b: RectLike): matrix.MatrixArray {\n const a = this;\n const sx = b.width / a.width;\n const sy = b.height / a.height;\n\n const m = matrix.create();\n\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\n return m;\n }\n\n intersect(b: RectLike, mtv?: PointLike): boolean {\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 const a = this;\n const ax0 = a.x;\n const ax1 = a.x + a.width;\n const ay0 = a.y;\n const ay1 = a.y + a.height;\n\n const bx0 = b.x;\n const bx1 = b.x + b.width;\n const by0 = b.y;\n const by1 = b.y + b.height;\n\n let overlap = !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n if (mtv) {\n let dMin = Infinity;\n let dMax = 0;\n const d0 = Math.abs(ax1 - bx0);\n const d1 = Math.abs(bx1 - ax0);\n const d2 = Math.abs(ay1 - by0);\n const d3 = Math.abs(by1 - ay0);\n const dx = Math.min(d0, d1);\n const dy = Math.min(d2, d3);\n // On x axis\n if (ax1 < bx0 || bx1 < ax0) {\n if (dx > dMax) {\n dMax = dx;\n if (d0 < d1) {\n Point.set(maxTv, -d0, 0); // b is on the right\n }\n else {\n Point.set(maxTv, d1, 0); // b is on the left\n }\n }\n }\n else {\n if (dx < dMin) {\n dMin = dx;\n if (d0 < d1) {\n Point.set(minTv, d0, 0); // b is on the right\n }\n else {\n Point.set(minTv, -d1, 0); // b is on the left\n }\n }\n }\n\n // On y axis\n if (ay1 < by0 || by1 < ay0) {\n if (dy > dMax) {\n dMax = dy;\n if (d2 < d3) {\n Point.set(maxTv, 0, -d2); // b is on the bottom(larger y)\n }\n else {\n Point.set(maxTv, 0, d3); // b is on the top(smaller y)\n }\n }\n }\n else {\n if (dx < dMin) {\n dMin = dx;\n if (d2 < d3) {\n Point.set(minTv, 0, d2); // b is on the bottom\n }\n else {\n Point.set(minTv, 0, -d3); // b is on the top\n }\n }\n }\n }\n\n if (mtv) {\n Point.copy(mtv, overlap ? minTv : maxTv);\n }\n return overlap;\n }\n\n contain(x: number, y: number): boolean {\n const rect = this;\n return x >= rect.x\n && x <= (rect.x + rect.width)\n && y >= rect.y\n && y <= (rect.y + rect.height);\n }\n\n clone() {\n return new BoundingRect(this.x, this.y, this.width, this.height);\n }\n\n /**\n * Copy from another rect\n */\n copy(other: RectLike) {\n BoundingRect.copy(this, other);\n }\n\n plain(): RectLike {\n return {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height\n };\n }\n\n /**\n * If not having NaN or Infinity with attributes\n */\n isFinite(): boolean {\n return isFinite(this.x)\n && isFinite(this.y)\n && isFinite(this.width)\n && isFinite(this.height);\n }\n\n isZero(): boolean {\n return this.width === 0 || this.height === 0;\n }\n\n static create(rect: RectLike): BoundingRect {\n return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n }\n\n static copy(target: RectLike, source: RectLike) {\n target.x = source.x;\n target.y = source.y;\n target.width = source.width;\n target.height = source.height;\n }\n\n static applyTransform(target: RectLike, source: RectLike, m: matrix.MatrixArray) {\n // In case usage like this\n // el.getBoundingRect().applyTransform(el.transform)\n // And element has no transform\n if (!m) {\n if (target !== source) {\n BoundingRect.copy(target, source);\n }\n return;\n }\n // Fast path when there is no rotation in matrix.\n if (m[1] < 1e-5 && m[1] > -1e-5 && m[2] < 1e-5 && m[2] > -1e-5) {\n const sx = m[0];\n const sy = m[3];\n const tx = m[4];\n const ty = m[5];\n target.x = source.x * sx + tx;\n target.y = source.y * sy + ty;\n target.width = source.width * sx;\n target.height = source.height * sy;\n if (target.width < 0) {\n target.x += target.width;\n target.width = -target.width;\n }\n if (target.height < 0) {\n target.y += target.height;\n target.height = -target.height;\n }\n return;\n }\n\n // source and target can be same instance.\n lt.x = lb.x = source.x;\n lt.y = rt.y = source.y;\n rb.x = rt.x = source.x + source.width;\n rb.y = lb.y = source.y + source.height;\n\n lt.transform(m);\n rt.transform(m);\n rb.transform(m);\n lb.transform(m);\n\n target.x = mathMin(lt.x, rb.x, lb.x, rt.x);\n target.y = mathMin(lt.y, rb.y, lb.y, rt.y);\n const maxX = mathMax(lt.x, rb.x, lb.x, rt.x);\n const maxY = mathMax(lt.y, rb.y, lb.y, rt.y);\n target.width = maxX - target.x;\n target.height = maxY - target.y;\n }\n}\n\n\nexport type RectLike = {\n x: number\n y: number\n width: number\n height: number\n}\n\nexport default BoundingRect;","import BoundingRect, { RectLike } from '../core/BoundingRect';\nimport { createCanvas } from '../core/util';\nimport { Dictionary, PropType, TextAlign, TextVerticalAlign, BuiltinTextPosition } from '../core/types';\nimport LRU from '../core/LRU';\n\nlet textWidthCache: Dictionary> = {};\n\nexport const DEFAULT_FONT = '12px sans-serif';\n\nlet _ctx: CanvasRenderingContext2D;\nlet _cachedFont: string;\n\nfunction defaultMeasureText(text: string, font?: string): { width: number } {\n if (!_ctx) {\n _ctx = createCanvas().getContext('2d');\n }\n if (_cachedFont !== font) {\n _cachedFont = _ctx.font = font || DEFAULT_FONT;\n }\n return _ctx.measureText(text);\n}\n\nlet methods: {\n measureText: (text: string, font?: string) => { width: number }\n} = {\n measureText: defaultMeasureText\n};\n\nexport function $override(\n name: keyof typeof methods,\n fn: PropType\n) {\n methods[name] = fn;\n}\n\n// let cacheMissCount = 0;\n// let totalCount = 0;\n\nexport function getWidth(text: string, font: string): number {\n font = font || DEFAULT_FONT;\n let cacheOfFont = textWidthCache[font];\n if (!cacheOfFont) {\n cacheOfFont = textWidthCache[font] = new LRU(500);\n }\n let width = cacheOfFont.get(text);\n if (width == null) {\n width = methods.measureText(text, font).width;\n cacheOfFont.put(text, width);\n // cacheMissCount++;\n }\n // totalCount++;\n\n return width;\n}\n\n/**\n *\n * Get bounding rect for inner usage(TSpan)\n * Which not include text newline.\n */\nexport function innerGetBoundingRect(\n text: string,\n font: string,\n textAlign?: TextAlign,\n textBaseline?: TextVerticalAlign\n): BoundingRect {\n const width = getWidth(text, font);\n const height = getLineHeight(font);\n\n const x = adjustTextX(0, width, textAlign);\n const y = adjustTextY(0, height, textBaseline);\n\n const rect = new BoundingRect(x, y, width, height);\n\n return rect;\n}\n\n/**\n *\n * Get bounding rect for outer usage. Compatitable with old implementation\n * Which includes text newline.\n */\nexport function getBoundingRect(\n text: string,\n font: string,\n textAlign?: TextAlign,\n textBaseline?: TextVerticalAlign\n) {\n const textLines = ((text || '') + '').split('\\n');\n const len = textLines.length;\n if (len === 1) {\n return innerGetBoundingRect(textLines[0], font, textAlign, textBaseline);\n }\n else {\n const uniondRect = new BoundingRect(0, 0, 0, 0);\n for (let i = 0; i < textLines.length; i++) {\n const rect = innerGetBoundingRect(textLines[i], font, textAlign, textBaseline);\n i === 0 ? uniondRect.copy(rect) : uniondRect.union(rect);\n }\n return uniondRect;\n }\n}\n\nexport function adjustTextX(x: number, width: number, textAlign: TextAlign): number {\n // TODO Right to left language\n if (textAlign === 'right') {\n x -= width;\n }\n else if (textAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\n\nexport function adjustTextY(y: number, height: number, verticalAlign: TextVerticalAlign): number {\n if (verticalAlign === 'middle') {\n y -= height / 2;\n }\n else if (verticalAlign === 'bottom') {\n y -= height;\n }\n return y;\n}\n\n\nexport function getLineHeight(font?: string): number {\n // FIXME A rough approach.\n return getWidth('国', font);\n}\n\nexport function measureText(text: string, font?: string): {\n width: number\n} {\n return methods.measureText(text, font);\n}\n\n\nexport function parsePercent(value: number | string, maxValue: number): number {\n if (typeof value === 'string') {\n if (value.lastIndexOf('%') >= 0) {\n return parseFloat(value) / 100 * maxValue;\n }\n return parseFloat(value);\n }\n return value;\n}\n\nexport interface TextPositionCalculationResult {\n x: number\n y: number\n align: TextAlign\n verticalAlign: TextVerticalAlign\n}\n/**\n * Follow same interface to `Displayable.prototype.calculateTextPosition`.\n * @public\n * @param out Prepared out object. If not input, auto created in the method.\n * @param style where `textPosition` and `textDistance` are visited.\n * @param rect {x, y, width, height} Rect of the host elment, according to which the text positioned.\n * @return The input `out`. Set: {x, y, textAlign, textVerticalAlign}\n */\nexport function calculateTextPosition(\n out: TextPositionCalculationResult,\n opts: {\n position?: BuiltinTextPosition | (number | string)[]\n distance?: number // Default 5\n global?: boolean\n },\n rect: RectLike\n): TextPositionCalculationResult {\n const textPosition = opts.position || 'inside';\n const distance = opts.distance != null ? opts.distance : 5;\n\n const height = rect.height;\n const width = rect.width;\n const halfHeight = height / 2;\n\n let x = rect.x;\n let y = rect.y;\n\n let textAlign: TextAlign = 'left';\n let textVerticalAlign: TextVerticalAlign = 'top';\n\n if (textPosition instanceof Array) {\n x += parsePercent(textPosition[0], rect.width);\n y += parsePercent(textPosition[1], rect.height);\n // Not use textAlign / textVerticalAlign\n textAlign = null;\n textVerticalAlign = null;\n }\n else {\n switch (textPosition) {\n case 'left':\n x -= distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n case 'right':\n x += distance + width;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n case 'top':\n x += width / 2;\n y -= distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n case 'bottom':\n x += width / 2;\n y += height + distance;\n textAlign = 'center';\n break;\n case 'inside':\n x += width / 2;\n y += halfHeight;\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n case 'insideLeft':\n x += distance;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n case 'insideRight':\n x += width - distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n case 'insideTop':\n x += width / 2;\n y += distance;\n textAlign = 'center';\n break;\n case 'insideBottom':\n x += width / 2;\n y += height - distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n case 'insideTopLeft':\n x += distance;\n y += distance;\n break;\n case 'insideTopRight':\n x += width - distance;\n y += distance;\n textAlign = 'right';\n break;\n case 'insideBottomLeft':\n x += distance;\n y += height - distance;\n textVerticalAlign = 'bottom';\n break;\n case 'insideBottomRight':\n x += width - distance;\n y += height - distance;\n textAlign = 'right';\n textVerticalAlign = 'bottom';\n break;\n }\n }\n\n out = out || {} as TextPositionCalculationResult;\n out.x = x;\n out.y = y;\n out.align = textAlign;\n out.verticalAlign = textVerticalAlign;\n\n return out;\n}\n","import Transformable from './core/Transformable';\nimport { AnimationEasing } from './animation/easing';\nimport Animator, {cloneValue} from './animation/Animator';\nimport { ZRenderType } from './zrender';\nimport {\n Dictionary, ElementEventName, ZRRawEvent, BuiltinTextPosition, AllPropTypes,\n TextVerticalAlign, TextAlign, MapToType\n} from './core/types';\nimport Path from './graphic/Path';\nimport BoundingRect, { RectLike } from './core/BoundingRect';\nimport Eventful from './core/Eventful';\nimport ZRText, { DefaultTextStyle } from './graphic/Text';\nimport { calculateTextPosition, TextPositionCalculationResult, parsePercent } from './contain/text';\nimport {\n guid,\n isObject,\n keys,\n extend,\n indexOf,\n logError,\n mixin,\n isArrayLike,\n isTypedArray\n} from './core/util';\nimport Polyline from './graphic/shape/Polyline';\nimport Group from './graphic/Group';\nimport Point from './core/Point';\nimport { LIGHT_LABEL_COLOR, DARK_LABEL_COLOR } from './config';\nimport { parse, stringify } from './tool/color';\nimport env from './core/env';\nimport { REDARAW_BIT } from './graphic/constants';\n\nexport interface ElementAnimateConfig {\n duration?: number\n delay?: number\n easing?: AnimationEasing\n during?: (percent: number) => void\n\n // `done` will be called when all of the animations of the target props are\n // \"done\" or \"aborted\", and at least one \"done\" happened.\n // Common cases: animations declared, but some of them are aborted (e.g., by state change).\n // The calling of `animationTo` done rather than aborted if at least one done happened.\n done?: Function\n // `aborted` will be called when all of the animations of the target props are \"aborted\".\n aborted?: Function\n\n scope?: string\n /**\n * If force animate\n * Prevent stop animation and callback\n * immediently when target values are the same as current values.\n */\n force?: boolean\n /**\n * If use additive animation.\n */\n additive?: boolean\n /**\n * If set to final state before animation started.\n * It can be useful if something you want to calcuate depends on the final state of element.\n * Like bounding rect for text layouting.\n *\n * Only available in animateTo\n */\n setToFinal?: boolean\n}\n\nexport interface ElementTextConfig {\n /**\n * Position relative to the element bounding rect\n * @default 'inside'\n */\n position?: BuiltinTextPosition | (number | string)[]\n\n /**\n * Rotation of the label.\n */\n rotation?: number\n\n /**\n * Rect that text will be positioned.\n * Default to be the rect of element.\n */\n layoutRect?: RectLike\n\n /**\n * Offset of the label.\n * The difference of offset and position is that it will be applied\n * in the rotation\n */\n offset?: number[]\n\n /**\n * Origin or rotation. Which is relative to the bounding box of the attached element.\n * Can be percent value. Relative to the bounding box.\n * If specified center. It will be center of the bounding box.\n *\n * Only available when position and rotation are both set.\n */\n origin?: (number | string)[] | 'center'\n\n /**\n * Distance to the rect\n * @default 5\n */\n distance?: number\n\n /**\n * If use local user space. Which will apply host's transform\n * @default false\n */\n local?: boolean\n\n /**\n * `insideFill` is a color string or left empty.\n * If a `textContent` is \"inside\", its final `fill` will be picked by this priority:\n * `textContent.style.fill` > `textConfig.insideFill` > \"auto-calculated-fill\"\n * In most cases, \"auto-calculated-fill\" is white.\n */\n insideFill?: string\n\n /**\n * `insideStroke` is a color string or left empty.\n * If a `textContent` is \"inside\", its final `stroke` will be picked by this priority:\n * `textContent.style.stroke` > `textConfig.insideStroke` > \"auto-calculated-stroke\"\n *\n * The rule of getting \"auto-calculated-stroke\":\n * If (A) the `fill` is specified in style (either in `textContent.style` or `textContent.style.rich`)\n * or (B) needed to draw text background (either defined in `textContent.style` or `textContent.style.rich`)\n * \"auto-calculated-stroke\" will be null.\n * Otherwise, \"auto-calculated-stroke\" will be the same as `fill` of this element if possible, or null.\n *\n * The reason of (A) is not decisive:\n * 1. If users specify `fill` in style and still use \"auto-calculated-stroke\", the effect\n * is not good and unexpected in some cases. It not easy and seams uncessary to auto calculate\n * a proper `stroke` for the given `fill`, since they can specify `stroke` themselve.\n * 2. Backward compat.\n */\n insideStroke?: string\n\n /**\n * `outsideFill` is a color string or left empty.\n * If a `textContent` is \"inside\", its final `fill` will be picked by this priority:\n * `textContent.style.fill` > `textConfig.outsideFill` > #000\n */\n outsideFill?: string\n\n /**\n * `outsideStroke` is a color string or left empth.\n * If a `textContent` is not \"inside\", its final `stroke` will be picked by this priority:\n * `textContent.style.stroke` > `textConfig.outsideStroke` > \"auto-calculated-stroke\"\n *\n * The rule of getting \"auto-calculated-stroke\":\n * If (A) the `fill` is specified in style (either in `textContent.style` or `textContent.style.rich`)\n * or (B) needed to draw text background (either defined in `textContent.style` or `textContent.style.rich`)\n * \"auto-calculated-stroke\" will be null.\n * Otherwise, \"auto-calculated-stroke\" will be a neer white color to distinguish \"front end\"\n * label with messy background (like other text label, line or other graphic).\n */\n outsideStroke?: string\n\n /**\n * Tell zrender I can sure this text is inside or not.\n * In case position is not using builtin `inside` hints.\n */\n inside?: boolean\n}\nexport interface ElementTextGuideLineConfig {\n /**\n * Anchor for text guide line.\n * Notice: Won't work\n */\n anchor?: Point\n\n /**\n * If above the target element.\n */\n showAbove?: boolean\n\n /**\n * Candidates of connectors. Used when autoCalculate is true and anchor is not specified.\n */\n candidates?: ('left' | 'top' | 'right' | 'bottom')[]\n}\n\nexport interface ElementEvent {\n type: ElementEventName,\n event: ZRRawEvent,\n // target can only be an element that is not silent.\n target: Element,\n // topTarget can be a silent element.\n topTarget: Element,\n cancelBubble: boolean,\n offsetX: number,\n offsetY: number,\n gestureEvent: string,\n pinchX: number,\n pinchY: number,\n pinchScale: number,\n wheelDelta: number,\n zrByTouch: boolean,\n which: number,\n stop: (this: ElementEvent) => void\n}\n\nexport type ElementEventCallback = (\n this: CbThis, e: ElementEvent\n) => boolean | void\ntype CbThis = unknown extends Ctx ? Impl : Ctx;\n\ninterface ElementEventHandlerProps {\n // Events\n onclick: ElementEventCallback\n ondblclick: ElementEventCallback\n onmouseover: ElementEventCallback\n onmouseout: ElementEventCallback\n onmousemove: ElementEventCallback\n onmousewheel: ElementEventCallback\n onmousedown: ElementEventCallback\n onmouseup: ElementEventCallback\n oncontextmenu: ElementEventCallback\n\n ondrag: ElementEventCallback\n ondragstart: ElementEventCallback\n ondragend: ElementEventCallback\n ondragenter: ElementEventCallback\n ondragleave: ElementEventCallback\n ondragover: ElementEventCallback\n ondrop: ElementEventCallback\n}\n\nexport interface ElementProps extends Partial {\n name?: string\n ignore?: boolean\n isGroup?: boolean\n draggable?: boolean | 'horizontal' | 'vertical'\n\n silent?: boolean\n\n ignoreClip?: boolean\n // From transform\n x?: number\n y?: number\n scaleX?: number\n scaleY?: number\n originX?: number\n originY?: number\n rotation?: number\n\n globalScaleRatio?: number\n\n textConfig?: ElementTextConfig\n textContent?: ZRText\n\n clipPath?: Path\n drift?: Element['drift']\n\n extra?: Dictionary\n\n // For echarts animation.\n anid?: string\n}\n\n// Properties can be used in state.\nexport const PRESERVED_NORMAL_STATE = '__zr_normal__';\n// export const PRESERVED_MERGED_STATE = '__zr_merged__';\n\nconst PRIMARY_STATES_KEYS = ['x', 'y', 'scaleX', 'scaleY', 'originX', 'originY', 'rotation', 'ignore'] as const;\nconst DEFAULT_ANIMATABLE_MAP: Partial> = {\n x: true,\n y: true,\n scaleX: true,\n scaleY: true,\n originX: true,\n originY: true,\n rotation: true,\n ignore: false\n};\n\nexport type ElementStatePropNames = (typeof PRIMARY_STATES_KEYS)[number] | 'textConfig';\nexport type ElementState = Pick & ElementCommonState\n\nexport type ElementCommonState = {\n hoverLayer?: boolean\n}\n\nexport type ElementCalculateTextPosition = (\n out: TextPositionCalculationResult,\n style: ElementTextConfig,\n rect: RectLike\n) => TextPositionCalculationResult;\n\nlet tmpTextPosCalcRes = {} as TextPositionCalculationResult;\nlet tmpBoundingRect = new BoundingRect(0, 0, 0, 0);\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface Element extends Transformable,\n Eventful<{\n [key in ElementEventName]: (e: ElementEvent) => void | boolean\n } & {\n [key in string]: (...args: any) => void | boolean\n }>,\n ElementEventHandlerProps {\n}\n\nclass Element {\n\n id: number = guid()\n /**\n * Element type\n */\n type: string\n\n /**\n * Element name\n */\n name: string\n\n /**\n * If ignore drawing and events of the element object\n */\n ignore: boolean\n\n /**\n * Whether to respond to mouse events.\n */\n silent: boolean\n\n /**\n * 是否是 Group\n */\n isGroup: boolean\n\n /**\n * Whether it can be dragged.\n */\n draggable: boolean | 'horizontal' | 'vertical'\n\n /**\n * Whether is it dragging.\n */\n dragging: boolean\n\n parent: Group\n\n animators: Animator[] = []\n\n /**\n * If ignore clip from it's parent or hosts.\n * Applied on itself and all it's children.\n *\n * NOTE: It won't affect the clipPath set on the children.\n */\n ignoreClip: boolean\n\n /**\n * If element is used as a component of other element.\n */\n __hostTarget: Element\n\n /**\n * ZRender instance will be assigned when element is associated with zrender\n */\n __zr: ZRenderType\n\n /**\n * Dirty bits.\n * From which painter will determine if this displayable object needs brush.\n */\n __dirty: number\n\n /**\n * If element was painted on the screen\n */\n __isRendered: boolean;\n\n /**\n * If element has been moved to the hover layer.\n *\n * If so, dirty will only trigger the zrender refresh hover layer\n */\n __inHover: boolean\n\n /**\n * path to clip the elements and its children, if it is a group.\n * @see http://www.w3.org/TR/2dcontext/#clipping-region\n */\n private _clipPath?: Path\n\n /**\n * Attached text element.\n * `position`, `style.textAlign`, `style.textVerticalAlign`\n * of element will be ignored if textContent.position is set\n */\n private _textContent?: ZRText\n\n /**\n * Text guide line.\n */\n private _textGuide?: Polyline\n\n /**\n * Config of textContent. Inlcuding layout, color, ...etc.\n */\n textConfig?: ElementTextConfig\n\n /**\n * Config for guide line calculating.\n *\n * NOTE: This is just a property signature. READ and WRITE are all done in echarts.\n */\n textGuideLineConfig?: ElementTextGuideLineConfig\n\n // FOR ECHARTS\n /**\n * Id for mapping animation\n */\n anid: string\n\n extra: Dictionary\n\n currentStates?: string[] = []\n // prevStates is for storager in echarts.\n prevStates?: string[]\n /**\n * Store of element state.\n * '__normal__' key is preserved for default properties.\n */\n states: Dictionary = {}\n\n /**\n * Animation config applied on state switching.\n */\n stateTransition: ElementAnimateConfig\n\n /**\n * Proxy function for getting state with given stateName.\n * ZRender will first try to get with stateProxy. Then find from states if stateProxy returns nothing\n *\n * targetStates will be given in useStates\n */\n stateProxy?: (stateName: string, targetStates?: string[]) => ElementState\n\n protected _normalState: ElementState\n\n // Temporary storage for inside text color configuration.\n private _innerTextDefaultStyle: DefaultTextStyle\n\n constructor(props?: Props) {\n this._init(props);\n }\n\n protected _init(props?: Props) {\n // Init default properties\n this.attr(props);\n }\n\n /**\n * Drift element\n * @param {number} dx dx on the global space\n * @param {number} dy dy on the global space\n */\n drift(dx: number, dy: number, e?: ElementEvent) {\n switch (this.draggable) {\n case 'horizontal':\n dy = 0;\n break;\n case 'vertical':\n dx = 0;\n break;\n }\n\n let m = this.transform;\n if (!m) {\n m = this.transform = [1, 0, 0, 1, 0, 0];\n }\n m[4] += dx;\n m[5] += dy;\n\n this.decomposeTransform();\n this.markRedraw();\n }\n\n /**\n * Hook before update\n */\n beforeUpdate() {}\n /**\n * Hook after update\n */\n afterUpdate() {}\n /**\n * Update each frame\n */\n update() {\n this.updateTransform();\n\n if (this.__dirty) {\n this.updateInnerText();\n }\n }\n\n updateInnerText(forceUpdate?: boolean) {\n // Update textContent\n const textEl = this._textContent;\n if (textEl && (!textEl.ignore || forceUpdate)) {\n if (!this.textConfig) {\n this.textConfig = {};\n }\n const textConfig = this.textConfig;\n const isLocal = textConfig.local;\n const innerTransformable = textEl.innerTransformable;\n\n let textAlign: TextAlign;\n let textVerticalAlign: TextVerticalAlign;\n\n let textStyleChanged = false;\n\n // Apply host's transform.\n innerTransformable.parent = isLocal ? this as unknown as Group : null;\n\n let innerOrigin = false;\n\n // Reset x/y/rotation\n innerTransformable.copyTransform(textEl);\n\n // Force set attached text's position if `position` is in config.\n if (textConfig.position != null) {\n let layoutRect = tmpBoundingRect;\n if (textConfig.layoutRect) {\n layoutRect.copy(textConfig.layoutRect);\n }\n else {\n layoutRect.copy(this.getBoundingRect());\n }\n if (!isLocal) {\n layoutRect.applyTransform(this.transform);\n }\n\n if (this.calculateTextPosition) {\n this.calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect);\n }\n else {\n calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect);\n }\n\n // TODO Should modify back if textConfig.position is set to null again.\n // Or textContent is detached.\n innerTransformable.x = tmpTextPosCalcRes.x;\n innerTransformable.y = tmpTextPosCalcRes.y;\n\n // User specified align/verticalAlign has higher priority, which is\n // useful in the case that attached text is rotated 90 degree.\n textAlign = tmpTextPosCalcRes.align;\n textVerticalAlign = tmpTextPosCalcRes.verticalAlign;\n\n const textOrigin = textConfig.origin;\n if (textOrigin && textConfig.rotation != null) {\n let relOriginX;\n let relOriginY;\n if (textOrigin === 'center') {\n relOriginX = layoutRect.width * 0.5;\n relOriginY = layoutRect.height * 0.5;\n }\n else {\n relOriginX = parsePercent(textOrigin[0], layoutRect.width);\n relOriginY = parsePercent(textOrigin[1], layoutRect.height);\n }\n\n innerOrigin = true;\n innerTransformable.originX = -innerTransformable.x + relOriginX + (isLocal ? 0 : layoutRect.x);\n innerTransformable.originY = -innerTransformable.y + relOriginY + (isLocal ? 0 : layoutRect.y);\n }\n }\n\n\n if (textConfig.rotation != null) {\n innerTransformable.rotation = textConfig.rotation;\n }\n\n // TODO\n const textOffset = textConfig.offset;\n if (textOffset) {\n innerTransformable.x += textOffset[0];\n innerTransformable.y += textOffset[1];\n\n // Not change the user set origin.\n if (!innerOrigin) {\n innerTransformable.originX = -textOffset[0];\n innerTransformable.originY = -textOffset[1];\n }\n }\n\n // Calculate text color\n const isInside = textConfig.inside == null // Force to be inside or not.\n ? (typeof textConfig.position === 'string' && textConfig.position.indexOf('inside') >= 0)\n : textConfig.inside;\n const innerTextDefaultStyle = this._innerTextDefaultStyle || (this._innerTextDefaultStyle = {});\n\n let textFill;\n let textStroke;\n let autoStroke;\n if (isInside && this.canBeInsideText()) {\n // In most cases `textContent` need this \"auto\" strategy.\n // So by default be 'auto'. Otherwise users need to literally\n // set `insideFill: 'auto', insideStroke: 'auto'` each time.\n textFill = textConfig.insideFill;\n textStroke = textConfig.insideStroke;\n\n if (textFill == null || textFill === 'auto') {\n textFill = this.getInsideTextFill();\n }\n if (textStroke == null || textStroke === 'auto') {\n textStroke = this.getInsideTextStroke(textFill);\n autoStroke = true;\n }\n }\n else {\n textFill = textConfig.outsideFill;\n textStroke = textConfig.outsideStroke;\n\n if (textFill == null || textFill === 'auto') {\n textFill = this.getOutsideFill();\n }\n // By default give a stroke to distinguish \"front end\" label with\n // messy background (like other text label, line or other graphic).\n // If textContent.style.fill specified, this auto stroke will not be used.\n if (textStroke == null || textStroke === 'auto') {\n // If some time need to customize the default stroke getter,\n // add some kind of override method.\n textStroke = this.getOutsideStroke(textFill);\n autoStroke = true;\n }\n }\n // Default `textFill` should must have a value to ensure text can be displayed.\n textFill = textFill || '#000';\n\n if (textFill !== innerTextDefaultStyle.fill\n || textStroke !== innerTextDefaultStyle.stroke\n || autoStroke !== innerTextDefaultStyle.autoStroke\n || textAlign !== innerTextDefaultStyle.align\n || textVerticalAlign !== innerTextDefaultStyle.verticalAlign\n ) {\n\n textStyleChanged = true;\n\n innerTextDefaultStyle.fill = textFill;\n innerTextDefaultStyle.stroke = textStroke;\n innerTextDefaultStyle.autoStroke = autoStroke;\n innerTextDefaultStyle.align = textAlign;\n innerTextDefaultStyle.verticalAlign = textVerticalAlign;\n\n textEl.setDefaultTextStyle(innerTextDefaultStyle);\n }\n\n // Mark textEl to update transform.\n // DON'T use markRedraw. It will cause Element itself to dirty again.\n textEl.__dirty |= REDARAW_BIT;\n\n if (textStyleChanged) {\n // Only mark style dirty if necessary. Update ZRText is costly.\n textEl.dirtyStyle(true);\n }\n }\n }\n\n protected canBeInsideText() {\n return true;\n }\n\n protected getInsideTextFill(): string | undefined {\n return '#fff';\n }\n\n protected getInsideTextStroke(textFill: string): string | undefined {\n return '#000';\n }\n\n protected getOutsideFill(): string | undefined {\n return this.__zr && this.__zr.isDarkMode() ? LIGHT_LABEL_COLOR : DARK_LABEL_COLOR;\n }\n\n protected getOutsideStroke(textFill: string): string {\n const backgroundColor = this.__zr && this.__zr.getBackgroundColor();\n let colorArr = typeof backgroundColor === 'string' && parse(backgroundColor as string);\n if (!colorArr) {\n colorArr = [255, 255, 255, 1];\n }\n // Assume blending on a white / black(dark) background.\n const alpha = colorArr[3];\n const isDark = this.__zr.isDarkMode();\n for (let i = 0; i < 3; i++) {\n colorArr[i] = colorArr[i] * alpha + (isDark ? 0 : 255) * (1 - alpha);\n }\n colorArr[3] = 1;\n return stringify(colorArr, 'rgba');\n }\n\n traverse(\n cb: (this: Context, el: Element) => void,\n context?: Context\n ) {}\n\n protected attrKV(key: string, value: unknown) {\n if (key === 'textConfig') {\n this.setTextConfig(value as ElementTextConfig);\n }\n else if (key === 'textContent') {\n this.setTextContent(value as ZRText);\n }\n else if (key === 'clipPath') {\n this.setClipPath(value as Path);\n }\n else if (key === 'extra') {\n this.extra = this.extra || {};\n extend(this.extra, value);\n }\n else {\n (this as any)[key] = value;\n }\n }\n\n /**\n * Hide the element\n */\n hide() {\n this.ignore = true;\n this.markRedraw();\n }\n\n /**\n * Show the element\n */\n show() {\n this.ignore = false;\n this.markRedraw();\n }\n\n attr(keyOrObj: Props): this\n attr(keyOrObj: T, value: Props[T]): this\n attr(keyOrObj: keyof Props | Props, value?: unknown): this {\n if (typeof keyOrObj === 'string') {\n this.attrKV(keyOrObj as keyof ElementProps, value as AllPropTypes);\n }\n else if (isObject(keyOrObj)) {\n let obj = keyOrObj as object;\n let keysArr = keys(obj);\n for (let i = 0; i < keysArr.length; i++) {\n let key = keysArr[i];\n this.attrKV(key as keyof ElementProps, keyOrObj[key]);\n }\n }\n this.markRedraw();\n return this;\n }\n\n // Save current state to normal\n saveCurrentToNormalState(toState: ElementState) {\n this._innerSaveToNormal(toState);\n\n // If we are switching from normal to other state during animation.\n // We need to save final value of animation to the normal state. Not interpolated value.\n const normalState = this._normalState;\n for (let i = 0; i < this.animators.length; i++) {\n const animator = this.animators[i];\n const fromStateTransition = animator.__fromStateTransition;\n // Ignore animation from state transition(except normal).\n if (fromStateTransition && fromStateTransition !== PRESERVED_NORMAL_STATE) {\n continue;\n }\n\n const targetName = animator.targetName;\n // Respecting the order of animation if multiple animator is\n // animating on the same property(If additive animation is used)\n const target = targetName\n ? (normalState as any)[targetName] : normalState;\n // Only save keys that are changed by the states.\n animator.saveFinalToTarget(target);\n }\n }\n\n protected _innerSaveToNormal(toState: ElementState) {\n let normalState = this._normalState;\n if (!normalState) {\n // Clear previous stored normal states when switching from normalState to otherState.\n normalState = this._normalState = {};\n }\n if (toState.textConfig && !normalState.textConfig) {\n normalState.textConfig = this.textConfig;\n }\n\n this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS);\n }\n\n protected _savePrimaryToNormal(\n toState: Dictionary, normalState: Dictionary, primaryKeys: readonly string[]\n ) {\n for (let i = 0; i < primaryKeys.length; i++) {\n let key = primaryKeys[i];\n // Only save property that will be changed by toState\n // and has not been saved to normalState yet.\n if (toState[key] != null && !(key in normalState)) {\n (normalState as any)[key] = (this as any)[key];\n }\n }\n }\n\n /**\n * If has any state.\n */\n hasState() {\n return this.currentStates.length > 0;\n }\n\n /**\n * Get state object\n */\n getState(name: string) {\n return this.states[name];\n }\n\n\n /**\n * Ensure state exists. If not, will create one and return.\n */\n ensureState(name: string) {\n const states = this.states;\n if (!states[name]) {\n states[name] = {};\n }\n return states[name];\n }\n\n /**\n * Clear all states.\n */\n clearStates(noAnimation?: boolean) {\n this.useState(PRESERVED_NORMAL_STATE, false, noAnimation);\n // TODO set _normalState to null?\n }\n /**\n * Use state. State is a collection of properties.\n * Will return current state object if state exists and stateName has been changed.\n *\n * @param stateName State name to be switched to\n * @param keepCurrentState If keep current states.\n * If not, it will inherit from the normal state.\n */\n useState(stateName: string, keepCurrentStates?: boolean, noAnimation?: boolean, forceUseHoverLayer?: boolean) {\n // Use preserved word __normal__\n // TODO: Only restore changed properties when restore to normal???\n const toNormalState = stateName === PRESERVED_NORMAL_STATE;\n const hasStates = this.hasState();\n\n if (!hasStates && toNormalState) {\n // If switched from normal to normal.\n return;\n }\n\n const currentStates = this.currentStates;\n const animationCfg = this.stateTransition;\n\n // No need to change in following cases:\n // 1. Keep current states. and already being applied before.\n // 2. Don't keep current states. And new state is same with the only one exists state.\n if (indexOf(currentStates, stateName) >= 0 && (keepCurrentStates || currentStates.length === 1)) {\n return;\n }\n\n let state;\n if (this.stateProxy && !toNormalState) {\n state = this.stateProxy(stateName);\n }\n\n if (!state) {\n state = (this.states && this.states[stateName]);\n }\n\n if (!state && !toNormalState) {\n logError(`State ${stateName} not exists.`);\n return;\n }\n\n if (!toNormalState) {\n this.saveCurrentToNormalState(state);\n }\n\n const useHoverLayer = !!((state && state.hoverLayer) || forceUseHoverLayer);\n\n if (useHoverLayer) {\n // Enter hover layer before states update.\n this._toggleHoverLayerFlag(true);\n }\n\n this._applyStateObj(\n stateName,\n state,\n this._normalState,\n keepCurrentStates,\n !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0,\n animationCfg\n );\n\n // Also set text content.\n const textContent = this._textContent;\n const textGuide = this._textGuide;\n if (textContent) {\n // Force textContent use hover layer if self is using it.\n textContent.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer);\n }\n if (textGuide) {\n textGuide.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer);\n }\n\n if (toNormalState) {\n // Clear state\n this.currentStates = [];\n // Reset normal state.\n this._normalState = {};\n }\n else {\n if (!keepCurrentStates) {\n this.currentStates = [stateName];\n }\n else {\n this.currentStates.push(stateName);\n }\n }\n\n // Update animating target to the new object after state changed.\n this._updateAnimationTargets();\n\n this.markRedraw();\n\n if (!useHoverLayer && this.__inHover) {\n // Leave hover layer after states update and markRedraw.\n this._toggleHoverLayerFlag(false);\n // NOTE: avoid unexpected refresh when moving out from hover layer!!\n // Only clear from hover layer.\n this.__dirty &= ~REDARAW_BIT;\n }\n\n // Return used state.\n return state;\n }\n\n /**\n * Apply multiple states.\n * @param states States list.\n */\n useStates(states: string[], noAnimation?: boolean, forceUseHoverLayer?: boolean) {\n if (!states.length) {\n this.clearStates();\n }\n else {\n const stateObjects: ElementState[] = [];\n const currentStates = this.currentStates;\n const len = states.length;\n let notChange = len === currentStates.length;\n if (notChange) {\n for (let i = 0; i < len; i++) {\n if (states[i] !== currentStates[i]) {\n notChange = false;\n break;\n }\n }\n }\n if (notChange) {\n return;\n }\n\n for (let i = 0; i < len; i++) {\n const stateName = states[i];\n let stateObj: ElementState;\n if (this.stateProxy) {\n stateObj = this.stateProxy(stateName, states);\n }\n if (!stateObj) {\n stateObj = this.states[stateName];\n }\n if (stateObj) {\n stateObjects.push(stateObj);\n }\n }\n\n const lastStateObj = stateObjects[len - 1];\n const useHoverLayer = !!((lastStateObj && lastStateObj.hoverLayer) || forceUseHoverLayer);\n if (useHoverLayer) {\n // Enter hover layer before states update.\n this._toggleHoverLayerFlag(true);\n }\n\n const mergedState = this._mergeStates(stateObjects);\n const animationCfg = this.stateTransition;\n\n this.saveCurrentToNormalState(mergedState);\n\n this._applyStateObj(\n states.join(','),\n mergedState,\n this._normalState,\n false,\n !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0,\n animationCfg\n );\n\n const textContent = this._textContent;\n const textGuide = this._textGuide;\n if (textContent) {\n textContent.useStates(states, noAnimation, useHoverLayer);\n }\n if (textGuide) {\n textGuide.useStates(states, noAnimation, useHoverLayer);\n }\n\n this._updateAnimationTargets();\n\n // Create a copy\n this.currentStates = states.slice();\n this.markRedraw();\n\n if (!useHoverLayer && this.__inHover) {\n // Leave hover layer after states update and markRedraw.\n this._toggleHoverLayerFlag(false);\n // NOTE: avoid unexpected refresh when moving out from hover layer!!\n // Only clear from hover layer.\n this.__dirty &= ~REDARAW_BIT;\n }\n }\n }\n\n /**\n * Update animation targets when reference is changed.\n */\n private _updateAnimationTargets() {\n for (let i = 0; i < this.animators.length; i++) {\n const animator = this.animators[i];\n if (animator.targetName) {\n animator.changeTarget((this as any)[animator.targetName]);\n }\n }\n }\n\n /**\n * Remove state\n * @param state State to remove\n */\n removeState(state: string) {\n const idx = indexOf(this.currentStates, state);\n if (idx >= 0) {\n const currentStates = this.currentStates.slice();\n currentStates.splice(idx, 1);\n this.useStates(currentStates);\n }\n }\n\n /**\n * Replace exists state.\n * @param oldState\n * @param newState\n * @param forceAdd If still add when even if replaced target not exists.\n */\n replaceState(oldState: string, newState: string, forceAdd: boolean) {\n const currentStates = this.currentStates.slice();\n const idx = indexOf(currentStates, oldState);\n const newStateExists = indexOf(currentStates, newState) >= 0;\n if (idx >= 0) {\n if (!newStateExists) {\n // Replace the old with the new one.\n currentStates[idx] = newState;\n }\n else {\n // Only remove the old one.\n currentStates.splice(idx, 1);\n }\n }\n else if (forceAdd && !newStateExists) {\n currentStates.push(newState);\n }\n this.useStates(currentStates);\n }\n\n /**\n * Toogle state.\n */\n toggleState(state: string, enable: boolean) {\n if (enable) {\n this.useState(state, true);\n }\n else {\n this.removeState(state);\n }\n }\n\n protected _mergeStates(states: ElementState[]) {\n const mergedState: ElementState = {};\n let mergedTextConfig: ElementTextConfig;\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n extend(mergedState, state);\n\n if (state.textConfig) {\n mergedTextConfig = mergedTextConfig || {};\n extend(mergedTextConfig, state.textConfig);\n }\n }\n if (mergedTextConfig) {\n mergedState.textConfig = mergedTextConfig;\n }\n\n return mergedState;\n }\n\n protected _applyStateObj(\n stateName: string,\n state: ElementState,\n normalState: ElementState,\n keepCurrentStates: boolean,\n transition: boolean,\n animationCfg: ElementAnimateConfig\n ) {\n const needsRestoreToNormal = !(state && keepCurrentStates);\n\n // TODO: Save current state to normal?\n // TODO: Animation\n if (state && state.textConfig) {\n // Inherit from current state or normal state.\n this.textConfig = extend(\n {},\n keepCurrentStates ? this.textConfig : normalState.textConfig\n );\n extend(this.textConfig, state.textConfig);\n }\n else if (needsRestoreToNormal) {\n if (normalState.textConfig) { // Only restore if changed and saved.\n this.textConfig = normalState.textConfig;\n }\n }\n\n const transitionTarget: Dictionary = {};\n let hasTransition = false;\n\n for (let i = 0; i < PRIMARY_STATES_KEYS.length; i++) {\n const key = PRIMARY_STATES_KEYS[i];\n const propNeedsTransition = transition && DEFAULT_ANIMATABLE_MAP[key];\n\n if (state && state[key] != null) {\n if (propNeedsTransition) {\n hasTransition = true;\n transitionTarget[key] = state[key];\n }\n else {\n // Replace if it exist in target state\n (this as any)[key] = state[key];\n }\n }\n else if (needsRestoreToNormal) {\n if (normalState[key] != null) {\n if (propNeedsTransition) {\n hasTransition = true;\n transitionTarget[key] = normalState[key];\n }\n else {\n // Restore to normal state\n (this as any)[key] = normalState[key];\n }\n }\n }\n }\n\n if (!transition) {\n // Keep the running animation to the new values after states changed.\n // Not simply stop animation. Or it may have jump effect.\n for (let i = 0; i < this.animators.length; i++) {\n const animator = this.animators[i];\n const targetName = animator.targetName;\n animator.__changeFinalValue(targetName\n ? ((state || normalState) as any)[targetName]\n : (state || normalState)\n );\n }\n }\n\n if (hasTransition) {\n this._transitionState(\n stateName,\n transitionTarget as Props,\n animationCfg\n );\n }\n }\n\n /**\n * Component is some elements attached on this element for specific purpose.\n * Like clipPath, textContent\n */\n private _attachComponent(componentEl: Element) {\n if (componentEl.__zr && !componentEl.__hostTarget) {\n throw new Error('Text element has been added to zrender.');\n }\n\n if (componentEl === this) {\n throw new Error('Recursive component attachment.');\n }\n\n const zr = this.__zr;\n if (zr) {\n // Needs to add self to zrender. For rerender triggering, or animation.\n componentEl.addSelfToZr(zr);\n }\n\n componentEl.__zr = zr;\n componentEl.__hostTarget = this as unknown as Element;\n }\n\n private _detachComponent(componentEl: Element) {\n if (componentEl.__zr) {\n componentEl.removeSelfFromZr(componentEl.__zr);\n }\n\n componentEl.__zr = null;\n componentEl.__hostTarget = null;\n }\n\n /**\n * Get clip path\n */\n getClipPath() {\n return this._clipPath;\n }\n\n /**\n * Set clip path\n *\n * clipPath can't be shared between two elements.\n */\n setClipPath(clipPath: Path) {\n // Remove previous clip path\n if (this._clipPath && this._clipPath !== clipPath) {\n this.removeClipPath();\n }\n\n this._attachComponent(clipPath);\n\n this._clipPath = clipPath;\n this.markRedraw();\n }\n\n /**\n * Remove clip path\n */\n removeClipPath() {\n const clipPath = this._clipPath;\n if (clipPath) {\n this._detachComponent(clipPath);\n this._clipPath = null;\n this.markRedraw();\n }\n }\n\n /**\n * Get attached text content.\n */\n getTextContent(): ZRText {\n return this._textContent;\n }\n\n /**\n * Attach text on element\n */\n setTextContent(textEl: ZRText) {\n const previousTextContent = this._textContent;\n if (previousTextContent === textEl) {\n return;\n }\n // Remove previous textContent\n if (previousTextContent && previousTextContent !== textEl) {\n this.removeTextContent();\n }\n\n if (textEl.__zr && !textEl.__hostTarget) {\n throw new Error('Text element has been added to zrender.');\n }\n\n textEl.innerTransformable = new Transformable();\n\n this._attachComponent(textEl);\n\n this._textContent = textEl;\n\n this.markRedraw();\n }\n\n /**\n * Set layout of attached text. Will merge with the previous.\n */\n setTextConfig(cfg: ElementTextConfig) {\n // TODO hide cfg property?\n if (!this.textConfig) {\n this.textConfig = {};\n }\n extend(this.textConfig, cfg);\n this.markRedraw();\n }\n\n /**\n * Remove text config\n */\n removeTextConfig() {\n this.textConfig = null;\n this.markRedraw();\n }\n\n /**\n * Remove attached text element.\n */\n removeTextContent() {\n const textEl = this._textContent;\n if (textEl) {\n textEl.innerTransformable = null;\n this._detachComponent(textEl);\n this._textContent = null;\n this._innerTextDefaultStyle = null;\n this.markRedraw();\n }\n }\n\n getTextGuideLine(): Polyline {\n return this._textGuide;\n }\n\n setTextGuideLine(guideLine: Polyline) {\n // Remove previous clip path\n if (this._textGuide && this._textGuide !== guideLine) {\n this.removeTextGuideLine();\n }\n\n this._attachComponent(guideLine);\n\n this._textGuide = guideLine;\n\n this.markRedraw();\n }\n\n removeTextGuideLine() {\n const textGuide = this._textGuide;\n if (textGuide) {\n this._detachComponent(textGuide);\n this._textGuide = null;\n this.markRedraw();\n }\n }\n /**\n * Mark element needs to be repainted\n */\n markRedraw() {\n this.__dirty |= REDARAW_BIT;\n const zr = this.__zr;\n if (zr) {\n if (this.__inHover) {\n zr.refreshHover();\n }\n else {\n zr.refresh();\n }\n }\n\n // Used as a clipPath or textContent\n if (this.__hostTarget) {\n this.__hostTarget.markRedraw();\n }\n }\n\n /**\n * Besides marking elements to be refreshed.\n * It will also invalid all cache and doing recalculate next frame.\n */\n dirty() {\n this.markRedraw();\n }\n\n private _toggleHoverLayerFlag(inHover: boolean) {\n this.__inHover = inHover;\n const textContent = this._textContent;\n const textGuide = this._textGuide;\n if (textContent) {\n textContent.__inHover = inHover;\n }\n if (textGuide) {\n textGuide.__inHover = inHover;\n }\n }\n\n /**\n * Add self from zrender instance.\n * Not recursively because it will be invoked when element added to storage.\n */\n addSelfToZr(zr: ZRenderType) {\n if (this.__zr === zr) {\n return;\n }\n\n this.__zr = zr;\n // 添加动画\n const animators = this.animators;\n if (animators) {\n for (let i = 0; i < animators.length; i++) {\n zr.animation.addAnimator(animators[i]);\n }\n }\n\n if (this._clipPath) {\n this._clipPath.addSelfToZr(zr);\n }\n if (this._textContent) {\n this._textContent.addSelfToZr(zr);\n }\n if (this._textGuide) {\n this._textGuide.addSelfToZr(zr);\n }\n }\n\n /**\n * Remove self from zrender instance.\n * Not recursively because it will be invoked when element added to storage.\n */\n removeSelfFromZr(zr: ZRenderType) {\n if (!this.__zr) {\n return;\n }\n\n this.__zr = null;\n // Remove animation\n const animators = this.animators;\n if (animators) {\n for (let i = 0; i < animators.length; i++) {\n zr.animation.removeAnimator(animators[i]);\n }\n }\n\n if (this._clipPath) {\n this._clipPath.removeSelfFromZr(zr);\n }\n if (this._textContent) {\n this._textContent.removeSelfFromZr(zr);\n }\n if (this._textGuide) {\n this._textGuide.removeSelfFromZr(zr);\n }\n }\n\n /**\n * 动画\n *\n * @param path The key to fetch value from object. Mostly style or shape.\n * @param loop Whether to loop animation.\n * @example:\n * el.animate('style', false)\n * .when(1000, {x: 10} )\n * .done(function(){ // Animation done })\n * .start()\n */\n animate(key?: string, loop?: boolean) {\n let target = key ? (this as any)[key] : this;\n\n if (!target) {\n logError(\n 'Property \"'\n + key\n + '\" is not existed in element '\n + this.id\n );\n return;\n }\n\n const animator = new Animator(target, loop);\n this.addAnimator(animator, key);\n return animator;\n }\n\n addAnimator(animator: Animator, key: string): void {\n const zr = this.__zr;\n\n const el = this;\n\n animator.during(function () {\n el.updateDuringAnimation(key as string);\n }).done(function () {\n const animators = el.animators;\n // FIXME Animator will not be removed if use `Animator#stop` to stop animation\n const idx = indexOf(animators, animator);\n if (idx >= 0) {\n animators.splice(idx, 1);\n }\n });\n\n this.animators.push(animator);\n\n // If animate after added to the zrender\n if (zr) {\n zr.animation.addAnimator(animator);\n }\n\n // Wake up zrender to start the animation loop.\n zr && zr.wakeUp();\n }\n\n updateDuringAnimation(key: string) {\n this.markRedraw();\n }\n\n /**\n * 停止动画\n * @param {boolean} forwardToLast If move to last frame before stop\n */\n stopAnimation(scope?: string, forwardToLast?: boolean) {\n const animators = this.animators;\n const len = animators.length;\n const leftAnimators: Animator[] = [];\n for (let i = 0; i < len; i++) {\n const animator = animators[i];\n if (!scope || scope === animator.scope) {\n animator.stop(forwardToLast);\n }\n else {\n leftAnimators.push(animator);\n }\n }\n this.animators = leftAnimators;\n\n return this;\n }\n\n /**\n * @param animationProps A map to specify which property to animate. If not specified, will animate all.\n * @example\n * // Animate position\n * el.animateTo({\n * position: [10, 10]\n * }, { done: () => { // done } })\n *\n * // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing\n * el.animateTo({\n * shape: {\n * width: 500\n * },\n * style: {\n * fill: 'red'\n * }\n * position: [10, 10]\n * }, {\n * duration: 100,\n * delay: 100,\n * easing: 'cubicOut',\n * done: () => { // done }\n * })\n */\n animateTo(target: Props, cfg?: ElementAnimateConfig, animationProps?: MapToType) {\n animateTo(this, target, cfg, animationProps);\n }\n\n /**\n * Animate from the target state to current state.\n * The params and the value are the same as `this.animateTo`.\n */\n\n // Overload definitions\n animateFrom(\n target: Props, cfg: ElementAnimateConfig, animationProps?: MapToType\n ) {\n animateTo(this, target, cfg, animationProps, true);\n }\n\n protected _transitionState(\n stateName: string, target: Props, cfg?: ElementAnimateConfig, animationProps?: MapToType\n ) {\n const animators = animateTo(this, target, cfg, animationProps);\n for (let i = 0; i < animators.length; i++) {\n animators[i].__fromStateTransition = stateName;\n }\n }\n\n /**\n * Interface of getting the minimum bounding box.\n */\n getBoundingRect(): BoundingRect {\n return null;\n }\n\n getPaintRect(): BoundingRect {\n return null;\n }\n\n /**\n * The string value of `textPosition` needs to be calculated to a real postion.\n * For example, `'inside'` is calculated to `[rect.width/2, rect.height/2]`\n * by default. See `contain/text.js#calculateTextPosition` for more details.\n * But some coutom shapes like \"pin\", \"flag\" have center that is not exactly\n * `[width/2, height/2]`. So we provide this hook to customize the calculation\n * for those shapes. It will be called if the `style.textPosition` is a string.\n * @param {Obejct} [out] Prepared out object. If not provided, this method should\n * be responsible for creating one.\n * @param {module:zrender/graphic/Style} style\n * @param {Object} rect {x, y, width, height}\n * @return {Obejct} out The same as the input out.\n * {\n * x: number. mandatory.\n * y: number. mandatory.\n * align: string. optional. use style.textAlign by default.\n * verticalAlign: string. optional. use style.textVerticalAlign by default.\n * }\n */\n calculateTextPosition: ElementCalculateTextPosition;\n\n protected static initDefaultProps = (function () {\n const elProto = Element.prototype;\n elProto.type = 'element';\n elProto.name = '';\n elProto.ignore = false;\n elProto.silent = false;\n elProto.isGroup = false;\n elProto.draggable = false;\n elProto.dragging = false;\n elProto.ignoreClip = false;\n elProto.__inHover = false;\n elProto.__dirty = REDARAW_BIT;\n\n\n const logs: Dictionary = {};\n function logDeprecatedError(key: string, xKey: string, yKey: string) {\n if (!logs[key + xKey + yKey]) {\n console.warn(`DEPRECATED: '${key}' has been deprecated. use '${xKey}', '${yKey}' instead`);\n logs[key + xKey + yKey] = true;\n }\n }\n // Legacy transform properties. position and scale\n function createLegacyProperty(\n key: string,\n privateKey: string,\n xKey: string,\n yKey: string\n ) {\n Object.defineProperty(elProto, key, {\n get() {\n logDeprecatedError(key, xKey, yKey);\n if (!this[privateKey]) {\n const pos: number[] = this[privateKey] = [];\n enhanceArray(this, pos);\n }\n return this[privateKey];\n },\n set(pos: number[]) {\n logDeprecatedError(key, xKey, yKey);\n this[xKey] = pos[0];\n this[yKey] = pos[1];\n this[privateKey] = pos;\n enhanceArray(this, pos);\n }\n });\n function enhanceArray(self: any, pos: number[]) {\n Object.defineProperty(pos, 0, {\n get() {\n return self[xKey];\n },\n set(val: number) {\n self[xKey] = val;\n }\n });\n Object.defineProperty(pos, 1, {\n get() {\n return self[yKey];\n },\n set(val: number) {\n self[yKey] = val;\n }\n });\n }\n }\n if (Object.defineProperty && (!(env as any).browser.ie || (env as any).browser.version > 8)) {\n createLegacyProperty('position', '_legacyPos', 'x', 'y');\n createLegacyProperty('scale', '_legacyScale', 'scaleX', 'scaleY');\n createLegacyProperty('origin', '_legacyOrigin', 'originX', 'originY');\n }\n })()\n}\n\nmixin(Element, Eventful);\nmixin(Element, Transformable);\n\nfunction animateTo(\n animatable: Element,\n target: Dictionary,\n cfg: ElementAnimateConfig,\n animationProps: Dictionary,\n reverse?: boolean\n) {\n cfg = cfg || {};\n const animators: Animator[] = [];\n animateToShallow(\n animatable,\n '',\n animatable,\n target,\n cfg,\n animationProps,\n animators,\n reverse\n );\n\n let finishCount = animators.length;\n let doneHappened = false;\n const cfgDone = cfg.done;\n const cfgAborted = cfg.aborted;\n\n const doneCb = () => {\n doneHappened = true;\n finishCount--;\n if (finishCount <= 0) {\n doneHappened\n ? (cfgDone && cfgDone())\n : (cfgAborted && cfgAborted());\n }\n };\n\n const abortedCb = () => {\n finishCount--;\n if (finishCount <= 0) {\n doneHappened\n ? (cfgDone && cfgDone())\n : (cfgAborted && cfgAborted());\n }\n };\n\n // No animators. This should be checked before animators[i].start(),\n // because 'done' may be executed immediately if no need to animate.\n if (!finishCount) {\n cfgDone && cfgDone();\n }\n\n // Adding during callback to the first animator\n if (animators.length > 0 && cfg.during) {\n // TODO If there are two animators in animateTo, and the first one is stopped by other animator.\n animators[0].during((target, percent) => {\n cfg.during(percent);\n });\n }\n\n // Start after all animators created\n // Incase any animator is done immediately when all animation properties are not changed\n for (let i = 0; i < animators.length; i++) {\n const animator = animators[i];\n if (doneCb) {\n animator.done(doneCb);\n }\n if (abortedCb) {\n animator.aborted(abortedCb);\n }\n animator.start(cfg.easing, cfg.force);\n }\n\n return animators;\n}\n\nfunction copyArrShallow(source: number[], target: number[], len: number) {\n for (let i = 0; i < len; i++) {\n source[i] = target[i];\n }\n}\n\nfunction is2DArray(value: any[]): value is number[][] {\n return isArrayLike(value[0]);\n}\n\nfunction copyValue(target: Dictionary, source: Dictionary, key: string) {\n if (isArrayLike(source[key])) {\n if (!isArrayLike(target[key])) {\n target[key] = [];\n }\n\n if (isTypedArray(source[key])) {\n const len = source[key].length;\n if (target[key].length !== len) {\n target[key] = new (source[key].constructor)(len);\n copyArrShallow(target[key], source[key], len);\n }\n }\n else {\n const sourceArr = source[key] as any[];\n const targetArr = target[key] as any[];\n\n const len0 = sourceArr.length;\n if (is2DArray(sourceArr)) {\n // NOTE: each item should have same length\n const len1 = sourceArr[0].length;\n\n for (let i = 0; i < len0; i++) {\n if (!targetArr[i]) {\n targetArr[i] = Array.prototype.slice.call(sourceArr[i]);\n }\n else {\n copyArrShallow(targetArr[i], sourceArr[i], len1);\n }\n }\n }\n else {\n copyArrShallow(targetArr, sourceArr, len0);\n }\n\n targetArr.length = sourceArr.length;\n }\n }\n else {\n target[key] = source[key];\n }\n}\n\nfunction animateToShallow(\n animatable: Element,\n topKey: string,\n source: Dictionary,\n target: Dictionary,\n cfg: ElementAnimateConfig,\n animationProps: Dictionary | true,\n animators: Animator[],\n reverse: boolean // If `true`, animate from the `target` to current state.\n) {\n const animatableKeys: string[] = [];\n const changedKeys: string[] = [];\n const targetKeys = keys(target);\n const duration = cfg.duration;\n const delay = cfg.delay;\n const additive = cfg.additive;\n const setToFinal = cfg.setToFinal;\n const animateAll = !isObject(animationProps);\n for (let k = 0; k < targetKeys.length; k++) {\n const innerKey = targetKeys[k] as string;\n\n if (source[innerKey] != null\n && target[innerKey] != null // Can't animate between null value. assign directly. For example. stroke animate from #fff to null.\n && (animateAll || (animationProps as Dictionary)[innerKey])\n ) {\n if (isObject(target[innerKey]) && !isArrayLike(target[innerKey])) {\n if (topKey) {\n // logError('Only support 1 depth nest object animation.');\n // Assign directly.\n // TODO richText?\n if (!reverse) {\n source[innerKey] = target[innerKey];\n animatable.updateDuringAnimation(topKey);\n }\n continue;\n }\n animateToShallow(\n animatable,\n innerKey,\n source[innerKey],\n target[innerKey],\n cfg,\n animationProps && (animationProps as Dictionary)[innerKey],\n animators,\n reverse\n );\n }\n else {\n animatableKeys.push(innerKey);\n changedKeys.push(innerKey);\n }\n }\n else if (!reverse) {\n // Assign target value directly.\n source[innerKey] = target[innerKey];\n animatable.updateDuringAnimation(topKey);\n // Previous animation will be stopped on the changed keys.\n // So direct assign is also included.\n changedKeys.push(innerKey);\n }\n }\n\n const keyLen = animatableKeys.length;\n\n if (keyLen > 0\n // cfg.force is mainly for keep invoking onframe and ondone callback even if animation is not necessary.\n // So if there is already has animators. There is no need to create another animator if not necessary.\n // Or it will always add one more with empty target.\n || (cfg.force && !animators.length)\n ) {\n // Find last animator animating same prop.\n const existsAnimators = animatable.animators;\n let existsAnimatorsOnSameTarget: Animator[] = [];\n for (let i = 0; i < existsAnimators.length; i++) {\n // Use key string instead object reference because ref may be changed.\n if (existsAnimators[i].targetName === topKey) {\n existsAnimatorsOnSameTarget.push(existsAnimators[i]);\n }\n }\n\n if (!additive && existsAnimatorsOnSameTarget.length) {\n // Stop exists animation on specific tracks. Only one animator available for each property.\n // TODO Should invoke previous animation callback?\n for (let i = 0; i < existsAnimatorsOnSameTarget.length; i++) {\n const allAborted = existsAnimatorsOnSameTarget[i].stopTracks(changedKeys);\n if (allAborted) { // This animator can't be used.\n const idx = indexOf(existsAnimators, existsAnimatorsOnSameTarget[i]);\n existsAnimators.splice(idx, 1);\n }\n }\n }\n\n let revertedSource: Dictionary;\n let reversedTarget: Dictionary;\n let sourceClone: Dictionary;\n if (reverse) {\n reversedTarget = {};\n if (setToFinal) {\n revertedSource = {};\n }\n for (let i = 0; i < keyLen; i++) {\n const innerKey = animatableKeys[i];\n reversedTarget[innerKey] = source[innerKey];\n if (setToFinal) {\n revertedSource[innerKey] = target[innerKey];\n }\n else {\n // The usage of \"animateFrom\" expects that the element props has been updated dirctly to\n // \"final\" values outside, and input the \"from\" values here (i.e., in variable `target` here).\n // So here we assign the \"from\" values directly to element here (rather that in the next frame)\n // to prevent the \"final\" values from being read in any other places (like other running\n // animator during callbacks).\n // But if `setToFinal: true` this feature can not be satisfied.\n source[innerKey] = target[innerKey];\n }\n }\n }\n else if (setToFinal) {\n sourceClone = {};\n for (let i = 0; i < keyLen; i++) {\n const innerKey = animatableKeys[i];\n // NOTE: Must clone source after the stopTracks. The property may be modified in stopTracks.\n sourceClone[innerKey] = cloneValue(source[innerKey]);\n // Use copy, not change the original reference\n // Copy from target to source.\n copyValue(source, target, innerKey);\n }\n }\n\n const animator = new Animator(source, false, additive ? existsAnimatorsOnSameTarget : null);\n animator.targetName = topKey;\n if (cfg.scope) {\n animator.scope = cfg.scope;\n }\n\n if (setToFinal && revertedSource) {\n animator.whenWithKeys(0, revertedSource, animatableKeys);\n }\n if (sourceClone) {\n animator.whenWithKeys(0, sourceClone, animatableKeys);\n }\n\n animator.whenWithKeys(\n duration == null ? 500 : duration,\n reverse ? reversedTarget : target,\n animatableKeys\n ).delay(delay || 0);\n\n animatable.addAnimator(animator, topKey);\n animators.push(animator);\n }\n}\n\n\nexport default Element;\n","/**\n * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上\n * @module zrender/graphic/Group\n * @example\n * const Group = require('zrender/graphic/Group');\n * const Circle = require('zrender/graphic/shape/Circle');\n * const 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\nimport * as zrUtil from '../core/util';\nimport Element, { ElementProps } from '../Element';\nimport BoundingRect from '../core/BoundingRect';\nimport { MatrixArray } from '../core/matrix';\nimport Displayable from './Displayable';\nimport { ZRenderType } from '../zrender';\n\nexport interface GroupProps extends ElementProps {\n}\n\nclass Group extends Element {\n\n readonly isGroup = true\n\n private _children: Element[] = []\n\n\n constructor(opts?: GroupProps) {\n super();\n\n this.attr(opts);\n }\n\n /**\n * Get children reference.\n */\n childrenRef() {\n return this._children;\n }\n\n /**\n * Get children copy.\n */\n children() {\n return this._children.slice();\n }\n\n /**\n * 获取指定 index 的儿子节点\n */\n childAt(idx: number): Element {\n return this._children[idx];\n }\n\n /**\n * 获取指定名字的儿子节点\n */\n childOfName(name: string): Element {\n const children = this._children;\n for (let i = 0; i < children.length; i++) {\n if (children[i].name === name) {\n return children[i];\n }\n }\n }\n\n childCount(): number {\n return this._children.length;\n }\n\n /**\n * 添加子节点到最后\n */\n add(child: Element): Group {\n if (child) {\n if (child !== this && child.parent !== this) {\n this._children.push(child);\n this._doAdd(child);\n }\n if (child.__hostTarget) {\n throw 'This elemenet has been used as an attachment';\n }\n }\n\n return this;\n }\n\n /**\n * 添加子节点在 nextSibling 之前\n */\n addBefore(child: Element, nextSibling: Element) {\n if (child && child !== this && child.parent !== this\n && nextSibling && nextSibling.parent === this) {\n\n const children = this._children;\n const idx = children.indexOf(nextSibling);\n\n if (idx >= 0) {\n children.splice(idx, 0, child);\n this._doAdd(child);\n }\n }\n\n return this;\n }\n\n replace(oldChild: Element, newChild: Element) {\n const idx = zrUtil.indexOf(this._children, oldChild);\n if (idx >= 0) {\n this.replaceAt(newChild, idx);\n }\n return this;\n }\n\n replaceAt(child: Element, index: number) {\n const children = this._children;\n const old = children[index];\n\n if (child && child !== this && child.parent !== this && child !== old) {\n children[index] = child;\n\n old.parent = null;\n const zr = this.__zr;\n if (zr) {\n old.removeSelfFromZr(zr);\n }\n\n this._doAdd(child);\n }\n\n return this;\n }\n\n _doAdd(child: Element) {\n if (child.parent) {\n // Parent must be a group\n (child.parent as Group).remove(child);\n }\n\n child.parent = this;\n\n const zr = this.__zr;\n if (zr && zr !== (child as Group).__zr) { // Only group has __storage\n\n child.addSelfToZr(zr);\n }\n\n zr && zr.refresh();\n }\n\n /**\n * Remove child\n * @param child\n */\n remove(child: Element) {\n const zr = this.__zr;\n const children = this._children;\n\n const idx = zrUtil.indexOf(children, child);\n if (idx < 0) {\n return this;\n }\n children.splice(idx, 1);\n\n child.parent = null;\n\n if (zr) {\n\n child.removeSelfFromZr(zr);\n }\n\n zr && zr.refresh();\n\n return this;\n }\n\n /**\n * Remove all children\n */\n removeAll() {\n const children = this._children;\n const zr = this.__zr;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (zr) {\n child.removeSelfFromZr(zr);\n }\n child.parent = null;\n }\n children.length = 0;\n\n return this;\n }\n\n /**\n * 遍历所有子节点\n */\n eachChild(\n cb: (this: Context, el: Element, index?: number) => void,\n context?: Context\n ) {\n const children = this._children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n cb.call(context, child, i);\n }\n return this;\n }\n\n /**\n * Visit all descendants.\n * Return false in callback to stop visit descendants of current node\n */\n // TODO Group itself should also invoke the callback.\n traverse(\n cb: (this: T, el: Element) => boolean | void,\n context?: T\n ) {\n for (let i = 0; i < this._children.length; i++) {\n const child = this._children[i];\n const stopped = cb.call(context, child);\n\n if (child.isGroup && !stopped) {\n child.traverse(cb, context);\n }\n }\n return this;\n }\n\n addSelfToZr(zr: ZRenderType) {\n super.addSelfToZr(zr);\n for (let i = 0; i < this._children.length; i++) {\n const child = this._children[i];\n child.addSelfToZr(zr);\n }\n }\n\n removeSelfFromZr(zr: ZRenderType) {\n super.removeSelfFromZr(zr);\n for (let i = 0; i < this._children.length; i++) {\n const child = this._children[i];\n child.removeSelfFromZr(zr);\n }\n }\n\n getBoundingRect(includeChildren?: Element[]): BoundingRect {\n // TODO Caching\n const tmpRect = new BoundingRect(0, 0, 0, 0);\n const children = includeChildren || this._children;\n const tmpMat: MatrixArray = [];\n let rect = null;\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n // TODO invisible?\n if (child.ignore || (child as Displayable).invisible) {\n continue;\n }\n\n const childRect = child.getBoundingRect();\n const transform = child.getLocalTransform(tmpMat);\n // 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 if (transform) {\n BoundingRect.applyTransform(tmpRect, childRect, transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n }\n else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n return rect || tmpRect;\n }\n}\n\nGroup.prototype.type = 'group';\n// Storage will use childrenRef to get children to render.\nexport interface GroupLike extends Element {\n childrenRef(): Element[]\n}\n\nexport default Group;","/*!\n* ZRender, a high performance 2d drawing library.\n*\n* Copyright (c) 2013, Baidu Inc.\n* All rights reserved.\n*\n* LICENSE\n* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt\n*/\n\nimport env from './core/env';\nimport * as zrUtil from './core/util';\nimport Handler from './Handler';\nimport Storage from './Storage';\nimport {PainterBase} from './PainterBase';\nimport Animation from './animation/Animation';\nimport HandlerProxy from './dom/HandlerProxy';\nimport Element, { ElementEventCallback } from './Element';\nimport { Dictionary, ElementEventName, RenderedEvent, WithThisType } from './core/types';\nimport { LayerConfig } from './canvas/Layer';\nimport { GradientObject } from './graphic/Gradient';\nimport { PatternObject } from './graphic/Pattern';\nimport { EventCallback } from './core/Eventful';\nimport TSpan from './graphic/TSpan';\nimport ZRImage from './graphic/Image';\nimport Displayable from './graphic/Displayable';\nimport { lum } from './tool/color';\nimport { DARK_MODE_THRESHOLD } from './config';\nimport Path from './graphic/Path';\nimport Group from './graphic/Group';\n\n\nconst useVML = !env.canvasSupported;\n\ntype PainterBaseCtor = {\n new(dom: HTMLElement, storage: Storage, ...args: any[]): PainterBase\n}\n\nconst painterCtors: Dictionary = {};\n\nlet instances: { [key: number]: ZRender } = {};\n\nfunction delInstance(id: number) {\n delete instances[id];\n}\n\nfunction isDarkMode(backgroundColor: string | GradientObject | PatternObject): boolean {\n if (!backgroundColor) {\n return false;\n }\n if (typeof backgroundColor === 'string') {\n return lum(backgroundColor, 1) < DARK_MODE_THRESHOLD;\n }\n else if ((backgroundColor as GradientObject).colorStops) {\n const colorStops = (backgroundColor as GradientObject).colorStops;\n let totalLum = 0;\n const len = colorStops.length;\n // Simply do the math of average the color. Not consider the offset\n for (let i = 0; i < len; i++) {\n totalLum += lum(colorStops[i].color, 1);\n }\n totalLum /= len;\n\n return totalLum < DARK_MODE_THRESHOLD;\n }\n // Can't determine\n return false;\n}\n\nclass ZRender {\n\n dom: HTMLElement\n\n id: number\n\n storage: Storage\n painter: PainterBase\n handler: Handler\n animation: Animation\n\n private _sleepAfterStill = 10;\n\n private _stillFrameAccum = 0;\n\n private _needsRefresh = true\n private _needsRefreshHover = true\n\n /**\n * If theme is dark mode. It will determine the color strategy for labels.\n */\n private _darkMode = false;\n\n private _backgroundColor: string | GradientObject | PatternObject;\n\n constructor(id: number, dom: HTMLElement, opts?: ZRenderInitOpt) {\n opts = opts || {};\n\n /**\n * @type {HTMLDomElement}\n */\n this.dom = dom;\n\n this.id = id;\n\n const storage = new Storage();\n\n let rendererType = opts.renderer || 'canvas';\n\n // TODO WebGL\n if (useVML) {\n throw new Error('IE8 support has been dropped since 5.0');\n }\n\n if (!painterCtors[rendererType]) {\n // Use the first registered renderer.\n rendererType = zrUtil.keys(painterCtors)[0];\n }\n if (!painterCtors[rendererType]) {\n throw new Error(`Renderer '${rendererType}' is not imported. Please import it first.`);\n }\n\n opts.useDirtyRect = opts.useDirtyRect == null\n ? false\n : opts.useDirtyRect;\n\n const painter = new painterCtors[rendererType](dom, storage, opts, id);\n\n this.storage = storage;\n this.painter = painter;\n\n const handerProxy = (!env.node && !env.worker)\n ? new HandlerProxy(painter.getViewportRoot(), painter.root)\n : null;\n this.handler = new Handler(storage, painter, handerProxy, painter.root);\n\n this.animation = new Animation({\n stage: {\n update: () => this._flush(true)\n }\n });\n this.animation.start();\n }\n\n /**\n * 添加元素\n */\n add(el: Element) {\n if (!el) {\n return;\n }\n this.storage.addRoot(el);\n el.addSelfToZr(this);\n this.refresh();\n }\n\n /**\n * 删除元素\n */\n remove(el: Element) {\n if (!el) {\n return;\n }\n this.storage.delRoot(el);\n el.removeSelfFromZr(this);\n this.refresh();\n }\n\n /**\n * Change configuration of layer\n */\n configLayer(zLevel: number, config: LayerConfig) {\n if (this.painter.configLayer) {\n this.painter.configLayer(zLevel, config);\n }\n this.refresh();\n }\n\n /**\n * Set background color\n */\n setBackgroundColor(backgroundColor: string | GradientObject | PatternObject) {\n if (this.painter.setBackgroundColor) {\n this.painter.setBackgroundColor(backgroundColor);\n }\n this.refresh();\n this._backgroundColor = backgroundColor;\n this._darkMode = isDarkMode(backgroundColor);\n }\n\n getBackgroundColor() {\n return this._backgroundColor;\n }\n\n /**\n * Force to set dark mode\n */\n setDarkMode(darkMode: boolean) {\n this._darkMode = darkMode;\n }\n\n isDarkMode() {\n return this._darkMode;\n }\n\n /**\n * Repaint the canvas immediately\n */\n refreshImmediately(fromInside?: boolean) {\n // const start = new Date();\n\n if (!fromInside) {\n // Update animation if refreshImmediately is invoked from outside.\n // Not trigger stage update to call flush again. Which may refresh twice\n this.animation.update(true);\n }\n\n // Clear needsRefresh ahead to avoid something wrong happens in refresh\n // Or it will cause zrender refreshes again and again.\n this._needsRefresh = false;\n this.painter.refresh();\n // Avoid trigger zr.refresh in Element#beforeUpdate hook\n this._needsRefresh = false;\n\n // const end = new Date();\n // const log = document.getElementById('log');\n // if (log) {\n // log.innerHTML = log.innerHTML + '
' + (end - start);\n // }\n }\n\n /**\n * Mark and repaint the canvas in the next frame of browser\n */\n refresh() {\n this._needsRefresh = true;\n // Active the animation again.\n this.animation.start();\n }\n\n /**\n * Perform all refresh\n */\n flush() {\n this._flush(false);\n }\n\n private _flush(fromInside?: boolean) {\n let triggerRendered;\n\n const start = new Date().getTime();\n if (this._needsRefresh) {\n triggerRendered = true;\n this.refreshImmediately(fromInside);\n }\n\n if (this._needsRefreshHover) {\n triggerRendered = true;\n this.refreshHoverImmediately();\n }\n const end = new Date().getTime();\n\n if (triggerRendered) {\n this._stillFrameAccum = 0;\n this.trigger('rendered', {\n elapsedTime: end - start\n } as RenderedEvent);\n }\n else if (this._sleepAfterStill > 0) {\n this._stillFrameAccum++;\n // Stop the animiation after still for 10 frames.\n if (this._stillFrameAccum > this._sleepAfterStill) {\n this.animation.stop();\n }\n }\n }\n\n /**\n * Set sleep after still for frames.\n * Disable auto sleep when it's 0.\n */\n setSleepAfterStill(stillFramesCount: number) {\n this._sleepAfterStill = stillFramesCount;\n }\n\n /**\n * Wake up animation loop. But not render.\n */\n wakeUp() {\n this.animation.start();\n // Reset the frame count.\n this._stillFrameAccum = 0;\n }\n\n /**\n * Add element to hover layer\n */\n addHover(el: Displayable) {\n // deprecated.\n }\n\n /**\n * Add element from hover layer\n */\n removeHover(el: Path | TSpan | ZRImage) {\n // deprecated.\n }\n\n /**\n * Clear all hover elements in hover layer\n */\n clearHover() {\n // deprecated.\n }\n\n /**\n * Refresh hover in next frame\n */\n refreshHover() {\n this._needsRefreshHover = true;\n }\n\n /**\n * Refresh hover immediately\n */\n refreshHoverImmediately() {\n this._needsRefreshHover = false;\n if (this.painter.refreshHover && this.painter.getType() === 'canvas') {\n this.painter.refreshHover();\n }\n }\n\n /**\n * Resize the canvas.\n * Should be invoked when container size is changed\n */\n resize(opts?: {\n width?: number| string\n height?: number | string\n }) {\n opts = opts || {};\n this.painter.resize(opts.width, opts.height);\n this.handler.resize();\n }\n\n /**\n * Stop and clear all animation immediately\n */\n clearAnimation() {\n this.animation.clear();\n }\n\n /**\n * Get container width\n */\n getWidth(): number {\n return this.painter.getWidth();\n }\n\n /**\n * Get container height\n */\n getHeight(): number {\n return this.painter.getHeight();\n }\n\n /**\n * Export the canvas as Base64 URL\n * @param {string} type\n * @param {string} [backgroundColor='#fff']\n * @return {string} Base64 URL\n */\n // toDataURL: function(type, backgroundColor) {\n // return this.painter.getRenderedCanvas({\n // backgroundColor: backgroundColor\n // }).toDataURL(type);\n // },\n\n /**\n * Converting a path to image.\n * It has much better performance of drawing image rather than drawing a vector path.\n */\n pathToImage(e: Path, dpr: number) {\n if (this.painter.pathToImage) {\n return this.painter.pathToImage(e, dpr);\n }\n }\n\n /**\n * Set default cursor\n * @param cursorStyle='default' 例如 crosshair\n */\n setCursorStyle(cursorStyle: string) {\n this.handler.setCursorStyle(cursorStyle);\n }\n\n /**\n * Find hovered element\n * @param x\n * @param y\n * @return {target, topTarget}\n */\n findHover(x: number, y: number): {\n target: Displayable\n topTarget: Displayable\n } {\n return this.handler.findHover(x, y);\n }\n\n on(eventName: ElementEventName, eventHandler: ElementEventCallback, context?: Ctx): this\n // eslint-disable-next-line max-len\n on(eventName: string, eventHandler: WithThisType, unknown extends Ctx ? ZRenderType : Ctx>, context?: Ctx): this\n // eslint-disable-next-line max-len\n on(eventName: string, eventHandler: (...args: any) => any, context?: Ctx): this {\n this.handler.on(eventName, eventHandler, context);\n return this;\n }\n\n /**\n * Unbind event\n * @param eventName Event name\n * @param eventHandler Handler function\n */\n // eslint-disable-next-line max-len\n off(eventName?: string, eventHandler?: EventCallback) {\n this.handler.off(eventName, eventHandler);\n }\n\n /**\n * Trigger event manually\n *\n * @param eventName Event name\n * @param event Event object\n */\n trigger(eventName: string, event?: unknown) {\n this.handler.trigger(eventName, event);\n }\n\n\n /**\n * Clear all objects and the canvas.\n */\n clear() {\n const roots = this.storage.getRoots();\n for (let i = 0; i < roots.length; i++) {\n if (roots[i] instanceof Group) {\n roots[i].removeSelfFromZr(this);\n }\n }\n this.storage.delAllRoots();\n this.painter.clear();\n }\n\n /**\n * Dispose self.\n */\n dispose() {\n this.animation.stop();\n\n this.clear();\n this.storage.dispose();\n this.painter.dispose();\n this.handler.dispose();\n\n this.animation =\n this.storage =\n this.painter =\n this.handler = null;\n\n delInstance(this.id);\n }\n}\n\n\nexport interface ZRenderInitOpt {\n renderer?: string // 'canvas' or 'svg\n devicePixelRatio?: number\n width?: number | string // 10, 10px, 'auto'\n height?: number | string\n useDirtyRect?: boolean\n}\n\n/**\n * Initializing a zrender instance\n */\nexport function init(dom: HTMLElement, opts?: ZRenderInitOpt) {\n const zr = new ZRender(zrUtil.guid(), dom, opts);\n instances[zr.id] = zr;\n return zr;\n}\n\n/**\n * Dispose zrender instance\n */\nexport function dispose(zr: ZRender) {\n zr.dispose();\n}\n\n/**\n * Dispose all zrender instances\n */\nexport function disposeAll() {\n for (let key in instances) {\n if (instances.hasOwnProperty(key)) {\n instances[key].dispose();\n }\n }\n instances = {};\n}\n\n/**\n * Get zrender instance by id\n */\nexport function getInstance(id: number): ZRender {\n return instances[id];\n}\n\nexport function registerPainter(name: string, Ctor: PainterBaseCtor) {\n painterCtors[name] = Ctor;\n}\n\n/**\n * @type {string}\n */\nexport const version = '5.2.0';\n\n\nexport interface ZRenderType extends ZRender {};","/**\n * Base class of all displayable graphic objects\n */\n\nimport Element, {ElementProps, ElementStatePropNames, ElementAnimateConfig, ElementCommonState} from '../Element';\nimport BoundingRect from '../core/BoundingRect';\nimport { PropType, Dictionary, MapToType } from '../core/types';\nimport Path from './Path';\nimport { keys, extend, createObject } from '../core/util';\nimport Animator from '../animation/Animator';\nimport { REDARAW_BIT, STYLE_CHANGED_BIT } from './constants';\n\n// type CalculateTextPositionResult = ReturnType\n\nconst STYLE_MAGIC_KEY = '__zr_style_' + Math.round((Math.random() * 10));\n\nexport interface CommonStyleProps {\n shadowBlur?: number\n shadowOffsetX?: number\n shadowOffsetY?: number\n shadowColor?: string\n\n opacity?: number\n /**\n * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n */\n blend?: string\n}\n\nexport const DEFAULT_COMMON_STYLE: CommonStyleProps = {\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: '#000',\n opacity: 1,\n blend: 'source-over'\n};\n\nexport const DEFAULT_COMMON_ANIMATION_PROPS: MapToType = {\n style: {\n shadowBlur: true,\n shadowOffsetX: true,\n shadowOffsetY: true,\n shadowColor: true,\n opacity: true\n }\n };\n\n(DEFAULT_COMMON_STYLE as any)[STYLE_MAGIC_KEY] = true;\n\nexport interface DisplayableProps extends ElementProps {\n style?: Dictionary\n\n zlevel?: number\n z?: number\n z2?: number\n\n culling?: boolean\n\n // TODO list all cursors\n cursor?: string\n\n rectHover?: boolean\n\n progressive?: boolean\n\n incremental?: boolean\n\n batch?: boolean\n invisible?: boolean\n}\n\ntype DisplayableKey = keyof DisplayableProps\ntype DisplayablePropertyType = PropType\n\nexport type DisplayableStatePropNames = ElementStatePropNames | 'style' | 'z' | 'z2' | 'invisible';\nexport type DisplayableState = Pick & ElementCommonState;\n\nconst PRIMARY_STATES_KEYS = ['z', 'z2', 'invisible'] as const;\nconst PRIMARY_STATES_KEYS_IN_HOVER_LAYER = ['invisible'] as const;\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface Displayable {\n animate(key?: '', loop?: boolean): Animator\n animate(key: 'style', loop?: boolean): Animator\n\n getState(stateName: string): DisplayableState\n ensureState(stateName: string): DisplayableState\n\n states: Dictionary\n stateProxy: (stateName: string) => DisplayableState\n}\n\nclass Displayable extends Element {\n\n /**\n * Whether the displayable object is visible. when it is true, the displayable object\n * is not drawn, but the mouse event can still trigger the object.\n */\n invisible: boolean\n\n z: number\n\n z2: number\n\n /**\n * The z level determines the displayable object can be drawn in which layer canvas.\n */\n zlevel: number\n\n /**\n * If enable culling\n */\n culling: boolean\n\n /**\n * Mouse cursor when hovered\n */\n cursor: string\n\n /**\n * If hover area is bounding rect\n */\n rectHover: boolean\n /**\n * For increamental rendering\n */\n incremental: boolean\n\n style: Dictionary\n\n protected _normalState: DisplayableState\n\n protected _rect: BoundingRect\n protected _paintRect: BoundingRect\n protected _prevPaintRect: BoundingRect\n\n dirtyRectTolerance: number\n\n /************* Properties will be inejected in other modules. *******************/\n\n // @deprecated.\n useHoverLayer?: boolean\n\n __hoverStyle?: CommonStyleProps\n\n // TODO use WeakMap?\n\n // Shapes for cascade clipping.\n // Can only be `null`/`undefined` or an non-empty array, MUST NOT be an empty array.\n // because it is easy to only using null to check whether clipPaths changed.\n __clipPaths?: Path[]\n\n // FOR CANVAS PAINTER\n __canvasFillGradient: CanvasGradient\n __canvasStrokeGradient: CanvasGradient\n __canvasFillPattern: CanvasPattern\n __canvasStrokePattern: CanvasPattern\n\n // FOR SVG PAINTER\n __svgEl: SVGElement\n\n constructor(props?: Props) {\n super(props);\n }\n\n protected _init(props?: Props) {\n // Init default properties\n const keysArr = keys(props);\n for (let i = 0; i < keysArr.length; i++) {\n const key = keysArr[i];\n if (key === 'style') {\n this.useStyle(props[key] as Props['style']);\n }\n else {\n super.attrKV(key as any, props[key]);\n }\n }\n // Give a empty style\n if (!this.style) {\n this.useStyle({});\n }\n }\n\n // Hook provided to developers.\n beforeBrush() {}\n afterBrush() {}\n\n // Hook provided to inherited classes.\n // Executed between beforeBrush / afterBrush\n innerBeforeBrush() {}\n innerAfterBrush() {}\n\n shouldBePainted(\n viewWidth: number,\n viewHeight: number,\n considerClipPath: boolean,\n considerAncestors: boolean\n ) {\n const m = this.transform;\n if (\n this.ignore\n // Ignore invisible element\n || this.invisible\n // Ignore transparent element\n || this.style.opacity === 0\n // Ignore culled element\n || (this.culling\n && isDisplayableCulled(this, viewWidth, viewHeight)\n )\n // Ignore scale 0 element, in some environment like node-canvas\n // Draw a scale 0 element can cause all following draw wrong\n // And setTransform with scale 0 will cause set back transform failed.\n || (m && !m[0] && !m[3])\n ) {\n return false;\n }\n\n if (considerClipPath && this.__clipPaths) {\n for (let i = 0; i < this.__clipPaths.length; ++i) {\n if (this.__clipPaths[i].isZeroArea()) {\n return false;\n }\n }\n }\n\n if (considerAncestors && this.parent) {\n let parent = this.parent;\n while (parent) {\n if (parent.ignore) {\n return false;\n }\n parent = parent.parent;\n }\n }\n\n return true;\n }\n\n /**\n * If displayable element contain coord x, y\n */\n contain(x: number, y: number) {\n return this.rectContain(x, y);\n }\n\n traverse(\n cb: (this: Context, el: this) => void,\n context?: Context\n ) {\n cb.call(context, this);\n }\n\n /**\n * If bounding rect of element contain coord x, y\n */\n rectContain(x: number, y: number) {\n const coord = this.transformCoordToLocal(x, y);\n const rect = this.getBoundingRect();\n return rect.contain(coord[0], coord[1]);\n }\n\n getPaintRect(): BoundingRect {\n let rect = this._paintRect;\n if (!this._paintRect || this.__dirty) {\n const transform = this.transform;\n const elRect = this.getBoundingRect();\n\n const style = this.style;\n const shadowSize = style.shadowBlur || 0;\n const shadowOffsetX = style.shadowOffsetX || 0;\n const shadowOffsetY = style.shadowOffsetY || 0;\n\n rect = this._paintRect || (this._paintRect = new BoundingRect(0, 0, 0, 0));\n if (transform) {\n BoundingRect.applyTransform(rect, elRect, transform);\n }\n else {\n rect.copy(elRect);\n }\n\n if (shadowSize || shadowOffsetX || shadowOffsetY) {\n rect.width += shadowSize * 2 + Math.abs(shadowOffsetX);\n rect.height += shadowSize * 2 + Math.abs(shadowOffsetY);\n rect.x = Math.min(rect.x, rect.x + shadowOffsetX - shadowSize);\n rect.y = Math.min(rect.y, rect.y + shadowOffsetY - shadowSize);\n\n }\n\n // For the accuracy tolerance of text height or line joint point\n const tolerance = this.dirtyRectTolerance;\n if (!rect.isZero()) {\n rect.x = Math.floor(rect.x - tolerance);\n rect.y = Math.floor(rect.y - tolerance);\n rect.width = Math.ceil(rect.width + 1 + tolerance * 2);\n rect.height = Math.ceil(rect.height + 1 + tolerance * 2);\n }\n }\n return rect;\n }\n\n setPrevPaintRect(paintRect: BoundingRect) {\n if (paintRect) {\n this._prevPaintRect = this._prevPaintRect || new BoundingRect(0, 0, 0, 0);\n this._prevPaintRect.copy(paintRect);\n }\n else {\n this._prevPaintRect = null;\n }\n }\n\n getPrevPaintRect(): BoundingRect {\n return this._prevPaintRect;\n }\n\n /**\n * Alias for animate('style')\n * @param loop\n */\n animateStyle(loop: boolean) {\n return this.animate('style', loop);\n }\n\n // Override updateDuringAnimation\n updateDuringAnimation(targetKey: string) {\n if (targetKey === 'style') {\n this.dirtyStyle();\n }\n else {\n this.markRedraw();\n }\n }\n\n attrKV(key: DisplayableKey, value: DisplayablePropertyType) {\n if (key !== 'style') {\n super.attrKV(key as keyof DisplayableProps, value);\n }\n else {\n if (!this.style) {\n this.useStyle(value as Dictionary);\n }\n else {\n this.setStyle(value as Dictionary);\n }\n }\n }\n\n setStyle(obj: Props['style']): this\n setStyle(obj: T, value: Props['style'][T]): this\n setStyle(keyOrObj: keyof Props['style'] | Props['style'], value?: unknown): this {\n if (typeof keyOrObj === 'string') {\n this.style[keyOrObj] = value;\n }\n else {\n extend(this.style, keyOrObj as Props['style']);\n }\n this.dirtyStyle();\n return this;\n }\n\n // getDefaultStyleValue(key: T): Props['style'][T] {\n // // Default value is on the prototype.\n // return this.style.prototype[key];\n // }\n\n dirtyStyle(notRedraw?: boolean) {\n if (!notRedraw) {\n this.markRedraw();\n }\n this.__dirty |= STYLE_CHANGED_BIT;\n // Clear bounding rect.\n if (this._rect) {\n this._rect = null;\n }\n }\n\n dirty() {\n this.dirtyStyle();\n }\n\n /**\n * Is style changed. Used with dirtyStyle.\n */\n styleChanged() {\n return !!(this.__dirty & STYLE_CHANGED_BIT);\n }\n\n /**\n * Mark style updated. Only useful when style is used for caching. Like in the text.\n */\n styleUpdated() {\n this.__dirty &= ~STYLE_CHANGED_BIT;\n }\n\n /**\n * Create a style object with default values in it's prototype.\n */\n createStyle(obj?: Props['style']) {\n return createObject(DEFAULT_COMMON_STYLE, obj);\n }\n\n /**\n * Replace style property.\n * It will create a new style if given obj is not a valid style object.\n */\n // PENDING should not createStyle if it's an style object.\n useStyle(obj: Props['style']) {\n if (!obj[STYLE_MAGIC_KEY]) {\n obj = this.createStyle(obj);\n }\n if (this.__inHover) {\n this.__hoverStyle = obj; // Not affect exists style.\n }\n else {\n this.style = obj;\n }\n this.dirtyStyle();\n }\n\n /**\n * Determine if an object is a valid style object.\n * Which means it is created by `createStyle.`\n *\n * A valid style object will have all default values in it's prototype.\n * To avoid get null/undefined values.\n */\n isStyleObject(obj: Props['style']) {\n return obj[STYLE_MAGIC_KEY];\n }\n\n protected _innerSaveToNormal(toState: DisplayableState) {\n super._innerSaveToNormal(toState);\n\n const normalState = this._normalState;\n if (toState.style && !normalState.style) {\n // Clone style object.\n // TODO: Only save changed style.\n normalState.style = this._mergeStyle(this.createStyle(), this.style);\n }\n\n this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS);\n }\n\n protected _applyStateObj(\n stateName: string,\n state: DisplayableState,\n normalState: DisplayableState,\n keepCurrentStates: boolean,\n transition: boolean,\n animationCfg: ElementAnimateConfig\n ) {\n super._applyStateObj(stateName, state, normalState, keepCurrentStates, transition, animationCfg);\n\n const needsRestoreToNormal = !(state && keepCurrentStates);\n let targetStyle: Props['style'];\n if (state && state.style) {\n // Only animate changed properties.\n if (transition) {\n if (keepCurrentStates) {\n targetStyle = state.style;\n }\n else {\n targetStyle = this._mergeStyle(this.createStyle(), normalState.style);\n this._mergeStyle(targetStyle, state.style);\n }\n }\n else {\n targetStyle = this._mergeStyle(\n this.createStyle(),\n keepCurrentStates ? this.style : normalState.style\n );\n this._mergeStyle(targetStyle, state.style);\n }\n }\n else if (needsRestoreToNormal) {\n targetStyle = normalState.style;\n }\n\n if (targetStyle) {\n if (transition) {\n // Clone a new style. Not affect the original one.\n const sourceStyle = this.style;\n\n this.style = this.createStyle(needsRestoreToNormal ? {} : sourceStyle);\n // const sourceStyle = this.style = this.createStyle(this.style);\n\n if (needsRestoreToNormal) {\n const changedKeys = keys(sourceStyle);\n for (let i = 0; i < changedKeys.length; i++) {\n const key = changedKeys[i];\n if (key in targetStyle) { // Not use `key == null` because == null may means no stroke/fill.\n // Pick out from prototype. Or the property won't be animated.\n (targetStyle as any)[key] = targetStyle[key];\n // Omit the property has no default value.\n (this.style as any)[key] = sourceStyle[key];\n }\n }\n }\n\n // If states is switched twice in ONE FRAME, for example:\n // one property(for example shadowBlur) changed from default value to a specifed value,\n // then switched back in immediately. this.style may don't set this property yet when switching back.\n // It won't treat it as an changed property when switching back. And it won't be animated.\n // So here we make sure the properties will be animated from default value to a specifed value are set.\n const targetKeys = keys(targetStyle);\n for (let i = 0; i < targetKeys.length; i++) {\n const key = targetKeys[i];\n this.style[key] = this.style[key];\n }\n\n this._transitionState(stateName, {\n style: targetStyle\n } as Props, animationCfg, this.getAnimationStyleProps() as MapToType);\n }\n else {\n this.useStyle(targetStyle);\n }\n }\n\n // Don't change z, z2 for element moved into hover layer.\n // It's not necessary and will cause paint list order changed.\n const statesKeys = this.__inHover ? PRIMARY_STATES_KEYS_IN_HOVER_LAYER : PRIMARY_STATES_KEYS;\n for (let i = 0; i < statesKeys.length; i++) {\n let key = statesKeys[i];\n if (state && state[key] != null) {\n // Replace if it exist in target state\n (this as any)[key] = state[key];\n }\n else if (needsRestoreToNormal) {\n // Restore to normal state\n if (normalState[key] != null) {\n (this as any)[key] = normalState[key];\n }\n }\n }\n }\n\n protected _mergeStates(states: DisplayableState[]) {\n const mergedState = super._mergeStates(states) as DisplayableState;\n let mergedStyle: Props['style'];\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n if (state.style) {\n mergedStyle = mergedStyle || {};\n this._mergeStyle(mergedStyle, state.style);\n }\n }\n if (mergedStyle) {\n mergedState.style = mergedStyle;\n }\n return mergedState;\n }\n\n protected _mergeStyle(\n targetStyle: CommonStyleProps,\n sourceStyle: CommonStyleProps\n ) {\n extend(targetStyle, sourceStyle);\n return targetStyle;\n }\n\n getAnimationStyleProps() {\n return DEFAULT_COMMON_ANIMATION_PROPS;\n }\n\n /**\n * The string value of `textPosition` needs to be calculated to a real postion.\n * For example, `'inside'` is calculated to `[rect.width/2, rect.height/2]`\n * by default. See `contain/text.js#calculateTextPosition` for more details.\n * But some coutom shapes like \"pin\", \"flag\" have center that is not exactly\n * `[width/2, height/2]`. So we provide this hook to customize the calculation\n * for those shapes. It will be called if the `style.textPosition` is a string.\n * @param out Prepared out object. If not provided, this method should\n * be responsible for creating one.\n * @param style\n * @param rect {x, y, width, height}\n * @return out The same as the input out.\n * {\n * x: number. mandatory.\n * y: number. mandatory.\n * textAlign: string. optional. use style.textAlign by default.\n * textVerticalAlign: string. optional. use style.textVerticalAlign by default.\n * }\n */\n // calculateTextPosition: (out: CalculateTextPositionResult, style: Dictionary, rect: RectLike) => CalculateTextPositionResult\n\n protected static initDefaultProps = (function () {\n const dispProto = Displayable.prototype;\n dispProto.type = 'displayable';\n dispProto.invisible = false;\n dispProto.z = 0;\n dispProto.z2 = 0;\n dispProto.zlevel = 0;\n dispProto.culling = false;\n dispProto.cursor = 'pointer';\n dispProto.rectHover = false;\n dispProto.incremental = false;\n dispProto._rect = null;\n dispProto.dirtyRectTolerance = 0;\n\n dispProto.__dirty = REDARAW_BIT | STYLE_CHANGED_BIT;\n })()\n}\n\nconst tmpRect = new BoundingRect(0, 0, 0, 0);\nconst viewRect = new BoundingRect(0, 0, 0, 0);\nfunction isDisplayableCulled(el: Displayable, width: number, height: number) {\n tmpRect.copy(el.getBoundingRect());\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\n viewRect.width = width;\n viewRect.height = height;\n return !tmpRect.intersect(viewRect);\n}\n\nexport default Displayable;","/**\n * 曲线辅助模块\n */\n\nimport {\n create as v2Create,\n distSquare as v2DistSquare,\n VectorArray\n} from './vector';\n\nconst mathPow = Math.pow;\nconst mathSqrt = Math.sqrt;\n\nconst EPSILON = 1e-8;\nconst EPSILON_NUMERIC = 1e-4;\n\nconst THREE_SQRT = mathSqrt(3);\nconst ONE_THIRD = 1 / 3;\n\n// 临时变量\nconst _v0 = v2Create();\nconst _v1 = v2Create();\nconst _v2 = v2Create();\n\nfunction isAroundZero(val: number) {\n return val > -EPSILON && val < EPSILON;\n}\nfunction isNotAroundZero(val: number) {\n return val > EPSILON || val < -EPSILON;\n}\n/**\n * 计算三次贝塞尔值\n */\nexport function cubicAt(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const onet = 1 - t;\n return onet * onet * (onet * p0 + 3 * t * p1)\n + t * t * (t * p3 + 3 * onet * p2);\n}\n\n/**\n * 计算三次贝塞尔导数值\n */\nexport function cubicDerivativeAt(p0: number, p1: number, p2: number, p3: number, t: number): number {\n const onet = 1 - t;\n return 3 * (\n ((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet\n + (p3 - p2) * t * t\n );\n}\n\n/**\n * 计算三次贝塞尔方程根,使用盛金公式\n */\nexport function cubicRootAt(p0: number, p1: number, p2: number, p3: number, val: number, roots: number[]): number {\n // Evaluate roots of cubic functions\n const a = p3 + 3 * (p1 - p2) - p0;\n const b = 3 * (p2 - p1 * 2 + p0);\n const c = 3 * (p1 - p0);\n const d = p0 - val;\n\n const A = b * b - 3 * a * c;\n const B = b * c - 9 * a * d;\n const C = c * c - 3 * b * d;\n\n let n = 0;\n\n if (isAroundZero(A) && isAroundZero(B)) {\n if (isAroundZero(b)) {\n roots[0] = 0;\n }\n else {\n const t1 = -c / b; //t1, t2, t3, b is not zero\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n }\n else {\n const disc = B * B - 4 * A * C;\n\n if (isAroundZero(disc)) {\n const K = B / A;\n const t1 = -b / a + K; // t1, a is not zero\n const t2 = -K / 2; // t2, t3\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n else if (disc > 0) {\n const discSqrt = mathSqrt(disc);\n let Y1 = A * b + 1.5 * a * (-B + discSqrt);\n let Y2 = A * b + 1.5 * a * (-B - discSqrt);\n if (Y1 < 0) {\n Y1 = -mathPow(-Y1, ONE_THIRD);\n }\n else {\n Y1 = mathPow(Y1, ONE_THIRD);\n }\n if (Y2 < 0) {\n Y2 = -mathPow(-Y2, ONE_THIRD);\n }\n else {\n Y2 = mathPow(Y2, ONE_THIRD);\n }\n const t1 = (-b - (Y1 + Y2)) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n else {\n const T = (2 * A * b - 3 * a * B) / (2 * mathSqrt(A * A * A));\n const theta = Math.acos(T) / 3;\n const ASqrt = mathSqrt(A);\n const tmp = Math.cos(theta);\n\n const t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n const t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n const t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n if (t3 >= 0 && t3 <= 1) {\n roots[n++] = t3;\n }\n }\n }\n return n;\n}\n\n/**\n * 计算三次贝塞尔方程极限值的位置\n * @return 有效数目\n */\nexport function cubicExtrema(p0: number, p1: number, p2: number, p3: number, extrema: number[]): number {\n const b = 6 * p2 - 12 * p1 + 6 * p0;\n const a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n const c = 3 * p1 - 3 * p0;\n\n let n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n const t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n }\n }\n else {\n const disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n extrema[0] = -b / (2 * a);\n }\n else if (disc > 0) {\n const discSqrt = mathSqrt(disc);\n const t1 = (-b + discSqrt) / (2 * a);\n const t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n extrema[n++] = t2;\n }\n }\n }\n return n;\n}\n\n/**\n * 细分三次贝塞尔曲线\n */\nexport function cubicSubdivide(p0: number, p1: number, p2: number, p3: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p23 = (p3 - p2) * t + p2;\n\n const p012 = (p12 - p01) * t + p01;\n const p123 = (p23 - p12) * t + p12;\n\n const p0123 = (p123 - p012) * t + p012;\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n // Seg1\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\n\n/**\n * 投射点到三次贝塞尔曲线上,返回投射距离。\n * 投射点有可能会有一个或者多个,这里只返回其中距离最短的一个。\n */\nexport function cubicProjectPoint(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n x: number, y: number, out: VectorArray\n): number {\n // http://pomax.github.io/bezierinfo/#projections\n let t;\n let interval = 0.005;\n let d = Infinity;\n let prev;\n let next;\n let d1;\n let d2;\n\n _v0[0] = x;\n _v0[1] = y;\n\n // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n for (let _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = cubicAt(x0, x1, x2, x3, _t);\n _v1[1] = cubicAt(y0, y1, y2, y3, _t);\n d1 = v2DistSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n // At most 32 iteration\n for (let i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n prev = t - interval;\n next = t + interval;\n // t - interval\n _v1[0] = cubicAt(x0, x1, x2, x3, prev);\n _v1[1] = cubicAt(y0, y1, y2, y3, prev);\n\n d1 = v2DistSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n }\n else {\n // t + interval\n _v2[0] = cubicAt(x0, x1, x2, x3, next);\n _v2[1] = cubicAt(y0, y1, y2, y3, next);\n d2 = v2DistSquare(_v2, _v0);\n\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n }\n else {\n interval *= 0.5;\n }\n }\n }\n // t\n if (out) {\n out[0] = cubicAt(x0, x1, x2, x3, t);\n out[1] = cubicAt(y0, y1, y2, y3, t);\n }\n // console.log(interval, i);\n return mathSqrt(d);\n}\n\n/**\n * 计算三次贝塞尔曲线长度\n */\nexport function cubicLength(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n iteration: number\n) {\n let px = x0;\n let py = y0;\n\n let d = 0;\n\n const step = 1 / iteration;\n\n for (let i = 1; i <= iteration; i++) {\n let t = i * step;\n const x = cubicAt(x0, x1, x2, x3, t);\n const y = cubicAt(y0, y1, y2, y3, t);\n\n const dx = x - px;\n const dy = y - py;\n\n d += Math.sqrt(dx * dx + dy * dy);\n\n px = x;\n py = y;\n }\n\n return d;\n}\n\n/**\n * 计算二次方贝塞尔值\n */\nexport function quadraticAt(p0: number, p1: number, p2: number, t: number): number {\n const onet = 1 - t;\n return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\n\n/**\n * 计算二次方贝塞尔导数值\n */\nexport function quadraticDerivativeAt(p0: number, p1: number, p2: number, t: number): number {\n return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));\n}\n\n/**\n * 计算二次方贝塞尔方程根\n * @return 有效根数目\n */\nexport function quadraticRootAt(p0: number, p1: number, p2: number, val: number, roots: number[]): number {\n const a = p0 - 2 * p1 + p2;\n const b = 2 * (p1 - p0);\n const c = p0 - val;\n\n let n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n const t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n }\n else {\n const disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n const t1 = -b / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n else if (disc > 0) {\n const discSqrt = mathSqrt(disc);\n const t1 = (-b + discSqrt) / (2 * a);\n const t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n }\n return n;\n}\n\n/**\n * 计算二次贝塞尔方程极限值\n */\nexport function quadraticExtremum(p0: number, p1: number, p2: number): number {\n const divider = p0 + p2 - 2 * p1;\n if (divider === 0) {\n // p1 is center of p0 and p2\n return 0.5;\n }\n else {\n return (p0 - p1) / divider;\n }\n}\n\n/**\n * 细分二次贝塞尔曲线\n */\nexport function quadraticSubdivide(p0: number, p1: number, p2: number, t: number, out: number[]) {\n const p01 = (p1 - p0) * t + p0;\n const p12 = (p2 - p1) * t + p1;\n const p012 = (p12 - p01) * t + p01;\n\n // Seg0\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n\n // Seg1\n out[3] = p012;\n out[4] = p12;\n out[5] = p2;\n}\n\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} x\n * @param {number} y\n * @param {Array.} out 投射点\n * @return {number}\n */\nexport function quadraticProjectPoint(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\n x: number, y: number, out: VectorArray\n): number {\n // http://pomax.github.io/bezierinfo/#projections\n let t: number;\n let interval = 0.005;\n let d = Infinity;\n\n _v0[0] = x;\n _v0[1] = y;\n\n // 先粗略估计一下可能的最小距离的 t 值\n // PENDING\n for (let _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = quadraticAt(x0, x1, x2, _t);\n _v1[1] = quadraticAt(y0, y1, y2, _t);\n const d1 = v2DistSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n\n // At most 32 iteration\n for (let i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n const prev = t - interval;\n const next = t + interval;\n // t - interval\n _v1[0] = quadraticAt(x0, x1, x2, prev);\n _v1[1] = quadraticAt(y0, y1, y2, prev);\n\n const d1 = v2DistSquare(_v1, _v0);\n\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n }\n else {\n // t + interval\n _v2[0] = quadraticAt(x0, x1, x2, next);\n _v2[1] = quadraticAt(y0, y1, y2, next);\n const d2 = v2DistSquare(_v2, _v0);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n }\n else {\n interval *= 0.5;\n }\n }\n }\n // t\n if (out) {\n out[0] = quadraticAt(x0, x1, x2, t);\n out[1] = quadraticAt(y0, y1, y2, t);\n }\n // console.log(interval, i);\n return mathSqrt(d);\n}\n\n/**\n * 计算二次贝塞尔曲线长度\n */\nexport function quadraticLength(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\n iteration: number\n) {\n let px = x0;\n let py = y0;\n\n let d = 0;\n\n const step = 1 / iteration;\n\n for (let i = 1; i <= iteration; i++) {\n let t = i * step;\n const x = quadraticAt(x0, x1, x2, t);\n const y = quadraticAt(y0, y1, y2, t);\n\n const dx = x - px;\n const dy = y - py;\n\n d += Math.sqrt(dx * dx + dy * dy);\n\n px = x;\n py = y;\n }\n\n return d;\n}\n","/**\n * @author Yi Shen(https://github.com/pissang)\n */\n\nimport * as vec2 from './vector';\nimport * as curve from './curve';\n\nconst mathMin = Math.min;\nconst mathMax = Math.max;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst PI2 = Math.PI * 2;\n\nconst start = vec2.create();\nconst end = vec2.create();\nconst extremity = vec2.create();\n\n/**\n * 从顶点数组中计算出最小包围盒,写入`min`和`max`中\n */\nexport function fromPoints(points: ArrayLike[], min: vec2.VectorArray, max: vec2.VectorArray) {\n if (points.length === 0) {\n return;\n }\n let p = points[0];\n let left = p[0];\n let right = p[0];\n let top = p[1];\n let bottom = p[1];\n\n for (let i = 1; i < points.length; i++) {\n p = points[i];\n left = mathMin(left, p[0]);\n right = mathMax(right, p[0]);\n top = mathMin(top, p[1]);\n bottom = mathMax(bottom, p[1]);\n }\n\n min[0] = left;\n min[1] = top;\n max[0] = right;\n max[1] = bottom;\n}\n\nexport function fromLine(\n x0: number, y0: number, x1: number, y1: number,\n min: vec2.VectorArray, max: vec2.VectorArray\n) {\n min[0] = mathMin(x0, x1);\n min[1] = mathMin(y0, y1);\n max[0] = mathMax(x0, x1);\n max[1] = mathMax(y0, y1);\n}\n\nconst xDim: number[] = [];\nconst yDim: number[] = [];\n/**\n * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒,写入`min`和`max`中\n */\nexport function fromCubic(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n min: vec2.VectorArray, max: vec2.VectorArray\n) {\n const cubicExtrema = curve.cubicExtrema;\n const cubicAt = curve.cubicAt;\n let n = cubicExtrema(x0, x1, x2, x3, xDim);\n min[0] = Infinity;\n min[1] = Infinity;\n max[0] = -Infinity;\n max[1] = -Infinity;\n\n for (let i = 0; i < n; i++) {\n const x = cubicAt(x0, x1, x2, x3, xDim[i]);\n min[0] = mathMin(x, min[0]);\n max[0] = mathMax(x, max[0]);\n }\n n = cubicExtrema(y0, y1, y2, y3, yDim);\n for (let i = 0; i < n; i++) {\n const y = cubicAt(y0, y1, y2, y3, yDim[i]);\n min[1] = mathMin(y, min[1]);\n max[1] = mathMax(y, max[1]);\n }\n\n min[0] = mathMin(x0, min[0]);\n max[0] = mathMax(x0, max[0]);\n min[0] = mathMin(x3, min[0]);\n max[0] = mathMax(x3, max[0]);\n\n min[1] = mathMin(y0, min[1]);\n max[1] = mathMax(y0, max[1]);\n min[1] = mathMin(y3, min[1]);\n max[1] = mathMax(y3, max[1]);\n}\n\n/**\n * 从二阶贝塞尔曲线(p0, p1, p2)中计算出最小包围盒,写入`min`和`max`中\n */\nexport function fromQuadratic(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\n min: vec2.VectorArray, max: vec2.VectorArray\n) {\n const quadraticExtremum = curve.quadraticExtremum;\n const quadraticAt = curve.quadraticAt;\n // Find extremities, where derivative in x dim or y dim is zero\n const tx =\n mathMax(\n mathMin(quadraticExtremum(x0, x1, x2), 1), 0\n );\n const ty =\n mathMax(\n mathMin(quadraticExtremum(y0, y1, y2), 1), 0\n );\n\n const x = quadraticAt(x0, x1, x2, tx);\n const y = quadraticAt(y0, y1, y2, ty);\n\n min[0] = mathMin(x0, x2, x);\n min[1] = mathMin(y0, y2, y);\n max[0] = mathMax(x0, x2, x);\n max[1] = mathMax(y0, y2, y);\n}\n\n/**\n * 从圆弧中计算出最小包围盒,写入`min`和`max`中\n */\nexport function fromArc(\n x: number, y: number, rx: number, ry: number, startAngle: number, endAngle: number, anticlockwise: boolean,\n min: vec2.VectorArray, max: vec2.VectorArray\n) {\n const vec2Min = vec2.min;\n const vec2Max = vec2.max;\n\n const diff = Math.abs(startAngle - endAngle);\n\n\n if (diff % PI2 < 1e-4 && diff > 1e-4) {\n // Is a circle\n min[0] = x - rx;\n min[1] = y - ry;\n max[0] = x + rx;\n max[1] = y + ry;\n return;\n }\n\n start[0] = mathCos(startAngle) * rx + x;\n start[1] = mathSin(startAngle) * ry + y;\n\n end[0] = mathCos(endAngle) * rx + x;\n end[1] = mathSin(endAngle) * ry + y;\n\n vec2Min(min, start, end);\n vec2Max(max, start, end);\n\n // Thresh to [0, Math.PI * 2]\n startAngle = startAngle % (PI2);\n if (startAngle < 0) {\n startAngle = startAngle + PI2;\n }\n endAngle = endAngle % (PI2);\n if (endAngle < 0) {\n endAngle = endAngle + PI2;\n }\n\n if (startAngle > endAngle && !anticlockwise) {\n endAngle += PI2;\n }\n else if (startAngle < endAngle && anticlockwise) {\n startAngle += PI2;\n }\n if (anticlockwise) {\n const tmp = endAngle;\n endAngle = startAngle;\n startAngle = tmp;\n }\n\n // const number = 0;\n // const step = (anticlockwise ? -Math.PI : Math.PI) / 2;\n for (let angle = 0; angle < endAngle; angle += Math.PI / 2) {\n if (angle > startAngle) {\n extremity[0] = mathCos(angle) * rx + x;\n extremity[1] = mathSin(angle) * ry + y;\n\n vec2Min(min, extremity, min);\n vec2Max(max, extremity, max);\n }\n }\n}\n","/**\n * Path 代理,可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中\n * 可以用于 isInsidePath 判断以及获取boundingRect\n */\n\n// TODO getTotalLength, getPointAtLength, arcTo\n\n/* global Float32Array */\n\nimport * as vec2 from './vector';\nimport BoundingRect from './BoundingRect';\nimport {devicePixelRatio as dpr} from '../config';\nimport { fromLine, fromCubic, fromQuadratic, fromArc } from './bbox';\nimport { cubicAt, cubicLength, cubicSubdivide, quadraticLength, quadraticSubdivide } from './curve';\n\nconst 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};\n\n// const 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\ninterface ExtendedCanvasRenderingContext2D extends CanvasRenderingContext2D {\n dpr?: number\n}\n\nconst tmpOutX: number[] = [];\nconst tmpOutY: number[] = [];\n\nconst min: number[] = [];\nconst max: number[] = [];\nconst min2: number[] = [];\nconst max2: number[] = [];\nconst mathMin = Math.min;\nconst mathMax = Math.max;\nconst mathCos = Math.cos;\nconst mathSin = Math.sin;\nconst mathSqrt = Math.sqrt;\nconst mathAbs = Math.abs;\n\nconst PI = Math.PI;\nconst PI2 = PI * 2;\n\nconst hasTypedArray = typeof Float32Array !== 'undefined';\n\nconst tmpAngles: number[] = [];\n\nfunction modPI2(radian: number) {\n // It's much more stable to mod N instedof PI\n const n = Math.round(radian / PI * 1e8) / 1e8;\n return (n % 2) * PI;\n}\n/**\n * Normalize start and end angles.\n * startAngle will be normalized to 0 ~ PI*2\n * sweepAngle(endAngle - startAngle) will be normalized to 0 ~ PI*2 if clockwise.\n * -PI*2 ~ 0 if anticlockwise.\n */\nexport function normalizeArcAngles(angles: number[], anticlockwise: boolean): void {\n let newStartAngle = modPI2(angles[0]);\n if (newStartAngle < 0) {\n // Normlize to 0 - PI2\n newStartAngle += PI2;\n }\n\n let delta = newStartAngle - angles[0];\n let newEndAngle = angles[1];\n newEndAngle += delta;\n\n // https://github.com/chromium/chromium/blob/c20d681c9c067c4e15bb1408f17114b9e8cba294/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc#L184\n // Is circle\n if (!anticlockwise && newEndAngle - newStartAngle >= PI2) {\n newEndAngle = newStartAngle + PI2;\n }\n else if (anticlockwise && newStartAngle - newEndAngle >= PI2) {\n newEndAngle = newStartAngle - PI2;\n }\n // Make startAngle < endAngle when clockwise, otherwise endAngle < startAngle.\n // The sweep angle can never been larger than P2.\n else if (!anticlockwise && newStartAngle > newEndAngle) {\n newEndAngle = newStartAngle + (PI2 - modPI2(newStartAngle - newEndAngle));\n }\n else if (anticlockwise && newStartAngle < newEndAngle) {\n newEndAngle = newStartAngle - (PI2 - modPI2(newEndAngle - newStartAngle));\n }\n\n angles[0] = newStartAngle;\n angles[1] = newEndAngle;\n}\n\n\nexport default class PathProxy {\n\n dpr = 1\n\n data: number[] | Float32Array\n\n /**\n * Version is for tracking if the path has been changed.\n */\n private _version: number\n\n /**\n * If save path data.\n */\n private _saveData: boolean\n\n /**\n * If the line segment is too small to draw. It will be added to the pending pt.\n * It will be added if the subpath needs to be finished before stroke, fill, or starting a new subpath.\n */\n private _pendingPtX: number;\n private _pendingPtY: number;\n // Distance of pending pt to previous point.\n // 0 if there is no pending point.\n // Only update the pending pt when distance is larger.\n private _pendingPtDist: number;\n\n private _ctx: ExtendedCanvasRenderingContext2D\n\n private _xi = 0\n private _yi = 0\n\n private _x0 = 0\n private _y0 = 0\n\n private _len = 0\n\n // Calculating path len and seg len.\n private _pathSegLen: number[]\n private _pathLen: number\n // Unit x, Unit y. Provide for avoiding drawing that too short line segment\n private _ux: number\n private _uy: number\n\n // For dash shim.\n private _lineDash: number[]\n private _needsDash: boolean\n private _dashOffset: number\n private _dashIdx: number\n private _dashSum: number\n\n static CMD = CMD\n\n constructor(notSaveData?: boolean) {\n if (notSaveData) {\n this._saveData = false;\n }\n\n if (this._saveData) {\n this.data = [];\n }\n }\n\n increaseVersion() {\n this._version++;\n }\n\n /**\n * Version can be used outside for compare if the path is changed.\n * For example to determine if need to update svg d str in svg renderer.\n */\n getVersion() {\n return this._version;\n }\n\n /**\n * @readOnly\n */\n setScale(sx: number, sy: number, segmentIgnoreThreshold?: number) {\n // Compat. Previously there is no segmentIgnoreThreshold.\n segmentIgnoreThreshold = segmentIgnoreThreshold || 0;\n if (segmentIgnoreThreshold > 0) {\n this._ux = mathAbs(segmentIgnoreThreshold / dpr / sx) || 0;\n this._uy = mathAbs(segmentIgnoreThreshold / dpr / sy) || 0;\n }\n }\n\n setDPR(dpr: number) {\n this.dpr = dpr;\n }\n\n setContext(ctx: ExtendedCanvasRenderingContext2D) {\n this._ctx = ctx;\n }\n\n getContext(): ExtendedCanvasRenderingContext2D {\n return this._ctx;\n }\n\n beginPath() {\n this._ctx && this._ctx.beginPath();\n this.reset();\n return this;\n }\n\n /**\n * Reset path data.\n */\n reset() {\n // Reset\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 if (this._pathSegLen) {\n this._pathSegLen = null;\n this._pathLen = 0;\n }\n\n // Update version\n this._version++;\n }\n\n moveTo(x: number, y: number) {\n // Add pending point for previous path.\n this._drawPendingPt();\n\n this.addData(CMD.M, x, y);\n this._ctx && this._ctx.moveTo(x, y);\n\n // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用\n // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。\n // 有可能在 beginPath 之后直接调用 lineTo,这时候 x0, y0 需要\n // 在 lineTo 方法中记录,这里先不考虑这种情况,dashed line 也只在 IE10- 中不支持\n this._x0 = x;\n this._y0 = y;\n\n this._xi = x;\n this._yi = y;\n\n return this;\n }\n\n lineTo(x: number, y: number) {\n const dx = mathAbs(x - this._xi);\n const dy = mathAbs(y - this._yi);\n const exceedUnit = dx > this._ux || dy > this._uy;\n\n this.addData(CMD.L, x, y);\n\n if (this._ctx && exceedUnit) {\n this._needsDash ? this._dashedLineTo(x, y)\n : this._ctx.lineTo(x, y);\n }\n if (exceedUnit) {\n this._xi = x;\n this._yi = y;\n this._pendingPtDist = 0;\n }\n else {\n const d2 = dx * dx + dy * dy;\n // Only use the farthest pending point.\n if (d2 > this._pendingPtDist) {\n this._pendingPtX = x;\n this._pendingPtY = y;\n this._pendingPtDist = d2;\n }\n }\n\n return this;\n }\n\n bezierCurveTo(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number) {\n this._drawPendingPt();\n\n this.addData(CMD.C, x1, y1, x2, y2, x3, y3);\n if (this._ctx) {\n this._needsDash ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3)\n : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n this._xi = x3;\n this._yi = y3;\n return this;\n }\n\n quadraticCurveTo(x1: number, y1: number, x2: number, y2: number) {\n this._drawPendingPt();\n\n this.addData(CMD.Q, x1, y1, x2, y2);\n if (this._ctx) {\n this._needsDash ? this._dashedQuadraticTo(x1, y1, x2, y2)\n : this._ctx.quadraticCurveTo(x1, y1, x2, y2);\n }\n this._xi = x2;\n this._yi = y2;\n return this;\n }\n\n arc(cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise?: boolean) {\n this._drawPendingPt();\n\n tmpAngles[0] = startAngle;\n tmpAngles[1] = endAngle;\n normalizeArcAngles(tmpAngles, anticlockwise);\n\n startAngle = tmpAngles[0];\n endAngle = tmpAngles[1];\n\n let delta = endAngle - startAngle;\n\n this.addData(\n CMD.A, cx, cy, r, r, startAngle, delta, 0, anticlockwise ? 0 : 1\n );\n\n this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n\n this._xi = mathCos(endAngle) * r + cx;\n this._yi = mathSin(endAngle) * r + cy;\n return this;\n }\n\n // TODO\n arcTo(x1: number, y1: number, x2: number, y2: number, radius: number) {\n this._drawPendingPt();\n\n if (this._ctx) {\n this._ctx.arcTo(x1, y1, x2, y2, radius);\n }\n return this;\n }\n\n // TODO\n rect(x: number, y: number, w: number, h: number) {\n this._drawPendingPt();\n\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 closePath() {\n // Add pending point for previous path.\n this._drawPendingPt();\n\n this.addData(CMD.Z);\n\n const ctx = this._ctx;\n const x0 = this._x0;\n const y0 = this._y0;\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 fill(ctx: CanvasRenderingContext2D) {\n ctx && ctx.fill();\n this.toStatic();\n }\n\n stroke(ctx: CanvasRenderingContext2D) {\n ctx && ctx.stroke();\n this.toStatic();\n }\n\n /**\n * 必须在其它绘制命令前调用\n * Must be invoked before all other path drawing methods\n */\n setLineDash(lineDash: number[] | false) {\n if (lineDash instanceof Array) {\n this._lineDash = lineDash;\n\n this._dashIdx = 0;\n\n let lineDashSum = 0;\n for (let i = 0; i < lineDash.length; i++) {\n lineDashSum += lineDash[i];\n }\n this._dashSum = lineDashSum;\n\n this._needsDash = true;\n }\n else {\n // Clear\n this._lineDash = null;\n this._needsDash = false;\n }\n return this;\n }\n\n /**\n * 必须在其它绘制命令前调用\n * Must be invoked before all other path drawing methods\n */\n setLineDashOffset(offset: number) {\n this._dashOffset = offset;\n return this;\n }\n\n len() {\n return this._len;\n }\n\n setData(data: Float32Array | number[]) {\n\n const len = data.length;\n\n if (!(this.data && this.data.length === len) && hasTypedArray) {\n this.data = new Float32Array(len);\n }\n\n for (let i = 0; i < len; i++) {\n this.data[i] = data[i];\n }\n\n this._len = len;\n }\n\n appendPath(path: PathProxy | PathProxy[]) {\n if (!(path instanceof Array)) {\n path = [path];\n }\n const len = path.length;\n let appendSize = 0;\n let offset = this._len;\n for (let i = 0; i < len; i++) {\n appendSize += path[i].len();\n }\n if (hasTypedArray && (this.data instanceof Float32Array)) {\n this.data = new Float32Array(offset + appendSize);\n }\n for (let i = 0; i < len; i++) {\n const appendPathData = path[i].data;\n for (let k = 0; k < appendPathData.length; k++) {\n this.data[offset++] = appendPathData[k];\n }\n }\n this._len = offset;\n }\n\n /**\n * 填充 Path 数据。\n * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。\n */\n addData(\n cmd: number,\n a?: number,\n b?: number,\n c?: number,\n d?: number,\n e?: number,\n f?: number,\n g?: number,\n h?: number\n ) {\n if (!this._saveData) {\n return;\n }\n\n let data = this.data;\n if (this._len + arguments.length > data.length) {\n // 因为之前的数组已经转换成静态的 Float32Array\n // 所以不够用时需要扩展一个新的动态数组\n this._expandData();\n data = this.data;\n }\n for (let i = 0; i < arguments.length; i++) {\n data[this._len++] = arguments[i];\n }\n }\n\n private _drawPendingPt() {\n if (this._pendingPtDist > 0) {\n this._ctx && this._ctx.lineTo(this._pendingPtX, this._pendingPtY);\n this._pendingPtDist = 0;\n }\n }\n\n private _expandData() {\n // Only if data is Float32Array\n if (!(this.data instanceof Array)) {\n const newData = [];\n for (let i = 0; i < this._len; i++) {\n newData[i] = this.data[i];\n }\n this.data = newData;\n }\n }\n\n private _dashedLineTo(x1: number, y1: number) {\n const dashSum = this._dashSum;\n const lineDash = this._lineDash;\n const ctx = this._ctx;\n let offset = this._dashOffset;\n\n let x0 = this._xi;\n let y0 = this._yi;\n let dx = x1 - x0;\n let dy = y1 - y0;\n let dist = mathSqrt(dx * dx + dy * dy);\n let x = x0;\n let y = y0;\n let nDash = lineDash.length;\n let dash;\n let idx;\n dx /= dist;\n dy /= dist;\n\n if (offset < 0) {\n // Convert to positive offset\n offset = dashSum + offset;\n }\n offset %= dashSum;\n x -= offset * dx;\n y -= offset * dy;\n\n while ((dx > 0 && x <= x1) || (dx < 0 && x >= x1)\n || (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;\n // Skip positive offset\n if ((dx > 0 && x < x0) || (dx < 0 && x > x0) || (dy > 0 && y < y0) || (dy < 0 && y > y0)) {\n continue;\n }\n ctx[idx % 2 ? 'moveTo' : 'lineTo'](\n dx >= 0 ? mathMin(x, x1) : mathMax(x, x1),\n dy >= 0 ? mathMin(y, y1) : mathMax(y, y1)\n );\n }\n // Offset for next lineTo\n dx = x - x1;\n dy = y - y1;\n this._dashOffset = -mathSqrt(dx * dx + dy * dy);\n }\n\n // Not accurate dashed line to\n private _dashedBezierTo(x1: number, y1: number, x2: number, y2: number, x3: number, y3: number) {\n const ctx = this._ctx;\n\n let dashSum = this._dashSum;\n let offset = this._dashOffset;\n let lineDash = this._lineDash;\n\n let x0 = this._xi;\n let y0 = this._yi;\n let bezierLen = 0;\n let idx = this._dashIdx;\n let nDash = lineDash.length;\n\n let t;\n let dx;\n let dy;\n\n let x;\n let y;\n\n let tmpLen = 0;\n\n if (offset < 0) {\n // Convert to positive offset\n offset = dashSum + offset;\n }\n offset %= dashSum;\n // Bezier approx length\n for (t = 0; t < 1; t += 0.1) {\n dx = cubicAt(x0, x1, x2, x3, t + 0.1)\n - cubicAt(x0, x1, x2, x3, t);\n dy = cubicAt(y0, y1, y2, y3, t + 0.1)\n - cubicAt(y0, y1, y2, y3, t);\n bezierLen += mathSqrt(dx * dx + dy * dy);\n }\n\n // Find idx after add offset\n for (; idx < nDash; idx++) {\n tmpLen += lineDash[idx];\n if (tmpLen > offset) {\n break;\n }\n }\n t = (tmpLen - offset) / bezierLen;\n\n while (t <= 1) {\n\n x = cubicAt(x0, x1, x2, x3, t);\n y = cubicAt(y0, y1, y2, y3, t);\n\n // Use line to approximate dashed bezier\n // Bad result if dash is long\n idx % 2 ? ctx.moveTo(x, y)\n : ctx.lineTo(x, y);\n\n t += lineDash[idx] / bezierLen;\n\n idx = (idx + 1) % nDash;\n }\n\n // Finish the last segment and calculate the new offset\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\n private _dashedQuadraticTo(x1: number, y1: number, x2: number, y2: number) {\n // Convert quadratic to cubic using degree elevation\n const x3 = x2;\n const 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 * Convert dynamic array to static Float32Array\n *\n * It will still use a normal array if command buffer length is less than 10\n * Because Float32Array itself may take more memory than a normal array.\n *\n * 10 length will make sure at least one M command and one A(arc) command.\n */\n toStatic() {\n if (!this._saveData) {\n return;\n }\n\n this._drawPendingPt();\n\n const data = this.data;\n if (data instanceof Array) {\n data.length = this._len;\n if (hasTypedArray && this._len > 11) {\n this.data = new Float32Array(data);\n }\n }\n }\n\n\n getBoundingRect() {\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\n const data = this.data;\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n\n let i;\n for (i = 0; i < this._len;) {\n const cmd = data[i++] as number;\n\n const isFirst = i === 1;\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n\n x0 = xi;\n y0 = yi;\n }\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n min2[0] = x0;\n min2[1] = y0;\n max2[0] = x0;\n max2[1] = y0;\n break;\n case CMD.L:\n fromLine(xi, yi, data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.C:\n fromCubic(\n xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n min2, max2\n );\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.Q:\n fromQuadratic(\n xi, yi, data[i++], data[i++], data[i], data[i + 1],\n min2, max2\n );\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.A:\n const cx = data[i++];\n const cy = data[i++];\n const rx = data[i++];\n const ry = data[i++];\n const startAngle = data[i++];\n const endAngle = data[i++] + startAngle;\n // TODO Arc 旋转\n i += 1;\n const anticlockwise = !data[i++];\n\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n\n fromArc(\n cx, cy, rx, ry, startAngle, endAngle,\n anticlockwise, min2, max2\n );\n\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n const width = data[i++];\n const height = data[i++];\n // Use fromLine\n fromLine(x0, y0, x0 + width, y0 + height, min2, max2);\n break;\n case CMD.Z:\n xi = x0;\n yi = y0;\n break;\n }\n\n // Union\n vec2.min(min, min, min2);\n vec2.max(max, max, max2);\n }\n\n // No data\n if (i === 0) {\n min[0] = min[1] = max[0] = max[1] = 0;\n }\n\n return new BoundingRect(\n min[0], min[1], max[0] - min[0], max[1] - min[1]\n );\n }\n\n private _calculateLength(): number {\n const data = this.data;\n const len = this._len;\n const ux = this._ux;\n const uy = this._uy;\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n\n if (!this._pathSegLen) {\n this._pathSegLen = [];\n }\n const pathSegLen = this._pathSegLen;\n let pathTotalLen = 0;\n let segCount = 0;\n\n for (let i = 0; i < len;) {\n const cmd = data[i++] as number;\n const isFirst = i === 1;\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n\n x0 = xi;\n y0 = yi;\n }\n\n let l = -1;\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n break;\n case CMD.L: {\n const x2 = data[i++];\n const y2 = data[i++];\n const dx = x2 - xi;\n const dy = y2 - yi;\n if (mathAbs(dx) > ux || mathAbs(dy) > uy || i === len - 1) {\n l = Math.sqrt(dx * dx + dy * dy);\n xi = x2;\n yi = y2;\n }\n break;\n }\n case CMD.C: {\n const x1 = data[i++];\n const y1 = data[i++];\n const x2 = data[i++];\n const y2 = data[i++];\n const x3 = data[i++];\n const y3 = data[i++];\n // TODO adaptive iteration\n l = cubicLength(xi, yi, x1, y1, x2, y2, x3, y3, 10);\n xi = x3;\n yi = y3;\n break;\n }\n case CMD.Q: {\n const x1 = data[i++];\n const y1 = data[i++];\n const x2 = data[i++];\n const y2 = data[i++];\n l = quadraticLength(xi, yi, x1, y1, x2, y2, 10);\n xi = x2;\n yi = y2;\n break;\n }\n case CMD.A:\n // TODO Arc 判断的开销比较大\n const cx = data[i++];\n const cy = data[i++];\n const rx = data[i++];\n const ry = data[i++];\n const startAngle = data[i++];\n let delta = data[i++];\n const endAngle = delta + startAngle;\n // TODO Arc 旋转\n i += 1;\n const anticlockwise = !data[i++];\n\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n\n // TODO Ellipse\n l = mathMax(rx, ry) * mathMin(PI2, Math.abs(delta));\n\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R: {\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n const width = data[i++];\n const height = data[i++];\n l = width * 2 + height * 2;\n break;\n }\n case CMD.Z: {\n const dx = x0 - xi;\n const dy = y0 - yi;\n l = Math.sqrt(dx * dx + dy * dy);\n\n xi = x0;\n yi = y0;\n break;\n }\n }\n\n if (l >= 0) {\n pathSegLen[segCount++] = l;\n pathTotalLen += l;\n }\n }\n\n // TODO Optimize memory cost.\n this._pathLen = pathTotalLen;\n\n return pathTotalLen;\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(ctx: PathRebuilder, percent: number) {\n const d = this.data;\n const ux = this._ux;\n const uy = this._uy;\n const len = this._len;\n let x0;\n let y0;\n let xi;\n let yi;\n let x;\n let y;\n\n const drawPart = percent < 1;\n let pathSegLen;\n let pathTotalLen;\n let accumLength = 0;\n let segCount = 0;\n let displayedLength;\n\n let pendingPtDist = 0;\n let pendingPtX: number;\n let pendingPtY: number;\n\n\n if (drawPart) {\n if (!this._pathSegLen) {\n this._calculateLength();\n }\n pathSegLen = this._pathSegLen;\n pathTotalLen = this._pathLen;\n displayedLength = percent * pathTotalLen;\n\n if (!displayedLength) {\n return;\n }\n }\n\n lo: for (let i = 0; i < len;) {\n const cmd = d[i++];\n const isFirst = i === 1;\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = d[i];\n yi = d[i + 1];\n\n x0 = xi;\n y0 = yi;\n }\n // Only lineTo support ignoring small segments.\n // Otherwise if the pending point should always been flushed.\n if (cmd !== CMD.L && pendingPtDist > 0) {\n ctx.lineTo(pendingPtX, pendingPtY);\n pendingPtDist = 0;\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 case CMD.L: {\n x = d[i++];\n y = d[i++];\n const dx = mathAbs(x - xi);\n const dy = mathAbs(y - yi);\n // Not draw too small seg between\n if (dx > ux || dy > uy) {\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n const t = (displayedLength - accumLength) / l;\n ctx.lineTo(xi * (1 - t) + x * t, yi * (1 - t) + y * t);\n break lo;\n }\n accumLength += l;\n }\n\n ctx.lineTo(x, y);\n xi = x;\n yi = y;\n pendingPtDist = 0;\n }\n else {\n const d2 = dx * dx + dy * dy;\n // Only use the farthest pending point.\n if (d2 > pendingPtDist) {\n pendingPtX = x;\n pendingPtY = y;\n pendingPtDist = d2;\n }\n }\n break;\n }\n case CMD.C: {\n const x1 = d[i++];\n const y1 = d[i++];\n const x2 = d[i++];\n const y2 = d[i++];\n const x3 = d[i++];\n const y3 = d[i++];\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n const t = (displayedLength - accumLength) / l;\n cubicSubdivide(xi, x1, x2, x3, t, tmpOutX);\n cubicSubdivide(yi, y1, y2, y3, t, tmpOutY);\n ctx.bezierCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2], tmpOutX[3], tmpOutY[3]);\n break lo;\n }\n accumLength += l;\n }\n\n ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n xi = x3;\n yi = y3;\n break;\n }\n case CMD.Q: {\n const x1 = d[i++];\n const y1 = d[i++];\n const x2 = d[i++];\n const y2 = d[i++];\n\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n const t = (displayedLength - accumLength) / l;\n quadraticSubdivide(xi, x1, x2, t, tmpOutX);\n quadraticSubdivide(yi, y1, y2, t, tmpOutY);\n ctx.quadraticCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2]);\n break lo;\n }\n accumLength += l;\n }\n\n ctx.quadraticCurveTo(x1, y1, x2, y2);\n xi = x2;\n yi = y2;\n break;\n }\n case CMD.A:\n const cx = d[i++];\n const cy = d[i++];\n const rx = d[i++];\n const ry = d[i++];\n let startAngle = d[i++];\n let delta = d[i++];\n const psi = d[i++];\n const anticlockwise = !d[i++];\n const r = (rx > ry) ? rx : ry;\n // const scaleX = (rx > ry) ? 1 : rx / ry;\n // const scaleY = (rx > ry) ? ry / rx : 1;\n const isEllipse = mathAbs(rx - ry) > 1e-3;\n let endAngle = startAngle + delta;\n let breakBuild = false;\n\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n endAngle = startAngle + delta * (displayedLength - accumLength) / l;\n breakBuild = true;\n }\n accumLength += l;\n }\n if (isEllipse && ctx.ellipse) {\n ctx.ellipse(cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise);\n }\n else {\n ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n }\n\n if (breakBuild) {\n break lo;\n }\n\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = d[i];\n y0 = yi = d[i + 1];\n\n x = d[i++];\n y = d[i++];\n const width = d[i++];\n const height = d[i++];\n\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n let d = displayedLength - accumLength;\n ctx.moveTo(x, y);\n ctx.lineTo(x + mathMin(d, width), y);\n d -= width;\n if (d > 0) {\n ctx.lineTo(x + width, y + mathMin(d, height));\n }\n d -= height;\n if (d > 0) {\n ctx.lineTo(x + mathMax(width - d, 0), y + height);\n }\n d -= width;\n if (d > 0) {\n ctx.lineTo(x, y + mathMax(height - d, 0));\n }\n break lo;\n }\n accumLength += l;\n }\n ctx.rect(x, y, width, height);\n break;\n case CMD.Z:\n if (drawPart) {\n const l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n const t = (displayedLength - accumLength) / l;\n ctx.lineTo(xi * (1 - t) + x0 * t, yi * (1 - t) + y0 * t);\n break lo;\n }\n accumLength += l;\n }\n\n ctx.closePath();\n xi = x0;\n yi = y0;\n }\n }\n }\n\n clone() {\n const newProxy = new PathProxy();\n const data = this.data;\n newProxy.data = data.slice ? data.slice()\n : Array.prototype.slice.call(data);\n newProxy._len = this._len;\n return newProxy;\n }\n\n private static initDefaultProps = (function () {\n const proto = PathProxy.prototype;\n proto._saveData = true;\n proto._needsDash = false;\n proto._dashOffset = 0;\n proto._dashIdx = 0;\n proto._dashSum = 0;\n proto._ux = 0;\n proto._uy = 0;\n proto._pendingPtDist = 0;\n proto._version = 0;\n })()\n}\n\n\nexport interface PathRebuilder {\n moveTo(x: number, y: number): void\n lineTo(x: number, y: number): void\n bezierCurveTo(x: number, y: number, x2: number, y2: number, x3: number, y3: number): void\n quadraticCurveTo(x: number, y: number, x2: number, y2: number): void\n arc(cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean): void\n // eslint-disable-next-line max-len\n ellipse(cx: number, cy: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise: boolean): void\n rect(x: number, y: number, width: number, height: number): void\n closePath(): void\n}","\n/**\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 */\nexport function containStroke(\n x0: number, y0: number, x1: number, y1: number,\n lineWidth: number, x: number, y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n let _a = 0;\n let _b = x0;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l)\n || (y < y0 - _l && y < y1 - _l)\n || (x > x0 + _l && x > x1 + _l)\n || (x < x0 - _l && x < x1 - _l)\n ) {\n return false;\n }\n\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n }\n else {\n return Math.abs(x - x0) <= _l / 2;\n }\n const tmp = _a * x - y + _b;\n const _s = tmp * tmp / (_a * _a + 1);\n return _s <= _l / 2 * _l / 2;\n}","\nimport * as curve from '../core/curve';\n\n/**\n * 三次贝塞尔曲线描边包含判断\n */\nexport function containStroke(\n x0: number, y0: number, x1: number, y1: number,\n x2: number, y2: number, x3: number, y3: number,\n lineWidth: number, x: number, y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l)\n || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l)\n || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l)\n || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)\n ) {\n return false;\n }\n const d = curve.cubicProjectPoint(\n x0, y0, x1, y1, x2, y2, x3, y3,\n x, y, null\n );\n return d <= _l / 2;\n}","import {quadraticProjectPoint} from '../core/curve';\n\n/**\n * 二次贝塞尔曲线描边包含判断\n */\nexport function containStroke(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\n lineWidth: number, x: number, y: number\n): boolean {\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n // Quick reject\n if (\n (y > y0 + _l && y > y1 + _l && y > y2 + _l)\n || (y < y0 - _l && y < y1 - _l && y < y2 - _l)\n || (x > x0 + _l && x > x1 + _l && x > x2 + _l)\n || (x < x0 - _l && x < x1 - _l && x < x2 - _l)\n ) {\n return false;\n }\n const d = quadraticProjectPoint(\n x0, y0, x1, y1, x2, y2,\n x, y, null\n );\n return d <= _l / 2;\n}\n","\nconst PI2 = Math.PI * 2;\n\nexport function normalizeRadian(angle: number): number {\n angle %= PI2;\n if (angle < 0) {\n angle += PI2;\n }\n return angle;\n}","\nimport {normalizeRadian} from './util';\n\nconst PI2 = Math.PI * 2;\n\n/**\n * 圆弧描边包含判断\n */\nexport function containStroke(\n cx: number, cy: number, r: number, startAngle: number, endAngle: number,\n anticlockwise: boolean,\n lineWidth: number, x: number, y: number\n): boolean {\n\n if (lineWidth === 0) {\n return false;\n }\n const _l = lineWidth;\n\n x -= cx;\n y -= cy;\n const d = Math.sqrt(x * x + y * y);\n\n if ((d - _l > r) || (d + _l < r)) {\n return false;\n }\n // TODO\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n return true;\n }\n if (anticlockwise) {\n const tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n }\n else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n\n let angle = Math.atan2(y, x);\n if (angle < 0) {\n angle += PI2;\n }\n return (angle >= startAngle && angle <= endAngle)\n || (angle + PI2 >= startAngle && angle + PI2 <= endAngle);\n}","\nexport default function windingLine(\n x0: number, y0: number, x1: number, y1: number, x: number, y: number\n): number {\n if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n return 0;\n }\n // Ignore horizontal line\n if (y1 === y0) {\n return 0;\n }\n const t = (y - y0) / (y1 - y0);\n\n let dir = y1 < y0 ? 1 : -1;\n // Avoid winding error when intersection point is the connect point of two line of polygon\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n\n const x_ = t * (x1 - x0) + x0;\n\n // If (x, y) on the line, considered as \"contain\".\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}","import PathProxy from '../core/PathProxy';\nimport * as line from './line';\nimport * as cubic from './cubic';\nimport * as quadratic from './quadratic';\nimport * as arc from './arc';\nimport * as curve from '../core/curve';\nimport windingLine from './windingLine';\n\nconst CMD = PathProxy.CMD;\nconst PI2 = Math.PI * 2;\n\nconst EPSILON = 1e-4;\n\nfunction isAroundEqual(a: number, b: number) {\n return Math.abs(a - b) < EPSILON;\n}\n\n// 临时数组\nconst roots = [-1, -1, -1];\nconst extrema = [-1, -1];\n\nfunction swapExtrema() {\n const tmp = extrema[0];\n extrema[0] = extrema[1];\n extrema[1] = tmp;\n}\n\nfunction windingCubic(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n x: number, y: number\n): number {\n // Quick reject\n if (\n (y > y0 && y > y1 && y > y2 && y > y3)\n || (y < y0 && y < y1 && y < y2 && y < y3)\n ) {\n return 0;\n }\n const nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n else {\n let w = 0;\n let nExtrema = -1;\n let y0_;\n let y1_;\n for (let i = 0; i < nRoots; i++) {\n let t = roots[i];\n\n // Avoid winding error when intersection point is the connect point of two line of polygon\n let unit = (t === 0 || t === 1) ? 0.5 : 1;\n\n let x_ = curve.cubicAt(x0, x1, x2, x3, t);\n if (x_ < x) { // Quick reject\n continue;\n }\n if (nExtrema < 0) {\n nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);\n if (nExtrema > 1) {\n y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n if (nExtrema === 2) {\n // 分成三段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n }\n else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n }\n else {\n w += y3 < y1_ ? unit : -unit;\n }\n }\n else {\n // 分成两段单调函数\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n }\n else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n return w;\n }\n}\n\nfunction windingQuadratic(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number,\n x: number, y: number\n): number {\n // Quick reject\n if (\n (y > y0 && y > y1 && y > y2)\n || (y < y0 && y < y1 && y < y2)\n ) {\n return 0;\n }\n const nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n else {\n const t = curve.quadraticExtremum(y0, y1, y2);\n if (t >= 0 && t <= 1) {\n let w = 0;\n let y_ = curve.quadraticAt(y0, y1, y2, t);\n for (let i = 0; i < nRoots; i++) {\n // Remove one endpoint.\n let unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1;\n\n let x_ = curve.quadraticAt(x0, x1, x2, roots[i]);\n if (x_ < x) { // Quick reject\n continue;\n }\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n }\n else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n return w;\n }\n else {\n // Remove one endpoint.\n const unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1;\n\n const x_ = curve.quadraticAt(x0, x1, x2, roots[0]);\n if (x_ < x) { // Quick reject\n return 0;\n }\n return y2 < y0 ? unit : -unit;\n }\n }\n}\n// TODO\n// Arc 旋转\n// startAngle, endAngle has been normalized by normalizeArcAngles\nfunction windingArc(\n cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean,\n x: number, y: number\n) {\n y -= cy;\n if (y > r || y < -r) {\n return 0;\n }\n const tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n\n const dTheta = Math.abs(startAngle - endAngle);\n if (dTheta < 1e-4) {\n return 0;\n }\n if (dTheta >= PI2 - 1e-4) {\n // Is a circle\n startAngle = 0;\n endAngle = PI2;\n const dir = anticlockwise ? 1 : -1;\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n }\n else {\n return 0;\n }\n }\n\n if (startAngle > endAngle) {\n // Swap, make sure startAngle is smaller than endAngle.\n const tmp = startAngle;\n startAngle = endAngle;\n endAngle = tmp;\n }\n // endAngle - startAngle is normalized to 0 - 2*PI.\n // So following will normalize them to 0 - 4*PI\n if (startAngle < 0) {\n startAngle += PI2;\n endAngle += PI2;\n }\n\n let w = 0;\n for (let i = 0; i < 2; i++) {\n const x_ = roots[i];\n if (x_ + cx > x) {\n let angle = Math.atan2(y, x_);\n let dir = anticlockwise ? 1 : -1;\n if (angle < 0) {\n angle = PI2 + angle;\n }\n if (\n (angle >= startAngle && angle <= endAngle)\n || (angle + PI2 >= startAngle && angle + PI2 <= endAngle)\n ) {\n if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\n dir = -dir;\n }\n w += dir;\n }\n }\n }\n return w;\n}\n\n\nfunction containPath(\n path: PathProxy, lineWidth: number, isStroke: boolean, x: number, y: number\n): boolean {\n const data = path.data;\n const len = path.len();\n let w = 0;\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n let x1;\n let y1;\n\n for (let i = 0; i < len;) {\n const cmd = data[i++];\n const isFirst = i === 1;\n // Begin a new subpath\n if (cmd === CMD.M && i > 1) {\n // Close previous subpath\n if (!isStroke) {\n w += windingLine(xi, yi, x0, y0, x, y);\n }\n // 如果被任何一个 subpath 包含\n // if (w !== 0) {\n // return true;\n // }\n }\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n //\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n\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 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 }\n else {\n // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.C:\n if (isStroke) {\n if (cubic.containStroke(xi, yi,\n data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n lineWidth, x, y\n )) {\n return true;\n }\n }\n else {\n w += windingCubic(\n xi, yi,\n data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n x, y\n ) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.Q:\n if (isStroke) {\n if (quadratic.containStroke(xi, yi,\n data[i++], data[i++], data[i], data[i + 1],\n lineWidth, x, y\n )) {\n return true;\n }\n }\n else {\n w += windingQuadratic(\n xi, yi,\n data[i++], data[i++], data[i], data[i + 1],\n x, y\n ) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.A:\n // TODO Arc 判断的开销比较大\n const cx = data[i++];\n const cy = data[i++];\n const rx = data[i++];\n const ry = data[i++];\n const theta = data[i++];\n const dTheta = data[i++];\n // TODO Arc 旋转\n i += 1;\n const anticlockwise = !!(1 - data[i++]);\n x1 = Math.cos(theta) * rx + cx;\n y1 = Math.sin(theta) * ry + cy;\n // 不是直接使用 arc 命令\n if (!isFirst) {\n w += windingLine(xi, yi, x1, y1, x, y);\n }\n else {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n }\n // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n const _x = (x - cx) * ry / rx + cx;\n if (isStroke) {\n if (arc.containStroke(\n cx, cy, ry, theta, theta + dTheta, anticlockwise,\n lineWidth, _x, y\n )) {\n return true;\n }\n }\n else {\n w += windingArc(\n cx, cy, ry, theta, theta + dTheta, anticlockwise,\n _x, y\n );\n }\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n const width = data[i++];\n const height = data[i++];\n x1 = x0 + width;\n y1 = y0 + height;\n if (isStroke) {\n if (line.containStroke(x0, y0, x1, y0, lineWidth, x, y)\n || line.containStroke(x1, y0, x1, y1, lineWidth, x, y)\n || line.containStroke(x1, y1, x0, y1, lineWidth, x, y)\n || line.containStroke(x0, y1, x0, y0, lineWidth, x, y)\n ) {\n return true;\n }\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 break;\n case CMD.Z:\n if (isStroke) {\n if (line.containStroke(\n xi, yi, x0, y0, lineWidth, x, y\n )) {\n return true;\n }\n }\n else {\n // Close a subpath\n w += windingLine(xi, yi, x0, y0, x, y);\n // 如果被任何一个 subpath 包含\n // FIXME subpaths may overlap\n // if (w !== 0) {\n // return true;\n // }\n }\n xi = x0;\n yi = y0;\n break;\n }\n }\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += windingLine(xi, yi, x0, y0, x, y) || 0;\n }\n return w !== 0;\n}\n\nexport function contain(pathProxy: PathProxy, x: number, y: number): boolean {\n return containPath(pathProxy, 0, false, x, y);\n}\n\nexport function containStroke(pathProxy: PathProxy, lineWidth: number, x: number, y: number): boolean {\n return containPath(pathProxy, lineWidth, true, x, y);\n}","import Displayable, { DisplayableProps,\n CommonStyleProps,\n DEFAULT_COMMON_STYLE,\n DisplayableStatePropNames,\n DEFAULT_COMMON_ANIMATION_PROPS\n} from './Displayable';\nimport Element, { ElementAnimateConfig } from '../Element';\nimport PathProxy from '../core/PathProxy';\nimport * as pathContain from '../contain/path';\nimport { PatternObject } from './Pattern';\nimport { Dictionary, PropType, MapToType } from '../core/types';\nimport BoundingRect from '../core/BoundingRect';\nimport { LinearGradientObject } from './LinearGradient';\nimport { RadialGradientObject } from './RadialGradient';\nimport { defaults, keys, extend, clone, isString, createObject } from '../core/util';\nimport Animator from '../animation/Animator';\nimport { lum } from '../tool/color';\nimport { DARK_LABEL_COLOR, LIGHT_LABEL_COLOR, DARK_MODE_THRESHOLD, LIGHTER_LABEL_COLOR } from '../config';\nimport { REDARAW_BIT, SHAPE_CHANGED_BIT, STYLE_CHANGED_BIT } from './constants';\n\n\nexport interface PathStyleProps extends CommonStyleProps {\n fill?: string | PatternObject | LinearGradientObject | RadialGradientObject\n stroke?: string | PatternObject | LinearGradientObject | RadialGradientObject\n decal?: PatternObject\n\n /**\n * Still experimental, not works weel on arc with edge cases(large angle).\n */\n strokePercent?: number\n strokeNoScale?: boolean\n fillOpacity?: number\n strokeOpacity?: number\n\n /**\n * `true` is not supported.\n * `false`/`null`/`undefined` are the same.\n * `false` is used to remove lineDash in some\n * case that `null`/`undefined` can not be set.\n * (e.g., emphasis.lineStyle in echarts)\n */\n lineDash?: false | number[] | 'solid' | 'dashed' | 'dotted'\n lineDashOffset?: number\n\n lineWidth?: number\n lineCap?: CanvasLineCap\n lineJoin?: CanvasLineJoin\n\n miterLimit?: number\n /**\n * Paint order, if do stroke first. Similar to SVG paint-order\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/paint-order\n */\n strokeFirst?: boolean\n}\n\nexport const DEFAULT_PATH_STYLE: PathStyleProps = defaults({\n fill: '#000',\n stroke: null,\n strokePercent: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n\n lineDashOffset: 0,\n lineWidth: 1,\n lineCap: 'butt',\n miterLimit: 10,\n\n strokeNoScale: false,\n strokeFirst: false\n} as PathStyleProps, DEFAULT_COMMON_STYLE);\n\n\nexport const DEFAULT_PATH_ANIMATION_PROPS: MapToType = {\n style: defaults, MapToType>({\n fill: true,\n stroke: true,\n strokePercent: true,\n fillOpacity: true,\n strokeOpacity: true,\n lineDashOffset: true,\n lineWidth: true,\n miterLimit: true\n } as MapToType, DEFAULT_COMMON_ANIMATION_PROPS.style)\n };\n\nexport interface PathProps extends DisplayableProps {\n strokeContainThreshold?: number\n segmentIgnoreThreshold?: number\n subPixelOptimize?: boolean\n\n style?: PathStyleProps\n shape?: Dictionary\n\n autoBatch?: boolean\n\n __value?: (string | number)[] | (string | number)\n\n buildPath?: (\n ctx: PathProxy | CanvasRenderingContext2D,\n shapeCfg: Dictionary,\n inBatch?: boolean\n ) => void\n}\n\n\ntype PathKey = keyof PathProps\ntype PathPropertyType = PropType\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface Path {\n animate(key?: '', loop?: boolean): Animator\n animate(key: 'style', loop?: boolean): Animator\n animate(key: 'shape', loop?: boolean): Animator\n\n getState(stateName: string): PathState\n ensureState(stateName: string): PathState\n\n states: Dictionary\n stateProxy: (stateName: string) => PathState\n}\n\nexport type PathStatePropNames = DisplayableStatePropNames | 'shape';\nexport type PathState = Pick & {\n hoverLayer?: boolean\n}\n\nconst pathCopyParams = [\n 'x', 'y', 'rotation', 'scaleX', 'scaleY', 'originX', 'originY', 'invisible',\n 'culling', 'z', 'z2', 'zlevel', 'parent'\n] as const;\n\nclass Path extends Displayable {\n\n path: PathProxy\n\n strokeContainThreshold: number\n\n // This item default to be false. But in map series in echarts,\n // in order to improve performance, it should be set to true,\n // so the shorty segment won't draw.\n segmentIgnoreThreshold: number\n\n subPixelOptimize: boolean\n\n style: PathStyleProps\n /**\n * If element can be batched automatically\n */\n autoBatch: boolean\n\n private _rectWithStroke: BoundingRect\n\n protected _normalState: PathState\n\n protected _decalEl: Path\n\n // Must have an initial value on shape.\n // It will be assigned by default value.\n shape: Dictionary\n\n constructor(opts?: Props) {\n super(opts);\n }\n\n update() {\n super.update();\n\n const style = this.style;\n if (style.decal) {\n const decalEl: Path = this._decalEl = this._decalEl || new Path();\n if (decalEl.buildPath === Path.prototype.buildPath) {\n decalEl.buildPath = ctx => {\n this.buildPath(ctx, this.shape);\n };\n }\n\n decalEl.silent = true;\n\n const decalElStyle = decalEl.style;\n\n for (let key in style) {\n if ((decalElStyle as any)[key] !== (style as any)[key]) {\n (decalElStyle as any)[key] = (style as any)[key];\n }\n }\n decalElStyle.fill = style.fill ? style.decal : null;\n decalElStyle.decal = null;\n decalElStyle.shadowColor = null;\n style.strokeFirst && (decalElStyle.stroke = null);\n\n for (let i = 0; i < pathCopyParams.length; ++i) {\n (decalEl as any)[pathCopyParams[i]] = this[pathCopyParams[i]];\n }\n\n decalEl.__dirty |= REDARAW_BIT;\n }\n else if (this._decalEl) {\n this._decalEl = null;\n }\n }\n\n getDecalElement() {\n return this._decalEl;\n }\n\n protected _init(props?: Props) {\n // Init default properties\n const keysArr = keys(props);\n\n this.shape = this.getDefaultShape();\n const defaultStyle = this.getDefaultStyle();\n if (defaultStyle) {\n this.useStyle(defaultStyle);\n }\n\n for (let i = 0; i < keysArr.length; i++) {\n const key = keysArr[i];\n const value = props[key];\n if (key === 'style') {\n if (!this.style) {\n // PENDING Reuse style object if possible?\n this.useStyle(value as Props['style']);\n }\n else {\n extend(this.style, value as Props['style']);\n }\n }\n else if (key === 'shape') {\n // this.shape = value;\n extend(this.shape, value as Props['shape']);\n }\n else {\n super.attrKV(key as any, value);\n }\n }\n\n // Create an empty one if no style object exists.\n if (!this.style) {\n this.useStyle({});\n }\n // const defaultShape = this.getDefaultShape();\n // if (!this.shape) {\n // this.shape = defaultShape;\n // }\n // else {\n // defaults(this.shape, defaultShape);\n // }\n }\n\n protected getDefaultStyle(): Props['style'] {\n return null;\n }\n\n // Needs to override\n protected getDefaultShape() {\n return {};\n }\n\n protected canBeInsideText() {\n return this.hasFill();\n }\n\n protected getInsideTextFill() {\n const pathFill = this.style.fill;\n if (pathFill !== 'none') {\n if (isString(pathFill)) {\n const fillLum = lum(pathFill, 0);\n // Determin text color based on the lum of path fill.\n // TODO use (1 - DARK_MODE_THRESHOLD)?\n if (fillLum > 0.5) { // TODO Consider background lum?\n return DARK_LABEL_COLOR;\n }\n else if (fillLum > 0.2) {\n return LIGHTER_LABEL_COLOR;\n }\n return LIGHT_LABEL_COLOR;\n }\n else if (pathFill) {\n return LIGHT_LABEL_COLOR;\n }\n\n }\n return DARK_LABEL_COLOR;\n }\n\n protected getInsideTextStroke(textFill?: string) {\n const pathFill = this.style.fill;\n // Not stroke on none fill object or gradient object\n if (isString(pathFill)) {\n const zr = this.__zr;\n const isDarkMode = !!(zr && zr.isDarkMode());\n const isDarkLabel = lum(textFill, 0) < DARK_MODE_THRESHOLD;\n // All dark or all light.\n if (isDarkMode === isDarkLabel) {\n return pathFill;\n }\n }\n }\n\n // When bundling path, some shape may decide if use moveTo to begin a new subpath or closePath\n // Like in circle\n buildPath(\n ctx: PathProxy | CanvasRenderingContext2D,\n shapeCfg: Dictionary,\n inBatch?: boolean\n ) {}\n\n pathUpdated() {\n this.__dirty &= ~SHAPE_CHANGED_BIT;\n }\n\n getUpdatedPathProxy(inBatch?: boolean) {\n // Update path proxy data to latest.\n !this.path && this.createPathProxy();\n this.path.beginPath();\n this.buildPath(this.path, this.shape, inBatch);\n return this.path;\n }\n\n createPathProxy() {\n this.path = new PathProxy(false);\n }\n\n hasStroke() {\n const style = this.style;\n const stroke = style.stroke;\n return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\n }\n\n hasFill() {\n const style = this.style;\n const fill = style.fill;\n return fill != null && fill !== 'none';\n }\n\n getBoundingRect(): BoundingRect {\n let rect = this._rect;\n const style = this.style;\n const needsUpdateRect = !rect;\n if (needsUpdateRect) {\n let firstInvoke = false;\n if (!this.path) {\n firstInvoke = true;\n // Create path on demand.\n this.createPathProxy();\n }\n let path = this.path;\n if (firstInvoke || (this.__dirty & SHAPE_CHANGED_BIT)) {\n path.beginPath();\n this.buildPath(path, this.shape, false);\n this.pathUpdated();\n }\n rect = path.getBoundingRect();\n }\n this._rect = rect;\n\n if (this.hasStroke() && this.path && this.path.len() > 0) {\n // Needs update rect with stroke lineWidth when\n // 1. Element changes scale or lineWidth\n // 2. Shape is changed\n const rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone());\n if (this.__dirty || needsUpdateRect) {\n rectWithStroke.copy(rect);\n // PENDING, Min line width is needed when line is horizontal or vertical\n const lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n // FIXME Must after updateTransform\n let w = style.lineWidth;\n\n // Only add extra hover lineWidth when there are no fill\n if (!this.hasFill()) {\n const strokeContainThreshold = this.strokeContainThreshold;\n w = Math.max(w, strokeContainThreshold == null ? 4 : strokeContainThreshold);\n }\n // Consider line width\n // Line scale can't be 0;\n if (lineScale > 1e-10) {\n rectWithStroke.width += w / lineScale;\n rectWithStroke.height += w / lineScale;\n rectWithStroke.x -= w / lineScale / 2;\n rectWithStroke.y -= w / lineScale / 2;\n }\n }\n\n // Return rect with stroke\n return rectWithStroke;\n }\n\n return rect;\n }\n\n contain(x: number, y: number): boolean {\n const localPos = this.transformCoordToLocal(x, y);\n const rect = this.getBoundingRect();\n const style = this.style;\n x = localPos[0];\n y = localPos[1];\n\n if (rect.contain(x, y)) {\n const pathProxy = this.path;\n if (this.hasStroke()) {\n let lineWidth = style.lineWidth;\n let lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n // Line scale can't be 0;\n if (lineScale > 1e-10) {\n // Only add extra hover lineWidth when there are no fill\n if (!this.hasFill()) {\n lineWidth = Math.max(lineWidth, this.strokeContainThreshold);\n }\n if (pathContain.containStroke(\n pathProxy, lineWidth / lineScale, x, y\n )) {\n return true;\n }\n }\n }\n if (this.hasFill()) {\n return pathContain.contain(pathProxy, x, y);\n }\n }\n return false;\n }\n\n /**\n * Shape changed\n */\n dirtyShape() {\n this.__dirty |= SHAPE_CHANGED_BIT;\n if (this._rect) {\n this._rect = null;\n }\n if (this._decalEl) {\n this._decalEl.dirtyShape();\n }\n this.markRedraw();\n }\n\n dirty() {\n this.dirtyStyle();\n this.dirtyShape();\n }\n\n /**\n * Alias for animate('shape')\n * @param {boolean} loop\n */\n animateShape(loop: boolean) {\n return this.animate('shape', loop);\n }\n\n // Override updateDuringAnimation\n updateDuringAnimation(targetKey: string) {\n if (targetKey === 'style') {\n this.dirtyStyle();\n }\n else if (targetKey === 'shape') {\n this.dirtyShape();\n }\n else {\n this.markRedraw();\n }\n }\n\n // Overwrite attrKV\n attrKV(key: PathKey, value: PathPropertyType) {\n // FIXME\n if (key === 'shape') {\n this.setShape(value as Props['shape']);\n }\n else {\n super.attrKV(key as keyof DisplayableProps, value);\n }\n }\n\n setShape(obj: Props['shape']): this\n setShape(obj: T, value: Props['shape'][T]): this\n setShape(keyOrObj: keyof Props['shape'] | Props['shape'], value?: unknown): this {\n let shape = this.shape;\n if (!shape) {\n shape = this.shape = {};\n }\n // Path from string may not have shape\n if (typeof keyOrObj === 'string') {\n shape[keyOrObj] = value;\n }\n else {\n extend(shape, keyOrObj as Props['shape']);\n }\n this.dirtyShape();\n\n return this;\n }\n\n /**\n * If shape changed. used with dirtyShape\n */\n shapeChanged() {\n return !!(this.__dirty & SHAPE_CHANGED_BIT);\n }\n\n /**\n * Create a path style object with default values in it's prototype.\n * @override\n */\n createStyle(obj?: Props['style']) {\n return createObject(DEFAULT_PATH_STYLE, obj);\n }\n\n protected _innerSaveToNormal(toState: PathState) {\n super._innerSaveToNormal(toState);\n\n const normalState = this._normalState;\n // Clone a new one. DON'T share object reference between states and current using.\n // TODO: Clone array in shape?.\n // TODO: Only save changed shape.\n if (toState.shape && !normalState.shape) {\n normalState.shape = extend({}, this.shape);\n }\n }\n\n protected _applyStateObj(\n stateName: string,\n state: PathState,\n normalState: PathState,\n keepCurrentStates: boolean,\n transition: boolean,\n animationCfg: ElementAnimateConfig\n ) {\n super._applyStateObj(stateName, state, normalState, keepCurrentStates, transition, animationCfg);\n const needsRestoreToNormal = !(state && keepCurrentStates);\n let targetShape: Props['shape'];\n if (state && state.shape) {\n // Only animate changed properties.\n if (transition) {\n if (keepCurrentStates) {\n targetShape = state.shape;\n }\n else {\n // Inherits from normal state.\n targetShape = extend({}, normalState.shape);\n extend(targetShape, state.shape);\n }\n }\n else {\n // Because the shape will be replaced. So inherits from current shape.\n targetShape = extend({}, keepCurrentStates ? this.shape : normalState.shape);\n extend(targetShape, state.shape);\n }\n }\n else if (needsRestoreToNormal) {\n targetShape = normalState.shape;\n }\n\n if (targetShape) {\n if (transition) {\n // Clone a new shape.\n this.shape = extend({}, this.shape);\n // Only supports transition on primary props. Because shape is not deep cloned.\n const targetShapePrimaryProps: Props['shape'] = {};\n const shapeKeys = keys(targetShape);\n for (let i = 0; i < shapeKeys.length; i++) {\n const key = shapeKeys[i];\n if (typeof targetShape[key] === 'object') {\n (this.shape as Props['shape'])[key] = targetShape[key];\n }\n else {\n targetShapePrimaryProps[key] = targetShape[key];\n }\n }\n this._transitionState(stateName, {\n shape: targetShapePrimaryProps\n } as Props, animationCfg);\n }\n else {\n this.shape = targetShape;\n this.dirtyShape();\n }\n }\n }\n\n protected _mergeStates(states: PathState[]) {\n const mergedState = super._mergeStates(states) as PathState;\n let mergedShape: Props['shape'];\n for (let i = 0; i < states.length; i++) {\n const state = states[i];\n if (state.shape) {\n mergedShape = mergedShape || {};\n this._mergeStyle(mergedShape, state.shape);\n }\n }\n if (mergedShape) {\n mergedState.shape = mergedShape;\n }\n return mergedState;\n }\n\n getAnimationStyleProps() {\n return DEFAULT_PATH_ANIMATION_PROPS;\n }\n /**\n * If path shape is zero area\n */\n isZeroArea(): boolean {\n return false;\n }\n /**\n * 扩展一个 Path element, 比如星形,圆等。\n * Extend a path element\n * @DEPRECATED Use class extends\n * @param props\n * @param props.type Path type\n * @param props.init Initialize\n * @param props.buildPath Overwrite buildPath method\n * @param props.style Extended default style config\n * @param props.shape Extended default shape config\n */\n static extend>(defaultProps: {\n type?: string\n shape?: Shape\n style?: PathStyleProps\n beforeBrush?: Displayable['beforeBrush']\n afterBrush?: Displayable['afterBrush']\n getBoundingRect?: Displayable['getBoundingRect']\n\n calculateTextPosition?: Element['calculateTextPosition']\n buildPath(this: Path, ctx: CanvasRenderingContext2D | PathProxy, shape: Shape, inBatch?: boolean): void\n init?(this: Path, opts: PathProps): void // TODO Should be SubPathOption\n }): {\n new(opts?: PathProps & {shape: Shape}): Path\n } {\n interface SubPathOption extends PathProps {\n shape: Shape\n }\n\n class Sub extends Path {\n\n shape: Shape\n\n getDefaultStyle() {\n return clone(defaultProps.style);\n }\n\n getDefaultShape() {\n return clone(defaultProps.shape);\n }\n\n constructor(opts?: SubPathOption) {\n super(opts);\n defaultProps.init && defaultProps.init.call(this as any, opts);\n }\n }\n\n // TODO Legacy usage. Extend functions\n for (let key in defaultProps) {\n if (typeof (defaultProps as any)[key] === 'function') {\n (Sub.prototype as any)[key] = (defaultProps as any)[key];\n }\n }\n // Sub.prototype.buildPath = defaultProps.buildPath;\n // Sub.prototype.beforeBrush = defaultProps.beforeBrush;\n // Sub.prototype.afterBrush = defaultProps.afterBrush;\n\n return Sub as any;\n }\n\n protected static initDefaultProps = (function () {\n const pathProto = Path.prototype;\n pathProto.type = 'path';\n pathProto.strokeContainThreshold = 5;\n pathProto.segmentIgnoreThreshold = 0;\n pathProto.subPixelOptimize = false;\n pathProto.autoBatch = false;\n pathProto.__dirty = REDARAW_BIT | STYLE_CHANGED_BIT | SHAPE_CHANGED_BIT;\n })()\n}\n\nexport default Path;","import PathProxy from '../core/PathProxy';\nimport {applyTransform as v2ApplyTransform, VectorArray} from '../core/vector';\nimport { MatrixArray } from '../core/matrix';\n\nconst CMD = PathProxy.CMD;\n\nconst points: VectorArray[] = [[], [], []];\nconst mathSqrt = Math.sqrt;\nconst mathAtan2 = Math.atan2;\n\nexport default function transformPath(path: PathProxy, m: MatrixArray) {\n if (!m) {\n return;\n }\n\n let data = path.data;\n const len = path.len();\n let cmd;\n let nPoint: number;\n let i: number;\n let j: number;\n let k: number;\n let p: VectorArray;\n\n const M = CMD.M;\n const C = CMD.C;\n const L = CMD.L;\n const R = CMD.R;\n const A = CMD.A;\n const Q = CMD.Q;\n\n for (i = 0, j = 0; i < len;) {\n cmd = data[i++];\n j = i;\n nPoint = 0;\n\n switch (cmd) {\n case M:\n nPoint = 1;\n break;\n case L:\n nPoint = 1;\n break;\n case C:\n nPoint = 3;\n break;\n case Q:\n nPoint = 2;\n break;\n case A:\n const x = m[4];\n const y = m[5];\n const sx = mathSqrt(m[0] * m[0] + m[1] * m[1]);\n const sy = mathSqrt(m[2] * m[2] + m[3] * m[3]);\n const angle = mathAtan2(-m[1] / sy, m[0] / sx);\n // cx\n data[i] *= sx;\n data[i++] += x;\n // cy\n data[i] *= sy;\n data[i++] += y;\n // Scale rx and ry\n // FIXME Assume psi is 0 here\n data[i++] *= sx;\n data[i++] *= sy;\n\n // Start angle\n data[i++] += angle;\n // end angle\n data[i++] += angle;\n // FIXME psi\n i += 2;\n j = i;\n break;\n case R:\n // x0, y0\n p[0] = data[i++];\n p[1] = data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1];\n // x1, y1\n p[0] += data[i++];\n p[1] += data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1];\n }\n\n for (k = 0; k < nPoint; k++) {\n let p = points[k];\n p[0] = data[i++];\n p[1] = data[i++];\n\n v2ApplyTransform(p, p, m);\n // Write back\n data[j++] = p[0];\n data[j++] = p[1];\n }\n }\n\n path.increaseVersion();\n}\n","import Path, { PathProps } from '../graphic/Path';\nimport PathProxy from '../core/PathProxy';\nimport transformPath from './transformPath';\nimport { VectorArray } from '../core/vector';\nimport { MatrixArray } from '../core/matrix';\nimport { extend } from '../core/util';\n\n// command chars\n// const cc = [\n// 'm', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z',\n// 'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'\n// ];\n\nconst mathSqrt = Math.sqrt;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst PI = Math.PI;\n\nfunction vMag(v: VectorArray): number {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n};\nfunction vRatio(u: VectorArray, v: VectorArray): number {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n};\nfunction vAngle(u: VectorArray, v: VectorArray): number {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1)\n * Math.acos(vRatio(u, v));\n};\n\nfunction processArc(\n x1: number, y1: number, x2: number, y2: number, fa: number, fs: number,\n rx: number, ry: number, psiDeg: number, cmd: number, path: PathProxy\n) {\n // https://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes\n const psi = psiDeg * (PI / 180.0);\n const xp = mathCos(psi) * (x1 - x2) / 2.0\n + mathSin(psi) * (y1 - y2) / 2.0;\n const yp = -1 * mathSin(psi) * (x1 - x2) / 2.0\n + mathCos(psi) * (y1 - y2) / 2.0;\n\n const lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n\n if (lambda > 1) {\n rx *= mathSqrt(lambda);\n ry *= mathSqrt(lambda);\n }\n\n const f = (fa === fs ? -1 : 1)\n * mathSqrt((((rx * rx) * (ry * ry))\n - ((rx * rx) * (yp * yp))\n - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp)\n + (ry * ry) * (xp * xp))\n ) || 0;\n\n const cxp = f * rx * yp / ry;\n const cyp = f * -ry * xp / rx;\n\n const cx = (x1 + x2) / 2.0\n + mathCos(psi) * cxp\n - mathSin(psi) * cyp;\n const cy = (y1 + y2) / 2.0\n + mathSin(psi) * cxp\n + mathCos(psi) * cyp;\n\n const theta = vAngle([ 1, 0 ], [ (xp - cxp) / rx, (yp - cyp) / ry ]);\n const u = [ (xp - cxp) / rx, (yp - cyp) / ry ];\n const v = [ (-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry ];\n let dTheta = vAngle(u, v);\n\n if (vRatio(u, v) <= -1) {\n dTheta = PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n\n if (dTheta < 0) {\n const n = Math.round(dTheta / PI * 1e6) / 1e6;\n // Convert to positive\n dTheta = PI * 2 + (n % 2) * PI;\n }\n\n path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);\n}\n\n\nconst commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig;\n// Consider case:\n// (1) delimiter can be comma or space, where continuous commas\n// or spaces should be seen as one comma.\n// (2) value can be like:\n// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983',\n// 'l-.5E1,54', '121-23-44-11' (no delimiter)\nconst numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\n// const valueSplitReg = /[\\s,]+/;\n\nfunction createPathProxyFromString(data: string) {\n const path = new PathProxy();\n\n if (!data) {\n return path;\n }\n\n // const data = data.replace(/-/g, ' -')\n // .replace(/ /g, ' ')\n // .replace(/ /g, ',')\n // .replace(/,,/g, ',');\n\n // const n;\n // create pipes so that we can split the data\n // for (n = 0; n < cc.length; n++) {\n // cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);\n // }\n\n // data = data.replace(/-/g, ',-');\n\n // create array\n // const arr = cs.split('|');\n // init context point\n let cpx = 0;\n let cpy = 0;\n let subpathX = cpx;\n let subpathY = cpy;\n let prevCmd;\n\n const CMD = PathProxy.CMD;\n\n // commandReg.lastIndex = 0;\n // const cmdResult;\n // while ((cmdResult = commandReg.exec(data)) != null) {\n // const cmdStr = cmdResult[1];\n // const cmdContent = cmdResult[2];\n\n const cmdList = data.match(commandReg);\n if (!cmdList) {\n // Invalid svg path.\n return path;\n }\n\n for (let l = 0; l < cmdList.length; l++) {\n const cmdText = cmdList[l];\n let cmdStr = cmdText.charAt(0);\n\n let cmd;\n\n // String#split is faster a little bit than String#replace or RegExp#exec.\n // const p = cmdContent.split(valueSplitReg);\n // const pLen = 0;\n // for (let i = 0; i < p.length; i++) {\n // // '' and other invalid str => NaN\n // const val = parseFloat(p[i]);\n // !isNaN(val) && (p[pLen++] = val);\n // }\n\n\n // Following code will convert string to number. So convert type to number here\n const p = cmdText.match(numberReg) as any[] as number[] || [];\n const pLen = p.length;\n for (let i = 0; i < pLen; i++) {\n p[i] = parseFloat(p[i] as any as string);\n }\n\n let off = 0;\n while (off < pLen) {\n let ctlPtx;\n let ctlPty;\n\n let rx;\n let ry;\n let psi;\n let fa;\n let fs;\n\n let x1 = cpx;\n let y1 = cpy;\n\n let len: number;\n let pathData: number[] | Float32Array;\n // convert l, H, h, V, and v to L\n switch (cmdStr) {\n case 'l':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'L':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'm':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n subpathX = cpx;\n subpathY = cpy;\n cmdStr = 'l';\n break;\n case 'M':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n subpathX = cpx;\n subpathY = cpy;\n cmdStr = 'L';\n break;\n case 'h':\n cpx += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'H':\n cpx = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'v':\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'V':\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'C':\n cmd = CMD.C;\n path.addData(\n cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]\n );\n cpx = p[off - 2];\n cpy = p[off - 1];\n break;\n case 'c':\n cmd = CMD.C;\n path.addData(\n cmd,\n p[off++] + cpx, p[off++] + cpy,\n p[off++] + cpx, p[off++] + cpy,\n p[off++] + cpx, p[off++] + cpy\n );\n cpx += p[off - 2];\n cpy += p[off - 1];\n break;\n case 'S':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cmd = CMD.C;\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n case 's':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cmd = CMD.C;\n x1 = cpx + p[off++];\n y1 = cpy + p[off++];\n cpx += p[off++];\n cpy += p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n case 'Q':\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n case 'q':\n x1 = p[off++] + cpx;\n y1 = p[off++] + cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n case 'T':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n case 't':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n case 'A':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n\n x1 = cpx, y1 = cpy;\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.A;\n processArc(\n x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path\n );\n break;\n case 'a':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n\n x1 = cpx, y1 = cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.A;\n processArc(\n x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path\n );\n break;\n }\n }\n\n if (cmdStr === 'z' || cmdStr === 'Z') {\n cmd = CMD.Z;\n path.addData(cmd);\n // z may be in the middle of the path.\n cpx = subpathX;\n cpy = subpathY;\n }\n\n prevCmd = cmd;\n }\n\n path.toStatic();\n\n return path;\n}\n\ntype SVGPathOption = Omit\ninterface InnerSVGPathOption extends PathProps {\n applyTransform?: (m: MatrixArray) => void\n}\nclass SVGPath extends Path {\n applyTransform(m: MatrixArray) {}\n}\n\nfunction isPathProxy(path: PathProxy | CanvasRenderingContext2D): path is PathProxy {\n return (path as PathProxy).setData != null;\n}\n// TODO Optimize double memory cost problem\nfunction createPathOptions(str: string, opts: SVGPathOption): InnerSVGPathOption {\n const pathProxy = createPathProxyFromString(str);\n const innerOpts: InnerSVGPathOption = extend({}, opts);\n innerOpts.buildPath = function (path: PathProxy | CanvasRenderingContext2D) {\n if (isPathProxy(path)) {\n path.setData(pathProxy.data);\n // Svg and vml renderer don't have context\n const ctx = path.getContext();\n if (ctx) {\n path.rebuildPath(ctx, 1);\n }\n }\n else {\n const ctx = path;\n pathProxy.rebuildPath(ctx, 1);\n }\n };\n\n innerOpts.applyTransform = function (this: SVGPath, m: MatrixArray) {\n transformPath(pathProxy, m);\n this.dirtyShape();\n };\n\n return innerOpts;\n}\n\n/**\n * Create a Path object from path string data\n * http://www.w3.org/TR/SVG/paths.html#PathData\n * @param opts Other options\n */\nexport function createFromString(str: string, opts?: SVGPathOption): SVGPath {\n // PENDING\n return new SVGPath(createPathOptions(str, opts));\n}\n\n/**\n * Create a Path class from path string data\n * @param str\n * @param opts Other options\n */\nexport function extendFromString(str: string, defaultOpts?: SVGPathOption): typeof SVGPath {\n const innerOpts = createPathOptions(str, defaultOpts);\n class Sub extends SVGPath {\n constructor(opts: InnerSVGPathOption) {\n super(opts);\n this.applyTransform = innerOpts.applyTransform;\n this.buildPath = innerOpts.buildPath;\n }\n }\n return Sub;\n}\n\n/**\n * Merge multiple paths\n */\n// TODO Apply transform\n// TODO stroke dash\n// TODO Optimize double memory cost problem\nexport function mergePath(pathEls: Path[], opts: PathProps) {\n const pathList: PathProxy[] = [];\n const len = pathEls.length;\n for (let i = 0; i < len; i++) {\n const pathEl = pathEls[i];\n pathList.push(pathEl.getUpdatedPathProxy(true));\n }\n\n const pathBundle = new Path(opts);\n // Need path proxy.\n pathBundle.createPathProxy();\n pathBundle.buildPath = function (path: PathProxy | CanvasRenderingContext2D) {\n if (isPathProxy(path)) {\n path.appendPath(pathList);\n // Svg and vml renderer don't have context\n const ctx = path.getContext();\n if (ctx) {\n // Path bundle not support percent draw.\n path.rebuildPath(ctx, 1);\n }\n }\n };\n\n return pathBundle;\n}\n\n/**\n * Clone a path.\n */\nexport function clonePath(sourcePath: Path, opts?: {\n /**\n * If bake global transform to path.\n */\n bakeTransform?: boolean\n /**\n * Convert global transform to local.\n */\n toLocal?: boolean\n}) {\n opts = opts || {};\n const path = new Path();\n if (sourcePath.shape) {\n path.setShape(sourcePath.shape);\n }\n path.setStyle(sourcePath.style);\n\n if (opts.bakeTransform) {\n transformPath(path.path, sourcePath.getComputedTransform());\n }\n else {\n // TODO Copy getLocalTransform, updateTransform since they can be changed.\n if (opts.toLocal) {\n path.setLocalTransform(sourcePath.getComputedTransform());\n }\n else {\n path.copyTransform(sourcePath);\n }\n }\n\n // These methods may be overridden\n path.buildPath = sourcePath.buildPath;\n (path as SVGPath).applyTransform = (path as SVGPath).applyTransform;\n\n path.z = sourcePath.z;\n path.z2 = sourcePath.z2;\n path.zlevel = sourcePath.zlevel;\n\n return path;\n}\n","import Displayable, { DisplayableProps,\n CommonStyleProps,\n DEFAULT_COMMON_STYLE,\n DisplayableStatePropNames,\n DEFAULT_COMMON_ANIMATION_PROPS\n} from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport { ImageLike, MapToType } from '../core/types';\nimport { defaults, createObject } from '../core/util';\nimport { ElementCommonState } from '../Element';\n\nexport interface ImageStyleProps extends CommonStyleProps {\n image?: string | ImageLike\n x?: number\n y?: number\n width?: number\n height?: number\n sx?: number\n sy?: number\n sWidth?: number\n sHeight?: number\n}\n\nexport const DEFAULT_IMAGE_STYLE: CommonStyleProps = defaults({\n x: 0,\n y: 0\n}, DEFAULT_COMMON_STYLE);\n\nexport const DEFAULT_IMAGE_ANIMATION_PROPS: MapToType = {\n style: defaults, MapToType>({\n x: true,\n y: true,\n width: true,\n height: true,\n sx: true,\n sy: true,\n sWidth: true,\n sHeight: true\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n };\n\nexport interface ImageProps extends DisplayableProps {\n style?: ImageStyleProps\n\n onload?: (image: ImageLike) => void\n}\n\nexport type ImageState = Pick & ElementCommonState\n\nfunction isImageLike(source: unknown): source is HTMLImageElement {\n return !!(source\n && typeof source !== 'string'\n // Image source is an image, canvas, video.\n && (source as HTMLImageElement).width && (source as HTMLImageElement).height);\n}\n\nclass ZRImage extends Displayable {\n\n style: ImageStyleProps\n\n // FOR CANVAS RENDERER\n __image: ImageLike\n // FOR SVG RENDERER\n __imageSrc: string\n\n onload: (image: ImageLike) => void\n\n /**\n * Create an image style object with default values in it's prototype.\n * @override\n */\n createStyle(obj?: ImageStyleProps) {\n return createObject(DEFAULT_IMAGE_STYLE, obj);\n }\n\n private _getSize(dim: 'width' | 'height') {\n const style = this.style;\n\n let size = style[dim];\n if (size != null) {\n return size;\n }\n\n const imageSource = isImageLike(style.image)\n ? style.image : this.__image;\n\n if (!imageSource) {\n return 0;\n }\n\n const otherDim = dim === 'width' ? 'height' : 'width';\n let otherDimSize = style[otherDim];\n if (otherDimSize == null) {\n return imageSource[dim];\n }\n else {\n return imageSource[dim] / imageSource[otherDim] * otherDimSize;\n }\n }\n\n getWidth(): number {\n return this._getSize('width');\n }\n\n getHeight(): number {\n return this._getSize('height');\n }\n\n getAnimationStyleProps() {\n return DEFAULT_IMAGE_ANIMATION_PROPS;\n }\n\n getBoundingRect(): BoundingRect {\n const style = this.style;\n if (!this._rect) {\n this._rect = new BoundingRect(\n style.x || 0, style.y || 0, this.getWidth(), this.getHeight()\n );\n }\n return this._rect;\n }\n}\n\nZRImage.prototype.type = 'image';\n\nexport default ZRImage;","/**\n * 圆形\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class CircleShape {\n cx = 0\n cy = 0\n r = 0\n}\n\nexport interface CircleProps extends PathProps {\n shape?: Partial\n}\nclass Circle extends Path {\n\n shape: CircleShape\n\n constructor(opts?: CircleProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new CircleShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: CircleShape, inBundle: boolean) {\n // Better stroking in ShapeBundle\n // Always do it may have performence issue ( fill may be 2x more cost)\n if (inBundle) {\n ctx.moveTo(shape.cx + shape.r, shape.cy);\n }\n // else {\n // if (ctx.allocate && !ctx.data.length) {\n // ctx.allocate(ctx.CMD_MEM_SIZE.A);\n // }\n // }\n // Better stroking in ShapeBundle\n // ctx.moveTo(shape.cx + shape.r, shape.cy);\n ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2);\n }\n};\n\nCircle.prototype.type = 'circle';\n\nexport default Circle;","import PathProxy from '../../core/PathProxy';\n\nexport function buildPath(ctx: CanvasRenderingContext2D | PathProxy, shape: {\n x: number\n y: number\n width: number\n height: number\n r?: number | number[]\n}) {\n let x = shape.x;\n let y = shape.y;\n let width = shape.width;\n let height = shape.height;\n let r = shape.r;\n let r1;\n let r2;\n let r3;\n let r4;\n\n // Convert width and height to positive for better borderRadius\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n\n if (typeof r === 'number') {\n r1 = r2 = r3 = r4 = r;\n }\n else if (r instanceof Array) {\n if (r.length === 1) {\n r1 = r2 = r3 = r4 = r[0];\n }\n else if (r.length === 2) {\n r1 = r3 = r[0];\n r2 = r4 = r[1];\n }\n else if (r.length === 3) {\n r1 = r[0];\n r2 = r4 = r[1];\n r3 = r[2];\n }\n else {\n r1 = r[0];\n r2 = r[1];\n r3 = r[2];\n r4 = r[3];\n }\n }\n else {\n r1 = r2 = r3 = r4 = 0;\n }\n\n let total;\n if (r1 + r2 > width) {\n total = r1 + r2;\n r1 *= width / total;\n r2 *= width / total;\n }\n if (r3 + r4 > width) {\n total = r3 + r4;\n r3 *= width / total;\n r4 *= width / total;\n }\n if (r2 + r3 > height) {\n total = r2 + r3;\n r2 *= height / total;\n r3 *= height / total;\n }\n if (r1 + r4 > height) {\n total = r1 + r4;\n r1 *= height / total;\n r4 *= height / total;\n }\n ctx.moveTo(x + r1, y);\n ctx.lineTo(x + width - r2, y);\n r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n ctx.lineTo(x + width, y + height - r3);\n r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n ctx.lineTo(x + r4, y + height);\n r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n ctx.lineTo(x, y + r1);\n r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n}\n","import { PathStyleProps } from '../Path';\n\n/**\n * Sub-pixel optimize for canvas rendering, prevent from blur\n * when rendering a thin vertical/horizontal line.\n */\n\nconst round = Math.round;\n\ntype LineShape = {\n x1: number\n y1: number\n x2: number\n y2: number\n}\n\ntype RectShape = {\n x: number\n y: number\n width: number\n height: number\n r?: number | number[]\n}\n/**\n * Sub pixel optimize line for canvas\n *\n * @param outputShape The modification will be performed on `outputShape`.\n * `outputShape` and `inputShape` can be the same object.\n * `outputShape` object can be used repeatly, because all of\n * the `x1`, `x2`, `y1`, `y2` will be assigned in this method.\n */\nexport function subPixelOptimizeLine(\n outputShape: Partial,\n inputShape: LineShape,\n style: Pick // DO not optimize when lineWidth is 0\n): LineShape {\n if (!inputShape) {\n return;\n }\n\n const x1 = inputShape.x1;\n const x2 = inputShape.x2;\n const y1 = inputShape.y1;\n const y2 = inputShape.y2;\n\n outputShape.x1 = x1;\n outputShape.x2 = x2;\n outputShape.y1 = y1;\n outputShape.y2 = y2;\n\n const lineWidth = style && style.lineWidth;\n if (!lineWidth) {\n return outputShape as LineShape;\n }\n\n if (round(x1 * 2) === round(x2 * 2)) {\n outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true);\n }\n if (round(y1 * 2) === round(y2 * 2)) {\n outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true);\n }\n\n return outputShape as LineShape;\n}\n\n/**\n * Sub pixel optimize rect for canvas\n *\n * @param outputShape The modification will be performed on `outputShape`.\n * `outputShape` and `inputShape` can be the same object.\n * `outputShape` object can be used repeatly, because all of\n * the `x`, `y`, `width`, `height` will be assigned in this method.\n */\nexport function subPixelOptimizeRect(\n outputShape: Partial,\n inputShape: RectShape,\n style: Pick // DO not optimize when lineWidth is 0\n): RectShape {\n if (!inputShape) {\n return;\n }\n\n const originX = inputShape.x;\n const originY = inputShape.y;\n const originWidth = inputShape.width;\n const originHeight = inputShape.height;\n\n outputShape.x = originX;\n outputShape.y = originY;\n outputShape.width = originWidth;\n outputShape.height = originHeight;\n\n const lineWidth = style && style.lineWidth;\n if (!lineWidth) {\n return outputShape as RectShape;\n }\n\n outputShape.x = subPixelOptimize(originX, lineWidth, true);\n outputShape.y = subPixelOptimize(originY, lineWidth, true);\n outputShape.width = Math.max(\n subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x,\n originWidth === 0 ? 0 : 1\n );\n outputShape.height = Math.max(\n subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y,\n originHeight === 0 ? 0 : 1\n );\n\n return outputShape as RectShape;\n}\n\n/**\n * Sub pixel optimize for canvas\n *\n * @param position Coordinate, such as x, y\n * @param lineWidth If `null`/`undefined`/`0`, do not optimize.\n * @param positiveOrNegative Default false (negative).\n * @return Optimized position.\n */\nexport function subPixelOptimize(\n position: number,\n lineWidth?: number,\n positiveOrNegative?: boolean\n) {\n if (!lineWidth) {\n return position;\n }\n // Assure that (position + lineWidth / 2) is near integer edge,\n // otherwise line will be fuzzy in canvas.\n const doubledPosition = round(position * 2);\n return (doubledPosition + round(lineWidth)) % 2 === 0\n ? doubledPosition / 2\n : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;\n}\n","/**\n * 矩形\n * @module zrender/graphic/shape/Rect\n */\n\nimport Path, { PathProps } from '../Path';\nimport * as roundRectHelper from '../helper/roundRect';\nimport {subPixelOptimizeRect} from '../helper/subPixelOptimize';\n\nexport class RectShape {\n // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4\n // r缩写为1 相当于 [1, 1, 1, 1]\n // r缩写为[1] 相当于 [1, 1, 1, 1]\n // r缩写为[1, 2] 相当于 [1, 2, 1, 2]\n // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2]\n r?: number | number[]\n\n x = 0\n y = 0\n width = 0\n height = 0\n}\n\nexport interface RectProps extends PathProps {\n shape?: Partial\n}\n// Avoid create repeatly.\nconst subPixelOptimizeOutputShape = {};\n\nclass Rect extends Path {\n\n shape: RectShape\n\n constructor(opts?: RectProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new RectShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: RectShape) {\n let x: number;\n let y: number;\n let width: number;\n let height: number;\n\n if (this.subPixelOptimize) {\n const optimizedShape = subPixelOptimizeRect(subPixelOptimizeOutputShape, shape, this.style);\n x = optimizedShape.x;\n y = optimizedShape.y;\n width = optimizedShape.width;\n height = optimizedShape.height;\n optimizedShape.r = shape.r;\n shape = optimizedShape;\n }\n else {\n x = shape.x;\n y = shape.y;\n width = shape.width;\n height = shape.height;\n }\n\n if (!shape.r) {\n ctx.rect(x, y, width, height);\n }\n else {\n roundRectHelper.buildPath(ctx, shape);\n }\n }\n\n isZeroArea() {\n return !this.shape.width || !this.shape.height;\n }\n}\n\nRect.prototype.type = 'rect';\n\nexport default Rect;","/**\n * 椭圆形状\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class EllipseShape {\n cx = 0\n cy = 0\n rx = 0\n ry = 0\n}\n\nexport interface EllipseProps extends PathProps {\n shape?: Partial\n}\nclass Ellipse extends Path {\n\n shape: EllipseShape\n\n constructor(opts?: EllipseProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new EllipseShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: EllipseShape) {\n const k = 0.5522848;\n const x = shape.cx;\n const y = shape.cy;\n const a = shape.rx;\n const b = shape.ry;\n const ox = a * k; // 水平控制点偏移量\n const oy = b * k; // 垂直控制点偏移量\n // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线\n ctx.moveTo(x - a, y);\n ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);\n ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);\n ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);\n ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);\n ctx.closePath();\n }\n}\n\nEllipse.prototype.type = 'ellipse';\n\nexport default Ellipse;","/**\n * 直线\n * @module zrender/graphic/shape/Line\n */\n\nimport Path, { PathProps } from '../Path';\nimport {subPixelOptimizeLine} from '../helper/subPixelOptimize';\nimport { VectorArray } from '../../core/vector';\n\n// Avoid create repeatly.\nconst subPixelOptimizeOutputShape = {};\n\nexport class LineShape {\n // Start point\n x1 = 0\n y1 = 0\n // End point\n x2 = 0\n y2 = 0\n\n percent = 1\n}\n\nexport interface LineProps extends PathProps {\n shape?: Partial\n}\nclass Line extends Path {\n\n shape: LineShape\n\n constructor(opts?: LineProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new LineShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: LineShape) {\n let x1;\n let y1;\n let x2;\n let y2;\n\n if (this.subPixelOptimize) {\n const optimizedShape = subPixelOptimizeLine(\n subPixelOptimizeOutputShape, shape, this.style\n );\n x1 = optimizedShape.x1;\n y1 = optimizedShape.y1;\n x2 = optimizedShape.x2;\n y2 = optimizedShape.y2;\n }\n else {\n x1 = shape.x1;\n y1 = shape.y1;\n x2 = shape.x2;\n y2 = shape.y2;\n }\n\n const percent = shape.percent;\n\n if (percent === 0) {\n return;\n }\n\n ctx.moveTo(x1, y1);\n\n if (percent < 1) {\n x2 = x1 * (1 - percent) + x2 * percent;\n y2 = y1 * (1 - percent) + y2 * percent;\n }\n ctx.lineTo(x2, y2);\n }\n\n /**\n * Get point at percent\n */\n pointAt(p: number): VectorArray {\n const shape = this.shape;\n return [\n shape.x1 * (1 - p) + shape.x2 * p,\n shape.y1 * (1 - p) + shape.y2 * p\n ];\n }\n}\n\nLine.prototype.type = 'line';\nexport default Line;","/**\n * Catmull-Rom spline 插值折线\n */\n\nimport {distance as v2Distance, VectorArray} from '../../core/vector';\n\nfunction interpolate(\n p0: number, p1: number, p2: number, p3: number, t: number, t2: number, t3: number\n) {\n const v0 = (p2 - p0) * 0.5;\n const v1 = (p3 - p1) * 0.5;\n return (2 * (p1 - p2) + v0 + v1) * t3\n + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n + v0 * t + p1;\n}\n\nexport default function smoothSpline(points: VectorArray[], isLoop?: boolean): VectorArray[] {\n const len = points.length;\n const ret = [];\n\n let distance = 0;\n for (let i = 1; i < len; i++) {\n distance += v2Distance(points[i - 1], points[i]);\n }\n\n let segs = distance / 2;\n segs = segs < len ? len : segs;\n for (let i = 0; i < segs; i++) {\n const pos = i / (segs - 1) * (isLoop ? len : len - 1);\n const idx = Math.floor(pos);\n\n const w = pos - idx;\n\n let p0;\n let p1 = points[idx % len];\n let p2;\n let p3;\n if (!isLoop) {\n p0 = points[idx === 0 ? idx : idx - 1];\n p2 = points[idx > len - 2 ? len - 1 : idx + 1];\n p3 = points[idx > len - 3 ? len - 1 : idx + 2];\n }\n else {\n p0 = points[(idx - 1 + len) % len];\n p2 = points[(idx + 1) % len];\n p3 = points[(idx + 2) % len];\n }\n\n const w2 = w * w;\n const w3 = w * w2;\n\n ret.push([\n interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3),\n interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)\n ]);\n }\n return ret;\n}","/**\n * 贝塞尔平滑曲线\n */\n\nimport {\n min as v2Min,\n max as v2Max,\n scale as v2Scale,\n distance as v2Distance,\n add as v2Add,\n clone as v2Clone,\n sub as v2Sub,\n VectorArray\n} from '../../core/vector';\n\n/**\n * 贝塞尔平滑曲线\n * @param points 线段顶点数组\n * @param smooth 平滑等级, 0-1\n * @param isLoop\n * @param constraint 将计算出来的控制点约束在一个包围盒内\n * 比如 [[0, 0], [100, 100]], 这个包围盒会与\n * 整个折线的包围盒做一个并集用来约束控制点。\n * @param 计算出来的控制点数组\n */\nexport default function smoothBezier(\n points: VectorArray[],\n smooth?: number,\n isLoop?: boolean,\n constraint?: VectorArray[]\n) {\n const cps = [];\n\n const v: VectorArray = [];\n const v1: VectorArray = [];\n const v2: VectorArray = [];\n let prevPoint;\n let nextPoint;\n\n let min;\n let max;\n if (constraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n for (let i = 0, len = points.length; i < len; i++) {\n v2Min(min, min, points[i]);\n v2Max(max, max, points[i]);\n }\n // 与指定的包围盒做并集\n v2Min(min, min, constraint[0]);\n v2Max(max, max, constraint[1]);\n }\n\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n\n if (isLoop) {\n prevPoint = points[i ? i - 1 : len - 1];\n nextPoint = points[(i + 1) % len];\n }\n else {\n if (i === 0 || i === len - 1) {\n cps.push(v2Clone(points[i]));\n continue;\n }\n else {\n prevPoint = points[i - 1];\n nextPoint = points[i + 1];\n }\n }\n\n v2Sub(v, nextPoint, prevPoint);\n\n // use degree to scale the handle length\n v2Scale(v, v, smooth);\n\n let d0 = v2Distance(point, prevPoint);\n let d1 = v2Distance(point, nextPoint);\n const sum = d0 + d1;\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n\n v2Scale(v1, v, -d0);\n v2Scale(v2, v, d1);\n const cp0 = v2Add([], point, v1);\n const cp1 = v2Add([], point, v2);\n if (constraint) {\n v2Max(cp0, cp0, min);\n v2Min(cp0, cp0, max);\n v2Max(cp1, cp1, min);\n v2Min(cp1, cp1, max);\n }\n cps.push(cp0);\n cps.push(cp1);\n }\n\n if (isLoop) {\n cps.push(cps.shift());\n }\n\n return cps;\n}","\nimport smoothSpline from './smoothSpline';\nimport smoothBezier from './smoothBezier';\nimport { VectorArray } from '../../core/vector';\nimport PathProxy from '../../core/PathProxy';\n\nexport function buildPath(\n ctx: CanvasRenderingContext2D | PathProxy,\n shape: {\n points: VectorArray[],\n smooth?: number | 'spline'\n smoothConstraint?: VectorArray[]\n },\n closePath: boolean\n) {\n const smooth = shape.smooth;\n let points = shape.points;\n if (points && points.length >= 2) {\n if (smooth && smooth !== 'spline') {\n const controlPoints = smoothBezier(\n points, smooth, closePath, shape.smoothConstraint\n );\n\n ctx.moveTo(points[0][0], points[0][1]);\n const len = points.length;\n for (let i = 0; i < (closePath ? len : len - 1); i++) {\n const cp1 = controlPoints[i * 2];\n const cp2 = controlPoints[i * 2 + 1];\n const p = points[(i + 1) % len];\n ctx.bezierCurveTo(\n cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]\n );\n }\n }\n else {\n if (smooth === 'spline') {\n points = smoothSpline(points, closePath);\n }\n\n ctx.moveTo(points[0][0], points[0][1]);\n for (let i = 1, l = points.length; i < l; i++) {\n ctx.lineTo(points[i][0], points[i][1]);\n }\n }\n\n closePath && ctx.closePath();\n }\n}\n","/**\n * 多边形\n * @module zrender/shape/Polygon\n */\n\nimport Path, { PathProps } from '../Path';\nimport * as polyHelper from '../helper/poly';\nimport { VectorArray } from '../../core/vector';\n\nexport class PolygonShape {\n points: VectorArray[] = null\n smooth?: number | 'spline' = 0\n smoothConstraint?: VectorArray[] = null\n}\n\nexport interface PolygonProps extends PathProps {\n shape?: Partial\n}\nclass Polygon extends Path {\n\n shape: PolygonShape\n\n constructor(opts?: PolygonProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new PolygonShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: PolygonShape) {\n polyHelper.buildPath(ctx, shape, true);\n }\n};\n\nPolygon.prototype.type = 'polygon';\n\nexport default Polygon;","/**\n * @module zrender/graphic/shape/Polyline\n */\n\nimport Path, { PathProps } from '../Path';\nimport * as polyHelper from '../helper/poly';\nimport { VectorArray } from '../../core/vector';\n\nexport class PolylineShape {\n points: VectorArray[] = null\n // Percent of displayed polyline. For animating purpose\n percent?: number = 1\n smooth?: number | 'spline' = 0\n smoothConstraint?: VectorArray[] = null\n}\n\nexport interface PolylineProps extends PathProps {\n shape?: Partial\n}\nclass Polyline extends Path {\n\n shape: PolylineShape\n\n constructor(opts?: PolylineProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new PolylineShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: PolylineShape) {\n polyHelper.buildPath(ctx, shape, false);\n }\n}\n\nPolyline.prototype.type = 'polyline';\nexport default Polyline;","// TODO Should GradientObject been LinearGradientObject | RadialGradientObject\nexport interface GradientObject {\n\n id?: number\n\n type: string\n\n colorStops: GradientColorStop[]\n\n global: boolean\n}\n\nexport interface InnerGradientObject extends GradientObject {\n __canvasGradient: CanvasGradient\n}\n\nexport interface GradientColorStop {\n offset: number\n color: string\n}\n\nexport default class Gradient {\n\n id?: number\n\n type: string\n\n colorStops: GradientColorStop[]\n\n global: boolean\n\n constructor(colorStops: GradientColorStop[]) {\n this.colorStops = colorStops || [];\n }\n\n addColorStop(offset: number, color: string) {\n this.colorStops.push({\n offset,\n color\n });\n }\n}","import Gradient, {GradientObject, GradientColorStop} from './Gradient';\n\nexport interface LinearGradientObject extends GradientObject {\n type: 'linear'\n\n x: number\n y: number\n x2: number\n y2: number\n}\n/**\n * x, y, x2, y2 are all percent from 0 to 1 when globalCoord is false\n */\n\nexport default class LinearGradient extends Gradient {\n\n type: 'linear'\n\n x: number\n y: number\n x2: number\n y2: number\n\n constructor(\n x: number, y: number, x2: number, y2: number,\n colorStops?: GradientColorStop[], globalCoord?: boolean\n ) {\n\n super(colorStops);\n\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {type: 'linear', colorStops: ...}`, where\n // this constructor will not be called.\n\n this.x = x == null ? 0 : x;\n\n this.y = y == null ? 0 : y;\n\n this.x2 = x2 == null ? 1 : x2;\n\n this.y2 = y2 == null ? 0 : y2;\n\n // Can be cloned\n this.type = 'linear';\n\n // If use global coord\n this.global = globalCoord || false;\n }\n};\n","import Gradient, {GradientColorStop, GradientObject} from './Gradient';\n\nexport interface RadialGradientObject extends GradientObject {\n type: 'radial'\n\n x: number\n y: number\n r: number\n}\n/**\n * x, y, r are all percent from 0 to 1 when globalCoord is false\n */\nclass RadialGradient extends Gradient {\n\n type: 'radial'\n\n x: number\n y: number\n r: number\n\n constructor(\n x: number, y: number, r: number,\n colorStops?: GradientColorStop[], globalCoord?: boolean\n ) {\n super(colorStops);\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {type: 'radial', colorStops: ...}`, where\n // this constructor will not be called.\n this.x = x == null ? 0.5 : x;\n\n this.y = y == null ? 0.5 : y;\n\n this.r = r == null ? 0.5 : r;\n\n // Can be cloned\n this.type = 'radial';\n\n // If use global coord\n this.global = globalCoord || false;\n }\n}\n\nexport default RadialGradient;","import Displayable, { DisplayableProps, DisplayableStatePropNames } from './Displayable';\nimport { getBoundingRect, DEFAULT_FONT } from '../contain/text';\nimport BoundingRect from '../core/BoundingRect';\nimport { PathStyleProps, DEFAULT_PATH_STYLE } from './Path';\nimport { createObject, defaults } from '../core/util';\nimport { TextAlign, TextVerticalAlign } from '../core/types';\n\nexport interface TSpanStyleProps extends PathStyleProps {\n\n x?: number\n y?: number\n\n // TODO Text is assigned inside zrender\n text?: string\n\n font?: string\n\n textAlign?: CanvasTextAlign\n\n textBaseline?: CanvasTextBaseline\n}\n\nexport const DEFAULT_TSPAN_STYLE: TSpanStyleProps = defaults({\n strokeFirst: true,\n font: DEFAULT_FONT,\n x: 0,\n y: 0,\n textAlign: 'left',\n textBaseline: 'top',\n miterLimit: 2\n} as TSpanStyleProps, DEFAULT_PATH_STYLE);\n\n\nexport interface TSpanProps extends DisplayableProps {\n style?: TSpanStyleProps\n}\n\nexport type TSpanState = Pick\n\nclass TSpan extends Displayable {\n\n style: TSpanStyleProps\n\n hasStroke() {\n const style = this.style;\n const stroke = style.stroke;\n return stroke != null && stroke !== 'none' && style.lineWidth > 0;\n }\n\n hasFill() {\n const style = this.style;\n const fill = style.fill;\n return fill != null && fill !== 'none';\n }\n\n /**\n * Create an image style object with default values in it's prototype.\n * @override\n */\n createStyle(obj?: TSpanStyleProps) {\n return createObject(DEFAULT_TSPAN_STYLE, obj);\n }\n\n /**\n * Set bounding rect calculated from Text\n * For reducing time of calculating bounding rect.\n */\n setBoundingRect(rect: BoundingRect) {\n this._rect = rect;\n }\n\n getBoundingRect(): BoundingRect {\n const style = this.style;\n\n if (!this._rect) {\n let text = style.text;\n text != null ? (text += '') : (text = '');\n\n const rect = getBoundingRect(\n text,\n style.font,\n style.textAlign as TextAlign,\n style.textBaseline as TextVerticalAlign\n );\n\n rect.x += style.x || 0;\n rect.y += style.y || 0;\n\n if (this.hasStroke()) {\n const w = style.lineWidth;\n rect.x -= w / 2;\n rect.y -= w / 2;\n rect.width += w;\n rect.height += w;\n }\n\n this._rect = rect;\n }\n\n return this._rect;\n }\n\n protected static initDefaultProps = (function () {\n const tspanProto = TSpan.prototype;\n // TODO Calculate tolerance smarter\n tspanProto.dirtyRectTolerance = 10;\n })()\n}\n\nTSpan.prototype.type = 'tspan';\n\nexport default TSpan;","import { isString } from '../core/util';\n\n/**\n * For big svg string, this method might be time consuming.\n */\nexport function parseXML(svg: Document | string | SVGElement): SVGElement {\n if (isString(svg)) {\n const parser = new DOMParser();\n svg = parser.parseFromString(svg, 'text/xml');\n }\n let svgNode: Node = svg;\n // Document node. If using $.get, doc node may be input.\n if (svgNode.nodeType === 9) {\n svgNode = svgNode.firstChild;\n }\n // nodeName of is also 'svg'.\n while (svgNode.nodeName.toLowerCase() !== 'svg' || svgNode.nodeType !== 1) {\n svgNode = svgNode.nextSibling;\n }\n\n return svgNode as SVGElement;\n}\n","import Group from '../graphic/Group';\nimport ZRImage from '../graphic/Image';\nimport Circle from '../graphic/shape/Circle';\nimport Rect from '../graphic/shape/Rect';\nimport Ellipse from '../graphic/shape/Ellipse';\nimport Line from '../graphic/shape/Line';\nimport Polygon from '../graphic/shape/Polygon';\nimport Polyline from '../graphic/shape/Polyline';\nimport * as matrix from '../core/matrix';\nimport { createFromString } from './path';\nimport { defaults, trim, each, map, keys, hasOwn } from '../core/util';\nimport Displayable from '../graphic/Displayable';\nimport Element from '../Element';\nimport { RectLike } from '../core/BoundingRect';\nimport { Dictionary } from '../core/types';\nimport { PatternObject } from '../graphic/Pattern';\nimport LinearGradient, { LinearGradientObject } from '../graphic/LinearGradient';\nimport RadialGradient, { RadialGradientObject } from '../graphic/RadialGradient';\nimport Gradient, { GradientObject } from '../graphic/Gradient';\nimport TSpan, { TSpanStyleProps } from '../graphic/TSpan';\nimport { parseXML } from './parseXML';\n\n\ninterface SVGParserOption {\n // Default width if svg width not specified or is a percent value.\n width?: number;\n // Default height if svg height not specified or is a percent value.\n height?: number;\n ignoreViewBox?: boolean;\n ignoreRootClip?: boolean;\n}\n\nexport interface SVGParserResult {\n // Group, The root of the the result tree of zrender shapes\n root: Group;\n // number, the viewport width of the SVG\n width: number;\n // number, the viewport height of the SVG\n height: number;\n // {x, y, width, height}, the declared viewBox rect of the SVG, if exists\n viewBoxRect: RectLike;\n // the {scale, position} calculated by viewBox and viewport, is exists\n viewBoxTransform: {\n x: number;\n y: number;\n scale: number;\n };\n named: SVGParserResultNamedItem[];\n}\nexport interface SVGParserResultNamedItem {\n name: string;\n // If a tag has no name attribute but its ancester is named,\n // `namedFrom` is set to the named item of the ancester .\n // Otherwise null/undefined\n namedFrom: SVGParserResultNamedItem;\n svgNodeTagLower: SVGNodeTagLower;\n el: Element;\n};\n\nexport type SVGNodeTagLower =\n 'g' | 'rect' | 'circle' | 'line' | 'ellipse' | 'polygon'\n | 'polyline' | 'image' | 'text' | 'tspan' | 'path' | 'defs' | 'switch';\n\n\ntype DefsId = string;\ntype DefsMap = { [id in DefsId]: LinearGradientObject | RadialGradientObject | PatternObject };\ntype DefsUsePending = [Displayable, 'fill' | 'stroke', DefsId][];\n\ntype ElementExtended = Element & {\n __inheritedStyle?: InheritedStyleByZRKey;\n __selfStyle?: SelfStyleByZRKey;\n}\ntype DisplayableExtended = Displayable & {\n __inheritedStyle?: InheritedStyleByZRKey;\n __selfStyle?: SelfStyleByZRKey;\n}\n\ntype TextStyleOptionExtended = TSpanStyleProps & {\n fontSize: number;\n fontFamily: string;\n fontWeight: string;\n fontStyle: string;\n}\nlet nodeParsers: {[name in SVGNodeTagLower]?: (\n this: SVGParser, xmlNode: SVGElement, parentGroup: Group\n) => Element};\n\ntype InheritedStyleByZRKey = {[name in InheritableStyleZRKey]?: string};\ntype InheritableStyleZRKey =\n typeof INHERITABLE_STYLE_ATTRIBUTES_MAP[keyof typeof INHERITABLE_STYLE_ATTRIBUTES_MAP];\nconst INHERITABLE_STYLE_ATTRIBUTES_MAP = {\n 'fill': 'fill',\n 'stroke': 'stroke',\n 'stroke-width': 'lineWidth',\n 'opacity': 'opacity',\n 'fill-opacity': 'fillOpacity',\n 'stroke-opacity': 'strokeOpacity',\n 'stroke-dasharray': 'lineDash',\n 'stroke-dashoffset': 'lineDashOffset',\n 'stroke-linecap': 'lineCap',\n 'stroke-linejoin': 'lineJoin',\n 'stroke-miterlimit': 'miterLimit',\n 'font-family': 'fontFamily',\n 'font-size': 'fontSize',\n 'font-style': 'fontStyle',\n 'font-weight': 'fontWeight',\n 'text-anchor': 'textAlign',\n 'visibility': 'visibility',\n 'display': 'display'\n} as const;\nconst INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS = keys(INHERITABLE_STYLE_ATTRIBUTES_MAP);\n\ntype SelfStyleByZRKey = {[name in SelfStyleZRKey]?: string};\ntype SelfStyleZRKey =\n typeof SELF_STYLE_ATTRIBUTES_MAP[keyof typeof SELF_STYLE_ATTRIBUTES_MAP];\nconst SELF_STYLE_ATTRIBUTES_MAP = {\n 'alignment-baseline': 'textBaseline',\n 'stop-color': 'stopColor'\n};\nconst SELF_STYLE_ATTRIBUTES_MAP_KEYS = keys(SELF_STYLE_ATTRIBUTES_MAP);\n\n\nclass SVGParser {\n\n private _defs: DefsMap = {};\n // The use of can be in front of declared.\n // So save them temporarily in `_defsUsePending`.\n private _defsUsePending: DefsUsePending;\n private _root: Group = null;\n\n private _textX: number;\n private _textY: number;\n\n parse(xml: string | Document | SVGElement, opt: SVGParserOption): SVGParserResult {\n opt = opt || {};\n\n const svg = parseXML(xml);\n\n if (!svg) {\n throw new Error('Illegal svg');\n }\n\n this._defsUsePending = [];\n let root = new Group();\n this._root = root;\n const named: SVGParserResult['named'] = [];\n // parse view port\n const viewBox = svg.getAttribute('viewBox') || '';\n\n // If width/height not specified, means \"100%\" of `opt.width/height`.\n // TODO: Other percent value not supported yet.\n let width = parseFloat((svg.getAttribute('width') || opt.width) as string);\n let height = parseFloat((svg.getAttribute('height') || opt.height) as string);\n // If width/height not specified, set as null for output.\n isNaN(width) && (width = null);\n isNaN(height) && (height = null);\n\n // Apply inline style on svg element.\n parseAttributes(svg, root, null, true, false);\n\n let child = svg.firstChild as SVGElement;\n while (child) {\n this._parseNode(child, root, named, null, false, false);\n child = child.nextSibling as SVGElement;\n }\n\n applyDefs(this._defs, this._defsUsePending);\n this._defsUsePending = [];\n\n let viewBoxRect;\n let viewBoxTransform;\n\n if (viewBox) {\n const viewBoxArr = splitNumberSequence(viewBox);\n // Some invalid case like viewBox: 'none'.\n if (viewBoxArr.length >= 4) {\n viewBoxRect = {\n x: parseFloat((viewBoxArr[0] || 0) as string),\n y: parseFloat((viewBoxArr[1] || 0) as string),\n width: parseFloat(viewBoxArr[2]),\n height: parseFloat(viewBoxArr[3])\n };\n }\n }\n\n if (viewBoxRect && width != null && height != null) {\n viewBoxTransform = makeViewBoxTransform(viewBoxRect, { x: 0, y: 0, width: width, height: height });\n\n if (!opt.ignoreViewBox) {\n // If set transform on the output group, it probably bring trouble when\n // some users only intend to show the clipped content inside the viewBox,\n // but not intend to transform the output group. So we keep the output\n // group no transform. If the user intend to use the viewBox as a\n // camera, just set `opt.ignoreViewBox` as `true` and set transfrom\n // manually according to the viewBox info in the output of this method.\n const elRoot = root;\n root = new Group();\n root.add(elRoot);\n elRoot.scaleX = elRoot.scaleY = viewBoxTransform.scale;\n elRoot.x = viewBoxTransform.x;\n elRoot.y = viewBoxTransform.y;\n }\n }\n\n // Some shapes might be overflow the viewport, which should be\n // clipped despite whether the viewBox is used, as the SVG does.\n if (!opt.ignoreRootClip && width != null && height != null) {\n root.setClipPath(new Rect({\n shape: {x: 0, y: 0, width: width, height: height}\n }));\n }\n\n // Set width/height on group just for output the viewport size.\n return {\n root: root,\n width: width,\n height: height,\n viewBoxRect: viewBoxRect,\n viewBoxTransform: viewBoxTransform,\n named: named\n };\n }\n\n private _parseNode(\n xmlNode: SVGElement,\n parentGroup: Group,\n named: SVGParserResultNamedItem[],\n namedFrom: SVGParserResultNamedItem['namedFrom'],\n isInDefs: boolean,\n isInText: boolean\n ): void {\n\n const nodeName = xmlNode.nodeName.toLowerCase() as SVGNodeTagLower;\n\n // TODO:\n // support in svg, where nodeName is 'style',\n // CSS classes is defined globally wherever the style tags are declared.\n\n let el;\n let namedFromForSub = namedFrom;\n\n if (nodeName === 'defs') {\n isInDefs = true;\n }\n if (nodeName === 'text') {\n isInText = true;\n }\n\n if (nodeName === 'defs' || nodeName === 'switch') {\n // Just make displayable. Do not support\n // the full feature of it.\n el = parentGroup;\n }\n else {\n // In , elments will not be rendered.\n // TODO:\n // do not support elements in yet, until requirement come.\n // other graphic elements can also be in and referenced by\n // \n // multiple times\n if (!isInDefs) {\n const parser = nodeParsers[nodeName];\n if (parser && hasOwn(nodeParsers, nodeName)) {\n\n el = parser.call(this, xmlNode, parentGroup);\n\n // Do not support empty string;\n const nameAttr = xmlNode.getAttribute('name');\n if (nameAttr) {\n const newNamed: SVGParserResultNamedItem = {\n name: nameAttr,\n namedFrom: null,\n svgNodeTagLower: nodeName,\n el: el\n };\n named.push(newNamed);\n if (nodeName === 'g') {\n namedFromForSub = newNamed;\n }\n }\n else if (namedFrom) {\n named.push({\n name: namedFrom.name,\n namedFrom: namedFrom,\n svgNodeTagLower: nodeName,\n el: el\n });\n }\n\n parentGroup.add(el);\n }\n }\n\n // Whether gradients/patterns are declared in or not,\n // they all work.\n const parser = paintServerParsers[nodeName];\n if (parser && hasOwn(paintServerParsers, nodeName)) {\n const def = parser.call(this, xmlNode);\n const id = xmlNode.getAttribute('id');\n if (id) {\n this._defs[id] = def;\n }\n }\n }\n\n // If xmlNode is , , , , ,\n // el will be a group, and traverse the children.\n if (el && el.isGroup) {\n let child = xmlNode.firstChild as SVGElement;\n while (child) {\n if (child.nodeType === 1) {\n this._parseNode(child, el as Group, named, namedFromForSub, isInDefs, isInText);\n }\n // Is plain text rather than a tagged node.\n else if (child.nodeType === 3 && isInText) {\n this._parseText(child, el as Group);\n }\n child = child.nextSibling as SVGElement;\n }\n }\n\n }\n\n private _parseText(xmlNode: SVGElement, parentGroup: Group): TSpan {\n const text = new TSpan({\n style: {\n text: xmlNode.textContent\n },\n silent: true,\n x: this._textX || 0,\n y: this._textY || 0\n });\n\n inheritStyle(parentGroup, text);\n\n parseAttributes(xmlNode, text, this._defsUsePending, false, false);\n\n applyTextAlignment(text, parentGroup);\n\n const textStyle = text.style as TextStyleOptionExtended;\n const fontSize = textStyle.fontSize;\n if (fontSize && fontSize < 9) {\n // PENDING\n textStyle.fontSize = 9;\n text.scaleX *= fontSize / 9;\n text.scaleY *= fontSize / 9;\n }\n\n const font = (textStyle.fontSize || textStyle.fontFamily) && [\n textStyle.fontStyle,\n textStyle.fontWeight,\n (textStyle.fontSize || 12) + 'px',\n // If font properties are defined, `fontFamily` should not be ignored.\n textStyle.fontFamily || 'sans-serif'\n ].join(' ');\n // Make font\n textStyle.font = font;\n\n const rect = text.getBoundingRect();\n this._textX += rect.width;\n\n parentGroup.add(text);\n\n return text;\n }\n\n static internalField = (function () {\n\n nodeParsers = {\n 'g': function (xmlNode, parentGroup) {\n const g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defsUsePending, false, false);\n\n return g;\n },\n 'rect': function (xmlNode, parentGroup) {\n const rect = new Rect();\n inheritStyle(parentGroup, rect);\n parseAttributes(xmlNode, rect, this._defsUsePending, false, false);\n\n rect.setShape({\n x: parseFloat(xmlNode.getAttribute('x') || '0'),\n y: parseFloat(xmlNode.getAttribute('y') || '0'),\n width: parseFloat(xmlNode.getAttribute('width') || '0'),\n height: parseFloat(xmlNode.getAttribute('height') || '0')\n });\n\n rect.silent = true;\n\n return rect;\n },\n 'circle': function (xmlNode, parentGroup) {\n const circle = new Circle();\n inheritStyle(parentGroup, circle);\n parseAttributes(xmlNode, circle, this._defsUsePending, false, false);\n\n circle.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || '0'),\n cy: parseFloat(xmlNode.getAttribute('cy') || '0'),\n r: parseFloat(xmlNode.getAttribute('r') || '0')\n });\n\n circle.silent = true;\n\n return circle;\n },\n 'line': function (xmlNode, parentGroup) {\n const line = new Line();\n inheritStyle(parentGroup, line);\n parseAttributes(xmlNode, line, this._defsUsePending, false, false);\n\n line.setShape({\n x1: parseFloat(xmlNode.getAttribute('x1') || '0'),\n y1: parseFloat(xmlNode.getAttribute('y1') || '0'),\n x2: parseFloat(xmlNode.getAttribute('x2') || '0'),\n y2: parseFloat(xmlNode.getAttribute('y2') || '0')\n });\n\n line.silent = true;\n\n return line;\n },\n 'ellipse': function (xmlNode, parentGroup) {\n const ellipse = new Ellipse();\n inheritStyle(parentGroup, ellipse);\n parseAttributes(xmlNode, ellipse, this._defsUsePending, false, false);\n\n ellipse.setShape({\n cx: parseFloat(xmlNode.getAttribute('cx') || '0'),\n cy: parseFloat(xmlNode.getAttribute('cy') || '0'),\n rx: parseFloat(xmlNode.getAttribute('rx') || '0'),\n ry: parseFloat(xmlNode.getAttribute('ry') || '0')\n });\n\n ellipse.silent = true;\n\n return ellipse;\n },\n 'polygon': function (xmlNode, parentGroup) {\n const pointsStr = xmlNode.getAttribute('points');\n let pointsArr;\n if (pointsStr) {\n pointsArr = parsePoints(pointsStr);\n }\n const polygon = new Polygon({\n shape: {\n points: pointsArr || []\n },\n silent: true\n });\n\n inheritStyle(parentGroup, polygon);\n parseAttributes(xmlNode, polygon, this._defsUsePending, false, false);\n\n return polygon;\n },\n 'polyline': function (xmlNode, parentGroup) {\n const pointsStr = xmlNode.getAttribute('points');\n let pointsArr;\n if (pointsStr) {\n pointsArr = parsePoints(pointsStr);\n }\n const polyline = new Polyline({\n shape: {\n points: pointsArr || []\n },\n silent: true\n });\n\n inheritStyle(parentGroup, polyline);\n parseAttributes(xmlNode, polyline, this._defsUsePending, false, false);\n\n return polyline;\n },\n 'image': function (xmlNode, parentGroup) {\n const img = new ZRImage();\n inheritStyle(parentGroup, img);\n parseAttributes(xmlNode, img, this._defsUsePending, false, false);\n\n img.setStyle({\n image: xmlNode.getAttribute('xlink:href'),\n x: +xmlNode.getAttribute('x'),\n y: +xmlNode.getAttribute('y'),\n width: +xmlNode.getAttribute('width'),\n height: +xmlNode.getAttribute('height')\n });\n img.silent = true;\n\n return img;\n },\n 'text': function (xmlNode, parentGroup) {\n const x = xmlNode.getAttribute('x') || '0';\n const y = xmlNode.getAttribute('y') || '0';\n const dx = xmlNode.getAttribute('dx') || '0';\n const dy = xmlNode.getAttribute('dy') || '0';\n\n this._textX = parseFloat(x) + parseFloat(dx);\n this._textY = parseFloat(y) + parseFloat(dy);\n\n const g = new Group();\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defsUsePending, false, true);\n\n return g;\n },\n 'tspan': function (xmlNode, parentGroup) {\n const x = xmlNode.getAttribute('x');\n const y = xmlNode.getAttribute('y');\n if (x != null) {\n // new offset x\n this._textX = parseFloat(x);\n }\n if (y != null) {\n // new offset y\n this._textY = parseFloat(y);\n }\n const dx = xmlNode.getAttribute('dx') || '0';\n const dy = xmlNode.getAttribute('dy') || '0';\n\n const g = new Group();\n\n inheritStyle(parentGroup, g);\n parseAttributes(xmlNode, g, this._defsUsePending, false, true);\n\n this._textX += parseFloat(dx);\n this._textY += parseFloat(dy);\n\n return g;\n },\n 'path': function (xmlNode, parentGroup) {\n // TODO svg fill rule\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule\n // path.style.globalCompositeOperation = 'xor';\n const d = xmlNode.getAttribute('d') || '';\n\n // Performance sensitive.\n\n const path = createFromString(d);\n\n inheritStyle(parentGroup, path);\n parseAttributes(xmlNode, path, this._defsUsePending, false, false);\n\n path.silent = true;\n\n return path;\n }\n };\n\n\n })();\n}\n\nconst paintServerParsers: Dictionary<(xmlNode: SVGElement) => any> = {\n\n 'lineargradient': function (xmlNode: SVGElement) {\n // TODO:\n // Support that x1,y1,x2,y2 are not declared lineargradient but in node.\n const x1 = parseInt(xmlNode.getAttribute('x1') || '0', 10);\n const y1 = parseInt(xmlNode.getAttribute('y1') || '0', 10);\n const x2 = parseInt(xmlNode.getAttribute('x2') || '10', 10);\n const y2 = parseInt(xmlNode.getAttribute('y2') || '0', 10);\n\n const gradient = new LinearGradient(x1, y1, x2, y2);\n\n parsePaintServerUnit(xmlNode, gradient);\n\n parseGradientColorStops(xmlNode, gradient);\n\n return gradient;\n },\n\n 'radialgradient': function (xmlNode) {\n // TODO:\n // Support that x1,y1,x2,y2 are not declared radialgradient but in node.\n // TODO:\n // Support fx, fy, fr.\n const cx = parseInt(xmlNode.getAttribute('cx') || '0', 10);\n const cy = parseInt(xmlNode.getAttribute('cy') || '0', 10);\n const r = parseInt(xmlNode.getAttribute('r') || '0', 10);\n\n const gradient = new RadialGradient(cx, cy, r);\n\n parsePaintServerUnit(xmlNode, gradient);\n\n parseGradientColorStops(xmlNode, gradient);\n\n return gradient;\n }\n\n // TODO\n // 'pattern': function (xmlNode: SVGElement) {\n // }\n};\n\nfunction parsePaintServerUnit(xmlNode: SVGElement, gradient: Gradient) {\n const gradientUnits = xmlNode.getAttribute('gradientUnits');\n if (gradientUnits === 'userSpaceOnUse') {\n gradient.global = true;\n }\n}\n\nfunction parseGradientColorStops(xmlNode: SVGElement, gradient: GradientObject): void {\n\n let stop = xmlNode.firstChild as SVGStopElement;\n\n while (stop) {\n if (stop.nodeType === 1\n // there might be some other irrelevant tags used by editor.\n && stop.nodeName.toLocaleLowerCase() === 'stop'\n ) {\n const offsetStr = stop.getAttribute('offset');\n let offset: number;\n if (offsetStr && offsetStr.indexOf('%') > 0) { // percentage\n offset = parseInt(offsetStr, 10) / 100;\n }\n else if (offsetStr) { // number from 0 to 1\n offset = parseFloat(offsetStr);\n }\n else {\n offset = 0;\n }\n\n // has higher priority than\n // \n const styleVals = {} as Dictionary;\n parseInlineStyle(stop, styleVals, styleVals);\n const stopColor = styleVals.stopColor\n || stop.getAttribute('stop-color')\n || '#000000';\n\n gradient.colorStops.push({\n offset: offset,\n color: stopColor\n });\n }\n stop = stop.nextSibling as SVGStopElement;\n }\n}\n\nfunction inheritStyle(parent: Element, child: Element): void {\n if (parent && (parent as ElementExtended).__inheritedStyle) {\n if (!(child as ElementExtended).__inheritedStyle) {\n (child as ElementExtended).__inheritedStyle = {};\n }\n defaults((child as ElementExtended).__inheritedStyle, (parent as ElementExtended).__inheritedStyle);\n }\n}\n\nfunction parsePoints(pointsString: string): number[][] {\n const list = splitNumberSequence(pointsString);\n const points = [];\n\n for (let i = 0; i < list.length; i += 2) {\n const x = parseFloat(list[i]);\n const y = parseFloat(list[i + 1]);\n points.push([x, y]);\n }\n return points;\n}\n\nfunction parseAttributes(\n xmlNode: SVGElement,\n el: Element,\n defsUsePending: DefsUsePending,\n onlyInlineStyle: boolean,\n isTextGroup: boolean\n): void {\n const disp = el as DisplayableExtended;\n const inheritedStyle = disp.__inheritedStyle = disp.__inheritedStyle || {};\n const selfStyle: SelfStyleByZRKey = {};\n\n // TODO Shadow\n if (xmlNode.nodeType === 1) {\n parseTransformAttribute(xmlNode, el);\n\n parseInlineStyle(xmlNode, inheritedStyle, selfStyle);\n\n if (!onlyInlineStyle) {\n parseAttributeStyle(xmlNode, inheritedStyle, selfStyle);\n }\n }\n\n disp.style = disp.style || {};\n\n if (inheritedStyle.fill != null) {\n disp.style.fill = getFillStrokeStyle(disp, 'fill', inheritedStyle.fill, defsUsePending);\n }\n if (inheritedStyle.stroke != null) {\n disp.style.stroke = getFillStrokeStyle(disp, 'stroke', inheritedStyle.stroke, defsUsePending);\n }\n\n each([\n 'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'\n ] as const, function (propName) {\n if (inheritedStyle[propName] != null) {\n disp.style[propName] = parseFloat(inheritedStyle[propName]);\n }\n });\n\n each([\n 'lineDashOffset', 'lineCap', 'lineJoin', 'fontWeight', 'fontFamily', 'fontStyle', 'textAlign'\n ] as const, function (propName) {\n if (inheritedStyle[propName] != null) {\n disp.style[propName] = inheritedStyle[propName];\n }\n });\n\n // Because selfStyle only support textBaseline, so only text group need it.\n // in other cases selfStyle can be released.\n if (isTextGroup) {\n disp.__selfStyle = selfStyle;\n }\n\n if (inheritedStyle.lineDash) {\n disp.style.lineDash = map(splitNumberSequence(inheritedStyle.lineDash), function (str) {\n return parseFloat(str);\n });\n }\n\n if (inheritedStyle.visibility === 'hidden' || inheritedStyle.visibility === 'collapse') {\n disp.invisible = true;\n }\n\n if (inheritedStyle.display === 'none') {\n disp.ignore = true;\n }\n}\n\nfunction applyTextAlignment(\n text: TSpan,\n parentGroup: Group\n): void {\n const parentSelfStyle = (parentGroup as ElementExtended).__selfStyle;\n if (parentSelfStyle) {\n const textBaseline = parentSelfStyle.textBaseline;\n let zrTextBaseline = textBaseline as CanvasTextBaseline;\n if (!textBaseline || textBaseline === 'auto') {\n // FIXME: 'auto' means the value is the dominant-baseline of the script to\n // which the character belongs - i.e., use the dominant-baseline of the parent.\n zrTextBaseline = 'alphabetic';\n }\n else if (textBaseline === 'baseline') {\n zrTextBaseline = 'alphabetic';\n }\n else if (textBaseline === 'before-edge' || textBaseline === 'text-before-edge') {\n zrTextBaseline = 'top';\n }\n else if (textBaseline === 'after-edge' || textBaseline === 'text-after-edge') {\n zrTextBaseline = 'bottom';\n }\n else if (textBaseline === 'central' || textBaseline === 'mathematical') {\n zrTextBaseline = 'middle';\n }\n text.style.textBaseline = zrTextBaseline;\n }\n\n const parentInheritedStyle = (parentGroup as ElementExtended).__inheritedStyle;\n if (parentInheritedStyle) {\n // PENDING:\n // canvas `direction` is an experimental attribute.\n // so we do not support SVG direction \"rtl\" for text-anchor yet.\n const textAlign = parentInheritedStyle.textAlign;\n let zrTextAlign = textAlign as CanvasTextAlign;\n if (textAlign) {\n if (textAlign === 'middle') {\n zrTextAlign = 'center';\n }\n text.style.textAlign = zrTextAlign;\n }\n }\n}\n\n// Support `fill:url(#someId)`.\nconst urlRegex = /^url\\(\\s*#(.*?)\\)/;\nfunction getFillStrokeStyle(\n el: Displayable,\n method: 'fill' | 'stroke',\n str: string,\n defsUsePending: DefsUsePending\n): string {\n const urlMatch = str && str.match(urlRegex);\n if (urlMatch) {\n const url = trim(urlMatch[1]);\n defsUsePending.push([el, method, url]);\n return;\n }\n // SVG fill and stroke can be 'none'.\n if (str === 'none') {\n str = null;\n }\n return str;\n}\n\nfunction applyDefs(\n defs: DefsMap,\n defsUsePending: DefsUsePending\n): void {\n for (let i = 0; i < defsUsePending.length; i++) {\n const item = defsUsePending[i];\n item[0].style[item[1]] = defs[item[2]];\n }\n}\n\n// value can be like:\n// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983',\n// 'l-.5E1,54', '121-23-44-11' (no delimiter)\n// PENDING: here continuous commas are treat as one comma, but the\n// browser SVG parser treats this by printing error.\nconst numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\nfunction splitNumberSequence(rawStr: string): string[] {\n return rawStr.match(numberReg) || [];\n}\n// Most of the values can be separated by comma and/or white space.\n// const DILIMITER_REG = /[\\s,]+/;\n\n\nconst transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\\(([\\-\\s0-9\\.eE,]*)\\)/g;\nconst DEGREE_TO_ANGLE = Math.PI / 180;\n\nfunction parseTransformAttribute(xmlNode: SVGElement, node: Element): void {\n let transform = xmlNode.getAttribute('transform');\n if (transform) {\n transform = transform.replace(/,/g, ' ');\n const transformOps: string[] = [];\n let mt = null;\n transform.replace(transformRegex, function (str: string, type: string, value: string) {\n transformOps.push(type, value);\n return '';\n });\n\n for (let i = transformOps.length - 1; i > 0; i -= 2) {\n const value = transformOps[i];\n const type = transformOps[i - 1];\n const valueArr: string[] = splitNumberSequence(value);\n mt = mt || matrix.create();\n switch (type) {\n case 'translate':\n matrix.translate(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || '0')]);\n break;\n case 'scale':\n matrix.scale(mt, mt, [parseFloat(valueArr[0]), parseFloat(valueArr[1] || valueArr[0])]);\n break;\n case 'rotate':\n // TODO: zrender use different hand in coordinate system.\n matrix.rotate(mt, mt, -parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n break;\n case 'skewX':\n const sx = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n matrix.mul(mt, [1, 0, sx, 1, 0, 0], mt);\n break;\n case 'skewY':\n const sy = Math.tan(parseFloat(valueArr[0]) * DEGREE_TO_ANGLE);\n matrix.mul(mt, [1, sy, 0, 1, 0, 0], mt);\n break;\n case 'matrix':\n mt[0] = parseFloat(valueArr[0]);\n mt[1] = parseFloat(valueArr[1]);\n mt[2] = parseFloat(valueArr[2]);\n mt[3] = parseFloat(valueArr[3]);\n mt[4] = parseFloat(valueArr[4]);\n mt[5] = parseFloat(valueArr[5]);\n break;\n }\n }\n node.setLocalTransform(mt);\n }\n}\n\n// Value may contain space.\nconst styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\nfunction parseInlineStyle(\n xmlNode: SVGElement,\n inheritableStyleResult: Dictionary,\n selfStyleResult: Dictionary\n): void {\n const style = xmlNode.getAttribute('style');\n\n if (!style) {\n return;\n }\n\n styleRegex.lastIndex = 0;\n let styleRegResult;\n while ((styleRegResult = styleRegex.exec(style)) != null) {\n const svgStlAttr = styleRegResult[1];\n\n const zrInheritableStlAttr = hasOwn(INHERITABLE_STYLE_ATTRIBUTES_MAP, svgStlAttr)\n ? INHERITABLE_STYLE_ATTRIBUTES_MAP[svgStlAttr as keyof typeof INHERITABLE_STYLE_ATTRIBUTES_MAP]\n : null;\n if (zrInheritableStlAttr) {\n inheritableStyleResult[zrInheritableStlAttr] = styleRegResult[2];\n }\n\n const zrSelfStlAttr = hasOwn(SELF_STYLE_ATTRIBUTES_MAP, svgStlAttr)\n ? SELF_STYLE_ATTRIBUTES_MAP[svgStlAttr as keyof typeof SELF_STYLE_ATTRIBUTES_MAP]\n : null;\n if (zrSelfStlAttr) {\n selfStyleResult[zrSelfStlAttr] = styleRegResult[2];\n }\n }\n}\n\nfunction parseAttributeStyle(\n xmlNode: SVGElement,\n inheritableStyleResult: Dictionary,\n selfStyleResult: Dictionary\n): void {\n for (let i = 0; i < INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) {\n const svgAttrName = INHERITABLE_STYLE_ATTRIBUTES_MAP_KEYS[i];\n const attrValue = xmlNode.getAttribute(svgAttrName);\n if (attrValue != null) {\n inheritableStyleResult[INHERITABLE_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue;\n }\n }\n for (let i = 0; i < SELF_STYLE_ATTRIBUTES_MAP_KEYS.length; i++) {\n const svgAttrName = SELF_STYLE_ATTRIBUTES_MAP_KEYS[i];\n const attrValue = xmlNode.getAttribute(svgAttrName);\n if (attrValue != null) {\n selfStyleResult[SELF_STYLE_ATTRIBUTES_MAP[svgAttrName]] = attrValue;\n }\n }\n}\n\nexport function makeViewBoxTransform(viewBoxRect: RectLike, boundingRect: RectLike): {\n scale: number;\n x: number;\n y: number;\n} {\n const scaleX = boundingRect.width / viewBoxRect.width;\n const scaleY = boundingRect.height / viewBoxRect.height;\n const scale = Math.min(scaleX, scaleY);\n // preserveAspectRatio 'xMidYMid'\n\n return {\n scale,\n x: -(viewBoxRect.x + viewBoxRect.width / 2) * scale + (boundingRect.x + boundingRect.width / 2),\n y: -(viewBoxRect.y + viewBoxRect.height / 2) * scale + (boundingRect.y + boundingRect.height / 2)\n };\n}\n\nexport function parseSVG(xml: string | Document | SVGElement, opt: SVGParserOption): SVGParserResult {\n const parser = new SVGParser();\n return parser.parse(xml, opt);\n}\n\n\n// Also export parseXML to avoid breaking change.\nexport {parseXML};\n","import PathProxy, { normalizeArcAngles } from '../../core/PathProxy';\n\nconst PI = Math.PI;\nconst PI2 = PI * 2;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst mathACos = Math.acos;\nconst mathATan2 = Math.atan2;\nconst mathAbs = Math.abs;\nconst mathSqrt = Math.sqrt;\nconst mathMax = Math.max;\nconst mathMin = Math.min;\nconst e = 1e-4;\n\ntype CornerTangents = {\n cx: number\n cy: number\n x01: number\n y01: number\n x11: number\n y11: number\n};\n\nfunction intersect(\n x0: number, y0: number,\n x1: number, y1: number,\n x2: number, y2: number,\n x3: number, y3: number\n): [number, number] {\n const x10 = x1 - x0;\n const y10 = y1 - y0;\n const x32 = x3 - x2;\n const y32 = y3 - y2;\n let t = y32 * x10 - x32 * y10;\n if (t * t < e) {\n return;\n }\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\nfunction computeCornerTangents(\n x0: number, y0: number,\n x1: number, y1: number,\n radius: number, cr: number,\n clockwise: boolean\n): CornerTangents {\n const x01 = x0 - x1;\n const y01 = y0 - y1;\n const lo = (clockwise ? cr : -cr) / mathSqrt(x01 * x01 + y01 * y01);\n const ox = lo * y01;\n const oy = -lo * x01;\n const x11 = x0 + ox;\n const y11 = y0 + oy;\n const x10 = x1 + ox;\n const y10 = y1 + oy;\n const x00 = (x11 + x10) / 2;\n const y00 = (y11 + y10) / 2;\n const dx = x10 - x11;\n const dy = y10 - y11;\n const d2 = dx * dx + dy * dy;\n const r = radius - cr;\n const s = x11 * y10 - x10 * y11;\n const d = (dy < 0 ? -1 : 1) * mathSqrt(mathMax(0, r * r * d2 - s * s));\n let cx0 = (s * dy - dx * d) / d2;\n let cy0 = (-s * dx - dy * d) / d2;\n const cx1 = (s * dy + dx * d) / d2;\n const cy1 = (-s * dx + dy * d) / d2;\n const dx0 = cx0 - x00;\n const dy0 = cy0 - y00;\n const dx1 = cx1 - x00;\n const dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points\n // TODO: Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) {\n cx0 = cx1;\n cy0 = cy1;\n }\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (radius / r - 1),\n y11: cy0 * (radius / r - 1)\n };\n}\n\nexport function buildPath(ctx: CanvasRenderingContext2D | PathProxy, shape: {\n cx: number\n cy: number\n startAngle: number\n endAngle: number\n clockwise?: boolean,\n r?: number,\n r0?: number,\n cornerRadius?: number,\n innerCornerRadius?: number\n}) {\n let radius = mathMax(shape.r, 0);\n let innerRadius = mathMax(shape.r0 || 0, 0);\n const hasRadius = radius > 0;\n const hasInnerRadius = innerRadius > 0;\n\n if (!hasRadius && !hasInnerRadius) {\n return;\n }\n\n if (!hasRadius) {\n // use innerRadius as radius if no radius\n radius = innerRadius;\n innerRadius = 0;\n }\n\n if (innerRadius > radius) {\n // swap, ensure that radius is always larger than innerRadius\n const tmp = radius;\n radius = innerRadius;\n innerRadius = tmp;\n }\n\n const clockwise = !!shape.clockwise;\n const startAngle = shape.startAngle;\n const endAngle = shape.endAngle;\n\n // PENDING: whether normalizing angles is required?\n let arc: number;\n // FIXME: there may be a precision issue in `normalizeArcAngles`\n if (startAngle === endAngle) {\n arc = 0;\n }\n else {\n const tmpAngles = [startAngle, endAngle];\n normalizeArcAngles(tmpAngles, !clockwise);\n arc = mathAbs(tmpAngles[0] - tmpAngles[1]);\n }\n\n const x = shape.cx;\n const y = shape.cy;\n const cornerRadius = shape.cornerRadius || 0;\n const innerCornerRadius = shape.innerCornerRadius || 0;\n\n // is a point\n if (!(radius > e)) {\n ctx.moveTo(x, y);\n }\n // is a circle or annulus\n else if (arc > PI2 - e) {\n ctx.moveTo(\n x + radius * mathCos(startAngle),\n y + radius * mathSin(startAngle)\n );\n ctx.arc(x, y, radius, startAngle, endAngle, !clockwise);\n\n if (innerRadius > e) {\n ctx.moveTo(\n x + innerRadius * mathCos(endAngle),\n y + innerRadius * mathSin(endAngle)\n );\n ctx.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n }\n }\n // is a circular or annular sector\n else {\n const halfRd = mathAbs(radius - innerRadius) / 2;\n const cr = mathMin(halfRd, cornerRadius);\n const icr = mathMin(halfRd, innerCornerRadius);\n let cr0 = icr;\n let cr1 = cr;\n\n const xrs = radius * mathCos(startAngle);\n const yrs = radius * mathSin(startAngle);\n const xire = innerRadius * mathCos(endAngle);\n const yire = innerRadius * mathSin(endAngle);\n\n let xre;\n let yre;\n let xirs;\n let yirs;\n\n // draw corner radius\n if (cr > e || icr > e) {\n xre = radius * mathCos(endAngle);\n yre = radius * mathSin(endAngle);\n xirs = innerRadius * mathCos(startAngle);\n yirs = innerRadius * mathSin(startAngle);\n\n // restrict the max value of corner radius\n if (arc < PI) {\n const it = intersect(xrs, yrs, xirs, yirs, xre, yre, xire, yire);\n if (it) {\n const x0 = xrs - it[0];\n const y0 = yrs - it[1];\n const x1 = xre - it[0];\n const y1 = yre - it[1];\n const a = 1 / mathSin(\n mathACos((x0 * x1 + y0 * y1) / (mathSqrt(x0 * x0 + y0 * y0) * mathSqrt(x1 * x1 + y1 * y1))) / 2\n );\n const b = mathSqrt(it[0] * it[0] + it[1] * it[1]);\n cr0 = mathMin(icr, (innerRadius - b) / (a - 1));\n cr1 = mathMin(cr, (radius - b) / (a + 1));\n }\n }\n }\n\n // the sector is collapsed to a line\n if (!(arc > e)) {\n ctx.moveTo(x + xrs, y + yrs);\n }\n // the outer ring has corners\n else if (cr1 > e) {\n const ct0 = computeCornerTangents(xirs, yirs, xrs, yrs, radius, cr1, clockwise);\n const ct1 = computeCornerTangents(xre, yre, xire, yire, radius, cr1, clockwise);\n\n ctx.moveTo(x + ct0.cx + ct0.x01, y + ct0.cy + ct0.y01);\n\n // Have the corners merged?\n if (cr1 < cr) {\n // eslint-disable-next-line max-len\n ctx.arc(x + ct0.cx, y + ct0.cy, cr1, mathATan2(ct0.y01, ct0.x01), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n else {\n // draw the two corners and the ring\n // eslint-disable-next-line max-len\n ctx.arc(x + ct0.cx, y + ct0.cy, cr1, mathATan2(ct0.y01, ct0.x01), mathATan2(ct0.y11, ct0.x11), !clockwise);\n // eslint-disable-next-line max-len\n ctx.arc(x, y, radius, mathATan2(ct0.cy + ct0.y11, ct0.cx + ct0.x11), mathATan2(ct1.cy + ct1.y11, ct1.cx + ct1.x11), !clockwise);\n // eslint-disable-next-line max-len\n ctx.arc(x + ct1.cx, y + ct1.cy, cr1, mathATan2(ct1.y11, ct1.x11), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n }\n // the outer ring is a circular arc\n else {\n ctx.moveTo(x + xrs, y + yrs);\n ctx.arc(x, y, radius, startAngle, endAngle, !clockwise);\n }\n\n // no inner ring, is a circular sector\n if (!(innerRadius > e) || !(arc > e)) {\n ctx.lineTo(x + xire, y + yire);\n }\n // the inner ring has corners\n else if (cr0 > e) {\n const ct0 = computeCornerTangents(xire, yire, xre, yre, innerRadius, -cr0, clockwise);\n const ct1 = computeCornerTangents(xrs, yrs, xirs, yirs, innerRadius, -cr0, clockwise);\n ctx.lineTo(x + ct0.cx + ct0.x01, y + ct0.cy + ct0.y01);\n\n // Have the corners merged?\n if (cr0 < icr) {\n // eslint-disable-next-line max-len\n ctx.arc(x + ct0.cx, y + ct0.cy, cr0, mathATan2(ct0.y01, ct0.x01), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n // draw the two corners and the ring\n else {\n // eslint-disable-next-line max-len\n ctx.arc(x + ct0.cx, y + ct0.cy, cr0, mathATan2(ct0.y01, ct0.x01), mathATan2(ct0.y11, ct0.x11), !clockwise);\n // eslint-disable-next-line max-len\n ctx.arc(x, y, innerRadius, mathATan2(ct0.cy + ct0.y11, ct0.cx + ct0.x11), mathATan2(ct1.cy + ct1.y11, ct1.cx + ct1.x11), clockwise);\n // eslint-disable-next-line max-len\n ctx.arc(x + ct1.cx, y + ct1.cy, cr0, mathATan2(ct1.y11, ct1.x11), mathATan2(ct1.y01, ct1.x01), !clockwise);\n }\n }\n // the inner ring is just a circular arc\n else {\n // FIXME: if no lineTo, svg renderer will perform an abnormal drawing behavior.\n ctx.lineTo(x + xire, y + yire);\n\n ctx.arc(x, y, innerRadius, endAngle, startAngle, clockwise);\n }\n }\n\n ctx.closePath();\n}\n","import Path, { PathProps } from '../Path';\nimport * as roundSectorHelper from '../helper/roundSector';\n\nexport class SectorShape {\n cx = 0\n cy = 0\n r0 = 0\n r = 0\n startAngle = 0\n endAngle = Math.PI * 2\n clockwise = true\n cornerRadius = 0\n innerCornerRadius = 0\n}\n\nexport interface SectorProps extends PathProps {\n shape?: Partial\n}\n\nclass Sector extends Path {\n\n shape: SectorShape\n\n constructor(opts?: SectorProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new SectorShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: SectorShape) {\n roundSectorHelper.buildPath(ctx, shape);\n }\n\n isZeroArea() {\n return this.shape.startAngle === this.shape.endAngle\n || this.shape.r === this.shape.r0;\n }\n}\n\nSector.prototype.type = 'sector';\n\nexport default Sector;\n","import { cubicSubdivide } from '../core/curve';\nimport PathProxy from '../core/PathProxy';\n\nconst CMD = PathProxy.CMD;\n\nfunction aroundEqual(a: number, b: number) {\n return Math.abs(a - b) < 1e-5;\n}\n\nexport function pathToBezierCurves(path: PathProxy) {\n\n const data = path.data;\n const len = path.len();\n\n const bezierArrayGroups: number[][] = [];\n let currentSubpath: number[];\n\n let xi = 0;\n let yi = 0;\n let x0 = 0;\n let y0 = 0;\n\n function createNewSubpath(x: number, y: number) {\n // More than one M command\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n currentSubpath = [x, y];\n }\n\n function addLine(x0: number, y0: number, x1: number, y1: number) {\n if (!(aroundEqual(x0, x1) && aroundEqual(y0, y1))) {\n currentSubpath.push(x0, y0, x1, y1, x1, y1);\n }\n }\n\n function addArc(startAngle: number, endAngle: number, cx: number, cy: number, rx: number, ry: number) {\n // https://stackoverflow.com/questions/1734745/how-to-create-circle-with-b%C3%A9zier-curves\n const delta = Math.abs(endAngle - startAngle);\n const len = Math.tan(delta / 4) * 4 / 3;\n const dir = endAngle < startAngle ? -1 : 1;\n\n const c1 = Math.cos(startAngle);\n const s1 = Math.sin(startAngle);\n const c2 = Math.cos(endAngle);\n const s2 = Math.sin(endAngle);\n\n const x1 = c1 * rx + cx;\n const y1 = s1 * ry + cy;\n\n const x4 = c2 * rx + cx;\n const y4 = s2 * ry + cy;\n\n const hx = rx * len * dir;\n const hy = ry * len * dir;\n currentSubpath.push(\n // Move control points on tangent.\n x1 - hx * s1, y1 + hy * c1,\n x4 + hx * s2, y4 - hy * c2,\n x4, y4\n );\n }\n\n let x1;\n let y1;\n let x2;\n let y2;\n\n for (let i = 0; i < len;) {\n const cmd = data[i++];\n const isFirst = i === 1;\n\n if (isFirst) {\n // 如果第一个命令是 L, C, Q\n // 则 previous point 同绘制命令的第一个 point\n // 第一个命令为 Arc 的情况下会在后面特殊处理\n xi = data[i];\n yi = data[i + 1];\n\n x0 = xi;\n y0 = yi;\n\n if (cmd === CMD.L || cmd === CMD.C || cmd === CMD.Q) {\n // Start point\n currentSubpath = [x0, y0];\n }\n }\n\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n\n createNewSubpath(x0, y0);\n break;\n case CMD.L:\n x1 = data[i++];\n y1 = data[i++];\n addLine(xi, yi, x1, y1);\n xi = x1;\n yi = y1;\n break;\n case CMD.C:\n currentSubpath.push(\n data[i++], data[i++], data[i++], data[i++],\n xi = data[i++], yi = data[i++]\n );\n break;\n case CMD.Q:\n x1 = data[i++];\n y1 = data[i++];\n x2 = data[i++];\n y2 = data[i++];\n currentSubpath.push(\n // Convert quadratic to cubic\n xi + 2 / 3 * (x1 - xi), yi + 2 / 3 * (y1 - yi),\n x2 + 2 / 3 * (x1 - x2), y2 + 2 / 3 * (y1 - y2),\n x2, y2\n );\n xi = x2;\n yi = y2;\n break;\n case CMD.A:\n const cx = data[i++];\n const cy = data[i++];\n const rx = data[i++];\n const ry = data[i++];\n const startAngle = data[i++];\n const endAngle = data[i++] + startAngle;\n\n // TODO Arc rotation\n i += 1;\n const anticlockwise = !data[i++];\n\n x1 = Math.cos(startAngle) * rx + cx;\n y1 = Math.sin(startAngle) * ry + cy;\n if (isFirst) {\n // 直接使用 arc 命令\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n createNewSubpath(x0, y0);\n }\n else {\n // Connect a line between current point to arc start point.\n addLine(xi, yi, x1, y1);\n }\n\n xi = Math.cos(endAngle) * rx + cx;\n yi = Math.sin(endAngle) * ry + cy;\n\n const step = (anticlockwise ? -1 : 1) * Math.PI / 2;\n\n for (let angle = startAngle; anticlockwise ? angle > endAngle : angle < endAngle; angle += step) {\n const nextAngle = anticlockwise ? Math.max(angle + step, endAngle)\n : Math.min(angle + step, endAngle);\n addArc(angle, nextAngle, cx, cy, rx, ry);\n }\n\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n x1 = x0 + data[i++];\n y1 = y0 + data[i++];\n\n // rect is an individual path.\n createNewSubpath(x1, y0);\n addLine(x1, y0, x1, y1);\n addLine(x1, y1, x0, y1);\n addLine(x0, y1, x0, y0);\n addLine(x0, y0, x1, y0);\n break;\n case CMD.Z:\n currentSubpath && addLine(xi, yi, x0, y0);\n xi = x0;\n yi = y0;\n break;\n }\n }\n\n if (currentSubpath && currentSubpath.length > 2) {\n bezierArrayGroups.push(currentSubpath);\n }\n\n return bezierArrayGroups;\n}\n\nfunction adpativeBezier(\n x0: number, y0: number, x1: number, y1: number, x2: number, y2: number, x3: number, y3: number,\n out: number[], scale: number\n) {\n // This bezier is used to simulates a line when converting path to beziers.\n if (aroundEqual(x0, x1) && aroundEqual(y0, y1) && aroundEqual(x2, x3) && aroundEqual(y2, y3)) {\n out.push(x3, y3);\n return;\n }\n\n const PIXEL_DISTANCE = 2 / scale;\n const PIXEL_DISTANCE_SQR = PIXEL_DISTANCE * PIXEL_DISTANCE;\n\n // Determine if curve is straight enough\n let dx = x3 - x0;\n let dy = y3 - y0;\n const d = Math.sqrt(dx * dx + dy * dy);\n dx /= d;\n dy /= d;\n\n const dx1 = x1 - x0;\n const dy1 = y1 - y0;\n const dx2 = x2 - x3;\n const dy2 = y2 - y3;\n\n const cp1LenSqr = dx1 * dx1 + dy1 * dy1;\n const cp2LenSqr = dx2 * dx2 + dy2 * dy2;\n\n if (cp1LenSqr < PIXEL_DISTANCE_SQR && cp2LenSqr < PIXEL_DISTANCE_SQR) {\n // Add small segment\n out.push(x3, y3);\n return;\n }\n\n // Project length of cp1\n const projLen1 = dx * dx1 + dy * dy1;\n // Project length of cp2\n const projLen2 = -dx * dx2 - dy * dy2;\n\n // Distance from cp1 to start-end line.\n const d1Sqr = cp1LenSqr - projLen1 * projLen1;\n // Distance from cp2 to start-end line.\n const d2Sqr = cp2LenSqr - projLen2 * projLen2;\n\n // IF the cp1 and cp2 is near to the start-line enough\n // We treat it straight enough\n if (d1Sqr < PIXEL_DISTANCE_SQR && projLen1 >= 0\n && d2Sqr < PIXEL_DISTANCE_SQR && projLen2 >= 0\n ) {\n out.push(x3, y3);\n return;\n }\n\n\n const tmpSegX: number[] = [];\n const tmpSegY: number[] = [];\n // Subdivide\n cubicSubdivide(x0, x1, x2, x3, 0.5, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, 0.5, tmpSegY);\n\n adpativeBezier(\n tmpSegX[0], tmpSegY[0], tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], tmpSegX[3], tmpSegY[3],\n out, scale\n );\n adpativeBezier(\n tmpSegX[4], tmpSegY[4], tmpSegX[5], tmpSegY[5], tmpSegX[6], tmpSegY[6], tmpSegX[7], tmpSegY[7],\n out, scale\n );\n}\n\nexport function pathToPolygons(path: PathProxy, scale?: number) {\n // TODO Optimize simple case like path is polygon and rect?\n const bezierArrayGroups = pathToBezierCurves(path);\n\n const polygons: number[][] = [];\n\n scale = scale || 1;\n\n for (let i = 0; i < bezierArrayGroups.length; i++) {\n const beziers = bezierArrayGroups[i];\n const polygon: number[] = [];\n let x0 = beziers[0];\n let y0 = beziers[1];\n\n polygon.push(x0, y0);\n\n for (let k = 2; k < beziers.length;) {\n\n const x1 = beziers[k++];\n const y1 = beziers[k++];\n const x2 = beziers[k++];\n const y2 = beziers[k++];\n const x3 = beziers[k++];\n const y3 = beziers[k++];\n\n adpativeBezier(x0, y0, x1, y1, x2, y2, x3, y3, polygon, scale);\n\n x0 = x3;\n y0 = y3;\n }\n\n polygons.push(polygon);\n }\n return polygons;\n}\n","import { fromPoints } from '../core/bbox';\nimport BoundingRect from '../core/BoundingRect';\nimport Point from '../core/Point';\nimport { map } from '../core/util';\nimport Path from '../graphic/Path';\nimport Polygon from '../graphic/shape/Polygon';\nimport Rect from '../graphic/shape/Rect';\nimport Sector from '../graphic/shape/Sector';\nimport { pathToPolygons } from './convertPath';\nimport { clonePath } from './path';\n\n// Default shape dividers\n// TODO divide polygon by grids.\ninterface BinaryDivide {\n (shape: Path['shape']): Path['shape'][]\n}\n\n/**\n * Calculating a grid to divide the shape.\n */\nfunction getDividingGrids(dimSize: number[], rowDim: number, count: number) {\n const rowSize = dimSize[rowDim];\n const columnSize = dimSize[1 - rowDim];\n\n const ratio = Math.abs(rowSize / columnSize);\n let rowCount = Math.ceil(Math.sqrt(ratio * count));\n let columnCount = Math.floor(count / rowCount);\n if (columnCount === 0) {\n columnCount = 1;\n rowCount = count;\n }\n\n const grids: number[] = [];\n for (let i = 0; i < rowCount; i++) {\n grids.push(columnCount);\n }\n const currentCount = rowCount * columnCount;\n // Distribute the remaind grid evenly on each row.\n const remained = count - currentCount;\n if (remained > 0) {\n // const stride = Math.max(Math.floor(rowCount / remained), 1);\n for (let i = 0; i < remained; i++) {\n grids[i % rowCount] += 1;\n }\n }\n return grids;\n}\n\n\n// TODO cornerRadius\nfunction divideSector(sectorShape: Sector['shape'], count: number, outShapes: Sector['shape'][]) {\n const r0 = sectorShape.r0;\n const r = sectorShape.r;\n const startAngle = sectorShape.startAngle;\n const endAngle = sectorShape.endAngle;\n const angle = Math.abs(endAngle - startAngle);\n const arcLen = angle * r;\n const deltaR = r - r0;\n\n const isAngleRow = arcLen > Math.abs(deltaR);\n const grids = getDividingGrids([arcLen, deltaR], isAngleRow ? 0 : 1, count);\n\n const rowSize = (isAngleRow ? angle : deltaR) / grids.length;\n\n for (let row = 0; row < grids.length; row++) {\n const columnSize = (isAngleRow ? deltaR : angle) / grids[row];\n for (let column = 0; column < grids[row]; column++) {\n const newShape = {} as Sector['shape'];\n\n if (isAngleRow) {\n newShape.startAngle = startAngle + rowSize * row;\n newShape.endAngle = startAngle + rowSize * (row + 1);\n newShape.r0 = r0 + columnSize * column;\n newShape.r = r0 + columnSize * (column + 1);\n }\n else {\n newShape.startAngle = startAngle + columnSize * column;\n newShape.endAngle = startAngle + columnSize * (column + 1);\n newShape.r0 = r0 + rowSize * row;\n newShape.r = r0 + rowSize * (row + 1);\n }\n\n newShape.clockwise = sectorShape.clockwise;\n newShape.cx = sectorShape.cx;\n newShape.cy = sectorShape.cy;\n\n outShapes.push(newShape);\n }\n }\n}\n\nfunction divideRect(rectShape: Rect['shape'], count: number, outShapes: Rect['shape'][]) {\n const width = rectShape.width;\n const height = rectShape.height;\n\n const isHorizontalRow = width > height;\n const grids = getDividingGrids([width, height], isHorizontalRow ? 0 : 1, count);\n const rowSizeDim = isHorizontalRow ? 'width' : 'height';\n const columnSizeDim = isHorizontalRow ? 'height' : 'width';\n const rowDim = isHorizontalRow ? 'x' : 'y';\n const columnDim = isHorizontalRow ? 'y' : 'x';\n const rowSize = rectShape[rowSizeDim] / grids.length;\n\n for (let row = 0; row < grids.length; row++) {\n const columnSize = rectShape[columnSizeDim] / grids[row];\n for (let column = 0; column < grids[row]; column++) {\n const newShape = {} as Rect['shape'];\n newShape[rowDim] = row * rowSize;\n newShape[columnDim] = column * columnSize;\n newShape[rowSizeDim] = rowSize;\n newShape[columnSizeDim] = columnSize;\n\n newShape.x += rectShape.x;\n newShape.y += rectShape.y;\n\n outShapes.push(newShape);\n }\n }\n}\n\nfunction crossProduct2d(x1: number, y1: number, x2: number, y2: number) {\n return x1 * y2 - x2 * y1;\n}\n\nfunction lineLineIntersect(\n a1x: number, a1y: number, a2x: number, a2y: number, // p1\n b1x: number, b1y: number, b2x: number, b2y: number // p2\n): Point {\n const mx = a2x - a1x;\n const my = a2y - a1y;\n const nx = b2x - b1x;\n const ny = b2y - b1y;\n\n const nmCrossProduct = crossProduct2d(nx, ny, mx, my);\n if (Math.abs(nmCrossProduct) < 1e-6) {\n return null;\n }\n\n const b1a1x = a1x - b1x;\n const b1a1y = a1y - b1y;\n\n const p = crossProduct2d(b1a1x, b1a1y, nx, ny) / nmCrossProduct;\n if (p < 0 || p > 1) {\n return null;\n }\n // p2 is an infinite line\n return new Point(\n p * mx + a1x,\n p * my + a1y\n );\n}\n\nfunction projPtOnLine(pt: Point, lineA: Point, lineB: Point): number {\n const dir = new Point();\n Point.sub(dir, lineB, lineA);\n dir.normalize();\n const dir2 = new Point();\n Point.sub(dir2, pt, lineA);\n const len = dir2.dot(dir);\n return len;\n}\n\nfunction addToPoly(poly: number[][], pt: number[]) {\n const last = poly[poly.length - 1];\n if (last && last[0] === pt[0] && last[1] === pt[1]) {\n return;\n }\n poly.push(pt);\n}\n\nfunction splitPolygonByLine(points: number[][], lineA: Point, lineB: Point) {\n const len = points.length;\n const intersections: {\n projPt: number,\n pt: Point\n idx: number\n }[] = [];\n for (let i = 0; i < len; i++) {\n const p0 = points[i];\n const p1 = points[(i + 1) % len];\n const intersectionPt = lineLineIntersect(\n p0[0], p0[1], p1[0], p1[1],\n lineA.x, lineA.y, lineB.x, lineB.y\n );\n if (intersectionPt) {\n intersections.push({\n projPt: projPtOnLine(intersectionPt, lineA, lineB),\n pt: intersectionPt,\n idx: i\n });\n }\n }\n\n // TODO No intersection?\n if (intersections.length < 2) {\n // Do clone\n return [ { points}, {points} ];\n }\n\n // Find two farthest points.\n intersections.sort((a, b) => {\n return a.projPt - b.projPt;\n });\n let splitPt0 = intersections[0];\n let splitPt1 = intersections[intersections.length - 1];\n if (splitPt1.idx < splitPt0.idx) {\n const tmp = splitPt0;\n splitPt0 = splitPt1;\n splitPt1 = tmp;\n }\n\n const splitPt0Arr = [splitPt0.pt.x, splitPt0.pt.y];\n const splitPt1Arr = [splitPt1.pt.x, splitPt1.pt.y];\n\n const newPolyA: number[][] = [splitPt0Arr];\n const newPolyB: number[][] = [splitPt1Arr];\n\n for (let i = splitPt0.idx + 1; i <= splitPt1.idx; i++) {\n addToPoly(newPolyA, points[i].slice());\n }\n addToPoly(newPolyA, splitPt1Arr);\n // Close the path\n addToPoly(newPolyA, splitPt0Arr);\n\n for (let i = splitPt1.idx + 1; i <= splitPt0.idx + len; i++) {\n addToPoly(newPolyB, points[i % len].slice());\n }\n addToPoly(newPolyB, splitPt0Arr);\n // Close the path\n addToPoly(newPolyB, splitPt1Arr);\n\n return [{\n points: newPolyA\n }, {\n points: newPolyB\n }];\n}\n\nfunction binaryDividePolygon(\n polygonShape: Pick\n) {\n const points = polygonShape.points;\n const min: number[] = [];\n const max: number[] = [];\n fromPoints(points, min, max);\n const boundingRect = new BoundingRect(\n min[0], min[1], max[0] - min[0], max[1] - min[1]\n );\n\n const width = boundingRect.width;\n const height = boundingRect.height;\n const x = boundingRect.x;\n const y = boundingRect.y;\n\n const pt0 = new Point();\n const pt1 = new Point();\n if (width > height) {\n pt0.x = pt1.x = x + width / 2;\n pt0.y = y;\n pt1.y = y + height;\n }\n else {\n pt0.y = pt1.y = y + height / 2;\n pt0.x = x;\n pt1.x = x + width;\n }\n return splitPolygonByLine(points, pt0, pt1);\n}\n\n\nfunction binaryDivideRecursive(\n divider: BinaryDivide, shape: T, count: number, out: T[]\n): T[] {\n if (count === 1) {\n out.push(shape);\n }\n else {\n const mid = Math.floor(count / 2);\n const sub = divider(shape);\n binaryDivideRecursive(divider, sub[0], mid, out);\n binaryDivideRecursive(divider, sub[1], count - mid, out);\n }\n\n return out;\n}\n\nexport function clone(path: Path, count: number) {\n const paths = [];\n for (let i = 0; i < count; i++) {\n paths.push(clonePath(path));\n }\n return paths;\n}\n\nfunction copyPathProps(source: Path, target: Path) {\n target.setStyle(source.style);\n target.z = source.z;\n target.z2 = source.z2;\n target.zlevel = source.zlevel;\n}\n\nfunction polygonConvert(points: number[]): number[][] {\n const out = [];\n for (let i = 0; i < points.length;) {\n out.push([points[i++], points[i++]]);\n }\n return out;\n}\n\nexport function split(\n path: Path, count: number\n) {\n const outShapes: Path['shape'][] = [];\n const shape = path.shape;\n let OutShapeCtor: new() => Path;\n // TODO Use clone when shape size is small\n switch (path.type) {\n case 'rect':\n divideRect(shape as Rect['shape'], count, outShapes as Rect['shape'][]);\n OutShapeCtor = Rect;\n break;\n case 'sector':\n divideSector(shape as Sector['shape'], count, outShapes as Sector['shape'][]);\n OutShapeCtor = Sector;\n break;\n case 'circle':\n divideSector({\n r0: 0, r: shape.r, startAngle: 0, endAngle: Math.PI * 2,\n cx: shape.cx, cy: shape.cy\n } as Sector['shape'], count, outShapes as Sector['shape'][]);\n OutShapeCtor = Sector;\n break;\n default:\n const m = path.getComputedTransform();\n const scale = m ? Math.sqrt(Math.max(m[0] * m[0] + m[1] * m[1], m[2] * m[2] + m[3] * m[3])) : 1;\n const polygons = map(\n pathToPolygons(path.getUpdatedPathProxy(), scale),\n poly => polygonConvert(poly)\n );\n const polygonCount = polygons.length;\n if (polygonCount === 0) {\n binaryDivideRecursive(binaryDividePolygon, {\n points: polygons[0]\n }, count, outShapes);\n }\n else if (polygonCount === count) { // In case we only split batched paths to non-batched paths. No need to split.\n for (let i = 0; i < polygonCount; i++) {\n outShapes.push({\n points: polygons[i]\n } as Polygon['shape']);\n }\n }\n else {\n // Most complex case. Assign multiple subpath to each polygon based on it's area.\n let totalArea = 0;\n const items = map(polygons, poly => {\n const min: number[] = [];\n const max: number[] = [];\n fromPoints(poly, min, max);\n // TODO: polygon area?\n const area = (max[1] - min[1]) * (max[0] - min[0]);\n totalArea += area;\n return { poly, area };\n });\n items.sort((a, b) => b.area - a.area);\n\n let left = count;\n for (let i = 0; i < polygonCount; i++) {\n const item = items[i];\n if (left <= 0) {\n break;\n }\n\n const selfCount = i === polygonCount - 1\n ? left // Use the last piece directly\n : Math.ceil(item.area / totalArea * count);\n\n if (selfCount < 0) {\n continue;\n }\n\n binaryDivideRecursive(binaryDividePolygon, {\n points: item.poly\n }, selfCount, outShapes);\n left -= selfCount;\n };\n }\n OutShapeCtor = Polygon;\n break;\n }\n\n if (!OutShapeCtor) {\n // Unkown split algorithm. Use clone instead\n return clone(path, count);\n }\n const out: Path[] = [];\n\n for (let i = 0; i < outShapes.length; i++) {\n const subPath = new OutShapeCtor();\n subPath.setShape(outShapes[i]);\n copyPathProps(path, subPath);\n out.push(subPath);\n }\n\n return out;\n}","import PathProxy from '../core/PathProxy';\nimport { cubicSubdivide } from '../core/curve';\nimport Path from '../graphic/Path';\nimport Element, { ElementAnimateConfig } from '../Element';\nimport { defaults, map } from '../core/util';\nimport { lerp } from '../core/vector';\nimport Group, { GroupLike } from '../graphic/Group';\nimport { clonePath } from './path';\nimport { MatrixArray } from '../core/matrix';\nimport Transformable from '../core/Transformable';\nimport { ZRenderType } from '../zrender';\nimport { split } from './dividePath';\nimport { pathToBezierCurves } from './convertPath';\n\nfunction alignSubpath(subpath1: number[], subpath2: number[]): [number[], number[]] {\n const len1 = subpath1.length;\n const len2 = subpath2.length;\n if (len1 === len2) {\n return [subpath1, subpath2];\n }\n const tmpSegX: number[] = [];\n const tmpSegY: number[] = [];\n\n const shorterPath = len1 < len2 ? subpath1 : subpath2;\n const shorterLen = Math.min(len1, len2);\n // Should divide excatly\n const diff = Math.abs(len2 - len1) / 6;\n const shorterBezierCount = (shorterLen - 2) / 6;\n // Add `diff` number of beziers\n const eachCurveSubDivCount = Math.ceil(diff / shorterBezierCount) + 1;\n\n const newSubpath = [shorterPath[0], shorterPath[1]];\n let remained = diff;\n\n for (let i = 2; i < shorterLen;) {\n let x0 = shorterPath[i - 2];\n let y0 = shorterPath[i - 1];\n let x1 = shorterPath[i++];\n let y1 = shorterPath[i++];\n let x2 = shorterPath[i++];\n let y2 = shorterPath[i++];\n let x3 = shorterPath[i++];\n let y3 = shorterPath[i++];\n\n if (remained <= 0) {\n newSubpath.push(x1, y1, x2, y2, x3, y3);\n continue;\n }\n\n let actualSubDivCount = Math.min(remained, eachCurveSubDivCount - 1) + 1;\n for (let k = 1; k <= actualSubDivCount; k++) {\n const p = k / actualSubDivCount;\n\n cubicSubdivide(x0, x1, x2, x3, p, tmpSegX);\n cubicSubdivide(y0, y1, y2, y3, p, tmpSegY);\n\n // tmpSegX[3] === tmpSegX[4]\n x0 = tmpSegX[3];\n y0 = tmpSegY[3];\n\n newSubpath.push(tmpSegX[1], tmpSegY[1], tmpSegX[2], tmpSegY[2], x0, y0);\n x1 = tmpSegX[5];\n y1 = tmpSegY[5];\n x2 = tmpSegX[6];\n y2 = tmpSegY[6];\n // The last point (x3, y3) is still the same.\n }\n remained -= actualSubDivCount - 1;\n }\n\n return shorterPath === subpath1 ? [newSubpath, subpath2] : [subpath1, newSubpath];\n}\n\nfunction createSubpath(lastSubpathSubpath: number[], otherSubpath: number[]) {\n const len = lastSubpathSubpath.length;\n const lastX = lastSubpathSubpath[len - 2];\n const lastY = lastSubpathSubpath[len - 1];\n\n const newSubpath: number[] = [];\n for (let i = 0; i < otherSubpath.length;) {\n newSubpath[i++] = lastX;\n newSubpath[i++] = lastY;\n }\n return newSubpath;\n}\n\n/**\n * Make two bezier arrays aligns on structure. To have better animation.\n *\n * It will:\n * Make two bezier arrays have same number of subpaths.\n * Make each subpath has equal number of bezier curves.\n *\n * array is the convert result of pathToBezierCurves.\n */\nexport function alignBezierCurves(array1: number[][], array2: number[][]) {\n\n let lastSubpath1;\n let lastSubpath2;\n\n let newArray1 = [];\n let newArray2 = [];\n\n for (let i = 0; i < Math.max(array1.length, array2.length); i++) {\n const subpath1 = array1[i];\n const subpath2 = array2[i];\n\n let newSubpath1;\n let newSubpath2;\n\n if (!subpath1) {\n newSubpath1 = createSubpath(lastSubpath1 || subpath2, subpath2);\n newSubpath2 = subpath2;\n }\n else if (!subpath2) {\n newSubpath2 = createSubpath(lastSubpath2 || subpath1, subpath1);\n newSubpath1 = subpath1;\n }\n else {\n [newSubpath1, newSubpath2] = alignSubpath(subpath1, subpath2);\n lastSubpath1 = newSubpath1;\n lastSubpath2 = newSubpath2;\n }\n\n newArray1.push(newSubpath1);\n newArray2.push(newSubpath2);\n }\n\n return [newArray1, newArray2];\n}\n\ninterface MorphingPath extends Path {\n __morphT: number;\n}\n\nexport interface CombineMorphingPath extends Path {\n childrenRef(): (CombineMorphingPath | Path)[]\n __isCombineMorphing: boolean;\n}\n\nexport function centroid(array: number[]) {\n // https://en.wikipedia.org/wiki/Centroid#Of_a_polygon\n let signedArea = 0;\n let cx = 0;\n let cy = 0;\n const len = array.length;\n // Polygon should been closed.\n for (let i = 0, j = len - 2; i < len; j = i, i += 2) {\n const x0 = array[j];\n const y0 = array[j + 1];\n const x1 = array[i];\n const y1 = array[i + 1];\n const a = x0 * y1 - x1 * y0;\n signedArea += a;\n cx += (x0 + x1) * a;\n cy += (y0 + y1) * a;\n }\n\n if (signedArea === 0) {\n return [array[0] || 0, array[1] || 0];\n }\n\n return [cx / signedArea / 3, cy / signedArea / 3, signedArea];\n}\n\n/**\n * Offset the points to find the nearest morphing distance.\n * Return beziers count needs to be offset.\n */\nfunction findBestRingOffset(\n fromSubBeziers: number[],\n toSubBeziers: number[],\n fromCp: number[],\n toCp: number[]\n) {\n const bezierCount = (fromSubBeziers.length - 2) / 6;\n let bestScore = Infinity;\n let bestOffset = 0;\n\n const len = fromSubBeziers.length;\n const len2 = len - 2;\n for (let offset = 0; offset < bezierCount; offset++) {\n const cursorOffset = offset * 6;\n let score = 0;\n\n for (let k = 0; k < len; k += 2) {\n let idx = k === 0 ? cursorOffset : ((cursorOffset + k - 2) % len2 + 2);\n\n const x0 = fromSubBeziers[idx] - fromCp[0];\n const y0 = fromSubBeziers[idx + 1] - fromCp[1];\n const x1 = toSubBeziers[k] - toCp[0];\n const y1 = toSubBeziers[k + 1] - toCp[1];\n\n const dx = x1 - x0;\n const dy = y1 - y0;\n score += dx * dx + dy * dy;\n }\n if (score < bestScore) {\n bestScore = score;\n bestOffset = offset;\n }\n }\n\n return bestOffset;\n}\n\nfunction reverse(array: number[]) {\n const newArr: number[] = [];\n const len = array.length;\n for (let i = 0; i < len; i += 2) {\n newArr[i] = array[len - i - 2];\n newArr[i + 1] = array[len - i - 1];\n }\n return newArr;\n}\n\ntype MorphingData = {\n from: number[];\n to: number[];\n fromCp: number[];\n toCp: number[];\n rotation: number;\n}[];\n\n/**\n * If we interpolating between two bezier curve arrays.\n * It will have many broken effects during the transition.\n * So we try to apply an extra rotation which can make each bezier curve morph as small as possible.\n */\nfunction findBestMorphingRotation(\n fromArr: number[][],\n toArr: number[][],\n searchAngleIteration: number,\n searchAngleRange: number\n): MorphingData {\n const result = [];\n\n let fromNeedsReverse: boolean;\n\n for (let i = 0; i < fromArr.length; i++) {\n let fromSubpathBezier = fromArr[i];\n const toSubpathBezier = toArr[i];\n\n const fromCp = centroid(fromSubpathBezier);\n const toCp = centroid(toSubpathBezier);\n\n if (fromNeedsReverse == null) {\n // Reverse from array if two have different directions.\n // Determine the clockwise based on the first subpath.\n // Reverse all subpaths or not. Avoid winding rule changed.\n fromNeedsReverse = fromCp[2] < 0 !== toCp[2] < 0;\n }\n\n const newFromSubpathBezier: number[] = [];\n const newToSubpathBezier: number[] = [];\n let bestAngle = 0;\n let bestScore = Infinity;\n let tmpArr: number[] = [];\n\n const len = fromSubpathBezier.length;\n if (fromNeedsReverse) {\n // Make sure clockwise\n fromSubpathBezier = reverse(fromSubpathBezier);\n }\n const offset = findBestRingOffset(fromSubpathBezier, toSubpathBezier, fromCp, toCp) * 6;\n\n const len2 = len - 2;\n for (let k = 0; k < len2; k += 2) {\n // Not include the start point.\n const idx = (offset + k) % len2 + 2;\n newFromSubpathBezier[k + 2] = fromSubpathBezier[idx] - fromCp[0];\n newFromSubpathBezier[k + 3] = fromSubpathBezier[idx + 1] - fromCp[1];\n }\n newFromSubpathBezier[0] = fromSubpathBezier[offset] - fromCp[0];\n newFromSubpathBezier[1] = fromSubpathBezier[offset + 1] - fromCp[1];\n\n if (searchAngleIteration > 0) {\n const step = searchAngleRange / searchAngleIteration;\n for (let angle = -searchAngleRange / 2; angle <= searchAngleRange / 2; angle += step) {\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n let score = 0;\n\n for (let k = 0; k < fromSubpathBezier.length; k += 2) {\n const x0 = newFromSubpathBezier[k];\n const y0 = newFromSubpathBezier[k + 1];\n const x1 = toSubpathBezier[k] - toCp[0];\n const y1 = toSubpathBezier[k + 1] - toCp[1];\n\n // Apply rotation on the target point.\n const newX1 = x1 * ca - y1 * sa;\n const newY1 = x1 * sa + y1 * ca;\n\n tmpArr[k] = newX1;\n tmpArr[k + 1] = newY1;\n\n const dx = newX1 - x0;\n const dy = newY1 - y0;\n\n // Use dot product to have min direction change.\n // const d = Math.sqrt(x0 * x0 + y0 * y0);\n // score += x0 * dx / d + y0 * dy / d;\n score += dx * dx + dy * dy;\n }\n\n if (score < bestScore) {\n bestScore = score;\n bestAngle = angle;\n // Copy.\n for (let m = 0; m < tmpArr.length; m++) {\n newToSubpathBezier[m] = tmpArr[m];\n }\n }\n }\n }\n else {\n for (let i = 0; i < len; i += 2) {\n newToSubpathBezier[i] = toSubpathBezier[i] - toCp[0];\n newToSubpathBezier[i + 1] = toSubpathBezier[i + 1] - toCp[1];\n }\n }\n\n result.push({\n from: newFromSubpathBezier,\n to: newToSubpathBezier,\n fromCp,\n toCp,\n rotation: -bestAngle\n });\n }\n return result;\n}\n\nexport function isCombineMorphing(path: Element): path is CombineMorphingPath {\n return (path as CombineMorphingPath).__isCombineMorphing;\n}\n\nexport function isMorphing(el: Element) {\n return (el as MorphingPath).__morphT >= 0;\n}\n\nconst SAVED_METHOD_PREFIX = '__mOriginal_';\nfunction saveAndModifyMethod(\n obj: T,\n methodName: M,\n modifiers: { replace?: T[M], after?: T[M], before?: T[M] }\n) {\n const savedMethodName = SAVED_METHOD_PREFIX + methodName;\n const originalMethod = (obj as any)[savedMethodName] || obj[methodName];\n if (!(obj as any)[savedMethodName]) {\n (obj as any)[savedMethodName] = obj[methodName];\n }\n const replace = modifiers.replace;\n const after = modifiers.after;\n const before = modifiers.before;\n\n (obj as any)[methodName] = function () {\n const args = arguments;\n let res;\n before && (before as unknown as Function).apply(this, args);\n // Still call the original method if not replacement.\n if (replace) {\n res = (replace as unknown as Function).apply(this, args);\n }\n else {\n res = originalMethod.apply(this, args);\n }\n after && (after as unknown as Function).apply(this, args);\n return res;\n };\n}\nfunction restoreMethod(\n obj: T,\n methodName: keyof T\n) {\n const savedMethodName = SAVED_METHOD_PREFIX + methodName;\n if ((obj as any)[savedMethodName]) {\n obj[methodName] = (obj as any)[savedMethodName];\n (obj as any)[savedMethodName] = null;\n }\n}\n\nfunction applyTransformOnBeziers(bezierCurves: number[][], mm: MatrixArray) {\n for (let i = 0; i < bezierCurves.length; i++) {\n const subBeziers = bezierCurves[i];\n for (let k = 0; k < subBeziers.length;) {\n const x = subBeziers[k];\n const y = subBeziers[k + 1];\n\n subBeziers[k++] = mm[0] * x + mm[2] * y + mm[4];\n subBeziers[k++] = mm[1] * x + mm[3] * y + mm[5];\n }\n }\n}\n\nfunction prepareMorphPath(\n fromPath: Path,\n toPath: Path\n) {\n const fromPathProxy = fromPath.getUpdatedPathProxy();\n const toPathProxy = toPath.getUpdatedPathProxy();\n\n const [fromBezierCurves, toBezierCurves] =\n alignBezierCurves(pathToBezierCurves(fromPathProxy), pathToBezierCurves(toPathProxy));\n\n const fromPathTransform = fromPath.getComputedTransform();\n const toPathTransform = toPath.getComputedTransform();\n function updateIdentityTransform(this: Transformable) {\n this.transform = null;\n }\n fromPathTransform && applyTransformOnBeziers(fromBezierCurves, fromPathTransform);\n toPathTransform && applyTransformOnBeziers(toBezierCurves, toPathTransform);\n // Just ignore transform\n saveAndModifyMethod(toPath, 'updateTransform', { replace: updateIdentityTransform });\n toPath.transform = null;\n\n const morphingData = findBestMorphingRotation(fromBezierCurves, toBezierCurves, 10, Math.PI);\n\n const tmpArr: number[] = [];\n\n saveAndModifyMethod(toPath, 'buildPath', { replace(path: PathProxy) {\n const t = (toPath as MorphingPath).__morphT;\n const onet = 1 - t;\n\n const newCp: number[] = [];\n\n for (let i = 0; i < morphingData.length; i++) {\n const item = morphingData[i];\n const from = item.from;\n const to = item.to;\n const angle = item.rotation * t;\n const fromCp = item.fromCp;\n const toCp = item.toCp;\n const sa = Math.sin(angle);\n const ca = Math.cos(angle);\n\n lerp(newCp, fromCp, toCp, t);\n\n for (let m = 0; m < from.length; m += 2) {\n const x0 = from[m];\n const y0 = from[m + 1];\n const x1 = to[m];\n const y1 = to[m + 1];\n\n const x = x0 * onet + x1 * t;\n const y = y0 * onet + y1 * t;\n\n tmpArr[m] = (x * ca - y * sa) + newCp[0];\n tmpArr[m + 1] = (x * sa + y * ca) + newCp[1];\n }\n\n let x0 = tmpArr[0];\n let y0 = tmpArr[1];\n\n path.moveTo(x0, y0);\n\n for (let m = 2; m < from.length;) {\n const x1 = tmpArr[m++];\n const y1 = tmpArr[m++];\n const x2 = tmpArr[m++];\n const y2 = tmpArr[m++];\n const x3 = tmpArr[m++];\n const y3 = tmpArr[m++];\n\n // Is a line.\n if (x0 === x1 && y0 === y1 && x2 === x3 && y2 === y3) {\n path.lineTo(x3, y3);\n }\n else {\n path.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n x0 = x3;\n y0 = y3;\n }\n }\n } });\n}\n\n/**\n * Morphing from old path to new path.\n */\nexport function morphPath(\n fromPath: Path,\n toPath: Path,\n animationOpts: ElementAnimateConfig\n): Path {\n if (!fromPath || !toPath) {\n return toPath;\n }\n\n const oldDone = animationOpts.done;\n // const oldAborted = animationOpts.aborted;\n const oldDuring = animationOpts.during;\n\n prepareMorphPath(fromPath, toPath);\n\n (toPath as MorphingPath).__morphT = 0;\n\n function restoreToPath() {\n restoreMethod(toPath, 'buildPath');\n restoreMethod(toPath, 'updateTransform');\n // Mark as not in morphing\n (toPath as MorphingPath).__morphT = -1;\n // Cleanup.\n toPath.createPathProxy();\n toPath.dirtyShape();\n }\n\n toPath.animateTo({\n __morphT: 1\n } as any, defaults({\n during(p) {\n toPath.dirtyShape();\n oldDuring && oldDuring(p);\n },\n done() {\n restoreToPath();\n oldDone && oldDone();\n }\n // NOTE: Don't do restore if aborted.\n // Because all status was just set when animation started.\n // aborted() {\n // oldAborted && oldAborted();\n // }\n } as ElementAnimateConfig, animationOpts));\n\n return toPath;\n}\n\n// https://github.com/mapbox/earcut/blob/master/src/earcut.js#L437\n// https://jsfiddle.net/pissang/2jk7x145/\n// function zOrder(x: number, y: number, minX: number, minY: number, maxX: number, maxY: number) {\n// // Normalize coords to 0 - 1\n// // The transformed into non-negative 15-bit integer range\n// x = (maxX === minX) ? 0 : Math.round(32767 * (x - minX) / (maxX - minX));\n// y = (maxY === minY) ? 0 : Math.round(32767 * (y - minY) / (maxY - minY));\n\n// x = (x | (x << 8)) & 0x00FF00FF;\n// x = (x | (x << 4)) & 0x0F0F0F0F;\n// x = (x | (x << 2)) & 0x33333333;\n// x = (x | (x << 1)) & 0x55555555;\n\n// y = (y | (y << 8)) & 0x00FF00FF;\n// y = (y | (y << 4)) & 0x0F0F0F0F;\n// y = (y | (y << 2)) & 0x33333333;\n// y = (y | (y << 1)) & 0x55555555;\n\n// return x | (y << 1);\n// }\n\n// https://github.com/w8r/hilbert/blob/master/hilbert.js#L30\n// https://jsfiddle.net/pissang/xdnbzg6v/\nfunction hilbert(x: number, y: number, minX: number, minY: number, maxX: number, maxY: number) {\n const bits = 16;\n x = (maxX === minX) ? 0 : Math.round(32767 * (x - minX) / (maxX - minX));\n y = (maxY === minY) ? 0 : Math.round(32767 * (y - minY) / (maxY - minY));\n\n let d = 0;\n let tmp: number;\n for (let s = (1 << bits) / 2; s > 0; s /= 2) {\n let rx = 0;\n let ry = 0;\n\n if ((x & s) > 0) {\n rx = 1;\n }\n if ((y & s) > 0) {\n ry = 1;\n }\n\n d += s * s * ((3 * rx) ^ ry);\n\n if (ry === 0) {\n if (rx === 1) {\n x = s - 1 - x;\n y = s - 1 - y;\n }\n tmp = x;\n x = y;\n y = tmp;\n }\n }\n return d;\n}\n\n// Sort paths on hilbert. Not using z-order because it may still have large cross.\n// So the left most source can animate to the left most target, not right most target.\n// Hope in this way. We can make sure each element is animated to the proper target. Not the farthest.\nfunction sortPaths(pathList: Path[]): Path[] {\n let xMin = Infinity;\n let yMin = Infinity;\n let xMax = -Infinity;\n let yMax = -Infinity;\n const cps = map(pathList, path => {\n const rect = path.getBoundingRect();\n const m = path.getComputedTransform();\n const x = rect.x + rect.width / 2 + (m ? m[4] : 0);\n const y = rect.y + rect.height / 2 + (m ? m[5] : 0);\n xMin = Math.min(x, xMin);\n yMin = Math.min(y, yMin);\n xMax = Math.max(x, xMax);\n yMax = Math.max(y, yMax);\n return [x, y];\n });\n\n const items = map(cps, (cp, idx) => {\n return {\n cp,\n z: hilbert(cp[0], cp[1], xMin, yMin, xMax, yMax),\n path: pathList[idx]\n };\n });\n\n return items.sort((a, b) => a.z - b.z).map(item => item.path);\n}\n\nexport interface DividePathParams {\n path: Path,\n count: number\n};\nexport interface DividePath {\n (params: DividePathParams): Path[]\n}\n\nexport interface IndividualDelay {\n (index: number, count: number, fromPath: Path, toPath: Path): number\n}\n\nfunction defaultDividePath(param: DividePathParams) {\n return split(param.path, param.count);\n}\nexport interface CombineConfig extends ElementAnimateConfig {\n /**\n * Transform of returned will be ignored.\n */\n dividePath?: DividePath\n /**\n * delay of each individual.\n * Because individual are sorted on z-order. The index is also sorted top-left / right-down.\n */\n individualDelay?: IndividualDelay\n /**\n * If sort splitted paths so the movement between them can be more natural\n */\n // sort?: boolean\n}\n\nfunction createEmptyReturn() {\n return {\n fromIndividuals: [] as Path[],\n toIndividuals: [] as Path[],\n count: 0\n };\n}\n/**\n * Make combine morphing from many paths to one.\n * Will return a group to replace the original path.\n */\nexport function combineMorph(\n fromList: (CombineMorphingPath | Path)[],\n toPath: Path,\n animationOpts: CombineConfig\n) {\n let fromPathList: Path[] = [];\n\n function addFromPath(fromList: Element[]) {\n for (let i = 0; i < fromList.length; i++) {\n const from = fromList[i];\n if (isCombineMorphing(from)) {\n addFromPath((from as GroupLike).childrenRef());\n }\n else if (from instanceof Path) {\n fromPathList.push(from);\n }\n }\n }\n addFromPath(fromList);\n\n const separateCount = fromPathList.length;\n\n // fromPathList.length is 0.\n if (!separateCount) {\n return createEmptyReturn();\n }\n\n const dividePath = animationOpts.dividePath || defaultDividePath;\n\n let toSubPathList = dividePath({\n path: toPath, count: separateCount\n });\n if (toSubPathList.length !== separateCount) {\n console.error('Invalid morphing: unmatched splitted path');\n return createEmptyReturn();\n }\n\n fromPathList = sortPaths(fromPathList);\n toSubPathList = sortPaths(toSubPathList);\n\n const oldDone = animationOpts.done;\n // const oldAborted = animationOpts.aborted;\n const oldDuring = animationOpts.during;\n const individualDelay = animationOpts.individualDelay;\n\n const identityTransform = new Transformable();\n\n for (let i = 0; i < separateCount; i++) {\n const from = fromPathList[i];\n const to = toSubPathList[i];\n\n to.parent = toPath as unknown as Group;\n\n // Ignore transform in each subpath.\n to.copyTransform(identityTransform);\n\n // Will do morphPath for each individual if individualDelay is set.\n if (!individualDelay) {\n prepareMorphPath(from, to);\n }\n }\n\n (toPath as CombineMorphingPath).__isCombineMorphing = true;\n (toPath as CombineMorphingPath).childrenRef = function () {\n return toSubPathList;\n };\n\n function addToSubPathListToZr(zr: ZRenderType) {\n for (let i = 0; i < toSubPathList.length; i++) {\n toSubPathList[i].addSelfToZr(zr);\n }\n }\n saveAndModifyMethod(toPath, 'addSelfToZr', {\n after(zr) {\n addToSubPathListToZr(zr);\n }\n });\n saveAndModifyMethod(toPath, 'removeSelfFromZr', {\n after(zr) {\n for (let i = 0; i < toSubPathList.length; i++) {\n toSubPathList[i].removeSelfFromZr(zr);\n }\n }\n });\n\n function restoreToPath() {\n (toPath as CombineMorphingPath).__isCombineMorphing = false;\n // Mark as not in morphing\n (toPath as MorphingPath).__morphT = -1;\n (toPath as CombineMorphingPath).childrenRef = null;\n\n restoreMethod(toPath, 'addSelfToZr');\n restoreMethod(toPath, 'removeSelfFromZr');\n }\n\n const toLen = toSubPathList.length;\n\n if (individualDelay) {\n let animating = toLen;\n const eachDone = () => {\n animating--;\n if (animating === 0) {\n restoreToPath();\n oldDone && oldDone();\n }\n };\n // Animate each element individually.\n for (let i = 0; i < toLen; i++) {\n // TODO only call during once?\n const indivdualAnimationOpts = individualDelay ? defaults({\n delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toSubPathList[i]),\n done: eachDone\n } as ElementAnimateConfig, animationOpts) : animationOpts;\n morphPath(fromPathList[i], toSubPathList[i], indivdualAnimationOpts);\n }\n }\n else {\n (toPath as MorphingPath).__morphT = 0;\n toPath.animateTo({\n __morphT: 1\n } as any, defaults({\n during(p) {\n for (let i = 0; i < toLen; i++) {\n const child = toSubPathList[i] as MorphingPath;\n child.__morphT = (toPath as MorphingPath).__morphT;\n child.dirtyShape();\n }\n oldDuring && oldDuring(p);\n },\n done() {\n restoreToPath();\n for (let i = 0; i < fromList.length; i++) {\n restoreMethod(fromList[i], 'updateTransform');\n }\n oldDone && oldDone();\n }\n } as ElementAnimateConfig, animationOpts));\n }\n\n if (toPath.__zr) {\n addToSubPathListToZr(toPath.__zr);\n }\n\n return {\n fromIndividuals: fromPathList,\n toIndividuals: toSubPathList,\n count: toLen\n };\n}\nexport interface SeparateConfig extends ElementAnimateConfig {\n dividePath?: DividePath\n individualDelay?: IndividualDelay\n /**\n * If sort splitted paths so the movement between them can be more natural\n */\n // sort?: boolean\n // // If the from path of separate animation is doing combine animation.\n // // And the paths number is not same with toPathList. We need to do enter/leave animation\n // // on the missing/spare paths.\n // enter?: (el: Path) => void\n // leave?: (el: Path) => void\n}\n\n/**\n * Make separate morphing from one path to many paths.\n * Make the MorphingKind of `toPath` become `'ONE_ONE'`.\n */\nexport function separateMorph(\n fromPath: Path,\n toPathList: Path[],\n animationOpts: SeparateConfig\n) {\n const toLen = toPathList.length;\n let fromPathList: Path[] = [];\n\n const dividePath = animationOpts.dividePath || defaultDividePath;\n\n function addFromPath(fromList: Element[]) {\n for (let i = 0; i < fromList.length; i++) {\n const from = fromList[i];\n if (isCombineMorphing(from)) {\n addFromPath((from as GroupLike).childrenRef());\n }\n else if (from instanceof Path) {\n fromPathList.push(from);\n }\n }\n }\n // This case most happen when a combining path is called to reverse the animation\n // to its original separated state.\n if (isCombineMorphing(fromPath)) {\n addFromPath(fromPath.childrenRef());\n\n const fromLen = fromPathList.length;\n if (fromLen < toLen) {\n let k = 0;\n for (let i = fromLen; i < toLen; i++) {\n // Create a clone\n fromPathList.push(clonePath(fromPathList[k++ % fromLen]));\n }\n }\n // Else simply remove if fromLen > toLen\n fromPathList.length = toLen;\n }\n else {\n fromPathList = dividePath({ path: fromPath, count: toLen });\n const fromPathTransform = fromPath.getComputedTransform();\n for (let i = 0; i < fromPathList.length; i++) {\n // Force use transform of source path.\n fromPathList[i].setLocalTransform(fromPathTransform);\n }\n if (fromPathList.length !== toLen) {\n console.error('Invalid morphing: unmatched splitted path');\n return createEmptyReturn();\n }\n }\n\n fromPathList = sortPaths(fromPathList);\n toPathList = sortPaths(toPathList);\n\n const individualDelay = animationOpts.individualDelay;\n for (let i = 0; i < toLen; i++) {\n const indivdualAnimationOpts = individualDelay ? defaults({\n delay: (animationOpts.delay || 0) + individualDelay(i, toLen, fromPathList[i], toPathList[i])\n } as ElementAnimateConfig, animationOpts) : animationOpts;\n morphPath(fromPathList[i], toPathList[i], indivdualAnimationOpts);\n }\n\n return {\n fromIndividuals: fromPathList,\n toIndividuals: toPathList,\n count: toPathList.length\n };\n}\n\nexport { split as defaultDividePath };\n","// CompoundPath to improve performance\n\nimport Path from './Path';\nimport PathProxy from '../core/PathProxy';\n\nexport interface CompoundPathShape {\n paths: Path[]\n}\n\nexport default class CompoundPath extends Path {\n\n type = 'compound'\n\n shape: CompoundPathShape\n\n private _updatePathDirty() {\n const paths = this.shape.paths;\n let dirtyPath = this.shapeChanged();\n for (let i = 0; i < paths.length; i++) {\n // Mark as dirty if any subpath is dirty\n dirtyPath = dirtyPath || paths[i].shapeChanged();\n }\n if (dirtyPath) {\n this.dirtyShape();\n }\n }\n\n beforeBrush() {\n this._updatePathDirty();\n const paths = this.shape.paths || [];\n const scale = this.getGlobalScale();\n // Update path scale\n for (let i = 0; i < paths.length; i++) {\n if (!paths[i].path) {\n paths[i].createPathProxy();\n }\n paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);\n }\n }\n\n buildPath(ctx: PathProxy | CanvasRenderingContext2D, shape: CompoundPathShape) {\n const paths = shape.paths || [];\n for (let i = 0; i < paths.length; i++) {\n paths[i].buildPath(ctx, paths[i].shape, true);\n }\n }\n\n afterBrush() {\n const paths = this.shape.paths || [];\n for (let i = 0; i < paths.length; i++) {\n paths[i].pathUpdated();\n }\n }\n\n getBoundingRect() {\n this._updatePathDirty.call(this);\n return Path.prototype.getBoundingRect.call(this);\n }\n}","/**\n * Displayable for incremental rendering. It will be rendered in a separate layer\n * IncrementalDisplay have two main methods. `clearDisplayables` and `addDisplayables`\n * addDisplayables will render the added displayables incremetally.\n *\n * It use a notClear flag to tell the painter don't clear the layer if it's the first element.\n *\n * It's not available for SVG rendering.\n */\nimport Displayble from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport { MatrixArray } from '../core/matrix';\nimport Group from './Group';\n\nconst m: MatrixArray = [];\n// TODO Style override ?\n\nexport default class IncrementalDisplayable extends Displayble {\n\n notClear: boolean = true\n\n incremental = true\n\n private _displayables: Displayble[] = []\n private _temporaryDisplayables: Displayble[] = []\n\n private _cursor = 0\n\n traverse(\n cb: (this: T, el: this) => void,\n context: T\n ) {\n cb.call(context, this);\n }\n\n useStyle() {\n // Use an empty style\n // PENDING\n this.style = {};\n }\n // getCurrentCursor / updateCursorAfterBrush\n // is used in graphic.ts. It's not provided for developers\n getCursor() {\n return this._cursor;\n }\n // Update cursor after brush.\n innerAfterBrush() {\n this._cursor = this._displayables.length;\n }\n\n clearDisplaybles() {\n this._displayables = [];\n this._temporaryDisplayables = [];\n this._cursor = 0;\n this.markRedraw();\n\n this.notClear = false;\n }\n\n clearTemporalDisplayables() {\n this._temporaryDisplayables = [];\n }\n\n addDisplayable(displayable: Displayble, notPersistent?: boolean) {\n if (notPersistent) {\n this._temporaryDisplayables.push(displayable);\n }\n else {\n this._displayables.push(displayable);\n }\n this.markRedraw();\n }\n\n addDisplayables(displayables: Displayble[], notPersistent?: boolean) {\n notPersistent = notPersistent || false;\n for (let i = 0; i < displayables.length; i++) {\n this.addDisplayable(displayables[i], notPersistent);\n }\n }\n\n getDisplayables(): Displayble[] {\n return this._displayables;\n }\n\n getTemporalDisplayables(): Displayble[] {\n return this._temporaryDisplayables;\n }\n\n eachPendingDisplayable(cb: (displayable: Displayble) => void) {\n for (let i = this._cursor; i < this._displayables.length; i++) {\n cb && cb(this._displayables[i]);\n }\n for (let i = 0; i < this._temporaryDisplayables.length; i++) {\n cb && cb(this._temporaryDisplayables[i]);\n }\n }\n\n update() {\n this.updateTransform();\n for (let i = this._cursor; i < this._displayables.length; i++) {\n const displayable = this._displayables[i];\n // PENDING\n displayable.parent = this as unknown as Group;\n displayable.update();\n displayable.parent = null;\n }\n for (let i = 0; i < this._temporaryDisplayables.length; i++) {\n const displayable = this._temporaryDisplayables[i];\n // PENDING\n displayable.parent = this as unknown as Group;\n displayable.update();\n displayable.parent = null;\n }\n }\n\n getBoundingRect() {\n if (!this._rect) {\n const rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\n for (let i = 0; i < this._displayables.length; i++) {\n const displayable = this._displayables[i];\n const childRect = displayable.getBoundingRect().clone();\n if (displayable.needLocalTransform()) {\n childRect.applyTransform(displayable.getLocalTransform(m));\n }\n rect.union(childRect);\n }\n this._rect = rect;\n }\n return this._rect;\n }\n\n contain(x: number, y: number): boolean {\n const localPos = this.transformCoordToLocal(x, y);\n const rect = this.getBoundingRect();\n\n if (rect.contain(localPos[0], localPos[1])) {\n for (let i = 0; i < this._displayables.length; i++) {\n const displayable = this._displayables[i];\n if (displayable.contain(x, y)) {\n return true;\n }\n }\n }\n return false;\n }\n\n}","\nimport LRU from '../../core/LRU';\nimport { ImageLike } from '../../core/types';\n\nconst globalImageCache = new LRU(50);\n\ntype PendingWrap = {\n hostEl: {dirty: () => void}\n cb: (image: ImageLike, payload: any) => void\n cbPayload: any\n}\n\ntype CachedImageObj = {\n image: ImageLike\n pending: PendingWrap[]\n}\n\nexport function findExistImage(newImageOrSrc: string | ImageLike): ImageLike {\n if (typeof newImageOrSrc === 'string') {\n const cachedImgObj = globalImageCache.get(newImageOrSrc);\n return cachedImgObj && cachedImgObj.image;\n }\n else {\n return newImageOrSrc;\n }\n}\n\n/**\n * Caution: User should cache loaded images, but not just count on LRU.\n * Consider if required images more than LRU size, will dead loop occur?\n *\n * @param newImageOrSrc\n * @param image Existent image.\n * @param hostEl For calling `dirty`.\n * @param onload params: (image, cbPayload)\n * @param cbPayload Payload on cb calling.\n * @return image\n */\nexport function createOrUpdateImage(\n newImageOrSrc: string | ImageLike,\n image: ImageLike,\n hostEl: { dirty: () => void },\n onload?: (image: ImageLike, payload: T) => void,\n cbPayload?: T\n) {\n if (!newImageOrSrc) {\n return image;\n }\n else if (typeof newImageOrSrc === 'string') {\n\n // Image should not be loaded repeatly.\n if ((image && (image as any).__zrImageSrc === newImageOrSrc) || !hostEl) {\n return image;\n }\n\n // Only when there is no existent image or existent image src\n // is different, this method is responsible for load.\n const cachedImgObj = globalImageCache.get(newImageOrSrc);\n\n const pendingWrap = {hostEl: hostEl, cb: onload, cbPayload: cbPayload};\n\n if (cachedImgObj) {\n image = cachedImgObj.image;\n !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\n }\n else {\n image = new Image();\n image.onload = image.onerror = imageOnLoad;\n\n globalImageCache.put(\n newImageOrSrc,\n (image as any).__cachedImgObj = {\n image: image,\n pending: [pendingWrap]\n }\n );\n\n image.src = (image as any).__zrImageSrc = newImageOrSrc;\n }\n\n return image;\n }\n // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas\n else {\n return newImageOrSrc;\n }\n}\n\nfunction imageOnLoad(this: any) {\n const cachedImgObj = this.__cachedImgObj;\n this.onload = this.onerror = this.__cachedImgObj = null;\n\n for (let i = 0; i < cachedImgObj.pending.length; i++) {\n const pendingWrap = cachedImgObj.pending[i];\n const cb = pendingWrap.cb;\n cb && cb(this, pendingWrap.cbPayload);\n pendingWrap.hostEl.dirty();\n }\n cachedImgObj.pending.length = 0;\n}\n\nexport function isImageReady(image: ImageLike) {\n return image && image.width && image.height;\n}\n\n","import * as imageHelper from '../helper/image';\nimport {\n extend,\n retrieve2,\n retrieve3,\n reduce\n} from '../../core/util';\nimport { TextAlign, TextVerticalAlign, ImageLike, Dictionary } from '../../core/types';\nimport { TextStyleProps } from '../Text';\nimport { getLineHeight, getWidth, parsePercent } from '../../contain/text';\n\nconst STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\n\ninterface InnerTruncateOption {\n maxIteration?: number\n // If truncate result are less than minChar, ellipsis will not show\n // which is better for user hint in some cases\n minChar?: number\n // When all truncated, use the placeholder\n placeholder?: string\n\n maxIterations?: number\n}\n\ninterface InnerPreparedTruncateOption extends Required {\n font: string\n\n ellipsis: string\n ellipsisWidth: number\n contentWidth: number\n\n containerWidth: number\n cnCharWidth: number\n ascCharWidth: number\n}\n\n/**\n * Show ellipsis if overflow.\n */\nexport function truncateText(\n text: string,\n containerWidth: number,\n font: string,\n ellipsis: string,\n options: InnerTruncateOption\n): string {\n if (!containerWidth) {\n return '';\n }\n\n const textLines = (text + '').split('\\n');\n options = prepareTruncateOptions(containerWidth, font, ellipsis, options);\n\n // FIXME\n // It is not appropriate that every line has '...' when truncate multiple lines.\n for (let i = 0, len = textLines.length; i < len; i++) {\n textLines[i] = truncateSingleLine(textLines[i], options as InnerPreparedTruncateOption);\n }\n\n return textLines.join('\\n');\n}\n\nfunction prepareTruncateOptions(\n containerWidth: number,\n font: string,\n ellipsis: string,\n options: InnerTruncateOption\n): InnerPreparedTruncateOption {\n options = options || {};\n let preparedOpts = extend({}, options) as InnerPreparedTruncateOption;\n\n preparedOpts.font = font;\n ellipsis = retrieve2(ellipsis, '...');\n preparedOpts.maxIterations = retrieve2(options.maxIterations, 2);\n const minChar = preparedOpts.minChar = retrieve2(options.minChar, 0);\n // FIXME\n // Other languages?\n preparedOpts.cnCharWidth = getWidth('国', font);\n // FIXME\n // Consider proportional font?\n const ascCharWidth = preparedOpts.ascCharWidth = getWidth('a', font);\n preparedOpts.placeholder = retrieve2(options.placeholder, '');\n\n // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.\n // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.\n let contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n for (let i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n contentWidth -= ascCharWidth;\n }\n\n let ellipsisWidth = getWidth(ellipsis, font);\n if (ellipsisWidth > contentWidth) {\n ellipsis = '';\n ellipsisWidth = 0;\n }\n\n contentWidth = containerWidth - ellipsisWidth;\n\n preparedOpts.ellipsis = ellipsis;\n preparedOpts.ellipsisWidth = ellipsisWidth;\n preparedOpts.contentWidth = contentWidth;\n preparedOpts.containerWidth = containerWidth;\n\n return preparedOpts;\n}\n\nfunction truncateSingleLine(textLine: string, options: InnerPreparedTruncateOption): string {\n const containerWidth = options.containerWidth;\n const font = options.font;\n const contentWidth = options.contentWidth;\n\n if (!containerWidth) {\n return '';\n }\n\n let lineWidth = getWidth(textLine, font);\n\n if (lineWidth <= containerWidth) {\n return textLine;\n }\n\n for (let j = 0; ; j++) {\n if (lineWidth <= contentWidth || j >= options.maxIterations) {\n textLine += options.ellipsis;\n break;\n }\n\n const subLength = j === 0\n ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth)\n : lineWidth > 0\n ? Math.floor(textLine.length * contentWidth / lineWidth)\n : 0;\n\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(\n text: string, contentWidth: number, ascCharWidth: number, cnCharWidth: number\n): number {\n let width = 0;\n let i = 0;\n for (let len = text.length; i < len && width < contentWidth; i++) {\n const charCode = text.charCodeAt(i);\n width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth;\n }\n return i;\n}\n\nexport interface PlainTextContentBlock {\n lineHeight: number\n contentHeight: number\n // Line height of actual content.\n calculatedLineHeight: number\n\n height: number\n outerHeight: number\n\n width: number\n\n lines: string[]\n}\n\nexport function parsePlainText(\n text: string,\n style?: TextStyleProps\n): PlainTextContentBlock {\n text != null && (text += '');\n\n // textPadding has been normalized\n const overflow = style.overflow;\n const padding = style.padding as number[];\n const font = style.font;\n const truncate = overflow === 'truncate';\n const calculatedLineHeight = getLineHeight(font);\n const lineHeight = retrieve2(style.lineHeight, calculatedLineHeight);\n\n const truncateLineOverflow = style.lineOverflow === 'truncate';\n\n let width = style.width;\n let lines: string[];\n\n if (width != null && overflow === 'break' || overflow === 'breakAll') {\n lines = text ? wrapText(text, style.font, width, overflow === 'breakAll', 0).lines : [];\n }\n else {\n lines = text ? text.split('\\n') : [];\n }\n\n const contentHeight = lines.length * lineHeight;\n const height = retrieve2(style.height, contentHeight);\n\n // Truncate lines.\n if (contentHeight > height && truncateLineOverflow) {\n const lineCount = Math.floor(height / lineHeight);\n\n lines = lines.slice(0, lineCount);\n\n // TODO If show ellipse for line truncate\n // if (style.ellipsis) {\n // const options = prepareTruncateOptions(width, font, style.ellipsis, {\n // minChar: style.truncateMinChar,\n // placeholder: style.placeholder\n // });\n // lines[lineCount - 1] = truncateSingleLine(lastLine, options);\n // }\n }\n\n let outerHeight = height;\n let outerWidth = width;\n if (padding) {\n outerHeight += padding[0] + padding[2];\n if (outerWidth != null) {\n outerWidth += padding[1] + padding[3];\n }\n }\n\n\n if (text && truncate && outerWidth != null) {\n const options = prepareTruncateOptions(width, font, style.ellipsis, {\n minChar: style.truncateMinChar,\n placeholder: style.placeholder\n });\n // Having every line has '...' when truncate multiple lines.\n for (let i = 0; i < lines.length; i++) {\n lines[i] = truncateSingleLine(lines[i], options);\n }\n }\n\n if (width == null) {\n let maxWidth = 0;\n // Calculate width\n for (let i = 0; i < lines.length; i++) {\n maxWidth = Math.max(getWidth(lines[i], font), maxWidth);\n }\n width = maxWidth;\n }\n\n return {\n lines: lines,\n height: height,\n outerHeight: outerHeight,\n lineHeight: lineHeight,\n calculatedLineHeight: calculatedLineHeight,\n contentHeight: contentHeight,\n width: width\n };\n}\n\nclass RichTextToken {\n styleName: string\n text: string\n width: number\n height: number\n\n // Inner height exclude padding\n innerHeight: number\n\n // Width and height of actual text content.\n contentHeight: number\n contentWidth: number\n\n lineHeight: number\n font: string\n align: TextAlign\n verticalAlign: TextVerticalAlign\n\n textPadding: number[]\n percentWidth?: string\n\n isLineHolder: boolean\n}\nclass RichTextLine {\n lineHeight: number\n width: number\n tokens: RichTextToken[] = []\n\n constructor(tokens?: RichTextToken[]) {\n if (tokens) {\n this.tokens = tokens;\n }\n }\n}\nexport class RichTextContentBlock {\n // width/height of content\n width: number = 0\n height: number = 0\n // Calculated text height\n contentWidth: number = 0\n contentHeight: number = 0\n // outerWidth/outerHeight with padding\n outerWidth: number = 0\n outerHeight: number = 0\n lines: RichTextLine[] = []\n}\n\ntype WrapInfo = {\n width: number,\n accumWidth: number,\n breakAll: boolean\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 * If styleName is undefined, it is plain text.\n */\nexport function parseRichText(text: string, style: TextStyleProps) {\n const contentBlock = new RichTextContentBlock();\n\n text != null && (text += '');\n if (!text) {\n return contentBlock;\n }\n\n const topWidth = style.width;\n const topHeight = style.height;\n const overflow = style.overflow;\n let wrapInfo: WrapInfo = (overflow === 'break' || overflow === 'breakAll') && topWidth != null\n ? {width: topWidth, accumWidth: 0, breakAll: overflow === 'breakAll'}\n : null;\n\n let lastIndex = STYLE_REG.lastIndex = 0;\n let result;\n while ((result = STYLE_REG.exec(text)) != null) {\n const matchedIndex = result.index;\n if (matchedIndex > lastIndex) {\n pushTokens(contentBlock, text.substring(lastIndex, matchedIndex), style, wrapInfo);\n }\n pushTokens(contentBlock, result[2], style, wrapInfo, result[1]);\n lastIndex = STYLE_REG.lastIndex;\n }\n\n if (lastIndex < text.length) {\n pushTokens(contentBlock, text.substring(lastIndex, text.length), style, wrapInfo);\n }\n\n // For `textWidth: xx%`\n let pendingList = [];\n\n let calculatedHeight = 0;\n let calculatedWidth = 0;\n\n const stlPadding = style.padding as number[];\n\n const truncate = overflow === 'truncate';\n const truncateLine = style.lineOverflow === 'truncate';\n\n // let prevToken: RichTextToken;\n\n function finishLine(line: RichTextLine, lineWidth: number, lineHeight: number) {\n line.width = lineWidth;\n line.lineHeight = lineHeight;\n calculatedHeight += lineHeight;\n calculatedWidth = Math.max(calculatedWidth, lineWidth);\n }\n // Calculate layout info of tokens.\n outer: for (let i = 0; i < contentBlock.lines.length; i++) {\n const line = contentBlock.lines[i];\n let lineHeight = 0;\n let lineWidth = 0;\n\n for (let j = 0; j < line.tokens.length; j++) {\n const token = line.tokens[j];\n const tokenStyle = token.styleName && style.rich[token.styleName] || {};\n // textPadding should not inherit from style.\n const textPadding = token.textPadding = tokenStyle.padding as number[];\n const paddingH = textPadding ? textPadding[1] + textPadding[3] : 0;\n\n const font = token.font = tokenStyle.font || style.font;\n\n token.contentHeight = getLineHeight(font);\n // textHeight can be used when textVerticalAlign is specified in token.\n let tokenHeight = retrieve2(\n // textHeight should not be inherited, consider it can be specified\n // as box height of the block.\n tokenStyle.height, token.contentHeight\n );\n token.innerHeight = tokenHeight;\n\n textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n token.height = tokenHeight;\n // Inlcude padding in lineHeight.\n token.lineHeight = retrieve3(\n tokenStyle.lineHeight, style.lineHeight, tokenHeight\n );\n\n token.align = tokenStyle && tokenStyle.align || style.align;\n token.verticalAlign = tokenStyle && tokenStyle.verticalAlign || 'middle';\n\n if (truncateLine && topHeight != null && calculatedHeight + token.lineHeight > topHeight) {\n // TODO Add ellipsis on the previous token.\n // prevToken.text =\n if (j > 0) {\n line.tokens = line.tokens.slice(0, j);\n finishLine(line, lineWidth, lineHeight);\n contentBlock.lines = contentBlock.lines.slice(0, i + 1);\n }\n else {\n contentBlock.lines = contentBlock.lines.slice(0, i);\n }\n break outer;\n }\n\n let styleTokenWidth = tokenStyle.width;\n let tokenWidthNotSpecified = styleTokenWidth == null || styleTokenWidth === 'auto';\n\n // Percent width, can be `100%`, can be used in drawing separate\n // line when box width is needed to be auto.\n if (typeof styleTokenWidth === 'string' && styleTokenWidth.charAt(styleTokenWidth.length - 1) === '%') {\n token.percentWidth = styleTokenWidth;\n pendingList.push(token);\n\n token.contentWidth = getWidth(token.text, font);\n // Do not truncate in this case, because there is no user case\n // and it is too complicated.\n }\n else {\n if (tokenWidthNotSpecified) {\n // FIXME: If image is not loaded and textWidth is not specified, calling\n // `getBoundingRect()` will not get correct result.\n const textBackgroundColor = tokenStyle.backgroundColor;\n let bgImg = textBackgroundColor && (textBackgroundColor as { image: ImageLike }).image;\n\n if (bgImg) {\n bgImg = imageHelper.findExistImage(bgImg);\n if (imageHelper.isImageReady(bgImg)) {\n // Update token width from image size.\n token.width = Math.max(token.width, bgImg.width * tokenHeight / bgImg.height);\n }\n }\n }\n\n const remainTruncWidth = truncate && topWidth != null\n ? topWidth - lineWidth : null;\n\n if (remainTruncWidth != null && remainTruncWidth < token.width) {\n if (!tokenWidthNotSpecified || remainTruncWidth < paddingH) {\n token.text = '';\n token.width = token.contentWidth = 0;\n }\n else {\n token.text = truncateText(\n token.text, remainTruncWidth - paddingH, font, style.ellipsis,\n {minChar: style.truncateMinChar}\n );\n token.width = token.contentWidth = getWidth(token.text, font);\n }\n }\n else {\n token.contentWidth = getWidth(token.text, font);\n }\n }\n\n token.width += paddingH;\n\n lineWidth += token.width;\n tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n\n // prevToken = token;\n }\n\n finishLine(line, lineWidth, lineHeight);\n }\n\n contentBlock.outerWidth = contentBlock.width = retrieve2(topWidth, calculatedWidth);\n contentBlock.outerHeight = contentBlock.height = retrieve2(topHeight, calculatedHeight);\n contentBlock.contentHeight = calculatedHeight;\n contentBlock.contentWidth = calculatedWidth;\n\n if (stlPadding) {\n contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n }\n\n for (let i = 0; i < pendingList.length; i++) {\n const token = pendingList[i];\n const percentWidth = token.percentWidth;\n // Should not base on outerWidth, because token can not be placed out of padding.\n token.width = parseInt(percentWidth, 10) / 100 * contentBlock.width;\n }\n\n return contentBlock;\n}\n\ntype TokenStyle = TextStyleProps['rich'][string];\n\nfunction pushTokens(\n block: RichTextContentBlock,\n str: string,\n style: TextStyleProps,\n wrapInfo: WrapInfo,\n styleName?: string\n) {\n const isEmptyStr = str === '';\n const tokenStyle: TokenStyle = styleName && style.rich[styleName] || {};\n const lines = block.lines;\n const font = tokenStyle.font || style.font;\n let newLine = false;\n let strLines;\n let linesWidths;\n\n if (wrapInfo) {\n const tokenPadding = tokenStyle.padding as number[];\n let tokenPaddingH = tokenPadding ? tokenPadding[1] + tokenPadding[3] : 0;\n if (tokenStyle.width != null && tokenStyle.width !== 'auto') {\n // Wrap the whole token if tokenWidth if fixed.\n const outerWidth = parsePercent(tokenStyle.width, wrapInfo.width) + tokenPaddingH;\n if (lines.length > 0) { // Not first line\n if (outerWidth + wrapInfo.accumWidth > wrapInfo.width) {\n // TODO Support wrap text in token.\n strLines = str.split('\\n');\n newLine = true;\n }\n }\n\n wrapInfo.accumWidth = outerWidth;\n }\n else {\n const res = wrapText(str, font, wrapInfo.width, wrapInfo.breakAll, wrapInfo.accumWidth);\n wrapInfo.accumWidth = res.accumWidth + tokenPaddingH;\n linesWidths = res.linesWidths;\n strLines = res.lines;\n }\n }\n else {\n strLines = str.split('\\n');\n }\n\n for (let i = 0; i < strLines.length; i++) {\n const text = strLines[i];\n const token = new RichTextToken();\n token.styleName = styleName;\n token.text = text;\n token.isLineHolder = !text && !isEmptyStr;\n\n if (typeof tokenStyle.width === 'number') {\n token.width = tokenStyle.width;\n }\n else {\n token.width = linesWidths\n ? linesWidths[i] // Caculated width in the wrap\n : getWidth(text, font);\n }\n\n // The first token should be appended to the last line if not new line.\n if (!i && !newLine) {\n const tokens = (lines[lines.length - 1] || (lines[0] = new RichTextLine())).tokens;\n\n // 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 const tokensLen = tokens.length;\n (tokensLen === 1 && tokens[0].isLineHolder)\n ? (tokens[0] = token)\n // 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 }\n // Other tokens always start a new line.\n else {\n // If there is '', insert it as a placeholder.\n lines.push(new RichTextLine([token]));\n }\n }\n}\n\n\nfunction isLatin(ch: string) {\n let code = ch.charCodeAt(0);\n return code >= 0x21 && code <= 0xFF;\n}\n\nconst breakCharMap = reduce(',&?/;] '.split(''), function (obj, ch) {\n obj[ch] = true;\n return obj;\n}, {} as Dictionary);\n/**\n * If break by word. For latin languages.\n */\nfunction isWordBreakChar(ch: string) {\n if (isLatin(ch)) {\n if (breakCharMap[ch]) {\n return true;\n }\n return false;\n }\n return true;\n}\n\nfunction wrapText(\n text: string,\n font: string,\n lineWidth: number,\n isBreakAll: boolean,\n lastAccumWidth: number\n) {\n let lines: string[] = [];\n let linesWidths: number[] = [];\n let line = '';\n let currentWord = '';\n let currentWordWidth = 0;\n let accumWidth = 0;\n\n for (let i = 0; i < text.length; i++) {\n\n const ch = text.charAt(i);\n if (ch === '\\n') {\n if (currentWord) {\n line += currentWord;\n accumWidth += currentWordWidth;\n }\n lines.push(line);\n linesWidths.push(accumWidth);\n // Reset\n line = '';\n currentWord = '';\n currentWordWidth = 0;\n accumWidth = 0;\n continue;\n }\n\n const chWidth = getWidth(ch, font);\n const inWord = isBreakAll ? false : !isWordBreakChar(ch);\n\n if (!lines.length\n ? lastAccumWidth + accumWidth + chWidth > lineWidth\n : accumWidth + chWidth > lineWidth\n ) {\n if (!accumWidth) { // If nothing appended yet.\n if (inWord) {\n // The word length is still too long for one line\n // Force break the word\n lines.push(currentWord);\n linesWidths.push(currentWordWidth);\n\n currentWord = ch;\n currentWordWidth = chWidth;\n }\n else {\n // lineWidth is too small for ch\n lines.push(ch);\n linesWidths.push(chWidth);\n }\n }\n else if (line || currentWord) {\n if (inWord) {\n if (!line) {\n // The one word is still too long for one line\n // Force break the word\n // TODO Keep the word?\n line = currentWord;\n currentWord = '';\n currentWordWidth = 0;\n accumWidth = currentWordWidth;\n }\n\n lines.push(line);\n linesWidths.push(accumWidth - currentWordWidth);\n\n // Break the whole word\n currentWord += ch;\n currentWordWidth += chWidth;\n line = '';\n accumWidth = currentWordWidth;\n }\n else {\n // Append lastWord if have\n if (currentWord) {\n line += currentWord;\n accumWidth += currentWordWidth;\n currentWord = '';\n currentWordWidth = 0;\n }\n lines.push(line);\n linesWidths.push(accumWidth);\n\n line = ch;\n accumWidth = chWidth;\n }\n }\n\n continue;\n }\n\n accumWidth += chWidth;\n\n if (inWord) {\n currentWord += ch;\n currentWordWidth += chWidth;\n }\n else {\n // Append whole word\n if (currentWord) {\n line += currentWord;\n // Reset\n currentWord = '';\n currentWordWidth = 0;\n }\n\n // Append character\n line += ch;\n }\n }\n\n if (!lines.length && !line) {\n line = text;\n currentWord = '';\n currentWordWidth = 0;\n }\n\n // Append last line.\n if (currentWord) {\n line += currentWord;\n }\n if (line) {\n lines.push(line);\n linesWidths.push(accumWidth);\n }\n\n if (lines.length === 1) {\n // No new line.\n accumWidth += lastAccumWidth;\n }\n\n return {\n // Accum width of last line\n accumWidth,\n lines: lines,\n linesWidths\n };\n}","/**\n * RichText is a container that manages complex text label.\n * It will parse text string and create sub displayble elements respectively.\n */\nimport { TextAlign, TextVerticalAlign, ImageLike, Dictionary, MapToType } from '../core/types';\nimport { parseRichText, parsePlainText } from './helper/parseText';\nimport TSpan, { TSpanStyleProps } from './TSpan';\nimport { retrieve2, each, normalizeCssArray, trim, retrieve3, extend, keys, defaults } from '../core/util';\nimport { DEFAULT_FONT, adjustTextX, adjustTextY } from '../contain/text';\nimport ZRImage from './Image';\nimport Rect from './shape/Rect';\nimport BoundingRect from '../core/BoundingRect';\nimport { MatrixArray } from '../core/matrix';\nimport Displayable, {\n DisplayableStatePropNames,\n DisplayableProps,\n DEFAULT_COMMON_ANIMATION_PROPS\n} from './Displayable';\nimport { ZRenderType } from '../zrender';\nimport Animator from '../animation/Animator';\nimport Transformable from '../core/Transformable';\nimport { ElementCommonState } from '../Element';\nimport { GroupLike } from './Group';\n\ntype TextContentBlock = ReturnType\ntype TextLine = TextContentBlock['lines'][0]\ntype TextToken = TextLine['tokens'][0]\n\n// TODO Default value?\nexport interface TextStylePropsPart {\n // TODO Text is assigned inside zrender\n text?: string\n\n fill?: string\n stroke?: string\n\n opacity?: number\n fillOpacity?: number\n strokeOpacity?: number\n /**\n * textStroke may be set as some color as a default\n * value in upper applicaion, where the default value\n * of lineWidth should be 0 to make sure that\n * user can choose to do not use text stroke.\n */\n lineWidth?: number\n lineDash?: false | number[]\n lineDashOffset?: number\n borderDash?: false | number[]\n borderDashOffset?: number\n\n /**\n * If `fontSize` or `fontFamily` exists, `font` will be reset by\n * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`.\n * So do not visit it directly in upper application (like echarts),\n * but use `contain/text#makeFont` instead.\n */\n font?: string\n /**\n * The same as font. Use font please.\n * @deprecated\n */\n textFont?: string\n\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n */\n fontStyle?: 'normal' | 'italic' | 'oblique'\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n */\n fontWeight?: 'normal' | 'bold' | 'bolder' | 'lighter' | number\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n */\n fontFamily?: string\n /**\n * It helps merging respectively, rather than parsing an entire font string.\n * Should be 12 but not '12px'.\n */\n fontSize?: number | string\n\n align?: TextAlign\n verticalAlign?: TextVerticalAlign\n\n /**\n * Line height. Default to be text height of '国'\n */\n lineHeight?: number\n /**\n * Width of text block. Not include padding\n * Used for background, truncate, wrap\n */\n width?: number | string\n /**\n * Height of text block. Not include padding\n * Used for background, truncate\n */\n height?: number\n /**\n * Reserved for special functinality, like 'hr'.\n */\n tag?: string\n\n textShadowColor?: string\n textShadowBlur?: number\n textShadowOffsetX?: number\n textShadowOffsetY?: number\n\n // Shadow, background, border of text box.\n backgroundColor?: string | {\n image: ImageLike | string\n }\n\n /**\n * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]`\n */\n padding?: number | number[]\n /**\n * Margin of label. Used when layouting the label.\n */\n margin?: number\n\n borderColor?: string\n borderWidth?: number\n borderRadius?: number | number[]\n\n /**\n * Shadow color for background box.\n */\n shadowColor?: string\n /**\n * Shadow blur for background box.\n */\n shadowBlur?: number\n /**\n * Shadow offset x for background box.\n */\n shadowOffsetX?: number\n /**\n * Shadow offset y for background box.\n */\n shadowOffsetY?: number\n}\nexport interface TextStyleProps extends TextStylePropsPart {\n\n text?: string\n\n x?: number\n y?: number\n\n /**\n * Only support number in the top block.\n */\n width?: number\n /**\n * Text styles for rich text.\n */\n rich?: Dictionary\n\n /**\n * Strategy when calculated text width exceeds textWidth.\n * break: break by word\n * break: will break inside the word\n * truncate: truncate the text and show ellipsis\n * Do nothing if not set\n */\n overflow?: 'break' | 'breakAll' | 'truncate' | 'none'\n\n /**\n * Strategy when text lines exceeds textHeight.\n * Do nothing if not set\n */\n lineOverflow?: 'truncate'\n\n /**\n * Epllipsis used if text is truncated\n */\n ellipsis?: string\n /**\n * Placeholder used if text is truncated to empty\n */\n placeholder?: string\n /**\n * Min characters for truncating\n */\n truncateMinChar?: number\n}\n\nexport interface TextProps extends DisplayableProps {\n style?: TextStyleProps\n\n zlevel?: number\n z?: number\n z2?: number\n\n culling?: boolean\n cursor?: string\n}\n\nexport type TextState = Pick & ElementCommonState\n\nexport type DefaultTextStyle = Pick & {\n autoStroke?: boolean\n};\n\nconst DEFAULT_RICH_TEXT_COLOR = {\n fill: '#000'\n};\nconst DEFAULT_STROKE_LINE_WIDTH = 2;\n\n// const DEFAULT_TEXT_STYLE: TextStyleProps = {\n// x: 0,\n// y: 0,\n// fill: '#000',\n// stroke: null,\n// opacity: 0,\n// fillOpacity:\n// }\n\nexport const DEFAULT_TEXT_ANIMATION_PROPS: MapToType = {\n style: defaults, MapToType>({\n fill: true,\n stroke: true,\n fillOpacity: true,\n strokeOpacity: true,\n lineWidth: true,\n fontSize: true,\n lineHeight: true,\n width: true,\n height: true,\n textShadowColor: true,\n textShadowBlur: true,\n textShadowOffsetX: true,\n textShadowOffsetY: true,\n backgroundColor: true,\n padding: true, // TODO needs normalize padding before animate\n borderColor: true,\n borderWidth: true,\n borderRadius: true // TODO needs normalize radius before animate\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n };\n\n\ninterface ZRText {\n animate(key?: '', loop?: boolean): Animator\n animate(key: 'style', loop?: boolean): Animator\n\n getState(stateName: string): TextState\n ensureState(stateName: string): TextState\n\n states: Dictionary\n stateProxy: (stateName: string) => TextState\n}\n\nclass ZRText extends Displayable implements GroupLike {\n\n type = 'text'\n\n style: TextStyleProps\n\n /**\n * How to handling label overlap\n *\n * hidden:\n */\n overlap: 'hidden' | 'show' | 'blur'\n\n /**\n * Will use this to calculate transform matrix\n * instead of Element itseelf if it's give.\n * Not exposed to developers\n */\n innerTransformable: Transformable\n\n private _children: (ZRImage | Rect | TSpan)[] = []\n\n private _childCursor: 0\n\n private _defaultStyle: DefaultTextStyle = DEFAULT_RICH_TEXT_COLOR\n\n constructor(opts?: TextProps) {\n super();\n this.attr(opts);\n }\n\n childrenRef() {\n return this._children;\n }\n\n update() {\n\n super.update();\n\n // Update children\n if (this.styleChanged()) {\n this._updateSubTexts();\n }\n\n for (let i = 0; i < this._children.length; i++) {\n const child = this._children[i];\n // Set common properties.\n child.zlevel = this.zlevel;\n child.z = this.z;\n child.z2 = this.z2;\n child.culling = this.culling;\n child.cursor = this.cursor;\n child.invisible = this.invisible;\n }\n }\n\n updateTransform() {\n const innerTransformable = this.innerTransformable;\n if (innerTransformable) {\n innerTransformable.updateTransform();\n if (innerTransformable.transform) {\n this.transform = innerTransformable.transform;\n }\n }\n else {\n super.updateTransform();\n }\n }\n\n getLocalTransform(m?: MatrixArray): MatrixArray {\n const innerTransformable = this.innerTransformable;\n return innerTransformable\n ? innerTransformable.getLocalTransform(m)\n : super.getLocalTransform(m);\n }\n\n // TODO override setLocalTransform?\n getComputedTransform() {\n if (this.__hostTarget) {\n // Update host target transform\n this.__hostTarget.getComputedTransform();\n // Update text position.\n this.__hostTarget.updateInnerText(true);\n }\n\n return super.getComputedTransform();\n }\n\n private _updateSubTexts() {\n // Reset child visit cursor\n this._childCursor = 0;\n\n normalizeTextStyle(this.style);\n this.style.rich\n ? this._updateRichTexts()\n : this._updatePlainTexts();\n\n this._children.length = this._childCursor;\n\n this.styleUpdated();\n }\n\n addSelfToZr(zr: ZRenderType) {\n super.addSelfToZr(zr);\n for (let i = 0; i < this._children.length; i++) {\n // Also need mount __zr for case like hover detection.\n // The case: hover on a label (position: 'top') causes host el\n // scaled and label Y position lifts a bit so that out of the\n // pointer, then mouse move should be able to trigger \"mouseout\".\n this._children[i].__zr = zr;\n }\n }\n\n removeSelfFromZr(zr: ZRenderType) {\n super.removeSelfFromZr(zr);\n for (let i = 0; i < this._children.length; i++) {\n this._children[i].__zr = null;\n }\n }\n\n getBoundingRect(): BoundingRect {\n if (this.styleChanged()) {\n this._updateSubTexts();\n }\n if (!this._rect) {\n // TODO: Optimize when using width and overflow: wrap/truncate\n const tmpRect = new BoundingRect(0, 0, 0, 0);\n const children = this._children;\n const tmpMat: MatrixArray = [];\n let rect = null;\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const childRect = child.getBoundingRect();\n const transform = child.getLocalTransform(tmpMat);\n\n if (transform) {\n tmpRect.copy(childRect);\n tmpRect.applyTransform(transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n }\n else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n this._rect = rect || tmpRect;\n }\n return this._rect;\n }\n\n // Can be set in Element. To calculate text fill automatically when textContent is inside element\n setDefaultTextStyle(defaultTextStyle: DefaultTextStyle) {\n // Use builtin if defaultTextStyle is not given.\n this._defaultStyle = defaultTextStyle || DEFAULT_RICH_TEXT_COLOR;\n }\n\n setTextContent(textContent: never) {\n throw new Error('Can\\'t attach text on another text');\n }\n\n // getDefaultStyleValue(key: T): TextStyleProps[T] {\n // // Default value is on the prototype.\n // return this.style.prototype[key];\n // }\n\n protected _mergeStyle(targetStyle: TextStyleProps, sourceStyle: TextStyleProps) {\n if (!sourceStyle) {\n return targetStyle;\n }\n\n // DO deep merge on rich configurations.\n const sourceRich = sourceStyle.rich;\n const targetRich = targetStyle.rich || (sourceRich && {}); // Create a new one if source have rich but target don't\n\n extend(targetStyle, sourceStyle);\n\n if (sourceRich && targetRich) {\n // merge rich and assign rich again.\n this._mergeRich(targetRich, sourceRich);\n targetStyle.rich = targetRich;\n }\n else if (targetRich) {\n // If source rich not exists. DON'T override the target rich\n targetStyle.rich = targetRich;\n }\n\n return targetStyle;\n }\n\n private _mergeRich(targetRich: TextStyleProps['rich'], sourceRich: TextStyleProps['rich']) {\n const richNames = keys(sourceRich);\n // Merge by rich names.\n for (let i = 0; i < richNames.length; i++) {\n const richName = richNames[i];\n targetRich[richName] = targetRich[richName] || {};\n extend(targetRich[richName], sourceRich[richName]);\n }\n }\n\n getAnimationStyleProps() {\n return DEFAULT_TEXT_ANIMATION_PROPS;\n }\n\n\n private _getOrCreateChild(Ctor: {new(): TSpan}): TSpan\n private _getOrCreateChild(Ctor: {new(): ZRImage}): ZRImage\n private _getOrCreateChild(Ctor: {new(): Rect}): Rect\n private _getOrCreateChild(Ctor: {new(): TSpan | Rect | ZRImage}): TSpan | Rect | ZRImage {\n let child = this._children[this._childCursor];\n if (!child || !(child instanceof Ctor)) {\n child = new Ctor();\n }\n this._children[this._childCursor++] = child;\n child.__zr = this.__zr;\n // TODO to users parent can only be group.\n child.parent = this as any;\n return child;\n }\n\n private _updatePlainTexts() {\n const style = this.style;\n const textFont = style.font || DEFAULT_FONT;\n const textPadding = style.padding as number[];\n\n const text = getStyleText(style);\n const contentBlock = parsePlainText(text, style);\n const needDrawBg = needDrawBackground(style);\n const bgColorDrawn = !!(style.backgroundColor);\n\n let outerHeight = contentBlock.outerHeight;\n\n const textLines = contentBlock.lines;\n const lineHeight = contentBlock.lineHeight;\n\n const defaultStyle = this._defaultStyle;\n\n const baseX = style.x || 0;\n const baseY = style.y || 0;\n const textAlign = style.align || defaultStyle.align || 'left';\n const verticalAlign = style.verticalAlign || defaultStyle.verticalAlign || 'top';\n\n let textX = baseX;\n let textY = adjustTextY(baseY, contentBlock.contentHeight, verticalAlign);\n\n if (needDrawBg || textPadding) {\n // Consider performance, do not call getTextWidth util necessary.\n let outerWidth = contentBlock.width;\n textPadding && (outerWidth += textPadding[1] + textPadding[3]);\n const boxX = adjustTextX(baseX, outerWidth, textAlign);\n const boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n\n needDrawBg && this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);\n }\n\n // `textBaseline` is set as 'middle'.\n textY += lineHeight / 2;\n\n if (textPadding) {\n textX = getTextXForPadding(baseX, textAlign, textPadding);\n if (verticalAlign === 'top') {\n textY += textPadding[0];\n }\n else if (verticalAlign === 'bottom') {\n textY -= textPadding[2];\n }\n }\n\n let defaultLineWidth = 0;\n let useDefaultFill = false;\n const textFill = getFill(\n 'fill' in style\n ? style.fill\n : (useDefaultFill = true, defaultStyle.fill)\n );\n const textStroke = getStroke(\n 'stroke' in style\n ? style.stroke\n : (!bgColorDrawn\n // If we use \"auto lineWidth\" widely, it probably bring about some bad case.\n // So the current strategy is:\n // If `style.fill` is specified (i.e., `useDefaultFill` is `false`)\n // (A) And if `textConfig.insideStroke/outsideStroke` is not specified as a color\n // (i.e., `defaultStyle.autoStroke` is `true`), we do not actually display\n // the auto stroke because we can not make sure wether the stoke is approperiate to\n // the given `fill`.\n // (B) But if `textConfig.insideStroke/outsideStroke` is specified as a color,\n // we give the auto lineWidth to display the given stoke color.\n && (!defaultStyle.autoStroke || useDefaultFill)\n )\n ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n : null\n );\n\n const hasShadow = style.textShadowBlur > 0;\n\n const fixedBoundingRect = style.width != null\n && (style.overflow === 'truncate' || style.overflow === 'break' || style.overflow === 'breakAll');\n const calculatedLineHeight = contentBlock.calculatedLineHeight;\n\n for (let i = 0; i < textLines.length; i++) {\n const el = this._getOrCreateChild(TSpan);\n // Always create new style.\n const subElStyle: TSpanStyleProps = el.createStyle();\n el.useStyle(subElStyle);\n subElStyle.text = textLines[i];\n subElStyle.x = textX;\n subElStyle.y = textY;\n // Always set textAlign and textBase line, because it is difficute to calculate\n // textAlign from prevEl, and we dont sure whether textAlign will be reset if\n // font set happened.\n if (textAlign) {\n subElStyle.textAlign = textAlign;\n }\n // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n subElStyle.textBaseline = 'middle';\n subElStyle.opacity = style.opacity;\n // Fill after stroke so the outline will not cover the main part.\n subElStyle.strokeFirst = true;\n\n if (hasShadow) {\n subElStyle.shadowBlur = style.textShadowBlur || 0;\n subElStyle.shadowColor = style.textShadowColor || 'transparent';\n subElStyle.shadowOffsetX = style.textShadowOffsetX || 0;\n subElStyle.shadowOffsetY = style.textShadowOffsetY || 0;\n }\n\n if (textStroke) {\n subElStyle.stroke = textStroke as string;\n subElStyle.lineWidth = style.lineWidth || defaultLineWidth;\n subElStyle.lineDash = style.lineDash;\n subElStyle.lineDashOffset = style.lineDashOffset || 0;\n }\n if (textFill) {\n subElStyle.fill = textFill as string;\n }\n\n subElStyle.font = textFont;\n\n textY += lineHeight;\n\n if (fixedBoundingRect) {\n el.setBoundingRect(new BoundingRect(\n adjustTextX(subElStyle.x, style.width, subElStyle.textAlign as TextAlign),\n adjustTextY(subElStyle.y, calculatedLineHeight, subElStyle.textBaseline as TextVerticalAlign),\n style.width,\n calculatedLineHeight\n ));\n }\n }\n }\n\n\n private _updateRichTexts() {\n const style = this.style;\n\n // TODO Only parse when text changed?\n const text = getStyleText(style);\n const contentBlock = parseRichText(text, style);\n\n const contentWidth = contentBlock.width;\n const outerWidth = contentBlock.outerWidth;\n const outerHeight = contentBlock.outerHeight;\n const textPadding = style.padding as number[];\n\n const baseX = style.x || 0;\n const baseY = style.y || 0;\n const defaultStyle = this._defaultStyle;\n const textAlign = style.align || defaultStyle.align;\n const verticalAlign = style.verticalAlign || defaultStyle.verticalAlign;\n\n const boxX = adjustTextX(baseX, outerWidth, textAlign);\n const boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n let xLeft = boxX;\n let lineTop = boxY;\n\n if (textPadding) {\n xLeft += textPadding[3];\n lineTop += textPadding[0];\n }\n\n let xRight = xLeft + contentWidth;\n\n if (needDrawBackground(style)) {\n this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);\n }\n const bgColorDrawn = !!(style.backgroundColor);\n\n for (let i = 0; i < contentBlock.lines.length; i++) {\n const line = contentBlock.lines[i];\n const tokens = line.tokens;\n const tokenCount = tokens.length;\n const lineHeight = line.lineHeight;\n\n let remainedWidth = line.width;\n let leftIndex = 0;\n let lineXLeft = xLeft;\n let lineXRight = xRight;\n let rightIndex = tokenCount - 1;\n let token;\n\n while (\n leftIndex < tokenCount\n && (token = tokens[leftIndex], !token.align || token.align === 'left')\n ) {\n this._placeToken(token, style, lineHeight, lineTop, lineXLeft, 'left', bgColorDrawn);\n remainedWidth -= token.width;\n lineXLeft += token.width;\n leftIndex++;\n }\n\n while (\n rightIndex >= 0\n && (token = tokens[rightIndex], token.align === 'right')\n ) {\n this._placeToken(token, style, lineHeight, lineTop, lineXRight, 'right', bgColorDrawn);\n remainedWidth -= token.width;\n lineXRight -= token.width;\n rightIndex--;\n }\n\n // The other tokens are placed as textAlign 'center' if there is enough space.\n lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - remainedWidth) / 2;\n while (leftIndex <= rightIndex) {\n token = tokens[leftIndex];\n // Consider width specified by user, use 'center' rather than 'left'.\n this._placeToken(\n token, style, lineHeight, lineTop,\n lineXLeft + token.width / 2, 'center', bgColorDrawn\n );\n lineXLeft += token.width;\n leftIndex++;\n }\n\n lineTop += lineHeight;\n }\n }\n\n private _placeToken(\n token: TextToken,\n style: TextStyleProps,\n lineHeight: number,\n lineTop: number,\n x: number,\n textAlign: string,\n parentBgColorDrawn: boolean\n ) {\n const tokenStyle = style.rich[token.styleName] || {};\n tokenStyle.text = token.text;\n\n // 'ctx.textBaseline' is always set as 'middle', for sake of\n // the bias of \"Microsoft YaHei\".\n const verticalAlign = token.verticalAlign;\n let y = lineTop + lineHeight / 2;\n if (verticalAlign === 'top') {\n y = lineTop + token.height / 2;\n }\n else if (verticalAlign === 'bottom') {\n y = lineTop + lineHeight - token.height / 2;\n }\n\n const needDrawBg = !token.isLineHolder && needDrawBackground(tokenStyle);\n needDrawBg && this._renderBackground(\n tokenStyle,\n style,\n textAlign === 'right'\n ? x - token.width\n : textAlign === 'center'\n ? x - token.width / 2\n : x,\n y - token.height / 2,\n token.width,\n token.height\n );\n const bgColorDrawn = !!tokenStyle.backgroundColor;\n\n const textPadding = token.textPadding;\n if (textPadding) {\n x = getTextXForPadding(x, textAlign, textPadding);\n y -= token.height / 2 - textPadding[0] - token.innerHeight / 2;\n }\n\n const el = this._getOrCreateChild(TSpan);\n const subElStyle: TSpanStyleProps = el.createStyle();\n // Always create new style.\n el.useStyle(subElStyle);\n\n const defaultStyle = this._defaultStyle;\n let useDefaultFill = false;\n let defaultLineWidth = 0;\n const textFill = getFill(\n 'fill' in tokenStyle ? tokenStyle.fill\n : 'fill' in style ? style.fill\n : (useDefaultFill = true, defaultStyle.fill)\n );\n const textStroke = getStroke(\n 'stroke' in tokenStyle ? tokenStyle.stroke\n : 'stroke' in style ? style.stroke\n : (\n !bgColorDrawn\n && !parentBgColorDrawn\n // See the strategy explained above.\n && (!defaultStyle.autoStroke || useDefaultFill)\n ) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n : null\n );\n\n const hasShadow = tokenStyle.textShadowBlur > 0\n || style.textShadowBlur > 0;\n\n subElStyle.text = token.text;\n subElStyle.x = x;\n subElStyle.y = y;\n if (hasShadow) {\n subElStyle.shadowBlur = tokenStyle.textShadowBlur || style.textShadowBlur || 0;\n subElStyle.shadowColor = tokenStyle.textShadowColor || style.textShadowColor || 'transparent';\n subElStyle.shadowOffsetX = tokenStyle.textShadowOffsetX || style.textShadowOffsetX || 0;\n subElStyle.shadowOffsetY = tokenStyle.textShadowOffsetY || style.textShadowOffsetY || 0;\n }\n\n subElStyle.textAlign = textAlign as CanvasTextAlign;\n // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n // text will offset downward a little bit in font \"Microsoft YaHei\".\n subElStyle.textBaseline = 'middle';\n subElStyle.font = token.font || DEFAULT_FONT;\n subElStyle.opacity = retrieve3(tokenStyle.opacity, style.opacity, 1);\n\n if (textStroke) {\n subElStyle.lineWidth = retrieve3(tokenStyle.lineWidth, style.lineWidth, defaultLineWidth);\n subElStyle.lineDash = retrieve2(tokenStyle.lineDash, style.lineDash);\n subElStyle.lineDashOffset = style.lineDashOffset || 0;\n subElStyle.stroke = textStroke;\n }\n if (textFill) {\n subElStyle.fill = textFill;\n }\n\n const textWidth = token.contentWidth;\n const textHeight = token.contentHeight;\n // NOTE: Should not call dirtyStyle after setBoundingRect. Or it will be cleared.\n el.setBoundingRect(new BoundingRect(\n adjustTextX(subElStyle.x, textWidth, subElStyle.textAlign as TextAlign),\n adjustTextY(subElStyle.y, textHeight, subElStyle.textBaseline as TextVerticalAlign),\n textWidth,\n textHeight\n ));\n }\n\n private _renderBackground(\n style: TextStylePropsPart,\n topStyle: TextStylePropsPart,\n x: number,\n y: number,\n width: number,\n height: number\n ) {\n const textBackgroundColor = style.backgroundColor;\n const textBorderWidth = style.borderWidth;\n const textBorderColor = style.borderColor;\n const isImageBg = textBackgroundColor && (textBackgroundColor as {image: ImageLike}).image;\n const isPlainOrGradientBg = textBackgroundColor && !isImageBg;\n const textBorderRadius = style.borderRadius;\n const self = this;\n\n let rectEl: Rect;\n let imgEl: ZRImage;\n if (isPlainOrGradientBg || style.lineHeight || (textBorderWidth && textBorderColor)) {\n // Background is color\n rectEl = this._getOrCreateChild(Rect);\n rectEl.useStyle(rectEl.createStyle()); // Create an empty style.\n rectEl.style.fill = null;\n const rectShape = rectEl.shape;\n rectShape.x = x;\n rectShape.y = y;\n rectShape.width = width;\n rectShape.height = height;\n rectShape.r = textBorderRadius;\n rectEl.dirtyShape();\n }\n\n if (isPlainOrGradientBg) {\n const rectStyle = rectEl.style;\n rectStyle.fill = textBackgroundColor as string || null;\n rectStyle.fillOpacity = retrieve2(style.fillOpacity, 1);\n }\n else if (isImageBg) {\n imgEl = this._getOrCreateChild(ZRImage);\n imgEl.onload = function () {\n // Refresh and relayout after image loaded.\n self.dirtyStyle();\n };\n const imgStyle = imgEl.style;\n imgStyle.image = (textBackgroundColor as {image: ImageLike}).image;\n imgStyle.x = x;\n imgStyle.y = y;\n imgStyle.width = width;\n imgStyle.height = height;\n }\n\n if (textBorderWidth && textBorderColor) {\n const rectStyle = rectEl.style;\n rectStyle.lineWidth = textBorderWidth;\n rectStyle.stroke = textBorderColor;\n rectStyle.strokeOpacity = retrieve2(style.strokeOpacity, 1);\n rectStyle.lineDash = style.borderDash;\n rectStyle.lineDashOffset = style.borderDashOffset || 0;\n rectEl.strokeContainThreshold = 0;\n\n // Making shadow looks better.\n if (rectEl.hasFill() && rectEl.hasStroke()) {\n rectStyle.strokeFirst = true;\n rectStyle.lineWidth *= 2;\n }\n }\n\n const commonStyle = (rectEl || imgEl).style;\n commonStyle.shadowBlur = style.shadowBlur || 0;\n commonStyle.shadowColor = style.shadowColor || 'transparent';\n commonStyle.shadowOffsetX = style.shadowOffsetX || 0;\n commonStyle.shadowOffsetY = style.shadowOffsetY || 0;\n commonStyle.opacity = retrieve3(style.opacity, topStyle.opacity, 1);\n }\n\n static makeFont(style: TextStylePropsPart): string {\n // FIXME in node-canvas fontWeight is before fontStyle\n // Use `fontSize` `fontFamily` to check whether font properties are defined.\n let font = '';\n if (style.fontSize || style.fontFamily || style.fontWeight) {\n let fontSize = '';\n if (\n typeof style.fontSize === 'string'\n && (\n style.fontSize.indexOf('px') !== -1\n || style.fontSize.indexOf('rem') !== -1\n || style.fontSize.indexOf('em') !== -1\n )\n ) {\n fontSize = style.fontSize;\n }\n else if (!isNaN(+style.fontSize)) {\n fontSize = style.fontSize + 'px';\n }\n else {\n fontSize = '12px';\n }\n font = [\n style.fontStyle,\n style.fontWeight,\n fontSize,\n // If font properties are defined, `fontFamily` should not be ignored.\n style.fontFamily || 'sans-serif'\n ].join(' ');\n }\n return font && trim(font) || style.textFont || style.font;\n }\n}\n\n\nconst VALID_TEXT_ALIGN = {left: true, right: 1, center: 1};\nconst VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1};\n\nexport function normalizeTextStyle(style: TextStyleProps): TextStyleProps {\n normalizeStyle(style);\n each(style.rich, normalizeStyle);\n return style;\n}\n\nfunction normalizeStyle(style: TextStylePropsPart) {\n if (style) {\n style.font = ZRText.makeFont(style);\n let textAlign = style.align;\n // 'middle' is invalid, convert it to 'center'\n (textAlign as string) === 'middle' && (textAlign = 'center');\n style.align = (\n textAlign == null || VALID_TEXT_ALIGN[textAlign]\n ) ? textAlign : 'left';\n\n // Compatible with textBaseline.\n let verticalAlign = style.verticalAlign;\n (verticalAlign as string) === 'center' && (verticalAlign = 'middle');\n style.verticalAlign = (\n verticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[verticalAlign]\n ) ? verticalAlign : 'top';\n\n // TODO Should not change the orignal value.\n const textPadding = style.padding;\n if (textPadding) {\n style.padding = normalizeCssArray(style.padding);\n }\n }\n}\n\n/**\n * @param stroke If specified, do not check style.textStroke.\n * @param lineWidth If specified, do not check style.textStroke.\n */\nfunction getStroke(\n stroke?: TextStylePropsPart['stroke'],\n lineWidth?: number\n) {\n return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')\n ? null\n : ((stroke as any).image || (stroke as any).colorStops)\n ? '#000'\n : stroke;\n}\n\nfunction getFill(\n fill?: TextStylePropsPart['fill']\n) {\n return (fill == null || fill === 'none')\n ? null\n // TODO pattern and gradient?\n : ((fill as any).image || (fill as any).colorStops)\n ? '#000'\n : fill;\n}\n\nfunction getTextXForPadding(x: number, textAlign: string, textPadding: number[]): number {\n return textAlign === 'right'\n ? (x - textPadding[1])\n : textAlign === 'center'\n ? (x + textPadding[3] / 2 - textPadding[1] / 2)\n : (x + textPadding[3]);\n}\n\nfunction getStyleText(style: TextStylePropsPart): string {\n // Compat: set number to text is supported.\n // set null/undefined to text is supported.\n let text = style.text;\n text != null && (text += '');\n return text;\n}\n\n/**\n * If needs draw background\n * @param style Style of element\n */\nfunction needDrawBackground(style: TextStylePropsPart): boolean {\n return !!(\n style.backgroundColor\n || style.lineHeight\n || (style.borderWidth && style.borderColor)\n );\n}\n\nexport default ZRText;","/**\n * 圆弧\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class ArcShape {\n cx = 0;\n cy = 0;\n r = 0;\n startAngle = 0;\n endAngle = Math.PI * 2\n clockwise? = true\n}\n\nexport interface ArcProps extends PathProps {\n shape?: Partial\n}\n\nclass Arc extends Path {\n\n shape: ArcShape\n\n constructor(opts?: ArcProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new ArcShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: ArcShape) {\n\n const x = shape.cx;\n const y = shape.cy;\n const r = Math.max(shape.r, 0);\n const startAngle = shape.startAngle;\n const endAngle = shape.endAngle;\n const clockwise = shape.clockwise;\n\n const unitX = Math.cos(startAngle);\n const unitY = Math.sin(startAngle);\n\n ctx.moveTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n }\n}\n\nArc.prototype.type = 'arc';\n\nexport default Arc;","/**\n * 贝塞尔曲线\n */\n\nimport Path, { PathProps } from '../Path';\nimport * as vec2 from '../../core/vector';\nimport {\n quadraticSubdivide,\n cubicSubdivide,\n quadraticAt,\n cubicAt,\n quadraticDerivativeAt,\n cubicDerivativeAt\n} from '../../core/curve';\n\nconst out: number[] = [];\n\nexport class BezierCurveShape {\n x1 = 0\n y1 = 0\n x2 = 0\n y2 = 0\n cpx1 = 0\n cpy1 = 0\n cpx2?: number\n cpy2?: number\n // Curve show percent, for animating\n percent = 1\n}\n\nfunction someVectorAt(shape: BezierCurveShape, t: number, isTangent: boolean) {\n const cpx2 = shape.cpx2;\n const cpy2 = shape.cpy2;\n if (cpx2 === null || cpy2 === null) {\n return [\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t),\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)\n ];\n }\n else {\n return [\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t),\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)\n ];\n }\n}\n\nexport interface BezierCurveProps extends PathProps {\n shape?: Partial\n}\nclass BezierCurve extends Path {\n\n shape: BezierCurveShape\n\n constructor(opts?: BezierCurveProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new BezierCurveShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: BezierCurveShape) {\n let x1 = shape.x1;\n let y1 = shape.y1;\n let x2 = shape.x2;\n let y2 = shape.y2;\n let cpx1 = shape.cpx1;\n let cpy1 = shape.cpy1;\n let cpx2 = shape.cpx2;\n let cpy2 = shape.cpy2;\n let percent = shape.percent;\n if (percent === 0) {\n return;\n }\n\n ctx.moveTo(x1, y1);\n\n if (cpx2 == null || cpy2 == null) {\n if (percent < 1) {\n quadraticSubdivide(x1, cpx1, x2, percent, out);\n cpx1 = out[1];\n x2 = out[2];\n quadraticSubdivide(y1, cpy1, y2, percent, out);\n cpy1 = out[1];\n y2 = out[2];\n }\n\n ctx.quadraticCurveTo(\n cpx1, cpy1,\n x2, y2\n );\n }\n else {\n if (percent < 1) {\n cubicSubdivide(x1, cpx1, cpx2, x2, percent, out);\n cpx1 = out[1];\n cpx2 = out[2];\n x2 = out[3];\n cubicSubdivide(y1, cpy1, cpy2, y2, percent, out);\n cpy1 = out[1];\n cpy2 = out[2];\n y2 = out[3];\n }\n ctx.bezierCurveTo(\n cpx1, cpy1,\n cpx2, cpy2,\n x2, y2\n );\n }\n }\n\n /**\n * Get point at percent\n */\n pointAt(t: number) {\n return someVectorAt(this.shape, t, false);\n }\n\n /**\n * Get tangent at percent\n */\n tangentAt(t: number) {\n const p = someVectorAt(this.shape, t, true);\n return vec2.normalize(p, p);\n }\n};\n\nBezierCurve.prototype.type = 'bezier-curve';\n\nexport default BezierCurve;\n","/**\n * 水滴形状\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class DropletShape {\n cx = 0\n cy = 0\n width = 0\n height = 0\n}\n\nexport interface DropletProps extends PathProps {\n shape?: Partial\n}\nclass Droplet extends Path {\n\n shape: DropletShape\n\n constructor(opts?: DropletProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new DropletShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: DropletShape) {\n const x = shape.cx;\n const y = shape.cy;\n const a = shape.width;\n const b = shape.height;\n\n ctx.moveTo(x, y + a);\n ctx.bezierCurveTo(\n x + a,\n y + a,\n x + a * 3 / 2,\n y - a / 3,\n x,\n y - b\n );\n ctx.bezierCurveTo(\n x - a * 3 / 2,\n y - a / 3,\n x - a,\n y + a,\n x,\n y + a\n );\n ctx.closePath();\n }\n}\n\nDroplet.prototype.type = 'droplet';\n\nexport default Droplet;\n","/**\n * 心形\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class HeartShape {\n cx = 0\n cy = 0\n width = 0\n height = 0\n}\n\nexport interface HeartProps extends PathProps {\n shape?: Partial\n}\nclass Heart extends Path {\n\n shape: HeartShape\n\n constructor(opts?: HeartProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new HeartShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: HeartShape) {\n const x = shape.cx;\n const y = shape.cy;\n const a = shape.width;\n const b = shape.height;\n ctx.moveTo(x, y);\n ctx.bezierCurveTo(\n x + a / 2, y - b * 2 / 3,\n x + a * 2, y + b / 3,\n x, y + b\n );\n ctx.bezierCurveTo(\n x - a * 2, y + b / 3,\n x - a / 2, y - b * 2 / 3,\n x, y\n );\n }\n}\n\n\nHeart.prototype.type = 'heart';\n\nexport default Heart;","/**\n * 正多边形\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst PI = Math.PI;\nconst sin = Math.sin;\nconst cos = Math.cos;\n\nexport class IsogonShape {\n x = 0\n y = 0\n r = 0\n n = 0\n}\n\nexport interface IsogonProps extends PathProps {\n shape?: Partial\n}\nclass Isogon extends Path {\n\n shape: IsogonShape\n\n constructor(opts?: IsogonProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new IsogonShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: IsogonShape) {\n const n = shape.n;\n if (!n || n < 2) {\n return;\n }\n\n const x = shape.x;\n const y = shape.y;\n const r = shape.r;\n\n const dStep = 2 * PI / n;\n let deg = -PI / 2;\n\n ctx.moveTo(x + r * cos(deg), y + r * sin(deg));\n for (let i = 0, end = n - 1; i < end; i++) {\n deg += dStep;\n ctx.lineTo(x + r * cos(deg), y + r * sin(deg));\n }\n\n ctx.closePath();\n\n return;\n }\n}\n\nIsogon.prototype.type = 'isogon';\n\nexport default Isogon;\n","/**\n * 圆环\n */\n\nimport Path, { PathProps } from '../Path';\n\nexport class RingShape {\n cx = 0\n cy = 0\n r = 0\n r0 = 0\n}\n\nexport interface RingProps extends PathProps {\n shape?: Partial\n}\nclass Ring extends Path {\n\n shape: RingShape\n\n constructor(opts?: RingProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new RingShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: RingShape) {\n const x = shape.cx;\n const y = shape.cy;\n const PI2 = Math.PI * 2;\n ctx.moveTo(x + shape.r, y);\n ctx.arc(x, y, shape.r, 0, PI2, false);\n ctx.moveTo(x + shape.r0, y);\n ctx.arc(x, y, shape.r0, 0, PI2, true);\n }\n}\n\nRing.prototype.type = 'ring';\nexport default Ring;","/**\n * 玫瑰线\n * @module zrender/graphic/shape/Rose\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst sin = Math.sin;\nconst cos = Math.cos;\nconst radian = Math.PI / 180;\n\nexport class RoseShape {\n cx = 0\n cy = 0\n r: number[] = []\n k = 0\n n = 1\n}\n\nexport interface RoseProps extends PathProps {\n shape?: Partial\n}\nclass Rose extends Path {\n\n shape: RoseShape\n\n constructor(opts?: RoseProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new RoseShape();\n }\n\n\n buildPath(ctx: CanvasRenderingContext2D, shape: RoseShape) {\n const R = shape.r;\n const k = shape.k;\n const n = shape.n;\n const x0 = shape.cx;\n const y0 = shape.cy;\n let x;\n let y;\n let r;\n\n\n ctx.moveTo(x0, y0);\n\n for (let i = 0, len = R.length; i < len; i++) {\n r = R[i];\n\n for (let j = 0; j <= 360 * n; j++) {\n x = r\n * sin(k / n * j % 360 * radian)\n * cos(j * radian)\n + x0;\n y = r\n * sin(k / n * j % 360 * radian)\n * sin(j * radian)\n + y0;\n ctx.lineTo(x, y);\n }\n }\n }\n}\n\nRose.prototype.type = 'rose';\n\nexport default Rose;","/**\n * n角星(n>3)\n * @module zrender/graphic/shape/Star\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst PI = Math.PI;\nconst cos = Math.cos;\nconst sin = Math.sin;\n\nexport class StarShape {\n cx = 0\n cy = 0\n n = 3\n r0: number\n r = 0\n}\n\nexport interface StarProps extends PathProps {\n shape?: Partial\n}\nclass Star extends Path {\n\n shape: StarShape\n\n constructor(opts?: StarProps) {\n super(opts);\n }\n\n getDefaultShape() {\n return new StarShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: StarShape) {\n\n const n = shape.n;\n if (!n || n < 2) {\n return;\n }\n\n const x = shape.cx;\n const y = shape.cy;\n const r = shape.r;\n let r0 = shape.r0;\n\n // 如果未指定内部顶点外接圆半径,则自动计算\n if (r0 == null) {\n r0 = n > 4\n // 相隔的外部顶点的连线的交点,\n // 被取为内部交点,以此计算r0\n ? r * cos(2 * PI / n) / cos(PI / n)\n // 二三四角星的特殊处理\n : r / 3;\n }\n\n const dStep = PI / n;\n let deg = -PI / 2;\n const xStart = x + r * cos(deg);\n const yStart = y + r * sin(deg);\n deg += dStep;\n\n // 记录边界点,用于判断inside\n ctx.moveTo(xStart, yStart);\n for (let i = 0, end = n * 2 - 1, ri; i < end; i++) {\n ri = i % 2 === 0 ? r0 : r;\n ctx.lineTo(x + ri * cos(deg), y + ri * sin(deg));\n deg += dStep;\n }\n\n ctx.closePath();\n }\n}\n\nStar.prototype.type = 'star';\nexport default Star;","/**\n * 内外旋轮曲线\n * @module zrender/graphic/shape/Trochold\n */\n\nimport Path, { PathProps } from '../Path';\n\nconst cos = Math.cos;\nconst sin = Math.sin;\n\nexport class TrochoidShape {\n cx = 0\n cy = 0\n r = 0\n r0 = 0\n d = 0\n location = 'out'\n}\n\nexport interface TrochoidProps extends PathProps {\n shape?: Partial\n}\nclass Trochoid extends Path {\n\n shape: TrochoidShape\n\n constructor(opts?: TrochoidProps) {\n super(opts);\n }\n\n getDefaultStyle() {\n return {\n stroke: '#000',\n fill: null as string\n };\n }\n\n getDefaultShape() {\n return new TrochoidShape();\n }\n\n buildPath(ctx: CanvasRenderingContext2D, shape: TrochoidShape) {\n const R = shape.r;\n const r = shape.r0;\n const d = shape.d;\n const offsetX = shape.cx;\n const offsetY = shape.cy;\n const delta = shape.location === 'out' ? 1 : -1;\n let x1;\n let y1;\n let x2;\n let y2;\n\n if (shape.location && R <= r) {\n return;\n }\n\n let num = 0;\n let i = 1;\n let theta;\n\n x1 = (R + delta * r) * cos(0)\n - delta * d * cos(0) + offsetX;\n y1 = (R + delta * r) * sin(0)\n - d * sin(0) + offsetY;\n\n ctx.moveTo(x1, y1);\n\n // 计算结束时的i\n do {\n num++;\n }\n while ((r * num) % (R + delta * r) !== 0);\n\n do {\n theta = Math.PI / 180 * i;\n x2 = (R + delta * r) * cos(theta)\n - delta * d * cos((R / r + delta) * theta)\n + offsetX;\n y2 = (R + delta * r) * sin(theta)\n - d * sin((R / r + delta) * theta)\n + offsetY;\n ctx.lineTo(x2, y2);\n i++;\n }\n while (i <= (r * num) / (R + delta * r) * 360);\n\n }\n}\n\nTrochoid.prototype.type = 'trochoid';\nexport default Trochoid;","import { ImageLike } from '../core/types';\n\ntype ImagePatternRepeat = 'repeat' | 'repeat-x' | 'repeat-y' | 'no-repeat'\n\nexport interface PatternObjectBase {\n id?: number\n // type is now unused, so make it optional\n type?: 'pattern'\n\n x?: number\n y?: number\n rotation?: number\n scaleX?: number\n scaleY?: number\n}\n\nexport interface ImagePatternObject extends PatternObjectBase {\n image: ImageLike | string\n repeat?: ImagePatternRepeat\n}\n\nexport interface InnerImagePatternObject extends ImagePatternObject {\n // Cached image. Which is created in the canvas painter.\n __image?: ImageLike\n}\n\nexport interface SVGPatternObject extends PatternObjectBase {\n /**\n * svg element can only be used in svg renderer currently.\n * svgWidth, svgHeight defines width and height used for pattern.\n */\n svgElement?: SVGElement\n svgWidth?: number\n svgHeight?: number\n}\n\nexport type PatternObject = ImagePatternObject | SVGPatternObject\n\nclass Pattern {\n\n type: 'pattern'\n\n image: ImageLike | string\n /**\n * svg element can only be used in svg renderer currently.\n */\n svgElement: SVGElement\n\n repeat: ImagePatternRepeat\n\n x: number\n y: number\n rotation: number\n scaleX: number\n scaleY: number\n\n constructor(image: ImageLike | string, repeat: ImagePatternRepeat) {\n // Should do nothing more in this constructor. Because gradient can be\n // declard by `color: {image: ...}`, where this constructor will not be called.\n this.image = image;\n this.repeat = repeat;\n\n this.x = 0;\n this.y = 0;\n this.rotation = 0;\n this.scaleX = 1;\n this.scaleY = 1;\n }\n}\n\nexport default Pattern;","/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nimport Point, { PointLike } from './Point';\nimport BoundingRect from './BoundingRect';\nimport { MatrixArray } from './matrix';\n\nconst extent = [0, 0];\nconst extent2 = [0, 0];\n\nconst minTv = new Point();\nconst maxTv = new Point();\n\nclass OrientedBoundingRect {\n\n // lt, rt, rb, lb\n private _corners: Point[] = [];\n\n private _axes: Point[] = [];\n\n private _origin: number[] = [0, 0];\n\n constructor(rect?: BoundingRect, transform?: MatrixArray) {\n for (let i = 0; i < 4; i++) {\n this._corners[i] = new Point();\n }\n for (let i = 0; i < 2; i++) {\n this._axes[i] = new Point();\n }\n\n if (rect) {\n this.fromBoundingRect(rect, transform);\n }\n }\n\n fromBoundingRect(rect: BoundingRect, transform?: MatrixArray) {\n const corners = this._corners;\n const axes = this._axes;\n const x = rect.x;\n const y = rect.y;\n const x2 = x + rect.width;\n const y2 = y + rect.height;\n corners[0].set(x, y);\n corners[1].set(x2, y);\n corners[2].set(x2, y2);\n corners[3].set(x, y2);\n\n if (transform) {\n for (let i = 0; i < 4; i++) {\n corners[i].transform(transform);\n }\n }\n\n // Calculate axes\n Point.sub(axes[0], corners[1], corners[0]);\n Point.sub(axes[1], corners[3], corners[0]);\n axes[0].normalize();\n axes[1].normalize();\n\n // Calculate projected origin\n for (let i = 0; i < 2; i++) {\n this._origin[i] = axes[i].dot(corners[0]);\n }\n }\n\n /**\n * If intersect with another OBB\n * @param other Bounding rect to be intersected with\n * @param mtv Calculated .\n * If it's not overlapped. it means needs to move given rect with Maximum Translation Vector to be overlapped.\n * Else it means needs to move given rect with Minimum Translation Vector to be not overlapped.\n */\n intersect(other: OrientedBoundingRect, mtv?: PointLike): boolean {\n // OBB collision with SAT method\n\n let overlapped = true;\n const noMtv = !mtv;\n minTv.set(Infinity, Infinity);\n maxTv.set(0, 0);\n // Check two axes for both two obb.\n if (!this._intersectCheckOneSide(this, other, minTv, maxTv, noMtv, 1)) {\n overlapped = false;\n if (noMtv) {\n // Early return if no need to calculate mtv\n return overlapped;\n }\n }\n if (!this._intersectCheckOneSide(other, this, minTv, maxTv, noMtv, -1)) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n }\n\n if (!noMtv) {\n Point.copy(mtv, overlapped ? minTv : maxTv);\n }\n\n return overlapped;\n }\n\n\n private _intersectCheckOneSide(\n self: OrientedBoundingRect,\n other: OrientedBoundingRect,\n minTv: Point,\n maxTv: Point,\n noMtv: boolean,\n inverse: 1 | -1\n ): boolean {\n let overlapped = true;\n for (let i = 0; i < 2; i++) {\n const axis = this._axes[i];\n this._getProjMinMaxOnAxis(i, self._corners, extent);\n this._getProjMinMaxOnAxis(i, other._corners, extent2);\n\n // Not overlap on the any axis.\n if (extent[1] < extent2[0] || extent[0] > extent2[1]) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n const dist0 = Math.abs(extent2[0] - extent[1]);\n const dist1 = Math.abs(extent[0] - extent2[1]);\n\n // Find longest distance of all axes.\n if (Math.min(dist0, dist1) > maxTv.len()) {\n if (dist0 < dist1) {\n Point.scale(maxTv, axis, -dist0 * inverse);\n }\n else {\n Point.scale(maxTv, axis, dist1 * inverse);\n }\n }\n }\n else if (minTv) {\n const dist0 = Math.abs(extent2[0] - extent[1]);\n const dist1 = Math.abs(extent[0] - extent2[1]);\n\n if (Math.min(dist0, dist1) < minTv.len()) {\n if (dist0 < dist1) {\n Point.scale(minTv, axis, dist0 * inverse);\n }\n else {\n Point.scale(minTv, axis, -dist1 * inverse);\n }\n }\n }\n }\n return overlapped;\n }\n\n private _getProjMinMaxOnAxis(dim: number, corners: Point[], out: number[]) {\n const axis = this._axes[dim];\n const origin = this._origin;\n const proj = corners[0].dot(axis) + origin[dim];\n let min = proj;\n let max = proj;\n\n for (let i = 1; i < corners.length; i++) {\n const proj = corners[i].dot(axis) + origin[dim];\n min = Math.min(proj, min);\n max = Math.max(proj, max);\n }\n\n out[0] = min;\n out[1] = max;\n }\n}\n\nexport default OrientedBoundingRect;","import type { ZRenderType } from '../zrender';\nimport type CanvasPainter from '../canvas/Painter';\nimport type BoundingRect from '../core/BoundingRect';\nimport { extend } from '../core/util';\n\nclass DebugRect {\n\n dom: HTMLDivElement\n\n private _hideTimeout: number\n\n constructor(style: Opts['style']) {\n const dom = this.dom = document.createElement('div');\n dom.className = 'ec-debug-dirty-rect';\n\n style = extend({}, style);\n extend(style, {\n backgroundColor: 'rgba(0, 0, 255, 0.2)',\n border: '1px solid #00f'\n });\n dom.style.cssText = `\nposition: absolute;\nopacity: 0;\ntransition: opacity 0.5s linear;\npointer-events: none;\n`;\n\n for (let key in style) {\n if (style.hasOwnProperty(key)) {\n (dom.style as any)[key] = (style as any)[key];\n }\n }\n }\n\n update(rect: BoundingRect) {\n const domStyle = this.dom.style;\n domStyle.width = rect.width + 'px';\n domStyle.height = rect.height + 'px';\n domStyle.left = rect.x + 'px';\n domStyle.top = rect.y + 'px';\n }\n\n hide() {\n this.dom.style.opacity = '0';\n }\n show(autoHideDelay?: number) {\n clearTimeout(this._hideTimeout);\n\n this.dom.style.opacity = '1';\n\n // Auto hide after 2 second\n this._hideTimeout = setTimeout(() => {\n this.hide();\n }, autoHideDelay || 1000) as unknown as number;\n }\n\n}\n\ninterface Opts {\n style?: {\n backgroundColor?: string\n color?: string\n }\n\n autoHideDelay?: number\n}\n\nexport default function showDebugDirtyRect(zr: ZRenderType, opts?: Opts) {\n opts = opts || {};\n const painter = zr.painter as CanvasPainter;\n if (!painter.getLayers) {\n throw new Error('Debug dirty rect can only been used on canvas renderer.');\n }\n if (painter.isSingleCanvas()) {\n throw new Error('Debug dirty rect can only been used on zrender inited with container.');\n }\n const debugViewRoot = document.createElement('div');\n debugViewRoot.style.cssText = `\nposition:absolute;\nleft:0;\ntop:0;\nright:0;\nbottom:0;\npointer-events:none;\n`;\n debugViewRoot.className = 'ec-debug-dirty-rect-container';\n\n const debugRects: DebugRect[] = [];\n const dom = zr.dom;\n dom.appendChild(debugViewRoot);\n const computedStyle = getComputedStyle(dom);\n if (computedStyle.position === 'static') {\n dom.style.position = 'relative';\n }\n\n zr.on('rendered', function () {\n if (painter.getLayers) {\n let idx = 0;\n painter.eachBuiltinLayer((layer) => {\n if (!layer.debugGetPaintRects) {\n return;\n }\n const paintRects = layer.debugGetPaintRects();\n for (let i = 0; i < paintRects.length; i++) {\n if (!paintRects[i].width || !paintRects[i].height) {\n continue;\n }\n\n if (!debugRects[idx]) {\n debugRects[idx] = new DebugRect(opts.style);\n debugViewRoot.appendChild(debugRects[idx].dom);\n }\n debugRects[idx].show(opts.autoHideDelay);\n debugRects[idx].update(paintRects[i]);\n idx++;\n }\n });\n for (let i = idx; i < debugRects.length; i++) {\n debugRects[i].hide();\n }\n }\n });\n}","import { LinearGradientObject } from '../graphic/LinearGradient';\nimport { RadialGradientObject } from '../graphic/RadialGradient';\nimport { GradientObject } from '../graphic/Gradient';\nimport { RectLike } from '../core/BoundingRect';\nimport Path from '../graphic/Path';\n\nexport function createLinearGradient(\n this: void,\n ctx: CanvasRenderingContext2D,\n obj: LinearGradientObject,\n rect: RectLike\n) {\n let x = obj.x == null ? 0 : obj.x;\n let x2 = obj.x2 == null ? 1 : obj.x2;\n let y = obj.y == null ? 0 : obj.y;\n let y2 = obj.y2 == null ? 0 : obj.y2;\n\n if (!obj.global) {\n x = x * rect.width + rect.x;\n x2 = x2 * rect.width + rect.x;\n y = y * rect.height + rect.y;\n y2 = y2 * rect.height + rect.y;\n }\n\n // Fix NaN when rect is Infinity\n x = isNaN(x) ? 0 : x;\n x2 = isNaN(x2) ? 1 : x2;\n y = isNaN(y) ? 0 : y;\n y2 = isNaN(y2) ? 0 : y2;\n\n const canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\n\n return canvasGradient;\n}\n\nexport function createRadialGradient(\n this: void,\n ctx: CanvasRenderingContext2D,\n obj: RadialGradientObject,\n rect: RectLike\n) {\n const width = rect.width;\n const height = rect.height;\n const min = Math.min(width, height);\n\n let x = obj.x == null ? 0.5 : obj.x;\n let y = obj.y == null ? 0.5 : obj.y;\n let r = obj.r == null ? 0.5 : obj.r;\n if (!obj.global) {\n x = x * width + rect.x;\n y = y * height + rect.y;\n r = r * min;\n }\n\n const canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);\n\n return canvasGradient;\n}\n\nexport function getCanvasGradient(this: void, ctx: CanvasRenderingContext2D, obj: GradientObject, rect: RectLike) {\n // TODO Cache?\n const canvasGradient = obj.type === 'radial'\n ? createRadialGradient(ctx, obj as RadialGradientObject, rect)\n : createLinearGradient(ctx, obj as LinearGradientObject, rect);\n\n const colorStops = obj.colorStops;\n for (let i = 0; i < colorStops.length; i++) {\n canvasGradient.addColorStop(\n colorStops[i].offset, colorStops[i].color\n );\n }\n return canvasGradient;\n}\n\nexport function isClipPathChanged(clipPaths: Path[], prevClipPaths: Path[]): boolean {\n // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n if (clipPaths === prevClipPaths || (!clipPaths && !prevClipPaths)) {\n return false;\n }\n if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {\n return true;\n }\n for (let i = 0; i < clipPaths.length; i++) {\n if (clipPaths[i] !== prevClipPaths[i]) {\n return true;\n }\n }\n return false;\n}","import { isArray, isNumber } from '../../core/util';\n\nexport function normalizeLineDash(lineType: any, lineWidth?: number): number[] | false {\n if (!lineType || lineType === 'solid' || !(lineWidth > 0)) {\n return null;\n }\n lineWidth = lineWidth || 1;\n return lineType === 'dashed'\n ? [4 * lineWidth, 2 * lineWidth]\n : lineType === 'dotted'\n ? [lineWidth]\n : isNumber(lineType)\n ? [lineType] : isArray(lineType) ? lineType : null;\n}","import Displayable, { DEFAULT_COMMON_STYLE } from '../graphic/Displayable';\nimport PathProxy from '../core/PathProxy';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ImagePatternObject, InnerImagePatternObject } from '../graphic/Pattern';\nimport { LinearGradientObject } from '../graphic/LinearGradient';\nimport { RadialGradientObject } from '../graphic/RadialGradient';\nimport { ZRCanvasRenderingContext } from '../core/types';\nimport { createOrUpdateImage, isImageReady } from '../graphic/helper/image';\nimport { getCanvasGradient, isClipPathChanged } from './helper';\nimport Path, { PathStyleProps } from '../graphic/Path';\nimport ZRImage, { ImageStyleProps } from '../graphic/Image';\nimport TSpan, {TSpanStyleProps} from '../graphic/TSpan';\nimport { DEFAULT_FONT } from '../contain/text';\nimport { MatrixArray } from '../core/matrix';\nimport { map } from '../core/util';\nimport { normalizeLineDash } from '../graphic/helper/dashStyle';\nimport IncrementalDisplayable from '../graphic/IncrementalDisplayable';\nimport { REDARAW_BIT, SHAPE_CHANGED_BIT } from '../graphic/constants';\n\nconst pathProxyForDraw = new PathProxy(true);\n\n// Not use el#hasStroke because style may be different.\nfunction styleHasStroke(style: PathStyleProps) {\n const stroke = style.stroke;\n return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\n}\n\n// ignore lineWidth and must be string\n// Expected color but found '[' when color is gradient\nfunction isValidStrokeFillStyle(\n strokeOrFill: PathStyleProps['stroke'] | PathStyleProps['fill']\n): strokeOrFill is string {\n return typeof strokeOrFill === 'string' && strokeOrFill !== 'none';\n}\n\nfunction styleHasFill(style: PathStyleProps) {\n const fill = style.fill;\n return fill != null && fill !== 'none';\n}\nfunction doFillPath(ctx: CanvasRenderingContext2D, style: PathStyleProps) {\n if (style.fillOpacity != null && style.fillOpacity !== 1) {\n const originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.fillOpacity * style.opacity;\n ctx.fill();\n // Set back globalAlpha\n ctx.globalAlpha = originalGlobalAlpha;\n }\n else {\n ctx.fill();\n }\n}\n\nfunction doStrokePath(ctx: CanvasRenderingContext2D, style: PathStyleProps) {\n if (style.strokeOpacity != null && style.strokeOpacity !== 1) {\n const originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.strokeOpacity * style.opacity;\n ctx.stroke();\n // Set back globalAlpha\n ctx.globalAlpha = originalGlobalAlpha;\n }\n else {\n ctx.stroke();\n }\n}\n\nexport function createCanvasPattern(\n this: void,\n ctx: CanvasRenderingContext2D,\n pattern: ImagePatternObject,\n el: {dirty: () => void}\n): CanvasPattern {\n const image = createOrUpdateImage(pattern.image, (pattern as InnerImagePatternObject).__image, el);\n if (isImageReady(image)) {\n const canvasPattern = ctx.createPattern(image, pattern.repeat || 'repeat');\n if (\n typeof DOMMatrix === 'function'\n && canvasPattern.setTransform // setTransform may not be supported in some old devices.\n ) {\n const matrix = new DOMMatrix();\n matrix.rotateSelf(0, 0, (pattern.rotation || 0) / Math.PI * 180);\n matrix.scaleSelf((pattern.scaleX || 1), (pattern.scaleY || 1));\n matrix.translateSelf((pattern.x || 0), (pattern.y || 0));\n canvasPattern.setTransform(matrix);\n }\n return canvasPattern;\n }\n}\n\n// Draw Path Elements\nfunction brushPath(ctx: CanvasRenderingContext2D, el: Path, style: PathStyleProps, inBatch: boolean) {\n let hasStroke = styleHasStroke(style);\n let hasFill = styleHasFill(style);\n\n const strokePercent = style.strokePercent;\n const strokePart = strokePercent < 1;\n\n // TODO Reduce path memory cost.\n const firstDraw = !el.path;\n // Create path for each element when:\n // 1. Element has interactions.\n // 2. Element draw part of the line.\n if ((!el.silent || strokePart) && firstDraw) {\n el.createPathProxy();\n }\n\n const path = el.path || pathProxyForDraw;\n\n if (!inBatch) {\n const fill = style.fill;\n const stroke = style.stroke;\n\n const hasFillGradient = hasFill && !!(fill as GradientObject).colorStops;\n const hasStrokeGradient = hasStroke && !!(stroke as GradientObject).colorStops;\n const hasFillPattern = hasFill && !!(fill as ImagePatternObject).image;\n const hasStrokePattern = hasStroke && !!(stroke as ImagePatternObject).image;\n\n let fillGradient;\n let strokeGradient;\n let fillPattern;\n let strokePattern;\n let rect;\n if (hasFillGradient || hasStrokeGradient) {\n rect = el.getBoundingRect();\n }\n // Update gradient because bounding rect may changed\n if (hasFillGradient) {\n fillGradient = el.__dirty\n ? getCanvasGradient(ctx, fill as (LinearGradientObject | RadialGradientObject), rect)\n : el.__canvasFillGradient;\n // No need to clear cache when fill is not gradient.\n // It will always been updated when fill changed back to gradient.\n el.__canvasFillGradient = fillGradient;\n }\n if (hasStrokeGradient) {\n strokeGradient = el.__dirty\n ? getCanvasGradient(ctx, stroke as (LinearGradientObject | RadialGradientObject), rect)\n : el.__canvasStrokeGradient;\n el.__canvasStrokeGradient = strokeGradient;\n }\n if (hasFillPattern) {\n // Pattern might be null if image not ready (even created from dataURI)\n fillPattern = (el.__dirty || !el.__canvasFillPattern)\n ? createCanvasPattern(ctx, fill as ImagePatternObject, el)\n : el.__canvasFillPattern;\n el.__canvasFillPattern = fillPattern;\n }\n if (hasStrokePattern) {\n // Pattern might be null if image not ready (even created from dataURI)\n strokePattern = (el.__dirty || !el.__canvasStrokePattern)\n ? createCanvasPattern(ctx, stroke as ImagePatternObject, el)\n : el.__canvasStrokePattern;\n el.__canvasStrokePattern = fillPattern;\n }\n // Use the gradient or pattern\n if (hasFillGradient) {\n // PENDING If may have affect the state\n ctx.fillStyle = fillGradient;\n }\n else if (hasFillPattern) {\n if (fillPattern) { // createCanvasPattern may return false if image is not ready.\n ctx.fillStyle = fillPattern;\n }\n else {\n // Don't fill if image is not ready\n hasFill = false;\n }\n }\n if (hasStrokeGradient) {\n ctx.strokeStyle = strokeGradient;\n }\n else if (hasStrokePattern) {\n if (strokePattern) {\n ctx.strokeStyle = strokePattern;\n }\n else {\n // Don't stroke if image is not ready\n hasStroke = false;\n }\n }\n }\n\n let lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth);\n let lineDashOffset = style.lineDashOffset;\n\n const ctxLineDash = !!ctx.setLineDash;\n\n // Update path sx, sy\n const scale = el.getGlobalScale();\n path.setScale(scale[0], scale[1], el.segmentIgnoreThreshold);\n\n if (lineDash) {\n const lineScale = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1;\n if (lineScale && lineScale !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / lineScale;\n });\n lineDashOffset /= lineScale;\n }\n }\n\n let needsRebuild = true;\n // Proxy context\n // Rebuild path in following 2 cases\n // 1. Path is dirty\n // 2. Path needs javascript implemented lineDash stroking.\n // In this case, lineDash information will not be saved in PathProxy\n if (firstDraw || (el.__dirty & SHAPE_CHANGED_BIT)\n || (lineDash && !ctxLineDash && hasStroke)\n ) {\n path.setDPR((ctx as any).dpr);\n if (strokePart) {\n // Use rebuildPath for percent stroke, so no context.\n path.setContext(null);\n }\n else {\n path.setContext(ctx);\n needsRebuild = false;\n }\n path.reset();\n\n // Setting line dash before build path\n if (lineDash && !ctxLineDash) {\n path.setLineDash(lineDash);\n path.setLineDashOffset(lineDashOffset);\n }\n\n el.buildPath(path, el.shape, inBatch);\n path.toStatic();\n\n // Clear path dirty flag\n el.pathUpdated();\n }\n\n // Not support separate fill and stroke. For the compatibility of SVG\n if (needsRebuild) {\n path.rebuildPath(ctx, strokePart ? strokePercent : 1);\n }\n\n if (lineDash && ctxLineDash) {\n ctx.setLineDash(lineDash);\n ctx.lineDashOffset = lineDashOffset;\n }\n\n if (!inBatch) {\n if (style.strokeFirst) {\n if (hasStroke) {\n doStrokePath(ctx, style);\n }\n if (hasFill) {\n doFillPath(ctx, style);\n }\n }\n else {\n if (hasFill) {\n doFillPath(ctx, style);\n }\n if (hasStroke) {\n doStrokePath(ctx, style);\n }\n }\n }\n\n if (lineDash && ctxLineDash) {\n // PENDING\n // Remove lineDash\n ctx.setLineDash([]);\n }\n}\n\n// Draw Image Elements\nfunction brushImage(ctx: CanvasRenderingContext2D, el: ZRImage, style: ImageStyleProps) {\n const image = el.__image = createOrUpdateImage(\n style.image,\n el.__image,\n el,\n el.onload\n );\n\n if (!image || !isImageReady(image)) {\n return;\n }\n\n const x = style.x || 0;\n const y = style.y || 0;\n let width = el.getWidth();\n let height = el.getHeight();\n const aspect = image.width / image.height;\n if (width == null && height != null) {\n // Keep image/height ratio\n width = height * aspect;\n }\n else if (height == null && width != null) {\n height = width / aspect;\n }\n else if (width == null && height == null) {\n width = image.width;\n height = image.height;\n }\n\n if (style.sWidth && style.sHeight) {\n const sx = style.sx || 0;\n const sy = style.sy || 0;\n ctx.drawImage(\n image,\n sx, sy, style.sWidth, style.sHeight,\n x, y, width, height\n );\n }\n else if (style.sx && style.sy) {\n const sx = style.sx;\n const sy = style.sy;\n const sWidth = width - sx;\n const sHeight = height - sy;\n ctx.drawImage(\n image,\n sx, sy, sWidth, sHeight,\n x, y, width, height\n );\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n}\n\n// Draw Text Elements\nfunction brushText(ctx: CanvasRenderingContext2D, el: TSpan, style: TSpanStyleProps) {\n\n let text = style.text;\n // Convert to string\n text != null && (text += '');\n\n if (text) {\n ctx.font = style.font || DEFAULT_FONT;\n ctx.textAlign = style.textAlign;\n ctx.textBaseline = style.textBaseline;\n\n let hasLineDash;\n if (ctx.setLineDash) {\n let lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth);\n let lineDashOffset = style.lineDashOffset;\n if (lineDash) {\n const lineScale = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1;\n if (lineScale && lineScale !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / lineScale;\n });\n lineDashOffset /= lineScale;\n }\n ctx.setLineDash(lineDash);\n ctx.lineDashOffset = lineDashOffset;\n\n hasLineDash = true;\n }\n }\n\n if (style.strokeFirst) {\n if (styleHasStroke(style)) {\n ctx.strokeText(text, style.x, style.y);\n }\n if (styleHasFill(style)) {\n ctx.fillText(text, style.x, style.y);\n }\n }\n else {\n if (styleHasFill(style)) {\n ctx.fillText(text, style.x, style.y);\n }\n if (styleHasStroke(style)) {\n ctx.strokeText(text, style.x, style.y);\n }\n }\n\n if (hasLineDash) {\n // Remove lineDash\n ctx.setLineDash([]);\n }\n }\n\n}\n\nconst SHADOW_NUMBER_PROPS = ['shadowBlur', 'shadowOffsetX', 'shadowOffsetY'] as const;\nconst STROKE_PROPS = [\n ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]\n] as const;\n\ntype AllStyleOption = PathStyleProps | TSpanStyleProps | ImageStyleProps;\n// type ShadowPropNames = typeof SHADOW_PROPS[number][0];\n// type StrokePropNames = typeof STROKE_PROPS[number][0];\n// type DrawPropNames = typeof DRAW_PROPS[number][0];\n\nfunction bindCommonProps(\n ctx: CanvasRenderingContext2D,\n style: AllStyleOption,\n prevStyle: AllStyleOption,\n forceSetAll: boolean,\n scope: BrushScope\n): boolean {\n let styleChanged = false;\n\n if (!forceSetAll) {\n prevStyle = prevStyle || {};\n\n // Shared same style.\n if (style === prevStyle) {\n return false;\n }\n }\n if (forceSetAll || style.opacity !== prevStyle.opacity) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n // Ensure opacity is between 0 ~ 1. Invalid opacity will lead to a failure set and use the leaked opacity from the previous.\n const opacity = Math.max(Math.min(style.opacity, 1), 0);\n ctx.globalAlpha = isNaN(opacity) ? DEFAULT_COMMON_STYLE.opacity : opacity;\n }\n\n if (forceSetAll || style.blend !== prevStyle.blend) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalCompositeOperation = style.blend || DEFAULT_COMMON_STYLE.blend;\n }\n for (let i = 0; i < SHADOW_NUMBER_PROPS.length; i++) {\n const propName = SHADOW_NUMBER_PROPS[i];\n if (forceSetAll || style[propName] !== prevStyle[propName]) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n // FIXME Invalid property value will cause style leak from previous element.\n ctx[propName] = (ctx as ZRCanvasRenderingContext).dpr * (style[propName] || 0);\n }\n }\n if (forceSetAll || style.shadowColor !== prevStyle.shadowColor) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.shadowColor = style.shadowColor || DEFAULT_COMMON_STYLE.shadowColor;\n }\n return styleChanged;\n}\n\nfunction bindPathAndTextCommonStyle(\n ctx: CanvasRenderingContext2D,\n el: TSpan | Path,\n prevEl: TSpan | Path,\n forceSetAll: boolean,\n scope: BrushScope\n) {\n const style = getStyle(el, scope.inHover);\n const prevStyle = forceSetAll\n ? null\n : (prevEl && getStyle(prevEl, scope.inHover) || {});\n // Shared same style. prevStyle will be null if forceSetAll.\n if (style === prevStyle) {\n return false;\n }\n\n let styleChanged = bindCommonProps(ctx, style, prevStyle, forceSetAll, scope);\n\n if (forceSetAll || style.fill !== prevStyle.fill) {\n if (!styleChanged) {\n // Flush before set\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n isValidStrokeFillStyle(style.fill) && (ctx.fillStyle = style.fill);\n }\n if (forceSetAll || style.stroke !== prevStyle.stroke) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n isValidStrokeFillStyle(style.stroke) && (ctx.strokeStyle = style.stroke);\n }\n if (forceSetAll || style.opacity !== prevStyle.opacity) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;\n }\n if (el.hasStroke()) {\n const lineWidth = style.lineWidth;\n const newLineWidth = lineWidth / (\n (style.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1\n );\n if (ctx.lineWidth !== newLineWidth) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.lineWidth = newLineWidth;\n }\n }\n\n for (let i = 0; i < STROKE_PROPS.length; i++) {\n const prop = STROKE_PROPS[i];\n const propName = prop[0];\n if (forceSetAll || style[propName] !== prevStyle[propName]) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n // FIXME Invalid property value will cause style leak from previous element.\n (ctx as any)[propName] = style[propName] || prop[1];\n }\n }\n\n return styleChanged;\n}\n\nfunction bindImageStyle(\n ctx: CanvasRenderingContext2D,\n el: ZRImage,\n prevEl: ZRImage,\n // forceSetAll must be true if prevEl is null\n forceSetAll: boolean,\n scope: BrushScope\n) {\n return bindCommonProps(\n ctx,\n getStyle(el, scope.inHover),\n prevEl && getStyle(prevEl, scope.inHover),\n forceSetAll,\n scope\n );\n}\n\nfunction setContextTransform(ctx: CanvasRenderingContext2D, el: Displayable) {\n const m = el.transform;\n const dpr = (ctx as ZRCanvasRenderingContext).dpr || 1;\n if (m) {\n ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);\n }\n else {\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n}\n\nfunction updateClipStatus(clipPaths: Path[], ctx: CanvasRenderingContext2D, scope: BrushScope) {\n let allClipped = false;\n for (let i = 0; i < clipPaths.length; i++) {\n const clipPath = clipPaths[i];\n // Ignore draw following elements if clipPath has zero area.\n allClipped = allClipped || clipPath.isZeroArea();\n\n setContextTransform(ctx, clipPath);\n ctx.beginPath();\n clipPath.buildPath(ctx, clipPath.shape);\n ctx.clip();\n }\n scope.allClipped = allClipped;\n}\n\nfunction isTransformChanged(m0: MatrixArray, m1: MatrixArray): boolean {\n if (m0 && m1) {\n return m0[0] !== m1[0]\n || m0[1] !== m1[1]\n || m0[2] !== m1[2]\n || m0[3] !== m1[3]\n || m0[4] !== m1[4]\n || m0[5] !== m1[5];\n }\n else if (!m0 && !m1) { // All identity matrix.\n return false;\n }\n\n return true;\n}\n\nconst DRAW_TYPE_PATH = 1;\nconst DRAW_TYPE_IMAGE = 2;\nconst DRAW_TYPE_TEXT = 3;\nconst DRAW_TYPE_INCREMENTAL = 4;\n\nexport type BrushScope = {\n inHover: boolean\n\n // width / height of viewport\n viewWidth: number\n viewHeight: number\n\n // Status for clipping\n prevElClipPaths?: Path[]\n prevEl?: Displayable\n allClipped?: boolean // If the whole element can be clipped\n\n // Status for batching\n batchFill?: string\n batchStroke?: string\n\n lastDrawType?: number\n}\n\n// If path can be batched\nfunction canPathBatch(style: PathStyleProps) {\n\n const hasFill = styleHasFill(style);\n const hasStroke = styleHasStroke(style);\n\n return !(\n // Line dash is dynamically set in brush function.\n style.lineDash\n // Can't batch if element is both set fill and stroke. Or both not set\n || !(+hasFill ^ +hasStroke)\n // Can't batch if element is drawn with gradient or pattern.\n || (hasFill && typeof style.fill !== 'string')\n || (hasStroke && typeof style.stroke !== 'string')\n // Can't batch if element only stroke part of line.\n || style.strokePercent < 1\n // Has stroke or fill opacity\n || style.strokeOpacity < 1\n || style.fillOpacity < 1\n );\n}\n\nfunction flushPathDrawn(ctx: CanvasRenderingContext2D, scope: BrushScope) {\n // Force flush all after drawn last element\n scope.batchFill && ctx.fill();\n scope.batchStroke && ctx.stroke();\n scope.batchFill = '';\n scope.batchStroke = '';\n}\n\nfunction getStyle(el: Displayable, inHover?: boolean) {\n return inHover ? (el.__hoverStyle || el.style) : el.style;\n}\n\nexport function brushSingle(ctx: CanvasRenderingContext2D, el: Displayable) {\n brush(ctx, el, { inHover: false, viewWidth: 0, viewHeight: 0 }, true);\n}\n\n// Brush different type of elements.\nexport function brush(\n ctx: CanvasRenderingContext2D,\n el: Displayable,\n scope: BrushScope,\n isLast: boolean\n) {\n const m = el.transform;\n\n if (!el.shouldBePainted(scope.viewWidth, scope.viewHeight, false, false)) {\n // Needs to mark el rendered.\n // Or this element will always been rendered in progressive rendering.\n // But other dirty bit should not be cleared, otherwise it cause the shape\n // can not be updated in this case.\n el.__dirty &= ~REDARAW_BIT;\n el.__isRendered = false;\n return;\n }\n\n // HANDLE CLIPPING\n const clipPaths = el.__clipPaths;\n const prevElClipPaths = scope.prevElClipPaths;\n\n let forceSetTransform = false;\n let forceSetStyle = false;\n // Optimize when clipping on group with several elements\n if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n // If has previous clipping state, restore from it\n if (prevElClipPaths && prevElClipPaths.length) {\n // Flush restore\n flushPathDrawn(ctx, scope);\n\n ctx.restore();\n // Must set all style and transform because context changed by restore\n forceSetStyle = forceSetTransform = true;\n\n scope.prevElClipPaths = null;\n scope.allClipped = false;\n // Reset prevEl since context has been restored\n scope.prevEl = null;\n }\n // New clipping state\n if (clipPaths && clipPaths.length) {\n // Flush before clip\n flushPathDrawn(ctx, scope);\n\n ctx.save();\n updateClipStatus(clipPaths, ctx, scope);\n // Must set transform because it's changed when clip.\n forceSetTransform = true;\n }\n scope.prevElClipPaths = clipPaths;\n }\n\n // Not rendering elements if it's clipped by a zero area path.\n // Or it may cause bug on some version of IE11 (like 11.0.9600.178**),\n // where exception \"unexpected call to method or property access\"\n // might be thrown when calling ctx.fill or ctx.stroke after a path\n // whose area size is zero is drawn and ctx.clip() is called and\n // shadowBlur is set. See #4572, #3112, #5777.\n // (e.g.,\n // ctx.moveTo(10, 10);\n // ctx.lineTo(20, 10);\n // ctx.closePath();\n // ctx.clip();\n // ctx.shadowBlur = 10;\n // ...\n // ctx.fill();\n // )\n if (scope.allClipped) {\n el.__isRendered = false;\n return;\n }\n\n // START BRUSH\n el.beforeBrush && el.beforeBrush();\n el.innerBeforeBrush();\n\n const prevEl = scope.prevEl;\n // TODO el type changed.\n if (!prevEl) {\n forceSetStyle = forceSetTransform = true;\n }\n\n let canBatchPath = el instanceof Path // Only path supports batch\n && el.autoBatch\n && canPathBatch(el.style);\n\n if (forceSetTransform || isTransformChanged(m, prevEl.transform)) {\n // Flush\n flushPathDrawn(ctx, scope);\n setContextTransform(ctx, el);\n }\n else if (!canBatchPath) {\n // Flush\n flushPathDrawn(ctx, scope);\n }\n\n const style = getStyle(el, scope.inHover);\n if (el instanceof Path) {\n // PENDING do we need to rebind all style if displayable type changed?\n if (scope.lastDrawType !== DRAW_TYPE_PATH) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_PATH;\n }\n\n bindPathAndTextCommonStyle(ctx, el as Path, prevEl as Path, forceSetStyle, scope);\n // Begin path at start\n if (!canBatchPath || (!scope.batchFill && !scope.batchStroke)) {\n ctx.beginPath();\n }\n brushPath(ctx, el as Path, style, canBatchPath);\n\n if (canBatchPath) {\n scope.batchFill = style.fill as string || '';\n scope.batchStroke = style.stroke as string || '';\n }\n }\n else {\n if (el instanceof TSpan) {\n if (scope.lastDrawType !== DRAW_TYPE_TEXT) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_TEXT;\n }\n\n bindPathAndTextCommonStyle(ctx, el as TSpan, prevEl as TSpan, forceSetStyle, scope);\n brushText(ctx, el as TSpan, style);\n }\n else if (el instanceof ZRImage) {\n if (scope.lastDrawType !== DRAW_TYPE_IMAGE) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_IMAGE;\n }\n\n bindImageStyle(ctx, el as ZRImage, prevEl as ZRImage, forceSetStyle, scope);\n brushImage(ctx, el as ZRImage, style);\n }\n else if (el instanceof IncrementalDisplayable) {\n if (scope.lastDrawType !== DRAW_TYPE_INCREMENTAL) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_INCREMENTAL;\n }\n\n brushIncremental(ctx, el, scope);\n }\n\n }\n\n if (canBatchPath && isLast) {\n flushPathDrawn(ctx, scope);\n }\n\n el.innerAfterBrush();\n el.afterBrush && el.afterBrush();\n\n scope.prevEl = el;\n\n // Mark as painted.\n el.__dirty = 0;\n el.__isRendered = true;\n}\n\nfunction brushIncremental(\n ctx: CanvasRenderingContext2D,\n el: IncrementalDisplayable,\n scope: BrushScope\n) {\n let displayables = el.getDisplayables();\n let temporalDisplayables = el.getTemporalDisplayables();\n // Provide an inner scope.\n // Save current context and restore after brushed.\n ctx.save();\n let innerScope: BrushScope = {\n prevElClipPaths: null,\n prevEl: null,\n allClipped: false,\n viewWidth: scope.viewWidth,\n viewHeight: scope.viewHeight,\n inHover: scope.inHover\n };\n let i;\n let len;\n // Render persistant displayables.\n for (i = el.getCursor(), len = displayables.length; i < len; i++) {\n const displayable = displayables[i];\n displayable.beforeBrush && displayable.beforeBrush();\n displayable.innerBeforeBrush();\n brush(ctx, displayable, innerScope, i === len - 1);\n displayable.innerAfterBrush();\n displayable.afterBrush && displayable.afterBrush();\n innerScope.prevEl = displayable;\n }\n // Render temporary displayables.\n for (let i = 0, len = temporalDisplayables.length; i < len; i++) {\n const displayable = temporalDisplayables[i];\n displayable.beforeBrush && displayable.beforeBrush();\n displayable.innerBeforeBrush();\n brush(ctx, displayable, innerScope, i === len - 1);\n displayable.innerAfterBrush();\n displayable.afterBrush && displayable.afterBrush();\n innerScope.prevEl = displayable;\n }\n el.clearTemporalDisplayables();\n el.notClear = true;\n\n ctx.restore();\n}","import * as util from '../core/util';\nimport {devicePixelRatio} from '../config';\nimport { ImagePatternObject } from '../graphic/Pattern';\nimport CanvasPainter from './Painter';\nimport { GradientObject, InnerGradientObject } from '../graphic/Gradient';\nimport { ZRCanvasRenderingContext } from '../core/types';\nimport Eventful from '../core/Eventful';\nimport { ElementEventCallback } from '../Element';\nimport { getCanvasGradient } from './helper';\nimport { createCanvasPattern } from './graphic';\nimport Displayable from '../graphic/Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport { REDARAW_BIT } from '../graphic/constants';\n\nfunction returnFalse() {\n return false;\n}\n\nfunction createDom(id: string, painter: CanvasPainter, dpr: number) {\n const newDom = util.createCanvas();\n const width = painter.getWidth();\n const height = painter.getHeight();\n\n const newDomStyle = newDom.style;\n if (newDomStyle) { // In node or some other non-browser environment\n newDomStyle.position = 'absolute';\n newDomStyle.left = '0';\n newDomStyle.top = '0';\n newDomStyle.width = width + 'px';\n newDomStyle.height = height + 'px';\n\n newDom.setAttribute('data-zr-dom-id', id);\n }\n\n newDom.width = width * dpr;\n newDom.height = height * dpr;\n\n return newDom;\n}\n\nexport interface LayerConfig {\n // 每次清空画布的颜色\n clearColor?: string | GradientObject | ImagePatternObject\n // 是否开启动态模糊\n motionBlur?: boolean\n // 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n lastFrameAlpha?: number\n};\n\nexport default class Layer extends Eventful {\n\n id: string\n\n dom: HTMLCanvasElement\n domBack: HTMLCanvasElement\n\n ctx: CanvasRenderingContext2D\n ctxBack: CanvasRenderingContext2D\n\n painter: CanvasPainter\n\n // Configs\n /**\n * 每次清空画布的颜色\n */\n clearColor: string | GradientObject | ImagePatternObject\n /**\n * 是否开启动态模糊\n */\n motionBlur = false\n /**\n * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n */\n lastFrameAlpha = 0.7\n /**\n * Layer dpr\n */\n dpr = 1\n\n /**\n * Virtual layer will not be inserted into dom.\n */\n virtual = false\n\n config = {}\n\n incremental = false\n\n zlevel = 0\n\n maxRepaintRectCount = 5\n\n private _paintRects: BoundingRect[]\n\n __painter: CanvasPainter\n\n __dirty = true\n __firstTimePaint = true\n\n __used = false\n\n __drawIndex = 0\n __startIndex = 0\n __endIndex = 0\n\n // indices in the previous frame\n __prevStartIndex: number = null\n __prevEndIndex: number = null\n\n __builtin__: boolean\n\n constructor(id: string | HTMLCanvasElement, painter: CanvasPainter, dpr?: number) {\n super();\n\n let dom;\n dpr = dpr || devicePixelRatio;\n if (typeof id === 'string') {\n dom = createDom(id, painter, dpr);\n }\n // Not using isDom because in node it will return false\n else if (util.isObject(id)) {\n dom = id;\n id = dom.id;\n }\n this.id = id as string;\n this.dom = dom;\n\n const domStyle = dom.style;\n if (domStyle) { // Not in node\n dom.onselectstart = returnFalse; // 避免页面选中的尴尬\n domStyle.webkitUserSelect = 'none';\n domStyle.userSelect = 'none';\n domStyle.webkitTapHighlightColor = 'rgba(0,0,0,0)';\n (domStyle as any)['-webkit-touch-callout'] = 'none';\n domStyle.padding = '0';\n domStyle.margin = '0';\n domStyle.borderWidth = '0';\n }\n\n this.domBack = null;\n this.ctxBack = null;\n\n this.painter = painter;\n\n this.config = null;\n\n this.dpr = dpr;\n }\n\n getElementCount() {\n return this.__endIndex - this.__startIndex;\n }\n\n afterBrush() {\n this.__prevStartIndex = this.__startIndex;\n this.__prevEndIndex = this.__endIndex;\n }\n\n initContext() {\n this.ctx = this.dom.getContext('2d');\n (this.ctx as ZRCanvasRenderingContext).dpr = this.dpr;\n }\n\n setUnpainted() {\n this.__firstTimePaint = true;\n }\n\n createBackBuffer() {\n const dpr = this.dpr;\n\n this.domBack = createDom('back-' + this.id, this.painter, dpr);\n this.ctxBack = this.domBack.getContext('2d');\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n\n /**\n * Create repaint list when using dirty rect rendering.\n *\n * @param displayList current rendering list\n * @param prevList last frame rendering list\n * @return repaint rects. null for the first frame, [] for no element dirty\n */\n createRepaintRects(\n displayList: Displayable[],\n prevList: Displayable[],\n viewWidth: number,\n viewHeight: number\n ) {\n if (this.__firstTimePaint) {\n this.__firstTimePaint = false;\n return null;\n }\n\n const mergedRepaintRects: BoundingRect[] = [];\n const maxRepaintRectCount = this.maxRepaintRectCount;\n let full = false;\n const pendingRect = new BoundingRect(0, 0, 0, 0);\n\n function addRectToMergePool(rect: BoundingRect) {\n if (!rect.isFinite() || rect.isZero()) {\n return;\n }\n\n if (mergedRepaintRects.length === 0) {\n // First rect, create new merged rect\n const boundingRect = new BoundingRect(0, 0, 0, 0);\n boundingRect.copy(rect);\n mergedRepaintRects.push(boundingRect);\n }\n else {\n let isMerged = false;\n let minDeltaArea = Infinity;\n let bestRectToMergeIdx = 0;\n for (let i = 0; i < mergedRepaintRects.length; ++i) {\n const mergedRect = mergedRepaintRects[i];\n\n // Merge if has intersection\n if (mergedRect.intersect(rect)) {\n const pendingRect = new BoundingRect(0, 0, 0, 0);\n pendingRect.copy(mergedRect);\n pendingRect.union(rect);\n mergedRepaintRects[i] = pendingRect;\n isMerged = true;\n break;\n }\n else if (full) {\n // Merged to exists rectangles if full\n pendingRect.copy(rect);\n pendingRect.union(mergedRect);\n const aArea = rect.width * rect.height;\n const bArea = mergedRect.width * mergedRect.height;\n const pendingArea = pendingRect.width * pendingRect.height;\n const deltaArea = pendingArea - aArea - bArea;\n if (deltaArea < minDeltaArea) {\n minDeltaArea = deltaArea;\n bestRectToMergeIdx = i;\n }\n }\n }\n\n if (full) {\n mergedRepaintRects[bestRectToMergeIdx].union(rect);\n isMerged = true;\n }\n\n if (!isMerged) {\n // Create new merged rect if cannot merge with current\n const boundingRect = new BoundingRect(0, 0, 0, 0);\n boundingRect.copy(rect);\n mergedRepaintRects.push(boundingRect);\n }\n if (!full) {\n full = mergedRepaintRects.length >= maxRepaintRectCount;\n }\n }\n }\n\n /**\n * Loop the paint list of this frame and get the dirty rects of elements\n * in this frame.\n */\n for (let i = this.__startIndex; i < this.__endIndex; ++i) {\n const el = displayList[i];\n if (el) {\n /**\n * `shouldPaint` is true only when the element is not ignored or\n * invisible and all its ancestors are not ignored.\n * `shouldPaint` being true means it will be brushed this frame.\n *\n * `__isRendered` being true means the element is currently on\n * the canvas.\n *\n * `__dirty` being true means the element should be brushed this\n * frame.\n *\n * We only need to repaint the element's previous painting rect\n * if it's currently on the canvas and needs repaint this frame\n * or not painted this frame.\n */\n const shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true);\n const prevRect = el.__isRendered && ((el.__dirty & REDARAW_BIT) || !shouldPaint)\n ? el.getPrevPaintRect()\n : null;\n if (prevRect) {\n addRectToMergePool(prevRect);\n }\n\n /**\n * On the other hand, we only need to paint the current rect\n * if the element should be brushed this frame and either being\n * dirty or not rendered before.\n */\n const curRect = shouldPaint && ((el.__dirty & REDARAW_BIT) || !el.__isRendered)\n ? el.getPaintRect()\n : null;\n if (curRect) {\n addRectToMergePool(curRect);\n }\n }\n }\n\n /**\n * The above loop calculates the dirty rects of elements that are in the\n * paint list this frame, which does not include those elements removed\n * in this frame. So we loop the `prevList` to get the removed elements.\n */\n for (let i = this.__prevStartIndex; i < this.__prevEndIndex; ++i) {\n const el = prevList[i];\n /**\n * Consider the elements whose ancestors are invisible, they should\n * not be painted and their previous painting rects should be\n * cleared if they are rendered on the canvas (`__isRendered` being\n * true). `!shouldPaint` means the element is not brushed in this\n * frame.\n *\n * `!el.__zr` means it's removed from the storage.\n *\n * In conclusion, an element needs to repaint the previous painting\n * rect if and only if it's not painted this frame and was\n * previously painted on the canvas.\n */\n const shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true);\n if (el && (!shouldPaint || !el.__zr) && el.__isRendered) {\n // el was removed\n const prevRect = el.getPrevPaintRect();\n if (prevRect) {\n addRectToMergePool(prevRect);\n }\n }\n }\n\n // Merge intersected rects in the result\n let hasIntersections;\n do {\n hasIntersections = false;\n for (let i = 0; i < mergedRepaintRects.length;) {\n if (mergedRepaintRects[i].isZero()) {\n mergedRepaintRects.splice(i, 1);\n continue;\n }\n for (let j = i + 1; j < mergedRepaintRects.length;) {\n if (mergedRepaintRects[i].intersect(mergedRepaintRects[j])) {\n hasIntersections = true;\n mergedRepaintRects[i].union(mergedRepaintRects[j]);\n mergedRepaintRects.splice(j, 1);\n }\n else {\n j++;\n }\n }\n i++;\n }\n } while (hasIntersections);\n\n this._paintRects = mergedRepaintRects;\n\n return mergedRepaintRects;\n }\n\n /**\n * Get paint rects for debug usage.\n */\n debugGetPaintRects() {\n return (this._paintRects || []).slice();\n }\n\n resize(width: number, height: number) {\n const dpr = this.dpr;\n\n const dom = this.dom;\n const domStyle = dom.style;\n const domBack = this.domBack;\n\n if (domStyle) {\n domStyle.width = width + 'px';\n domStyle.height = height + 'px';\n }\n\n dom.width = width * dpr;\n dom.height = height * dpr;\n\n if (domBack) {\n domBack.width = width * dpr;\n domBack.height = height * dpr;\n\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n }\n\n /**\n * 清空该层画布\n */\n clear(\n clearAll?: boolean,\n clearColor?: string | GradientObject | ImagePatternObject,\n repaintRects?: BoundingRect[]\n ) {\n const dom = this.dom;\n const ctx = this.ctx;\n const width = dom.width;\n const height = dom.height;\n\n clearColor = clearColor || this.clearColor;\n const haveMotionBLur = this.motionBlur && !clearAll;\n const lastFrameAlpha = this.lastFrameAlpha;\n\n const dpr = this.dpr;\n const self = this;\n\n if (haveMotionBLur) {\n if (!this.domBack) {\n this.createBackBuffer();\n }\n\n this.ctxBack.globalCompositeOperation = 'copy';\n this.ctxBack.drawImage(\n dom, 0, 0,\n width / dpr,\n height / dpr\n );\n }\n\n const domBack = this.domBack;\n\n function doClear(x: number, y: number, width: number, height: number) {\n ctx.clearRect(x, y, width, height);\n if (clearColor && clearColor !== 'transparent') {\n let clearColorGradientOrPattern;\n // Gradient\n if (util.isGradientObject(clearColor)) {\n // Cache canvas gradient\n clearColorGradientOrPattern = (clearColor as InnerGradientObject).__canvasGradient\n || getCanvasGradient(ctx, clearColor, {\n x: 0,\n y: 0,\n width: width,\n height: height\n });\n\n (clearColor as InnerGradientObject).__canvasGradient = clearColorGradientOrPattern;\n }\n // Pattern\n else if (util.isImagePatternObject(clearColor)) {\n clearColorGradientOrPattern = createCanvasPattern(\n ctx, clearColor, {\n dirty() {\n // TODO\n self.setUnpainted();\n self.__painter.refresh();\n }\n }\n );\n }\n ctx.save();\n ctx.fillStyle = clearColorGradientOrPattern || (clearColor as string);\n ctx.fillRect(x, y, width, height);\n ctx.restore();\n }\n\n if (haveMotionBLur) {\n ctx.save();\n ctx.globalAlpha = lastFrameAlpha;\n ctx.drawImage(domBack, x, y, width, height);\n ctx.restore();\n }\n };\n\n if (!repaintRects || haveMotionBLur) {\n // Clear the full canvas\n doClear(0, 0, width, height);\n }\n else if (repaintRects.length) {\n // Clear the repaint areas\n util.each(repaintRects, rect => {\n doClear(\n rect.x * dpr,\n rect.y * dpr,\n rect.width * dpr,\n rect.height * dpr\n );\n });\n }\n }\n\n // Iterface of refresh\n refresh: (clearColor?: string | GradientObject | ImagePatternObject) => void\n\n // Interface of renderToCanvas in getRenderedCanvas\n renderToCanvas: (ctx: CanvasRenderingContext2D) => void\n\n // Events\n onclick: ElementEventCallback\n ondblclick: ElementEventCallback\n onmouseover: ElementEventCallback\n onmouseout: ElementEventCallback\n onmousemove: ElementEventCallback\n onmousewheel: ElementEventCallback\n onmousedown: ElementEventCallback\n onmouseup: ElementEventCallback\n oncontextmenu: ElementEventCallback\n\n ondrag: ElementEventCallback\n ondragstart: ElementEventCallback\n ondragend: ElementEventCallback\n ondragenter: ElementEventCallback\n ondragleave: ElementEventCallback\n ondragover: ElementEventCallback\n ondrop: ElementEventCallback\n}","import {devicePixelRatio} from '../config';\nimport * as util from '../core/util';\nimport Layer, { LayerConfig } from './Layer';\nimport requestAnimationFrame from '../animation/requestAnimationFrame';\nimport ZRImage from '../graphic/Image';\nimport env from '../core/env';\nimport Displayable from '../graphic/Displayable';\nimport { WXCanvasRenderingContext, ZRCanvasRenderingContext } from '../core/types';\nimport { GradientObject } from '../graphic/Gradient';\nimport { ImagePatternObject } from '../graphic/Pattern';\nimport Storage from '../Storage';\nimport { brush, BrushScope, brushSingle } from './graphic';\nimport { PainterBase } from '../PainterBase';\nimport BoundingRect from '../core/BoundingRect';\nimport IncrementalDisplayable from '../graphic/IncrementalDisplayable';\nimport Path from '../graphic/Path';\nimport { REDARAW_BIT } from '../graphic/constants';\n\nconst HOVER_LAYER_ZLEVEL = 1e5;\nconst CANVAS_ZLEVEL = 314159;\n\nconst EL_AFTER_INCREMENTAL_INC = 0.01;\nconst INCREMENTAL_INC = 0.001;\n\nfunction parseInt10(val: string) {\n return parseInt(val, 10);\n}\n\nfunction isLayerValid(layer: Layer) {\n if (!layer) {\n return false;\n }\n\n if (layer.__builtin__) {\n return true;\n }\n\n if (typeof (layer.resize) !== 'function'\n || typeof (layer.refresh) !== 'function'\n ) {\n return false;\n }\n\n return true;\n}\n\nfunction createRoot(width: number, height: number) {\n const domRoot = document.createElement('div');\n\n // domRoot.onselectstart = returnFalse; // Avoid page selected\n domRoot.style.cssText = [\n 'position:relative',\n // IOS13 safari probably has a compositing bug (z order of the canvas and the consequent\n // dom does not act as expected) when some of the parent dom has\n // `-webkit-overflow-scrolling: touch;` and the webpage is longer than one screen and\n // the canvas is not at the top part of the page.\n // Check `https://bugs.webkit.org/show_bug.cgi?id=203681` for more details. We remove\n // this `overflow:hidden` to avoid the bug.\n // 'overflow:hidden',\n 'width:' + width + 'px',\n 'height:' + height + 'px',\n 'padding:0',\n 'margin:0',\n 'border-width:0'\n ].join(';') + ';';\n\n return domRoot;\n}\n\ninterface CanvasPainterOption {\n devicePixelRatio?: number\n width?: number | string // Can be 10 / 10px / auto\n height?: number | string,\n useDirtyRect?: boolean\n}\n\nexport default class CanvasPainter implements PainterBase {\n\n type = 'canvas'\n\n root: HTMLElement\n\n dpr: number\n\n storage: Storage\n\n private _singleCanvas: boolean\n\n private _opts: CanvasPainterOption\n\n private _zlevelList: number[] = []\n\n private _prevDisplayList: Displayable[] = []\n\n private _layers: {[key: number]: Layer} = {} // key is zlevel\n\n private _layerConfig: {[key: number]: LayerConfig} = {} // key is zlevel\n\n /**\n * zrender will do compositing when root is a canvas and have multiple zlevels.\n */\n private _needsManuallyCompositing = false\n\n private _width: number\n private _height: number\n\n private _domRoot: HTMLElement\n\n private _hoverlayer: Layer\n\n private _redrawId: number\n\n private _backgroundColor: string | GradientObject | ImagePatternObject\n\n\n constructor(root: HTMLElement, storage: Storage, opts: CanvasPainterOption, id: number) {\n\n this.type = 'canvas';\n\n // In node environment using node-canvas\n const singleCanvas = !root.nodeName // In node ?\n || root.nodeName.toUpperCase() === 'CANVAS';\n\n this._opts = opts = util.extend({}, opts || {}) as CanvasPainterOption;\n\n /**\n * @type {number}\n */\n this.dpr = opts.devicePixelRatio || devicePixelRatio;\n /**\n * @type {boolean}\n * @private\n */\n this._singleCanvas = singleCanvas;\n /**\n * 绘图容器\n * @type {HTMLElement}\n */\n this.root = root;\n\n const rootStyle = root.style;\n\n if (rootStyle) {\n rootStyle.webkitTapHighlightColor = 'transparent';\n rootStyle.webkitUserSelect = 'none';\n rootStyle.userSelect = 'none';\n (rootStyle as any)['-webkit-touch-callout'] = 'none';\n\n root.innerHTML = '';\n }\n\n /**\n * @type {module:zrender/Storage}\n */\n this.storage = storage;\n\n const zlevelList: number[] = this._zlevelList;\n\n this._prevDisplayList = [];\n\n const layers = this._layers;\n\n if (!singleCanvas) {\n this._width = this._getSize(0);\n this._height = this._getSize(1);\n\n const domRoot = this._domRoot = createRoot(\n this._width, this._height\n );\n root.appendChild(domRoot);\n }\n else {\n const rootCanvas = root as HTMLCanvasElement;\n let width = rootCanvas.width;\n let height = rootCanvas.height;\n\n if (opts.width != null) {\n // TODO sting?\n width = opts.width as number;\n }\n if (opts.height != null) {\n // TODO sting?\n height = opts.height as number;\n }\n this.dpr = opts.devicePixelRatio || 1;\n\n // Use canvas width and height directly\n rootCanvas.width = width * this.dpr;\n rootCanvas.height = height * this.dpr;\n\n this._width = width;\n this._height = height;\n\n // Create layer if only one given canvas\n // Device can be specified to create a high dpi image.\n const mainLayer = new Layer(rootCanvas, this, this.dpr);\n mainLayer.__builtin__ = true;\n mainLayer.initContext();\n // FIXME Use canvas width and height\n // mainLayer.resize(width, height);\n layers[CANVAS_ZLEVEL] = mainLayer;\n mainLayer.zlevel = CANVAS_ZLEVEL;\n // Not use common zlevel.\n zlevelList.push(CANVAS_ZLEVEL);\n\n this._domRoot = root;\n }\n }\n\n\n getType() {\n return 'canvas';\n }\n\n /**\n * If painter use a single canvas\n */\n isSingleCanvas() {\n return this._singleCanvas;\n }\n\n getViewportRoot() {\n return this._domRoot;\n }\n\n getViewportRootOffset() {\n const viewportRoot = this.getViewportRoot();\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n }\n\n /**\n * 刷新\n * @param paintAll 强制绘制所有displayable\n */\n refresh(paintAll?: boolean) {\n const list = this.storage.getDisplayList(true);\n const prevList = this._prevDisplayList;\n\n const zlevelList = this._zlevelList;\n\n this._redrawId = Math.random();\n\n this._paintList(list, prevList, paintAll, this._redrawId);\n\n // Paint custum layers\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n const layer = this._layers[z];\n if (!layer.__builtin__ && layer.refresh) {\n const clearColor = i === 0 ? this._backgroundColor : null;\n layer.refresh(clearColor);\n }\n }\n\n if (this._opts.useDirtyRect) {\n this._prevDisplayList = list.slice();\n }\n\n return this;\n }\n\n\n refreshHover() {\n this._paintHoverList(this.storage.getDisplayList(false));\n }\n\n private _paintHoverList(list: Displayable[]) {\n let len = list.length;\n let hoverLayer = this._hoverlayer;\n hoverLayer && hoverLayer.clear();\n\n if (!len) {\n return;\n }\n\n const scope: BrushScope = {\n inHover: true,\n viewWidth: this._width,\n viewHeight: this._height\n };\n\n let ctx;\n for (let i = 0; i < len; i++) {\n const el = list[i];\n if (el.__inHover) {\n // Use a extream large zlevel\n // FIXME?\n if (!hoverLayer) {\n hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n\n if (!ctx) {\n ctx = hoverLayer.ctx;\n ctx.save();\n }\n\n brush(ctx, el, scope, i === len - 1);\n }\n }\n if (ctx) {\n ctx.restore();\n }\n }\n\n getHoverLayer() {\n return this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n\n paintOne(ctx: CanvasRenderingContext2D, el: Displayable) {\n brushSingle(ctx, el);\n }\n\n private _paintList(list: Displayable[], prevList: Displayable[], paintAll: boolean, redrawId?: number) {\n if (this._redrawId !== redrawId) {\n return;\n }\n\n paintAll = paintAll || false;\n\n this._updateLayerStatus(list);\n\n const {finished, needsRefreshHover} = this._doPaintList(list, prevList, paintAll);\n\n if (this._needsManuallyCompositing) {\n this._compositeManually();\n }\n\n if (needsRefreshHover) {\n this._paintHoverList(list);\n }\n\n if (!finished) {\n const self = this;\n requestAnimationFrame(function () {\n self._paintList(list, prevList, paintAll, redrawId);\n });\n }\n else {\n this.eachLayer(layer => {\n layer.afterBrush && layer.afterBrush();\n });\n }\n }\n\n private _compositeManually() {\n const ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n const width = (this._domRoot as HTMLCanvasElement).width;\n const height = (this._domRoot as HTMLCanvasElement).height;\n ctx.clearRect(0, 0, width, height);\n // PENDING, If only builtin layer?\n this.eachBuiltinLayer(function (layer) {\n if (layer.virtual) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n });\n }\n\n private _doPaintList(\n list: Displayable[],\n prevList: Displayable[],\n paintAll?: boolean\n ): {\n finished: boolean\n needsRefreshHover: boolean\n } {\n const layerList = [];\n const useDirtyRect = this._opts.useDirtyRect;\n for (let zi = 0; zi < this._zlevelList.length; zi++) {\n const zlevel = this._zlevelList[zi];\n const layer = this._layers[zlevel];\n if (layer.__builtin__\n && layer !== this._hoverlayer\n && (layer.__dirty || paintAll)\n // Layer with hover elements can't be redrawn.\n // && !layer.__hasHoverLayerELement\n ) {\n layerList.push(layer);\n }\n }\n\n let finished = true;\n let needsRefreshHover = false;\n\n for (let k = 0; k < layerList.length; k++) {\n const layer = layerList[k];\n const ctx = layer.ctx;\n\n const repaintRects = useDirtyRect\n && layer.createRepaintRects(list, prevList, this._width, this._height);\n\n let start = paintAll ? layer.__startIndex : layer.__drawIndex;\n\n const useTimer = !paintAll && layer.incremental && Date.now;\n const startTime = useTimer && Date.now();\n\n const clearColor = layer.zlevel === this._zlevelList[0]\n ? this._backgroundColor : null;\n\n // All elements in this layer are cleared.\n if (layer.__startIndex === layer.__endIndex) {\n layer.clear(false, clearColor, repaintRects);\n }\n else if (start === layer.__startIndex) {\n const firstEl = list[start];\n if (!firstEl.incremental || !(firstEl as IncrementalDisplayable).notClear || paintAll) {\n layer.clear(false, clearColor, repaintRects);\n }\n }\n if (start === -1) {\n console.error('For some unknown reason. drawIndex is -1');\n start = layer.__startIndex;\n }\n let i: number;\n /* eslint-disable-next-line */\n const repaint = (repaintRect?: BoundingRect) => {\n const scope: BrushScope = {\n inHover: false,\n allClipped: false,\n prevEl: null,\n viewWidth: this._width,\n viewHeight: this._height\n };\n\n for (i = start; i < layer.__endIndex; i++) {\n const el = list[i];\n\n if (el.__inHover) {\n needsRefreshHover = true;\n }\n\n this._doPaintEl(el, layer, useDirtyRect, repaintRect, scope, i === layer.__endIndex - 1);\n\n if (useTimer) {\n // Date.now can be executed in 13,025,305 ops/second.\n const dTime = Date.now() - startTime;\n // Give 15 millisecond to draw.\n // The rest elements will be drawn in the next frame.\n if (dTime > 15) {\n break;\n }\n }\n }\n\n if (scope.prevElClipPaths) {\n // Needs restore the state. If last drawn element is in the clipping area.\n ctx.restore();\n }\n };\n\n if (repaintRects) {\n if (repaintRects.length === 0) {\n // Nothing to repaint, mark as finished\n i = layer.__endIndex;\n }\n else {\n const dpr = this.dpr;\n // Set repaintRect as clipPath\n for (var r = 0; r < repaintRects.length; ++r) {\n const rect = repaintRects[r];\n\n ctx.save();\n ctx.beginPath();\n ctx.rect(\n rect.x * dpr,\n rect.y * dpr,\n rect.width * dpr,\n rect.height * dpr\n );\n ctx.clip();\n\n repaint(rect);\n ctx.restore();\n }\n }\n }\n else {\n // Paint all once\n ctx.save();\n repaint();\n ctx.restore();\n }\n\n layer.__drawIndex = i;\n\n if (layer.__drawIndex < layer.__endIndex) {\n finished = false;\n }\n }\n\n if (env.wxa) {\n // Flush for weixin application\n util.each(this._layers, function (layer) {\n if (layer && layer.ctx && (layer.ctx as WXCanvasRenderingContext).draw) {\n (layer.ctx as WXCanvasRenderingContext).draw();\n }\n });\n }\n\n return {\n finished,\n needsRefreshHover\n };\n }\n\n private _doPaintEl(\n el: Displayable,\n currentLayer: Layer,\n useDirtyRect: boolean,\n repaintRect: BoundingRect,\n scope: BrushScope,\n isLast: boolean\n ) {\n const ctx = currentLayer.ctx;\n if (useDirtyRect) {\n const paintRect = el.getPaintRect();\n if (!repaintRect || paintRect && paintRect.intersect(repaintRect)) {\n brush(ctx, el, scope, isLast);\n el.setPrevPaintRect(paintRect);\n }\n }\n else {\n brush(ctx, el, scope, isLast);\n }\n }\n\n /**\n * 获取 zlevel 所在层,如果不存在则会创建一个新的层\n * @param zlevel\n * @param virtual Virtual layer will not be inserted into dom.\n */\n getLayer(zlevel: number, virtual?: boolean) {\n if (this._singleCanvas && !this._needsManuallyCompositing) {\n zlevel = CANVAS_ZLEVEL;\n }\n let layer = this._layers[zlevel];\n if (!layer) {\n // Create a new layer\n layer = new Layer('zr_' + zlevel, this, this.dpr);\n layer.zlevel = zlevel;\n layer.__builtin__ = true;\n\n if (this._layerConfig[zlevel]) {\n util.merge(layer, this._layerConfig[zlevel], true);\n }\n // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) {\n util.merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true);\n }\n\n if (virtual) {\n layer.virtual = virtual;\n }\n\n this.insertLayer(zlevel, layer);\n\n // Context is created after dom inserted to document\n // Or excanvas will get 0px clientWidth and clientHeight\n layer.initContext();\n }\n\n return layer;\n }\n\n insertLayer(zlevel: number, layer: Layer) {\n\n const layersMap = this._layers;\n const zlevelList = this._zlevelList;\n const len = zlevelList.length;\n const domRoot = this._domRoot;\n let prevLayer = null;\n let i = -1;\n\n if (layersMap[zlevel]) {\n util.logError('ZLevel ' + zlevel + ' has been used already');\n return;\n }\n // Check if is a valid layer\n if (!isLayerValid(layer)) {\n util.logError('Layer of zlevel ' + zlevel + ' is not valid');\n return;\n }\n\n if (len > 0 && zlevel > zlevelList[0]) {\n for (i = 0; i < len - 1; i++) {\n if (\n zlevelList[i] < zlevel\n && zlevelList[i + 1] > zlevel\n ) {\n break;\n }\n }\n prevLayer = layersMap[zlevelList[i]];\n }\n zlevelList.splice(i + 1, 0, zlevel);\n\n layersMap[zlevel] = layer;\n\n // Vitual layer will not directly show on the screen.\n // (It can be a WebGL layer and assigned to a ZRImage element)\n // But it still under management of zrender.\n if (!layer.virtual) {\n if (prevLayer) {\n const prevDom = prevLayer.dom;\n if (prevDom.nextSibling) {\n domRoot.insertBefore(\n layer.dom,\n prevDom.nextSibling\n );\n }\n else {\n domRoot.appendChild(layer.dom);\n }\n }\n else {\n if (domRoot.firstChild) {\n domRoot.insertBefore(layer.dom, domRoot.firstChild);\n }\n else {\n domRoot.appendChild(layer.dom);\n }\n }\n }\n\n layer.__painter = this;\n }\n\n // Iterate each layer\n eachLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n const zlevelList = this._zlevelList;\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n cb.call(context, this._layers[z], z);\n }\n }\n\n // Iterate each buildin layer\n eachBuiltinLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n const zlevelList = this._zlevelList;\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n const layer = this._layers[z];\n if (layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n }\n\n // Iterate each other layer except buildin layer\n eachOtherLayer(cb: (this: T, layer: Layer, z: number) => void, context?: T) {\n const zlevelList = this._zlevelList;\n for (let i = 0; i < zlevelList.length; i++) {\n const z = zlevelList[i];\n const layer = this._layers[z];\n if (!layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n }\n\n /**\n * 获取所有已创建的层\n * @param prevLayer\n */\n getLayers() {\n return this._layers;\n }\n\n _updateLayerStatus(list: Displayable[]) {\n\n this.eachBuiltinLayer(function (layer, z) {\n layer.__dirty = layer.__used = false;\n });\n\n function updatePrevLayer(idx: number) {\n if (prevLayer) {\n if (prevLayer.__endIndex !== idx) {\n prevLayer.__dirty = true;\n }\n prevLayer.__endIndex = idx;\n }\n }\n\n if (this._singleCanvas) {\n for (let i = 1; i < list.length; i++) {\n const el = list[i];\n if (el.zlevel !== list[i - 1].zlevel || el.incremental) {\n this._needsManuallyCompositing = true;\n break;\n }\n }\n }\n\n let prevLayer: Layer = null;\n let incrementalLayerCount = 0;\n let prevZlevel;\n let i;\n\n for (i = 0; i < list.length; i++) {\n const el = list[i];\n const zlevel = el.zlevel;\n let layer;\n\n if (prevZlevel !== zlevel) {\n prevZlevel = zlevel;\n incrementalLayerCount = 0;\n }\n\n // TODO Not use magic number on zlevel.\n\n // Each layer with increment element can be separated to 3 layers.\n // (Other Element drawn after incremental element)\n // -----------------zlevel + EL_AFTER_INCREMENTAL_INC--------------------\n // (Incremental element)\n // ----------------------zlevel + INCREMENTAL_INC------------------------\n // (Element drawn before incremental element)\n // --------------------------------zlevel--------------------------------\n if (el.incremental) {\n layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n layer.incremental = true;\n incrementalLayerCount = 1;\n }\n else {\n layer = this.getLayer(\n zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0),\n this._needsManuallyCompositing\n );\n }\n\n if (!layer.__builtin__) {\n util.logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n }\n\n if (layer !== prevLayer) {\n layer.__used = true;\n if (layer.__startIndex !== i) {\n layer.__dirty = true;\n }\n layer.__startIndex = i;\n if (!layer.incremental) {\n layer.__drawIndex = i;\n }\n else {\n // Mark layer draw index needs to update.\n layer.__drawIndex = -1;\n }\n updatePrevLayer(i);\n prevLayer = layer;\n }\n if ((el.__dirty & REDARAW_BIT) && !el.__inHover) { // Ignore dirty elements in hover layer.\n layer.__dirty = true;\n if (layer.incremental && layer.__drawIndex < 0) {\n // Start draw from the first dirty element.\n layer.__drawIndex = i;\n }\n }\n }\n\n updatePrevLayer(i);\n\n this.eachBuiltinLayer(function (layer, z) {\n // Used in last frame but not in this frame. Needs clear\n if (!layer.__used && layer.getElementCount() > 0) {\n layer.__dirty = true;\n layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n }\n // For incremental layer. In case start index changed and no elements are dirty.\n if (layer.__dirty && layer.__drawIndex < 0) {\n layer.__drawIndex = layer.__startIndex;\n }\n });\n }\n\n /**\n * 清除hover层外所有内容\n */\n clear() {\n this.eachBuiltinLayer(this._clearLayer);\n return this;\n }\n\n _clearLayer(layer: Layer) {\n layer.clear();\n }\n\n setBackgroundColor(backgroundColor: string | GradientObject | ImagePatternObject) {\n this._backgroundColor = backgroundColor;\n\n util.each(this._layers, layer => {\n layer.setUnpainted();\n });\n }\n\n /**\n * 修改指定zlevel的绘制参数\n */\n configLayer(zlevel: number, config: LayerConfig) {\n if (config) {\n const layerConfig = this._layerConfig;\n if (!layerConfig[zlevel]) {\n layerConfig[zlevel] = config;\n }\n else {\n util.merge(layerConfig[zlevel], config, true);\n }\n\n for (let i = 0; i < this._zlevelList.length; i++) {\n const _zlevel = this._zlevelList[i];\n // TODO Remove EL_AFTER_INCREMENTAL_INC magic number\n if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n const layer = this._layers[_zlevel];\n util.merge(layer, layerConfig[zlevel], true);\n }\n }\n }\n }\n\n /**\n * 删除指定层\n * @param zlevel 层所在的zlevel\n */\n delLayer(zlevel: number) {\n const layers = this._layers;\n const zlevelList = this._zlevelList;\n const layer = layers[zlevel];\n if (!layer) {\n return;\n }\n layer.dom.parentNode.removeChild(layer.dom);\n delete layers[zlevel];\n\n zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n }\n\n /**\n * 区域大小变化后重绘\n */\n resize(\n width?: number | string,\n height?: number | string\n ) {\n if (!this._domRoot.style) { // Maybe in node or worker\n if (width == null || height == null) {\n return;\n }\n // TODO width / height may be string\n this._width = width as number;\n this._height = height as number;\n\n this.getLayer(CANVAS_ZLEVEL).resize(width as number, height as number);\n }\n else {\n const domRoot = this._domRoot;\n // FIXME Why ?\n domRoot.style.display = 'none';\n\n // Save input w/h\n const opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n\n width = this._getSize(0);\n height = this._getSize(1);\n\n domRoot.style.display = '';\n\n // 优化没有实际改变的resize\n if (this._width !== width || height !== this._height) {\n domRoot.style.width = width + 'px';\n domRoot.style.height = height + 'px';\n\n for (let id in this._layers) {\n if (this._layers.hasOwnProperty(id)) {\n this._layers[id].resize(width, height);\n }\n }\n\n this.refresh(true);\n }\n\n this._width = width;\n this._height = height;\n\n }\n return this;\n }\n\n /**\n * 清除单独的一个层\n * @param {number} zlevel\n */\n clearLayer(zlevel: number) {\n const layer = this._layers[zlevel];\n if (layer) {\n layer.clear();\n }\n }\n\n /**\n * 释放\n */\n dispose() {\n this.root.innerHTML = '';\n\n this.root =\n this.storage =\n\n this._domRoot =\n this._layers = null;\n }\n\n /**\n * Get canvas which has all thing rendered\n */\n getRenderedCanvas(opts?: {\n backgroundColor?: string | GradientObject | ImagePatternObject\n pixelRatio?: number\n }) {\n opts = opts || {};\n if (this._singleCanvas && !this._compositeManually) {\n return this._layers[CANVAS_ZLEVEL].dom;\n }\n\n const imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n imageLayer.initContext();\n imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n\n const ctx = imageLayer.ctx;\n\n if (opts.pixelRatio <= this.dpr) {\n this.refresh();\n\n const width = imageLayer.dom.width;\n const height = imageLayer.dom.height;\n this.eachLayer(function (layer) {\n if (layer.__builtin__) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n else if (layer.renderToCanvas) {\n ctx.save();\n layer.renderToCanvas(ctx);\n ctx.restore();\n }\n });\n }\n else {\n // PENDING, echarts-gl and incremental rendering.\n const scope = {\n inHover: false,\n viewWidth: this._width,\n viewHeight: this._height\n };\n const displayList = this.storage.getDisplayList(true);\n for (let i = 0, len = displayList.length; i < len; i++) {\n const el = displayList[i];\n brush(ctx, el, scope, i === len - 1);\n }\n }\n\n return imageLayer.dom;\n }\n /**\n * 获取绘图区域宽度\n */\n getWidth() {\n return this._width;\n }\n\n /**\n * 获取绘图区域高度\n */\n getHeight() {\n return this._height;\n }\n\n _getSize(whIdx: number) {\n const opts = this._opts;\n const wh = ['width', 'height'][whIdx] as 'width' | 'height';\n const cwh = ['clientWidth', 'clientHeight'][whIdx] as 'clientWidth' | 'clientHeight';\n const plt = ['paddingLeft', 'paddingTop'][whIdx] as 'paddingLeft' | 'paddingTop';\n const prb = ['paddingRight', 'paddingBottom'][whIdx] as 'paddingRight' | 'paddingBottom';\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh] as string);\n }\n\n const root = this.root;\n // IE8 does not support getComputedStyle, but it use VML.\n const stl = document.defaultView.getComputedStyle(root);\n\n return (\n (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n - (parseInt10(stl[plt]) || 0)\n - (parseInt10(stl[prb]) || 0)\n ) | 0;\n }\n\n pathToImage(path: Path, dpr?: number): ZRImage {\n dpr = dpr || this.dpr;\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const rect = path.getBoundingRect();\n const style = path.style;\n const shadowBlurSize = style.shadowBlur * dpr;\n const shadowOffsetX = style.shadowOffsetX * dpr;\n const shadowOffsetY = style.shadowOffsetY * dpr;\n const lineWidth = path.hasStroke() ? style.lineWidth : 0;\n\n const leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n const rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n const topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n const bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n const width = rect.width + leftMargin + rightMargin;\n const height = rect.height + topMargin + bottomMargin;\n\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n\n ctx.scale(dpr, dpr);\n ctx.clearRect(0, 0, width, height);\n (ctx as ZRCanvasRenderingContext).dpr = dpr;\n\n const pathTransform = {\n x: path.x,\n y: path.y,\n scaleX: path.scaleX,\n scaleY: path.scaleY,\n rotation: path.rotation,\n originX: path.originX,\n originY: path.originY\n };\n path.x = leftMargin - rect.x;\n path.y = topMargin - rect.y;\n path.rotation = 0;\n path.scaleX = 1;\n path.scaleY = 1;\n path.updateTransform();\n if (path) {\n brush(ctx, path, {\n inHover: false,\n viewWidth: this._width,\n viewHeight: this._height\n }, true);\n }\n\n const imgShape = new ZRImage({\n style: {\n x: 0,\n y: 0,\n image: canvas\n }\n });\n\n util.extend(path, pathTransform);\n\n return imgShape;\n }\n};","import { parse } from '../tool/color';\n\nexport function createElement(name: string) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\n\nexport function normalizeColor(color: string): { color: string, opacity: number } {\n let opacity;\n if (!color || color === 'transparent') {\n color = 'none';\n }\n else if (typeof color === 'string' && color.indexOf('rgba') > -1) {\n const arr = parse(color);\n if (arr) {\n color = 'rgb(' + arr[0] + ',' + arr[1] + ',' + arr[2] + ')';\n opacity = arr[3];\n }\n }\n return {\n color,\n opacity: opacity == null ? 1 : opacity\n };\n}\n","// Myers' Diff Algorithm\n// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js\ntype EqualFunc = (a: T, b: T) => boolean;\n\ntype DiffComponent = {\n count: number\n added: boolean\n removed: boolean,\n indices: number[]\n}\n\ntype DiffPath = {\n components: DiffComponent[],\n newPos: number\n}\n\nfunction diff(oldArr: T[], newArr: T[], equals: EqualFunc): DiffComponent[] {\n if (!equals) {\n equals = function (a, b) {\n return a === b;\n };\n }\n\n oldArr = oldArr.slice();\n newArr = newArr.slice();\n // Allow subclasses to massage the input prior to running\n var newLen = newArr.length;\n var oldLen = oldArr.length;\n var editLength = 1;\n var maxEditLength = newLen + oldLen;\n var bestPath: DiffPath[] = [{ newPos: -1, components: [] }];\n\n // Seed editLength = 0, i.e. the content starts with the same values\n var oldPos = extractCommon(bestPath[0], newArr, oldArr, 0, equals);\n if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n var indices = [];\n for (let i = 0; i < newArr.length; i++) {\n indices.push(i);\n }\n // Identity per the equality and tokenizer\n return [{\n indices: indices,\n count: newArr.length,\n added: false,\n removed: false\n }];\n }\n\n // Main worker method. checks all permutations of a given edit length for acceptance.\n function execEditLength() {\n for (let 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 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 if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n bestPath[diagonalPath] = undefined;\n continue;\n }\n\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 if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n basePath = clonePath(removePath);\n pushComponent(basePath.components, false, true);\n }\n else {\n basePath = addPath; // No need to clone, we've pulled it from the list\n basePath.newPos++;\n pushComponent(basePath.components, true, false);\n }\n\n oldPos = extractCommon(basePath, newArr, oldArr, diagonalPath, equals);\n\n // If we have hit the end of both strings, then we are done\n if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n return buildValues(basePath.components);\n }\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 if (ret) {\n return ret;\n }\n }\n}\n\nfunction extractCommon(basePath: DiffPath, newArr: T[], oldArr: T[], diagonalPath: number, equals: EqualFunc) {\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 && 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 added: false,\n removed: false,\n indices: []\n });\n }\n\n basePath.newPos = newPos;\n return oldPos;\n}\n\nfunction pushComponent(components: DiffComponent[], added: boolean, removed: boolean) {\n var last = components[components.length - 1];\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,\n removed,\n indices: []\n };\n }\n else {\n components.push({\n count: 1,\n added,\n removed,\n indices: []\n });\n }\n}\n\nfunction buildValues(components: DiffComponent[]) {\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 if (!component.removed) {\n var indices = [];\n for (let i = newPos; i < newPos + component.count; i++) {\n indices.push(i);\n }\n component.indices = indices;\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n for (let i = oldPos; i < oldPos + component.count; i++) {\n component.indices.push(i);\n }\n oldPos += component.count;\n }\n }\n\n return components;\n}\n\nfunction clonePath(path: DiffPath) {\n return { newPos: path.newPos, components: path.components.slice(0) };\n}\n\nexport default function arrayDiff(oldArr: T[], newArr: T[], equal?: EqualFunc): DiffComponent[] {\n return diff(oldArr, newArr, equal);\n}","// TODO\n// 1. shadow\n// 2. Image: sx, sy, sw, sh\n\nimport {createElement, normalizeColor} from './core';\nimport { PathRebuilder } from '../core/PathProxy';\nimport * as matrix from '../core/matrix';\nimport Path, { PathStyleProps } from '../graphic/Path';\nimport ZRImage, { ImageStyleProps } from '../graphic/Image';\nimport { DEFAULT_FONT, getLineHeight } from '../contain/text';\nimport TSpan, { TSpanStyleProps } from '../graphic/TSpan';\nimport { map } from '../core/util';\nimport { normalizeLineDash } from '../graphic/helper/dashStyle';\n\nexport interface SVGProxy {\n brush(el: T): void\n}\n\nconst NONE = 'none';\nconst mathRound = Math.round;\nconst mathSin = Math.sin;\nconst mathCos = Math.cos;\nconst PI = Math.PI;\nconst PI2 = Math.PI * 2;\nconst degree = 180 / PI;\n\nconst EPSILON = 1e-4;\n\ntype AllStyleOption = PathStyleProps | TSpanStyleProps | ImageStyleProps;\n\nfunction round3(val: number) {\n return mathRound(val * 1e3) / 1e3;\n}\nfunction round4(val: number) {\n return mathRound(val * 1e4) / 1e4;\n}\n\nfunction isAroundZero(val: number) {\n return val < EPSILON && val > -EPSILON;\n}\n\nfunction pathHasFill(style: AllStyleOption): style is PathStyleProps {\n const fill = (style as PathStyleProps).fill;\n return fill != null && fill !== NONE;\n}\n\nfunction pathHasStroke(style: AllStyleOption): style is PathStyleProps {\n const stroke = (style as PathStyleProps).stroke;\n return stroke != null && stroke !== NONE;\n}\n\nfunction setTransform(svgEl: SVGElement, m: matrix.MatrixArray) {\n if (m) {\n attr(svgEl, 'transform', 'matrix('\n // Avoid large string of matrix\n // PENDING If have precision issue when scaled\n + round3(m[0]) + ','\n + round3(m[1]) + ','\n + round3(m[2]) + ','\n + round3(m[3]) + ','\n + round4(m[4]) + ','\n + round4(m[5])\n + ')');\n }\n}\n\nfunction attr(el: SVGElement, key: string, val: string) {\n if (!val || (val as any).type !== 'linear' && (val as any).type !== 'radial') {\n // Don't set attribute for gradient, since it need new dom nodes\n el.setAttribute(key, val);\n }\n}\n\nfunction attrXLink(el: SVGElement, key: string, val: string) {\n el.setAttributeNS('http://www.w3.org/1999/xlink', key, val);\n}\n\nfunction attrXML(el: SVGElement, key: string, val: string) {\n el.setAttributeNS('http://www.w3.org/XML/1998/namespace', key, val);\n}\n\nfunction bindStyle(svgEl: SVGElement, style: PathStyleProps, el?: Path): void\nfunction bindStyle(svgEl: SVGElement, style: TSpanStyleProps, el?: TSpan): void\nfunction bindStyle(svgEl: SVGElement, style: ImageStyleProps, el?: ZRImage): void\nfunction bindStyle(svgEl: SVGElement, style: AllStyleOption, el?: Path | TSpan | ZRImage) {\n const opacity = style.opacity == null ? 1 : style.opacity;\n\n // only set opacity. stroke and fill cannot be applied to svg image\n if (el instanceof ZRImage) {\n svgEl.style.opacity = opacity + '';\n return;\n }\n\n if (pathHasFill(style)) {\n const fill = normalizeColor(style.fill as string);\n attr(svgEl, 'fill', fill.color);\n attr(svgEl,\n 'fill-opacity',\n (style.fillOpacity != null\n ? style.fillOpacity * fill.opacity * opacity\n : fill.opacity * opacity\n ) + ''\n );\n }\n else {\n attr(svgEl, 'fill', NONE);\n }\n\n if (pathHasStroke(style)) {\n const stroke = normalizeColor(style.stroke as string);\n attr(svgEl, 'stroke', stroke.color);\n const strokeWidth = style.lineWidth;\n const strokeScale = style.strokeNoScale\n ? (el as Path).getLineScale()\n : 1;\n attr(svgEl, 'stroke-width', (strokeScale ? strokeWidth / strokeScale : 0) + '');\n // stroke then fill for text; fill then stroke for others\n attr(svgEl, 'paint-order', style.strokeFirst ? 'stroke' : 'fill');\n attr(svgEl, 'stroke-opacity', (\n style.strokeOpacity != null\n ? style.strokeOpacity * stroke.opacity * opacity\n : stroke.opacity * opacity\n ) + '');\n let lineDash = style.lineDash && strokeWidth > 0 && normalizeLineDash(style.lineDash, strokeWidth);\n if (lineDash) {\n let lineDashOffset = style.lineDashOffset;\n if (strokeScale && strokeScale !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / strokeScale;\n });\n if (lineDashOffset) {\n lineDashOffset /= strokeScale;\n lineDashOffset = mathRound(lineDashOffset);\n }\n }\n attr(svgEl, 'stroke-dasharray', lineDash.join(','));\n attr(svgEl, 'stroke-dashoffset', (lineDashOffset || 0) + '');\n }\n else {\n attr(svgEl, 'stroke-dasharray', '');\n }\n\n // PENDING\n style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap);\n style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin);\n style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit + '');\n }\n else {\n attr(svgEl, 'stroke', NONE);\n }\n}\n\nclass SVGPathRebuilder implements PathRebuilder {\n _d: (string | number)[]\n _str: string\n _invalid: boolean\n\n reset() {\n this._d = [];\n this._str = '';\n }\n moveTo(x: number, y: number) {\n this._add('M', x, y);\n }\n lineTo(x: number, y: number) {\n this._add('L', x, y);\n }\n bezierCurveTo(x: number, y: number, x2: number, y2: number, x3: number, y3: number) {\n this._add('C', x, y, x2, y2, x3, y3);\n }\n quadraticCurveTo(x: number, y: number, x2: number, y2: number) {\n this._add('Q', x, y, x2, y2);\n }\n arc(cx: number, cy: number, r: number, startAngle: number, endAngle: number, anticlockwise: boolean) {\n this.ellipse(cx, cy, r, r, 0, startAngle, endAngle, anticlockwise);\n }\n ellipse(\n cx: number, cy: number,\n rx: number, ry: number,\n psi: number,\n startAngle: number,\n endAngle: number,\n anticlockwise: boolean\n ) {\n\n const firstCmd = this._d.length === 0;\n\n let dTheta = endAngle - startAngle;\n const clockwise = !anticlockwise;\n\n const dThetaPositive = Math.abs(dTheta);\n const isCircle = isAroundZero(dThetaPositive - PI2)\n || (clockwise ? dTheta >= PI2 : -dTheta >= PI2);\n\n // Mapping to 0~2PI\n const unifiedTheta = dTheta > 0 ? dTheta % PI2 : (dTheta % PI2 + PI2);\n\n let large = false;\n if (isCircle) {\n large = true;\n }\n else if (isAroundZero(dThetaPositive)) {\n large = false;\n }\n else {\n large = (unifiedTheta >= PI) === !!clockwise;\n }\n\n const x0 = round4(cx + rx * mathCos(startAngle));\n const y0 = round4(cy + ry * mathSin(startAngle));\n\n // It will not draw if start point and end point are exactly the same\n // We need to shift the end point with a small value\n // FIXME A better way to draw circle ?\n if (isCircle) {\n if (clockwise) {\n dTheta = PI2 - 1e-4;\n }\n else {\n dTheta = -PI2 + 1e-4;\n }\n\n large = true;\n\n if (firstCmd) {\n // Move to (x0, y0) only when CMD.A comes at the\n // first position of a shape.\n // For instance, when drawing a ring, CMD.A comes\n // after CMD.M, so it's unnecessary to move to\n // (x0, y0).\n this._d.push('M', x0, y0);\n }\n }\n\n const x = round4(cx + rx * mathCos(startAngle + dTheta));\n const y = round4(cy + ry * mathSin(startAngle + dTheta));\n\n if (isNaN(x0) || isNaN(y0) || isNaN(rx) || isNaN(ry) || isNaN(psi) || isNaN(degree) || isNaN(x) || isNaN(y)) {\n return '';\n }\n\n // FIXME Ellipse\n this._d.push('A', round4(rx), round4(ry),\n mathRound(psi * degree), +large, +clockwise, x, y);\n }\n rect(x: number, y: number, w: number, h: number) {\n this._add('M', x, y);\n this._add('L', x + w, y);\n this._add('L', x + w, y + h);\n this._add('L', x, y + h);\n this._add('L', x, y);\n this._add('Z');\n }\n closePath() {\n // Not use Z as first command\n if (this._d.length > 0) {\n this._add('Z');\n }\n }\n\n _add(cmd: string, a?: number, b?: number, c?: number, d?: number, e?: number, f?: number, g?: number, h?: number) {\n this._d.push(cmd);\n for (let i = 1; i < arguments.length; i++) {\n const val = arguments[i];\n if (isNaN(val)) {\n this._invalid = true;\n return;\n }\n this._d.push(round4(val));\n }\n }\n\n generateStr() {\n this._str = this._invalid ? '' : this._d.join(' ');\n this._d = [];\n }\n getStr() {\n return this._str;\n }\n}\n\ninterface PathWithSVGBuildPath extends Path {\n __svgPathVersion: number\n __svgPathBuilder: SVGPathRebuilder\n}\n\nconst svgPath: SVGProxy = {\n brush(el: Path) {\n const style = el.style;\n\n let svgEl = el.__svgEl;\n if (!svgEl) {\n svgEl = createElement('path');\n el.__svgEl = svgEl;\n }\n\n if (!el.path) {\n el.createPathProxy();\n }\n const path = el.path;\n\n if (el.shapeChanged()) {\n path.beginPath();\n el.buildPath(path, el.shape);\n el.pathUpdated();\n }\n\n const pathVersion = path.getVersion();\n const elExt = el as PathWithSVGBuildPath;\n let svgPathBuilder = elExt.__svgPathBuilder;\n if (elExt.__svgPathVersion !== pathVersion || !svgPathBuilder || el.style.strokePercent < 1) {\n if (!svgPathBuilder) {\n svgPathBuilder = elExt.__svgPathBuilder = new SVGPathRebuilder();\n }\n svgPathBuilder.reset();\n path.rebuildPath(svgPathBuilder, el.style.strokePercent);\n svgPathBuilder.generateStr();\n elExt.__svgPathVersion = pathVersion;\n }\n\n attr(svgEl, 'd', svgPathBuilder.getStr());\n\n bindStyle(svgEl, style, el);\n setTransform(svgEl, el.transform);\n }\n};\n\nexport {svgPath as path};\n\n/***************************************************\n * IMAGE\n **************************************************/\nconst svgImage: SVGProxy = {\n brush(el: ZRImage) {\n const style = el.style;\n let image = style.image;\n\n if (image instanceof HTMLImageElement) {\n image = image.src;\n }\n // heatmap layer in geo may be a canvas\n else if (image instanceof HTMLCanvasElement) {\n image = image.toDataURL();\n }\n if (!image) {\n return;\n }\n\n const x = style.x || 0;\n const y = style.y || 0;\n\n const dw = style.width;\n const dh = style.height;\n\n let svgEl = el.__svgEl;\n if (!svgEl) {\n svgEl = createElement('image');\n el.__svgEl = svgEl;\n }\n\n if (image !== el.__imageSrc) {\n attrXLink(svgEl, 'href', image as string);\n // Caching image src\n el.__imageSrc = image as string;\n }\n\n attr(svgEl, 'width', dw + '');\n attr(svgEl, 'height', dh + '');\n\n attr(svgEl, 'x', x + '');\n attr(svgEl, 'y', y + '');\n\n bindStyle(svgEl, style, el);\n setTransform(svgEl, el.transform);\n }\n};\nexport {svgImage as image};\n\n/***************************************************\n * TEXT\n **************************************************/\nconst TEXT_ALIGN_TO_ANCHOR = {\n left: 'start',\n right: 'end',\n center: 'middle',\n middle: 'middle'\n};\n\nfunction adjustTextY(y: number, lineHeight: number, textBaseline: CanvasTextBaseline): number {\n // TODO Other values.\n if (textBaseline === 'top') {\n y += lineHeight / 2;\n }\n else if (textBaseline === 'bottom') {\n y -= lineHeight / 2;\n }\n return y;\n}\n\nconst svgText: SVGProxy = {\n brush(el: TSpan) {\n const style = el.style;\n\n let text = style.text;\n // Convert to string\n text != null && (text += '');\n if (!text || isNaN(style.x) || isNaN(style.y)) {\n return;\n }\n\n let textSvgEl = el.__svgEl as SVGTextElement;\n if (!textSvgEl) {\n textSvgEl = createElement('text') as SVGTextElement;\n attrXML(textSvgEl, 'xml:space', 'preserve');\n el.__svgEl = textSvgEl;\n }\n\n const font = style.font || DEFAULT_FONT;\n\n // style.font has been normalized by `normalizeTextStyle`.\n const textSvgElStyle = textSvgEl.style;\n textSvgElStyle.font = font;\n\n textSvgEl.textContent = text;\n\n bindStyle(textSvgEl, style, el);\n setTransform(textSvgEl, el.transform);\n\n // Consider different font display differently in vertial align, we always\n // set vertialAlign as 'middle', and use 'y' to locate text vertically.\n const x = style.x || 0;\n const y = adjustTextY(style.y || 0, getLineHeight(font), style.textBaseline);\n const textAlign = TEXT_ALIGN_TO_ANCHOR[style.textAlign as keyof typeof TEXT_ALIGN_TO_ANCHOR]\n || style.textAlign;\n\n attr(textSvgEl, 'dominant-baseline', 'central');\n attr(textSvgEl, 'text-anchor', textAlign);\n attr(textSvgEl, 'x', x + '');\n attr(textSvgEl, 'y', y + '');\n }\n};\nexport {svgText as text};\n","/**\n * @file Manages elements that can be defined in in SVG,\n * e.g., gradients, clip path, etc.\n * @author Zhang Wenli\n */\n\nimport {createElement} from '../core';\nimport * as zrUtil from '../../core/util';\nimport Path from '../../graphic/Path';\nimport ZRImage from '../../graphic/Image';\nimport TSpan from '../../graphic/TSpan';\nimport {\n path as svgPath,\n image as svgImage,\n text as svgText\n} from '../graphic';\nimport Displayable from '../../graphic/Displayable';\n\n\nconst MARK_UNUSED = '0';\nconst MARK_USED = '1';\n\n/**\n * Manages elements that can be defined in in SVG,\n * e.g., gradients, clip path, etc.\n */\nexport default class Definable {\n\n nextId = 0\n\n protected _zrId: number\n protected _svgRoot: SVGElement\n protected _tagNames: string[]\n protected _markLabel: string\n protected _domName: string = '_dom'\n\n constructor(\n zrId: number, // zrender instance id\n svgRoot: SVGElement, // root of SVG document\n tagNames: string | string[], // possible tag names\n markLabel: string, // label name to make if the element\n domName?: string\n ) {\n this._zrId = zrId;\n this._svgRoot = svgRoot;\n this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames;\n this._markLabel = markLabel;\n\n if (domName) {\n this._domName = domName;\n }\n }\n\n createElement = createElement\n\n\n /**\n * Get the tag for svgRoot; optionally creates one if not exists.\n *\n * @param isForceCreating if need to create when not exists\n * @return SVG element, null if it doesn't\n * exist and isForceCreating is false\n */\n getDefs(isForceCreating?: boolean): SVGDefsElement {\n let svgRoot = this._svgRoot;\n let defs = this._svgRoot.getElementsByTagName('defs');\n if (defs.length === 0) {\n // Not exist\n if (isForceCreating) {\n let defs = svgRoot.insertBefore(\n this.createElement('defs'), // Create new tag\n svgRoot.firstChild // Insert in the front of svg\n ) as SVGDefsElement;\n if (!defs.contains) {\n // IE doesn't support contains method\n defs.contains = function (el) {\n const children = defs.children;\n if (!children) {\n return false;\n }\n for (let i = children.length - 1; i >= 0; --i) {\n if (children[i] === el) {\n return true;\n }\n }\n return false;\n };\n }\n return defs;\n }\n else {\n return null;\n }\n }\n else {\n return defs[0];\n }\n }\n\n\n /**\n * Update DOM element if necessary.\n *\n * @param element style element. e.g., for gradient,\n * it may be '#ccc' or {type: 'linear', ...}\n * @param onUpdate update callback\n */\n doUpdate(target: T, onUpdate?: (target: T) => void) {\n if (!target) {\n return;\n }\n\n const defs = this.getDefs(false);\n if ((target as any)[this._domName] && defs.contains((target as any)[this._domName])) {\n // Update DOM\n if (typeof onUpdate === 'function') {\n onUpdate(target);\n }\n }\n else {\n // No previous dom, create new\n const dom = this.add(target);\n if (dom) {\n (target as any)[this._domName] = dom;\n }\n }\n }\n\n add(target: any): SVGElement {\n return null;\n }\n\n /**\n * Add gradient dom to defs\n *\n * @param dom DOM to be added to \n */\n addDom(dom: SVGElement) {\n const defs = this.getDefs(true);\n if (dom.parentNode !== defs) {\n defs.appendChild(dom);\n }\n }\n\n\n /**\n * Remove DOM of a given element.\n *\n * @param target Target where to attach the dom\n */\n removeDom(target: T) {\n const defs = this.getDefs(false);\n if (defs && (target as any)[this._domName]) {\n defs.removeChild((target as any)[this._domName]);\n (target as any)[this._domName] = null;\n }\n }\n\n\n /**\n * Get DOMs of this element.\n *\n * @return doms of this defineable elements in \n */\n getDoms() {\n const defs = this.getDefs(false);\n if (!defs) {\n // No dom when defs is not defined\n return [];\n }\n\n let doms: SVGElement[] = [];\n zrUtil.each(this._tagNames, function (tagName) {\n const tags = defs.getElementsByTagName(tagName) as HTMLCollectionOf;\n // Note that tags is HTMLCollection, which is array-like\n // rather than real array.\n // So `doms.concat(tags)` add tags as one object.\n for (let i = 0; i < tags.length; i++) {\n doms.push(tags[i]);\n }\n });\n\n return doms;\n }\n\n\n /**\n * Mark DOMs to be unused before painting, and clear unused ones at the end\n * of the painting.\n */\n markAllUnused() {\n const doms = this.getDoms();\n const that = this;\n zrUtil.each(doms, function (dom) {\n (dom as any)[that._markLabel] = MARK_UNUSED;\n });\n }\n\n\n /**\n * Mark a single DOM to be used.\n *\n * @param dom DOM to mark\n */\n markDomUsed(dom: SVGElement) {\n dom && ((dom as any)[this._markLabel] = MARK_USED);\n };\n\n markDomUnused(dom: SVGElement) {\n dom && ((dom as any)[this._markLabel] = MARK_UNUSED);\n };\n\n isDomUnused(dom: SVGElement) {\n return dom && (dom as any)[this._markLabel] !== MARK_USED;\n }\n\n /**\n * Remove unused DOMs defined in \n */\n removeUnused() {\n const defs = this.getDefs(false);\n if (!defs) {\n // Nothing to remove\n return;\n }\n\n const doms = this.getDoms();\n zrUtil.each(doms, (dom) => {\n if (this.isDomUnused(dom)) {\n // Remove gradient\n defs.removeChild(dom);\n }\n });\n }\n\n\n /**\n * Get SVG proxy.\n *\n * @param displayable displayable element\n * @return svg proxy of given element\n */\n getSvgProxy(displayable: Displayable) {\n if (displayable instanceof Path) {\n return svgPath;\n }\n else if (displayable instanceof ZRImage) {\n return svgImage;\n }\n else if (displayable instanceof TSpan) {\n return svgText;\n }\n else {\n return svgPath;\n }\n }\n\n\n /**\n * Get SVG element.\n *\n * @param displayable displayable element\n * @return SVG element\n */\n getSvgElement(displayable: Displayable): SVGElement {\n return displayable.__svgEl;\n }\n\n}","/**\n * @file Manages SVG gradient elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport * as colorTool from '../../tool/color';\nimport Displayable from '../../graphic/Displayable';\nimport { GradientObject } from '../../graphic/Gradient';\nimport { LinearGradientObject } from '../../graphic/LinearGradient';\nimport { RadialGradientObject } from '../../graphic/RadialGradient';\n\nfunction isLinearGradient(value: GradientObject): value is LinearGradientObject {\n return value.type === 'linear';\n}\n\nfunction isRadialGradient(value: GradientObject): value is RadialGradientObject {\n return value.type === 'radial';\n}\n\nfunction isGradient(value: GradientObject | string): value is GradientObject {\n return value && (\n (value as GradientObject).type === 'linear'\n || (value as GradientObject).type === 'radial'\n );\n}\n\n\ntype GradientObjectExtended = GradientObject & {\n __dom: SVGElement\n}\n\n/**\n * Manages SVG gradient elements.\n *\n * @param zrId zrender instance id\n * @param svgRoot root of SVG document\n */\nexport default class GradientManager extends Definable {\n\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, ['linearGradient', 'radialGradient'], '__gradient_in_use__');\n }\n\n\n /**\n * Create new gradient DOM for fill or stroke if not exist,\n * but will not update gradient if exists.\n *\n * @param svgElement SVG element to paint\n * @param displayable zrender displayable element\n */\n addWithoutUpdate(\n svgElement: SVGElement,\n displayable: Displayable\n ) {\n if (displayable && displayable.style) {\n const that = this;\n zrUtil.each(['fill', 'stroke'], function (fillOrStroke: 'fill' | 'stroke') {\n let value = displayable.style[fillOrStroke] as GradientObject;\n if (isGradient(value)) {\n const gradient = value as GradientObjectExtended;\n const defs = that.getDefs(true);\n\n // Create dom in if not exists\n let dom;\n if (gradient.__dom) {\n // Gradient exists\n dom = gradient.__dom;\n if (!defs.contains(gradient.__dom)) {\n // __dom is no longer in defs, recreate\n that.addDom(dom);\n }\n }\n else {\n // New dom\n dom = that.add(gradient);\n }\n\n that.markUsed(displayable);\n\n const id = dom.getAttribute('id');\n svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n }\n });\n }\n }\n\n\n /**\n * Add a new gradient tag in \n *\n * @param gradient zr gradient instance\n */\n add(gradient: GradientObject): SVGElement {\n let dom;\n if (isLinearGradient(gradient)) {\n dom = this.createElement('linearGradient');\n }\n else if (isRadialGradient(gradient)) {\n dom = this.createElement('radialGradient');\n }\n else {\n zrUtil.logError('Illegal gradient type.');\n return null;\n }\n\n // Set dom id with gradient id, since each gradient instance\n // will have no more than one dom element.\n // id may exists before for those dirty elements, in which case\n // id should remain the same, and other attributes should be\n // updated.\n gradient.id = gradient.id || this.nextId++;\n dom.setAttribute('id', 'zr' + this._zrId\n + '-gradient-' + gradient.id);\n\n this.updateDom(gradient, dom);\n this.addDom(dom);\n\n return dom;\n }\n\n\n /**\n * Update gradient.\n *\n * @param gradient zr gradient instance or color string\n */\n update(gradient: GradientObject | string) {\n if (!isGradient(gradient)) {\n return;\n }\n\n const that = this;\n this.doUpdate(gradient, function () {\n const dom = (gradient as GradientObjectExtended).__dom;\n if (!dom) {\n return;\n }\n\n const tagName = dom.tagName;\n const type = gradient.type;\n if (type === 'linear' && tagName === 'linearGradient'\n || type === 'radial' && tagName === 'radialGradient'\n ) {\n // Gradient type is not changed, update gradient\n that.updateDom(gradient, (gradient as GradientObjectExtended).__dom);\n }\n else {\n // Remove and re-create if type is changed\n that.removeDom(gradient);\n that.add(gradient);\n }\n });\n }\n\n\n /**\n * Update gradient dom\n *\n * @param gradient zr gradient instance\n * @param dom DOM to update\n */\n updateDom(gradient: GradientObject, dom: SVGElement) {\n if (isLinearGradient(gradient)) {\n dom.setAttribute('x1', gradient.x + '');\n dom.setAttribute('y1', gradient.y + '');\n dom.setAttribute('x2', gradient.x2 + '');\n dom.setAttribute('y2', gradient.y2 + '');\n }\n else if (isRadialGradient(gradient)) {\n dom.setAttribute('cx', gradient.x + '');\n dom.setAttribute('cy', gradient.y + '');\n dom.setAttribute('r', gradient.r + '');\n }\n else {\n zrUtil.logError('Illegal gradient type.');\n return;\n }\n\n if (gradient.global) {\n // x1, x2, y1, y2 in range of 0 to canvas width or height\n dom.setAttribute('gradientUnits', 'userSpaceOnUse');\n }\n else {\n // x1, x2, y1, y2 in range of 0 to 1\n dom.setAttribute('gradientUnits', 'objectBoundingBox');\n }\n\n // Remove color stops if exists\n dom.innerHTML = '';\n\n // Add color stops\n const colors = gradient.colorStops;\n for (let i = 0, len = colors.length; i < len; ++i) {\n const stop = this.createElement('stop');\n stop.setAttribute('offset', colors[i].offset * 100 + '%');\n\n const color = colors[i].color;\n if (color.indexOf('rgba') > -1) {\n // Fix Safari bug that stop-color not recognizing alpha #9014\n const opacity = colorTool.parse(color)[3];\n const hex = colorTool.toHex(color);\n\n // stop-color cannot be color, since:\n // The opacity value used for the gradient calculation is the\n // *product* of the value of stop-opacity and the opacity of the\n // value of stop-color.\n // See https://www.w3.org/TR/SVG2/pservers.html#StopOpacityProperty\n stop.setAttribute('stop-color', '#' + hex);\n stop.setAttribute('stop-opacity', opacity + '');\n }\n else {\n stop.setAttribute('stop-color', colors[i].color);\n }\n\n dom.appendChild(stop);\n }\n\n // Store dom element in gradient, to avoid creating multiple\n // dom instances for the same gradient element\n (gradient as GradientObject as GradientObjectExtended).__dom = dom;\n }\n\n /**\n * Mark a single gradient to be used\n *\n * @param displayable displayable element\n */\n markUsed(displayable: Displayable) {\n if (displayable.style) {\n let gradient = displayable.style.fill as GradientObject as GradientObjectExtended;\n if (gradient && gradient.__dom) {\n super.markDomUsed(gradient.__dom);\n }\n\n gradient = displayable.style.stroke as GradientObject as GradientObjectExtended;\n if (gradient && gradient.__dom) {\n super.markDomUsed(gradient.__dom);\n }\n }\n }\n\n\n}","let wmUniqueIndex = Math.round(Math.random() * 9);\n\nconst supportDefineProperty = typeof Object.defineProperty === 'function';\n\nexport default class WeakMap {\n\n protected _id: string;\n\n constructor() {\n this._id = '__ec_inner_' + wmUniqueIndex++;\n }\n\n get(key: K): V {\n return (this._guard(key) as any)[this._id];\n }\n\n set(key: K, value: V): WeakMap {\n const target = this._guard(key) as any;\n if (supportDefineProperty) {\n Object.defineProperty(target, this._id, {\n value: value,\n enumerable: false,\n configurable: true\n });\n }\n else {\n target[this._id] = value;\n }\n return this;\n }\n\n delete(key: K): boolean {\n if (this.has(key)) {\n delete (this._guard(key) as any)[this._id];\n return true;\n }\n return false;\n }\n\n has(key: K): boolean {\n return !!(this._guard(key) as any)[this._id];\n }\n\n protected _guard(key: K): K {\n if (key !== Object(key)) {\n throw TypeError('Value of WeakMap is not a non-null object.');\n }\n return key;\n }\n}\n","/**\n * @file Manages SVG pattern elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport Displayable from '../../graphic/Displayable';\nimport {PatternObject, ImagePatternObject, SVGPatternObject} from '../../graphic/Pattern';\nimport {createOrUpdateImage} from '../../graphic/helper/image';\nimport WeakMap from '../../core/WeakMap';\n\nfunction isPattern(value: PatternObject | string): value is PatternObject {\n return value && (!!(value as ImagePatternObject).image || !!(value as SVGPatternObject).svgElement);\n}\n\nconst patternDomMap = new WeakMap();\n\n/**\n * Manages SVG pattern elements.\n *\n * @param zrId zrender instance id\n * @param svgRoot root of SVG document\n */\nexport default class PatternManager extends Definable {\n\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, ['pattern'], '__pattern_in_use__');\n }\n\n\n /**\n * Create new pattern DOM for fill or stroke if not exist,\n * but will not update pattern if exists.\n *\n * @param svgElement SVG element to paint\n * @param displayable zrender displayable element\n */\n addWithoutUpdate(\n svgElement: SVGElement,\n displayable: Displayable\n ) {\n if (displayable && displayable.style) {\n const that = this;\n zrUtil.each(['fill', 'stroke'], function (fillOrStroke: 'fill' | 'stroke') {\n const pattern = displayable.style[fillOrStroke] as PatternObject;\n if (isPattern(pattern)) {\n const defs = that.getDefs(true);\n\n // Create dom in if not exists\n let dom = patternDomMap.get(pattern);\n if (dom) {\n // Pattern exists\n if (!defs.contains(dom)) {\n // __dom is no longer in defs, recreate\n that.addDom(dom);\n }\n }\n else {\n // New dom\n dom = that.add(pattern);\n }\n\n that.markUsed(displayable);\n\n const id = dom.getAttribute('id');\n svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n }\n });\n }\n }\n\n\n /**\n * Add a new pattern tag in \n *\n * @param pattern zr pattern instance\n */\n add(pattern: PatternObject): SVGElement {\n if (!isPattern(pattern)) {\n return;\n }\n\n let dom = this.createElement('pattern');\n\n pattern.id = pattern.id == null ? this.nextId++ : pattern.id;\n dom.setAttribute('id', 'zr' + this._zrId\n + '-pattern-' + pattern.id);\n\n dom.setAttribute('x', '0');\n dom.setAttribute('y', '0');\n dom.setAttribute('patternUnits', 'userSpaceOnUse');\n\n this.updateDom(pattern, dom);\n this.addDom(dom);\n\n return dom;\n }\n\n\n /**\n * Update pattern.\n *\n * @param pattern zr pattern instance or color string\n */\n update(pattern: PatternObject | string) {\n if (!isPattern(pattern)) {\n return;\n }\n\n const that = this;\n this.doUpdate(pattern, function () {\n const dom = patternDomMap.get(pattern);\n that.updateDom(pattern, dom);\n });\n }\n\n\n /**\n * Update pattern dom\n *\n * @param pattern zr pattern instance\n * @param patternDom DOM to update\n */\n updateDom(pattern: PatternObject, patternDom: SVGElement) {\n const svgElement = (pattern as SVGPatternObject).svgElement;\n\n if (svgElement instanceof SVGElement) {\n if (svgElement.parentNode !== patternDom) {\n patternDom.innerHTML = '';\n patternDom.appendChild(svgElement);\n\n patternDom.setAttribute('width', (pattern as SVGPatternObject).svgWidth + '');\n patternDom.setAttribute('height', (pattern as SVGPatternObject).svgHeight + '');\n }\n }\n else {\n let img: SVGElement;\n const prevImage = patternDom.getElementsByTagName('image');\n if (prevImage.length) {\n if ((pattern as ImagePatternObject).image) {\n // Update\n img = prevImage[0];\n }\n else {\n // Remove\n patternDom.removeChild(prevImage[0]);\n return;\n }\n }\n else if ((pattern as ImagePatternObject).image) {\n // Create\n img = this.createElement('image');\n }\n\n if (img) {\n let imageSrc;\n const patternImage = (pattern as ImagePatternObject).image;\n if (typeof patternImage === 'string') {\n imageSrc = patternImage;\n }\n else if (patternImage instanceof HTMLImageElement) {\n imageSrc = patternImage.src;\n }\n else if (patternImage instanceof HTMLCanvasElement) {\n imageSrc = patternImage.toDataURL();\n }\n\n if (imageSrc) {\n img.setAttribute('href', imageSrc);\n img.setAttribute('x', '0');\n img.setAttribute('y', '0');\n\n // No need to re-render so dirty is empty\n const hostEl = {\n dirty: () => {}\n };\n const createdImage = createOrUpdateImage(imageSrc, img as any, hostEl, img => {\n patternDom.setAttribute('width', img.width + '');\n patternDom.setAttribute('height', img.height + '');\n });\n if (createdImage && createdImage.width && createdImage.height) {\n // Loaded before\n patternDom.setAttribute('width', createdImage.width + '');\n patternDom.setAttribute('height', createdImage.height + '');\n }\n\n patternDom.appendChild(img);\n }\n }\n }\n\n const x = pattern.x || 0;\n const y = pattern.y || 0;\n const rotation = (pattern.rotation || 0) / Math.PI * 180;\n const scaleX = pattern.scaleX || 1;\n const scaleY = pattern.scaleY || 1;\n const transform = `translate(${x}, ${y}) rotate(${rotation}) scale(${scaleX}, ${scaleY})`;\n patternDom.setAttribute('patternTransform', transform);\n patternDomMap.set(pattern, patternDom);\n }\n\n /**\n * Mark a single pattern to be used\n *\n * @param displayable displayable element\n */\n markUsed(displayable: Displayable) {\n if (displayable.style) {\n if (isPattern(displayable.style.fill)) {\n super.markDomUsed(patternDomMap.get(displayable.style.fill));\n }\n if (isPattern(displayable.style.stroke)) {\n super.markDomUsed(patternDomMap.get(displayable.style.stroke));\n }\n }\n }\n\n}\n","/**\n * @file Manages SVG clipPath elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport Displayable from '../../graphic/Displayable';\nimport Path from '../../graphic/Path';\nimport {SVGProxy} from '../graphic';\nimport { Dictionary } from '../../core/types';\nimport { isClipPathChanged } from '../../canvas/helper';\n\ntype PathExtended = Path & {\n _dom: SVGElement\n}\n\nfunction generateClipPathsKey(clipPaths: Path[]) {\n let key: number[] = [];\n if (clipPaths) {\n for (let i = 0; i < clipPaths.length; i++) {\n const clipPath = clipPaths[i];\n key.push(clipPath.id);\n }\n }\n return key.join(',');\n}\n\nexport function hasClipPath(displayable: Displayable) {\n const clipPaths = displayable.__clipPaths;\n return clipPaths && clipPaths.length > 0;\n}\n/**\n * Manages SVG clipPath elements.\n */\nexport default class ClippathManager extends Definable {\n\n private _refGroups: Dictionary = {};\n private _keyDuplicateCount: Dictionary = {};\n\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, 'clipPath', '__clippath_in_use__');\n }\n\n markAllUnused() {\n super.markAllUnused();\n const refGroups = this._refGroups;\n for (let key in refGroups) {\n if (refGroups.hasOwnProperty(key)) {\n this.markDomUnused(refGroups[key]);\n }\n }\n this._keyDuplicateCount = {};\n }\n\n\n private _getClipPathGroup(displayable: Displayable, prevDisplayable: Displayable) {\n if (!hasClipPath(displayable)) {\n return;\n }\n const clipPaths = displayable.__clipPaths;\n\n const keyDuplicateCount = this._keyDuplicateCount;\n let clipPathKey = generateClipPathsKey(clipPaths);\n if (isClipPathChanged(clipPaths, prevDisplayable && prevDisplayable.__clipPaths)) {\n keyDuplicateCount[clipPathKey] = keyDuplicateCount[clipPathKey] || 0;\n keyDuplicateCount[clipPathKey] && (clipPathKey += '-' + keyDuplicateCount[clipPathKey]);\n keyDuplicateCount[clipPathKey]++;\n }\n\n return this._refGroups[clipPathKey]\n || (this._refGroups[clipPathKey] = this.createElement('g'));\n }\n\n /**\n * Update clipPath.\n *\n * @param displayable displayable element\n */\n update(displayable: Displayable, prevDisplayable: Displayable) {\n const clipGroup = this._getClipPathGroup(displayable, prevDisplayable);\n if (clipGroup) {\n this.markDomUsed(clipGroup);\n this.updateDom(clipGroup, displayable.__clipPaths);\n }\n return clipGroup;\n };\n\n\n /**\n * Create an SVGElement of displayable and create a of its\n * clipPath\n */\n updateDom(parentEl: SVGElement, clipPaths: Path[]) {\n if (clipPaths && clipPaths.length > 0) {\n // Has clipPath, create with the first clipPath\n const defs = this.getDefs(true);\n const clipPath = clipPaths[0] as PathExtended;\n let clipPathEl;\n let id;\n\n if (clipPath._dom) {\n // Use a dom that is already in \n id = clipPath._dom.getAttribute('id');\n clipPathEl = clipPath._dom;\n\n // Use a dom that is already in \n if (!defs.contains(clipPathEl)) {\n // This happens when set old clipPath that has\n // been previously removed\n defs.appendChild(clipPathEl);\n }\n }\n else {\n // New \n id = 'zr' + this._zrId + '-clip-' + this.nextId;\n ++this.nextId;\n clipPathEl = this.createElement('clipPath');\n clipPathEl.setAttribute('id', id);\n defs.appendChild(clipPathEl);\n\n clipPath._dom = clipPathEl;\n }\n\n // Build path and add to \n const svgProxy = this.getSvgProxy(clipPath);\n (svgProxy as SVGProxy).brush(clipPath);\n\n const pathEl = this.getSvgElement(clipPath);\n\n clipPathEl.innerHTML = '';\n clipPathEl.appendChild(pathEl);\n\n parentEl.setAttribute('clip-path', 'url(#' + id + ')');\n\n if (clipPaths.length > 1) {\n // Make the other clipPaths recursively\n this.updateDom(clipPathEl, clipPaths.slice(1));\n }\n }\n else {\n // No clipPath\n if (parentEl) {\n parentEl.setAttribute('clip-path', 'none');\n }\n }\n };\n\n /**\n * Mark a single clipPath to be used\n *\n * @param displayable displayable element\n */\n markUsed(displayable: Displayable) {\n // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n if (displayable.__clipPaths) {\n zrUtil.each(displayable.__clipPaths, (clipPath: PathExtended) => {\n if (clipPath._dom) {\n super.markDomUsed(clipPath._dom);\n }\n });\n }\n };\n\n removeUnused() {\n super.removeUnused();\n\n const newRefGroupsMap: Dictionary = {};\n const refGroups = this._refGroups;\n for (let key in refGroups) {\n if (refGroups.hasOwnProperty(key)) {\n const group = refGroups[key];\n if (!this.isDomUnused(group)) {\n newRefGroupsMap[key] = group;\n }\n else if (group.parentNode) {\n group.parentNode.removeChild(group);\n }\n }\n }\n this._refGroups = newRefGroupsMap;\n }\n}\n","/**\n * @file Manages SVG shadow elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport Displayable from '../../graphic/Displayable';\nimport { PathStyleProps } from '../../graphic/Path';\nimport { Dictionary } from '../../core/types';\nimport { normalizeColor } from '../core';\n\ntype DisplayableExtended = Displayable & {\n _shadowDom: SVGElement\n}\n/**\n * Manages SVG shadow elements.\n *\n */\nexport default class ShadowManager extends Definable {\n\n private _shadowDomMap: Dictionary = {}\n private _shadowDomPool: SVGFilterElement[] = []\n\n constructor(zrId: number, svgRoot: SVGElement) {\n super(zrId, svgRoot, ['filter'], '__filter_in_use__', '_shadowDom');\n }\n\n /**\n * Add a new shadow tag in \n *\n * @param displayable zrender displayable element\n * @return created DOM\n */\n private _getFromPool(): SVGFilterElement {\n let shadowDom = this._shadowDomPool.pop(); // Try to get one from trash.\n if (!shadowDom) {\n shadowDom = this.createElement('filter') as SVGFilterElement;\n shadowDom.setAttribute('id', 'zr' + this._zrId + '-shadow-' + this.nextId++);\n const domChild = this.createElement('feDropShadow');\n shadowDom.appendChild(domChild);\n this.addDom(shadowDom);\n }\n\n return shadowDom;\n }\n\n\n /**\n * Update shadow.\n */\n update(svgElement: SVGElement, displayable: Displayable) {\n const style = displayable.style;\n if (hasShadow(style)) {\n // Try getting shadow from cache.\n const shadowKey = getShadowKey(displayable);\n let shadowDom = (displayable as DisplayableExtended)._shadowDom = this._shadowDomMap[shadowKey];\n if (!shadowDom) {\n shadowDom = this._getFromPool();\n this._shadowDomMap[shadowKey] = shadowDom;\n }\n this.updateDom(svgElement, displayable, shadowDom);\n }\n else {\n // Remove shadow\n this.remove(svgElement, displayable);\n }\n }\n\n\n /**\n * Remove DOM and clear parent filter\n */\n remove(svgElement: SVGElement, displayable: Displayable) {\n if ((displayable as DisplayableExtended)._shadowDom != null) {\n (displayable as DisplayableExtended)._shadowDom = null;\n svgElement.style.filter = '';\n }\n }\n\n\n /**\n * Update shadow dom\n *\n * @param displayable zrender displayable element\n * @param shadowDom DOM to update\n */\n updateDom(svgElement: SVGElement, displayable: Displayable, shadowDom: SVGElement) {\n let domChild = shadowDom.children[0];\n\n const style = displayable.style;\n const globalScale = displayable.getGlobalScale();\n const scaleX = globalScale[0];\n const scaleY = globalScale[1];\n if (!scaleX || !scaleY) {\n return;\n }\n\n // TODO: textBoxShadowBlur is not supported yet\n let offsetX = style.shadowOffsetX || 0;\n let offsetY = style.shadowOffsetY || 0;\n let blur = style.shadowBlur;\n const normalizedColor = normalizeColor(style.shadowColor);\n\n domChild.setAttribute('dx', offsetX / scaleX + '');\n domChild.setAttribute('dy', offsetY / scaleY + '');\n domChild.setAttribute('flood-color', normalizedColor.color);\n domChild.setAttribute('flood-opacity', normalizedColor.opacity + '');\n\n // Divide by two here so that it looks the same as in canvas\n // See: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowblur\n const stdDx = blur / 2 / scaleX;\n const stdDy = blur / 2 / scaleY;\n const stdDeviation = stdDx + ' ' + stdDy;\n domChild.setAttribute('stdDeviation', stdDeviation);\n\n // Fix filter clipping problem\n shadowDom.setAttribute('x', '-100%');\n shadowDom.setAttribute('y', '-100%');\n shadowDom.setAttribute('width', '300%');\n shadowDom.setAttribute('height', '300%');\n\n // Store dom element in shadow, to avoid creating multiple\n // dom instances for the same shadow element\n (displayable as DisplayableExtended)._shadowDom = shadowDom;\n\n const id = shadowDom.getAttribute('id');\n svgElement.style.filter = 'url(#' + id + ')';\n }\n\n removeUnused() {\n const defs = this.getDefs(false);\n if (!defs) {\n // Nothing to remove\n return;\n }\n let shadowDomsPool = this._shadowDomPool;\n\n // let currentUsedShadow = 0;\n const shadowDomMap = this._shadowDomMap;\n for (let key in shadowDomMap) {\n if (shadowDomMap.hasOwnProperty(key)) {\n shadowDomsPool.push(shadowDomMap[key]);\n }\n // currentUsedShadow++;\n }\n\n // Reset the map.\n this._shadowDomMap = {};\n }\n}\n\n\nfunction hasShadow(style: PathStyleProps) {\n // TODO: textBoxShadowBlur is not supported yet\n return style\n && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY);\n}\n\nfunction getShadowKey(displayable: Displayable) {\n const style = displayable.style;\n const globalScale = displayable.getGlobalScale();\n return [\n style.shadowColor,\n (style.shadowBlur || 0).toFixed(2), // Reduce the precision\n (style.shadowOffsetX || 0).toFixed(2),\n (style.shadowOffsetY || 0).toFixed(2),\n globalScale[0],\n globalScale[1]\n ].join(',');\n}","/**\n * SVG Painter\n * @module zrender/svg/Painter\n */\n\nimport {createElement, normalizeColor} from './core';\nimport * as util from '../core/util';\nimport Path from '../graphic/Path';\nimport ZRImage from '../graphic/Image';\nimport TSpan from '../graphic/TSpan';\nimport arrayDiff from '../core/arrayDiff';\nimport GradientManager from './helper/GradientManager';\nimport PatternManager from './helper/PatternManager';\nimport ClippathManager, {hasClipPath} from './helper/ClippathManager';\nimport ShadowManager from './helper/ShadowManager';\nimport {\n path as svgPath,\n image as svgImage,\n text as svgText,\n SVGProxy\n} from './graphic';\nimport Displayable from '../graphic/Displayable';\nimport Storage from '../Storage';\nimport { PainterBase } from '../PainterBase';\n\nfunction parseInt10(val: string) {\n return parseInt(val, 10);\n}\n\nfunction getSvgProxy(el: Displayable) {\n if (el instanceof Path) {\n return svgPath;\n }\n else if (el instanceof ZRImage) {\n return svgImage;\n }\n else if (el instanceof TSpan) {\n return svgText;\n }\n else {\n return svgPath;\n }\n}\n\nfunction checkParentAvailable(parent: SVGElement, child: SVGElement) {\n return child && parent && child.parentNode !== parent;\n}\n\nfunction insertAfter(parent: SVGElement, child: SVGElement, prevSibling: SVGElement) {\n if (checkParentAvailable(parent, child) && prevSibling) {\n const nextSibling = prevSibling.nextSibling;\n nextSibling ? parent.insertBefore(child, nextSibling)\n : parent.appendChild(child);\n }\n}\n\nfunction prepend(parent: SVGElement, child: SVGElement) {\n if (checkParentAvailable(parent, child)) {\n const firstChild = parent.firstChild;\n firstChild ? parent.insertBefore(child, firstChild)\n : parent.appendChild(child);\n }\n}\n\nfunction remove(parent: SVGElement, child: SVGElement) {\n if (child && parent && child.parentNode === parent) {\n parent.removeChild(child);\n }\n}\nfunction removeFromMyParent(child: SVGElement) {\n if (child && child.parentNode) {\n child.parentNode.removeChild(child);\n }\n}\n\nfunction getSvgElement(displayable: Displayable) {\n return displayable.__svgEl;\n}\n\ninterface SVGPainterOption {\n width?: number | string\n height?: number | string\n}\n\nclass SVGPainter implements PainterBase {\n\n type = 'svg'\n\n root: HTMLElement\n\n storage: Storage\n\n private _opts: SVGPainterOption\n\n private _svgDom: SVGElement\n private _svgRoot: SVGGElement\n private _backgroundRoot: SVGGElement\n private _backgroundNode: SVGRectElement\n\n private _gradientManager: GradientManager\n private _patternManager: PatternManager\n private _clipPathManager: ClippathManager\n private _shadowManager: ShadowManager\n\n private _viewport: HTMLDivElement\n private _visibleList: Displayable[]\n\n private _width: number\n private _height: number\n\n constructor(root: HTMLElement, storage: Storage, opts: SVGPainterOption, zrId: number) {\n this.root = root;\n this.storage = storage;\n this._opts = opts = util.extend({}, opts || {});\n\n const svgDom = createElement('svg');\n svgDom.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns', 'http://www.w3.org/2000/svg');\n svgDom.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n svgDom.setAttribute('version', '1.1');\n svgDom.setAttribute('baseProfile', 'full');\n svgDom.style.cssText = 'user-select:none;position:absolute;left:0;top:0;';\n\n const bgRoot = createElement('g') as SVGGElement;\n svgDom.appendChild(bgRoot);\n const svgRoot = createElement('g') as SVGGElement;\n svgDom.appendChild(svgRoot);\n\n this._gradientManager = new GradientManager(zrId, svgRoot);\n this._patternManager = new PatternManager(zrId, svgRoot);\n this._clipPathManager = new ClippathManager(zrId, svgRoot);\n this._shadowManager = new ShadowManager(zrId, svgRoot);\n\n const viewport = document.createElement('div');\n viewport.style.cssText = 'overflow:hidden;position:relative';\n\n this._svgDom = svgDom;\n this._svgRoot = svgRoot;\n this._backgroundRoot = bgRoot;\n this._viewport = viewport;\n\n root.appendChild(viewport);\n viewport.appendChild(svgDom);\n\n this.resize(opts.width, opts.height);\n\n this._visibleList = [];\n }\n\n getType() {\n return 'svg';\n }\n\n getViewportRoot() {\n return this._viewport;\n }\n\n getSvgDom() {\n return this._svgDom;\n }\n\n getSvgRoot() {\n return this._svgRoot;\n }\n\n getViewportRootOffset() {\n const viewportRoot = this.getViewportRoot();\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n }\n\n refresh() {\n\n const list = this.storage.getDisplayList(true);\n\n this._paintList(list);\n }\n\n setBackgroundColor(backgroundColor: string) {\n // TODO gradient\n // Insert a bg rect instead of setting background to viewport.\n // Otherwise, the exported SVG don't have background.\n if (this._backgroundRoot && this._backgroundNode) {\n this._backgroundRoot.removeChild(this._backgroundNode);\n }\n\n const bgNode = createElement('rect') as SVGRectElement;\n bgNode.setAttribute('width', this.getWidth() as any);\n bgNode.setAttribute('height', this.getHeight() as any);\n bgNode.setAttribute('x', 0 as any);\n bgNode.setAttribute('y', 0 as any);\n bgNode.setAttribute('id', 0 as any);\n const { color, opacity } = normalizeColor(backgroundColor);\n bgNode.setAttribute('fill', color);\n bgNode.setAttribute('fill-opacity', opacity as any);\n\n this._backgroundRoot.appendChild(bgNode);\n this._backgroundNode = bgNode;\n }\n\n createSVGElement(tag: string): SVGElement {\n return createElement(tag);\n }\n\n paintOne(el: Displayable): SVGElement {\n const svgProxy = getSvgProxy(el);\n svgProxy && (svgProxy as SVGProxy).brush(el);\n return getSvgElement(el);\n }\n\n _paintList(list: Displayable[]) {\n const gradientManager = this._gradientManager;\n const patternManager = this._patternManager;\n const clipPathManager = this._clipPathManager;\n const shadowManager = this._shadowManager;\n\n gradientManager.markAllUnused();\n patternManager.markAllUnused();\n clipPathManager.markAllUnused();\n shadowManager.markAllUnused();\n\n const svgRoot = this._svgRoot;\n const visibleList = this._visibleList;\n const listLen = list.length;\n\n const newVisibleList = [];\n\n for (let i = 0; i < listLen; i++) {\n const displayable = list[i];\n const svgProxy = getSvgProxy(displayable);\n let svgElement = getSvgElement(displayable);\n if (!displayable.invisible) {\n if (displayable.__dirty || !svgElement) {\n svgProxy && (svgProxy as SVGProxy).brush(displayable);\n svgElement = getSvgElement(displayable);\n // Update gradient and shadow\n if (svgElement && displayable.style) {\n gradientManager.update(displayable.style.fill);\n gradientManager.update(displayable.style.stroke);\n patternManager.update(displayable.style.fill);\n patternManager.update(displayable.style.stroke);\n shadowManager.update(svgElement, displayable);\n }\n\n displayable.__dirty = 0;\n }\n\n // May have optimizations and ignore brush(like empty string in TSpan)\n if (svgElement) {\n newVisibleList.push(displayable);\n }\n\n }\n }\n\n const diff = arrayDiff(visibleList, newVisibleList);\n let prevSvgElement;\n let topPrevSvgElement;\n\n // NOTE: First do remove, in case element moved to the head and do remove\n // after add\n for (let i = 0; i < diff.length; i++) {\n const item = diff[i];\n if (item.removed) {\n for (let k = 0; k < item.count; k++) {\n const displayable = visibleList[item.indices[k]];\n const svgElement = getSvgElement(displayable);\n hasClipPath(displayable) ? removeFromMyParent(svgElement)\n : remove(svgRoot, svgElement);\n }\n }\n }\n\n let prevDisplayable;\n let currentClipGroup;\n for (let i = 0; i < diff.length; i++) {\n const item = diff[i];\n // const isAdd = item.added;\n if (item.removed) {\n continue;\n }\n for (let k = 0; k < item.count; k++) {\n const displayable = newVisibleList[item.indices[k]];\n // Update clipPath\n const clipGroup = clipPathManager.update(displayable, prevDisplayable);\n if (clipGroup !== currentClipGroup) {\n // First pop to top level.\n prevSvgElement = topPrevSvgElement;\n if (clipGroup) {\n // Enter second level of clipping group.\n prevSvgElement ? insertAfter(svgRoot, clipGroup, prevSvgElement)\n : prepend(svgRoot, clipGroup);\n topPrevSvgElement = clipGroup;\n // Reset prevSvgElement in second level.\n prevSvgElement = null;\n }\n currentClipGroup = clipGroup;\n }\n\n const svgElement = getSvgElement(displayable);\n // if (isAdd) {\n prevSvgElement\n ? insertAfter(currentClipGroup || svgRoot, svgElement, prevSvgElement)\n : prepend(currentClipGroup || svgRoot, svgElement);\n // }\n\n prevSvgElement = svgElement || prevSvgElement;\n if (!currentClipGroup) {\n topPrevSvgElement = prevSvgElement;\n }\n\n gradientManager.markUsed(displayable);\n gradientManager.addWithoutUpdate(svgElement, displayable);\n\n patternManager.markUsed(displayable);\n patternManager.addWithoutUpdate(svgElement, displayable);\n\n clipPathManager.markUsed(displayable);\n\n prevDisplayable = displayable;\n }\n }\n\n gradientManager.removeUnused();\n patternManager.removeUnused();\n clipPathManager.removeUnused();\n shadowManager.removeUnused();\n\n this._visibleList = newVisibleList;\n }\n\n // Not used any more\n // _getDefs(isForceCreating?: boolean) {\n // let svgRoot = this._svgDom;\n // let defs = svgRoot.getElementsByTagName('defs');\n // if (defs.length === 0) {\n // // Not exist\n // if (isForceCreating) {\n // let defs = svgRoot.insertBefore(\n // createElement('defs'), // Create new tag\n // svgRoot.firstChild // Insert in the front of svg\n // );\n // if (!defs.contains) {\n // // IE doesn't support contains method\n // defs.contains = function (el) {\n // const children = defs.children;\n // if (!children) {\n // return false;\n // }\n // for (let i = children.length - 1; i >= 0; --i) {\n // if (children[i] === el) {\n // return true;\n // }\n // }\n // return false;\n // };\n // }\n // return defs;\n // }\n // else {\n // return null;\n // }\n // }\n // else {\n // return defs[0];\n // }\n // }\n\n resize(width: number | string, height: number | string) {\n const viewport = this._viewport;\n // FIXME Why ?\n viewport.style.display = 'none';\n\n // Save input w/h\n const opts = this._opts;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n\n width = this._getSize(0);\n height = this._getSize(1);\n\n viewport.style.display = '';\n\n if (this._width !== width || this._height !== height) {\n this._width = width;\n this._height = height;\n\n const viewportStyle = viewport.style;\n viewportStyle.width = width + 'px';\n viewportStyle.height = height + 'px';\n\n const svgRoot = this._svgDom;\n // Set width by 'svgRoot.width = width' is invalid\n svgRoot.setAttribute('width', width + '');\n svgRoot.setAttribute('height', height + '');\n }\n\n if (this._backgroundNode) {\n this._backgroundNode.setAttribute('width', width as any);\n this._backgroundNode.setAttribute('height', height as any);\n }\n }\n\n /**\n * 获取绘图区域宽度\n */\n getWidth() {\n return this._width;\n }\n\n /**\n * 获取绘图区域高度\n */\n getHeight() {\n return this._height;\n }\n\n _getSize(whIdx: number) {\n const opts = this._opts;\n const wh = ['width', 'height'][whIdx] as 'width' | 'height';\n const cwh = ['clientWidth', 'clientHeight'][whIdx] as 'clientWidth' | 'clientHeight';\n const plt = ['paddingLeft', 'paddingTop'][whIdx] as 'paddingLeft' | 'paddingTop';\n const prb = ['paddingRight', 'paddingBottom'][whIdx] as 'paddingRight' | 'paddingBottom';\n\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh] as string);\n }\n\n const root = this.root;\n // IE8 does not support getComputedStyle, but it use VML.\n const stl = document.defaultView.getComputedStyle(root);\n\n return (\n (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n - (parseInt10(stl[plt]) || 0)\n - (parseInt10(stl[prb]) || 0)\n ) | 0;\n }\n\n dispose() {\n this.root.innerHTML = '';\n\n this._svgRoot =\n this._backgroundRoot =\n this._svgDom =\n this._backgroundNode =\n this._viewport = this.storage = null;\n }\n\n clear() {\n const viewportNode = this._viewport;\n if (viewportNode && viewportNode.parentNode) {\n viewportNode.parentNode.removeChild(viewportNode);\n }\n }\n\n toDataURL() {\n this.refresh();\n const svgDom = this._svgDom;\n const outerHTML = svgDom.outerHTML\n // outerHTML of `svg` tag is not supported in IE, use `parentNode.innerHTML` instead\n // PENDING: Or use `new XMLSerializer().serializeToString(svg)`?\n || (svgDom.parentNode && svgDom.parentNode as HTMLElement).innerHTML;\n const html = encodeURIComponent(outerHTML.replace(/>\\n\\r<'));\n return 'data:image/svg+xml;charset=UTF-8,' + html;\n }\n refreshHover = createMethodNotSupport('refreshHover') as PainterBase['refreshHover'];\n pathToImage = createMethodNotSupport('pathToImage') as PainterBase['pathToImage'];\n configLayer = createMethodNotSupport('configLayer') as PainterBase['configLayer'];\n}\n\n\n// Not supported methods\nfunction createMethodNotSupport(method: string): any {\n return function () {\n util.logError('In SVG mode painter not support method \"' + method + '\"');\n };\n}\n\n\nexport default SVGPainter;","export * from './src/zrender';\nexport * from './src/export';\n\nimport {registerPainter} from './src/zrender';\nimport CanvasPainter from './src/canvas/Painter';\nimport SVGPainter from './src/svg/Painter';\nregisterPainter('canvas', CanvasPainter);\nregisterPainter('svg', SVGPainter);\n// import './src/vml/vml';\n"],"names":["clone","eventUtil.clientToLocal","dist","eventTool.stop","util.each","vec2.dist","timsort","util.indexOf","easing","easingFuncs","lerp","color.parse","requestAnimationFrame","zrUtil.map","zrUtil.noop","zrUtil.each","create","copy","mul","scale","matrix.identity","matrix.create","matrix.mul","matrix.copy","matrix.invert","vector.applyTransform","matrix.rotate","matrix.translate","matrix.scale","methods","zrUtil.indexOf","zrUtil.keys","HandlerProxy","zrUtil.guid","PRIMARY_STATES_KEYS","EPSILON","v2Create","isNotAroundZero","v2DistSquare","mathMin","mathMax","vec2.create","cubicExtrema","curve.cubicExtrema","cubicAt","curve.cubicAt","quadraticExtremum","curve.quadraticExtremum","quadraticAt","curve.quadraticAt","min","max","vec2.min","vec2.max","mathCos","mathSin","mathSqrt","PI2","dpr","containStroke","curve.cubicProjectPoint","CMD","curve.cubicRootAt","curve.quadraticRootAt","line.containStroke","cubic.containStroke","quadratic.containStroke","arc.containStroke","pathContain.containStroke","pathContain.contain","v2ApplyTransform","PI","roundRectHelper.buildPath","subPixelOptimizeOutputShape","distance","v2Distance","v2Min","v2Max","v2Clone","v2Sub","v2Scale","v2Add","buildPath","polyHelper.buildPath","numberReg","mathAbs","roundSectorHelper.buildPath","Displayble","imageHelper.findExistImage","imageHelper.isImageReady","vec2.normalize","sin","cos","minTv","maxTv","util.createCanvas","util.isObject","util.isGradientObject","util.isImagePatternObject","util.extend","util.merge","util.logError","clonePath","isAroundZero","adjustTextY","zrUtil.logError","color","colorTool.parse","colorTool.toHex","parseInt10"],"mappings":"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"} \ No newline at end of file diff --git a/dist/zrender.min.js b/dist/zrender.min.js index 3d3ff2e82..335f9ad08 100644 --- a/dist/zrender.min.js +++ b/dist/zrender.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t=t||self).zrender={})}(this,function(t){"use strict";var e=function(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1},h=new function(){this.browser=new e,this.node=!1,this.wxa=!1,this.worker=!1,this.canvasSupported=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1};"object"==typeof wx&&"function"==typeof wx.getSystemInfoSync?(h.wxa=!0,h.canvasSupported=!0,h.touchEventsSupported=!0):"undefined"==typeof document&&"undefined"!=typeof self?(h.worker=!0,h.canvasSupported=!0):"undefined"==typeof navigator?(h.node=!0,h.canvasSupported=!0,h.svgSupported=!0):function(t,e){var i=e.browser,r=t.match(/Firefox\/([\d.]+)/),n=t.match(/MSIE\s([\d.]+)/)||t.match(/Trident\/.+?rv:(([\d.]+))/),o=t.match(/Edge?\/([\d.]+)/),a=/micromessenger/i.test(t);r&&(i.firefox=!0,i.version=r[1]);n&&(i.ie=!0,i.version=n[1]);o&&(i.edge=!0,i.version=o[1],i.newEdge=18<+o[1].split(".")[0]);a&&(i.weChat=!0);e.canvasSupported=!!document.createElement("canvas").getContext,e.svgSupported="undefined"!=typeof SVGRect,e.touchEventsSupported="ontouchstart"in window&&!i.ie&&!i.edge,e.pointerEventsSupported="onpointerdown"in window&&(i.edge||i.ie&&11<=+i.version),e.domSupported="undefined"!=typeof document;var s=document.documentElement.style;e.transform3dSupported=(i.ie&&"transition"in s||i.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||i.ie&&9<=+i.version}(navigator.userAgent,h);var s={"[object Function]":!0,"[object RegExp]":!0,"[object Date]":!0,"[object Error]":!0,"[object CanvasGradient]":!0,"[object CanvasPattern]":!0,"[object Image]":!0,"[object Canvas]":!0},l={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0},u=Object.prototype.toString,i=Array.prototype,a=i.forEach,p=i.filter,n=i.slice,c=i.map,r=function(){}.constructor,o=r?r.prototype:null,f={};var d=2311;function y(){return d++}function g(){for(var t=[],e=0;e>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",r[h]+":0",n[l]+":0",r[1-h]+":auto",n[1-l]+":auto",""].join("!important;"),t.appendChild(a),i.push(a)}return i}(e,o),o,n);if(a)return a(t,i,r),1}}function At(t){return"CANVAS"===t.nodeName.toUpperCase()}var Mt="undefined"!=typeof window&&!!window.addEventListener,Dt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Lt=[];function zt(t,e,i,r){return i=i||{},r||!h.canvasSupported?Rt(t,e,i):h.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(i.zrX=e.layerX,i.zrY=e.layerY):null!=e.offsetX?(i.zrX=e.offsetX,i.zrY=e.offsetY):Rt(t,e,i),i}function Rt(t,e,i){if(h.domSupported&&t.getBoundingClientRect){var r=e.clientX,n=e.clientY;if(At(t)){var o=t.getBoundingClientRect();return i.zrX=r-o.left,void(i.zrY=n-o.top)}if(Pt(Lt,t,r,n))return i.zrX=Lt[0],void(i.zrY=Lt[1])}i.zrX=i.zrY=0}function Ot(t){return t||window.event}function It(t,e,i){if(null!=(e=Ot(e)).zrX)return e;var r,n,o=e.type;o&&0<=o.indexOf("touch")?(r="touchend"!==o?e.targetTouches[0]:e.changedTouches[0])&&zt(t,r,e,i):(zt(t,e,e,i),n=function(t){var e=t.wheelDelta;if(e)return e;var i=t.deltaX,r=t.deltaY;return null!=i&&null!=r?3*(0!==r?Math.abs(r):Math.abs(i))*(0r.getWidth()||i<0||i>r.getHeight()}k(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(a){Zt.prototype[a]=function(t){var e,i,r=t.zrX,n=t.zrY,o=Qt(this,r,n);if("mouseup"===a&&o||(i=(e=this.findHover(r,n)).target),"mousedown"===a)this._downEl=i,this._downPoint=[t.zrX,t.zrY],this._upEl=i;else if("mouseup"===a)this._upEl=i;else if("click"===a){if(this._downEl!==this._upEl||!this._downPoint||4>>1])<0?h=o:s=1+o;var l=r-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;0>>1);0>>1);o(t,e[i+u])<0?h=u:a=u+1}return h}function ne(d,y){var a,s,g=Jt,h=0,v=(d.length,[]);function e(t){var e=a[t],i=s[t],r=a[t+1],n=s[t+1];s[t]=i+n,t===h-3&&(a[t+1]=a[t+2],s[t+1]=s[t+2]),h--;var o=re(d[r],d,e,i,0,y);e+=o,0!=(i-=o)&&0!==(n=ie(d[e+i-1],d,r,n,n-1,y))&&(i<=n?function(t,e,i,r){var n=0;for(n=0;ns[t+1])break;e(t)}},forceMergeRuns:function(){for(;1>=1;return t+e}(n);do{(o=te(t,i,r,e))=this._maxSize&&0>4|(3840&n)>>8,240&n|(240&n)>>4,15&n|(15&n)<<4,5===o?parseInt(r.slice(4),16)/15:1),Re(t,e),e):void Me(e,0,0,0,1):7===o||9===o?0<=(n=parseInt(r.slice(1,7),16))&&n<=16777215?(Me(e,(16711680&n)>>16,(65280&n)>>8,255&n,9===o?parseInt(r.slice(7),16)/255:1),Re(t,e),e):void Me(e,0,0,0,1):void 0;var a=r.indexOf("("),s=r.indexOf(")");if(-1!==a&&s+1===o){var h=r.substr(0,a),l=r.substr(a+1,s-(a+1)).split(","),u=1;switch(h){case"rgba":if(4!==l.length)return 3===l.length?Me(e,+l[0],+l[1],+l[2],1):Me(e,0,0,0,1);u=Ce(l.pop());case"rgb":return 3!==l.length?void Me(e,0,0,0,1):(Me(e,Te(l[0]),Te(l[1]),Te(l[2]),u),Re(t,e),e);case"hsla":return 4!==l.length?void Me(e,0,0,0,1):(l[3]=Ce(l[3]),Ie(l,e),Re(t,e),e);case"hsl":return 3!==l.length?void Me(e,0,0,0,1):(Ie(l,e),Re(t,e),e);default:return}}Me(e,0,0,0,1)}}function Ie(t,e){var i=(parseFloat(t[0])%360+360)%360/360,r=Ce(t[1]),n=Ce(t[2]),o=n<=.5?n*(r+1):n+r-n*r,a=2*n-o;return Me(e=e||[],ke(255*Pe(a,o,i+1/3)),ke(255*Pe(a,o,i)),ke(255*Pe(a,o,i-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Fe(t){var e=Oe(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function Be(t,e,i){if(e&&e.length&&0<=t&&t<=1){i=i||[];var r=t*(e.length-1),n=Math.floor(r),o=Math.ceil(r),a=e[n],s=e[o],h=r-n;return i[0]=ke(Ae(a[0],s[0],h)),i[1]=ke(Ae(a[1],s[1],h)),i[2]=ke(Ae(a[2],s[2],h)),i[3]=Se(Ae(a[3],s[3],h)),i}}function Ee(t,e,i){if(e&&e.length&&0<=t&&t<=1){var r=t*(e.length-1),n=Math.floor(r),o=Math.ceil(r),a=Oe(e[n]),s=Oe(e[o]),h=r-n,l=He([ke(Ae(a[0],s[0],h)),ke(Ae(a[1],s[1],h)),ke(Ae(a[2],s[2],h)),Se(Ae(a[3],s[3],h))],"rgba");return i?{color:l,leftIndex:n,rightIndex:o,value:r}:l}}function He(t,e){if(t&&t.length){var i=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(i+=","+t[3]),e+"("+i+")"}}function Ne(t,e){var i=Oe(t);return i?(.299*i[0]+.587*i[1]+.114*i[2])*i[3]/255+(1-i[3])*e:0}var We=Object.freeze({__proto__:null,parse:Oe,lift:function(t,e){var i=Oe(t);if(i){for(var r=0;r<3;r++)i[r]=e<0?i[r]*(1-e)|0:(255-i[r])*e+i[r]|0,255=this.maxTime?this.maxTime=t:this._needsSort=!0;var i,r=this.keyframes,n=r.length;if(this.interpolable)if(D(e)){var o,a=D((i=e)&&i[0])?2:1;if(0e);l++);l=Math.min(l-1,o-2)}var u,p,c,f,d,y,g,v,_,m,x=n[l+1],w=n[l];w&&x&&(this._lastFrame=l,this._lastFramePercent=e,0!=(u=x.percent-w.percent)&&(p=(e-w.percent)/u,c=i?this._additiveValue:h?$e:t[a],(0=i.x&&t<=i.x+i.width&&e>=i.y&&e<=i.y+i.height},ar.prototype.clone=function(){return new ar(this.x,this.y,this.width,this.height)},ar.prototype.copy=function(t){ar.copy(this,t)},ar.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},ar.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},ar.prototype.isZero=function(){return 0===this.width||0===this.height},ar.create=function(t){return new ar(t.x,t.y,t.width,t.height)},ar.copy=function(t,e){t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height},ar.applyTransform=function(t,e,i){if(i){if(i[1]<1e-5&&-1e-5this._sleepAfterStill&&this.animation.stop())},Ir.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},Ir.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},Ir.prototype.addHover=function(t){},Ir.prototype.removeHover=function(t){},Ir.prototype.clearHover=function(){},Ir.prototype.refreshHover=function(){this._needsRefreshHover=!0},Ir.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&"canvas"===this.painter.getType()&&this.painter.refreshHover()},Ir.prototype.resize=function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},Ir.prototype.clearAnimation=function(){this.animation.clear()},Ir.prototype.getWidth=function(){return this.painter.getWidth()},Ir.prototype.getHeight=function(){return this.painter.getHeight()},Ir.prototype.pathToImage=function(t,e){if(this.painter.pathToImage)return this.painter.pathToImage(t,e)},Ir.prototype.setCursorStyle=function(t){this.handler.setCursorStyle(t)},Ir.prototype.findHover=function(t,e){return this.handler.findHover(t,e)},Ir.prototype.on=function(t,e,i){return this.handler.on(t,e,i),this},Ir.prototype.off=function(t,e){this.handler.off(t,e)},Ir.prototype.trigger=function(t,e){this.handler.trigger(t,e)},Ir.prototype.clear=function(){for(var t=this.storage.getRoots(),e=0;ethis._ux||n>this._uy;return this.addData(Tn.L,t,e),this._ctx&&o&&(this._needsDash?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),o?(this._xi=t,this._yi=e,this._pendingPtDist=0):(i=r*r+n*n)>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=e,this._pendingPtDist=i),this},qn.prototype.bezierCurveTo=function(t,e,i,r,n,o){return this.addData(Tn.C,t,e,i,r,n,o),this._ctx&&(this._needsDash?this._dashedBezierTo(t,e,i,r,n,o):this._ctx.bezierCurveTo(t,e,i,r,n,o)),this._xi=n,this._yi=o,this},qn.prototype.quadraticCurveTo=function(t,e,i,r){return this.addData(Tn.Q,t,e,i,r),this._ctx&&(this._needsDash?this._dashedQuadraticTo(t,e,i,r):this._ctx.quadraticCurveTo(t,e,i,r)),this._xi=i,this._yi=r,this},qn.prototype.arc=function(t,e,i,r,n,o){Wn[0]=r,Wn[1]=n,Un(Wn,o),r=Wn[0];var a=(n=Wn[1])-r;return this.addData(Tn.A,t,e,i,i,r,a,0,o?0:1),this._ctx&&this._ctx.arc(t,e,i,r,n,o),this._xi=On(n)*i+t,this._yi=In(n)*i+e,this},qn.prototype.arcTo=function(t,e,i,r,n){return this._ctx&&this._ctx.arcTo(t,e,i,r,n),this},qn.prototype.rect=function(t,e,i,r){return this._ctx&&this._ctx.rect(t,e,i,r),this.addData(Tn.R,t,e,i,r),this},qn.prototype.closePath=function(){this._drawPendingPt(),this.addData(Tn.Z);var t=this._ctx,e=this._x0,i=this._y0;return t&&(this._needsDash&&this._dashedLineTo(e,i),t.closePath()),this._xi=e,this._yi=i,this},qn.prototype.fill=function(t){t&&t.fill(),this.toStatic()},qn.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},qn.prototype.setLineDash=function(t){if(t instanceof Array){this._lineDash=t;for(var e=this._dashIdx=0,i=0;il.length&&(this._expandData(),l=this.data);for(var u=0;ui||Bn(g)>r||p===e-1)&&(d=Math.sqrt(M*M+g*g),n=y,o=m);break;case Tn.C:var v=t[p++],_=t[p++],y=t[p++],m=t[p++],x=t[p++],w=t[p++],d=function(t,e,i,r,n,o,a,s,h){for(var l=t,u=e,p=0,c=1/h,f=1;f<=h;f++){var d=f*c,y=an(t,i,n,a,d),g=an(e,r,o,s,d),v=y-l,_=g-u;p+=Math.sqrt(v*v+_*_),l=y,u=g}return p}(n,o,v,_,y,m,x,w,10),n=x,o=w;break;case Tn.Q:d=function(t,e,i,r,n,o,a){for(var s=t,h=e,l=0,u=1/a,p=1;p<=a;p++){var c=p*u,f=un(t,i,n,c),d=un(e,r,o,c),y=f-s,g=d-h;l+=Math.sqrt(y*y+g*g),s=f,h=d}return l}(n,o,v=t[p++],_=t[p++],y=t[p++],m=t[p++],10),n=y,o=m;break;case Tn.A:var b=t[p++],k=t[p++],S=t[p++],T=t[p++],C=t[p++],P=t[p++],A=P+C;p+=1,t[p++],f&&(a=On(C)*S+b,s=In(C)*T+k),d=Rn(S,T)*zn(Hn,Math.abs(P)),n=On(A)*S+b,o=In(A)*T+k;break;case Tn.R:a=n=t[p++],s=o=t[p++],d=2*t[p++]+2*t[p++];break;case Tn.Z:var M=a-n,g=s-o;d=Math.sqrt(M*M+g*g),n=a,o=s}0<=d&&(l+=h[u++]=d)}return this._pathLen=l},qn.prototype.rebuildPath=function(t,e){var i,r,n,o,a,s,h,l,u,p,c=this.data,f=this._ux,d=this._uy,y=this._len,g=e<1,v=0,_=0,m=0;if(!g||(this._pathSegLen||this._calculateLength(),h=this._pathSegLen,l=e*this._pathLen))t:for(var x=0;x=ro[r=0]+t&&a<=ro[1]+t?p:0}nMath.PI/2&&d<1.5*Math.PI&&(p=-p),c+=p))}return c}(v,_,x,w,w+b,k,C,n);u=Math.cos(w+b)*m+v,p=Math.sin(w+b)*x+_;break;case to.R:c=u=s[d++],f=p=s[d++];if(S=c+s[d++],T=f+s[d++],i){if(Gn(c,f,S,f,e,r,n)||Gn(S,f,S,T,e,r,n)||Gn(S,T,c,T,e,r,n)||Gn(c,T,c,f,e,r,n))return!0}else l+=Jn(S,f,S,T,r,n),l+=Jn(c,T,c,f,r,n);break;case to.Z:if(i){if(Gn(u,p,c,f,e,r,n))return!0}else l+=Jn(u,p,c,f,r,n);u=c,p=f}}return i||(o=p,a=f,Math.abs(o-a)=e.maxIterations){t+=e.ellipsis;break}var a=0===o?function(t,e,i,r){for(var n=0,o=0,a=t.length;oo){0r.width&&(o=e.split("\n"),y=!0),r.accumWidth=l):(u=js(e,d,r.width,r.breakAll,r.accumWidth),r.accumWidth=u.accumWidth+h,a=u.linesWidths,o=u.lines)):o=e.split("\n");for(var g=0;gr.len()&&(l=c}}for(var o,a=this.__startIndex;an[0]){for(h=0;ht);h++);s=r[n[h]]}n.splice(h+1,0,t),(r[t]=e).virtual||(s?(i=s.dom).nextSibling?a.insertBefore(e.dom,i.nextSibling):a.appendChild(e.dom):a.firstChild?a.insertBefore(e.dom,a.firstChild):a.appendChild(e.dom)),e.__painter=this}else g("Layer of zlevel "+t+" is not valid")},Bl.prototype.eachLayer=function(t,e){for(var i=this._zlevelList,r=0;r=p&&c<=e+1){for(var i=[],r=0;r=p&&c<=o+1)return function(t){for(var e=0,i=t.length,r=0,n=0;e\n\r<"))},Fu);function Fu(t,e,i,r){this.type="svg",this.refreshHover=Bu("refreshHover"),this.pathToImage=Bu("pathToImage"),this.configLayer=Bu("configLayer"),this.root=t,this.storage=e,this._opts=i=m({},i||{});var n=El("svg");n.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns","http://www.w3.org/2000/svg"),n.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),n.setAttribute("version","1.1"),n.setAttribute("baseProfile","full"),n.style.cssText="user-select:none;position:absolute;left:0;top:0;";var o=El("g");n.appendChild(o);var a=El("g");n.appendChild(a),this._gradientManager=new fu(r,a),this._patternManager=new xu(r,a),this._clipPathManager=new Su(r,a),this._shadowManager=new Pu(r,a);var s=document.createElement("div");s.style.cssText="overflow:hidden;position:relative",this._svgDom=n,this._svgRoot=a,this._backgroundRoot=o,this._viewport=s,t.appendChild(s),s.appendChild(n),this.resize(i.width,i.height),this._visibleList=[]}function Bu(t){return function(){g('In SVG mode painter not support method "'+t+'"')}}Fr("canvas",Fl),Fr("svg",Iu),t.Arc=ah,t.ArcShape=oh,t.BezierCurve=ch,t.BezierCurveShape=lh,t.BoundingRect=or,t.Circle=Yo,t.CircleShape=Uo,t.CompoundPath=Cs,t.Droplet=gh,t.DropletShape=yh,t.Element=kr,t.Ellipse=ea,t.EllipseShape=ta,t.Group=Mr,t.Heart=xh,t.HeartShape=mh,t.Image=No,t.IncrementalDisplayable=Ds,t.Isogon=Ph,t.IsogonShape=Ch,t.Line=aa,t.LineShape=oa,t.LinearGradient=wa,t.OrientedBoundingRect=nl,t.Path=fo,t.Pattern=Jh,t.Point=Zi,t.Polygon=ca,t.PolygonShape=pa,t.Polyline=ga,t.PolylineShape=ya,t.RadialGradient=Sa,t.Rect=Qo,t.RectShape=Zo,t.Ring=Lh,t.RingShape=Dh,t.Rose=Eh,t.RoseShape=Bh,t.Sector=cs,t.SectorShape=ps,t.Star=jh,t.StarShape=Yh,t.TSpan=Ma,t.Text=Zs,t.Trochoid=Qh,t.TrochoidShape=Kh,t.color=We,t.dispose=function(t){t.dispose()},t.disposeAll=function(){for(var t in Rr)Rr.hasOwnProperty(t)&&Rr[t].dispose();Rr={}},t.getInstance=function(t){return Rr[t]},t.init=function(t,e){var i=new Or(y(),t,e);return Rr[i.id]=i},t.matrix=Hi,t.morphPath=function(t,e,i){var r,n;if(!t||!e)return e;t.path||t.createPathProxy(),(r=t.path).beginPath(),t.buildPath(r,t.shape),e.path||e.createPathProxy(),(n=e.path)===r&&(n=new jn(!1)),n.beginPath(),Ss(e)?e.__oldBuildPath(n,e.shape):e.buildPath(n,e.shape);var o=ms(vs(r),vs(n)),a=ws(o[0],o[1],10,Math.PI);!function(t,e,i){if(Ss(t))return ks(t,e,i);var r=t;r.__oldBuildPath=r.buildPath,r.buildPath=bs,ks(r,e,i)}(e,a,0);var s=i&&i.done,h=i&&i.aborted,l=i&&i.during;return e.animateTo({__morphT:1},x({during:function(t){e.dirtyShape(),l&&l(t)},done:function(){var t;Ss(t=e)&&(t.buildPath=t.__oldBuildPath,t.__oldBuildPath=t.__morphingData=null),e.createPathProxy(),e.dirtyShape(),s&&s()},aborted:function(){h&&h()}},i)),e},t.parseSVG=function(t,e){return(new Ia).parse(t,e)},t.path=Fo,t.registerPainter=Fr,t.showDebugDirtyRect=function(t,n){n=n||{};var e=t.painter;if(!e.getLayers)throw new Error("Debug dirty rect can only been used on canvas renderer.");if(e.isSingleCanvas())throw new Error("Debug dirty rect can only been used on zrender inited with container.");var o=document.createElement("div");o.style.cssText="\nposition:absolute;\nleft:0;\ntop:0;\nright:0;\nbottom:0;\npointer-events:none;\n",o.className="ec-debug-dirty-rect-container";var a=[],i=t.dom;i.appendChild(o),"static"===getComputedStyle(i).position&&(i.style.position="relative"),t.on("rendered",function(){if(e.getLayers){var r=0;e.eachBuiltinLayer(function(t){if(t.debugGetPaintRects)for(var e=t.debugGetPaintRects(),i=0;i>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",i[h]+":0",n[l]+":0",i[1-h]+":auto",n[1-l]+":auto",""].join("!important;"),t.appendChild(a),r.push(a)}return r}(e,o),o,n);if(a)return a(t,r,i),1}}function Mt(t){return"CANVAS"===t.nodeName.toUpperCase()}var At="undefined"!=typeof window&&!!window.addEventListener,Dt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,zt=[];function Lt(t,e,r,i){return r=r||{},i||!h.canvasSupported?Rt(t,e,r):h.browser.firefox&&null!=e.layerX&&e.layerX!==e.offsetX?(r.zrX=e.layerX,r.zrY=e.layerY):null!=e.offsetX?(r.zrX=e.offsetX,r.zrY=e.offsetY):Rt(t,e,r),r}function Rt(t,e,r){if(h.domSupported&&t.getBoundingClientRect){var i=e.clientX,n=e.clientY;if(Mt(t)){var o=t.getBoundingClientRect();return r.zrX=i-o.left,void(r.zrY=n-o.top)}if(Pt(zt,t,i,n))return r.zrX=zt[0],void(r.zrY=zt[1])}r.zrX=r.zrY=0}function Ot(t){return t||window.event}function It(t,e,r){if(null!=(e=Ot(e)).zrX)return e;var i,n,o=e.type;o&&0<=o.indexOf("touch")?(i="touchend"!==o?e.targetTouches[0]:e.changedTouches[0])&&Lt(t,i,e,r):(Lt(t,e,e,r),n=function(t){var e=t.wheelDelta;if(e)return e;var r=t.deltaX,i=t.deltaY;return null!=r&&null!=i?3*(0!==i?Math.abs(i):Math.abs(r))*(0i.getWidth()||r<0||r>i.getHeight()}k(["click","mousedown","mouseup","mousewheel","dblclick","contextmenu"],function(a){Zt.prototype[a]=function(t){var e,r,i=t.zrX,n=t.zrY,o=Qt(this,i,n);if("mouseup"===a&&o||(r=(e=this.findHover(i,n)).target),"mousedown"===a)this._downEl=r,this._downPoint=[t.zrX,t.zrY],this._upEl=r;else if("mouseup"===a)this._upEl=r;else if("click"===a){if(this._downEl!==this._upEl||!this._downPoint||4>>1])<0?h=o:s=1+o;var l=i-s;switch(l){case 3:t[s+3]=t[s+2];case 2:t[s+2]=t[s+1];case 1:t[s+1]=t[s];break;default:for(;0>>1);0>>1);o(t,e[r+u])<0?h=u:a=u+1}return h}function ne(d,y){var a,s,g=Jt,h=0,v=(d.length,[]);function e(t){var e=a[t],r=s[t],i=a[t+1],n=s[t+1];s[t]=r+n,t===h-3&&(a[t+1]=a[t+2],s[t+1]=s[t+2]),h--;var o=ie(d[i],d,e,r,0,y);e+=o,0!=(r-=o)&&0!==(n=re(d[e+r-1],d,i,n,n-1,y))&&(r<=n?function(t,e,r,i){var n=0;for(n=0;ns[t+1])break;e(t)}},forceMergeRuns:function(){for(;1>=1;return t+e}(n);do{(o=te(t,r,i,e))=this._maxSize&&0>4|(3840&n)>>8,240&n|(240&n)>>4,15&n|(15&n)<<4,5===o?parseInt(i.slice(4),16)/15:1),Re(t,e),e):void Ae(e,0,0,0,1):7===o||9===o?0<=(n=parseInt(i.slice(1,7),16))&&n<=16777215?(Ae(e,(16711680&n)>>16,(65280&n)>>8,255&n,9===o?parseInt(i.slice(7),16)/255:1),Re(t,e),e):void Ae(e,0,0,0,1):void 0;var a=i.indexOf("("),s=i.indexOf(")");if(-1!==a&&s+1===o){var h=i.substr(0,a),l=i.substr(a+1,s-(a+1)).split(","),u=1;switch(h){case"rgba":if(4!==l.length)return 3===l.length?Ae(e,+l[0],+l[1],+l[2],1):Ae(e,0,0,0,1);u=Ce(l.pop());case"rgb":return 3!==l.length?void Ae(e,0,0,0,1):(Ae(e,Te(l[0]),Te(l[1]),Te(l[2]),u),Re(t,e),e);case"hsla":return 4!==l.length?void Ae(e,0,0,0,1):(l[3]=Ce(l[3]),Ie(l,e),Re(t,e),e);case"hsl":return 3!==l.length?void Ae(e,0,0,0,1):(Ie(l,e),Re(t,e),e);default:return}}Ae(e,0,0,0,1)}}function Ie(t,e){var r=(parseFloat(t[0])%360+360)%360/360,i=Ce(t[1]),n=Ce(t[2]),o=n<=.5?n*(i+1):n+i-n*i,a=2*n-o;return Ae(e=e||[],ke(255*Pe(a,o,r+1/3)),ke(255*Pe(a,o,r)),ke(255*Pe(a,o,r-1/3)),1),4===t.length&&(e[3]=t[3]),e}function Fe(t){var e=Oe(t);if(e)return((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1)}function Be(t,e,r){if(e&&e.length&&0<=t&&t<=1){r=r||[];var i=t*(e.length-1),n=Math.floor(i),o=Math.ceil(i),a=e[n],s=e[o],h=i-n;return r[0]=ke(Me(a[0],s[0],h)),r[1]=ke(Me(a[1],s[1],h)),r[2]=ke(Me(a[2],s[2],h)),r[3]=Se(Me(a[3],s[3],h)),r}}function Ee(t,e,r){if(e&&e.length&&0<=t&&t<=1){var i=t*(e.length-1),n=Math.floor(i),o=Math.ceil(i),a=Oe(e[n]),s=Oe(e[o]),h=i-n,l=He([ke(Me(a[0],s[0],h)),ke(Me(a[1],s[1],h)),ke(Me(a[2],s[2],h)),Se(Me(a[3],s[3],h))],"rgba");return r?{color:l,leftIndex:n,rightIndex:o,value:i}:l}}function He(t,e){if(t&&t.length){var r=t[0]+","+t[1]+","+t[2];return"rgba"!==e&&"hsva"!==e&&"hsla"!==e||(r+=","+t[3]),e+"("+r+")"}}function Ne(t,e){var r=Oe(t);return r?(.299*r[0]+.587*r[1]+.114*r[2])*r[3]/255+(1-r[3])*e:0}var We=Object.freeze({__proto__:null,parse:Oe,lift:function(t,e){var r=Oe(t);if(r){for(var i=0;i<3;i++)r[i]=e<0?r[i]*(1-e)|0:(255-r[i])*e+r[i]|0,255=this.maxTime?this.maxTime=t:this._needsSort=!0;var r,i=this.keyframes,n=i.length;if(this.interpolable)if(D(e)){var o,a=D((r=e)&&r[0])?2:1;if(0e);l++);l=Math.min(l-1,o-2)}var u,p,c,f,d,y,g,v,_,m,x=n[l+1],w=n[l];w&&x&&(this._lastFrame=l,this._lastFramePercent=e,0!=(u=x.percent-w.percent)&&(p=(e-w.percent)/u,c=r?this._additiveValue:h?$e:t[a],(0=r.x&&t<=r.x+r.width&&e>=r.y&&e<=r.y+r.height},si.prototype.clone=function(){return new si(this.x,this.y,this.width,this.height)},si.prototype.copy=function(t){si.copy(this,t)},si.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},si.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},si.prototype.isZero=function(){return 0===this.width||0===this.height},si.create=function(t){return new si(t.x,t.y,t.width,t.height)},si.copy=function(t,e){t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height},si.applyTransform=function(t,e,r){if(r){if(r[1]<1e-5&&-1e-5this._sleepAfterStill&&this.animation.stop())},Fi.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},Fi.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},Fi.prototype.addHover=function(t){},Fi.prototype.removeHover=function(t){},Fi.prototype.clearHover=function(){},Fi.prototype.refreshHover=function(){this._needsRefreshHover=!0},Fi.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&"canvas"===this.painter.getType()&&this.painter.refreshHover()},Fi.prototype.resize=function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},Fi.prototype.clearAnimation=function(){this.animation.clear()},Fi.prototype.getWidth=function(){return this.painter.getWidth()},Fi.prototype.getHeight=function(){return this.painter.getHeight()},Fi.prototype.pathToImage=function(t,e){if(this.painter.pathToImage)return this.painter.pathToImage(t,e)},Fi.prototype.setCursorStyle=function(t){this.handler.setCursorStyle(t)},Fi.prototype.findHover=function(t,e){return this.handler.findHover(t,e)},Fi.prototype.on=function(t,e,r){return this.handler.on(t,e,r),this},Fi.prototype.off=function(t,e){this.handler.off(t,e)},Fi.prototype.trigger=function(t,e){this.handler.trigger(t,e)},Fi.prototype.clear=function(){for(var t=this.storage.getRoots(),e=0;ethis._ux||n>this._uy;return this.addData(Pn.L,t,e),this._ctx&&o&&(this._needsDash?this._dashedLineTo(t,e):this._ctx.lineTo(t,e)),o?(this._xi=t,this._yi=e,this._pendingPtDist=0):(r=i*i+n*n)>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=e,this._pendingPtDist=r),this},Vn.prototype.bezierCurveTo=function(t,e,r,i,n,o){return this._drawPendingPt(),this.addData(Pn.C,t,e,r,i,n,o),this._ctx&&(this._needsDash?this._dashedBezierTo(t,e,r,i,n,o):this._ctx.bezierCurveTo(t,e,r,i,n,o)),this._xi=n,this._yi=o,this},Vn.prototype.quadraticCurveTo=function(t,e,r,i){return this._drawPendingPt(),this.addData(Pn.Q,t,e,r,i),this._ctx&&(this._needsDash?this._dashedQuadraticTo(t,e,r,i):this._ctx.quadraticCurveTo(t,e,r,i)),this._xi=r,this._yi=i,this},Vn.prototype.arc=function(t,e,r,i,n,o){this._drawPendingPt(),Xn[0]=i,Xn[1]=n,Yn(Xn,o),i=Xn[0];var a=(n=Xn[1])-i;return this.addData(Pn.A,t,e,r,r,i,a,0,o?0:1),this._ctx&&this._ctx.arc(t,e,r,i,n,o),this._xi=Fn(n)*r+t,this._yi=Bn(n)*r+e,this},Vn.prototype.arcTo=function(t,e,r,i,n){return this._drawPendingPt(),this._ctx&&this._ctx.arcTo(t,e,r,i,n),this},Vn.prototype.rect=function(t,e,r,i){return this._drawPendingPt(),this._ctx&&this._ctx.rect(t,e,r,i),this.addData(Pn.R,t,e,r,i),this},Vn.prototype.closePath=function(){this._drawPendingPt(),this.addData(Pn.Z);var t=this._ctx,e=this._x0,r=this._y0;return t&&(this._needsDash&&this._dashedLineTo(e,r),t.closePath()),this._xi=e,this._yi=r,this},Vn.prototype.fill=function(t){t&&t.fill(),this.toStatic()},Vn.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},Vn.prototype.setLineDash=function(t){if(t instanceof Array){this._lineDash=t;for(var e=this._dashIdx=0,r=0;rl.length&&(this._expandData(),l=this.data);for(var u=0;ur||Hn(g)>i||p===e-1)&&(d=Math.sqrt(A*A+g*g),n=y,o=m);break;case Pn.C:var v=t[p++],_=t[p++],y=t[p++],m=t[p++],x=t[p++],w=t[p++],d=function(t,e,r,i,n,o,a,s,h){for(var l=t,u=e,p=0,c=1/h,f=1;f<=h;f++){var d=f*c,y=sn(t,r,n,a,d),g=sn(e,i,o,s,d),v=y-l,_=g-u;p+=Math.sqrt(v*v+_*_),l=y,u=g}return p}(n,o,v,_,y,m,x,w,10),n=x,o=w;break;case Pn.Q:d=function(t,e,r,i,n,o,a){for(var s=t,h=e,l=0,u=1/a,p=1;p<=a;p++){var c=p*u,f=pn(t,r,n,c),d=pn(e,i,o,c),y=f-s,g=d-h;l+=Math.sqrt(y*y+g*g),s=f,h=d}return l}(n,o,v=t[p++],_=t[p++],y=t[p++],m=t[p++],10),n=y,o=m;break;case Pn.A:var b=t[p++],k=t[p++],S=t[p++],T=t[p++],C=t[p++],P=t[p++],M=P+C;p+=1,t[p++],f&&(a=Fn(C)*S+b,s=Bn(C)*T+k),d=In(S,T)*On(Wn,Math.abs(P)),n=Fn(M)*S+b,o=Bn(M)*T+k;break;case Pn.R:a=n=t[p++],s=o=t[p++],d=2*t[p++]+2*t[p++];break;case Pn.Z:var A=a-n,g=s-o;d=Math.sqrt(A*A+g*g),n=a,o=s}0<=d&&(l+=h[u++]=d)}return this._pathLen=l},Vn.prototype.rebuildPath=function(t,e){var r,i,n,o,a,s,h,l,u,p,c=this.data,f=this._ux,d=this._uy,y=this._len,g=e<1,v=0,_=0,m=0;if(!g||(this._pathSegLen||this._calculateLength(),h=this._pathSegLen,l=e*this._pathLen))t:for(var x=0;x=oo[i=0]+t&&a<=oo[1]+t?p:0}nMath.PI/2&&d<1.5*Math.PI&&(p=-p),c+=p))}return c}(v,_,x,w,w+b,k,C,n);u=Math.cos(w+b)*m+v,p=Math.sin(w+b)*x+_;break;case ro.R:c=u=s[d++],f=p=s[d++];if(S=c+s[d++],T=f+s[d++],r){if(Zn(c,f,S,f,e,i,n)||Zn(S,f,S,T,e,i,n)||Zn(S,T,c,T,e,i,n)||Zn(c,T,c,f,e,i,n))return!0}else l+=eo(S,f,S,T,i,n),l+=eo(c,T,c,f,i,n);break;case ro.Z:if(r){if(Zn(u,p,c,f,e,i,n))return!0}else l+=eo(u,p,c,f,i,n);u=c,p=f}}return r||(o=p,a=f,Math.abs(o-a)Math.abs(l),p=bs([h,l],u?0:1,e),c=(u?s:l)/p.length,f=0;f=e.maxIterations){t+=e.ellipsis;break}var a=0===o?function(t,e,r,i){for(var n=0,o=0,a=t.length;oo){0i.width&&(o=e.split("\n"),y=!0),i.accumWidth=l):(u=uh(e,d,i.width,i.breakAll,i.accumWidth),i.accumWidth=u.accumWidth+h,a=u.linesWidths,o=u.lines)):o=e.split("\n");for(var g=0;gi.len()&&(l=c}}for(var o,a=this.__startIndex;an[0]){for(h=0;ht);h++);s=i[n[h]]}n.splice(h+1,0,t),(i[t]=e).virtual||(s?(r=s.dom).nextSibling?a.insertBefore(e.dom,r.nextSibling):a.appendChild(e.dom):a.firstChild?a.insertBefore(e.dom,a.firstChild):a.appendChild(e.dom)),e.__painter=this}else g("Layer of zlevel "+t+" is not valid")},nu.prototype.eachLayer=function(t,e){for(var r=this._zlevelList,i=0;i=p&&c<=e+1){for(var r=[],i=0;i=p&&c<=o+1)return function(t){for(var e=0,r=t.length,i=0,n=0;e\n\r<"))},op);function op(t,e,r,i){this.type="svg",this.refreshHover=ap("refreshHover"),this.pathToImage=ap("pathToImage"),this.configLayer=ap("configLayer"),this.root=t,this.storage=e,this._opts=r=m({},r||{});var n=ou("svg");n.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns","http://www.w3.org/2000/svg"),n.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink","http://www.w3.org/1999/xlink"),n.setAttribute("version","1.1"),n.setAttribute("baseProfile","full"),n.style.cssText="user-select:none;position:absolute;left:0;top:0;";var o=ou("g");n.appendChild(o);var a=ou("g");n.appendChild(a),this._gradientManager=new Iu(i,a),this._patternManager=new Xu(i,a),this._clipPathManager=new Gu(i,a),this._shadowManager=new Ku(i,a);var s=document.createElement("div");s.style.cssText="overflow:hidden;position:relative",this._svgDom=n,this._svgRoot=a,this._backgroundRoot=o,this._viewport=s,t.appendChild(s),s.appendChild(n),this.resize(r.width,r.height),this._visibleList=[]}function ap(t){return function(){g('In SVG mode painter not support method "'+t+'"')}}Bi("canvas",iu),Bi("svg",np),t.Arc=Ch,t.ArcShape=Th,t.BezierCurve=Lh,t.BezierCurveShape=Ah,t.BoundingRect=ai,t.Circle=Vo,t.CircleShape=Go,t.CompoundPath=Ys,t.Droplet=Fh,t.DropletShape=Ih,t.Element=Si,t.Ellipse=oa,t.EllipseShape=na,t.Group=Di,t.Heart=Nh,t.HeartShape=Hh,t.Image=jo,t.IncrementalDisplayable=Zs,t.Isogon=Gh,t.IsogonShape=qh,t.Line=ua,t.LineShape=la,t.LinearGradient=Ta,t.OrientedBoundingRect=Sl,t.Path=go,t.Pattern=ml,t.Point=Kr,t.Polygon=ga,t.PolygonShape=ya,t.Polyline=xa,t.PolylineShape=ma,t.RadialGradient=Ma,t.Rect=ea,t.RectShape=Jo,t.Ring=Qh,t.RingShape=Kh,t.Rose=nl,t.RoseShape=il,t.Sector=gs,t.SectorShape=ys,t.Star=pl,t.StarShape=ul,t.TSpan=Ra,t.Text=dh,t.Trochoid=vl,t.TrochoidShape=gl,t.color=We,t.dispose=function(t){t.dispose()},t.disposeAll=function(){for(var t in Oi)Oi.hasOwnProperty(t)&&Oi[t].dispose();Oi={}},t.getInstance=function(t){return Oi[t]},t.init=function(t,e){var r=new Ii(y(),t,e);return Oi[r.id]=r},t.matrix=Hr,t.morph=js,t.parseSVG=function(t,e){return(new Ha).parse(t,e)},t.path=No,t.registerPainter=Bi,t.showDebugDirtyRect=function(t,n){n=n||{};var e=t.painter;if(!e.getLayers)throw new Error("Debug dirty rect can only been used on canvas renderer.");if(e.isSingleCanvas())throw new Error("Debug dirty rect can only been used on zrender inited with container.");var o=document.createElement("div");o.style.cssText="\nposition:absolute;\nleft:0;\ntop:0;\nright:0;\nbottom:0;\npointer-events:none;\n",o.className="ec-debug-dirty-rect-container";var a=[],r=t.dom;r.appendChild(o),"static"===getComputedStyle(r).position&&(r.style.position="relative"),t.on("rendered",function(){if(e.getLayers){var i=0;e.eachBuiltinLayer(function(t){if(t.debugGetPaintRects)for(var e=t.debugGetPaintRects(),r=0;r