| /*! | 
| * ZRender, a high performance 2d drawing library. | 
| * | 
| * Copyright (c) 2013, Baidu Inc. | 
| * All rights reserved. | 
| * | 
| * LICENSE | 
| * https://github.com/ecomfe/zrender/blob/master/LICENSE.txt | 
| */ | 
| import env from './core/env.js'; | 
| import * as zrUtil from './core/util.js'; | 
| import Handler from './Handler.js'; | 
| import Storage from './Storage.js'; | 
| import Animation, { getTime } from './animation/Animation.js'; | 
| import HandlerProxy from './dom/HandlerProxy.js'; | 
| import { lum } from './tool/color.js'; | 
| import { DARK_MODE_THRESHOLD } from './config.js'; | 
| import Group from './graphic/Group.js'; | 
| var painterCtors = {}; | 
| var instances = {}; | 
| function delInstance(id) { | 
|     delete instances[id]; | 
| } | 
| function isDarkMode(backgroundColor) { | 
|     if (!backgroundColor) { | 
|         return false; | 
|     } | 
|     if (typeof backgroundColor === 'string') { | 
|         return lum(backgroundColor, 1) < DARK_MODE_THRESHOLD; | 
|     } | 
|     else if (backgroundColor.colorStops) { | 
|         var colorStops = backgroundColor.colorStops; | 
|         var totalLum = 0; | 
|         var len = colorStops.length; | 
|         for (var i = 0; i < len; i++) { | 
|             totalLum += lum(colorStops[i].color, 1); | 
|         } | 
|         totalLum /= len; | 
|         return totalLum < DARK_MODE_THRESHOLD; | 
|     } | 
|     return false; | 
| } | 
| var ZRender = (function () { | 
|     function ZRender(id, dom, opts) { | 
|         var _this = this; | 
|         this._sleepAfterStill = 10; | 
|         this._stillFrameAccum = 0; | 
|         this._needsRefresh = true; | 
|         this._needsRefreshHover = true; | 
|         this._darkMode = false; | 
|         opts = opts || {}; | 
|         this.dom = dom; | 
|         this.id = id; | 
|         var storage = new Storage(); | 
|         var rendererType = opts.renderer || 'canvas'; | 
|         if (!painterCtors[rendererType]) { | 
|             rendererType = zrUtil.keys(painterCtors)[0]; | 
|         } | 
|         if (process.env.NODE_ENV !== 'production') { | 
|             if (!painterCtors[rendererType]) { | 
|                 throw new Error("Renderer '" + rendererType + "' is not imported. Please import it first."); | 
|             } | 
|         } | 
|         opts.useDirtyRect = opts.useDirtyRect == null | 
|             ? false | 
|             : opts.useDirtyRect; | 
|         var painter = new painterCtors[rendererType](dom, storage, opts, id); | 
|         var ssrMode = opts.ssr || painter.ssrOnly; | 
|         this.storage = storage; | 
|         this.painter = painter; | 
|         var handlerProxy = (!env.node && !env.worker && !ssrMode) | 
|             ? new HandlerProxy(painter.getViewportRoot(), painter.root) | 
|             : null; | 
|         var useCoarsePointer = opts.useCoarsePointer; | 
|         var usePointerSize = (useCoarsePointer == null || useCoarsePointer === 'auto') | 
|             ? env.touchEventsSupported | 
|             : !!useCoarsePointer; | 
|         var defaultPointerSize = 44; | 
|         var pointerSize; | 
|         if (usePointerSize) { | 
|             pointerSize = zrUtil.retrieve2(opts.pointerSize, defaultPointerSize); | 
|         } | 
|         this.handler = new Handler(storage, painter, handlerProxy, painter.root, pointerSize); | 
|         this.animation = new Animation({ | 
|             stage: { | 
|                 update: ssrMode ? null : function () { return _this._flush(true); } | 
|             } | 
|         }); | 
|         if (!ssrMode) { | 
|             this.animation.start(); | 
|         } | 
|     } | 
|     ZRender.prototype.add = function (el) { | 
|         if (this._disposed || !el) { | 
|             return; | 
|         } | 
|         this.storage.addRoot(el); | 
|         el.addSelfToZr(this); | 
|         this.refresh(); | 
|     }; | 
|     ZRender.prototype.remove = function (el) { | 
|         if (this._disposed || !el) { | 
|             return; | 
|         } | 
|         this.storage.delRoot(el); | 
|         el.removeSelfFromZr(this); | 
|         this.refresh(); | 
|     }; | 
|     ZRender.prototype.configLayer = function (zLevel, config) { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         if (this.painter.configLayer) { | 
|             this.painter.configLayer(zLevel, config); | 
|         } | 
|         this.refresh(); | 
|     }; | 
|     ZRender.prototype.setBackgroundColor = function (backgroundColor) { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         if (this.painter.setBackgroundColor) { | 
|             this.painter.setBackgroundColor(backgroundColor); | 
|         } | 
|         this.refresh(); | 
|         this._backgroundColor = backgroundColor; | 
|         this._darkMode = isDarkMode(backgroundColor); | 
|     }; | 
|     ZRender.prototype.getBackgroundColor = function () { | 
|         return this._backgroundColor; | 
|     }; | 
|     ZRender.prototype.setDarkMode = function (darkMode) { | 
|         this._darkMode = darkMode; | 
|     }; | 
|     ZRender.prototype.isDarkMode = function () { | 
|         return this._darkMode; | 
|     }; | 
|     ZRender.prototype.refreshImmediately = function (fromInside) { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         if (!fromInside) { | 
|             this.animation.update(true); | 
|         } | 
|         this._needsRefresh = false; | 
|         this.painter.refresh(); | 
|         this._needsRefresh = false; | 
|     }; | 
|     ZRender.prototype.refresh = function () { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         this._needsRefresh = true; | 
|         this.animation.start(); | 
|     }; | 
|     ZRender.prototype.flush = function () { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         this._flush(false); | 
|     }; | 
|     ZRender.prototype._flush = function (fromInside) { | 
|         var triggerRendered; | 
|         var start = getTime(); | 
|         if (this._needsRefresh) { | 
|             triggerRendered = true; | 
|             this.refreshImmediately(fromInside); | 
|         } | 
|         if (this._needsRefreshHover) { | 
|             triggerRendered = true; | 
|             this.refreshHoverImmediately(); | 
|         } | 
|         var end = getTime(); | 
|         if (triggerRendered) { | 
|             this._stillFrameAccum = 0; | 
|             this.trigger('rendered', { | 
|                 elapsedTime: end - start | 
|             }); | 
|         } | 
|         else if (this._sleepAfterStill > 0) { | 
|             this._stillFrameAccum++; | 
|             if (this._stillFrameAccum > this._sleepAfterStill) { | 
|                 this.animation.stop(); | 
|             } | 
|         } | 
|     }; | 
|     ZRender.prototype.setSleepAfterStill = function (stillFramesCount) { | 
|         this._sleepAfterStill = stillFramesCount; | 
|     }; | 
|     ZRender.prototype.wakeUp = function () { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         this.animation.start(); | 
|         this._stillFrameAccum = 0; | 
|     }; | 
|     ZRender.prototype.refreshHover = function () { | 
|         this._needsRefreshHover = true; | 
|     }; | 
|     ZRender.prototype.refreshHoverImmediately = function () { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         this._needsRefreshHover = false; | 
|         if (this.painter.refreshHover && this.painter.getType() === 'canvas') { | 
|             this.painter.refreshHover(); | 
|         } | 
|     }; | 
|     ZRender.prototype.resize = function (opts) { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         opts = opts || {}; | 
|         this.painter.resize(opts.width, opts.height); | 
|         this.handler.resize(); | 
|     }; | 
|     ZRender.prototype.clearAnimation = function () { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         this.animation.clear(); | 
|     }; | 
|     ZRender.prototype.getWidth = function () { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         return this.painter.getWidth(); | 
|     }; | 
|     ZRender.prototype.getHeight = function () { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         return this.painter.getHeight(); | 
|     }; | 
|     ZRender.prototype.setCursorStyle = function (cursorStyle) { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         this.handler.setCursorStyle(cursorStyle); | 
|     }; | 
|     ZRender.prototype.findHover = function (x, y) { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         return this.handler.findHover(x, y); | 
|     }; | 
|     ZRender.prototype.on = function (eventName, eventHandler, context) { | 
|         if (!this._disposed) { | 
|             this.handler.on(eventName, eventHandler, context); | 
|         } | 
|         return this; | 
|     }; | 
|     ZRender.prototype.off = function (eventName, eventHandler) { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         this.handler.off(eventName, eventHandler); | 
|     }; | 
|     ZRender.prototype.trigger = function (eventName, event) { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         this.handler.trigger(eventName, event); | 
|     }; | 
|     ZRender.prototype.clear = function () { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         var roots = this.storage.getRoots(); | 
|         for (var i = 0; i < roots.length; i++) { | 
|             if (roots[i] instanceof Group) { | 
|                 roots[i].removeSelfFromZr(this); | 
|             } | 
|         } | 
|         this.storage.delAllRoots(); | 
|         this.painter.clear(); | 
|     }; | 
|     ZRender.prototype.dispose = function () { | 
|         if (this._disposed) { | 
|             return; | 
|         } | 
|         this.animation.stop(); | 
|         this.clear(); | 
|         this.storage.dispose(); | 
|         this.painter.dispose(); | 
|         this.handler.dispose(); | 
|         this.animation = | 
|             this.storage = | 
|                 this.painter = | 
|                     this.handler = null; | 
|         this._disposed = true; | 
|         delInstance(this.id); | 
|     }; | 
|     return ZRender; | 
| }()); | 
| export function init(dom, opts) { | 
|     var zr = new ZRender(zrUtil.guid(), dom, opts); | 
|     instances[zr.id] = zr; | 
|     return zr; | 
| } | 
| export function dispose(zr) { | 
|     zr.dispose(); | 
| } | 
| export function disposeAll() { | 
|     for (var key in instances) { | 
|         if (instances.hasOwnProperty(key)) { | 
|             instances[key].dispose(); | 
|         } | 
|     } | 
|     instances = {}; | 
| } | 
| export function getInstance(id) { | 
|     return instances[id]; | 
| } | 
| export function registerPainter(name, Ctor) { | 
|     painterCtors[name] = Ctor; | 
| } | 
| var ssrDataGetter; | 
| export function getElementSSRData(el) { | 
|     if (typeof ssrDataGetter === 'function') { | 
|         return ssrDataGetter(el); | 
|     } | 
| } | 
| export function registerSSRDataGetter(getter) { | 
|     ssrDataGetter = getter; | 
| } | 
| export var version = '5.6.1'; | 
| ; |