zrender.js.map 949 KB
{"version":3,"file":"zrender.js","sources":["../src/core/guid.js","../src/core/env.js","../src/core/util.js","../src/core/vector.js","../src/mixin/Draggable.js","../src/mixin/Eventful.js","../src/Handler.js","../src/core/matrix.js","../src/mixin/Transformable.js","../src/animation/easing.js","../src/animation/Clip.js","../src/core/LRU.js","../src/tool/color.js","../src/animation/Animator.js","../src/config.js","../src/core/log.js","../src/mixin/Animatable.js","../src/Element.js","../src/core/BoundingRect.js","../src/container/Group.js","../src/core/timsort.js","../src/Storage.js","../src/graphic/helper/fixShadow.js","../src/graphic/Style.js","../src/graphic/Pattern.js","../src/Layer.js","../src/animation/requestAnimationFrame.js","../src/graphic/helper/image.js","../src/contain/text.js","../src/graphic/helper/roundRect.js","../src/graphic/helper/text.js","../src/graphic/mixin/RectText.js","../src/graphic/Displayable.js","../src/graphic/Image.js","../src/Painter.js","../src/core/event.js","../src/animation/Animation.js","../src/core/GestureMgr.js","../src/dom/HandlerProxy.js","../src/zrender.js","../src/core/curve.js","../src/core/bbox.js","../src/core/PathProxy.js","../src/contain/line.js","../src/contain/cubic.js","../src/contain/quadratic.js","../src/contain/util.js","../src/contain/arc.js","../src/contain/windingLine.js","../src/contain/path.js","../src/graphic/Path.js","../src/tool/transformPath.js","../src/tool/path.js","../src/graphic/CompoundPath.js","../src/graphic/Text.js","../src/graphic/IncrementalDisplayable.js","../src/graphic/shape/Arc.js","../src/graphic/shape/BezierCurve.js","../src/graphic/shape/Circle.js","../src/graphic/shape/Droplet.js","../src/graphic/shape/Ellipse.js","../src/graphic/shape/Heart.js","../src/graphic/shape/Isogon.js","../src/graphic/shape/Line.js","../src/graphic/helper/smoothSpline.js","../src/graphic/helper/smoothBezier.js","../src/graphic/helper/poly.js","../src/graphic/shape/Polygon.js","../src/graphic/shape/Polyline.js","../src/graphic/shape/Rect.js","../src/graphic/shape/Ring.js","../src/graphic/shape/Rose.js","../src/graphic/helper/fixClipWithShadow.js","../src/graphic/shape/Sector.js","../src/graphic/shape/Star.js","../src/graphic/shape/Trochoid.js","../src/graphic/Gradient.js","../src/graphic/LinearGradient.js","../src/graphic/RadialGradient.js","../src/export.js","../src/svg/core.js","../src/svg/graphic.js","../src/core/arrayDiff2.js","../src/svg/helper/Definable.js","../src/svg/helper/GradientManager.js","../src/svg/helper/ClippathManager.js","../src/svg/helper/ShadowManager.js","../src/svg/Painter.js","../src/svg/svg.js","../src/vml/core.js","../src/vml/graphic.js","../src/vml/Painter.js","../src/vml/vml.js"],"sourcesContent":["/**\n * zrender: 生成唯一id\n *\n * @author errorrik (errorrik@gmail.com)\n */\n\nvar idStart = 0x0907;\n\nexport default function () {\n    return idStart++;\n}","/**\n * echarts设备环境识别\n *\n * @desc echarts基于Canvas,纯Javascript图表库,提供直观,生动,可交互,可个性化定制的数据统计图表。\n * @author firede[firede@firede.us]\n * @desc thanks zepto.\n */\n\nvar env = {};\n\nif (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') {\n    // In Weixin Application\n    env = {\n        browser: {},\n        os: {},\n        node: false,\n        wxa: true, // Weixin Application\n        canvasSupported: true,\n        svgSupported: false,\n        touchEventsSupported: true\n    }\n}\nelse if (typeof document === 'undefined' && typeof self !== 'undefined') {\n    // In worker\n    env = {\n        browser: {},\n        os: {},\n        node: false,\n        worker: true,\n        canvasSupported: true\n    };\n}\nelse if (typeof navigator === 'undefined') {\n    // In node\n    env = {\n        browser: {},\n        os: {},\n        node: true,\n        worker: false,\n        // Assume canvas is supported\n        canvasSupported: true,\n        svgSupported: true\n    };\n}\nelse {\n    env = detect(navigator.userAgent);\n}\n\nexport default env;\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) {\n    var os = {};\n    var browser = {};\n    // var webkit = ua.match(/Web[kK]it[\\/]{0,1}([\\d.]+)/);\n    // var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n    // var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n    // var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n    // var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n    // var webos = ua.match(/(webOS|hpwOS)[\\s\\/]([\\d.]+)/);\n    // var touchpad = webos && ua.match(/TouchPad/);\n    // var kindle = ua.match(/Kindle\\/([\\d.]+)/);\n    // var silk = ua.match(/Silk\\/([\\d._]+)/);\n    // var blackberry = ua.match(/(BlackBerry).*Version\\/([\\d.]+)/);\n    // var bb10 = ua.match(/(BB10).*Version\\/([\\d.]+)/);\n    // var rimtabletos = ua.match(/(RIM\\sTablet\\sOS)\\s([\\d.]+)/);\n    // var playbook = ua.match(/PlayBook/);\n    // var chrome = ua.match(/Chrome\\/([\\d.]+)/) || ua.match(/CriOS\\/([\\d.]+)/);\n    var firefox = ua.match(/Firefox\\/([\\d.]+)/);\n    // var safari = webkit && ua.match(/Mobile\\//) && !chrome;\n    // var webview = ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome;\n    var ie = ua.match(/MSIE\\s([\\d.]+)/)\n        // IE 11 Trident/7.0; rv:11.0\n        || ua.match(/Trident\\/.+?rv:(([\\d.]+))/);\n    var edge = ua.match(/Edge\\/([\\d.]+)/); // IE 12 and 12+\n\n    var weChat = (/micromessenger/i).test(ua);\n\n    // Todo: clean this up with a better OS/browser seperation:\n    // - discern (more) between multiple browsers on android\n    // - decide if kindle fire in silk mode is android or not\n    // - Firefox on Android doesn't specify the Android version\n    // - possibly devide in os, device and browser hashes\n\n    // if (browser.webkit = !!webkit) browser.version = webkit[1];\n\n    // if (android) os.android = true, os.version = android[2];\n    // if (iphone && !ipod) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.');\n    // if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.');\n    // if (ipod) os.ios = os.ipod = true, os.version = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n    // if (webos) os.webos = true, os.version = webos[2];\n    // if (touchpad) os.touchpad = true;\n    // if (blackberry) os.blackberry = true, os.version = blackberry[2];\n    // if (bb10) os.bb10 = true, os.version = bb10[2];\n    // if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2];\n    // if (playbook) browser.playbook = true;\n    // if (kindle) os.kindle = true, os.version = kindle[1];\n    // if (silk) browser.silk = true, browser.version = silk[1];\n    // if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true;\n    // if (chrome) browser.chrome = true, browser.version = chrome[1];\n    if (firefox) {\n        browser.firefox = true;\n        browser.version = firefox[1];\n    }\n    // if (safari && (ua.match(/Safari/) || !!os.ios)) browser.safari = true;\n    // if (webview) browser.webview = true;\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    }\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    // os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) ||\n    //     (firefox && ua.match(/Tablet/)) || (ie && !ua.match(/Phone/) && ua.match(/Touch/)));\n    // os.phone  = !!(!os.tablet && !os.ipod && (android || iphone || webos ||\n    //     (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\\/([\\d.]+)/)) ||\n    //     (firefox && ua.match(/Mobile/)) || (ie && ua.match(/Touch/))));\n\n    return {\n        browser: browser,\n        os: os,\n        node: false,\n        // 原生canvas支持,改极端点了\n        // canvasSupported : !(browser.ie && parseFloat(browser.version) < 9)\n        canvasSupported: !!document.createElement('canvas').getContext,\n        svgSupported: typeof SVGRect !== 'undefined',\n        // works on most browsers\n        // IE10/11 does not support touch event, and MS Edge supports them but not by\n        // default, so we dont check navigator.maxTouchPoints for them here.\n        touchEventsSupported: 'ontouchstart' in window && !browser.ie && !browser.edge,\n        // <http://caniuse.com/#search=pointer%20event>.\n        pointerEventsSupported: 'onpointerdown' in window\n            // Firefox supports pointer but not by default, only MS browsers are reliable on pointer\n            // events currently. So we dont use that on other browsers unless tested sufficiently.\n            // Although IE 10 supports pointer event, it use old style and is different from the\n            // standard. So we exclude that. (IE 10 is hardly used on touch device)\n            && (browser.edge || (browser.ie && browser.version >= 11))\n        // passiveSupported: detectPassiveSupport()\n    };\n}\n\n// See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n// function detectPassiveSupport() {\n//     // Test via a getter in the options object to see if the passive property is accessed\n//     var supportsPassive = false;\n//     try {\n//         var opts = Object.defineProperty({}, 'passive', {\n//             get: function() {\n//                 supportsPassive = true;\n//             }\n//         });\n//         window.addEventListener('testPassive', function() {}, opts);\n//     } catch (e) {\n//     }\n//     return supportsPassive;\n// }\n","/**\n * @module zrender/core/util\n */\n\n// 用于处理merge时无法遍历Date等对象的问题\nvar BUILTIN_OBJECT = {\n    '[object Function]': 1,\n    '[object RegExp]': 1,\n    '[object Date]': 1,\n    '[object Error]': 1,\n    '[object CanvasGradient]': 1,\n    '[object CanvasPattern]': 1,\n    // For node-canvas\n    '[object Image]': 1,\n    '[object Canvas]': 1\n};\n\nvar TYPED_ARRAY = {\n    '[object Int8Array]': 1,\n    '[object Uint8Array]': 1,\n    '[object Uint8ClampedArray]': 1,\n    '[object Int16Array]': 1,\n    '[object Uint16Array]': 1,\n    '[object Int32Array]': 1,\n    '[object Uint32Array]': 1,\n    '[object Float32Array]': 1,\n    '[object Float64Array]': 1\n};\n\nvar objToString = Object.prototype.toString;\n\nvar arrayProto = Array.prototype;\nvar nativeForEach = arrayProto.forEach;\nvar nativeFilter = arrayProto.filter;\nvar nativeSlice = arrayProto.slice;\nvar nativeMap = arrayProto.map;\nvar nativeReduce = arrayProto.reduce;\n\n// Avoid assign to an exported variable, for transforming to cjs.\nvar methods = {};\n\nexport function $override(name, fn) {\n    // Clear ctx instance for different environment\n    if (name === 'createCanvas') {\n        _ctx = null;\n    }\n\n    methods[name] = fn;\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 *\n * @param {*} source\n * @return {*} new\n */\nexport function clone(source) {\n    if (source == null || typeof source != 'object') {\n        return source;\n    }\n\n    var result = source;\n    var typeStr = objToString.call(source);\n\n    if (typeStr === '[object Array]') {\n        if (!isPrimitive(source)) {\n            result = [];\n            for (var i = 0, len = source.length; i < len; i++) {\n                result[i] = clone(source[i]);\n            }\n        }\n    }\n    else if (TYPED_ARRAY[typeStr]) {\n        if (!isPrimitive(source)) {\n            var Ctor = source.constructor;\n            if (source.constructor.from) {\n                result = Ctor.from(source);\n            }\n            else {\n                result = new Ctor(source.length);\n                for (var i = 0, len = source.length; i < len; i++) {\n                    result[i] = clone(source[i]);\n                }\n            }\n        }\n    }\n    else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) {\n        result = {};\n        for (var key in source) {\n            if (source.hasOwnProperty(key)) {\n                result[key] = clone(source[key]);\n            }\n        }\n    }\n\n    return result;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} target\n * @param {*} source\n * @param {boolean} [overwrite=false]\n */\nexport function merge(target, source, overwrite) {\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 (var key in source) {\n        if (source.hasOwnProperty(key)) {\n            var targetProp = target[key];\n            var 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], true);\n            }\n        }\n    }\n\n    return target;\n}\n\n/**\n * @param {Array} targetAndSources The first item is target, and the rests are source.\n * @param {boolean} [overwrite=false]\n * @return {*} target\n */\nexport function mergeAll(targetAndSources, overwrite) {\n    var result = targetAndSources[0];\n    for (var i = 1, len = targetAndSources.length; i < len; i++) {\n        result = merge(result, targetAndSources[i], overwrite);\n    }\n    return result;\n}\n\n/**\n * @param {*} target\n * @param {*} source\n * @memberOf module:zrender/core/util\n */\nexport function extend(target, source) {\n    for (var key in source) {\n        if (source.hasOwnProperty(key)) {\n            target[key] = source[key];\n        }\n    }\n    return target;\n}\n\n/**\n * @param {*} target\n * @param {*} source\n * @param {boolean} [overlay=false]\n * @memberOf module:zrender/core/util\n */\nexport function defaults(target, source, overlay) {\n    for (var key in source) {\n        if (source.hasOwnProperty(key)\n            && (overlay ? source[key] != null : target[key] == null)\n        ) {\n            target[key] = source[key];\n        }\n    }\n    return target;\n}\n\nexport var createCanvas = function () {\n    return methods.createCanvas();\n};\n\nmethods.createCanvas = function () {\n    return document.createElement('canvas');\n};\n\n// FIXME\nvar _ctx;\n\nexport function getContext() {\n    if (!_ctx) {\n        // Use util.createCanvas instead of createCanvas\n        // because createCanvas may be overwritten in different environment\n        _ctx = createCanvas().getContext('2d');\n    }\n    return _ctx;\n}\n\n/**\n * 查询数组中元素的index\n * @memberOf module:zrender/core/util\n */\nexport function indexOf(array, value) {\n    if (array) {\n        if (array.indexOf) {\n            return array.indexOf(value);\n        }\n        for (var 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 * @memberOf module:zrender/core/util\n * @param {Function} clazz 源类\n * @param {Function} baseClazz 基类\n */\nexport function inherits(clazz, baseClazz) {\n    var clazzPrototype = clazz.prototype;\n    function F() {}\n    F.prototype = baseClazz.prototype;\n    clazz.prototype = new F();\n\n    for (var prop in clazzPrototype) {\n        clazz.prototype[prop] = clazzPrototype[prop];\n    }\n    clazz.prototype.constructor = clazz;\n    clazz.superClass = baseClazz;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Object|Function} target\n * @param {Object|Function} sorce\n * @param {boolean} overlay\n */\nexport function mixin(target, source, overlay) {\n    target = 'prototype' in target ? target.prototype : target;\n    source = 'prototype' in source ? source.prototype : source;\n\n    defaults(target, source, overlay);\n}\n\n/**\n * Consider typed array.\n * @param {Array|TypedArray} data\n */\nexport function isArrayLike(data) {\n    if (! data) {\n        return;\n    }\n    if (typeof data == 'string') {\n        return false;\n    }\n    return typeof data.length == 'number';\n}\n\n/**\n * 数组或对象遍历\n * @memberOf module:zrender/core/util\n * @param {Object|Array} obj\n * @param {Function} cb\n * @param {*} [context]\n */\nexport function each(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.forEach && obj.forEach === nativeForEach) {\n        obj.forEach(cb, context);\n    }\n    else if (obj.length === +obj.length) {\n        for (var i = 0, len = obj.length; i < len; i++) {\n            cb.call(context, obj[i], i, obj);\n        }\n    }\n    else {\n        for (var key in obj) {\n            if (obj.hasOwnProperty(key)) {\n                cb.call(context, obj[key], key, obj);\n            }\n        }\n    }\n}\n\n/**\n * 数组映射\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {Array}\n */\nexport function map(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.map && obj.map === nativeMap) {\n        return obj.map(cb, context);\n    }\n    else {\n        var result = [];\n        for (var i = 0, len = obj.length; i < len; i++) {\n            result.push(cb.call(context, obj[i], i, obj));\n        }\n        return result;\n    }\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {Object} [memo]\n * @param {*} [context]\n * @return {Array}\n */\nexport function reduce(obj, cb, memo, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.reduce && obj.reduce === nativeReduce) {\n        return obj.reduce(cb, memo, context);\n    }\n    else {\n        for (var i = 0, len = obj.length; i < len; i++) {\n            memo = cb.call(context, memo, obj[i], i, obj);\n        }\n        return memo;\n    }\n}\n\n/**\n * 数组过滤\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {Array}\n */\nexport function filter(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.filter && obj.filter === nativeFilter) {\n        return obj.filter(cb, context);\n    }\n    else {\n        var result = [];\n        for (var i = 0, len = obj.length; i < len; i++) {\n            if (cb.call(context, obj[i], i, obj)) {\n                result.push(obj[i]);\n            }\n        }\n        return result;\n    }\n}\n\n/**\n * 数组项查找\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {*}\n */\nexport function find(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    for (var i = 0, len = obj.length; i < len; i++) {\n        if (cb.call(context, obj[i], i, obj)) {\n            return obj[i];\n        }\n    }\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Function} func\n * @param {*} context\n * @return {Function}\n */\nexport function bind(func, context) {\n    var args = nativeSlice.call(arguments, 2);\n    return function () {\n        return func.apply(context, args.concat(nativeSlice.call(arguments)));\n    };\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Function} func\n * @return {Function}\n */\nexport function curry(func) {\n    var args = nativeSlice.call(arguments, 1);\n    return function () {\n        return func.apply(this, args.concat(nativeSlice.call(arguments)));\n    };\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isArray(value) {\n    return objToString.call(value) === '[object Array]';\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isFunction(value) {\n    return typeof value === 'function';\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isString(value) {\n    return objToString.call(value) === '[object String]';\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isObject(value) {\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    var type = typeof value;\n    return type === 'function' || (!!value && type == 'object');\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isBuiltInObject(value) {\n    return !!BUILTIN_OBJECT[objToString.call(value)];\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isTypedArray(value) {\n    return !!TYPED_ARRAY[objToString.call(value)];\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nexport function isDom(value) {\n    return typeof value === 'object'\n        && typeof value.nodeType === 'number'\n        && typeof value.ownerDocument === 'object';\n}\n\n/**\n * Whether is exactly NaN. Notice isNaN('a') returns true.\n * @param {*} value\n * @return {boolean}\n */\nexport function eqNaN(value) {\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 * @memberOf module:zrender/core/util\n * @return {*} Final value\n */\nexport function retrieve(values) {\n    for (var i = 0, len = arguments.length; i < len; i++) {\n        if (arguments[i] != null) {\n            return arguments[i];\n        }\n    }\n}\n\nexport function retrieve2(value0, value1) {\n    return value0 != null\n        ? value0\n        : value1;\n}\n\nexport function retrieve3(value0, value1, value2) {\n    return value0 != null\n        ? value0\n        : value1 != null\n        ? value1\n        : value2;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Array} arr\n * @param {number} startIndex\n * @param {number} endIndex\n * @return {Array}\n */\nexport function slice() {\n    return Function.call.apply(nativeSlice, arguments);\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 * @param {number|Array.<number>} val\n * @return {Array.<number>}\n */\nexport function normalizeCssArray(val) {\n    if (typeof (val) === 'number') {\n        return [val, val, val, val];\n    }\n    var 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\n/**\n * @memberOf module:zrender/core/util\n * @param {boolean} condition\n * @param {string} message\n */\nexport function assert(condition, message) {\n    if (!condition) {\n        throw new Error(message);\n    }\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {string} str string to be trimed\n * @return {string} trimed string\n */\nexport function trim(str) {\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\nvar primitiveKey = '__ec_primitive__';\n/**\n * Set an object as primitive to be ignored traversing children in clone or merge\n */\nexport function setAsPrimitive(obj) {\n    obj[primitiveKey] = true;\n}\n\nexport function isPrimitive(obj) {\n    return obj[primitiveKey];\n}\n\n/**\n * @constructor\n * @param {Object} obj Only apply `ownProperty`.\n */\nfunction HashMap(obj) {\n    var isArr = isArray(obj);\n    var thisMap = this;\n\n    (obj instanceof HashMap)\n        ? obj.each(visit)\n        : (obj && each(obj, visit));\n\n    function visit(value, key) {\n        isArr ? thisMap.set(value, key) : thisMap.set(key, value);\n    }\n}\n\n// Add prefix to avoid conflict with Object.prototype.\n\nHashMap.prototype = {\n    constructor: HashMap,\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: function (key) {\n        return this.hasOwnProperty(key) ? this[key] : null;\n    },\n    set: function (key, value) {\n        // Comparing with invocation chaining, `return value` is more commonly\n        // used in this case: `var someVal = map.set('a', genVal());`\n        return (this[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: function (cb, context) {\n        context !== void 0 && (cb = bind(cb, context));\n        for (var key in this) {\n            this.hasOwnProperty(key) && cb(this[key], key);\n        }\n    },\n    // Do not use this method if performance sensitive.\n    removeKey: function (key) {\n        delete this[key];\n    }\n};\n\nexport function createHashMap(obj) {\n    return new HashMap(obj);\n}\n\nexport function concatArray(a, b) {\n    var newArray = new a.constructor(a.length + b.length);\n    for (var i = 0; i < a.length; i++) {\n        newArray[i] = a[i];\n    }\n    var offset = a.length;\n    for (i = 0; i < b.length; i++) {\n        newArray[i + offset] = b[i];\n    }\n    return newArray;\n}\n\n\nexport function noop() {}\n","\nvar ArrayCtor = typeof Float32Array === 'undefined'\n    ? Array\n    : Float32Array;\n\n/**\n * 创建一个向量\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @return {Vector2}\n */\nexport function create(x, y) {\n    var out = new ArrayCtor(2);\n    if (x == null) {\n        x = 0;\n    }\n    if (y == null) {\n        y = 0;\n    }\n    out[0] = x;\n    out[1] = y;\n    return out;\n}\n\n/**\n * 复制向量数据\n * @param {Vector2} out\n * @param {Vector2} v\n * @return {Vector2}\n */\nexport function copy(out, v) {\n    out[0] = v[0];\n    out[1] = v[1];\n    return out;\n}\n\n/**\n * 克隆一个向量\n * @param {Vector2} v\n * @return {Vector2}\n */\nexport function clone(v) {\n    var out = new ArrayCtor(2);\n    out[0] = v[0];\n    out[1] = v[1];\n    return out;\n}\n\n/**\n * 设置向量的两个项\n * @param {Vector2} out\n * @param {number} a\n * @param {number} b\n * @return {Vector2} 结果\n */\nexport function set(out, a, b) {\n    out[0] = a;\n    out[1] = b;\n    return out;\n}\n\n/**\n * 向量相加\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nexport function add(out, v1, v2) {\n    out[0] = v1[0] + v2[0];\n    out[1] = v1[1] + v2[1];\n    return out;\n}\n\n/**\n * 向量缩放后相加\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @param {number} a\n */\nexport function scaleAndAdd(out, v1, v2, a) {\n    out[0] = v1[0] + v2[0] * a;\n    out[1] = v1[1] + v2[1] * a;\n    return out;\n}\n\n/**\n * 向量相减\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nexport function sub(out, v1, v2) {\n    out[0] = v1[0] - v2[0];\n    out[1] = v1[1] - v2[1];\n    return out;\n}\n\n/**\n * 向量长度\n * @param {Vector2} v\n * @return {number}\n */\nexport function len(v) {\n    return Math.sqrt(lenSquare(v));\n}\nexport var length = len; // jshint ignore:line\n\n/**\n * 向量长度平方\n * @param {Vector2} v\n * @return {number}\n */\nexport function lenSquare(v) {\n    return v[0] * v[0] + v[1] * v[1];\n}\nexport var lengthSquare = lenSquare;\n\n/**\n * 向量乘法\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nexport function mul(out, v1, v2) {\n    out[0] = v1[0] * v2[0];\n    out[1] = v1[1] * v2[1];\n    return out;\n}\n\n/**\n * 向量除法\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nexport function div(out, v1, v2) {\n    out[0] = v1[0] / v2[0];\n    out[1] = v1[1] / v2[1];\n    return out;\n}\n\n/**\n * 向量点乘\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\nexport function dot(v1, v2) {\n    return v1[0] * v2[0] + v1[1] * v2[1];\n}\n\n/**\n * 向量缩放\n * @param {Vector2} out\n * @param {Vector2} v\n * @param {number} s\n */\nexport function scale(out, v, s) {\n    out[0] = v[0] * s;\n    out[1] = v[1] * s;\n    return out;\n}\n\n/**\n * 向量归一化\n * @param {Vector2} out\n * @param {Vector2} v\n */\nexport function normalize(out, v) {\n    var 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 * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\nexport function distance(v1, v2) {\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 var dist = distance;\n\n/**\n * 向量距离平方\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\nexport function distanceSquare(v1, v2) {\n    return (v1[0] - v2[0]) * (v1[0] - v2[0])\n        + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\nexport var distSquare = distanceSquare;\n\n/**\n * 求负向量\n * @param {Vector2} out\n * @param {Vector2} v\n */\nexport function negate(out, v) {\n    out[0] = -v[0];\n    out[1] = -v[1];\n    return out;\n}\n\n/**\n * 插值两个点\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @param {number} t\n */\nexport function lerp(out, v1, v2, 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 * @param {Vector2} out\n * @param {Vector2} v\n * @param {Vector2} m\n */\nexport function applyTransform(out, v, m) {\n    var x = v[0];\n    var 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 * @param  {Vector2} out\n * @param  {Vector2} v1\n * @param  {Vector2} v2\n */\nexport function min(out, v1, v2) {\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 * @param  {Vector2} out\n * @param  {Vector2} v1\n * @param  {Vector2} v2\n */\nexport function max(out, v1, v2) {\n    out[0] = Math.max(v1[0], v2[0]);\n    out[1] = Math.max(v1[1], v2[1]);\n    return out;\n}\n","// TODO Draggable for group\n// FIXME Draggable on element which has parent rotation or scale\nfunction Draggable() {\n\n    this.on('mousedown', this._dragStart, this);\n    this.on('mousemove', this._drag, this);\n    this.on('mouseup', this._dragEnd, this);\n    this.on('globalout', this._dragEnd, this);\n    // this._dropTarget = null;\n    // this._draggingTarget = null;\n\n    // this._x = 0;\n    // this._y = 0;\n}\n\nDraggable.prototype = {\n\n    constructor: Draggable,\n\n    _dragStart: function (e) {\n        var draggingTarget = e.target;\n        if (draggingTarget && draggingTarget.draggable) {\n            this._draggingTarget = draggingTarget;\n            draggingTarget.dragging = true;\n            this._x = e.offsetX;\n            this._y = e.offsetY;\n\n            this.dispatchToElement(param(draggingTarget, e), 'dragstart', e.event);\n        }\n    },\n\n    _drag: function (e) {\n        var draggingTarget = this._draggingTarget;\n        if (draggingTarget) {\n\n            var x = e.offsetX;\n            var y = e.offsetY;\n\n            var dx = x - this._x;\n            var dy = y - this._y;\n            this._x = x;\n            this._y = y;\n\n            draggingTarget.drift(dx, dy, e);\n            this.dispatchToElement(param(draggingTarget, e), 'drag', e.event);\n\n            var dropTarget = this.findHover(x, y, draggingTarget).target;\n            var lastDropTarget = this._dropTarget;\n            this._dropTarget = dropTarget;\n\n            if (draggingTarget !== dropTarget) {\n                if (lastDropTarget && dropTarget !== lastDropTarget) {\n                    this.dispatchToElement(param(lastDropTarget, e), 'dragleave', e.event);\n                }\n                if (dropTarget && dropTarget !== lastDropTarget) {\n                    this.dispatchToElement(param(dropTarget, e), 'dragenter', e.event);\n                }\n            }\n        }\n    },\n\n    _dragEnd: function (e) {\n        var draggingTarget = this._draggingTarget;\n\n        if (draggingTarget) {\n            draggingTarget.dragging = false;\n        }\n\n        this.dispatchToElement(param(draggingTarget, e), 'dragend', e.event);\n\n        if (this._dropTarget) {\n            this.dispatchToElement(param(this._dropTarget, e), 'drop', e.event);\n        }\n\n        this._draggingTarget = null;\n        this._dropTarget = null;\n    }\n\n};\n\nfunction param(target, e) {\n    return {target: target, topTarget: e && e.topTarget};\n}\n\nexport default Draggable;","/**\n * 事件扩展\n * @module zrender/mixin/Eventful\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n *         pissang (https://www.github.com/pissang)\n */\n\nvar arrySlice = Array.prototype.slice;\n\n/**\n * 事件分发器\n * @alias module:zrender/mixin/Eventful\n * @constructor\n */\nvar Eventful = function () {\n    this._$handlers = {};\n};\n\nEventful.prototype = {\n\n    constructor: Eventful,\n\n    /**\n     * 单次触发绑定,trigger后销毁\n     *\n     * @param {string} event 事件名\n     * @param {Function} handler 响应函数\n     * @param {Object} context\n     */\n    one: function (event, handler, context) {\n        var _h = this._$handlers;\n\n        if (!handler || !event) {\n            return this;\n        }\n\n        if (!_h[event]) {\n            _h[event] = [];\n        }\n\n        for (var i = 0; i < _h[event].length; i++) {\n            if (_h[event][i].h === handler) {\n                return this;\n            }\n        }\n\n        _h[event].push({\n            h: handler,\n            one: true,\n            ctx: context || this\n        });\n\n        return this;\n    },\n\n    /**\n     * 绑定事件\n     * @param {string} event 事件名\n     * @param {Function} handler 事件处理函数\n     * @param {Object} [context]\n     */\n    on: function (event, handler, context) {\n        var _h = this._$handlers;\n\n        if (!handler || !event) {\n            return this;\n        }\n\n        if (!_h[event]) {\n            _h[event] = [];\n        }\n\n        for (var i = 0; i < _h[event].length; i++) {\n            if (_h[event][i].h === handler) {\n                return this;\n            }\n        }\n\n        _h[event].push({\n            h: handler,\n            one: false,\n            ctx: context || this\n        });\n\n        return this;\n    },\n\n    /**\n     * 是否绑定了事件\n     * @param  {string}  event\n     * @return {boolean}\n     */\n    isSilent: function (event) {\n        var _h = this._$handlers;\n        return _h[event] && _h[event].length;\n    },\n\n    /**\n     * 解绑事件\n     * @param {string} event 事件名\n     * @param {Function} [handler] 事件处理函数\n     */\n    off: function (event, handler) {\n        var _h = this._$handlers;\n\n        if (!event) {\n            this._$handlers = {};\n            return this;\n        }\n\n        if (handler) {\n            if (_h[event]) {\n                var newList = [];\n                for (var i = 0, l = _h[event].length; i < l; i++) {\n                    if (_h[event][i]['h'] != handler) {\n                        newList.push(_h[event][i]);\n                    }\n                }\n                _h[event] = newList;\n            }\n\n            if (_h[event] && _h[event].length === 0) {\n                delete _h[event];\n            }\n        }\n        else {\n            delete _h[event];\n        }\n\n        return this;\n    },\n\n    /**\n     * 事件分发\n     *\n     * @param {string} type 事件类型\n     */\n    trigger: function (type) {\n        if (this._$handlers[type]) {\n            var args = arguments;\n            var argLen = args.length;\n\n            if (argLen > 3) {\n                args = arrySlice.call(args, 1);\n            }\n\n            var _h = this._$handlers[type];\n            var len = _h.length;\n            for (var i = 0; i < len;) {\n                // Optimize advise from backbone\n                switch (argLen) {\n                    case 1:\n                        _h[i]['h'].call(_h[i]['ctx']);\n                        break;\n                    case 2:\n                        _h[i]['h'].call(_h[i]['ctx'], args[1]);\n                        break;\n                    case 3:\n                        _h[i]['h'].call(_h[i]['ctx'], args[1], args[2]);\n                        break;\n                    default:\n                        // have more than 2 given arguments\n                        _h[i]['h'].apply(_h[i]['ctx'], args);\n                        break;\n                }\n\n                if (_h[i]['one']) {\n                    _h.splice(i, 1);\n                    len--;\n                }\n                else {\n                    i++;\n                }\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * 带有context的事件分发, 最后一个参数是事件回调的context\n     * @param {string} type 事件类型\n     */\n    triggerWithContext: function (type) {\n        if (this._$handlers[type]) {\n            var args = arguments;\n            var argLen = args.length;\n\n            if (argLen > 4) {\n                args = arrySlice.call(args, 1, args.length - 1);\n            }\n            var ctx = args[args.length - 1];\n\n            var _h = this._$handlers[type];\n            var len = _h.length;\n            for (var i = 0; i < len;) {\n                // Optimize advise from backbone\n                switch (argLen) {\n                    case 1:\n                        _h[i]['h'].call(ctx);\n                        break;\n                    case 2:\n                        _h[i]['h'].call(ctx, args[1]);\n                        break;\n                    case 3:\n                        _h[i]['h'].call(ctx, args[1], args[2]);\n                        break;\n                    default:\n                        // have more than 2 given arguments\n                        _h[i]['h'].apply(ctx, args);\n                        break;\n                }\n\n                if (_h[i]['one']) {\n                    _h.splice(i, 1);\n                    len--;\n                }\n                else {\n                    i++;\n                }\n            }\n        }\n\n        return this;\n    }\n};\n\n// 对象可以通过 onxxxx 绑定事件\n/**\n * @event module:zrender/mixin/Eventful#onclick\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmouseover\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmouseout\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmousemove\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmousewheel\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmousedown\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#onmouseup\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondrag\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondragstart\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondragend\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondragenter\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondragleave\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondragover\n * @type {Function}\n * @default null\n */\n/**\n * @event module:zrender/mixin/Eventful#ondrop\n * @type {Function}\n * @default null\n */\n\nexport default Eventful;","import * as util from './core/util';\nimport * as vec2 from './core/vector';\nimport Draggable from './mixin/Draggable';\nimport Eventful from './mixin/Eventful';\n\nvar SILENT = 'silent';\n\nfunction makeEventPacket(eveType, targetInfo, event) {\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.gestureEvent,\n        pinchX: event.pinchX,\n        pinchY: event.pinchY,\n        pinchScale: event.pinchScale,\n        wheelDelta: event.zrDelta,\n        zrByTouch: event.zrByTouch,\n        which: event.which\n    };\n}\n\nfunction EmptyProxy () {}\nEmptyProxy.prototype.dispose = function () {};\n\nvar handlerNames = [\n    'click', 'dblclick', 'mousewheel', 'mouseout',\n    'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\n/**\n * @alias module:zrender/Handler\n * @constructor\n * @extends module:zrender/mixin/Eventful\n * @param {module:zrender/Storage} storage Storage instance.\n * @param {module:zrender/Painter} painter Painter instance.\n * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance.\n * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()).\n */\nvar Handler = function(storage, painter, proxy, painterRoot) {\n    Eventful.call(this);\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    /**\n     * {target, topTarget, x, y}\n     * @private\n     * @type {Object}\n     */\n    this._hovered = {};\n\n    /**\n     * @private\n     * @type {Date}\n     */\n    this._lastTouchMoment;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this._lastX;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this._lastY;\n\n\n    Draggable.call(this);\n\n    this.setHandlerProxy(proxy);\n};\n\nHandler.prototype = {\n\n    constructor: Handler,\n\n    setHandlerProxy: function (proxy) {\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], this);\n            }, this);\n            // Attach handler\n            proxy.handler = this;\n        }\n        this.proxy = proxy;\n    },\n\n    mousemove: function (event) {\n        var x = event.zrX;\n        var y = event.zrY;\n\n        var lastHovered = this._hovered;\n        var 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        var hovered = this._hovered = this.findHover(x, y);\n        var hoveredTarget = hovered.target;\n\n        var 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: function (event) {\n        this.dispatchToElement(this._hovered, 'mouseout', 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        var element = event.toElement || event.relatedTarget;\n        var innerDom;\n        do {\n            element = element && element.parentNode;\n        }\n        while (element && element.nodeType != 9 && !(\n            innerDom = element === this.painterRoot\n        ));\n\n        !innerDom && this.trigger('globalout', {event: event});\n    },\n\n    /**\n     * Resize\n     */\n    resize: function (event) {\n        this._hovered = {};\n    },\n\n    /**\n     * Dispatch event\n     * @param {string} eventName\n     * @param {event=} eventArgs\n     */\n    dispatch: function (eventName, eventArgs) {\n        var handler = this[eventName];\n        handler && handler.call(this, eventArgs);\n    },\n\n    /**\n     * Dispose\n     */\n    dispose: function () {\n\n        this.proxy.dispose();\n\n        this.storage =\n        this.proxy =\n        this.painter = null;\n    },\n\n    /**\n     * 设置默认的cursor style\n     * @param {string} [cursorStyle='default'] 例如 crosshair\n     */\n    setCursorStyle: function (cursorStyle) {\n        var 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: function (targetInfo, eventName, event) {\n        targetInfo = targetInfo || {};\n        var el = targetInfo.target;\n        if (el && el.silent) {\n            return;\n        }\n        var eventHandler = 'on' + eventName;\n        var eventPacket = makeEventPacket(eventName, targetInfo, event);\n\n        while (el) {\n            el[eventHandler]\n                && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket));\n\n            el.trigger(eventName, eventPacket);\n\n            el = 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            this.painter && this.painter.eachOtherLayer(function (layer) {\n                if (typeof(layer[eventHandler]) == 'function') {\n                    layer[eventHandler].call(layer, eventPacket);\n                }\n                if (layer.trigger) {\n                    layer.trigger(eventName, eventPacket);\n                }\n            });\n        }\n    },\n\n    /**\n     * @private\n     * @param {number} x\n     * @param {number} y\n     * @param {module:zrender/graphic/Displayable} exclude\n     * @return {model:zrender/Element}\n     * @method\n     */\n    findHover: function(x, y, exclude) {\n        var list = this.storage.getDisplayList();\n        var out = {x: x, y: y};\n\n        for (var i = list.length - 1; i >= 0 ; i--) {\n            var 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\n// Common handlers\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n    Handler.prototype[name] = function (event) {\n        // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover\n        var hovered = this.findHover(event.zrX, event.zrY);\n        var hoveredTarget = hovered.target;\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, x, y) {\n    if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n        var el = displayable;\n        var isSilent;\n        while (el) {\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 (el.clipPath && !el.clipPath.contain(x, y))  {\n                return false;\n            }\n            if (el.silent) {\n                isSilent = true;\n            }\n            el = el.parent;\n        }\n        return isSilent ? SILENT : true;\n    }\n\n    return false;\n}\n\nutil.mixin(Handler, Eventful);\nutil.mixin(Handler, Draggable);\n\nexport default Handler;\n","/**\n * 3x2矩阵操作类\n * @exports zrender/tool/matrix\n */\n\nvar ArrayCtor = typeof Float32Array === 'undefined'\n    ? Array\n   : Float32Array;\n\n/**\n * Create a identity matrix.\n * @return {Float32Array|Array.<number>}\n */\nexport function create() {\n    var out = new ArrayCtor(6);\n    identity(out);\n\n    return out;\n}\n\n/**\n * 设置矩阵为单位矩阵\n * @param {Float32Array|Array.<number>} out\n */\nexport function identity(out) {\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 * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} m\n */\nexport function copy(out, m) {\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 * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} m1\n * @param {Float32Array|Array.<number>} m2\n */\nexport function mul(out, m1, m2) {\n    // Consider matrix.mul(m, m2, m);\n    // where out is the same as m2.\n    // So use temp variable to escape error.\n    var out0 = m1[0] * m2[0] + m1[2] * m2[1];\n    var out1 = m1[1] * m2[0] + m1[3] * m2[1];\n    var out2 = m1[0] * m2[2] + m1[2] * m2[3];\n    var out3 = m1[1] * m2[2] + m1[3] * m2[3];\n    var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];\n    var 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 * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n * @param {Float32Array|Array.<number>} v\n */\nexport function translate(out, a, v) {\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 * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n * @param {number} rad\n */\nexport function rotate(out, a, rad) {\n    var aa = a[0];\n    var ac = a[2];\n    var atx = a[4];\n    var ab = a[1];\n    var ad = a[3];\n    var aty = a[5];\n    var st = Math.sin(rad);\n    var 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 * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n * @param {Float32Array|Array.<number>} v\n */\nexport function scale(out, a, v) {\n    var vx = v[0];\n    var 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 * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n */\nexport function invert(out, a) {\n\n    var aa = a[0];\n    var ac = a[2];\n    var atx = a[4];\n    var ab = a[1];\n    var ad = a[3];\n    var aty = a[5];\n\n    var 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 * @param {Float32Array|Array.<number>} a\n */\nexport function clone(a) {\n    var b = create();\n    copy(b, a);\n    return b;\n}","/**\n * 提供变换扩展\n * @module zrender/mixin/Transformable\n * @author pissang (https://www.github.com/pissang)\n */\n\nimport * as matrix from '../core/matrix';\nimport * as vector from '../core/vector';\n\nvar mIdentity = matrix.identity;\n\nvar EPSILON = 5e-5;\n\nfunction isNotAroundZero(val) {\n    return val > EPSILON || val < -EPSILON;\n}\n\n/**\n * @alias module:zrender/mixin/Transformable\n * @constructor\n */\nvar Transformable = function (opts) {\n    opts = opts || {};\n    // If there are no given position, rotation, scale\n    if (!opts.position) {\n        /**\n         * 平移\n         * @type {Array.<number>}\n         * @default [0, 0]\n         */\n        this.position = [0, 0];\n    }\n    if (opts.rotation == null) {\n        /**\n         * 旋转\n         * @type {Array.<number>}\n         * @default 0\n         */\n        this.rotation = 0;\n    }\n    if (!opts.scale) {\n        /**\n         * 缩放\n         * @type {Array.<number>}\n         * @default [1, 1]\n         */\n        this.scale = [1, 1];\n    }\n    /**\n     * 旋转和缩放的原点\n     * @type {Array.<number>}\n     * @default null\n     */\n    this.origin = this.origin || null;\n};\n\nvar transformableProto = Transformable.prototype;\ntransformableProto.transform = null;\n\n/**\n * 判断是否需要有坐标变换\n * 如果有坐标变换, 则从position, rotation, scale以及父节点的transform计算出自身的transform矩阵\n */\ntransformableProto.needLocalTransform = function () {\n    return isNotAroundZero(this.rotation)\n        || isNotAroundZero(this.position[0])\n        || isNotAroundZero(this.position[1])\n        || isNotAroundZero(this.scale[0] - 1)\n        || isNotAroundZero(this.scale[1] - 1);\n};\n\ntransformableProto.updateTransform = function () {\n    var parent = this.parent;\n    var parentHasTransform = parent && parent.transform;\n    var needLocalTransform = this.needLocalTransform();\n\n    var 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.invTransform = this.invTransform || matrix.create();\n    matrix.invert(this.invTransform, m);\n};\n\ntransformableProto.getLocalTransform = function (m) {\n    return Transformable.getLocalTransform(this, m);\n};\n\n/**\n * 将自己的transform应用到context上\n * @param {CanvasRenderingContext2D} ctx\n */\ntransformableProto.setTransform = function (ctx) {\n    var m = this.transform;\n    var dpr = ctx.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\ntransformableProto.restoreTransform = function (ctx) {\n    var dpr = ctx.dpr || 1;\n    ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n};\n\nvar tmpTransform = [];\n\n/**\n * 分解`transform`矩阵到`position`, `rotation`, `scale`\n */\ntransformableProto.decomposeTransform = function () {\n    if (!this.transform) {\n        return;\n    }\n    var parent = this.parent;\n    var 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    var sx = m[0] * m[0] + m[1] * m[1];\n    var sy = m[2] * m[2] + m[3] * m[3];\n    var position = this.position;\n    var scale = this.scale;\n    if (isNotAroundZero(sx - 1)) {\n        sx = Math.sqrt(sx);\n    }\n    if (isNotAroundZero(sy - 1)) {\n        sy = Math.sqrt(sy);\n    }\n    if (m[0] < 0) {\n        sx = -sx;\n    }\n    if (m[3] < 0) {\n        sy = -sy;\n    }\n    position[0] = m[4];\n    position[1] = m[5];\n    scale[0] = sx;\n    scale[1] = sy;\n    this.rotation = Math.atan2(-m[1] / sy, m[0] / sx);\n};\n\n/**\n * Get global scale\n * @return {Array.<number>}\n */\ntransformableProto.getGlobalScale = function () {\n    var m = this.transform;\n    if (!m) {\n        return [1, 1];\n    }\n    var sx = Math.sqrt(m[0] * m[0] + m[1] * m[1]);\n    var sy = Math.sqrt(m[2] * m[2] + m[3] * m[3]);\n    if (m[0] < 0) {\n        sx = -sx;\n    }\n    if (m[3] < 0) {\n        sy = -sy;\n    }\n    return [sx, sy];\n};\n/**\n * 变换坐标位置到 shape 的局部坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.<number>}\n */\ntransformableProto.transformCoordToLocal = function (x, y) {\n    var v2 = [x, y];\n    var invTransform = this.invTransform;\n    if (invTransform) {\n        vector.applyTransform(v2, v2, invTransform);\n    }\n    return v2;\n};\n\n/**\n * 变换局部坐标位置到全局坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.<number>}\n */\ntransformableProto.transformCoordToGlobal = function (x, y) {\n    var v2 = [x, y];\n    var transform = this.transform;\n    if (transform) {\n        vector.applyTransform(v2, v2, transform);\n    }\n    return v2;\n};\n\n/**\n * @static\n * @param {Object} target\n * @param {Array.<number>} target.origin\n * @param {number} target.rotation\n * @param {Array.<number>} target.position\n * @param {Array.<number>} [m]\n */\nTransformable.getLocalTransform = function (target, m) {\n    m = m || [];\n    mIdentity(m);\n\n    var origin = target.origin;\n    var scale = target.scale || [1, 1];\n    var rotation = target.rotation || 0;\n    var position = target.position || [0, 0];\n\n    if (origin) {\n        // Translate to origin\n        m[4] -= origin[0];\n        m[5] -= origin[1];\n    }\n    matrix.scale(m, m, scale);\n    if (rotation) {\n        matrix.rotate(m, m, rotation);\n    }\n    if (origin) {\n        // Translate back from origin\n        m[4] += origin[0];\n        m[5] += origin[1];\n    }\n\n    m[4] += position[0];\n    m[5] += position[1];\n\n    return m;\n};\n\nexport default Transformable;","/**\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 */\nvar easing = {\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    linear: function (k) {\n        return k;\n    },\n\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quadraticIn: function (k) {\n        return k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quadraticOut: function (k) {\n        return k * (2 - k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quadraticInOut: function (k) {\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: function (k) {\n        return k * k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    cubicOut: function (k) {\n        return --k * k * k + 1;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    cubicInOut: function (k) {\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: function (k) {\n        return k * k * k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quarticOut: function (k) {\n        return 1 - (--k * k * k * k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quarticInOut: function (k) {\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: function (k) {\n        return k * k * k * k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quinticOut: function (k) {\n        return --k * k * k * k * k + 1;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quinticInOut: function (k) {\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: function (k) {\n        return 1 - Math.cos(k * Math.PI / 2);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    sinusoidalOut: function (k) {\n        return Math.sin(k * Math.PI / 2);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    sinusoidalInOut: function (k) {\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: function (k) {\n        return k === 0 ? 0 : Math.pow(1024, k - 1);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    exponentialOut: function (k) {\n        return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    exponentialInOut: function (k) {\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: function (k) {\n        return 1 - Math.sqrt(1 - k * k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    circularOut: function (k) {\n        return Math.sqrt(1 - (--k * k));\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    circularInOut: function (k) {\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: function (k) {\n        var s;\n        var a = 0.1;\n        var 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; 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: function (k) {\n        var s;\n        var a = 0.1;\n        var 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; 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: function (k) {\n        var s;\n        var a = 0.1;\n        var 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; 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: function (k) {\n        var s = 1.70158;\n        return k * k * ((s + 1) * k - s);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    backOut: function (k) {\n        var s = 1.70158;\n        return --k * k * ((s + 1) * k + s) + 1;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    backInOut: function (k) {\n        var 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: function (k) {\n        return 1 - easing.bounceOut(1 - k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    bounceOut: function (k) {\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: function (k) {\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 from './easing';\n\nfunction Clip(options) {\n\n    this._target = options.target;\n\n    // 生命周期\n    this._life = options.life || 1000;\n    // 延时\n    this._delay = options.delay || 0;\n    // 开始时间\n    // this._startTime = new Date().getTime() + this._delay;// 单位毫秒\n    this._initialized = false;\n\n    // 是否循环\n    this.loop = options.loop == null ? false : options.loop;\n\n    this.gap = options.gap || 0;\n\n    this.easing = options.easing || 'Linear';\n\n    this.onframe = options.onframe;\n    this.ondestroy = options.ondestroy;\n    this.onrestart = options.onrestart;\n\n    this._pausedTime = 0;\n    this._paused = false;\n}\n\nClip.prototype = {\n\n    constructor: Clip,\n\n    step: function (globalTime, deltaTime) {\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        var percent = (globalTime - this._startTime - this._pausedTime) / this._life;\n\n        // 还没开始\n        if (percent < 0) {\n            return;\n        }\n\n        percent = Math.min(percent, 1);\n\n        var easing = this.easing;\n        var easingFunc = typeof easing == 'string' ? easingFuncs[easing] : easing;\n        var schedule = typeof easingFunc === 'function'\n            ? easingFunc(percent)\n            : percent;\n\n        this.fire('frame', schedule);\n\n        // 结束\n        if (percent == 1) {\n            if (this.loop) {\n                this.restart (globalTime);\n                // 重新开始周期\n                // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件\n                return 'restart';\n            }\n\n            // 动画完成将这个控制器标识为待删除\n            // 在Animation.update中进行批量删除\n            this._needsRemove = true;\n            return 'destroy';\n        }\n\n        return null;\n    },\n\n    restart: function (globalTime) {\n        var remainder = (globalTime - this._startTime - this._pausedTime) % this._life;\n        this._startTime = globalTime - remainder + this.gap;\n        this._pausedTime = 0;\n\n        this._needsRemove = false;\n    },\n\n    fire: function (eventType, arg) {\n        eventType = 'on' + eventType;\n        if (this[eventType]) {\n            this[eventType](this._target, arg);\n        }\n    },\n\n    pause: function () {\n        this._paused = true;\n    },\n\n    resume: function () {\n        this._paused = false;\n    }\n};\n\nexport default Clip;","// Simple LRU cache use doubly linked list\n// @module zrender/core/LRU\n\n/**\n * Simple double linked list. Compared with array, it has O(1) remove operation.\n * @constructor\n */\nvar LinkedList = function () {\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.head = null;\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.tail = null;\n\n    this._len = 0;\n};\n\nvar linkedListProto = LinkedList.prototype;\n/**\n * Insert a new value at the tail\n * @param  {} val\n * @return {module:zrender/core/LRU~Entry}\n */\nlinkedListProto.insert = function (val) {\n    var entry = new Entry(val);\n    this.insertEntry(entry);\n    return entry;\n};\n\n/**\n * Insert an entry at the tail\n * @param  {module:zrender/core/LRU~Entry} entry\n */\nlinkedListProto.insertEntry = function (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 * @param  {module:zrender/core/LRU~Entry} entry\n */\nlinkedListProto.remove = function (entry) {\n    var prev = entry.prev;\n    var 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 * @return {number}\n */\nlinkedListProto.len = function () {\n    return this._len;\n};\n\n/**\n * Clear list\n */\nlinkedListProto.clear = function () {\n    this.head = this.tail = null;\n    this._len = 0;\n};\n\n/**\n * @constructor\n * @param {} val\n */\nvar Entry = function (val) {\n    /**\n     * @type {}\n     */\n    this.value = val;\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.next;\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.prev;\n};\n\n/**\n * LRU Cache\n * @constructor\n * @alias module:zrender/core/LRU\n */\nvar LRU = function (maxSize) {\n\n    this._list = new LinkedList();\n\n    this._map = {};\n\n    this._maxSize = maxSize || 10;\n\n    this._lastRemovedEntry = null;\n};\n\nvar LRUProto = LRU.prototype;\n\n/**\n * @param  {string} key\n * @param  {} value\n * @return {} Removed value\n */\nLRUProto.put = function (key, value) {\n    var list = this._list;\n    var map = this._map;\n    var removed = null;\n    if (map[key] == null) {\n        var len = list.len();\n        // Reuse last removed entry\n        var entry = this._lastRemovedEntry;\n\n        if (len >= this._maxSize && len > 0) {\n            // Remove the least recently used\n            var leastUsedEntry = list.head;\n            list.remove(leastUsedEntry);\n            delete map[leastUsedEntry.key];\n\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/**\n * @param  {string} key\n * @return {}\n */\nLRUProto.get = function (key) {\n    var entry = this._map[key];\n    var 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 */\nLRUProto.clear = function () {\n    this._list.clear();\n    this._map = {};\n};\n\nexport default LRU;","import LRU from '../core/LRU';\n\nvar 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) {  // 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) {  // 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) {  // Clamp to float 0.0 .. 1.0.\n    return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parseCssInt(str) {  // int or percentage.\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(str) {  // float or percentage.\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, m2, h) {\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, b, p) {\n    return a + (b - a) * p;\n}\n\nfunction setRgba(out, r, g, b, a) {\n    out[0] = r; out[1] = g; out[2] = b; out[3] = a;\n    return out;\n}\nfunction copyRgba(out, a) {\n    out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3];\n    return out;\n}\n\nvar colorCache = new LRU(20);\nvar lastRemovedArr = null;\n\nfunction putToCache(colorStr, rgbaArr) {\n    // Reuse removed array\n    if (lastRemovedArr) {\n        copyRgba(lastRemovedArr, rgbaArr);\n    }\n    lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice()));\n}\n\n/**\n * @param {string} colorStr\n * @param {Array.<number>} out\n * @return {Array.<number>}\n * @memberOf module:zrender/util/color\n */\nexport function parse(colorStr, rgbaArr) {\n    if (!colorStr) {\n        return;\n    }\n    rgbaArr = rgbaArr || [];\n\n    var 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    var str = colorStr.replace(/ /g, '').toLowerCase();\n\n    // Color keywords (and transparent) lookup.\n    if (str in kCSSColorTable) {\n        copyRgba(rgbaArr, kCSSColorTable[str]);\n        putToCache(colorStr, rgbaArr);\n        return rgbaArr;\n    }\n\n    // #abc and #abc123 syntax.\n    if (str.charAt(0) === '#') {\n        if (str.length === 4) {\n            var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n            if (!(iv >= 0 && iv <= 0xfff)) {\n                setRgba(rgbaArr, 0, 0, 0, 1);\n                return;  // Covers NaN.\n            }\n            setRgba(rgbaArr,\n                ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n                (iv & 0xf0) | ((iv & 0xf0) >> 4),\n                (iv & 0xf) | ((iv & 0xf) << 4),\n                1\n            );\n            putToCache(colorStr, rgbaArr);\n            return rgbaArr;\n        }\n        else if (str.length === 7) {\n            var iv = parseInt(str.substr(1), 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                1\n            );\n            putToCache(colorStr, rgbaArr);\n            return rgbaArr;\n        }\n\n        return;\n    }\n    var op = str.indexOf('('), ep = str.indexOf(')');\n    if (op !== -1 && ep + 1 === str.length) {\n        var fname = str.substr(0, op);\n        var params = str.substr(op + 1, ep - (op + 1)).split(',');\n        var alpha = 1;  // To allow case fallthrough.\n        switch (fname) {\n            case 'rgba':\n                if (params.length !== 4) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                alpha = parseCssFloat(params.pop()); // 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]);\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\n/**\n * @param {Array.<number>} hsla\n * @param {Array.<number>} rgba\n * @return {Array.<number>} rgba\n */\nfunction hsla2rgba(hsla, rgba) {\n    var h = (((parseFloat(hsla[0]) % 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    var s = parseCssFloat(hsla[1]);\n    var l = parseCssFloat(hsla[2]);\n    var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n    var 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];\n    }\n\n    return rgba;\n}\n\n/**\n * @param {Array.<number>} rgba\n * @return {Array.<number>} hsla\n */\nfunction rgba2hsla(rgba) {\n    if (!rgba) {\n        return;\n    }\n\n    // RGB from 0 to 255\n    var R = rgba[0] / 255;\n    var G = rgba[1] / 255;\n    var B = rgba[2] / 255;\n\n    var vMin = Math.min(R, G, B); // Min. value of RGB\n    var vMax = Math.max(R, G, B); // Max. value of RGB\n    var delta = vMax - vMin; // Delta RGB value\n\n    var L = (vMax + vMin) / 2;\n    var H;\n    var 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        var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta;\n        var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta;\n        var 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    var hsla = [H * 360, S, L];\n\n    if (rgba[3] != null) {\n        hsla.push(rgba[3]);\n    }\n\n    return hsla;\n}\n\n/**\n * @param {string} color\n * @param {number} level\n * @return {string}\n * @memberOf module:zrender/util/color\n */\nexport function lift(color, level) {\n    var colorArr = parse(color);\n    if (colorArr) {\n        for (var 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 (color[i] < 0) {\n                colorArr[i] = 0;\n            }\n        }\n        return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb');\n    }\n}\n\n/**\n * @param {string} color\n * @return {string}\n * @memberOf module:zrender/util/color\n */\nexport function toHex(color) {\n    var 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 {number} normalizedValue A float between 0 and 1.\n * @param {Array.<Array.<number>>} colors List of rgba color array\n * @param {Array.<number>} [out] Mapped gba color array\n * @return {Array.<number>} will be null/undefined if input illegal.\n */\nexport function fastLerp(normalizedValue, colors, out) {\n    if (!(colors && colors.length)\n        || !(normalizedValue >= 0 && normalizedValue <= 1)\n    ) {\n        return;\n    }\n\n    out = out || [];\n\n    var value = normalizedValue * (colors.length - 1);\n    var leftIndex = Math.floor(value);\n    var rightIndex = Math.ceil(value);\n    var leftColor = colors[leftIndex];\n    var rightColor = colors[rightIndex];\n    var 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 var fastMapToColor = fastLerp;\n\n/**\n * @param {number} normalizedValue A float between 0 and 1.\n * @param {Array.<string>} colors Color list.\n * @param {boolean=} fullOutput Default false.\n * @return {(string|Object)} Result color. If fullOutput,\n *                           return {color: ..., leftIndex: ..., rightIndex: ..., value: ...},\n * @memberOf module:zrender/util/color\n */\nexport function lerp(normalizedValue, colors, fullOutput) {\n    if (!(colors && colors.length)\n        || !(normalizedValue >= 0 && normalizedValue <= 1)\n    ) {\n        return;\n    }\n\n    var value = normalizedValue * (colors.length - 1);\n    var leftIndex = Math.floor(value);\n    var rightIndex = Math.ceil(value);\n    var leftColor = parse(colors[leftIndex]);\n    var rightColor = parse(colors[rightIndex]);\n    var dv = value - leftIndex;\n\n    var 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 var mapToColor = lerp;\n\n/**\n * @param {string} color\n * @param {number=} h 0 ~ 360, ignore when null.\n * @param {number=} s 0 ~ 1, ignore when null.\n * @param {number=} l 0 ~ 1, ignore when null.\n * @return {string} Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nexport function modifyHSL(color, h, s, l) {\n    color = parse(color);\n\n    if (color) {\n        color = rgba2hsla(color);\n        h != null && (color[0] = clampCssAngle(h));\n        s != null && (color[1] = parseCssFloat(s));\n        l != null && (color[2] = parseCssFloat(l));\n\n        return stringify(hsla2rgba(color), 'rgba');\n    }\n}\n\n/**\n * @param {string} color\n * @param {number=} alpha 0 ~ 1\n * @return {string} Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nexport function modifyAlpha(color, alpha) {\n    color = parse(color);\n\n    if (color && alpha != null) {\n        color[3] = clampCssFloat(alpha);\n        return stringify(color, 'rgba');\n    }\n}\n\n/**\n * @param {Array.<number>} arrColor like [12,33,44,0.4]\n * @param {string} type 'rgba', 'hsva', ...\n * @return {string} Result color. (If input illegal, return undefined).\n */\nexport function stringify(arrColor, type) {\n    if (!arrColor || !arrColor.length) {\n        return;\n    }\n    var 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 * @module echarts/animation/Animator\n */\n\nimport Clip from './Clip';\nimport * as color from '../tool/color';\nimport {isArrayLike} from '../core/util';\n\nvar arraySlice = Array.prototype.slice;\n\nfunction defaultGetter(target, key) {\n    return target[key];\n}\n\nfunction defaultSetter(target, key, value) {\n    target[key] = value;\n}\n\n/**\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} percent\n * @return {number}\n */\nfunction interpolateNumber(p0, p1, percent) {\n    return (p1 - p0) * percent + p0;\n}\n\n/**\n * @param  {string} p0\n * @param  {string} p1\n * @param  {number} percent\n * @return {string}\n */\nfunction interpolateString(p0, p1, percent) {\n    return percent > 0.5 ? p1 : p0;\n}\n\n/**\n * @param  {Array} p0\n * @param  {Array} p1\n * @param  {number} percent\n * @param  {Array} out\n * @param  {number} arrDim\n */\nfunction interpolateArray(p0, p1, percent, out, arrDim) {\n    var len = p0.length;\n    if (arrDim == 1) {\n        for (var i = 0; i < len; i++) {\n            out[i] = interpolateNumber(p0[i], p1[i], percent);\n        }\n    }\n    else {\n        var len2 = len && p0[0].length;\n        for (var i = 0; i < len; i++) {\n            for (var j = 0; j < len2; j++) {\n                out[i][j] = interpolateNumber(\n                    p0[i][j], p1[i][j], percent\n                );\n            }\n        }\n    }\n}\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 fillArr(arr0, arr1, arrDim) {\n    var arr0Len = arr0.length;\n    var arr1Len = arr1.length;\n    if (arr0Len !== arr1Len) {\n        // FIXME Not work for TypedArray\n        var isPreviousLarger = arr0Len > arr1Len;\n        if (isPreviousLarger) {\n            // Cut the previous\n            arr0.length = arr1Len;\n        }\n        else {\n            // Fill the previous\n            for (var i = arr0Len; i < arr1Len; i++) {\n                arr0.push(\n                    arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i])\n                );\n            }\n        }\n    }\n    // Handling NaN value\n    var len2 = arr0[0] && arr0[0].length;\n    for (var i = 0; i < arr0.length; i++) {\n        if (arrDim === 1) {\n            if (isNaN(arr0[i])) {\n                arr0[i] = arr1[i];\n            }\n        }\n        else {\n            for (var j = 0; j < len2; j++) {\n                if (isNaN(arr0[i][j])) {\n                    arr0[i][j] = arr1[i][j];\n                }\n            }\n        }\n    }\n}\n\n/**\n * @param  {Array} arr0\n * @param  {Array} arr1\n * @param  {number} arrDim\n * @return {boolean}\n */\nfunction isArraySame(arr0, arr1, arrDim) {\n    if (arr0 === arr1) {\n        return true;\n    }\n    var len = arr0.length;\n    if (len !== arr1.length) {\n        return false;\n    }\n    if (arrDim === 1) {\n        for (var i = 0; i < len; i++) {\n            if (arr0[i] !== arr1[i]) {\n                return false;\n            }\n        }\n    }\n    else {\n        var len2 = arr0[0].length;\n        for (var i = 0; i < len; i++) {\n            for (var j = 0; j < len2; j++) {\n                if (arr0[i][j] !== arr1[i][j]) {\n                    return false;\n                }\n            }\n        }\n    }\n    return true;\n}\n\n/**\n * Catmull Rom interpolate array\n * @param  {Array} p0\n * @param  {Array} p1\n * @param  {Array} p2\n * @param  {Array} p3\n * @param  {number} t\n * @param  {number} t2\n * @param  {number} t3\n * @param  {Array} out\n * @param  {number} arrDim\n */\nfunction catmullRomInterpolateArray(\n    p0, p1, p2, p3, t, t2, t3, out, arrDim\n) {\n    var len = p0.length;\n    if (arrDim == 1) {\n        for (var 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    else {\n        var len2 = p0[0].length;\n        for (var i = 0; i < len; i++) {\n            for (var 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\n/**\n * Catmull Rom interpolate number\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @param  {number} t2\n * @param  {number} t3\n * @return {number}\n */\nfunction catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {\n    var v0 = (p2 - p0) * 0.5;\n    var 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\nfunction cloneValue(value) {\n    if (isArrayLike(value)) {\n        var len = value.length;\n        if (isArrayLike(value[0])) {\n            var ret = [];\n            for (var 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) {\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 getArrayDim(keyframes) {\n    var lastValue = keyframes[keyframes.length - 1].value;\n    return isArrayLike(lastValue && lastValue[0]) ? 2 : 1;\n}\n\nfunction createTrackClip(animator, easing, oneTrackDone, keyframes, propName, forceAnimate) {\n    var getter = animator._getter;\n    var setter = animator._setter;\n    var useSpline = easing === 'spline';\n\n    var trackLen = keyframes.length;\n    if (!trackLen) {\n        return;\n    }\n    // Guess data type\n    var firstVal = keyframes[0].value;\n    var isValueArray = isArrayLike(firstVal);\n    var isValueColor = false;\n    var isValueString = false;\n\n    // For vertices morphing\n    var arrDim = isValueArray ? getArrayDim(keyframes) : 0;\n\n    var trackMaxTime;\n    // Sort keyframe as ascending\n    keyframes.sort(function(a, b) {\n        return a.time - b.time;\n    });\n\n    trackMaxTime = keyframes[trackLen - 1].time;\n    // Percents of each keyframe\n    var kfPercents = [];\n    // Value of each keyframe\n    var kfValues = [];\n    var prevValue = keyframes[0].value;\n    var isAllValueEqual = true;\n    for (var i = 0; i < trackLen; i++) {\n        kfPercents.push(keyframes[i].time / trackMaxTime);\n        // Assume value is a color when it is a string\n        var value = keyframes[i].value;\n\n        // Check if value is equal, deep check if value is array\n        if (!((isValueArray && isArraySame(value, prevValue, arrDim))\n            || (!isValueArray && value === prevValue))) {\n            isAllValueEqual = false;\n        }\n        prevValue = value;\n\n        // Try converting a string to a color array\n        if (typeof value == 'string') {\n            var colorArray = color.parse(value);\n            if (colorArray) {\n                value = colorArray;\n                isValueColor = true;\n            }\n            else {\n                isValueString = true;\n            }\n        }\n        kfValues.push(value);\n    }\n    if (!forceAnimate && isAllValueEqual) {\n        return;\n    }\n\n    var lastValue = kfValues[trackLen - 1];\n    // Polyfill array and NaN value\n    for (var i = 0; i < trackLen - 1; i++) {\n        if (isValueArray) {\n            fillArr(kfValues[i], lastValue, arrDim);\n        }\n        else {\n            if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) {\n                kfValues[i] = lastValue;\n            }\n        }\n    }\n    isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim);\n\n    // Cache the key of last frame to speed up when\n    // animation playback is sequency\n    var lastFrame = 0;\n    var lastFramePercent = 0;\n    var start;\n    var w;\n    var p0;\n    var p1;\n    var p2;\n    var p3;\n\n    if (isValueColor) {\n        var rgba = [0, 0, 0, 0];\n    }\n\n    var onframe = function (target, percent) {\n        // Find the range keyframes\n        // kf1-----kf2---------current--------kf3\n        // find kf2 and kf3 and do interpolation\n        var frame;\n        // In the easing function like elasticOut, percent may less than 0\n        if (percent < 0) {\n            frame = 0;\n        }\n        else if (percent < lastFramePercent) {\n            // Start from next key\n            // PENDING start from lastFrame ?\n            start = Math.min(lastFrame + 1, trackLen - 1);\n            for (frame = start; frame >= 0; frame--) {\n                if (kfPercents[frame] <= percent) {\n                    break;\n                }\n            }\n            // PENDING really need to do this ?\n            frame = Math.min(frame, trackLen - 2);\n        }\n        else {\n            for (frame = lastFrame; frame < trackLen; frame++) {\n                if (kfPercents[frame] > percent) {\n                    break;\n                }\n            }\n            frame = Math.min(frame - 1, trackLen - 2);\n        }\n        lastFrame = frame;\n        lastFramePercent = percent;\n\n        var range = (kfPercents[frame + 1] - kfPercents[frame]);\n        if (range === 0) {\n            return;\n        }\n        else {\n            w = (percent - kfPercents[frame]) / range;\n        }\n        if (useSpline) {\n            p1 = kfValues[frame];\n            p0 = kfValues[frame === 0 ? frame : frame - 1];\n            p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1];\n            p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2];\n            if (isValueArray) {\n                catmullRomInterpolateArray(\n                    p0, p1, p2, p3, w, w * w, w * w * w,\n                    getter(target, propName),\n                    arrDim\n                );\n            }\n            else {\n                var value;\n                if (isValueColor) {\n                    value = catmullRomInterpolateArray(\n                        p0, p1, p2, p3, w, w * w, w * w * w,\n                        rgba, 1\n                    );\n                    value = rgba2String(rgba);\n                }\n                else if (isValueString) {\n                    // String is step(0.5)\n                    return interpolateString(p1, p2, w);\n                }\n                else {\n                    value = catmullRomInterpolate(\n                        p0, p1, p2, p3, w, w * w, w * w * w\n                    );\n                }\n                setter(\n                    target,\n                    propName,\n                    value\n                );\n            }\n        }\n        else {\n            if (isValueArray) {\n                interpolateArray(\n                    kfValues[frame], kfValues[frame + 1], w,\n                    getter(target, propName),\n                    arrDim\n                );\n            }\n            else {\n                var value;\n                if (isValueColor) {\n                    interpolateArray(\n                        kfValues[frame], kfValues[frame + 1], w,\n                        rgba, 1\n                    );\n                    value = rgba2String(rgba);\n                }\n                else if (isValueString) {\n                    // String is step(0.5)\n                    return interpolateString(kfValues[frame], kfValues[frame + 1], w);\n                }\n                else {\n                    value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w);\n                }\n                setter(\n                    target,\n                    propName,\n                    value\n                );\n            }\n        }\n    };\n\n    var clip = new Clip({\n        target: animator._target,\n        life: trackMaxTime,\n        loop: animator._loop,\n        delay: animator._delay,\n        onframe: onframe,\n        ondestroy: oneTrackDone\n    });\n\n    if (easing && easing !== 'spline') {\n        clip.easing = easing;\n    }\n\n    return clip;\n}\n\n/**\n * @alias module:zrender/animation/Animator\n * @constructor\n * @param {Object} target\n * @param {boolean} loop\n * @param {Function} getter\n * @param {Function} setter\n */\nvar Animator = function(target, loop, getter, setter) {\n    this._tracks = {};\n    this._target = target;\n\n    this._loop = loop || false;\n\n    this._getter = getter || defaultGetter;\n    this._setter = setter || defaultSetter;\n\n    this._clipCount = 0;\n\n    this._delay = 0;\n\n    this._doneList = [];\n\n    this._onframeList = [];\n\n    this._clipList = [];\n};\n\nAnimator.prototype = {\n    /**\n     * 设置动画关键帧\n     * @param  {number} time 关键帧时间,单位是ms\n     * @param  {Object} props 关键帧的属性值,key-value表示\n     * @return {module:zrender/animation/Animator}\n     */\n    when: function(time /* ms */, props) {\n        var tracks = this._tracks;\n        for (var propName in props) {\n            if (!props.hasOwnProperty(propName)) {\n                continue;\n            }\n\n            if (!tracks[propName]) {\n                tracks[propName] = [];\n                // Invalid value\n                var value = this._getter(this._target, propName);\n                if (value == 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                    tracks[propName].push({\n                        time: 0,\n                        value: cloneValue(value)\n                    });\n                }\n            }\n            tracks[propName].push({\n                time: time,\n                value: props[propName]\n            });\n        }\n        return this;\n    },\n    /**\n     * 添加动画每一帧的回调函数\n     * @param  {Function} callback\n     * @return {module:zrender/animation/Animator}\n     */\n    during: function (callback) {\n        this._onframeList.push(callback);\n        return this;\n    },\n\n    pause: function () {\n        for (var i = 0; i < this._clipList.length; i++) {\n            this._clipList[i].pause();\n        }\n        this._paused = true;\n    },\n\n    resume: function () {\n        for (var i = 0; i < this._clipList.length; i++) {\n            this._clipList[i].resume();\n        }\n        this._paused = false;\n    },\n\n    isPaused: function () {\n        return !!this._paused;\n    },\n\n    _doneCallback: function () {\n        // Clear all tracks\n        this._tracks = {};\n        // Clear all clips\n        this._clipList.length = 0;\n\n        var doneList = this._doneList;\n        var len = doneList.length;\n        for (var i = 0; i < len; i++) {\n            doneList[i].call(this);\n        }\n    },\n    /**\n     * 开始执行动画\n     * @param  {string|Function} [easing]\n     *         动画缓动函数,详见{@link module:zrender/animation/easing}\n     * @param  {boolean} forceAnimate\n     * @return {module:zrender/animation/Animator}\n     */\n    start: function (easing, forceAnimate) {\n\n        var self = this;\n        var clipCount = 0;\n\n        var oneTrackDone = function() {\n            clipCount--;\n            if (!clipCount) {\n                self._doneCallback();\n            }\n        };\n\n        var lastClip;\n        for (var propName in this._tracks) {\n            if (!this._tracks.hasOwnProperty(propName)) {\n                continue;\n            }\n            var clip = createTrackClip(\n                this, easing, oneTrackDone,\n                this._tracks[propName], propName, forceAnimate\n            );\n            if (clip) {\n                this._clipList.push(clip);\n                clipCount++;\n\n                // If start after added to animation\n                if (this.animation) {\n                    this.animation.addClip(clip);\n                }\n\n                lastClip = clip;\n            }\n        }\n\n        // Add during callback on the last clip\n        if (lastClip) {\n            var oldOnFrame = lastClip.onframe;\n            lastClip.onframe = function (target, percent) {\n                oldOnFrame(target, percent);\n\n                for (var i = 0; i < self._onframeList.length; i++) {\n                    self._onframeList[i](target, percent);\n                }\n            };\n        }\n\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        if (!clipCount) {\n            this._doneCallback();\n        }\n        return this;\n    },\n    /**\n     * 停止动画\n     * @param {boolean} forwardToLast If move to last frame before stop\n     */\n    stop: function (forwardToLast) {\n        var clipList = this._clipList;\n        var animation = this.animation;\n        for (var i = 0; i < clipList.length; i++) {\n            var clip = clipList[i];\n            if (forwardToLast) {\n                // Move to last frame before stop\n                clip.onframe(this._target, 1);\n            }\n            animation && animation.removeClip(clip);\n        }\n        clipList.length = 0;\n    },\n    /**\n     * 设置动画延迟开始的时间\n     * @param  {number} time 单位ms\n     * @return {module:zrender/animation/Animator}\n     */\n    delay: function (time) {\n        this._delay = time;\n        return this;\n    },\n    /**\n     * 添加动画结束的回调\n     * @param  {Function} cb\n     * @return {module:zrender/animation/Animator}\n     */\n    done: function(cb) {\n        if (cb) {\n            this._doneList.push(cb);\n        }\n        return this;\n    },\n\n    /**\n     * @return {Array.<module:zrender/animation/Clip>}\n     */\n    getClips: function () {\n        return this._clipList;\n    }\n};\n\nexport default Animator;","var dpr = 1;\n\n// If in browser environment\nif (typeof window !== 'undefined') {\n    dpr = Math.max(window.devicePixelRatio || 1, 1);\n}\n\n/**\n * config默认配置项\n * @exports zrender/config\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n */\n\n/**\n * debug日志选项:catchBrushException为true下有效\n * 0 : 不生成debug数据,发布用\n * 1 : 异常抛出,调试用\n * 2 : 控制台输出,调试用\n */\nexport var debugMode = 0;\n\n// retina 屏幕优化\nexport var devicePixelRatio = dpr;\n","import {debugMode} from '../config';\n\nvar log = function () {\n};\n\nif (debugMode === 1) {\n    log = function () {\n        for (var k in arguments) {\n            throw new Error(arguments[k]);\n        }\n    };\n}\nelse if (debugMode > 1) {\n    log = function () {\n        for (var k in arguments) {\n            console.log(arguments[k]);\n        }\n    };\n}\n\nexport default log;","import Animator from '../animation/Animator';\nimport log from '../core/log';\nimport {\n    isString,\n    isFunction,\n    isObject,\n    isArrayLike,\n    indexOf\n} from '../core/util';\n\n/**\n * @alias modue:zrender/mixin/Animatable\n * @constructor\n */\nvar Animatable = function () {\n\n    /**\n     * @type {Array.<module:zrender/animation/Animator>}\n     * @readOnly\n     */\n    this.animators = [];\n};\n\nAnimatable.prototype = {\n\n    constructor: Animatable,\n\n    /**\n     * 动画\n     *\n     * @param {string} path The path to fetch value from object, like 'a.b.c'.\n     * @param {boolean} [loop] Whether to loop animation.\n     * @return {module:zrender/animation/Animator}\n     * @example:\n     *     el.animate('style', false)\n     *         .when(1000, {x: 10} )\n     *         .done(function(){ // Animation done })\n     *         .start()\n     */\n    animate: function (path, loop) {\n        var target;\n        var animatingShape = false;\n        var el = this;\n        var zr = this.__zr;\n        if (path) {\n            var pathSplitted = path.split('.');\n            var prop = el;\n            // If animating shape\n            animatingShape = pathSplitted[0] === 'shape';\n            for (var i = 0, l = pathSplitted.length; i < l; i++) {\n                if (!prop) {\n                    continue;\n                }\n                prop = prop[pathSplitted[i]];\n            }\n            if (prop) {\n                target = prop;\n            }\n        }\n        else {\n            target = el;\n        }\n\n        if (!target) {\n            log(\n                'Property \"'\n                + path\n                + '\" is not existed in element '\n                + el.id\n            );\n            return;\n        }\n\n        var animators = el.animators;\n\n        var animator = new Animator(target, loop);\n\n        animator.during(function (target) {\n            el.dirty(animatingShape);\n        })\n        .done(function () {\n            // FIXME Animator will not be removed if use `Animator#stop` to stop animation\n            animators.splice(indexOf(animators, animator), 1);\n        });\n\n        animators.push(animator);\n\n        // If animate after added to the zrender\n        if (zr) {\n            zr.animation.addAnimator(animator);\n        }\n\n        return animator;\n    },\n\n    /**\n     * 停止动画\n     * @param {boolean} forwardToLast If move to last frame before stop\n     */\n    stopAnimation: function (forwardToLast) {\n        var animators = this.animators;\n        var len = animators.length;\n        for (var i = 0; i < len; i++) {\n            animators[i].stop(forwardToLast);\n        }\n        animators.length = 0;\n\n        return this;\n    },\n\n    /**\n     * Caution: this method will stop previous animation.\n     * So do not use this method to one element twice before\n     * animation starts, unless you know what you are doing.\n     * @param {Object} target\n     * @param {number} [time=500] Time in ms\n     * @param {string} [easing='linear']\n     * @param {number} [delay=0]\n     * @param {Function} [callback]\n     * @param {Function} [forceAnimate] Prevent stop animation and callback\n     *        immediently when target values are the same as current values.\n     *\n     * @example\n     *  // Animate position\n     *  el.animateTo({\n     *      position: [10, 10]\n     *  }, function () { // 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     *  }, 100, 100, 'cubicOut', function () { // done })\n     */\n        // TODO Return animation key\n    animateTo: function (target, time, delay, easing, callback, forceAnimate) {\n        // animateTo(target, time, easing, callback);\n        if (isString(delay)) {\n            callback = easing;\n            easing = delay;\n            delay = 0;\n        }\n        // animateTo(target, time, delay, callback);\n        else if (isFunction(easing)) {\n            callback = easing;\n            easing = 'linear';\n            delay = 0;\n        }\n        // animateTo(target, time, callback);\n        else if (isFunction(delay)) {\n            callback = delay;\n            delay = 0;\n        }\n        // animateTo(target, callback)\n        else if (isFunction(time)) {\n            callback = time;\n            time = 500;\n        }\n        // animateTo(target)\n        else if (!time) {\n            time = 500;\n        }\n        // Stop all previous animations\n        this.stopAnimation();\n        this._animateToShallow('', this, target, time, delay);\n\n        // Animators may be removed immediately after start\n        // if there is nothing to animate\n        var animators = this.animators.slice();\n        var count = animators.length;\n        function done() {\n            count--;\n            if (!count) {\n                callback && callback();\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 (!count) {\n            callback && callback();\n        }\n        // Start after all animators created\n        // Incase any animator is done immediately when all animation properties are not changed\n        for (var i = 0; i < animators.length; i++) {\n            animators[i]\n                .done(done)\n                .start(easing, forceAnimate);\n        }\n    },\n\n    /**\n     * @private\n     * @param {string} path=''\n     * @param {Object} source=this\n     * @param {Object} target\n     * @param {number} [time=500]\n     * @param {number} [delay=0]\n     *\n     * @example\n     *  // Animate position\n     *  el._animateToShallow({\n     *      position: [10, 10]\n     *  })\n     *\n     *  // Animate shape, style and position in 100ms, delayed 100ms\n     *  el._animateToShallow({\n     *      shape: {\n     *          width: 500\n     *      },\n     *      style: {\n     *          fill: 'red'\n     *      }\n     *      position: [10, 10]\n     *  }, 100, 100)\n     */\n    _animateToShallow: function (path, source, target, time, delay) {\n        var objShallow = {};\n        var propertyCount = 0;\n        for (var name in target) {\n            if (!target.hasOwnProperty(name)) {\n                continue;\n            }\n\n            if (source[name] != null) {\n                if (isObject(target[name]) && !isArrayLike(target[name])) {\n                    this._animateToShallow(\n                        path ? path + '.' + name : name,\n                        source[name],\n                        target[name],\n                        time,\n                        delay\n                    );\n                }\n                else {\n                    objShallow[name] = target[name];\n                    propertyCount++;\n                }\n            }\n            else if (target[name] != null) {\n                // Attr directly if not has property\n                // FIXME, if some property not needed for element ?\n                if (!path) {\n                    this.attr(name, target[name]);\n                }\n                else {  // Shape or style\n                    var props = {};\n                    props[path] = {};\n                    props[path][name] = target[name];\n                    this.attr(props);\n                }\n            }\n        }\n\n        if (propertyCount > 0) {\n            this.animate(path, false)\n                .when(time == null ? 500 : time, objShallow)\n                .delay(delay || 0);\n        }\n\n        return this;\n    }\n};\n\nexport default Animatable;","import guid from './core/guid';\nimport Eventful from './mixin/Eventful';\nimport Transformable from './mixin/Transformable';\nimport Animatable from './mixin/Animatable';\nimport * as zrUtil from './core/util';\n\n/**\n * @alias module:zrender/Element\n * @constructor\n * @extends {module:zrender/mixin/Animatable}\n * @extends {module:zrender/mixin/Transformable}\n * @extends {module:zrender/mixin/Eventful}\n */\nvar Element = function (opts) { // jshint ignore:line\n\n    Transformable.call(this, opts);\n    Eventful.call(this, opts);\n    Animatable.call(this, opts);\n\n    /**\n     * 画布元素ID\n     * @type {string}\n     */\n    this.id = opts.id || guid();\n};\n\nElement.prototype = {\n\n    /**\n     * 元素类型\n     * Element type\n     * @type {string}\n     */\n    type: 'element',\n\n    /**\n     * 元素名字\n     * Element name\n     * @type {string}\n     */\n    name: '',\n\n    /**\n     * ZRender 实例对象,会在 element 添加到 zrender 实例中后自动赋值\n     * ZRender instance will be assigned when element is associated with zrender\n     * @name module:/zrender/Element#__zr\n     * @type {module:zrender/ZRender}\n     */\n    __zr: null,\n\n    /**\n     * 图形是否忽略,为true时忽略图形的绘制以及事件触发\n     * If ignore drawing and events of the element object\n     * @name module:/zrender/Element#ignore\n     * @type {boolean}\n     * @default false\n     */\n    ignore: false,\n\n    /**\n     * 用于裁剪的路径(shape),所有 Group 内的路径在绘制时都会被这个路径裁剪\n     * 该路径会继承被裁减对象的变换\n     * @type {module:zrender/graphic/Path}\n     * @see http://www.w3.org/TR/2dcontext/#clipping-region\n     * @readOnly\n     */\n    clipPath: null,\n\n    /**\n     * 是否是 Group\n     * @type {boolean}\n     */\n    isGroup: false,\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: function (dx, dy) {\n        switch (this.draggable) {\n            case 'horizontal':\n                dy = 0;\n                break;\n            case 'vertical':\n                dx = 0;\n                break;\n        }\n\n        var 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.dirty(false);\n    },\n\n    /**\n     * Hook before update\n     */\n    beforeUpdate: function () {},\n    /**\n     * Hook after update\n     */\n    afterUpdate: function () {},\n    /**\n     * Update each frame\n     */\n    update: function () {\n        this.updateTransform();\n    },\n\n    /**\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    traverse: function (cb, context) {},\n\n    /**\n     * @protected\n     */\n    attrKV: function (key, value) {\n        if (key === 'position' || key === 'scale' || key === 'origin') {\n            // Copy the array\n            if (value) {\n                var target = this[key];\n                if (!target) {\n                    target = this[key] = [];\n                }\n                target[0] = value[0];\n                target[1] = value[1];\n            }\n        }\n        else {\n            this[key] = value;\n        }\n    },\n\n    /**\n     * Hide the element\n     */\n    hide: function () {\n        this.ignore = true;\n        this.__zr && this.__zr.refresh();\n    },\n\n    /**\n     * Show the element\n     */\n    show: function () {\n        this.ignore = false;\n        this.__zr && this.__zr.refresh();\n    },\n\n    /**\n     * @param {string|Object} key\n     * @param {*} value\n     */\n    attr: function (key, value) {\n        if (typeof key === 'string') {\n            this.attrKV(key, value);\n        }\n        else if (zrUtil.isObject(key)) {\n            for (var name in key) {\n                if (key.hasOwnProperty(name)) {\n                    this.attrKV(name, key[name]);\n                }\n            }\n        }\n\n        this.dirty(false);\n\n        return this;\n    },\n\n    /**\n     * @param {module:zrender/graphic/Path} clipPath\n     */\n    setClipPath: function (clipPath) {\n        var zr = this.__zr;\n        if (zr) {\n            clipPath.addSelfToZr(zr);\n        }\n\n        // Remove previous clip path\n        if (this.clipPath && this.clipPath !== clipPath) {\n            this.removeClipPath();\n        }\n\n        this.clipPath = clipPath;\n        clipPath.__zr = zr;\n        clipPath.__clipTarget = this;\n\n        this.dirty(false);\n    },\n\n    /**\n     */\n    removeClipPath: function () {\n        var clipPath = this.clipPath;\n        if (clipPath) {\n            if (clipPath.__zr) {\n                clipPath.removeSelfFromZr(clipPath.__zr);\n            }\n\n            clipPath.__zr = null;\n            clipPath.__clipTarget = null;\n            this.clipPath = null;\n\n            this.dirty(false);\n        }\n    },\n\n    /**\n     * Add self from zrender instance.\n     * Not recursively because it will be invoked when element added to storage.\n     * @param {module:zrender/ZRender} zr\n     */\n    addSelfToZr: function (zr) {\n        this.__zr = zr;\n        // 添加动画\n        var animators = this.animators;\n        if (animators) {\n            for (var 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    },\n\n    /**\n     * Remove self from zrender instance.\n     * Not recursively because it will be invoked when element added to storage.\n     * @param {module:zrender/ZRender} zr\n     */\n    removeSelfFromZr: function (zr) {\n        this.__zr = null;\n        // 移除动画\n        var animators = this.animators;\n        if (animators) {\n            for (var 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    }\n};\n\nzrUtil.mixin(Element, Animatable);\nzrUtil.mixin(Element, Transformable);\nzrUtil.mixin(Element, Eventful);\n\nexport default Element;","/**\n * @module echarts/core/BoundingRect\n */\n\nimport * as vec2 from './vector';\nimport * as matrix from './matrix';\n\nvar v2ApplyTransform = vec2.applyTransform;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\n\n/**\n * @alias module:echarts/core/BoundingRect\n */\nfunction BoundingRect(x, y, width, height) {\n\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    /**\n     * @type {number}\n     */\n    this.x = x;\n    /**\n     * @type {number}\n     */\n    this.y = y;\n    /**\n     * @type {number}\n     */\n    this.width = width;\n    /**\n     * @type {number}\n     */\n    this.height = height;\n}\n\nBoundingRect.prototype = {\n\n    constructor: BoundingRect,\n\n    /**\n     * @param {module:echarts/core/BoundingRect} other\n     */\n    union: function (other) {\n        var x = mathMin(other.x, this.x);\n        var y = mathMin(other.y, this.y);\n\n        this.width = mathMax(\n                other.x + other.width,\n                this.x + this.width\n            ) - x;\n        this.height = mathMax(\n                other.y + other.height,\n                this.y + this.height\n            ) - y;\n        this.x = x;\n        this.y = y;\n    },\n\n    /**\n     * @param {Array.<number>} m\n     * @methods\n     */\n    applyTransform: (function () {\n        var lt = [];\n        var rb = [];\n        var lb = [];\n        var rt = [];\n        return function (m) {\n            // In case usage like this\n            // el.getBoundingRect().applyTransform(el.transform)\n            // And element has no transform\n            if (!m) {\n                return;\n            }\n            lt[0] = lb[0] = this.x;\n            lt[1] = rt[1] = this.y;\n            rb[0] = rt[0] = this.x + this.width;\n            rb[1] = lb[1] = this.y + this.height;\n\n            v2ApplyTransform(lt, lt, m);\n            v2ApplyTransform(rb, rb, m);\n            v2ApplyTransform(lb, lb, m);\n            v2ApplyTransform(rt, rt, m);\n\n            this.x = mathMin(lt[0], rb[0], lb[0], rt[0]);\n            this.y = mathMin(lt[1], rb[1], lb[1], rt[1]);\n            var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]);\n            var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]);\n            this.width = maxX - this.x;\n            this.height = maxY - this.y;\n        };\n    })(),\n\n    /**\n     * Calculate matrix of transforming from self to target rect\n     * @param  {module:zrender/core/BoundingRect} b\n     * @return {Array.<number>}\n     */\n    calculateTransform: function (b) {\n        var a = this;\n        var sx = b.width / a.width;\n        var sy = b.height / a.height;\n\n        var 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    /**\n     * @param {(module:echarts/core/BoundingRect|Object)} b\n     * @return {boolean}\n     */\n    intersect: function (b) {\n        if (!b) {\n            return false;\n        }\n\n        if (!(b instanceof BoundingRect)) {\n            // Normalize negative width/height.\n            b = BoundingRect.create(b);\n        }\n\n        var a = this;\n        var ax0 = a.x;\n        var ax1 = a.x + a.width;\n        var ay0 = a.y;\n        var ay1 = a.y + a.height;\n\n        var bx0 = b.x;\n        var bx1 = b.x + b.width;\n        var by0 = b.y;\n        var by1 = b.y + b.height;\n\n        return ! (ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n    },\n\n    contain: function (x, y) {\n        var 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    /**\n     * @return {module:echarts/core/BoundingRect}\n     */\n    clone: function () {\n        return new BoundingRect(this.x, this.y, this.width, this.height);\n    },\n\n    /**\n     * Copy from another rect\n     */\n    copy: function (other) {\n        this.x = other.x;\n        this.y = other.y;\n        this.width = other.width;\n        this.height = other.height;\n    },\n\n    plain: function () {\n        return {\n            x: this.x,\n            y: this.y,\n            width: this.width,\n            height: this.height\n        };\n    }\n};\n\n/**\n * @param {Object|module:zrender/core/BoundingRect} rect\n * @param {number} rect.x\n * @param {number} rect.y\n * @param {number} rect.width\n * @param {number} rect.height\n * @return {module:zrender/core/BoundingRect}\n */\nBoundingRect.create = function (rect) {\n    return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n};\n\nexport default BoundingRect;","/**\n * Group是一个容器,可以插入子节点,Group的变换也会被应用到子节点上\n * @module zrender/graphic/Group\n * @example\n *     var Group = require('zrender/container/Group');\n *     var Circle = require('zrender/graphic/shape/Circle');\n *     var g = new Group();\n *     g.position[0] = 100;\n *     g.position[1] = 100;\n *     g.add(new Circle({\n *         style: {\n *             x: 100,\n *             y: 100,\n *             r: 20,\n *         }\n *     }));\n *     zr.add(g);\n */\n\nimport * as zrUtil from '../core/util';\nimport Element from '../Element';\nimport BoundingRect from '../core/BoundingRect';\n\n/**\n * @alias module:zrender/graphic/Group\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @extends module:zrender/mixin/Eventful\n */\nvar Group = function (opts) {\n\n    opts = opts || {};\n\n    Element.call(this, opts);\n\n    for (var key in opts) {\n        if (opts.hasOwnProperty(key)) {\n            this[key] = opts[key];\n        }\n    }\n\n    this._children = [];\n\n    this.__storage = null;\n\n    this.__dirty = true;\n};\n\nGroup.prototype = {\n\n    constructor: Group,\n\n    isGroup: true,\n\n    /**\n     * @type {string}\n     */\n    type: 'group',\n\n    /**\n     * 所有子孙元素是否响应鼠标事件\n     * @name module:/zrender/container/Group#silent\n     * @type {boolean}\n     * @default false\n     */\n    silent: false,\n\n    /**\n     * @return {Array.<module:zrender/Element>}\n     */\n    children: function () {\n        return this._children.slice();\n    },\n\n    /**\n     * 获取指定 index 的儿子节点\n     * @param  {number} idx\n     * @return {module:zrender/Element}\n     */\n    childAt: function (idx) {\n        return this._children[idx];\n    },\n\n    /**\n     * 获取指定名字的儿子节点\n     * @param  {string} name\n     * @return {module:zrender/Element}\n     */\n    childOfName: function (name) {\n        var children = this._children;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i].name === name) {\n                return children[i];\n            }\n            }\n    },\n\n    /**\n     * @return {number}\n     */\n    childCount: function () {\n        return this._children.length;\n    },\n\n    /**\n     * 添加子节点到最后\n     * @param {module:zrender/Element} child\n     */\n    add: function (child) {\n        if (child && child !== this && child.parent !== this) {\n\n            this._children.push(child);\n\n            this._doAdd(child);\n        }\n\n        return this;\n    },\n\n    /**\n     * 添加子节点在 nextSibling 之前\n     * @param {module:zrender/Element} child\n     * @param {module:zrender/Element} nextSibling\n     */\n    addBefore: function (child, nextSibling) {\n        if (child && child !== this && child.parent !== this\n            && nextSibling && nextSibling.parent === this) {\n\n            var children = this._children;\n            var 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    _doAdd: function (child) {\n        if (child.parent) {\n            child.parent.remove(child);\n        }\n\n        child.parent = this;\n\n        var storage = this.__storage;\n        var zr = this.__zr;\n        if (storage && storage !== child.__storage) {\n\n            storage.addToStorage(child);\n\n            if (child instanceof Group) {\n                child.addChildrenToStorage(storage);\n            }\n        }\n\n        zr && zr.refresh();\n    },\n\n    /**\n     * 移除子节点\n     * @param {module:zrender/Element} child\n     */\n    remove: function (child) {\n        var zr = this.__zr;\n        var storage = this.__storage;\n        var children = this._children;\n\n        var 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 (storage) {\n\n            storage.delFromStorage(child);\n\n            if (child instanceof Group) {\n                child.delChildrenFromStorage(storage);\n            }\n        }\n\n        zr && zr.refresh();\n\n        return this;\n    },\n\n    /**\n     * 移除所有子节点\n     */\n    removeAll: function () {\n        var children = this._children;\n        var storage = this.__storage;\n        var child;\n        var i;\n        for (i = 0; i < children.length; i++) {\n            child = children[i];\n            if (storage) {\n                storage.delFromStorage(child);\n                if (child instanceof Group) {\n                    child.delChildrenFromStorage(storage);\n                }\n            }\n            child.parent = null;\n        }\n        children.length = 0;\n\n        return this;\n    },\n\n    /**\n     * 遍历所有子节点\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    eachChild: function (cb, context) {\n        var children = this._children;\n        for (var i = 0; i < children.length; i++) {\n            var child = children[i];\n            cb.call(context, child, i);\n        }\n        return this;\n    },\n\n    /**\n     * 深度优先遍历所有子孙节点\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    traverse: function (cb, context) {\n        for (var i = 0; i < this._children.length; i++) {\n            var child = this._children[i];\n            cb.call(context, child);\n\n            if (child.type === 'group') {\n                child.traverse(cb, context);\n            }\n        }\n        return this;\n    },\n\n    addChildrenToStorage: function (storage) {\n        for (var i = 0; i < this._children.length; i++) {\n            var child = this._children[i];\n            storage.addToStorage(child);\n            if (child instanceof Group) {\n                child.addChildrenToStorage(storage);\n            }\n        }\n    },\n\n    delChildrenFromStorage: function (storage) {\n        for (var i = 0; i < this._children.length; i++) {\n            var child = this._children[i];\n            storage.delFromStorage(child);\n            if (child instanceof Group) {\n                child.delChildrenFromStorage(storage);\n            }\n        }\n    },\n\n    dirty: function () {\n        this.__dirty = true;\n        this.__zr && this.__zr.refresh();\n        return this;\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getBoundingRect: function (includeChildren) {\n        // TODO Caching\n        var rect = null;\n        var tmpRect = new BoundingRect(0, 0, 0, 0);\n        var children = includeChildren || this._children;\n        var tmpMat = [];\n\n        for (var i = 0; i < children.length; i++) {\n            var child = children[i];\n            if (child.ignore || child.invisible) {\n                continue;\n            }\n\n            var childRect = child.getBoundingRect();\n            var 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                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        return rect || tmpRect;\n    }\n};\n\nzrUtil.inherits(Group, Element);\n\nexport default Group;","// https://github.com/mziccard/node-timsort\nvar DEFAULT_MIN_MERGE = 32;\n\nvar DEFAULT_MIN_GALLOPING = 7;\n\nvar DEFAULT_TMP_STORAGE_LENGTH = 256;\n\nfunction minRunLength(n) {\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, lo, hi, compare) {\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, lo, hi) {\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, lo, hi, start, compare) {\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, array, start, length, hint, compare) {\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, array, start, length, hint, compare) {\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, compare) {\n    var minGallop = DEFAULT_MIN_GALLOPING;\n    var length = 0;\n    var tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n    var stackLength = 0;\n    var runStart;\n    var runLength;\n    var 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 = [];\n\n    stackLength = length < 120 ? 5 : length < 1542 ? 10 : length < 119151 ? 19 : 40;\n\n    runStart = [];\n    runLength = [];\n\n    function pushRun(_runStart, _runLength) {\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 >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1] || n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1]) {\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) {\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, length1, start2, length2) {\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, count2, 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, length1, start2, length2) {\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    this.mergeRuns = mergeRuns;\n    this.forceMergeRuns = forceMergeRuns;\n    this.pushRun = pushRun;\n}\n\nexport default function sort(array, compare, lo, hi) {\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 = new 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","import * as util from './core/util';\nimport env from './core/env';\nimport Group from './container/Group';\n\n// Use timsort because in most case elements are partially sorted\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\nimport timsort from './core/timsort';\n\nfunction shapeCompareFunc(a, b) {\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/**\n * 内容仓库 (M)\n * @alias module:zrender/Storage\n * @constructor\n */\nvar Storage = function () { // jshint ignore:line\n    this._roots = [];\n\n    this._displayList = [];\n\n    this._displayListLen = 0;\n};\n\nStorage.prototype = {\n\n    constructor: Storage,\n\n    /**\n     * @param  {Function} cb\n     *\n     */\n    traverse: function (cb, context) {\n        for (var i = 0; i < this._roots.length; i++) {\n            this._roots[i].traverse(cb, context);\n        }\n    },\n\n    /**\n     * 返回所有图形的绘制队列\n     * @param {boolean} [update=false] 是否在返回前更新该数组\n     * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效\n     *\n     * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList}\n     * @return {Array.<module:zrender/graphic/Displayable>}\n     */\n    getDisplayList: function (update, includeIgnore) {\n        includeIgnore = includeIgnore || false;\n        if (update) {\n            this.updateDisplayList(includeIgnore);\n        }\n        return this._displayList;\n    },\n\n    /**\n     * 更新图形的绘制队列。\n     * 每次绘制前都会调用,该方法会先深度优先遍历整个树,更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中,\n     * 最后根据绘制的优先级(zlevel > z > 插入顺序)排序得到绘制队列\n     * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组\n     */\n    updateDisplayList: function (includeIgnore) {\n        this._displayListLen = 0;\n\n        var roots = this._roots;\n        var displayList = this._displayList;\n        for (var 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    _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) {\n\n        if (el.ignore && !includeIgnore) {\n            return;\n        }\n\n        el.beforeUpdate();\n\n        if (el.__dirty) {\n\n            el.update();\n\n        }\n\n        el.afterUpdate();\n\n        var userSetClipPath = el.clipPath;\n        if (userSetClipPath) {\n\n            // FIXME 效率影响\n            if (clipPaths) {\n                clipPaths = clipPaths.slice();\n            }\n            else {\n                clipPaths = [];\n            }\n\n            var currentClipPath = userSetClipPath;\n            var parentClipPath = el;\n            // Recursively add clip path\n            while (currentClipPath) {\n                // clipPath 的变换是基于使用这个 clipPath 的元素\n                currentClipPath.parent = parentClipPath;\n                currentClipPath.updateTransform();\n\n                clipPaths.push(currentClipPath);\n\n                parentClipPath = currentClipPath;\n                currentClipPath = currentClipPath.clipPath;\n            }\n        }\n\n        if (el.isGroup) {\n            var children = el._children;\n\n            for (var i = 0; i < children.length; i++) {\n                var child = children[i];\n\n                // Force to mark as dirty if group is dirty\n                // FIXME __dirtyPath ?\n                if (el.__dirty) {\n                    child.__dirty = true;\n                }\n\n                this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n            }\n\n            // Mark group clean here\n            el.__dirty = false;\n\n        }\n        else {\n            el.__clipPaths = clipPaths;\n\n            this._displayList[this._displayListLen++] = el;\n        }\n    },\n\n    /**\n     * 添加图形(Shape)或者组(Group)到根节点\n     * @param {module:zrender/Element} el\n     */\n    addRoot: function (el) {\n        if (el.__storage === this) {\n            return;\n        }\n\n        if (el instanceof Group) {\n            el.addChildrenToStorage(this);\n        }\n\n        this.addToStorage(el);\n        this._roots.push(el);\n    },\n\n    /**\n     * 删除指定的图形(Shape)或者组(Group)\n     * @param {string|Array.<string>} [el] 如果为空清空整个Storage\n     */\n    delRoot: function (el) {\n        if (el == null) {\n            // 不指定el清空\n            for (var i = 0; i < this._roots.length; i++) {\n                var root = this._roots[i];\n                if (root instanceof Group) {\n                    root.delChildrenFromStorage(this);\n                }\n            }\n\n            this._roots = [];\n            this._displayList = [];\n            this._displayListLen = 0;\n\n            return;\n        }\n\n        if (el instanceof Array) {\n            for (var i = 0, l = el.length; i < l; i++) {\n                this.delRoot(el[i]);\n            }\n            return;\n        }\n\n\n        var idx = util.indexOf(this._roots, el);\n        if (idx >= 0) {\n            this.delFromStorage(el);\n            this._roots.splice(idx, 1);\n            if (el instanceof Group) {\n                el.delChildrenFromStorage(this);\n            }\n        }\n    },\n\n    addToStorage: function (el) {\n        if (el) {\n            el.__storage = this;\n            el.dirty(false);\n        }\n        return this;\n    },\n\n    delFromStorage: function (el) {\n        if (el) {\n            el.__storage = null;\n        }\n\n        return this;\n    },\n\n    /**\n     * 清空并且释放Storage\n     */\n    dispose: function () {\n        this._renderList =\n        this._roots = null;\n    },\n\n    displayableSortFunc: shapeCompareFunc\n};\n\nexport default Storage;","\nvar SHADOW_PROPS = {\n    'shadowBlur': 1,\n    'shadowOffsetX': 1,\n    'shadowOffsetY': 1,\n    'textShadowBlur': 1,\n    'textShadowOffsetX': 1,\n    'textShadowOffsetY': 1,\n    'textBoxShadowBlur': 1,\n    'textBoxShadowOffsetX': 1,\n    'textBoxShadowOffsetY': 1\n};\n\nexport default function (ctx, propName, value) {\n    if (SHADOW_PROPS.hasOwnProperty(propName)) {\n        return value *= ctx.dpr;\n    }\n    return value;\n}\n","\nimport fixShadow from './helper/fixShadow';\n\nvar STYLE_COMMON_PROPS = [\n    ['shadowBlur', 0], ['shadowOffsetX', 0], ['shadowOffsetY', 0], ['shadowColor', '#000'],\n    ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]\n];\n\n// var SHADOW_PROPS = STYLE_COMMON_PROPS.slice(0, 4);\n// var LINE_PROPS = STYLE_COMMON_PROPS.slice(4);\n\nvar Style = function (opts, host) {\n    this.extendFrom(opts, false);\n    this.host = host;\n};\n\nfunction createLinearGradient(ctx, obj, rect) {\n    var x = obj.x == null ? 0 : obj.x;\n    var x2 = obj.x2 == null ? 1 : obj.x2;\n    var y = obj.y == null ? 0 : obj.y;\n    var 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    var canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\n\n    return canvasGradient;\n}\n\nfunction createRadialGradient(ctx, obj, rect) {\n    var width = rect.width;\n    var height = rect.height;\n    var min = Math.min(width, height);\n\n    var x = obj.x == null ? 0.5 : obj.x;\n    var y = obj.y == null ? 0.5 : obj.y;\n    var 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    var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);\n\n    return canvasGradient;\n}\n\n\nStyle.prototype = {\n\n    constructor: Style,\n\n    /**\n     * @type {module:zrender/graphic/Displayable}\n     */\n    host: null,\n\n    /**\n     * @type {string}\n     */\n    fill: '#000',\n\n    /**\n     * @type {string}\n     */\n    stroke: null,\n\n    /**\n     * @type {number}\n     */\n    opacity: 1,\n\n    /**\n     * @type {Array.<number>}\n     */\n    lineDash: null,\n\n    /**\n     * @type {number}\n     */\n    lineDashOffset: 0,\n\n    /**\n     * @type {number}\n     */\n    shadowBlur: 0,\n\n    /**\n     * @type {number}\n     */\n    shadowOffsetX: 0,\n\n    /**\n     * @type {number}\n     */\n    shadowOffsetY: 0,\n\n    /**\n     * @type {number}\n     */\n    lineWidth: 1,\n\n    /**\n     * If stroke ignore scale\n     * @type {Boolean}\n     */\n    strokeNoScale: false,\n\n    // Bounding rect text configuration\n    // Not affected by element transform\n    /**\n     * @type {string}\n     */\n    text: null,\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     * @type {string}\n     */\n    font: null,\n\n    /**\n     * The same as font. Use font please.\n     * @deprecated\n     * @type {string}\n     */\n    textFont: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * @type {string}\n     */\n    fontStyle: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * @type {string}\n     */\n    fontWeight: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * Should be 12 but not '12px'.\n     * @type {number}\n     */\n    fontSize: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * @type {string}\n     */\n    fontFamily: null,\n\n    /**\n     * Reserved for special functinality, like 'hr'.\n     * @type {string}\n     */\n    textTag: null,\n\n    /**\n     * @type {string}\n     */\n    textFill: '#000',\n\n    /**\n     * @type {string}\n     */\n    textStroke: null,\n\n    /**\n     * @type {number}\n     */\n    textWidth: null,\n\n    /**\n     * Only for textBackground.\n     * @type {number}\n     */\n    textHeight: null,\n\n    /**\n     * textStroke may be set as some color as a default\n     * value in upper applicaion, where the default value\n     * of textStrokeWidth should be 0 to make sure that\n     * user can choose to do not use text stroke.\n     * @type {number}\n     */\n    textStrokeWidth: 0,\n\n    /**\n     * @type {number}\n     */\n    textLineHeight: null,\n\n    /**\n     * 'inside', 'left', 'right', 'top', 'bottom'\n     * [x, y]\n     * Based on x, y of rect.\n     * @type {string|Array.<number>}\n     * @default 'inside'\n     */\n    textPosition: 'inside',\n\n    /**\n     * If not specified, use the boundingRect of a `displayable`.\n     * @type {Object}\n     */\n    textRect: null,\n\n    /**\n     * [x, y]\n     * @type {Array.<number>}\n     */\n    textOffset: null,\n\n    /**\n     * @type {string}\n     */\n    textAlign: null,\n\n    /**\n     * @type {string}\n     */\n    textVerticalAlign: null,\n\n    /**\n     * @type {number}\n     */\n    textDistance: 5,\n\n    /**\n     * @type {string}\n     */\n    textShadowColor: 'transparent',\n\n    /**\n     * @type {number}\n     */\n    textShadowBlur: 0,\n\n    /**\n     * @type {number}\n     */\n    textShadowOffsetX: 0,\n\n    /**\n     * @type {number}\n     */\n    textShadowOffsetY: 0,\n\n    /**\n     * @type {string}\n     */\n    textBoxShadowColor: 'transparent',\n\n    /**\n     * @type {number}\n     */\n    textBoxShadowBlur: 0,\n\n    /**\n     * @type {number}\n     */\n    textBoxShadowOffsetX: 0,\n\n    /**\n     * @type {number}\n     */\n    textBoxShadowOffsetY: 0,\n\n    /**\n     * Whether transform text.\n     * Only useful in Path and Image element\n     * @type {boolean}\n     */\n    transformText: false,\n\n    /**\n     * Text rotate around position of Path or Image\n     * Only useful in Path and Image element and transformText is false.\n     */\n    textRotation: 0,\n\n    /**\n     * Text origin of text rotation, like [10, 40].\n     * Based on x, y of rect.\n     * Useful in label rotation of circular symbol.\n     * By default, this origin is textPosition.\n     * Can be 'center'.\n     * @type {string|Array.<number>}\n     */\n    textOrigin: null,\n\n    /**\n     * @type {string}\n     */\n    textBackgroundColor: null,\n\n    /**\n     * @type {string}\n     */\n    textBorderColor: null,\n\n    /**\n     * @type {number}\n     */\n    textBorderWidth: 0,\n\n    /**\n     * @type {number}\n     */\n    textBorderRadius: 0,\n\n    /**\n     * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]`\n     * @type {number|Array.<number>}\n     */\n    textPadding: null,\n\n    /**\n     * Text styles for rich text.\n     * @type {Object}\n     */\n    rich: null,\n\n    /**\n     * {outerWidth, outerHeight, ellipsis, placeholder}\n     * @type {Object}\n     */\n    truncate: null,\n\n    /**\n     * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n     * @type {string}\n     */\n    blend: null,\n\n    /**\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    bind: function (ctx, el, prevEl) {\n        var style = this;\n        var prevStyle = prevEl && prevEl.style;\n        var firstDraw = !prevStyle;\n\n        for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {\n            var prop = STYLE_COMMON_PROPS[i];\n            var styleName = prop[0];\n\n            if (firstDraw || style[styleName] !== prevStyle[styleName]) {\n                // FIXME Invalid property value will cause style leak from previous element.\n                ctx[styleName] =\n                    fixShadow(ctx, styleName, style[styleName] || prop[1]);\n            }\n        }\n\n        if ((firstDraw || style.fill !== prevStyle.fill)) {\n            ctx.fillStyle = style.fill;\n        }\n        if ((firstDraw || style.stroke !== prevStyle.stroke)) {\n            ctx.strokeStyle = style.stroke;\n        }\n        if ((firstDraw || style.opacity !== prevStyle.opacity)) {\n            ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;\n        }\n\n        if ((firstDraw || style.blend !== prevStyle.blend)) {\n            ctx.globalCompositeOperation = style.blend || 'source-over';\n        }\n        if (this.hasStroke()) {\n            var lineWidth = style.lineWidth;\n            ctx.lineWidth = lineWidth / (\n                (this.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1\n            );\n        }\n    },\n\n    hasFill: function () {\n        var fill = this.fill;\n        return fill != null && fill !== 'none';\n    },\n\n    hasStroke: function () {\n        var stroke = this.stroke;\n        return stroke != null && stroke !== 'none' && this.lineWidth > 0;\n    },\n\n    /**\n     * Extend from other style\n     * @param {zrender/graphic/Style} otherStyle\n     * @param {boolean} overwrite true: overwrirte any way.\n     *                            false: overwrite only when !target.hasOwnProperty\n     *                            others: overwrite when property is not null/undefined.\n     */\n    extendFrom: function (otherStyle, overwrite) {\n        if (otherStyle) {\n            for (var name in otherStyle) {\n                if (otherStyle.hasOwnProperty(name)\n                    && (overwrite === true\n                        || (\n                            overwrite === false\n                                ? !this.hasOwnProperty(name)\n                                : otherStyle[name] != null\n                        )\n                    )\n                ) {\n                    this[name] = otherStyle[name];\n                }\n            }\n        }\n    },\n\n    /**\n     * Batch setting style with a given object\n     * @param {Object|string} obj\n     * @param {*} [obj]\n     */\n    set: function (obj, value) {\n        if (typeof obj === 'string') {\n            this[obj] = value;\n        }\n        else {\n            this.extendFrom(obj, true);\n        }\n    },\n\n    /**\n     * Clone\n     * @return {zrender/graphic/Style} [description]\n     */\n    clone: function () {\n        var newStyle = new this.constructor();\n        newStyle.extendFrom(this, true);\n        return newStyle;\n    },\n\n    getGradient: function (ctx, obj, rect) {\n        var method = obj.type === 'radial' ? createRadialGradient : createLinearGradient;\n        var canvasGradient = method(ctx, obj, rect);\n        var colorStops = obj.colorStops;\n        for (var i = 0; i < colorStops.length; i++) {\n            canvasGradient.addColorStop(\n                colorStops[i].offset, colorStops[i].color\n            );\n        }\n        return canvasGradient;\n    }\n\n};\n\nvar styleProto = Style.prototype;\nfor (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {\n    var prop = STYLE_COMMON_PROPS[i];\n    if (!(prop[0] in styleProto)) {\n        styleProto[prop[0]] = prop[1];\n    }\n}\n\n// Provide for others\nStyle.getGradient = styleProto.getGradient;\n\nexport default Style;","\nvar Pattern = function (image, repeat) {\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\n    this.image = image;\n    this.repeat = repeat;\n\n    // Can be cloned\n    this.type = 'pattern';\n};\n\nPattern.prototype.getCanvasPattern = function (ctx) {\n    return ctx.createPattern(this.image, this.repeat || 'repeat');\n};\n\nexport default Pattern;","/**\n * @module zrender/Layer\n * @author pissang(https://www.github.com/pissang)\n */\n\nimport * as util from './core/util';\nimport {devicePixelRatio} from './config';\nimport Style from './graphic/Style';\nimport Pattern from './graphic/Pattern';\n\nfunction returnFalse() {\n    return false;\n}\n\n/**\n * 创建dom\n *\n * @inner\n * @param {string} id dom id 待用\n * @param {Painter} painter painter instance\n * @param {number} number\n */\nfunction createDom(id, painter, dpr) {\n    var newDom = util.createCanvas();\n    var width = painter.getWidth();\n    var height = painter.getHeight();\n\n    var 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\n/**\n * @alias module:zrender/Layer\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @param {string} id\n * @param {module:zrender/Painter} painter\n * @param {number} [dpr]\n */\nvar Layer = function(id, painter, dpr) {\n    var 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;\n    this.dom = dom;\n\n    var domStyle = dom.style;\n    if (domStyle) { // Not in node\n        dom.onselectstart = returnFalse; // 避免页面选中的尴尬\n        domStyle['-webkit-user-select'] = 'none';\n        domStyle['user-select'] = 'none';\n        domStyle['-webkit-touch-callout'] = 'none';\n        domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';\n        domStyle['padding'] = 0;\n        domStyle['margin'] = 0;\n        domStyle['border-width'] = 0;\n    }\n\n    this.domBack = null;\n    this.ctxBack = null;\n\n    this.painter = painter;\n\n    this.config = null;\n\n    // Configs\n    /**\n     * 每次清空画布的颜色\n     * @type {string}\n     * @default 0\n     */\n    this.clearColor = 0;\n    /**\n     * 是否开启动态模糊\n     * @type {boolean}\n     * @default false\n     */\n    this.motionBlur = false;\n    /**\n     * 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n     * @type {number}\n     * @default 0.7\n     */\n    this.lastFrameAlpha = 0.7;\n\n    /**\n     * Layer dpr\n     * @type {number}\n     */\n    this.dpr = dpr;\n};\n\nLayer.prototype = {\n\n    constructor: Layer,\n\n    __dirty: true,\n\n    __used: false,\n\n    __drawIndex: 0,\n    __startIndex: 0,\n    __endIndex: 0,\n\n    incremental: false,\n\n    getElementCount: function () {\n        return this.__endIndex - this.__startIndex;\n    },\n\n    initContext: function () {\n        this.ctx = this.dom.getContext('2d');\n        this.ctx.dpr = this.dpr;\n    },\n\n    createBackBuffer: function () {\n        var 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     * @param  {number} width\n     * @param  {number} height\n     */\n    resize: function (width, height) {\n        var dpr = this.dpr;\n\n        var dom = this.dom;\n        var domStyle = dom.style;\n        var 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     * @param {boolean} [clearAll]=false Clear all with out motion blur\n     * @param {Color} [clearColor]\n     */\n    clear: function (clearAll, clearColor) {\n        var dom = this.dom;\n        var ctx = this.ctx;\n        var width = dom.width;\n        var height = dom.height;\n\n        var clearColor = clearColor || this.clearColor;\n        var haveMotionBLur = this.motionBlur && !clearAll;\n        var lastFrameAlpha = this.lastFrameAlpha;\n\n        var dpr = this.dpr;\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        ctx.clearRect(0, 0, width, height);\n        if (clearColor && clearColor !== 'transparent') {\n            var clearColorGradientOrPattern;\n            // Gradient\n            if (clearColor.colorStops) {\n                // Cache canvas gradient\n                clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, {\n                    x: 0,\n                    y: 0,\n                    width: width,\n                    height: height\n                });\n\n                clearColor.__canvasGradient = clearColorGradientOrPattern;\n            }\n            // Pattern\n            else if (clearColor.image) {\n                clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx);\n            }\n            ctx.save();\n            ctx.fillStyle = clearColorGradientOrPattern || clearColor;\n            ctx.fillRect(0, 0, width, height);\n            ctx.restore();\n        }\n\n        if (haveMotionBLur) {\n            var domBack = this.domBack;\n            ctx.save();\n            ctx.globalAlpha = lastFrameAlpha;\n            ctx.drawImage(domBack, 0, 0, width, height);\n            ctx.restore();\n        }\n    }\n};\n\nexport default Layer;","\nexport default (\n    typeof window !== 'undefined'\n    && (\n        (window.requestAnimationFrame && window.requestAnimationFrame.bind(window))\n        // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809\n        || (window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window))\n        || window.mozRequestAnimationFrame\n        || window.webkitRequestAnimationFrame\n    )\n) || function (func) {\n    setTimeout(func, 16);\n};","\nimport LRU from '../../core/LRU';\n\nvar globalImageCache = new LRU(50);\n\n/**\n * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc\n * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image\n */\nexport function findExistImage(newImageOrSrc) {\n    if (typeof newImageOrSrc === 'string') {\n        var 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 {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc\n * @param {HTMLImageElement|HTMLCanvasElement|Canvas} image Existent image.\n * @param {module:zrender/Element} [hostEl] For calling `dirty`.\n * @param {Function} [cb] params: (image, cbPayload)\n * @param {Object} [cbPayload] Payload on cb calling.\n * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image\n */\nexport function createOrUpdateImage(newImageOrSrc, image, hostEl, cb, cbPayload) {\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.__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        var cachedImgObj = globalImageCache.get(newImageOrSrc);\n\n        var pendingWrap = {hostEl: hostEl, cb: cb, cbPayload: cbPayload};\n\n        if (cachedImgObj) {\n            image = cachedImgObj.image;\n            !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\n        }\n        else {\n            !image && (image = new Image());\n            image.onload = imageOnLoad;\n\n            globalImageCache.put(\n                newImageOrSrc,\n                image.__cachedImgObj = {\n                    image: image,\n                    pending: [pendingWrap]\n                }\n            );\n\n            image.src = image.__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() {\n    var cachedImgObj = this.__cachedImgObj;\n    this.onload = this.__cachedImgObj = null;\n\n    for (var i = 0; i < cachedImgObj.pending.length; i++) {\n        var pendingWrap = cachedImgObj.pending[i];\n        var 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) {\n    return image && image.width && image.height;\n}\n\n","import BoundingRect from '../core/BoundingRect';\nimport * as imageHelper from '../graphic/helper/image';\nimport {\n    getContext,\n    extend,\n    retrieve2,\n    retrieve3,\n    trim\n} from '../core/util';\n\nvar textWidthCache = {};\nvar textWidthCacheCounter = 0;\n\nvar TEXT_CACHE_MAX = 5000;\nvar STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\n\nexport var DEFAULT_FONT = '12px sans-serif';\n\n// Avoid assign to an exported variable, for transforming to cjs.\nvar methods = {};\n\nexport function $override(name, fn) {\n    methods[name] = fn;\n}\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {number} width\n */\nexport function getWidth(text, font) {\n    font = font || DEFAULT_FONT;\n    var key = text + ':' + font;\n    if (textWidthCache[key]) {\n        return textWidthCache[key];\n    }\n\n    var textLines = (text + '').split('\\n');\n    var width = 0;\n\n    for (var i = 0, l = textLines.length; i < l; i++) {\n        // textContain.measureText may be overrided in SVG or VML\n        width = Math.max(measureText(textLines[i], font).width, width);\n    }\n\n    if (textWidthCacheCounter > TEXT_CACHE_MAX) {\n        textWidthCacheCounter = 0;\n        textWidthCache = {};\n    }\n    textWidthCacheCounter++;\n    textWidthCache[key] = width;\n\n    return width;\n}\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {string} [textAlign='left']\n * @param {string} [textVerticalAlign='top']\n * @param {Array.<number>} [textPadding]\n * @param {Object} [rich]\n * @param {Object} [truncate]\n * @return {Object} {x, y, width, height, lineHeight}\n */\nexport function getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) {\n    return rich\n        ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate)\n        : getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, truncate);\n}\n\nfunction getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, truncate) {\n    var contentBlock = parsePlainText(text, font, textPadding, truncate);\n    var outerWidth = getWidth(text, font);\n    if (textPadding) {\n        outerWidth += textPadding[1] + textPadding[3];\n    }\n    var outerHeight = contentBlock.outerHeight;\n\n    var x = adjustTextX(0, outerWidth, textAlign);\n    var y = adjustTextY(0, outerHeight, textVerticalAlign);\n\n    var rect = new BoundingRect(x, y, outerWidth, outerHeight);\n    rect.lineHeight = contentBlock.lineHeight;\n\n    return rect;\n}\n\nfunction getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, rich, truncate) {\n    var contentBlock = parseRichText(text, {\n        rich: rich,\n        truncate: truncate,\n        font: font,\n        textAlign: textAlign,\n        textPadding: textPadding\n    });\n    var outerWidth = contentBlock.outerWidth;\n    var outerHeight = contentBlock.outerHeight;\n\n    var x = adjustTextX(0, outerWidth, textAlign);\n    var y = adjustTextY(0, outerHeight, textVerticalAlign);\n\n    return new BoundingRect(x, y, outerWidth, outerHeight);\n}\n\n/**\n * @public\n * @param {number} x\n * @param {number} width\n * @param {string} [textAlign='left']\n * @return {number} Adjusted x.\n */\nexport function adjustTextX(x, width, textAlign) {\n    // FIXME 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\n/**\n * @public\n * @param {number} y\n * @param {number} height\n * @param {string} [textVerticalAlign='top']\n * @return {number} Adjusted y.\n */\nexport function adjustTextY(y, height, textVerticalAlign) {\n    if (textVerticalAlign === 'middle') {\n        y -= height / 2;\n    }\n    else if (textVerticalAlign === 'bottom') {\n        y -= height;\n    }\n    return y;\n}\n\n/**\n * @public\n * @param {stirng} textPosition\n * @param {Object} rect {x, y, width, height}\n * @param {number} distance\n * @return {Object} {x, y, textAlign, textVerticalAlign}\n */\nexport function adjustTextPositionOnRect(textPosition, rect, distance) {\n\n    var x = rect.x;\n    var y = rect.y;\n\n    var height = rect.height;\n    var width = rect.width;\n    var halfHeight = height / 2;\n\n    var textAlign = 'left';\n    var textVerticalAlign = 'top';\n\n    switch (textPosition) {\n        case 'left':\n            x -= distance;\n            y += halfHeight;\n            textAlign = 'right';\n            textVerticalAlign = 'middle';\n            break;\n        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    return {\n        x: x,\n        y: y,\n        textAlign: textAlign,\n        textVerticalAlign: textVerticalAlign\n    };\n}\n\n/**\n * Show ellipsis if overflow.\n *\n * @public\n * @param  {string} text\n * @param  {string} containerWidth\n * @param  {string} font\n * @param  {number} [ellipsis='...']\n * @param  {Object} [options]\n * @param  {number} [options.maxIterations=3]\n * @param  {number} [options.minChar=0] If truncate result are less\n *                  then minChar, ellipsis will not show, which is\n *                  better for user hint in some cases.\n * @param  {number} [options.placeholder=''] When all truncated, use the placeholder.\n * @return {string}\n */\nexport function truncateText(text, containerWidth, font, ellipsis, options) {\n    if (!containerWidth) {\n        return '';\n    }\n\n    var textLines = (text + '').split('\\n');\n    options = prepareTruncateOptions(containerWidth, font, ellipsis, options);\n\n    // FIXME\n    // It is not appropriate that every line has '...' when truncate multiple lines.\n    for (var i = 0, len = textLines.length; i < len; i++) {\n        textLines[i] = truncateSingleLine(textLines[i], options);\n    }\n\n    return textLines.join('\\n');\n}\n\nfunction prepareTruncateOptions(containerWidth, font, ellipsis, options) {\n    options = extend({}, options);\n\n    options.font = font;\n    var ellipsis = retrieve2(ellipsis, '...');\n    options.maxIterations = retrieve2(options.maxIterations, 2);\n    var minChar = options.minChar = retrieve2(options.minChar, 0);\n    // FIXME\n    // Other languages?\n    options.cnCharWidth = getWidth('国', font);\n    // FIXME\n    // Consider proportional font?\n    var ascCharWidth = options.ascCharWidth = getWidth('a', font);\n    options.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    var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n    for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n        contentWidth -= ascCharWidth;\n    }\n\n    var ellipsisWidth = getWidth(ellipsis);\n    if (ellipsisWidth > contentWidth) {\n        ellipsis = '';\n        ellipsisWidth = 0;\n    }\n\n    contentWidth = containerWidth - ellipsisWidth;\n\n    options.ellipsis = ellipsis;\n    options.ellipsisWidth = ellipsisWidth;\n    options.contentWidth = contentWidth;\n    options.containerWidth = containerWidth;\n\n    return options;\n}\n\nfunction truncateSingleLine(textLine, options) {\n    var containerWidth = options.containerWidth;\n    var font = options.font;\n    var contentWidth = options.contentWidth;\n\n    if (!containerWidth) {\n        return '';\n    }\n\n    var lineWidth = getWidth(textLine, font);\n\n    if (lineWidth <= containerWidth) {\n        return textLine;\n    }\n\n    for (var j = 0;; j++) {\n        if (lineWidth <= contentWidth || j >= options.maxIterations) {\n            textLine += options.ellipsis;\n            break;\n        }\n\n        var subLength = j === 0\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(text, contentWidth, ascCharWidth, cnCharWidth) {\n    var width = 0;\n    var i = 0;\n    for (var len = text.length; i < len && width < contentWidth; i++) {\n        var charCode = text.charCodeAt(i);\n        width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth;\n    }\n    return i;\n}\n\n/**\n * @public\n * @param {string} font\n * @return {number} line height\n */\nexport function getLineHeight(font) {\n    // FIXME A rough approach.\n    return getWidth('国', font);\n}\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {Object} width\n */\nexport function measureText(text, font) {\n    return methods.measureText(text, font);\n}\n\n// Avoid assign to an exported variable, for transforming to cjs.\nmethods.measureText = function (text, font) {\n    var ctx = getContext();\n    ctx.font = font || DEFAULT_FONT;\n    return ctx.measureText(text);\n};\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {Object} [truncate]\n * @return {Object} block: {lineHeight, lines, height, outerHeight}\n *  Notice: for performance, do not calculate outerWidth util needed.\n */\nexport function parsePlainText(text, font, padding, truncate) {\n    text != null && (text += '');\n\n    var lineHeight = getLineHeight(font);\n    var lines = text ? text.split('\\n') : [];\n    var height = lines.length * lineHeight;\n    var outerHeight = height;\n\n    if (padding) {\n        outerHeight += padding[0] + padding[2];\n    }\n\n    if (text && truncate) {\n        var truncOuterHeight = truncate.outerHeight;\n        var truncOuterWidth = truncate.outerWidth;\n        if (truncOuterHeight != null && outerHeight > truncOuterHeight) {\n            text = '';\n            lines = [];\n        }\n        else if (truncOuterWidth != null) {\n            var options = prepareTruncateOptions(\n                truncOuterWidth - (padding ? padding[1] + padding[3] : 0),\n                font,\n                truncate.ellipsis,\n                {minChar: truncate.minChar, placeholder: truncate.placeholder}\n            );\n\n            // FIXME\n            // It is not appropriate that every line has '...' when truncate multiple lines.\n            for (var i = 0, len = lines.length; i < len; i++) {\n                lines[i] = truncateSingleLine(lines[i], options);\n            }\n        }\n    }\n\n    return {\n        lines: lines,\n        height: height,\n        outerHeight: outerHeight,\n        lineHeight: lineHeight\n    };\n}\n\n/**\n * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx'\n * Also consider 'bbbb{a|xxx\\nzzz}xxxx\\naaaa'.\n *\n * @public\n * @param {string} text\n * @param {Object} style\n * @return {Object} block\n * {\n *      width,\n *      height,\n *      lines: [{\n *          lineHeight,\n *          width,\n *          tokens: [[{\n *              styleName,\n *              text,\n *              width,      // include textPadding\n *              height,     // include textPadding\n *              textWidth, // pure text width\n *              textHeight, // pure text height\n *              lineHeihgt,\n *              font,\n *              textAlign,\n *              textVerticalAlign\n *          }], [...], ...]\n *      }, ...]\n * }\n * If styleName is undefined, it is plain text.\n */\nexport function parseRichText(text, style) {\n    var contentBlock = {lines: [], width: 0, height: 0};\n\n    text != null && (text += '');\n    if (!text) {\n        return contentBlock;\n    }\n\n    var lastIndex = STYLE_REG.lastIndex = 0;\n    var result;\n    while ((result = STYLE_REG.exec(text)) != null) {\n        var matchedIndex = result.index;\n        if (matchedIndex > lastIndex) {\n            pushTokens(contentBlock, text.substring(lastIndex, matchedIndex));\n        }\n        pushTokens(contentBlock, result[2], result[1]);\n        lastIndex = STYLE_REG.lastIndex;\n    }\n\n    if (lastIndex < text.length) {\n        pushTokens(contentBlock, text.substring(lastIndex, text.length));\n    }\n\n    var lines = contentBlock.lines;\n    var contentHeight = 0;\n    var contentWidth = 0;\n    // For `textWidth: 100%`\n    var pendingList = [];\n\n    var stlPadding = style.textPadding;\n\n    var truncate = style.truncate;\n    var truncateWidth = truncate && truncate.outerWidth;\n    var truncateHeight = truncate && truncate.outerHeight;\n    if (stlPadding) {\n        truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]);\n        truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]);\n    }\n\n    // Calculate layout info of tokens.\n    for (var i = 0; i < lines.length; i++) {\n        var line = lines[i];\n        var lineHeight = 0;\n        var lineWidth = 0;\n\n        for (var j = 0; j < line.tokens.length; j++) {\n            var token = line.tokens[j];\n            var tokenStyle = token.styleName && style.rich[token.styleName] || {};\n            // textPadding should not inherit from style.\n            var textPadding = token.textPadding = tokenStyle.textPadding;\n\n            // textFont has been asigned to font by `normalizeStyle`.\n            var font = token.font = tokenStyle.font || style.font;\n\n            // textHeight can be used when textVerticalAlign is specified in token.\n            var tokenHeight = token.textHeight = retrieve2(\n                // textHeight should not be inherited, consider it can be specified\n                // as box height of the block.\n                tokenStyle.textHeight, getLineHeight(font)\n            );\n            textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n            token.height = tokenHeight;\n            token.lineHeight = retrieve3(\n                tokenStyle.textLineHeight, style.textLineHeight, tokenHeight\n            );\n\n            token.textAlign = tokenStyle && tokenStyle.textAlign || style.textAlign;\n            token.textVerticalAlign = tokenStyle && tokenStyle.textVerticalAlign || 'middle';\n\n            if (truncateHeight != null && contentHeight + token.lineHeight > truncateHeight) {\n                return {lines: [], width: 0, height: 0};\n            }\n\n            token.textWidth = getWidth(token.text, font);\n            var tokenWidth = tokenStyle.textWidth;\n            var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === '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 tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') {\n                token.percentWidth = tokenWidth;\n                pendingList.push(token);\n                tokenWidth = 0;\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                    tokenWidth = token.textWidth;\n\n                    // FIXME: If image is not loaded and textWidth is not specified, calling\n                    // `getBoundingRect()` will not get correct result.\n                    var textBackgroundColor = tokenStyle.textBackgroundColor;\n                    var bgImg = textBackgroundColor && textBackgroundColor.image;\n\n                    // Use cases:\n                    // (1) If image is not loaded, it will be loaded at render phase and call\n                    // `dirty()` and `textBackgroundColor.image` will be replaced with the loaded\n                    // image, and then the right size will be calculated here at the next tick.\n                    // See `graphic/helper/text.js`.\n                    // (2) If image loaded, and `textBackgroundColor.image` is image src string,\n                    // use `imageHelper.findExistImage` to find cached image.\n                    // `imageHelper.findExistImage` will always be called here before\n                    // `imageHelper.createOrUpdateImage` in `graphic/helper/text.js#renderRichText`\n                    // which ensures that image will not be rendered before correct size calcualted.\n                    if (bgImg) {\n                        bgImg = imageHelper.findExistImage(bgImg);\n                        if (imageHelper.isImageReady(bgImg)) {\n                            tokenWidth = Math.max(tokenWidth, bgImg.width * tokenHeight / bgImg.height);\n                        }\n                    }\n                }\n\n                var paddingW = textPadding ? textPadding[1] + textPadding[3] : 0;\n                tokenWidth += paddingW;\n\n                var remianTruncWidth = truncateWidth != null ? truncateWidth - lineWidth : null;\n\n                if (remianTruncWidth != null && remianTruncWidth < tokenWidth) {\n                    if (!tokenWidthNotSpecified || remianTruncWidth < paddingW) {\n                        token.text = '';\n                        token.textWidth = tokenWidth = 0;\n                    }\n                    else {\n                        token.text = truncateText(\n                            token.text, remianTruncWidth - paddingW, font, truncate.ellipsis,\n                            {minChar: truncate.minChar}\n                        );\n                        token.textWidth = getWidth(token.text, font);\n                        tokenWidth = token.textWidth + paddingW;\n                    }\n                }\n            }\n\n            lineWidth += (token.width = tokenWidth);\n            tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n        }\n\n        line.width = lineWidth;\n        line.lineHeight = lineHeight;\n        contentHeight += lineHeight;\n        contentWidth = Math.max(contentWidth, lineWidth);\n    }\n\n    contentBlock.outerWidth = contentBlock.width = retrieve2(style.textWidth, contentWidth);\n    contentBlock.outerHeight = contentBlock.height = retrieve2(style.textHeight, contentHeight);\n\n    if (stlPadding) {\n        contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n        contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n    }\n\n    for (var i = 0; i < pendingList.length; i++) {\n        var token = pendingList[i];\n        var percentWidth = token.percentWidth;\n        // Should not base on outerWidth, because token can not be placed out of padding.\n        token.width = parseInt(percentWidth, 10) / 100 * contentWidth;\n    }\n\n    return contentBlock;\n}\n\nfunction pushTokens(block, str, styleName) {\n    var isEmptyStr = str === '';\n    var strs = str.split('\\n');\n    var lines = block.lines;\n\n    for (var i = 0; i < strs.length; i++) {\n        var text = strs[i];\n        var token = {\n            styleName: styleName,\n            text: text,\n            isLineHolder: !text && !isEmptyStr\n        };\n\n        // The first token should be appended to the last line.\n        if (!i) {\n            var tokens = (lines[lines.length - 1] || (lines[0] = {tokens: []})).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            var 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({tokens: [token]});\n        }\n    }\n}\n\nexport function makeFont(style) {\n    // FIXME in node-canvas fontWeight is before fontStyle\n    // Use `fontSize` `fontFamily` to check whether font properties are defined.\n    var font = (style.fontSize || style.fontFamily) && [\n        style.fontStyle,\n        style.fontWeight,\n        (style.fontSize || 12) + 'px',\n        // If font properties are defined, `fontFamily` should not be ignored.\n        style.fontFamily || 'sans-serif'\n    ].join(' ');\n    return font && trim(font) || style.textFont || style.font;\n}\n","\nexport function buildPath(ctx, shape) {\n    var x = shape.x;\n    var y = shape.y;\n    var width = shape.width;\n    var height = shape.height;\n    var r = shape.r;\n    var r1;\n    var r2;\n    var r3;\n    var 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    var 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","\nimport {\n    retrieve2,\n    retrieve3,\n    each,\n    normalizeCssArray,\n    isString,\n    isObject\n} from '../../core/util';\nimport * as textContain from '../../contain/text';\nimport * as roundRectHelper from './roundRect';\nimport * as imageHelper from './image';\nimport fixShadow from './fixShadow';\n\n// TODO: Have not support 'start', 'end' yet.\nvar VALID_TEXT_ALIGN = {left: 1, right: 1, center: 1};\nvar VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1};\n\n/**\n * @param {module:zrender/graphic/Style} style\n * @return {module:zrender/graphic/Style} The input style.\n */\nexport function normalizeTextStyle(style) {\n    normalizeStyle(style);\n    each(style.rich, normalizeStyle);\n    return style;\n}\n\nfunction normalizeStyle(style) {\n    if (style) {\n\n        style.font = textContain.makeFont(style);\n\n        var textAlign = style.textAlign;\n        textAlign === 'middle' && (textAlign = 'center');\n        style.textAlign = (\n            textAlign == null || VALID_TEXT_ALIGN[textAlign]\n        ) ? textAlign : 'left';\n\n        // Compatible with textBaseline.\n        var textVerticalAlign = style.textVerticalAlign || style.textBaseline;\n        textVerticalAlign === 'center' && (textVerticalAlign = 'middle');\n        style.textVerticalAlign = (\n            textVerticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[textVerticalAlign]\n        ) ? textVerticalAlign : 'top';\n\n        var textPadding = style.textPadding;\n        if (textPadding) {\n            style.textPadding = normalizeCssArray(style.textPadding);\n        }\n    }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} text\n * @param {module:zrender/graphic/Style} style\n * @param {Object|boolean} [rect] {x, y, width, height}\n *                  If set false, rect text is not used.\n */\nexport function renderText(hostEl, ctx, text, style, rect) {\n    style.rich\n        ? renderRichText(hostEl, ctx, text, style, rect)\n        : renderPlainText(hostEl, ctx, text, style, rect);\n}\n\nfunction renderPlainText(hostEl, ctx, text, style, rect) {\n    var font = setCtx(ctx, 'font', style.font || textContain.DEFAULT_FONT);\n\n    var textPadding = style.textPadding;\n\n    var contentBlock = hostEl.__textCotentBlock;\n    if (!contentBlock || hostEl.__dirty) {\n        contentBlock = hostEl.__textCotentBlock = textContain.parsePlainText(\n            text, font, textPadding, style.truncate\n        );\n    }\n\n    var outerHeight = contentBlock.outerHeight;\n\n    var textLines = contentBlock.lines;\n    var lineHeight = contentBlock.lineHeight;\n\n    var boxPos = getBoxPosition(outerHeight, style, rect);\n    var baseX = boxPos.baseX;\n    var baseY = boxPos.baseY;\n    var textAlign = boxPos.textAlign;\n    var textVerticalAlign = boxPos.textVerticalAlign;\n\n    // Origin of textRotation should be the base point of text drawing.\n    applyTextRotation(ctx, style, rect, baseX, baseY);\n\n    var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n    var textX = baseX;\n    var textY = boxY;\n\n    var needDrawBg = needDrawBackground(style);\n    if (needDrawBg || textPadding) {\n        // Consider performance, do not call getTextWidth util necessary.\n        var textWidth = textContain.getWidth(text, font);\n        var outerWidth = textWidth;\n        textPadding && (outerWidth += textPadding[1] + textPadding[3]);\n        var boxX = textContain.adjustTextX(baseX, outerWidth, textAlign);\n\n        needDrawBg && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight);\n\n        if (textPadding) {\n            textX = getTextXForPadding(baseX, textAlign, textPadding);\n            textY += textPadding[0];\n        }\n    }\n\n    setCtx(ctx, 'textAlign', textAlign || 'left');\n    // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n    // text will offset downward a little bit in font \"Microsoft YaHei\".\n    setCtx(ctx, 'textBaseline', 'middle');\n\n    // Always set shadowBlur and shadowOffset to avoid leak from displayable.\n    setCtx(ctx, 'shadowBlur', style.textShadowBlur || 0);\n    setCtx(ctx, 'shadowColor', style.textShadowColor || 'transparent');\n    setCtx(ctx, 'shadowOffsetX', style.textShadowOffsetX || 0);\n    setCtx(ctx, 'shadowOffsetY', style.textShadowOffsetY || 0);\n\n    // `textBaseline` is set as 'middle'.\n    textY += lineHeight / 2;\n\n    var textStrokeWidth = style.textStrokeWidth;\n    var textStroke = getStroke(style.textStroke, textStrokeWidth);\n    var textFill = getFill(style.textFill);\n\n    if (textStroke) {\n        setCtx(ctx, 'lineWidth', textStrokeWidth);\n        setCtx(ctx, 'strokeStyle', textStroke);\n    }\n    if (textFill) {\n        setCtx(ctx, 'fillStyle', textFill);\n    }\n\n    for (var i = 0; i < textLines.length; i++) {\n        // Fill after stroke so the outline will not cover the main part.\n        textStroke && ctx.strokeText(textLines[i], textX, textY);\n        textFill && ctx.fillText(textLines[i], textX, textY);\n        textY += lineHeight;\n    }\n}\n\nfunction renderRichText(hostEl, ctx, text, style, rect) {\n    var contentBlock = hostEl.__textCotentBlock;\n\n    if (!contentBlock || hostEl.__dirty) {\n        contentBlock = hostEl.__textCotentBlock = textContain.parseRichText(text, style);\n    }\n\n    drawRichText(hostEl, ctx, contentBlock, style, rect);\n}\n\nfunction drawRichText(hostEl, ctx, contentBlock, style, rect) {\n    var contentWidth = contentBlock.width;\n    var outerWidth = contentBlock.outerWidth;\n    var outerHeight = contentBlock.outerHeight;\n    var textPadding = style.textPadding;\n\n    var boxPos = getBoxPosition(outerHeight, style, rect);\n    var baseX = boxPos.baseX;\n    var baseY = boxPos.baseY;\n    var textAlign = boxPos.textAlign;\n    var textVerticalAlign = boxPos.textVerticalAlign;\n\n    // Origin of textRotation should be the base point of text drawing.\n    applyTextRotation(ctx, style, rect, baseX, baseY);\n\n    var boxX = textContain.adjustTextX(baseX, outerWidth, textAlign);\n    var boxY = textContain.adjustTextY(baseY, outerHeight, textVerticalAlign);\n    var xLeft = boxX;\n    var lineTop = boxY;\n    if (textPadding) {\n        xLeft += textPadding[3];\n        lineTop += textPadding[0];\n    }\n    var xRight = xLeft + contentWidth;\n\n    needDrawBackground(style) && drawBackground(\n        hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight\n    );\n\n    for (var i = 0; i < contentBlock.lines.length; i++) {\n        var line = contentBlock.lines[i];\n        var tokens = line.tokens;\n        var tokenCount = tokens.length;\n        var lineHeight = line.lineHeight;\n        var usedWidth = line.width;\n\n        var leftIndex = 0;\n        var lineXLeft = xLeft;\n        var lineXRight = xRight;\n        var rightIndex = tokenCount - 1;\n        var token;\n\n        while (\n            leftIndex < tokenCount\n            && (token = tokens[leftIndex], !token.textAlign || token.textAlign === 'left')\n        ) {\n            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft, 'left');\n            usedWidth -= token.width;\n            lineXLeft += token.width;\n            leftIndex++;\n        }\n\n        while (\n            rightIndex >= 0\n            && (token = tokens[rightIndex], token.textAlign === 'right')\n        ) {\n            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXRight, 'right');\n            usedWidth -= 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) - usedWidth) / 2;\n        while (leftIndex <= rightIndex) {\n            token = tokens[leftIndex];\n            // Consider width specified by user, use 'center' rather than 'left'.\n            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center');\n            lineXLeft += token.width;\n            leftIndex++;\n        }\n\n        lineTop += lineHeight;\n    }\n}\n\nfunction applyTextRotation(ctx, style, rect, x, y) {\n    // textRotation only apply in RectText.\n    if (rect && style.textRotation) {\n        var origin = style.textOrigin;\n        if (origin === 'center') {\n            x = rect.width / 2 + rect.x;\n            y = rect.height / 2 + rect.y;\n        }\n        else if (origin) {\n            x = origin[0] + rect.x;\n            y = origin[1] + rect.y;\n        }\n\n        ctx.translate(x, y);\n        // Positive: anticlockwise\n        ctx.rotate(-style.textRotation);\n        ctx.translate(-x, -y);\n    }\n}\n\nfunction placeToken(hostEl, ctx, token, style, lineHeight, lineTop, x, textAlign) {\n    var tokenStyle = style.rich[token.styleName] || {};\n\n    // 'ctx.textBaseline' is always set as 'middle', for sake of\n    // the bias of \"Microsoft YaHei\".\n    var textVerticalAlign = token.textVerticalAlign;\n    var y = lineTop + lineHeight / 2;\n    if (textVerticalAlign === 'top') {\n        y = lineTop + token.height / 2;\n    }\n    else if (textVerticalAlign === 'bottom') {\n        y = lineTop + lineHeight - token.height / 2;\n    }\n\n    !token.isLineHolder && needDrawBackground(tokenStyle) && drawBackground(\n        hostEl,\n        ctx,\n        tokenStyle,\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\n    var textPadding = token.textPadding;\n    if (textPadding) {\n        x = getTextXForPadding(x, textAlign, textPadding);\n        y -= token.height / 2 - textPadding[2] - token.textHeight / 2;\n    }\n\n    setCtx(ctx, 'shadowBlur', retrieve3(tokenStyle.textShadowBlur, style.textShadowBlur, 0));\n    setCtx(ctx, 'shadowColor', tokenStyle.textShadowColor || style.textShadowColor || 'transparent');\n    setCtx(ctx, 'shadowOffsetX', retrieve3(tokenStyle.textShadowOffsetX, style.textShadowOffsetX, 0));\n    setCtx(ctx, 'shadowOffsetY', retrieve3(tokenStyle.textShadowOffsetY, style.textShadowOffsetY, 0));\n\n    setCtx(ctx, 'textAlign', textAlign);\n    // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n    // text will offset downward a little bit in font \"Microsoft YaHei\".\n    setCtx(ctx, 'textBaseline', 'middle');\n\n    setCtx(ctx, 'font', token.font || textContain.DEFAULT_FONT);\n\n    var textStroke = getStroke(tokenStyle.textStroke || style.textStroke, textStrokeWidth);\n    var textFill = getFill(tokenStyle.textFill || style.textFill);\n    var textStrokeWidth = retrieve2(tokenStyle.textStrokeWidth, style.textStrokeWidth);\n\n    // Fill after stroke so the outline will not cover the main part.\n    if (textStroke) {\n        setCtx(ctx, 'lineWidth', textStrokeWidth);\n        setCtx(ctx, 'strokeStyle', textStroke);\n        ctx.strokeText(token.text, x, y);\n    }\n    if (textFill) {\n        setCtx(ctx, 'fillStyle', textFill);\n        ctx.fillText(token.text, x, y);\n    }\n}\n\nfunction needDrawBackground(style) {\n    return style.textBackgroundColor\n        || (style.textBorderWidth && style.textBorderColor);\n}\n\n// style: {textBackgroundColor, textBorderWidth, textBorderColor, textBorderRadius}\n// shape: {x, y, width, height}\nfunction drawBackground(hostEl, ctx, style, x, y, width, height) {\n    var textBackgroundColor = style.textBackgroundColor;\n    var textBorderWidth = style.textBorderWidth;\n    var textBorderColor = style.textBorderColor;\n    var isPlainBg = isString(textBackgroundColor);\n\n    setCtx(ctx, 'shadowBlur', style.textBoxShadowBlur || 0);\n    setCtx(ctx, 'shadowColor', style.textBoxShadowColor || 'transparent');\n    setCtx(ctx, 'shadowOffsetX', style.textBoxShadowOffsetX || 0);\n    setCtx(ctx, 'shadowOffsetY', style.textBoxShadowOffsetY || 0);\n\n    if (isPlainBg || (textBorderWidth && textBorderColor)) {\n        ctx.beginPath();\n        var textBorderRadius = style.textBorderRadius;\n        if (!textBorderRadius) {\n            ctx.rect(x, y, width, height);\n        }\n        else {\n            roundRectHelper.buildPath(ctx, {\n                x: x, y: y, width: width, height: height, r: textBorderRadius\n            });\n        }\n        ctx.closePath();\n    }\n\n    if (isPlainBg) {\n        setCtx(ctx, 'fillStyle', textBackgroundColor);\n        ctx.fill();\n    }\n    else if (isObject(textBackgroundColor)) {\n        var image = textBackgroundColor.image;\n\n        image = imageHelper.createOrUpdateImage(\n            image, null, hostEl, onBgImageLoaded, textBackgroundColor\n        );\n        if (image && imageHelper.isImageReady(image)) {\n            ctx.drawImage(image, x, y, width, height);\n        }\n    }\n\n    if (textBorderWidth && textBorderColor) {\n        setCtx(ctx, 'lineWidth', textBorderWidth);\n        setCtx(ctx, 'strokeStyle', textBorderColor);\n        ctx.stroke();\n    }\n}\n\nfunction onBgImageLoaded(image, textBackgroundColor) {\n    // Replace image, so that `contain/text.js#parseRichText`\n    // will get correct result in next tick.\n    textBackgroundColor.image = image;\n}\n\nfunction getBoxPosition(blockHeiht, style, rect) {\n    var baseX = style.x || 0;\n    var baseY = style.y || 0;\n    var textAlign = style.textAlign;\n    var textVerticalAlign = style.textVerticalAlign;\n\n    // Text position represented by coord\n    if (rect) {\n        var textPosition = style.textPosition;\n        if (textPosition instanceof Array) {\n            // Percent\n            baseX = rect.x + parsePercent(textPosition[0], rect.width);\n            baseY = rect.y + parsePercent(textPosition[1], rect.height);\n        }\n        else {\n            var res = textContain.adjustTextPositionOnRect(\n                textPosition, rect, style.textDistance\n            );\n            baseX = res.x;\n            baseY = res.y;\n            // Default align and baseline when has textPosition\n            textAlign = textAlign || res.textAlign;\n            textVerticalAlign = textVerticalAlign || res.textVerticalAlign;\n        }\n\n        // textOffset is only support in RectText, otherwise\n        // we have to adjust boundingRect for textOffset.\n        var textOffset = style.textOffset;\n        if (textOffset) {\n            baseX += textOffset[0];\n            baseY += textOffset[1];\n        }\n    }\n\n    return {\n        baseX: baseX,\n        baseY: baseY,\n        textAlign: textAlign,\n        textVerticalAlign: textVerticalAlign\n    };\n}\n\nfunction setCtx(ctx, prop, value) {\n    ctx[prop] = fixShadow(ctx, prop, value);\n    return ctx[prop];\n}\n\n/**\n * @param {string} [stroke] If specified, do not check style.textStroke.\n * @param {string} [lineWidth] If specified, do not check style.textStroke.\n * @param {number} style\n */\nexport function getStroke(stroke, lineWidth) {\n    return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')\n        ? null\n        // TODO pattern and gradient?\n        : (stroke.image || stroke.colorStops)\n        ? '#000'\n        : stroke;\n}\n\nexport function getFill(fill) {\n    return (fill == null || fill === 'none')\n        ? null\n        // TODO pattern and gradient?\n        : (fill.image || fill.colorStops)\n        ? '#000'\n        : fill;\n}\n\nfunction parsePercent(value, maxValue) {\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\nfunction getTextXForPadding(x, textAlign, textPadding) {\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\n/**\n * @param {string} text\n * @param {module:zrender/Style} style\n * @return {boolean}\n */\nexport function needDrawText(text, style) {\n    return text != null\n        && (text\n            || style.textBackgroundColor\n            || (style.textBorderWidth && style.textBorderColor)\n            || style.textPadding\n        );\n}\n","/**\n * Mixin for drawing text in a element bounding rect\n * @module zrender/mixin/RectText\n */\n\nimport * as textHelper from '../helper/text';\nimport BoundingRect from '../../core/BoundingRect';\n\nvar tmpRect = new BoundingRect();\n\nvar RectText = function () {};\n\nRectText.prototype = {\n\n    constructor: RectText,\n\n    /**\n     * Draw text in a rect with specified position.\n     * @param  {CanvasRenderingContext2D} ctx\n     * @param  {Object} rect Displayable rect\n     */\n    drawRectText: function (ctx, rect) {\n        var style = this.style;\n\n        rect = style.textRect || rect;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && textHelper.normalizeTextStyle(style, true);\n\n        var text = style.text;\n\n        // Convert to string\n        text != null && (text += '');\n\n        if (!textHelper.needDrawText(text, style)) {\n            return;\n        }\n\n        // FIXME\n        ctx.save();\n\n        // Transform rect to view space\n        var transform = this.transform;\n        if (!style.transformText) {\n            if (transform) {\n                tmpRect.copy(rect);\n                tmpRect.applyTransform(transform);\n                rect = tmpRect;\n            }\n        }\n        else {\n            this.setTransform(ctx);\n        }\n\n        // transformText and textRotation can not be used at the same time.\n        textHelper.renderText(this, ctx, text, style, rect);\n\n        ctx.restore();\n    }\n};\n\nexport default RectText;","/**\n * 可绘制的图形基类\n * Base class of all displayable graphic objects\n * @module zrender/graphic/Displayable\n */\n\n\nimport * as zrUtil from '../core/util';\nimport Style from './Style';\nimport Element from '../Element';\nimport RectText from './mixin/RectText';\n\n/**\n * @alias module:zrender/graphic/Displayable\n * @extends module:zrender/Element\n * @extends module:zrender/graphic/mixin/RectText\n */\nfunction Displayable(opts) {\n\n    opts = opts || {};\n\n    Element.call(this, opts);\n\n    // Extend properties\n    for (var name in opts) {\n        if (\n            opts.hasOwnProperty(name) &&\n            name !== 'style'\n        ) {\n            this[name] = opts[name];\n        }\n    }\n\n    /**\n     * @type {module:zrender/graphic/Style}\n     */\n    this.style = new Style(opts.style, this);\n\n    this._rect = null;\n    // Shapes for cascade clipping.\n    this.__clipPaths = [];\n\n    // FIXME Stateful must be mixined after style is setted\n    // Stateful.call(this, opts);\n}\n\nDisplayable.prototype = {\n\n    constructor: Displayable,\n\n    type: 'displayable',\n\n    /**\n     * Displayable 是否为脏,Painter 中会根据该标记判断是否需要是否需要重新绘制\n     * Dirty flag. From which painter will determine if this displayable object needs brush\n     * @name module:zrender/graphic/Displayable#__dirty\n     * @type {boolean}\n     */\n    __dirty: true,\n\n    /**\n     * 图形是否可见,为true时不绘制图形,但是仍能触发鼠标事件\n     * If ignore drawing of the displayable object. Mouse event will still be triggered\n     * @name module:/zrender/graphic/Displayable#invisible\n     * @type {boolean}\n     * @default false\n     */\n    invisible: false,\n\n    /**\n     * @name module:/zrender/graphic/Displayable#z\n     * @type {number}\n     * @default 0\n     */\n    z: 0,\n\n    /**\n     * @name module:/zrender/graphic/Displayable#z\n     * @type {number}\n     * @default 0\n     */\n    z2: 0,\n\n    /**\n     * z层level,决定绘画在哪层canvas中\n     * @name module:/zrender/graphic/Displayable#zlevel\n     * @type {number}\n     * @default 0\n     */\n    zlevel: 0,\n\n    /**\n     * 是否可拖拽\n     * @name module:/zrender/graphic/Displayable#draggable\n     * @type {boolean}\n     * @default false\n     */\n    draggable: false,\n\n    /**\n     * 是否正在拖拽\n     * @name module:/zrender/graphic/Displayable#draggable\n     * @type {boolean}\n     * @default false\n     */\n    dragging: false,\n\n    /**\n     * 是否相应鼠标事件\n     * @name module:/zrender/graphic/Displayable#silent\n     * @type {boolean}\n     * @default false\n     */\n    silent: false,\n\n    /**\n     * If enable culling\n     * @type {boolean}\n     * @default false\n     */\n    culling: false,\n\n    /**\n     * Mouse cursor when hovered\n     * @name module:/zrender/graphic/Displayable#cursor\n     * @type {string}\n     */\n    cursor: 'pointer',\n\n    /**\n     * If hover area is bounding rect\n     * @name module:/zrender/graphic/Displayable#rectHover\n     * @type {string}\n     */\n    rectHover: false,\n\n    /**\n     * Render the element progressively when the value >= 0,\n     * usefull for large data.\n     * @type {boolean}\n     */\n    progressive: false,\n\n    /**\n     * @type {boolean}\n     */\n    incremental: false,\n    // inplace is used with incremental\n    inplace: false,\n\n    beforeBrush: function (ctx) {},\n\n    afterBrush: function (ctx) {},\n\n    /**\n     * 图形绘制方法\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    // Interface\n    brush: function (ctx, prevEl) {},\n\n    /**\n     * 获取最小包围盒\n     * @return {module:zrender/core/BoundingRect}\n     */\n    // Interface\n    getBoundingRect: function () {},\n\n    /**\n     * 判断坐标 x, y 是否在图形上\n     * If displayable element contain coord x, y\n     * @param  {number} x\n     * @param  {number} y\n     * @return {boolean}\n     */\n    contain: function (x, y) {\n        return this.rectContain(x, y);\n    },\n\n    /**\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    traverse: function (cb, context) {\n        cb.call(context, this);\n    },\n\n    /**\n     * 判断坐标 x, y 是否在图形的包围盒上\n     * If bounding rect of element contain coord x, y\n     * @param  {number} x\n     * @param  {number} y\n     * @return {boolean}\n     */\n    rectContain: function (x, y) {\n        var coord = this.transformCoordToLocal(x, y);\n        var rect = this.getBoundingRect();\n        return rect.contain(coord[0], coord[1]);\n    },\n\n    /**\n     * 标记图形元素为脏,并且在下一帧重绘\n     * Mark displayable element dirty and refresh next frame\n     */\n    dirty: function () {\n        this.__dirty = true;\n\n        this._rect = null;\n\n        this.__zr && this.__zr.refresh();\n    },\n\n    /**\n     * 图形是否会触发事件\n     * If displayable object binded any event\n     * @return {boolean}\n     */\n    // TODO, 通过 bind 绑定的事件\n    // isSilent: function () {\n    //     return !(\n    //         this.hoverable || this.draggable\n    //         || this.onmousemove || this.onmouseover || this.onmouseout\n    //         || this.onmousedown || this.onmouseup || this.onclick\n    //         || this.ondragenter || this.ondragover || this.ondragleave\n    //         || this.ondrop\n    //     );\n    // },\n    /**\n     * Alias for animate('style')\n     * @param {boolean} loop\n     */\n    animateStyle: function (loop) {\n        return this.animate('style', loop);\n    },\n\n    attrKV: function (key, value) {\n        if (key !== 'style') {\n            Element.prototype.attrKV.call(this, key, value);\n        }\n        else {\n            this.style.set(value);\n        }\n    },\n\n    /**\n     * @param {Object|string} key\n     * @param {*} value\n     */\n    setStyle: function (key, value) {\n        this.style.set(key, value);\n        this.dirty(false);\n        return this;\n    },\n\n    /**\n     * Use given style object\n     * @param  {Object} obj\n     */\n    useStyle: function (obj) {\n        this.style = new Style(obj, this);\n        this.dirty(false);\n        return this;\n    }\n};\n\nzrUtil.inherits(Displayable, Element);\n\nzrUtil.mixin(Displayable, RectText);\n// zrUtil.mixin(Displayable, Stateful);\n\nexport default Displayable;","import Displayable from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\nimport * as zrUtil from '../core/util';\nimport * as imageHelper from './helper/image';\n\n/**\n * @alias zrender/graphic/Image\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nfunction ZImage(opts) {\n    Displayable.call(this, opts);\n}\n\nZImage.prototype = {\n\n    constructor: ZImage,\n\n    type: 'image',\n\n    brush: function (ctx, prevEl) {\n        var style = this.style;\n        var src = style.image;\n\n        // Must bind each time\n        style.bind(ctx, this, prevEl);\n\n        var image = this._image = imageHelper.createOrUpdateImage(\n            src,\n            this._image,\n            this,\n            this.onload\n        );\n\n        if (!image || !imageHelper.isImageReady(image)) {\n            return;\n        }\n\n        // 图片已经加载完成\n        // if (image.nodeName.toUpperCase() == 'IMG') {\n        //     if (!image.complete) {\n        //         return;\n        //     }\n        // }\n        // Else is canvas\n\n        var x = style.x || 0;\n        var y = style.y || 0;\n        var width = style.width;\n        var height = style.height;\n        var 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        // 设置transform\n        this.setTransform(ctx);\n\n        if (style.sWidth && style.sHeight) {\n            var sx = style.sx || 0;\n            var 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            var sx = style.sx;\n            var sy = style.sy;\n            var sWidth = width - sx;\n            var 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        // Draw rect text\n        if (style.text != null) {\n            // Only restore transform when needs draw text.\n            this.restoreTransform(ctx);    \n            this.drawRectText(ctx, this.getBoundingRect());\n        }\n    },\n\n    getBoundingRect: function () {\n        var style = this.style;\n        if (! this._rect) {\n            this._rect = new BoundingRect(\n                style.x || 0, style.y || 0, style.width || 0, style.height || 0\n            );\n        }\n        return this._rect;\n    }\n};\n\nzrUtil.inherits(ZImage, Displayable);\n\nexport default ZImage;","import {devicePixelRatio} from './config';\nimport * as util from './core/util';\nimport log from './core/log';\nimport BoundingRect from './core/BoundingRect';\nimport timsort from './core/timsort';\nimport Layer from './Layer';\nimport requestAnimationFrame from './animation/requestAnimationFrame';\nimport Image from './graphic/Image';\nimport env from './core/env';\n\nvar HOVER_LAYER_ZLEVEL = 1e5;\nvar CANVAS_ZLEVEL = 314159;\n\nvar EL_AFTER_INCREMENTAL_INC = 0.01;\nvar INCREMENTAL_INC = 0.001;\n\nfunction parseInt10(val) {\n    return parseInt(val, 10);\n}\n\nfunction isLayerValid(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\nvar tmpRect = new BoundingRect(0, 0, 0, 0);\nvar viewRect = new BoundingRect(0, 0, 0, 0);\nfunction isDisplayableCulled(el, width, height) {\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\nfunction isClipPathChanged(clipPaths, prevClipPaths) {\n    if (clipPaths == prevClipPaths) { // Can both be null or undefined\n        return false;\n    }\n\n    if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {\n        return true;\n    }\n    for (var i = 0; i < clipPaths.length; i++) {\n        if (clipPaths[i] !== prevClipPaths[i]) {\n            return true;\n        }\n    }\n}\n\nfunction doClip(clipPaths, ctx) {\n    for (var i = 0; i < clipPaths.length; i++) {\n        var clipPath = clipPaths[i];\n\n        clipPath.setTransform(ctx);\n        ctx.beginPath();\n        clipPath.buildPath(ctx, clipPath.shape);\n        ctx.clip();\n        // Transform back\n        clipPath.restoreTransform(ctx);\n    }\n}\n\nfunction createRoot(width, height) {\n    var domRoot = document.createElement('div');\n\n    // domRoot.onselectstart = returnFalse; // 避免页面选中的尴尬\n    domRoot.style.cssText = [\n        'position:relative',\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\n\n/**\n * @alias module:zrender/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\nvar Painter = function (root, storage, opts) {\n\n    this.type = 'canvas';\n\n    // In node environment using node-canvas\n    var singleCanvas = !root.nodeName // In node ?\n        || root.nodeName.toUpperCase() === 'CANVAS';\n\n    this._opts = opts = util.extend({}, opts || {});\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    var rootStyle = root.style;\n\n    if (rootStyle) {\n        rootStyle['-webkit-tap-highlight-color'] = 'transparent';\n        rootStyle['-webkit-user-select'] =\n        rootStyle['user-select'] =\n        rootStyle['-webkit-touch-callout'] = 'none';\n\n        root.innerHTML = '';\n    }\n\n    /**\n     * @type {module:zrender/Storage}\n     */\n    this.storage = storage;\n\n    /**\n     * @type {Array.<number>}\n     * @private\n     */\n    var zlevelList = this._zlevelList = [];\n\n    /**\n     * @type {Object.<string, module:zrender/Layer>}\n     * @private\n     */\n    var layers = this._layers = {};\n\n    /**\n     * @type {Object.<string, Object>}\n     * @private\n     */\n    this._layerConfig = {};\n\n    /**\n     * zrender will do compositing when root is a canvas and have multiple zlevels.\n     */\n    this._needsManuallyCompositing = false;\n\n    if (!singleCanvas) {\n        this._width = this._getSize(0);\n        this._height = this._getSize(1);\n\n        var domRoot = this._domRoot = createRoot(\n            this._width, this._height\n        );\n        root.appendChild(domRoot);\n    }\n    else {\n        var width = root.width;\n        var height = root.height;\n\n        if (opts.width != null) {\n            width = opts.width;\n        }\n        if (opts.height != null) {\n            height = opts.height;\n        }\n        this.dpr = opts.devicePixelRatio || 1;\n\n        // Use canvas width and height directly\n        root.width = width * this.dpr;\n        root.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        var mainLayer = new Layer(root, 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     * @type {module:zrender/Layer}\n     * @private\n     */\n    this._hoverlayer = null;\n\n    this._hoverElements = [];\n};\n\nPainter.prototype = {\n\n    constructor: Painter,\n\n    getType: function () {\n        return 'canvas';\n    },\n\n    /**\n     * If painter use a single canvas\n     * @return {boolean}\n     */\n    isSingleCanvas: function () {\n        return this._singleCanvas;\n    },\n    /**\n     * @return {HTMLDivElement}\n     */\n    getViewportRoot: function () {\n        return this._domRoot;\n    },\n\n    getViewportRootOffset: function () {\n        var 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 {boolean} [paintAll=false] 强制绘制所有displayable\n     */\n    refresh: function (paintAll) {\n\n        var list = this.storage.getDisplayList(true);\n\n        var zlevelList = this._zlevelList;\n\n        this._redrawId = Math.random();\n\n        this._paintList(list, paintAll, this._redrawId);\n\n        // Paint custum layers\n        for (var i = 0; i < zlevelList.length; i++) {\n            var z = zlevelList[i];\n            var layer = this._layers[z];\n            if (!layer.__builtin__ && layer.refresh) {\n                var clearColor = i === 0 ? this._backgroundColor : null;\n                layer.refresh(clearColor);\n            }\n        }\n\n        this.refreshHover();\n\n        return this;\n    },\n\n    addHover: function (el, hoverStyle) {\n        if (el.__hoverMir) {\n            return;\n        }\n        var elMirror = new el.constructor({\n            style: el.style,\n            shape: el.shape\n        });\n        elMirror.__from = el;\n        el.__hoverMir = elMirror;\n        elMirror.setStyle(hoverStyle);\n        this._hoverElements.push(elMirror);\n    },\n\n    removeHover: function (el) {\n        var elMirror = el.__hoverMir;\n        var hoverElements = this._hoverElements;\n        var idx = util.indexOf(hoverElements, elMirror);\n        if (idx >= 0) {\n            hoverElements.splice(idx, 1);\n        }\n        el.__hoverMir = null;\n    },\n\n    clearHover: function (el) {\n        var hoverElements = this._hoverElements;\n        for (var i = 0; i < hoverElements.length; i++) {\n            var from = hoverElements[i].__from;\n            if (from) {\n                from.__hoverMir = null;\n            }\n        }\n        hoverElements.length = 0;\n    },\n\n    refreshHover: function () {\n        var hoverElements = this._hoverElements;\n        var len = hoverElements.length;\n        var hoverLayer = this._hoverlayer;\n        hoverLayer && hoverLayer.clear();\n\n        if (!len) {\n            return;\n        }\n        timsort(hoverElements, this.storage.displayableSortFunc);\n\n        // Use a extream large zlevel\n        // FIXME?\n        if (!hoverLayer) {\n            hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n        }\n\n        var scope = {};\n        hoverLayer.ctx.save();\n        for (var i = 0; i < len;) {\n            var el = hoverElements[i];\n            var originalEl = el.__from;\n            // Original el is removed\n            // PENDING\n            if (!(originalEl && originalEl.__zr)) {\n                hoverElements.splice(i, 1);\n                originalEl.__hoverMir = null;\n                len--;\n                continue;\n            }\n            i++;\n\n            // Use transform\n            // FIXME style and shape ?\n            if (!originalEl.invisible) {\n                el.transform = originalEl.transform;\n                el.invTransform = originalEl.invTransform;\n                el.__clipPaths = originalEl.__clipPaths;\n                // el.\n                this._doPaintEl(el, hoverLayer, true, scope);\n            }\n        }\n        hoverLayer.ctx.restore();\n    },\n\n    getHoverLayer: function () {\n        return this.getLayer(HOVER_LAYER_ZLEVEL);\n    },\n\n    _paintList: function (list, paintAll, redrawId) {\n        if (this._redrawId !== redrawId) {\n            return;\n        }\n\n        paintAll = paintAll || false;\n\n        this._updateLayerStatus(list);\n\n        var finished = this._doPaintList(list, paintAll);\n\n        if (this._needsManuallyCompositing) {\n            this._compositeManually();\n        }\n\n        if (!finished) {\n            var self = this;\n            requestAnimationFrame(function () {\n                self._paintList(list, paintAll, redrawId);\n            });\n        }\n    },\n\n    _compositeManually: function () {\n        var ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n        var width = this._domRoot.width;\n        var height = this._domRoot.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    _doPaintList: function (list, paintAll) {\n        var layerList = [];\n        for (var zi = 0; zi < this._zlevelList.length; zi++) {\n            var zlevel = this._zlevelList[zi];\n            var layer = this._layers[zlevel];\n            if (layer.__builtin__\n                && layer !== this._hoverlayer\n                && (layer.__dirty || paintAll)\n            ) {\n                layerList.push(layer);\n            }\n        }\n\n        var finished = true;\n\n        for (var k = 0; k < layerList.length; k++) {\n            var layer = layerList[k];\n            var ctx = layer.ctx;\n            var scope = {};\n            ctx.save();\n\n            var start = paintAll ? layer.__startIndex : layer.__drawIndex;\n\n            var useTimer = !paintAll && layer.incremental && Date.now;\n            var startTime = useTimer && Date.now();\n\n            var clearColor = layer.zlevel === this._zlevelList[0]\n                ? this._backgroundColor : null;\n            // All elements in this layer are cleared.\n            if (layer.__startIndex === layer.__endIndex) {\n                layer.clear(false, clearColor);\n            }\n            else if (start === layer.__startIndex) {\n                var firstEl = list[start];\n                if (!firstEl.incremental || !firstEl.notClear || paintAll) {\n                    layer.clear(false, clearColor);\n                }\n            }\n            if (start === -1) {\n                console.error('For some unknown reason. drawIndex is -1');\n                start = layer.__startIndex;\n            }\n            for (var i = start; i < layer.__endIndex; i++) {\n                var el = list[i];\n                this._doPaintEl(el, layer, paintAll, scope);\n                el.__dirty = false;\n\n                if (useTimer) {\n                    // Date.now can be executed in 13,025,305 ops/second.\n                    var 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            layer.__drawIndex = i;\n\n            if (layer.__drawIndex < layer.__endIndex) {\n                finished = false;\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            ctx.restore();\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.draw) {\n                    layer.ctx.draw();\n                }\n            });\n        }\n\n        return finished;\n    },\n\n    _doPaintEl: function (el, currentLayer, forcePaint, scope) {\n        var ctx = currentLayer.ctx;\n        var m = el.transform;\n        if (\n            (currentLayer.__dirty || forcePaint)\n            // Ignore invisible element\n            && !el.invisible\n            // Ignore transparent element\n            && el.style.opacity !== 0\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            // Ignore culled element\n            && !(el.culling && isDisplayableCulled(el, this._width, this._height))\n        ) {\n\n            var clipPaths = el.__clipPaths;\n\n            // Optimize when clipping on group with several elements\n            if (!scope.prevElClipPaths\n                || isClipPathChanged(clipPaths, scope.prevElClipPaths)\n            ) {\n                // If has previous clipping state, restore from it\n                if (scope.prevElClipPaths) {\n                    currentLayer.ctx.restore();\n                    scope.prevElClipPaths = null;\n\n                    // Reset prevEl since context has been restored\n                    scope.prevEl = null;\n                }\n                // New clipping state\n                if (clipPaths) {\n                    ctx.save();\n                    doClip(clipPaths, ctx);\n                    scope.prevElClipPaths = clipPaths;\n                }\n            }\n            el.beforeBrush && el.beforeBrush(ctx);\n\n            el.brush(ctx, scope.prevEl || null);\n            scope.prevEl = el;\n\n            el.afterBrush && el.afterBrush(ctx);\n        }\n    },\n\n    /**\n     * 获取 zlevel 所在层,如果不存在则会创建一个新的层\n     * @param {number} zlevel\n     * @param {boolean} virtual Virtual layer will not be inserted into dom.\n     * @return {module:zrender/Layer}\n     */\n    getLayer: function (zlevel, virtual) {\n        if (this._singleCanvas && !this._needsManuallyCompositing) {\n            zlevel = CANVAS_ZLEVEL;\n        }\n        var 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\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: function (zlevel, layer) {\n\n        var layersMap = this._layers;\n        var zlevelList = this._zlevelList;\n        var len = zlevelList.length;\n        var prevLayer = null;\n        var i = -1;\n        var domRoot = this._domRoot;\n\n        if (layersMap[zlevel]) {\n            log('ZLevel ' + zlevel + ' has been used already');\n            return;\n        }\n        // Check if is a valid layer\n        if (!isLayerValid(layer)) {\n            log('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 ZImage element)\n        // But it still under management of zrender.\n        if (!layer.virtual) {\n            if (prevLayer) {\n                var 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\n    // Iterate each layer\n    eachLayer: function (cb, context) {\n        var zlevelList = this._zlevelList;\n        var z;\n        var i;\n        for (i = 0; i < zlevelList.length; i++) {\n            z = zlevelList[i];\n            cb.call(context, this._layers[z], z);\n        }\n    },\n\n    // Iterate each buildin layer\n    eachBuiltinLayer: function (cb, context) {\n        var zlevelList = this._zlevelList;\n        var layer;\n        var z;\n        var i;\n        for (i = 0; i < zlevelList.length; i++) {\n            z = zlevelList[i];\n            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: function (cb, context) {\n        var zlevelList = this._zlevelList;\n        var layer;\n        var z;\n        var i;\n        for (i = 0; i < zlevelList.length; i++) {\n            z = zlevelList[i];\n            layer = this._layers[z];\n            if (!layer.__builtin__) {\n                cb.call(context, layer, z);\n            }\n        }\n    },\n\n    /**\n     * 获取所有已创建的层\n     * @param {Array.<module:zrender/Layer>} [prevLayer]\n     */\n    getLayers: function () {\n        return this._layers;\n    },\n\n    _updateLayerStatus: function (list) {\n\n        this.eachBuiltinLayer(function (layer, z) {\n            layer.__dirty = layer.__used = false;\n        });\n\n        function updatePrevLayer(idx) {\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 (var i = 1; i < list.length; i++) {\n                var el = list[i];\n                if (el.zlevel !== list[i - 1].zlevel || el.incremental) {\n                    this._needsManuallyCompositing = true;\n                    break;\n                }\n            }\n        }\n\n        var prevLayer = null;\n        var incrementalLayerCount = 0;\n        for (var i = 0; i < list.length; i++) {\n            var el = list[i];\n            var zlevel = el.zlevel;\n            var layer;\n            // PENDING If change one incremental element style ?\n            // TODO Where there are non-incremental elements between incremental elements.\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(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing);\n            }\n\n            if (!layer.__builtin__) {\n                log('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) {\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: function () {\n        this.eachBuiltinLayer(this._clearLayer);\n        return this;\n    },\n\n    _clearLayer: function (layer) {\n        layer.clear();\n    },\n\n    setBackgroundColor: function (backgroundColor) {\n        this._backgroundColor = backgroundColor;\n    },\n\n    /**\n     * 修改指定zlevel的绘制参数\n     *\n     * @param {string} zlevel\n     * @param {Object} config 配置对象\n     * @param {string} [config.clearColor=0] 每次清空画布的颜色\n     * @param {string} [config.motionBlur=false] 是否开启动态模糊\n     * @param {number} [config.lastFrameAlpha=0.7]\n     *                 在开启动态模糊的时候使用,与上一帧混合的alpha值,值越大尾迹越明显\n     */\n    configLayer: function (zlevel, config) {\n        if (config) {\n            var 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 (var i = 0; i < this._zlevelList.length; i++) {\n                var _zlevel = this._zlevelList[i];\n                if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n                    var layer = this._layers[_zlevel];\n                    util.merge(layer, layerConfig[zlevel], true);\n                }\n            }\n        }\n    },\n\n    /**\n     * 删除指定层\n     * @param {number} zlevel 层所在的zlevel\n     */\n    delLayer: function (zlevel) {\n        var layers = this._layers;\n        var zlevelList = this._zlevelList;\n        var 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: function (width, height) {\n        if (!this._domRoot.style) { // Maybe in node or worker\n            if (width == null || height == null) {\n                return;\n            }\n            this._width = width;\n            this._height = height;\n\n            this.getLayer(CANVAS_ZLEVEL).resize(width, height);\n        }\n        else {\n            var domRoot = this._domRoot;\n            // FIXME Why ?\n            domRoot.style.display = 'none';\n\n            // Save input w/h\n            var 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 (var id in this._layers) {\n                    if (this._layers.hasOwnProperty(id)) {\n                        this._layers[id].resize(width, height);\n                    }\n                }\n                util.each(this._progressiveLayers, function (layer) {\n                    layer.resize(width, height);\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: function (zlevel) {\n        var layer = this._layers[zlevel];\n        if (layer) {\n            layer.clear();\n        }\n    },\n\n    /**\n     * 释放\n     */\n    dispose: function () {\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     * @param {Object} opts\n     * @param {string} [opts.backgroundColor]\n     * @param {number} [opts.pixelRatio]\n     */\n    getRenderedCanvas: function (opts) {\n        opts = opts || {};\n        if (this._singleCanvas && !this._compositeManually) {\n            return this._layers[CANVAS_ZLEVEL].dom;\n        }\n\n        var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n        imageLayer.initContext();\n        imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n\n        if (opts.pixelRatio <= this.dpr) {\n            this.refresh();\n\n            var width = imageLayer.dom.width;\n            var height = imageLayer.dom.height;\n            var ctx = imageLayer.ctx;\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                    imageLayer.ctx.save();\n                    layer.renderToCanvas(imageLayer.ctx);\n                    imageLayer.ctx.restore();\n                }\n            });\n        }\n        else {\n            // PENDING, echarts-gl and incremental rendering.\n            var scope = {};\n            var displayList = this.storage.getDisplayList(true);\n            for (var i = 0; i < displayList.length; i++) {\n                var el = displayList[i];\n                this._doPaintEl(el, imageLayer, true, scope);\n            }\n        }\n\n        return imageLayer.dom;\n    },\n    /**\n     * 获取绘图区域宽度\n     */\n    getWidth: function () {\n        return this._width;\n    },\n\n    /**\n     * 获取绘图区域高度\n     */\n    getHeight: function () {\n        return this._height;\n    },\n\n    _getSize: function (whIdx) {\n        var opts = this._opts;\n        var wh = ['width', 'height'][whIdx];\n        var cwh = ['clientWidth', 'clientHeight'][whIdx];\n        var plt = ['paddingLeft', 'paddingTop'][whIdx];\n        var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n        if (opts[wh] != null && opts[wh] !== 'auto') {\n            return parseFloat(opts[wh]);\n        }\n\n        var root = this.root;\n        // IE8 does not support getComputedStyle, but it use VML.\n        var 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: function (path, dpr) {\n        dpr = dpr || this.dpr;\n\n        var canvas = document.createElement('canvas');\n        var ctx = canvas.getContext('2d');\n        var rect = path.getBoundingRect();\n        var style = path.style;\n        var shadowBlurSize = style.shadowBlur * dpr;\n        var shadowOffsetX = style.shadowOffsetX * dpr;\n        var shadowOffsetY = style.shadowOffsetY * dpr;\n        var lineWidth = style.hasStroke() ? style.lineWidth : 0;\n\n        var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n        var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n        var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n        var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n        var width = rect.width + leftMargin + rightMargin;\n        var 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.dpr = dpr;\n\n        var pathTransform = {\n            position: path.position,\n            rotation: path.rotation,\n            scale: path.scale\n        };\n        path.position = [leftMargin - rect.x, topMargin - rect.y];\n        path.rotation = 0;\n        path.scale = [1, 1];\n        path.updateTransform();\n        if (path) {\n            path.brush(ctx);\n        }\n\n        var ImageShape = Image;\n        var imgShape = new ImageShape({\n            style: {\n                x: 0,\n                y: 0,\n                image: canvas\n            }\n        });\n\n        if (pathTransform.position != null) {\n            imgShape.position = path.position = pathTransform.position;\n        }\n\n        if (pathTransform.rotation != null) {\n            imgShape.rotation = path.rotation = pathTransform.rotation;\n        }\n\n        if (pathTransform.scale != null) {\n            imgShape.scale = path.scale = pathTransform.scale;\n        }\n\n        return imgShape;\n    }\n};\n\nexport default Painter;","/**\n * 事件辅助类\n * @module zrender/core/event\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n */\n\nimport Eventful from '../mixin/Eventful';\nimport env from './env';\n\nvar isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener;\n\nvar MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;\n\nfunction getBoundingClientRect(el) {\n    // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect\n    return el.getBoundingClientRect ? el.getBoundingClientRect() : {left: 0, top: 0};\n}\n\n// `calculate` is optional, default false\nexport function clientToLocal(el, e, out, calculate) {\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    // FIXME\n    // When mousemove event triggered on ec tooltip, target is not zr painter.dom, and\n    // offsetX/Y is relative to e.target, where the calculation of zrX/Y via offsetX/Y\n    // is too complex. So css-transfrom dont support in this case temporarily.\n    if (calculate || !env.canvasSupported) {\n        defaultGetZrXY(el, e, 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    // <https://bugs.jquery.com/ticket/8523#comment:14>\n    // BTW3, In ff, offsetX/offsetY is always 0.\n    else if (env.browser.firefox && e.layerX != null && e.layerX !== e.offsetX) {\n        out.zrX = e.layerX;\n        out.zrY = e.layerY;\n    }\n    // For IE6+, chrome, safari, opera. (When will ff support offsetX?)\n    else if (e.offsetX != null) {\n        out.zrX = e.offsetX;\n        out.zrY = e.offsetY;\n    }\n    // For some other device, e.g., IOS safari.\n    else {\n        defaultGetZrXY(el, e, out);\n    }\n\n    return out;\n}\n\nfunction defaultGetZrXY(el, e, out) {\n    // This well-known method below does not support css transform.\n    var box = getBoundingClientRect(el);\n    out.zrX = e.clientX - box.left;\n    out.zrY = e.clientY - box.top;\n}\n\n/**\n * 如果存在第三方嵌入的一些dom触发的事件,或touch事件,需要转换一下事件坐标.\n * `calculate` is optional, default false.\n */\nexport function normalizeEvent(el, e, calculate) {\n\n    e = e || window.event;\n\n    if (e.zrX != null) {\n        return e;\n    }\n\n    var eventType = e.type;\n    var isTouch = eventType && eventType.indexOf('touch') >= 0;\n\n    if (!isTouch) {\n        clientToLocal(el, e, e, calculate);\n        e.zrDelta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3;\n    }\n    else {\n        var 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, if may be readonly,\n    // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which\n    var button = e.button;\n    if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {\n        e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n    }\n\n    return e;\n}\n\n/**\n * @param {HTMLElement} el\n * @param {string} name\n * @param {Function} handler\n */\nexport function addEventListener(el, name, handler) {\n    if (isDomLevel2) {\n        // Reproduct the console warning:\n        // [Violation] Added non-passive event listener to a scroll-blocking <some> 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        // var 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);\n    }\n    else {\n        el.attachEvent('on' + name, handler);\n    }\n}\n\nexport function removeEventListener(el, name, handler) {\n    if (isDomLevel2) {\n        el.removeEventListener(name, handler);\n    }\n    else {\n        el.detachEvent('on' + name, handler);\n    }\n}\n\n/**\n * preventDefault and stopPropagation.\n * Notice: do not do that in zrender. Upper application\n * do that if necessary.\n *\n * @memberOf module:zrender/core/event\n * @method\n * @param {Event} e : event对象\n */\nexport var stop = isDomLevel2\n    ? function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n        e.cancelBubble = true;\n    }\n    : function (e) {\n        e.returnValue = false;\n        e.cancelBubble = true;\n    };\n\nexport function notLeftMouse(e) {\n    // If e.which is undefined, considered as left mouse event.\n    return e.which > 1;\n}\n\n// 做向上兼容\nexport {Eventful as Dispatcher};\n","/**\n * 动画主类, 调度和管理所有动画控制器\n *\n * @module zrender/animation/Animation\n * @author pissang(https://github.com/pissang)\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 * as util from '../core/util';\nimport {Dispatcher} from '../core/event';\nimport requestAnimationFrame from './requestAnimationFrame';\nimport Animator from './Animator';\n\n/**\n * @typedef {Object} IZRenderStage\n * @property {Function} update\n */\n\n/**\n * @alias module:zrender/animation/Animation\n * @constructor\n * @param {Object} [options]\n * @param {Function} [options.onframe]\n * @param {IZRenderStage} [options.stage]\n * @example\n *     var animation = new Animation();\n *     var 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 */\nvar Animation = function (options) {\n\n    options = options || {};\n\n    this.stage = options.stage || {};\n\n    this.onframe = options.onframe || function() {};\n\n    // private properties\n    this._clips = [];\n\n    this._running = false;\n\n    this._time;\n\n    this._pausedTime;\n\n    this._pauseStart;\n\n    this._paused = false;\n\n    Dispatcher.call(this);\n};\n\nAnimation.prototype = {\n\n    constructor: Animation,\n    /**\n     * 添加 clip\n     * @param {module:zrender/animation/Clip} clip\n     */\n    addClip: function (clip) {\n        this._clips.push(clip);\n    },\n    /**\n     * 添加 animator\n     * @param {module:zrender/animation/Animator} animator\n     */\n    addAnimator: function (animator) {\n        animator.animation = this;\n        var clips = animator.getClips();\n        for (var i = 0; i < clips.length; i++) {\n            this.addClip(clips[i]);\n        }\n    },\n    /**\n     * 删除动画片段\n     * @param {module:zrender/animation/Clip} clip\n     */\n    removeClip: function(clip) {\n        var idx = util.indexOf(this._clips, clip);\n        if (idx >= 0) {\n            this._clips.splice(idx, 1);\n        }\n    },\n\n    /**\n     * 删除动画片段\n     * @param {module:zrender/animation/Animator} animator\n     */\n    removeAnimator: function (animator) {\n        var clips = animator.getClips();\n        for (var i = 0; i < clips.length; i++) {\n            this.removeClip(clips[i]);\n        }\n        animator.animation = null;\n    },\n\n    _update: function() {\n        var time = new Date().getTime() - this._pausedTime;\n        var delta = time - this._time;\n        var clips = this._clips;\n        var len = clips.length;\n\n        var deferredEvents = [];\n        var deferredClips = [];\n        for (var i = 0; i < len; i++) {\n            var clip = clips[i];\n            var e = clip.step(time, delta);\n            // Throw out the events need to be called after\n            // stage.update, like destroy\n            if (e) {\n                deferredEvents.push(e);\n                deferredClips.push(clip);\n            }\n        }\n\n        // Remove the finished clip\n        for (var i = 0; i < len;) {\n            if (clips[i]._needsRemove) {\n                clips[i] = clips[len - 1];\n                clips.pop();\n                len--;\n            }\n            else {\n                i++;\n            }\n        }\n\n        len = deferredEvents.length;\n        for (var i = 0; i < len; i++) {\n            deferredClips[i].fire(deferredEvents[i]);\n        }\n\n        this._time = time;\n\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        if (this.stage.update) {\n            this.stage.update();\n        }\n    },\n\n    _startLoop: function () {\n        var 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: function () {\n\n        this._time = new Date().getTime();\n        this._pausedTime = 0;\n\n        this._startLoop();\n    },\n\n    /**\n     * Stop animation.\n     */\n    stop: function () {\n        this._running = false;\n    },\n\n    /**\n     * Pause animation.\n     */\n    pause: function () {\n        if (!this._paused) {\n            this._pauseStart = new Date().getTime();\n            this._paused = true;\n        }\n    },\n\n    /**\n     * Resume animation.\n     */\n    resume: function () {\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: function () {\n        this._clips = [];\n    },\n\n    /**\n     * Whether animation finished.\n     */\n    isFinished: function () {\n        return !this._clips.length;\n    },\n\n    /**\n     * Creat animator for a target, whose props can be animated.\n     *\n     * @param  {Object} target\n     * @param  {Object} options\n     * @param  {boolean} [options.loop=false] Whether loop animation.\n     * @param  {Function} [options.getter=null] Get value from target.\n     * @param  {Function} [options.setter=null] Set value to target.\n     * @return {module:zrender/animation/Animation~Animator}\n     */\n    // TODO Gap\n    animate: function (target, options) {\n        options = options || {};\n\n        var animator = new Animator(\n            target,\n            options.loop,\n            options.getter,\n            options.setter\n        );\n\n        this.addAnimator(animator);\n\n        return animator;\n    }\n};\n\nutil.mixin(Animation, Dispatcher);\n\nexport default Animation;","/**\n * Only implements needed gestures for mobile.\n */\n\nimport * as eventUtil from './event';\n\nvar GestureMgr = function () {\n\n    /**\n     * @private\n     * @type {Array.<Object>}\n     */\n    this._track = [];\n};\n\nGestureMgr.prototype = {\n\n    constructor: GestureMgr,\n\n    recognize: function (event, target, root) {\n        this._doTrack(event, target, root);\n        return this._recognize(event);\n    },\n\n    clear: function () {\n        this._track.length = 0;\n        return this;\n    },\n\n    _doTrack: function (event, target, root) {\n        var touches = event.touches;\n\n        if (!touches) {\n            return;\n        }\n\n        var trackItem = {\n            points: [],\n            touches: [],\n            target: target,\n            event: event\n        };\n\n        for (var i = 0, len = touches.length; i < len; i++) {\n            var touch = touches[i];\n            var pos = eventUtil.clientToLocal(root, touch, {});\n            trackItem.points.push([pos.zrX, pos.zrY]);\n            trackItem.touches.push(touch);\n        }\n\n        this._track.push(trackItem);\n    },\n\n    _recognize: function (event) {\n        for (var eventName in recognizers) {\n            if (recognizers.hasOwnProperty(eventName)) {\n                var gestureInfo = recognizers[eventName](this._track, event);\n                if (gestureInfo) {\n                    return gestureInfo;\n                }\n            }\n        }\n    }\n};\n\nfunction dist(pointPair) {\n    var dx = pointPair[1][0] - pointPair[0][0];\n    var dy = pointPair[1][1] - pointPair[0][1];\n\n    return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction center(pointPair) {\n    return [\n        (pointPair[0][0] + pointPair[1][0]) / 2,\n        (pointPair[0][1] + pointPair[1][1]) / 2\n    ];\n}\n\nvar recognizers = {\n\n    pinch: function (track, event) {\n        var trackLen = track.length;\n\n        if (!trackLen) {\n            return;\n        }\n\n        var pinchEnd = (track[trackLen - 1] || {}).points;\n        var pinchPre = (track[trackLen - 2] || {}).points || pinchEnd;\n\n        if (pinchPre\n            && pinchPre.length > 1\n            && pinchEnd\n            && pinchEnd.length > 1\n        ) {\n            var pinchScale = dist(pinchEnd) / dist(pinchPre);\n            !isFinite(pinchScale) && (pinchScale = 1);\n\n            event.pinchScale = pinchScale;\n\n            var pinchCenter = center(pinchEnd);\n            event.pinchX = pinchCenter[0];\n            event.pinchY = pinchCenter[1];\n\n            return {\n                type: 'pinch',\n                target: track[0].target,\n                event: event\n            };\n        }\n    }\n\n    // Only pinch currently.\n};\n\nexport default GestureMgr;","\nimport {\n    addEventListener,\n    removeEventListener,\n    normalizeEvent\n} from '../core/event';\nimport * as zrUtil from '../core/util';\nimport Eventful from '../mixin/Eventful';\nimport env from '../core/env';\nimport GestureMgr from '../core/GestureMgr';\n\nvar TOUCH_CLICK_DELAY = 300;\n\nvar mouseHandlerNames = [\n    'click', 'dblclick', 'mousewheel', 'mouseout',\n    'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\n\nvar touchHandlerNames = [\n    'touchstart', 'touchend', 'touchmove'\n];\n\nvar pointerEventNames = {\n    pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1\n};\n\nvar pointerHandlerNames = zrUtil.map(mouseHandlerNames, function (name) {\n    var nm = name.replace('mouse', 'pointer');\n    return pointerEventNames[nm] ? nm : name;\n});\n\nfunction eventNameFix(name) {\n    return (name === 'mousewheel' && env.browser.firefox) ? 'DOMMouseScroll' : name;\n}\n\nfunction processGesture(proxy, event, stage) {\n    var gestureMgr = proxy._gestureMgr;\n\n    stage === 'start' && gestureMgr.clear();\n\n    var gestureInfo = gestureMgr.recognize(\n        event,\n        proxy.handler.findHover(event.zrX, event.zrY, null).target,\n        proxy.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        var type = gestureInfo.type;\n        event.gestureEvent = type;\n\n        proxy.handler.dispatchToElement({target: gestureInfo.target}, type, gestureInfo.event);\n    }\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 <https://github.com/deltakosh/handjs/blob/master/src/hand.base.js>\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 */\nfunction setTouchTimer(instance) {\n    instance._touching = true;\n    clearTimeout(instance._touchTimer);\n    instance._touchTimer = setTimeout(function () {\n        instance._touching = false;\n    }, 700);\n}\n\n\nvar domHandlers = {\n    /**\n     * Mouse move handler\n     * @inner\n     * @param {Event} event\n     */\n    mousemove: function (event) {\n        event = normalizeEvent(this.dom, event);\n\n        this.trigger('mousemove', event);\n    },\n\n    /**\n     * Mouse out handler\n     * @inner\n     * @param {Event} event\n     */\n    mouseout: function (event) {\n        event = normalizeEvent(this.dom, event);\n\n        var element = event.toElement || event.relatedTarget;\n        if (element != this.dom) {\n            while (element && element.nodeType != 9) {\n                // 忽略包含在root中的dom引起的mouseOut\n                if (element === this.dom) {\n                    return;\n                }\n\n                element = element.parentNode;\n            }\n        }\n\n        this.trigger('mouseout', event);\n    },\n\n    /**\n     * Touch开始响应函数\n     * @inner\n     * @param {Event} event\n     */\n    touchstart: function (event) {\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        // Mark touch, which is useful in distinguish touch and\n        // mouse event in upper applicatoin.\n        event.zrByTouch = true;\n\n        this._lastTouchMoment = new Date();\n\n        processGesture(this, event, 'start');\n\n        // In touch device, trigger `mousemove`(`mouseover`) should\n        // be triggered, and must before `mousedown` triggered.\n        domHandlers.mousemove.call(this, event);\n\n        domHandlers.mousedown.call(this, event);\n\n        setTouchTimer(this);\n    },\n\n    /**\n     * Touch移动响应函数\n     * @inner\n     * @param {Event} event\n     */\n    touchmove: function (event) {\n\n        event = normalizeEvent(this.dom, event);\n\n        // Mark touch, which is useful in distinguish touch and\n        // mouse event in upper applicatoin.\n        event.zrByTouch = true;\n\n        processGesture(this, 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        domHandlers.mousemove.call(this, event);\n\n        setTouchTimer(this);\n    },\n\n    /**\n     * Touch结束响应函数\n     * @inner\n     * @param {Event} event\n     */\n    touchend: function (event) {\n\n        event = normalizeEvent(this.dom, event);\n\n        // Mark touch, which is useful in distinguish touch and\n        // mouse event in upper applicatoin.\n        event.zrByTouch = true;\n\n        processGesture(this, event, 'end');\n\n        domHandlers.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            domHandlers.click.call(this, event);\n        }\n\n        setTouchTimer(this);\n    },\n\n    pointerdown: function (event) {\n        domHandlers.mousedown.call(this, event);\n\n        // if (useMSGuesture(this, event)) {\n        //     this._msGesture.addPointer(event.pointerId);\n        // }\n    },\n\n    pointermove: function (event) {\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            domHandlers.mousemove.call(this, event);\n        }\n    },\n\n    pointerup: function (event) {\n        domHandlers.mouseup.call(this, event);\n    },\n\n    pointerout: function (event) {\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 domHandlers.touchend for detailed explanation)\n        if (!isPointerFromTouch(event)) {\n            domHandlers.mouseout.call(this, event);\n        }\n    }\n};\n\nfunction isPointerFromTouch(event) {\n    var pointerType = event.pointerType;\n    return pointerType === 'pen' || pointerType === 'touch';\n}\n\n// function useMSGuesture(handlerProxy, event) {\n//     return isPointerFromTouch(event) && !!handlerProxy._msGesture;\n// }\n\n// Common handlers\nzrUtil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n    domHandlers[name] = function (event) {\n        event = normalizeEvent(this.dom, event);\n        this.trigger(name, event);\n    };\n});\n\n/**\n * 为控制类实例初始化dom 事件处理函数\n *\n * @inner\n * @param {module:zrender/Handler} instance 控制类实例\n */\nfunction initDomHandler(instance) {\n    zrUtil.each(touchHandlerNames, function (name) {\n        instance._handlers[name] = zrUtil.bind(domHandlers[name], instance);\n    });\n\n    zrUtil.each(pointerHandlerNames, function (name) {\n        instance._handlers[name] = zrUtil.bind(domHandlers[name], instance);\n    });\n\n    zrUtil.each(mouseHandlerNames, function (name) {\n        instance._handlers[name] = makeMouseHandler(domHandlers[name], instance);\n    });\n\n    function makeMouseHandler(fn, instance) {\n        return function () {\n            if (instance._touching) {\n                return;\n            }\n            return fn.apply(instance, arguments);\n        };\n    }\n}\n\n\nfunction HandlerDomProxy(dom) {\n    Eventful.call(this);\n\n    this.dom = dom;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._touching = false;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this._touchTimer;\n\n    /**\n     * @private\n     * @type {module:zrender/core/GestureMgr}\n     */\n    this._gestureMgr = new GestureMgr();\n\n    this._handlers = {};\n\n    initDomHandler(this);\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        mountHandlers(pointerHandlerNames, this);\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 <https://msdn.microsoft.com/en-us/library/dn433243(v=vs.85).aspx>\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            mountHandlers(touchHandlerNames, this);\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        mountHandlers(mouseHandlerNames, this);\n    }\n\n    function mountHandlers(handlerNames, instance) {\n        zrUtil.each(handlerNames, function (name) {\n            addEventListener(dom, eventNameFix(name), instance._handlers[name]);\n        }, instance);\n    }\n}\n\nvar handlerDomProxyProto = HandlerDomProxy.prototype;\nhandlerDomProxyProto.dispose = function () {\n    var handlerNames = mouseHandlerNames.concat(touchHandlerNames);\n\n    for (var i = 0; i < handlerNames.length; i++) {\n        var name = handlerNames[i];\n        removeEventListener(this.dom, eventNameFix(name), this._handlers[name]);\n    }\n};\n\nhandlerDomProxyProto.setCursor = function (cursorStyle) {\n    this.dom.style && (this.dom.style.cursor = cursorStyle || 'default');\n};\n\nzrUtil.mixin(HandlerDomProxy, Eventful);\n\nexport default HandlerDomProxy;","/*!\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 guid from './core/guid';\nimport env from './core/env';\nimport * as zrUtil from './core/util';\nimport Handler from './Handler';\nimport Storage from './Storage';\nimport Painter from './Painter';\nimport Animation from './animation/Animation';\nimport HandlerProxy from './dom/HandlerProxy';\n\nvar useVML = !env.canvasSupported;\n\nvar painterCtors = {\n    canvas: Painter\n};\n\nvar instances = {};    // ZRender实例map索引\n\n/**\n * @type {string}\n */\nexport var version = '4.0.4';\n\n/**\n * Initializing a zrender instance\n * @param {HTMLElement} dom\n * @param {Object} opts\n * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'\n * @param {number} [opts.devicePixelRatio]\n * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)\n * @return {module:zrender/ZRender}\n */\nexport function init(dom, opts) {\n    var zr = new ZRender(guid(), dom, opts);\n    instances[zr.id] = zr;\n    return zr;\n}\n\n/**\n * Dispose zrender instance\n * @param {module:zrender/ZRender} zr\n */\nexport function dispose(zr) {\n    if (zr) {\n        zr.dispose();\n    }\n    else {\n        for (var key in instances) {\n            if (instances.hasOwnProperty(key)) {\n                instances[key].dispose();\n            }\n        }\n        instances = {};\n    }\n\n    return this;\n}\n\n/**\n * Get zrender instance by id\n * @param {string} id zrender instance id\n * @return {module:zrender/ZRender}\n */\nexport function getInstance(id) {\n    return instances[id];\n}\n\nexport function registerPainter(name, Ctor) {\n    painterCtors[name] = Ctor;\n}\n\nfunction delInstance(id) {\n    delete instances[id];\n}\n\n/**\n * @module zrender/ZRender\n */\n/**\n * @constructor\n * @alias module:zrender/ZRender\n * @param {string} id\n * @param {HTMLElement} dom\n * @param {Object} opts\n * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'\n * @param {number} [opts.devicePixelRatio]\n * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)\n */\nvar ZRender = function (id, dom, opts) {\n\n    opts = opts || {};\n\n    /**\n     * @type {HTMLDomElement}\n     */\n    this.dom = dom;\n\n    /**\n     * @type {string}\n     */\n    this.id = id;\n\n    var self = this;\n    var storage = new Storage();\n\n    var rendererType = opts.renderer;\n    // TODO WebGL\n    if (useVML) {\n        if (!painterCtors.vml) {\n            throw new Error('You need to require \\'zrender/vml/vml\\' to support IE8');\n        }\n        rendererType = 'vml';\n    }\n    else if (!rendererType || !painterCtors[rendererType]) {\n        rendererType = 'canvas';\n    }\n    var painter = new painterCtors[rendererType](dom, storage, opts, id);\n\n    this.storage = storage;\n    this.painter = painter;\n\n    var handerProxy = (!env.node && !env.worker) ? new HandlerProxy(painter.getViewportRoot()) : null;\n    this.handler = new Handler(storage, painter, handerProxy, painter.root);\n\n    /**\n     * @type {module:zrender/animation/Animation}\n     */\n    this.animation = new Animation({\n        stage: {\n            update: zrUtil.bind(this.flush, this)\n        }\n    });\n    this.animation.start();\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._needsRefresh;\n\n    // 修改 storage.delFromStorage, 每次删除元素之前删除动画\n    // FIXME 有点ugly\n    var oldDelFromStorage = storage.delFromStorage;\n    var oldAddToStorage = storage.addToStorage;\n\n    storage.delFromStorage = function (el) {\n        oldDelFromStorage.call(storage, el);\n\n        el && el.removeSelfFromZr(self);\n    };\n\n    storage.addToStorage = function (el) {\n        oldAddToStorage.call(storage, el);\n\n        el.addSelfToZr(self);\n    };\n};\n\nZRender.prototype = {\n\n    constructor: ZRender,\n    /**\n     * 获取实例唯一标识\n     * @return {string}\n     */\n    getId: function () {\n        return this.id;\n    },\n\n    /**\n     * 添加元素\n     * @param  {module:zrender/Element} el\n     */\n    add: function (el) {\n        this.storage.addRoot(el);\n        this._needsRefresh = true;\n    },\n\n    /**\n     * 删除元素\n     * @param  {module:zrender/Element} el\n     */\n    remove: function (el) {\n        this.storage.delRoot(el);\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Change configuration of layer\n     * @param {string} zLevel\n     * @param {Object} config\n     * @param {string} [config.clearColor=0] Clear color\n     * @param {string} [config.motionBlur=false] If enable motion blur\n     * @param {number} [config.lastFrameAlpha=0.7] Motion blur factor. Larger value cause longer trailer\n    */\n    configLayer: function (zLevel, config) {\n        if (this.painter.configLayer) {\n            this.painter.configLayer(zLevel, config);\n        }\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Set background color\n     * @param {string} backgroundColor\n     */\n    setBackgroundColor: function (backgroundColor) {\n        if (this.painter.setBackgroundColor) {\n            this.painter.setBackgroundColor(backgroundColor);\n        }\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Repaint the canvas immediately\n     */\n    refreshImmediately: function () {\n        // var start = new Date();\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        /**\n         * Avoid trigger zr.refresh in Element#beforeUpdate hook\n         */\n        this._needsRefresh = false;\n        // var end = new Date();\n        // var log = document.getElementById('log');\n        // if (log) {\n        //     log.innerHTML = log.innerHTML + '<br>' + (end - start);\n        // }\n    },\n\n    /**\n     * Mark and repaint the canvas in the next frame of browser\n     */\n    refresh: function() {\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Perform all refresh\n     */\n    flush: function () {\n        var triggerRendered;\n\n        if (this._needsRefresh) {\n            triggerRendered = true;\n            this.refreshImmediately();\n        }\n        if (this._needsRefreshHover) {\n            triggerRendered = true;\n            this.refreshHoverImmediately();\n        }\n\n        triggerRendered && this.trigger('rendered');\n    },\n\n    /**\n     * Add element to hover layer\n     * @param  {module:zrender/Element} el\n     * @param {Object} style\n     */\n    addHover: function (el, style) {\n        if (this.painter.addHover) {\n            this.painter.addHover(el, style);\n            this.refreshHover();\n        }\n    },\n\n    /**\n     * Add element from hover layer\n     * @param  {module:zrender/Element} el\n     */\n    removeHover: function (el) {\n        if (this.painter.removeHover) {\n            this.painter.removeHover(el);\n            this.refreshHover();\n        }\n    },\n\n    /**\n     * Clear all hover elements in hover layer\n     * @param  {module:zrender/Element} el\n     */\n    clearHover: function () {\n        if (this.painter.clearHover) {\n            this.painter.clearHover();\n            this.refreshHover();\n        }\n    },\n\n    /**\n     * Refresh hover in next frame\n     */\n    refreshHover: function () {\n        this._needsRefreshHover = true;\n    },\n\n    /**\n     * Refresh hover immediately\n     */\n    refreshHoverImmediately: function () {\n        this._needsRefreshHover = false;\n        this.painter.refreshHover && this.painter.refreshHover();\n    },\n\n    /**\n     * Resize the canvas.\n     * Should be invoked when container size is changed\n     * @param {Object} [opts]\n     * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)\n     * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)\n     */\n    resize: function(opts) {\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: function () {\n        this.animation.clear();\n    },\n\n    /**\n     * Get container width\n     */\n    getWidth: function() {\n        return this.painter.getWidth();\n    },\n\n    /**\n     * Get container height\n     */\n    getHeight: function() {\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     * @param {module:zrender/graphic/Path} e\n     * @param {number} width\n     * @param {number} height\n     */\n    pathToImage: function(e, dpr) {\n        return this.painter.pathToImage(e, dpr);\n    },\n\n    /**\n     * Set default cursor\n     * @param {string} [cursorStyle='default'] 例如 crosshair\n     */\n    setCursorStyle: function (cursorStyle) {\n        this.handler.setCursorStyle(cursorStyle);\n    },\n\n    /**\n     * Find hovered element\n     * @param {number} x\n     * @param {number} y\n     * @return {Object} {target, topTarget}\n     */\n    findHover: function (x, y) {\n        return this.handler.findHover(x, y);\n    },\n\n    /**\n     * Bind event\n     *\n     * @param {string} eventName Event name\n     * @param {Function} eventHandler Handler function\n     * @param {Object} [context] Context object\n     */\n    on: function(eventName, eventHandler, context) {\n        this.handler.on(eventName, eventHandler, context);\n    },\n\n    /**\n     * Unbind event\n     * @param {string} eventName Event name\n     * @param {Function} [eventHandler] Handler function\n     */\n    off: function(eventName, eventHandler) {\n        this.handler.off(eventName, eventHandler);\n    },\n\n    /**\n     * Trigger event manually\n     *\n     * @param {string} eventName Event name\n     * @param {event=} event Event object\n     */\n    trigger: function (eventName, event) {\n        this.handler.trigger(eventName, event);\n    },\n\n\n    /**\n     * Clear all objects and the canvas.\n     */\n    clear: function () {\n        this.storage.delRoot();\n        this.painter.clear();\n    },\n\n    /**\n     * Dispose self.\n     */\n    dispose: function () {\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","/**\n * 曲线辅助模块\n * @module zrender/core/curve\n * @author pissang(https://www.github.com/pissang)\n */\n\nimport {\n    create as v2Create,\n    distSquare as v2DistSquare\n} from './vector';\n\nvar mathPow = Math.pow;\nvar mathSqrt = Math.sqrt;\n\nvar EPSILON = 1e-8;\nvar EPSILON_NUMERIC = 1e-4;\n\nvar THREE_SQRT = mathSqrt(3);\nvar ONE_THIRD = 1 / 3;\n\n// 临时变量\nvar _v0 = v2Create();\nvar _v1 = v2Create();\nvar _v2 = v2Create();\n\nfunction isAroundZero(val) {\n    return val > -EPSILON && val < EPSILON;\n}\nfunction isNotAroundZero(val) {\n    return val > EPSILON || val < -EPSILON;\n}\n/**\n * 计算三次贝塞尔值\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @return {number}\n */\nexport function cubicAt(p0, p1, p2, p3, t) {\n    var 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 * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @return {number}\n */\nexport function cubicDerivativeAt(p0, p1, p2, p3, t) {\n    var 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 * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} val\n * @param  {Array.<number>} roots\n * @return {number} 有效根数目\n */\nexport function cubicRootAt(p0, p1, p2, p3, val, roots) {\n    // Evaluate roots of cubic functions\n    var a = p3 + 3 * (p1 - p2) - p0;\n    var b = 3 * (p2 - p1 * 2 + p0);\n    var c = 3 * (p1  - p0);\n    var d = p0 - val;\n\n    var A = b * b - 3 * a * c;\n    var B = b * c - 9 * a * d;\n    var C = c * c - 3 * b * d;\n\n    var n = 0;\n\n    if (isAroundZero(A) && isAroundZero(B)) {\n        if (isAroundZero(b)) {\n            roots[0] = 0;\n        }\n        else {\n            var 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        var disc = B * B - 4 * A * C;\n\n        if (isAroundZero(disc)) {\n            var K = B / A;\n            var t1 = -b / a + K;  // t1, a is not zero\n            var 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            var discSqrt = mathSqrt(disc);\n            var Y1 = A * b + 1.5 * a * (-B + discSqrt);\n            var 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            var t1 = (-b - (Y1 + Y2)) / (3 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n        else {\n            var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt(A * A * A));\n            var theta = Math.acos(T) / 3;\n            var ASqrt = mathSqrt(A);\n            var tmp = Math.cos(theta);\n\n            var t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n            var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n            var 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 * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {Array.<number>} extrema\n * @return {number} 有效数目\n */\nexport function cubicExtrema(p0, p1, p2, p3, extrema) {\n    var b = 6 * p2 - 12 * p1 + 6 * p0;\n    var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n    var c = 3 * p1 - 3 * p0;\n\n    var n = 0;\n    if (isAroundZero(a)) {\n        if (isNotAroundZero(b)) {\n            var t1 = -c / b;\n            if (t1 >= 0 && t1 <=1) {\n                extrema[n++] = t1;\n            }\n        }\n    }\n    else {\n        var disc = b * b - 4 * a * c;\n        if (isAroundZero(disc)) {\n            extrema[0] = -b / (2 * a);\n        }\n        else if (disc > 0) {\n            var discSqrt = mathSqrt(disc);\n            var t1 = (-b + discSqrt) / (2 * a);\n            var 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 * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @param  {Array.<number>} out\n */\nexport function cubicSubdivide(p0, p1, p2, p3, t, out) {\n    var p01 = (p1 - p0) * t + p0;\n    var p12 = (p2 - p1) * t + p1;\n    var p23 = (p3 - p2) * t + p2;\n\n    var p012 = (p12 - p01) * t + p01;\n    var p123 = (p23 - p12) * t + p12;\n\n    var 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 * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {number} x\n * @param {number} y\n * @param {Array.<number>} [out] 投射点\n * @return {number}\n */\nexport function cubicProjectPoint(\n    x0, y0, x1, y1, x2, y2, x3, y3,\n    x, y, out\n) {\n    // http://pomax.github.io/bezierinfo/#projections\n    var t;\n    var interval = 0.005;\n    var d = Infinity;\n    var prev;\n    var next;\n    var d1;\n    var d2;\n\n    _v0[0] = x;\n    _v0[1] = y;\n\n    // 先粗略估计一下可能的最小距离的 t 值\n    // PENDING\n    for (var _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 (var 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 * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @return {number}\n */\nexport function quadraticAt(p0, p1, p2, t) {\n    var onet = 1 - t;\n    return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\n\n/**\n * 计算二次方贝塞尔导数值\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @return {number}\n */\nexport function quadraticDerivativeAt(p0, p1, p2, t) {\n    return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));\n}\n\n/**\n * 计算二次方贝塞尔方程根\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @param  {Array.<number>} roots\n * @return {number} 有效根数目\n */\nexport function quadraticRootAt(p0, p1, p2, val, roots) {\n    var a = p0 - 2 * p1 + p2;\n    var b = 2 * (p1 - p0);\n    var c = p0 - val;\n\n    var n = 0;\n    if (isAroundZero(a)) {\n        if (isNotAroundZero(b)) {\n            var t1 = -c / b;\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n    }\n    else {\n        var disc = b * b - 4 * a * c;\n        if (isAroundZero(disc)) {\n            var t1 = -b / (2 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n        else if (disc > 0) {\n            var discSqrt = mathSqrt(disc);\n            var t1 = (-b + discSqrt) / (2 * a);\n            var 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 * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @return {number}\n */\nexport function quadraticExtremum(p0, p1, p2) {\n    var 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 * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @param  {Array.<number>} out\n */\nexport function quadraticSubdivide(p0, p1, p2, t, out) {\n    var p01 = (p1 - p0) * t + p0;\n    var p12 = (p2 - p1) * t + p1;\n    var 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.<number>} out 投射点\n * @return {number}\n */\nexport function quadraticProjectPoint(\n    x0, y0, x1, y1, x2, y2,\n    x, y, out\n) {\n    // http://pomax.github.io/bezierinfo/#projections\n    var t;\n    var interval = 0.005;\n    var d = Infinity;\n\n    _v0[0] = x;\n    _v0[1] = y;\n\n    // 先粗略估计一下可能的最小距离的 t 值\n    // PENDING\n    for (var _t = 0; _t < 1; _t += 0.05) {\n        _v1[0] = quadraticAt(x0, x1, x2, _t);\n        _v1[1] = quadraticAt(y0, y1, y2, _t);\n        var 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 (var i = 0; i < 32; i++) {\n        if (interval < EPSILON_NUMERIC) {\n            break;\n        }\n        var prev = t - interval;\n        var next = t + interval;\n        // t - interval\n        _v1[0] = quadraticAt(x0, x1, x2, prev);\n        _v1[1] = quadraticAt(y0, y1, y2, prev);\n\n        var 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            var 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 * @author Yi Shen(https://github.com/pissang)\n */\n\nimport * as vec2 from './vector';\nimport * as curve from './curve';\n\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI2 = Math.PI * 2;\n\nvar start = vec2.create();\nvar end = vec2.create();\nvar extremity = vec2.create();\n\n/**\n * 从顶点数组中计算出最小包围盒,写入`min`和`max`中\n * @module zrender/core/bbox\n * @param {Array<Object>} points 顶点数组\n * @param {number} min\n * @param {number} max\n */\nexport function fromPoints(points, min, max) {\n    if (points.length === 0) {\n        return;\n    }\n    var p = points[0];\n    var left = p[0];\n    var right = p[0];\n    var top = p[1];\n    var bottom = p[1];\n    var i;\n\n    for (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\n/**\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nexport function fromLine(x0, y0, x1, y1, min, max) {\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\nvar xDim = [];\nvar yDim = [];\n/**\n * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒,写入`min`和`max`中\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nexport function fromCubic(\n    x0, y0, x1, y1, x2, y2, x3, y3, min, max\n) {\n    var cubicExtrema = curve.cubicExtrema;\n    var cubicAt = curve.cubicAt;\n    var i;\n    var 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 (i = 0; i < n; i++) {\n        var 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 (i = 0; i < n; i++) {\n        var 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 * @memberOf module:zrender/core/bbox\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 {Array.<number>} min\n * @param {Array.<number>} max\n */\nexport function fromQuadratic(x0, y0, x1, y1, x2, y2, min, max) {\n    var quadraticExtremum = curve.quadraticExtremum;\n    var quadraticAt = curve.quadraticAt;\n    // Find extremities, where derivative in x dim or y dim is zero\n    var tx =\n        mathMax(\n            mathMin(quadraticExtremum(x0, x1, x2), 1), 0\n        );\n    var ty =\n        mathMax(\n            mathMin(quadraticExtremum(y0, y1, y2), 1), 0\n        );\n\n    var x = quadraticAt(x0, x1, x2, tx);\n    var 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 * @method\n * @memberOf module:zrender/core/bbox\n * @param {number} x\n * @param {number} y\n * @param {number} rx\n * @param {number} ry\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {number} anticlockwise\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nexport function fromArc(\n    x, y, rx, ry, startAngle, endAngle, anticlockwise, min, max\n) {\n    var vec2Min = vec2.min;\n    var vec2Max = vec2.max;\n\n    var 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        var tmp = endAngle;\n        endAngle = startAngle;\n        startAngle = tmp;\n    }\n\n    // var number = 0;\n    // var step = (anticlockwise ? -Math.PI : Math.PI) / 2;\n    for (var 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 * @module zrender/core/PathProxy\n * @author Yi Shen (http://www.github.com/pissang)\n */\n\n// TODO getTotalLength, getPointAtLength\n\nimport * as curve from './curve';\nimport * as vec2 from './vector';\nimport * as bbox from './bbox';\nimport BoundingRect from './BoundingRect';\nimport {devicePixelRatio as dpr} from '../config';\n\nvar CMD = {\n    M: 1,\n    L: 2,\n    C: 3,\n    Q: 4,\n    A: 5,\n    Z: 6,\n    // Rect\n    R: 7\n};\n\n// var CMD_MEM_SIZE = {\n//     M: 3,\n//     L: 3,\n//     C: 7,\n//     Q: 5,\n//     A: 9,\n//     R: 5,\n//     Z: 1\n// };\n\nvar min = [];\nvar max = [];\nvar min2 = [];\nvar max2 = [];\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathCos = Math.cos;\nvar mathSin = Math.sin;\nvar mathSqrt = Math.sqrt;\nvar mathAbs = Math.abs;\n\nvar hasTypedArray = typeof Float32Array != 'undefined';\n\n/**\n * @alias module:zrender/core/PathProxy\n * @constructor\n */\nvar PathProxy = function (notSaveData) {\n\n    this._saveData = !(notSaveData || false);\n\n    if (this._saveData) {\n        /**\n         * Path data. Stored as flat array\n         * @type {Array.<Object>}\n         */\n        this.data = [];\n    }\n\n    this._ctx = null;\n};\n\n/**\n * 快速计算Path包围盒(并不是最小包围盒)\n * @return {Object}\n */\nPathProxy.prototype = {\n\n    constructor: PathProxy,\n\n    _xi: 0,\n    _yi: 0,\n\n    _x0: 0,\n    _y0: 0,\n    // Unit x, Unit y. Provide for avoiding drawing that too short line segment\n    _ux: 0,\n    _uy: 0,\n\n    _len: 0,\n\n    _lineDash: null,\n\n    _dashOffset: 0,\n\n    _dashIdx: 0,\n\n    _dashSum: 0,\n\n    /**\n     * @readOnly\n     */\n    setScale: function (sx, sy) {\n        this._ux = mathAbs(1 / dpr / sx) || 0;\n        this._uy = mathAbs(1 / dpr / sy) || 0;\n    },\n\n    getContext: function () {\n        return this._ctx;\n    },\n\n    /**\n     * @param  {CanvasRenderingContext2D} ctx\n     * @return {module:zrender/core/PathProxy}\n     */\n    beginPath: function (ctx) {\n\n        this._ctx = ctx;\n\n        ctx && ctx.beginPath();\n\n        ctx && (this.dpr = ctx.dpr);\n\n        // Reset\n        if (this._saveData) {\n            this._len = 0;\n        }\n\n        if (this._lineDash) {\n            this._lineDash = null;\n\n            this._dashOffset = 0;\n        }\n\n        return this;\n    },\n\n    /**\n     * @param  {number} x\n     * @param  {number} y\n     * @return {module:zrender/core/PathProxy}\n     */\n    moveTo: function (x, y) {\n        this.addData(CMD.M, x, y);\n        this._ctx && this._ctx.moveTo(x, y);\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    /**\n     * @param  {number} x\n     * @param  {number} y\n     * @return {module:zrender/core/PathProxy}\n     */\n    lineTo: function (x, y) {\n        var exceedUnit = mathAbs(x - this._xi) > this._ux\n            || mathAbs(y - this._yi) > this._uy\n            // Force draw the first segment\n            || this._len < 5;\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        }\n\n        return this;\n    },\n\n    /**\n     * @param  {number} x1\n     * @param  {number} y1\n     * @param  {number} x2\n     * @param  {number} y2\n     * @param  {number} x3\n     * @param  {number} y3\n     * @return {module:zrender/core/PathProxy}\n     */\n    bezierCurveTo: function (x1, y1, x2, y2, x3, y3) {\n        this.addData(CMD.C, x1, y1, x2, y2, x3, y3);\n        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    /**\n     * @param  {number} x1\n     * @param  {number} y1\n     * @param  {number} x2\n     * @param  {number} y2\n     * @return {module:zrender/core/PathProxy}\n     */\n    quadraticCurveTo: function (x1, y1, x2, y2) {\n        this.addData(CMD.Q, x1, y1, x2, y2);\n        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    /**\n     * @param  {number} cx\n     * @param  {number} cy\n     * @param  {number} r\n     * @param  {number} startAngle\n     * @param  {number} endAngle\n     * @param  {boolean} anticlockwise\n     * @return {module:zrender/core/PathProxy}\n     */\n    arc: function (cx, cy, r, startAngle, endAngle, anticlockwise) {\n        this.addData(\n            CMD.A, cx, cy, r, r, startAngle, endAngle - startAngle, 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 + cx;\n        return this;\n    },\n\n    // TODO\n    arcTo: function (x1, y1, x2, y2, radius) {\n        if (this._ctx) {\n            this._ctx.arcTo(x1, y1, x2, y2, radius);\n        }\n        return this;\n    },\n\n    // TODO\n    rect: function (x, y, w, h) {\n        this._ctx && this._ctx.rect(x, y, w, h);\n        this.addData(CMD.R, x, y, w, h);\n        return this;\n    },\n\n    /**\n     * @return {module:zrender/core/PathProxy}\n     */\n    closePath: function () {\n        this.addData(CMD.Z);\n\n        var ctx = this._ctx;\n        var x0 = this._x0;\n        var 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    /**\n     * Context 从外部传入,因为有可能是 rebuildPath 完之后再 fill。\n     * stroke 同样\n     * @param {CanvasRenderingContext2D} ctx\n     * @return {module:zrender/core/PathProxy}\n     */\n    fill: function (ctx) {\n        ctx && ctx.fill();\n        this.toStatic();\n    },\n\n    /**\n     * @param {CanvasRenderingContext2D} ctx\n     * @return {module:zrender/core/PathProxy}\n     */\n    stroke: function (ctx) {\n        ctx && ctx.stroke();\n        this.toStatic();\n    },\n\n    /**\n     * 必须在其它绘制命令前调用\n     * Must be invoked before all other path drawing methods\n     * @return {module:zrender/core/PathProxy}\n     */\n    setLineDash: function (lineDash) {\n        if (lineDash instanceof Array) {\n            this._lineDash = lineDash;\n\n            this._dashIdx = 0;\n\n            var lineDashSum = 0;\n            for (var i = 0; i < lineDash.length; i++) {\n                lineDashSum += lineDash[i];\n            }\n            this._dashSum = lineDashSum;\n        }\n        return this;\n    },\n\n    /**\n     * 必须在其它绘制命令前调用\n     * Must be invoked before all other path drawing methods\n     * @return {module:zrender/core/PathProxy}\n     */\n    setLineDashOffset: function (offset) {\n        this._dashOffset = offset;\n        return this;\n    },\n\n    /**\n     *\n     * @return {boolean}\n     */\n    len: function () {\n        return this._len;\n    },\n\n    /**\n     * 直接设置 Path 数据\n     */\n    setData: function (data) {\n\n        var len = data.length;\n\n        if (! (this.data && this.data.length == len) && hasTypedArray) {\n            this.data = new Float32Array(len);\n        }\n\n        for (var i = 0; i < len; i++) {\n            this.data[i] = data[i];\n        }\n\n        this._len = len;\n    },\n\n    /**\n     * 添加子路径\n     * @param {module:zrender/core/PathProxy|Array.<module:zrender/core/PathProxy>} path\n     */\n    appendPath: function (path) {\n        if (!(path instanceof Array)) {\n            path = [path];\n        }\n        var len = path.length;\n        var appendSize = 0;\n        var offset = this._len;\n        for (var 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 (var i = 0; i < len; i++) {\n            var appendPathData = path[i].data;\n            for (var 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: function (cmd) {\n        if (!this._saveData) {\n            return;\n        }\n\n        var data = this.data;\n        if (this._len + arguments.length > data.length) {\n            // 因为之前的数组已经转换成静态的 Float32Array\n            // 所以不够用时需要扩展一个新的动态数组\n            this._expandData();\n            data = this.data;\n        }\n        for (var i = 0; i < arguments.length; i++) {\n            data[this._len++] = arguments[i];\n        }\n\n        this._prevCmd = cmd;\n    },\n\n    _expandData: function () {\n        // Only if data is Float32Array\n        if (!(this.data instanceof Array)) {\n            var newData = [];\n            for (var i = 0; i < this._len; i++) {\n                newData[i] = this.data[i];\n            }\n            this.data = newData;\n        }\n    },\n\n    /**\n     * If needs js implemented dashed line\n     * @return {boolean}\n     * @private\n     */\n    _needsDash: function () {\n        return this._lineDash;\n    },\n\n    _dashedLineTo: function (x1, y1) {\n        var dashSum = this._dashSum;\n        var offset = this._dashOffset;\n        var lineDash = this._lineDash;\n        var ctx = this._ctx;\n\n        var x0 = this._xi;\n        var y0 = this._yi;\n        var dx = x1 - x0;\n        var dy = y1 - y0;\n        var dist = mathSqrt(dx * dx + dy * dy);\n        var x = x0;\n        var y = y0;\n        var dash;\n        var nDash = lineDash.length;\n        var idx;\n        dx /= dist;\n        dy /= dist;\n\n        if (offset < 0) {\n            // Convert to positive offset\n            offset = dashSum + offset;\n        }\n        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    _dashedBezierTo: function (x1, y1, x2, y2, x3, y3) {\n        var dashSum = this._dashSum;\n        var offset = this._dashOffset;\n        var lineDash = this._lineDash;\n        var ctx = this._ctx;\n\n        var x0 = this._xi;\n        var y0 = this._yi;\n        var t;\n        var dx;\n        var dy;\n        var cubicAt = curve.cubicAt;\n        var bezierLen = 0;\n        var idx = this._dashIdx;\n        var nDash = lineDash.length;\n\n        var x;\n        var y;\n\n        var 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    _dashedQuadraticTo: function (x1, y1, x2, y2) {\n        // Convert quadratic to cubic using degree elevation\n        var x3 = x2;\n        var y3 = y2;\n        x2 = (x2 + 2 * x1) / 3;\n        y2 = (y2 + 2 * y1) / 3;\n        x1 = (this._xi + 2 * x1) / 3;\n        y1 = (this._yi + 2 * y1) / 3;\n\n        this._dashedBezierTo(x1, y1, x2, y2, x3, y3);\n    },\n\n    /**\n     * 转成静态的 Float32Array 减少堆内存占用\n     * Convert dynamic array to static Float32Array\n     */\n    toStatic: function () {\n        var data = this.data;\n        if (data instanceof Array) {\n            data.length = this._len;\n            if (hasTypedArray) {\n                this.data = new Float32Array(data);\n            }\n        }\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getBoundingRect: function () {\n        min[0] = min[1] = min2[0] = min2[1] = Number.MAX_VALUE;\n        max[0] = max[1] = max2[0] = max2[1] = -Number.MAX_VALUE;\n\n        var data = this.data;\n        var xi = 0;\n        var yi = 0;\n        var x0 = 0;\n        var y0 = 0;\n\n        for (var i = 0; i < data.length;) {\n            var cmd = data[i++];\n\n            if (i == 1) {\n                // 如果第一个命令是 L, C, Q\n                // 则 previous point 同绘制命令的第一个 point\n                //\n                // 第一个命令为 Arc 的情况下会在后面特殊处理\n                xi = data[i];\n                yi = data[i + 1];\n\n                x0 = xi;\n                y0 = yi;\n            }\n\n            switch (cmd) {\n                case CMD.M:\n                    // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n                    // 在 closePath 的时候使用\n                    x0 = data[i++];\n                    y0 = data[i++];\n                    xi = x0;\n                    yi = y0;\n                    min2[0] = x0;\n                    min2[1] = y0;\n                    max2[0] = x0;\n                    max2[1] = y0;\n                    break;\n                case CMD.L:\n                    bbox.fromLine(xi, yi, data[i], data[i + 1], min2, max2);\n                    xi = data[i++];\n                    yi = data[i++];\n                    break;\n                case CMD.C:\n                    bbox.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                    bbox.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                    // TODO Arc 判断的开销比较大\n                    var cx = data[i++];\n                    var cy = data[i++];\n                    var rx = data[i++];\n                    var ry = data[i++];\n                    var startAngle = data[i++];\n                    var endAngle = data[i++] + startAngle;\n                    // TODO Arc 旋转\n                    var psi = data[i++];\n                    var anticlockwise = 1 - data[i++];\n\n                    if (i == 1) {\n                        // 直接使用 arc 命令\n                        // 第一个命令起点还未定义\n                        x0 = mathCos(startAngle) * rx + cx;\n                        y0 = mathSin(startAngle) * ry + cy;\n                    }\n\n                    bbox.fromArc(\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                    var width = data[i++];\n                    var height = data[i++];\n                    // Use fromLine\n                    bbox.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    /**\n     * Rebuild path from current data\n     * Rebuild path will not consider javascript implemented line dash.\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    rebuildPath: function (ctx) {\n        var d = this.data;\n        var x0, y0;\n        var xi, yi;\n        var x, y;\n        var ux = this._ux;\n        var uy = this._uy;\n        var len = this._len;\n        for (var i = 0; i < len;) {\n            var cmd = d[i++];\n\n            if (i == 1) {\n                // 如果第一个命令是 L, C, Q\n                // 则 previous point 同绘制命令的第一个 point\n                //\n                // 第一个命令为 Arc 的情况下会在后面特殊处理\n                xi = d[i];\n                yi = d[i + 1];\n\n                x0 = xi;\n                y0 = yi;\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                    // Not draw too small seg between\n                    if (mathAbs(x - xi) > ux || mathAbs(y - yi) > uy || i === len - 1) {\n                        ctx.lineTo(x, y);\n                        xi = x;\n                        yi = y;\n                    }\n                    break;\n                case CMD.C:\n                    ctx.bezierCurveTo(\n                        d[i++], d[i++], d[i++], d[i++], d[i++], d[i++]\n                    );\n                    xi = d[i - 2];\n                    yi = d[i - 1];\n                    break;\n                case CMD.Q:\n                    ctx.quadraticCurveTo(d[i++], d[i++], d[i++], d[i++]);\n                    xi = d[i - 2];\n                    yi = d[i - 1];\n                    break;\n                case CMD.A:\n                    var cx = d[i++];\n                    var cy = d[i++];\n                    var rx = d[i++];\n                    var ry = d[i++];\n                    var theta = d[i++];\n                    var dTheta = d[i++];\n                    var psi = d[i++];\n                    var fs = d[i++];\n                    var r = (rx > ry) ? rx : ry;\n                    var scaleX = (rx > ry) ? 1 : rx / ry;\n                    var scaleY = (rx > ry) ? ry / rx : 1;\n                    var isEllipse = Math.abs(rx - ry) > 1e-3;\n                    var endAngle = theta + dTheta;\n                    if (isEllipse) {\n                        ctx.translate(cx, cy);\n                        ctx.rotate(psi);\n                        ctx.scale(scaleX, scaleY);\n                        ctx.arc(0, 0, r, theta, endAngle, 1 - fs);\n                        ctx.scale(1 / scaleX, 1 / scaleY);\n                        ctx.rotate(-psi);\n                        ctx.translate(-cx, -cy);\n                    }\n                    else {\n                        ctx.arc(cx, cy, r, theta, endAngle, 1 - fs);\n                    }\n\n                    if (i == 1) {\n                        // 直接使用 arc 命令\n                        // 第一个命令起点还未定义\n                        x0 = mathCos(theta) * rx + cx;\n                        y0 = mathSin(theta) * ry + cy;\n                    }\n                    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                    ctx.rect(d[i++], d[i++], d[i++], d[i++]);\n                    break;\n                case CMD.Z:\n                    ctx.closePath();\n                    xi = x0;\n                    yi = y0;\n            }\n        }\n    }\n};\n\nPathProxy.CMD = CMD;\n\nexport default PathProxy;","\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(x0, y0, x1, y1, lineWidth, x, y) {\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _l = lineWidth;\n    var _a = 0;\n    var _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    var tmp = _a * x - y + _b;\n    var _s = tmp * tmp / (_a * _a + 1);\n    return _s <= _l / 2 * _l / 2;\n}","\nimport * as curve from '../core/curve';\n\n/**\n * 三次贝塞尔曲线描边包含判断\n * @param  {number}  x0\n * @param  {number}  y0\n * @param  {number}  x1\n * @param  {number}  y1\n * @param  {number}  x2\n * @param  {number}  y2\n * @param  {number}  x3\n * @param  {number}  y3\n * @param  {number}  lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {boolean}\n */\nexport function containStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _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    var 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 * @param  {number}  x0\n * @param  {number}  y0\n * @param  {number}  x1\n * @param  {number}  y1\n * @param  {number}  x2\n * @param  {number}  y2\n * @param  {number}  lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {boolean}\n */\nexport function containStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _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    var d = quadraticProjectPoint(\n        x0, y0, x1, y1, x2, y2,\n        x, y, null\n    );\n    return d <= _l / 2;\n}\n","\nvar PI2 = Math.PI * 2;\n\nexport function normalizeRadian(angle) {\n    angle %= PI2;\n    if (angle < 0) {\n        angle += PI2;\n    }\n    return angle;\n}","\nimport {normalizeRadian} from './util';\n\nvar PI2 = Math.PI * 2;\n\n/**\n * 圆弧描边包含判断\n * @param  {number}  cx\n * @param  {number}  cy\n * @param  {number}  r\n * @param  {number}  startAngle\n * @param  {number}  endAngle\n * @param  {boolean}  anticlockwise\n * @param  {number} lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {Boolean}\n */\nexport function containStroke(\n    cx, cy, r, startAngle, endAngle, anticlockwise,\n    lineWidth, x, y\n) {\n\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _l = lineWidth;\n\n    x -= cx;\n    y -= cy;\n    var d = Math.sqrt(x * x + y * y);\n\n    if ((d - _l > r) || (d + _l < r)) {\n        return false;\n    }\n    if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n        // Is a circle\n        return true;\n    }\n    if (anticlockwise) {\n        var tmp = startAngle;\n        startAngle = normalizeRadian(endAngle);\n        endAngle = normalizeRadian(tmp);\n    } else {\n        startAngle = normalizeRadian(startAngle);\n        endAngle = normalizeRadian(endAngle);\n    }\n    if (startAngle > endAngle) {\n        endAngle += PI2;\n    }\n\n    var 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(x0, y0, x1, y1, x, y) {\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    var dir = y1 < y0 ? 1 : -1;\n    var t = (y - y0) / (y1 - y0);\n\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    var 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 {normalizeRadian} from './util';\nimport * as curve from '../core/curve';\nimport windingLine from './windingLine';\n\nvar CMD = PathProxy.CMD;\nvar PI2 = Math.PI * 2;\n\nvar EPSILON = 1e-4;\n\nfunction isAroundEqual(a, b) {\n    return Math.abs(a - b) < EPSILON;\n}\n\n// 临时数组\nvar roots = [-1, -1, -1];\nvar extrema = [-1, -1];\n\nfunction swapExtrema() {\n    var tmp = extrema[0];\n    extrema[0] = extrema[1];\n    extrema[1] = tmp;\n}\n\nfunction windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {\n    // Quick reject\n    if (\n        (y > y0 && y > y1 && y > y2 && y > y3)\n        || (y < y0 && y < y1 && y < y2 && y < y3)\n    ) {\n        return 0;\n    }\n    var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\n    if (nRoots === 0) {\n        return 0;\n    }\n    else {\n        var w = 0;\n        var nExtrema = -1;\n        var y0_, y1_;\n        for (var i = 0; i < nRoots; i++) {\n            var t = roots[i];\n\n            // Avoid winding error when intersection point is the connect point of two line of polygon\n            var unit = (t === 0 || t === 1) ? 0.5 : 1;\n\n            var 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(x0, y0, x1, y1, x2, y2, x, y) {\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    var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\n    if (nRoots === 0) {\n        return 0;\n    }\n    else {\n        var t = curve.quadraticExtremum(y0, y1, y2);\n        if (t >= 0 && t <= 1) {\n            var w = 0;\n            var y_ = curve.quadraticAt(y0, y1, y2, t);\n            for (var i = 0; i < nRoots; i++) {\n                // Remove one endpoint.\n                var unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1;\n\n                var 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            var unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1;\n\n            var 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\n// TODO\n// Arc 旋转\nfunction windingArc(\n    cx, cy, r, startAngle, endAngle, anticlockwise, x, y\n) {\n    y -= cy;\n    if (y > r || y < -r) {\n        return 0;\n    }\n    var tmp = Math.sqrt(r * r - y * y);\n    roots[0] = -tmp;\n    roots[1] = tmp;\n\n    var diff = Math.abs(startAngle - endAngle);\n    if (diff < 1e-4) {\n        return 0;\n    }\n    if (diff % PI2 < 1e-4) {\n        // Is a circle\n        startAngle = 0;\n        endAngle = PI2;\n        var dir = anticlockwise ? 1 : -1;\n        if (x >= roots[0] + cx && x <= roots[1] + cx) {\n            return dir;\n        } else {\n            return 0;\n        }\n    }\n\n    if (anticlockwise) {\n        var tmp = startAngle;\n        startAngle = normalizeRadian(endAngle);\n        endAngle = normalizeRadian(tmp);\n    }\n    else {\n        startAngle = normalizeRadian(startAngle);\n        endAngle = normalizeRadian(endAngle);\n    }\n    if (startAngle > endAngle) {\n        endAngle += PI2;\n    }\n\n    var w = 0;\n    for (var i = 0; i < 2; i++) {\n        var x_ = roots[i];\n        if (x_ + cx > x) {\n            var angle = Math.atan2(y, x_);\n            var 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\nfunction containPath(data, lineWidth, isStroke, x, y) {\n    var w = 0;\n    var xi = 0;\n    var yi = 0;\n    var x0 = 0;\n    var y0 = 0;\n\n    for (var i = 0; i < data.length;) {\n        var cmd = data[i++];\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 (i == 1) {\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                var cx = data[i++];\n                var cy = data[i++];\n                var rx = data[i++];\n                var ry = data[i++];\n                var theta = data[i++];\n                var dTheta = data[i++];\n                // TODO Arc 旋转\n                var psi = data[i++];\n                var anticlockwise = 1 - data[i++];\n                var x1 = Math.cos(theta) * rx + cx;\n                var y1 = Math.sin(theta) * ry + cy;\n                // 不是直接使用 arc 命令\n                if (i > 1) {\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                var _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                var width = data[i++];\n                var height = data[i++];\n                var x1 = x0 + width;\n                var 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(pathData, x, y) {\n    return containPath(pathData, 0, false, x, y);\n}\n\nexport function containStroke(pathData, lineWidth, x, y) {\n    return containPath(pathData, lineWidth, true, x, y);\n}","import Displayable from './Displayable';\nimport * as zrUtil from '../core/util';\nimport PathProxy from '../core/PathProxy';\nimport * as pathContain from '../contain/path';\nimport Pattern from './Pattern';\n\nvar getCanvasPattern = Pattern.prototype.getCanvasPattern;\n\nvar abs = Math.abs;\n\nvar pathProxyForDraw = new PathProxy(true);\n/**\n * @alias module:zrender/graphic/Path\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nfunction Path(opts) {\n    Displayable.call(this, opts);\n\n    /**\n     * @type {module:zrender/core/PathProxy}\n     * @readOnly\n     */\n    this.path = null;\n}\n\nPath.prototype = {\n\n    constructor: Path,\n\n    type: 'path',\n\n    __dirtyPath: true,\n\n    strokeContainThreshold: 5,\n\n    brush: function (ctx, prevEl) {\n        var style = this.style;\n        var path = this.path || pathProxyForDraw;\n        var hasStroke = style.hasStroke();\n        var hasFill = style.hasFill();\n        var fill = style.fill;\n        var stroke = style.stroke;\n        var hasFillGradient = hasFill && !!(fill.colorStops);\n        var hasStrokeGradient = hasStroke && !!(stroke.colorStops);\n        var hasFillPattern = hasFill && !!(fill.image);\n        var hasStrokePattern = hasStroke && !!(stroke.image);\n\n        style.bind(ctx, this, prevEl);\n        this.setTransform(ctx);\n\n        if (this.__dirty) {\n            var rect;\n            // Update gradient because bounding rect may changed\n            if (hasFillGradient) {\n                rect = rect || this.getBoundingRect();\n                this._fillGradient = style.getGradient(ctx, fill, rect);\n            }\n            if (hasStrokeGradient) {\n                rect = rect || this.getBoundingRect();\n                this._strokeGradient = style.getGradient(ctx, stroke, rect);\n            }\n        }\n        // Use the gradient or pattern\n        if (hasFillGradient) {\n            // PENDING If may have affect the state\n            ctx.fillStyle = this._fillGradient;\n        }\n        else if (hasFillPattern) {\n            ctx.fillStyle = getCanvasPattern.call(fill, ctx);\n        }\n        if (hasStrokeGradient) {\n            ctx.strokeStyle = this._strokeGradient;\n        }\n        else if (hasStrokePattern) {\n            ctx.strokeStyle = getCanvasPattern.call(stroke, ctx);\n        }\n\n        var lineDash = style.lineDash;\n        var lineDashOffset = style.lineDashOffset;\n\n        var ctxLineDash = !!ctx.setLineDash;\n\n        // Update path sx, sy\n        var scale = this.getGlobalScale();\n        path.setScale(scale[0], scale[1]);\n\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 (this.__dirtyPath\n            || (lineDash && !ctxLineDash && hasStroke)\n        ) {\n            path.beginPath(ctx);\n\n            // Setting line dash before build path\n            if (lineDash && !ctxLineDash) {\n                path.setLineDash(lineDash);\n                path.setLineDashOffset(lineDashOffset);\n            }\n\n            this.buildPath(path, this.shape, false);\n\n            // Clear path dirty flag\n            if (this.path) {\n                this.__dirtyPath = false;\n            }\n        }\n        else {\n            // Replay path building\n            ctx.beginPath();\n            this.path.rebuildPath(ctx);\n        }\n\n        hasFill && path.fill(ctx);\n\n        if (lineDash && ctxLineDash) {\n            ctx.setLineDash(lineDash);\n            ctx.lineDashOffset = lineDashOffset;\n        }\n\n        hasStroke && path.stroke(ctx);\n\n        if (lineDash && ctxLineDash) {\n            // PENDING\n            // Remove lineDash\n            ctx.setLineDash([]);\n        }\n\n        // Draw rect text\n        if (style.text != null) {\n            // Only restore transform when needs draw text.\n            this.restoreTransform(ctx);    \n            this.drawRectText(ctx, this.getBoundingRect());\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: function (ctx, shapeCfg, inBundle) {},\n\n    createPathProxy: function () {\n        this.path = new PathProxy();\n    },\n\n    getBoundingRect: function () {\n        var rect = this._rect;\n        var style = this.style;\n        var needsUpdateRect = !rect;\n        if (needsUpdateRect) {\n            var path = this.path;\n            if (!path) {\n                // Create path on demand.\n                path = this.path = new PathProxy();\n            }\n            if (this.__dirtyPath) {\n                path.beginPath();\n                this.buildPath(path, this.shape, false);\n            }\n            rect = path.getBoundingRect();\n        }\n        this._rect = rect;\n\n        if (style.hasStroke()) {\n            // Needs update rect with stroke lineWidth when\n            // 1. Element changes scale or lineWidth\n            // 2. Shape is changed\n            var rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone());\n            if (this.__dirty || needsUpdateRect) {\n                rectWithStroke.copy(rect);\n                // FIXME Must after updateTransform\n                var w = style.lineWidth;\n                // PENDING, Min line width is needed when line is horizontal or vertical\n                var lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n\n                // Only add extra hover lineWidth when there are no fill\n                if (!style.hasFill()) {\n                    w = Math.max(w, this.strokeContainThreshold || 4);\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: function (x, y) {\n        var localPos = this.transformCoordToLocal(x, y);\n        var rect = this.getBoundingRect();\n        var style = this.style;\n        x = localPos[0];\n        y = localPos[1];\n\n        if (rect.contain(x, y)) {\n            var pathData = this.path.data;\n            if (style.hasStroke()) {\n                var lineWidth = style.lineWidth;\n                var 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 (!style.hasFill()) {\n                        lineWidth = Math.max(lineWidth, this.strokeContainThreshold);\n                    }\n                    if (pathContain.containStroke(\n                        pathData, lineWidth / lineScale, x, y\n                    )) {\n                        return true;\n                    }\n                }\n            }\n            if (style.hasFill()) {\n                return pathContain.contain(pathData, x, y);\n            }\n        }\n        return false;\n    },\n\n    /**\n     * @param  {boolean} dirtyPath\n     */\n    dirty: function (dirtyPath) {\n        if (dirtyPath == null) {\n            dirtyPath = true;\n        }\n        // Only mark dirty, not mark clean\n        if (dirtyPath) {\n            this.__dirtyPath = dirtyPath;\n            this._rect = null;\n        }\n\n        this.__dirty = true;\n\n        this.__zr && this.__zr.refresh();\n\n        // Used as a clipping path\n        if (this.__clipTarget) {\n            this.__clipTarget.dirty();\n        }\n    },\n\n    /**\n     * Alias for animate('shape')\n     * @param {boolean} loop\n     */\n    animateShape: function (loop) {\n        return this.animate('shape', loop);\n    },\n\n    // Overwrite attrKV\n    attrKV: function (key, value) {\n        // FIXME\n        if (key === 'shape') {\n            this.setShape(value);\n            this.__dirtyPath = true;\n            this._rect = null;\n        }\n        else {\n            Displayable.prototype.attrKV.call(this, key, value);\n        }\n    },\n\n    /**\n     * @param {Object|string} key\n     * @param {*} value\n     */\n    setShape: function (key, value) {\n        var shape = this.shape;\n        // Path from string may not have shape\n        if (shape) {\n            if (zrUtil.isObject(key)) {\n                for (var name in key) {\n                    if (key.hasOwnProperty(name)) {\n                        shape[name] = key[name];\n                    }\n                }\n            }\n            else {\n                shape[key] = value;\n            }\n            this.dirty(true);\n        }\n        return this;\n    },\n\n    getLineScale: function () {\n        var 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/**\n * 扩展一个 Path element, 比如星形,圆等。\n * Extend a path element\n * @param {Object} props\n * @param {string} props.type Path type\n * @param {Function} props.init Initialize\n * @param {Function} props.buildPath Overwrite buildPath method\n * @param {Object} [props.style] Extended default style config\n * @param {Object} [props.shape] Extended default shape config\n */\nPath.extend = function (defaults) {\n    var Sub = function (opts) {\n        Path.call(this, opts);\n\n        if (defaults.style) {\n            // Extend default style\n            this.style.extendFrom(defaults.style, false);\n        }\n\n        // Extend default shape\n        var defaultShape = defaults.shape;\n        if (defaultShape) {\n            this.shape = this.shape || {};\n            var thisShape = this.shape;\n            for (var name in defaultShape) {\n                if (\n                    ! thisShape.hasOwnProperty(name)\n                    && defaultShape.hasOwnProperty(name)\n                ) {\n                    thisShape[name] = defaultShape[name];\n                }\n            }\n        }\n\n        defaults.init && defaults.init.call(this, opts);\n    };\n\n    zrUtil.inherits(Sub, Path);\n\n    // FIXME 不能 extend position, rotation 等引用对象\n    for (var name in defaults) {\n        // Extending prototype values and methods\n        if (name !== 'style' && name !== 'shape') {\n            Sub.prototype[name] = defaults[name];\n        }\n    }\n\n    return Sub;\n};\n\nzrUtil.inherits(Path, Displayable);\n\nexport default Path;","import PathProxy from '../core/PathProxy';\nimport {applyTransform as v2ApplyTransform} from '../core/vector';\n\nvar CMD = PathProxy.CMD;\n\nvar points = [[], [], []];\nvar mathSqrt = Math.sqrt;\nvar mathAtan2 = Math.atan2;\n\nexport default function (path, m) {\n    var data = path.data;\n    var cmd;\n    var nPoint;\n    var i;\n    var j;\n    var k;\n    var p;\n\n    var M = CMD.M;\n    var C = CMD.C;\n    var L = CMD.L;\n    var R = CMD.R;\n    var A = CMD.A;\n    var Q = CMD.Q;\n\n    for (i = 0, j = 0; i < data.length;) {\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                var x = m[4];\n                var y = m[5];\n                var sx = mathSqrt(m[0] * m[0] + m[1] * m[1]);\n                var sy = mathSqrt(m[2] * m[2] + m[3] * m[3]);\n                var 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            var 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","import Path from '../graphic/Path';\nimport PathProxy from '../core/PathProxy';\nimport transformPath from './transformPath';\n\n// command chars\nvar 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\nvar mathSqrt = Math.sqrt;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\n\nvar vMag = function(v) {\n    return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n};\nvar vRatio = function(u, v) {\n    return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n};\nvar vAngle = function(u, v) {\n    return (u[0] * v[1] < u[1] * v[0] ? -1 : 1)\n            * Math.acos(vRatio(u, v));\n};\n\nfunction processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) {\n    var psi = psiDeg * (PI / 180.0);\n    var xp = mathCos(psi) * (x1 - x2) / 2.0\n                + mathSin(psi) * (y1 - y2) / 2.0;\n    var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0\n                + mathCos(psi) * (y1 - y2) / 2.0;\n\n    var 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    var 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    var cxp = f * rx * yp / ry;\n    var cyp = f * -ry * xp / rx;\n\n    var cx = (x1 + x2) / 2.0\n                + mathCos(psi) * cxp\n                - mathSin(psi) * cyp;\n    var cy = (y1 + y2) / 2.0\n            + mathSin(psi) * cxp\n            + mathCos(psi) * cyp;\n\n    var theta = vAngle([ 1, 0 ], [ (xp - cxp) / rx, (yp - cyp) / ry ]);\n    var u = [ (xp - cxp) / rx, (yp - cyp) / ry ];\n    var v = [ (-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry ];\n    var 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    if (fs === 0 && dTheta > 0) {\n        dTheta = dTheta - 2 * PI;\n    }\n    if (fs === 1 && dTheta < 0) {\n        dTheta = dTheta + 2 * PI;\n    }\n\n    path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);\n}\n\nfunction createPathProxyFromString(data) {\n    if (!data) {\n        return [];\n    }\n\n    // command string\n    var cs = data.replace(/-/g, ' -')\n        .replace(/  /g, ' ')\n        .replace(/ /g, ',')\n        .replace(/,,/g, ',');\n\n    var 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    // create array\n    var arr = cs.split('|');\n    // init context point\n    var cpx = 0;\n    var cpy = 0;\n\n    var path = new PathProxy();\n    var CMD = PathProxy.CMD;\n\n    var prevCmd;\n    for (n = 1; n < arr.length; n++) {\n        var str = arr[n];\n        var c = str.charAt(0);\n        var off = 0;\n        var p = str.slice(1).replace(/e,-/g, 'e-').split(',');\n        var cmd;\n\n        if (p.length > 0 && p[0] === '') {\n            p.shift();\n        }\n\n        for (var i = 0; i < p.length; i++) {\n            p[i] = parseFloat(p[i]);\n        }\n        while (off < p.length && !isNaN(p[off])) {\n            if (isNaN(p[0])) {\n                break;\n            }\n            var ctlPtx;\n            var ctlPty;\n\n            var rx;\n            var ry;\n            var psi;\n            var fa;\n            var fs;\n\n            var x1 = cpx;\n            var y1 = cpy;\n\n            // convert l, H, h, V, and v to L\n            switch (c) {\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                    c = '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                    c = '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                    var len = path.len();\n                    var 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                    var len = path.len();\n                    var 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                    var len = path.len();\n                    var 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                    var len = path.len();\n                    var 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 (c === 'z' || c === 'Z') {\n            cmd = CMD.Z;\n            path.addData(cmd);\n        }\n\n        prevCmd = cmd;\n    }\n\n    path.toStatic();\n\n    return path;\n}\n\n// TODO Optimize double memory cost problem\nfunction createPathOptions(str, opts) {\n    var pathProxy = createPathProxyFromString(str);\n    opts = opts || {};\n    opts.buildPath = function (path) {\n        if (path.setData) {\n            path.setData(pathProxy.data);\n            // Svg and vml renderer don't have context\n            var ctx = path.getContext();\n            if (ctx) {\n                path.rebuildPath(ctx);\n            }\n        }\n        else {\n            var ctx = path;\n            pathProxy.rebuildPath(ctx);\n        }\n    };\n\n    opts.applyTransform = function (m) {\n        transformPath(pathProxy, m);\n        this.dirty(true);\n    };\n\n    return opts;\n}\n\n/**\n * Create a Path object from path string data\n * http://www.w3.org/TR/SVG/paths.html#PathData\n * @param  {Object} opts Other options\n */\nexport function createFromString(str, opts) {\n    return new Path(createPathOptions(str, opts));\n}\n\n/**\n * Create a Path class from path string data\n * @param  {string} str\n * @param  {Object} opts Other options\n */\nexport function extendFromString(str, opts) {\n    return Path.extend(createPathOptions(str, opts));\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, opts) {\n    var pathList = [];\n    var len = pathEls.length;\n    for (var i = 0; i < len; i++) {\n        var pathEl = pathEls[i];\n        if (!pathEl.path) {\n            pathEl.createPathProxy();\n        }\n        if (pathEl.__dirtyPath) {\n            pathEl.buildPath(pathEl.path, pathEl.shape, true);\n        }\n        pathList.push(pathEl.path);\n    }\n\n    var pathBundle = new Path(opts);\n    // Need path proxy.\n    pathBundle.createPathProxy();\n    pathBundle.buildPath = function (path) {\n        path.appendPath(pathList);\n        // Svg and vml renderer don't have context\n        var ctx = path.getContext();\n        if (ctx) {\n            path.rebuildPath(ctx);\n        }\n    };\n\n    return pathBundle;\n}","// CompoundPath to improve performance\n\nimport Path from './Path';\n\nexport default Path.extend({\n\n    type: 'compound',\n\n    shape: {\n\n        paths: null\n    },\n\n    _updatePathDirty: function () {\n        var dirtyPath = this.__dirtyPath;\n        var paths = this.shape.paths;\n        for (var i = 0; i < paths.length; i++) {\n            // Mark as dirty if any subpath is dirty\n            dirtyPath = dirtyPath || paths[i].__dirtyPath;\n        }\n        this.__dirtyPath = dirtyPath;\n        this.__dirty = this.__dirty || dirtyPath;\n    },\n\n    beforeBrush: function () {\n        this._updatePathDirty();\n        var paths = this.shape.paths || [];\n        var scale = this.getGlobalScale();\n        // Update path scale\n        for (var 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]);\n        }\n    },\n\n    buildPath: function (ctx, shape) {\n        var paths = shape.paths || [];\n        for (var i = 0; i < paths.length; i++) {\n            paths[i].buildPath(ctx, paths[i].shape, true);\n        }\n    },\n\n    afterBrush: function () {\n        var paths = this.shape.paths || [];\n        for (var i = 0; i < paths.length; i++) {\n            paths[i].__dirtyPath = false;\n        }\n    },\n\n    getBoundingRect: function () {\n        this._updatePathDirty();\n        return Path.prototype.getBoundingRect.call(this);\n    }\n});","import Displayable from './Displayable';\nimport * as zrUtil from '../core/util';\nimport * as textContain from '../contain/text';\nimport * as textHelper from './helper/text';\n\n/**\n * @alias zrender/graphic/Text\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nvar Text = function (opts) { // jshint ignore:line\n    Displayable.call(this, opts);\n};\n\nText.prototype = {\n\n    constructor: Text,\n\n    type: 'text',\n\n    brush: function (ctx, prevEl) {\n        var style = this.style;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && textHelper.normalizeTextStyle(style, true);\n\n        // Use props with prefix 'text'.\n        style.fill = style.stroke = style.shadowBlur = style.shadowColor =\n            style.shadowOffsetX = style.shadowOffsetY = null;\n\n        var text = style.text;\n        // Convert to string\n        text != null && (text += '');\n\n        // Always bind style\n        style.bind(ctx, this, prevEl);\n\n        if (!textHelper.needDrawText(text, style)) {\n            return;\n        }\n\n        this.setTransform(ctx);\n\n        textHelper.renderText(this, ctx, text, style);\n\n        this.restoreTransform(ctx);\n    },\n\n    getBoundingRect: function () {\n        var style = this.style;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && textHelper.normalizeTextStyle(style, true);\n\n        if (!this._rect) {\n            var text = style.text;\n            text != null ? (text += '') : (text = '');\n\n            var rect = textContain.getBoundingRect(\n                style.text + '',\n                style.font,\n                style.textAlign,\n                style.textVerticalAlign,\n                style.textPadding,\n                style.rich\n            );\n\n            rect.x += style.x || 0;\n            rect.y += style.y || 0;\n\n            if (textHelper.getStroke(style.textStroke, style.textStrokeWidth)) {\n                var w = style.textStrokeWidth;\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\nzrUtil.inherits(Text, Displayable);\n\nexport default Text;","/**\n * Displayable for incremental rendering. It will be rendered in a separate layer\n * IncrementalDisplay have too main methods. `clearDisplayables` and `addDisplayables`\n * addDisplayables will render the added displayables incremetally.\n *\n * It use a not clearFlag to tell the painter don't clear the layer if it's the first element.\n */\nimport { inherits } from '../core/util';\nimport Displayble from './Displayable';\nimport BoundingRect from '../core/BoundingRect';\n\n// TODO Style override ?\nfunction IncrementalDisplayble(opts) {\n\n    Displayble.call(this, opts);\n\n    this._displayables = [];\n\n    this._temporaryDisplayables = [];\n\n    this._cursor = 0;\n\n    this.notClear = true;\n}\n\nIncrementalDisplayble.prototype.incremental = true;\n\nIncrementalDisplayble.prototype.clearDisplaybles = function () {\n    this._displayables = [];\n    this._temporaryDisplayables = [];\n    this._cursor = 0;\n    this.dirty();\n\n    this.notClear = false;\n};\n\nIncrementalDisplayble.prototype.addDisplayable = function (displayable, notPersistent) {\n    if (notPersistent) {\n        this._temporaryDisplayables.push(displayable);\n    }\n    else {\n        this._displayables.push(displayable);\n    }\n    this.dirty();\n};\n\nIncrementalDisplayble.prototype.addDisplayables = function (displayables, notPersistent) {\n    notPersistent = notPersistent || false;\n    for (var i = 0; i < displayables.length; i++) {\n        this.addDisplayable(displayables[i], notPersistent);\n    }\n};\n\nIncrementalDisplayble.prototype.eachPendingDisplayable = function  (cb) {\n    for (var i = this._cursor; i < this._displayables.length; i++) {\n        cb && cb(this._displayables[i]);\n    }\n    for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n        cb && cb(this._temporaryDisplayables[i]);\n    }\n};\n\nIncrementalDisplayble.prototype.update = function () {\n    this.updateTransform();\n    for (var i = this._cursor; i < this._displayables.length; i++) {\n        var displayable = this._displayables[i];\n        // PENDING\n        displayable.parent = this;\n        displayable.update();\n        displayable.parent = null;\n    }\n    for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n        var displayable = this._temporaryDisplayables[i];\n        // PENDING\n        displayable.parent = this;\n        displayable.update();\n        displayable.parent = null;\n    }\n};\n\nIncrementalDisplayble.prototype.brush = function (ctx, prevEl) {\n    // Render persistant displayables.\n    for (var i = this._cursor; i < this._displayables.length; i++) {\n        var displayable = this._displayables[i];\n        displayable.beforeBrush && displayable.beforeBrush(ctx);\n        displayable.brush(ctx, i === this._cursor ? null : this._displayables[i - 1]);\n        displayable.afterBrush && displayable.afterBrush(ctx);\n    }\n    this._cursor = i;\n    // Render temporary displayables.\n    for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n        var displayable = this._temporaryDisplayables[i];\n        displayable.beforeBrush && displayable.beforeBrush(ctx);\n        displayable.brush(ctx, i === 0 ? null : this._temporaryDisplayables[i - 1]);\n        displayable.afterBrush && displayable.afterBrush(ctx);\n    }\n\n    this._temporaryDisplayables = [];\n\n    this.notClear = true;\n};\n\nvar m = [];\nIncrementalDisplayble.prototype.getBoundingRect = function () {\n    if (!this._rect) {\n        var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\n        for (var i = 0; i < this._displayables.length; i++) {\n            var displayable = this._displayables[i];\n            var 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\nIncrementalDisplayble.prototype.contain = function (x, y) {\n    var localPos = this.transformCoordToLocal(x, y);\n    var rect = this.getBoundingRect();\n\n    if (rect.contain(localPos[0], localPos[1])) {\n        for (var i = 0; i < this._displayables.length; i++) {\n            var displayable = this._displayables[i];\n            if (displayable.contain(x, y)) {\n                return true;\n            }\n        }\n    }\n    return false;\n};\n\ninherits(IncrementalDisplayble, Displayble);\n\nexport default IncrementalDisplayble;","/**\n * 圆弧\n * @module zrender/graphic/shape/Arc\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'arc',\n\n    shape: {\n\n        cx: 0,\n\n        cy: 0,\n\n        r: 0,\n\n        startAngle: 0,\n\n        endAngle: Math.PI * 2,\n\n        clockwise: true\n    },\n\n    style: {\n\n        stroke: '#000',\n\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n\n        var x = shape.cx;\n        var y = shape.cy;\n        var r = Math.max(shape.r, 0);\n        var startAngle = shape.startAngle;\n        var endAngle = shape.endAngle;\n        var clockwise = shape.clockwise;\n\n        var unitX = Math.cos(startAngle);\n        var 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 * 贝塞尔曲线\n * @module zrender/shape/BezierCurve\n */\n\nimport Path 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\nvar out = [];\n\nfunction someVectorAt(shape, t, isTangent) {\n    var cpx2 = shape.cpx2;\n    var 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 default Path.extend({\n\n    type: 'bezier-curve',\n\n    shape: {\n        x1: 0,\n        y1: 0,\n        x2: 0,\n        y2: 0,\n        cpx1: 0,\n        cpy1: 0,\n        // cpx2: 0,\n        // cpy2: 0\n\n        // Curve show percent, for animating\n        percent: 1\n    },\n\n    style: {\n        stroke: '#000',\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        var x1 = shape.x1;\n        var y1 = shape.y1;\n        var x2 = shape.x2;\n        var y2 = shape.y2;\n        var cpx1 = shape.cpx1;\n        var cpy1 = shape.cpy1;\n        var cpx2 = shape.cpx2;\n        var cpy2 = shape.cpy2;\n        var 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(\n                    x1, cpx1, x2, percent, out\n                );\n                cpx1 = out[1];\n                x2 = out[2];\n                quadraticSubdivide(\n                    y1, cpy1, y2, percent, out\n                );\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(\n                    x1, cpx1, cpx2, x2, percent, out\n                );\n                cpx1 = out[1];\n                cpx2 = out[2];\n                x2 = out[3];\n                cubicSubdivide(\n                    y1, cpy1, cpy2, y2, percent, out\n                );\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     * @param  {number} t\n     * @return {Array.<number>}\n     */\n    pointAt: function (t) {\n        return someVectorAt(this.shape, t, false);\n    },\n\n    /**\n     * Get tangent at percent\n     * @param  {number} t\n     * @return {Array.<number>}\n     */\n    tangentAt: function (t) {\n        var p = someVectorAt(this.shape, t, true);\n        return vec2.normalize(p, p);\n    }\n});","/**\n * 圆形\n * @module zrender/shape/Circle\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'circle',\n\n    shape: {\n        cx: 0,\n        cy: 0,\n        r: 0\n    },\n\n\n    buildPath : function (ctx, shape, inBundle) {\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, true);\n    }\n});","/**\n * 水滴形状\n * @module zrender/graphic/shape/Droplet\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'droplet',\n\n    shape: {\n        cx: 0, cy: 0,\n        width: 0, height: 0\n    },\n\n    buildPath : function (ctx, shape) {\n        var x = shape.cx;\n        var y = shape.cy;\n        var a = shape.width;\n        var 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 * 椭圆形状\n * @module zrender/graphic/shape/Ellipse\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'ellipse',\n\n    shape: {\n        cx: 0, cy: 0,\n        rx: 0, ry: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var k = 0.5522848;\n        var x = shape.cx;\n        var y = shape.cy;\n        var a = shape.rx;\n        var b = shape.ry;\n        var ox = a * k; // 水平控制点偏移量\n        var 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 * 心形\n * @module zrender/graphic/shape/Heart\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'heart',\n\n    shape: {\n        cx: 0,\n        cy: 0,\n        width: 0,\n        height: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var x = shape.cx;\n        var y = shape.cy;\n        var a = shape.width;\n        var 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 * @module zrender/shape/Isogon\n */\n\nimport Path from '../Path';\n\nvar PI = Math.PI;\nvar sin = Math.sin;\nvar cos = Math.cos;\n\nexport default Path.extend({\n\n    type: 'isogon',\n\n    shape: {\n        x: 0, y: 0,\n        r: 0, n: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var n = shape.n;\n        if (!n || n < 2) {\n            return;\n        }\n\n        var x = shape.x;\n        var y = shape.y;\n        var r = shape.r;\n\n        var dStep = 2 * PI / n;\n        var deg = -PI / 2;\n\n        ctx.moveTo(x + r * cos(deg), y + r * sin(deg));\n        for (var 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 * 直线\n * @module zrender/graphic/shape/Line\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'line',\n\n    shape: {\n        // Start point\n        x1: 0,\n        y1: 0,\n        // End point\n        x2: 0,\n        y2: 0,\n\n        percent: 1\n    },\n\n    style: {\n        stroke: '#000',\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        var x1 = shape.x1;\n        var y1 = shape.y1;\n        var x2 = shape.x2;\n        var y2 = shape.y2;\n        var 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     * @param  {number} percent\n     * @return {Array.<number>}\n     */\n    pointAt: function (p) {\n        var 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 * Catmull-Rom spline 插值折线\n * @module zrender/shape/util/smoothSpline\n * @author pissang (https://www.github.com/pissang)\n *         Kener (@Kener-林峰, kener.linfeng@gmail.com)\n *         errorrik (errorrik@gmail.com)\n */\n\nimport {distance as v2Distance} from '../../core/vector';\n\n/**\n * @inner\n */\nfunction interpolate(p0, p1, p2, p3, t, t2, t3) {\n    var v0 = (p2 - p0) * 0.5;\n    var 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/**\n * @alias module:zrender/shape/util/smoothSpline\n * @param {Array} points 线段顶点数组\n * @param {boolean} isLoop\n * @return {Array}\n */\nexport default function (points, isLoop) {\n    var len = points.length;\n    var ret = [];\n\n    var distance = 0;\n    for (var i = 1; i < len; i++) {\n        distance += v2Distance(points[i - 1], points[i]);\n    }\n\n    var segs = distance / 2;\n    segs = segs < len ? len : segs;\n    for (var i = 0; i < segs; i++) {\n        var pos = i / (segs - 1) * (isLoop ? len : len - 1);\n        var idx = Math.floor(pos);\n\n        var w = pos - idx;\n\n        var p0;\n        var p1 = points[idx % len];\n        var p2;\n        var 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        var w2 = w * w;\n        var 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 * @module zrender/shape/util/smoothBezier\n * @author pissang (https://www.github.com/pissang)\n *         Kener (@Kener-林峰, kener.linfeng@gmail.com)\n *         errorrik (errorrik@gmail.com)\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} from '../../core/vector';\n\n/**\n * 贝塞尔平滑曲线\n * @alias module:zrender/shape/util/smoothBezier\n * @param {Array} points 线段顶点数组\n * @param {number} smooth 平滑等级, 0-1\n * @param {boolean} isLoop\n * @param {Array} constraint 将计算出来的控制点约束在一个包围盒内\n *                           比如 [[0, 0], [100, 100]], 这个包围盒会与\n *                           整个折线的包围盒做一个并集用来约束控制点。\n * @param {Array} 计算出来的控制点数组\n */\nexport default function (points, smooth, isLoop, constraint) {\n    var cps = [];\n\n    var v = [];\n    var v1 = [];\n    var v2 = [];\n    var prevPoint;\n    var nextPoint;\n\n    var min, max;\n    if (constraint) {\n        min = [Infinity, Infinity];\n        max = [-Infinity, -Infinity];\n        for (var 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 (var i = 0, len = points.length; i < len; i++) {\n        var 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        var d0 = v2Distance(point, prevPoint);\n        var d1 = v2Distance(point, nextPoint);\n        var 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        var cp0 = v2Add([], point, v1);\n        var 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';\n\nexport function buildPath(ctx, shape, closePath) {\n    var points = shape.points;\n    var smooth = shape.smooth;\n    if (points && points.length >= 2) {\n        if (smooth && smooth !== 'spline') {\n            var controlPoints = smoothBezier(\n                points, smooth, closePath, shape.smoothConstraint\n            );\n\n            ctx.moveTo(points[0][0], points[0][1]);\n            var len = points.length;\n            for (var i = 0; i < (closePath ? len : len - 1); i++) {\n                var cp1 = controlPoints[i * 2];\n                var cp2 = controlPoints[i * 2 + 1];\n                var 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 (var 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 from '../Path';\nimport * as polyHelper from '../helper/poly';\n\nexport default Path.extend({\n\n    type: 'polygon',\n\n    shape: {\n        points: null,\n\n        smooth: false,\n\n        smoothConstraint: null\n    },\n\n    buildPath: function (ctx, shape) {\n        polyHelper.buildPath(ctx, shape, true);\n    }\n});","/**\n * @module zrender/graphic/shape/Polyline\n */\n\nimport Path from '../Path';\nimport * as polyHelper from '../helper/poly';\n\nexport default Path.extend({\n\n    type: 'polyline',\n\n    shape: {\n        points: null,\n\n        smooth: false,\n\n        smoothConstraint: null\n    },\n\n    style: {\n        stroke: '#000',\n\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        polyHelper.buildPath(ctx, shape, false);\n    }\n});","/**\n * 矩形\n * @module zrender/graphic/shape/Rect\n */\n\nimport Path from '../Path';\nimport * as roundRectHelper from '../helper/roundRect';\n\nexport default Path.extend({\n\n    type: 'rect',\n\n    shape: {\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: 0,\n\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var x = shape.x;\n        var y = shape.y;\n        var width = shape.width;\n        var height = shape.height;\n        if (!shape.r) {\n            ctx.rect(x, y, width, height);\n        }\n        else {\n            roundRectHelper.buildPath(ctx, shape);\n        }\n        ctx.closePath();\n        return;\n    }\n});","/**\n * 圆环\n * @module zrender/graphic/shape/Ring\n */\n\nimport Path from '../Path';\n\nexport default Path.extend({\n\n    type: 'ring',\n\n    shape: {\n        cx: 0,\n        cy: 0,\n        r: 0,\n        r0: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var x = shape.cx;\n        var y = shape.cy;\n        var 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 * 玫瑰线\n * @module zrender/graphic/shape/Rose\n */\n\nimport Path from '../Path';\n\nvar sin = Math.sin;\nvar cos = Math.cos;\nvar radian = Math.PI / 180;\n\nexport default Path.extend({\n\n    type: 'rose',\n\n    shape: {\n        cx: 0,\n        cy: 0,\n        r: [],\n        k: 0,\n        n: 1\n    },\n\n    style: {\n        stroke: '#000',\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        var x;\n        var y;\n        var R = shape.r;\n        var r;\n        var k = shape.k;\n        var n = shape.n;\n\n        var x0 = shape.cx;\n        var y0 = shape.cy;\n\n        ctx.moveTo(x0, y0);\n\n        for (var i = 0, len = R.length; i < len ; i++) {\n            r = R[i];\n\n            for (var 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});","import env from '../../core/env';\n\n// Fix weird bug in 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\nvar shadowTemp = [\n    ['shadowBlur', 0],\n    ['shadowColor', '#000'],\n    ['shadowOffsetX', 0],\n    ['shadowOffsetY', 0]\n];\n\nexport default function (orignalBrush) {\n\n    // version string can be: '11.0'\n    return (env.browser.ie && env.browser.version >= 11)\n\n        ? function () {\n            var clipPaths = this.__clipPaths;\n            var style = this.style;\n            var modified;\n\n            if (clipPaths) {\n                for (var i = 0; i < clipPaths.length; i++) {\n                    var clipPath = clipPaths[i];\n                    var shape = clipPath && clipPath.shape;\n                    var type = clipPath && clipPath.type;\n\n                    if (shape && (\n                        (type === 'sector' && shape.startAngle === shape.endAngle)\n                        || (type === 'rect' && (!shape.width || !shape.height))\n                    )) {\n                        for (var j = 0; j < shadowTemp.length; j++) {\n                            // It is save to put shadowTemp static, because shadowTemp\n                            // will be all modified each item brush called.\n                            shadowTemp[j][2] = style[shadowTemp[j][0]];\n                            style[shadowTemp[j][0]] = shadowTemp[j][1];\n                        }\n                        modified = true;\n                        break;\n                    }\n                }\n            }\n\n            orignalBrush.apply(this, arguments);\n\n            if (modified) {\n                for (var j = 0; j < shadowTemp.length; j++) {\n                    style[shadowTemp[j][0]] = shadowTemp[j][2];\n                }\n            }\n        }\n\n        : orignalBrush;\n}\n","/**\n * 扇形\n * @module zrender/graphic/shape/Sector\n */\n\nimport Path from '../Path';\nimport fixClipWithShadow from '../helper/fixClipWithShadow';\n\nexport default Path.extend({\n\n    type: 'sector',\n\n    shape: {\n\n        cx: 0,\n\n        cy: 0,\n\n        r0: 0,\n\n        r: 0,\n\n        startAngle: 0,\n\n        endAngle: Math.PI * 2,\n\n        clockwise: true\n    },\n\n    brush: fixClipWithShadow(Path.prototype.brush),\n\n    buildPath: function (ctx, shape) {\n\n        var x = shape.cx;\n        var y = shape.cy;\n        var r0 = Math.max(shape.r0 || 0, 0);\n        var r = Math.max(shape.r, 0);\n        var startAngle = shape.startAngle;\n        var endAngle = shape.endAngle;\n        var clockwise = shape.clockwise;\n\n        var unitX = Math.cos(startAngle);\n        var unitY = Math.sin(startAngle);\n\n        ctx.moveTo(unitX * r0 + x, unitY * r0 + y);\n\n        ctx.lineTo(unitX * r + x, unitY * r + y);\n\n        ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n\n        ctx.lineTo(\n            Math.cos(endAngle) * r0 + x,\n            Math.sin(endAngle) * r0 + y\n        );\n\n        if (r0 !== 0) {\n            ctx.arc(x, y, r0, endAngle, startAngle, clockwise);\n        }\n\n        ctx.closePath();\n    }\n});","/**\n * n角星(n>3)\n * @module zrender/graphic/shape/Star\n */\n\nimport Path from '../Path';\n\nvar PI = Math.PI;\nvar cos = Math.cos;\nvar sin = Math.sin;\n\nexport default Path.extend({\n\n    type: 'star',\n\n    shape: {\n        cx: 0,\n        cy: 0,\n        n: 3,\n        r0: null,\n        r: 0\n    },\n\n    buildPath: function (ctx, shape) {\n\n        var n = shape.n;\n        if (!n || n < 2) {\n            return;\n        }\n\n        var x = shape.cx;\n        var y = shape.cy;\n        var r = shape.r;\n        var 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        var dStep = PI / n;\n        var deg = -PI / 2;\n        var xStart = x + r * cos(deg);\n        var yStart = y + r * sin(deg);\n        deg += dStep;\n\n        // 记录边界点,用于判断inside\n        ctx.moveTo(xStart, yStart);\n        for (var 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 * 内外旋轮曲线\n * @module zrender/graphic/shape/Trochold\n */\n\nimport Path from '../Path';\n\nvar cos = Math.cos;\nvar sin = Math.sin;\n\nexport default Path.extend({\n\n    type: 'trochoid',\n\n    shape: {\n        cx: 0,\n        cy: 0,\n        r: 0,\n        r0: 0,\n        d: 0,\n        location: 'out'\n    },\n\n    style: {\n        stroke: '#000',\n\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        var x1;\n        var y1;\n        var x2;\n        var y2;\n        var R = shape.r;\n        var r = shape.r0;\n        var d = shape.d;\n        var offsetX = shape.cx;\n        var offsetY = shape.cy;\n        var delta = shape.location == 'out' ? 1 : -1;\n\n        if (shape.location && R <= r) {\n            return;\n        }\n\n        var num = 0;\n        var i = 1;\n        var 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/**\n * @param {Array.<Object>} colorStops\n */\nvar Gradient = function (colorStops) {\n\n    this.colorStops = colorStops || [];\n\n};\n\nGradient.prototype = {\n\n    constructor: Gradient,\n\n    addColorStop: function (offset, color) {\n        this.colorStops.push({\n\n            offset: offset,\n\n            color: color\n        });\n    }\n\n};\n\nexport default Gradient;","import * as zrUtil from '../core/util';\nimport Gradient from './Gradient';\n\n/**\n * x, y, x2, y2 are all percent from 0 to 1\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @param {number} [x2=1]\n * @param {number} [y2=0]\n * @param {Array.<Object>} colorStops\n * @param {boolean} [globalCoord=false]\n */\nvar LinearGradient = function (x, y, x2, y2, colorStops, globalCoord) {\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    Gradient.call(this, colorStops);\n};\n\nLinearGradient.prototype = {\n\n    constructor: LinearGradient\n};\n\nzrUtil.inherits(LinearGradient, Gradient);\n\nexport default LinearGradient;","import * as zrUtil from '../core/util';\nimport Gradient from './Gradient';\n\n/**\n * x, y, r are all percent from 0 to 1\n * @param {number} [x=0.5]\n * @param {number} [y=0.5]\n * @param {number} [r=0.5]\n * @param {Array.<Object>} [colorStops]\n * @param {boolean} [globalCoord=false]\n */\nvar RadialGradient = function (x, y, r, colorStops, globalCoord) {\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\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    Gradient.call(this, colorStops);\n};\n\nRadialGradient.prototype = {\n\n    constructor: RadialGradient\n};\n\nzrUtil.inherits(RadialGradient, Gradient);\n\nexport default RadialGradient;","/**\n * Do not mount those modules on 'src/zrender' for better tree shaking.\n */\n\nimport * as zrUtil from './core/util';\nimport * as matrix from './core/matrix';\nimport * as vector from './core/vector';\nimport * as colorTool from './tool/color';\nimport * as pathTool from './tool/path';\n\n\nexport {default as Group} from './container/Group';\nexport {default as Path} from './graphic/Path';\nexport {default as Image} from './graphic/Image';\nexport {default as CompoundPath} from './graphic/CompoundPath';\nexport {default as Text} from './graphic/Text';\nexport {default as IncrementalDisplayable} from './graphic/IncrementalDisplayable';\n\nexport {default as Arc} from './graphic/shape/Arc';\nexport {default as BezierCurve} from './graphic/shape/BezierCurve';\nexport {default as Circle} from './graphic/shape/Circle';\nexport {default as Droplet} from './graphic/shape/Droplet';\nexport {default as Ellipse} from './graphic/shape/Ellipse';\nexport {default as Heart} from './graphic/shape/Heart';\nexport {default as Isogon} from './graphic/shape/Isogon';\nexport {default as Line} from './graphic/shape/Line';\nexport {default as Polygon} from './graphic/shape/Polygon';\nexport {default as Polyline} from './graphic/shape/Polyline';\nexport {default as Rect} from './graphic/shape/Rect';\nexport {default as Ring} from './graphic/shape/Ring';\nexport {default as Rose} from './graphic/shape/Rose';\nexport {default as Sector} from './graphic/shape/Sector';\nexport {default as Star} from './graphic/shape/Star';\nexport {default as Trochoid} from './graphic/shape/Trochoid';\n\nexport {default as LinearGradient} from './graphic/LinearGradient';\nexport {default as RadialGradient} from './graphic/RadialGradient';\nexport {default as Pattern} from './graphic/Pattern';\nexport {default as BoundingRect} from './core/BoundingRect';\n\nexport {matrix};\nexport {vector};\nexport {colorTool as color};\nexport {pathTool as path};\nexport {zrUtil as util};\n","\nvar svgURI = 'http://www.w3.org/2000/svg';\n\nexport function createElement(name) {\n    return document.createElementNS(svgURI, name);\n}","// TODO\n// 1. shadow\n// 2. Image: sx, sy, sw, sh\n\nimport {createElement} from './core';\nimport PathProxy from '../core/PathProxy';\nimport BoundingRect from '../core/BoundingRect';\nimport * as matrix from '../core/matrix';\nimport * as textContain from '../contain/text';\nimport * as textHelper from '../graphic/helper/text';\nimport Text from '../graphic/Text';\n\nvar CMD = PathProxy.CMD;\nvar arrayJoin = Array.prototype.join;\n\nvar NONE = 'none';\nvar mathRound = Math.round;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\nvar PI2 = Math.PI * 2;\nvar degree = 180 / PI;\n\nvar EPSILON = 1e-4;\n\nfunction round4(val) {\n    return mathRound(val * 1e4) / 1e4;\n}\n\nfunction isAroundZero(val) {\n    return val < EPSILON && val > -EPSILON;\n}\n\nfunction pathHasFill(style, isText) {\n    var fill = isText ? style.textFill : style.fill;\n    return fill != null && fill !== NONE;\n}\n\nfunction pathHasStroke(style, isText) {\n    var stroke = isText ? style.textStroke : style.stroke;\n    return stroke != null && stroke !== NONE;\n}\n\nfunction setTransform(svgEl, m) {\n    if (m) {\n        attr(svgEl, 'transform', 'matrix(' + arrayJoin.call(m, ',') + ')');\n    }\n}\n\nfunction attr(el, key, val) {\n    if (!val || val.type !== 'linear' && val.type !== 'radial') {\n        // Don't set attribute for gradient, since it need new dom nodes\n        if (typeof val === 'string' && val.indexOf('NaN') > -1) {\n            console.log(val);\n        }\n        el.setAttribute(key, val);\n    }\n}\n\nfunction attrXLink(el, key, val) {\n    el.setAttributeNS('http://www.w3.org/1999/xlink', key, val);\n}\n\nfunction bindStyle(svgEl, style, isText) {\n    if (pathHasFill(style, isText)) {\n        var fill = isText ? style.textFill : style.fill;\n        fill = fill === 'transparent' ? NONE : fill;\n\n        /**\n         * FIXME:\n         * This is a temporary fix for Chrome's clipping bug\n         * that happens when a clip-path is referring another one.\n         * This fix should be used before Chrome's bug is fixed.\n         * For an element that has clip-path, and fill is none,\n         * set it to be \"rgba(0, 0, 0, 0.002)\" will hide the element.\n         * Otherwise, it will show black fill color.\n         * 0.002 is used because this won't work for alpha values smaller\n         * than 0.002.\n         *\n         * See\n         * https://bugs.chromium.org/p/chromium/issues/detail?id=659790\n         * for more information.\n         */\n        if (svgEl.getAttribute('clip-path') !== 'none' && fill === NONE) {\n            fill = 'rgba(0, 0, 0, 0.002)';\n        }\n\n        attr(svgEl, 'fill', fill);\n        attr(svgEl, 'fill-opacity', style.opacity);\n    }\n    else {\n        attr(svgEl, 'fill', NONE);\n    }\n\n    if (pathHasStroke(style, isText)) {\n        var stroke = isText ? style.textStroke : style.stroke;\n        stroke = stroke === 'transparent' ? NONE : stroke;\n        attr(svgEl, 'stroke', stroke);\n        var strokeWidth = isText\n            ? style.textStrokeWidth\n            : style.lineWidth;\n        var strokeScale = !isText && style.strokeNoScale\n            ? style.host.getLineScale()\n            : 1;\n        attr(svgEl, 'stroke-width', strokeWidth / strokeScale);\n        // stroke then fill for text; fill then stroke for others\n        attr(svgEl, 'paint-order', isText ? 'stroke' : 'fill');\n        attr(svgEl, 'stroke-opacity', style.opacity);\n        var lineDash = style.lineDash;\n        if (lineDash) {\n            attr(svgEl, 'stroke-dasharray', style.lineDash.join(','));\n            attr(svgEl, 'stroke-dashoffset', mathRound(style.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\n/***************************************************\n * PATH\n **************************************************/\nfunction pathDataToString(path) {\n    var str = [];\n    var data = path.data;\n    var dataLength = path.len();\n    for (var i = 0; i < dataLength;) {\n        var cmd = data[i++];\n        var cmdStr = '';\n        var nData = 0;\n        switch (cmd) {\n            case CMD.M:\n                cmdStr = 'M';\n                nData = 2;\n                break;\n            case CMD.L:\n                cmdStr = 'L';\n                nData = 2;\n                break;\n            case CMD.Q:\n                cmdStr = 'Q';\n                nData = 4;\n                break;\n            case CMD.C:\n                cmdStr = 'C';\n                nData = 6;\n                break;\n            case CMD.A:\n                var cx = data[i++];\n                var cy = data[i++];\n                var rx = data[i++];\n                var ry = data[i++];\n                var theta = data[i++];\n                var dTheta = data[i++];\n                var psi = data[i++];\n                var clockwise = data[i++];\n\n                var dThetaPositive = Math.abs(dTheta);\n                var isCircle = isAroundZero(dThetaPositive - PI2)\n                    && !isAroundZero(dThetaPositive);\n\n                var large = false;\n                if (dThetaPositive >= PI2) {\n                    large = true;\n                }\n                else if (isAroundZero(dThetaPositive)) {\n                    large = false;\n                }\n                else {\n                    large = (dTheta > -PI && dTheta < 0 || dTheta > PI)\n                        === !!clockwise;\n                }\n\n                var x0 = round4(cx + rx * mathCos(theta));\n                var y0 = round4(cy + ry * mathSin(theta));\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 (i === 9) {\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                        str.push('M', x0, y0);\n                    }\n                }\n\n                var x = round4(cx + rx * mathCos(theta + dTheta));\n                var y = round4(cy + ry * mathSin(theta + dTheta));\n\n                // FIXME Ellipse\n                str.push('A', round4(rx), round4(ry),\n                    mathRound(psi * degree), +large, +clockwise, x, y);\n                break;\n            case CMD.Z:\n                cmdStr = 'Z';\n                break;\n            case CMD.R:\n                var x = round4(data[i++]);\n                var y = round4(data[i++]);\n                var w = round4(data[i++]);\n                var h = round4(data[i++]);\n                str.push(\n                    'M', x, y,\n                    'L', x + w, y,\n                    'L', x + w, y + h,\n                    'L', x, y + h,\n                    'L', x, y\n                );\n                break;\n        }\n        cmdStr && str.push(cmdStr);\n        for (var j = 0; j < nData; j++) {\n            // PENDING With scale\n            str.push(round4(data[i++]));\n        }\n    }\n    return str.join(' ');\n}\n\nvar svgPath = {};\nexport {svgPath as path};\n\nsvgPath.brush = function (el) {\n    var style = el.style;\n\n    var 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    var path = el.path;\n\n    if (el.__dirtyPath) {\n        path.beginPath();\n        el.buildPath(path, el.shape);\n        el.__dirtyPath = false;\n\n        var pathStr = pathDataToString(path);\n        if (pathStr.indexOf('NaN') < 0) {\n            // Ignore illegal path, which may happen such in out-of-range\n            // data in Calendar series.\n            attr(svgEl, 'd', pathStr);\n        }\n    }\n\n    bindStyle(svgEl, style);\n    setTransform(svgEl, el.transform);\n\n    if (style.text != null) {\n        svgTextDrawRectText(el, el.getBoundingRect());\n    }\n};\n\n/***************************************************\n * IMAGE\n **************************************************/\nvar svgImage = {};\nexport {svgImage as image};\n\nsvgImage.brush = function (el) {\n    var style = el.style;\n    var image = style.image;\n\n    if (image instanceof HTMLImageElement) {\n        var src = image.src;\n        image = src;\n    }\n    if (! image) {\n        return;\n    }\n\n    var x = style.x || 0;\n    var y = style.y || 0;\n\n    var dw = style.width;\n    var dh = style.height;\n\n    var 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);\n        // Caching image src\n        el.__imageSrc = image;\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    setTransform(svgEl, el.transform);\n\n    if (style.text != null) {\n        svgTextDrawRectText(el, el.getBoundingRect());\n    }\n};\n\n/***************************************************\n * TEXT\n **************************************************/\nvar svgText = {};\nexport {svgText as text};\nvar tmpRect = new BoundingRect();\n\nvar svgTextDrawRectText = function (el, rect, textRect) {\n    var style = el.style;\n\n    el.__dirty && textHelper.normalizeTextStyle(style, true);\n\n    var text = style.text;\n    // Convert to string\n    if (text == null) {\n        // Draw no text only when text is set to null, but not ''\n        return;\n    }\n    else {\n        text += '';\n    }\n\n    var textSvgEl = el.__textSvgEl;\n    if (! textSvgEl) {\n        textSvgEl = createElement('text');\n        el.__textSvgEl = textSvgEl;\n    }\n\n    var x;\n    var y;\n    var textPosition = style.textPosition;\n    var distance = style.textDistance;\n    var align = style.textAlign || 'left';\n\n    if (typeof style.fontSize === 'number') {\n        style.fontSize += 'px';\n    }\n    var font = style.font\n        || [\n            style.fontStyle || '',\n            style.fontWeight || '',\n            style.fontSize || '',\n            style.fontFamily || ''\n        ].join(' ')\n        || textContain.DEFAULT_FONT;\n\n    var verticalAlign = getVerticalAlignForSvg(style.textVerticalAlign);\n\n    textRect = textContain.getBoundingRect(text, font, align,\n        verticalAlign);\n\n    var lineHeight = textRect.lineHeight;\n    // Text position represented by coord\n    if (textPosition instanceof Array) {\n        x = rect.x + textPosition[0];\n        y = rect.y + textPosition[1];\n    }\n    else {\n        var newPos = textContain.adjustTextPositionOnRect(\n            textPosition, rect, distance\n        );\n        x = newPos.x;\n        y = newPos.y;\n        verticalAlign = getVerticalAlignForSvg(newPos.textVerticalAlign);\n        align = newPos.textAlign;\n    }\n\n    attr(textSvgEl, 'alignment-baseline', verticalAlign);\n\n    if (font) {\n        textSvgEl.style.font = font;\n    }\n\n    var textPadding = style.textPadding;\n\n    // Make baseline top\n    attr(textSvgEl, 'x', x);\n    attr(textSvgEl, 'y', y);\n\n    bindStyle(textSvgEl, style, true);\n    if (el instanceof Text || el.style.transformText) {\n        // Transform text with element\n        setTransform(textSvgEl, el.transform);\n    }\n    else {\n        if (el.transform) {\n            tmpRect.copy(rect);\n            tmpRect.applyTransform(el.transform);\n            rect = tmpRect;\n        }\n        else {\n            var pos = el.transformCoordToGlobal(rect.x, rect.y);\n            rect.x = pos[0];\n            rect.y = pos[1];\n        }\n\n        // Text rotation, but no element transform\n        var origin = style.textOrigin;\n        if (origin === 'center') {\n            x = textRect.width / 2 + x;\n            y = textRect.height / 2 + y;\n        }\n        else if (origin) {\n            x = origin[0] + x;\n            y = origin[1] + y;\n        }\n        var rotate = -style.textRotation || 0;\n        var transform = matrix.create();\n        // Apply textRotate to element matrix\n        matrix.rotate(transform, el.transform, rotate);\n        setTransform(textSvgEl, transform);\n    }\n\n    var textLines = text.split('\\n');\n    var nTextLines = textLines.length;\n    var textAnchor = align;\n    // PENDING\n    if (textAnchor === 'left')  {\n        textAnchor = 'start';\n        textPadding && (x += textPadding[3]);\n    }\n    else if (textAnchor === 'right') {\n        textAnchor = 'end';\n        textPadding && (x -= textPadding[1]);\n    }\n    else if (textAnchor === 'center') {\n        textAnchor = 'middle';\n        textPadding && (x += (textPadding[3] - textPadding[1]) / 2);\n    }\n\n    var dy = 0;\n    if (verticalAlign === 'baseline') {\n        dy = -textRect.height + lineHeight;\n        textPadding && (dy -= textPadding[2]);\n    }\n    else if (verticalAlign === 'middle') {\n        dy = (-textRect.height + lineHeight) / 2;\n        textPadding && (y += (textPadding[0] - textPadding[2]) / 2);\n    }\n    else {\n        textPadding && (dy += textPadding[0]);\n    }\n\n    // Font may affect position of each tspan elements\n    if (el.__text !== text || el.__textFont !== font) {\n        var tspanList = el.__tspanList || [];\n        el.__tspanList = tspanList;\n        for (var i = 0; i < nTextLines; i++) {\n            // Using cached tspan elements\n            var tspan = tspanList[i];\n            if (! tspan) {\n                tspan = tspanList[i] = createElement('tspan');\n                textSvgEl.appendChild(tspan);\n                attr(tspan, 'alignment-baseline', verticalAlign);\n                attr(tspan, 'text-anchor', textAnchor);\n            }\n            else {\n                tspan.innerHTML = '';\n            }\n            attr(tspan, 'x', x);\n            attr(tspan, 'y', y + i * lineHeight + dy);\n            tspan.appendChild(document.createTextNode(textLines[i]));\n        }\n        // Remove unsed tspan elements\n        for (; i < tspanList.length; i++) {\n            textSvgEl.removeChild(tspanList[i]);\n        }\n        tspanList.length = nTextLines;\n\n        el.__text = text;\n        el.__textFont = font;\n    }\n    else if (el.__tspanList.length) {\n        // Update span x and y\n        var len = el.__tspanList.length;\n        for (var i = 0; i < len; ++i) {\n            var tspan = el.__tspanList[i];\n            if (tspan) {\n                attr(tspan, 'x', x);\n                attr(tspan, 'y', y + i * lineHeight + dy);\n            }\n        }\n    }\n};\n\nfunction getVerticalAlignForSvg(verticalAlign) {\n    if (verticalAlign === 'middle') {\n        return 'middle';\n    }\n    else if (verticalAlign === 'bottom') {\n        return 'baseline';\n    }\n    else {\n        return 'hanging';\n    }\n}\n\nsvgText.drawRectText = svgTextDrawRectText;\n\nsvgText.brush = function (el) {\n    var style = el.style;\n    if (style.text != null) {\n        // 强制设置 textPosition\n        style.textPosition = [0, 0];\n        svgTextDrawRectText(el, {\n            x: style.x || 0, y: style.y || 0,\n            width: 0, height: 0\n        }, el.getBoundingRect());\n    }\n};\n","// Myers' Diff Algorithm\n// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js\n\nfunction Diff() {}\n\nDiff.prototype = {\n    diff: function (oldArr, newArr, equals) {\n        if (!equals) {\n            equals = function (a, b) {\n                return a === b;\n            };\n        }\n        this.equals = equals;\n\n        var self = this;\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 = [{ newPos: -1, components: [] }];\n\n        // Seed editLength = 0, i.e. the content starts with the same values\n        var oldPos = this.extractCommon(bestPath[0], newArr, oldArr, 0);\n        if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n            var indices = [];\n            for (var i = 0; i < newArr.length; i++) {\n                indices.push(i);\n            }\n            // Identity per the equality and tokenizer\n            return [{\n                indices: indices, count: newArr.length\n            }];\n        }\n\n        // Main worker method. checks all permutations of a given edit length for acceptance.\n        function execEditLength() {\n            for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n                var basePath;\n                var addPath = bestPath[diagonalPath - 1];\n                var removePath = bestPath[diagonalPath + 1];\n                var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n                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                    self.pushComponent(basePath.components, undefined, true);\n                }\n                else {\n                    basePath = addPath;   // No need to clone, we've pulled it from the list\n                    basePath.newPos++;\n                    self.pushComponent(basePath.components, true, undefined);\n                }\n\n                oldPos = self.extractCommon(basePath, newArr, oldArr, diagonalPath);\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(self, basePath.components, newArr, oldArr);\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\n    pushComponent: function (components, added, removed) {\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] = {count: last.count + 1, added: added, removed: removed };\n        }\n        else {\n            components.push({count: 1, added: added, removed: removed });\n        }\n    },\n    extractCommon: function (basePath, newArr, oldArr, diagonalPath) {\n        var newLen = newArr.length;\n        var oldLen = oldArr.length;\n        var newPos = basePath.newPos;\n        var oldPos = newPos - diagonalPath;\n        var commonCount = 0;\n\n        while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newArr[newPos + 1], oldArr[oldPos + 1])) {\n            newPos++;\n            oldPos++;\n            commonCount++;\n        }\n\n        if (commonCount) {\n            basePath.components.push({count: commonCount});\n        }\n\n        basePath.newPos = newPos;\n        return oldPos;\n    },\n    tokenize: function (value) {\n        return value.slice();\n    },\n    join: function (value) {\n        return value.slice();\n    }\n};\n\nfunction buildValues(diff, components, newArr, oldArr) {\n    var componentPos = 0;\n    var componentLen = components.length;\n    var newPos = 0;\n    var oldPos = 0;\n\n    for (; componentPos < componentLen; componentPos++) {\n        var component = components[componentPos];\n        if (!component.removed) {\n            var indices = [];\n            for (var 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            var indices = [];\n            for (var i = oldPos; i < oldPos + component.count; i++) {\n                indices.push(i);\n            }\n            component.indices = indices;\n            oldPos += component.count;\n        }\n    }\n\n    return components;\n}\n\nfunction clonePath(path) {\n    return { newPos: path.newPos, components: path.components.slice(0) };\n}\n\nvar arrayDiff = new Diff();\n\nexport default function (oldArr, newArr, callback) {\n    return arrayDiff.diff(oldArr, newArr, callback);\n}","/**\n * @file Manages elements that can be defined in <defs> 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 ZImage from '../../graphic/Image';\nimport ZText from '../../graphic/Text';\nimport {\n    path as svgPath,\n    image as svgImage,\n    text as svgText,\n} from '../graphic';\n\n\nvar MARK_UNUSED = '0';\nvar MARK_USED = '1';\n\n/**\n * Manages elements that can be defined in <defs> in SVG,\n * e.g., gradients, clip path, etc.\n *\n * @class\n * @param {number}          zrId      zrender instance id\n * @param {SVGElement}      svgRoot   root of SVG document\n * @param {string|string[]} tagNames  possible tag names\n * @param {string}          markLabel label name to make if the element\n *                                    is used\n */\nfunction Definable(\n    zrId,\n    svgRoot,\n    tagNames,\n    markLabel,\n    domName\n) {\n    this._zrId = zrId;\n    this._svgRoot = svgRoot;\n    this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames;\n    this._markLabel = markLabel;\n    this._domName = domName || '_dom';\n\n    this.nextId = 0;\n}\n\n\nDefinable.prototype.createElement = createElement;\n\n\n/**\n * Get the <defs> tag for svgRoot; optionally creates one if not exists.\n *\n * @param {boolean} isForceCreating if need to create when not exists\n * @return {SVGDefsElement} SVG <defs> element, null if it doesn't\n * exist and isForceCreating is false\n */\nDefinable.prototype.getDefs = function (isForceCreating) {\n    var svgRoot = this._svgRoot;\n    var defs = this._svgRoot.getElementsByTagName('defs');\n    if (defs.length === 0) {\n        // Not exist\n        if (isForceCreating) {\n            defs = svgRoot.insertBefore(\n                this.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                    var children = defs.children;\n                    if (!children) {\n                        return false;\n                    }\n                    for (var 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 {Object|string} element style element. e.g., for gradient,\n *                                it may be '#ccc' or {type: 'linear', ...}\n * @param {Function|undefined} onUpdate update callback\n */\nDefinable.prototype.update = function (element, onUpdate) {\n    if (!element) {\n        return;\n    }\n\n    var defs = this.getDefs(false);\n    if (element[this._domName] && defs.contains(element[this._domName])) {\n        // Update DOM\n        if (typeof onUpdate === 'function') {\n            onUpdate(element);\n        }\n    }\n    else {\n        // No previous dom, create new\n        var dom = this.add(element);\n        if (dom) {\n            element[this._domName] = dom;\n        }\n    }\n};\n\n\n/**\n * Add gradient dom to defs\n *\n * @param {SVGElement} dom DOM to be added to <defs>\n */\nDefinable.prototype.addDom = function (dom) {\n    var defs = this.getDefs(true);\n    defs.appendChild(dom);\n};\n\n\n/**\n * Remove DOM of a given element.\n *\n * @param {SVGElement} element element to remove dom\n */\nDefinable.prototype.removeDom = function (element) {\n    var defs = this.getDefs(false);\n    if (defs && element[this._domName]) {\n        defs.removeChild(element[this._domName]);\n        element[this._domName] = null;\n    }\n};\n\n\n/**\n * Get DOMs of this element.\n *\n * @return {HTMLDomElement} doms of this defineable elements in <defs>\n */\nDefinable.prototype.getDoms = function () {\n    var defs = this.getDefs(false);\n    if (!defs) {\n        // No dom when defs is not defined\n        return [];\n    }\n\n    var doms = [];\n    zrUtil.each(this._tagNames, function (tagName) {\n        var tags = defs.getElementsByTagName(tagName);\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        doms = doms.concat([].slice.call(tags));\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 */\nDefinable.prototype.markAllUnused = function () {\n    var doms = this.getDoms();\n    var that = this;\n    zrUtil.each(doms, function (dom) {\n        dom[that._markLabel] = MARK_UNUSED;\n    });\n};\n\n\n/**\n * Mark a single DOM to be used.\n *\n * @param {SVGElement} dom DOM to mark\n */\nDefinable.prototype.markUsed = function (dom) {\n    if (dom) {\n        dom[this._markLabel] = MARK_USED;\n    }\n};\n\n\n/**\n * Remove unused DOMs defined in <defs>\n */\nDefinable.prototype.removeUnused = function () {\n    var defs = this.getDefs(false);\n    if (!defs) {\n        // Nothing to remove\n        return;\n    }\n\n    var doms = this.getDoms();\n    var that = this;\n    zrUtil.each(doms, function (dom) {\n        if (dom[that._markLabel] !== MARK_USED) {\n            // Remove gradient\n            defs.removeChild(dom);\n        }\n    });\n};\n\n\n/**\n * Get SVG proxy.\n *\n * @param {Displayable} displayable displayable element\n * @return {Path|Image|Text} svg proxy of given element\n */\nDefinable.prototype.getSvgProxy = function (displayable) {\n    if (displayable instanceof Path) {\n        return svgPath;\n    }\n    else if (displayable instanceof ZImage) {\n        return svgImage;\n    }\n    else if (displayable instanceof ZText) {\n        return svgText;\n    }\n    else {\n        return svgPath;\n    }\n};\n\n\n/**\n * Get text SVG element.\n *\n * @param {Displayable} displayable displayable element\n * @return {SVGElement} SVG element of text\n */\nDefinable.prototype.getTextSvgElement = function (displayable) {\n    return displayable.__textSvgEl;\n};\n\n\n/**\n * Get SVG element.\n *\n * @param {Displayable} displayable displayable element\n * @return {SVGElement} SVG element\n */\nDefinable.prototype.getSvgElement = function (displayable) {\n    return displayable.__svgEl;\n};\n\n\nexport default Definable;\n","/**\n * @file Manages SVG gradient elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport zrLog from '../../core/log';\n\n/**\n * Manages SVG gradient elements.\n *\n * @class\n * @extends Definable\n * @param   {number}     zrId    zrender instance id\n * @param   {SVGElement} svgRoot root of SVG document\n */\nfunction GradientManager(zrId, svgRoot) {\n    Definable.call(\n        this,\n        zrId,\n        svgRoot,\n        ['linearGradient', 'radialGradient'],\n        '__gradient_in_use__'\n    );\n}\n\n\nzrUtil.inherits(GradientManager, Definable);\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}  svgElement   SVG element to paint\n * @param {Displayable} displayable  zrender displayable element\n */\nGradientManager.prototype.addWithoutUpdate = function (\n    svgElement,\n    displayable\n) {\n    if (displayable && displayable.style) {\n        var that = this;\n        zrUtil.each(['fill', 'stroke'], function (fillOrStroke) {\n            if (displayable.style[fillOrStroke]\n                && (displayable.style[fillOrStroke].type === 'linear'\n                || displayable.style[fillOrStroke].type === 'radial')\n            ) {\n                var gradient = displayable.style[fillOrStroke];\n                var defs = that.getDefs(true);\n\n                // Create dom in <defs> if not exists\n                var 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                var id = dom.getAttribute('id');\n                svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n            }\n        });\n    }\n};\n\n\n/**\n * Add a new gradient tag in <defs>\n *\n * @param   {Gradient} gradient zr gradient instance\n * @return {SVGLinearGradientElement | SVGRadialGradientElement}\n *                            created DOM\n */\nGradientManager.prototype.add = function (gradient) {\n    var dom;\n    if (gradient.type === 'linear') {\n        dom = this.createElement('linearGradient');\n    }\n    else if (gradient.type === 'radial') {\n        dom = this.createElement('radialGradient');\n    }\n    else {\n        zrLog('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} gradient zr gradient instance\n */\nGradientManager.prototype.update = function (gradient) {\n    var that = this;\n    Definable.prototype.update.call(this, gradient, function () {\n        var type = gradient.type;\n        var tagName = gradient._dom.tagName;\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._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} gradient zr gradient instance\n * @param {SVGLinearGradientElement | SVGRadialGradientElement} dom\n *                            DOM to update\n */\nGradientManager.prototype.updateDom = function (gradient, dom) {\n    if (gradient.type === 'linear') {\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 (gradient.type === 'radial') {\n        dom.setAttribute('cx', gradient.x);\n        dom.setAttribute('cy', gradient.y);\n        dom.setAttribute('r', gradient.r);\n    }\n    else {\n        zrLog('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    var colors = gradient.colorStops;\n    for (var i = 0, len = colors.length; i < len; ++i) {\n        var stop = this.createElement('stop');\n        stop.setAttribute('offset', colors[i].offset * 100 + '%');\n        stop.setAttribute('stop-color', colors[i].color);\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._dom = dom;\n};\n\n/**\n * Mark a single gradient to be used\n *\n * @param {Displayable} displayable displayable element\n */\nGradientManager.prototype.markUsed = function (displayable) {\n    if (displayable.style) {\n        var gradient = displayable.style.fill;\n        if (gradient && gradient._dom) {\n            Definable.prototype.markUsed.call(this, gradient._dom);\n        }\n\n        gradient = displayable.style.stroke;\n        if (gradient && gradient._dom) {\n            Definable.prototype.markUsed.call(this, gradient._dom);\n        }\n    }\n};\n\n\nexport default GradientManager;\n","/**\n * @file Manages SVG clipPath elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\nimport * as matrix from '../../core/matrix';\n\n/**\n * Manages SVG clipPath elements.\n *\n * @class\n * @extends Definable\n * @param   {number}     zrId    zrender instance id\n * @param   {SVGElement} svgRoot root of SVG document\n */\nfunction ClippathManager(zrId, svgRoot) {\n    Definable.call(this, zrId, svgRoot, 'clipPath', '__clippath_in_use__');\n}\n\n\nzrUtil.inherits(ClippathManager, Definable);\n\n\n/**\n * Update clipPath.\n *\n * @param {Displayable} displayable displayable element\n */\nClippathManager.prototype.update = function (displayable) {\n    var svgEl = this.getSvgElement(displayable);\n    if (svgEl) {\n        this.updateDom(svgEl, displayable.__clipPaths, false);\n    }\n\n    var textEl = this.getTextSvgElement(displayable);\n    if (textEl) {\n        // Make another clipPath for text, since it's transform\n        // matrix is not the same with svgElement\n        this.updateDom(textEl, displayable.__clipPaths, true);\n    }\n\n    this.markUsed(displayable);\n};\n\n\n/**\n * Create an SVGElement of displayable and create a <clipPath> of its\n * clipPath\n *\n * @param {Displayable} parentEl  parent element\n * @param {ClipPath[]}  clipPaths clipPaths of parent element\n * @param {boolean}     isText    if parent element is Text\n */\nClippathManager.prototype.updateDom = function (\n    parentEl,\n    clipPaths,\n    isText\n) {\n    if (clipPaths && clipPaths.length > 0) {\n        // Has clipPath, create <clipPath> with the first clipPath\n        var defs = this.getDefs(true);\n        var clipPath = clipPaths[0];\n        var clipPathEl;\n        var id;\n\n        var dom = isText ? '_textDom' : '_dom';\n\n        if (clipPath[dom]) {\n            // Use a dom that is already in <defs>\n            id = clipPath[dom].getAttribute('id');\n            clipPathEl = clipPath[dom];\n\n            // Use a dom that is already in <defs>\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 <clipPath>\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 <clipPath>\n        var svgProxy = this.getSvgProxy(clipPath);\n        if (clipPath.transform\n            && clipPath.parent.invTransform\n            && !isText\n        ) {\n            /**\n             * If a clipPath has a parent with transform, the transform\n             * of parent should not be considered when setting transform\n             * of clipPath. So we need to transform back from parent's\n             * transform, which is done by multiplying parent's inverse\n             * transform.\n             */\n            // Store old transform\n            var transform = Array.prototype.slice.call(\n                clipPath.transform\n            );\n\n            // Transform back from parent, and brush path\n            matrix.mul(\n                clipPath.transform,\n                clipPath.parent.invTransform,\n                clipPath.transform\n            );\n            svgProxy.brush(clipPath);\n\n            // Set back transform of clipPath\n            clipPath.transform = transform;\n        }\n        else {\n            svgProxy.brush(clipPath);\n        }\n\n        var pathEl = this.getSvgElement(clipPath);\n\n        clipPathEl.innerHTML = '';\n        /**\n         * Use `cloneNode()` here to appendChild to multiple parents,\n         * which may happend when Text and other shapes are using the same\n         * clipPath. Since Text will create an extra clipPath DOM due to\n         * different transform rules.\n         */\n        clipPathEl.appendChild(pathEl.cloneNode());\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), isText);\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 displayable element\n */\nClippathManager.prototype.markUsed = function (displayable) {\n    var that = this;\n    if (displayable.__clipPaths && displayable.__clipPaths.length > 0) {\n        zrUtil.each(displayable.__clipPaths, function (clipPath) {\n            if (clipPath._dom) {\n                Definable.prototype.markUsed.call(that, clipPath._dom);\n            }\n            if (clipPath._textDom) {\n                Definable.prototype.markUsed.call(that, clipPath._textDom);\n            }\n        });\n    }\n};\n\n\nexport default ClippathManager;\n","/**\n * @file Manages SVG shadow elements.\n * @author Zhang Wenli\n */\n\nimport Definable from './Definable';\nimport * as zrUtil from '../../core/util';\n\n/**\n * Manages SVG shadow elements.\n *\n * @class\n * @extends Definable\n * @param   {number}     zrId    zrender instance id\n * @param   {SVGElement} svgRoot root of SVG document\n */\nfunction ShadowManager(zrId, svgRoot) {\n    Definable.call(\n        this,\n        zrId,\n        svgRoot,\n        ['filter'],\n        '__filter_in_use__',\n        '_shadowDom'\n    );\n}\n\n\nzrUtil.inherits(ShadowManager, Definable);\n\n\n/**\n * Create new shadow DOM for fill or stroke if not exist,\n * but will not update shadow if exists.\n *\n * @param {SvgElement}  svgElement   SVG element to paint\n * @param {Displayable} displayable  zrender displayable element\n */\nShadowManager.prototype.addWithoutUpdate = function (\n    svgElement,\n    displayable\n) {\n    if (displayable && hasShadow(displayable.style)) {\n        var style = displayable.style;\n\n        // Create dom in <defs> if not exists\n        var dom;\n        if (style._shadowDom) {\n            // Gradient exists\n            dom = style._shadowDom;\n\n            var defs = this.getDefs(true);\n            if (!defs.contains(style._shadowDom)) {\n                // _shadowDom is no longer in defs, recreate\n                this.addDom(dom);\n            }\n        }\n        else {\n            // New dom\n            dom = this.add(displayable);\n        }\n\n        this.markUsed(displayable);\n\n        var id = dom.getAttribute('id');\n        svgElement.style.filter = 'url(#' + id + ')';\n    }\n};\n\n\n/**\n * Add a new shadow tag in <defs>\n *\n * @param {Displayable} displayable  zrender displayable element\n * @return {SVGFilterElement} created DOM\n */\nShadowManager.prototype.add = function (displayable) {\n    var dom = this.createElement('filter');\n    var style = displayable.style;\n\n    // Set dom id with shadow id, since each shadow 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    style._shadowDomId = style._shadowDomId || this.nextId++;\n    dom.setAttribute('id', 'zr' + this._zrId\n        + '-shadow-' + style._shadowDomId);\n\n    this.updateDom(displayable, dom);\n    this.addDom(dom);\n\n    return dom;\n};\n\n\n/**\n * Update shadow.\n *\n * @param {Displayable} displayable  zrender displayable element\n */\nShadowManager.prototype.update = function (svgElement, displayable) {\n    var style = displayable.style;\n    if (hasShadow(style)) {\n        var that = this;\n        Definable.prototype.update.call(this, displayable, function (style) {\n            that.updateDom(displayable, style._shadowDom);\n        });\n    }\n    else {\n        // Remove shadow\n        this.remove(svgElement, style);\n    }\n};\n\n\n/**\n * Remove DOM and clear parent filter\n */\nShadowManager.prototype.remove = function (svgElement, style) {\n    if (style._shadowDomId != null) {\n        this.removeDom(style);\n        svgElement.style.filter = '';\n    }\n};\n\n\n/**\n * Update shadow dom\n *\n * @param {Displayable} displayable  zrender displayable element\n * @param {SVGFilterElement} dom DOM to update\n */\nShadowManager.prototype.updateDom = function (displayable, dom) {\n    var domChild = dom.getElementsByTagName('feDropShadow');\n    if (domChild.length === 0) {\n        domChild = this.createElement('feDropShadow');\n    }\n    else {\n        domChild = domChild[0];\n    }\n\n    var style = displayable.style;\n    var scaleX = displayable.scale ? (displayable.scale[0] || 1) : 1;\n    var scaleY = displayable.scale ? (displayable.scale[1] || 1) : 1;\n\n    // TODO: textBoxShadowBlur is not supported yet\n    var offsetX, offsetY, blur, color;\n    if (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY) {\n        offsetX = style.shadowOffsetX || 0;\n        offsetY = style.shadowOffsetY || 0;\n        blur = style.shadowBlur;\n        color = style.shadowColor;\n    }\n    else if (style.textShadowBlur) {\n        offsetX = style.textShadowOffsetX || 0;\n        offsetY = style.textShadowOffsetY || 0;\n        blur = style.textShadowBlur;\n        color = style.textShadowColor;\n    }\n    else {\n        // Remove shadow\n        this.removeDom(dom, style);\n        return;\n    }\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    var stdDx = blur / 2 / scaleX;\n    var stdDy = blur / 2 / scaleY;\n    var stdDeviation = stdDx + ' ' + stdDy;\n    domChild.setAttribute('stdDeviation', stdDeviation);\n\n    // Fix filter clipping problem\n    dom.setAttribute('x', '-100%');\n    dom.setAttribute('y', '-100%');\n    dom.setAttribute('width', Math.ceil(blur / 2 * 200) + '%');\n    dom.setAttribute('height', Math.ceil(blur / 2 * 200) + '%');\n\n    dom.appendChild(domChild);\n\n    // Store dom element in shadow, to avoid creating multiple\n    // dom instances for the same shadow element\n    style._shadowDom = dom;\n};\n\n/**\n * Mark a single shadow to be used\n *\n * @param {Displayable} displayable displayable element\n */\nShadowManager.prototype.markUsed = function (displayable) {\n    var style = displayable.style;\n    if (style && style._shadowDom) {\n        Definable.prototype.markUsed.call(this, style._shadowDom);\n    }\n};\n\nfunction hasShadow(style) {\n    // TODO: textBoxShadowBlur is not supported yet\n    return style\n        && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY\n            || style.textShadowBlur || style.textShadowOffsetX\n            || style.textShadowOffsetY);\n}\n\n\nexport default ShadowManager;\n","/**\n * SVG Painter\n * @module zrender/svg/Painter\n */\n\nimport {createElement} from './core';\nimport * as util from '../core/util';\nimport zrLog from '../core/log';\nimport Path from '../graphic/Path';\nimport ZImage from '../graphic/Image';\nimport ZText from '../graphic/Text';\nimport arrayDiff from '../core/arrayDiff2';\nimport GradientManager from './helper/GradientManager';\nimport ClippathManager from './helper/ClippathManager';\nimport ShadowManager from './helper/ShadowManager';\nimport {each} from '../core/util';\nimport {\n    path as svgPath,\n    image as svgImage,\n    text as svgText\n} from './graphic';\n\nfunction parseInt10(val) {\n    return parseInt(val, 10);\n}\n\nfunction getSvgProxy(el) {\n    if (el instanceof Path) {\n        return svgPath;\n    }\n    else if (el instanceof ZImage) {\n        return svgImage;\n    }\n    else if (el instanceof ZText) {\n        return svgText;\n    }\n    else {\n        return svgPath;\n    }\n}\n\nfunction checkParentAvailable(parent, child) {\n    return child && parent && child.parentNode !== parent;\n}\n\nfunction insertAfter(parent, child, prevSibling) {\n    if (checkParentAvailable(parent, child) && prevSibling) {\n        var nextSibling = prevSibling.nextSibling;\n        nextSibling ? parent.insertBefore(child, nextSibling)\n            : parent.appendChild(child);\n    }\n}\n\nfunction prepend(parent, child) {\n    if (checkParentAvailable(parent, child)) {\n        var firstChild = parent.firstChild;\n        firstChild ? parent.insertBefore(child, firstChild)\n            : parent.appendChild(child);\n    }\n}\n\nfunction append(parent, child) {\n    if (checkParentAvailable(parent, child)) {\n        parent.appendChild(child);\n    }\n}\n\nfunction remove(parent, child) {\n    if (child && parent && child.parentNode === parent) {\n        parent.removeChild(child);\n    }\n}\n\nfunction getTextSvgElement(displayable) {\n    return displayable.__textSvgEl;\n}\n\nfunction getSvgElement(displayable) {\n    return displayable.__svgEl;\n}\n\n/**\n * @alias module:zrender/svg/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\nvar SVGPainter = function (root, storage, opts, zrId) {\n\n    this.root = root;\n    this.storage = storage;\n    this._opts = opts = util.extend({}, opts || {});\n\n    var svgRoot = createElement('svg');\n    svgRoot.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n    svgRoot.setAttribute('version', '1.1');\n    svgRoot.setAttribute('baseProfile', 'full');\n    svgRoot.style.cssText = 'user-select:none;position:absolute;left:0;top:0;';\n\n    this.gradientManager = new GradientManager(zrId, svgRoot);\n    this.clipPathManager = new ClippathManager(zrId, svgRoot);\n    this.shadowManager = new ShadowManager(zrId, svgRoot);\n\n    var viewport = document.createElement('div');\n    viewport.style.cssText = 'overflow:hidden;position:relative';\n\n    this._svgRoot = svgRoot;\n    this._viewport = viewport;\n\n    root.appendChild(viewport);\n    viewport.appendChild(svgRoot);\n\n    this.resize(opts.width, opts.height);\n\n    this._visibleList = [];\n};\n\nSVGPainter.prototype = {\n\n    constructor: SVGPainter,\n\n    getType: function () {\n        return 'svg';\n    },\n\n    getViewportRoot: function () {\n        return this._viewport;\n    },\n\n    getViewportRootOffset: function () {\n        var viewportRoot = this.getViewportRoot();\n        if (viewportRoot) {\n            return {\n                offsetLeft: viewportRoot.offsetLeft || 0,\n                offsetTop: viewportRoot.offsetTop || 0\n            };\n        }\n    },\n\n    refresh: function () {\n\n        var list = this.storage.getDisplayList(true);\n\n        this._paintList(list);\n    },\n\n    setBackgroundColor: function (backgroundColor) {\n        // TODO gradient\n        this._viewport.style.background = backgroundColor;\n    },\n\n    _paintList: function (list) {\n        this.gradientManager.markAllUnused();\n        this.clipPathManager.markAllUnused();\n        this.shadowManager.markAllUnused();\n\n        var svgRoot = this._svgRoot;\n        var visibleList = this._visibleList;\n        var listLen = list.length;\n\n        var newVisibleList = [];\n        var i;\n        for (i = 0; i < listLen; i++) {\n            var displayable = list[i];\n            var svgProxy = getSvgProxy(displayable);\n            var svgElement = getSvgElement(displayable)\n                || getTextSvgElement(displayable);\n            if (!displayable.invisible) {\n                if (displayable.__dirty) {\n                    svgProxy && svgProxy.brush(displayable);\n\n                    // Update clipPath\n                    this.clipPathManager.update(displayable);\n\n                    // Update gradient and shadow\n                    if (displayable.style) {\n                        this.gradientManager\n                            .update(displayable.style.fill);\n                        this.gradientManager\n                            .update(displayable.style.stroke);\n\n                        this.shadowManager\n                            .update(svgElement, displayable);\n                    }\n\n                    displayable.__dirty = false;\n                }\n                newVisibleList.push(displayable);\n            }\n        }\n\n        var diff = arrayDiff(visibleList, newVisibleList);\n        var prevSvgElement;\n\n        // First do remove, in case element moved to the head and do remove\n        // after add\n        for (i = 0; i < diff.length; i++) {\n            var item = diff[i];\n            if (item.removed) {\n                for (var k = 0; k < item.count; k++) {\n                    var displayable = visibleList[item.indices[k]];\n                    var svgElement = getSvgElement(displayable);\n                    var textSvgElement = getTextSvgElement(displayable);\n                    remove(svgRoot, svgElement);\n                    remove(svgRoot, textSvgElement);\n                }\n            }\n        }\n        for (i = 0; i < diff.length; i++) {\n            var item = diff[i];\n            if (item.added) {\n                for (var k = 0; k < item.count; k++) {\n                    var displayable = newVisibleList[item.indices[k]];\n                    var svgElement = getSvgElement(displayable);\n                    var textSvgElement = getTextSvgElement(displayable);\n                    prevSvgElement\n                        ? insertAfter(svgRoot, svgElement, prevSvgElement)\n                        : prepend(svgRoot, svgElement);\n                    if (svgElement) {\n                        insertAfter(svgRoot, textSvgElement, svgElement);\n                    }\n                    else if (prevSvgElement) {\n                        insertAfter(\n                            svgRoot, textSvgElement, prevSvgElement\n                        );\n                    }\n                    else {\n                        prepend(svgRoot, textSvgElement);\n                    }\n                    // Insert text\n                    insertAfter(svgRoot, textSvgElement, svgElement);\n                    prevSvgElement = textSvgElement || svgElement\n                        || prevSvgElement;\n\n                    this.gradientManager\n                        .addWithoutUpdate(svgElement, displayable);\n                    this.shadowManager\n                        .addWithoutUpdate(prevSvgElement, displayable);\n                    this.clipPathManager.markUsed(displayable);\n                }\n            }\n            else if (!item.removed) {\n                for (var k = 0; k < item.count; k++) {\n                    var displayable = newVisibleList[item.indices[k]];\n                    prevSvgElement\n                        = svgElement\n                        = getTextSvgElement(displayable)\n                        || getSvgElement(displayable)\n                        || prevSvgElement;\n\n                    this.gradientManager.markUsed(displayable);\n                    this.gradientManager\n                        .addWithoutUpdate(svgElement, displayable);\n\n                    this.shadowManager.markUsed(displayable);\n                    this.shadowManager\n                        .addWithoutUpdate(svgElement, displayable);\n\n                    this.clipPathManager.markUsed(displayable);\n                }\n            }\n        }\n\n        this.gradientManager.removeUnused();\n        this.clipPathManager.removeUnused();\n        this.shadowManager.removeUnused();\n\n        this._visibleList = newVisibleList;\n    },\n\n    _getDefs: function (isForceCreating) {\n        var svgRoot = this._svgRoot;\n        var defs = this._svgRoot.getElementsByTagName('defs');\n        if (defs.length === 0) {\n            // Not exist\n            if (isForceCreating) {\n                var 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                        var children = defs.children;\n                        if (!children) {\n                            return false;\n                        }\n                        for (var 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: function (width, height) {\n        var viewport = this._viewport;\n        // FIXME Why ?\n        viewport.style.display = 'none';\n\n        // Save input w/h\n        var 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            var viewportStyle = viewport.style;\n            viewportStyle.width = width + 'px';\n            viewportStyle.height = height + 'px';\n\n            var svgRoot = this._svgRoot;\n            // Set width by 'svgRoot.width = width' is invalid\n            svgRoot.setAttribute('width', width);\n            svgRoot.setAttribute('height', height);\n        }\n    },\n\n    /**\n     * 获取绘图区域宽度\n     */\n    getWidth: function () {\n        return this._width;\n    },\n\n    /**\n     * 获取绘图区域高度\n     */\n    getHeight: function () {\n        return this._height;\n    },\n\n    _getSize: function (whIdx) {\n        var opts = this._opts;\n        var wh = ['width', 'height'][whIdx];\n        var cwh = ['clientWidth', 'clientHeight'][whIdx];\n        var plt = ['paddingLeft', 'paddingTop'][whIdx];\n        var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n        if (opts[wh] != null && opts[wh] !== 'auto') {\n            return parseFloat(opts[wh]);\n        }\n\n        var root = this.root;\n        // IE8 does not support getComputedStyle, but it use VML.\n        var 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: function () {\n        this.root.innerHTML = '';\n\n        this._svgRoot\n            = this._viewport\n            = this.storage\n            = null;\n    },\n\n    clear: function () {\n        if (this._viewport) {\n            this.root.removeChild(this._viewport);\n        }\n    },\n\n    pathToDataUrl: function () {\n        this.refresh();\n        var html = this._svgRoot.outerHTML;\n        return 'data:image/svg+xml;charset=UTF-8,' + html;\n    }\n};\n\n// Not supported methods\nfunction createMethodNotSupport(method) {\n    return function () {\n        zrLog('In SVG mode painter not support method \"' + method + '\"');\n    };\n}\n\n// Unsuppoted methods\neach([\n    'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer',\n    'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer',\n    'toDataURL', 'pathToImage'\n], function (name) {\n    SVGPainter.prototype[name] = createMethodNotSupport(name);\n});\n\nexport default SVGPainter;","import './graphic';\nimport {registerPainter} from '../zrender';\nimport Painter from './Painter';\n\nregisterPainter('svg', Painter);","import env from '../core/env';\n\n\nvar urn = 'urn:schemas-microsoft-com:vml';\nvar win = typeof window === 'undefined' ? null : window;\n\nvar vmlInited = false;\n\nexport var doc = win && win.document;\n\nexport function createNode(tagName) {\n    return doCreateNode(tagName);\n}\n\n// Avoid assign to an exported variable, for transforming to cjs.\nvar doCreateNode;\n\nif (doc && !env.canvasSupported) {\n    try {\n        !doc.namespaces.zrvml && doc.namespaces.add('zrvml', urn);\n        doCreateNode = function (tagName) {\n            return doc.createElement('<zrvml:' + tagName + ' class=\"zrvml\">');\n        };\n    }\n    catch (e) {\n        doCreateNode = function (tagName) {\n            return doc.createElement('<' + tagName + ' xmlns=\"' + urn + '\" class=\"zrvml\">');\n        };\n    }\n}\n\n// From raphael\nexport function initVML() {\n    if (vmlInited || !doc) {\n        return;\n    }\n    vmlInited = true;\n\n    var styleSheets = doc.styleSheets;\n    if (styleSheets.length < 31) {\n        doc.createStyleSheet().addRule('.zrvml', 'behavior:url(#default#VML)');\n    }\n    else {\n        // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx\n        styleSheets[0].addRule('.zrvml', 'behavior:url(#default#VML)');\n    }\n}\n","// http://www.w3.org/TR/NOTE-VML\n// TODO Use proxy like svg instead of overwrite brush methods\n\nimport env from '../core/env';\nimport {applyTransform} from '../core/vector';\nimport BoundingRect from '../core/BoundingRect';\nimport * as colorTool from '../tool/color';\nimport * as textContain from '../contain/text';\nimport * as textHelper from '../graphic/helper/text';\nimport RectText from '../graphic/mixin/RectText';\nimport Displayable from '../graphic/Displayable';\nimport ZImage from '../graphic/Image';\nimport Text from '../graphic/Text';\nimport Path from '../graphic/Path';\nimport PathProxy from '../core/PathProxy';\nimport Gradient from '../graphic/Gradient';\nimport * as vmlCore from './core';\n\nvar CMD = PathProxy.CMD;\nvar round = Math.round;\nvar sqrt = Math.sqrt;\nvar abs = Math.abs;\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar mathMax = Math.max;\n\nif (!env.canvasSupported) {\n\n    var comma = ',';\n    var imageTransformPrefix = 'progid:DXImageTransform.Microsoft';\n\n    var Z = 21600;\n    var Z2 = Z / 2;\n\n    var ZLEVEL_BASE = 100000;\n    var Z_BASE = 1000;\n\n    var initRootElStyle = function (el) {\n        el.style.cssText = 'position:absolute;left:0;top:0;width:1px;height:1px;';\n        el.coordsize = Z + ','  + Z;\n        el.coordorigin = '0,0';\n    };\n\n    var encodeHtmlAttribute = function (s) {\n        return String(s).replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n    };\n\n    var rgb2Str = function (r, g, b) {\n        return 'rgb(' + [r, g, b].join(',') + ')';\n    };\n\n    var append = function (parent, child) {\n        if (child && parent && child.parentNode !== parent) {\n            parent.appendChild(child);\n        }\n    };\n\n    var remove = function (parent, child) {\n        if (child && parent && child.parentNode === parent) {\n            parent.removeChild(child);\n        }\n    };\n\n    var getZIndex = function (zlevel, z, z2) {\n        // z 的取值范围为 [0, 1000]\n        return (parseFloat(zlevel) || 0) * ZLEVEL_BASE + (parseFloat(z) || 0) * Z_BASE + z2;\n    };\n\n    var parsePercent = function (value, maxValue) {\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\n    /***************************************************\n     * PATH\n     **************************************************/\n\n    var setColorAndOpacity = function (el, color, opacity) {\n        var colorArr = colorTool.parse(color);\n        opacity = +opacity;\n        if (isNaN(opacity)) {\n            opacity = 1;\n        }\n        if (colorArr) {\n            el.color = rgb2Str(colorArr[0], colorArr[1], colorArr[2]);\n            el.opacity = opacity * colorArr[3];\n        }\n    };\n\n    var getColorAndAlpha = function (color) {\n        var colorArr = colorTool.parse(color);\n        return [\n            rgb2Str(colorArr[0], colorArr[1], colorArr[2]),\n            colorArr[3]\n        ];\n    };\n\n    var updateFillNode = function (el, style, zrEl) {\n        // TODO pattern\n        var fill = style.fill;\n        if (fill != null) {\n            // Modified from excanvas\n            if (fill instanceof Gradient) {\n                var gradientType;\n                var angle = 0;\n                var focus = [0, 0];\n                // additional offset\n                var shift = 0;\n                // scale factor for offset\n                var expansion = 1;\n                var rect = zrEl.getBoundingRect();\n                var rectWidth = rect.width;\n                var rectHeight = rect.height;\n                if (fill.type === 'linear') {\n                    gradientType = 'gradient';\n                    var transform = zrEl.transform;\n                    var p0 = [fill.x * rectWidth, fill.y * rectHeight];\n                    var p1 = [fill.x2 * rectWidth, fill.y2 * rectHeight];\n                    if (transform) {\n                        applyTransform(p0, p0, transform);\n                        applyTransform(p1, p1, transform);\n                    }\n                    var dx = p1[0] - p0[0];\n                    var dy = p1[1] - p0[1];\n                    angle = Math.atan2(dx, dy) * 180 / Math.PI;\n                    // The angle should be a non-negative number.\n                    if (angle < 0) {\n                        angle += 360;\n                    }\n\n                    // Very small angles produce an unexpected result because they are\n                    // converted to a scientific notation string.\n                    if (angle < 1e-6) {\n                        angle = 0;\n                    }\n                }\n                else {\n                    gradientType = 'gradientradial';\n                    var p0 = [fill.x * rectWidth, fill.y * rectHeight];\n                    var transform = zrEl.transform;\n                    var scale = zrEl.scale;\n                    var width = rectWidth;\n                    var height = rectHeight;\n                    focus = [\n                        // Percent in bounding rect\n                        (p0[0] - rect.x) / width,\n                        (p0[1] - rect.y) / height\n                    ];\n                    if (transform) {\n                        applyTransform(p0, p0, transform);\n                    }\n\n                    width /= scale[0] * Z;\n                    height /= scale[1] * Z;\n                    var dimension = mathMax(width, height);\n                    shift = 2 * 0 / dimension;\n                    expansion = 2 * fill.r / dimension - shift;\n                }\n\n                // We need to sort the color stops in ascending order by offset,\n                // otherwise IE won't interpret it correctly.\n                var stops = fill.colorStops.slice();\n                stops.sort(function(cs1, cs2) {\n                    return cs1.offset - cs2.offset;\n                });\n\n                var length = stops.length;\n                // Color and alpha list of first and last stop\n                var colorAndAlphaList = [];\n                var colors = [];\n                for (var i = 0; i < length; i++) {\n                    var stop = stops[i];\n                    var colorAndAlpha = getColorAndAlpha(stop.color);\n                    colors.push(stop.offset * expansion + shift + ' ' + colorAndAlpha[0]);\n                    if (i === 0 || i === length - 1) {\n                        colorAndAlphaList.push(colorAndAlpha);\n                    }\n                }\n\n                if (length >= 2) {\n                    var color1 = colorAndAlphaList[0][0];\n                    var color2 = colorAndAlphaList[1][0];\n                    var opacity1 = colorAndAlphaList[0][1] * style.opacity;\n                    var opacity2 = colorAndAlphaList[1][1] * style.opacity;\n\n                    el.type = gradientType;\n                    el.method = 'none';\n                    el.focus = '100%';\n                    el.angle = angle;\n                    el.color = color1;\n                    el.color2 = color2;\n                    el.colors = colors.join(',');\n                    // When colors attribute is used, the meanings of opacity and o:opacity2\n                    // are reversed.\n                    el.opacity = opacity2;\n                    // FIXME g_o_:opacity ?\n                    el.opacity2 = opacity1;\n                }\n                if (gradientType === 'radial') {\n                    el.focusposition = focus.join(',');\n                }\n            }\n            else {\n                // FIXME Change from Gradient fill to color fill\n                setColorAndOpacity(el, fill, style.opacity);\n            }\n        }\n    };\n\n    var updateStrokeNode = function (el, style) {\n        // if (style.lineJoin != null) {\n        //     el.joinstyle = style.lineJoin;\n        // }\n        // if (style.miterLimit != null) {\n        //     el.miterlimit = style.miterLimit * Z;\n        // }\n        // if (style.lineCap != null) {\n        //     el.endcap = style.lineCap;\n        // }\n        if (style.lineDash != null) {\n            el.dashstyle = style.lineDash.join(' ');\n        }\n        if (style.stroke != null && !(style.stroke instanceof Gradient)) {\n            setColorAndOpacity(el, style.stroke, style.opacity);\n        }\n    };\n\n    var updateFillAndStroke = function (vmlEl, type, style, zrEl) {\n        var isFill = type == 'fill';\n        var el = vmlEl.getElementsByTagName(type)[0];\n        // Stroke must have lineWidth\n        if (style[type] != null && style[type] !== 'none' && (isFill || (!isFill && style.lineWidth))) {\n            vmlEl[isFill ? 'filled' : 'stroked'] = 'true';\n            // FIXME Remove before updating, or set `colors` will throw error\n            if (style[type] instanceof Gradient) {\n                remove(vmlEl, el);\n            }\n            if (!el) {\n                el = vmlCore.createNode(type);\n            }\n\n            isFill ? updateFillNode(el, style, zrEl) : updateStrokeNode(el, style);\n            append(vmlEl, el);\n        }\n        else {\n            vmlEl[isFill ? 'filled' : 'stroked'] = 'false';\n            remove(vmlEl, el);\n        }\n    };\n\n    var points = [[], [], []];\n    var pathDataToString = function (path, m) {\n        var M = CMD.M;\n        var C = CMD.C;\n        var L = CMD.L;\n        var A = CMD.A;\n        var Q = CMD.Q;\n\n        var str = [];\n        var nPoint;\n        var cmdStr;\n        var cmd;\n        var i;\n        var xi;\n        var yi;\n        var data = path.data;\n        var dataLength = path.len();\n        for (i = 0; i < dataLength;) {\n            cmd = data[i++];\n            cmdStr = '';\n            nPoint = 0;\n            switch (cmd) {\n                case M:\n                    cmdStr = ' m ';\n                    nPoint = 1;\n                    xi = data[i++];\n                    yi = data[i++];\n                    points[0][0] = xi;\n                    points[0][1] = yi;\n                    break;\n                case L:\n                    cmdStr = ' l ';\n                    nPoint = 1;\n                    xi = data[i++];\n                    yi = data[i++];\n                    points[0][0] = xi;\n                    points[0][1] = yi;\n                    break;\n                case Q:\n                case C:\n                    cmdStr = ' c ';\n                    nPoint = 3;\n                    var x1 = data[i++];\n                    var y1 = data[i++];\n                    var x2 = data[i++];\n                    var y2 = data[i++];\n                    var x3;\n                    var y3;\n                    if (cmd === Q) {\n                        // Convert quadratic to cubic using degree elevation\n                        x3 = x2;\n                        y3 = y2;\n                        x2 = (x2 + 2 * x1) / 3;\n                        y2 = (y2 + 2 * y1) / 3;\n                        x1 = (xi + 2 * x1) / 3;\n                        y1 = (yi + 2 * y1) / 3;\n                    }\n                    else {\n                        x3 = data[i++];\n                        y3 = data[i++];\n                    }\n                    points[0][0] = x1;\n                    points[0][1] = y1;\n                    points[1][0] = x2;\n                    points[1][1] = y2;\n                    points[2][0] = x3;\n                    points[2][1] = y3;\n\n                    xi = x3;\n                    yi = y3;\n                    break;\n                case A:\n                    var x = 0;\n                    var y = 0;\n                    var sx = 1;\n                    var sy = 1;\n                    var angle = 0;\n                    if (m) {\n                        // Extract SRT from matrix\n                        x = m[4];\n                        y = m[5];\n                        sx = sqrt(m[0] * m[0] + m[1] * m[1]);\n                        sy = sqrt(m[2] * m[2] + m[3] * m[3]);\n                        angle = Math.atan2(-m[1] / sy, m[0] / sx);\n                    }\n\n                    var cx = data[i++];\n                    var cy = data[i++];\n                    var rx = data[i++];\n                    var ry = data[i++];\n                    var startAngle = data[i++] + angle;\n                    var endAngle = data[i++] + startAngle + angle;\n                    // FIXME\n                    // var psi = data[i++];\n                    i++;\n                    var clockwise = data[i++];\n\n                    var x0 = cx + cos(startAngle) * rx;\n                    var y0 = cy + sin(startAngle) * ry;\n\n                    var x1 = cx + cos(endAngle) * rx;\n                    var y1 = cy + sin(endAngle) * ry;\n\n                    var type = clockwise ? ' wa ' : ' at ';\n                    if (Math.abs(x0 - x1) < 1e-4) {\n                        // IE won't render arches drawn counter clockwise if x0 == x1.\n                        if (Math.abs(endAngle - startAngle) > 1e-2) {\n                            // Offset x0 by 1/80 of a pixel. Use something\n                            // that can be represented in binary\n                            if (clockwise) {\n                                x0 += 270 / Z;\n                            }\n                        }\n                        else {\n                            // Avoid case draw full circle\n                            if (Math.abs(y0 - cy) < 1e-4) {\n                                if ((clockwise && x0 < cx) || (!clockwise && x0 > cx)) {\n                                    y1 -= 270 / Z;\n                                }\n                                else {\n                                    y1 += 270 / Z;\n                                }\n                            }\n                            else if ((clockwise && y0 < cy) || (!clockwise && y0 > cy)) {\n                                x1 += 270 / Z;\n                            }\n                            else {\n                                x1 -= 270 / Z;\n                            }\n                        }\n                    }\n                    str.push(\n                        type,\n                        round(((cx - rx) * sx + x) * Z - Z2), comma,\n                        round(((cy - ry) * sy + y) * Z - Z2), comma,\n                        round(((cx + rx) * sx + x) * Z - Z2), comma,\n                        round(((cy + ry) * sy + y) * Z - Z2), comma,\n                        round((x0 * sx + x) * Z - Z2), comma,\n                        round((y0 * sy + y) * Z - Z2), comma,\n                        round((x1 * sx + x) * Z - Z2), comma,\n                        round((y1 * sy + y) * Z - Z2)\n                    );\n\n                    xi = x1;\n                    yi = y1;\n                    break;\n                case CMD.R:\n                    var p0 = points[0];\n                    var p1 = points[1];\n                    // x0, y0\n                    p0[0] = data[i++];\n                    p0[1] = data[i++];\n                    // x1, y1\n                    p1[0] = p0[0] + data[i++];\n                    p1[1] = p0[1] + data[i++];\n\n                    if (m) {\n                        applyTransform(p0, p0, m);\n                        applyTransform(p1, p1, m);\n                    }\n\n                    p0[0] = round(p0[0] * Z - Z2);\n                    p1[0] = round(p1[0] * Z - Z2);\n                    p0[1] = round(p0[1] * Z - Z2);\n                    p1[1] = round(p1[1] * Z - Z2);\n                    str.push(\n                        // x0, y0\n                        ' m ', p0[0], comma, p0[1],\n                        // x1, y0\n                        ' l ', p1[0], comma, p0[1],\n                        // x1, y1\n                        ' l ', p1[0], comma, p1[1],\n                        // x0, y1\n                        ' l ', p0[0], comma, p1[1]\n                    );\n                    break;\n                case CMD.Z:\n                    // FIXME Update xi, yi\n                    str.push(' x ');\n            }\n\n            if (nPoint > 0) {\n                str.push(cmdStr);\n                for (var k = 0; k < nPoint; k++) {\n                    var p = points[k];\n\n                    m && applyTransform(p, p, m);\n                    // 不 round 会非常慢\n                    str.push(\n                        round(p[0] * Z - Z2), comma, round(p[1] * Z - Z2),\n                        k < nPoint - 1 ? comma : ''\n                    );\n                }\n            }\n        }\n\n        return str.join('');\n    };\n\n    // Rewrite the original path method\n    Path.prototype.brushVML = function (vmlRoot) {\n        var style = this.style;\n\n        var vmlEl = this._vmlEl;\n        if (!vmlEl) {\n            vmlEl = vmlCore.createNode('shape');\n            initRootElStyle(vmlEl);\n\n            this._vmlEl = vmlEl;\n        }\n\n        updateFillAndStroke(vmlEl, 'fill', style, this);\n        updateFillAndStroke(vmlEl, 'stroke', style, this);\n\n        var m = this.transform;\n        var needTransform = m != null;\n        var strokeEl = vmlEl.getElementsByTagName('stroke')[0];\n        if (strokeEl) {\n            var lineWidth = style.lineWidth;\n            // Get the line scale.\n            // Determinant of this.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            if (needTransform && !style.strokeNoScale) {\n                var det = m[0] * m[3] - m[1] * m[2];\n                lineWidth *= sqrt(abs(det));\n            }\n            strokeEl.weight = lineWidth + 'px';\n        }\n\n        var path = this.path || (this.path = new PathProxy());\n        if (this.__dirtyPath) {\n            path.beginPath();\n            this.buildPath(path, this.shape);\n            path.toStatic();\n            this.__dirtyPath = false;\n        }\n\n        vmlEl.path = pathDataToString(path, this.transform);\n\n        vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);\n\n        // Append to root\n        append(vmlRoot, vmlEl);\n\n        // Text\n        if (style.text != null) {\n            this.drawRectText(vmlRoot, this.getBoundingRect());\n        }\n        else {\n            this.removeRectText(vmlRoot);\n        }\n    };\n\n    Path.prototype.onRemove = function (vmlRoot) {\n        remove(vmlRoot, this._vmlEl);\n        this.removeRectText(vmlRoot);\n    };\n\n    Path.prototype.onAdd = function (vmlRoot) {\n        append(vmlRoot, this._vmlEl);\n        this.appendRectText(vmlRoot);\n    };\n\n    /***************************************************\n     * IMAGE\n     **************************************************/\n    var isImage = function (img) {\n        // FIXME img instanceof Image 如果 img 是一个字符串的时候,IE8 下会报错\n        return (typeof img === 'object') && img.tagName && img.tagName.toUpperCase() === 'IMG';\n        // return img instanceof Image;\n    };\n\n    // Rewrite the original path method\n    ZImage.prototype.brushVML = function (vmlRoot) {\n        var style = this.style;\n        var image = style.image;\n\n        // Image original width, height\n        var ow;\n        var oh;\n\n        if (isImage(image)) {\n            var src = image.src;\n            if (src === this._imageSrc) {\n                ow = this._imageWidth;\n                oh = this._imageHeight;\n            }\n            else {\n                var imageRuntimeStyle = image.runtimeStyle;\n                var oldRuntimeWidth = imageRuntimeStyle.width;\n                var oldRuntimeHeight = imageRuntimeStyle.height;\n                imageRuntimeStyle.width = 'auto';\n                imageRuntimeStyle.height = 'auto';\n\n                // get the original size\n                ow = image.width;\n                oh = image.height;\n\n                // and remove overides\n                imageRuntimeStyle.width = oldRuntimeWidth;\n                imageRuntimeStyle.height = oldRuntimeHeight;\n\n                // Caching image original width, height and src\n                this._imageSrc = src;\n                this._imageWidth = ow;\n                this._imageHeight = oh;\n            }\n            image = src;\n        }\n        else {\n            if (image === this._imageSrc) {\n                ow = this._imageWidth;\n                oh = this._imageHeight;\n            }\n        }\n        if (!image) {\n            return;\n        }\n\n        var x = style.x || 0;\n        var y = style.y || 0;\n\n        var dw = style.width;\n        var dh = style.height;\n\n        var sw = style.sWidth;\n        var sh = style.sHeight;\n        var sx = style.sx || 0;\n        var sy = style.sy || 0;\n\n        var hasCrop = sw && sh;\n\n        var vmlEl = this._vmlEl;\n        if (!vmlEl) {\n            // FIXME 使用 group 在 left, top 都不是 0 的时候就无法显示了。\n            // vmlEl = vmlCore.createNode('group');\n            vmlEl = vmlCore.doc.createElement('div');\n            initRootElStyle(vmlEl);\n\n            this._vmlEl = vmlEl;\n        }\n\n        var vmlElStyle = vmlEl.style;\n        var hasRotation = false;\n        var m;\n        var scaleX = 1;\n        var scaleY = 1;\n        if (this.transform) {\n            m = this.transform;\n            scaleX = sqrt(m[0] * m[0] + m[1] * m[1]);\n            scaleY = sqrt(m[2] * m[2] + m[3] * m[3]);\n\n            hasRotation = m[1] || m[2];\n        }\n        if (hasRotation) {\n            // If filters are necessary (rotation exists), create them\n            // filters are bog-slow, so only create them if abbsolutely necessary\n            // The following check doesn't account for skews (which don't exist\n            // in the canvas spec (yet) anyway.\n            // From excanvas\n            var p0 = [x, y];\n            var p1 = [x + dw, y];\n            var p2 = [x, y + dh];\n            var p3 = [x + dw, y + dh];\n            applyTransform(p0, p0, m);\n            applyTransform(p1, p1, m);\n            applyTransform(p2, p2, m);\n            applyTransform(p3, p3, m);\n\n            var maxX = mathMax(p0[0], p1[0], p2[0], p3[0]);\n            var maxY = mathMax(p0[1], p1[1], p2[1], p3[1]);\n\n            var transformFilter = [];\n            transformFilter.push('M11=', m[0] / scaleX, comma,\n                        'M12=', m[2] / scaleY, comma,\n                        'M21=', m[1] / scaleX, comma,\n                        'M22=', m[3] / scaleY, comma,\n                        'Dx=', round(x * scaleX + m[4]), comma,\n                        'Dy=', round(y * scaleY + m[5]));\n\n            vmlElStyle.padding = '0 ' + round(maxX) + 'px ' + round(maxY) + 'px 0';\n            // FIXME DXImageTransform 在 IE11 的兼容模式下不起作用\n            vmlElStyle.filter = imageTransformPrefix + '.Matrix('\n                + transformFilter.join('') + ', SizingMethod=clip)';\n\n        }\n        else {\n            if (m) {\n                x = x * scaleX + m[4];\n                y = y * scaleY + m[5];\n            }\n            vmlElStyle.filter = '';\n            vmlElStyle.left = round(x) + 'px';\n            vmlElStyle.top = round(y) + 'px';\n        }\n\n        var imageEl = this._imageEl;\n        var cropEl = this._cropEl;\n\n        if (!imageEl) {\n            imageEl = vmlCore.doc.createElement('div');\n            this._imageEl = imageEl;\n        }\n        var imageELStyle = imageEl.style;\n        if (hasCrop) {\n            // Needs know image original width and height\n            if (! (ow && oh)) {\n                var tmpImage = new Image();\n                var self = this;\n                tmpImage.onload = function () {\n                    tmpImage.onload = null;\n                    ow = tmpImage.width;\n                    oh = tmpImage.height;\n                    // Adjust image width and height to fit the ratio destinationSize / sourceSize\n                    imageELStyle.width = round(scaleX * ow * dw / sw) + 'px';\n                    imageELStyle.height = round(scaleY * oh * dh / sh) + 'px';\n\n                    // Caching image original width, height and src\n                    self._imageWidth = ow;\n                    self._imageHeight = oh;\n                    self._imageSrc = image;\n                };\n                tmpImage.src = image;\n            }\n            else {\n                imageELStyle.width = round(scaleX * ow * dw / sw) + 'px';\n                imageELStyle.height = round(scaleY * oh * dh / sh) + 'px';\n            }\n\n            if (! cropEl) {\n                cropEl = vmlCore.doc.createElement('div');\n                cropEl.style.overflow = 'hidden';\n                this._cropEl = cropEl;\n            }\n            var cropElStyle = cropEl.style;\n            cropElStyle.width = round((dw + sx * dw / sw) * scaleX);\n            cropElStyle.height = round((dh + sy * dh / sh) * scaleY);\n            cropElStyle.filter = imageTransformPrefix + '.Matrix(Dx='\n                    + (-sx * dw / sw * scaleX) + ',Dy=' + (-sy * dh / sh * scaleY) + ')';\n\n            if (! cropEl.parentNode) {\n                vmlEl.appendChild(cropEl);\n            }\n            if (imageEl.parentNode != cropEl) {\n                cropEl.appendChild(imageEl);\n            }\n        }\n        else {\n            imageELStyle.width = round(scaleX * dw) + 'px';\n            imageELStyle.height = round(scaleY * dh) + 'px';\n\n            vmlEl.appendChild(imageEl);\n\n            if (cropEl && cropEl.parentNode) {\n                vmlEl.removeChild(cropEl);\n                this._cropEl = null;\n            }\n        }\n\n        var filterStr = '';\n        var alpha = style.opacity;\n        if (alpha < 1) {\n            filterStr += '.Alpha(opacity=' + round(alpha * 100) + ') ';\n        }\n        filterStr += imageTransformPrefix + '.AlphaImageLoader(src=' + image + ', SizingMethod=scale)';\n\n        imageELStyle.filter = filterStr;\n\n        vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);\n\n        // Append to root\n        append(vmlRoot, vmlEl);\n\n        // Text\n        if (style.text != null) {\n            this.drawRectText(vmlRoot, this.getBoundingRect());\n        }\n    };\n\n    ZImage.prototype.onRemove = function (vmlRoot) {\n        remove(vmlRoot, this._vmlEl);\n\n        this._vmlEl = null;\n        this._cropEl = null;\n        this._imageEl = null;\n\n        this.removeRectText(vmlRoot);\n    };\n\n    ZImage.prototype.onAdd = function (vmlRoot) {\n        append(vmlRoot, this._vmlEl);\n        this.appendRectText(vmlRoot);\n    };\n\n\n    /***************************************************\n     * TEXT\n     **************************************************/\n\n    var DEFAULT_STYLE_NORMAL = 'normal';\n\n    var fontStyleCache = {};\n    var fontStyleCacheCount = 0;\n    var MAX_FONT_CACHE_SIZE = 100;\n    var fontEl = document.createElement('div');\n\n    var getFontStyle = function (fontString) {\n        var fontStyle = fontStyleCache[fontString];\n        if (!fontStyle) {\n            // Clear cache\n            if (fontStyleCacheCount > MAX_FONT_CACHE_SIZE) {\n                fontStyleCacheCount = 0;\n                fontStyleCache = {};\n            }\n\n            var style = fontEl.style;\n            var fontFamily;\n            try {\n                style.font = fontString;\n                fontFamily = style.fontFamily.split(',')[0];\n            }\n            catch (e) {\n            }\n\n            fontStyle = {\n                style: style.fontStyle || DEFAULT_STYLE_NORMAL,\n                variant: style.fontVariant || DEFAULT_STYLE_NORMAL,\n                weight: style.fontWeight || DEFAULT_STYLE_NORMAL,\n                size: parseFloat(style.fontSize || 12) | 0,\n                family: fontFamily || 'Microsoft YaHei'\n            };\n\n            fontStyleCache[fontString] = fontStyle;\n            fontStyleCacheCount++;\n        }\n        return fontStyle;\n    };\n\n    var textMeasureEl;\n    // Overwrite measure text method\n    textContain.$override('measureText', function (text, textFont) {\n        var doc = vmlCore.doc;\n        if (!textMeasureEl) {\n            textMeasureEl = doc.createElement('div');\n            textMeasureEl.style.cssText = 'position:absolute;top:-20000px;left:0;'\n                + 'padding:0;margin:0;border:none;white-space:pre;';\n            vmlCore.doc.body.appendChild(textMeasureEl);\n        }\n\n        try {\n            textMeasureEl.style.font = textFont;\n        } catch (ex) {\n            // Ignore failures to set to invalid font.\n        }\n        textMeasureEl.innerHTML = '';\n        // Don't use innerHTML or innerText because they allow markup/whitespace.\n        textMeasureEl.appendChild(doc.createTextNode(text));\n        return {\n            width: textMeasureEl.offsetWidth\n        };\n    });\n\n    var tmpRect = new BoundingRect();\n\n    var drawRectText = function (vmlRoot, rect, textRect, fromTextEl) {\n\n        var style = this.style;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && textHelper.normalizeTextStyle(style, true);\n\n        var text = style.text;\n        // Convert to string\n        text != null && (text += '');\n        if (!text) {\n            return;\n        }\n\n        // Convert rich text to plain text. Rich text is not supported in\n        // IE8-, but tags in rich text template will be removed.\n        if (style.rich) {\n            var contentBlock = textContain.parseRichText(text, style);\n            text = [];\n            for (var i = 0; i < contentBlock.lines.length; i++) {\n                var tokens = contentBlock.lines[i].tokens;\n                var textLine = [];\n                for (var j = 0; j < tokens.length; j++) {\n                    textLine.push(tokens[j].text);\n                }\n                text.push(textLine.join(''));\n            }\n            text = text.join('\\n');\n        }\n\n        var x;\n        var y;\n        var align = style.textAlign;\n        var verticalAlign = style.textVerticalAlign;\n\n        var fontStyle = getFontStyle(style.font);\n        // FIXME encodeHtmlAttribute ?\n        var font = fontStyle.style + ' ' + fontStyle.variant + ' ' + fontStyle.weight + ' '\n            + fontStyle.size + 'px \"' + fontStyle.family + '\"';\n\n        textRect = textRect || textContain.getBoundingRect(text, font, align, verticalAlign);\n\n        // Transform rect to view space\n        var m = this.transform;\n        // Ignore transform for text in other element\n        if (m && !fromTextEl) {\n            tmpRect.copy(rect);\n            tmpRect.applyTransform(m);\n            rect = tmpRect;\n        }\n\n        if (!fromTextEl) {\n            var textPosition = style.textPosition;\n            var distance = style.textDistance;\n            // Text position represented by coord\n            if (textPosition instanceof Array) {\n                x = rect.x + parsePercent(textPosition[0], rect.width);\n                y = rect.y + parsePercent(textPosition[1], rect.height);\n\n                align = align || 'left';\n            }\n            else {\n                var res = textContain.adjustTextPositionOnRect(\n                    textPosition, rect, distance\n                );\n                x = res.x;\n                y = res.y;\n\n                // Default align and baseline when has textPosition\n                align = align || res.textAlign;\n                verticalAlign = verticalAlign || res.textVerticalAlign;\n            }\n        }\n        else {\n            x = rect.x;\n            y = rect.y;\n        }\n\n        x = textContain.adjustTextX(x, textRect.width, align);\n        y = textContain.adjustTextY(y, textRect.height, verticalAlign);\n\n        // Force baseline 'middle'\n        y += textRect.height / 2;\n\n        // var fontSize = fontStyle.size;\n        // 1.75 is an arbitrary number, as there is no info about the text baseline\n        // switch (baseline) {\n            // case 'hanging':\n            // case 'top':\n            //     y += fontSize / 1.75;\n            //     break;\n        //     case 'middle':\n        //         break;\n        //     default:\n        //     // case null:\n        //     // case 'alphabetic':\n        //     // case 'ideographic':\n        //     // case 'bottom':\n        //         y -= fontSize / 2.25;\n        //         break;\n        // }\n\n        // switch (align) {\n        //     case 'left':\n        //         break;\n        //     case 'center':\n        //         x -= textRect.width / 2;\n        //         break;\n        //     case 'right':\n        //         x -= textRect.width;\n        //         break;\n            // case 'end':\n                // align = elementStyle.direction == 'ltr' ? 'right' : 'left';\n                // break;\n            // case 'start':\n                // align = elementStyle.direction == 'rtl' ? 'right' : 'left';\n                // break;\n            // default:\n            //     align = 'left';\n        // }\n\n        var createNode = vmlCore.createNode;\n\n        var textVmlEl = this._textVmlEl;\n        var pathEl;\n        var textPathEl;\n        var skewEl;\n        if (!textVmlEl) {\n            textVmlEl = createNode('line');\n            pathEl = createNode('path');\n            textPathEl = createNode('textpath');\n            skewEl = createNode('skew');\n\n            // FIXME Why here is not cammel case\n            // Align 'center' seems wrong\n            textPathEl.style['v-text-align'] = 'left';\n\n            initRootElStyle(textVmlEl);\n\n            pathEl.textpathok = true;\n            textPathEl.on = true;\n\n            textVmlEl.from = '0 0';\n            textVmlEl.to = '1000 0.05';\n\n            append(textVmlEl, skewEl);\n            append(textVmlEl, pathEl);\n            append(textVmlEl, textPathEl);\n\n            this._textVmlEl = textVmlEl;\n        }\n        else {\n            // 这里是在前面 appendChild 保证顺序的前提下\n            skewEl = textVmlEl.firstChild;\n            pathEl = skewEl.nextSibling;\n            textPathEl = pathEl.nextSibling;\n        }\n\n        var coords = [x, y];\n        var textVmlElStyle = textVmlEl.style;\n        // Ignore transform for text in other element\n        if (m && fromTextEl) {\n            applyTransform(coords, coords, m);\n\n            skewEl.on = true;\n\n            skewEl.matrix = m[0].toFixed(3) + comma + m[2].toFixed(3) + comma +\n            m[1].toFixed(3) + comma + m[3].toFixed(3) + ',0,0';\n\n            // Text position\n            skewEl.offset = (round(coords[0]) || 0) + ',' + (round(coords[1]) || 0);\n            // Left top point as origin\n            skewEl.origin = '0 0';\n\n            textVmlElStyle.left = '0px';\n            textVmlElStyle.top = '0px';\n        }\n        else {\n            skewEl.on = false;\n            textVmlElStyle.left = round(x) + 'px';\n            textVmlElStyle.top = round(y) + 'px';\n        }\n\n        textPathEl.string = encodeHtmlAttribute(text);\n        // TODO\n        try {\n            textPathEl.style.font = font;\n        }\n        // Error font format\n        catch (e) {}\n\n        updateFillAndStroke(textVmlEl, 'fill', {\n            fill: style.textFill,\n            opacity: style.opacity\n        }, this);\n        updateFillAndStroke(textVmlEl, 'stroke', {\n            stroke: style.textStroke,\n            opacity: style.opacity,\n            lineDash: style.lineDash\n        }, this);\n\n        textVmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);\n\n        // Attached to root\n        append(vmlRoot, textVmlEl);\n    };\n\n    var removeRectText = function (vmlRoot) {\n        remove(vmlRoot, this._textVmlEl);\n        this._textVmlEl = null;\n    };\n\n    var appendRectText = function (vmlRoot) {\n        append(vmlRoot, this._textVmlEl);\n    };\n\n    var list = [RectText, Displayable, ZImage, Path, Text];\n\n    // In case Displayable has been mixed in RectText\n    for (var i = 0; i < list.length; i++) {\n        var proto = list[i].prototype;\n        proto.drawRectText = drawRectText;\n        proto.removeRectText = removeRectText;\n        proto.appendRectText = appendRectText;\n    }\n\n    Text.prototype.brushVML = function (vmlRoot) {\n        var style = this.style;\n        if (style.text != null) {\n            this.drawRectText(vmlRoot, {\n                x: style.x || 0, y: style.y || 0,\n                width: 0, height: 0\n            }, this.getBoundingRect(), true);\n        }\n        else {\n            this.removeRectText(vmlRoot);\n        }\n    };\n\n    Text.prototype.onRemove = function (vmlRoot) {\n        this.removeRectText(vmlRoot);\n    };\n\n    Text.prototype.onAdd = function (vmlRoot) {\n        this.appendRectText(vmlRoot);\n    };\n}","/**\n * VML Painter.\n *\n * @module zrender/vml/Painter\n */\n\nimport zrLog from '../core/log';\nimport * as vmlCore from './core';\nimport {each} from '../core/util';\n\nfunction parseInt10(val) {\n    return parseInt(val, 10);\n}\n\n/**\n * @alias module:zrender/vml/Painter\n */\nfunction VMLPainter(root, storage) {\n\n    vmlCore.initVML();\n\n    this.root = root;\n\n    this.storage = storage;\n\n    var vmlViewport = document.createElement('div');\n\n    var vmlRoot = document.createElement('div');\n\n    vmlViewport.style.cssText = 'display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;';\n\n    vmlRoot.style.cssText = 'position:absolute;left:0;top:0;';\n\n    root.appendChild(vmlViewport);\n\n    this._vmlRoot = vmlRoot;\n    this._vmlViewport = vmlViewport;\n\n    this.resize();\n\n    // Modify storage\n    var oldDelFromStorage = storage.delFromStorage;\n    var oldAddToStorage = storage.addToStorage;\n    storage.delFromStorage = function (el) {\n        oldDelFromStorage.call(storage, el);\n\n        if (el) {\n            el.onRemove && el.onRemove(vmlRoot);\n        }\n    };\n\n    storage.addToStorage = function (el) {\n        // Displayable already has a vml node\n        el.onAdd && el.onAdd(vmlRoot);\n\n        oldAddToStorage.call(storage, el);\n    };\n\n    this._firstPaint = true;\n}\n\nVMLPainter.prototype = {\n\n    constructor: VMLPainter,\n\n    getType: function () {\n        return 'vml';\n    },\n\n    /**\n     * @return {HTMLDivElement}\n     */\n    getViewportRoot: function () {\n        return this._vmlViewport;\n    },\n\n    getViewportRootOffset: function () {\n        var 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     */\n    refresh: function () {\n\n        var list = this.storage.getDisplayList(true, true);\n\n        this._paintList(list);\n    },\n\n    _paintList: function (list) {\n        var vmlRoot = this._vmlRoot;\n        for (var i = 0; i < list.length; i++) {\n            var el = list[i];\n            if (el.invisible || el.ignore) {\n                if (!el.__alreadyNotVisible) {\n                    el.onRemove(vmlRoot);\n                }\n                // Set as already invisible\n                el.__alreadyNotVisible = true;\n            }\n            else {\n                if (el.__alreadyNotVisible) {\n                    el.onAdd(vmlRoot);\n                }\n                el.__alreadyNotVisible = false;\n                if (el.__dirty) {\n                    el.beforeBrush && el.beforeBrush();\n                    (el.brushVML || el.brush).call(el, vmlRoot);\n                    el.afterBrush && el.afterBrush();\n                }\n            }\n            el.__dirty = false;\n        }\n\n        if (this._firstPaint) {\n            // Detached from document at first time\n            // to avoid page refreshing too many times\n\n            // FIXME 如果每次都先 removeChild 可能会导致一些填充和描边的效果改变\n            this._vmlViewport.appendChild(vmlRoot);\n            this._firstPaint = false;\n        }\n    },\n\n    resize: function (width, height) {\n        var width = width == null ? this._getWidth() : width;\n        var height = height == null ? this._getHeight() : height;\n\n        if (this._width != width || this._height != height) {\n            this._width = width;\n            this._height = height;\n\n            var vmlViewportStyle = this._vmlViewport.style;\n            vmlViewportStyle.width = width + 'px';\n            vmlViewportStyle.height = height + 'px';\n        }\n    },\n\n    dispose: function () {\n        this.root.innerHTML = '';\n\n        this._vmlRoot =\n        this._vmlViewport =\n        this.storage = null;\n    },\n\n    getWidth: function () {\n        return this._width;\n    },\n\n    getHeight: function () {\n        return this._height;\n    },\n\n    clear: function () {\n        if (this._vmlViewport) {\n            this.root.removeChild(this._vmlViewport);\n        }\n    },\n\n    _getWidth: function () {\n        var root = this.root;\n        var stl = root.currentStyle;\n\n        return ((root.clientWidth || parseInt10(stl.width))\n                - parseInt10(stl.paddingLeft)\n                - parseInt10(stl.paddingRight)) | 0;\n    },\n\n    _getHeight: function () {\n        var root = this.root;\n        var stl = root.currentStyle;\n\n        return ((root.clientHeight || parseInt10(stl.height))\n                - parseInt10(stl.paddingTop)\n                - parseInt10(stl.paddingBottom)) | 0;\n    }\n};\n\n// Not supported methods\nfunction createMethodNotSupport(method) {\n    return function () {\n        zrLog('In IE8.0 VML mode painter not support method \"' + method + '\"');\n    };\n}\n\n// Unsupported methods\neach([\n    'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers',\n    'modLayer', 'delLayer', 'clearLayer', 'toDataURL', 'pathToImage'\n], function (name) {\n    VMLPainter.prototype[name] = createMethodNotSupport(name);\n});\n\nexport default VMLPainter;","import './graphic';\nimport {registerPainter} from '../zrender';\nimport Painter from './Painter';\n\nregisterPainter('vml', Painter);"],"names":["clone","util.each","vec2.dist","util.mixin","ArrayCtor","create","copy","mul","scale","matrix.identity","matrix.create","matrix.mul","matrix.copy","matrix.invert","vector.applyTransform","matrix.scale","matrix.rotate","easing","easingFuncs","lerp","color.parse","log","zrUtil.isObject","zrUtil.mixin","vec2.applyTransform","matrix.translate","zrUtil.indexOf","zrUtil.inherits","env","timsort","util.indexOf","util.createCanvas","util.isObject","methods","$override","imageHelper.findExistImage","imageHelper.isImageReady","textContain.makeFont","textContain.DEFAULT_FONT","textContain.parsePlainText","textContain.adjustTextY","textContain.getWidth","textContain.adjustTextX","textContain.parseRichText","roundRectHelper.buildPath","imageHelper.createOrUpdateImage","textContain.adjustTextPositionOnRect","tmpRect","textHelper.normalizeTextStyle","textHelper.needDrawText","textHelper.renderText","util.extend","util.merge","Image","Dispatcher","eventUtil.clientToLocal","dist","zrUtil.map","zrUtil.each","zrUtil.bind","HandlerProxy","mathSqrt","EPSILON","v2Create","isNotAroundZero","v2DistSquare","mathMin","mathMax","mathSin","mathCos","vec2.create","min","max","cubicExtrema","curve.cubicExtrema","cubicAt","curve.cubicAt","quadraticExtremum","curve.quadraticExtremum","quadraticAt","curve.quadraticAt","vec2.min","vec2.max","dpr","len","bbox.fromLine","bbox.fromCubic","bbox.fromQuadratic","bbox.fromArc","containStroke","curve.cubicProjectPoint","PI2","CMD","curve.cubicRootAt","curve.quadraticRootAt","line.containStroke","cubic.containStroke","quadratic.containStroke","arc.containStroke","pathContain.containStroke","pathContain.contain","defaults","v2ApplyTransform","textContain.getBoundingRect","textHelper.getStroke","Displayble","vec2.normalize","PI","distance","v2Distance","v2Min","v2Max","v2Clone","v2Sub","v2Scale","v2Add","buildPath","polyHelper.buildPath","sin","cos","isAroundZero","rotate","ZText","parseInt10","arrayDiff","Painter","abs","append","remove","parsePercent","colorTool.parse","length","vmlCore.createNode","points","pathDataToString","vmlCore.doc","textContain.$override","doc","createNode","i","vmlCore.initVML","createMethodNotSupport"],"mappings":"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"}